Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4455109ybz; Tue, 28 Apr 2020 11:34:55 -0700 (PDT) X-Google-Smtp-Source: APiQypJFczbQUaBJ/HPQCqAYLlbnJ8PqMzNkcyS5DRJjpWbElRFrN2gHtc98gBlzQE7fm2F9O+Wg X-Received: by 2002:a17:906:1603:: with SMTP id m3mr26615565ejd.205.1588098895269; Tue, 28 Apr 2020 11:34:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588098895; cv=none; d=google.com; s=arc-20160816; b=rDi0Rdz49RPNz7f7OXSb+v2TkDYh2rdu+h6kNaD9xr6C95LRjMNirxFjzVXudBFqfc Wc5th4U+PoHdMnvhGeNwJthWh71G5uNeLd2111nTNvsfT39O4Pxs6fBnRTREpXUO8NEr PI6z+mksPkDBno6/hc/yc25oY62N8x7Xcf2sObALjYxa5xauYgTp0U5o8Cs5IQ6Yi1KU YaqtbK556GfmvgeqB8ljiLkUup6+ERbU/Bl32DIKEWeb5VeP1jl1tya9rwqUr1GC5TIf +Cgh5ivi9bGH47uNEwTxWKfYbOFH+qpZX1J9qcYOIt2jJK7EhTX97uJ31OUmWeeo/GaT t20w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Ti9eJ6WI3rfmeASGVj1VaM10mrVOMYmAHFYCqB4Z9jU=; b=TB3trdCmk7Co0iA5b9IeggKEdHpkJOS6Rc/Lv2EDwuGTK1rL7ZO4YFd4/fjQjQHovB E/zC8+gQhdQgTejquKjsnxibZrPMcAztY7f62ZXu2CY4I0IrbsRPDCMvx7IiPA1vfApo 3T9OPvT2Y2Fu+cmLMAfpiqSWdRcHfFS4xjsZhlxV9hI6wRcRmqfaKtFgJ/OeGJS5KUSc zHqEEujfoSxkSeR9vXb5cOHPpt1PpepzGQcBXqyE/iHJ/G5j9sPyP3Ddf9PefDHsStmP xtBngM9y4Zgn34bTpCJbMOOGbenfyJqC0I0LCdIGrjgqhRtKB4Z1d1+wHm+A0EO+xZQu 7ZlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=h0Sgfx72; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z1si2166811edp.481.2020.04.28.11.34.31; Tue, 28 Apr 2020 11:34:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=h0Sgfx72; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729442AbgD1SaB (ORCPT + 99 others); Tue, 28 Apr 2020 14:30:01 -0400 Received: from mail.kernel.org ([198.145.29.99]:44124 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729438AbgD1S36 (ORCPT ); Tue, 28 Apr 2020 14:29:58 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2BDDC208E0; Tue, 28 Apr 2020 18:29:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588098597; bh=0hifaQ70lRgCF0KppeNRWFQqEOv1Xs9uccMIclWC6eo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h0Sgfx7223I8w78xfrhJ6oM5yfeBzE0xFnRi9lZIoDOeMevTmVnAJkoVYHKMXGvcS 8f9EgGGr2tKnJcdOq56jIraSQHwDEhQWQX4BXXj5pv2HKj/isEIKPMEY140mbgrrmQ hX/Hz55iwGIiedfRaiTZnqdTKFEp3mP6iCHnkVIQ= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mario Tesi , Lorenzo Bianconi , Vitor Soares , Stable@vger.kernel.org, Jonathan Cameron Subject: [PATCH 5.6 082/167] iio: imu: st_lsm6dsx: flush hw FIFO before resetting the device Date: Tue, 28 Apr 2020 20:24:18 +0200 Message-Id: <20200428182235.365728512@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200428182225.451225420@linuxfoundation.org> References: <20200428182225.451225420@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Lorenzo Bianconi commit 3a63da26db0a864134f023f088d41deacd509997 upstream. flush hw FIFO before device reset in order to avoid possible races on interrupt line 1. If the first interrupt line is asserted during hw reset the device will work in I3C-only mode (if it is supported) Fixes: 801a6e0af0c6 ("iio: imu: st_lsm6dsx: add support to LSM6DSO") Fixes: 43901008fde0 ("iio: imu: st_lsm6dsx: add support to LSM6DSR") Reported-by: Mario Tesi Signed-off-by: Lorenzo Bianconi Reviewed-by: Vitor Soares Tested-by: Vitor Soares Cc: Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman --- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c @@ -2036,11 +2036,21 @@ static int st_lsm6dsx_init_hw_timer(stru return 0; } -static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) +static int st_lsm6dsx_reset_device(struct st_lsm6dsx_hw *hw) { const struct st_lsm6dsx_reg *reg; int err; + /* + * flush hw FIFO before device reset in order to avoid + * possible races on interrupt line 1. If the first interrupt + * line is asserted during hw reset the device will work in + * I3C-only mode (if it is supported) + */ + err = st_lsm6dsx_flush_fifo(hw); + if (err < 0 && err != -ENOTSUPP) + return err; + /* device sw reset */ reg = &hw->settings->reset; err = regmap_update_bits(hw->regmap, reg->addr, reg->mask, @@ -2059,6 +2069,18 @@ static int st_lsm6dsx_init_device(struct msleep(50); + return 0; +} + +static int st_lsm6dsx_init_device(struct st_lsm6dsx_hw *hw) +{ + const struct st_lsm6dsx_reg *reg; + int err; + + err = st_lsm6dsx_reset_device(hw); + if (err < 0) + return err; + /* enable Block Data Update */ reg = &hw->settings->bdu; err = regmap_update_bits(hw->regmap, reg->addr, reg->mask,