From nobody Mon Sep 15 21:07:21 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3EF86C54EBE for ; Mon, 9 Jan 2023 23:36:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237743AbjAIXgE (ORCPT ); Mon, 9 Jan 2023 18:36:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58374 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235432AbjAIXf6 (ORCPT ); Mon, 9 Jan 2023 18:35:58 -0500 Received: from mail-qv1-xf2d.google.com (mail-qv1-xf2d.google.com [IPv6:2607:f8b0:4864:20::f2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35FCA6442 for ; Mon, 9 Jan 2023 15:35:57 -0800 (PST) Received: by mail-qv1-xf2d.google.com with SMTP id p17so7471181qvn.1 for ; Mon, 09 Jan 2023 15:35:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=criticallink.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gWfOKCoKa6fVAUu6wQ1ieIdGSmrl8W8A2HgAxf0hwpE=; b=bvtIZBszxda3SApy+Vt245BDingr6VZTIE0uCE8ugMrSsv+pvqEUruYgswQfXSdXNC VAmuqsJCdrrXukhir+jfqy8l19M5PrfFk69mRqg9raoPIPug6x1o6cRVtZeAcf/lOLoW 7Cgg+TicuwJrkCt5Sqy5P5530IM+waDzfGZ1yMxP1Bhq+TjdXyNkEBDiPUXqqJtq5za/ 5ax6j0+xghsb2p/NVTdAbJPQrBnzzSRRzhpfdWhVDR20+0j0LFf7xuI7fjcJsyYZBgAd stdkfOLeBElQnrxjBCk5Qbkot5Uojaw2N8f1rxRdMveNL9PTyrPQK8hy1aaRoLP9lGgp EuWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gWfOKCoKa6fVAUu6wQ1ieIdGSmrl8W8A2HgAxf0hwpE=; b=XisB/2FSjLlRiIjA30/Bo2FX8FwVVTU+tVlVfRqw2O4EEmBmDB8Zb5MBZ0H8y+95Hq rT2SJRFrsO2Cha4FK4qkD1BYZjREPsdhX5/agRj0mN7A8MY3ntPHxni4XKiB5MCh03Jj PtEHCIgeYdZv/b3RFvCCNHtxluBwUbPUQNxrRjbRFXScSwI+8kgjN2/XAN2oHxq5PwX8 U8+JHL9vK7e0DePFfHPMAw6eL0PhDIf1w9MKiVK2QQTBe2zPzmcP68cYUXFsSUGqA91j z1X2A4sa7BI0NOpsK0v5IWLKuQl+mAOX3rjNeyMsrkSiAG9S/x2bFQA2go7myL7sldGo fxqg== X-Gm-Message-State: AFqh2kpqCr5q0ZcTstF1dgWCUBOk5IcW7PSdcOZEL7LqFvnVm01LrRrN PAhmxnVC9eb5PeIQNa8OE6JaBA== X-Google-Smtp-Source: AMrXdXs/rF2/7d4tbX4eiwWCEqNoi1JKKTU7hd5nGyVo6/fHYoOLbHXFadfBW4oZivtIGTPI+Nn6wQ== X-Received: by 2002:a05:6214:c6c:b0:50e:48cc:a95a with SMTP id t12-20020a0562140c6c00b0050e48cca95amr123111751qvj.43.1673307356280; Mon, 09 Jan 2023 15:35:56 -0800 (PST) Received: from jcormier-MS-7A93.syr.criticallink.com (static-72-90-70-109.syrcny.fios.verizon.net. [72.90.70.109]) by smtp.gmail.com with ESMTPSA id t5-20020a05620a450500b006fa8299b4d5sm6294846qkp.100.2023.01.09.15.35.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jan 2023 15:35:55 -0800 (PST) From: Jonathan Cormier To: linux-hwmon@vger.kernel.org Cc: Jonathan Cormier , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , John Pruitt Subject: [PATCH v3 1/5] dt-bindings: hwmon: adi,ltc2945: Add binding Date: Mon, 9 Jan 2023 18:35:30 -0500 Message-Id: <20230109233534.1932370-2-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109233534.1932370-1-jcormier@criticallink.com> References: <20221214220727.1350784-3-jcormier@criticallink.com> <20230109233534.1932370-1-jcormier@criticallink.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Create initial binding for the LTC2945 I2C power monitor. Add shunt-resistor-micro-ohms parameter Signed-off-by: Jonathan Cormier Reviewed-by: Krzysztof Kozlowski --- .../bindings/hwmon/adi,ltc2945.yaml | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml diff --git a/Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml b/Doc= umentation/devicetree/bindings/hwmon/adi,ltc2945.yaml new file mode 100644 index 000000000000..5cb66e97e816 --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/hwmon/adi,ltc2945.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Analog Devices LTC2945 wide range i2c power monitor + +maintainers: + - Guenter Roeck + +description: | + Analog Devices LTC2945 wide range i2c power monitor over I2C. + + https://www.analog.com/media/en/technical-documentation/data-sheets/LTC2= 945.pdf + +properties: + compatible: + enum: + - adi,ltc2945 + + reg: + maxItems: 1 + + shunt-resistor-micro-ohms: + description: + Shunt resistor value in micro-Ohms + default: 1000 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + power-monitor@6e { + compatible =3D "adi,ltc2945"; + reg =3D <0x6e>; + /* 10 milli-Ohm shunt resistor */ + shunt-resistor-micro-ohms =3D <10000>; + }; + }; +... --=20 2.25.1 From nobody Mon Sep 15 21:07:21 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02A53C5479D for ; Mon, 9 Jan 2023 23:36:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235454AbjAIXgP (ORCPT ); Mon, 9 Jan 2023 18:36:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58376 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237780AbjAIXgB (ORCPT ); Mon, 9 Jan 2023 18:36:01 -0500 Received: from mail-qt1-x836.google.com (mail-qt1-x836.google.com [IPv6:2607:f8b0:4864:20::836]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5CB37CE38 for ; Mon, 9 Jan 2023 15:35:58 -0800 (PST) Received: by mail-qt1-x836.google.com with SMTP id h26so9585102qtu.2 for ; Mon, 09 Jan 2023 15:35:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=criticallink.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=foqffIKuz799F5wyGtIM3OCFdqRESGZUJXSmZJH7pvM=; b=LW23jYdpmTZPKAu1WNAQKdJrg5k7NJiFihuZiyYCDKpFVyPTxoX3R+4j2E/8C20sGz DdPxbKkkaAXqsaLfqLHBFijQTc6CYz4U5GpoJYjEsTG2PZKxaVtq3Tso9AiBDCHhXqV5 dq4q63L+CIGkpvTwRe98VF3jzL3qibGsXp6E2Bp4lvs5DB1lIG6ZTjSP4pDpVhX8L2nC L4XNW6VIMQsR9lcNlSxeJmkqwFkxnsgA5AbemvE2r/Ld4N8ubsHn0FDVZDZH2dK/oHJo FkzrdomLx36tBU+wDHxCLM7SJc/fIRMyhdh9dXD9cnbf7gFtv7nAktBx0YFhFZvEsrXs A5GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=foqffIKuz799F5wyGtIM3OCFdqRESGZUJXSmZJH7pvM=; b=EbKnZ7jj9nD++5/3/ZbMnpp9fknE7IuZhoWDm0RBLx3ah0Thl9xtApOH514QpPZ6vL eIpfErqRemgJ49p3RC9QdnRK6S/8mYnIIfq8FqAykkITkKHABIxufNguXl4+kgcm+tY1 IjbBUKiEWYj/8lqZPo/ii01iHtCuPHE1S3DQuytgbLIQQVIuCFLJo5AlHdde/1+cklOL MlW9zJ3byWEi/wW7lIcIGYq9hYcr5hOWasrIvB3z+l/HgU9AY7Nht3O6QCKo8UrGeG3u ZQWA0nLQbr2HhD8KDS13SDtvovvOZIe+uLsDyNmAByunbyKCoaVURkLQ9b1YaTkmyG0r PH3A== X-Gm-Message-State: AFqh2kptqguVxRZTcTtpE0R5Kwl/LBpF5VT3noUGeSYY+Y1z8egx6qJf YAMxVk0ujiqz3X/cA/nNa1RECg== X-Google-Smtp-Source: AMrXdXuKBe+/Uuajz3rIj6IYkFaqoY4JPMU3uJI0uiqlFZFfgymDjbD1lQMih2c4XDNjXaLumE2glQ== X-Received: by 2002:ac8:5557:0:b0:3ab:5b6d:1add with SMTP id o23-20020ac85557000000b003ab5b6d1addmr99038370qtr.66.1673307357915; Mon, 09 Jan 2023 15:35:57 -0800 (PST) Received: from jcormier-MS-7A93.syr.criticallink.com (static-72-90-70-109.syrcny.fios.verizon.net. [72.90.70.109]) by smtp.gmail.com with ESMTPSA id t5-20020a05620a450500b006fa8299b4d5sm6294846qkp.100.2023.01.09.15.35.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jan 2023 15:35:57 -0800 (PST) From: Jonathan Cormier To: linux-hwmon@vger.kernel.org Cc: Jonathan Cormier , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , John Pruitt Subject: [PATCH v3 2/5] hwmon: ltc2945: Add devicetree match table Date: Mon, 9 Jan 2023 18:35:31 -0500 Message-Id: <20230109233534.1932370-3-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109233534.1932370-1-jcormier@criticallink.com> References: <20221214220727.1350784-3-jcormier@criticallink.com> <20230109233534.1932370-1-jcormier@criticallink.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add adi,ltc2945 compatible Signed-off-by: Jonathan Cormier --- drivers/hwmon/ltc2945.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c index 9adebb59f604..9af3e3821152 100644 --- a/drivers/hwmon/ltc2945.c +++ b/drivers/hwmon/ltc2945.c @@ -58,6 +58,12 @@ #define CONTROL_MULT_SELECT (1 << 0) #define CONTROL_TEST_MODE (1 << 4) =20 +static const struct of_device_id __maybe_unused ltc2945_of_match[] =3D { + { .compatible =3D "adi,ltc2945" }, + { } +}; +MODULE_DEVICE_TABLE(of, ltc2945_of_match); + static inline bool is_power_reg(u8 reg) { return reg < LTC2945_SENSE_H; @@ -475,8 +481,9 @@ MODULE_DEVICE_TABLE(i2c, ltc2945_id); =20 static struct i2c_driver ltc2945_driver =3D { .driver =3D { - .name =3D "ltc2945", - }, + .name =3D "ltc2945", + .of_match_table =3D of_match_ptr(ltc2945_of_match), + }, .probe_new =3D ltc2945_probe, .id_table =3D ltc2945_id, }; --=20 2.25.1 From nobody Mon Sep 15 21:07:21 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 721AFC54EBD for ; Mon, 9 Jan 2023 23:36:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237894AbjAIXgJ (ORCPT ); Mon, 9 Jan 2023 18:36:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58512 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237851AbjAIXgD (ORCPT ); Mon, 9 Jan 2023 18:36:03 -0500 Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C51F10A9 for ; Mon, 9 Jan 2023 15:36:00 -0800 (PST) Received: by mail-qt1-x82b.google.com with SMTP id h26so9585159qtu.2 for ; Mon, 09 Jan 2023 15:36:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=criticallink.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Omc6RJb75WehF9fTbabhEnE5DcQvC42CI90e1s9PLrk=; b=siN7GujK+FUeCr1O9CoGS68J8NCUuh891jd428rzwVirnNPB7oC2DlSjmTSm8qIabm 4Kr2rS3D0QyFDcK+DybptVP8qF4AHpoXkE9+xX6TGlOz2M3kfVOJIYjkiWOycG1WhD7d 3++yAlvgrHbibGcQWIOQex/6Avqplc+Gi3n9Z88jNWozj45nCH9Wk0hIxyknVDmJu8WW Qg1oCYk/7P/Z6uo5vbhiiZ0XV0L4pIguflN4qPbqMjo+/kmDFOemsJVQSbnlnXgyk/Rb eIY26LrBkunXiEPKVeky1t+vm87yTROF5QClgnYHZOtGnzXkgkxfXblMnAu/7KCEJQWO JNNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Omc6RJb75WehF9fTbabhEnE5DcQvC42CI90e1s9PLrk=; b=0FvGFJshcv/j0JN7HXCxDm5qLLt6+a0AT05l6OdgiD7S2r7I8S9zWbFItCITBrsbyT IU5uqoSf/FWGVCfzcjcoF2CK5GLBzie18LAQGbyNx8cLiObPw5oFgFbiQqWuM7krYouh gGBOVisG7pXl4AKqsqtLQGWqUFbe5HMR8uFNJckQiQGe0oK/K0DPiC4aiaLODWS2Uiul iXr9c4WbZSzzQQ1L8u4qYIEZljk83GznGRSqaeJVgWhJoKftjZBq+SqHkZ8RqGy1Y4Bm M6c92XzhuA59JLM30Z+AUbrTogXoChwW35g/oiz/Xi2Oj4PU76Av25ogCaK56QSwZ0Za JeYA== X-Gm-Message-State: AFqh2kqaE+FMa/6Ki9RaBQ2lsZ7dxmhEjXCXIi0ZUNVlUD/8Gel6Zzii d11R7SJPKjo8QtErYQllro+EKQ== X-Google-Smtp-Source: AMrXdXs7LyHcYWze0fIdxaO9udBB/U/ezdUsN+AtYBx515eKR7aZSpGNVVO2mex3UDJQ/WXNOeiouw== X-Received: by 2002:ac8:7551:0:b0:3a7:f46b:7a82 with SMTP id b17-20020ac87551000000b003a7f46b7a82mr85112283qtr.21.1673307359514; Mon, 09 Jan 2023 15:35:59 -0800 (PST) Received: from jcormier-MS-7A93.syr.criticallink.com (static-72-90-70-109.syrcny.fios.verizon.net. [72.90.70.109]) by smtp.gmail.com with ESMTPSA id t5-20020a05620a450500b006fa8299b4d5sm6294846qkp.100.2023.01.09.15.35.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jan 2023 15:35:59 -0800 (PST) From: Jonathan Cormier To: linux-hwmon@vger.kernel.org Cc: Jonathan Cormier , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , John Pruitt Subject: [PATCH v3 3/5] hwmon: ltc2945: Handle error case in ltc2945_value_store Date: Mon, 9 Jan 2023 18:35:32 -0500 Message-Id: <20230109233534.1932370-4-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109233534.1932370-1-jcormier@criticallink.com> References: <20221214220727.1350784-3-jcormier@criticallink.com> <20230109233534.1932370-1-jcormier@criticallink.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ltc2945_val_to_reg errors were not being handled which would have resulted in register being set to 0 (clamped) instead of being left alone. Change reg_to_val and val_to_reg to return values via parameters to make it more obvious when an error case isn't handled. Also to allow the regval type to be the correct sign in prep for next commits. Fixes: 6700ce035f83 ("hwmon: Driver for Linear Technologies LTC2945") Signed-off-by: Jonathan Cormier --- drivers/hwmon/ltc2945.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c index 9af3e3821152..c66acf8d2124 100644 --- a/drivers/hwmon/ltc2945.c +++ b/drivers/hwmon/ltc2945.c @@ -70,12 +70,12 @@ static inline bool is_power_reg(u8 reg) } =20 /* Return the value from the given register in uW, mV, or mA */ -static long long ltc2945_reg_to_val(struct device *dev, u8 reg) +static int ltc2945_reg_to_val(struct device *dev, u8 reg, u64 *regval) { struct regmap *regmap =3D dev_get_drvdata(dev); unsigned int control; u8 buf[3]; - long long val; + u64 val; int ret; =20 ret =3D regmap_bulk_read(regmap, reg, buf, @@ -148,11 +148,12 @@ static long long ltc2945_reg_to_val(struct device *de= v, u8 reg) default: return -EINVAL; } - return val; + *regval =3D val; + return 0; } =20 static int ltc2945_val_to_reg(struct device *dev, u8 reg, - unsigned long val) + unsigned long val, unsigned long *regval) { struct regmap *regmap =3D dev_get_drvdata(dev); unsigned int control; @@ -220,19 +221,21 @@ static int ltc2945_val_to_reg(struct device *dev, u8 = reg, default: return -EINVAL; } - return val; + *regval =3D val; + return 0; } =20 static ssize_t ltc2945_value_show(struct device *dev, struct device_attribute *da, char *buf) { struct sensor_device_attribute *attr =3D to_sensor_dev_attr(da); - long long value; + int ret; + u64 value; =20 - value =3D ltc2945_reg_to_val(dev, attr->index); - if (value < 0) - return value; - return sysfs_emit(buf, "%lld\n", value); + ret =3D ltc2945_reg_to_val(dev, attr->index, &value); + if (ret < 0) + return ret; + return sysfs_emit(buf, "%llu\n", value); } =20 static ssize_t ltc2945_value_store(struct device *dev, @@ -245,7 +248,7 @@ static ssize_t ltc2945_value_store(struct device *dev, unsigned long val; u8 regbuf[3]; int num_regs; - int regval; + unsigned long regval; int ret; =20 ret =3D kstrtoul(buf, 10, &val); @@ -253,7 +256,10 @@ static ssize_t ltc2945_value_store(struct device *dev, return ret; =20 /* convert to register value, then clamp and write result */ - regval =3D ltc2945_val_to_reg(dev, reg, val); + ret =3D ltc2945_val_to_reg(dev, reg, val, ®val); + if (ret < 0) + return ret; + if (is_power_reg(reg)) { regval =3D clamp_val(regval, 0, 0xffffff); regbuf[0] =3D regval >> 16; --=20 2.25.1 From nobody Mon Sep 15 21:07:21 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54B69C54EBD for ; Mon, 9 Jan 2023 23:36:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237142AbjAIXgT (ORCPT ); Mon, 9 Jan 2023 18:36:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237692AbjAIXgG (ORCPT ); Mon, 9 Jan 2023 18:36:06 -0500 Received: from mail-qv1-xf33.google.com (mail-qv1-xf33.google.com [IPv6:2607:f8b0:4864:20::f33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D823AE74 for ; Mon, 9 Jan 2023 15:36:01 -0800 (PST) Received: by mail-qv1-xf33.google.com with SMTP id l14so3622447qvw.12 for ; Mon, 09 Jan 2023 15:36:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=criticallink.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4tt9ZKVvbkRyy+/76a2Ps7Ey7sKYXuH2yhPjmc2T/FY=; b=TgyNb8tlCwb8NVJ6ze4x0xBiUvKgpq9zpFpAfS3Ox+7imoYvYLplE4gz6haj1OJMX7 k7Vg8JWDq3iR6dRmmx5EH1uGSrENw5CBAXxK66Of4yN8zR/pA+yZrQ2vT1716fTcZxb/ ps0IHaTqlvVBZTc/xlED4EPxQXJ0Y9qr5FuQ0/7Qzo9eufKHOr4UFxwJ8MKDPpgGyCM4 JyzLYI3UKc4oGIKq5xgEvZPXU4vu1ypcmawZ8FlqIABrxnJMjwLgCc+jFTNs6wbIDcVQ Xci/6rZhopDhwAguOa4ZrFWSXURMdEcft5zkAd+o2v/uH1Dm52BUQJEHu7SDfsMqNj7p HLMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4tt9ZKVvbkRyy+/76a2Ps7Ey7sKYXuH2yhPjmc2T/FY=; b=YyhgAkBLTUTh99bF6WvMdUiU9N2hmB4OSppXEHIQgAJP33cETpo2i1cvv1eDZHkk+t Iv5gPVuvfOZlDHKS5TiPJWimwzRhlJOC647lNFBTXhQBeoj17J6hYULNap+fifjNtkB+ U44XDN7pWCIAzqBLxsM1ThLaK5elSIINkoU86H+fe/SyAr/yxdKN/UD+HA+xOeoI5WUd PSBPpldJvY9iyGrrZIwtGebPEN2itNuNO9ZrNeAsrg6ei4esMVnzNJQOJJfTh/K/WHoh eWMLN8Nk8gi+SHbkRTAzpS5Ec6MdxGWZT/XzXeWoHJAyB6WFt0DFGayvZSxud/RCGmpt L2/A== X-Gm-Message-State: AFqh2koJnur2rhg/9celVJS4K0DlkfmQY88ivqnSl/xxMQgoHVc8A0LA 4CgnbksMLxsf8QjC9NE0QXSUMg== X-Google-Smtp-Source: AMrXdXtIpYNEAmVRY5irkOGxmTOuD++Th6c7QsdR7BFePv/AqMM3LUBJpRN2RkWsTNnGSvM3M7TTyw== X-Received: by 2002:a0c:fba2:0:b0:531:e436:8e92 with SMTP id m2-20020a0cfba2000000b00531e4368e92mr29324882qvp.22.1673307360861; Mon, 09 Jan 2023 15:36:00 -0800 (PST) Received: from jcormier-MS-7A93.syr.criticallink.com (static-72-90-70-109.syrcny.fios.verizon.net. [72.90.70.109]) by smtp.gmail.com with ESMTPSA id t5-20020a05620a450500b006fa8299b4d5sm6294846qkp.100.2023.01.09.15.36.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jan 2023 15:36:00 -0800 (PST) From: Jonathan Cormier To: linux-hwmon@vger.kernel.org Cc: John Pruitt , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , Jonathan Cormier Subject: [PATCH v3 4/5] hwmon: ltc2945: Allow setting shunt resistor Date: Mon, 9 Jan 2023 18:35:33 -0500 Message-Id: <20230109233534.1932370-5-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109233534.1932370-1-jcormier@criticallink.com> References: <20221214220727.1350784-3-jcormier@criticallink.com> <20230109233534.1932370-1-jcormier@criticallink.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: John Pruitt Add the ability to specify the value of the shunt resistor in the device tree instead of assuming it is 1 milliOhm. The value in the device tree has the name shunt-resistor-micro-ohms and the default value is 1000 micro-ohms in order to preserve the current behavior. Signed-off-by: Jonathan Cormier Signed-off-by: John Pruitt --- drivers/hwmon/ltc2945.c | 85 +++++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 32 deletions(-) diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c index c66acf8d2124..0d743d75459c 100644 --- a/drivers/hwmon/ltc2945.c +++ b/drivers/hwmon/ltc2945.c @@ -64,6 +64,16 @@ static const struct of_device_id __maybe_unused ltc2945_= of_match[] =3D { }; MODULE_DEVICE_TABLE(of, ltc2945_of_match); =20 +/** + * struct ltc2945_data - LTC2945 device data + * @regmap: regmap device + * @shunt_resistor: shunt resistor value in micro ohms (1000 by default) + */ +struct ltc2945_data { + struct regmap *regmap; + u32 shunt_resistor; +}; + static inline bool is_power_reg(u8 reg) { return reg < LTC2945_SENSE_H; @@ -72,7 +82,9 @@ static inline bool is_power_reg(u8 reg) /* Return the value from the given register in uW, mV, or mA */ static int ltc2945_reg_to_val(struct device *dev, u8 reg, u64 *regval) { - struct regmap *regmap =3D dev_get_drvdata(dev); + struct ltc2945_data *data =3D dev_get_drvdata(dev); + struct regmap *regmap =3D data->regmap; + u32 shunt_resistor =3D data->shunt_resistor; unsigned int control; u8 buf[3]; u64 val; @@ -98,9 +110,7 @@ static int ltc2945_reg_to_val(struct device *dev, u8 reg= , u64 *regval) case LTC2945_MAX_POWER_THRES_H: case LTC2945_MIN_POWER_THRES_H: /* - * Convert to uW by assuming current is measured with - * an 1mOhm sense resistor, similar to current - * measurements. + * Convert to uW * Control register bit 0 selects if voltage at SENSE+/VDD * or voltage at ADIN is used to measure power. */ @@ -114,6 +124,9 @@ static int ltc2945_reg_to_val(struct device *dev, u8 re= g, u64 *regval) /* 0.5 mV * 25 uV =3D 0.0125 uV resolution. */ val =3D (val * 25LL) >> 1; } + val *=3D 1000; + val =3D DIV_ROUND_CLOSEST_ULL(val, shunt_resistor); + break; case LTC2945_VIN_H: case LTC2945_MAX_VIN_H: @@ -136,14 +149,9 @@ static int ltc2945_reg_to_val(struct device *dev, u8 r= eg, u64 *regval) case LTC2945_MIN_SENSE_H: case LTC2945_MAX_SENSE_THRES_H: case LTC2945_MIN_SENSE_THRES_H: - /* - * 25 uV resolution. Convert to current as measured with - * an 1 mOhm sense resistor, in mA. If a different sense - * resistor is installed, calculate the actual current by - * dividing the reported current by the sense resistor value - * in mOhm. - */ - val *=3D 25; + /* 25 uV resolution. Convert to mA. */ + val *=3D 25 * 1000; + val =3D DIV_ROUND_CLOSEST_ULL(val, shunt_resistor); break; default: return -EINVAL; @@ -153,9 +161,11 @@ static int ltc2945_reg_to_val(struct device *dev, u8 r= eg, u64 *regval) } =20 static int ltc2945_val_to_reg(struct device *dev, u8 reg, - unsigned long val, unsigned long *regval) + u64 val, u64 *regval) { - struct regmap *regmap =3D dev_get_drvdata(dev); + struct ltc2945_data *data =3D dev_get_drvdata(dev); + struct regmap *regmap =3D data->regmap; + u32 shunt_resistor =3D data->shunt_resistor; unsigned int control; int ret; =20 @@ -166,9 +176,6 @@ static int ltc2945_val_to_reg(struct device *dev, u8 re= g, case LTC2945_MAX_POWER_THRES_H: case LTC2945_MIN_POWER_THRES_H: /* - * Convert to register value by assuming current is measured - * with an 1mOhm sense resistor, similar to current - * measurements. * Control register bit 0 selects if voltage at SENSE+/VDD * or voltage at ADIN is used to measure power, which in turn * determines register calculations. @@ -178,14 +185,16 @@ static int ltc2945_val_to_reg(struct device *dev, u8 = reg, return ret; if (control & CONTROL_MULT_SELECT) { /* 25 mV * 25 uV =3D 0.625 uV resolution. */ - val =3D DIV_ROUND_CLOSEST(val, 625); + val *=3D shunt_resistor; + val =3D DIV_ROUND_CLOSEST_ULL(val, 625 * 1000); } else { /* * 0.5 mV * 25 uV =3D 0.0125 uV resolution. * Divide first to avoid overflow; * accept loss of accuracy. */ - val =3D DIV_ROUND_CLOSEST(val, 25) * 2; + val *=3D shunt_resistor; + val =3D DIV_ROUND_CLOSEST_ULL(val, 25 * 1000) * 2; } break; case LTC2945_VIN_H: @@ -209,14 +218,9 @@ static int ltc2945_val_to_reg(struct device *dev, u8 r= eg, case LTC2945_MIN_SENSE_H: case LTC2945_MAX_SENSE_THRES_H: case LTC2945_MIN_SENSE_THRES_H: - /* - * 25 uV resolution. Convert to current as measured with - * an 1 mOhm sense resistor, in mA. If a different sense - * resistor is installed, calculate the actual current by - * dividing the reported current by the sense resistor value - * in mOhm. - */ - val =3D DIV_ROUND_CLOSEST(val, 25); + /* 25 uV resolution. Convert to mA. */ + val *=3D shunt_resistor; + val =3D DIV_ROUND_CLOSEST_ULL(val, 25 * 1000); break; default: return -EINVAL; @@ -243,12 +247,13 @@ static ssize_t ltc2945_value_store(struct device *dev, const char *buf, size_t count) { struct sensor_device_attribute *attr =3D to_sensor_dev_attr(da); - struct regmap *regmap =3D dev_get_drvdata(dev); + struct ltc2945_data *data =3D dev_get_drvdata(dev); + struct regmap *regmap =3D data->regmap; u8 reg =3D attr->index; unsigned long val; u8 regbuf[3]; int num_regs; - unsigned long regval; + u64 regval; int ret; =20 ret =3D kstrtoul(buf, 10, &val); @@ -281,7 +286,8 @@ static ssize_t ltc2945_history_store(struct device *dev, const char *buf, size_t count) { struct sensor_device_attribute *attr =3D to_sensor_dev_attr(da); - struct regmap *regmap =3D dev_get_drvdata(dev); + struct ltc2945_data *data =3D dev_get_drvdata(dev); + struct regmap *regmap =3D data->regmap; u8 reg =3D attr->index; int num_regs =3D is_power_reg(reg) ? 3 : 2; u8 buf_min[3] =3D { 0xff, 0xff, 0xff }; @@ -333,7 +339,8 @@ static ssize_t ltc2945_bool_show(struct device *dev, struct device_attribute *da, char *buf) { struct sensor_device_attribute *attr =3D to_sensor_dev_attr(da); - struct regmap *regmap =3D dev_get_drvdata(dev); + struct ltc2945_data *data =3D dev_get_drvdata(dev); + struct regmap *regmap =3D data->regmap; unsigned int fault; int ret; =20 @@ -462,6 +469,12 @@ static int ltc2945_probe(struct i2c_client *client) struct device *dev =3D &client->dev; struct device *hwmon_dev; struct regmap *regmap; + struct ltc2945_data *data; + + data =3D devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + dev_set_drvdata(dev, data); =20 regmap =3D devm_regmap_init_i2c(client, <c2945_regmap_config); if (IS_ERR(regmap)) { @@ -469,11 +482,19 @@ static int ltc2945_probe(struct i2c_client *client) return PTR_ERR(regmap); } =20 + data->regmap =3D regmap; + if (device_property_read_u32(dev, "shunt-resistor-micro-ohms", + &data->shunt_resistor)) + data->shunt_resistor =3D 1000; + + if (data->shunt_resistor =3D=3D 0) + return -EINVAL; + /* Clear faults */ regmap_write(regmap, LTC2945_FAULT, 0x00); =20 hwmon_dev =3D devm_hwmon_device_register_with_groups(dev, client->name, - regmap, + data, ltc2945_groups); return PTR_ERR_OR_ZERO(hwmon_dev); } --=20 2.25.1 From nobody Mon Sep 15 21:07:21 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9CD1BC5479D for ; Mon, 9 Jan 2023 23:36:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235578AbjAIXgm (ORCPT ); Mon, 9 Jan 2023 18:36:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237627AbjAIXgJ (ORCPT ); Mon, 9 Jan 2023 18:36:09 -0500 Received: from mail-qt1-x82f.google.com (mail-qt1-x82f.google.com [IPv6:2607:f8b0:4864:20::82f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6DD1AF46 for ; Mon, 9 Jan 2023 15:36:03 -0800 (PST) Received: by mail-qt1-x82f.google.com with SMTP id g7so9609477qts.1 for ; Mon, 09 Jan 2023 15:36:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=criticallink.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tHdylmQcW9wYYsCa9wwYr0VU2Cu3mjkXydVxqDNSd7s=; b=IgpF0zOJNGRyYHPgr14oe84dRF4bZ4IkqF/xVJTwejgGZZo5CdElnmDII9psWkdYdV VQgAkixF2ZeGL6DjydEyuZtNHfBmLn5rpdRFaqqVL6z6PTXvZGBtF2fg3LEBWOnKmrnD GRdkAhof4yATzA6aIyB0m9QnqDPh8pJZnSPX5VoFJfhoAK6iXoQFA/3N8coGLwXEfWIt H1fpOo3VaGy9D6L276k0b/V0maEo+T8b3eyXLn7gmkjhPLokinE0gtFt89rvOcRu/IiB JOulRj1Gu0ycfFA24YeJLNK2FoAMGqHZlXEZ5ywgdniFUq3JKfUlvxPa/A1U2rYYCjDJ SIMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tHdylmQcW9wYYsCa9wwYr0VU2Cu3mjkXydVxqDNSd7s=; b=NvKRZ7NOUElNvdlgrrCBwK5qhBvXBF/gksiYhSY0rdgmvbM/KbIB4Pxa5nMqgSezn5 5QiWosorppX5mUgYpg0svscLEHK596V66UCkvfe8EdL/fj0T8qwvyo95Al61BNOAj24V 5BrYGvW1dmAUhiD79MudXtWqayj885AlYhXze+RnR1s6TrQ0zkCVQXJxX8jJIXmcA761 L9LEtzHasTa2f3EWYWXPghpPdiarKsKAUDnuhl7aNQKkKKUDu+oJqPwqWo9rVGfcqiv2 Psin4UOcvtHIAYFqDDdvJfDCKG3LDte+w7TEMZNygefgCTH/ZQbxG1p96Vmh+CNk8k/R N5yw== X-Gm-Message-State: AFqh2kq05I2Vg76ZBBgL6shXo2a7iZoooMuOaRtkB/vDqyYXAi3Cd5/1 9Z1YhgrY407zC3Czg7I23fGPrA== X-Google-Smtp-Source: AMrXdXulseYYzs7cQNeCTGbJ59lnFcneJ7Iqd1kaKyqxoO1OhcE8XyTsdvklFinEON7uDw2wkbYhkQ== X-Received: by 2002:a05:622a:1646:b0:3a7:f6cf:a597 with SMTP id y6-20020a05622a164600b003a7f6cfa597mr120230588qtj.33.1673307362569; Mon, 09 Jan 2023 15:36:02 -0800 (PST) Received: from jcormier-MS-7A93.syr.criticallink.com (static-72-90-70-109.syrcny.fios.verizon.net. [72.90.70.109]) by smtp.gmail.com with ESMTPSA id t5-20020a05620a450500b006fa8299b4d5sm6294846qkp.100.2023.01.09.15.36.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Jan 2023 15:36:02 -0800 (PST) From: Jonathan Cormier To: linux-hwmon@vger.kernel.org Cc: Jonathan Cormier , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , John Pruitt Subject: [PATCH v3 5/5] hwmon: ltc2945: Convert division to DIV_ROUND_CLOSEST_ULL Date: Mon, 9 Jan 2023 18:35:34 -0500 Message-Id: <20230109233534.1932370-6-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230109233534.1932370-1-jcormier@criticallink.com> References: <20221214220727.1350784-3-jcormier@criticallink.com> <20230109233534.1932370-1-jcormier@criticallink.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert division to DIV_ROUND_CLOSEST_ULL to match code in same function Signed-off-by: Jonathan Cormier --- drivers/hwmon/ltc2945.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c index 0d743d75459c..5456c1b60b8b 100644 --- a/drivers/hwmon/ltc2945.c +++ b/drivers/hwmon/ltc2945.c @@ -203,7 +203,7 @@ static int ltc2945_val_to_reg(struct device *dev, u8 re= g, case LTC2945_MAX_VIN_THRES_H: case LTC2945_MIN_VIN_THRES_H: /* 25 mV resolution. */ - val /=3D 25; + val =3D DIV_ROUND_CLOSEST_ULL(val, 25); break; case LTC2945_ADIN_H: case LTC2945_MAX_ADIN_H: --=20 2.25.1