]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | S3C2410 GPIO Control |
2 | ==================== | |
3 | ||
4 | Introduction | |
5 | ------------ | |
6 | ||
7 | The s3c2410 kernel provides an interface to configure and | |
8 | manipulate the state of the GPIO pins, and find out other | |
9 | information about them. | |
10 | ||
11 | There are a number of conditions attached to the configuration | |
12 | of the s3c2410 GPIO system, please read the Samsung provided | |
13 | data-sheet/users manual to find out the complete list. | |
14 | ||
15 | ||
f47c32f3 BD |
16 | GPIOLIB |
17 | ------- | |
18 | ||
19 | With the event of the GPIOLIB in drivers/gpio, support for some | |
20 | of the GPIO functions such as reading and writing a pin will | |
21 | be removed in favour of this common access method. | |
22 | ||
23 | Once all the extant drivers have been converted, the functions | |
24 | listed below will be removed (they may be marked as __deprecated | |
25 | in the near future). | |
26 | ||
70f5c9a4 BD |
27 | The following functions now either have a s3c_ specific variant |
28 | or are merged into gpiolib. See the definitions in | |
29 | arch/arm/plat-samsung/include/plat/gpio-cfg.h: | |
30 | ||
31 | s3c2410_gpio_setpin() gpio_set_value() or gpio_direction_output() | |
32 | s3c2410_gpio_getpin() gpio_get_value() or gpio_direction_input() | |
33 | s3c2410_gpio_getirq() gpio_to_irq() | |
34 | s3c2410_gpio_cfgpin() s3c_gpio_cfgpin() | |
35 | s3c2410_gpio_getcfg() s3c_gpio_getcfg() | |
36 | s3c2410_gpio_pullup() s3c_gpio_setpull() | |
f47c32f3 BD |
37 | |
38 | ||
1da177e4 LT |
39 | Headers |
40 | ------- | |
41 | ||
a09e64fb | 42 | See arch/arm/mach-s3c2410/include/mach/regs-gpio.h for the list |
1da177e4 | 43 | of GPIO pins, and the configuration values for them. This |
a09e64fb | 44 | is included by using #include <mach/regs-gpio.h> |
1da177e4 LT |
45 | |
46 | The GPIO management functions are defined in the hardware | |
a09e64fb RK |
47 | header arch/arm/mach-s3c2410/include/mach/hardware.h which can be |
48 | included by #include <mach/hardware.h> | |
1da177e4 | 49 | |
3f6dee9b | 50 | A useful amount of documentation can be found in the hardware |
1da177e4 LT |
51 | header on how the GPIO functions (and others) work. |
52 | ||
53 | Whilst a number of these functions do make some checks on what | |
54 | is passed to them, for speed of use, they may not always ensure | |
55 | that the user supplied data to them is correct. | |
56 | ||
57 | ||
58 | PIN Numbers | |
59 | ----------- | |
60 | ||
61 | Each pin has an unique number associated with it in regs-gpio.h, | |
070276d5 | 62 | eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell |
1da177e4 LT |
63 | the GPIO functions which pin is to be used. |
64 | ||
70f5c9a4 BD |
65 | With the conversion to gpiolib, there is no longer a direct conversion |
66 | from gpio pin number to register base address as in earlier kernels. This | |
67 | is due to the number space required for newer SoCs where the later | |
68 | GPIOs are not contiguous. | |
69 | ||
1da177e4 LT |
70 | |
71 | Configuring a pin | |
72 | ----------------- | |
73 | ||
74 | The following function allows the configuration of a given pin to | |
75 | be changed. | |
76 | ||
77 | void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function); | |
78 | ||
79 | Eg: | |
80 | ||
070276d5 BD |
81 | s3c2410_gpio_cfgpin(S3C2410_GPA(0), S3C2410_GPA0_ADDR0); |
82 | s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1); | |
1da177e4 | 83 | |
070276d5 BD |
84 | which would turn GPA(0) into the lowest Address line A0, and set |
85 | GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line. | |
1da177e4 | 86 | |
70f5c9a4 BD |
87 | The s3c_gpio_cfgpin() call is a functional replacement for this call. |
88 | ||
1da177e4 LT |
89 | |
90 | Reading the current configuration | |
91 | --------------------------------- | |
92 | ||
93 | The current configuration of a pin can be read by using: | |
94 | ||
95 | s3c2410_gpio_getcfg(unsigned int pin); | |
96 | ||
97 | The return value will be from the same set of values which can be | |
98 | passed to s3c2410_gpio_cfgpin(). | |
99 | ||
70f5c9a4 BD |
100 | The s3c_gpio_getcfg() call should be a functional replacement for |
101 | this call. | |
102 | ||
1da177e4 LT |
103 | |
104 | Configuring a pull-up resistor | |
105 | ------------------------------ | |
106 | ||
107 | A large proportion of the GPIO pins on the S3C2410 can have weak | |
108 | pull-up resistors enabled. This can be configured by the following | |
109 | function: | |
110 | ||
111 | void s3c2410_gpio_pullup(unsigned int pin, unsigned int to); | |
112 | ||
113 | Where the to value is zero to set the pull-up off, and 1 to enable | |
114 | the specified pull-up. Any other values are currently undefined. | |
115 | ||
70f5c9a4 BD |
116 | The s3c_gpio_setpull() offers similar functionality, but with the |
117 | ability to encode whether the pull is up or down. Currently there | |
118 | is no 'just on' state, so up or down must be selected. | |
119 | ||
1da177e4 LT |
120 | |
121 | Getting the state of a PIN | |
122 | -------------------------- | |
123 | ||
124 | The state of a pin can be read by using the function: | |
125 | ||
126 | unsigned int s3c2410_gpio_getpin(unsigned int pin); | |
127 | ||
128 | This will return either zero or non-zero. Do not count on this | |
129 | function returning 1 if the pin is set. | |
130 | ||
70f5c9a4 BD |
131 | This call is now implemented by the relevant gpiolib calls, convert |
132 | your board or driver to use gpiolib. | |
133 | ||
1da177e4 LT |
134 | |
135 | Setting the state of a PIN | |
136 | -------------------------- | |
137 | ||
138 | The value an pin is outputing can be modified by using the following: | |
139 | ||
140 | void s3c2410_gpio_setpin(unsigned int pin, unsigned int to); | |
141 | ||
142 | Which sets the given pin to the value. Use 0 to write 0, and 1 to | |
143 | set the output to 1. | |
144 | ||
70f5c9a4 BD |
145 | This call is now implemented by the relevant gpiolib calls, convert |
146 | your board or driver to use gpiolib. | |
147 | ||
1da177e4 LT |
148 | |
149 | Getting the IRQ number associated with a PIN | |
150 | -------------------------------------------- | |
151 | ||
152 | The following function can map the given pin number to an IRQ | |
153 | number to pass to the IRQ system. | |
154 | ||
155 | int s3c2410_gpio_getirq(unsigned int pin); | |
156 | ||
157 | Note, not all pins have an IRQ. | |
158 | ||
70f5c9a4 BD |
159 | This call is now implemented by the relevant gpiolib calls, convert |
160 | your board or driver to use gpiolib. | |
161 | ||
1da177e4 LT |
162 | |
163 | Authour | |
164 | ------- | |
165 | ||
166 | ||
167 | Ben Dooks, 03 October 2004 | |
50f430e3 | 168 | Copyright 2004 Ben Dooks, Simtec Electronics |