| /* | |
| * 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. | |