linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] iio: adc: mt6370: Fix ibus and ibat scaling value of some specific vendor ID chips
@ 2023-04-10 10:34 ChiaEn Wu
  2023-04-12 11:31 ` Alexandre Mergnat
  0 siblings, 1 reply; 3+ messages in thread
From: ChiaEn Wu @ 2023-04-10 10:34 UTC (permalink / raw)
  To: jic23, lars, matthias.bgg, angelogioacchino.delregno
  Cc: linux-iio, linux-kernel, linux-arm-kernel, linux-mediatek,
	peterwu.pub, cy_huang, ChiaEn Wu

The scale value of ibus and ibat on the datasheet is incorrect due to the
customer report after the experimentation with some specific vendor ID
chips.

Fixes: c1404d1b659f ("iio: adc: mt6370: Add MediaTek MT6370 support")
Signed-off-by: ChiaEn Wu <chiaen_wu@richtek.com>
---
v3:
- Add 'Fixes' tag
- Revise 'mt6370_adc_get_ibus_scale()' and 'mt6370_adc_get_ibat_scale()'
  from using 'if-else' to using 'switch-case'

v2:
- Move 'get_vendor_info' after iio_priv allocation done
- For the special case, bypass indent, make it out-of-line
- For a simple return, add a blank line
- Drop else
---
---
 drivers/iio/adc/mt6370-adc.c | 53 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 51 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/mt6370-adc.c b/drivers/iio/adc/mt6370-adc.c
index bc62e5a..0bc1121 100644
--- a/drivers/iio/adc/mt6370-adc.c
+++ b/drivers/iio/adc/mt6370-adc.c
@@ -19,6 +19,7 @@
 
 #include <dt-bindings/iio/adc/mediatek,mt6370_adc.h>
 
+#define MT6370_REG_DEV_INFO		0x100
 #define MT6370_REG_CHG_CTRL3		0x113
 #define MT6370_REG_CHG_CTRL7		0x117
 #define MT6370_REG_CHG_ADC		0x121
@@ -27,6 +28,7 @@
 #define MT6370_ADC_START_MASK		BIT(0)
 #define MT6370_ADC_IN_SEL_MASK		GENMASK(7, 4)
 #define MT6370_AICR_ICHG_MASK		GENMASK(7, 2)
+#define MT6370_VENID_MASK		GENMASK(7, 4)
 
 #define MT6370_AICR_100_mA		0x0
 #define MT6370_AICR_150_mA		0x1
@@ -47,6 +49,10 @@
 #define ADC_CONV_TIME_MS		35
 #define ADC_CONV_POLLING_TIME_US	1000
 
+#define MT6370_VID_RT5081		0x8
+#define MT6370_VID_RT5081A		0xA
+#define MT6370_VID_MT6370		0xE
+
 struct mt6370_adc_data {
 	struct device *dev;
 	struct regmap *regmap;
@@ -55,6 +61,7 @@ struct mt6370_adc_data {
 	 * from being read at the same time.
 	 */
 	struct mutex adc_lock;
+	unsigned int vid;
 };
 
 static int mt6370_adc_read_channel(struct mt6370_adc_data *priv, int chan,
@@ -98,6 +105,30 @@ static int mt6370_adc_read_channel(struct mt6370_adc_data *priv, int chan,
 	return ret;
 }
 
+static int mt6370_adc_get_ibus_scale(struct mt6370_adc_data *priv)
+{
+	switch (priv->vid) {
+	case MT6370_VID_RT5081:
+	case MT6370_VID_RT5081A:
+	case MT6370_VID_MT6370:
+		return 3350;
+	default:
+		return 3875;
+	}
+}
+
+static int mt6370_adc_get_ibat_scale(struct mt6370_adc_data *priv)
+{
+	switch (priv->vid) {
+	case MT6370_VID_RT5081:
+	case MT6370_VID_RT5081A:
+	case MT6370_VID_MT6370:
+		return 2680;
+	default:
+		return 3870;
+	}
+}
+
 static int mt6370_adc_read_scale(struct mt6370_adc_data *priv,
 				 int chan, int *val1, int *val2)
 {
@@ -123,7 +154,7 @@ static int mt6370_adc_read_scale(struct mt6370_adc_data *priv,
 		case MT6370_AICR_250_mA:
 		case MT6370_AICR_300_mA:
 		case MT6370_AICR_350_mA:
-			*val1 = 3350;
+			*val1 = mt6370_adc_get_ibus_scale(priv);
 			break;
 		default:
 			*val1 = 5000;
@@ -150,7 +181,7 @@ static int mt6370_adc_read_scale(struct mt6370_adc_data *priv,
 		case MT6370_ICHG_600_mA:
 		case MT6370_ICHG_700_mA:
 		case MT6370_ICHG_800_mA:
-			*val1 = 2680;
+			*val1 = mt6370_adc_get_ibat_scale(priv);
 			break;
 		default:
 			*val1 = 5000;
@@ -251,6 +282,20 @@ static const struct iio_chan_spec mt6370_adc_channels[] = {
 	MT6370_ADC_CHAN(TEMP_JC, IIO_TEMP, 12, BIT(IIO_CHAN_INFO_OFFSET)),
 };
 
+static int mt6370_get_vendor_info(struct mt6370_adc_data *priv)
+{
+	unsigned int dev_info;
+	int ret;
+
+	ret = regmap_read(priv->regmap, MT6370_REG_DEV_INFO, &dev_info);
+	if (ret)
+		return ret;
+
+	priv->vid = FIELD_GET(MT6370_VENID_MASK, dev_info);
+
+	return 0;
+}
+
 static int mt6370_adc_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
@@ -272,6 +317,10 @@ static int mt6370_adc_probe(struct platform_device *pdev)
 	priv->regmap = regmap;
 	mutex_init(&priv->adc_lock);
 
+	ret = mt6370_get_vendor_info(priv);
+	if (ret)
+		return dev_err_probe(dev, ret, "Failed to get vid\n");
+
 	ret = regmap_write(priv->regmap, MT6370_REG_CHG_ADC, 0);
 	if (ret)
 		return dev_err_probe(dev, ret, "Failed to reset ADC\n");
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] iio: adc: mt6370: Fix ibus and ibat scaling value of some specific vendor ID chips
  2023-04-10 10:34 [PATCH v3] iio: adc: mt6370: Fix ibus and ibat scaling value of some specific vendor ID chips ChiaEn Wu
@ 2023-04-12 11:31 ` Alexandre Mergnat
  2023-04-12 20:36   ` Jonathan Cameron
  0 siblings, 1 reply; 3+ messages in thread
From: Alexandre Mergnat @ 2023-04-12 11:31 UTC (permalink / raw)
  To: ChiaEn Wu, jic23, lars, matthias.bgg, angelogioacchino.delregno
  Cc: linux-iio, linux-kernel, linux-arm-kernel, linux-mediatek,
	peterwu.pub, cy_huang

On 10/04/2023 12:34, ChiaEn Wu wrote:
> The scale value of ibus and ibat on the datasheet is incorrect due to the
> customer report after the experimentation with some specific vendor ID
> chips.
> 
> Fixes: c1404d1b659f ("iio: adc: mt6370: Add MediaTek MT6370 support")
> Signed-off-by: ChiaEn Wu<chiaen_wu@richtek.com>

Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>

-- 
Regards,
Alexandre


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] iio: adc: mt6370: Fix ibus and ibat scaling value of some specific vendor ID chips
  2023-04-12 11:31 ` Alexandre Mergnat
