On Tue, 19 Nov 2024, Mario Limonciello wrote: > The `choices` file will show all possible choices that a given platform > profile handler can support. > > Tested-by: Mark Pearson <mpearson-lenovo@xxxxxxxxx> > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > v7: > * Drop locking > v5: > * Fix kdoc > * Add tag > * Fix whitespace > * Adjust mutex use > --- > drivers/acpi/platform_profile.c | 39 +++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/drivers/acpi/platform_profile.c b/drivers/acpi/platform_profile.c > index a9d7ec3c85844..9d6ead043994c 100644 > --- a/drivers/acpi/platform_profile.c > +++ b/drivers/acpi/platform_profile.c > @@ -25,6 +25,27 @@ static_assert(ARRAY_SIZE(profile_names) == PLATFORM_PROFILE_LAST); > > static DEFINE_IDA(platform_profile_ida); > > +/** > + * _commmon_choices_show - Show the available profile choices > + * @choices: The available profile choices > + * @buf: The buffer to write to Add empty line. > + * Return: The number of bytes written > + */ Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx> -- i. > +static ssize_t _commmon_choices_show(unsigned long *choices, char *buf) > +{ > + int i, len = 0; > + > + for_each_set_bit(i, choices, PLATFORM_PROFILE_LAST) { > + if (len == 0) > + len += sysfs_emit_at(buf, len, "%s", profile_names[i]); > + else > + len += sysfs_emit_at(buf, len, " %s", profile_names[i]); > + } > + len += sysfs_emit_at(buf, len, "\n"); > + > + return len; > +} > + > /** > * name_show - Show the name of the profile handler > * @dev: The device > @@ -41,9 +62,27 @@ static ssize_t name_show(struct device *dev, > return sysfs_emit(buf, "%s\n", handler->name); > } > > +/** > + * choices_show - Show the available profile choices > + * @dev: The device > + * @attr: The attribute > + * @buf: The buffer to write to > + */ > +static ssize_t choices_show(struct device *dev, > + struct device_attribute *attr, > + char *buf) > +{ > + struct platform_profile_handler *handler = dev_get_drvdata(dev); > + > + return _commmon_choices_show(handler->choices, buf); > +} > + > static DEVICE_ATTR_RO(name); > +static DEVICE_ATTR_RO(choices); > + > static struct attribute *profile_attrs[] = { > &dev_attr_name.attr, > + &dev_attr_choices.attr, > NULL > }; > ATTRIBUTE_GROUPS(profile); >