iio:adc:twl6030: Enable measurements of VUSB, VBAT and others
authorAndreas Kemnade <andreas@kemnade.info>
Thu, 1 Dec 2022 18:16:35 +0000 (19:16 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Feb 2023 11:46:03 +0000 (12:46 +0100)
commit f804bd0dc28683a93a60f271aaefb2fc5b0853dd upstream.

Some inputs need to be wired up to produce proper measurements,
without this change only near zero values are reported.

Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
Fixes: 1696f36482e70 ("iio: twl6030-gpadc: TWL6030, TWL6032 GPADC driver")
Link: https://lore.kernel.org/r/20221201181635.3522962-1-andreas@kemnade.info
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/adc/twl6030-gpadc.c

index 6a4ec58eb9c55ae6e53b2ffa989a0a098ace58e4..8ccd0bc23ca87356d2f8d0ffbb6e8f39f05cb20c 100644 (file)
 #define TWL6030_GPADCS                         BIT(1)
 #define TWL6030_GPADCR                         BIT(0)
 
+#define USB_VBUS_CTRL_SET                      0x04
+#define USB_ID_CTRL_SET                                0x06
+
+#define TWL6030_MISC1                          0xE4
+#define VBUS_MEAS                              0x01
+#define ID_MEAS                                        0x01
+
+#define VAC_MEAS                0x04
+#define VBAT_MEAS               0x02
+#define BB_MEAS                 0x01
+
+
 /**
  * struct twl6030_chnl_calib - channel calibration
  * @gain:              slope coefficient for ideal curve
@@ -943,6 +955,26 @@ static int twl6030_gpadc_probe(struct platform_device *pdev)
                return ret;
        }
 
+       ret = twl_i2c_write_u8(TWL_MODULE_USB, VBUS_MEAS, USB_VBUS_CTRL_SET);
+       if (ret < 0) {
+               dev_err(dev, "failed to wire up inputs\n");
+               return ret;
+       }
+
+       ret = twl_i2c_write_u8(TWL_MODULE_USB, ID_MEAS, USB_ID_CTRL_SET);
+       if (ret < 0) {
+               dev_err(dev, "failed to wire up inputs\n");
+               return ret;
+       }
+
+       ret = twl_i2c_write_u8(TWL6030_MODULE_ID0,
+                               VBAT_MEAS | BB_MEAS | BB_MEAS,
+                               TWL6030_MISC1);
+       if (ret < 0) {
+               dev_err(dev, "failed to wire up inputs\n");
+               return ret;
+       }
+
        indio_dev->name = DRIVER_NAME;
        indio_dev->dev.parent = dev;
        indio_dev->info = &twl6030_gpadc_iio_info;