st->write_scale = ad7606_write_scale_hw;
        st->write_os = ad7606_write_os_hw;
 
-       if (st->chip_info->sw_mode_config)
+       if (st->bops->sw_mode_config)
                st->sw_mode_en = device_property_present(st->dev,
                                                         "adi,sw-mode");
 
                memset32(st->range, 2, ARRAY_SIZE(st->range));
                indio_dev->info = &ad7606_info_os_and_range;
 
-               /*
-                * In software mode, the range gpio has no longer its function.
-                * Instead, the scale can be configured individually for each
-                * channel from the range registers.
-                */
-               if (st->chip_info->write_scale_sw)
-                       st->write_scale = st->chip_info->write_scale_sw;
-
-               /*
-                * In software mode, the oversampling is no longer configured
-                * with GPIO pins. Instead, the oversampling can be configured
-                * in configuratiion register.
-                */
-               if (st->chip_info->write_os_sw)
-                       st->write_os = st->chip_info->write_os_sw;
-
-               ret = st->chip_info->sw_mode_config(indio_dev);
+               ret = st->bops->sw_mode_config(indio_dev);
                if (ret < 0)
                        return ret;
        }
 
  *                     oversampling ratios.
  * @oversampling_num   number of elements stored in oversampling_avail array
  * @os_req_reset       some devices require a reset to update oversampling
- * @write_scale_sw     pointer to the function which writes the scale via spi
-                       in software mode
- * @write_os_sw                pointer to the function which writes the os via spi
-                       in software mode
- * @sw_mode_config:    pointer to a function which configured the device
- *                     for software mode
  */
 struct ad7606_chip_info {
        const struct iio_chan_spec      *channels;
        const unsigned int              *oversampling_avail;
        unsigned int                    oversampling_num;
        bool                            os_req_reset;
-       int (*write_scale_sw)(struct iio_dev *indio_dev, int ch, int val);
-       int (*write_os_sw)(struct iio_dev *indio_dev, int val);
-       int (*sw_mode_config)(struct iio_dev *indio_dev);
 };
 
 /**
 /**
  * struct ad7606_bus_ops - driver bus operations
  * @read_block         function pointer for reading blocks of data
+ * @sw_mode_config:    pointer to a function which configured the device
+ *                     for software mode
  */
 struct ad7606_bus_ops {
        /* more methods added in future? */
        int (*read_block)(struct device *dev, int num, void *data);
+       int (*sw_mode_config)(struct iio_dev *indio_dev);
 };
 
 int ad7606_probe(struct device *dev, int irq, void __iomem *base_address,