From: Lars Poeschel <poesc...@lemonage.de> 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 <poesc...@lemonage.de> --- 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