}
 EXPORT_SYMBOL(iio_read_mount_matrix);
 
-static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type,
+static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
                                  int size, const int *vals)
 {
        int tmp0, tmp1;
 
        switch (type) {
        case IIO_VAL_INT:
-               return scnprintf(buf, len, "%d", vals[0]);
+               return sysfs_emit_at(buf, offset, "%d", vals[0]);
        case IIO_VAL_INT_PLUS_MICRO_DB:
                scale_db = true;
                fallthrough;
        case IIO_VAL_INT_PLUS_MICRO:
                if (vals[1] < 0)
-                       return scnprintf(buf, len, "-%d.%06u%s", abs(vals[0]),
-                                       -vals[1], scale_db ? " dB" : "");
+                       return sysfs_emit_at(buf, offset, "-%d.%06u%s",
+                                            abs(vals[0]), -vals[1],
+                                            scale_db ? " dB" : "");
                else
-                       return scnprintf(buf, len, "%d.%06u%s", vals[0], vals[1],
-                                       scale_db ? " dB" : "");
+                       return sysfs_emit_at(buf, offset, "%d.%06u%s", vals[0],
+                                            vals[1], scale_db ? " dB" : "");
        case IIO_VAL_INT_PLUS_NANO:
                if (vals[1] < 0)
-                       return scnprintf(buf, len, "-%d.%09u", abs(vals[0]),
-                                       -vals[1]);
+                       return sysfs_emit_at(buf, offset, "-%d.%09u",
+                                            abs(vals[0]), -vals[1]);
                else
-                       return scnprintf(buf, len, "%d.%09u", vals[0], vals[1]);
+                       return sysfs_emit_at(buf, offset, "%d.%09u", vals[0],
+                                            vals[1]);
        case IIO_VAL_FRACTIONAL:
                tmp2 = div_s64((s64)vals[0] * 1000000000LL, vals[1]);
                tmp1 = vals[1];
                tmp0 = (int)div_s64_rem(tmp2, 1000000000, &tmp1);
                if ((tmp2 < 0) && (tmp0 == 0))
-                       return snprintf(buf, len, "-0.%09u", abs(tmp1));
+                       return sysfs_emit_at(buf, offset, "-0.%09u", abs(tmp1));
                else
-                       return snprintf(buf, len, "%d.%09u", tmp0, abs(tmp1));
+                       return sysfs_emit_at(buf, offset, "%d.%09u", tmp0,
+                                            abs(tmp1));
        case IIO_VAL_FRACTIONAL_LOG2:
                tmp2 = shift_right((s64)vals[0] * 1000000000LL, vals[1]);
                tmp0 = (int)div_s64_rem(tmp2, 1000000000LL, &tmp1);
                if (tmp0 == 0 && tmp2 < 0)
-                       return snprintf(buf, len, "-0.%09u", abs(tmp1));
+                       return sysfs_emit_at(buf, offset, "-0.%09u", abs(tmp1));
                else
-                       return scnprintf(buf, len, "%d.%09u", tmp0, abs(tmp1));
+                       return sysfs_emit_at(buf, offset, "%d.%09u", tmp0,
+                                            abs(tmp1));
        case IIO_VAL_INT_MULTIPLE:
        {
                int i;
                int l = 0;
 
-               for (i = 0; i < size; ++i) {
-                       l += scnprintf(&buf[l], len - l, "%d ", vals[i]);
-                       if (l >= len)
-                               break;
-               }
+               for (i = 0; i < size; ++i)
+                       l += sysfs_emit_at(buf, offset + l, "%d ", vals[i]);
                return l;
        }
        case IIO_VAL_CHAR:
-               return scnprintf(buf, len, "%c", (char)vals[0]);
+               return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
        default:
                return 0;
        }
 {
        ssize_t len;
 
-       len = __iio_format_value(buf, PAGE_SIZE, type, size, vals);
+       len = __iio_format_value(buf, 0, type, size, vals);
        if (len >= PAGE_SIZE - 1)
                return -EFBIG;
 
-       return len + sprintf(buf + len, "\n");
+       return len + sysfs_emit_at(buf, len, "\n");
 }
 EXPORT_SYMBOL_GPL(iio_format_value);
 
                break;
        }
 
-       len = scnprintf(buf, PAGE_SIZE, prefix);
+       len = sysfs_emit(buf, prefix);
 
        for (i = 0; i <= length - stride; i += stride) {
                if (i != 0) {
-                       len += scnprintf(buf + len, PAGE_SIZE - len, " ");
+                       len += sysfs_emit_at(buf, len, " ");
                        if (len >= PAGE_SIZE)
                                return -EFBIG;
                }
 
-               len += __iio_format_value(buf + len, PAGE_SIZE - len, type,
-                                         stride, &vals[i]);
+               len += __iio_format_value(buf, len, type, stride, &vals[i]);
                if (len >= PAGE_SIZE)
                        return -EFBIG;
        }
 
-       len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n", suffix);
+       len += sysfs_emit_at(buf, len, "%s\n", suffix);
 
        return len;
 }