.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
                .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),
                .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
+               .info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_SAMP_FREQ),
                .indexed = 1,
                .channel = 0,
                .scan_index = 0,
        unsigned int mclk_freq;
        unsigned int dec_rate;
        unsigned int samp_freq;
+       unsigned int samp_freq_avail[ARRAY_SIZE(ad7768_clk_config)];
        struct completion completion;
        struct iio_trigger *trig;
        struct gpio_desc *gpio_sync_in;
        return 0;
 }
 
+static void ad7768_fill_samp_freq_tbl(struct ad7768_state *st)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(ad7768_clk_config); i++)
+               st->samp_freq_avail[i] =
+                       DIV_ROUND_CLOSEST(st->mclk_freq, ad7768_clk_config[i].clk_div);
+}
+
 static int ad7768_set_mode(struct ad7768_state *st,
                           enum ad7768_conv_mode mode)
 {
        return 0;
 }
 
-static ssize_t ad7768_sampling_freq_avail(struct device *dev,
-                                         struct device_attribute *attr,
-                                         char *buf)
-{
-       struct iio_dev *indio_dev = dev_to_iio_dev(dev);
-       struct ad7768_state *st = iio_priv(indio_dev);
-       unsigned int freq;
-       int i, len = 0;
-
-       for (i = 0; i < ARRAY_SIZE(ad7768_clk_config); i++) {
-               freq = DIV_ROUND_CLOSEST(st->mclk_freq,
-                                        ad7768_clk_config[i].clk_div);
-               len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", freq);
-       }
-
-       buf[len - 1] = '\n';
-
-       return len;
-}
-
-static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(ad7768_sampling_freq_avail);
-
 static int ad7768_read_raw(struct iio_dev *indio_dev,
                           struct iio_chan_spec const *chan,
                           int *val, int *val2, long info)
        return -EINVAL;
 }
 
+static int ad7768_read_avail(struct iio_dev *indio_dev,
+                            struct iio_chan_spec const *chan,
+                            const int **vals, int *type, int *length,
+                            long info)
+{
+       struct ad7768_state *st = iio_priv(indio_dev);
+
+       switch (info) {
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               *vals = (int *)st->samp_freq_avail;
+               *length = ARRAY_SIZE(ad7768_clk_config);
+               *type = IIO_VAL_INT;
+               return IIO_AVAIL_LIST;
+       default:
+               return -EINVAL;
+       }
+}
+
 static int ad7768_write_raw(struct iio_dev *indio_dev,
                            struct iio_chan_spec const *chan,
                            int val, int val2, long info)
        return sprintf(label, "%s\n", st->labels[chan->channel]);
 }
 
-static struct attribute *ad7768_attributes[] = {
-       &iio_dev_attr_sampling_frequency_available.dev_attr.attr,
-       NULL
-};
-
-static const struct attribute_group ad7768_group = {
-       .attrs = ad7768_attributes,
-};
-
 static int ad7768_get_current_scan_type(const struct iio_dev *indio_dev,
                                        const struct iio_chan_spec *chan)
 {
 }
 
 static const struct iio_info ad7768_info = {
-       .attrs = &ad7768_group,
        .read_raw = &ad7768_read_raw,
+       .read_avail = &ad7768_read_avail,
        .write_raw = &ad7768_write_raw,
        .read_label = ad7768_read_label,
        .get_current_scan_type = &ad7768_get_current_scan_type,
                return PTR_ERR(st->mclk);
 
        st->mclk_freq = clk_get_rate(st->mclk);
+       ad7768_fill_samp_freq_tbl(st);
 
        indio_dev->channels = ad7768_channels;
        indio_dev->num_channels = ARRAY_SIZE(ad7768_channels);