From patchwork Tue Dec 20 00:04:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cormier X-Patchwork-Id: 34841 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp2685086wrn; Mon, 19 Dec 2022 16:06:12 -0800 (PST) X-Google-Smtp-Source: AA0mqf5LpJe2KsALyI7jdlmM+PN2Ph7R+H/W6MXSE/cY10kGSss30o4vJnBY18SJX2uVjI9KLvYd X-Received: by 2002:a17:90a:fb57:b0:223:1a20:72a2 with SMTP id iq23-20020a17090afb5700b002231a2072a2mr28141419pjb.4.1671494771959; Mon, 19 Dec 2022 16:06:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671494771; cv=none; d=google.com; s=arc-20160816; b=buEz8jijQFVSPftoJmRuLldS/Uvt16Y0KmXydSx9KBVVKYVDd/vNsQvwrbIeyrNA0W OrX/UsK6RTuFAvFVhuIbOvya3qqMzjPC9MAIyZf1Z9/DFqja8CIgOPQy71nvOzdPmgFr cfYQzGwy4SLAUaAVftzdot17yMIlbL3RC8R0kIsDWhW/unE1L4eSktAomKJwRwNfHkVK fM9mFioeb4PV5RLPiaodrSP5PqrMkUvJBQn0OGlH1UsxNZ9gULhqeL7v1liiQUnmu+3q /PWlPoY6Wd1Om1EQXT0RD7h33hYvpWOHZs1Gwd+mccU44Qh9Oumtpzh0h2C6GcRzt/x/ OmMQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=G59VUoYCYBv5qqU0FdCva5W7yGEol89ZbTDgHWp0E9c=; b=wLeWlrhjm+h9kPOha8aat/enUxegA9bX+pucfVNoYEA7HF1VPEmOub+3s23YBc4oC4 5ItteHBDUo1B6YuaA+AYiHonfmOQSF4cBATFqc1i/foCYHnJlq2yEELYedZes06QHpAI WgG90ZBW/nZkF+L6tvw/kqcivQIVjBdDzEtzqJolX6ZNStMl0RqfTy3LDR0FxbdUlxxr 5BIkDQhY7nQJxFQ5kS/EW1xN0Kd2CVPfLxtKyVVA1bZdFYE/m4TCu1JVc9Bnn0rl82A/ mlOSyXxNx22ob1vO7aq7hPl8suNxahFt6Ee75/6OXhc3WHheiY/Z96Ksx3OkV//6q7i9 rWaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=kDGDteB5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y16-20020a17090a105000b00219fc51a9c8si10869882pjd.74.2022.12.19.16.05.58; Mon, 19 Dec 2022 16:06:11 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=kDGDteB5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232716AbiLTAFt (ORCPT + 99 others); Mon, 19 Dec 2022 19:05:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231356AbiLTAFq (ORCPT ); Mon, 19 Dec 2022 19:05:46 -0500 Received: from mail-vk1-xa2a.google.com (mail-vk1-xa2a.google.com [IPv6:2607:f8b0:4864:20::a2a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 57858B19 for ; Mon, 19 Dec 2022 16:05:44 -0800 (PST) Received: by mail-vk1-xa2a.google.com with SMTP id l17so5063321vkk.3 for ; Mon, 19 Dec 2022 16:05:44 -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=G59VUoYCYBv5qqU0FdCva5W7yGEol89ZbTDgHWp0E9c=; b=kDGDteB5WOxEchK4gxDFhktVnxnr/Tpl/pqw7FQIf7ZksP/JUXPMxV3UygnBcu7eJc 6PiE+rvGqhG/EYXR9RjbMcICv68jocI/wgZgs+9U+ViiZCVKPopHJXYX429QcC38algI 93AXg33hENRyzvNuUampu9TV0RrfUAp8SREVAV4tIwjg9Lx4c6wYQ9L0MV5+XeAvT8E8 vcW1iI1dzuihxd2UgCWOelipEVe187KUlCy8OlrDHpxBN74UFMpojSINk0coyKrRFm/Q Q0S+hm1y5fKP7uObK2x9toZM4Cz+XPuX3lw+G8tEHXdbeUt7XtV0JUrVD0EhRW7tXXBI uLjQ== 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=G59VUoYCYBv5qqU0FdCva5W7yGEol89ZbTDgHWp0E9c=; b=fPrYFerE2OEZQuN3Ky4t8YM3koG1ixOJtaCH9qBwxIhO2/UhoONue+taFuTga8UMDs rr+5pVlfitNwrDA7nQPQmCeS0UvQCm6Q9XiuP6THQcGaZNWMUfgWk8fgPWCvncy/HUED ruENgdvewJY+BdK6lV/9Ud4mynDB/pL97q3kY1fOfMw/KedMmWvAsF3x4QnWEEFxiRJx QfapxzpE0EMet0PTuwPcWb/TOBZpfI4CpmUXVGCifvLlQCFNFblCUBsLw44DQKrAVXik xCPrk6s5X4KQsBvy7haj2F4O8qI/N2b/E96PhjDVzrTeiAe4AQ4UX/YVbheYz0txvJb4 f3Sw== X-Gm-Message-State: ANoB5pm+XotfiElEpdvJuX8gDLZQ5eTTnp1BoQU8s9g1+XBAt0RNd2w7 vIfVioRhKlFWBGcKxgwvXRPx6SSFN0iUc+9u X-Received: by 2002:a1f:ab85:0:b0:3c0:f9ac:51e1 with SMTP id u127-20020a1fab85000000b003c0f9ac51e1mr20909923vke.1.1671494743378; Mon, 19 Dec 2022 16:05:43 -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 o70-20020a374149000000b006e702033b15sm7721430qka.66.2022.12.19.16.05.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 16:05:42 -0800 (PST) From: "Cormier, Jonathan" To: linux-hwmon@vger.kernel.org Cc: "Cormier, Jonathan" , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , John Pruitt Subject: [PATCH v2 1/4] dt-bindings: hwmon: adi,ltc2945: Add binding Date: Mon, 19 Dec 2022 19:04:54 -0500 Message-Id: <20221220000457.1163446-2-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221220000457.1163446-1-jcormier@criticallink.com> References: <20221214220727.1350784-1-jcormier@criticallink.com> <20221220000457.1163446-1-jcormier@criticallink.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752229091352747048?= X-GMAIL-MSGID: =?utf-8?q?1752689301903223454?= Create initial binding for the LTC2945 I2C power monitor. Also adds shunt-resistor-micro-ohms parameter Signed-off-by: "Cormier, Jonathan" --- .../bindings/hwmon/adi,ltc2945.yaml | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml -- 2.25.1 diff --git a/Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml b/Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml new file mode 100644 index 000000000000..f90d40919ee6 --- /dev/null +++ b/Documentation/devicetree/bindings/hwmon/adi,ltc2945.yaml @@ -0,0 +1,50 @@ +# 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/LTC2945.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 = <1>; + #size-cells = <0>; + + power-monitor@6e { + compatible = "adi,ltc2945"; + reg = <0x6e>; + /* 10 milli-Ohm shunt resistor */ + shunt-resistor-micro-ohms = <10000>; + }; + }; +... From patchwork Tue Dec 20 00:04:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cormier X-Patchwork-Id: 34842 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp2685433wrn; Mon, 19 Dec 2022 16:07:07 -0800 (PST) X-Google-Smtp-Source: AA0mqf65k/h1m+aALNAxqr62a3buMZmfGwIGZ+zLGSUQ7J1FEld65sCROR5ci+54rkeqJigMkvDe X-Received: by 2002:a05:6402:6c1:b0:46f:d396:a7bc with SMTP id n1-20020a05640206c100b0046fd396a7bcmr29376881edy.28.1671494827208; Mon, 19 Dec 2022 16:07:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671494827; cv=none; d=google.com; s=arc-20160816; b=bj2tfaMyT2Fu5cfiZP1dFXNaRjh7AUgYRX6/13qgHvpi7thspHoIGmKKVXoNIAWSIB 00OFsg2+z4KfWhgEn0DuL7L2XJ2oja2dvhgzmX8ed3+sSR5x64WlvUtvgmiIUYo4kqnM fdrzidzOhZoILUhjXyUnXYyATTRYmd/MvC6RiJlIb6qnybV43jBuT4QMk4ldHNrD82vz CtmDDoirMlFiVP+tQLxSErRFv4bh8LQF1vb+chYDPYGKP4FPk4VHOmzXotmEzYqtUnGX wRTzboioshNp7pFdnuHZ/ZZGxZiLukWu9xbEN1us3gjMnPqHav6QAna96wS+Do6phtBK 9+gQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LJMGVx/c3dHDkaRWc2L4bcsVUSNNmncwpOKzTe9TVL4=; b=epxgxx/TmhruwsVec9qEEEhQEXWFdEc6xrawq6ui0rFrSWlymNmkGEi8B9Eph4r+uz 3Q50hyDHYK265T871s2ZBSM9Wg378Myho0fdWY37uO2jpDa/+AheJ3tgzL0bU8ZR5eE5 H6odSJA/a8IUp9Ob0qF+Etz3aLVo7ChlfSBrBPNx3h/c1IzHyuYNzY/J24WwQZKgytJu UG3IaPZkUOFye3kJQQIRUY+zd6+3h6udXPtm7O64L/OxoyAYyKb8v7s3XAlbSp21KdX4 1sYuCIcv1w1wh1sYdRt0R5oIeGpDcoItkhxuzTiNdS6wbpBxEw9IinIo521i9e4tEmNY 0ogA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=Ofzaz35l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ne31-20020a1709077b9f00b007ae83c51922si11978479ejc.45.2022.12.19.16.06.43; Mon, 19 Dec 2022 16:07:07 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=Ofzaz35l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232822AbiLTAF7 (ORCPT + 99 others); Mon, 19 Dec 2022 19:05:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232577AbiLTAFr (ORCPT ); Mon, 19 Dec 2022 19:05:47 -0500 Received: from mail-vk1-xa34.google.com (mail-vk1-xa34.google.com [IPv6:2607:f8b0:4864:20::a34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 75FD128D for ; Mon, 19 Dec 2022 16:05:45 -0800 (PST) Received: by mail-vk1-xa34.google.com with SMTP id t191so5066356vkb.4 for ; Mon, 19 Dec 2022 16:05:45 -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=LJMGVx/c3dHDkaRWc2L4bcsVUSNNmncwpOKzTe9TVL4=; b=Ofzaz35lynvdnSiVHvcRnf9yKy6m1B644SLmuzdMMIXjSlGONBbNGyWZxmhelAA821 9Gkgbwj3AWCKPYaeEHqgFJzszxBDUeRSRog7ByMZTfLlfcC37gU2gaZ7SDNKkVCRJ/hq QiM8yeOQx4LSCfWYiW5RjGQEVznzRaYzfzkKRfZnmyj/oT3pJDxW3q3LZRxxMlEsZCww qUnkB3k5fttcGXz5zP2sITuTrE51/15enY8Ed7LHYGbmXlEwJqKBDtuTveAsMAAr7Yu6 Z7r2qQdeLMqvROT02KT1SzpkFTmXV/K4JHfSafNb+3z6AKGeCLJfLncE77xCJ2mOoKEI xffg== 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=LJMGVx/c3dHDkaRWc2L4bcsVUSNNmncwpOKzTe9TVL4=; b=kGfvBQQtZccl/Dle3vMh2KbTDzDlQcIVIHwee7lvfiIrRGk+oMAEy/PHyQEUwl1G4v cyD/EIvQgpQOaTG9VEiZ3KlqLlFcRIS3sQeVeChGzjftqQBTsuNz3ja6RuHAue2k5+r7 Ot5VTWrQdos3c36sKraEmftpM/2Ew7J7j1nfyGHdcPiBoUuBmLybIGKUpQgwIECY3D5k oEv1wNX4QuIv9YK6Bscyey5v4AuykjYEag3vgkYc0CiWajAJ6gvBVQrcTOGo8mf3wMNW 1Ayat+33s1pfti6zB3CYKwV3KgykjZVT8B0QKHaMLWL3FmSWyLR5ipdvn/GZhFiJZuw0 vHzw== X-Gm-Message-State: AFqh2krEmsPC+isTgc81Nai6LGhsolIRM6gjVjulMP3FO7m4gTE7Mdu8 T/K22Q0O5m3tz9YReBvqcMDdQA== X-Received: by 2002:a05:6122:45d:b0:3c6:bdf4:695b with SMTP id f29-20020a056122045d00b003c6bdf4695bmr9378658vkk.5.1671494744542; Mon, 19 Dec 2022 16:05:44 -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 o70-20020a374149000000b006e702033b15sm7721430qka.66.2022.12.19.16.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 16:05:44 -0800 (PST) From: "Cormier, Jonathan" To: linux-hwmon@vger.kernel.org Cc: "Cormier, Jonathan" , Jean Delvare , Guenter Roeck , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Rob Herring , Krzysztof Kozlowski , Bob Duke , John Pruitt Subject: [PATCH v2 2/4] hwmon: ltc2945: Add devicetree match table Date: Mon, 19 Dec 2022 19:04:55 -0500 Message-Id: <20221220000457.1163446-3-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221220000457.1163446-1-jcormier@criticallink.com> References: <20221214220727.1350784-1-jcormier@criticallink.com> <20221220000457.1163446-1-jcormier@criticallink.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752689360041179260?= X-GMAIL-MSGID: =?utf-8?q?1752689360041179260?= Signed-off-by: "Cormier, Jonathan" --- drivers/hwmon/ltc2945.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) -- 2.25.1 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) +static const struct of_device_id __maybe_unused ltc2945_of_match[] = { + { .compatible = "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); static struct i2c_driver ltc2945_driver = { .driver = { - .name = "ltc2945", - }, + .name = "ltc2945", + .of_match_table = of_match_ptr(ltc2945_of_match), + }, .probe_new = ltc2945_probe, .id_table = ltc2945_id, }; From patchwork Tue Dec 20 00:04:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cormier X-Patchwork-Id: 34843 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp2685606wrn; Mon, 19 Dec 2022 16:07:33 -0800 (PST) X-Google-Smtp-Source: AA0mqf4hd+xXJfX49MmT7eJvidaQADHzokEbqIh5O8IfnFOqkcgVUQGeIvBlghsi161dNA3u1WI8 X-Received: by 2002:a17:906:8c9:b0:7c1:ad6:638a with SMTP id o9-20020a17090608c900b007c10ad6638amr46802029eje.17.1671494853579; Mon, 19 Dec 2022 16:07:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671494853; cv=none; d=google.com; s=arc-20160816; b=DrVX58UO22pRo9DFNhhUnHL1CQm5L62cx3rfzB/3dM1BL1yMLob4HarH8NsVZ6CNip ogTmqfjvuM9TbDa1bwfih5ufWY0OPjIJnIqnLhtMXZUebGEewn8/HKWIVV7LAgWcv68Q YECIIOiI6KQNwAiZkBaght+Ql6VHcB1gNBm08wm9FGq8fMjU1IzavqAV+TnTCORQmFxe rmLvvQf2zpY5U/bQkPS3okbNykIMkdChBL+VaImexME3u9iQYiTfc5aO3c/KfXeqXNvp 8WjSZE2v26HVI+SHVZt3uoFVWpdvEWgv847dNol0esXXeb0HHRb7PSBezUWhsBcDOMQF aklA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=GdJqSX2G2zw0Vj3PmkjTC4cwbi3aa13NSHPDTsl1J+I=; b=Vc4XMkR/T5PZ9pam9bKdP5vg4+vsGuhY8HeM7COsDfd8D9JbgQPIAtMgT3QO+4Ygjf zG/xTT9IWrv2kGs0mpURqhpuDlvTlDoRG9SotE5AGow8ie0p7k2VucibuX4KPxc1f733 OYiPRXRZ72zPqgDxL5w1V+7VKAh3mA3NGcUJQmfcyGDa0UU2hiAuCVCOmDoxyES9U4HI qDUZ9YS/RfblbIlAQ9ktRQdlRlR1byiRfTQ7YICoaRkH818s1au3hHiKCZOycLGg1dYs Yzsf84RQUdoo4GqU9ij/aq4pbuoapfIjegyYoEEqfF3etXDIgOdZ0Z0G06P2I390lvm1 3oTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=fkXAdZn9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id sy27-20020a1709076f1b00b007ad8bc64c89si9015372ejc.701.2022.12.19.16.07.10; Mon, 19 Dec 2022 16:07:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=fkXAdZn9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232859AbiLTAGH (ORCPT + 99 others); Mon, 19 Dec 2022 19:06:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232683AbiLTAFs (ORCPT ); Mon, 19 Dec 2022 19:05:48 -0500 Received: from mail-yw1-x1129.google.com (mail-yw1-x1129.google.com [IPv6:2607:f8b0:4864:20::1129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 224341166 for ; Mon, 19 Dec 2022 16:05:46 -0800 (PST) Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-4407c61433bso105982227b3.9 for ; Mon, 19 Dec 2022 16:05:46 -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=GdJqSX2G2zw0Vj3PmkjTC4cwbi3aa13NSHPDTsl1J+I=; b=fkXAdZn91R0RYe5eyEr7h0qBxh4XaS9GCJku1R38NQkWi6RyFAybKqhz7bNctPbcuC j2+u5vQHsMWhX6dI+EhhTaknK2q0br1LDeNI+0EAVlFI4tCZgUdzZnQjci7axTp6B19D WpeEur7Ej6AJjpijR9vhIvQJ/RZ4vTb5/0j1p8LaEhJicoCQsVGGNbUJ8JtDGQJePh0W PnO4yfX8wFdrTmM6D3Lwxejk1t4vT1PK/ebIze14pvitG5KKH055VzDpJOn0wUt3EG9t UXZfnURZVUqA9m66hEtzvD0Fhf9ckF1RiiMK+1eKv+uA1vpFRcF29bLhm4iv17NnkZj2 b4LQ== 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=GdJqSX2G2zw0Vj3PmkjTC4cwbi3aa13NSHPDTsl1J+I=; b=GLqRgs5fal9hQUjw/ayYuo0yjGNbsW5aoATuxPdmDTeGkhNwB4zboW41Ksum3geo10 iMGxOl9nhurl5MH6HXFGOCkq8FcfvhCDJ0lId8haAMkVEFk4h8thhdFv3MgM/baQUNII V8Z+MS32gMpovUx3Dbm2Nigv3LRUkq6qJY4PTSa+hPQkId5rxr4Oeo0gSlqNCLNwgSiN 16s6et78oBcuXWQso7c5H0n+Zze3JIOBIp/v3ngURkiAou8INsGl8POaXu2XZVehhkq1 JiPHm8jdWx84jt+19/Tq0Oz6YugQhjh4xy7UVslTMNAgnxWtnH3D6L4q4a+zmOzHJcyx 71UA== X-Gm-Message-State: ANoB5pmFxiQKARfJdRPbxNvn4L3yqNEc3qH7wFlbZ3fuQA2CiUX1w/KT SceXaLxfJmHgwy5gf0k4MACisg== X-Received: by 2002:a05:7500:1d8f:b0:ea:51d4:37a2 with SMTP id dv15-20020a0575001d8f00b000ea51d437a2mr4022846gab.49.1671494745752; Mon, 19 Dec 2022 16:05:45 -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 o70-20020a374149000000b006e702033b15sm7721430qka.66.2022.12.19.16.05.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 16:05:45 -0800 (PST) From: "Cormier, Jonathan" 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 , "Cormier, Jonathan" Subject: [PATCH v2 3/4] hwmon: ltc2945: Allow setting shunt resistor Date: Mon, 19 Dec 2022 19:04:56 -0500 Message-Id: <20221220000457.1163446-4-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221220000457.1163446-1-jcormier@criticallink.com> References: <20221214220727.1350784-1-jcormier@criticallink.com> <20221220000457.1163446-1-jcormier@criticallink.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752229002631218550?= X-GMAIL-MSGID: =?utf-8?q?1752689387596693857?= From: John Pruitt Added 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: "Cormier, Jonathan" Signed-off-by: John Pruitt --- drivers/hwmon/ltc2945.c | 80 +++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 30 deletions(-) -- 2.25.1 diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c index 9af3e3821152..fc7d399b2c85 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[] = { }; MODULE_DEVICE_TABLE(of, ltc2945_of_match); +/** + * 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 long long ltc2945_reg_to_val(struct device *dev, u8 reg) { - struct regmap *regmap = dev_get_drvdata(dev); + struct ltc2945_data *data = dev_get_drvdata(dev); + struct regmap *regmap = data->regmap; + u32 shunt_resistor = data->shunt_resistor; unsigned int control; u8 buf[3]; long long val; @@ -98,9 +110,7 @@ static long long ltc2945_reg_to_val(struct device *dev, u8 reg) 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,8 @@ static long long ltc2945_reg_to_val(struct device *dev, u8 reg) /* 0.5 mV * 25 uV = 0.0125 uV resolution. */ val = (val * 25LL) >> 1; } + val *= 1000; + val = DIV_ROUND_CLOSEST_ULL(val, shunt_resistor); break; case LTC2945_VIN_H: case LTC2945_MAX_VIN_H: @@ -136,14 +148,9 @@ static long long ltc2945_reg_to_val(struct device *dev, u8 reg) 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 *= 25; + /* 25 uV resolution. Convert to mA. */ + val *= 25 * 1000; + val = DIV_ROUND_CLOSEST_ULL(val, shunt_resistor); break; default: return -EINVAL; @@ -154,7 +161,9 @@ static long long ltc2945_reg_to_val(struct device *dev, u8 reg) static int ltc2945_val_to_reg(struct device *dev, u8 reg, unsigned long val) { - struct regmap *regmap = dev_get_drvdata(dev); + struct ltc2945_data *data = dev_get_drvdata(dev); + struct regmap *regmap = data->regmap; + u32 shunt_resistor = data->shunt_resistor; unsigned int control; int ret; @@ -165,9 +174,6 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, 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. @@ -177,14 +183,16 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, return ret; if (control & CONTROL_MULT_SELECT) { /* 25 mV * 25 uV = 0.625 uV resolution. */ - val = DIV_ROUND_CLOSEST(val, 625); + val *= shunt_resistor; + val = DIV_ROUND_CLOSEST(val, 625 * 1000); } else { /* * 0.5 mV * 25 uV = 0.0125 uV resolution. * Divide first to avoid overflow; * accept loss of accuracy. */ - val = DIV_ROUND_CLOSEST(val, 25) * 2; + val *= shunt_resistor; + val = DIV_ROUND_CLOSEST(val, 25 * 1000) * 2; } break; case LTC2945_VIN_H: @@ -208,14 +216,9 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, 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 = DIV_ROUND_CLOSEST(val, 25); + /* 25 uV resolution. Convert to mA. */ + val *= shunt_resistor; + val = DIV_ROUND_CLOSEST(val, 25 * 1000); break; default: return -EINVAL; @@ -240,7 +243,8 @@ static ssize_t ltc2945_value_store(struct device *dev, const char *buf, size_t count) { struct sensor_device_attribute *attr = to_sensor_dev_attr(da); - struct regmap *regmap = dev_get_drvdata(dev); + struct ltc2945_data *data = dev_get_drvdata(dev); + struct regmap *regmap = data->regmap; u8 reg = attr->index; unsigned long val; u8 regbuf[3]; @@ -275,7 +279,8 @@ static ssize_t ltc2945_history_store(struct device *dev, const char *buf, size_t count) { struct sensor_device_attribute *attr = to_sensor_dev_attr(da); - struct regmap *regmap = dev_get_drvdata(dev); + struct ltc2945_data *data = dev_get_drvdata(dev); + struct regmap *regmap = data->regmap; u8 reg = attr->index; int num_regs = is_power_reg(reg) ? 3 : 2; u8 buf_min[3] = { 0xff, 0xff, 0xff }; @@ -327,7 +332,8 @@ static ssize_t ltc2945_bool_show(struct device *dev, struct device_attribute *da, char *buf) { struct sensor_device_attribute *attr = to_sensor_dev_attr(da); - struct regmap *regmap = dev_get_drvdata(dev); + struct ltc2945_data *data = dev_get_drvdata(dev); + struct regmap *regmap = data->regmap; unsigned int fault; int ret; @@ -456,6 +462,12 @@ static int ltc2945_probe(struct i2c_client *client) struct device *dev = &client->dev; struct device *hwmon_dev; struct regmap *regmap; + struct ltc2945_data *data; + + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + dev_set_drvdata(dev, data); regmap = devm_regmap_init_i2c(client, <c2945_regmap_config); if (IS_ERR(regmap)) { @@ -463,11 +475,19 @@ static int ltc2945_probe(struct i2c_client *client) return PTR_ERR(regmap); } + data->regmap = regmap; + if (device_property_read_u32(dev, "shunt-resistor-micro-ohms", + &data->shunt_resistor)) + data->shunt_resistor = 1000; + + if (data->shunt_resistor == 0) + return -EINVAL; + /* Clear faults */ regmap_write(regmap, LTC2945_FAULT, 0x00); hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, - regmap, + data, ltc2945_groups); return PTR_ERR_OR_ZERO(hwmon_dev); } From patchwork Tue Dec 20 00:04:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cormier X-Patchwork-Id: 34844 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp2690470wrn; Mon, 19 Dec 2022 16:21:02 -0800 (PST) X-Google-Smtp-Source: AA0mqf6S9g7DyKI3fh5+A1htqpPVBb3ppTJ1OS48OY4huE2Kk15ZiVDkQ+EnJe4IXx4c3FK1eo02 X-Received: by 2002:a05:6a20:6983:b0:a4:414c:84c5 with SMTP id t3-20020a056a20698300b000a4414c84c5mr65116106pzk.12.1671495661969; Mon, 19 Dec 2022 16:21:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671495661; cv=none; d=google.com; s=arc-20160816; b=SsTjCvmis/Tc43On+fjCoM6OZW9KOSGYxzn41Qe7mqGUaS3YrDWxK2ZMBIf4Q2Fbot eRnfcifC0tpOZophJ26dKFujRpNfRegpSmgEXUslQ39ObdryaB287nNzbQcqC9Cq/7MB 4V4VsmleKdWEdRwUgzkhOLyPrpoFK9ssYqKC4qlEUlfq7ZpAlB20rBcKMqZx5qI7pUop RwJeFRIk4RYOFXSLGNMjsH+X0O0mty2KCH++fXcFlDoIJgTlvogRq3X9xJkVx+TdGuf5 ZD3/pnJHlP8KFGL0a+yGXPKdL5bN7/zheezLIvMkEoKaIAUz2wF3xGhI/B1zQ6mgv0LH X8IQ== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=bLlc7QfWYSwhEPXevanfM/J17xcjG7QbxYgYWgfuSbs=; b=EMT2ENK8uoqqmpOaJiNwW+WEJ0UUMmHK47J4ZnXLK5I41PgZaHx1mrg/op9kbvwZZf MV6Jq61IGTCUBz5ai8Iyzsv2AhLdxouD78VL/CBOMKFhW8LRnayQi8jcibxmNrWWKrL6 OnKbzlikwfgKth4RoJuqojZmzRiw7wT92n2aE8rJtToqwG0KEtmfLy2iOqrwhGAONURx Y6OI+JReuVajfm2+76t2jYFIaYnfhqD0KZcWuvO8Dn5GnRnaAL+HpE0DIjO13D5zonDU 3jSbpDOrFi0jrO8/zcLllnoYIu3uxkfsFUjTPgPLZySEBhVgflycR5j1fiGiacEdoIw/ EhzA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=L6fludGA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j24-20020a635958000000b0047764bac806si11482526pgm.749.2022.12.19.16.20.48; Mon, 19 Dec 2022 16:21:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@criticallink.com header.s=google header.b=L6fludGA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=criticallink.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232776AbiLTAGL (ORCPT + 99 others); Mon, 19 Dec 2022 19:06:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232455AbiLTAFt (ORCPT ); Mon, 19 Dec 2022 19:05:49 -0500 Received: from mail-yw1-x1135.google.com (mail-yw1-x1135.google.com [IPv6:2607:f8b0:4864:20::1135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 095F2C37 for ; Mon, 19 Dec 2022 16:05:48 -0800 (PST) Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-3b10392c064so149768257b3.0 for ; Mon, 19 Dec 2022 16:05:48 -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=bLlc7QfWYSwhEPXevanfM/J17xcjG7QbxYgYWgfuSbs=; b=L6fludGALr816IQEcsLG5CKJL99qb7vbg9Za3eDAXs31j7Z4+mej3LnSey8IvNKQUW KGn9kDOFk6YegAX5kFF8xNBuiAOjdZynbmQOX0VvlTDm1lRiv6hgBJGuiJc8GodiKg68 QfeLOcbeAJG0RPs+MvH+TetN/fSrn3Xv6x/JxFDxVmWQe2egMHt32vYzQU5xTl+XG27z gm5GqIoQeLN72/mX7VFwG8p8mwoHB3NAbHjKnEIUHxkwG1hbGgIt1oOfovBcCrJAB4fm nErLujaoPwbKFtS600ER+TxQnYZPsKeWgKWtEw6zeqsMtsJ7T+zwXV2aJsoUdnwLPnQP E8Kg== 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=bLlc7QfWYSwhEPXevanfM/J17xcjG7QbxYgYWgfuSbs=; b=YhL1NsIpmQ47hhYzqjAQym2vkz3ZJK/djX63E5EmEOPFwucv/UpoUEpM3AyrywjezF Xh7hEEHJvL7OKGEkXNWl5mHqaNK/YjrPm49yVwZqs1/2aFEFkpuOzn6IsT59n9piTcou vlVWIN8zUFoCBj5LIQnmZzxqurV9Dv1bG7rcRwuE/fiBrn51rIMZbjV2e1E0KvrgBrFt z0Ry7qYHiMslxLiVMMeWjZX2l4s1WYOjhWhilTDGO0bmqVvVWqTS5bFgF5iI8Bqrcj6m C5Vl6vcMLQFAeB68xN8JA3Fv+Amu0uwkpEy84rJ1s5yFzaRTdLduPifV2So2ua6LbNLw Rllw== X-Gm-Message-State: AFqh2krEAZv6dNVjTSAlcCGB50h836xOoHx0uDdQyH35FII0XGRLaeLh 1XZ2GvKIz2Xo7Rsqq+MPMNCBMA== X-Received: by 2002:a81:4e57:0:b0:38f:91bf:7783 with SMTP id c84-20020a814e57000000b0038f91bf7783mr8802927ywb.25.1671494747189; Mon, 19 Dec 2022 16:05:47 -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 o70-20020a374149000000b006e702033b15sm7721430qka.66.2022.12.19.16.05.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Dec 2022 16:05:46 -0800 (PST) From: "Cormier, Jonathan" 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 , "Cormier, Jonathan" Subject: [PATCH v2 4/4] hwmon: ltc2945: Fix possible overflows Date: Mon, 19 Dec 2022 19:04:57 -0500 Message-Id: <20221220000457.1163446-5-jcormier@criticallink.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221220000457.1163446-1-jcormier@criticallink.com> References: <20221214220727.1350784-1-jcormier@criticallink.com> <20221220000457.1163446-1-jcormier@criticallink.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752690234981449401?= X-GMAIL-MSGID: =?utf-8?q?1752690234981449401?= From: John Pruitt Use 64-bit values for intermediate calculations. Check for overflows and return INT_MAX if overflows happened. Signed-off-by: John Pruitt Signed-off-by: "Cormier, Jonathan" --- drivers/hwmon/ltc2945.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) -- 2.25.1 diff --git a/drivers/hwmon/ltc2945.c b/drivers/hwmon/ltc2945.c index fc7d399b2c85..7239422fc6db 100644 --- a/drivers/hwmon/ltc2945.c +++ b/drivers/hwmon/ltc2945.c @@ -126,6 +126,10 @@ static long long ltc2945_reg_to_val(struct device *dev, u8 reg) } val *= 1000; val = DIV_ROUND_CLOSEST_ULL(val, shunt_resistor); + /* check for overflow, use MAX value if it happened */ + if (val > INT_MAX) + val = INT_MAX; + break; case LTC2945_VIN_H: case LTC2945_MAX_VIN_H: @@ -159,12 +163,14 @@ static long long ltc2945_reg_to_val(struct device *dev, u8 reg) } static int ltc2945_val_to_reg(struct device *dev, u8 reg, - unsigned long val) + unsigned long val_32) { struct ltc2945_data *data = dev_get_drvdata(dev); struct regmap *regmap = data->regmap; u32 shunt_resistor = data->shunt_resistor; unsigned int control; + /* use 64-bit val for intermediate calculations */ + unsigned long long val = val_32; int ret; switch (reg) { @@ -184,7 +190,7 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, if (control & CONTROL_MULT_SELECT) { /* 25 mV * 25 uV = 0.625 uV resolution. */ val *= shunt_resistor; - val = DIV_ROUND_CLOSEST(val, 625 * 1000); + val = DIV_ROUND_CLOSEST_ULL(val, 625LL * 1000LL); } else { /* * 0.5 mV * 25 uV = 0.0125 uV resolution. @@ -192,7 +198,7 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, * accept loss of accuracy. */ val *= shunt_resistor; - val = DIV_ROUND_CLOSEST(val, 25 * 1000) * 2; + val = DIV_ROUND_CLOSEST_ULL(val, 25LL * 1000LL) * 2; } break; case LTC2945_VIN_H: @@ -201,7 +207,7 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, case LTC2945_MAX_VIN_THRES_H: case LTC2945_MIN_VIN_THRES_H: /* 25 mV resolution. */ - val /= 25; + val = DIV_ROUND_CLOSEST_ULL(val, 25LL); break; case LTC2945_ADIN_H: case LTC2945_MAX_ADIN_H: @@ -218,11 +224,15 @@ static int ltc2945_val_to_reg(struct device *dev, u8 reg, case LTC2945_MIN_SENSE_THRES_H: /* 25 uV resolution. Convert to mA. */ val *= shunt_resistor; - val = DIV_ROUND_CLOSEST(val, 25 * 1000); + val = DIV_ROUND_CLOSEST_ULL(val, 25LL * 1000LL); break; default: return -EINVAL; } + /* If val is too large, just return the max value */ + if (val > INT_MAX) + return INT_MAX; + return val; }