-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: 6155/1: nomadik-gpio: add pin configuration API
Add a pin configuration API to all pin-related configuration to be specified with a single macro and groups of pins to be configured at one go. Based on the PXA MFP implementation. Cc: Alessandro Rubini <rubini@unipv.it> Acked-by: Linus Walleij <linus.walleij@stericsson.com> Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Rabin Vincent
authored and
Russell King
committed
Jun 16, 2010
1 parent
6f9a974
commit 378be06
Showing
2 changed files
with
168 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* | ||
* Copyright (C) ST-Ericsson SA 2010 | ||
* | ||
* License terms: GNU General Public License, version 2 | ||
* Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson | ||
* | ||
* Based on arch/arm/mach-pxa/include/mach/mfp.h: | ||
* Copyright (C) 2007 Marvell International Ltd. | ||
* eric miao <eric.miao@marvell.com> | ||
*/ | ||
|
||
#ifndef __PLAT_PINCFG_H | ||
#define __PLAT_PINCFG_H | ||
|
||
/* | ||
* pin configurations are represented by 32-bit integers: | ||
* | ||
* bit 0.. 8 - Pin Number (512 Pins Maximum) | ||
* bit 9..10 - Alternate Function Selection | ||
* bit 11..12 - Pull up/down state | ||
* bit 13 - Sleep mode behaviour | ||
* | ||
* to facilitate the definition, the following macros are provided | ||
* | ||
* PIN_CFG_DEFAULT - default config (0): | ||
* pull up/down = disabled | ||
* sleep mode = input | ||
* | ||
* PIN_CFG - default config with alternate function | ||
* PIN_CFG_PULL - default config with alternate function and pull up/down | ||
*/ | ||
|
||
typedef unsigned long pin_cfg_t; | ||
|
||
#define PIN_NUM_MASK 0x1ff | ||
#define PIN_NUM(x) ((x) & PIN_NUM_MASK) | ||
|
||
#define PIN_ALT_SHIFT 9 | ||
#define PIN_ALT_MASK (0x3 << PIN_ALT_SHIFT) | ||
#define PIN_ALT(x) (((x) & PIN_ALT_MASK) >> PIN_ALT_SHIFT) | ||
#define PIN_GPIO (NMK_GPIO_ALT_GPIO << PIN_ALT_SHIFT) | ||
#define PIN_ALT_A (NMK_GPIO_ALT_A << PIN_ALT_SHIFT) | ||
#define PIN_ALT_B (NMK_GPIO_ALT_B << PIN_ALT_SHIFT) | ||
#define PIN_ALT_C (NMK_GPIO_ALT_C << PIN_ALT_SHIFT) | ||
|
||
#define PIN_PULL_SHIFT 11 | ||
#define PIN_PULL_MASK (0x3 << PIN_PULL_SHIFT) | ||
#define PIN_PULL(x) (((x) & PIN_PULL_MASK) >> PIN_PULL_SHIFT) | ||
#define PIN_PULL_NONE (NMK_GPIO_PULL_NONE << PIN_PULL_SHIFT) | ||
#define PIN_PULL_UP (NMK_GPIO_PULL_UP << PIN_PULL_SHIFT) | ||
#define PIN_PULL_DOWN (NMK_GPIO_PULL_DOWN << PIN_PULL_SHIFT) | ||
|
||
#define PIN_SLPM_SHIFT 13 | ||
#define PIN_SLPM_MASK (0x1 << PIN_SLPM_SHIFT) | ||
#define PIN_SLPM(x) (((x) & PIN_SLPM_MASK) >> PIN_SLPM_SHIFT) | ||
#define PIN_SLPM_INPUT (NMK_GPIO_SLPM_INPUT << PIN_SLPM_SHIFT) | ||
#define PIN_SLPM_NOCHANGE (NMK_GPIO_SLPM_NOCHANGE << PIN_SLPM_SHIFT) | ||
|
||
#define PIN_CFG_DEFAULT (PIN_PULL_NONE | PIN_SLPM_INPUT) | ||
|
||
#define PIN_CFG(num, alt) \ | ||
(PIN_CFG_DEFAULT |\ | ||
(PIN_NUM(num) | PIN_##alt)) | ||
|
||
#define PIN_CFG_PULL(num, alt, pull) \ | ||
((PIN_CFG_DEFAULT & ~PIN_PULL_MASK) |\ | ||
(PIN_NUM(num) | PIN_##alt | PIN_PULL_##pull)) | ||
|
||
extern int nmk_config_pin(pin_cfg_t cfg); | ||
extern int nmk_config_pins(pin_cfg_t *cfgs, int num); | ||
|
||
#endif |