@ 2023-04-12 20:36   ` Jonathan Cameron
  0 siblings, 0 replies; 3+ messages in thread
From: Jonathan Cameron @ 2023-04-12 20:36 UTC (permalink / raw)
  To: Alexandre Mergnat
  Cc: ChiaEn Wu, lars, matthias.bgg, angelogioacchino.delregno,
	linux-iio, linux-kernel, linux-arm-kernel, linux-mediatek,
	peterwu.pub, cy_huang

On Wed, 12 Apr 2023 13:31:06 +0200
Alexandre Mergnat <amergnat@baylibre.com> wrote:

> On 10/04/2023 12:34, ChiaEn Wu wrote:
> > The scale value of ibus and ibat on the datasheet is incorrect due to the
> > customer report after the experimentation with some specific vendor ID
> > chips.
> > 
> > Fixes: c1404d1b659f ("iio: adc: mt6370: Add MediaTek MT6370 support")
> > Signed-off-by: ChiaEn Wu<chiaen_wu@richtek.com>  
> 
> Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
> 

Applied to the fixes-togreg branch of iio.git and marked for stable.
As we are very late in this cycle I may well drag this into the
queue for the coming merge window as it will land upstream slightly
quicker that way. If not it will go upstream early in next cycle.
As it's been broken for a while I'm not going to rush this upstream.

Jonathan

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-04-12 20:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-10 10:34 [PATCH v3] iio: adc: mt6370: Fix ibus and ibat scaling value of some specific vendor ID chips ChiaEn Wu
2023-04-12 11:31 ` Alexandre Mergnat
2023-04-12 20:36   ` Jonathan Cameron

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).