int pdm_count;
        u32 pdm_edges[ADCX140_NUM_PDM_EDGES];
        u32 pdm_edge_val = 0;
+       int gpi_count;
+       u32 gpi_inputs[ADCX140_NUM_GPI_PINS];
+       u32 gpi_input_val = 0;
        int i;
        int ret;
 
                        return ret;
        }
 
+       gpi_count = device_property_count_u32(adcx140->dev, "ti,gpi-config");
+       if (gpi_count <= ADCX140_NUM_GPI_PINS && gpi_count > 0) {
+               ret = device_property_read_u32_array(adcx140->dev,
+                                                    "ti,gpi-config",
+                                                    gpi_inputs, gpi_count);
+               if (ret)
+                       return ret;
+
+               gpi_input_val = gpi_inputs[ADCX140_GPI1_INDEX] << ADCX140_GPI_SHIFT |
+                               gpi_inputs[ADCX140_GPI2_INDEX];
+
+               ret = regmap_write(adcx140->regmap, ADCX140_GPI_CFG0,
+                                  gpi_input_val);
+               if (ret)
+                       return ret;
+
+               gpi_input_val = gpi_inputs[ADCX140_GPI3_INDEX] << ADCX140_GPI_SHIFT |
+                               gpi_inputs[ADCX140_GPI4_INDEX];
+
+               ret = regmap_write(adcx140->regmap, ADCX140_GPI_CFG1,
+                                  gpi_input_val);
+               if (ret)
+                       return ret;
+       }
+
        ret = adcx140_reset(adcx140);
        if (ret)
                goto out;
 
 #define ADCX140_NUM_PDM_EDGES          4
 #define ADCX140_PDM_EDGE_SHIFT         7
 
+#define ADCX140_NUM_GPI_PINS           4
+#define ADCX140_GPI_SHIFT              4
+#define ADCX140_GPI1_INDEX             0
+#define ADCX140_GPI2_INDEX             1
+#define ADCX140_GPI3_INDEX             2
+#define ADCX140_GPI4_INDEX             3
+
 #endif /* _TLV320ADCX140_ */