diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/macintosh/via-pmu.c | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index b40fb9b6c862..6f308a4757ee 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
@@ -405,7 +405,11 @@ static int __init via_pmu_start(void) | |||
405 | printk(KERN_ERR "via-pmu: can't map interrupt\n"); | 405 | printk(KERN_ERR "via-pmu: can't map interrupt\n"); |
406 | return -ENODEV; | 406 | return -ENODEV; |
407 | } | 407 | } |
408 | if (request_irq(irq, via_pmu_interrupt, 0, "VIA-PMU", (void *)0)) { | 408 | /* We set IRQF_TIMER because we don't want the interrupt to be disabled |
409 | * between the 2 passes of driver suspend, we control our own disabling | ||
410 | * for that one | ||
411 | */ | ||
412 | if (request_irq(irq, via_pmu_interrupt, IRQF_TIMER, "VIA-PMU", (void *)0)) { | ||
409 | printk(KERN_ERR "via-pmu: can't request irq %d\n", irq); | 413 | printk(KERN_ERR "via-pmu: can't request irq %d\n", irq); |
410 | return -ENODEV; | 414 | return -ENODEV; |
411 | } | 415 | } |
@@ -419,7 +423,7 @@ static int __init via_pmu_start(void) | |||
419 | gpio_irq = irq_of_parse_and_map(gpio_node, 0); | 423 | gpio_irq = irq_of_parse_and_map(gpio_node, 0); |
420 | 424 | ||
421 | if (gpio_irq != NO_IRQ) { | 425 | if (gpio_irq != NO_IRQ) { |
422 | if (request_irq(gpio_irq, gpio1_interrupt, 0, | 426 | if (request_irq(gpio_irq, gpio1_interrupt, IRQF_TIMER, |
423 | "GPIO1 ADB", (void *)0)) | 427 | "GPIO1 ADB", (void *)0)) |
424 | printk(KERN_ERR "pmu: can't get irq %d" | 428 | printk(KERN_ERR "pmu: can't get irq %d" |
425 | " (GPIO1)\n", gpio_irq); | 429 | " (GPIO1)\n", gpio_irq); |
@@ -925,8 +929,7 @@ proc_write_options(struct file *file, const char __user *buffer, | |||
925 | 929 | ||
926 | #ifdef CONFIG_ADB | 930 | #ifdef CONFIG_ADB |
927 | /* Send an ADB command */ | 931 | /* Send an ADB command */ |
928 | static int | 932 | static int pmu_send_request(struct adb_request *req, int sync) |
929 | pmu_send_request(struct adb_request *req, int sync) | ||
930 | { | 933 | { |
931 | int i, ret; | 934 | int i, ret; |
932 | 935 | ||
@@ -1005,16 +1008,11 @@ pmu_send_request(struct adb_request *req, int sync) | |||
1005 | } | 1008 | } |
1006 | 1009 | ||
1007 | /* Enable/disable autopolling */ | 1010 | /* Enable/disable autopolling */ |
1008 | static int | 1011 | static int __pmu_adb_autopoll(int devs) |
1009 | pmu_adb_autopoll(int devs) | ||
1010 | { | 1012 | { |
1011 | struct adb_request req; | 1013 | struct adb_request req; |
1012 | 1014 | ||
1013 | if ((vias == NULL) || (!pmu_fully_inited) || !pmu_has_adb) | ||
1014 | return -ENXIO; | ||
1015 | |||
1016 | if (devs) { | 1015 | if (devs) { |
1017 | adb_dev_map = devs; | ||
1018 | pmu_request(&req, NULL, 5, PMU_ADB_CMD, 0, 0x86, | 1016 | pmu_request(&req, NULL, 5, PMU_ADB_CMD, 0, 0x86, |
1019 | adb_dev_map >> 8, adb_dev_map); | 1017 | adb_dev_map >> 8, adb_dev_map); |
1020 | pmu_adb_flags = 2; | 1018 | pmu_adb_flags = 2; |
@@ -1027,9 +1025,17 @@ pmu_adb_autopoll(int devs) | |||
1027 | return 0; | 1025 | return 0; |
1028 | } | 1026 | } |
1029 | 1027 | ||
1028 | static int pmu_adb_autopoll(int devs) | ||
1029 | { | ||
1030 | if ((vias == NULL) || (!pmu_fully_inited) || !pmu_has_adb) | ||
1031 | return -ENXIO; | ||
1032 | |||
1033 | adb_dev_map = devs; | ||
1034 | return __pmu_adb_autopoll(devs); | ||
1035 | } | ||
1036 | |||
1030 | /* Reset the ADB bus */ | 1037 | /* Reset the ADB bus */ |
1031 | static int | 1038 | static int pmu_adb_reset_bus(void) |
1032 | pmu_adb_reset_bus(void) | ||
1033 | { | 1039 | { |
1034 | struct adb_request req; | 1040 | struct adb_request req; |
1035 | int save_autopoll = adb_dev_map; | 1041 | int save_autopoll = adb_dev_map; |
@@ -1038,13 +1044,13 @@ pmu_adb_reset_bus(void) | |||
1038 | return -ENXIO; | 1044 | return -ENXIO; |
1039 | 1045 | ||
1040 | /* anyone got a better idea?? */ | 1046 | /* anyone got a better idea?? */ |
1041 | pmu_adb_autopoll(0); | 1047 | __pmu_adb_autopoll(0); |
1042 | 1048 | ||
1043 | req.nbytes = 5; | 1049 | req.nbytes = 4; |
1044 | req.done = NULL; | 1050 | req.done = NULL; |
1045 | req.data[0] = PMU_ADB_CMD; | 1051 | req.data[0] = PMU_ADB_CMD; |
1046 | req.data[1] = 0; | 1052 | req.data[1] = ADB_BUSRESET; |
1047 | req.data[2] = ADB_BUSRESET; | 1053 | req.data[2] = 0; |
1048 | req.data[3] = 0; | 1054 | req.data[3] = 0; |
1049 | req.data[4] = 0; | 1055 | req.data[4] = 0; |
1050 | req.reply_len = 0; | 1056 | req.reply_len = 0; |
@@ -1056,7 +1062,7 @@ pmu_adb_reset_bus(void) | |||
1056 | pmu_wait_complete(&req); | 1062 | pmu_wait_complete(&req); |
1057 | 1063 | ||
1058 | if (save_autopoll != 0) | 1064 | if (save_autopoll != 0) |
1059 | pmu_adb_autopoll(save_autopoll); | 1065 | __pmu_adb_autopoll(save_autopoll); |
1060 | 1066 | ||
1061 | return 0; | 1067 | return 0; |
1062 | } | 1068 | } |