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
19extern void *kb_cs;
20extern void *kb_data;
21
22#define I8042_COMMAND_REG (*(int *)kb_cs)
23#define I8042_DATA_REG (*(int *)kb_data)
24
25static inline int i8042_read_data(void)
26{
27	return readb(kb_data);
28}
29
30static inline int i8042_read_status(void)
31{
32	return readb(kb_cs);
33}
34
35static inline void i8042_write_data(int val)
36{
37	writeb(val, kb_data);
38}
39
40static inline void i8042_write_command(int val)
41{
42	writeb(val, kb_cs);
43}
44
45static inline int i8042_platform_init(void)
46{
47	i8042_reset = 1;
48	return 0;
49}
50
51static 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
67static 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
88static 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
110static inline void i8042_write_data(int val)
111{
112	*((unsigned char *)0xff810000) = (char)val;
113}
114
115static inline void i8042_write_command(int val)
116{
117	*((unsigned char *)0xff810001) = (char)val;
118}
119
120static inline int i8042_platform_init(void)
121{
122	i8042_reset = 1;
123	return 0;
124}
125
126static 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 */
137