This source file includes following definitions.
- scx200_gpio_get
- scx200_gpio_current
- scx200_gpio_set_high
- scx200_gpio_set_low
- scx200_gpio_set
- scx200_gpio_change
1
2 u32 scx200_gpio_configure(unsigned index, u32 set, u32 clear);
3
4 extern unsigned scx200_gpio_base;
5 extern unsigned long scx200_gpio_shadow[2];
6 extern struct nsc_gpio_ops scx200_gpio_ops;
7
8 #define scx200_gpio_present() (scx200_gpio_base!=0)
9
10
11 #define __SCx200_GPIO_BANK unsigned bank = index>>5
12 #define __SCx200_GPIO_IOADDR unsigned short ioaddr = scx200_gpio_base+0x10*bank
13 #define __SCx200_GPIO_SHADOW unsigned long *shadow = scx200_gpio_shadow+bank
14 #define __SCx200_GPIO_INDEX index &= 31
15
16 #define __SCx200_GPIO_OUT __asm__ __volatile__("outsl":"=mS" (shadow):"d" (ioaddr), "0" (shadow))
17
18
19
20 static inline int scx200_gpio_get(unsigned index) {
21 __SCx200_GPIO_BANK;
22 __SCx200_GPIO_IOADDR + 0x04;
23 __SCx200_GPIO_INDEX;
24
25 return (inl(ioaddr) & (1<<index)) ? 1 : 0;
26 }
27
28
29
30
31
32 static inline int scx200_gpio_current(unsigned index) {
33 __SCx200_GPIO_BANK;
34 __SCx200_GPIO_INDEX;
35
36 return (scx200_gpio_shadow[bank] & (1<<index)) ? 1 : 0;
37 }
38
39
40
41 static inline void scx200_gpio_set_high(unsigned index) {
42 __SCx200_GPIO_BANK;
43 __SCx200_GPIO_IOADDR;
44 __SCx200_GPIO_SHADOW;
45 __SCx200_GPIO_INDEX;
46 set_bit(index, shadow);
47 __SCx200_GPIO_OUT;
48 }
49
50
51
52 static inline void scx200_gpio_set_low(unsigned index) {
53 __SCx200_GPIO_BANK;
54 __SCx200_GPIO_IOADDR;
55 __SCx200_GPIO_SHADOW;
56 __SCx200_GPIO_INDEX;
57 clear_bit(index, shadow);
58 __SCx200_GPIO_OUT;
59 }
60
61
62
63 static inline void scx200_gpio_set(unsigned index, int state) {
64 __SCx200_GPIO_BANK;
65 __SCx200_GPIO_IOADDR;
66 __SCx200_GPIO_SHADOW;
67 __SCx200_GPIO_INDEX;
68 if (state)
69 set_bit(index, shadow);
70 else
71 clear_bit(index, shadow);
72 __SCx200_GPIO_OUT;
73 }
74
75
76 static inline void scx200_gpio_change(unsigned index) {
77 __SCx200_GPIO_BANK;
78 __SCx200_GPIO_IOADDR;
79 __SCx200_GPIO_SHADOW;
80 __SCx200_GPIO_INDEX;
81 change_bit(index, shadow);
82 __SCx200_GPIO_OUT;
83 }
84
85 #undef __SCx200_GPIO_BANK
86 #undef __SCx200_GPIO_IOADDR
87 #undef __SCx200_GPIO_SHADOW
88 #undef __SCx200_GPIO_INDEX
89 #undef __SCx200_GPIO_OUT