9 #ifndef _ALCHEMY_GPIO_AU1000_H_
10 #define _ALCHEMY_GPIO_AU1000_H_
17 #define ALCHEMY_GPIO1_BASE 0
18 #define ALCHEMY_GPIO2_BASE 200
20 #define ALCHEMY_GPIO1_NUM 32
21 #define ALCHEMY_GPIO2_NUM 16
22 #define ALCHEMY_GPIO1_MAX (ALCHEMY_GPIO1_BASE + ALCHEMY_GPIO1_NUM - 1)
23 #define ALCHEMY_GPIO2_MAX (ALCHEMY_GPIO2_BASE + ALCHEMY_GPIO2_NUM - 1)
25 #define MAKE_IRQ(intc, off) (AU1000_INTC##intc##_INT_BASE + (off))
28 #define SYS_TRIOUTRD 0x100
29 #define SYS_TRIOUTCLR 0x100
30 #define SYS_OUTPUTRD 0x108
31 #define SYS_OUTPUTSET 0x108
32 #define SYS_OUTPUTCLR 0x10C
33 #define SYS_PINSTATERD 0x110
34 #define SYS_PININPUTEN 0x110
37 #define GPIO2_DIR 0x00
38 #define GPIO2_OUTPUT 0x08
39 #define GPIO2_PINSTATE 0x0C
40 #define GPIO2_INTENABLE 0x10
41 #define GPIO2_ENABLE 0x14
45 static inline int au1000_gpio1_to_irq(
int gpio)
50 static inline int au1000_gpio2_to_irq(
int gpio)
55 static inline int au1000_irq_to_gpio(
int irq)
63 static inline int au1500_gpio1_to_irq(
int gpio)
70 case 23 ... 28:
return MAKE_IRQ(1, gpio);
76 static inline int au1500_gpio2_to_irq(
int gpio)
81 case 0 ... 3:
return MAKE_IRQ(1, 16 + gpio - 0);
82 case 4 ... 5:
return MAKE_IRQ(1, 21 + gpio - 4);
83 case 6 ... 7:
return MAKE_IRQ(1, 29 + gpio - 6);
89 static inline int au1500_irq_to_gpio(
int irq)
109 static inline int au1100_gpio1_to_irq(
int gpio)
114 static inline int au1100_gpio2_to_irq(
int gpio)
118 if ((gpio >= 8) && (gpio <= 15))
124 static inline int au1100_irq_to_gpio(
int irq)
136 static inline int au1550_gpio1_to_irq(
int gpio)
142 case 20 ... 28:
return MAKE_IRQ(1, gpio);
143 case 16 ... 17:
return MAKE_IRQ(1, 18 + gpio - 16);
149 static inline int au1550_gpio2_to_irq(
int gpio)
155 case 1 ... 5:
return MAKE_IRQ(1, 17);
156 case 6 ... 7:
return MAKE_IRQ(1, 29 + gpio - 6);
157 case 8 ... 15:
return MAKE_IRQ(1, 31);
163 static inline int au1550_irq_to_gpio(
int irq)
180 static inline int au1200_gpio1_to_irq(
int gpio)
185 static inline int au1200_gpio2_to_irq(
int gpio)
190 case 0 ... 2:
return MAKE_IRQ(0, 5 + gpio - 0);
192 case 4 ... 7:
return MAKE_IRQ(0, 24 + gpio - 4);
193 case 8 ... 15:
return MAKE_IRQ(0, 28);
199 static inline int au1200_irq_to_gpio(
int irq)
218 static inline void alchemy_gpio1_set_value(
int gpio,
int v)
227 static inline int alchemy_gpio1_get_value(
int gpio)
234 static inline int alchemy_gpio1_direction_input(
int gpio)
243 static inline int alchemy_gpio1_direction_output(
int gpio,
int v)
248 alchemy_gpio1_set_value(gpio, v);
252 static inline int alchemy_gpio1_is_valid(
int gpio)
257 static inline int alchemy_gpio1_to_irq(
int gpio)
259 switch (alchemy_get_cputype()) {
261 return au1000_gpio1_to_irq(gpio);
263 return au1100_gpio1_to_irq(gpio);
265 return au1500_gpio1_to_irq(gpio);
267 return au1550_gpio1_to_irq(gpio);
269 return au1200_gpio1_to_irq(gpio);
278 static inline void __alchemy_gpio2_mod_dir(
int gpio,
int to_out)
292 static inline void alchemy_gpio2_set_value(
int gpio,
int v)
301 static inline int alchemy_gpio2_get_value(
int gpio)
307 static inline int alchemy_gpio2_direction_input(
int gpio)
311 __alchemy_gpio2_mod_dir(gpio, 0);
316 static inline int alchemy_gpio2_direction_output(
int gpio,
int v)
319 alchemy_gpio2_set_value(gpio, v);
321 __alchemy_gpio2_mod_dir(gpio, 1);
326 static inline int alchemy_gpio2_is_valid(
int gpio)
331 static inline int alchemy_gpio2_to_irq(
int gpio)
333 switch (alchemy_get_cputype()) {
335 return au1000_gpio2_to_irq(gpio);
337 return au1100_gpio2_to_irq(gpio);
339 return au1500_gpio2_to_irq(gpio);
341 return au1550_gpio2_to_irq(gpio);
343 return au1200_gpio2_to_irq(gpio);
352 static inline void __alchemy_gpio2_mod_int(
int gpio2,
int en)
386 static inline void alchemy_gpio2_enable_int(
int gpio2)
393 switch (alchemy_get_cputype()) {
400 __alchemy_gpio2_mod_int(gpio2, 1);
410 static inline void alchemy_gpio2_disable_int(
int gpio2)
417 switch (alchemy_get_cputype()) {
424 __alchemy_gpio2_mod_int(gpio2, 0);
434 static inline void alchemy_gpio2_enable(
void)
448 static inline void alchemy_gpio2_disable(
void)
460 static inline int alchemy_gpio_direction_input(
int gpio)
463 alchemy_gpio2_direction_input(gpio) :
464 alchemy_gpio1_direction_input(gpio);
467 static inline int alchemy_gpio_direction_output(
int gpio,
int v)
470 alchemy_gpio2_direction_output(gpio, v) :
471 alchemy_gpio1_direction_output(gpio, v);
474 static inline int alchemy_gpio_get_value(
int gpio)
477 alchemy_gpio2_get_value(gpio) :
478 alchemy_gpio1_get_value(gpio);
481 static inline void alchemy_gpio_set_value(
int gpio,
int v)
484 alchemy_gpio2_set_value(gpio, v);
486 alchemy_gpio1_set_value(gpio, v);
489 static inline int alchemy_gpio_is_valid(
int gpio)
492 alchemy_gpio2_is_valid(gpio) :
493 alchemy_gpio1_is_valid(gpio);
496 static inline int alchemy_gpio_cansleep(
int gpio)
501 static inline int alchemy_gpio_to_irq(
int gpio)
504 alchemy_gpio2_to_irq(gpio) :
505 alchemy_gpio1_to_irq(gpio);
508 static inline int alchemy_irq_to_gpio(
int irq)
510 switch (alchemy_get_cputype()) {
512 return au1000_irq_to_gpio(irq);
514 return au1100_irq_to_gpio(irq);
516 return au1500_irq_to_gpio(irq);
518 return au1550_irq_to_gpio(irq);
520 return au1200_irq_to_gpio(irq);
551 #ifndef CONFIG_GPIOLIB
553 #ifdef CONFIG_ALCHEMY_GPIOINT_AU1000
555 #ifndef CONFIG_ALCHEMY_GPIO_INDIRECT
559 return alchemy_gpio_direction_input(gpio);
564 return alchemy_gpio_direction_output(gpio, v);
569 return alchemy_gpio_get_value(gpio);
574 alchemy_gpio_set_value(gpio, v);
587 static inline int gpio_is_valid(
int gpio)
589 return alchemy_gpio_is_valid(gpio);
594 return alchemy_gpio_cansleep(gpio);
599 return alchemy_gpio_to_irq(gpio);
604 return alchemy_irq_to_gpio(irq);
613 unsigned long flags,
const char *
label)
623 static inline void gpio_free(
unsigned gpio)
636 static inline int gpio_export(
unsigned gpio,
bool direction_may_change)
641 static inline int gpio_export_link(
struct device *
dev,
const char *
name,
647 static inline int gpio_sysfs_set_active_low(
unsigned gpio,
int value)
652 static inline void gpio_unexport(
unsigned gpio)