Hello Lars, On Tue, Sep 29, 2020 at 02:19:53PM +0200, poeschel@lemonage.de wrote: > From: Lars Poeschel > > This adds a class to exported pwm devices. > Exporting a pwm through sysfs did not yield udev events. The I wonder what is your use-case here. This for sure also has a place to be mentioned in the commit log. I suspect there is a better way to accomplish you way. > 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 This sounds conceptually wrong. > 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 > --- > 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); This needs error handling. > + 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); > } Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |