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)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Wed, 28 Dec 2022 17:20:03 +0000 (17:20 +0000)
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>
drivers/iio/adc/twl6030-gpadc.c

index f53e855..40438e5 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
@@ -927,6 +939,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->info = &twl6030_gpadc_iio_info;
        indio_dev->modes = INDIO_DIRECT_MODE;