Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp498809pxx; Wed, 28 Oct 2020 09:41:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxApwu8SXLuJNW54cLbaqzR44Pv41mRpWl/bxAb0z1t5V/yvdJeKapXoLbQ7pAXxH7lsUCG X-Received: by 2002:a50:cfcd:: with SMTP id i13mr8447009edk.275.1603903303633; Wed, 28 Oct 2020 09:41:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603903303; cv=none; d=google.com; s=arc-20160816; b=pBxDIWZrCDA7Y3PhL9ggPI/jomMp7cQvZfcPrztZHjv6UAaox8rVhgnqKfcDa9uN4q k4anFbHkTXU+G76aUfC6ay4tl2ZlbSUXTSv40PlXcCrJLU4PlZcyJ9Mas+0VRqIcztyd aPcAhqPPxRVxXZNH7hEG8ih+ZHoVTCYR0KlMFIZkYGT4tZMwd8KF+nrnaCxzrI+HyV0k EKo/6ARYBPrFo0b+agxIxSAFlsyjVsPOX0WJxl4RvO7o9J+ULf37W78yMlDP9SB9AT0Z w1K6e3ivPQJDJpKtqcQ6lPER8hTwJpz7YrJZmsv+EqNmWP0izruAVBCayG+cXzOBtCry J1Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ygv6OxBV1XF/07+B1hknXnon/13uAlHRkhqFJFNs4PE=; b=w0zy1RWEmhXMaEj7T4ibxemX6Bz2CJqfIlKnEUDuuxFSDEaTAmSY0oa0wDBTG0GFLS +VV/t44JoCUNHUflQYZsqS3GIOd4nUPXXPCwOff8CgWjaXQ4/UCB0etT2KVg0WBbErrN e2YgWiwtLk1j3Pl9+ywySU0ZhsKCqvFL+0L7OB4Y1sUOm8IYVoDG/Lbc79bISngWZvr9 C74+Lxtjr/3gChqXkuGxckC8pYf9u+g8Uxhf39fa1VDazr9vIu18gq4GSdfZxcf2z8Cl gYxsKB7VLG2uct8qKKNd249wLaoqQpYQKa/xKdBypAtrTwXww7/erw4bZS37wlJ+VOex 8bLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Ff5XOa1g; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h13si2268edr.541.2020.10.28.09.41.20; Wed, 28 Oct 2020 09:41:43 -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=Ff5XOa1g; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1818217AbgJ0RSQ (ORCPT + 99 others); Tue, 27 Oct 2020 13:18:16 -0400 Received: from mail.kernel.org ([198.145.29.99]:56516 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752546AbgJ0Oz4 (ORCPT ); Tue, 27 Oct 2020 10:55:56 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 3254822281; Tue, 27 Oct 2020 14:55:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1603810555; bh=iKwuqUxTdA+/O7yct0YnKnqBNWfc0YsfQK3RyIXI6H4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ff5XOa1goSwjqPwlZSUxCYaSgTbh6ayp+b1LaeUPNMIy/uvKj/5Vwhs68lKxXKXqG 1NApRO8cXjUCAKsLdUFnKkQ9Uz+aAYGp8WhBTp9tBCgSm3vDf/0I17KheVYDRSiuML Fky1TRMS/ZGWi5BaG9fER3m6btefRo1wm6pmRMVc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Serge Semin , Guenter Roeck , Sasha Levin Subject: [PATCH 5.8 149/633] hwmon: (bt1-pvt) Test sensor power supply on probe Date: Tue, 27 Oct 2020 14:48:12 +0100 Message-Id: <20201027135529.690816591@linuxfoundation.org> X-Mailer: git-send-email 2.29.1 In-Reply-To: <20201027135522.655719020@linuxfoundation.org> References: <20201027135522.655719020@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Serge Semin [ Upstream commit a6db1561291fc0f2f9aa23bf38f381adc63e7b14 ] Baikal-T1 PVT sensor has got a dedicated power supply domain (feed up by the external GPVT/VPVT_18 pins). In case if it isn't powered up, the registers will be accessible, but the sensor conversion just won't happen. Due to that an attempt to read data from any PVT sensor will cause the task hanging up. For instance that will happen if XP11 jumper isn't installed on the Baikal-T1-based BFK3.1 board. Let's at least test whether the conversion work on the device probe procedure. By doing so will make sure that the PVT sensor is powered up at least at boot time. Fixes: 87976ce2825d ("hwmon: Add Baikal-T1 PVT sensor driver") Signed-off-by: Serge Semin Link: https://lore.kernel.org/r/20200920110924.19741-2-Sergey.Semin@baikalelectronics.ru Signed-off-by: Guenter Roeck Signed-off-by: Sasha Levin --- drivers/hwmon/bt1-pvt.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/drivers/hwmon/bt1-pvt.c b/drivers/hwmon/bt1-pvt.c index 94698cae04971..f4b7353c078a8 100644 --- a/drivers/hwmon/bt1-pvt.c +++ b/drivers/hwmon/bt1-pvt.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -982,6 +983,41 @@ static int pvt_request_clks(struct pvt_hwmon *pvt) return 0; } +static int pvt_check_pwr(struct pvt_hwmon *pvt) +{ + unsigned long tout; + int ret = 0; + u32 data; + + /* + * Test out the sensor conversion functionality. If it is not done on + * time then the domain must have been unpowered and we won't be able + * to use the device later in this driver. + * Note If the power source is lost during the normal driver work the + * data read procedure will either return -ETIMEDOUT (for the + * alarm-less driver configuration) or just stop the repeated + * conversion. In the later case alas we won't be able to detect the + * problem. + */ + pvt_update(pvt->regs + PVT_INTR_MASK, PVT_INTR_ALL, PVT_INTR_ALL); + pvt_update(pvt->regs + PVT_CTRL, PVT_CTRL_EN, PVT_CTRL_EN); + pvt_set_tout(pvt, 0); + readl(pvt->regs + PVT_DATA); + + tout = PVT_TOUT_MIN / NSEC_PER_USEC; + usleep_range(tout, 2 * tout); + + data = readl(pvt->regs + PVT_DATA); + if (!(data & PVT_DATA_VALID)) { + ret = -ENODEV; + dev_err(pvt->dev, "Sensor is powered down\n"); + } + + pvt_update(pvt->regs + PVT_CTRL, PVT_CTRL_EN, 0); + + return ret; +} + static void pvt_init_iface(struct pvt_hwmon *pvt) { u32 trim, temp; @@ -1109,6 +1145,10 @@ static int pvt_probe(struct platform_device *pdev) if (ret) return ret; + ret = pvt_check_pwr(pvt); + if (ret) + return ret; + pvt_init_iface(pvt); ret = pvt_request_irq(pvt); -- 2.25.1