Skip to content

Commit 8be4a29

Browse files
committed
ACPI: TAD: Create one attribute group
Instead of creating three attribute groups, one for each supported subset of capabilities, create just one and use an .is_visible() callback in it to decide which attributes to use. No intentional functional impact. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://patch.msgid.link/2412153.ElGaqSPkdT@rafael.j.wysocki
1 parent b48ee1f commit 8be4a29

1 file changed

Lines changed: 35 additions & 45 deletions

File tree

drivers/acpi/acpi_tad.c

Lines changed: 35 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -249,14 +249,6 @@ static ssize_t time_show(struct device *dev, struct device_attribute *attr,
249249

250250
static DEVICE_ATTR_RW(time);
251251

252-
static struct attribute *acpi_tad_time_attrs[] = {
253-
&dev_attr_time.attr,
254-
NULL,
255-
};
256-
static const struct attribute_group acpi_tad_time_attr_group = {
257-
.attrs = acpi_tad_time_attrs,
258-
};
259-
260252
static int acpi_tad_wake_set(struct device *dev, char *method, u32 timer_id,
261253
u32 value)
262254
{
@@ -486,17 +478,6 @@ static ssize_t ac_status_show(struct device *dev, struct device_attribute *attr,
486478

487479
static DEVICE_ATTR_RW(ac_status);
488480

489-
static struct attribute *acpi_tad_attrs[] = {
490-
&dev_attr_caps.attr,
491-
&dev_attr_ac_alarm.attr,
492-
&dev_attr_ac_policy.attr,
493-
&dev_attr_ac_status.attr,
494-
NULL,
495-
};
496-
static const struct attribute_group acpi_tad_attr_group = {
497-
.attrs = acpi_tad_attrs,
498-
};
499-
500481
static ssize_t dc_alarm_store(struct device *dev, struct device_attribute *attr,
501482
const char *buf, size_t count)
502483
{
@@ -545,14 +526,44 @@ static ssize_t dc_status_show(struct device *dev, struct device_attribute *attr,
545526

546527
static DEVICE_ATTR_RW(dc_status);
547528

548-
static struct attribute *acpi_tad_dc_attrs[] = {
529+
static struct attribute *acpi_tad_attrs[] = {
530+
&dev_attr_caps.attr,
531+
&dev_attr_ac_alarm.attr,
532+
&dev_attr_ac_policy.attr,
533+
&dev_attr_ac_status.attr,
549534
&dev_attr_dc_alarm.attr,
550535
&dev_attr_dc_policy.attr,
551536
&dev_attr_dc_status.attr,
537+
&dev_attr_time.attr,
552538
NULL,
553539
};
554-
static const struct attribute_group acpi_tad_dc_attr_group = {
555-
.attrs = acpi_tad_dc_attrs,
540+
541+
static umode_t acpi_tad_attr_is_visible(struct kobject *kobj,
542+
struct attribute *a, int n)
543+
{
544+
struct acpi_tad_driver_data *dd = dev_get_drvdata(kobj_to_dev(kobj));
545+
546+
if (a == &dev_attr_caps.attr)
547+
return a->mode;
548+
549+
if (a == &dev_attr_ac_alarm.attr || a == &dev_attr_ac_policy.attr ||
550+
a == &dev_attr_ac_status.attr)
551+
return a->mode;
552+
553+
if ((dd->capabilities & ACPI_TAD_DC_WAKE) &&
554+
(a == &dev_attr_dc_alarm.attr || a == &dev_attr_dc_policy.attr ||
555+
a == &dev_attr_dc_status.attr))
556+
return a->mode;
557+
558+
if ((dd->capabilities & ACPI_TAD_RT) && a == &dev_attr_time.attr)
559+
return a->mode;
560+
561+
return 0;
562+
}
563+
564+
static const struct attribute_group acpi_tad_attr_group = {
565+
.attrs = acpi_tad_attrs,
566+
.is_visible = acpi_tad_attr_is_visible,
556567
};
557568

558569
static int acpi_tad_disable_timer(struct device *dev, u32 timer_id)
@@ -567,12 +578,6 @@ static void acpi_tad_remove(struct platform_device *pdev)
567578

568579
device_init_wakeup(dev, false);
569580

570-
if (dd->capabilities & ACPI_TAD_RT)
571-
sysfs_remove_group(&dev->kobj, &acpi_tad_time_attr_group);
572-
573-
if (dd->capabilities & ACPI_TAD_DC_WAKE)
574-
sysfs_remove_group(&dev->kobj, &acpi_tad_dc_attr_group);
575-
576581
sysfs_remove_group(&dev->kobj, &acpi_tad_attr_group);
577582

578583
scoped_guard(pm_runtime_noresume, dev) {
@@ -633,6 +638,7 @@ static int acpi_tad_probe(struct platform_device *pdev)
633638
device_init_wakeup(dev, true);
634639
dev_pm_set_driver_flags(dev, DPM_FLAG_SMART_SUSPEND |
635640
DPM_FLAG_MAY_SKIP_RESUME);
641+
636642
/*
637643
* The platform bus type layer tells the ACPI PM domain powers up the
638644
* device, so set the runtime PM status of it to "active".
@@ -643,24 +649,8 @@ static int acpi_tad_probe(struct platform_device *pdev)
643649

644650
ret = sysfs_create_group(&dev->kobj, &acpi_tad_attr_group);
645651
if (ret)
646-
goto fail;
647-
648-
if (caps & ACPI_TAD_DC_WAKE) {
649-
ret = sysfs_create_group(&dev->kobj, &acpi_tad_dc_attr_group);
650-
if (ret)
651-
goto fail;
652-
}
653-
654-
if (caps & ACPI_TAD_RT) {
655-
ret = sysfs_create_group(&dev->kobj, &acpi_tad_time_attr_group);
656-
if (ret)
657-
goto fail;
658-
}
659-
660-
return 0;
652+
acpi_tad_remove(pdev);
661653

662-
fail:
663-
acpi_tad_remove(pdev);
664654
return ret;
665655
}
666656

0 commit comments

Comments
 (0)