Messages in this thread Patch in this message | ![/](/images/icornerl.gif) | | Date | Mon, 13 Mar 2023 20:08:29 +0900 | Subject | Re: [PATCH v4 4/4] extcon: Added extcon_alloc_groups to simplify extcon register function | From | Chanwoo Choi <> |
| |
On 23. 3. 2. 18:01, Bumwoo Lee wrote: > 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 321988231806..c366a7988daf 100644 > --- a/drivers/extcon/extcon.c > +++ b/drivers/extcon/extcon.c > @@ -1181,6 +1181,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; > +
ditto.
if (!edev) return -EINVAL;
> + 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 > @@ -1236,28 +1269,9 @@ int extcon_dev_register(struct extcon_dev *edev) > if (ret < 0) > 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 < 0) > + goto err_alloc_groups; > > spin_lock_init(&edev->lock); > if (edev->max_supported) {
-- Best Regards, Samsung Electronics Chanwoo Choi
| ![\](/images/icornerr.gif) |