iio: core: Consolidate iio_format_avail_{list,range}()
The iio_format_avail_list() and iio_format_avail_range() functions are almost identical. The only differences are that iio_format_avail_range() expects a fixed amount of items and adds brackets "[ ]" around the output. Refactor them into a common helper function. This improves the maintainability of the code as it makes it easier to modify the implementation of these functions. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Link: https://lore.kernel.org/r/20201114120000.6533-1-lars@metafoo.de Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Родитель
6d90c9a96e
Коммит
eda20ba1e2
|
@ -711,11 +711,13 @@ static ssize_t iio_read_channel_info(struct device *dev,
|
||||||
return iio_format_value(buf, ret, val_len, vals);
|
return iio_format_value(buf, ret, val_len, vals);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t iio_format_avail_list(char *buf, const int *vals,
|
static ssize_t iio_format_list(char *buf, const int *vals, int type, int length,
|
||||||
int type, int length)
|
const char *prefix, const char *suffix)
|
||||||
{
|
{
|
||||||
|
ssize_t len;
|
||||||
int i;
|
int i;
|
||||||
ssize_t len = 0;
|
|
||||||
|
len = scnprintf(buf, PAGE_SIZE, prefix);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case IIO_VAL_INT:
|
case IIO_VAL_INT:
|
||||||
|
@ -729,7 +731,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals,
|
||||||
" ");
|
" ");
|
||||||
else
|
else
|
||||||
len += scnprintf(buf + len, PAGE_SIZE - len,
|
len += scnprintf(buf + len, PAGE_SIZE - len,
|
||||||
"\n");
|
"%s\n", suffix);
|
||||||
if (len >= PAGE_SIZE)
|
if (len >= PAGE_SIZE)
|
||||||
return -EFBIG;
|
return -EFBIG;
|
||||||
}
|
}
|
||||||
|
@ -745,7 +747,7 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals,
|
||||||
" ");
|
" ");
|
||||||
else
|
else
|
||||||
len += scnprintf(buf + len, PAGE_SIZE - len,
|
len += scnprintf(buf + len, PAGE_SIZE - len,
|
||||||
"\n");
|
"%s\n", suffix);
|
||||||
if (len >= PAGE_SIZE)
|
if (len >= PAGE_SIZE)
|
||||||
return -EFBIG;
|
return -EFBIG;
|
||||||
}
|
}
|
||||||
|
@ -754,47 +756,16 @@ static ssize_t iio_format_avail_list(char *buf, const int *vals,
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t iio_format_avail_list(char *buf, const int *vals,
|
||||||
|
int type, int length)
|
||||||
|
{
|
||||||
|
|
||||||
|
return iio_format_list(buf, vals, type, length, "", "");
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t iio_format_avail_range(char *buf, const int *vals, int type)
|
static ssize_t iio_format_avail_range(char *buf, const int *vals, int type)
|
||||||
{
|
{
|
||||||
int i;
|
return iio_format_list(buf, vals, type, 3, "[", "]");
|
||||||
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 len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t iio_read_channel_info_avail(struct device *dev,
|
static ssize_t iio_read_channel_info_avail(struct device *dev,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче