[PATCH] pwm: sysfs: Set class on pwm devices

From: poeschel
Date: Tue Sep 29 2020 - 08:21:18 EST


From: Lars Poeschel <poeschel@xxxxxxxxxxx>

This adds a class to exported pwm devices.
Exporting a pwm through sysfs did not yield udev events. The
dev_uevent_filter function does filter-out devices without a bus or
class.
This was already addressed in commit
commit 7e5d1fd75c3d ("pwm: Set class for exported channels in sysfs")
but this did cause problems and the commit got reverted with
commit c289d6625237 ("Revert "pwm: Set class for exported channels in
sysfs"")

pwm's have to be local to its pwmchip, so we create an individual class
for each pwmchip and assign this class to the pwm belonging to the
pwmchip. This does better map to structure that is also visible in
sysfs.

Signed-off-by: Lars Poeschel <poeschel@xxxxxxxxxxx>
---
drivers/pwm/sysfs.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c
index 449dbc0f49ed..e2dfbc335366 100644
--- a/drivers/pwm/sysfs.c
+++ b/drivers/pwm/sysfs.c
@@ -259,7 +259,7 @@ static int pwm_export_child(struct device *parent, struct pwm_device *pwm)
export->child.release = pwm_export_release;
export->child.parent = parent;
export->child.devt = MKDEV(0, 0);
- export->child.groups = pwm_groups;
+ export->child.class = parent->class;
dev_set_name(&export->child, "pwm%u", pwm->hwpwm);

ret = device_register(&export->child);
@@ -499,6 +499,9 @@ void pwmchip_sysfs_export(struct pwm_chip *chip)
dev_warn(chip->dev,
"device_create failed for pwm_chip sysfs export\n");
}
+
+ parent->class = class_create(THIS_MODULE, parent->kobj.name);
+ parent->class->dev_groups = pwm_groups;
}

void pwmchip_sysfs_unexport(struct pwm_chip *chip)
@@ -518,6 +521,7 @@ void pwmchip_sysfs_unexport(struct pwm_chip *chip)
pwm_unexport_child(parent, pwm);
}

+ class_destroy(parent->class);
put_device(parent);
device_unregister(parent);
}
--
2.28.0