lkml.org 
[lkml]   [2023]   [Feb]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 4/4] extcon: Added extcon_alloc_groups to simplify extcon register function
    Date
    The alloc groups is functionalized from extcon_dev_register.

    Signed-off-by: Bumwoo Lee <bw365.lee@samsung.com>
    ---
    drivers/extcon/extcon.c | 58 +++++++++++++++++++++++++----------------
    1 file changed, 36 insertions(+), 22 deletions(-)

    diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
    index 2aec34909843..919d77539039 100644
    --- a/drivers/extcon/extcon.c
    +++ b/drivers/extcon/extcon.c
    @@ -1179,6 +1179,39 @@ static int extcon_alloc_muex(struct extcon_dev *edev)
    return 0;
    }

    +/**
    + * extcon_alloc_groups() - alloc the groups for extcon device
    + * @edev: extcon device
    + *
    + * Returns 0 if success or error number if fail.
    + */
    +static int extcon_alloc_groups(struct extcon_dev *edev)
    +{
    + int index;
    +
    + if (!edev->max_supported)
    + return 0;
    +
    + edev->extcon_dev_type.groups = kcalloc(edev->max_supported + 2,
    + sizeof(struct attribute_group *),
    + GFP_KERNEL);
    + if (!edev->extcon_dev_type.groups)
    + return -ENOMEM;
    +
    + edev->extcon_dev_type.name = dev_name(&edev->dev);
    + edev->extcon_dev_type.release = dummy_sysfs_dev_release;
    +
    + for (index = 0; index < edev->max_supported; index++)
    + edev->extcon_dev_type.groups[index] = &edev->cables[index].attr_g;
    +
    + if (edev->mutually_exclusive)
    + edev->extcon_dev_type.groups[index] = &edev->attr_g_muex;
    +
    + edev->dev.type = &edev->extcon_dev_type;
    +
    + return 0;
    +}
    +
    /**
    * extcon_dev_register() - Register an new extcon device
    * @edev: the extcon device to be registered
    @@ -1234,28 +1267,9 @@ int extcon_dev_register(struct extcon_dev *edev)
    if (ret)
    goto err_alloc_muex;

    - if (edev->max_supported) {
    - edev->extcon_dev_type.groups =
    - kcalloc(edev->max_supported + 2,
    - sizeof(struct attribute_group *),
    - GFP_KERNEL);
    - if (!edev->extcon_dev_type.groups) {
    - ret = -ENOMEM;
    - goto err_alloc_groups;
    - }
    -
    - edev->extcon_dev_type.name = dev_name(&edev->dev);
    - edev->extcon_dev_type.release = dummy_sysfs_dev_release;
    -
    - for (index = 0; index < edev->max_supported; index++)
    - edev->extcon_dev_type.groups[index] =
    - &edev->cables[index].attr_g;
    - if (edev->mutually_exclusive)
    - edev->extcon_dev_type.groups[index] =
    - &edev->attr_g_muex;
    -
    - edev->dev.type = &edev->extcon_dev_type;
    - }
    + ret = extcon_alloc_groups(edev);
    + if (ret)
    + goto err_alloc_groups;

    spin_lock_init(&edev->lock);
    if (edev->max_supported) {
    --
    2.35.1
    \
     
     \ /
      Last update: 2023-03-27 00:28    [W:4.900 / U:0.612 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site