Changeset 29125


Ignore:
Timestamp:
2011-11-14T18:43:14+01:00 (6 years ago)
Author:
juhosg
Message:

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

Location:
trunk/target/linux/ar71xx/files/arch/mips
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/gpio.c

    r29124 r29125  
    208208EXPORT_SYMBOL(ar71xx_gpio_function_setup); 
    209209 
     210void __init ar71xx_gpio_output_select(unsigned gpio, u8 val) 
     211{ 
     212        void __iomem *base = ar71xx_gpio_base; 
     213        unsigned long flags; 
     214        unsigned int reg; 
     215        u32 t, s; 
     216 
     217        if (ar71xx_soc != AR71XX_SOC_AR9341 && 
     218            ar71xx_soc != AR71XX_SOC_AR9342 && 
     219            ar71xx_soc != AR71XX_SOC_AR9344) 
     220                return; 
     221 
     222        if (gpio >= AR934X_GPIO_COUNT) 
     223                return; 
     224 
     225        reg = AR934X_GPIO_REG_OUT_FUNC0 + 4 * (gpio / 4); 
     226        s = 8 * (gpio % 4); 
     227 
     228        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
     229 
     230        t = __raw_readl(base + reg); 
     231        t &= ~(0xff << s); 
     232        t |= val << s; 
     233        __raw_writel(t, base + reg); 
     234 
     235        /* flush write */ 
     236        (void) __raw_readl(base + reg); 
     237 
     238        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     239} 
     240 
    210241void __init ar71xx_gpio_init(void) 
    211242{ 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r29124 r29125  
    431431#define AR71XX_GPIO_REG_FUNC            0x28 
    432432 
     433#define AR934X_GPIO_REG_OUT_FUNC0       0x2c 
     434#define AR934X_GPIO_REG_OUT_FUNC1       0x30 
     435#define AR934X_GPIO_REG_OUT_FUNC2       0x34 
     436#define AR934X_GPIO_REG_OUT_FUNC3       0x38 
     437#define AR934X_GPIO_REG_OUT_FUNC4       0x3c 
     438#define AR934X_GPIO_REG_OUT_FUNC5       0x40 
    433439#define AR934X_GPIO_REG_FUNC            0x6c 
    434440 
     
    500506void ar71xx_gpio_function_disable(u32 mask); 
    501507void ar71xx_gpio_function_setup(u32 set, u32 clear); 
     508void ar71xx_gpio_output_select(unsigned gpio, u8 val); 
    502509 
    503510/* 
Note: See TracChangeset for help on using the changeset viewer.