Greg Kroah-Hartman wrote: > There's no need to special-case the dp0 sysfs attributes, the > is_visible() callback in the attribute group can handle that for us, so > add that and add it to the attribute group list making the logic simpler > overall. > > This is a step on the way to moving all of the sysfs attribute handling > into the default driver core attribute group logic so that the soundwire > core does not have to do any of it manually. > > Cc: Vinod Koul <vkoul@xxxxxxxxxx> > Cc: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx> > Cc: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Cc: Sanyog Kale <sanyog.r.kale@xxxxxxxxx> > Cc: alsa-devel@xxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > --- > drivers/soundwire/sysfs_slave.c | 28 ++++++++++++++++++++++------ > 1 file changed, 22 insertions(+), 6 deletions(-) > > diff --git a/drivers/soundwire/sysfs_slave.c b/drivers/soundwire/sysfs_slave.c > index 83e3f6cc3250..8876c7807048 100644 > --- a/drivers/soundwire/sysfs_slave.c > +++ b/drivers/soundwire/sysfs_slave.c > @@ -184,18 +184,40 @@ static struct attribute *dp0_attrs[] = { > NULL, > }; > > +static umode_t dp0_attr_visible(struct kobject *kobj, struct attribute *attr, > + int n) > +{ > + struct sdw_slave *slave = dev_to_sdw_dev(kobj_to_dev(kobj)); > + > + if (slave->prop.dp0_prop) > + return attr->mode; > + return 0; > +} > + > +static bool dp0_group_visible(struct kobject *kobj) > +{ > + struct sdw_slave *slave = dev_to_sdw_dev(kobj_to_dev(kobj)); > + > + if (slave->prop.dp0_prop) > + return true; > + return false; > +} > +DEFINE_SYSFS_GROUP_VISIBLE(dp0); What do you think of the following for cases like these where attr_visible is trivially derivable from group_visible? diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index a42642b277dd..203d2e7e9a1e 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h @@ -117,6 +117,15 @@ struct attribute_group { return name##_attr_visible(kobj, attr, n); \ } +#define DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(name) \ + static inline umode_t sysfs_group_visible_##name( \ + struct kobject *kobj, struct attribute *a, int n) \ + { \ + if (n == 0 && !name##_group_visible(kobj)) \ + return SYSFS_GROUP_INVISIBLE; \ + return a->mode; \ + } + /* * Same as DEFINE_SYSFS_GROUP_VISIBLE, but for groups with only binary * attributes ...i.e. don't require $prefix_attr_visible() to be defined? With or without that: Reviewed-by: Dan Williams <dan.j.williams@xxxxxxxxx>