Blame view

kernel/linux-imx6_3.14.28/Documentation/arm/Samsung-S3C24XX/GPIO.txt 5.48 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
  			S3C24XX GPIO Control
  			====================
  
  Introduction
  ------------
  
    The s3c2410 kernel provides an interface to configure and
    manipulate the state of the GPIO pins, and find out other
    information about them.
  
    There are a number of conditions attached to the configuration
    of the s3c2410 GPIO system, please read the Samsung provided
    data-sheet/users manual to find out the complete list.
  
    See Documentation/arm/Samsung/GPIO.txt for the core implementation.
  
  
  GPIOLIB
  -------
  
    With the event of the GPIOLIB in drivers/gpio, support for some
    of the GPIO functions such as reading and writing a pin will
    be removed in favour of this common access method.
  
    Once all the extant drivers have been converted, the functions
    listed below will be removed (they may be marked as __deprecated
    in the near future).
  
    The following functions now either have a s3c_ specific variant
    or are merged into gpiolib. See the definitions in
    arch/arm/plat-samsung/include/plat/gpio-cfg.h:
  
    s3c2410_gpio_setpin()		gpio_set_value() or gpio_direction_output()
    s3c2410_gpio_getpin()		gpio_get_value() or gpio_direction_input()
    s3c2410_gpio_getirq()		gpio_to_irq()
    s3c2410_gpio_cfgpin()		s3c_gpio_cfgpin()
    s3c2410_gpio_getcfg()		s3c_gpio_getcfg()
    s3c2410_gpio_pullup()		s3c_gpio_setpull()
  
  
  GPIOLIB conversion
  ------------------
  
  If you need to convert your board or driver to use gpiolib from the phased
  out s3c2410 API, then here are some notes on the process.
  
  1) If your board is exclusively using an GPIO, say to control peripheral
     power, then it will require to claim the gpio with gpio_request() before
     it can use it.
  
     It is recommended to check the return value, with at least WARN_ON()
     during initialisation.
  
  2) The s3c2410_gpio_cfgpin() can be directly replaced with s3c_gpio_cfgpin()
     as they have the same arguments, and can either take the pin specific
     values, or the more generic special-function-number arguments.
  
  3) s3c2410_gpio_pullup() changes have the problem that whilst the
     s3c2410_gpio_pullup(x, 1) can be easily translated to the
     s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)
     are not so easy.
  
     The s3c2410_gpio_pullup(x, 0) case enables the pull-up (or in the case
     of some of the devices, a pull-down) and as such the new API distinguishes
     between the UP and DOWN case. There is currently no 'just turn on' setting
     which may be required if this becomes a problem.
  
  4) s3c2410_gpio_setpin() can be replaced by gpio_set_value(), the old call
     does not implicitly configure the relevant gpio to output. The gpio
     direction should be changed before using gpio_set_value().
  
  5) s3c2410_gpio_getpin() is replaceable by gpio_get_value() if the pin
     has been set to input. It is currently unknown what the behaviour is
     when using gpio_get_value() on an output pin (s3c2410_gpio_getpin
     would return the value the pin is supposed to be outputting).
  
  6) s3c2410_gpio_getirq() should be directly replaceable with the
     gpio_to_irq() call.
  
  The s3c2410_gpio and gpio_ calls have always operated on the same gpio
  numberspace, so there is no problem with converting the gpio numbering
  between the calls.
  
  
  Headers
  -------
  
    See arch/arm/mach-s3c24xx/include/mach/regs-gpio.h for the list
    of GPIO pins, and the configuration values for them. This
    is included by using #include <mach/regs-gpio.h>
  
  
  PIN Numbers
  -----------
  
    Each pin has an unique number associated with it in regs-gpio.h,
    e.g. S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
    the GPIO functions which pin is to be used.
  
    With the conversion to gpiolib, there is no longer a direct conversion
    from gpio pin number to register base address as in earlier kernels. This
    is due to the number space required for newer SoCs where the later
    GPIOs are not contiguous.
  
  
  Configuring a pin
  -----------------
  
    The following function allows the configuration of a given pin to
    be changed.
  
      void s3c_gpio_cfgpin(unsigned int pin, unsigned int function);
  
    e.g.:
  
       s3c_gpio_cfgpin(S3C2410_GPA(0), S3C_GPIO_SFN(1));
       s3c_gpio_cfgpin(S3C2410_GPE(8), S3C_GPIO_SFN(2));
  
     which would turn GPA(0) into the lowest Address line A0, and set
     GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.
  
  
  Reading the current configuration
  ---------------------------------
  
    The current configuration of a pin can be read by using standard
    gpiolib function:
  
    s3c_gpio_getcfg(unsigned int pin);
  
    The return value will be from the same set of values which can be
    passed to s3c_gpio_cfgpin().
  
  
  Configuring a pull-up resistor
  ------------------------------
  
    A large proportion of the GPIO pins on the S3C2410 can have weak
    pull-up resistors enabled. This can be configured by the following
    function:
  
      void s3c_gpio_setpull(unsigned int pin, unsigned int to);
  
    Where the to value is S3C_GPIO_PULL_NONE to set the pull-up off,
    and S3C_GPIO_PULL_UP to enable the specified pull-up. Any other
    values are currently undefined.
  
  
  Getting and setting the state of a PIN
  --------------------------------------
  
    These calls are now implemented by the relevant gpiolib calls, convert
    your board or driver to use gpiolib.
  
  
  Getting the IRQ number associated with a PIN
  --------------------------------------------
  
    A standard gpiolib function can map the given pin number to an IRQ
    number to pass to the IRQ system.
  
     int gpio_to_irq(unsigned int pin);
  
    Note, not all pins have an IRQ.
  
  
  Author
  -------
  
  Ben Dooks, 03 October 2004
  Copyright 2004 Ben Dooks, Simtec Electronics