2005-04-17 06:20:36 +08:00
|
|
|
S3C2410 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.
|
|
|
|
|
|
|
|
|
2008-08-09 04:22:40 +08:00
|
|
|
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).
|
|
|
|
|
|
|
|
- s3c2410_gpio_getpin
|
|
|
|
- s3c2410_gpio_setpin
|
|
|
|
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
Headers
|
|
|
|
-------
|
|
|
|
|
2008-08-05 23:14:15 +08:00
|
|
|
See arch/arm/mach-s3c2410/include/mach/regs-gpio.h for the list
|
2005-04-17 06:20:36 +08:00
|
|
|
of GPIO pins, and the configuration values for them. This
|
2008-08-05 23:14:15 +08:00
|
|
|
is included by using #include <mach/regs-gpio.h>
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
The GPIO management functions are defined in the hardware
|
2008-08-05 23:14:15 +08:00
|
|
|
header arch/arm/mach-s3c2410/include/mach/hardware.h which can be
|
|
|
|
included by #include <mach/hardware.h>
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2006-10-04 04:45:33 +08:00
|
|
|
A useful amount of documentation can be found in the hardware
|
2005-04-17 06:20:36 +08:00
|
|
|
header on how the GPIO functions (and others) work.
|
|
|
|
|
|
|
|
Whilst a number of these functions do make some checks on what
|
|
|
|
is passed to them, for speed of use, they may not always ensure
|
|
|
|
that the user supplied data to them is correct.
|
|
|
|
|
|
|
|
|
|
|
|
PIN Numbers
|
|
|
|
-----------
|
|
|
|
|
|
|
|
Each pin has an unique number associated with it in regs-gpio.h,
|
2009-05-18 05:32:23 +08:00
|
|
|
eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell
|
2005-04-17 06:20:36 +08:00
|
|
|
the GPIO functions which pin is to be used.
|
|
|
|
|
|
|
|
|
|
|
|
Configuring a pin
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
The following function allows the configuration of a given pin to
|
|
|
|
be changed.
|
|
|
|
|
|
|
|
void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);
|
|
|
|
|
|
|
|
Eg:
|
|
|
|
|
2009-05-18 05:32:23 +08:00
|
|
|
s3c2410_gpio_cfgpin(S3C2410_GPA(0), S3C2410_GPA0_ADDR0);
|
|
|
|
s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1);
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-05-18 05:32:23 +08:00
|
|
|
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.
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
Reading the current configuration
|
|
|
|
---------------------------------
|
|
|
|
|
|
|
|
The current configuration of a pin can be read by using:
|
|
|
|
|
|
|
|
s3c2410_gpio_getcfg(unsigned int pin);
|
|
|
|
|
|
|
|
The return value will be from the same set of values which can be
|
|
|
|
passed to s3c2410_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 s3c2410_gpio_pullup(unsigned int pin, unsigned int to);
|
|
|
|
|
|
|
|
Where the to value is zero to set the pull-up off, and 1 to enable
|
|
|
|
the specified pull-up. Any other values are currently undefined.
|
|
|
|
|
|
|
|
|
|
|
|
Getting the state of a PIN
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
The state of a pin can be read by using the function:
|
|
|
|
|
|
|
|
unsigned int s3c2410_gpio_getpin(unsigned int pin);
|
|
|
|
|
|
|
|
This will return either zero or non-zero. Do not count on this
|
|
|
|
function returning 1 if the pin is set.
|
|
|
|
|
|
|
|
|
|
|
|
Setting the state of a PIN
|
|
|
|
--------------------------
|
|
|
|
|
|
|
|
The value an pin is outputing can be modified by using the following:
|
|
|
|
|
|
|
|
void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);
|
|
|
|
|
|
|
|
Which sets the given pin to the value. Use 0 to write 0, and 1 to
|
|
|
|
set the output to 1.
|
|
|
|
|
|
|
|
|
|
|
|
Getting the IRQ number associated with a PIN
|
|
|
|
--------------------------------------------
|
|
|
|
|
|
|
|
The following function can map the given pin number to an IRQ
|
|
|
|
number to pass to the IRQ system.
|
|
|
|
|
|
|
|
int s3c2410_gpio_getirq(unsigned int pin);
|
|
|
|
|
|
|
|
Note, not all pins have an IRQ.
|
|
|
|
|
|
|
|
|
|
|
|
Authour
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
|
|
Ben Dooks, 03 October 2004
|
|
|
|
(c) 2004 Ben Dooks, Simtec Electronics
|