Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'gpio/merge' of git://git.secretlab.ca/git/linux-2.6

* 'gpio/merge' of git://git.secretlab.ca/git/linux-2.6:
gpio: pca953x: propagate the errno from the chip_init functions
gpio: pca953x: remove unneeded check for chip type
gpio/omap: check return value from irq_alloc_generic_chip
gpio/omap: replace MOD_REG_BIT macro with static inline

+38 -32
+34 -25
drivers/gpio/gpio-omap.c
··· 148 148 return (__raw_readl(reg) & GPIO_BIT(bank, gpio)) != 0; 149 149 } 150 150 151 - #define MOD_REG_BIT(reg, bit_mask, set) \ 152 - do { \ 153 - int l = __raw_readl(base + reg); \ 154 - if (set) l |= bit_mask; \ 155 - else l &= ~bit_mask; \ 156 - __raw_writel(l, base + reg); \ 157 - } while(0) 151 + static inline void _gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set) 152 + { 153 + int l = __raw_readl(base + reg); 154 + 155 + if (set) 156 + l |= mask; 157 + else 158 + l &= ~mask; 159 + 160 + __raw_writel(l, base + reg); 161 + } 158 162 159 163 /** 160 164 * _set_gpio_debounce - low level gpio debounce time ··· 214 210 u32 gpio_bit = 1 << gpio; 215 211 216 212 if (cpu_is_omap44xx()) { 217 - MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT0, gpio_bit, 218 - trigger & IRQ_TYPE_LEVEL_LOW); 219 - MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT1, gpio_bit, 220 - trigger & IRQ_TYPE_LEVEL_HIGH); 221 - MOD_REG_BIT(OMAP4_GPIO_RISINGDETECT, gpio_bit, 222 - trigger & IRQ_TYPE_EDGE_RISING); 223 - MOD_REG_BIT(OMAP4_GPIO_FALLINGDETECT, gpio_bit, 224 - trigger & IRQ_TYPE_EDGE_FALLING); 213 + _gpio_rmw(base, OMAP4_GPIO_LEVELDETECT0, gpio_bit, 214 + trigger & IRQ_TYPE_LEVEL_LOW); 215 + _gpio_rmw(base, OMAP4_GPIO_LEVELDETECT1, gpio_bit, 216 + trigger & IRQ_TYPE_LEVEL_HIGH); 217 + _gpio_rmw(base, OMAP4_GPIO_RISINGDETECT, gpio_bit, 218 + trigger & IRQ_TYPE_EDGE_RISING); 219 + _gpio_rmw(base, OMAP4_GPIO_FALLINGDETECT, gpio_bit, 220 + trigger & IRQ_TYPE_EDGE_FALLING); 225 221 } else { 226 - MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit, 227 - trigger & IRQ_TYPE_LEVEL_LOW); 228 - MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit, 229 - trigger & IRQ_TYPE_LEVEL_HIGH); 230 - MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit, 231 - trigger & IRQ_TYPE_EDGE_RISING); 232 - MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit, 233 - trigger & IRQ_TYPE_EDGE_FALLING); 222 + _gpio_rmw(base, OMAP24XX_GPIO_LEVELDETECT0, gpio_bit, 223 + trigger & IRQ_TYPE_LEVEL_LOW); 224 + _gpio_rmw(base, OMAP24XX_GPIO_LEVELDETECT1, gpio_bit, 225 + trigger & IRQ_TYPE_LEVEL_HIGH); 226 + _gpio_rmw(base, OMAP24XX_GPIO_RISINGDETECT, gpio_bit, 227 + trigger & IRQ_TYPE_EDGE_RISING); 228 + _gpio_rmw(base, OMAP24XX_GPIO_FALLINGDETECT, gpio_bit, 229 + trigger & IRQ_TYPE_EDGE_FALLING); 234 230 } 235 231 if (likely(!(bank->non_wakeup_gpios & gpio_bit))) { 236 232 if (cpu_is_omap44xx()) { 237 - MOD_REG_BIT(OMAP4_GPIO_IRQWAKEN0, gpio_bit, 238 - trigger != 0); 233 + _gpio_rmw(base, OMAP4_GPIO_IRQWAKEN0, gpio_bit, 234 + trigger != 0); 239 235 } else { 240 236 /* 241 237 * GPIO wakeup request can only be generated on edge ··· 1090 1086 1091 1087 gc = irq_alloc_generic_chip("MPUIO", 1, irq_start, bank->base, 1092 1088 handle_simple_irq); 1089 + if (!gc) { 1090 + dev_err(bank->dev, "Memory alloc failed for gc\n"); 1091 + return; 1092 + } 1093 + 1093 1094 ct = gc->chip_types; 1094 1095 1095 1096 /* NOTE: No ack required, reading IRQ status clears it. */
+4 -7
drivers/gpio/gpio-pca953x.c
··· 596 596 597 597 /* set platform specific polarity inversion */ 598 598 ret = pca953x_write_reg(chip, PCA953X_INVERT, invert); 599 - if (ret) 600 - goto out; 601 - return 0; 602 599 out: 603 600 return ret; 604 601 } ··· 637 640 struct pca953x_platform_data *pdata; 638 641 struct pca953x_chip *chip; 639 642 int irq_base=0, invert=0; 640 - int ret = 0; 643 + int ret; 641 644 642 645 chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL); 643 646 if (chip == NULL) ··· 670 673 pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK); 671 674 672 675 if (chip->chip_type == PCA953X_TYPE) 673 - device_pca953x_init(chip, invert); 674 - else if (chip->chip_type == PCA957X_TYPE) 675 - device_pca957x_init(chip, invert); 676 + ret = device_pca953x_init(chip, invert); 676 677 else 678 + ret = device_pca957x_init(chip, invert); 679 + if (ret) 677 680 goto out_failed; 678 681 679 682 ret = pca953x_irq_setup(chip, id, irq_base);