#define AD7124_CONFIG_REF_SEL(x)       FIELD_PREP(AD7124_CONFIG_REF_SEL_MSK, x)
 #define AD7124_CONFIG_PGA_MSK          GENMASK(2, 0)
 #define AD7124_CONFIG_PGA(x)           FIELD_PREP(AD7124_CONFIG_PGA_MSK, x)
+#define AD7124_CONFIG_IN_BUFF_MSK      GENMASK(7, 6)
+#define AD7124_CONFIG_IN_BUFF(x)       FIELD_PREP(AD7124_CONFIG_IN_BUFF_MSK, x)
 
 /* AD7124_FILTER_X */
 #define AD7124_FILTER_FS_MSK           GENMASK(10, 0)
 struct ad7124_channel_config {
        enum ad7124_ref_sel refsel;
        bool bipolar;
+       bool buf_positive;
+       bool buf_negative;
        unsigned int ain;
        unsigned int vref_mv;
        unsigned int pga_bits;
                else
                        st->channel_config[channel].refsel = tmp;
 
+               st->channel_config[channel].buf_positive =
+                       of_property_read_bool(child, "adi,buffered-positive");
+               st->channel_config[channel].buf_negative =
+                       of_property_read_bool(child, "adi,buffered-negative");
+
                *chan = ad7124_channel_template;
                chan->address = channel;
                chan->scan_index = channel;
 static int ad7124_setup(struct ad7124_state *st)
 {
        unsigned int val, fclk, power_mode;
-       int i, ret;
+       int i, ret, tmp;
 
        fclk = clk_get_rate(st->mclk);
        if (!fclk)
                if (ret < 0)
                        return ret;
 
+               tmp = (st->channel_config[i].buf_positive << 1)  +
+                       st->channel_config[i].buf_negative;
+
                val = AD7124_CONFIG_BIPOLAR(st->channel_config[i].bipolar) |
-                     AD7124_CONFIG_REF_SEL(st->channel_config[i].refsel);
+                     AD7124_CONFIG_REF_SEL(st->channel_config[i].refsel) |
+                     AD7124_CONFIG_IN_BUFF(tmp);
                ret = ad_sd_write_reg(&st->sd, AD7124_CONFIG(i), 2, val);
                if (ret < 0)
                        return ret;