aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMatthew Garrett <mjg@redhat.com>2011-03-22 19:30:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-22 20:44:00 -0400
commit23a9847f0d5252872c4fecb5d4f803c523bd9283 (patch)
treec85e4580d76007cfe486804e88c71b3ec2e074ab /drivers
parent9661e92c10a9775243c1ecb73373528ed8725a10 (diff)
mbp_nvidia_bl: remove DMI dependency
This driver only has to deal with two different classes of hardware, but right now it needs new DMI entries for every new machine. It turns out that there's an ACPI device that uniquely identifies Apples with backlights, so this patch reworks the driver into an ACPI one, identifies the hardware by checking the PCI vendor of the root bridge and strips out all the DMI code. It also changes the config text to clarify that it works on devices other than Macbook Pros and GPUs other than nvidia. Signed-off-by: Matthew Garrett <mjg@redhat.com> Acked-by: Richard Purdie <richard.purdie@linuxfoundation.org> Cc: Mourad De Clerck <mourad@aquazul.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/backlight/Kconfig8
-rw-r--r--drivers/video/backlight/Makefile2
-rw-r--r--drivers/video/backlight/mbp_nvidia_bl.c366
3 files changed, 101 insertions, 275 deletions
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
index 39a4cd258d5b..aa8cf9d2e34f 100644
--- a/drivers/video/backlight/Kconfig
+++ b/drivers/video/backlight/Kconfig
@@ -244,12 +244,12 @@ config BACKLIGHT_MAX8925
244 If you have a LCD backlight connected to the WLED output of MAX8925 244 If you have a LCD backlight connected to the WLED output of MAX8925
245 WLED output, say Y here to enable this driver. 245 WLED output, say Y here to enable this driver.
246 246
247config BACKLIGHT_MBP_NVIDIA 247config BACKLIGHT_MACBOOK
248 tristate "MacBook Pro Nvidia Backlight Driver" 248 tristate "MacBook Backlight Driver"
249 depends on X86 249 depends on X86
250 help 250 help
251 If you have an Apple Macbook Pro with Nvidia graphics hardware say Y 251 If you have an Apple Macbook say Y to enable a driver for its
252 to enable a driver for its backlight 252 backlight
253 253
254config BACKLIGHT_TOSA 254config BACKLIGHT_TOSA
255 tristate "Sharp SL-6000 Backlight Driver" 255 tristate "Sharp SL-6000 Backlight Driver"
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
index 457996c97f5f..988d7cd159ea 100644
--- a/drivers/video/backlight/Makefile
+++ b/drivers/video/backlight/Makefile
@@ -27,7 +27,7 @@ obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
27obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o 27obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o
28obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o 28obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o
29obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o 29obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o
30obj-$(CONFIG_BACKLIGHT_MBP_NVIDIA) += mbp_nvidia_bl.o 30obj-$(CONFIG_BACKLIGHT_MACBOOK) += mbp_nvidia_bl.o
31obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o 31obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o
32obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o 32obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o
33obj-$(CONFIG_BACKLIGHT_WM831X) += wm831x_bl.o 33obj-$(CONFIG_BACKLIGHT_WM831X) += wm831x_bl.o
diff --git a/drivers/video/backlight/mbp_nvidia_bl.c b/drivers/video/backlight/mbp_nvidia_bl.c
index 74c33944aa86..b22cfb24bd55 100644
--- a/drivers/video/backlight/mbp_nvidia_bl.c
+++ b/drivers/video/backlight/mbp_nvidia_bl.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Backlight Driver for Nvidia 8600 in Macbook Pro 2 * Backlight Driver for Macbooks
3 * 3 *
4 * Copyright (c) Red Hat <mjg@redhat.com> 4 * Copyright (c) Red Hat <mjg@redhat.com>
5 * Based on code from Pommed: 5 * Based on code from Pommed:
@@ -19,23 +19,27 @@
19#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/kernel.h> 20#include <linux/kernel.h>
21#include <linux/init.h> 21#include <linux/init.h>
22#include <linux/platform_device.h>
23#include <linux/backlight.h> 22#include <linux/backlight.h>
24#include <linux/err.h> 23#include <linux/err.h>
25#include <linux/dmi.h>
26#include <linux/io.h> 24#include <linux/io.h>
25#include <linux/pci.h>
26#include <linux/acpi.h>
27 27
28static struct backlight_device *mbp_backlight_device; 28static struct backlight_device *mb_backlight_device;
29 29
30/* Structure to be passed to the DMI_MATCH function. */ 30struct hw_data {
31struct dmi_match_data {
32 /* I/O resource to allocate. */ 31 /* I/O resource to allocate. */
33 unsigned long iostart; 32 unsigned long iostart;
34 unsigned long iolen; 33 unsigned long iolen;
35 /* Backlight operations structure. */ 34 /* Backlight operations structure. */
36 const struct backlight_ops backlight_ops; 35 const struct backlight_ops backlight_ops;
36 void (*set_brightness)(int);
37}; 37};
38 38
39static const struct hw_data *hw_data;
40
41#define DRIVER "mb_backlight: "
42
39/* Module parameters. */ 43/* Module parameters. */
40static int debug; 44static int debug;
41module_param_named(debug, debug, int, 0644); 45module_param_named(debug, debug, int, 0644);
@@ -44,16 +48,21 @@ MODULE_PARM_DESC(debug, "Set to one to enable debugging messages.");
44/* 48/*
45 * Implementation for MacBooks with Intel chipset. 49 * Implementation for MacBooks with Intel chipset.
46 */ 50 */
51static void intel_chipset_set_brightness(int intensity)
52{
53 outb(0x04 | (intensity << 4), 0xb3);
54 outb(0xbf, 0xb2);
55}
56
47static int intel_chipset_send_intensity(struct backlight_device *bd) 57static int intel_chipset_send_intensity(struct backlight_device *bd)
48{ 58{
49 int intensity = bd->props.brightness; 59 int intensity = bd->props.brightness;
50 60
51 if (debug) 61 if (debug)
52 printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n", 62 printk(KERN_DEBUG DRIVER "setting brightness to %d\n",
53 intensity); 63 intensity);
54 64
55 outb(0x04 | (intensity << 4), 0xb3); 65 intel_chipset_set_brightness(intensity);
56 outb(0xbf, 0xb2);
57 return 0; 66 return 0;
58} 67}
59 68
@@ -66,35 +75,41 @@ static int intel_chipset_get_intensity(struct backlight_device *bd)
66 intensity = inb(0xb3) >> 4; 75 intensity = inb(0xb3) >> 4;
67 76
68 if (debug) 77 if (debug)
69 printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n", 78 printk(KERN_DEBUG DRIVER "read brightness of %d\n",
70 intensity); 79 intensity);
71 80
72 return intensity; 81 return intensity;
73} 82}
74 83
75static const struct dmi_match_data intel_chipset_data = { 84static const struct hw_data intel_chipset_data = {
76 .iostart = 0xb2, 85 .iostart = 0xb2,
77 .iolen = 2, 86 .iolen = 2,
78 .backlight_ops = { 87 .backlight_ops = {
79 .options = BL_CORE_SUSPENDRESUME, 88 .options = BL_CORE_SUSPENDRESUME,
80 .get_brightness = intel_chipset_get_intensity, 89 .get_brightness = intel_chipset_get_intensity,
81 .update_status = intel_chipset_send_intensity, 90 .update_status = intel_chipset_send_intensity,
82 } 91 },
92 .set_brightness = intel_chipset_set_brightness,
83}; 93};
84 94
85/* 95/*
86 * Implementation for MacBooks with Nvidia chipset. 96 * Implementation for MacBooks with Nvidia chipset.
87 */ 97 */
98static void nvidia_chipset_set_brightness(int intensity)
99{
100 outb(0x04 | (intensity << 4), 0x52f);
101 outb(0xbf, 0x52e);
102}
103
88static int nvidia_chipset_send_intensity(struct backlight_device *bd) 104static int nvidia_chipset_send_intensity(struct backlight_device *bd)
89{ 105{
90 int intensity = bd->props.brightness; 106 int intensity = bd->props.brightness;
91 107
92 if (debug) 108 if (debug)
93 printk(KERN_DEBUG "mbp_nvidia_bl: setting brightness to %d\n", 109 printk(KERN_DEBUG DRIVER "setting brightness to %d\n",
94 intensity); 110 intensity);
95 111
96 outb(0x04 | (intensity << 4), 0x52f); 112 nvidia_chipset_set_brightness(intensity);
97 outb(0xbf, 0x52e);
98 return 0; 113 return 0;
99} 114}
100 115
@@ -107,295 +122,106 @@ static int nvidia_chipset_get_intensity(struct backlight_device *bd)
107 intensity = inb(0x52f) >> 4; 122 intensity = inb(0x52f) >> 4;
108 123
109 if (debug) 124 if (debug)
110 printk(KERN_DEBUG "mbp_nvidia_bl: read brightness of %d\n", 125 printk(KERN_DEBUG DRIVER "read brightness of %d\n",
111 intensity); 126 intensity);
112 127
113 return intensity; 128 return intensity;
114} 129}
115 130
116static const struct dmi_match_data nvidia_chipset_data = { 131static const struct hw_data nvidia_chipset_data = {
117 .iostart = 0x52e, 132 .iostart = 0x52e,
118 .iolen = 2, 133 .iolen = 2,
119 .backlight_ops = { 134 .backlight_ops = {
120 .options = BL_CORE_SUSPENDRESUME, 135 .options = BL_CORE_SUSPENDRESUME,
121 .get_brightness = nvidia_chipset_get_intensity, 136 .get_brightness = nvidia_chipset_get_intensity,
122 .update_status = nvidia_chipset_send_intensity 137 .update_status = nvidia_chipset_send_intensity
123 } 138 },
139 .set_brightness = nvidia_chipset_set_brightness,
124}; 140};
125 141
126/* 142static int __devinit mb_bl_add(struct acpi_device *dev)
127 * DMI matching.
128 */
129static /* const */ struct dmi_match_data *driver_data;
130
131static int mbp_dmi_match(const struct dmi_system_id *id)
132{ 143{
133 driver_data = id->driver_data; 144 struct backlight_properties props;
145 struct pci_dev *host;
134 146
135 printk(KERN_INFO "mbp_nvidia_bl: %s detected\n", id->ident); 147 host = pci_get_bus_and_slot(0, 0);
136 return 1;
137}
138 148
139static const struct dmi_system_id __initdata mbp_device_table[] = { 149 if (!host) {
140 { 150 printk(KERN_ERR DRIVER "unable to find PCI host\n");
141 .callback = mbp_dmi_match, 151 return -ENODEV;
142 .ident = "MacBook 1,1", 152 }
143 .matches = {
144 DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."),
145 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"),
146 },
147 .driver_data = (void *)&intel_chipset_data,
148 },
149 {
150 .callback = mbp_dmi_match,
151 .ident = "MacBook 2,1",
152 .matches = {
153 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
154 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook2,1"),
155 },
156 .driver_data = (void *)&intel_chipset_data,
157 },
158 {
159 .callback = mbp_dmi_match,
160 .ident = "MacBook 3,1",
161 .matches = {
162 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
163 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook3,1"),
164 },
165 .driver_data = (void *)&intel_chipset_data,
166 },
167 {
168 .callback = mbp_dmi_match,
169 .ident = "MacBook 4,1",
170 .matches = {
171 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
172 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,1"),
173 },
174 .driver_data = (void *)&intel_chipset_data,
175 },
176 {
177 .callback = mbp_dmi_match,
178 .ident = "MacBook 4,2",
179 .matches = {
180 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
181 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook4,2"),
182 },
183 .driver_data = (void *)&intel_chipset_data,
184 },
185 {
186 .callback = mbp_dmi_match,
187 .ident = "MacBookPro 1,1",
188 .matches = {
189 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
190 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro1,1"),
191 },
192 .driver_data = (void *)&intel_chipset_data,
193 },
194 {
195 .callback = mbp_dmi_match,
196 .ident = "MacBookPro 1,2",
197 .matches = {
198 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
199 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro1,2"),
200 },
201 .driver_data = (void *)&intel_chipset_data,
202 },
203 {
204 .callback = mbp_dmi_match,
205 .ident = "MacBookPro 2,1",
206 .matches = {
207 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
208 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,1"),
209 },
210 .driver_data = (void *)&intel_chipset_data,
211 },
212 {
213 .callback = mbp_dmi_match,
214 .ident = "MacBookPro 2,2",
215 .matches = {
216 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
217 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2"),
218 },
219 .driver_data = (void *)&intel_chipset_data,
220 },
221 {
222 .callback = mbp_dmi_match,
223 .ident = "MacBookPro 3,1",
224 .matches = {
225 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
226 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"),
227 },
228 .driver_data = (void *)&intel_chipset_data,
229 },
230 {
231 .callback = mbp_dmi_match,
232 .ident = "MacBookPro 3,2",
233 .matches = {
234 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
235 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,2"),
236 },
237 .driver_data = (void *)&intel_chipset_data,
238 },
239 {
240 .callback = mbp_dmi_match,
241 .ident = "MacBookPro 4,1",
242 .matches = {
243 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
244 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro4,1"),
245 },
246 .driver_data = (void *)&intel_chipset_data,
247 },
248 {
249 .callback = mbp_dmi_match,
250 .ident = "MacBookAir 1,1",
251 .matches = {
252 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
253 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir1,1"),
254 },
255 .driver_data = (void *)&intel_chipset_data,
256 },
257 {
258 .callback = mbp_dmi_match,
259 .ident = "MacBook 5,1",
260 .matches = {
261 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
262 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5,1"),
263 },
264 .driver_data = (void *)&nvidia_chipset_data,
265 },
266 {
267 .callback = mbp_dmi_match,
268 .ident = "MacBook 5,2",
269 .matches = {
270 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
271 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook5,2"),
272 },
273 .driver_data = (void *)&nvidia_chipset_data,
274 },
275 {
276 .callback = mbp_dmi_match,
277 .ident = "MacBook 6,1",
278 .matches = {
279 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
280 DMI_MATCH(DMI_PRODUCT_NAME, "MacBook6,1"),
281 },
282 .driver_data = (void *)&nvidia_chipset_data,
283 },
284 {
285 .callback = mbp_dmi_match,
286 .ident = "MacBookAir 2,1",
287 .matches = {
288 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
289 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir2,1"),
290 },
291 .driver_data = (void *)&nvidia_chipset_data,
292 },
293 {
294 .callback = mbp_dmi_match,
295 .ident = "MacBookPro 5,1",
296 .matches = {
297 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
298 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,1"),
299 },
300 .driver_data = (void *)&nvidia_chipset_data,
301 },
302 {
303 .callback = mbp_dmi_match,
304 .ident = "MacBookPro 5,2",
305 .matches = {
306 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
307 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,2"),
308 },
309 .driver_data = (void *)&nvidia_chipset_data,
310 },
311 {
312 .callback = mbp_dmi_match,
313 .ident = "MacBookPro 5,3",
314 .matches = {
315 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
316 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,3"),
317 },
318 .driver_data = (void *)&nvidia_chipset_data,
319 },
320 {
321 .callback = mbp_dmi_match,
322 .ident = "MacBookPro 5,4",
323 .matches = {
324 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
325 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,4"),
326 },
327 .driver_data = (void *)&nvidia_chipset_data,
328 },
329 {
330 .callback = mbp_dmi_match,
331 .ident = "MacBookPro 5,5",
332 .matches = {
333 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
334 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro5,5"),
335 },
336 .driver_data = (void *)&nvidia_chipset_data,
337 },
338 {
339 .callback = mbp_dmi_match,
340 .ident = "MacBookAir 3,1",
341 .matches = {
342 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
343 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3,1"),
344 },
345 .driver_data = (void *)&nvidia_chipset_data,
346 },
347 {
348 .callback = mbp_dmi_match,
349 .ident = "MacBookAir 3,2",
350 .matches = {
351 DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
352 DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir3,2"),
353 },
354 .driver_data = (void *)&nvidia_chipset_data,
355 },
356 { }
357};
358 153
359static int __init mbp_init(void) 154 if (host->vendor == PCI_VENDOR_ID_INTEL)
360{ 155 hw_data = &intel_chipset_data;
361 struct backlight_properties props; 156 else if (host->vendor == PCI_VENDOR_ID_NVIDIA)
362 if (!dmi_check_system(mbp_device_table)) 157 hw_data = &nvidia_chipset_data;
158
159 pci_dev_put(host);
160
161 if (!hw_data) {
162 printk(KERN_ERR DRIVER "unknown hardware\n");
363 return -ENODEV; 163 return -ENODEV;
164 }
364 165
365 if (!request_region(driver_data->iostart, driver_data->iolen, 166 if (!request_region(hw_data->iostart, hw_data->iolen,
366 "Macbook Pro backlight")) 167 "Macbook backlight"))
367 return -ENXIO; 168 return -ENXIO;
368 169
369 memset(&props, 0, sizeof(struct backlight_properties)); 170 memset(&props, 0, sizeof(struct backlight_properties));
370 props.type = BACKLIGHT_PLATFORM; 171 props.type = BACKLIGHT_PLATFORM;
371 props.max_brightness = 15; 172 props.max_brightness = 15;
372 mbp_backlight_device = backlight_device_register("mbp_backlight", NULL, 173 mb_backlight_device = backlight_device_register("mb_backlight", NULL,
373 NULL, 174 NULL, &hw_data->backlight_ops, &props);
374 &driver_data->backlight_ops, 175
375 &props); 176 if (IS_ERR(mb_backlight_device)) {
376 if (IS_ERR(mbp_backlight_device)) { 177 release_region(hw_data->iostart, hw_data->iolen);
377 release_region(driver_data->iostart, driver_data->iolen); 178 return PTR_ERR(mb_backlight_device);
378 return PTR_ERR(mbp_backlight_device);
379 } 179 }
380 180
381 mbp_backlight_device->props.brightness = 181 mb_backlight_device->props.brightness =
382 driver_data->backlight_ops.get_brightness(mbp_backlight_device); 182 hw_data->backlight_ops.get_brightness(mb_backlight_device);
383 backlight_update_status(mbp_backlight_device); 183 backlight_update_status(mb_backlight_device);
384 184
385 return 0; 185 return 0;
386} 186}
387 187
388static void __exit mbp_exit(void) 188static int __devexit mb_bl_remove(struct acpi_device *dev, int type)
389{ 189{
390 backlight_device_unregister(mbp_backlight_device); 190 backlight_device_unregister(mb_backlight_device);
391 191
392 release_region(driver_data->iostart, driver_data->iolen); 192 release_region(hw_data->iostart, hw_data->iolen);
193 hw_data = NULL;
194 return 0;
195}
196
197static const struct acpi_device_id mb_bl_ids[] = {
198 {"APP0002", 0},
199 {"", 0},
200};
201
202static struct acpi_driver mb_bl_driver = {
203 .name = "Macbook backlight",
204 .ids = mb_bl_ids,
205 .ops = {
206 .add = mb_bl_add,
207 .remove = mb_bl_remove,
208 },
209};
210
211static int __init mb_init(void)
212{
213 return acpi_bus_register_driver(&mb_bl_driver);
214}
215
216static void __exit mb_exit(void)
217{
218 acpi_bus_unregister_driver(&mb_bl_driver);
393} 219}
394 220
395module_init(mbp_init); 221module_init(mb_init);
396module_exit(mbp_exit); 222module_exit(mb_exit);
397 223
398MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>"); 224MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>");
399MODULE_DESCRIPTION("Nvidia-based Macbook Pro Backlight Driver"); 225MODULE_DESCRIPTION("Macbook Backlight Driver");
400MODULE_LICENSE("GPL"); 226MODULE_LICENSE("GPL");
401MODULE_DEVICE_TABLE(dmi, mbp_device_table); 227MODULE_DEVICE_TABLE(acpi, mb_bl_ids);