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 proc_ops pmu_options_proc_ops
;
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 (of_node_name_eq(vias
->parent
, "ohare") ||
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_ops
);
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 proc_ops pmu_options_proc_ops
= {
978 .proc_open
= pmu_options_proc_open
,
979 .proc_read
= seq_read
,
980 .proc_lseek
= seq_lseek
,
981 .proc_release
= single_release
,
982 .proc_write
= pmu_options_proc_write
,
986 /* Send an ADB command */
987 static int pmu_send_request(struct adb_request
*req
, int sync
)
991 if (pmu_state
== uninitialized
|| !pmu_fully_inited
) {
998 switch (req
->data
[0]) {
1000 for (i
= 0; i
< req
->nbytes
- 1; ++i
)
1001 req
->data
[i
] = req
->data
[i
+1];
1003 if (pmu_data_len
[req
->data
[0]][1] != 0) {
1004 req
->reply
[0] = ADB_RET_OK
;
1008 ret
= pmu_queue_request(req
);
1011 switch (req
->data
[1]) {
1013 if (req
->nbytes
!= 2)
1015 req
->data
[0] = PMU_READ_RTC
;
1018 req
->reply
[0] = CUDA_PACKET
;
1020 req
->reply
[2] = CUDA_GET_TIME
;
1021 ret
= pmu_queue_request(req
);
1024 if (req
->nbytes
!= 6)
1026 req
->data
[0] = PMU_SET_RTC
;
1028 for (i
= 1; i
<= 4; ++i
)
1029 req
->data
[i
] = req
->data
[i
+1];
1031 req
->reply
[0] = CUDA_PACKET
;
1033 req
->reply
[2] = CUDA_SET_TIME
;
1034 ret
= pmu_queue_request(req
);
1041 for (i
= req
->nbytes
- 1; i
> 1; --i
)
1042 req
->data
[i
+2] = req
->data
[i
];
1043 req
->data
[3] = req
->nbytes
- 2;
1044 req
->data
[2] = pmu_adb_flags
;
1045 /*req->data[1] = req->data[1];*/
1046 req
->data
[0] = PMU_ADB_CMD
;
1048 req
->reply_expected
= 1;
1050 ret
= pmu_queue_request(req
);
1059 while (!req
->complete
)
1065 /* Enable/disable autopolling */
1066 static int __pmu_adb_autopoll(int devs
)
1068 struct adb_request req
;
1071 pmu_request(&req
, NULL
, 5, PMU_ADB_CMD
, 0, 0x86,
1072 adb_dev_map
>> 8, adb_dev_map
);
1075 pmu_request(&req
, NULL
, 1, PMU_ADB_POLL_OFF
);
1078 while (!req
.complete
)
1083 static int pmu_adb_autopoll(int devs
)
1085 if (pmu_state
== uninitialized
|| !pmu_fully_inited
|| !pmu_has_adb
)
1089 return __pmu_adb_autopoll(devs
);
1092 /* Reset the ADB bus */
1093 static int pmu_adb_reset_bus(void)
1095 struct adb_request req
;
1096 int save_autopoll
= adb_dev_map
;
1098 if (pmu_state
== uninitialized
|| !pmu_fully_inited
|| !pmu_has_adb
)
1101 /* anyone got a better idea?? */
1102 __pmu_adb_autopoll(0);
1106 req
.data
[0] = PMU_ADB_CMD
;
1107 req
.data
[1] = ADB_BUSRESET
;
1112 req
.reply_expected
= 1;
1113 if (pmu_queue_request(&req
) != 0) {
1114 printk(KERN_ERR
"pmu_adb_reset_bus: pmu_queue_request failed\n");
1117 pmu_wait_complete(&req
);
1119 if (save_autopoll
!= 0)
1120 __pmu_adb_autopoll(save_autopoll
);
1124 #endif /* CONFIG_ADB */
1126 /* Construct and send a pmu request */
1128 pmu_request(struct adb_request
*req
, void (*done
)(struct adb_request
*),
1134 if (pmu_state
== uninitialized
)
1137 if (nbytes
< 0 || nbytes
> 32) {
1138 printk(KERN_ERR
"pmu_request: bad nbytes (%d)\n", nbytes
);
1142 req
->nbytes
= nbytes
;
1144 va_start(list
, nbytes
);
1145 for (i
= 0; i
< nbytes
; ++i
)
1146 req
->data
[i
] = va_arg(list
, int);
1149 req
->reply_expected
= 0;
1150 return pmu_queue_request(req
);
1154 pmu_queue_request(struct adb_request
*req
)
1156 unsigned long flags
;
1159 if (pmu_state
== uninitialized
) {
1163 if (req
->nbytes
<= 0) {
1167 nsend
= pmu_data_len
[req
->data
[0]][0];
1168 if (nsend
>= 0 && req
->nbytes
!= nsend
+ 1) {
1177 spin_lock_irqsave(&pmu_lock
, flags
);
1179 last_req
->next
= req
;
1184 if (pmu_state
== idle
)
1187 spin_unlock_irqrestore(&pmu_lock
, flags
);
1195 /* Sightly increased the delay, I had one occurrence of the message
1199 while ((in_8(&via2
[B
]) & TACK
) == 0) {
1200 if (--timeout
< 0) {
1201 printk(KERN_ERR
"PMU not responding (!ack)\n");
1208 /* New PMU seems to be very sensitive to those timings, so we make sure
1209 * PCI is flushed immediately */
1213 out_8(&via1
[ACR
], in_8(&via1
[ACR
]) | SR_OUT
| SR_EXT
);
1214 out_8(&via1
[SR
], x
);
1215 out_8(&via2
[B
], in_8(&via2
[B
]) & ~TREQ
); /* assert TREQ */
1216 (void)in_8(&via2
[B
]);
1222 out_8(&via1
[ACR
], (in_8(&via1
[ACR
]) & ~SR_OUT
) | SR_EXT
);
1223 in_8(&via1
[SR
]); /* resets SR */
1224 out_8(&via2
[B
], in_8(&via2
[B
]) & ~TREQ
);
1225 (void)in_8(&via2
[B
]);
1229 pmu_done(struct adb_request
*req
)
1231 void (*done
)(struct adb_request
*) = req
->done
;
1234 /* Here, we assume that if the request has a done member, the
1235 * struct request will survive to setting req->complete to 1
1244 struct adb_request
*req
;
1246 /* assert pmu_state == idle */
1247 /* get the packet to send */
1249 if (!req
|| pmu_state
!= idle
1250 || (/*req->reply_expected && */req_awaiting_reply
))
1253 pmu_state
= sending
;
1255 data_len
= pmu_data_len
[req
->data
[0]][0];
1257 /* Sounds safer to make sure ACK is high before writing. This helped
1258 * kill a problem with ADB and some iBooks
1261 /* set the shift register to shift out and send a byte */
1262 send_byte(req
->data
[0]);
1268 if (pmu_state
== uninitialized
)
1272 via_pmu_interrupt(0, NULL
);
1278 if (pmu_state
== uninitialized
)
1282 /* Kicks ADB read when PMU is suspended */
1283 adb_int_pending
= 1;
1285 via_pmu_interrupt(0, NULL
);
1286 } while (pmu_suspended
&& (adb_int_pending
|| pmu_state
!= idle
1287 || req_awaiting_reply
));
1291 pmu_wait_complete(struct adb_request
*req
)
1293 if (pmu_state
== uninitialized
)
1295 while((pmu_state
!= idle
&& pmu_state
!= locked
) || !req
->complete
)
1296 via_pmu_interrupt(0, NULL
);
1299 /* This function loops until the PMU is idle and prevents it from
1300 * anwsering to ADB interrupts. pmu_request can still be called.
1301 * This is done to avoid spurrious shutdowns when we know we'll have
1302 * interrupts switched off for a long time
1307 unsigned long flags
;
1309 if (pmu_state
== uninitialized
)
1312 spin_lock_irqsave(&pmu_lock
, flags
);
1314 if (pmu_suspended
> 1) {
1315 spin_unlock_irqrestore(&pmu_lock
, flags
);
1320 spin_unlock_irqrestore(&pmu_lock
, flags
);
1321 if (req_awaiting_reply
)
1322 adb_int_pending
= 1;
1323 via_pmu_interrupt(0, NULL
);
1324 spin_lock_irqsave(&pmu_lock
, flags
);
1325 if (!adb_int_pending
&& pmu_state
== idle
&& !req_awaiting_reply
) {
1327 disable_irq_nosync(gpio_irq
);
1328 out_8(&via1
[IER
], CB1_INT
| IER_CLR
);
1329 spin_unlock_irqrestore(&pmu_lock
, flags
);
1338 unsigned long flags
;
1340 if (pmu_state
== uninitialized
|| pmu_suspended
< 1)
1343 spin_lock_irqsave(&pmu_lock
, flags
);
1345 if (pmu_suspended
> 0) {
1346 spin_unlock_irqrestore(&pmu_lock
, flags
);
1349 adb_int_pending
= 1;
1351 enable_irq(gpio_irq
);
1352 out_8(&via1
[IER
], CB1_INT
| IER_SET
);
1353 spin_unlock_irqrestore(&pmu_lock
, flags
);
1357 /* Interrupt data could be the result data from an ADB cmd */
1359 pmu_handle_data(unsigned char *data
, int len
)
1366 if (drop_interrupts
|| len
< 1) {
1367 adb_int_pending
= 0;
1372 /* Get PMU interrupt mask */
1375 /* Record zero interrupts for stats */
1379 /* Hack to deal with ADB autopoll flag */
1380 if (ints
& PMU_INT_ADB
)
1381 ints
&= ~(PMU_INT_ADB_AUTO
| PMU_INT_AUTO_SRQ_POLL
);
1385 if (i
> pmu_irq_stats
[10])
1386 pmu_irq_stats
[10] = i
;
1391 idx
= ffs(ints
) - 1;
1394 pmu_irq_stats
[idx
]++;
1396 /* Note: for some reason, we get an interrupt with len=1,
1397 * data[0]==0 after each normal ADB interrupt, at least
1398 * on the Pismo. Still investigating... --BenH
1402 if ((data
[0] & PMU_INT_ADB_AUTO
) == 0) {
1403 struct adb_request
*req
= req_awaiting_reply
;
1405 printk(KERN_ERR
"PMU: extra ADB reply\n");
1408 req_awaiting_reply
= NULL
;
1412 memcpy(req
->reply
, data
+ 1, len
- 1);
1413 req
->reply_len
= len
- 1;
1418 if (len
== 4 && data
[1] == 0x2c) {
1419 extern int xmon_wants_key
, xmon_adb_keycode
;
1420 if (xmon_wants_key
) {
1421 xmon_adb_keycode
= data
[2];
1425 #endif /* CONFIG_XMON */
1428 * XXX On the [23]400 the PMU gives us an up
1429 * event for keycodes 0x74 or 0x75 when the PC
1430 * card eject buttons are released, so we
1431 * ignore those events.
1433 if (!(pmu_kind
== PMU_OHARE_BASED
&& len
== 4
1434 && data
[1] == 0x2c && data
[3] == 0xff
1435 && (data
[2] & ~1) == 0xf4))
1436 adb_input(data
+1, len
-1, 1);
1437 #endif /* CONFIG_ADB */
1441 /* Sound/brightness button pressed */
1442 case PMU_INT_SNDBRT
:
1443 #ifdef CONFIG_PMAC_BACKLIGHT
1445 pmac_backlight_set_legacy_brightness_pmu(data
[1] >> 4);
1449 /* Tick interrupt */
1451 /* Environment or tick interrupt, query batteries */
1452 if (pmu_battery_count
) {
1453 if ((--query_batt_timer
) == 0) {
1454 query_battery_state();
1455 query_batt_timer
= BATTERY_POLLING_COUNT
;
1460 case PMU_INT_ENVIRONMENT
:
1461 if (pmu_battery_count
)
1462 query_battery_state();
1463 pmu_pass_intr(data
, len
);
1464 /* len == 6 is probably a bad check. But how do I
1465 * know what PMU versions send what events here? */
1467 via_pmu_event(PMU_EVT_POWER
, !!(data
[1]&8));
1468 via_pmu_event(PMU_EVT_LID
, data
[1]&1);
1473 pmu_pass_intr(data
, len
);
1478 static struct adb_request
*
1481 struct adb_request
*req
;
1484 if (in_8(&via2
[B
]) & TREQ
) {
1485 printk(KERN_ERR
"PMU: spurious SR intr (%x)\n", in_8(&via2
[B
]));
1488 /* The ack may not yet be low when we get the interrupt */
1489 while ((in_8(&via2
[B
]) & TACK
) != 0)
1492 /* if reading grab the byte, and reset the interrupt */
1493 if (pmu_state
== reading
|| pmu_state
== reading_intr
)
1494 bite
= in_8(&via1
[SR
]);
1496 /* reset TREQ and wait for TACK to go high */
1497 out_8(&via2
[B
], in_8(&via2
[B
]) | TREQ
);
1500 switch (pmu_state
) {
1504 data_len
= req
->nbytes
- 1;
1505 send_byte(data_len
);
1508 if (data_index
<= data_len
) {
1509 send_byte(req
->data
[data_index
++]);
1513 data_len
= pmu_data_len
[req
->data
[0]][1];
1514 if (data_len
== 0) {
1516 current_req
= req
->next
;
1517 if (req
->reply_expected
)
1518 req_awaiting_reply
= req
;
1522 pmu_state
= reading
;
1524 reply_ptr
= req
->reply
+ req
->reply_len
;
1532 pmu_state
= reading_intr
;
1533 reply_ptr
= interrupt_data
[int_data_last
];
1535 if (gpio_irq
>= 0 && !gpio_irq_enabled
) {
1536 enable_irq(gpio_irq
);
1537 gpio_irq_enabled
= 1;
1543 if (data_len
== -1) {
1546 printk(KERN_ERR
"PMU: bad reply len %d\n", bite
);
1547 } else if (data_index
< 32) {
1548 reply_ptr
[data_index
++] = bite
;
1550 if (data_index
< data_len
) {
1555 if (pmu_state
== reading_intr
) {
1557 int_data_state
[int_data_last
] = int_data_ready
;
1558 interrupt_data_len
[int_data_last
] = data_len
;
1562 * For PMU sleep and freq change requests, we lock the
1563 * PMU until it's explicitly unlocked. This avoids any
1564 * spurrious event polling getting in
1566 current_req
= req
->next
;
1567 req
->reply_len
+= data_index
;
1568 if (req
->data
[0] == PMU_SLEEP
|| req
->data
[0] == PMU_CPU_SPEED
)
1577 printk(KERN_ERR
"via_pmu_interrupt: unknown state %d?\n",
1584 via_pmu_interrupt(int irq
, void *arg
)
1586 unsigned long flags
;
1590 struct adb_request
*req
= NULL
;
1593 /* This is a bit brutal, we can probably do better */
1594 spin_lock_irqsave(&pmu_lock
, flags
);
1598 /* On 68k Macs, VIA interrupts are dispatched individually.
1599 * Unless we are polling, the relevant IRQ flag has already
1603 if (IS_ENABLED(CONFIG_PPC_PMAC
) || !irq
) {
1604 intr
= in_8(&via1
[IFR
]) & (SR_INT
| CB1_INT
);
1605 out_8(&via1
[IFR
], intr
);
1607 #ifndef CONFIG_PPC_PMAC
1609 case IRQ_MAC_ADB_CL
:
1612 case IRQ_MAC_ADB_SR
:
1620 if (++nloop
> 1000) {
1621 printk(KERN_DEBUG
"PMU: stuck in intr loop, "
1622 "intr=%x, ier=%x pmu_state=%d\n",
1623 intr
, in_8(&via1
[IER
]), pmu_state
);
1626 if (intr
& CB1_INT
) {
1627 adb_int_pending
= 1;
1628 pmu_irq_stats
[11]++;
1630 if (intr
& SR_INT
) {
1631 req
= pmu_sr_intr();
1635 #ifndef CONFIG_PPC_PMAC
1641 if (pmu_state
== idle
) {
1642 if (adb_int_pending
) {
1643 if (int_data_state
[0] == int_data_empty
)
1645 else if (int_data_state
[1] == int_data_empty
)
1650 int_data_state
[int_data_last
] = int_data_fill
;
1651 /* Sounds safer to make sure ACK is high before writing.
1652 * This helped kill a problem with ADB and some iBooks
1655 send_byte(PMU_INT_ACK
);
1656 adb_int_pending
= 0;
1657 } else if (current_req
)
1661 /* Mark the oldest buffer for flushing */
1662 if (int_data_state
[!int_data_last
] == int_data_ready
) {
1663 int_data_state
[!int_data_last
] = int_data_flush
;
1664 int_data
= !int_data_last
;
1665 } else if (int_data_state
[int_data_last
] == int_data_ready
) {
1666 int_data_state
[int_data_last
] = int_data_flush
;
1667 int_data
= int_data_last
;
1670 spin_unlock_irqrestore(&pmu_lock
, flags
);
1672 /* Deal with completed PMU requests outside of the lock */
1678 /* Deal with interrupt datas outside of the lock */
1679 if (int_data
>= 0) {
1680 pmu_handle_data(interrupt_data
[int_data
], interrupt_data_len
[int_data
]);
1681 spin_lock_irqsave(&pmu_lock
, flags
);
1683 int_data_state
[int_data
] = int_data_empty
;
1688 return IRQ_RETVAL(handled
);
1694 unsigned long flags
;
1696 spin_lock_irqsave(&pmu_lock
, flags
);
1697 if (pmu_state
== locked
)
1699 adb_int_pending
= 1;
1700 spin_unlock_irqrestore(&pmu_lock
, flags
);
1704 static __maybe_unused irqreturn_t
1705 gpio1_interrupt(int irq
, void *arg
)
1707 unsigned long flags
;
1709 if ((in_8(gpio_reg
+ 0x9) & 0x02) == 0) {
1710 spin_lock_irqsave(&pmu_lock
, flags
);
1711 if (gpio_irq_enabled
> 0) {
1712 disable_irq_nosync(gpio_irq
);
1713 gpio_irq_enabled
= 0;
1715 pmu_irq_stats
[12]++;
1716 adb_int_pending
= 1;
1717 spin_unlock_irqrestore(&pmu_lock
, flags
);
1718 via_pmu_interrupt(0, NULL
);
1725 pmu_enable_irled(int on
)
1727 struct adb_request req
;
1729 if (pmu_state
== uninitialized
)
1731 if (pmu_kind
== PMU_KEYLARGO_BASED
)
1734 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL
, PMU_POW_IRLED
|
1735 (on
? PMU_POW_ON
: PMU_POW_OFF
));
1736 pmu_wait_complete(&req
);
1739 /* Offset between Unix time (1970-based) and Mac time (1904-based) */
1740 #define RTC_OFFSET 2082844800
1742 time64_t
pmu_get_time(void)
1744 struct adb_request req
;
1747 if (pmu_request(&req
, NULL
, 1, PMU_READ_RTC
) < 0)
1749 pmu_wait_complete(&req
);
1750 if (req
.reply_len
!= 4)
1751 pr_err("%s: got %d byte reply\n", __func__
, req
.reply_len
);
1752 now
= (req
.reply
[0] << 24) + (req
.reply
[1] << 16) +
1753 (req
.reply
[2] << 8) + req
.reply
[3];
1754 return (time64_t
)now
- RTC_OFFSET
;
1757 int pmu_set_rtc_time(struct rtc_time
*tm
)
1760 struct adb_request req
;
1762 now
= lower_32_bits(rtc_tm_to_time64(tm
) + RTC_OFFSET
);
1763 if (pmu_request(&req
, NULL
, 5, PMU_SET_RTC
,
1764 now
>> 24, now
>> 16, now
>> 8, now
) < 0)
1766 pmu_wait_complete(&req
);
1767 if (req
.reply_len
!= 0)
1768 pr_err("%s: got %d byte reply\n", __func__
, req
.reply_len
);
1775 struct adb_request req
;
1777 if (pmu_state
== uninitialized
)
1780 local_irq_disable();
1782 drop_interrupts
= 1;
1784 if (pmu_kind
!= PMU_KEYLARGO_BASED
) {
1785 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, PMU_INT_ADB
|
1787 while(!req
.complete
)
1791 pmu_request(&req
, NULL
, 1, PMU_RESET
);
1792 pmu_wait_complete(&req
);
1800 struct adb_request req
;
1802 if (pmu_state
== uninitialized
)
1805 local_irq_disable();
1807 drop_interrupts
= 1;
1809 if (pmu_kind
!= PMU_KEYLARGO_BASED
) {
1810 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, PMU_INT_ADB
|
1812 pmu_wait_complete(&req
);
1814 /* Disable server mode on shutdown or we'll just
1817 pmu_set_server_mode(0);
1820 pmu_request(&req
, NULL
, 5, PMU_SHUTDOWN
,
1821 'M', 'A', 'T', 'T');
1822 pmu_wait_complete(&req
);
1830 return pmu_state
!= uninitialized
;
1833 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
1835 * Put the powerbook to sleep.
1838 static u32 save_via
[8];
1841 save_via_state(void)
1843 save_via
[0] = in_8(&via1
[ANH
]);
1844 save_via
[1] = in_8(&via1
[DIRA
]);
1845 save_via
[2] = in_8(&via1
[B
]);
1846 save_via
[3] = in_8(&via1
[DIRB
]);
1847 save_via
[4] = in_8(&via1
[PCR
]);
1848 save_via
[5] = in_8(&via1
[ACR
]);
1849 save_via
[6] = in_8(&via1
[T1CL
]);
1850 save_via
[7] = in_8(&via1
[T1CH
]);
1853 restore_via_state(void)
1855 out_8(&via1
[ANH
], save_via
[0]);
1856 out_8(&via1
[DIRA
], save_via
[1]);
1857 out_8(&via1
[B
], save_via
[2]);
1858 out_8(&via1
[DIRB
], save_via
[3]);
1859 out_8(&via1
[PCR
], save_via
[4]);
1860 out_8(&via1
[ACR
], save_via
[5]);
1861 out_8(&via1
[T1CL
], save_via
[6]);
1862 out_8(&via1
[T1CH
], save_via
[7]);
1863 out_8(&via1
[IER
], IER_CLR
| 0x7f); /* disable all intrs */
1864 out_8(&via1
[IFR
], 0x7f); /* clear IFR */
1865 out_8(&via1
[IER
], IER_SET
| SR_INT
| CB1_INT
);
1868 #define GRACKLE_PM (1<<7)
1869 #define GRACKLE_DOZE (1<<5)
1870 #define GRACKLE_NAP (1<<4)
1871 #define GRACKLE_SLEEP (1<<3)
1873 static int powerbook_sleep_grackle(void)
1875 unsigned long save_l2cr
;
1876 unsigned short pmcr1
;
1877 struct adb_request req
;
1878 struct pci_dev
*grackle
;
1880 grackle
= pci_get_domain_bus_and_slot(0, 0, 0);
1884 /* Turn off various things. Darwin does some retry tests here... */
1885 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL0
, PMU_POW0_OFF
|PMU_POW0_HARD_DRIVE
);
1886 pmu_wait_complete(&req
);
1887 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL
,
1888 PMU_POW_OFF
|PMU_POW_BACKLIGHT
|PMU_POW_IRLED
|PMU_POW_MEDIABAY
);
1889 pmu_wait_complete(&req
);
1891 /* For 750, save backside cache setting and disable it */
1892 save_l2cr
= _get_L2CR(); /* (returns -1 if not available) */
1894 if (!__fake_sleep
) {
1895 /* Ask the PMU to put us to sleep */
1896 pmu_request(&req
, NULL
, 5, PMU_SLEEP
, 'M', 'A', 'T', 'T');
1897 pmu_wait_complete(&req
);
1900 /* The VIA is supposed not to be restored correctly*/
1902 /* We shut down some HW */
1903 pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,1);
1905 pci_read_config_word(grackle
, 0x70, &pmcr1
);
1906 /* Apparently, MacOS uses NAP mode for Grackle ??? */
1907 pmcr1
&= ~(GRACKLE_DOZE
|GRACKLE_SLEEP
);
1908 pmcr1
|= GRACKLE_PM
|GRACKLE_NAP
;
1909 pci_write_config_word(grackle
, 0x70, pmcr1
);
1911 /* Call low-level ASM sleep handler */
1915 low_sleep_handler();
1917 /* We're awake again, stop grackle PM */
1918 pci_read_config_word(grackle
, 0x70, &pmcr1
);
1919 pmcr1
&= ~(GRACKLE_PM
|GRACKLE_DOZE
|GRACKLE_SLEEP
|GRACKLE_NAP
);
1920 pci_write_config_word(grackle
, 0x70, pmcr1
);
1922 pci_dev_put(grackle
);
1924 /* Make sure the PMU is idle */
1925 pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,0);
1926 restore_via_state();
1928 /* Restore L2 cache */
1929 if (save_l2cr
!= 0xffffffff && (save_l2cr
& L2CR_L2E
) != 0)
1930 _set_L2CR(save_l2cr
);
1932 /* Restore userland MMU context */
1933 switch_mmu_context(NULL
, current
->active_mm
, NULL
);
1935 /* Power things up */
1937 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, pmu_intr_mask
);
1938 pmu_wait_complete(&req
);
1939 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL0
,
1940 PMU_POW0_ON
|PMU_POW0_HARD_DRIVE
);
1941 pmu_wait_complete(&req
);
1942 pmu_request(&req
, NULL
, 2, PMU_POWER_CTRL
,
1943 PMU_POW_ON
|PMU_POW_BACKLIGHT
|PMU_POW_CHARGER
|PMU_POW_IRLED
|PMU_POW_MEDIABAY
);
1944 pmu_wait_complete(&req
);
1950 powerbook_sleep_Core99(void)
1952 unsigned long save_l2cr
;
1953 unsigned long save_l3cr
;
1954 struct adb_request req
;
1956 if (pmac_call_feature(PMAC_FTR_SLEEP_STATE
,NULL
,0,-1) < 0) {
1957 printk(KERN_ERR
"Sleep mode not supported on this machine\n");
1961 if (num_online_cpus() > 1 || cpu_is_offline(0))
1964 /* Stop environment and ADB interrupts */
1965 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, 0);
1966 pmu_wait_complete(&req
);
1968 /* Tell PMU what events will wake us up */
1969 pmu_request(&req
, NULL
, 4, PMU_POWER_EVENTS
, PMU_PWR_CLR_WAKEUP_EVENTS
,
1971 pmu_wait_complete(&req
);
1972 pmu_request(&req
, NULL
, 4, PMU_POWER_EVENTS
, PMU_PWR_SET_WAKEUP_EVENTS
,
1973 0, PMU_PWR_WAKEUP_KEY
|
1974 (option_lid_wakeup
? PMU_PWR_WAKEUP_LID_OPEN
: 0));
1975 pmu_wait_complete(&req
);
1977 /* Save the state of the L2 and L3 caches */
1978 save_l3cr
= _get_L3CR(); /* (returns -1 if not available) */
1979 save_l2cr
= _get_L2CR(); /* (returns -1 if not available) */
1981 if (!__fake_sleep
) {
1982 /* Ask the PMU to put us to sleep */
1983 pmu_request(&req
, NULL
, 5, PMU_SLEEP
, 'M', 'A', 'T', 'T');
1984 pmu_wait_complete(&req
);
1987 /* The VIA is supposed not to be restored correctly*/
1990 /* Shut down various ASICs. There's a chance that we can no longer
1991 * talk to the PMU after this, so I moved it to _after_ sending the
1992 * sleep command to it. Still need to be checked.
1994 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 1);
1996 /* Call low-level ASM sleep handler */
2000 low_sleep_handler();
2002 /* Restore Apple core ASICs state */
2003 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 0);
2006 restore_via_state();
2008 /* tweak LPJ before cpufreq is there */
2009 loops_per_jiffy
*= 2;
2012 pmac_call_early_video_resume();
2014 /* Restore L2 cache */
2015 if (save_l2cr
!= 0xffffffff && (save_l2cr
& L2CR_L2E
) != 0)
2016 _set_L2CR(save_l2cr
);
2017 /* Restore L3 cache */
2018 if (save_l3cr
!= 0xffffffff && (save_l3cr
& L3CR_L3E
) != 0)
2019 _set_L3CR(save_l3cr
);
2021 /* Restore userland MMU context */
2022 switch_mmu_context(NULL
, current
->active_mm
, NULL
);
2024 /* Tell PMU we are ready */
2026 pmu_request(&req
, NULL
, 2, PMU_SYSTEM_READY
, 2);
2027 pmu_wait_complete(&req
);
2028 pmu_request(&req
, NULL
, 2, PMU_SET_INTR_MASK
, pmu_intr_mask
);
2029 pmu_wait_complete(&req
);
2031 /* Restore LPJ, cpufreq will adjust the cpu frequency */
2032 loops_per_jiffy
/= 2;
2037 #define PB3400_MEM_CTRL 0xf8000000
2038 #define PB3400_MEM_CTRL_SLEEP 0x70
2040 static void __iomem
*pb3400_mem_ctrl
;
2042 static void powerbook_sleep_init_3400(void)
2044 /* map in the memory controller registers */
2045 pb3400_mem_ctrl
= ioremap(PB3400_MEM_CTRL
, 0x100);
2046 if (pb3400_mem_ctrl
== NULL
)
2047 printk(KERN_WARNING
"ioremap failed: sleep won't be possible");
2050 static int powerbook_sleep_3400(void)
2055 struct adb_request sleep_req
;
2056 unsigned int __iomem
*mem_ctrl_sleep
;
2058 if (pb3400_mem_ctrl
== NULL
)
2060 mem_ctrl_sleep
= pb3400_mem_ctrl
+ PB3400_MEM_CTRL_SLEEP
;
2062 /* Set the memory controller to keep the memory refreshed
2063 while we're asleep */
2064 for (i
= 0x403f; i
>= 0x4000; --i
) {
2065 out_be32(mem_ctrl_sleep
, i
);
2067 x
= (in_be32(mem_ctrl_sleep
) >> 16) & 0x3ff;
2073 /* Ask the PMU to put us to sleep */
2074 pmu_request(&sleep_req
, NULL
, 5, PMU_SLEEP
, 'M', 'A', 'T', 'T');
2075 pmu_wait_complete(&sleep_req
);
2078 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 1);
2082 /* Put the CPU into sleep mode */
2083 hid0
= mfspr(SPRN_HID0
);
2084 hid0
= (hid0
& ~(HID0_NAP
| HID0_DOZE
)) | HID0_SLEEP
;
2085 mtspr(SPRN_HID0
, hid0
);
2087 msr
= mfmsr() | MSR_POW
;
2093 local_irq_disable();
2095 /* OK, we're awake again, start restoring things */
2096 out_be32(mem_ctrl_sleep
, 0x3f);
2097 pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, 0);
2102 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
2105 * Support for /dev/pmu device
2107 #define RB_SIZE 0x10
2108 struct pmu_private
{
2109 struct list_head list
;
2114 unsigned char data
[16];
2116 wait_queue_head_t wait
;
2118 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
2119 int backlight_locker
;
2123 static LIST_HEAD(all_pmu_pvt
);
2124 static DEFINE_SPINLOCK(all_pvt_lock
);
2127 pmu_pass_intr(unsigned char *data
, int len
)
2129 struct pmu_private
*pp
;
2130 struct list_head
*list
;
2132 unsigned long flags
;
2134 if (len
> sizeof(pp
->rb_buf
[0].data
))
2135 len
= sizeof(pp
->rb_buf
[0].data
);
2136 spin_lock_irqsave(&all_pvt_lock
, flags
);
2137 for (list
= &all_pmu_pvt
; (list
= list
->next
) != &all_pmu_pvt
; ) {
2138 pp
= list_entry(list
, struct pmu_private
, list
);
2139 spin_lock(&pp
->lock
);
2143 if (i
!= pp
->rb_get
) {
2144 struct rb_entry
*rp
= &pp
->rb_buf
[pp
->rb_put
];
2146 memcpy(rp
->data
, data
, len
);
2148 wake_up_interruptible(&pp
->wait
);
2150 spin_unlock(&pp
->lock
);
2152 spin_unlock_irqrestore(&all_pvt_lock
, flags
);
2156 pmu_open(struct inode
*inode
, struct file
*file
)
2158 struct pmu_private
*pp
;
2159 unsigned long flags
;
2161 pp
= kmalloc(sizeof(struct pmu_private
), GFP_KERNEL
);
2164 pp
->rb_get
= pp
->rb_put
= 0;
2165 spin_lock_init(&pp
->lock
);
2166 init_waitqueue_head(&pp
->wait
);
2167 mutex_lock(&pmu_info_proc_mutex
);
2168 spin_lock_irqsave(&all_pvt_lock
, flags
);
2169 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
2170 pp
->backlight_locker
= 0;
2172 list_add(&pp
->list
, &all_pmu_pvt
);
2173 spin_unlock_irqrestore(&all_pvt_lock
, flags
);
2174 file
->private_data
= pp
;
2175 mutex_unlock(&pmu_info_proc_mutex
);
2180 pmu_read(struct file
*file
, char __user
*buf
,
2181 size_t count
, loff_t
*ppos
)
2183 struct pmu_private
*pp
= file
->private_data
;
2184 DECLARE_WAITQUEUE(wait
, current
);
2185 unsigned long flags
;
2188 if (count
< 1 || !pp
)
2190 if (!access_ok(buf
, count
))
2193 spin_lock_irqsave(&pp
->lock
, flags
);
2194 add_wait_queue(&pp
->wait
, &wait
);
2195 set_current_state(TASK_INTERRUPTIBLE
);
2199 if (pp
->rb_get
!= pp
->rb_put
) {
2201 struct rb_entry
*rp
= &pp
->rb_buf
[i
];
2203 spin_unlock_irqrestore(&pp
->lock
, flags
);
2206 if (ret
> 0 && copy_to_user(buf
, rp
->data
, ret
))
2210 spin_lock_irqsave(&pp
->lock
, flags
);
2215 if (file
->f_flags
& O_NONBLOCK
)
2218 if (signal_pending(current
))
2220 spin_unlock_irqrestore(&pp
->lock
, flags
);
2222 spin_lock_irqsave(&pp
->lock
, flags
);
2224 __set_current_state(TASK_RUNNING
);
2225 remove_wait_queue(&pp
->wait
, &wait
);
2226 spin_unlock_irqrestore(&pp
->lock
, flags
);
2232 pmu_write(struct file
*file
, const char __user
*buf
,
2233 size_t count
, loff_t
*ppos
)
2239 pmu_fpoll(struct file
*filp
, poll_table
*wait
)
2241 struct pmu_private
*pp
= filp
->private_data
;
2243 unsigned long flags
;
2247 poll_wait(filp
, &pp
->wait
, wait
);
2248 spin_lock_irqsave(&pp
->lock
, flags
);
2249 if (pp
->rb_get
!= pp
->rb_put
)
2251 spin_unlock_irqrestore(&pp
->lock
, flags
);
2256 pmu_release(struct inode
*inode
, struct file
*file
)
2258 struct pmu_private
*pp
= file
->private_data
;
2259 unsigned long flags
;
2262 file
->private_data
= NULL
;
2263 spin_lock_irqsave(&all_pvt_lock
, flags
);
2264 list_del(&pp
->list
);
2265 spin_unlock_irqrestore(&all_pvt_lock
, flags
);
2267 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
2268 if (pp
->backlight_locker
)
2269 pmac_backlight_enable();
2277 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
2278 static void pmac_suspend_disable_irqs(void)
2280 /* Call platform functions marked "on sleep" */
2281 pmac_pfunc_i2c_suspend();
2282 pmac_pfunc_base_suspend();
2285 static int powerbook_sleep(suspend_state_t state
)
2289 /* Wait for completion of async requests */
2290 while (!batt_req
.complete
)
2293 /* Giveup the lazy FPU & vec so we don't have to back them
2294 * up from the low level code
2298 #ifdef CONFIG_ALTIVEC
2299 if (cpu_has_feature(CPU_FTR_ALTIVEC
))
2300 enable_kernel_altivec();
2301 #endif /* CONFIG_ALTIVEC */
2304 case PMU_OHARE_BASED
:
2305 error
= powerbook_sleep_3400();
2307 case PMU_HEATHROW_BASED
:
2308 case PMU_PADDINGTON_BASED
:
2309 error
= powerbook_sleep_grackle();
2311 case PMU_KEYLARGO_BASED
:
2312 error
= powerbook_sleep_Core99();
2326 static void pmac_suspend_enable_irqs(void)
2328 /* Force a poll of ADB interrupts */
2329 adb_int_pending
= 1;
2330 via_pmu_interrupt(0, NULL
);
2334 /* Call platform functions marked "on wake" */
2335 pmac_pfunc_base_resume();
2336 pmac_pfunc_i2c_resume();
2339 static int pmu_sleep_valid(suspend_state_t state
)
2341 return state
== PM_SUSPEND_MEM
2342 && (pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, -1) >= 0);
2345 static const struct platform_suspend_ops pmu_pm_ops
= {
2346 .enter
= powerbook_sleep
,
2347 .valid
= pmu_sleep_valid
,
2350 static int register_pmu_pm_ops(void)
2352 if (pmu_kind
== PMU_OHARE_BASED
)
2353 powerbook_sleep_init_3400();
2354 ppc_md
.suspend_disable_irqs
= pmac_suspend_disable_irqs
;
2355 ppc_md
.suspend_enable_irqs
= pmac_suspend_enable_irqs
;
2356 suspend_set_ops(&pmu_pm_ops
);
2361 device_initcall(register_pmu_pm_ops
);
2364 static int pmu_ioctl(struct file
*filp
,
2365 u_int cmd
, u_long arg
)
2367 __u32 __user
*argp
= (__u32 __user
*)arg
;
2368 int error
= -EINVAL
;
2371 #ifdef CONFIG_PPC_PMAC
2373 if (!capable(CAP_SYS_ADMIN
))
2375 return pm_suspend(PM_SUSPEND_MEM
);
2376 case PMU_IOC_CAN_SLEEP
:
2377 if (pmac_call_feature(PMAC_FTR_SLEEP_STATE
, NULL
, 0, -1) < 0)
2378 return put_user(0, argp
);
2380 return put_user(1, argp
);
2383 #ifdef CONFIG_PMAC_BACKLIGHT_LEGACY
2384 /* Compatibility ioctl's for backlight */
2385 case PMU_IOC_GET_BACKLIGHT
:
2389 brightness
= pmac_backlight_get_legacy_brightness();
2393 return put_user(brightness
, argp
);
2396 case PMU_IOC_SET_BACKLIGHT
:
2400 error
= get_user(brightness
, argp
);
2404 return pmac_backlight_set_legacy_brightness(brightness
);
2406 #ifdef CONFIG_INPUT_ADBHID
2407 case PMU_IOC_GRAB_BACKLIGHT
: {
2408 struct pmu_private
*pp
= filp
->private_data
;
2410 if (pp
->backlight_locker
)
2413 pp
->backlight_locker
= 1;
2414 pmac_backlight_disable();
2418 #endif /* CONFIG_INPUT_ADBHID */
2419 #endif /* CONFIG_PMAC_BACKLIGHT_LEGACY */
2421 case PMU_IOC_GET_MODEL
:
2422 return put_user(pmu_kind
, argp
);
2423 case PMU_IOC_HAS_ADB
:
2424 return put_user(pmu_has_adb
, argp
);
2429 static long pmu_unlocked_ioctl(struct file
*filp
,
2430 u_int cmd
, u_long arg
)
2434 mutex_lock(&pmu_info_proc_mutex
);
2435 ret
= pmu_ioctl(filp
, cmd
, arg
);
2436 mutex_unlock(&pmu_info_proc_mutex
);
2441 #ifdef CONFIG_COMPAT
2442 #define PMU_IOC_GET_BACKLIGHT32 _IOR('B', 1, compat_size_t)
2443 #define PMU_IOC_SET_BACKLIGHT32 _IOW('B', 2, compat_size_t)
2444 #define PMU_IOC_GET_MODEL32 _IOR('B', 3, compat_size_t)
2445 #define PMU_IOC_HAS_ADB32 _IOR('B', 4, compat_size_t)
2446 #define PMU_IOC_CAN_SLEEP32 _IOR('B', 5, compat_size_t)
2447 #define PMU_IOC_GRAB_BACKLIGHT32 _IOR('B', 6, compat_size_t)
2449 static long compat_pmu_ioctl (struct file
*filp
, u_int cmd
, u_long arg
)
2454 case PMU_IOC_GET_BACKLIGHT32
:
2455 cmd
= PMU_IOC_GET_BACKLIGHT
;
2457 case PMU_IOC_SET_BACKLIGHT32
:
2458 cmd
= PMU_IOC_SET_BACKLIGHT
;
2460 case PMU_IOC_GET_MODEL32
:
2461 cmd
= PMU_IOC_GET_MODEL
;
2463 case PMU_IOC_HAS_ADB32
:
2464 cmd
= PMU_IOC_HAS_ADB
;
2466 case PMU_IOC_CAN_SLEEP32
:
2467 cmd
= PMU_IOC_CAN_SLEEP
;
2469 case PMU_IOC_GRAB_BACKLIGHT32
:
2470 cmd
= PMU_IOC_GRAB_BACKLIGHT
;
2473 return -ENOIOCTLCMD
;
2475 return pmu_unlocked_ioctl(filp
, cmd
, (unsigned long)compat_ptr(arg
));
2479 static const struct file_operations pmu_device_fops
= {
2483 .unlocked_ioctl
= pmu_unlocked_ioctl
,
2484 #ifdef CONFIG_COMPAT
2485 .compat_ioctl
= compat_pmu_ioctl
,
2488 .release
= pmu_release
,
2489 .llseek
= noop_llseek
,
2492 static struct miscdevice pmu_device
= {
2493 PMU_MINOR
, "pmu", &pmu_device_fops
2496 static int pmu_device_init(void)
2498 if (pmu_state
== uninitialized
)
2500 if (misc_register(&pmu_device
) < 0)
2501 printk(KERN_ERR
"via-pmu: cannot register misc device.\n");
2504 device_initcall(pmu_device_init
);
2509 polled_handshake(void)
2511 via2
[B
] &= ~TREQ
; eieio();
2512 while ((via2
[B
] & TACK
) != 0)
2514 via2
[B
] |= TREQ
; eieio();
2515 while ((via2
[B
] & TACK
) == 0)
2520 polled_send_byte(int x
)
2522 via1
[ACR
] |= SR_OUT
| SR_EXT
; eieio();
2523 via1
[SR
] = x
; eieio();
2528 polled_recv_byte(void)
2532 via1
[ACR
] = (via1
[ACR
] & ~SR_OUT
) | SR_EXT
; eieio();
2533 x
= via1
[SR
]; eieio();
2535 x
= via1
[SR
]; eieio();
2540 pmu_polled_request(struct adb_request
*req
)
2542 unsigned long flags
;
2547 l
= pmu_data_len
[c
][0];
2548 if (l
>= 0 && req
->nbytes
!= l
+ 1)
2551 local_irq_save(flags
);
2552 while (pmu_state
!= idle
)
2555 while ((via2
[B
] & TACK
) == 0)
2557 polled_send_byte(c
);
2559 l
= req
->nbytes
- 1;
2560 polled_send_byte(l
);
2562 for (i
= 1; i
<= l
; ++i
)
2563 polled_send_byte(req
->data
[i
]);
2565 l
= pmu_data_len
[c
][1];
2567 l
= polled_recv_byte();
2568 for (i
= 0; i
< l
; ++i
)
2569 req
->reply
[i
+ req
->reply_len
] = polled_recv_byte();
2574 local_irq_restore(flags
);
2578 /* N.B. This doesn't work on the 3400 */
2579 void pmu_blink(int n
)
2581 struct adb_request req
;
2583 memset(&req
, 0, sizeof(req
));
2585 for (; n
> 0; --n
) {
2592 req
.reply
[0] = ADB_RET_OK
;
2594 req
.reply_expected
= 0;
2595 pmu_polled_request(&req
);
2603 req
.reply
[0] = ADB_RET_OK
;
2605 req
.reply_expected
= 0;
2606 pmu_polled_request(&req
);
2611 #endif /* DEBUG_SLEEP */
2613 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
2614 int pmu_sys_suspended
;
2616 static int pmu_syscore_suspend(void)
2618 /* Suspend PMU event interrupts */
2620 pmu_sys_suspended
= 1;
2622 #ifdef CONFIG_PMAC_BACKLIGHT
2623 /* Tell backlight code not to muck around with the chip anymore */
2624 pmu_backlight_set_sleep(1);
2630 static void pmu_syscore_resume(void)
2632 struct adb_request req
;
2634 if (!pmu_sys_suspended
)
2637 /* Tell PMU we are ready */
2638 pmu_request(&req
, NULL
, 2, PMU_SYSTEM_READY
, 2);
2639 pmu_wait_complete(&req
);
2641 #ifdef CONFIG_PMAC_BACKLIGHT
2642 /* Tell backlight code it can use the chip again */
2643 pmu_backlight_set_sleep(0);
2645 /* Resume PMU event interrupts */
2647 pmu_sys_suspended
= 0;
2650 static struct syscore_ops pmu_syscore_ops
= {
2651 .suspend
= pmu_syscore_suspend
,
2652 .resume
= pmu_syscore_resume
,
2655 static int pmu_syscore_register(void)
2657 register_syscore_ops(&pmu_syscore_ops
);
2661 subsys_initcall(pmu_syscore_register
);
2662 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
2664 EXPORT_SYMBOL(pmu_request
);
2665 EXPORT_SYMBOL(pmu_queue_request
);
2666 EXPORT_SYMBOL(pmu_poll
);
2667 EXPORT_SYMBOL(pmu_poll_adb
);
2668 EXPORT_SYMBOL(pmu_wait_complete
);
2669 EXPORT_SYMBOL(pmu_suspend
);
2670 EXPORT_SYMBOL(pmu_resume
);
2671 EXPORT_SYMBOL(pmu_unlock
);
2672 #if defined(CONFIG_PPC32)
2673 EXPORT_SYMBOL(pmu_enable_irled
);
2674 EXPORT_SYMBOL(pmu_battery_count
);
2675 EXPORT_SYMBOL(pmu_batteries
);
2676 EXPORT_SYMBOL(pmu_power_flags
);
2677 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */