Changeset 29124


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

ar71xx: fix GPIO function handling on AR934x

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

    r29123 r29124  
    142142        void __iomem *base = ar71xx_gpio_base; 
    143143        unsigned long flags; 
    144  
    145         spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    146  
    147         __raw_writel(__raw_readl(base + AR71XX_GPIO_REG_FUNC) | mask, 
    148                      base + AR71XX_GPIO_REG_FUNC); 
     144        unsigned int reg; 
     145 
     146        if (ar71xx_soc == AR71XX_SOC_AR9341 || 
     147            ar71xx_soc == AR71XX_SOC_AR9342 || 
     148            ar71xx_soc == AR71XX_SOC_AR9344) { 
     149                reg = AR934X_GPIO_REG_FUNC; 
     150        } else { 
     151                reg = AR71XX_GPIO_REG_FUNC; 
     152        } 
     153 
     154        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
     155 
     156        __raw_writel(__raw_readl(base + reg) | mask, base + reg); 
    149157        /* flush write */ 
    150         (void) __raw_readl(base + AR71XX_GPIO_REG_FUNC); 
     158        (void) __raw_readl(base + reg); 
    151159 
    152160        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     
    157165        void __iomem *base = ar71xx_gpio_base; 
    158166        unsigned long flags; 
    159  
    160         spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    161  
    162         __raw_writel(__raw_readl(base + AR71XX_GPIO_REG_FUNC) & ~mask, 
    163                      base + AR71XX_GPIO_REG_FUNC); 
     167        unsigned int reg; 
     168 
     169        if (ar71xx_soc == AR71XX_SOC_AR9341 || 
     170            ar71xx_soc == AR71XX_SOC_AR9342 || 
     171            ar71xx_soc == AR71XX_SOC_AR9344) { 
     172                reg = AR934X_GPIO_REG_FUNC; 
     173        } else { 
     174                reg = AR71XX_GPIO_REG_FUNC; 
     175        } 
     176 
     177        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
     178 
     179        __raw_writel(__raw_readl(base + reg) & ~mask, base + reg); 
    164180        /* flush write */ 
    165         (void) __raw_readl(base + AR71XX_GPIO_REG_FUNC); 
     181        (void) __raw_readl(base + reg); 
    166182 
    167183        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
     
    172188        void __iomem *base = ar71xx_gpio_base; 
    173189        unsigned long flags; 
    174  
    175         spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
    176  
    177         __raw_writel((__raw_readl(base + AR71XX_GPIO_REG_FUNC) & ~clear) | set, 
    178                      base + AR71XX_GPIO_REG_FUNC); 
     190        unsigned int reg; 
     191 
     192        if (ar71xx_soc == AR71XX_SOC_AR9341 || 
     193            ar71xx_soc == AR71XX_SOC_AR9342 || 
     194            ar71xx_soc == AR71XX_SOC_AR9344) { 
     195                reg = AR934X_GPIO_REG_FUNC; 
     196        } else { 
     197                reg = AR71XX_GPIO_REG_FUNC; 
     198        } 
     199 
     200        spin_lock_irqsave(&ar71xx_gpio_lock, flags); 
     201 
     202        __raw_writel((__raw_readl(base + reg) & ~clear) | set, base + reg); 
    179203        /* flush write */ 
    180         (void) __raw_readl(base + AR71XX_GPIO_REG_FUNC); 
     204        (void) __raw_readl(base + reg); 
    181205 
    182206        spin_unlock_irqrestore(&ar71xx_gpio_lock, flags); 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r29123 r29124  
    430430#define AR71XX_GPIO_REG_INT_ENABLE      0x24 
    431431#define AR71XX_GPIO_REG_FUNC            0x28 
     432 
     433#define AR934X_GPIO_REG_FUNC            0x6c 
    432434 
    433435#define AR71XX_GPIO_FUNC_STEREO_EN      BIT(17) 
Note: See TracChangeset for help on using the changeset viewer.