| 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. |
| |
| |
| 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 |
| |
| |
| Headers |
| ------- |
| |
| See arch/arm/mach-s3c2410/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> |
| |
| The GPIO management functions are defined in the hardware |
| header arch/arm/mach-s3c2410/include/mach/hardware.h which can be |
| included by #include <mach/hardware.h> |
| |
| A useful amount of documentation can be found in the hardware |
| 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, |
| eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell |
| 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: |
| |
| s3c2410_gpio_cfgpin(S3C2410_GPA(0), S3C2410_GPA0_ADDR0); |
| s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1); |
| |
| 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: |
| |
| 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 |
| Copyright 2004 Ben Dooks, Simtec Electronics |