| /* | 
 |  * File:         Documentation/blackfin/bfin-gpio-notes.txt | 
 |  * Based on: | 
 |  * Author: | 
 |  * | 
 |  * Created:      $Id: bfin-gpio-note.txt 2008-11-24 16:42 grafyang $ | 
 |  * Description:  This file contains the notes in developing/using bfin-gpio. | 
 |  * | 
 |  * | 
 |  * Rev: | 
 |  * | 
 |  * Modified: | 
 |  *               Copyright 2004-2008 Analog Devices Inc. | 
 |  * | 
 |  * Bugs:         Enter bugs at http://blackfin.uclinux.org/ | 
 |  * | 
 |  */ | 
 |  | 
 |  | 
 | 1. Blackfin GPIO introduction | 
 |  | 
 |     There are many GPIO pins on Blackfin. Most of these pins are muxed to | 
 |     multi-functions. They can be configured as peripheral, or just as GPIO, | 
 |     configured to input with interrupt enabled, or output. | 
 |  | 
 |     For detailed information, please see "arch/blackfin/kernel/bfin_gpio.c", | 
 |     or the relevant HRM. | 
 |  | 
 |  | 
 | 2. Avoiding resource conflict | 
 |  | 
 |     Followed function groups are used to avoiding resource conflict, | 
 |     - Use the pin as peripheral, | 
 | 	int peripheral_request(unsigned short per, const char *label); | 
 | 	int peripheral_request_list(const unsigned short per[], const char *label); | 
 | 	void peripheral_free(unsigned short per); | 
 | 	void peripheral_free_list(const unsigned short per[]); | 
 |     - Use the pin as GPIO, | 
 | 	int bfin_gpio_request(unsigned gpio, const char *label); | 
 | 	void bfin_gpio_free(unsigned gpio); | 
 |     - Use the pin as GPIO interrupt, | 
 | 	int bfin_gpio_irq_request(unsigned gpio, const char *label); | 
 | 	void bfin_gpio_irq_free(unsigned gpio); | 
 |  | 
 |     The request functions will record the function state for a certain pin, | 
 |     the free functions will clear its function state. | 
 |     Once a pin is requested, it can't be requested again before it is freed by | 
 |     previous caller, otherwise kernel will dump stacks, and the request | 
 |     function fail. | 
 |     These functions are wrapped by other functions, most of the users need not | 
 |     care. | 
 |  | 
 |  | 
 | 3. But there are some exceptions | 
 |     - Kernel permit the identical GPIO be requested both as GPIO and GPIO | 
 |     interrupt. | 
 |     Some drivers, like gpio-keys, need this behavior. Kernel only print out | 
 |     warning messages like, | 
 | 	bfin-gpio: GPIO 24 is already reserved by gpio-keys: BTN0, and you are | 
 | configuring it as IRQ! | 
 |  | 
 |         Note: Consider the case that, if there are two drivers need the | 
 | 	identical GPIO, one of them use it as GPIO, the other use it as | 
 | 	GPIO interrupt. This will really cause resource conflict. So if | 
 | 	there is any abnormal driver behavior, please check the bfin-gpio | 
 | 	warning messages. | 
 |  | 
 |     - Kernel permit the identical GPIO be requested from the same driver twice. | 
 |  | 
 |  | 
 |  |