1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-11-27 19:03:08 +02:00

ar71xx: add a function for selecting output signal on a given GPIO pin

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29125 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg 2011-11-14 17:43:14 +00:00
parent 95684215c0
commit 8f09b983e5
2 changed files with 38 additions and 0 deletions

View File

@ -207,6 +207,37 @@ void ar71xx_gpio_function_setup(u32 set, u32 clear)
} }
EXPORT_SYMBOL(ar71xx_gpio_function_setup); EXPORT_SYMBOL(ar71xx_gpio_function_setup);
void __init ar71xx_gpio_output_select(unsigned gpio, u8 val)
{
void __iomem *base = ar71xx_gpio_base;
unsigned long flags;
unsigned int reg;
u32 t, s;
if (ar71xx_soc != AR71XX_SOC_AR9341 &&
ar71xx_soc != AR71XX_SOC_AR9342 &&
ar71xx_soc != AR71XX_SOC_AR9344)
return;
if (gpio >= AR934X_GPIO_COUNT)
return;
reg = AR934X_GPIO_REG_OUT_FUNC0 + 4 * (gpio / 4);
s = 8 * (gpio % 4);
spin_lock_irqsave(&ar71xx_gpio_lock, flags);
t = __raw_readl(base + reg);
t &= ~(0xff << s);
t |= val << s;
__raw_writel(t, base + reg);
/* flush write */
(void) __raw_readl(base + reg);
spin_unlock_irqrestore(&ar71xx_gpio_lock, flags);
}
void __init ar71xx_gpio_init(void) void __init ar71xx_gpio_init(void)
{ {
int err; int err;

View File

@ -430,6 +430,12 @@ static inline u32 ar71xx_usb_ctrl_rr(unsigned reg)
#define AR71XX_GPIO_REG_INT_ENABLE 0x24 #define AR71XX_GPIO_REG_INT_ENABLE 0x24
#define AR71XX_GPIO_REG_FUNC 0x28 #define AR71XX_GPIO_REG_FUNC 0x28
#define AR934X_GPIO_REG_OUT_FUNC0 0x2c
#define AR934X_GPIO_REG_OUT_FUNC1 0x30
#define AR934X_GPIO_REG_OUT_FUNC2 0x34
#define AR934X_GPIO_REG_OUT_FUNC3 0x38
#define AR934X_GPIO_REG_OUT_FUNC4 0x3c
#define AR934X_GPIO_REG_OUT_FUNC5 0x40
#define AR934X_GPIO_REG_FUNC 0x6c #define AR934X_GPIO_REG_FUNC 0x6c
#define AR71XX_GPIO_FUNC_STEREO_EN BIT(17) #define AR71XX_GPIO_FUNC_STEREO_EN BIT(17)
@ -499,6 +505,7 @@ void ar71xx_gpio_init(void) __init;
void ar71xx_gpio_function_enable(u32 mask); void ar71xx_gpio_function_enable(u32 mask);
void ar71xx_gpio_function_disable(u32 mask); void ar71xx_gpio_function_disable(u32 mask);
void ar71xx_gpio_function_setup(u32 set, u32 clear); void ar71xx_gpio_function_setup(u32 set, u32 clear);
void ar71xx_gpio_output_select(unsigned gpio, u8 val);
/* /*
* DDR_CTRL block * DDR_CTRL block