2  * Device driver for the via-pmu on Apple Powermacs.
 
   4  * The VIA (versatile interface adapter) interfaces to the PMU,
 
   5  * a 6805 microprocessor core whose primary function is to control
 
   6  * battery charging and system power on the PowerBook 3400 and 2400.
 
   7  * The PMU also controls the ADB (Apple Desktop Bus) which connects
 
   8  * to the keyboard and mouse, as well as the non-volatile RAM
 
   9  * and the RTC (real time clock) chip.
 
  11  * Copyright (C) 1998 Paul Mackerras and Fabio Riccardi.
 
  12  * Copyright (C) 2001-2002 Benjamin Herrenschmidt
 
  13  * Copyright (C) 2006-2007 Johannes Berg
 
  15  * THIS DRIVER IS BECOMING A TOTAL MESS !
 
  16  *  - Cleanup atomically disabling reply to PMU events after
 
  17  *    a sleep or a freq. switch
 
  21 #include <linux/smp_lock.h>
 
  22 #include <linux/types.h>
 
  23 #include <linux/errno.h>
 
  24 #include <linux/kernel.h>
 
  25 #include <linux/delay.h>
 
  26 #include <linux/sched.h>
 
  27 #include <linux/miscdevice.h>
 
  28 #include <linux/blkdev.h>
 
  29 #include <linux/pci.h>
 
  30 #include <linux/slab.h>
 
  31 #include <linux/poll.h>
 
  32 #include <linux/adb.h>
 
  33 #include <linux/pmu.h>
 
  34 #include <linux/cuda.h>
 
  35 #include <linux/module.h>
 
  36 #include <linux/spinlock.h>
 
  38 #include <linux/proc_fs.h>
 
  39 #include <linux/init.h>
 
  40 #include <linux/interrupt.h>
 
  41 #include <linux/device.h>
 
  42 #include <linux/sysdev.h>
 
  43 #include <linux/freezer.h>
 
  44 #include <linux/syscalls.h>
 
  45 #include <linux/suspend.h>
 
  46 #include <linux/cpu.h>
 
  48 #include <asm/machdep.h>
 
  50 #include <asm/pgtable.h>
 
  51 #include <asm/system.h>
 
  52 #include <asm/sections.h>
 
  54 #include <asm/pmac_feature.h>
 
  55 #include <asm/pmac_pfunc.h>
 
  56 #include <asm/pmac_low_i2c.h>
 
  57 #include <asm/uaccess.h>
 
  58 #include <asm/mmu_context.h>
 
  59 #include <asm/cputable.h>
 
  61 #include <asm/backlight.h>
 
  63 #include "via-pmu-event.h"
 
  65 /* Some compile options */
 
  68 /* Misc minor number allocated for /dev/pmu */
 
  71 /* How many iterations between battery polls */
 
  72 #define BATTERY_POLLING_COUNT   2
 
  74 static volatile unsigned char __iomem *via;
 
  76 /* VIA registers - spaced 0x200 bytes apart */
 
  77 #define RS              0x200           /* skip between registers */
 
  78 #define B               0               /* B-side data */
 
  79 #define A               RS              /* A-side data */
 
  80 #define DIRB            (2*RS)          /* B-side direction (1=output) */
 
  81 #define DIRA            (3*RS)          /* A-side direction (1=output) */
 
  82 #define T1CL            (4*RS)          /* Timer 1 ctr/latch (low 8 bits) */
 
  83 #define T1CH            (5*RS)          /* Timer 1 counter (high 8 bits) */
 
  84 #define T1LL            (6*RS)          /* Timer 1 latch (low 8 bits) */
 
  85 #define T1LH            (7*RS)          /* Timer 1 latch (high 8 bits) */
 
  86 #define T2CL            (8*RS)          /* Timer 2 ctr/latch (low 8 bits) */
 
  87 #define T2CH            (9*RS)          /* Timer 2 counter (high 8 bits) */
 
  88 #define SR              (10*RS)         /* Shift register */
 
  89 #define ACR             (11*RS)         /* Auxiliary control register */
 
  90 #define PCR             (12*RS)         /* Peripheral control register */
 
  91 #define IFR             (13*RS)         /* Interrupt flag register */
 
  92 #define IER             (14*RS)         /* Interrupt enable register */
 
  93 #define ANH             (15*RS)         /* A-side data, no handshake */
 
  95 /* Bits in B data register: both active low */
 
  96 #define TACK            0x08            /* Transfer acknowledge (input) */
 
  97 #define TREQ            0x10            /* Transfer request (output) */
 
 100 #define SR_CTRL         0x1c            /* Shift register control bits */
 
 101 #define SR_EXT          0x0c            /* Shift on external clock */
 
 102 #define SR_OUT          0x10            /* Shift out if 1 */
 
 104 /* Bits in IFR and IER */
 
 105 #define IER_SET         0x80            /* set bits in IER */
 
 106 #define IER_CLR         0               /* clear bits in IER */
 
 107 #define SR_INT          0x04            /* Shift register full/empty */
 
 109 #define CB1_INT         0x10            /* transition on CB1 input */
 
 111 static volatile enum pmu_state {
 
 120 static volatile enum int_data_state {
 
 125 } int_data_state[2] = { int_data_empty, int_data_empty };
 
 127 static struct adb_request *current_req;
 
 128 static struct adb_request *last_req;
 
 129 static struct adb_request *req_awaiting_reply;
 
 130 static unsigned char interrupt_data[2][32];
 
 131 static int interrupt_data_len[2];
 
 132 static int int_data_last;
 
 133 static unsigned char *reply_ptr;
 
 134 static int data_index;
 
 136 static volatile int adb_int_pending;
 
 137 static volatile int disable_poll;
 
 138 static struct device_node *vias;
 
 139 static int pmu_kind = PMU_UNKNOWN;
 
 140 static int pmu_fully_inited;
 
 141 static int pmu_has_adb;
 
 142 static struct device_node *gpio_node;
 
 143 static unsigned char __iomem *gpio_reg;
 
 144 static int gpio_irq = NO_IRQ;
 
 145 static int gpio_irq_enabled = -1;
 
 146 static volatile int pmu_suspended;
 
 147 static spinlock_t pmu_lock;
 
 148 static u8 pmu_intr_mask;
 
 149 static int pmu_version;
 
 150 static int drop_interrupts;
 
 151 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
 152 static int option_lid_wakeup = 1;
 
 153 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 
 154 static unsigned long async_req_locks;
 
 155 static unsigned int pmu_irq_stats[11];
 
 157 static struct proc_dir_entry *proc_pmu_root;
 
 158 static struct proc_dir_entry *proc_pmu_info;
 
 159 static struct proc_dir_entry *proc_pmu_irqstats;
 
 160 static struct proc_dir_entry *proc_pmu_options;
 
 161 static int option_server_mode;
 
 163 int pmu_battery_count;
 
 165 unsigned int pmu_power_flags = PMU_PWR_AC_PRESENT;
 
 166 struct pmu_battery_info pmu_batteries[PMU_MAX_BATTERIES];
 
 167 static int query_batt_timer = BATTERY_POLLING_COUNT;
 
 168 static struct adb_request batt_req;
 
 169 static struct proc_dir_entry *proc_pmu_batt[PMU_MAX_BATTERIES];
 
 175 static int adb_dev_map;
 
 176 static int pmu_adb_flags;
 
 178 static int pmu_probe(void);
 
 179 static int pmu_init(void);
 
 180 static int pmu_send_request(struct adb_request *req, int sync);
 
 181 static int pmu_adb_autopoll(int devs);
 
 182 static int pmu_adb_reset_bus(void);
 
 183 #endif /* CONFIG_ADB */
 
 185 static int init_pmu(void);
 
 186 static void pmu_start(void);
 
 187 static irqreturn_t via_pmu_interrupt(int irq, void *arg);
 
 188 static irqreturn_t gpio1_interrupt(int irq, void *arg);
 
 189 static int proc_get_info(char *page, char **start, off_t off,
 
 190                           int count, int *eof, void *data);
 
 191 static int proc_get_irqstats(char *page, char **start, off_t off,
 
 192                           int count, int *eof, void *data);
 
 193 static void pmu_pass_intr(unsigned char *data, int len);
 
 194 static int proc_get_batt(char *page, char **start, off_t off,
 
 195                         int count, int *eof, void *data);
 
 196 static int proc_read_options(char *page, char **start, off_t off,
 
 197                         int count, int *eof, void *data);
 
 198 static int proc_write_options(struct file *file, const char __user *buffer,
 
 199                         unsigned long count, void *data);
 
 202 struct adb_driver via_pmu_driver = {
 
 211 #endif /* CONFIG_ADB */
 
 213 extern void low_sleep_handler(void);
 
 214 extern void enable_kernel_altivec(void);
 
 215 extern void enable_kernel_fp(void);
 
 218 int pmu_polled_request(struct adb_request *req);
 
 219 void pmu_blink(int n);
 
 223  * This table indicates for each PMU opcode:
 
 224  * - the number of data bytes to be sent with the command, or -1
 
 225  *   if a length byte should be sent,
 
 226  * - the number of response bytes which the PMU will return, or
 
 227  *   -1 if it will send a length byte.
 
 229 static const s8 pmu_data_len[256][2] = {
 
 230 /*         0       1       2       3       4       5       6       7  */
 
 231 /*00*/  {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 232 /*08*/  {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 233 /*10*/  { 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 234 /*18*/  { 0, 1},{ 0, 1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{ 0, 0},
 
 235 /*20*/  {-1, 0},{ 0, 0},{ 2, 0},{ 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 236 /*28*/  { 0,-1},{ 0,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{ 0,-1},
 
 237 /*30*/  { 4, 0},{20, 0},{-1, 0},{ 3, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 238 /*38*/  { 0, 4},{ 0,20},{ 2,-1},{ 2, 1},{ 3,-1},{-1,-1},{-1,-1},{ 4, 0},
 
 239 /*40*/  { 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 240 /*48*/  { 0, 1},{ 0, 1},{-1,-1},{ 1, 0},{ 1, 0},{-1,-1},{-1,-1},{-1,-1},
 
 241 /*50*/  { 1, 0},{ 0, 0},{ 2, 0},{ 2, 0},{-1, 0},{ 1, 0},{ 3, 0},{ 1, 0},
 
 242 /*58*/  { 0, 1},{ 1, 0},{ 0, 2},{ 0, 2},{ 0,-1},{-1,-1},{-1,-1},{-1,-1},
 
 243 /*60*/  { 2, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 244 /*68*/  { 0, 3},{ 0, 3},{ 0, 2},{ 0, 8},{ 0,-1},{ 0,-1},{-1,-1},{-1,-1},
 
 245 /*70*/  { 1, 0},{ 1, 0},{ 1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 246 /*78*/  { 0,-1},{ 0,-1},{-1,-1},{-1,-1},{-1,-1},{ 5, 1},{ 4, 1},{ 4, 1},
 
 247 /*80*/  { 4, 0},{-1, 0},{ 0, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 248 /*88*/  { 0, 5},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 249 /*90*/  { 1, 0},{ 2, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 250 /*98*/  { 0, 1},{ 0, 1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 251 /*a0*/  { 2, 0},{ 2, 0},{ 2, 0},{ 4, 0},{-1, 0},{ 0, 0},{-1, 0},{-1, 0},
 
 252 /*a8*/  { 1, 1},{ 1, 0},{ 3, 0},{ 2, 0},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 253 /*b0*/  {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 254 /*b8*/  {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 255 /*c0*/  {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 256 /*c8*/  {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 257 /*d0*/  { 0, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 258 /*d8*/  { 1, 1},{ 1, 1},{-1,-1},{-1,-1},{ 0, 1},{ 0,-1},{-1,-1},{-1,-1},
 
 259 /*e0*/  {-1, 0},{ 4, 0},{ 0, 1},{-1, 0},{-1, 0},{ 4, 0},{-1, 0},{-1, 0},
 
 260 /*e8*/  { 3,-1},{-1,-1},{ 0, 1},{-1,-1},{ 0,-1},{-1,-1},{-1,-1},{ 0, 0},
 
 261 /*f0*/  {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
 
 262 /*f8*/  {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
 
 265 static char *pbook_type[] = {
 
 267         "PowerBook 2400/3400/3500(G3)",
 
 268         "PowerBook G3 Series",
 
 273 int __init find_via_pmu(void)
 
 280         vias = of_find_node_by_name(NULL, "via-pmu");
 
 284         reg = of_get_property(vias, "reg", NULL);
 
 286                 printk(KERN_ERR "via-pmu: No \"reg\" property !\n");
 
 289         taddr = of_translate_address(vias, reg);
 
 290         if (taddr == OF_BAD_ADDR) {
 
 291                 printk(KERN_ERR "via-pmu: Can't translate address !\n");
 
 295         spin_lock_init(&pmu_lock);
 
 299         pmu_intr_mask = PMU_INT_PCEJECT |
 
 304         if (vias->parent->name && ((strcmp(vias->parent->name, "ohare") == 0)
 
 305             || of_device_is_compatible(vias->parent, "ohare")))
 
 306                 pmu_kind = PMU_OHARE_BASED;
 
 307         else if (of_device_is_compatible(vias->parent, "paddington"))
 
 308                 pmu_kind = PMU_PADDINGTON_BASED;
 
 309         else if (of_device_is_compatible(vias->parent, "heathrow"))
 
 310                 pmu_kind = PMU_HEATHROW_BASED;
 
 311         else if (of_device_is_compatible(vias->parent, "Keylargo")
 
 312                  || of_device_is_compatible(vias->parent, "K2-Keylargo")) {
 
 313                 struct device_node *gpiop;
 
 314                 struct device_node *adbp;
 
 315                 u64 gaddr = OF_BAD_ADDR;
 
 317                 pmu_kind = PMU_KEYLARGO_BASED;
 
 318                 adbp = of_find_node_by_type(NULL, "adb");
 
 319                 pmu_has_adb = (adbp != NULL);
 
 321                 pmu_intr_mask = PMU_INT_PCEJECT |
 
 327                 gpiop = of_find_node_by_name(NULL, "gpio");
 
 329                         reg = of_get_property(gpiop, "reg", NULL);
 
 331                                 gaddr = of_translate_address(gpiop, reg);
 
 332                         if (gaddr != OF_BAD_ADDR)
 
 333                                 gpio_reg = ioremap(gaddr, 0x10);
 
 335                 if (gpio_reg == NULL) {
 
 336                         printk(KERN_ERR "via-pmu: Can't find GPIO reg !\n");
 
 340                 pmu_kind = PMU_UNKNOWN;
 
 342         via = ioremap(taddr, 0x2000);
 
 344                 printk(KERN_ERR "via-pmu: Can't map address !\n");
 
 348         out_8(&via[IER], IER_CLR | 0x7f);       /* disable all intrs */
 
 349         out_8(&via[IFR], 0x7f);                 /* clear IFR */
 
 358         printk(KERN_INFO "PMU driver v%d initialized for %s, firmware: %02x\n",
 
 359                PMU_DRIVER_VERSION, pbook_type[pmu_kind], pmu_version);
 
 361         sys_ctrler = SYS_CTRLER_PMU;
 
 374 static int pmu_probe(void)
 
 376         return vias == NULL? -ENODEV: 0;
 
 379 static int __init pmu_init(void)
 
 385 #endif /* CONFIG_ADB */
 
 388  * We can't wait until pmu_init gets called, that happens too late.
 
 389  * It happens after IDE and SCSI initialization, which can take a few
 
 390  * seconds, and by that time the PMU could have given up on us and
 
 392  * Thus this is called with arch_initcall rather than device_initcall.
 
 394 static int __init via_pmu_start(void)
 
 401         batt_req.complete = 1;
 
 403         irq = irq_of_parse_and_map(vias, 0);
 
 405                 printk(KERN_ERR "via-pmu: can't map interrupt\n");
 
 408         if (request_irq(irq, via_pmu_interrupt, 0, "VIA-PMU", (void *)0)) {
 
 409                 printk(KERN_ERR "via-pmu: can't request irq %d\n", irq);
 
 413         if (pmu_kind == PMU_KEYLARGO_BASED) {
 
 414                 gpio_node = of_find_node_by_name(NULL, "extint-gpio1");
 
 415                 if (gpio_node == NULL)
 
 416                         gpio_node = of_find_node_by_name(NULL,
 
 419                         gpio_irq = irq_of_parse_and_map(gpio_node, 0);
 
 421                 if (gpio_irq != NO_IRQ) {
 
 422                         if (request_irq(gpio_irq, gpio1_interrupt, 0,
 
 423                                         "GPIO1 ADB", (void *)0))
 
 424                                 printk(KERN_ERR "pmu: can't get irq %d"
 
 425                                        " (GPIO1)\n", gpio_irq);
 
 427                                 gpio_irq_enabled = 1;
 
 431         /* Enable interrupts */
 
 432         out_8(&via[IER], IER_SET | SR_INT | CB1_INT);
 
 434         pmu_fully_inited = 1;
 
 436         /* Make sure PMU settle down before continuing. This is _very_ important
 
 437          * since the IDE probe may shut interrupts down for quite a bit of time. If
 
 438          * a PMU communication is pending while this happens, the PMU may timeout
 
 439          * Not that on Core99 machines, the PMU keeps sending us environement
 
 440          * messages, we should find a way to either fix IDE or make it call
 
 441          * pmu_suspend() before masking interrupts. This can also happens while
 
 442          * scolling with some fbdevs.
 
 446         } while (pmu_state != idle);
 
 451 arch_initcall(via_pmu_start);
 
 454  * This has to be done after pci_init, which is a subsys_initcall.
 
 456 static int __init via_pmu_dev_init(void)
 
 461 #ifdef CONFIG_PMAC_BACKLIGHT
 
 462         /* Initialize backlight */
 
 463         pmu_backlight_init();
 
 467         if (machine_is_compatible("AAPL,3400/2400") ||
 
 468                 machine_is_compatible("AAPL,3500")) {
 
 469                 int mb = pmac_call_feature(PMAC_FTR_GET_MB_INFO,
 
 470                         NULL, PMAC_MB_INFO_MODEL, 0);
 
 471                 pmu_battery_count = 1;
 
 472                 if (mb == PMAC_TYPE_COMET)
 
 473                         pmu_batteries[0].flags |= PMU_BATT_TYPE_COMET;
 
 475                         pmu_batteries[0].flags |= PMU_BATT_TYPE_HOOPER;
 
 476         } else if (machine_is_compatible("AAPL,PowerBook1998") ||
 
 477                 machine_is_compatible("PowerBook1,1")) {
 
 478                 pmu_battery_count = 2;
 
 479                 pmu_batteries[0].flags |= PMU_BATT_TYPE_SMART;
 
 480                 pmu_batteries[1].flags |= PMU_BATT_TYPE_SMART;
 
 482                 struct device_node* prim =
 
 483                         of_find_node_by_name(NULL, "power-mgt");
 
 484                 const u32 *prim_info = NULL;
 
 486                         prim_info = of_get_property(prim, "prim-info", NULL);
 
 488                         /* Other stuffs here yet unknown */
 
 489                         pmu_battery_count = (prim_info[6] >> 16) & 0xff;
 
 490                         pmu_batteries[0].flags |= PMU_BATT_TYPE_SMART;
 
 491                         if (pmu_battery_count > 1)
 
 492                                 pmu_batteries[1].flags |= PMU_BATT_TYPE_SMART;
 
 496 #endif /* CONFIG_PPC32 */
 
 498         /* Create /proc/pmu */
 
 499         proc_pmu_root = proc_mkdir("pmu", NULL);
 
 503                 for (i=0; i<pmu_battery_count; i++) {
 
 505                         sprintf(title, "battery_%ld", i);
 
 506                         proc_pmu_batt[i] = create_proc_read_entry(title, 0, proc_pmu_root,
 
 507                                                 proc_get_batt, (void *)i);
 
 510                 proc_pmu_info = create_proc_read_entry("info", 0, proc_pmu_root,
 
 511                                         proc_get_info, NULL);
 
 512                 proc_pmu_irqstats = create_proc_read_entry("interrupts", 0, proc_pmu_root,
 
 513                                         proc_get_irqstats, NULL);
 
 514                 proc_pmu_options = create_proc_entry("options", 0600, proc_pmu_root);
 
 515                 if (proc_pmu_options) {
 
 516                         proc_pmu_options->read_proc = proc_read_options;
 
 517                         proc_pmu_options->write_proc = proc_write_options;
 
 523 device_initcall(via_pmu_dev_init);
 
 529         struct adb_request req;
 
 531         out_8(&via[B], via[B] | TREQ);                  /* negate TREQ */
 
 532         out_8(&via[DIRB], (via[DIRB] | TREQ) & ~TACK);  /* TACK in, TREQ out */
 
 534         pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask);
 
 536         while (!req.complete) {
 
 538                         printk(KERN_ERR "init_pmu: no response from PMU\n");
 
 545         /* ack all pending interrupts */
 
 547         interrupt_data[0][0] = 1;
 
 548         while (interrupt_data[0][0] || pmu_state != idle) {
 
 550                         printk(KERN_ERR "init_pmu: timed out acking intrs\n");
 
 553                 if (pmu_state == idle)
 
 555                 via_pmu_interrupt(0, NULL);
 
 559         /* Tell PMU we are ready.  */
 
 560         if (pmu_kind == PMU_KEYLARGO_BASED) {
 
 561                 pmu_request(&req, NULL, 2, PMU_SYSTEM_READY, 2);
 
 562                 while (!req.complete)
 
 566         /* Read PMU version */
 
 567         pmu_request(&req, NULL, 1, PMU_GET_VERSION);
 
 568         pmu_wait_complete(&req);
 
 569         if (req.reply_len > 0)
 
 570                 pmu_version = req.reply[0];
 
 572         /* Read server mode setting */
 
 573         if (pmu_kind == PMU_KEYLARGO_BASED) {
 
 574                 pmu_request(&req, NULL, 2, PMU_POWER_EVENTS,
 
 575                             PMU_PWR_GET_POWERUP_EVENTS);
 
 576                 pmu_wait_complete(&req);
 
 577                 if (req.reply_len == 2) {
 
 578                         if (req.reply[1] & PMU_PWR_WAKEUP_AC_INSERT)
 
 579                                 option_server_mode = 1;
 
 580                         printk(KERN_INFO "via-pmu: Server Mode is %s\n",
 
 581                                option_server_mode ? "enabled" : "disabled");
 
 593 static void pmu_set_server_mode(int server_mode)
 
 595         struct adb_request req;
 
 597         if (pmu_kind != PMU_KEYLARGO_BASED)
 
 600         option_server_mode = server_mode;
 
 601         pmu_request(&req, NULL, 2, PMU_POWER_EVENTS, PMU_PWR_GET_POWERUP_EVENTS);
 
 602         pmu_wait_complete(&req);
 
 603         if (req.reply_len < 2)
 
 606                 pmu_request(&req, NULL, 4, PMU_POWER_EVENTS,
 
 607                             PMU_PWR_SET_POWERUP_EVENTS,
 
 608                             req.reply[0], PMU_PWR_WAKEUP_AC_INSERT); 
 
 610                 pmu_request(&req, NULL, 4, PMU_POWER_EVENTS,
 
 611                             PMU_PWR_CLR_POWERUP_EVENTS,
 
 612                             req.reply[0], PMU_PWR_WAKEUP_AC_INSERT); 
 
 613         pmu_wait_complete(&req);
 
 616 /* This new version of the code for 2400/3400/3500 powerbooks
 
 617  * is inspired from the implementation in gkrellm-pmu
 
 620 done_battery_state_ohare(struct adb_request* req)
 
 624          *    0x01 :  AC indicator
 
 626          *    0x04 :  battery exist
 
 629          *    0x20 :  full charged
 
 630          *    0x40 :  pcharge reset
 
 631          *    0x80 :  battery exist
 
 633          *  [1][2] :  battery voltage
 
 634          *  [3]    :  CPU temperature
 
 635          *  [4]    :  battery temperature
 
 640         unsigned int bat_flags = PMU_BATT_TYPE_HOOPER;
 
 641         long pcharge, charge, vb, vmax, lmax;
 
 642         long vmax_charging, vmax_charged;
 
 643         long amperage, voltage, time, max;
 
 644         int mb = pmac_call_feature(PMAC_FTR_GET_MB_INFO,
 
 645                         NULL, PMAC_MB_INFO_MODEL, 0);
 
 647         if (req->reply[0] & 0x01)
 
 648                 pmu_power_flags |= PMU_PWR_AC_PRESENT;
 
 650                 pmu_power_flags &= ~PMU_PWR_AC_PRESENT;
 
 652         if (mb == PMAC_TYPE_COMET) {
 
 663         /* If battery installed */
 
 664         if (req->reply[0] & 0x04) {
 
 665                 bat_flags |= PMU_BATT_PRESENT;
 
 666                 if (req->reply[0] & 0x02)
 
 667                         bat_flags |= PMU_BATT_CHARGING;
 
 668                 vb = (req->reply[1] << 8) | req->reply[2];
 
 669                 voltage = (vb * 265 + 72665) / 10;
 
 670                 amperage = req->reply[5];
 
 671                 if ((req->reply[0] & 0x01) == 0) {
 
 673                                 vb += ((amperage - 200) * 15)/100;
 
 674                 } else if (req->reply[0] & 0x02) {
 
 675                         vb = (vb * 97) / 100;
 
 676                         vmax = vmax_charging;
 
 678                 charge = (100 * vb) / vmax;
 
 679                 if (req->reply[0] & 0x40) {
 
 680                         pcharge = (req->reply[6] << 8) + req->reply[7];
 
 684                         pcharge = 100 - pcharge / lmax;
 
 685                         if (pcharge < charge)
 
 689                         time = (charge * 16440) / amperage;
 
 693                 amperage = -amperage;
 
 695                 charge = max = amperage = voltage = time = 0;
 
 697         pmu_batteries[pmu_cur_battery].flags = bat_flags;
 
 698         pmu_batteries[pmu_cur_battery].charge = charge;
 
 699         pmu_batteries[pmu_cur_battery].max_charge = max;
 
 700         pmu_batteries[pmu_cur_battery].amperage = amperage;
 
 701         pmu_batteries[pmu_cur_battery].voltage = voltage;
 
 702         pmu_batteries[pmu_cur_battery].time_remaining = time;
 
 704         clear_bit(0, &async_req_locks);
 
 708 done_battery_state_smart(struct adb_request* req)
 
 711          *  [0] : format of this structure (known: 3,4,5)
 
 724          *  [4][5] : max charge
 
 729         unsigned int bat_flags = PMU_BATT_TYPE_SMART;
 
 731         unsigned int capa, max, voltage;
 
 733         if (req->reply[1] & 0x01)
 
 734                 pmu_power_flags |= PMU_PWR_AC_PRESENT;
 
 736                 pmu_power_flags &= ~PMU_PWR_AC_PRESENT;
 
 739         capa = max = amperage = voltage = 0;
 
 741         if (req->reply[1] & 0x04) {
 
 742                 bat_flags |= PMU_BATT_PRESENT;
 
 743                 switch(req->reply[0]) {
 
 745                         case 4: capa = req->reply[2];
 
 747                                 amperage = *((signed char *)&req->reply[4]);
 
 748                                 voltage = req->reply[5];
 
 750                         case 5: capa = (req->reply[2] << 8) | req->reply[3];
 
 751                                 max = (req->reply[4] << 8) | req->reply[5];
 
 752                                 amperage = *((signed short *)&req->reply[6]);
 
 753                                 voltage = (req->reply[8] << 8) | req->reply[9];
 
 756                                 printk(KERN_WARNING "pmu.c : unrecognized battery info, len: %d, %02x %02x %02x %02x\n",
 
 757                                         req->reply_len, req->reply[0], req->reply[1], req->reply[2], req->reply[3]);
 
 762         if ((req->reply[1] & 0x01) && (amperage > 0))
 
 763                 bat_flags |= PMU_BATT_CHARGING;
 
 765         pmu_batteries[pmu_cur_battery].flags = bat_flags;
 
 766         pmu_batteries[pmu_cur_battery].charge = capa;
 
 767         pmu_batteries[pmu_cur_battery].max_charge = max;
 
 768         pmu_batteries[pmu_cur_battery].amperage = amperage;
 
 769         pmu_batteries[pmu_cur_battery].voltage = voltage;
 
 771                 if ((req->reply[1] & 0x01) && (amperage > 0))
 
 772                         pmu_batteries[pmu_cur_battery].time_remaining
 
 773                                 = ((max-capa) * 3600) / amperage;
 
 775                         pmu_batteries[pmu_cur_battery].time_remaining
 
 776                                 = (capa * 3600) / (-amperage);
 
 778                 pmu_batteries[pmu_cur_battery].time_remaining = 0;
 
 780         pmu_cur_battery = (pmu_cur_battery + 1) % pmu_battery_count;
 
 782         clear_bit(0, &async_req_locks);
 
 786 query_battery_state(void)
 
 788         if (test_and_set_bit(0, &async_req_locks))
 
 790         if (pmu_kind == PMU_OHARE_BASED)
 
 791                 pmu_request(&batt_req, done_battery_state_ohare,
 
 792                         1, PMU_BATTERY_STATE);
 
 794                 pmu_request(&batt_req, done_battery_state_smart,
 
 795                         2, PMU_SMART_BATTERY_STATE, pmu_cur_battery+1);
 
 799 proc_get_info(char *page, char **start, off_t off,
 
 800                 int count, int *eof, void *data)
 
 804         p += sprintf(p, "PMU driver version     : %d\n", PMU_DRIVER_VERSION);
 
 805         p += sprintf(p, "PMU firmware version   : %02x\n", pmu_version);
 
 806         p += sprintf(p, "AC Power               : %d\n",
 
 807                 ((pmu_power_flags & PMU_PWR_AC_PRESENT) != 0) || pmu_battery_count == 0);
 
 808         p += sprintf(p, "Battery count          : %d\n", pmu_battery_count);
 
 814 proc_get_irqstats(char *page, char **start, off_t off,
 
 815                   int count, int *eof, void *data)
 
 819         static const char *irq_names[] = {
 
 820                 "Total CB1 triggered events",
 
 821                 "Total GPIO1 triggered events",
 
 822                 "PC-Card eject button",
 
 823                 "Sound/Brightness button",
 
 825                 "Battery state change",
 
 826                 "Environment interrupt",
 
 828                 "Ghost interrupt (zero len)",
 
 829                 "Empty interrupt (empty mask)",
 
 833         for (i=0; i<11; i++) {
 
 834                 p += sprintf(p, " %2u: %10u (%s)\n",
 
 835                              i, pmu_irq_stats[i], irq_names[i]);
 
 841 proc_get_batt(char *page, char **start, off_t off,
 
 842                 int count, int *eof, void *data)
 
 844         long batnum = (long)data;
 
 847         p += sprintf(p, "\n");
 
 848         p += sprintf(p, "flags      : %08x\n",
 
 849                 pmu_batteries[batnum].flags);
 
 850         p += sprintf(p, "charge     : %d\n",
 
 851                 pmu_batteries[batnum].charge);
 
 852         p += sprintf(p, "max_charge : %d\n",
 
 853                 pmu_batteries[batnum].max_charge);
 
 854         p += sprintf(p, "current    : %d\n",
 
 855                 pmu_batteries[batnum].amperage);
 
 856         p += sprintf(p, "voltage    : %d\n",
 
 857                 pmu_batteries[batnum].voltage);
 
 858         p += sprintf(p, "time rem.  : %d\n",
 
 859                 pmu_batteries[batnum].time_remaining);
 
 865 proc_read_options(char *page, char **start, off_t off,
 
 866                         int count, int *eof, void *data)
 
 870 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
 871         if (pmu_kind == PMU_KEYLARGO_BASED &&
 
 872             pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0)
 
 873                 p += sprintf(p, "lid_wakeup=%d\n", option_lid_wakeup);
 
 875         if (pmu_kind == PMU_KEYLARGO_BASED)
 
 876                 p += sprintf(p, "server_mode=%d\n", option_server_mode);
 
 882 proc_write_options(struct file *file, const char __user *buffer,
 
 883                         unsigned long count, void *data)
 
 887         unsigned long fcount = count;
 
 893         if (copy_from_user(tmp, buffer, count))
 
 901         while(*val && (*val != '=')) {
 
 911 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
 912         if (pmu_kind == PMU_KEYLARGO_BASED &&
 
 913             pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) >= 0)
 
 914                 if (!strcmp(label, "lid_wakeup"))
 
 915                         option_lid_wakeup = ((*val) == '1');
 
 917         if (pmu_kind == PMU_KEYLARGO_BASED && !strcmp(label, "server_mode")) {
 
 919                 new_value = ((*val) == '1');
 
 920                 if (new_value != option_server_mode)
 
 921                         pmu_set_server_mode(new_value);
 
 927 /* Send an ADB command */
 
 929 pmu_send_request(struct adb_request *req, int sync)
 
 933         if ((vias == NULL) || (!pmu_fully_inited)) {
 
 940         switch (req->data[0]) {
 
 942                 for (i = 0; i < req->nbytes - 1; ++i)
 
 943                         req->data[i] = req->data[i+1];
 
 945                 if (pmu_data_len[req->data[0]][1] != 0) {
 
 946                         req->reply[0] = ADB_RET_OK;
 
 950                 ret = pmu_queue_request(req);
 
 953                 switch (req->data[1]) {
 
 955                         if (req->nbytes != 2)
 
 957                         req->data[0] = PMU_READ_RTC;
 
 960                         req->reply[0] = CUDA_PACKET;
 
 962                         req->reply[2] = CUDA_GET_TIME;
 
 963                         ret = pmu_queue_request(req);
 
 966                         if (req->nbytes != 6)
 
 968                         req->data[0] = PMU_SET_RTC;
 
 970                         for (i = 1; i <= 4; ++i)
 
 971                                 req->data[i] = req->data[i+1];
 
 973                         req->reply[0] = CUDA_PACKET;
 
 975                         req->reply[2] = CUDA_SET_TIME;
 
 976                         ret = pmu_queue_request(req);
 
 983                 for (i = req->nbytes - 1; i > 1; --i)
 
 984                         req->data[i+2] = req->data[i];
 
 985                 req->data[3] = req->nbytes - 2;
 
 986                 req->data[2] = pmu_adb_flags;
 
 987                 /*req->data[1] = req->data[1];*/
 
 988                 req->data[0] = PMU_ADB_CMD;
 
 990                 req->reply_expected = 1;
 
 992                 ret = pmu_queue_request(req);
 
1001                 while (!req->complete)
 
1007 /* Enable/disable autopolling */
 
1009 pmu_adb_autopoll(int devs)
 
1011         struct adb_request req;
 
1013         if ((vias == NULL) || (!pmu_fully_inited) || !pmu_has_adb)
 
1018                 pmu_request(&req, NULL, 5, PMU_ADB_CMD, 0, 0x86,
 
1019                             adb_dev_map >> 8, adb_dev_map);
 
1022                 pmu_request(&req, NULL, 1, PMU_ADB_POLL_OFF);
 
1025         while (!req.complete)
 
1030 /* Reset the ADB bus */
 
1032 pmu_adb_reset_bus(void)
 
1034         struct adb_request req;
 
1035         int save_autopoll = adb_dev_map;
 
1037         if ((vias == NULL) || (!pmu_fully_inited) || !pmu_has_adb)
 
1040         /* anyone got a better idea?? */
 
1041         pmu_adb_autopoll(0);
 
1045         req.data[0] = PMU_ADB_CMD;
 
1047         req.data[2] = ADB_BUSRESET;
 
1051         req.reply_expected = 1;
 
1052         if (pmu_queue_request(&req) != 0) {
 
1053                 printk(KERN_ERR "pmu_adb_reset_bus: pmu_queue_request failed\n");
 
1056         pmu_wait_complete(&req);
 
1058         if (save_autopoll != 0)
 
1059                 pmu_adb_autopoll(save_autopoll);
 
1063 #endif /* CONFIG_ADB */
 
1065 /* Construct and send a pmu request */
 
1067 pmu_request(struct adb_request *req, void (*done)(struct adb_request *),
 
1076         if (nbytes < 0 || nbytes > 32) {
 
1077                 printk(KERN_ERR "pmu_request: bad nbytes (%d)\n", nbytes);
 
1081         req->nbytes = nbytes;
 
1083         va_start(list, nbytes);
 
1084         for (i = 0; i < nbytes; ++i)
 
1085                 req->data[i] = va_arg(list, int);
 
1088         req->reply_expected = 0;
 
1089         return pmu_queue_request(req);
 
1093 pmu_queue_request(struct adb_request *req)
 
1095         unsigned long flags;
 
1102         if (req->nbytes <= 0) {
 
1106         nsend = pmu_data_len[req->data[0]][0];
 
1107         if (nsend >= 0 && req->nbytes != nsend + 1) {
 
1116         spin_lock_irqsave(&pmu_lock, flags);
 
1117         if (current_req != 0) {
 
1118                 last_req->next = req;
 
1123                 if (pmu_state == idle)
 
1126         spin_unlock_irqrestore(&pmu_lock, flags);
 
1134         /* Sightly increased the delay, I had one occurrence of the message
 
1138         while ((in_8(&via[B]) & TACK) == 0) {
 
1139                 if (--timeout < 0) {
 
1140                         printk(KERN_ERR "PMU not responding (!ack)\n");
 
1147 /* New PMU seems to be very sensitive to those timings, so we make sure
 
1148  * PCI is flushed immediately */
 
1152         volatile unsigned char __iomem *v = via;
 
1154         out_8(&v[ACR], in_8(&v[ACR]) | SR_OUT | SR_EXT);
 
1156         out_8(&v[B], in_8(&v[B]) & ~TREQ);              /* assert TREQ */
 
1163         volatile unsigned char __iomem *v = via;
 
1165         out_8(&v[ACR], (in_8(&v[ACR]) & ~SR_OUT) | SR_EXT);
 
1166         in_8(&v[SR]);           /* resets SR */
 
1167         out_8(&v[B], in_8(&v[B]) & ~TREQ);
 
1172 pmu_done(struct adb_request *req)
 
1174         void (*done)(struct adb_request *) = req->done;
 
1177         /* Here, we assume that if the request has a done member, the
 
1178          * struct request will survive to setting req->complete to 1
 
1187         struct adb_request *req;
 
1189         /* assert pmu_state == idle */
 
1190         /* get the packet to send */
 
1192         if (req == 0 || pmu_state != idle
 
1193             || (/*req->reply_expected && */req_awaiting_reply))
 
1196         pmu_state = sending;
 
1198         data_len = pmu_data_len[req->data[0]][0];
 
1200         /* Sounds safer to make sure ACK is high before writing. This helped
 
1201          * kill a problem with ADB and some iBooks
 
1204         /* set the shift register to shift out and send a byte */
 
1205         send_byte(req->data[0]);
 
1215         via_pmu_interrupt(0, NULL);
 
1225         /* Kicks ADB read when PMU is suspended */
 
1226         adb_int_pending = 1;
 
1228                 via_pmu_interrupt(0, NULL);
 
1229         } while (pmu_suspended && (adb_int_pending || pmu_state != idle
 
1230                 || req_awaiting_reply));
 
1234 pmu_wait_complete(struct adb_request *req)
 
1238         while((pmu_state != idle && pmu_state != locked) || !req->complete)
 
1239                 via_pmu_interrupt(0, NULL);
 
1242 /* This function loops until the PMU is idle and prevents it from
 
1243  * anwsering to ADB interrupts. pmu_request can still be called.
 
1244  * This is done to avoid spurrious shutdowns when we know we'll have
 
1245  * interrupts switched off for a long time
 
1250         unsigned long flags;
 
1255         spin_lock_irqsave(&pmu_lock, flags);
 
1257         if (pmu_suspended > 1) {
 
1258                 spin_unlock_irqrestore(&pmu_lock, flags);
 
1263                 spin_unlock_irqrestore(&pmu_lock, flags);
 
1264                 if (req_awaiting_reply)
 
1265                         adb_int_pending = 1;
 
1266                 via_pmu_interrupt(0, NULL);
 
1267                 spin_lock_irqsave(&pmu_lock, flags);
 
1268                 if (!adb_int_pending && pmu_state == idle && !req_awaiting_reply) {
 
1270                                 disable_irq_nosync(gpio_irq);
 
1271                         out_8(&via[IER], CB1_INT | IER_CLR);
 
1272                         spin_unlock_irqrestore(&pmu_lock, flags);
 
1281         unsigned long flags;
 
1283         if (!via || (pmu_suspended < 1))
 
1286         spin_lock_irqsave(&pmu_lock, flags);
 
1288         if (pmu_suspended > 0) {
 
1289                 spin_unlock_irqrestore(&pmu_lock, flags);
 
1292         adb_int_pending = 1;
 
1294                 enable_irq(gpio_irq);
 
1295         out_8(&via[IER], CB1_INT | IER_SET);
 
1296         spin_unlock_irqrestore(&pmu_lock, flags);
 
1300 /* Interrupt data could be the result data from an ADB cmd */
 
1302 pmu_handle_data(unsigned char *data, int len)
 
1304         unsigned char ints, pirq;
 
1308         if (drop_interrupts || len < 1) {
 
1309                 adb_int_pending = 0;
 
1314         /* Get PMU interrupt mask */
 
1317         /* Record zero interrupts for stats */
 
1321         /* Hack to deal with ADB autopoll flag */
 
1322         if (ints & PMU_INT_ADB)
 
1323                 ints &= ~(PMU_INT_ADB_AUTO | PMU_INT_AUTO_SRQ_POLL);
 
1328                 if (i > pmu_irq_stats[10])
 
1329                         pmu_irq_stats[10] = i;
 
1333         for (pirq = 0; pirq < 8; pirq++)
 
1334                 if (ints & (1 << pirq))
 
1336         pmu_irq_stats[pirq]++;
 
1338         ints &= ~(1 << pirq);
 
1340         /* Note: for some reason, we get an interrupt with len=1,
 
1341          * data[0]==0 after each normal ADB interrupt, at least
 
1342          * on the Pismo. Still investigating...  --BenH
 
1344         if ((1 << pirq) & PMU_INT_ADB) {
 
1345                 if ((data[0] & PMU_INT_ADB_AUTO) == 0) {
 
1346                         struct adb_request *req = req_awaiting_reply;
 
1348                                 printk(KERN_ERR "PMU: extra ADB reply\n");
 
1351                         req_awaiting_reply = NULL;
 
1355                                 memcpy(req->reply, data + 1, len - 1);
 
1356                                 req->reply_len = len - 1;
 
1360                         if (len == 4 && data[1] == 0x2c) {
 
1361                                 extern int xmon_wants_key, xmon_adb_keycode;
 
1362                                 if (xmon_wants_key) {
 
1363                                         xmon_adb_keycode = data[2];
 
1369                          * XXX On the [23]400 the PMU gives us an up
 
1370                          * event for keycodes 0x74 or 0x75 when the PC
 
1371                          * card eject buttons are released, so we
 
1372                          * ignore those events.
 
1374                         if (!(pmu_kind == PMU_OHARE_BASED && len == 4
 
1375                               && data[1] == 0x2c && data[3] == 0xff
 
1376                               && (data[2] & ~1) == 0xf4))
 
1377                                 adb_input(data+1, len-1, 1);
 
1378 #endif /* CONFIG_ADB */         
 
1381         /* Sound/brightness button pressed */
 
1382         else if ((1 << pirq) & PMU_INT_SNDBRT) {
 
1383 #ifdef CONFIG_PMAC_BACKLIGHT
 
1385                         pmac_backlight_set_legacy_brightness_pmu(data[1] >> 4);
 
1388         /* Tick interrupt */
 
1389         else if ((1 << pirq) & PMU_INT_TICK) {
 
1390                 /* Environement or tick interrupt, query batteries */
 
1391                 if (pmu_battery_count) {
 
1392                         if ((--query_batt_timer) == 0) {
 
1393                                 query_battery_state();
 
1394                                 query_batt_timer = BATTERY_POLLING_COUNT;
 
1398         else if ((1 << pirq) & PMU_INT_ENVIRONMENT) {
 
1399                 if (pmu_battery_count)
 
1400                         query_battery_state();
 
1401                 pmu_pass_intr(data, len);
 
1402                 /* len == 6 is probably a bad check. But how do I
 
1403                  * know what PMU versions send what events here? */
 
1405                         via_pmu_event(PMU_EVT_POWER, !!(data[1]&8));
 
1406                         via_pmu_event(PMU_EVT_LID, data[1]&1);
 
1409                pmu_pass_intr(data, len);
 
1414 static struct adb_request*
 
1417         struct adb_request *req;
 
1420         if (via[B] & TREQ) {
 
1421                 printk(KERN_ERR "PMU: spurious SR intr (%x)\n", via[B]);
 
1422                 out_8(&via[IFR], SR_INT);
 
1425         /* The ack may not yet be low when we get the interrupt */
 
1426         while ((in_8(&via[B]) & TACK) != 0)
 
1429         /* if reading grab the byte, and reset the interrupt */
 
1430         if (pmu_state == reading || pmu_state == reading_intr)
 
1431                 bite = in_8(&via[SR]);
 
1433         /* reset TREQ and wait for TACK to go high */
 
1434         out_8(&via[B], in_8(&via[B]) | TREQ);
 
1437         switch (pmu_state) {
 
1441                         data_len = req->nbytes - 1;
 
1442                         send_byte(data_len);
 
1445                 if (data_index <= data_len) {
 
1446                         send_byte(req->data[data_index++]);
 
1450                 data_len = pmu_data_len[req->data[0]][1];
 
1451                 if (data_len == 0) {
 
1453                         current_req = req->next;
 
1454                         if (req->reply_expected)
 
1455                                 req_awaiting_reply = req;
 
1459                         pmu_state = reading;
 
1461                         reply_ptr = req->reply + req->reply_len;
 
1469                 pmu_state = reading_intr;
 
1470                 reply_ptr = interrupt_data[int_data_last];
 
1472                 if (gpio_irq >= 0 && !gpio_irq_enabled) {
 
1473                         enable_irq(gpio_irq);
 
1474                         gpio_irq_enabled = 1;
 
1480                 if (data_len == -1) {
 
1483                                 printk(KERN_ERR "PMU: bad reply len %d\n", bite);
 
1484                 } else if (data_index < 32) {
 
1485                         reply_ptr[data_index++] = bite;
 
1487                 if (data_index < data_len) {
 
1492                 if (pmu_state == reading_intr) {
 
1494                         int_data_state[int_data_last] = int_data_ready;
 
1495                         interrupt_data_len[int_data_last] = data_len;
 
1499                          * For PMU sleep and freq change requests, we lock the
 
1500                          * PMU until it's explicitly unlocked. This avoids any
 
1501                          * spurrious event polling getting in
 
1503                         current_req = req->next;
 
1504                         req->reply_len += data_index;
 
1505                         if (req->data[0] == PMU_SLEEP || req->data[0] == PMU_CPU_SPEED)
 
1514                 printk(KERN_ERR "via_pmu_interrupt: unknown state %d?\n",
 
1521 via_pmu_interrupt(int irq, void *arg)
 
1523         unsigned long flags;
 
1527         struct adb_request *req = NULL;
 
1530         /* This is a bit brutal, we can probably do better */
 
1531         spin_lock_irqsave(&pmu_lock, flags);
 
1535                 intr = in_8(&via[IFR]) & (SR_INT | CB1_INT);
 
1539                 if (++nloop > 1000) {
 
1540                         printk(KERN_DEBUG "PMU: stuck in intr loop, "
 
1541                                "intr=%x, ier=%x pmu_state=%d\n",
 
1542                                intr, in_8(&via[IER]), pmu_state);
 
1545                 out_8(&via[IFR], intr);
 
1546                 if (intr & CB1_INT) {
 
1547                         adb_int_pending = 1;
 
1550                 if (intr & SR_INT) {
 
1551                         req = pmu_sr_intr();
 
1558         if (pmu_state == idle) {
 
1559                 if (adb_int_pending) {
 
1560                         if (int_data_state[0] == int_data_empty)
 
1562                         else if (int_data_state[1] == int_data_empty)
 
1567                         int_data_state[int_data_last] = int_data_fill;
 
1568                         /* Sounds safer to make sure ACK is high before writing.
 
1569                          * This helped kill a problem with ADB and some iBooks
 
1572                         send_byte(PMU_INT_ACK);
 
1573                         adb_int_pending = 0;
 
1574                 } else if (current_req)
 
1578         /* Mark the oldest buffer for flushing */
 
1579         if (int_data_state[!int_data_last] == int_data_ready) {
 
1580                 int_data_state[!int_data_last] = int_data_flush;
 
1581                 int_data = !int_data_last;
 
1582         } else if (int_data_state[int_data_last] == int_data_ready) {
 
1583                 int_data_state[int_data_last] = int_data_flush;
 
1584                 int_data = int_data_last;
 
1587         spin_unlock_irqrestore(&pmu_lock, flags);
 
1589         /* Deal with completed PMU requests outside of the lock */
 
1595         /* Deal with interrupt datas outside of the lock */
 
1596         if (int_data >= 0) {
 
1597                 pmu_handle_data(interrupt_data[int_data], interrupt_data_len[int_data]);
 
1598                 spin_lock_irqsave(&pmu_lock, flags);
 
1600                 int_data_state[int_data] = int_data_empty;
 
1605         return IRQ_RETVAL(handled);
 
1611         unsigned long flags;
 
1613         spin_lock_irqsave(&pmu_lock, flags);
 
1614         if (pmu_state == locked)
 
1616         adb_int_pending = 1;
 
1617         spin_unlock_irqrestore(&pmu_lock, flags);
 
1622 gpio1_interrupt(int irq, void *arg)
 
1624         unsigned long flags;
 
1626         if ((in_8(gpio_reg + 0x9) & 0x02) == 0) {
 
1627                 spin_lock_irqsave(&pmu_lock, flags);
 
1628                 if (gpio_irq_enabled > 0) {
 
1629                         disable_irq_nosync(gpio_irq);
 
1630                         gpio_irq_enabled = 0;
 
1633                 adb_int_pending = 1;
 
1634                 spin_unlock_irqrestore(&pmu_lock, flags);
 
1635                 via_pmu_interrupt(0, NULL);
 
1642 pmu_enable_irled(int on)
 
1644         struct adb_request req;
 
1648         if (pmu_kind == PMU_KEYLARGO_BASED)
 
1651         pmu_request(&req, NULL, 2, PMU_POWER_CTRL, PMU_POW_IRLED |
 
1652             (on ? PMU_POW_ON : PMU_POW_OFF));
 
1653         pmu_wait_complete(&req);
 
1659         struct adb_request req;
 
1664         local_irq_disable();
 
1666         drop_interrupts = 1;
 
1668         if (pmu_kind != PMU_KEYLARGO_BASED) {
 
1669                 pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, PMU_INT_ADB |
 
1671                 while(!req.complete)
 
1675         pmu_request(&req, NULL, 1, PMU_RESET);
 
1676         pmu_wait_complete(&req);
 
1684         struct adb_request req;
 
1689         local_irq_disable();
 
1691         drop_interrupts = 1;
 
1693         if (pmu_kind != PMU_KEYLARGO_BASED) {
 
1694                 pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, PMU_INT_ADB |
 
1696                 pmu_wait_complete(&req);
 
1698                 /* Disable server mode on shutdown or we'll just
 
1701                 pmu_set_server_mode(0);
 
1704         pmu_request(&req, NULL, 5, PMU_SHUTDOWN,
 
1705                     'M', 'A', 'T', 'T');
 
1706         pmu_wait_complete(&req);
 
1717 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
1719  * Put the powerbook to sleep.
 
1722 static u32 save_via[8];
 
1725 save_via_state(void)
 
1727         save_via[0] = in_8(&via[ANH]);
 
1728         save_via[1] = in_8(&via[DIRA]);
 
1729         save_via[2] = in_8(&via[B]);
 
1730         save_via[3] = in_8(&via[DIRB]);
 
1731         save_via[4] = in_8(&via[PCR]);
 
1732         save_via[5] = in_8(&via[ACR]);
 
1733         save_via[6] = in_8(&via[T1CL]);
 
1734         save_via[7] = in_8(&via[T1CH]);
 
1737 restore_via_state(void)
 
1739         out_8(&via[ANH], save_via[0]);
 
1740         out_8(&via[DIRA], save_via[1]);
 
1741         out_8(&via[B], save_via[2]);
 
1742         out_8(&via[DIRB], save_via[3]);
 
1743         out_8(&via[PCR], save_via[4]);
 
1744         out_8(&via[ACR], save_via[5]);
 
1745         out_8(&via[T1CL], save_via[6]);
 
1746         out_8(&via[T1CH], save_via[7]);
 
1747         out_8(&via[IER], IER_CLR | 0x7f);       /* disable all intrs */
 
1748         out_8(&via[IFR], 0x7f);                         /* clear IFR */
 
1749         out_8(&via[IER], IER_SET | SR_INT | CB1_INT);
 
1752 #define GRACKLE_PM      (1<<7)
 
1753 #define GRACKLE_DOZE    (1<<5)
 
1754 #define GRACKLE_NAP     (1<<4)
 
1755 #define GRACKLE_SLEEP   (1<<3)
 
1757 static int powerbook_sleep_grackle(void)
 
1759         unsigned long save_l2cr;
 
1760         unsigned short pmcr1;
 
1761         struct adb_request req;
 
1762         struct pci_dev *grackle;
 
1764         grackle = pci_get_bus_and_slot(0, 0);
 
1768         /* Turn off various things. Darwin does some retry tests here... */
 
1769         pmu_request(&req, NULL, 2, PMU_POWER_CTRL0, PMU_POW0_OFF|PMU_POW0_HARD_DRIVE);
 
1770         pmu_wait_complete(&req);
 
1771         pmu_request(&req, NULL, 2, PMU_POWER_CTRL,
 
1772                 PMU_POW_OFF|PMU_POW_BACKLIGHT|PMU_POW_IRLED|PMU_POW_MEDIABAY);
 
1773         pmu_wait_complete(&req);
 
1775         /* For 750, save backside cache setting and disable it */
 
1776         save_l2cr = _get_L2CR();        /* (returns -1 if not available) */
 
1778         if (!__fake_sleep) {
 
1779                 /* Ask the PMU to put us to sleep */
 
1780                 pmu_request(&req, NULL, 5, PMU_SLEEP, 'M', 'A', 'T', 'T');
 
1781                 pmu_wait_complete(&req);
 
1784         /* The VIA is supposed not to be restored correctly*/
 
1786         /* We shut down some HW */
 
1787         pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,1);
 
1789         pci_read_config_word(grackle, 0x70, &pmcr1);
 
1790         /* Apparently, MacOS uses NAP mode for Grackle ??? */
 
1791         pmcr1 &= ~(GRACKLE_DOZE|GRACKLE_SLEEP); 
 
1792         pmcr1 |= GRACKLE_PM|GRACKLE_NAP;
 
1793         pci_write_config_word(grackle, 0x70, pmcr1);
 
1795         /* Call low-level ASM sleep handler */
 
1799                 low_sleep_handler();
 
1801         /* We're awake again, stop grackle PM */
 
1802         pci_read_config_word(grackle, 0x70, &pmcr1);
 
1803         pmcr1 &= ~(GRACKLE_PM|GRACKLE_DOZE|GRACKLE_SLEEP|GRACKLE_NAP); 
 
1804         pci_write_config_word(grackle, 0x70, pmcr1);
 
1806         pci_dev_put(grackle);
 
1808         /* Make sure the PMU is idle */
 
1809         pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,0);
 
1810         restore_via_state();
 
1812         /* Restore L2 cache */
 
1813         if (save_l2cr != 0xffffffff && (save_l2cr & L2CR_L2E) != 0)
 
1814                 _set_L2CR(save_l2cr);
 
1816         /* Restore userland MMU context */
 
1817         switch_mmu_context(NULL, current->active_mm);
 
1819         /* Power things up */
 
1821         pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask);
 
1822         pmu_wait_complete(&req);
 
1823         pmu_request(&req, NULL, 2, PMU_POWER_CTRL0,
 
1824                         PMU_POW0_ON|PMU_POW0_HARD_DRIVE);
 
1825         pmu_wait_complete(&req);
 
1826         pmu_request(&req, NULL, 2, PMU_POWER_CTRL,
 
1827                         PMU_POW_ON|PMU_POW_BACKLIGHT|PMU_POW_CHARGER|PMU_POW_IRLED|PMU_POW_MEDIABAY);
 
1828         pmu_wait_complete(&req);
 
1834 powerbook_sleep_Core99(void)
 
1836         unsigned long save_l2cr;
 
1837         unsigned long save_l3cr;
 
1838         struct adb_request req;
 
1840         if (pmac_call_feature(PMAC_FTR_SLEEP_STATE,NULL,0,-1) < 0) {
 
1841                 printk(KERN_ERR "Sleep mode not supported on this machine\n");
 
1845         if (num_online_cpus() > 1 || cpu_is_offline(0))
 
1848         /* Stop environment and ADB interrupts */
 
1849         pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, 0);
 
1850         pmu_wait_complete(&req);
 
1852         /* Tell PMU what events will wake us up */
 
1853         pmu_request(&req, NULL, 4, PMU_POWER_EVENTS, PMU_PWR_CLR_WAKEUP_EVENTS,
 
1855         pmu_wait_complete(&req);
 
1856         pmu_request(&req, NULL, 4, PMU_POWER_EVENTS, PMU_PWR_SET_WAKEUP_EVENTS,
 
1857                 0, PMU_PWR_WAKEUP_KEY |
 
1858                 (option_lid_wakeup ? PMU_PWR_WAKEUP_LID_OPEN : 0));
 
1859         pmu_wait_complete(&req);
 
1861         /* Save the state of the L2 and L3 caches */
 
1862         save_l3cr = _get_L3CR();        /* (returns -1 if not available) */
 
1863         save_l2cr = _get_L2CR();        /* (returns -1 if not available) */
 
1865         if (!__fake_sleep) {
 
1866                 /* Ask the PMU to put us to sleep */
 
1867                 pmu_request(&req, NULL, 5, PMU_SLEEP, 'M', 'A', 'T', 'T');
 
1868                 pmu_wait_complete(&req);
 
1871         /* The VIA is supposed not to be restored correctly*/
 
1874         /* Shut down various ASICs. There's a chance that we can no longer
 
1875          * talk to the PMU after this, so I moved it to _after_ sending the
 
1876          * sleep command to it. Still need to be checked.
 
1878         pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, 1);
 
1880         /* Call low-level ASM sleep handler */
 
1884                 low_sleep_handler();
 
1886         /* Restore Apple core ASICs state */
 
1887         pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, 0);
 
1890         restore_via_state();
 
1892         /* tweak LPJ before cpufreq is there */
 
1893         loops_per_jiffy *= 2;
 
1896         pmac_call_early_video_resume();
 
1898         /* Restore L2 cache */
 
1899         if (save_l2cr != 0xffffffff && (save_l2cr & L2CR_L2E) != 0)
 
1900                 _set_L2CR(save_l2cr);
 
1901         /* Restore L3 cache */
 
1902         if (save_l3cr != 0xffffffff && (save_l3cr & L3CR_L3E) != 0)
 
1903                 _set_L3CR(save_l3cr);
 
1905         /* Restore userland MMU context */
 
1906         switch_mmu_context(NULL, current->active_mm);
 
1908         /* Tell PMU we are ready */
 
1910         pmu_request(&req, NULL, 2, PMU_SYSTEM_READY, 2);
 
1911         pmu_wait_complete(&req);
 
1912         pmu_request(&req, NULL, 2, PMU_SET_INTR_MASK, pmu_intr_mask);
 
1913         pmu_wait_complete(&req);
 
1915         /* Restore LPJ, cpufreq will adjust the cpu frequency */
 
1916         loops_per_jiffy /= 2;
 
1921 #define PB3400_MEM_CTRL         0xf8000000
 
1922 #define PB3400_MEM_CTRL_SLEEP   0x70
 
1924 static void __iomem *pb3400_mem_ctrl;
 
1926 static void powerbook_sleep_init_3400(void)
 
1928         /* map in the memory controller registers */
 
1929         pb3400_mem_ctrl = ioremap(PB3400_MEM_CTRL, 0x100);
 
1930         if (pb3400_mem_ctrl == NULL)
 
1931                 printk(KERN_WARNING "ioremap failed: sleep won't be possible");
 
1934 static int powerbook_sleep_3400(void)
 
1939         struct adb_request sleep_req;
 
1940         unsigned int __iomem *mem_ctrl_sleep;
 
1942         if (pb3400_mem_ctrl == NULL)
 
1944         mem_ctrl_sleep = pb3400_mem_ctrl + PB3400_MEM_CTRL_SLEEP;
 
1946         /* Set the memory controller to keep the memory refreshed
 
1947            while we're asleep */
 
1948         for (i = 0x403f; i >= 0x4000; --i) {
 
1949                 out_be32(mem_ctrl_sleep, i);
 
1951                         x = (in_be32(mem_ctrl_sleep) >> 16) & 0x3ff;
 
1957         /* Ask the PMU to put us to sleep */
 
1958         pmu_request(&sleep_req, NULL, 5, PMU_SLEEP, 'M', 'A', 'T', 'T');
 
1959         pmu_wait_complete(&sleep_req);
 
1962         pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, 1);
 
1966         /* Put the CPU into sleep mode */
 
1967         hid0 = mfspr(SPRN_HID0);
 
1968         hid0 = (hid0 & ~(HID0_NAP | HID0_DOZE)) | HID0_SLEEP;
 
1969         mtspr(SPRN_HID0, hid0);
 
1971         msr = mfmsr() | MSR_POW;
 
1977         local_irq_disable();
 
1979         /* OK, we're awake again, start restoring things */
 
1980         out_be32(mem_ctrl_sleep, 0x3f);
 
1981         pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, 0);
 
1986 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 
1989  * Support for /dev/pmu device
 
1991 #define RB_SIZE         0x10
 
1992 struct pmu_private {
 
1993         struct list_head list;
 
1998                 unsigned char data[16];
 
2000         wait_queue_head_t wait;
 
2002 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
 
2003         int     backlight_locker;
 
2007 static LIST_HEAD(all_pmu_pvt);
 
2008 static DEFINE_SPINLOCK(all_pvt_lock);
 
2011 pmu_pass_intr(unsigned char *data, int len)
 
2013         struct pmu_private *pp;
 
2014         struct list_head *list;
 
2016         unsigned long flags;
 
2018         if (len > sizeof(pp->rb_buf[0].data))
 
2019                 len = sizeof(pp->rb_buf[0].data);
 
2020         spin_lock_irqsave(&all_pvt_lock, flags);
 
2021         for (list = &all_pmu_pvt; (list = list->next) != &all_pmu_pvt; ) {
 
2022                 pp = list_entry(list, struct pmu_private, list);
 
2023                 spin_lock(&pp->lock);
 
2027                 if (i != pp->rb_get) {
 
2028                         struct rb_entry *rp = &pp->rb_buf[pp->rb_put];
 
2030                         memcpy(rp->data, data, len);
 
2032                         wake_up_interruptible(&pp->wait);
 
2034                 spin_unlock(&pp->lock);
 
2036         spin_unlock_irqrestore(&all_pvt_lock, flags);
 
2040 pmu_open(struct inode *inode, struct file *file)
 
2042         struct pmu_private *pp;
 
2043         unsigned long flags;
 
2045         pp = kmalloc(sizeof(struct pmu_private), GFP_KERNEL);
 
2048         pp->rb_get = pp->rb_put = 0;
 
2049         spin_lock_init(&pp->lock);
 
2050         init_waitqueue_head(&pp->wait);
 
2052         spin_lock_irqsave(&all_pvt_lock, flags);
 
2053 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
 
2054         pp->backlight_locker = 0;
 
2056         list_add(&pp->list, &all_pmu_pvt);
 
2057         spin_unlock_irqrestore(&all_pvt_lock, flags);
 
2058         file->private_data = pp;
 
2064 pmu_read(struct file *file, char __user *buf,
 
2065                         size_t count, loff_t *ppos)
 
2067         struct pmu_private *pp = file->private_data;
 
2068         DECLARE_WAITQUEUE(wait, current);
 
2069         unsigned long flags;
 
2072         if (count < 1 || pp == 0)
 
2074         if (!access_ok(VERIFY_WRITE, buf, count))
 
2077         spin_lock_irqsave(&pp->lock, flags);
 
2078         add_wait_queue(&pp->wait, &wait);
 
2079         current->state = TASK_INTERRUPTIBLE;
 
2083                 if (pp->rb_get != pp->rb_put) {
 
2085                         struct rb_entry *rp = &pp->rb_buf[i];
 
2087                         spin_unlock_irqrestore(&pp->lock, flags);
 
2090                         if (ret > 0 && copy_to_user(buf, rp->data, ret))
 
2094                         spin_lock_irqsave(&pp->lock, flags);
 
2099                 if (file->f_flags & O_NONBLOCK)
 
2102                 if (signal_pending(current))
 
2104                 spin_unlock_irqrestore(&pp->lock, flags);
 
2106                 spin_lock_irqsave(&pp->lock, flags);
 
2108         current->state = TASK_RUNNING;
 
2109         remove_wait_queue(&pp->wait, &wait);
 
2110         spin_unlock_irqrestore(&pp->lock, flags);
 
2116 pmu_write(struct file *file, const char __user *buf,
 
2117                          size_t count, loff_t *ppos)
 
2123 pmu_fpoll(struct file *filp, poll_table *wait)
 
2125         struct pmu_private *pp = filp->private_data;
 
2126         unsigned int mask = 0;
 
2127         unsigned long flags;
 
2131         poll_wait(filp, &pp->wait, wait);
 
2132         spin_lock_irqsave(&pp->lock, flags);
 
2133         if (pp->rb_get != pp->rb_put)
 
2135         spin_unlock_irqrestore(&pp->lock, flags);
 
2140 pmu_release(struct inode *inode, struct file *file)
 
2142         struct pmu_private *pp = file->private_data;
 
2143         unsigned long flags;
 
2146                 file->private_data = NULL;
 
2147                 spin_lock_irqsave(&all_pvt_lock, flags);
 
2148                 list_del(&pp->list);
 
2149                 spin_unlock_irqrestore(&all_pvt_lock, flags);
 
2151 #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
 
2152                 if (pp->backlight_locker)
 
2153                         pmac_backlight_enable();
 
2161 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
2162 static void pmac_suspend_disable_irqs(void)
 
2164         /* Call platform functions marked "on sleep" */
 
2165         pmac_pfunc_i2c_suspend();
 
2166         pmac_pfunc_base_suspend();
 
2169 static int powerbook_sleep(suspend_state_t state)
 
2173         /* Wait for completion of async requests */
 
2174         while (!batt_req.complete)
 
2177         /* Giveup the lazy FPU & vec so we don't have to back them
 
2178          * up from the low level code
 
2182 #ifdef CONFIG_ALTIVEC
 
2183         if (cpu_has_feature(CPU_FTR_ALTIVEC))
 
2184                 enable_kernel_altivec();
 
2185 #endif /* CONFIG_ALTIVEC */
 
2188         case PMU_OHARE_BASED:
 
2189                 error = powerbook_sleep_3400();
 
2191         case PMU_HEATHROW_BASED:
 
2192         case PMU_PADDINGTON_BASED:
 
2193                 error = powerbook_sleep_grackle();
 
2195         case PMU_KEYLARGO_BASED:
 
2196                 error = powerbook_sleep_Core99();
 
2210 static void pmac_suspend_enable_irqs(void)
 
2212         /* Force a poll of ADB interrupts */
 
2213         adb_int_pending = 1;
 
2214         via_pmu_interrupt(0, NULL);
 
2218         /* Call platform functions marked "on wake" */
 
2219         pmac_pfunc_base_resume();
 
2220         pmac_pfunc_i2c_resume();
 
2223 static int pmu_sleep_valid(suspend_state_t state)
 
2225         return state == PM_SUSPEND_MEM
 
2226                 && (pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, -1) >= 0);
 
2229 static struct platform_suspend_ops pmu_pm_ops = {
 
2230         .enter = powerbook_sleep,
 
2231         .valid = pmu_sleep_valid,
 
2234 static int register_pmu_pm_ops(void)
 
2236         if (pmu_kind == PMU_OHARE_BASED)
 
2237                 powerbook_sleep_init_3400();
 
2238         ppc_md.suspend_disable_irqs = pmac_suspend_disable_irqs;
 
2239         ppc_md.suspend_enable_irqs = pmac_suspend_enable_irqs;
 
2240         suspend_set_ops(&pmu_pm_ops);
 
2245 device_initcall(register_pmu_pm_ops);
 
2249 pmu_ioctl(struct inode * inode, struct file *filp,
 
2250                      u_int cmd, u_long arg)
 
2252         __u32 __user *argp = (__u32 __user *)arg;
 
2253         int error = -EINVAL;
 
2257                 if (!capable(CAP_SYS_ADMIN))
 
2259                 return pm_suspend(PM_SUSPEND_MEM);
 
2260         case PMU_IOC_CAN_SLEEP:
 
2261                 if (pmac_call_feature(PMAC_FTR_SLEEP_STATE, NULL, 0, -1) < 0)
 
2262                         return put_user(0, argp);
 
2264                         return put_user(1, argp);
 
2266 #ifdef CONFIG_PMAC_BACKLIGHT_LEGACY
 
2267         /* Compatibility ioctl's for backlight */
 
2268         case PMU_IOC_GET_BACKLIGHT:
 
2272                 brightness = pmac_backlight_get_legacy_brightness();
 
2276                         return put_user(brightness, argp);
 
2279         case PMU_IOC_SET_BACKLIGHT:
 
2283                 error = get_user(brightness, argp);
 
2287                 return pmac_backlight_set_legacy_brightness(brightness);
 
2289 #ifdef CONFIG_INPUT_ADBHID
 
2290         case PMU_IOC_GRAB_BACKLIGHT: {
 
2291                 struct pmu_private *pp = filp->private_data;
 
2293                 if (pp->backlight_locker)
 
2296                 pp->backlight_locker = 1;
 
2297                 pmac_backlight_disable();
 
2301 #endif /* CONFIG_INPUT_ADBHID */
 
2302 #endif /* CONFIG_PMAC_BACKLIGHT_LEGACY */
 
2304         case PMU_IOC_GET_MODEL:
 
2305                 return put_user(pmu_kind, argp);
 
2306         case PMU_IOC_HAS_ADB:
 
2307                 return put_user(pmu_has_adb, argp);
 
2312 static const struct file_operations pmu_device_fops = {
 
2318         .release        = pmu_release,
 
2321 static struct miscdevice pmu_device = {
 
2322         PMU_MINOR, "pmu", &pmu_device_fops
 
2325 static int pmu_device_init(void)
 
2329         if (misc_register(&pmu_device) < 0)
 
2330                 printk(KERN_ERR "via-pmu: cannot register misc device.\n");
 
2333 device_initcall(pmu_device_init);
 
2338 polled_handshake(volatile unsigned char __iomem *via)
 
2340         via[B] &= ~TREQ; eieio();
 
2341         while ((via[B] & TACK) != 0)
 
2343         via[B] |= TREQ; eieio();
 
2344         while ((via[B] & TACK) == 0)
 
2349 polled_send_byte(volatile unsigned char __iomem *via, int x)
 
2351         via[ACR] |= SR_OUT | SR_EXT; eieio();
 
2352         via[SR] = x; eieio();
 
2353         polled_handshake(via);
 
2357 polled_recv_byte(volatile unsigned char __iomem *via)
 
2361         via[ACR] = (via[ACR] & ~SR_OUT) | SR_EXT; eieio();
 
2362         x = via[SR]; eieio();
 
2363         polled_handshake(via);
 
2364         x = via[SR]; eieio();
 
2369 pmu_polled_request(struct adb_request *req)
 
2371         unsigned long flags;
 
2373         volatile unsigned char __iomem *v = via;
 
2377         l = pmu_data_len[c][0];
 
2378         if (l >= 0 && req->nbytes != l + 1)
 
2381         local_irq_save(flags);
 
2382         while (pmu_state != idle)
 
2385         while ((via[B] & TACK) == 0)
 
2387         polled_send_byte(v, c);
 
2389                 l = req->nbytes - 1;
 
2390                 polled_send_byte(v, l);
 
2392         for (i = 1; i <= l; ++i)
 
2393                 polled_send_byte(v, req->data[i]);
 
2395         l = pmu_data_len[c][1];
 
2397                 l = polled_recv_byte(v);
 
2398         for (i = 0; i < l; ++i)
 
2399                 req->reply[i + req->reply_len] = polled_recv_byte(v);
 
2404         local_irq_restore(flags);
 
2408 /* N.B. This doesn't work on the 3400 */
 
2409 void pmu_blink(int n)
 
2411         struct adb_request req;
 
2413         memset(&req, 0, sizeof(req));
 
2415         for (; n > 0; --n) {
 
2422                 req.reply[0] = ADB_RET_OK;
 
2424                 req.reply_expected = 0;
 
2425                 pmu_polled_request(&req);
 
2433                 req.reply[0] = ADB_RET_OK;
 
2435                 req.reply_expected = 0;
 
2436                 pmu_polled_request(&req);
 
2441 #endif /* DEBUG_SLEEP */
 
2443 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
2444 int pmu_sys_suspended;
 
2446 static int pmu_sys_suspend(struct sys_device *sysdev, pm_message_t state)
 
2448         if (state.event != PM_EVENT_SUSPEND || pmu_sys_suspended)
 
2451         /* Suspend PMU event interrupts */\
 
2453         pmu_sys_suspended = 1;
 
2455 #ifdef CONFIG_PMAC_BACKLIGHT
 
2456         /* Tell backlight code not to muck around with the chip anymore */
 
2457         pmu_backlight_set_sleep(1);
 
2463 static int pmu_sys_resume(struct sys_device *sysdev)
 
2465         struct adb_request req;
 
2467         if (!pmu_sys_suspended)
 
2470         /* Tell PMU we are ready */
 
2471         pmu_request(&req, NULL, 2, PMU_SYSTEM_READY, 2);
 
2472         pmu_wait_complete(&req);
 
2474 #ifdef CONFIG_PMAC_BACKLIGHT
 
2475         /* Tell backlight code it can use the chip again */
 
2476         pmu_backlight_set_sleep(0);
 
2478         /* Resume PMU event interrupts */
 
2480         pmu_sys_suspended = 0;
 
2485 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 
2487 static struct sysdev_class pmu_sysclass = {
 
2491 static struct sys_device device_pmu = {
 
2492         .cls            = &pmu_sysclass,
 
2495 static struct sysdev_driver driver_pmu = {
 
2496 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32)
 
2497         .suspend        = &pmu_sys_suspend,
 
2498         .resume         = &pmu_sys_resume,
 
2499 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */
 
2502 static int __init init_pmu_sysfs(void)
 
2506         rc = sysdev_class_register(&pmu_sysclass);
 
2508                 printk(KERN_ERR "Failed registering PMU sys class\n");
 
2511         rc = sysdev_register(&device_pmu);
 
2513                 printk(KERN_ERR "Failed registering PMU sys device\n");
 
2516         rc = sysdev_driver_register(&pmu_sysclass, &driver_pmu);
 
2518                 printk(KERN_ERR "Failed registering PMU sys driver\n");
 
2524 subsys_initcall(init_pmu_sysfs);
 
2526 EXPORT_SYMBOL(pmu_request);
 
2527 EXPORT_SYMBOL(pmu_queue_request);
 
2528 EXPORT_SYMBOL(pmu_poll);
 
2529 EXPORT_SYMBOL(pmu_poll_adb);
 
2530 EXPORT_SYMBOL(pmu_wait_complete);
 
2531 EXPORT_SYMBOL(pmu_suspend);
 
2532 EXPORT_SYMBOL(pmu_resume);
 
2533 EXPORT_SYMBOL(pmu_unlock);
 
2534 #if defined(CONFIG_PPC32)
 
2535 EXPORT_SYMBOL(pmu_enable_irled);
 
2536 EXPORT_SYMBOL(pmu_battery_count);
 
2537 EXPORT_SYMBOL(pmu_batteries);
 
2538 EXPORT_SYMBOL(pmu_power_flags);
 
2539 #endif /* CONFIG_SUSPEND && CONFIG_PPC32 */