tizen 2.4 release
[kernel/u-boot-tm1.git] / drivers / gpio / sc7710g2_gpio.c
1 #include "asm/arch/sci_types.h"
2 #include <asm/io.h>
3 #ifndef GPIO_BASE
4 #define         GPIO_BASE 0x8A000000    //Sunny, for SC8810
5 #endif
6
7 static void __raw_bits_and(unsigned int v, unsigned int a)
8 {
9         __raw_writel((__raw_readl(a) & v), a);
10 }
11
12 static void __raw_bits_or(unsigned int v, unsigned int a)
13 {
14           __raw_writel((__raw_readl(a) | v), a);
15 }
16
17 void gpio_direction_output(int PinNo, int OutIn)        //Sunny only for uBoot gpio ops
18 {
19         int addr, maskbit, n;
20         n = (PinNo)/16;
21         addr =GPIO_BASE +  0x0080 * n;
22         maskbit = PinNo%16;
23
24         __raw_bits_or((1<<5),  0x8B000008);     //GPIO register Enable
25         __raw_bits_or((1<<maskbit), addr + 4);  //Mask
26         if(OutIn)
27                 __raw_bits_or((1<<maskbit), addr + 8);  //Dir out
28         else    __raw_bits_and(~(1<<maskbit), addr+ 8); //Dir in
29 }
30
31 void gpio_set_value(int PinNo, int Level)       //Sunny only for uBoot gpio ops
32 {
33         int addr, maskbit, n;
34         n = (PinNo)/16;
35         addr =GPIO_BASE +  0x0080 * n;
36         maskbit = PinNo%16;
37
38         __raw_bits_or((1<<maskbit), addr + 4);  //Mask
39         if(Level)
40                 __raw_bits_or((1<<maskbit), addr);      //High
41         else    __raw_bits_and(~(1<<maskbit), addr);    //Low
42 }
43
44 int gpio_get_value(int PinNo)   //Sunny only for uBoot gpio ops
45 {
46         int addr, maskbit, n;
47         uint32 ret;
48         n = (PinNo)/16;
49         addr =GPIO_BASE +  0x0080 * n;
50         maskbit = PinNo%16;
51
52         ret = __raw_readl(addr);
53
54         if(ret & (1<<maskbit))
55                 return 1;
56         else    return 0;
57 }
58