tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-sc9630 / gpio_phy.h
1 #ifndef __GPIO_PHY_H__
2 #define __GPIO_PHY_H__
3
4 #include <linux/types.h>
5
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)
11
12 enum gpio_section_type {
13     GPIO_SECTION_GPI = 0x0,
14     GPIO_SECTION_GPO,
15     GPIO_SECTION_GPIO,
16     GPIO_SECTION_INVALID
17 };
18
19
20 struct gpio_section
21 {
22     u32 page_base;
23     u32 page_size;
24     enum gpio_section_type  section_type;
25 };
26
27 enum gpio_die {
28         A_DIE = 0,
29         D_DIE = 1,
30 };
31
32 #define NR_D_DIE_GPIOS 10
33
34 /*
35         gpio is locate in Digital Die(D die) or Analog Die(A die),
36  */
37 static __inline int __get_gpio_die( u32 gpio)
38 {
39         if (gpio < NR_D_DIE_GPIOS)
40                 return A_DIE;
41         else if (gpio < GPIO_MAX_PIN_NUM)
42                 return D_DIE;
43         else {
44                 WARN(1, "wrong gpio %d\r\n", gpio);
45                 return -1;
46         }
47 }
48 static __inline u32 __get_base_addr (u32 gpio_id)
49 {
50     if (gpio_id < NR_D_DIE_GPIOS)
51     {
52        return ANA_GPIO_BASE;
53     }
54     return (gpio_id>>4) * 0x80 + (u32) GPIO_BASE;
55 }
56
57 static __inline u32 __get_bit_num (u32 gpio_id)
58 {
59     return (gpio_id & 0xF);
60 }
61 static __inline void gpio_reg_set (u32 reg_addr, int die, u32 value)
62 {
63 //  GPIO_DBG("set %s die reg:%x, value %x\r\n",
64 //                      (die == D_DIE) ? "D die" : "A die", reg_addr, value);
65     if (die == D_DIE) {
66         __raw_writel(value, reg_addr);
67     }
68     else
69     {
70         ANA_REG_SET (reg_addr,value);
71     }
72     return;
73 }
74
75 static __inline u32 gpio_reg_get (u32 reg_addr, int die)
76 {
77 //      GPIO_DBG("read %s die reg:%x\r\n",
78 //                      (die == D_DIE) ? "D die" : "A die", reg_addr);
79         if (die == D_DIE)
80                 return __raw_readl (reg_addr);
81         else
82                 return ANA_REG_GET (reg_addr);
83 }
84 static __inline void gpio_reg_and (u32 reg_addr, int die, u32 value)
85 {
86         if (die == D_DIE)
87                 __raw_bits_and(value, reg_addr);
88         else
89                 ANA_REG_AND (reg_addr,value);
90 }
91 static __inline void gpio_reg_or (u32 reg_addr, int die, u32 value)
92 {
93
94         if (die == D_DIE)
95                 __raw_bits_or(value, reg_addr);
96         else
97                 ANA_REG_OR (reg_addr,value);
98 }
99
100 struct gpio_section *gpio_get_section_table(u32 * table_size);
101
102 #endif
103