#define AD4695_T_REFBUF_MS             100
 #define AD4695_T_REGCONFIG_NS          20
 #define AD4695_T_SCK_CNV_DELAY_NS      80
+#define AD4695_T_CNVL_NS               80
+#define AD4695_T_CNVH_NS               10
 #define AD4695_REG_ACCESS_SCLK_HZ      (10 * MEGA)
 
 /* Max number of voltage input channels. */
  */
 static int ad4695_exit_conversion_mode(struct ad4695_state *st)
 {
-       struct spi_transfer xfer = {
-               .tx_buf = &st->cnv_cmd2,
-               .len = 1,
-               .delay.value = AD4695_T_REGCONFIG_NS,
-               .delay.unit = SPI_DELAY_UNIT_NSECS,
+       /*
+        * An extra transfer is needed to trigger a conversion here so
+        * that we can be 100% sure the command will be processed by the
+        * ADC, rather than relying on it to be in the correct state
+        * when this function is called (this chip has a quirk where the
+        * command only works when reading a conversion, and if the
+        * previous conversion was already read then it won't work). The
+        * actual conversion command is then run at the slower
+        * AD4695_REG_ACCESS_SCLK_HZ speed to guarantee this works.
+        */
+       struct spi_transfer xfers[] = {
+               {
+                       .delay.value = AD4695_T_CNVL_NS,
+                       .delay.unit = SPI_DELAY_UNIT_NSECS,
+                       .cs_change = 1,
+                       .cs_change_delay.value = AD4695_T_CNVH_NS,
+                       .cs_change_delay.unit = SPI_DELAY_UNIT_NSECS,
+               },
+               {
+                       .speed_hz = AD4695_REG_ACCESS_SCLK_HZ,
+                       .tx_buf = &st->cnv_cmd2,
+                       .len = 1,
+                       .delay.value = AD4695_T_REGCONFIG_NS,
+                       .delay.unit = SPI_DELAY_UNIT_NSECS,
+               },
        };
 
        /*
         */
        st->cnv_cmd2 = AD4695_CMD_EXIT_CNV_MODE << 3;
 
-       return spi_sync_transfer(st->spi, &xfer, 1);
+       return spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
 }
 
 static int ad4695_set_ref_voltage(struct ad4695_state *st, int vref_mv)