diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2007-10-12 21:27:47 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2007-10-12 21:27:47 -0400 |
commit | b981d8b3f5e008ff10d993be633ad00564fc22cd (patch) | |
tree | e292dc07b22308912cf6a58354a608b9e5e8e1fd /drivers/macintosh | |
parent | b11d2127c4893a7315d1e16273bc8560049fa3ca (diff) | |
parent | 2b9e0aae1d50e880c58d46788e5e3ebd89d75d62 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
drivers/macintosh/adbhid.c
Diffstat (limited to 'drivers/macintosh')
-rw-r--r-- | drivers/macintosh/Kconfig | 5 | ||||
-rw-r--r-- | drivers/macintosh/adb-iop.c | 1 | ||||
-rw-r--r-- | drivers/macintosh/adb.c | 4 | ||||
-rw-r--r-- | drivers/macintosh/adbhid.c | 21 | ||||
-rw-r--r-- | drivers/macintosh/ans-lcd.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/ans-lcd.h | 11 | ||||
-rw-r--r-- | drivers/macintosh/mac_hid.c | 1 | ||||
-rw-r--r-- | drivers/macintosh/macio_asic.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/rack-meter.c | 1 | ||||
-rw-r--r-- | drivers/macintosh/smu.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/therm_adt746x.c | 5 | ||||
-rw-r--r-- | drivers/macintosh/therm_pm72.c | 6 | ||||
-rw-r--r-- | drivers/macintosh/therm_windtunnel.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/via-pmu.c | 36 | ||||
-rw-r--r-- | drivers/macintosh/via-pmu68k.c | 240 | ||||
-rw-r--r-- | drivers/macintosh/windfarm_core.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/windfarm_lm75_sensor.c | 3 | ||||
-rw-r--r-- | drivers/macintosh/windfarm_smu_sat.c | 2 |
18 files changed, 61 insertions, 290 deletions
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig index 20da011d40d0..77f50b63a970 100644 --- a/drivers/macintosh/Kconfig +++ b/drivers/macintosh/Kconfig | |||
@@ -3,6 +3,11 @@ menuconfig MACINTOSH_DRIVERS | |||
3 | bool "Macintosh device drivers" | 3 | bool "Macintosh device drivers" |
4 | depends on PPC || MAC || X86 | 4 | depends on PPC || MAC || X86 |
5 | default y if (PPC_PMAC || MAC) | 5 | default y if (PPC_PMAC || MAC) |
6 | ---help--- | ||
7 | Say Y here to get to see options for devices used with Macintosh | ||
8 | computers. This option alone does not add any kernel code. | ||
9 | |||
10 | If you say N, all options in this submenu will be skipped and disabled. | ||
6 | 11 | ||
7 | if MACINTOSH_DRIVERS | 12 | if MACINTOSH_DRIVERS |
8 | 13 | ||
diff --git a/drivers/macintosh/adb-iop.c b/drivers/macintosh/adb-iop.c index 17ef5d3c01b4..444696625171 100644 --- a/drivers/macintosh/adb-iop.c +++ b/drivers/macintosh/adb-iop.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/proc_fs.h> | 20 | #include <linux/proc_fs.h> |
21 | 21 | ||
22 | #include <asm/bootinfo.h> | ||
23 | #include <asm/macintosh.h> | 22 | #include <asm/macintosh.h> |
24 | #include <asm/macints.h> | 23 | #include <asm/macints.h> |
25 | #include <asm/mac_iop.h> | 24 | #include <asm/mac_iop.h> |
diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c index bc77c5e2ca9f..5c742a526082 100644 --- a/drivers/macintosh/adb.c +++ b/drivers/macintosh/adb.c | |||
@@ -89,7 +89,7 @@ static int sleepy_trackpad; | |||
89 | static int autopoll_devs; | 89 | static int autopoll_devs; |
90 | int __adb_probe_sync; | 90 | int __adb_probe_sync; |
91 | 91 | ||
92 | #ifdef CONFIG_PM | 92 | #ifdef CONFIG_PM_SLEEP |
93 | static void adb_notify_sleep(struct pmu_sleep_notifier *self, int when); | 93 | static void adb_notify_sleep(struct pmu_sleep_notifier *self, int when); |
94 | static struct pmu_sleep_notifier adb_sleep_notifier = { | 94 | static struct pmu_sleep_notifier adb_sleep_notifier = { |
95 | adb_notify_sleep, | 95 | adb_notify_sleep, |
@@ -313,7 +313,7 @@ int __init adb_init(void) | |||
313 | printk(KERN_WARNING "Warning: no ADB interface detected\n"); | 313 | printk(KERN_WARNING "Warning: no ADB interface detected\n"); |
314 | adb_controller = NULL; | 314 | adb_controller = NULL; |
315 | } else { | 315 | } else { |
316 | #ifdef CONFIG_PM | 316 | #ifdef CONFIG_PM_SLEEP |
317 | pmu_register_sleep_notifier(&adb_sleep_notifier); | 317 | pmu_register_sleep_notifier(&adb_sleep_notifier); |
318 | #endif /* CONFIG_PM */ | 318 | #endif /* CONFIG_PM */ |
319 | #ifdef CONFIG_PPC | 319 | #ifdef CONFIG_PPC |
diff --git a/drivers/macintosh/adbhid.c b/drivers/macintosh/adbhid.c index 9ff2189d2e2a..8cce016b3d09 100644 --- a/drivers/macintosh/adbhid.c +++ b/drivers/macintosh/adbhid.c | |||
@@ -75,7 +75,7 @@ static struct notifier_block adbhid_adb_notifier = { | |||
75 | #define ADB_KEY_POWER_OLD 0x7e | 75 | #define ADB_KEY_POWER_OLD 0x7e |
76 | #define ADB_KEY_POWER 0x7f | 76 | #define ADB_KEY_POWER 0x7f |
77 | 77 | ||
78 | u8 adb_to_linux_keycodes[128] = { | 78 | u16 adb_to_linux_keycodes[128] = { |
79 | /* 0x00 */ KEY_A, /* 30 */ | 79 | /* 0x00 */ KEY_A, /* 30 */ |
80 | /* 0x01 */ KEY_S, /* 31 */ | 80 | /* 0x01 */ KEY_S, /* 31 */ |
81 | /* 0x02 */ KEY_D, /* 32 */ | 81 | /* 0x02 */ KEY_D, /* 32 */ |
@@ -139,7 +139,7 @@ u8 adb_to_linux_keycodes[128] = { | |||
139 | /* 0x3c */ KEY_RIGHT, /* 106 */ | 139 | /* 0x3c */ KEY_RIGHT, /* 106 */ |
140 | /* 0x3d */ KEY_DOWN, /* 108 */ | 140 | /* 0x3d */ KEY_DOWN, /* 108 */ |
141 | /* 0x3e */ KEY_UP, /* 103 */ | 141 | /* 0x3e */ KEY_UP, /* 103 */ |
142 | /* 0x3f */ 0, | 142 | /* 0x3f */ KEY_FN, /* 0x1d0 */ |
143 | /* 0x40 */ 0, | 143 | /* 0x40 */ 0, |
144 | /* 0x41 */ KEY_KPDOT, /* 83 */ | 144 | /* 0x41 */ KEY_KPDOT, /* 83 */ |
145 | /* 0x42 */ 0, | 145 | /* 0x42 */ 0, |
@@ -213,7 +213,7 @@ struct adbhid { | |||
213 | int original_handler_id; | 213 | int original_handler_id; |
214 | int current_handler_id; | 214 | int current_handler_id; |
215 | int mouse_kind; | 215 | int mouse_kind; |
216 | unsigned char *keycode; | 216 | u16 *keycode; |
217 | char name[64]; | 217 | char name[64]; |
218 | char phys[32]; | 218 | char phys[32]; |
219 | int flags; | 219 | int flags; |
@@ -334,7 +334,7 @@ adbhid_input_keycode(int id, int scancode, int repeat) | |||
334 | keycode = ADB_KEY_POWER; | 334 | keycode = ADB_KEY_POWER; |
335 | } | 335 | } |
336 | break; | 336 | break; |
337 | case ADB_KEY_POWER: | 337 | case ADB_KEY_POWER: |
338 | /* Fn + Command will produce a bogus "power" keycode */ | 338 | /* Fn + Command will produce a bogus "power" keycode */ |
339 | if (ahid->flags & FLAG_FN_KEY_PRESSED) { | 339 | if (ahid->flags & FLAG_FN_KEY_PRESSED) { |
340 | keycode = ADB_KEY_CMD; | 340 | keycode = ADB_KEY_CMD; |
@@ -359,8 +359,7 @@ adbhid_input_keycode(int id, int scancode, int repeat) | |||
359 | } | 359 | } |
360 | } else | 360 | } else |
361 | ahid->flags |= FLAG_FN_KEY_PRESSED; | 361 | ahid->flags |= FLAG_FN_KEY_PRESSED; |
362 | /* Swallow the key press */ | 362 | break; |
363 | return; | ||
364 | case ADB_KEY_DEL: | 363 | case ADB_KEY_DEL: |
365 | /* Emulate Fn+delete = forward delete */ | 364 | /* Emulate Fn+delete = forward delete */ |
366 | if (ahid->flags & FLAG_FN_KEY_PRESSED) { | 365 | if (ahid->flags & FLAG_FN_KEY_PRESSED) { |
@@ -374,9 +373,9 @@ adbhid_input_keycode(int id, int scancode, int repeat) | |||
374 | #endif /* CONFIG_PPC_PMAC */ | 373 | #endif /* CONFIG_PPC_PMAC */ |
375 | } | 374 | } |
376 | 375 | ||
377 | if (adbhid[id]->keycode[keycode]) { | 376 | key = adbhid[id]->keycode[keycode]; |
378 | input_report_key(adbhid[id]->input, | 377 | if (key) { |
379 | adbhid[id]->keycode[keycode], !up_flag); | 378 | input_report_key(adbhid[id]->input, key, !up_flag); |
380 | input_sync(adbhid[id]->input); | 379 | input_sync(adbhid[id]->input); |
381 | } else | 380 | } else |
382 | printk(KERN_INFO "Unhandled ADB key (scancode %#02x) %s.\n", keycode, | 381 | printk(KERN_INFO "Unhandled ADB key (scancode %#02x) %s.\n", keycode, |
@@ -795,8 +794,8 @@ adbhid_input_register(int id, int default_id, int original_handler_id, | |||
795 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP); | 794 | input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP); |
796 | input_dev->ledbit[0] = BIT(LED_SCROLLL) | BIT(LED_CAPSL) | BIT(LED_NUML); | 795 | input_dev->ledbit[0] = BIT(LED_SCROLLL) | BIT(LED_CAPSL) | BIT(LED_NUML); |
797 | input_dev->event = adbhid_kbd_event; | 796 | input_dev->event = adbhid_kbd_event; |
798 | input_dev->keycodemax = 127; | 797 | input_dev->keycodemax = KEY_FN; |
799 | input_dev->keycodesize = 1; | 798 | input_dev->keycodesize = sizeof(hid->keycode[0]); |
800 | break; | 799 | break; |
801 | 800 | ||
802 | case ADB_MOUSE: | 801 | case ADB_MOUSE: |
diff --git a/drivers/macintosh/ans-lcd.c b/drivers/macintosh/ans-lcd.c index e54c4d9f6365..73c50bc02095 100644 --- a/drivers/macintosh/ans-lcd.c +++ b/drivers/macintosh/ans-lcd.c | |||
@@ -14,9 +14,10 @@ | |||
14 | #include <asm/uaccess.h> | 14 | #include <asm/uaccess.h> |
15 | #include <asm/sections.h> | 15 | #include <asm/sections.h> |
16 | #include <asm/prom.h> | 16 | #include <asm/prom.h> |
17 | #include <asm/ans-lcd.h> | ||
18 | #include <asm/io.h> | 17 | #include <asm/io.h> |
19 | 18 | ||
19 | #include "ans-lcd.h" | ||
20 | |||
20 | #define ANSLCD_ADDR 0xf301c000 | 21 | #define ANSLCD_ADDR 0xf301c000 |
21 | #define ANSLCD_CTRL_IX 0x00 | 22 | #define ANSLCD_CTRL_IX 0x00 |
22 | #define ANSLCD_DATA_IX 0x10 | 23 | #define ANSLCD_DATA_IX 0x10 |
diff --git a/drivers/macintosh/ans-lcd.h b/drivers/macintosh/ans-lcd.h new file mode 100644 index 000000000000..d795b9fd2db6 --- /dev/null +++ b/drivers/macintosh/ans-lcd.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef _PPC_ANS_LCD_H | ||
2 | #define _PPC_ANS_LCD_H | ||
3 | |||
4 | #define ANSLCD_MINOR 156 | ||
5 | |||
6 | #define ANSLCD_CLEAR 0x01 | ||
7 | #define ANSLCD_SENDCTRL 0x02 | ||
8 | #define ANSLCD_SETSHORTDELAY 0x03 | ||
9 | #define ANSLCD_SETLONGDELAY 0x04 | ||
10 | |||
11 | #endif | ||
diff --git a/drivers/macintosh/mac_hid.c b/drivers/macintosh/mac_hid.c index 76c1e8e4a487..33dee3a773ed 100644 --- a/drivers/macintosh/mac_hid.c +++ b/drivers/macintosh/mac_hid.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/sysctl.h> | 13 | #include <linux/sysctl.h> |
14 | #include <linux/input.h> | 14 | #include <linux/input.h> |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/kbd_kern.h> | ||
16 | 17 | ||
17 | 18 | ||
18 | static struct input_dev *emumousebtn; | 19 | static struct input_dev *emumousebtn; |
diff --git a/drivers/macintosh/macio_asic.c b/drivers/macintosh/macio_asic.c index c96b7fe882a4..ec9e5f32f0ae 100644 --- a/drivers/macintosh/macio_asic.c +++ b/drivers/macintosh/macio_asic.c | |||
@@ -365,10 +365,9 @@ static struct macio_dev * macio_add_one_device(struct macio_chip *chip, | |||
365 | if (np == NULL) | 365 | if (np == NULL) |
366 | return NULL; | 366 | return NULL; |
367 | 367 | ||
368 | dev = kmalloc(sizeof(*dev), GFP_KERNEL); | 368 | dev = kzalloc(sizeof(*dev), GFP_KERNEL); |
369 | if (!dev) | 369 | if (!dev) |
370 | return NULL; | 370 | return NULL; |
371 | memset(dev, 0, sizeof(*dev)); | ||
372 | 371 | ||
373 | dev->bus = &chip->lbus; | 372 | dev->bus = &chip->lbus; |
374 | dev->media_bay = in_bay; | 373 | dev->media_bay = in_bay; |
diff --git a/drivers/macintosh/rack-meter.c b/drivers/macintosh/rack-meter.c index 4177ff004753..2c21d4f25cc8 100644 --- a/drivers/macintosh/rack-meter.c +++ b/drivers/macintosh/rack-meter.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <asm/machdep.h> | 30 | #include <asm/machdep.h> |
31 | #include <asm/pmac_feature.h> | 31 | #include <asm/pmac_feature.h> |
32 | #include <asm/dbdma.h> | 32 | #include <asm/dbdma.h> |
33 | #include <asm/dbdma.h> | ||
34 | #include <asm/macio.h> | 33 | #include <asm/macio.h> |
35 | #include <asm/keylargo.h> | 34 | #include <asm/keylargo.h> |
36 | 35 | ||
diff --git a/drivers/macintosh/smu.c b/drivers/macintosh/smu.c index f8e1a135bf9d..d409f6759482 100644 --- a/drivers/macintosh/smu.c +++ b/drivers/macintosh/smu.c | |||
@@ -1053,10 +1053,9 @@ static int smu_open(struct inode *inode, struct file *file) | |||
1053 | struct smu_private *pp; | 1053 | struct smu_private *pp; |
1054 | unsigned long flags; | 1054 | unsigned long flags; |
1055 | 1055 | ||
1056 | pp = kmalloc(sizeof(struct smu_private), GFP_KERNEL); | 1056 | pp = kzalloc(sizeof(struct smu_private), GFP_KERNEL); |
1057 | if (pp == 0) | 1057 | if (pp == 0) |
1058 | return -ENOMEM; | 1058 | return -ENOMEM; |
1059 | memset(pp, 0, sizeof(struct smu_private)); | ||
1060 | spin_lock_init(&pp->lock); | 1059 | spin_lock_init(&pp->lock); |
1061 | pp->mode = smu_file_commands; | 1060 | pp->mode = smu_file_commands; |
1062 | init_waitqueue_head(&pp->wait); | 1061 | init_waitqueue_head(&pp->wait); |
diff --git a/drivers/macintosh/therm_adt746x.c b/drivers/macintosh/therm_adt746x.c index f25685b9b7cf..276945d51513 100644 --- a/drivers/macintosh/therm_adt746x.c +++ b/drivers/macintosh/therm_adt746x.c | |||
@@ -379,13 +379,10 @@ static int attach_one_thermostat(struct i2c_adapter *adapter, int addr, | |||
379 | if (thermostat) | 379 | if (thermostat) |
380 | return 0; | 380 | return 0; |
381 | 381 | ||
382 | th = (struct thermostat *) | 382 | th = kzalloc(sizeof(struct thermostat), GFP_KERNEL); |
383 | kmalloc(sizeof(struct thermostat), GFP_KERNEL); | ||
384 | |||
385 | if (!th) | 383 | if (!th) |
386 | return -ENOMEM; | 384 | return -ENOMEM; |
387 | 385 | ||
388 | memset(th, 0, sizeof(*th)); | ||
389 | th->clt.addr = addr; | 386 | th->clt.addr = addr; |
390 | th->clt.adapter = adapter; | 387 | th->clt.adapter = adapter; |
391 | th->clt.driver = &thermostat_driver; | 388 | th->clt.driver = &thermostat_driver; |
diff --git a/drivers/macintosh/therm_pm72.c b/drivers/macintosh/therm_pm72.c index dbb22403979f..e43554e754a4 100644 --- a/drivers/macintosh/therm_pm72.c +++ b/drivers/macintosh/therm_pm72.c | |||
@@ -318,10 +318,9 @@ static struct i2c_client *attach_i2c_chip(int id, const char *name) | |||
318 | if (adap == NULL) | 318 | if (adap == NULL) |
319 | return NULL; | 319 | return NULL; |
320 | 320 | ||
321 | clt = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | 321 | clt = kzalloc(sizeof(struct i2c_client), GFP_KERNEL); |
322 | if (clt == NULL) | 322 | if (clt == NULL) |
323 | return NULL; | 323 | return NULL; |
324 | memset(clt, 0, sizeof(struct i2c_client)); | ||
325 | 324 | ||
326 | clt->addr = (id >> 1) & 0x7f; | 325 | clt->addr = (id >> 1) & 0x7f; |
327 | clt->adapter = adap; | 326 | clt->adapter = adap; |
@@ -1770,7 +1769,8 @@ static int call_critical_overtemp(void) | |||
1770 | "PATH=/sbin:/usr/sbin:/bin:/usr/bin", | 1769 | "PATH=/sbin:/usr/sbin:/bin:/usr/bin", |
1771 | NULL }; | 1770 | NULL }; |
1772 | 1771 | ||
1773 | return call_usermodehelper(critical_overtemp_path, argv, envp, 0); | 1772 | return call_usermodehelper(critical_overtemp_path, |
1773 | argv, envp, UMH_WAIT_EXEC); | ||
1774 | } | 1774 | } |
1775 | 1775 | ||
1776 | 1776 | ||
diff --git a/drivers/macintosh/therm_windtunnel.c b/drivers/macintosh/therm_windtunnel.c index 3d0354e96a97..5452da1bb1a5 100644 --- a/drivers/macintosh/therm_windtunnel.c +++ b/drivers/macintosh/therm_windtunnel.c | |||
@@ -431,9 +431,8 @@ do_probe( struct i2c_adapter *adapter, int addr, int kind ) | |||
431 | | I2C_FUNC_SMBUS_WRITE_BYTE) ) | 431 | | I2C_FUNC_SMBUS_WRITE_BYTE) ) |
432 | return 0; | 432 | return 0; |
433 | 433 | ||
434 | if( !(cl=kmalloc(sizeof(*cl), GFP_KERNEL)) ) | 434 | if( !(cl=kzalloc(sizeof(*cl), GFP_KERNEL)) ) |
435 | return -ENOMEM; | 435 | return -ENOMEM; |
436 | memset( cl, 0, sizeof(struct i2c_client) ); | ||
437 | 436 | ||
438 | cl->addr = addr; | 437 | cl->addr = addr; |
439 | cl->adapter = adapter; | 438 | cl->adapter = adapter; |
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index 157080b3b468..f7c509b7a8ea 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
@@ -152,10 +152,10 @@ static spinlock_t pmu_lock; | |||
152 | static u8 pmu_intr_mask; | 152 | static u8 pmu_intr_mask; |
153 | static int pmu_version; | 153 | static int pmu_version; |
154 | static int drop_interrupts; | 154 | static int drop_interrupts; |
155 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 155 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
156 | static int option_lid_wakeup = 1; | 156 | static int option_lid_wakeup = 1; |
157 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 157 | #endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */ |
158 | #if (defined(CONFIG_PM)&&defined(CONFIG_PPC32))||defined(CONFIG_PMAC_BACKLIGHT_LEGACY) | 158 | #if (defined(CONFIG_PM_SLEEP)&&defined(CONFIG_PPC32))||defined(CONFIG_PMAC_BACKLIGHT_LEGACY) |
159 | static int sleep_in_progress; | 159 | static int sleep_in_progress; |
160 | #endif | 160 | #endif |
161 | static unsigned long async_req_locks; | 161 | static unsigned long async_req_locks; |
@@ -410,7 +410,7 @@ static int __init via_pmu_start(void) | |||
410 | 410 | ||
411 | irq = irq_of_parse_and_map(vias, 0); | 411 | irq = irq_of_parse_and_map(vias, 0); |
412 | if (irq == NO_IRQ) { | 412 | if (irq == NO_IRQ) { |
413 | printk(KERN_ERR "via-pmu: can't map interruptn"); | 413 | printk(KERN_ERR "via-pmu: can't map interrupt\n"); |
414 | return -ENODEV; | 414 | return -ENODEV; |
415 | } | 415 | } |
416 | if (request_irq(irq, via_pmu_interrupt, 0, "VIA-PMU", (void *)0)) { | 416 | if (request_irq(irq, via_pmu_interrupt, 0, "VIA-PMU", (void *)0)) { |
@@ -875,7 +875,7 @@ proc_read_options(char *page, char **start, off_t off, | |||
875 | { | 875 | { |
876 | char *p = page; | 876 | char *p = page; |
877 | 877 | ||
878 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 878 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
879 | if (pmu_kind == PMU_KEYLARGO_BASED && | 879 | if (pmu_kind == PMU_KEYLARGO_BASED && |
880 | pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0) | 880 | pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0) |
881 | p += sprintf(p, "lid_wakeup=%d\n", option_lid_wakeup); | 881 | p += sprintf(p, "lid_wakeup=%d\n", option_lid_wakeup); |
@@ -916,7 +916,7 @@ proc_write_options(struct file *file, const char __user *buffer, | |||
916 | *(val++) = 0; | 916 | *(val++) = 0; |
917 | while(*val == ' ') | 917 | while(*val == ' ') |
918 | val++; | 918 | val++; |
919 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 919 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
920 | if (pmu_kind == PMU_KEYLARGO_BASED && | 920 | if (pmu_kind == PMU_KEYLARGO_BASED && |
921 | pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0) | 921 | pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0) |
922 | if (!strcmp(label, "lid_wakeup")) | 922 | if (!strcmp(label, "lid_wakeup")) |
@@ -1738,7 +1738,7 @@ pmu_present(void) | |||
1738 | return via != 0; | 1738 | return via != 0; |
1739 | } | 1739 | } |
1740 | 1740 | ||
1741 | #ifdef CONFIG_PM | 1741 | #ifdef CONFIG_PM_SLEEP |
1742 | 1742 | ||
1743 | static LIST_HEAD(sleep_notifiers); | 1743 | static LIST_HEAD(sleep_notifiers); |
1744 | 1744 | ||
@@ -1769,9 +1769,9 @@ pmu_unregister_sleep_notifier(struct pmu_sleep_notifier* n) | |||
1769 | return 0; | 1769 | return 0; |
1770 | } | 1770 | } |
1771 | EXPORT_SYMBOL(pmu_unregister_sleep_notifier); | 1771 | EXPORT_SYMBOL(pmu_unregister_sleep_notifier); |
1772 | #endif /* CONFIG_PM */ | 1772 | #endif /* CONFIG_PM_SLEEP */ |
1773 | 1773 | ||
1774 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 1774 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
1775 | 1775 | ||
1776 | /* Sleep is broadcast last-to-first */ | 1776 | /* Sleep is broadcast last-to-first */ |
1777 | static void broadcast_sleep(int when) | 1777 | static void broadcast_sleep(int when) |
@@ -2390,7 +2390,7 @@ powerbook_sleep_3400(void) | |||
2390 | return 0; | 2390 | return 0; |
2391 | } | 2391 | } |
2392 | 2392 | ||
2393 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 2393 | #endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */ |
2394 | 2394 | ||
2395 | /* | 2395 | /* |
2396 | * Support for /dev/pmu device | 2396 | * Support for /dev/pmu device |
@@ -2573,7 +2573,7 @@ pmu_ioctl(struct inode * inode, struct file *filp, | |||
2573 | int error = -EINVAL; | 2573 | int error = -EINVAL; |
2574 | 2574 | ||
2575 | switch (cmd) { | 2575 | switch (cmd) { |
2576 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 2576 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
2577 | case PMU_IOC_SLEEP: | 2577 | case PMU_IOC_SLEEP: |
2578 | if (!capable(CAP_SYS_ADMIN)) | 2578 | if (!capable(CAP_SYS_ADMIN)) |
2579 | return -EACCES; | 2579 | return -EACCES; |
@@ -2601,7 +2601,7 @@ pmu_ioctl(struct inode * inode, struct file *filp, | |||
2601 | return put_user(0, argp); | 2601 | return put_user(0, argp); |
2602 | else | 2602 | else |
2603 | return put_user(1, argp); | 2603 | return put_user(1, argp); |
2604 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 2604 | #endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */ |
2605 | 2605 | ||
2606 | #ifdef CONFIG_PMAC_BACKLIGHT_LEGACY | 2606 | #ifdef CONFIG_PMAC_BACKLIGHT_LEGACY |
2607 | /* Compatibility ioctl's for backlight */ | 2607 | /* Compatibility ioctl's for backlight */ |
@@ -2757,7 +2757,7 @@ pmu_polled_request(struct adb_request *req) | |||
2757 | * to do suspend-to-disk. | 2757 | * to do suspend-to-disk. |
2758 | */ | 2758 | */ |
2759 | 2759 | ||
2760 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 2760 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
2761 | 2761 | ||
2762 | int pmu_sys_suspended; | 2762 | int pmu_sys_suspended; |
2763 | 2763 | ||
@@ -2792,7 +2792,7 @@ static int pmu_sys_resume(struct sys_device *sysdev) | |||
2792 | return 0; | 2792 | return 0; |
2793 | } | 2793 | } |
2794 | 2794 | ||
2795 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 2795 | #endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */ |
2796 | 2796 | ||
2797 | static struct sysdev_class pmu_sysclass = { | 2797 | static struct sysdev_class pmu_sysclass = { |
2798 | set_kset_name("pmu"), | 2798 | set_kset_name("pmu"), |
@@ -2803,10 +2803,10 @@ static struct sys_device device_pmu = { | |||
2803 | }; | 2803 | }; |
2804 | 2804 | ||
2805 | static struct sysdev_driver driver_pmu = { | 2805 | static struct sysdev_driver driver_pmu = { |
2806 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 2806 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
2807 | .suspend = &pmu_sys_suspend, | 2807 | .suspend = &pmu_sys_suspend, |
2808 | .resume = &pmu_sys_resume, | 2808 | .resume = &pmu_sys_resume, |
2809 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 2809 | #endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */ |
2810 | }; | 2810 | }; |
2811 | 2811 | ||
2812 | static int __init init_pmu_sysfs(void) | 2812 | static int __init init_pmu_sysfs(void) |
@@ -2841,10 +2841,10 @@ EXPORT_SYMBOL(pmu_wait_complete); | |||
2841 | EXPORT_SYMBOL(pmu_suspend); | 2841 | EXPORT_SYMBOL(pmu_suspend); |
2842 | EXPORT_SYMBOL(pmu_resume); | 2842 | EXPORT_SYMBOL(pmu_resume); |
2843 | EXPORT_SYMBOL(pmu_unlock); | 2843 | EXPORT_SYMBOL(pmu_unlock); |
2844 | #if defined(CONFIG_PM) && defined(CONFIG_PPC32) | 2844 | #if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PPC32) |
2845 | EXPORT_SYMBOL(pmu_enable_irled); | 2845 | EXPORT_SYMBOL(pmu_enable_irled); |
2846 | EXPORT_SYMBOL(pmu_battery_count); | 2846 | EXPORT_SYMBOL(pmu_battery_count); |
2847 | EXPORT_SYMBOL(pmu_batteries); | 2847 | EXPORT_SYMBOL(pmu_batteries); |
2848 | EXPORT_SYMBOL(pmu_power_flags); | 2848 | EXPORT_SYMBOL(pmu_power_flags); |
2849 | #endif /* CONFIG_PM && CONFIG_PPC32 */ | 2849 | #endif /* CONFIG_PM_SLEEP && CONFIG_PPC32 */ |
2850 | 2850 | ||
diff --git a/drivers/macintosh/via-pmu68k.c b/drivers/macintosh/via-pmu68k.c index dfdf11c1eec4..e2f84da09e7c 100644 --- a/drivers/macintosh/via-pmu68k.c +++ b/drivers/macintosh/via-pmu68k.c | |||
@@ -818,243 +818,3 @@ pmu_present(void) | |||
818 | { | 818 | { |
819 | return (pmu_kind != PMU_UNKNOWN); | 819 | return (pmu_kind != PMU_UNKNOWN); |
820 | } | 820 | } |
821 | |||
822 | #if 0 /* needs some work for 68K */ | ||
823 | |||
824 | /* | ||
825 | * This struct is used to store config register values for | ||
826 | * PCI devices which may get powered off when we sleep. | ||
827 | */ | ||
828 | static struct pci_save { | ||
829 | u16 command; | ||
830 | u16 cache_lat; | ||
831 | u16 intr; | ||
832 | } *pbook_pci_saves; | ||
833 | static int n_pbook_pci_saves; | ||
834 | |||
835 | static inline void | ||
836 | pbook_pci_save(void) | ||
837 | { | ||
838 | int npci; | ||
839 | struct pci_dev *pd = NULL; | ||
840 | struct pci_save *ps; | ||
841 | |||
842 | npci = 0; | ||
843 | while ((pd = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pd)) != NULL) | ||
844 | ++npci; | ||
845 | n_pbook_pci_saves = npci; | ||
846 | if (npci == 0) | ||
847 | return; | ||
848 | ps = kmalloc(npci * sizeof(*ps), GFP_KERNEL); | ||
849 | pbook_pci_saves = ps; | ||
850 | if (ps == NULL) | ||
851 | return; | ||
852 | |||
853 | pd = NULL; | ||
854 | while ((pd = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pd)) != NULL) { | ||
855 | pci_read_config_word(pd, PCI_COMMAND, &ps->command); | ||
856 | pci_read_config_word(pd, PCI_CACHE_LINE_SIZE, &ps->cache_lat); | ||
857 | pci_read_config_word(pd, PCI_INTERRUPT_LINE, &ps->intr); | ||
858 | ++ps; | ||
859 | --npci; | ||
860 | } | ||
861 | } | ||
862 | |||
863 | static inline void | ||
864 | pbook_pci_restore(void) | ||
865 | { | ||
866 | u16 cmd; | ||
867 | struct pci_save *ps = pbook_pci_saves; | ||
868 | struct pci_dev *pd = NULL; | ||
869 | int j; | ||
870 | |||
871 | while ((pd = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pd)) != NULL) { | ||
872 | if (ps->command == 0) | ||
873 | continue; | ||
874 | pci_read_config_word(pd, PCI_COMMAND, &cmd); | ||
875 | if ((ps->command & ~cmd) == 0) | ||
876 | continue; | ||
877 | switch (pd->hdr_type) { | ||
878 | case PCI_HEADER_TYPE_NORMAL: | ||
879 | for (j = 0; j < 6; ++j) | ||
880 | pci_write_config_dword(pd, | ||
881 | PCI_BASE_ADDRESS_0 + j*4, | ||
882 | pd->resource[j].start); | ||
883 | pci_write_config_dword(pd, PCI_ROM_ADDRESS, | ||
884 | pd->resource[PCI_ROM_RESOURCE].start); | ||
885 | pci_write_config_word(pd, PCI_CACHE_LINE_SIZE, | ||
886 | ps->cache_lat); | ||
887 | pci_write_config_word(pd, PCI_INTERRUPT_LINE, | ||
888 | ps->intr); | ||
889 | pci_write_config_word(pd, PCI_COMMAND, ps->command); | ||
890 | break; | ||
891 | /* other header types not restored at present */ | ||
892 | } | ||
893 | } | ||
894 | } | ||
895 | |||
896 | /* | ||
897 | * Put the powerbook to sleep. | ||
898 | */ | ||
899 | #define IRQ_ENABLE ((unsigned int *)0xf3000024) | ||
900 | #define MEM_CTRL ((unsigned int *)0xf8000070) | ||
901 | |||
902 | int powerbook_sleep(void) | ||
903 | { | ||
904 | int ret, i, x; | ||
905 | static int save_backlight; | ||
906 | static unsigned int save_irqen; | ||
907 | unsigned long msr; | ||
908 | unsigned int hid0; | ||
909 | unsigned long p, wait; | ||
910 | struct adb_request sleep_req; | ||
911 | |||
912 | /* Notify device drivers */ | ||
913 | ret = blocking_notifier_call_chain(&sleep_notifier_list, | ||
914 | PBOOK_SLEEP, NULL); | ||
915 | if (ret & NOTIFY_STOP_MASK) | ||
916 | return -EBUSY; | ||
917 | |||
918 | /* Sync the disks. */ | ||
919 | /* XXX It would be nice to have some way to ensure that | ||
920 | * nobody is dirtying any new buffers while we wait. */ | ||
921 | sys_sync(); | ||
922 | |||
923 | /* Turn off the display backlight */ | ||
924 | save_backlight = backlight_enabled; | ||
925 | if (save_backlight) | ||
926 | pmu_enable_backlight(0); | ||
927 | |||
928 | /* Give the disks a little time to actually finish writing */ | ||
929 | for (wait = jiffies + (HZ/4); time_before(jiffies, wait); ) | ||
930 | mb(); | ||
931 | |||
932 | /* Disable all interrupts except pmu */ | ||
933 | save_irqen = in_le32(IRQ_ENABLE); | ||
934 | for (i = 0; i < 32; ++i) | ||
935 | if (i != vias->intrs[0].line && (save_irqen & (1 << i))) | ||
936 | disable_irq(i); | ||
937 | asm volatile("mtdec %0" : : "r" (0x7fffffff)); | ||
938 | |||
939 | /* Save the state of PCI config space for some slots */ | ||
940 | pbook_pci_save(); | ||
941 | |||
942 | /* Set the memory controller to keep the memory refreshed | ||
943 | while we're asleep */ | ||
944 | for (i = 0x403f; i >= 0x4000; --i) { | ||
945 | out_be32(MEM_CTRL, i); | ||
946 | do { | ||
947 | x = (in_be32(MEM_CTRL) >> 16) & 0x3ff; | ||
948 | } while (x == 0); | ||
949 | if (x >= 0x100) | ||
950 | break; | ||
951 | } | ||
952 | |||
953 | /* Ask the PMU to put us to sleep */ | ||
954 | pmu_request(&sleep_req, NULL, 5, PMU_SLEEP, 'M', 'A', 'T', 'T'); | ||
955 | while (!sleep_req.complete) | ||
956 | mb(); | ||
957 | /* displacement-flush the L2 cache - necessary? */ | ||
958 | for (p = KERNELBASE; p < KERNELBASE + 0x100000; p += 0x1000) | ||
959 | i = *(volatile int *)p; | ||
960 | asleep = 1; | ||
961 | |||
962 | /* Put the CPU into sleep mode */ | ||
963 | asm volatile("mfspr %0,1008" : "=r" (hid0) :); | ||
964 | hid0 = (hid0 & ~(HID0_NAP | HID0_DOZE)) | HID0_SLEEP; | ||
965 | asm volatile("mtspr 1008,%0" : : "r" (hid0)); | ||
966 | local_save_flags(msr); | ||
967 | msr |= MSR_POW | MSR_EE; | ||
968 | local_irq_restore(msr); | ||
969 | udelay(10); | ||
970 | |||
971 | /* OK, we're awake again, start restoring things */ | ||
972 | out_be32(MEM_CTRL, 0x3f); | ||
973 | pbook_pci_restore(); | ||
974 | |||
975 | /* wait for the PMU interrupt sequence to complete */ | ||
976 | while (asleep) | ||
977 | mb(); | ||
978 | |||
979 | /* reenable interrupts */ | ||
980 | for (i = 0; i < 32; ++i) | ||
981 | if (i != vias->intrs[0].line && (save_irqen & (1 << i))) | ||
982 | enable_irq(i); | ||
983 | |||
984 | /* Notify drivers */ | ||
985 | blocking_notifier_call_chain(&sleep_notifier_list, PBOOK_WAKE, NULL); | ||
986 | |||
987 | /* reenable ADB autopoll */ | ||
988 | pmu_adb_autopoll(adb_dev_map); | ||
989 | |||
990 | /* Turn on the screen backlight, if it was on before */ | ||
991 | if (save_backlight) | ||
992 | pmu_enable_backlight(1); | ||
993 | |||
994 | /* Wait for the hard disk to spin up */ | ||
995 | |||
996 | return 0; | ||
997 | } | ||
998 | |||
999 | /* | ||
1000 | * Support for /dev/pmu device | ||
1001 | */ | ||
1002 | static int pmu_open(struct inode *inode, struct file *file) | ||
1003 | { | ||
1004 | return 0; | ||
1005 | } | ||
1006 | |||
1007 | static ssize_t pmu_read(struct file *file, char *buf, | ||
1008 | size_t count, loff_t *ppos) | ||
1009 | { | ||
1010 | return 0; | ||
1011 | } | ||
1012 | |||
1013 | static ssize_t pmu_write(struct file *file, const char *buf, | ||
1014 | size_t count, loff_t *ppos) | ||
1015 | { | ||
1016 | return 0; | ||
1017 | } | ||
1018 | |||
1019 | static int pmu_ioctl(struct inode * inode, struct file *filp, | ||
1020 | u_int cmd, u_long arg) | ||
1021 | { | ||
1022 | int error; | ||
1023 | __u32 value; | ||
1024 | |||
1025 | switch (cmd) { | ||
1026 | case PMU_IOC_SLEEP: | ||
1027 | return -ENOSYS; | ||
1028 | case PMU_IOC_GET_BACKLIGHT: | ||
1029 | return put_user(backlight_level, (__u32 *)arg); | ||
1030 | case PMU_IOC_SET_BACKLIGHT: | ||
1031 | error = get_user(value, (__u32 *)arg); | ||
1032 | if (!error) | ||
1033 | pmu_set_brightness(value); | ||
1034 | return error; | ||
1035 | case PMU_IOC_GET_MODEL: | ||
1036 | return put_user(pmu_kind, (__u32 *)arg); | ||
1037 | } | ||
1038 | return -EINVAL; | ||
1039 | } | ||
1040 | |||
1041 | static const struct file_operations pmu_device_fops = { | ||
1042 | .read = pmu_read, | ||
1043 | .write = pmu_write, | ||
1044 | .ioctl = pmu_ioctl, | ||
1045 | .open = pmu_open, | ||
1046 | }; | ||
1047 | |||
1048 | static struct miscdevice pmu_device = { | ||
1049 | PMU_MINOR, "pmu", &pmu_device_fops | ||
1050 | }; | ||
1051 | |||
1052 | void pmu_device_init(void) | ||
1053 | { | ||
1054 | if (!via) | ||
1055 | return; | ||
1056 | if (misc_register(&pmu_device) < 0) | ||
1057 | printk(KERN_ERR "via-pmu68k: cannot register misc device.\n"); | ||
1058 | } | ||
1059 | #endif /* CONFIG_PMAC_PBOOK */ | ||
1060 | |||
diff --git a/drivers/macintosh/windfarm_core.c b/drivers/macintosh/windfarm_core.c index e18d265d5d33..516d943227e2 100644 --- a/drivers/macintosh/windfarm_core.c +++ b/drivers/macintosh/windfarm_core.c | |||
@@ -80,7 +80,8 @@ int wf_critical_overtemp(void) | |||
80 | "PATH=/sbin:/usr/sbin:/bin:/usr/bin", | 80 | "PATH=/sbin:/usr/sbin:/bin:/usr/bin", |
81 | NULL }; | 81 | NULL }; |
82 | 82 | ||
83 | return call_usermodehelper(critical_overtemp_path, argv, envp, 0); | 83 | return call_usermodehelper(critical_overtemp_path, |
84 | argv, envp, UMH_WAIT_EXEC); | ||
84 | } | 85 | } |
85 | EXPORT_SYMBOL_GPL(wf_critical_overtemp); | 86 | EXPORT_SYMBOL_GPL(wf_critical_overtemp); |
86 | 87 | ||
diff --git a/drivers/macintosh/windfarm_lm75_sensor.c b/drivers/macintosh/windfarm_lm75_sensor.c index a0fabf3c2008..7e10c3ab4d50 100644 --- a/drivers/macintosh/windfarm_lm75_sensor.c +++ b/drivers/macintosh/windfarm_lm75_sensor.c | |||
@@ -117,10 +117,9 @@ static struct wf_lm75_sensor *wf_lm75_create(struct i2c_adapter *adapter, | |||
117 | DBG("wf_lm75: creating %s device at address 0x%02x\n", | 117 | DBG("wf_lm75: creating %s device at address 0x%02x\n", |
118 | ds1775 ? "ds1775" : "lm75", addr); | 118 | ds1775 ? "ds1775" : "lm75", addr); |
119 | 119 | ||
120 | lm = kmalloc(sizeof(struct wf_lm75_sensor), GFP_KERNEL); | 120 | lm = kzalloc(sizeof(struct wf_lm75_sensor), GFP_KERNEL); |
121 | if (lm == NULL) | 121 | if (lm == NULL) |
122 | return NULL; | 122 | return NULL; |
123 | memset(lm, 0, sizeof(struct wf_lm75_sensor)); | ||
124 | 123 | ||
125 | /* Usual rant about sensor names not beeing very consistent in | 124 | /* Usual rant about sensor names not beeing very consistent in |
126 | * the device-tree, oh well ... | 125 | * the device-tree, oh well ... |
diff --git a/drivers/macintosh/windfarm_smu_sat.c b/drivers/macintosh/windfarm_smu_sat.c index 351982bcec1b..f449d775cdf4 100644 --- a/drivers/macintosh/windfarm_smu_sat.c +++ b/drivers/macintosh/windfarm_smu_sat.c | |||
@@ -380,10 +380,12 @@ static int __init sat_sensors_init(void) | |||
380 | return i2c_add_driver(&wf_sat_driver); | 380 | return i2c_add_driver(&wf_sat_driver); |
381 | } | 381 | } |
382 | 382 | ||
383 | #if 0 /* uncomment when module_exit() below is uncommented */ | ||
383 | static void __exit sat_sensors_exit(void) | 384 | static void __exit sat_sensors_exit(void) |
384 | { | 385 | { |
385 | i2c_del_driver(&wf_sat_driver); | 386 | i2c_del_driver(&wf_sat_driver); |
386 | } | 387 | } |
388 | #endif | ||
387 | 389 | ||
388 | module_init(sat_sensors_init); | 390 | module_init(sat_sensors_init); |
389 | /*module_exit(sat_sensors_exit); Uncomment when cleanup is implemented */ | 391 | /*module_exit(sat_sensors_exit); Uncomment when cleanup is implemented */ |