#include <linux/sysfs.h>
 #include <linux/spi/spi.h>
 #include <linux/regulator/consumer.h>
+#include <linux/gpio/consumer.h>
 #include <linux/err.h>
 #include <linux/module.h>
 #include <linux/bitops.h>
+#include <linux/delay.h>
 
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
        struct spi_device               *spi;
        const struct ad7476_chip_info   *chip_info;
        struct regulator                *reg;
+       struct gpio_desc                *convst_gpio;
        struct spi_transfer             xfer;
        struct spi_message              msg;
        /*
        ID_ADS7868,
 };
 
+static void ad7091_convst(struct ad7476_state *st)
+{
+       if (!st->convst_gpio)
+               return;
+
+       gpiod_set_value(st->convst_gpio, 0);
+       udelay(1); /* CONVST pulse width: 10 ns min */
+       gpiod_set_value(st->convst_gpio, 1);
+       udelay(1); /* Conversion time: 650 ns max */
+}
+
 static irqreturn_t ad7476_trigger_handler(int irq, void  *p)
 {
        struct iio_poll_func *pf = p;
        struct ad7476_state *st = iio_priv(indio_dev);
        int b_sent;
 
+       ad7091_convst(st);
+
        b_sent = spi_sync(st->spi, &st->msg);
        if (b_sent < 0)
                goto done;
        if (ret)
                return ret;
 
+       st->convst_gpio = devm_gpiod_get_optional(&spi->dev,
+                                                 "adi,conversion-start",
+                                                 GPIOD_OUT_LOW);
+       if (IS_ERR(st->convst_gpio))
+               return PTR_ERR(st->convst_gpio);
+
        spi_set_drvdata(spi, indio_dev);
 
        st->spi = spi;