#include <linux/mfd/abx500.h>
 #include <linux/mfd/abx500/ab8500.h>
 #include <linux/mfd/abx500/ab8500-bm.h>
-#include <linux/mfd/abx500/ab8500-gpadc.h>
+#include <linux/iio/consumer.h>
 
 #define VTVOUT_V                       1800
 
  * @bat_temp:          Dispatched battery temperature in degree Celsius
  * @prev_bat_temp      Last measured battery temperature in degree Celsius
  * @parent:            Pointer to the struct ab8500
- * @gpadc:             Pointer to the struct gpadc
+ * @adc_btemp_ball:    ADC channel for the battery ball temperature
+ * @adc_bat_ctrl:      ADC channel for the battery control
  * @fg:                        Pointer to the struct fg
  * @bm:                Platform specific battery management information
  * @btemp_psy:         Structure for BTEMP specific battery properties
        int bat_temp;
        int prev_bat_temp;
        struct ab8500 *parent;
-       struct ab8500_gpadc *gpadc;
+       struct iio_channel *btemp_ball;
+       struct iio_channel *bat_ctrl;
        struct ab8500_fg *fg;
        struct abx500_bm_data *bm;
        struct power_supply *btemp_psy;
  */
 static int ab8500_btemp_read_batctrl_voltage(struct ab8500_btemp *di)
 {
-       int vbtemp;
+       int vbtemp, ret;
        static int prev;
 
-       vbtemp = ab8500_gpadc_convert(di->gpadc, BAT_CTRL);
-       if (vbtemp < 0) {
+       ret = iio_read_channel_processed(di->bat_ctrl, &vbtemp);
+       if (ret < 0) {
                dev_err(di->dev,
-                       "%s gpadc conversion failed, using previous value",
+                       "%s ADC conversion failed, using previous value",
                        __func__);
                return prev;
        }
  */
 static int ab8500_btemp_measure_temp(struct ab8500_btemp *di)
 {
-       int temp;
+       int temp, ret;
        static int prev;
        int rbat, rntc, vntc;
        u8 id;
                        di->bm->bat_type[id].r_to_t_tbl,
                        di->bm->bat_type[id].n_temp_tbl_elements, rbat);
        } else {
-               vntc = ab8500_gpadc_convert(di->gpadc, BTEMP_BALL);
-               if (vntc < 0) {
+               ret = iio_read_channel_processed(di->btemp_ball, &vntc);
+               if (ret < 0) {
                        dev_err(di->dev,
-                               "%s gpadc conversion failed,"
+                               "%s ADC conversion failed,"
                                " using previous value\n", __func__);
                        return prev;
                }
        /* get parent data */
        di->dev = &pdev->dev;
        di->parent = dev_get_drvdata(pdev->dev.parent);
-       di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0");
+
+       /* Get ADC channels */
+       di->btemp_ball = devm_iio_channel_get(&pdev->dev, "btemp_ball");
+       if (IS_ERR(di->btemp_ball)) {
+               if (PTR_ERR(di->btemp_ball) == -ENODEV)
+                       return -EPROBE_DEFER;
+               dev_err(&pdev->dev, "failed to get BTEMP BALL ADC channel\n");
+               return PTR_ERR(di->btemp_ball);
+       }
+       di->bat_ctrl = devm_iio_channel_get(&pdev->dev, "bat_ctrl");
+       if (IS_ERR(di->bat_ctrl)) {
+               if (PTR_ERR(di->bat_ctrl) == -ENODEV)
+                       return -EPROBE_DEFER;
+               dev_err(&pdev->dev, "failed to get BAT CTRL ADC channel\n");
+               return PTR_ERR(di->bat_ctrl);
+       }
 
        di->initialized = false;