mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
extcon: Add extcon_alloc_groups to simplify extcon register function
The alloc groups is functionalized from extcon_dev_register. Signed-off-by: Bumwoo Lee <bw365.lee@samsung.com> Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
This commit is contained in:
parent
3e70a014ab
commit
04151575c5
@ -1187,6 +1187,42 @@ 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)
|
||||
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
|
||||
@ -1242,28 +1278,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) {
|
||||
|
Loading…
Reference in New Issue
Block a user