@@ -249,14 +249,6 @@ static ssize_t time_show(struct device *dev, struct device_attribute *attr,
249249
250250static 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-
260252static 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
487479static 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-
500481static 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
546527static 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
558569static 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