4 #include <linux/types.h>
6 #include <asm/arch/io.h>
9 #include <asm/arch/gpio.h>
10 //#include <mach/adi_hal_internal.h>
11 #include <asm/arch/adi_hal_internal.h>
12 #include <asm/arch/sc8800g_module_config.h>
14 #define GPIO_DBG(fmt...) printf(fmt)
16 enum gpio_section_type {
17 GPIO_SECTION_GPI = 0x0,
28 enum gpio_section_type section_type;
36 #define NR_D_DIE_GPIOS 160
39 gpio is locate in Digital Die(D die) or Analog Die(A die),
41 static __inline int __get_gpio_die( u32 gpio)
43 if (gpio < NR_D_DIE_GPIOS)
45 else if (gpio < GPIO_MAX_PIN_NUM)
48 WARN(1, "wrong gpio %d\r\n", gpio);
52 static __inline u32 __get_base_addr (u32 gpio_id)
54 if (gpio_id >= NR_D_DIE_GPIOS)
56 return ( (gpio_id - NR_D_DIE_GPIOS) >>4) * 0x80 + ANA_GPIO_BASE;
59 return (gpio_id>>4) * 0x80 + (u32) GPIO_BASE;
62 static __inline u32 __get_bit_num (u32 gpio_id)
64 return (gpio_id & 0xF);
66 static __inline void gpio_reg_set (u32 reg_addr, int die, u32 value)
68 // GPIO_DBG("set %s die reg:%x, value %x\r\n",
69 // (die == D_DIE) ? "D die" : "A die", reg_addr, value);
71 __raw_writel(value, reg_addr);
75 ANA_REG_SET (reg_addr,value);
80 static __inline u32 gpio_reg_get (u32 reg_addr, int die)
82 // GPIO_DBG("read %s die reg:%x\r\n",
83 // (die == D_DIE) ? "D die" : "A die", reg_addr);
85 return __raw_readl (reg_addr);
87 return ANA_REG_GET (reg_addr);
89 static __inline void gpio_reg_and (u32 reg_addr, int die, u32 value)
92 __raw_bits_and(value, reg_addr);
94 ANA_REG_AND (reg_addr,value);
96 static __inline void gpio_reg_or (u32 reg_addr, int die, u32 value)
100 __raw_bits_or(value, reg_addr);
102 ANA_REG_OR (reg_addr,value);
105 struct gpio_section *gpio_get_section_table(u32 * table_size);