@@ -75,15 +75,6 @@ int acpi_fan_create_attributes(struct acpi_device *device)
7575 struct acpi_fan * fan = acpi_driver_data (device );
7676 int i , status ;
7777
78- sysfs_attr_init (& fan -> fine_grain_control .attr );
79- fan -> fine_grain_control .show = show_fine_grain_control ;
80- fan -> fine_grain_control .store = NULL ;
81- fan -> fine_grain_control .attr .name = "fine_grain_control" ;
82- fan -> fine_grain_control .attr .mode = 0444 ;
83- status = sysfs_create_file (& device -> dev .kobj , & fan -> fine_grain_control .attr );
84- if (status )
85- return status ;
86-
8778 /* _FST is present if we are here */
8879 sysfs_attr_init (& fan -> fst_speed .attr );
8980 fan -> fst_speed .show = show_fan_speed ;
@@ -92,7 +83,19 @@ int acpi_fan_create_attributes(struct acpi_device *device)
9283 fan -> fst_speed .attr .mode = 0444 ;
9384 status = sysfs_create_file (& device -> dev .kobj , & fan -> fst_speed .attr );
9485 if (status )
95- goto rem_fine_grain_attr ;
86+ return status ;
87+
88+ if (!fan -> acpi4 )
89+ return 0 ;
90+
91+ sysfs_attr_init (& fan -> fine_grain_control .attr );
92+ fan -> fine_grain_control .show = show_fine_grain_control ;
93+ fan -> fine_grain_control .store = NULL ;
94+ fan -> fine_grain_control .attr .name = "fine_grain_control" ;
95+ fan -> fine_grain_control .attr .mode = 0444 ;
96+ status = sysfs_create_file (& device -> dev .kobj , & fan -> fine_grain_control .attr );
97+ if (status )
98+ goto rem_fst_attr ;
9699
97100 for (i = 0 ; i < fan -> fps_count ; ++ i ) {
98101 struct acpi_fan_fps * fps = & fan -> fps [i ];
@@ -109,18 +112,18 @@ int acpi_fan_create_attributes(struct acpi_device *device)
109112
110113 for (j = 0 ; j < i ; ++ j )
111114 sysfs_remove_file (& device -> dev .kobj , & fan -> fps [j ].dev_attr .attr );
112- goto rem_fst_attr ;
115+ goto rem_fine_grain_attr ;
113116 }
114117 }
115118
116119 return 0 ;
117120
118- rem_fst_attr :
119- sysfs_remove_file (& device -> dev .kobj , & fan -> fst_speed .attr );
120-
121121rem_fine_grain_attr :
122122 sysfs_remove_file (& device -> dev .kobj , & fan -> fine_grain_control .attr );
123123
124+ rem_fst_attr :
125+ sysfs_remove_file (& device -> dev .kobj , & fan -> fst_speed .attr );
126+
124127 return status ;
125128}
126129
@@ -129,9 +132,13 @@ void acpi_fan_delete_attributes(struct acpi_device *device)
129132 struct acpi_fan * fan = acpi_driver_data (device );
130133 int i ;
131134
135+ sysfs_remove_file (& device -> dev .kobj , & fan -> fst_speed .attr );
136+
137+ if (!fan -> acpi4 )
138+ return ;
139+
132140 for (i = 0 ; i < fan -> fps_count ; ++ i )
133141 sysfs_remove_file (& device -> dev .kobj , & fan -> fps [i ].dev_attr .attr );
134142
135- sysfs_remove_file (& device -> dev .kobj , & fan -> fst_speed .attr );
136143 sysfs_remove_file (& device -> dev .kobj , & fan -> fine_grain_control .attr );
137144}
0 commit comments