Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 177909
b: refs/heads/master
c: cb1ed9e
h: refs/heads/master
i:
  177907: 20cd976
v: v3
  • Loading branch information
Wu Zhangjin authored and Ralf Baechle committed Dec 17, 2009
1 parent 3364751 commit 67794b4
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ec614d80b58677de30b876a16fdd3fde85bebdc1
refs/heads/master: cb1ed9e117098269de3c0dfff816dff453dd4b59
1 change: 1 addition & 0 deletions trunk/arch/mips/include/asm/mach-loongson/loongson.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ extern void __init bonito_irq_init(void);
extern void __init set_irq_trigger_mode(void);
extern void __init mach_init_irq(void);
extern void mach_irq_dispatch(unsigned int pending);
extern int mach_i8259_irq(void);

/* We need this in some places... */
#define delay() ({ \
Expand Down
4 changes: 3 additions & 1 deletion trunk/arch/mips/loongson/lemote-2f/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*/

#include <linux/interrupt.h>
#include <linux/module.h>

#include <asm/irq_cpu.h>
#include <asm/i8259.h>
Expand All @@ -30,7 +31,7 @@
* The generic i8259_irq() make the kernel hang on booting. Since we cannot
* get the irq via the IRR directly, we access the ISR instead.
*/
static inline int mach_i8259_irq(void)
int mach_i8259_irq(void)
{
int irq, isr;

Expand Down Expand Up @@ -60,6 +61,7 @@ static inline int mach_i8259_irq(void)

return irq;
}
EXPORT_SYMBOL(mach_i8259_irq);

static void i8259_irqdispatch(void)
{
Expand Down
71 changes: 68 additions & 3 deletions trunk/arch/mips/loongson/lemote-2f/pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@
#include <linux/interrupt.h>
#include <linux/pm.h>
#include <linux/i8042.h>
#include <linux/module.h>

#include <asm/i8259.h>
#include <asm/mipsregs.h>
#include <asm/bootinfo.h>

#include <loongson.h>

#include "ec_kb3310b.h"

#define I8042_KBD_IRQ 1
#define I8042_CTR_KBDINT 0x01
#define I8042_CTR_KBDDIS 0x10
Expand Down Expand Up @@ -49,9 +52,6 @@ static int i8042_enable_kbd_port(void)
return 0;
}

/*
* The i8042 is connnected to i8259A
*/
void setup_wakeup_events(void)
{
int irq_mask;
Expand All @@ -65,9 +65,74 @@ void setup_wakeup_events(void)

/* enable keyboard port */
i8042_enable_kbd_port();

/* Wakeup CPU via SCI lid open event */
outb(irq_mask & ~(1 << PIC_CASCADE_IR), PIC_MASTER_IMR);
inb(PIC_MASTER_IMR);
outb(0xff & ~(1 << (SCI_IRQ_NUM - 8)), PIC_SLAVE_IMR);
inb(PIC_SLAVE_IMR);

break;

default:
break;
}
}

static struct delayed_work lid_task;
static int initialized;
/* yeeloong_report_lid_status will be implemented in yeeloong_laptop.c */
sci_handler yeeloong_report_lid_status;
EXPORT_SYMBOL(yeeloong_report_lid_status);
static void yeeloong_lid_update_task(struct work_struct *work)
{
if (yeeloong_report_lid_status)
yeeloong_report_lid_status(BIT_LID_DETECT_ON);
}

int wakeup_loongson(void)
{
int irq;

/* query the interrupt number */
irq = mach_i8259_irq();
if (irq < 0)
return 0;

printk(KERN_INFO "%s: irq = %d\n", __func__, irq);

if (irq == I8042_KBD_IRQ)
return 1;
else if (irq == SCI_IRQ_NUM) {
int ret, sci_event;
/* query the event number */
ret = ec_query_seq(CMD_GET_EVENT_NUM);
if (ret < 0)
return 0;
sci_event = ec_get_event_num();
if (sci_event < 0)
return 0;
if (sci_event == EVENT_LID) {
int lid_status;
/* check the LID status */
lid_status = ec_read(REG_LID_DETECT);
/* wakeup cpu when people open the LID */
if (lid_status == BIT_LID_DETECT_ON) {
/* If we call it directly here, the WARNING
* will be sent out by getnstimeofday
* via "WARN_ON(timekeeping_suspended);"
* because we can not schedule in suspend mode.
*/
if (initialized == 0) {
INIT_DELAYED_WORK(&lid_task,
yeeloong_lid_update_task);
initialized = 1;
}
schedule_delayed_work(&lid_task, 1);
return 1;
}
}
}

return 0;
}

0 comments on commit 67794b4

Please sign in to comment.