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