lkml.org 
[lkml]   [2020]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 05/12] iio: core: split __iio_device_attr_init() to init only the attr object
    Date
    The __iio_device_attr_init() function initializes a device_attribute
    object, but mostly it just does a lot of name creation logic.

    We will want to re-use this logic for name-creation, so this change
    re-purposes the __iio_device_attr_init() to be a __iio_attr_init() function
    which just handles the creation of the attribute name.

    Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
    ---
    drivers/iio/industrialio-core.c | 43 +++++++++++++--------------------
    1 file changed, 17 insertions(+), 26 deletions(-)

    diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
    index f389d8feacb0..e9aa84f5b05a 100644
    --- a/drivers/iio/industrialio-core.c
    +++ b/drivers/iio/industrialio-core.c
    @@ -973,22 +973,15 @@ static ssize_t iio_write_channel_info(struct device *dev,
    }

    static
    -int __iio_device_attr_init(struct device_attribute *dev_attr,
    - const char *postfix,
    - struct iio_chan_spec const *chan,
    - ssize_t (*readfunc)(struct device *dev,
    - struct device_attribute *attr,
    - char *buf),
    - ssize_t (*writefunc)(struct device *dev,
    - struct device_attribute *attr,
    - const char *buf,
    - size_t len),
    - enum iio_shared_by shared_by)
    +int iio_attr_init(struct attribute *attr,
    + const char *postfix,
    + struct iio_chan_spec const *chan,
    + enum iio_shared_by shared_by)
    {
    int ret = 0;
    char *name = NULL;
    char *full_postfix;
    - sysfs_attr_init(&dev_attr->attr);
    + sysfs_attr_init(attr);

    /* Build up postfix of <extend_name>_<modifier>_postfix */
    if (chan->modified && (shared_by == IIO_SEPARATE)) {
    @@ -1084,17 +1077,7 @@ int __iio_device_attr_init(struct device_attribute *dev_attr,
    ret = -ENOMEM;
    goto error_free_full_postfix;
    }
    - dev_attr->attr.name = name;
    -
    - if (readfunc) {
    - dev_attr->attr.mode |= S_IRUGO;
    - dev_attr->show = readfunc;
    - }
    -
    - if (writefunc) {
    - dev_attr->attr.mode |= S_IWUSR;
    - dev_attr->store = writefunc;
    - }
    + attr->name = name;

    error_free_full_postfix:
    kfree(full_postfix);
    @@ -1127,9 +1110,7 @@ int __iio_add_chan_devattr(const char *postfix,
    iio_attr = kzalloc(sizeof(*iio_attr), GFP_KERNEL);
    if (iio_attr == NULL)
    return -ENOMEM;
    - ret = __iio_device_attr_init(&iio_attr->dev_attr,
    - postfix, chan,
    - readfunc, writefunc, shared_by);
    + ret = iio_attr_init(&iio_attr->dev_attr.attr, postfix, chan, shared_by);
    if (ret)
    goto error_iio_dev_attr_free;
    iio_attr->c = chan;
    @@ -1145,6 +1126,16 @@ int __iio_add_chan_devattr(const char *postfix,
    }
    list_add(&iio_attr->l, attr_list);

    + if (readfunc) {
    + iio_attr->dev_attr.attr.mode |= S_IRUGO;
    + iio_attr->dev_attr.show = readfunc;
    + }
    +
    + if (writefunc) {
    + iio_attr->dev_attr.attr.mode |= S_IWUSR;
    + iio_attr->dev_attr.store = writefunc;
    + }
    +
    return 0;

    error_device_attr_deinit:
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-11-17 17:20    [W:4.251 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site