devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eliav Farber <farbere@amazon.com>
To: <jdelvare@suse.com>, <linux@roeck-us.net>, <robh+dt@kernel.org>,
	<p.zabel@pengutronix.de>, <rtanwar@maxlinear.com>,
	<linux-hwmon@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Cc: <farbere@amazon.com>, <talel@amazon.com>, <hhhawa@amazon.com>,
	<jonnyc@amazon.com>, <hanochu@amazon.com>, <ronenk@amazon.com>,
	<itamark@amazon.com>, <shellykz@amazon.com>, <shorer@amazon.com>,
	<amitlavi@amazon.com>, <almogbs@amazon.com>, <dkl@amazon.com>,
	<rahul.tanwar@linux.intel.com>, <andriy.shevchenko@intel.com>
Subject: [PATCH v3 06/19] hwmon: (mr75203) fix multi-channel voltage reading
Date: Tue, 30 Aug 2022 19:21:59 +0000	[thread overview]
Message-ID: <20220830192212.28570-7-farbere@amazon.com> (raw)
In-Reply-To: <20220830192212.28570-1-farbere@amazon.com>

Fix voltage allocation and reading to support all channels in all VMs.
Prior to this change allocation and reading were done only for the first
channel in each VM.
This change counts the total number of channels for allocation, and takes
into account the channel offset when reading the sample data register.

Signed-off-by: Eliav Farber <farbere@amazon.com>
---
V3 -> V2:
- Remove configuration of ip-polling register to a separate commit.
- Explain the fix.

 drivers/hwmon/mr75203.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/hwmon/mr75203.c b/drivers/hwmon/mr75203.c
index 901030125127..639f5a300170 100644
--- a/drivers/hwmon/mr75203.c
+++ b/drivers/hwmon/mr75203.c
@@ -68,8 +68,9 @@
 
 /* VM Individual Macro Register */
 #define VM_COM_REG_SIZE	0x200
-#define VM_SDIF_DONE(n)	(VM_COM_REG_SIZE + 0x34 + 0x200 * (n))
-#define VM_SDIF_DATA(n)	(VM_COM_REG_SIZE + 0x40 + 0x200 * (n))
+#define VM_SDIF_DONE(vm)	(VM_COM_REG_SIZE + 0x34 + 0x200 * (vm))
+#define VM_SDIF_DATA(vm, ch)	\
+	(VM_COM_REG_SIZE + 0x40 + 0x200 * (vm) + 0x4 * (ch))
 
 /* SDA Slave Register */
 #define IP_CTRL			0x00
@@ -115,6 +116,7 @@ struct pvt_device {
 	u32			t_num;
 	u32			p_num;
 	u32			v_num;
+	u32			c_num;
 	u32			ip_freq;
 	u8			*vm_idx;
 };
@@ -179,13 +181,14 @@ static int pvt_read_in(struct device *dev, u32 attr, int channel, long *val)
 	struct pvt_device *pvt = dev_get_drvdata(dev);
 	struct regmap *v_map = pvt->v_map;
 	u32 n, stat;
-	u8 vm_idx;
+	u8 vm_idx, ch_idx;
 	int ret;
 
-	if (channel >= pvt->v_num)
+	if (channel >= pvt->v_num * pvt->c_num)
 		return -EINVAL;
 
-	vm_idx = pvt->vm_idx[channel];
+	vm_idx = pvt->vm_idx[channel / pvt->c_num];
+	ch_idx = channel % pvt->c_num;
 
 	switch (attr) {
 	case hwmon_in_input:
@@ -196,7 +199,7 @@ static int pvt_read_in(struct device *dev, u32 attr, int channel, long *val)
 		if (ret)
 			return ret;
 
-		ret = regmap_read(v_map, VM_SDIF_DATA(vm_idx), &n);
+		ret = regmap_read(v_map, VM_SDIF_DATA(vm_idx, ch_idx), &n);
 		if(ret < 0)
 			return ret;
 
@@ -500,7 +503,7 @@ static int pvt_reset_control_deassert(struct device *dev, struct pvt_device *pvt
 static int mr75203_probe(struct platform_device *pdev)
 {
 	const struct hwmon_channel_info **pvt_info;
-	u32 ts_num, vm_num, pd_num, val, index, i;
+	u32 ts_num, vm_num, pd_num, ch_num, val, index, i;
 	struct device *dev = &pdev->dev;
 	u32 *temp_config, *in_config;
 	struct device *hwmon_dev;
@@ -544,9 +547,11 @@ static int mr75203_probe(struct platform_device *pdev)
 	ts_num = (val & TS_NUM_MSK) >> TS_NUM_SFT;
 	pd_num = (val & PD_NUM_MSK) >> PD_NUM_SFT;
 	vm_num = (val & VM_NUM_MSK) >> VM_NUM_SFT;
+	ch_num = (val & CH_NUM_MSK) >> CH_NUM_SFT;
 	pvt->t_num = ts_num;
 	pvt->p_num = pd_num;
 	pvt->v_num = vm_num;
+	pvt->c_num = ch_num;
 	val = 0;
 	if (ts_num)
 		val++;
@@ -583,6 +588,8 @@ static int mr75203_probe(struct platform_device *pdev)
 	}
 
 	if (vm_num) {
+		u32 total_ch = ch_num * vm_num;
+
 		ret = pvt_get_regmap(pdev, "vm", pvt);
 		if (ret)
 			return ret;
@@ -611,13 +618,13 @@ static int mr75203_probe(struct platform_device *pdev)
 			pvt->v_num = i;
 		}
 
-		in_config = devm_kcalloc(dev, vm_num + 1,
+		in_config = devm_kcalloc(dev, total_ch + 1,
 					 sizeof(*in_config), GFP_KERNEL);
 		if (!in_config)
 			return -ENOMEM;
 
-		memset32(in_config, HWMON_I_INPUT, vm_num);
-		in_config[vm_num] = 0;
+		memset32(in_config, HWMON_I_INPUT, total_ch);
+		in_config[total_ch] = 0;
 		pvt_in.config = in_config;
 
 		pvt_info[index++] = &pvt_in;
-- 
2.37.1


  parent reply	other threads:[~2022-08-30 19:22 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-30 19:21 [PATCH v3 00/19] Variety of fixes and new features for mr75203 driver Eliav Farber
2022-08-30 19:21 ` [PATCH v3 01/19] dt-bindings: hwmon: (mr75203) update "intel,vm-map" property to be optional Eliav Farber
2022-09-02 19:50   ` Rob Herring
2022-08-30 19:21 ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" not defined Eliav Farber
2022-08-31  2:39   ` Guenter Roeck
2022-08-31  4:36     ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel, vm-map" " Farber, Eliav
2022-08-31  5:36   ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" " Guenter Roeck
2022-08-31  5:49     ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel, vm-map" " Farber, Eliav
2022-08-31  6:09       ` Farber, Eliav
2022-08-31 11:48       ` Guenter Roeck
2022-09-01  8:39         ` Farber, Eliav
2022-09-01 14:44           ` Guenter Roeck
2022-09-01 15:24             ` Farber, Eliav
2022-09-01 17:11               ` Guenter Roeck
2022-09-01 18:36                 ` Farber, Eliav
2022-09-01 19:25                   ` Guenter Roeck
2022-09-01 19:49               ` Andy Shevchenko
2022-08-31  9:38   ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" " Andy Shevchenko
2022-09-02 12:08     ` [PATCH v3 02/19] hwmon: (mr75203) fix VM sensor allocation when "intel, vm-map" " Farber, Eliav
2022-09-02 14:15       ` Andy Shevchenko
2022-08-30 19:21 ` [PATCH v3 03/19] hwmon: (mr75203) update pvt->v_num to the actual number of used sensors Eliav Farber
2022-08-31  2:41   ` Guenter Roeck
2022-08-31  4:50     ` Farber, Eliav
2022-08-31  5:31       ` Guenter Roeck
2022-08-30 19:21 ` [PATCH v3 04/19] dt-bindings: hwmon: (mr75203) change "reset" property to be optional Eliav Farber
2022-08-31  8:21   ` Philipp Zabel
2022-08-31  9:43     ` Farber, Eliav
2022-08-31  9:48       ` Philipp Zabel
2022-09-02 19:51   ` Rob Herring
2022-09-03 19:16     ` Farber, Eliav
2022-08-30 19:21 ` [PATCH v3 05/19] hwmon: (mr75203) skip reset-control deassert for SOCs that don't support it Eliav Farber
2022-08-31  8:19   ` Philipp Zabel
2022-08-30 19:21 ` Eliav Farber [this message]
2022-08-31  9:46   ` [PATCH v3 06/19] hwmon: (mr75203) fix multi-channel voltage reading Andy Shevchenko
2022-09-01 13:12     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 07/19] hwmon: (mr75203) enable polling for all VM channels Eliav Farber
2022-08-31 11:21   ` Andy Shevchenko
2022-08-31 11:55     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 08/19] dt-bindings: hwmon: (mr75203) add "moortec,vm-active-channels" property Eliav Farber
2022-08-31 11:39   ` Rob Herring
     [not found]     ` <a8557b5a-6e27-2e66-161e-814fc0f69c1d@amazon.com>
2022-08-31 12:17       ` [PATCH v3 08/19] dt-bindings: hwmon: (mr75203) add "moortec, vm-active-channels" property Rob Herring
2022-08-31 17:47         ` Farber, Eliav
2022-08-31 19:19           ` Rob Herring
2022-08-31 19:55             ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 09/19] hwmon: (mr75203) add VM active channel support Eliav Farber
2022-08-31 11:48   ` Andy Shevchenko
2022-09-02 12:04     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 10/19] dt-bindings: hwmon: (mr75203) add "moortec,vm-pre-scaler" property Eliav Farber
2022-09-02 19:57   ` Rob Herring
2022-09-03 19:34     ` [PATCH v3 10/19] dt-bindings: hwmon: (mr75203) add "moortec, vm-pre-scaler" property Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 11/19] hwmon: (mr75203) add VM pre-scaler support Eliav Farber
2022-08-31 12:02   ` Andy Shevchenko
2022-09-01 14:17     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 12/19] hwmon: (mr75203) fix voltage equation for negative source input Eliav Farber
2022-08-31 12:04   ` Andy Shevchenko
2022-09-01 12:47     ` Farber, Eliav
2022-09-01 20:08       ` Andy Shevchenko
2022-08-30 19:22 ` [PATCH v3 13/19] hwmon: (mr75203) modify the temperature equation according to series 5 datasheet Eliav Farber
2022-08-31 12:06   ` Andy Shevchenko
2022-09-01 12:22     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec,ts-series" property Eliav Farber
2022-08-31  8:23   ` Philipp Zabel
2022-08-31  9:23     ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec, ts-series" property Farber, Eliav
2022-08-31  9:42       ` Philipp Zabel
2022-09-02 13:18         ` Farber, Eliav
2022-09-02 19:59   ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec,ts-series" property Rob Herring
2022-09-03 19:12     ` [PATCH v3 14/19] dt-bindings: hwmon: (mr75203) add "moortec, ts-series" property Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 15/19] hwmon: (mr75203) add support for series 6 temperature equation Eliav Farber
2022-08-31 12:08   ` Andy Shevchenko
2022-09-01 12:14     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 16/19] dt-bindings: hwmon: (mr75203) add coefficient properties for the thermal equation Eliav Farber
2022-09-02 20:03   ` Rob Herring
2022-09-03 19:16     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 17/19] hwmon: (mr75203) parse temperature coefficients from device-tree Eliav Farber
2022-08-31 12:11   ` Andy Shevchenko
2022-09-01  9:54     ` Farber, Eliav
2022-08-30 19:22 ` [PATCH v3 18/19] hwmon: (mr75203) add debugfs to read and write temperature coefficients Eliav Farber
2022-08-31 12:14   ` Andy Shevchenko
2022-09-01  6:54     ` Farber, Eliav
2022-09-01 14:28       ` Guenter Roeck
2022-09-01 19:46       ` Andy Shevchenko
2022-08-30 19:22 ` [PATCH v3 19/19] hwmon: (mr75203) fix coding style space errors Eliav Farber
2022-08-31 12:15   ` Andy Shevchenko
2022-09-01 14:21     ` Farber, Eliav
2022-09-01 14:46       ` Guenter Roeck
2022-09-01 15:31         ` Farber, Eliav
2022-09-01 17:09           ` Guenter Roeck
2022-09-01 18:40             ` Farber, Eliav

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220830192212.28570-7-farbere@amazon.com \
    --to=farbere@amazon.com \
    --cc=almogbs@amazon.com \
    --cc=amitlavi@amazon.com \
    --cc=andriy.shevchenko@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dkl@amazon.com \
    --cc=hanochu@amazon.com \
    --cc=hhhawa@amazon.com \
    --cc=itamark@amazon.com \
    --cc=jdelvare@suse.com \
    --cc=jonnyc@amazon.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=p.zabel@pengutronix.de \
    --cc=rahul.tanwar@linux.intel.com \
    --cc=robh+dt@kernel.org \
    --cc=ronenk@amazon.com \
    --cc=rtanwar@maxlinear.com \
    --cc=shellykz@amazon.com \
    --cc=shorer@amazon.com \
    --cc=talel@amazon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).