Changeset 20242


Ignore:
Timestamp:
2010-03-16T15:02:31+01:00 (8 years ago)
Author:
juhosg
Message:

ar71xx: optimize GPIO code

File:
1 edited

Legend:

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

    r20053 r20242  
    2828void __ar71xx_gpio_set_value(unsigned gpio, int value) 
    2929{ 
    30         unsigned long flags; 
    31  
    32         spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
     30        void __iomem *base = ar71xx_gpio_base; 
    3331 
    3432        if (value) 
    35                 ar71xx_gpio_wr(GPIO_REG_SET, (1 << gpio)); 
     33                __raw_writel(1 << gpio, base + GPIO_REG_SET); 
    3634        else 
    37                 ar71xx_gpio_wr(GPIO_REG_CLEAR, (1 << gpio)); 
    38  
    39         spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     35                __raw_writel(1 << gpio, base + GPIO_REG_CLEAR); 
    4036} 
    4137EXPORT_SYMBOL(__ar71xx_gpio_set_value); 
     
    4339int __ar71xx_gpio_get_value(unsigned gpio) 
    4440{ 
    45         return (ar71xx_gpio_rr(GPIO_REG_IN) & (1 << gpio)) ? 1 : 0; 
     41        return !!(__raw_readl(ar71xx_gpio_base + GPIO_REG_IN) & (1 << gpio)); 
    4642} 
    4743EXPORT_SYMBOL(__ar71xx_gpio_get_value); 
     
    6157                                       unsigned offset) 
    6258{ 
     59        void __iomem *base = ar71xx_gpio_base; 
    6360        unsigned long flags; 
    6461 
    6562        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    6663 
    67         ar71xx_gpio_wr(GPIO_REG_OE, 
    68                         ar71xx_gpio_rr(GPIO_REG_OE) & ~(1 << offset)); 
     64        __raw_writel(__raw_readl(base + GPIO_REG_OE) & ~(1 << offset), 
     65                     base + GPIO_REG_OE); 
    6966 
    7067        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     
    7673                                        unsigned offset, int value) 
    7774{ 
     75        void __iomem *base = ar71xx_gpio_base; 
    7876        unsigned long flags; 
    7977 
     
    8179 
    8280        if (value) 
    83                 ar71xx_gpio_wr(GPIO_REG_SET, (1 << offset)); 
     81                __raw_writel(1 << offset, base + GPIO_REG_SET); 
    8482        else 
    85                 ar71xx_gpio_wr(GPIO_REG_CLEAR, (1 << offset)); 
     83                __raw_writel(1 << offset, base + GPIO_REG_CLEAR); 
    8684 
    87         ar71xx_gpio_wr(GPIO_REG_OE, 
    88                         ar71xx_gpio_rr(GPIO_REG_OE) | (1 << offset)); 
     85        __raw_writel(__raw_readl(base + GPIO_REG_OE) | (1 << offset), 
     86                     base + GPIO_REG_OE); 
    8987 
    9088        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     
    105103void ar71xx_gpio_function_enable(u32 mask) 
    106104{ 
     105        void __iomem *base = ar71xx_gpio_base; 
    107106        unsigned long flags; 
    108107 
    109108        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    110109 
    111         ar71xx_gpio_wr(GPIO_REG_FUNC, ar71xx_gpio_rr(GPIO_REG_FUNC) | mask); 
     110        __raw_writel(__raw_readl(base + GPIO_REG_FUNC) | mask, 
     111                     base + GPIO_REG_FUNC); 
    112112        /* flush write */ 
    113         (void) ar71xx_gpio_rr(GPIO_REG_FUNC); 
     113        (void) __raw_readl(base + GPIO_REG_FUNC); 
    114114 
    115115        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     
    118118void ar71xx_gpio_function_disable(u32 mask) 
    119119{ 
     120        void __iomem *base = ar71xx_gpio_base; 
    120121        unsigned long flags; 
    121122 
    122123        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    123124 
    124         ar71xx_gpio_wr(GPIO_REG_FUNC, ar71xx_gpio_rr(GPIO_REG_FUNC) & ~mask); 
     125        __raw_writel(__raw_readl(base + GPIO_REG_FUNC) & ~mask, 
     126                     base + GPIO_REG_FUNC); 
    125127        /* flush write */ 
    126         (void) ar71xx_gpio_rr(GPIO_REG_FUNC); 
     128        (void) __raw_readl(base + GPIO_REG_FUNC); 
    127129 
    128130        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     
    131133void ar71xx_gpio_function_setup(u32 set, u32 clear) 
    132134{ 
     135        void __iomem *base = ar71xx_gpio_base; 
    133136        unsigned long flags; 
    134137 
    135138        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    136139 
    137         ar71xx_gpio_wr(GPIO_REG_FUNC, 
    138                        (ar71xx_gpio_rr(GPIO_REG_FUNC) & ~clear) | set); 
     140        __raw_writel((__raw_readl(base + GPIO_REG_FUNC) & ~clear) | set, 
     141                     base + GPIO_REG_FUNC); 
    139142        /* flush write */ 
    140         (void) ar71xx_gpio_rr(GPIO_REG_FUNC); 
     143        (void) __raw_readl(base + GPIO_REG_FUNC); 
    141144 
    142145        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
Note: See TracChangeset for help on using the changeset viewer.