return iio_format_value(buf, ret, val_len, vals);
 }
 
-static ssize_t iio_format_avail_list(char *buf, const int *vals,
-                                    int type, int length)
+static ssize_t iio_format_list(char *buf, const int *vals, int type, int length,
+                              const char *prefix, const char *suffix)
 {
+       ssize_t len;
        int i;
-       ssize_t len = 0;
+
+       len = scnprintf(buf, PAGE_SIZE, prefix);
 
        switch (type) {
        case IIO_VAL_INT:
                                                " ");
                        else
                                len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               "\n");
+                                               "%s\n", suffix);
                        if (len >= PAGE_SIZE)
                                return -EFBIG;
                }
                                                " ");
                        else
                                len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               "\n");
+                                               "%s\n", suffix);
                        if (len >= PAGE_SIZE)
                                return -EFBIG;
                }
        return len;
 }
 
-static ssize_t iio_format_avail_range(char *buf, const int *vals, int type)
+static ssize_t iio_format_avail_list(char *buf, const int *vals,
+                                    int type, int length)
 {
-       int i;
-       ssize_t len;
 
-       len = snprintf(buf, PAGE_SIZE, "[");
-       switch (type) {
-       case IIO_VAL_INT:
-               for (i = 0; i < 3; i++) {
-                       len += __iio_format_value(buf + len, PAGE_SIZE - len,
-                                                 type, 1, &vals[i]);
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-                       if (i < 2)
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               " ");
-                       else
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               "]\n");
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-               }
-               break;
-       default:
-               for (i = 0; i < 3; i++) {
-                       len += __iio_format_value(buf + len, PAGE_SIZE - len,
-                                                 type, 2, &vals[i * 2]);
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-                       if (i < 2)
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               " ");
-                       else
-                               len += scnprintf(buf + len, PAGE_SIZE - len,
-                                               "]\n");
-                       if (len >= PAGE_SIZE)
-                               return -EFBIG;
-               }
-       }
+       return iio_format_list(buf, vals, type, length, "", "");
+}
 
-       return len;
+static ssize_t iio_format_avail_range(char *buf, const int *vals, int type)
+{
+       return iio_format_list(buf, vals, type, 3, "[", "]");
 }
 
 static ssize_t iio_read_channel_info_avail(struct device *dev,