Path: blob/master/Documentation/arm/Samsung-S3C24XX/GPIO.txt
10823 views
S3C2410 GPIO Control1====================23Introduction4------------56The s3c2410 kernel provides an interface to configure and7manipulate the state of the GPIO pins, and find out other8information about them.910There are a number of conditions attached to the configuration11of the s3c2410 GPIO system, please read the Samsung provided12data-sheet/users manual to find out the complete list.1314See Documentation/arm/Samsung/GPIO.txt for the core implemetation.151617GPIOLIB18-------1920With the event of the GPIOLIB in drivers/gpio, support for some21of the GPIO functions such as reading and writing a pin will22be removed in favour of this common access method.2324Once all the extant drivers have been converted, the functions25listed below will be removed (they may be marked as __deprecated26in the near future).2728The following functions now either have a s3c_ specific variant29or are merged into gpiolib. See the definitions in30arch/arm/plat-samsung/include/plat/gpio-cfg.h:3132s3c2410_gpio_setpin() gpio_set_value() or gpio_direction_output()33s3c2410_gpio_getpin() gpio_get_value() or gpio_direction_input()34s3c2410_gpio_getirq() gpio_to_irq()35s3c2410_gpio_cfgpin() s3c_gpio_cfgpin()36s3c2410_gpio_getcfg() s3c_gpio_getcfg()37s3c2410_gpio_pullup() s3c_gpio_setpull()383940GPIOLIB conversion41------------------4243If you need to convert your board or driver to use gpiolib from the exiting44s3c2410 api, then here are some notes on the process.45461) If your board is exclusively using an GPIO, say to control peripheral47power, then it will require to claim the gpio with gpio_request() before48it can use it.4950It is recommended to check the return value, with at least WARN_ON()51during initialisation.52532) The s3c2410_gpio_cfgpin() can be directly replaced with s3c_gpio_cfgpin()54as they have the same arguments, and can either take the pin specific55values, or the more generic special-function-number arguments.56573) s3c2410_gpio_pullup() changs have the problem that whilst the58s3c2410_gpio_pullup(x, 1) can be easily translated to the59s3c_gpio_setpull(x, S3C_GPIO_PULL_NONE), the s3c2410_gpio_pullup(x, 0)60are not so easy.6162The s3c2410_gpio_pullup(x, 0) case enables the pull-up (or in the case63of some of the devices, a pull-down) and as such the new API distinguishes64between the UP and DOWN case. There is currently no 'just turn on' setting65which may be required if this becomes a problem.66674) s3c2410_gpio_setpin() can be replaced by gpio_set_value(), the old call68does not implicitly configure the relevant gpio to output. The gpio69direction should be changed before using gpio_set_value().70715) s3c2410_gpio_getpin() is replaceable by gpio_get_value() if the pin72has been set to input. It is currently unknown what the behaviour is73when using gpio_get_value() on an output pin (s3c2410_gpio_getpin74would return the value the pin is supposed to be outputting).75766) s3c2410_gpio_getirq() should be directly replacable with the77gpio_to_irq() call.7879The s3c2410_gpio and gpio_ calls have always operated on the same gpio80numberspace, so there is no problem with converting the gpio numbering81between the calls.828384Headers85-------8687See arch/arm/mach-s3c2410/include/mach/regs-gpio.h for the list88of GPIO pins, and the configuration values for them. This89is included by using #include <mach/regs-gpio.h>9091The GPIO management functions are defined in the hardware92header arch/arm/mach-s3c2410/include/mach/hardware.h which can be93included by #include <mach/hardware.h>9495A useful amount of documentation can be found in the hardware96header on how the GPIO functions (and others) work.9798Whilst a number of these functions do make some checks on what99is passed to them, for speed of use, they may not always ensure100that the user supplied data to them is correct.101102103PIN Numbers104-----------105106Each pin has an unique number associated with it in regs-gpio.h,107eg S3C2410_GPA(0) or S3C2410_GPF(1). These defines are used to tell108the GPIO functions which pin is to be used.109110With the conversion to gpiolib, there is no longer a direct conversion111from gpio pin number to register base address as in earlier kernels. This112is due to the number space required for newer SoCs where the later113GPIOs are not contiguous.114115116Configuring a pin117-----------------118119The following function allows the configuration of a given pin to120be changed.121122void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function);123124Eg:125126s3c2410_gpio_cfgpin(S3C2410_GPA(0), S3C2410_GPA0_ADDR0);127s3c2410_gpio_cfgpin(S3C2410_GPE(8), S3C2410_GPE8_SDDAT1);128129which would turn GPA(0) into the lowest Address line A0, and set130GPE(8) to be connected to the SDIO/MMC controller's SDDAT1 line.131132The s3c_gpio_cfgpin() call is a functional replacement for this call.133134135Reading the current configuration136---------------------------------137138The current configuration of a pin can be read by using:139140s3c2410_gpio_getcfg(unsigned int pin);141142The return value will be from the same set of values which can be143passed to s3c2410_gpio_cfgpin().144145The s3c_gpio_getcfg() call should be a functional replacement for146this call.147148149Configuring a pull-up resistor150------------------------------151152A large proportion of the GPIO pins on the S3C2410 can have weak153pull-up resistors enabled. This can be configured by the following154function:155156void s3c2410_gpio_pullup(unsigned int pin, unsigned int to);157158Where the to value is zero to set the pull-up off, and 1 to enable159the specified pull-up. Any other values are currently undefined.160161The s3c_gpio_setpull() offers similar functionality, but with the162ability to encode whether the pull is up or down. Currently there163is no 'just on' state, so up or down must be selected.164165166Getting the state of a PIN167--------------------------168169The state of a pin can be read by using the function:170171unsigned int s3c2410_gpio_getpin(unsigned int pin);172173This will return either zero or non-zero. Do not count on this174function returning 1 if the pin is set.175176This call is now implemented by the relevant gpiolib calls, convert177your board or driver to use gpiolib.178179180Setting the state of a PIN181--------------------------182183The value an pin is outputing can be modified by using the following:184185void s3c2410_gpio_setpin(unsigned int pin, unsigned int to);186187Which sets the given pin to the value. Use 0 to write 0, and 1 to188set the output to 1.189190This call is now implemented by the relevant gpiolib calls, convert191your board or driver to use gpiolib.192193194Getting the IRQ number associated with a PIN195--------------------------------------------196197The following function can map the given pin number to an IRQ198number to pass to the IRQ system.199200int s3c2410_gpio_getirq(unsigned int pin);201202Note, not all pins have an IRQ.203204This call is now implemented by the relevant gpiolib calls, convert205your board or driver to use gpiolib.206207208Authour209-------210211212Ben Dooks, 03 October 2004213Copyright 2004 Ben Dooks, Simtec Electronics214215216