1 // SPDX-License-Identifier: GPL-2.0
3 * Device driver for the PMU in Apple PowerBooks and PowerMacs.
5 * The VIA (versatile interface adapter) interfaces to the PMU,
6 * a 6805 microprocessor core whose primary function is to control
7 * battery charging and system power on the PowerBook 3400 and 2400.
8 * The PMU also controls the ADB (Apple Desktop Bus) which connects
9 * to the keyboard and mouse, as well as the non-volatile RAM
10 * and the RTC (real time clock) chip.
12 * Copyright (C) 1998 Paul Mackerras and Fabio Riccardi.
13 * Copyright (C) 2001-2002 Benjamin Herrenschmidt
14 * Copyright (C) 2006-2007 Johannes Berg
16 * THIS DRIVER IS BECOMING A TOTAL MESS !
17 * - Cleanup atomically disabling reply to PMU events after
18 * a sleep or a freq. switch
22 #include <linux/mutex.h>
23 #include <linux/types.h>
24 #include <linux/errno.h>
25 #include <linux/kernel.h>
26 #include <linux/delay.h>
27 #include <linux/sched/signal.h>
28 #include <linux/miscdevice.h>
29 #include <linux/blkdev.h>
30 #include <linux/pci.h>
31 #include <linux/slab.h>
32 #include <linux/poll.h>
33 #include <linux/adb.h>
34 #include <linux/pmu.h>
35 #include <linux/cuda.h>
36 #include <linux/module.h>
37 #include <linux/spinlock.h>
39 #include <linux/proc_fs.h>
40 #include <linux/seq_file.h>
41 #include <linux/init.h>
42 #include <linux/interrupt.h>
43 #include <linux/device.h>
44 #include <linux/syscore_ops.h>
45 #include <linux/freezer.h>
46 #include <linux/syscalls.h>
47 #include <linux/suspend.h>
48 #include <linux/cpu.h>
49 #include <linux/compat.h>
50 #include <linux/of_address.h>
51 #include <linux/of_irq.h>
52 #include <linux/uaccess.h>
53 #include <asm/machdep.h>
55 #include <asm/pgtable.h>
56 #include <asm/sections.h>
58 #ifdef CONFIG_PPC_PMAC
59 #include <asm/pmac_feature.h>
60 #include <asm/pmac_pfunc.h>
61 #include <asm/pmac_low_i2c.h>
63 #include <asm/mmu_context.h>
64 #include <asm/cputable.h>
66 #include <asm/backlight.h>
68 #include <asm/macintosh.h>
69 #include <asm/macints.h>
70 #include <asm/mac_via.h>
73 #include "via-pmu-event.h"
75 /* Some compile options */
78 /* Misc minor number allocated for /dev/pmu */
81 /* How many iterations between battery polls */
82 #define BATTERY_POLLING_COUNT 2
84 static DEFINE_MUTEX(pmu_info_proc_mutex
);
86 /* VIA registers - spaced 0x200 bytes apart */
87 #define RS 0x200 /* skip between registers */
88 #define B 0 /* B-side data */
89 #define A RS /* A-side data */
90 #define DIRB (2*RS) /* B-side direction (1=output) */
91 #define DIRA (3*RS) /* A-side direction (1=output) */
92 #define T1CL (4*RS) /* Timer 1 ctr/latch (low 8 bits) */
93 #define T1CH (5*RS) /* Timer 1 counter (high 8 bits) */
94 #define T1LL (6*RS) /* Timer 1 latch (low 8 bits) */
95 #define T1LH (7*RS) /* Timer 1 latch (high 8 bits) */
96 #define T2CL (8*RS) /* Timer 2 ctr/latch (low 8 bits) */
97 #define T2CH (9*RS) /* Timer 2 counter (high 8 bits) */
98 #define SR (10*RS) /* Shift register */
99 #define ACR (11*RS) /* Auxiliary control register */
100 #define PCR (12*RS) /* Peripheral control register */
101 #define IFR (13*RS) /* Interrupt flag register */
102 #define IER (14*RS) /* Interrupt enable register */
103 #define ANH (15*RS) /* A-side data, no handshake */
105 /* Bits in B data register: both active low */
106 #ifdef CONFIG_PPC_PMAC
107 #define TACK 0x08 /* Transfer acknowledge (input) */
108 #define TREQ 0x10 /* Transfer request (output) */
115 #define SR_CTRL 0x1c /* Shift register control bits */
116 #define SR_EXT 0x0c /* Shift on external clock */
117 #define SR_OUT 0x10 /* Shift out if 1 */
119 /* Bits in IFR and IER */
120 #define IER_SET 0x80 /* set bits in IER */
121 #define IER_CLR 0 /* clear bits in IER */
122 #define SR_INT 0x04 /* Shift register full/empty */
124 #define CB1_INT 0x10 /* transition on CB1 input */
126 static volatile enum pmu_state
{
136 static volatile enum int_data_state
{
141 } int_data_state
[2] = { int_data_empty
, int_data_empty
};
143 static struct adb_request
*current_req
;
144 static struct adb_request
*last_req
;
145 static struct adb_request
*req_awaiting_reply
;
146 static unsigned char interrupt_data
[2][32];
147 static int interrupt_data_len
[2];
148 static int int_data_last
;
149 static unsigned char *reply_ptr
;
150 static int data_index
;
152 static volatile int adb_int_pending
;
153 static volatile int disable_poll
;
154 static int pmu_kind
= PMU_UNKNOWN
;
155 static int pmu_fully_inited
;
156 static int pmu_has_adb
;
157 #ifdef CONFIG_PPC_PMAC
158 static volatile unsigned char __iomem
*via1
;
159 static volatile unsigned char __iomem
*via2
;
160 static struct device_node
*vias
;
161 static struct device_node
*gpio_node
;
163 static unsigned char __iomem
*gpio_reg
;
164 static int gpio_irq
= 0;
165 static int gpio_irq_enabled
= -1;
166 static volatile int pmu_suspended
;
167 static spinlock_t pmu_lock
;
168 static u8 pmu_intr_mask
;
169 static int pmu_version
;
170 static int drop_interrupts
;
171 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
172 static int option_lid_wakeup
= 1;
173 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
174 static unsigned long async_req_locks
;
176 #define NUM_IRQ_STATS 13
177 static unsigned int pmu_irq_stats
[NUM_IRQ_STATS
];
179 static struct proc_dir_entry
*proc_pmu_root
;
180 static struct proc_dir_entry
*proc_pmu_info
;
181 static struct proc_dir_entry
*proc_pmu_irqstats
;
182 static struct proc_dir_entry
*proc_pmu_options
;
183 static int option_server_mode
;
185 int pmu_battery_count
;
187 unsigned int pmu_power_flags
= PMU_PWR_AC_PRESENT
;
188 struct pmu_battery_info pmu_batteries
[PMU_MAX_BATTERIES
];
189 static int query_batt_timer
= BATTERY_POLLING_COUNT
;
190 static struct adb_request batt_req
;
191 static struct proc_dir_entry
*proc_pmu_batt
[PMU_MAX_BATTERIES
];
197 static int adb_dev_map
;
198 static int pmu_adb_flags
;
200 static int pmu_probe(void);
201 static int pmu_init(void);
202 static int pmu_send_request(struct adb_request
*req
, int sync
);
203 static int pmu_adb_autopoll(int devs
);
204 static int pmu_adb_reset_bus(void);
205 #endif /* CONFIG_ADB */
207 static int init_pmu(void);
208 static void pmu_start(void);
209 static irqreturn_t
via_pmu_interrupt(int irq
, void *arg
);
210 static irqreturn_t
gpio1_interrupt(int irq
, void *arg
);
211 static int pmu_info_proc_show(struct seq_file
*m
, void *v
);
212 static int pmu_irqstats_proc_show(struct seq_file
*m
, void *v
);
213 static int pmu_battery_proc_show(struct seq_file
*m
, void *v
);
214 static void pmu_pass_intr(unsigned char *data
, int len
);
215 static const struct file_operations pmu_options_proc_fops
;
218 const struct adb_driver via_pmu_driver
= {
222 .send_request
= pmu_send_request
,
223 .autopoll
= pmu_adb_autopoll
,
224 .poll
= pmu_poll_adb
,
225 .reset_bus
= pmu_adb_reset_bus
,
227 #endif /* CONFIG_ADB */
229 extern void low_sleep_handler(void);
230 extern void enable_kernel_altivec(void);
231 extern void enable_kernel_fp(void);
234 int pmu_polled_request(struct adb_request
*req
);
235 void pmu_blink(int n
);
239 * This table indicates for each PMU opcode:
240 * - the number of data bytes to be sent with the command, or -1
241 * if a length byte should be sent,
242 * - the number of response bytes which the PMU will return, or
243 * -1 if it will send a length byte.
245 static const s8 pmu_data_len
[256][2] = {
246 /* 0 1 2 3 4 5 6 7 */
247 /*00*/ {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
248 /*08*/ {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
249 /*10*/ { 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
250 /*18*/ { 0, 1},{ 0, 1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{ 0, 0},
251 /*20*/ {-1, 0},{ 0, 0},{ 2, 0},{ 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},
252 /*28*/ { 0,-1},{ 0,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{ 0,-1},
253 /*30*/ { 4, 0},{20, 0},{-1, 0},{ 3, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
254 /*38*/ { 0, 4},{ 0,20},{ 2,-1},{ 2, 1},{ 3,-1},{-1,-1},{-1,-1},{ 4, 0},
255 /*40*/ { 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
256 /*48*/ { 0, 1},{ 0, 1},{-1,-1},{ 1, 0},{ 1, 0},{-1,-1},{-1,-1},{-1,-1},
257 /*50*/ { 1, 0},{ 0, 0},{ 2, 0},{ 2, 0},{-1, 0},{ 1, 0},{ 3, 0},{ 1, 0},
258 /*58*/ { 0, 1},{ 1, 0},{ 0, 2},{ 0, 2},{ 0,-1},{-1,-1},{-1,-1},{-1,-1},
259 /*60*/ { 2, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
260 /*68*/ { 0, 3},{ 0, 3},{ 0, 2},{ 0, 8},{ 0,-1},{ 0,-1},{-1,-1},{-1,-1},
261 /*70*/ { 1, 0},{ 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
262 /*78*/ { 0,-1},{ 0,-1},{-1,-1},{-1,-1},{-1,-1},{ 5, 1},{ 4, 1},{ 4, 1},
263 /*80*/ { 4, 0},{-1, 0},{ 0, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
264 /*88*/ { 0, 5},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
265 /*90*/ { 1, 0},{ 2, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
266 /*98*/ { 0, 1},{ 0, 1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
267 /*a0*/ { 2, 0},{ 2, 0},{ 2, 0},{ 4, 0},{-1, 0},{ 0, 0},{-1, 0},{-1, 0},
268 /*a8*/ { 1, 1},{ 1, 0},{ 3, 0},{ 2, 0},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
269 /*b0*/ {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
270 /*b8*/ {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
271 /*c0*/ {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
272 /*c8*/ {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
273 /*d0*/ { 0, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
274 /*d8*/ { 1, 1},{ 1, 1},{-1,-1},{-1,-1},{ 0, 1},{ 0,-1},{-1,-1},{-1,-1},
275 /*e0*/ {-1, 0},{ 4, 0},{ 0, 1},{-1, 0},{-1, 0},{ 4, 0},{-1, 0},{-1, 0},
276 /*e8*/ { 3,-1},{-1,-1},{ 0, 1},{-1,-1},{ 0,-1},{-1,-1},{-1,-1},{ 0, 0},
277 /*f0*/ {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
278 /*f8*/ {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
281 static char *pbook_type
[] = {
283 "PowerBook 2400/3400/3500(G3)",
284 "PowerBook G3 Series",
289 int __init
find_via_pmu(void)
291 #ifdef CONFIG_PPC_PMAC
295 if (pmu_state
!= uninitialized
)
297 vias
= of_find_node_by_name(NULL
, "via-pmu");
301 reg
= of_get_property(vias
, "reg", NULL
);
303 printk(KERN_ERR
"via-pmu: No \"reg\" property !\n");
306 taddr
= of_translate_address(vias
, reg
);
307 if (taddr
== OF_BAD_ADDR
) {
308 printk(KERN_ERR
"via-pmu: Can't translate address !\n");
312 spin_lock_init(&pmu_lock
);
316 pmu_intr_mask
= PMU_INT_PCEJECT
|
321 if (vias
->parent
->name
&& ((strcmp(vias
->parent
->name
, "ohare") == 0)
322 || of_device_is_compatible(vias
->parent
, "ohare")))
323 pmu_kind
= PMU_OHARE_BASED
;
324 else if (of_device_is_compatible(vias
->parent
, "paddington"))
325 pmu_kind
= PMU_PADDINGTON_BASED
;
326 else if (of_device_is_compatible(vias
->parent
, "heathrow"))
327 pmu_kind
= PMU_HEATHROW_BASED
;
328 else if (of_device_is_compatible(vias
->parent
, "Keylargo")
329 || of_device_is_compatible(vias
->parent
, "K2-Keylargo")) {
330 struct device_node
*gpiop
;
331 struct device_node
*adbp
;
332 u64 gaddr
= OF_BAD_ADDR
;
334 pmu_kind
= PMU_KEYLARGO_BASED
;
335 adbp
= of_find_node_by_type(NULL
, "adb");
336 pmu_has_adb
= (adbp
!= NULL
);
338 pmu_intr_mask
= PMU_INT_PCEJECT
|
344 gpiop
= of_find_node_by_name(NULL
, "gpio");
346 reg
= of_get_property(gpiop
, "reg", NULL
);
348 gaddr
= of_translate_address(gpiop
, reg
);
349 if (gaddr
!= OF_BAD_ADDR
)
350 gpio_reg
= ioremap(gaddr
, 0x10);
353 if (gpio_reg
== NULL
) {
354 printk(KERN_ERR
"via-pmu: Can't find GPIO reg !\n");
358 pmu_kind
= PMU_UNKNOWN
;
360 via1
= via2
= ioremap(taddr
, 0x2000);
362 printk(KERN_ERR
"via-pmu: Can't map address !\n");
366 out_8(&via1
[IER
], IER_CLR
| 0x7f); /* disable all intrs */
367 out_8(&via1
[IFR
], 0x7f); /* clear IFR */
374 sys_ctrler
= SYS_CTRLER_PMU
;
387 pmu_state
= uninitialized
;
390 if (macintosh_config
->adb_type
!= MAC_ADB_PB2
)
393 pmu_kind
= PMU_UNKNOWN
;
395 spin_lock_init(&pmu_lock
);
399 pmu_intr_mask
= PMU_INT_PCEJECT
|
407 pmu_state
= uninitialized
;
412 #endif /* !CONFIG_PPC_PMAC */
416 static int pmu_probe(void)
418 return pmu_state
== uninitialized
? -ENODEV
: 0;
421 static int pmu_init(void)
423 return pmu_state
== uninitialized
? -ENODEV
: 0;
425 #endif /* CONFIG_ADB */
428 * We can't wait until pmu_init gets called, that happens too late.
429 * It happens after IDE and SCSI initialization, which can take a few
430 * seconds, and by that time the PMU could have given up on us and
432 * Thus this is called with arch_initcall rather than device_initcall.
434 static int __init
via_pmu_start(void)
436 unsigned int __maybe_unused irq
;
438 if (pmu_state
== uninitialized
)
441 batt_req
.complete
= 1;
443 #ifdef CONFIG_PPC_PMAC
444 irq
= irq_of_parse_and_map(vias
, 0);
446 printk(KERN_ERR
"via-pmu: can't map interrupt\n");
449 /* We set IRQF_NO_SUSPEND because we don't want the interrupt
450 * to be disabled between the 2 passes of driver suspend, we
451 * control our own disabling for that one
453 if (request_irq(irq
, via_pmu_interrupt
, IRQF_NO_SUSPEND
,
454 "VIA-PMU", (void *)0)) {
455 printk(KERN_ERR
"via-pmu: can't request irq %d\n", irq
);
459 if (pmu_kind
== PMU_KEYLARGO_BASED
) {
460 gpio_node
= of_find_node_by_name(NULL
, "extint-gpio1");
461 if (gpio_node
== NULL
)
462 gpio_node
= of_find_node_by_name(NULL
,
465 gpio_irq
= irq_of_parse_and_map(gpio_node
, 0);
468 if (request_irq(gpio_irq
, gpio1_interrupt
,
469 IRQF_NO_SUSPEND
, "GPIO1 ADB",
471 printk(KERN_ERR
"pmu: can't get irq %d"
472 " (GPIO1)\n", gpio_irq
);
474 gpio_irq_enabled
= 1;
478 /* Enable interrupts */
479 out_8(&via1
[IER
], IER_SET
| SR_INT
| CB1_INT
);
481 if (request_irq(IRQ_MAC_ADB_SR
, via_pmu_interrupt
, IRQF_NO_SUSPEND
,
482 "VIA-PMU-SR", NULL
)) {
483 pr_err("%s: couldn't get SR irq\n", __func__
);
486 if (request_irq(IRQ_MAC_ADB_CL
, via_pmu_interrupt
, IRQF_NO_SUSPEND
,
487 "VIA-PMU-CL", NULL
)) {
488 pr_err("%s: couldn't get CL irq\n", __func__
);
489 free_irq(IRQ_MAC_ADB_SR
, NULL
);
492 #endif /* !CONFIG_PPC_PMAC */
494 pmu_fully_inited
= 1;
496 /* Make sure PMU settle down before continuing. This is _very_ important
497 * since the IDE probe may shut interrupts down for quite a bit of time. If
498 * a PMU communication is pending while this happens, the PMU may timeout
499 * Not that on Core99 machines, the PMU keeps sending us environement
500 * messages, we should find a way to either fix IDE or make it call
501 * pmu_suspend() before masking interrupts. This can also happens while
502 * scolling with some fbdevs.
506 } while (pmu_state
!= idle
);
511 arch_initcall(via_pmu_start
);
514 * This has to be done after pci_init, which is a subsys_initcall.
516 static int __init
via_pmu_dev_init(void)
518 if (pmu_state
== uninitialized
)
521 #ifdef CONFIG_PMAC_BACKLIGHT
522 /* Initialize backlight */
523 pmu_backlight_init();
527 if (of_machine_is_compatible("AAPL,3400/2400") ||
528 of_machine_is_compatible("AAPL,3500")) {
529 int mb
= pmac_call_feature(PMAC_FTR_GET_MB_INFO
,
530 NULL
, PMAC_MB_INFO_MODEL
, 0);
531 pmu_battery_count
= 1;
532 if (mb
== PMAC_TYPE_COMET
)
533 pmu_batteries
[0].flags
|= PMU_BATT_TYPE_COMET
;
535 pmu_batteries
[0].flags
|= PMU_BATT_TYPE_HOOPER
;
536 } else if (of_machine_is_compatible("AAPL,PowerBook1998") ||
537 of_machine_is_compatible("PowerBook1,1")) {
538 pmu_battery_count
= 2;
539 pmu_batteries
[0].flags
|= PMU_BATT_TYPE_SMART
;
540 pmu_batteries
[1].flags
|= PMU_BATT_TYPE_SMART
;
542 struct device_node
* prim
=
543 of_find_node_by_name(NULL
, "power-mgt");
544 const u32
*prim_info
= NULL
;
546 prim_info
= of_get_property(prim
, "prim-info", NULL
);
548 /* Other stuffs here yet unknown */
549 pmu_battery_count
= (prim_info
[6] >> 16) & 0xff;
550 pmu_batteries
[0].flags
|= PMU_BATT_TYPE_SMART
;
551 if (pmu_battery_count
> 1)
552 pmu_batteries
[1].flags
|= PMU_BATT_TYPE_SMART
;
556 #endif /* CONFIG_PPC32 */
558 /* Create /proc/pmu */
559 proc_pmu_root
= proc_mkdir("pmu", NULL
);
563 for (i
=0; i
<pmu_battery_count
; i
++) {
565 sprintf(title
, "battery_%ld", i
);
566 proc_pmu_batt
[i
] = proc_create_single_data(title
, 0,
567 proc_pmu_root
, pmu_battery_proc_show
,
571 proc_pmu_info
= proc_create_single("info", 0, proc_pmu_root
,
573 proc_pmu_irqstats
= proc_create_single("interrupts", 0,
574 proc_pmu_root
, pmu_irqstats_proc_show
);
575 proc_pmu_options
= proc_create("options", 0600, proc_pmu_root
,
576 &pmu_options_proc_fops
);
581 device_initcall(via_pmu_dev_init
);
587 struct adb_request req
;
589 /* Negate TREQ. Set TACK to input and TREQ to output. */
590 out_8(&via2
[B
], in_8(&via2
[B
]) | TREQ
);
591 out_8(&via2
[DIRB
], (in_8(&via2
[DIRB
]) | TREQ
) & ~TACK
);
593 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, pmu_intr_mask
);
595 while (!req
.complete
) {
597 printk(KERN_ERR
"init_pmu: no response from PMU\n");
604 /* ack all pending interrupts */
606 interrupt_data
[0][0] = 1;
607 while (interrupt_data
[0][0] || pmu_state
!= idle
) {
609 printk(KERN_ERR
"init_pmu: timed out acking intrs\n");
612 if (pmu_state
== idle
)
614 via_pmu_interrupt(0, NULL
);
618 /* Tell PMU we are ready. */
619 if (pmu_kind
== PMU_KEYLARGO_BASED
) {
620 pmu_request(&req
, NULL
, 2, PMU_SYSTEM_READY
, 2);
621 while (!req
.complete
)
625 /* Read PMU version */
626 pmu_request(&req
, NULL
, 1, PMU_GET_VERSION
);
627 pmu_wait_complete(&req
);
628 if (req
.reply_len
> 0)
629 pmu_version
= req
.reply
[0];
631 /* Read server mode setting */
632 if (pmu_kind
== PMU_KEYLARGO_BASED
) {
633 pmu_request(&req
, NULL
, 2, PMU_POWER_EVENTS
,
634 PMU_PWR_GET_POWERUP_EVENTS
);
635 pmu_wait_complete(&req
);
636 if (req
.reply_len
== 2) {
637 if (req
.reply
[1] & PMU_PWR_WAKEUP_AC_INSERT
)
638 option_server_mode
= 1;
639 printk(KERN_INFO
"via-pmu: Server Mode is %s\n",
640 option_server_mode
? "enabled" : "disabled");
644 printk(KERN_INFO
"PMU driver v%d initialized for %s, firmware: %02x\n",
645 PMU_DRIVER_VERSION
, pbook_type
[pmu_kind
], pmu_version
);
656 static void pmu_set_server_mode(int server_mode
)
658 struct adb_request req
;
660 if (pmu_kind
!= PMU_KEYLARGO_BASED
)
663 option_server_mode
= server_mode
;
664 pmu_request(&req
, NULL
, 2, PMU_POWER_EVENTS
, PMU_PWR_GET_POWERUP_EVENTS
);
665 pmu_wait_complete(&req
);
666 if (req
.reply_len
< 2)
669 pmu_request(&req
, NULL
, 4, PMU_POWER_EVENTS
,
670 PMU_PWR_SET_POWERUP_EVENTS
,
671 req
.reply
[0], PMU_PWR_WAKEUP_AC_INSERT
);
673 pmu_request(&req
, NULL
, 4, PMU_POWER_EVENTS
,
674 PMU_PWR_CLR_POWERUP_EVENTS
,
675 req
.reply
[0], PMU_PWR_WAKEUP_AC_INSERT
);
676 pmu_wait_complete(&req
);
679 /* This new version of the code for 2400/3400/3500 powerbooks
680 * is inspired from the implementation in gkrellm-pmu
683 done_battery_state_ohare(struct adb_request
* req
)
685 #ifdef CONFIG_PPC_PMAC
688 * 0x01 : AC indicator
690 * 0x04 : battery exist
693 * 0x20 : full charged
694 * 0x40 : pcharge reset
695 * 0x80 : battery exist
697 * [1][2] : battery voltage
698 * [3] : CPU temperature
699 * [4] : battery temperature
704 unsigned int bat_flags
= PMU_BATT_TYPE_HOOPER
;
705 long pcharge
, charge
, vb
, vmax
, lmax
;
706 long vmax_charging
, vmax_charged
;
707 long amperage
, voltage
, time
, max
;
708 int mb
= pmac_call_feature(PMAC_FTR_GET_MB_INFO
,
709 NULL
, PMAC_MB_INFO_MODEL
, 0);
711 if (req
->reply
[0] & 0x01)
712 pmu_power_flags
|= PMU_PWR_AC_PRESENT
;
714 pmu_power_flags
&= ~PMU_PWR_AC_PRESENT
;
716 if (mb
== PMAC_TYPE_COMET
) {
727 /* If battery installed */
728 if (req
->reply
[0] & 0x04) {
729 bat_flags
|= PMU_BATT_PRESENT
;
730 if (req
->reply
[0] & 0x02)
731 bat_flags
|= PMU_BATT_CHARGING
;
732 vb
= (req
->reply
[1] << 8) | req
->reply
[2];
733 voltage
= (vb
* 265 + 72665) / 10;
734 amperage
= req
->reply
[5];
735 if ((req
->reply
[0] & 0x01) == 0) {
737 vb
+= ((amperage
- 200) * 15)/100;
738 } else if (req
->reply
[0] & 0x02) {
739 vb
= (vb
* 97) / 100;
740 vmax
= vmax_charging
;
742 charge
= (100 * vb
) / vmax
;
743 if (req
->reply
[0] & 0x40) {
744 pcharge
= (req
->reply
[6] << 8) + req
->reply
[7];
748 pcharge
= 100 - pcharge
/ lmax
;
749 if (pcharge
< charge
)
753 time
= (charge
* 16440) / amperage
;
757 amperage
= -amperage
;
759 charge
= max
= amperage
= voltage
= time
= 0;
761 pmu_batteries
[pmu_cur_battery
].flags
= bat_flags
;
762 pmu_batteries
[pmu_cur_battery
].charge
= charge
;
763 pmu_batteries
[pmu_cur_battery
].max_charge
= max
;
764 pmu_batteries
[pmu_cur_battery
].amperage
= amperage
;
765 pmu_batteries
[pmu_cur_battery
].voltage
= voltage
;
766 pmu_batteries
[pmu_cur_battery
].time_remaining
= time
;
767 #endif /* CONFIG_PPC_PMAC */
769 clear_bit(0, &async_req_locks
);
773 done_battery_state_smart(struct adb_request
* req
)
776 * [0] : format of this structure (known: 3,4,5)
789 * [4][5] : max charge
794 unsigned int bat_flags
= PMU_BATT_TYPE_SMART
;
796 unsigned int capa
, max
, voltage
;
798 if (req
->reply
[1] & 0x01)
799 pmu_power_flags
|= PMU_PWR_AC_PRESENT
;
801 pmu_power_flags
&= ~PMU_PWR_AC_PRESENT
;
804 capa
= max
= amperage
= voltage
= 0;
806 if (req
->reply
[1] & 0x04) {
807 bat_flags
|= PMU_BATT_PRESENT
;
808 switch(req
->reply
[0]) {
810 case 4: capa
= req
->reply
[2];
812 amperage
= *((signed char *)&req
->reply
[4]);
813 voltage
= req
->reply
[5];
815 case 5: capa
= (req
->reply
[2] << 8) | req
->reply
[3];
816 max
= (req
->reply
[4] << 8) | req
->reply
[5];
817 amperage
= *((signed short *)&req
->reply
[6]);
818 voltage
= (req
->reply
[8] << 8) | req
->reply
[9];
821 pr_warn("pmu.c: unrecognized battery info, "
822 "len: %d, %4ph\n", req
->reply_len
,
828 if ((req
->reply
[1] & 0x01) && (amperage
> 0))
829 bat_flags
|= PMU_BATT_CHARGING
;
831 pmu_batteries
[pmu_cur_battery
].flags
= bat_flags
;
832 pmu_batteries
[pmu_cur_battery
].charge
= capa
;
833 pmu_batteries
[pmu_cur_battery
].max_charge
= max
;
834 pmu_batteries
[pmu_cur_battery
].amperage
= amperage
;
835 pmu_batteries
[pmu_cur_battery
].voltage
= voltage
;
837 if ((req
->reply
[1] & 0x01) && (amperage
> 0))
838 pmu_batteries
[pmu_cur_battery
].time_remaining
839 = ((max
-capa
) * 3600) / amperage
;
841 pmu_batteries
[pmu_cur_battery
].time_remaining
842 = (capa
* 3600) / (-amperage
);
844 pmu_batteries
[pmu_cur_battery
].time_remaining
= 0;
846 pmu_cur_battery
= (pmu_cur_battery
+ 1) % pmu_battery_count
;
848 clear_bit(0, &async_req_locks
);
852 query_battery_state(void)
854 if (test_and_set_bit(0, &async_req_locks
))
856 if (pmu_kind
== PMU_OHARE_BASED
)
857 pmu_request(&batt_req
, done_battery_state_ohare
,
858 1, PMU_BATTERY_STATE
);
860 pmu_request(&batt_req
, done_battery_state_smart
,
861 2, PMU_SMART_BATTERY_STATE
, pmu_cur_battery
+1);
864 static int pmu_info_proc_show(struct seq_file
*m
, void *v
)
866 seq_printf(m
, "PMU driver version : %d\n", PMU_DRIVER_VERSION
);
867 seq_printf(m
, "PMU firmware version : %02x\n", pmu_version
);
868 seq_printf(m
, "AC Power : %d\n",
869 ((pmu_power_flags
& PMU_PWR_AC_PRESENT
) != 0) || pmu_battery_count
== 0);
870 seq_printf(m
, "Battery count : %d\n", pmu_battery_count
);
875 static int pmu_irqstats_proc_show(struct seq_file
*m
, void *v
)
878 static const char *irq_names
[NUM_IRQ_STATS
] = {
879 "Unknown interrupt (type 0)",
880 "Unknown interrupt (type 1)",
881 "PC-Card eject button",
882 "Sound/Brightness button",
884 "Battery state change",
885 "Environment interrupt",
887 "Ghost interrupt (zero len)",
888 "Empty interrupt (empty mask)",
890 "Total CB1 triggered events",
891 "Total GPIO1 triggered events",
894 for (i
= 0; i
< NUM_IRQ_STATS
; i
++) {
895 seq_printf(m
, " %2u: %10u (%s)\n",
896 i
, pmu_irq_stats
[i
], irq_names
[i
]);
901 static int pmu_battery_proc_show(struct seq_file
*m
, void *v
)
903 long batnum
= (long)m
->private;
906 seq_printf(m
, "flags : %08x\n", pmu_batteries
[batnum
].flags
);
907 seq_printf(m
, "charge : %d\n", pmu_batteries
[batnum
].charge
);
908 seq_printf(m
, "max_charge : %d\n", pmu_batteries
[batnum
].max_charge
);
909 seq_printf(m
, "current : %d\n", pmu_batteries
[batnum
].amperage
);
910 seq_printf(m
, "voltage : %d\n", pmu_batteries
[batnum
].voltage
);
911 seq_printf(m
, "time rem. : %d\n", pmu_batteries
[batnum
].time_remaining
);
915 static int pmu_options_proc_show(struct seq_file
*m
, void *v
)
917 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
918 if (pmu_kind
== PMU_KEYLARGO_BASED
&&
919 pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,-1) >= 0)
920 seq_printf(m
, "lid_wakeup=%d\n", option_lid_wakeup
);
922 if (pmu_kind
== PMU_KEYLARGO_BASED
)
923 seq_printf(m
, "server_mode=%d\n", option_server_mode
);
928 static int pmu_options_proc_open(struct inode
*inode
, struct file
*file
)
930 return single_open(file
, pmu_options_proc_show
, NULL
);
933 static ssize_t
pmu_options_proc_write(struct file
*file
,
934 const char __user
*buffer
, size_t count
, loff_t
*pos
)
938 size_t fcount
= count
;
944 if (copy_from_user(tmp
, buffer
, count
))
952 while(*val
&& (*val
!= '=')) {
962 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
963 if (pmu_kind
== PMU_KEYLARGO_BASED
&&
964 pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,-1) >= 0)
965 if (!strcmp(label
, "lid_wakeup"))
966 option_lid_wakeup
= ((*val
) == '1');
968 if (pmu_kind
== PMU_KEYLARGO_BASED
&& !strcmp(label
, "server_mode")) {
970 new_value
= ((*val
) == '1');
971 if (new_value
!= option_server_mode
)
972 pmu_set_server_mode(new_value
);
977 static const struct file_operations pmu_options_proc_fops
= {
978 .owner
= THIS_MODULE
,
979 .open
= pmu_options_proc_open
,
982 .release
= single_release
,
983 .write
= pmu_options_proc_write
,
987 /* Send an ADB command */
988 static int pmu_send_request(struct adb_request
*req
, int sync
)
992 if (pmu_state
== uninitialized
|| !pmu_fully_inited
) {
999 switch (req
->data
[0]) {
1001 for (i
= 0; i
< req
->nbytes
- 1; ++i
)
1002 req
->data
[i
] = req
->data
[i
+1];
1004 if (pmu_data_len
[req
->data
[0]][1] != 0) {
1005 req
->reply
[0] = ADB_RET_OK
;
1009 ret
= pmu_queue_request(req
);
1012 switch (req
->data
[1]) {
1014 if (req
->nbytes
!= 2)
1016 req
->data
[0] = PMU_READ_RTC
;
1019 req
->reply
[0] = CUDA_PACKET
;
1021 req
->reply
[2] = CUDA_GET_TIME
;
1022 ret
= pmu_queue_request(req
);
1025 if (req
->nbytes
!= 6)
1027 req
->data
[0] = PMU_SET_RTC
;
1029 for (i
= 1; i
<= 4; ++i
)
1030 req
->data
[i
] = req
->data
[i
+1];
1032 req
->reply
[0] = CUDA_PACKET
;
1034 req
->reply
[2] = CUDA_SET_TIME
;
1035 ret
= pmu_queue_request(req
);
1042 for (i
= req
->nbytes
- 1; i
> 1; --i
)
1043 req
->data
[i
+2] = req
->data
[i
];
1044 req
->data
[3] = req
->nbytes
- 2;
1045 req
->data
[2] = pmu_adb_flags
;
1046 /*req->data[1] = req->data[1];*/
1047 req
->data
[0] = PMU_ADB_CMD
;
1049 req
->reply_expected
= 1;
1051 ret
= pmu_queue_request(req
);
1060 while (!req
->complete
)
1066 /* Enable/disable autopolling */
1067 static int __pmu_adb_autopoll(int devs
)
1069 struct adb_request req
;
1072 pmu_request(&req
, NULL
, 5, PMU_ADB_CMD
, 0, 0x86,
1073 adb_dev_map
>> 8, adb_dev_map
);
1076 pmu_request(&req
, NULL
, 1, PMU_ADB_POLL_OFF
);
1079 while (!req
.complete
)
1084 static int pmu_adb_autopoll(int devs
)
1086 if (pmu_state
== uninitialized
|| !pmu_fully_inited
|| !pmu_has_adb
)
1090 return __pmu_adb_autopoll(devs
);
1093 /* Reset the ADB bus */
1094 static int pmu_adb_reset_bus(void)
1096 struct adb_request req
;
1097 int save_autopoll
= adb_dev_map
;
1099 if (pmu_state
== uninitialized
|| !pmu_fully_inited
|| !pmu_has_adb
)
1102 /* anyone got a better idea?? */
1103 __pmu_adb_autopoll(0);
1107 req
.data
[0] = PMU_ADB_CMD
;
1108 req
.data
[1] = ADB_BUSRESET
;
1113 req
.reply_expected
= 1;
1114 if (pmu_queue_request(&req
) != 0) {
1115 printk(KERN_ERR
"pmu_adb_reset_bus: pmu_queue_request failed\n");
1118 pmu_wait_complete(&req
);
1120 if (save_autopoll
!= 0)
1121 __pmu_adb_autopoll(save_autopoll
);
1125 #endif /* CONFIG_ADB */
1127 /* Construct and send a pmu request */
1129 pmu_request(struct adb_request
*req
, void (*done
)(struct adb_request
*),
1135 if (pmu_state
== uninitialized
)
1138 if (nbytes
< 0 || nbytes
> 32) {
1139 printk(KERN_ERR
"pmu_request: bad nbytes (%d)\n", nbytes
);
1143 req
->nbytes
= nbytes
;
1145 va_start(list
, nbytes
);
1146 for (i
= 0; i
< nbytes
; ++i
)
1147 req
->data
[i
] = va_arg(list
, int);
1150 req
->reply_expected
= 0;
1151 return pmu_queue_request(req
);
1155 pmu_queue_request(struct adb_request
*req
)
1157 unsigned long flags
;
1160 if (pmu_state
== uninitialized
) {
1164 if (req
->nbytes
<= 0) {
1168 nsend
= pmu_data_len
[req
->data
[0]][0];
1169 if (nsend
>= 0 && req
->nbytes
!= nsend
+ 1) {
1178 spin_lock_irqsave(&pmu_lock
, flags
);
1180 last_req
->next
= req
;
1185 if (pmu_state
== idle
)
1188 spin_unlock_irqrestore(&pmu_lock
, flags
);
1196 /* Sightly increased the delay, I had one occurrence of the message
1200 while ((in_8(&via2
[B
]) & TACK
) == 0) {
1201 if (--timeout
< 0) {
1202 printk(KERN_ERR
"PMU not responding (!ack)\n");
1209 /* New PMU seems to be very sensitive to those timings, so we make sure
1210 * PCI is flushed immediately */
1214 out_8(&via1
[ACR
], in_8(&via1
[ACR
]) | SR_OUT
| SR_EXT
);
1215 out_8(&via1
[SR
], x
);
1216 out_8(&via2
[B
], in_8(&via2
[B
]) & ~TREQ
); /* assert TREQ */
1217 (void)in_8(&via2
[B
]);
1223 out_8(&via1
[ACR
], (in_8(&via1
[ACR
]) & ~SR_OUT
) | SR_EXT
);
1224 in_8(&via1
[SR
]); /* resets SR */
1225 out_8(&via2
[B
], in_8(&via2
[B
]) & ~TREQ
);
1226 (void)in_8(&via2
[B
]);
1230 pmu_done(struct adb_request
*req
)
1232 void (*done
)(struct adb_request
*) = req
->done
;
1235 /* Here, we assume that if the request has a done member, the
1236 * struct request will survive to setting req->complete to 1
1245 struct adb_request
*req
;
1247 /* assert pmu_state == idle */
1248 /* get the packet to send */
1250 if (!req
|| pmu_state
!= idle
1251 || (/*req->reply_expected && */req_awaiting_reply
))
1254 pmu_state
= sending
;
1256 data_len
= pmu_data_len
[req
->data
[0]][0];
1258 /* Sounds safer to make sure ACK is high before writing. This helped
1259 * kill a problem with ADB and some iBooks
1262 /* set the shift register to shift out and send a byte */
1263 send_byte(req
->data
[0]);
1269 if (pmu_state
== uninitialized
)
1273 via_pmu_interrupt(0, NULL
);
1279 if (pmu_state
== uninitialized
)
1283 /* Kicks ADB read when PMU is suspended */
1284 adb_int_pending
= 1;
1286 via_pmu_interrupt(0, NULL
);
1287 } while (pmu_suspended
&& (adb_int_pending
|| pmu_state
!= idle
1288 || req_awaiting_reply
));
1292 pmu_wait_complete(struct adb_request
*req
)
1294 if (pmu_state
== uninitialized
)
1296 while((pmu_state
!= idle
&& pmu_state
!= locked
) || !req
->complete
)
1297 via_pmu_interrupt(0, NULL
);
1300 /* This function loops until the PMU is idle and prevents it from
1301 * anwsering to ADB interrupts. pmu_request can still be called.
1302 * This is done to avoid spurrious shutdowns when we know we'll have
1303 * interrupts switched off for a long time
1308 unsigned long flags
;
1310 if (pmu_state
== uninitialized
)
1313 spin_lock_irqsave(&pmu_lock
, flags
);
1315 if (pmu_suspended
> 1) {
1316 spin_unlock_irqrestore(&pmu_lock
, flags
);
1321 spin_unlock_irqrestore(&pmu_lock
, flags
);
1322 if (req_awaiting_reply
)
1323 adb_int_pending
= 1;
1324 via_pmu_interrupt(0, NULL
);
1325 spin_lock_irqsave(&pmu_lock
, flags
);
1326 if (!adb_int_pending
&& pmu_state
== idle
&& !req_awaiting_reply
) {
1328 disable_irq_nosync(gpio_irq
);
1329 out_8(&via1
[IER
], CB1_INT
| IER_CLR
);
1330 spin_unlock_irqrestore(&pmu_lock
, flags
);
1339 unsigned long flags
;
1341 if (pmu_state
== uninitialized
|| pmu_suspended
< 1)
1344 spin_lock_irqsave(&pmu_lock
, flags
);
1346 if (pmu_suspended
> 0) {
1347 spin_unlock_irqrestore(&pmu_lock
, flags
);
1350 adb_int_pending
= 1;
1352 enable_irq(gpio_irq
);
1353 out_8(&via1
[IER
], CB1_INT
| IER_SET
);
1354 spin_unlock_irqrestore(&pmu_lock
, flags
);
1358 /* Interrupt data could be the result data from an ADB cmd */
1360 pmu_handle_data(unsigned char *data
, int len
)
1367 if (drop_interrupts
|| len
< 1) {
1368 adb_int_pending
= 0;
1373 /* Get PMU interrupt mask */
1376 /* Record zero interrupts for stats */
1380 /* Hack to deal with ADB autopoll flag */
1381 if (ints
& PMU_INT_ADB
)
1382 ints
&= ~(PMU_INT_ADB_AUTO
| PMU_INT_AUTO_SRQ_POLL
);
1386 if (i
> pmu_irq_stats
[10])
1387 pmu_irq_stats
[10] = i
;
1392 idx
= ffs(ints
) - 1;
1395 pmu_irq_stats
[idx
]++;
1397 /* Note: for some reason, we get an interrupt with len=1,
1398 * data[0]==0 after each normal ADB interrupt, at least
1399 * on the Pismo. Still investigating... --BenH
1403 if ((data
[0] & PMU_INT_ADB_AUTO
) == 0) {
1404 struct adb_request
*req
= req_awaiting_reply
;
1406 printk(KERN_ERR
"PMU: extra ADB reply\n");
1409 req_awaiting_reply
= NULL
;
1413 memcpy(req
->reply
, data
+ 1, len
- 1);
1414 req
->reply_len
= len
- 1;
1419 if (len
== 4 && data
[1] == 0x2c) {
1420 extern int xmon_wants_key
, xmon_adb_keycode
;
1421 if (xmon_wants_key
) {
1422 xmon_adb_keycode
= data
[2];
1426 #endif /* CONFIG_XMON */
1429 * XXX On the [23]400 the PMU gives us an up
1430 * event for keycodes 0x74 or 0x75 when the PC
1431 * card eject buttons are released, so we
1432 * ignore those events.
1434 if (!(pmu_kind
== PMU_OHARE_BASED
&& len
== 4
1435 && data
[1] == 0x2c && data
[3] == 0xff
1436 && (data
[2] & ~1) == 0xf4))
1437 adb_input(data
+1, len
-1, 1);
1438 #endif /* CONFIG_ADB */
1442 /* Sound/brightness button pressed */
1443 case PMU_INT_SNDBRT
:
1444 #ifdef CONFIG_PMAC_BACKLIGHT
1446 pmac_backlight_set_legacy_brightness_pmu(data
[1] >> 4);
1450 /* Tick interrupt */
1452 /* Environment or tick interrupt, query batteries */
1453 if (pmu_battery_count
) {
1454 if ((--query_batt_timer
) == 0) {
1455 query_battery_state();
1456 query_batt_timer
= BATTERY_POLLING_COUNT
;
1461 case PMU_INT_ENVIRONMENT
:
1462 if (pmu_battery_count
)
1463 query_battery_state();
1464 pmu_pass_intr(data
, len
);
1465 /* len == 6 is probably a bad check. But how do I
1466 * know what PMU versions send what events here? */
1468 via_pmu_event(PMU_EVT_POWER
, !!(data
[1]&8));
1469 via_pmu_event(PMU_EVT_LID
, data
[1]&1);
1474 pmu_pass_intr(data
, len
);
1479 static struct adb_request
*
1482 struct adb_request
*req
;
1485 if (in_8(&via2
[B
]) & TREQ
) {
1486 printk(KERN_ERR
"PMU: spurious SR intr (%x)\n", in_8(&via2
[B
]));
1489 /* The ack may not yet be low when we get the interrupt */
1490 while ((in_8(&via2
[B
]) & TACK
) != 0)
1493 /* if reading grab the byte, and reset the interrupt */
1494 if (pmu_state
== reading
|| pmu_state
== reading_intr
)
1495 bite
= in_8(&via1
[SR
]);
1497 /* reset TREQ and wait for TACK to go high */
1498 out_8(&via2
[B
], in_8(&via2
[B
]) | TREQ
);
1501 switch (pmu_state
) {
1505 data_len
= req
->nbytes
- 1;
1506 send_byte(data_len
);
1509 if (data_index
<= data_len
) {
1510 send_byte(req
->data
[data_index
++]);
1514 data_len
= pmu_data_len
[req
->data
[0]][1];
1515 if (data_len
== 0) {
1517 current_req
= req
->next
;
1518 if (req
->reply_expected
)
1519 req_awaiting_reply
= req
;
1523 pmu_state
= reading
;
1525 reply_ptr
= req
->reply
+ req
->reply_len
;
1533 pmu_state
= reading_intr
;
1534 reply_ptr
= interrupt_data
[int_data_last
];
1536 if (gpio_irq
>= 0 && !gpio_irq_enabled
) {
1537 enable_irq(gpio_irq
);
1538 gpio_irq_enabled
= 1;
1544 if (data_len
== -1) {
1547 printk(KERN_ERR
"PMU: bad reply len %d\n", bite
);
1548 } else if (data_index
< 32) {
1549 reply_ptr
[data_index
++] = bite
;
1551 if (data_index
< data_len
) {
1556 if (pmu_state
== reading_intr
) {
1558 int_data_state
[int_data_last
] = int_data_ready
;
1559 interrupt_data_len
[int_data_last
] = data_len
;
1563 * For PMU sleep and freq change requests, we lock the
1564 * PMU until it's explicitly unlocked. This avoids any
1565 * spurrious event polling getting in
1567 current_req
= req
->next
;
1568 req
->reply_len
+= data_index
;
1569 if (req
->data
[0] == PMU_SLEEP
|| req
->data
[0] == PMU_CPU_SPEED
)
1578 printk(KERN_ERR
"via_pmu_interrupt: unknown state %d?\n",
1585 via_pmu_interrupt(int irq
, void *arg
)
1587 unsigned long flags
;
1591 struct adb_request
*req
= NULL
;
1594 /* This is a bit brutal, we can probably do better */
1595 spin_lock_irqsave(&pmu_lock
, flags
);
1599 /* On 68k Macs, VIA interrupts are dispatched individually.
1600 * Unless we are polling, the relevant IRQ flag has already
1604 if (IS_ENABLED(CONFIG_PPC_PMAC
) || !irq
) {
1605 intr
= in_8(&via1
[IFR
]) & (SR_INT
| CB1_INT
);
1606 out_8(&via1
[IFR
], intr
);
1608 #ifndef CONFIG_PPC_PMAC
1610 case IRQ_MAC_ADB_CL
:
1613 case IRQ_MAC_ADB_SR
:
1621 if (++nloop
> 1000) {
1622 printk(KERN_DEBUG
"PMU: stuck in intr loop, "
1623 "intr=%x, ier=%x pmu_state=%d\n",
1624 intr
, in_8(&via1
[IER
]), pmu_state
);
1627 if (intr
& CB1_INT
) {
1628 adb_int_pending
= 1;
1629 pmu_irq_stats
[11]++;
1631 if (intr
& SR_INT
) {
1632 req
= pmu_sr_intr();
1636 #ifndef CONFIG_PPC_PMAC
1642 if (pmu_state
== idle
) {
1643 if (adb_int_pending
) {
1644 if (int_data_state
[0] == int_data_empty
)
1646 else if (int_data_state
[1] == int_data_empty
)
1651 int_data_state
[int_data_last
] = int_data_fill
;
1652 /* Sounds safer to make sure ACK is high before writing.
1653 * This helped kill a problem with ADB and some iBooks
1656 send_byte(PMU_INT_ACK
);
1657 adb_int_pending
= 0;
1658 } else if (current_req
)
1662 /* Mark the oldest buffer for flushing */
1663 if (int_data_state
[!int_data_last
] == int_data_ready
) {
1664 int_data_state
[!int_data_last
] = int_data_flush
;
1665 int_data
= !int_data_last
;
1666 } else if (int_data_state
[int_data_last
] == int_data_ready
) {
1667 int_data_state
[int_data_last
] = int_data_flush
;
1668 int_data
= int_data_last
;
1671 spin_unlock_irqrestore(&pmu_lock
, flags
);
1673 /* Deal with completed PMU requests outside of the lock */
1679 /* Deal with interrupt datas outside of the lock */
1680 if (int_data
>= 0) {
1681 pmu_handle_data(interrupt_data
[int_data
], interrupt_data_len
[int_data
]);
1682 spin_lock_irqsave(&pmu_lock
, flags
);
1684 int_data_state
[int_data
] = int_data_empty
;
1689 return IRQ_RETVAL(handled
);
1695 unsigned long flags
;
1697 spin_lock_irqsave(&pmu_lock
, flags
);
1698 if (pmu_state
== locked
)
1700 adb_int_pending
= 1;
1701 spin_unlock_irqrestore(&pmu_lock
, flags
);
1705 static __maybe_unused irqreturn_t
1706 gpio1_interrupt(int irq
, void *arg
)
1708 unsigned long flags
;
1710 if ((in_8(gpio_reg
+ 0x9) & 0x02) == 0) {
1711 spin_lock_irqsave(&pmu_lock
, flags
);
1712 if (gpio_irq_enabled
> 0) {
1713 disable_irq_nosync(gpio_irq
);
1714 gpio_irq_enabled
= 0;
1716 pmu_irq_stats
[12]++;
1717 adb_int_pending
= 1;
1718 spin_unlock_irqrestore(&pmu_lock
, flags
);
1719 via_pmu_interrupt(0, NULL
);
1726 pmu_enable_irled(int on
)
1728 struct adb_request req
;
1730 if (pmu_state
== uninitialized
)
1732 if (pmu_kind
== PMU_KEYLARGO_BASED
)
1735 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL
, PMU_POW_IRLED
|
1736 (on
? PMU_POW_ON
: PMU_POW_OFF
));
1737 pmu_wait_complete(&req
);
1743 struct adb_request req
;
1745 if (pmu_state
== uninitialized
)
1748 local_irq_disable();
1750 drop_interrupts
= 1;
1752 if (pmu_kind
!= PMU_KEYLARGO_BASED
) {
1753 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, PMU_INT_ADB
|
1755 while(!req
.complete
)
1759 pmu_request(&req
, NULL
, 1, PMU_RESET
);
1760 pmu_wait_complete(&req
);
1768 struct adb_request req
;
1770 if (pmu_state
== uninitialized
)
1773 local_irq_disable();
1775 drop_interrupts
= 1;
1777 if (pmu_kind
!= PMU_KEYLARGO_BASED
) {
1778 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, PMU_INT_ADB
|
1780 pmu_wait_complete(&req
);
1782 /* Disable server mode on shutdown or we'll just
1785 pmu_set_server_mode(0);
1788 pmu_request(&req
, NULL
, 5, PMU_SHUTDOWN
,
1789 'M', 'A', 'T', 'T');
1790 pmu_wait_complete(&req
);
1798 return pmu_state
!= uninitialized
;
1801 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
1803 * Put the powerbook to sleep.
1806 static u32 save_via
[8];
1809 save_via_state(void)
1811 save_via
[0] = in_8(&via1
[ANH
]);
1812 save_via
[1] = in_8(&via1
[DIRA
]);
1813 save_via
[2] = in_8(&via1
[B
]);
1814 save_via
[3] = in_8(&via1
[DIRB
]);
1815 save_via
[4] = in_8(&via1
[PCR
]);
1816 save_via
[5] = in_8(&via1
[ACR
]);
1817 save_via
[6] = in_8(&via1
[T1CL
]);
1818 save_via
[7] = in_8(&via1
[T1CH
]);
1821 restore_via_state(void)
1823 out_8(&via1
[ANH
], save_via
[0]);
1824 out_8(&via1
[DIRA
], save_via
[1]);
1825 out_8(&via1
[B
], save_via
[2]);
1826 out_8(&via1
[DIRB
], save_via
[3]);
1827 out_8(&via1
[PCR
], save_via
[4]);
1828 out_8(&via1
[ACR
], save_via
[5]);
1829 out_8(&via1
[T1CL
], save_via
[6]);
1830 out_8(&via1
[T1CH
], save_via
[7]);
1831 out_8(&via1
[IER
], IER_CLR
| 0x7f); /* disable all intrs */
1832 out_8(&via1
[IFR
], 0x7f); /* clear IFR */
1833 out_8(&via1
[IER
], IER_SET
| SR_INT
| CB1_INT
);
1836 #define GRACKLE_PM (1<<7)
1837 #define GRACKLE_DOZE (1<<5)
1838 #define GRACKLE_NAP (1<<4)
1839 #define GRACKLE_SLEEP (1<<3)
1841 static int powerbook_sleep_grackle(void)
1843 unsigned long save_l2cr
;
1844 unsigned short pmcr1
;
1845 struct adb_request req
;
1846 struct pci_dev
*grackle
;
1848 grackle
= pci_get_domain_bus_and_slot(0, 0, 0);
1852 /* Turn off various things. Darwin does some retry tests here... */
1853 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL0
, PMU_POW0_OFF
|PMU_POW0_HARD_DRIVE
);
1854 pmu_wait_complete(&req
);
1855 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL
,
1856 PMU_POW_OFF
|PMU_POW_BACKLIGHT
|PMU_POW_IRLED
|PMU_POW_MEDIABAY
);
1857 pmu_wait_complete(&req
);
1859 /* For 750, save backside cache setting and disable it */
1860 save_l2cr
= _get_L2CR(); /* (returns -1 if not available) */
1862 if (!__fake_sleep
) {
1863 /* Ask the PMU to put us to sleep */
1864 pmu_request(&req
, NULL
, 5, PMU_SLEEP
, 'M', 'A', 'T', 'T');
1865 pmu_wait_complete(&req
);
1868 /* The VIA is supposed not to be restored correctly*/
1870 /* We shut down some HW */
1871 pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,1);
1873 pci_read_config_word(grackle
, 0x70, &pmcr1
);
1874 /* Apparently, MacOS uses NAP mode for Grackle ??? */
1875 pmcr1
&= ~(GRACKLE_DOZE
|GRACKLE_SLEEP
);
1876 pmcr1
|= GRACKLE_PM
|GRACKLE_NAP
;
1877 pci_write_config_word(grackle
, 0x70, pmcr1
);
1879 /* Call low-level ASM sleep handler */
1883 low_sleep_handler();
1885 /* We're awake again, stop grackle PM */
1886 pci_read_config_word(grackle
, 0x70, &pmcr1
);
1887 pmcr1
&= ~(GRACKLE_PM
|GRACKLE_DOZE
|GRACKLE_SLEEP
|GRACKLE_NAP
);
1888 pci_write_config_word(grackle
, 0x70, pmcr1
);
1890 pci_dev_put(grackle
);
1892 /* Make sure the PMU is idle */
1893 pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,0);
1894 restore_via_state();
1896 /* Restore L2 cache */
1897 if (save_l2cr
!= 0xffffffff && (save_l2cr
& L2CR_L2E
) != 0)
1898 _set_L2CR(save_l2cr
);
1900 /* Restore userland MMU context */
1901 switch_mmu_context(NULL
, current
->active_mm
, NULL
);
1903 /* Power things up */
1905 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, pmu_intr_mask
);
1906 pmu_wait_complete(&req
);
1907 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL0
,
1908 PMU_POW0_ON
|PMU_POW0_HARD_DRIVE
);
1909 pmu_wait_complete(&req
);
1910 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL
,
1911 PMU_POW_ON
|PMU_POW_BACKLIGHT
|PMU_POW_CHARGER
|PMU_POW_IRLED
|PMU_POW_MEDIABAY
);
1912 pmu_wait_complete(&req
);
1918 powerbook_sleep_Core99(void)
1920 unsigned long save_l2cr
;
1921 unsigned long save_l3cr
;
1922 struct adb_request req
;
1924 if (pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,-1) < 0) {
1925 printk(KERN_ERR
"Sleep mode not supported on this machine\n");
1929 if (num_online_cpus() > 1 || cpu_is_offline(0))
1932 /* Stop environment and ADB interrupts */
1933 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, 0);
1934 pmu_wait_complete(&req
);
1936 /* Tell PMU what events will wake us up */
1937 pmu_request(&req
, NULL
, 4, PMU_POWER_EVENTS
, PMU_PWR_CLR_WAKEUP_EVENTS
,
1939 pmu_wait_complete(&req
);
1940 pmu_request(&req
, NULL
, 4, PMU_POWER_EVENTS
, PMU_PWR_SET_WAKEUP_EVENTS
,
1941 0, PMU_PWR_WAKEUP_KEY
|
1942 (option_lid_wakeup
? PMU_PWR_WAKEUP_LID_OPEN
: 0));
1943 pmu_wait_complete(&req
);
1945 /* Save the state of the L2 and L3 caches */
1946 save_l3cr
= _get_L3CR(); /* (returns -1 if not available) */
1947 save_l2cr
= _get_L2CR(); /* (returns -1 if not available) */
1949 if (!__fake_sleep
) {
1950 /* Ask the PMU to put us to sleep */
1951 pmu_request(&req
, NULL
, 5, PMU_SLEEP
, 'M', 'A', 'T', 'T');
1952 pmu_wait_complete(&req
);
1955 /* The VIA is supposed not to be restored correctly*/
1958 /* Shut down various ASICs. There's a chance that we can no longer
1959 * talk to the PMU after this, so I moved it to _after_ sending the
1960 * sleep command to it. Still need to be checked.
1962 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 1);
1964 /* Call low-level ASM sleep handler */
1968 low_sleep_handler();
1970 /* Restore Apple core ASICs state */
1971 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 0);
1974 restore_via_state();
1976 /* tweak LPJ before cpufreq is there */
1977 loops_per_jiffy
*= 2;
1980 pmac_call_early_video_resume();
1982 /* Restore L2 cache */
1983 if (save_l2cr
!= 0xffffffff && (save_l2cr
& L2CR_L2E
) != 0)
1984 _set_L2CR(save_l2cr
);
1985 /* Restore L3 cache */
1986 if (save_l3cr
!= 0xffffffff && (save_l3cr
& L3CR_L3E
) != 0)
1987 _set_L3CR(save_l3cr
);
1989 /* Restore userland MMU context */
1990 switch_mmu_context(NULL
, current
->active_mm
, NULL
);
1992 /* Tell PMU we are ready */
1994 pmu_request(&req
, NULL
, 2, PMU_SYSTEM_READY
, 2);
1995 pmu_wait_complete(&req
);
1996 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, pmu_intr_mask
);
1997 pmu_wait_complete(&req
);
1999 /* Restore LPJ, cpufreq will adjust the cpu frequency */
2000 loops_per_jiffy
/= 2;
2005 #define PB3400_MEM_CTRL 0xf8000000
2006 #define PB3400_MEM_CTRL_SLEEP 0x70
2008 static void __iomem
*pb3400_mem_ctrl
;
2010 static void powerbook_sleep_init_3400(void)
2012 /* map in the memory controller registers */
2013 pb3400_mem_ctrl
= ioremap(PB3400_MEM_CTRL
, 0x100);
2014 if (pb3400_mem_ctrl
== NULL
)
2015 printk(KERN_WARNING
"ioremap failed: sleep won't be possible");
2018 static int powerbook_sleep_3400(void)
2023 struct adb_request sleep_req
;
2024 unsigned int __iomem
*mem_ctrl_sleep
;
2026 if (pb3400_mem_ctrl
== NULL
)
2028 mem_ctrl_sleep
= pb3400_mem_ctrl
+ PB3400_MEM_CTRL_SLEEP
;
2030 /* Set the memory controller to keep the memory refreshed
2031 while we're asleep */
2032 for (i
= 0x403f; i
>= 0x4000; --i
) {
2033 out_be32(mem_ctrl_sleep
, i
);
2035 x
= (in_be32(mem_ctrl_sleep
) >> 16) & 0x3ff;
2041 /* Ask the PMU to put us to sleep */
2042 pmu_request(&sleep_req
, NULL
, 5, PMU_SLEEP
, 'M', 'A', 'T', 'T');
2043 pmu_wait_complete(&sleep_req
);
2046 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 1);
2050 /* Put the CPU into sleep mode */
2051 hid0
= mfspr(SPRN_HID0
);
2052 hid0
= (hid0
& ~(HID0_NAP
| HID0_DOZE
)) | HID0_SLEEP
;
2053 mtspr(SPRN_HID0
, hid0
);
2055 msr
= mfmsr() | MSR_POW
;
2061 local_irq_disable();
2063 /* OK, we're awake again, start restoring things */
2064 out_be32(mem_ctrl_sleep
, 0x3f);
2065 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 0);
2070 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
2073 * Support for /dev/pmu device
2075 #define RB_SIZE 0x10
2076 struct pmu_private
{
2077 struct list_head list
;
2082 unsigned char data
[16];
2084 wait_queue_head_t wait
;
2086 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
2087 int backlight_locker
;
2091 static LIST_HEAD(all_pmu_pvt
);
2092 static DEFINE_SPINLOCK(all_pvt_lock
);
2095 pmu_pass_intr(unsigned char *data
, int len
)
2097 struct pmu_private
*pp
;
2098 struct list_head
*list
;
2100 unsigned long flags
;
2102 if (len
> sizeof(pp
->rb_buf
[0].data
))
2103 len
= sizeof(pp
->rb_buf
[0].data
);
2104 spin_lock_irqsave(&all_pvt_lock
, flags
);
2105 for (list
= &all_pmu_pvt
; (list
= list
->next
) != &all_pmu_pvt
; ) {
2106 pp
= list_entry(list
, struct pmu_private
, list
);
2107 spin_lock(&pp
->lock
);
2111 if (i
!= pp
->rb_get
) {
2112 struct rb_entry
*rp
= &pp
->rb_buf
[pp
->rb_put
];
2114 memcpy(rp
->data
, data
, len
);
2116 wake_up_interruptible(&pp
->wait
);
2118 spin_unlock(&pp
->lock
);
2120 spin_unlock_irqrestore(&all_pvt_lock
, flags
);
2124 pmu_open(struct inode
*inode
, struct file
*file
)
2126 struct pmu_private
*pp
;
2127 unsigned long flags
;
2129 pp
= kmalloc(sizeof(struct pmu_private
), GFP_KERNEL
);
2132 pp
->rb_get
= pp
->rb_put
= 0;
2133 spin_lock_init(&pp
->lock
);
2134 init_waitqueue_head(&pp
->wait
);
2135 mutex_lock(&pmu_info_proc_mutex
);
2136 spin_lock_irqsave(&all_pvt_lock
, flags
);
2137 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
2138 pp
->backlight_locker
= 0;
2140 list_add(&pp
->list
, &all_pmu_pvt
);
2141 spin_unlock_irqrestore(&all_pvt_lock
, flags
);
2142 file
->private_data
= pp
;
2143 mutex_unlock(&pmu_info_proc_mutex
);
2148 pmu_read(struct file
*file
, char __user
*buf
,
2149 size_t count
, loff_t
*ppos
)
2151 struct pmu_private
*pp
= file
->private_data
;
2152 DECLARE_WAITQUEUE(wait
, current
);
2153 unsigned long flags
;
2156 if (count
< 1 || !pp
)
2158 if (!access_ok(VERIFY_WRITE
, buf
, count
))
2161 spin_lock_irqsave(&pp
->lock
, flags
);
2162 add_wait_queue(&pp
->wait
, &wait
);
2163 set_current_state(TASK_INTERRUPTIBLE
);
2167 if (pp
->rb_get
!= pp
->rb_put
) {
2169 struct rb_entry
*rp
= &pp
->rb_buf
[i
];
2171 spin_unlock_irqrestore(&pp
->lock
, flags
);
2174 if (ret
> 0 && copy_to_user(buf
, rp
->data
, ret
))
2178 spin_lock_irqsave(&pp
->lock
, flags
);
2183 if (file
->f_flags
& O_NONBLOCK
)
2186 if (signal_pending(current
))
2188 spin_unlock_irqrestore(&pp
->lock
, flags
);
2190 spin_lock_irqsave(&pp
->lock
, flags
);
2192 __set_current_state(TASK_RUNNING
);
2193 remove_wait_queue(&pp
->wait
, &wait
);
2194 spin_unlock_irqrestore(&pp
->lock
, flags
);
2200 pmu_write(struct file
*file
, const char __user
*buf
,
2201 size_t count
, loff_t
*ppos
)
2207 pmu_fpoll(struct file
*filp
, poll_table
*wait
)
2209 struct pmu_private
*pp
= filp
->private_data
;
2211 unsigned long flags
;
2215 poll_wait(filp
, &pp
->wait
, wait
);
2216 spin_lock_irqsave(&pp
->lock
, flags
);
2217 if (pp
->rb_get
!= pp
->rb_put
)
2219 spin_unlock_irqrestore(&pp
->lock
, flags
);
2224 pmu_release(struct inode
*inode
, struct file
*file
)
2226 struct pmu_private
*pp
= file
->private_data
;
2227 unsigned long flags
;
2230 file
->private_data
= NULL
;
2231 spin_lock_irqsave(&all_pvt_lock
, flags
);
2232 list_del(&pp
->list
);
2233 spin_unlock_irqrestore(&all_pvt_lock
, flags
);
2235 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
2236 if (pp
->backlight_locker
)
2237 pmac_backlight_enable();
2245 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
2246 static void pmac_suspend_disable_irqs(void)
2248 /* Call platform functions marked "on sleep" */
2249 pmac_pfunc_i2c_suspend();
2250 pmac_pfunc_base_suspend();
2253 static int powerbook_sleep(suspend_state_t state
)
2257 /* Wait for completion of async requests */
2258 while (!batt_req
.complete
)
2261 /* Giveup the lazy FPU & vec so we don't have to back them
2262 * up from the low level code
2266 #ifdef CONFIG_ALTIVEC
2267 if (cpu_has_feature(CPU_FTR_ALTIVEC
))
2268 enable_kernel_altivec();
2269 #endif /* CONFIG_ALTIVEC */
2272 case PMU_OHARE_BASED
:
2273 error
= powerbook_sleep_3400();
2275 case PMU_HEATHROW_BASED
:
2276 case PMU_PADDINGTON_BASED
:
2277 error
= powerbook_sleep_grackle();
2279 case PMU_KEYLARGO_BASED
:
2280 error
= powerbook_sleep_Core99();
2294 static void pmac_suspend_enable_irqs(void)
2296 /* Force a poll of ADB interrupts */
2297 adb_int_pending
= 1;
2298 via_pmu_interrupt(0, NULL
);
2302 /* Call platform functions marked "on wake" */
2303 pmac_pfunc_base_resume();
2304 pmac_pfunc_i2c_resume();
2307 static int pmu_sleep_valid(suspend_state_t state
)
2309 return state
== PM_SUSPEND_MEM
2310 && (pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, -1) >= 0);
2313 static const struct platform_suspend_ops pmu_pm_ops
= {
2314 .enter
= powerbook_sleep
,
2315 .valid
= pmu_sleep_valid
,
2318 static int register_pmu_pm_ops(void)
2320 if (pmu_kind
== PMU_OHARE_BASED
)
2321 powerbook_sleep_init_3400();
2322 ppc_md
.suspend_disable_irqs
= pmac_suspend_disable_irqs
;
2323 ppc_md
.suspend_enable_irqs
= pmac_suspend_enable_irqs
;
2324 suspend_set_ops(&pmu_pm_ops
);
2329 device_initcall(register_pmu_pm_ops
);
2332 static int pmu_ioctl(struct file
*filp
,
2333 u_int cmd
, u_long arg
)
2335 __u32 __user
*argp
= (__u32 __user
*)arg
;
2336 int error
= -EINVAL
;
2339 #ifdef CONFIG_PPC_PMAC
2341 if (!capable(CAP_SYS_ADMIN
))
2343 return pm_suspend(PM_SUSPEND_MEM
);
2344 case PMU_IOC_CAN_SLEEP
:
2345 if (pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, -1) < 0)
2346 return put_user(0, argp
);
2348 return put_user(1, argp
);
2351 #ifdef CONFIG_PMAC_BACKLIGHT_LEGACY
2352 /* Compatibility ioctl's for backlight */
2353 case PMU_IOC_GET_BACKLIGHT
:
2357 brightness
= pmac_backlight_get_legacy_brightness();
2361 return put_user(brightness
, argp
);
2364 case PMU_IOC_SET_BACKLIGHT
:
2368 error
= get_user(brightness
, argp
);
2372 return pmac_backlight_set_legacy_brightness(brightness
);
2374 #ifdef CONFIG_INPUT_ADBHID
2375 case PMU_IOC_GRAB_BACKLIGHT
: {
2376 struct pmu_private
*pp
= filp
->private_data
;
2378 if (pp
->backlight_locker
)
2381 pp
->backlight_locker
= 1;
2382 pmac_backlight_disable();
2386 #endif /* CONFIG_INPUT_ADBHID */
2387 #endif /* CONFIG_PMAC_BACKLIGHT_LEGACY */
2389 case PMU_IOC_GET_MODEL
:
2390 return put_user(pmu_kind
, argp
);
2391 case PMU_IOC_HAS_ADB
:
2392 return put_user(pmu_has_adb
, argp
);
2397 static long pmu_unlocked_ioctl(struct file
*filp
,
2398 u_int cmd
, u_long arg
)
2402 mutex_lock(&pmu_info_proc_mutex
);
2403 ret
= pmu_ioctl(filp
, cmd
, arg
);
2404 mutex_unlock(&pmu_info_proc_mutex
);
2409 #ifdef CONFIG_COMPAT
2410 #define PMU_IOC_GET_BACKLIGHT32 _IOR('B', 1, compat_size_t)
2411 #define PMU_IOC_SET_BACKLIGHT32 _IOW('B', 2, compat_size_t)
2412 #define PMU_IOC_GET_MODEL32 _IOR('B', 3, compat_size_t)
2413 #define PMU_IOC_HAS_ADB32 _IOR('B', 4, compat_size_t)
2414 #define PMU_IOC_CAN_SLEEP32 _IOR('B', 5, compat_size_t)
2415 #define PMU_IOC_GRAB_BACKLIGHT32 _IOR('B', 6, compat_size_t)
2417 static long compat_pmu_ioctl (struct file
*filp
, u_int cmd
, u_long arg
)
2422 case PMU_IOC_GET_BACKLIGHT32
:
2423 cmd
= PMU_IOC_GET_BACKLIGHT
;
2425 case PMU_IOC_SET_BACKLIGHT32
:
2426 cmd
= PMU_IOC_SET_BACKLIGHT
;
2428 case PMU_IOC_GET_MODEL32
:
2429 cmd
= PMU_IOC_GET_MODEL
;
2431 case PMU_IOC_HAS_ADB32
:
2432 cmd
= PMU_IOC_HAS_ADB
;
2434 case PMU_IOC_CAN_SLEEP32
:
2435 cmd
= PMU_IOC_CAN_SLEEP
;
2437 case PMU_IOC_GRAB_BACKLIGHT32
:
2438 cmd
= PMU_IOC_GRAB_BACKLIGHT
;
2441 return -ENOIOCTLCMD
;
2443 return pmu_unlocked_ioctl(filp
, cmd
, (unsigned long)compat_ptr(arg
));
2447 static const struct file_operations pmu_device_fops
= {
2451 .unlocked_ioctl
= pmu_unlocked_ioctl
,
2452 #ifdef CONFIG_COMPAT
2453 .compat_ioctl
= compat_pmu_ioctl
,
2456 .release
= pmu_release
,
2457 .llseek
= noop_llseek
,
2460 static struct miscdevice pmu_device
= {
2461 PMU_MINOR
, "pmu", &pmu_device_fops
2464 static int pmu_device_init(void)
2466 if (pmu_state
== uninitialized
)
2468 if (misc_register(&pmu_device
) < 0)
2469 printk(KERN_ERR
"via-pmu: cannot register misc device.\n");
2472 device_initcall(pmu_device_init
);
2477 polled_handshake(void)
2479 via2
[B
] &= ~TREQ
; eieio();
2480 while ((via2
[B
] & TACK
) != 0)
2482 via2
[B
] |= TREQ
; eieio();
2483 while ((via2
[B
] & TACK
) == 0)
2488 polled_send_byte(int x
)
2490 via1
[ACR
] |= SR_OUT
| SR_EXT
; eieio();
2491 via1
[SR
] = x
; eieio();
2496 polled_recv_byte(void)
2500 via1
[ACR
] = (via1
[ACR
] & ~SR_OUT
) | SR_EXT
; eieio();
2501 x
= via1
[SR
]; eieio();
2503 x
= via1
[SR
]; eieio();
2508 pmu_polled_request(struct adb_request
*req
)
2510 unsigned long flags
;
2515 l
= pmu_data_len
[c
][0];
2516 if (l
>= 0 && req
->nbytes
!= l
+ 1)
2519 local_irq_save(flags
);
2520 while (pmu_state
!= idle
)
2523 while ((via2
[B
] & TACK
) == 0)
2525 polled_send_byte(c
);
2527 l
= req
->nbytes
- 1;
2528 polled_send_byte(l
);
2530 for (i
= 1; i
<= l
; ++i
)
2531 polled_send_byte(req
->data
[i
]);
2533 l
= pmu_data_len
[c
][1];
2535 l
= polled_recv_byte();
2536 for (i
= 0; i
< l
; ++i
)
2537 req
->reply
[i
+ req
->reply_len
] = polled_recv_byte();
2542 local_irq_restore(flags
);
2546 /* N.B. This doesn't work on the 3400 */
2547 void pmu_blink(int n
)
2549 struct adb_request req
;
2551 memset(&req
, 0, sizeof(req
));
2553 for (; n
> 0; --n
) {
2560 req
.reply
[0] = ADB_RET_OK
;
2562 req
.reply_expected
= 0;
2563 pmu_polled_request(&req
);
2571 req
.reply
[0] = ADB_RET_OK
;
2573 req
.reply_expected
= 0;
2574 pmu_polled_request(&req
);
2579 #endif /* DEBUG_SLEEP */
2581 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
2582 int pmu_sys_suspended
;
2584 static int pmu_syscore_suspend(void)
2586 /* Suspend PMU event interrupts */
2588 pmu_sys_suspended
= 1;
2590 #ifdef CONFIG_PMAC_BACKLIGHT
2591 /* Tell backlight code not to muck around with the chip anymore */
2592 pmu_backlight_set_sleep(1);
2598 static void pmu_syscore_resume(void)
2600 struct adb_request req
;
2602 if (!pmu_sys_suspended
)
2605 /* Tell PMU we are ready */
2606 pmu_request(&req
, NULL
, 2, PMU_SYSTEM_READY
, 2);
2607 pmu_wait_complete(&req
);
2609 #ifdef CONFIG_PMAC_BACKLIGHT
2610 /* Tell backlight code it can use the chip again */
2611 pmu_backlight_set_sleep(0);
2613 /* Resume PMU event interrupts */
2615 pmu_sys_suspended
= 0;
2618 static struct syscore_ops pmu_syscore_ops
= {
2619 .suspend
= pmu_syscore_suspend
,
2620 .resume
= pmu_syscore_resume
,
2623 static int pmu_syscore_register(void)
2625 register_syscore_ops(&pmu_syscore_ops
);
2629 subsys_initcall(pmu_syscore_register
);
2630 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
2632 EXPORT_SYMBOL(pmu_request
);
2633 EXPORT_SYMBOL(pmu_queue_request
);
2634 EXPORT_SYMBOL(pmu_poll
);
2635 EXPORT_SYMBOL(pmu_poll_adb
);
2636 EXPORT_SYMBOL(pmu_wait_complete
);
2637 EXPORT_SYMBOL(pmu_suspend
);
2638 EXPORT_SYMBOL(pmu_resume
);
2639 EXPORT_SYMBOL(pmu_unlock
);
2640 #if defined(CONFIG_PPC32)
2641 EXPORT_SYMBOL(pmu_enable_irled
);
2642 EXPORT_SYMBOL(pmu_battery_count
);
2643 EXPORT_SYMBOL(pmu_batteries
);
2644 EXPORT_SYMBOL(pmu_power_flags
);
2645 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */