Rev 494 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
494 | giacomo | 1 | #ifndef _I8042_PPCIO_H |
2 | #define _I8042_PPCIO_H |
||
3 | |||
4 | /* |
||
5 | * This program is free software; you can redistribute it and/or modify it |
||
6 | * under the terms of the GNU General Public License version 2 as published by |
||
7 | * the Free Software Foundation. |
||
8 | */ |
||
9 | |||
10 | #if defined(CONFIG_WALNUT) |
||
11 | |||
12 | #define I8042_KBD_IRQ 25 |
||
13 | #define I8042_AUX_IRQ 26 |
||
14 | |||
15 | #define I8042_KBD_PHYS_DESC "walnutps2/serio0" |
||
16 | #define I8042_AUX_PHYS_DESC "walnutps2/serio1" |
||
17 | #define I8042_MUX_PHYS_DESC "walnutps2/serio%d" |
||
18 | |||
19 | extern void *kb_cs; |
||
20 | extern void *kb_data; |
||
21 | |||
22 | #define I8042_COMMAND_REG (*(int *)kb_cs) |
||
23 | #define I8042_DATA_REG (*(int *)kb_data) |
||
24 | |||
25 | static inline int i8042_read_data(void) |
||
26 | { |
||
27 | return readb(kb_data); |
||
28 | } |
||
29 | |||
30 | static inline int i8042_read_status(void) |
||
31 | { |
||
32 | return readb(kb_cs); |
||
33 | } |
||
34 | |||
35 | static inline void i8042_write_data(int val) |
||
36 | { |
||
37 | writeb(val, kb_data); |
||
38 | } |
||
39 | |||
40 | static inline void i8042_write_command(int val) |
||
41 | { |
||
42 | writeb(val, kb_cs); |
||
43 | } |
||
44 | |||
45 | static inline int i8042_platform_init(void) |
||
46 | { |
||
47 | i8042_reset = 1; |
||
48 | return 0; |
||
49 | } |
||
50 | |||
51 | static inline void i8042_platform_exit(void) |
||
52 | { |
||
53 | } |
||
54 | |||
55 | #elif defined(CONFIG_SPRUCE) |
||
56 | |||
57 | #define I8042_KBD_IRQ 22 |
||
58 | #define I8042_AUX_IRQ 21 |
||
59 | |||
60 | #define I8042_KBD_PHYS_DESC "spruceps2/serio0" |
||
61 | #define I8042_AUX_PHYS_DESC "spruceps2/serio1" |
||
62 | #define I8042_MUX_PHYS_DESC "spruceps2/serio%d" |
||
63 | |||
64 | #define I8042_COMMAND_REG 0xff810000 |
||
65 | #define I8042_DATA_REG 0xff810001 |
||
66 | |||
67 | static inline int i8042_read_data(void) |
||
68 | { |
||
69 | unsigned long kbd_data; |
||
70 | |||
71 | __raw_writel(0x00000088, 0xff500008); |
||
72 | eieio(); |
||
73 | |||
74 | __raw_writel(0x03000000, 0xff50000c); |
||
75 | eieio(); |
||
76 | |||
77 | asm volatile("lis 7,0xff88 \n\ |
||
78 | lswi 6,7,0x8 \n\ |
||
79 | mr %0,6" |
||
80 | : "=r" (kbd_data) :: "6", "7"); |
||
81 | |||
82 | __raw_writel(0x00000000, 0xff50000c); |
||
83 | eieio(); |
||
84 | |||
85 | return (unsigned char)(kbd_data >> 24); |
||
86 | } |
||
87 | |||
88 | static inline int i8042_read_status(void) |
||
89 | { |
||
90 | unsigned long kbd_status; |
||
91 | |||
92 | __raw_writel(0x00000088, 0xff500008); |
||
93 | eieio(); |
||
94 | |||
95 | __raw_writel(0x03000000, 0xff50000c); |
||
96 | eieio(); |
||
97 | |||
98 | asm volatile("lis 7,0xff88 \n\ |
||
99 | ori 7,7,0x8 \n\ |
||
100 | lswi 6,7,0x8 \n\ |
||
101 | mr %0,6" |
||
102 | : "=r" (kbd_status) :: "6", "7"); |
||
103 | |||
104 | __raw_writel(0x00000000, 0xff50000c); |
||
105 | eieio(); |
||
106 | |||
107 | return (unsigned char)(kbd_status >> 24); |
||
108 | } |
||
109 | |||
110 | static inline void i8042_write_data(int val) |
||
111 | { |
||
112 | *((unsigned char *)0xff810000) = (char)val; |
||
113 | } |
||
114 | |||
115 | static inline void i8042_write_command(int val) |
||
116 | { |
||
117 | *((unsigned char *)0xff810001) = (char)val; |
||
118 | } |
||
119 | |||
120 | static inline int i8042_platform_init(void) |
||
121 | { |
||
122 | i8042_reset = 1; |
||
123 | return 0; |
||
124 | } |
||
125 | |||
126 | static inline void i8042_platform_exit(void) |
||
127 | { |
||
128 | } |
||
129 | |||
130 | #else |
||
131 | |||
132 | #include "i8042-io.h" |
||
133 | |||
134 | #endif |
||
135 | |||
136 | #endif /* _I8042_PPCIO_H */ |