return trig;
 }
-
-static int at91_adc_trigger_init(struct iio_dev *indio)
-{
-       struct at91_adc_state *st = iio_priv(indio);
-
-       st->trig = at91_adc_allocate_trigger(indio, st->selected_trig->name);
-       if (IS_ERR(st->trig)) {
-               dev_err(&indio->dev,
-                       "could not allocate trigger\n");
-               return PTR_ERR(st->trig);
-       }
-
-       return 0;
-}
-
 static void at91_adc_trigger_handler_nodma(struct iio_dev *indio_dev,
                                           struct iio_poll_func *pf)
 {
        return IRQ_HANDLED;
 }
 
-static int at91_adc_buffer_init(struct iio_dev *indio)
-{
-       return devm_iio_triggered_buffer_setup(&indio->dev, indio,
-               &iio_pollfunc_store_time,
-               &at91_adc_trigger_handler, &at91_buffer_setup_ops);
-}
-
 static unsigned at91_adc_startup_time(unsigned startup_time_min,
                                      unsigned adc_clk_khz)
 {
        .hwfifo_set_watermark = &at91_adc_set_watermark,
 };
 
+static int at91_adc_buffer_and_trigger_init(struct device *dev,
+                                           struct iio_dev *indio)
+{
+       struct at91_adc_state *st = iio_priv(indio);
+       int ret;
+
+       ret = devm_iio_triggered_buffer_setup(&indio->dev, indio,
+               &iio_pollfunc_store_time,
+               &at91_adc_trigger_handler, &at91_buffer_setup_ops);
+       if (ret < 0) {
+               dev_err(dev, "couldn't initialize the buffer.\n");
+               return ret;
+       }
+
+       if (!st->selected_trig->hw_trig)
+               return 0;
+
+       iio_buffer_set_attrs(indio->buffer, at91_adc_fifo_attributes);
+
+       st->trig = at91_adc_allocate_trigger(indio, st->selected_trig->name);
+       if (IS_ERR(st->trig)) {
+               dev_err(dev, "could not allocate trigger\n");
+               return PTR_ERR(st->trig);
+       }
+
+       /*
+        * Initially the iio buffer has a length of 2 and
+        * a watermark of 1
+        */
+       st->dma_st.watermark = 1;
+
+       return 0;
+}
+
 static int at91_adc_probe(struct platform_device *pdev)
 {
        struct iio_dev *indio_dev;
 
        platform_set_drvdata(pdev, indio_dev);
 
-       ret = at91_adc_buffer_init(indio_dev);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "couldn't initialize the buffer.\n");
+       ret = at91_adc_buffer_and_trigger_init(&pdev->dev, indio_dev);
+       if (ret < 0)
                goto per_clk_disable_unprepare;
-       }
-
-       if (st->selected_trig->hw_trig) {
-               ret = at91_adc_trigger_init(indio_dev);
-               if (ret < 0) {
-                       dev_err(&pdev->dev, "couldn't setup the triggers.\n");
-                       goto per_clk_disable_unprepare;
-               }
-               /*
-                * Initially the iio buffer has a length of 2 and
-                * a watermark of 1
-                */
-               st->dma_st.watermark = 1;
-
-               iio_buffer_set_attrs(indio_dev->buffer,
-                                    at91_adc_fifo_attributes);
-       }
 
        if (dma_coerce_mask_and_coherent(&indio_dev->dev, DMA_BIT_MASK(32)))
                dev_info(&pdev->dev, "cannot set DMA mask to 32-bit\n");