Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
| 16 | Headers |
| 17 | ------- |
| 18 | |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame^] | 19 | See arch/arm/mach-s3c2410/include/mach/regs-gpio.h for the list |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 20 | of GPIO pins, and the configuration values for them. This |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame^] | 21 | is included by using #include <mach/regs-gpio.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 22 | |
| 23 | The GPIO management functions are defined in the hardware |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame^] | 24 | header arch/arm/mach-s3c2410/include/mach/hardware.h which can be |
| 25 | included by #include <mach/hardware.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 26 | |
Matt LaPlante | 3f6dee9 | 2006-10-03 22:45:33 +0200 | [diff] [blame] | 27 | A useful amount of documentation can be found in the hardware |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 28 | header on how the GPIO functions (and others) work. |
| 29 | |
| 30 | Whilst a number of these functions do make some checks on what |
| 31 | is passed to them, for speed of use, they may not always ensure |
| 32 | that the user supplied data to them is correct. |
| 33 | |
| 34 | |
| 35 | PIN Numbers |
| 36 | ----------- |
| 37 | |
| 38 | Each pin has an unique number associated with it in regs-gpio.h, |
| 39 | eg S3C2410_GPA0 or S3C2410_GPF1. These defines are used to tell |
| 40 | the GPIO functions which pin is to be used. |
| 41 | |
| 42 | |
| 43 | Configuring a pin |
| 44 | ----------------- |
| 45 | |
| 46 | The following function allows the configuration of a given pin to |
| 47 | be changed. |
| 48 | |
| 49 | void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function); |
| 50 | |
| 51 | Eg: |
| 52 | |
| 53 | s3c2410_gpio_cfgpin(S3C2410_GPA0, S3C2410_GPA0_ADDR0); |
| 54 | s3c2410_gpio_cfgpin(S3C2410_GPE8, S3C2410_GPE8_SDDAT1); |
| 55 | |
| 56 | which would turn GPA0 into the lowest Address line A0, and set |
| 57 | GPE8 to be connected to the SDIO/MMC controller's SDDAT1 line. |
| 58 | |
| 59 | |
| 60 | Reading the current configuration |
| 61 | --------------------------------- |
| 62 | |
| 63 | The current configuration of a pin can be read by using: |
| 64 | |
| 65 | s3c2410_gpio_getcfg(unsigned int pin); |
| 66 | |
| 67 | The return value will be from the same set of values which can be |
| 68 | passed to s3c2410_gpio_cfgpin(). |
| 69 | |
| 70 | |
| 71 | Configuring a pull-up resistor |
| 72 | ------------------------------ |
| 73 | |
| 74 | A large proportion of the GPIO pins on the S3C2410 can have weak |
| 75 | pull-up resistors enabled. This can be configured by the following |
| 76 | function: |
| 77 | |
| 78 | void s3c2410_gpio_pullup(unsigned int pin, unsigned int to); |
| 79 | |
| 80 | Where the to value is zero to set the pull-up off, and 1 to enable |
| 81 | the specified pull-up. Any other values are currently undefined. |
| 82 | |
| 83 | |
| 84 | Getting the state of a PIN |
| 85 | -------------------------- |
| 86 | |
| 87 | The state of a pin can be read by using the function: |
| 88 | |
| 89 | unsigned int s3c2410_gpio_getpin(unsigned int pin); |
| 90 | |
| 91 | This will return either zero or non-zero. Do not count on this |
| 92 | function returning 1 if the pin is set. |
| 93 | |
| 94 | |
| 95 | Setting the state of a PIN |
| 96 | -------------------------- |
| 97 | |
| 98 | The value an pin is outputing can be modified by using the following: |
| 99 | |
| 100 | void s3c2410_gpio_setpin(unsigned int pin, unsigned int to); |
| 101 | |
| 102 | Which sets the given pin to the value. Use 0 to write 0, and 1 to |
| 103 | set the output to 1. |
| 104 | |
| 105 | |
| 106 | Getting the IRQ number associated with a PIN |
| 107 | -------------------------------------------- |
| 108 | |
| 109 | The following function can map the given pin number to an IRQ |
| 110 | number to pass to the IRQ system. |
| 111 | |
| 112 | int s3c2410_gpio_getirq(unsigned int pin); |
| 113 | |
| 114 | Note, not all pins have an IRQ. |
| 115 | |
| 116 | |
| 117 | Authour |
| 118 | ------- |
| 119 | |
| 120 | |
| 121 | Ben Dooks, 03 October 2004 |
| 122 | (c) 2004 Ben Dooks, Simtec Electronics |