4 #include <linux/types.h>
6 //#include <mach/gpio.h>
7 //#include <mach/adi_hal_internal.h>
8 #include <asm/arch/adi_hal_internal.h>
9 #include <asm/arch/sprd_module_config.h>
10 #define GPIO_DBG(fmt...) printf(fmt)
12 enum gpio_section_type {
13 GPIO_SECTION_GPI = 0x0,
24 enum gpio_section_type section_type;
32 #define NR_D_DIE_GPIOS 10
35 gpio is locate in Digital Die(D die) or Analog Die(A die),
37 static __inline int __get_gpio_die( u32 gpio)
39 if (gpio < NR_D_DIE_GPIOS)
41 else if (gpio < GPIO_MAX_PIN_NUM)
44 WARN(1, "wrong gpio %d\r\n", gpio);
48 static __inline u32 __get_base_addr (u32 gpio_id)
50 if (gpio_id < NR_D_DIE_GPIOS)
54 return (gpio_id>>4) * 0x80 + (u32) GPIO_BASE;
57 static __inline u32 __get_bit_num (u32 gpio_id)
59 return (gpio_id & 0xF);
61 static __inline void gpio_reg_set (u32 reg_addr, int die, u32 value)
63 // GPIO_DBG("set %s die reg:%x, value %x\r\n",
64 // (die == D_DIE) ? "D die" : "A die", reg_addr, value);
66 __raw_writel(value, reg_addr);
70 ANA_REG_SET (reg_addr,value);
75 static __inline u32 gpio_reg_get (u32 reg_addr, int die)
77 // GPIO_DBG("read %s die reg:%x\r\n",
78 // (die == D_DIE) ? "D die" : "A die", reg_addr);
80 return __raw_readl (reg_addr);
82 return ANA_REG_GET (reg_addr);
84 static __inline void gpio_reg_and (u32 reg_addr, int die, u32 value)
87 __raw_bits_and(value, reg_addr);
89 ANA_REG_AND (reg_addr,value);
91 static __inline void gpio_reg_or (u32 reg_addr, int die, u32 value)
95 __raw_bits_or(value, reg_addr);
97 ANA_REG_OR (reg_addr,value);
100 struct gpio_section *gpio_get_section_table(u32 * table_size);