12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * Lemote loongson2f family machines' specific suspend support
- *
- * Copyright (C) 2009 Lemote Inc.
- * Author: Wu Zhangjin <wuzj@lemote.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- */
- #include <linux/suspend.h>
- #include <linux/interrupt.h>
- #include <linux/pm.h>
- #include <linux/i8042.h>
- #include <asm/i8259.h>
- #include <asm/mipsregs.h>
- #include <asm/bootinfo.h>
- #include <loongson.h>
- #define I8042_KBD_IRQ 1
- #define I8042_CTR_KBDINT 0x01
- #define I8042_CTR_KBDDIS 0x10
- static unsigned char i8042_ctr;
- static int i8042_enable_kbd_port(void)
- {
- if (i8042_command(&i8042_ctr, I8042_CMD_CTL_RCTR)) {
- pr_err("i8042.c: Can't read CTR while enabling i8042 kbd port."
- "\n");
- return -EIO;
- }
- i8042_ctr &= ~I8042_CTR_KBDDIS;
- i8042_ctr |= I8042_CTR_KBDINT;
- if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
- i8042_ctr &= ~I8042_CTR_KBDINT;
- i8042_ctr |= I8042_CTR_KBDDIS;
- pr_err("i8042.c: Failed to enable KBD port.\n");
- return -EIO;
- }
- return 0;
- }
- /*
- * The i8042 is connnected to i8259A
- */
- void setup_wakeup_events(void)
- {
- int irq_mask;
- switch (mips_machtype) {
- case MACH_LEMOTE_ML2F7:
- case MACH_LEMOTE_YL2F89:
- /* open the keyboard irq in i8259A */
- outb((0xff & ~(1 << I8042_KBD_IRQ)), PIC_MASTER_IMR);
- irq_mask = inb(PIC_MASTER_IMR);
- /* enable keyboard port */
- i8042_enable_kbd_port();
- break;
- default:
- break;
- }
- }
|