diff options
-rw-r--r-- | drivers/acpi/fan.c | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c index c81f6bdb68b8..a6e149d692cb 100644 --- a/drivers/acpi/fan.c +++ b/drivers/acpi/fan.c | |||
@@ -68,10 +68,6 @@ static struct acpi_driver acpi_fan_driver = { | |||
68 | }, | 68 | }, |
69 | }; | 69 | }; |
70 | 70 | ||
71 | struct acpi_fan { | ||
72 | struct acpi_device * device; | ||
73 | }; | ||
74 | |||
75 | /* -------------------------------------------------------------------------- | 71 | /* -------------------------------------------------------------------------- |
76 | FS Interface (/proc) | 72 | FS Interface (/proc) |
77 | -------------------------------------------------------------------------- */ | 73 | -------------------------------------------------------------------------- */ |
@@ -80,12 +76,12 @@ static struct proc_dir_entry *acpi_fan_dir; | |||
80 | 76 | ||
81 | static int acpi_fan_read_state(struct seq_file *seq, void *offset) | 77 | static int acpi_fan_read_state(struct seq_file *seq, void *offset) |
82 | { | 78 | { |
83 | struct acpi_fan *fan = seq->private; | 79 | struct acpi_device *device = seq->private; |
84 | int state = 0; | 80 | int state = 0; |
85 | 81 | ||
86 | 82 | ||
87 | if (fan) { | 83 | if (device) { |
88 | if (acpi_bus_get_power(fan->device->handle, &state)) | 84 | if (acpi_bus_get_power(device->handle, &state)) |
89 | seq_printf(seq, "status: ERROR\n"); | 85 | seq_printf(seq, "status: ERROR\n"); |
90 | else | 86 | else |
91 | seq_printf(seq, "status: %s\n", | 87 | seq_printf(seq, "status: %s\n", |
@@ -105,11 +101,10 @@ acpi_fan_write_state(struct file *file, const char __user * buffer, | |||
105 | { | 101 | { |
106 | int result = 0; | 102 | int result = 0; |
107 | struct seq_file *m = file->private_data; | 103 | struct seq_file *m = file->private_data; |
108 | struct acpi_fan *fan = m->private; | 104 | struct acpi_device *device = m->private; |
109 | char state_string[12] = { '\0' }; | 105 | char state_string[12] = { '\0' }; |
110 | 106 | ||
111 | 107 | if (count > sizeof(state_string) - 1) | |
112 | if (!fan || (count > sizeof(state_string) - 1)) | ||
113 | return -EINVAL; | 108 | return -EINVAL; |
114 | 109 | ||
115 | if (copy_from_user(state_string, buffer, count)) | 110 | if (copy_from_user(state_string, buffer, count)) |
@@ -117,7 +112,7 @@ acpi_fan_write_state(struct file *file, const char __user * buffer, | |||
117 | 112 | ||
118 | state_string[count] = '\0'; | 113 | state_string[count] = '\0'; |
119 | 114 | ||
120 | result = acpi_bus_set_power(fan->device->handle, | 115 | result = acpi_bus_set_power(device->handle, |
121 | simple_strtoul(state_string, NULL, 0)); | 116 | simple_strtoul(state_string, NULL, 0)); |
122 | if (result) | 117 | if (result) |
123 | return result; | 118 | return result; |
@@ -158,7 +153,7 @@ static int acpi_fan_add_fs(struct acpi_device *device) | |||
158 | return -ENODEV; | 153 | return -ENODEV; |
159 | else { | 154 | else { |
160 | entry->proc_fops = &acpi_fan_state_ops; | 155 | entry->proc_fops = &acpi_fan_state_ops; |
161 | entry->data = acpi_driver_data(device); | 156 | entry->data = device; |
162 | entry->owner = THIS_MODULE; | 157 | entry->owner = THIS_MODULE; |
163 | } | 158 | } |
164 | 159 | ||
@@ -191,14 +186,8 @@ static int acpi_fan_add(struct acpi_device *device) | |||
191 | if (!device) | 186 | if (!device) |
192 | return -EINVAL; | 187 | return -EINVAL; |
193 | 188 | ||
194 | fan = kzalloc(sizeof(struct acpi_fan), GFP_KERNEL); | ||
195 | if (!fan) | ||
196 | return -ENOMEM; | ||
197 | |||
198 | fan->device = device; | ||
199 | strcpy(acpi_device_name(device), "Fan"); | 189 | strcpy(acpi_device_name(device), "Fan"); |
200 | strcpy(acpi_device_class(device), ACPI_FAN_CLASS); | 190 | strcpy(acpi_device_class(device), ACPI_FAN_CLASS); |
201 | acpi_driver_data(device) = fan; | ||
202 | 191 | ||
203 | result = acpi_bus_get_power(device->handle, &state); | 192 | result = acpi_bus_get_power(device->handle, &state); |
204 | if (result) { | 193 | if (result) { |
@@ -227,18 +216,11 @@ static int acpi_fan_add(struct acpi_device *device) | |||
227 | 216 | ||
228 | static int acpi_fan_remove(struct acpi_device *device, int type) | 217 | static int acpi_fan_remove(struct acpi_device *device, int type) |
229 | { | 218 | { |
230 | struct acpi_fan *fan = NULL; | ||
231 | |||
232 | |||
233 | if (!device || !acpi_driver_data(device)) | 219 | if (!device || !acpi_driver_data(device)) |
234 | return -EINVAL; | 220 | return -EINVAL; |
235 | 221 | ||
236 | fan = acpi_driver_data(device); | ||
237 | |||
238 | acpi_fan_remove_fs(device); | 222 | acpi_fan_remove_fs(device); |
239 | 223 | ||
240 | kfree(fan); | ||
241 | |||
242 | return 0; | 224 | return 0; |
243 | } | 225 | } |
244 | 226 | ||