mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
pwm: Unexport children before chip removal
Exported pwm channels aren't removed before the pwmchip and are
leaked. This results in invalid sysfs files. This fix removes
all exported pwm channels before chip removal.
Signed-off-by: David Hsu <[email protected]>
Fixes: 76abbdde2d ("pwm: Add sysfs interface")
Signed-off-by: Thierry Reding <[email protected]>
This commit is contained in:
parent
29b4817d40
commit
0733424c9b
3 changed files with 25 additions and 0 deletions
|
|
@ -339,6 +339,8 @@ int pwmchip_remove(struct pwm_chip *chip)
|
|||
unsigned int i;
|
||||
int ret = 0;
|
||||
|
||||
pwmchip_sysfs_unexport_children(chip);
|
||||
|
||||
mutex_lock(&pwm_lock);
|
||||
|
||||
for (i = 0; i < chip->npwm; i++) {
|
||||
|
|
|
|||
|
|
@ -409,6 +409,24 @@ void pwmchip_sysfs_unexport(struct pwm_chip *chip)
|
|||
}
|
||||
}
|
||||
|
||||
void pwmchip_sysfs_unexport_children(struct pwm_chip *chip)
|
||||
{
|
||||
struct device *parent;
|
||||
unsigned int i;
|
||||
|
||||
parent = class_find_device(&pwm_class, NULL, chip,
|
||||
pwmchip_sysfs_match);
|
||||
if (!parent)
|
||||
return;
|
||||
|
||||
for (i = 0; i < chip->npwm; i++) {
|
||||
struct pwm_device *pwm = &chip->pwms[i];
|
||||
|
||||
if (test_bit(PWMF_EXPORTED, &pwm->flags))
|
||||
pwm_unexport_child(parent, pwm);
|
||||
}
|
||||
}
|
||||
|
||||
static int __init pwm_sysfs_init(void)
|
||||
{
|
||||
return class_register(&pwm_class);
|
||||
|
|
|
|||
Loading…
Reference in a new issue