Skip to content

Commit 6c711fd

Browse files
committed
ACPI: TAD: Support RTC without wakeup
The ACPI TAD can provide a functional RTC without wakeup capabilities, so stop failing probe if AC wakeup is not supported. Also, if _PRW is missing, do not fail probe, but clear the wakeup bits in capabilities. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://patch.msgid.link/1959268.tdWV9SEqCh@rafael.j.wysocki
1 parent 8be4a29 commit 6c711fd

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

drivers/acpi/acpi_tad.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -546,8 +546,9 @@ static umode_t acpi_tad_attr_is_visible(struct kobject *kobj,
546546
if (a == &dev_attr_caps.attr)
547547
return a->mode;
548548

549-
if (a == &dev_attr_ac_alarm.attr || a == &dev_attr_ac_policy.attr ||
550-
a == &dev_attr_ac_status.attr)
549+
if ((dd->capabilities & ACPI_TAD_AC_WAKE) &&
550+
(a == &dev_attr_ac_alarm.attr || a == &dev_attr_ac_policy.attr ||
551+
a == &dev_attr_ac_status.attr))
551552
return a->mode;
552553

553554
if ((dd->capabilities & ACPI_TAD_DC_WAKE) &&
@@ -581,8 +582,10 @@ static void acpi_tad_remove(struct platform_device *pdev)
581582
sysfs_remove_group(&dev->kobj, &acpi_tad_attr_group);
582583

583584
scoped_guard(pm_runtime_noresume, dev) {
584-
acpi_tad_disable_timer(dev, ACPI_TAD_AC_TIMER);
585-
acpi_tad_clear_status(dev, ACPI_TAD_AC_TIMER);
585+
if (dd->capabilities & ACPI_TAD_AC_WAKE) {
586+
acpi_tad_disable_timer(dev, ACPI_TAD_AC_TIMER);
587+
acpi_tad_clear_status(dev, ACPI_TAD_AC_TIMER);
588+
}
586589
if (dd->capabilities & ACPI_TAD_DC_WAKE) {
587590
acpi_tad_disable_timer(dev, ACPI_TAD_DC_TIMER);
588591
acpi_tad_clear_status(dev, ACPI_TAD_DC_TIMER);
@@ -612,14 +615,9 @@ static int acpi_tad_probe(struct platform_device *pdev)
612615
return -ENODEV;
613616
}
614617

615-
if (!(caps & ACPI_TAD_AC_WAKE)) {
616-
dev_info(dev, "Unsupported capabilities\n");
617-
return -ENODEV;
618-
}
619-
620618
if (!acpi_has_method(handle, "_PRW")) {
621619
dev_info(dev, "Missing _PRW\n");
622-
return -ENODEV;
620+
caps &= ~(ACPI_TAD_AC_WAKE | ACPI_TAD_DC_WAKE);
623621
}
624622

625623
dd = devm_kzalloc(dev, sizeof(*dd), GFP_KERNEL);
@@ -635,9 +633,11 @@ static int acpi_tad_probe(struct platform_device *pdev)
635633
* runtime suspend. Everything else should be taken care of by the ACPI
636634
* PM domain callbacks.
637635
*/
638-
device_init_wakeup(dev, true);
639-
dev_pm_set_driver_flags(dev, DPM_FLAG_SMART_SUSPEND |
640-
DPM_FLAG_MAY_SKIP_RESUME);
636+
if (ACPI_TAD_AC_WAKE | ACPI_TAD_DC_WAKE) {
637+
device_init_wakeup(dev, true);
638+
dev_pm_set_driver_flags(dev, DPM_FLAG_SMART_SUSPEND |
639+
DPM_FLAG_MAY_SKIP_RESUME);
640+
}
641641

642642
/*
643643
* The platform bus type layer tells the ACPI PM domain powers up the

0 commit comments

Comments
 (0)