#define VF610_ADC_CAL                  0x80
 
 /* Other field define */
-#define VF610_ADC_ADCHC(x)             ((x) & 0xF)
+#define VF610_ADC_ADCHC(x)             ((x) & 0x1F)
 #define VF610_ADC_AIEN                 (0x1 << 7)
 #define VF610_ADC_CONV_DISABLE         0x1F
 #define VF610_ADC_HS_COCO0             0x1
                                BIT(IIO_CHAN_INFO_SAMP_FREQ),   \
 }
 
+#define VF610_ADC_TEMPERATURE_CHAN(_idx, _chan_type) { \
+       .type = (_chan_type),   \
+       .channel = (_idx),              \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),     \
+}
+
 static const struct iio_chan_spec vf610_adc_iio_channels[] = {
        VF610_ADC_CHAN(0, IIO_VOLTAGE),
        VF610_ADC_CHAN(1, IIO_VOLTAGE),
        VF610_ADC_CHAN(13, IIO_VOLTAGE),
        VF610_ADC_CHAN(14, IIO_VOLTAGE),
        VF610_ADC_CHAN(15, IIO_VOLTAGE),
+       VF610_ADC_TEMPERATURE_CHAN(26, IIO_TEMP),
        /* sentinel */
 };
 
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
+       case IIO_CHAN_INFO_PROCESSED:
                mutex_lock(&indio_dev->mlock);
                reinit_completion(&info->completion);
 
                        return ret;
                }
 
-               *val = info->value;
+               switch (chan->type) {
+               case IIO_VOLTAGE:
+                       *val = info->value;
+                       break;
+               case IIO_TEMP:
+                       /*
+                       * Calculate in degree Celsius times 1000
+                       * Using sensor slope of 1.84 mV/°C and
+                       * V at 25°C of 696 mV
+                       */
+                       *val = 25000 - ((int)info->value - 864) * 1000000 / 1840;
+                       break;
+               default:
+                       mutex_unlock(&indio_dev->mlock);
+                       return -EINVAL;
+               }
+
                mutex_unlock(&indio_dev->mlock);
                return IIO_VAL_INT;