Commit 80f01ca1fce2d5045b98f01989017767339b8700

Authored by Linus Torvalds

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

Showing 2 changed files Side-by-side Diff

drivers/gpio/gpio-omap.c
... ... @@ -148,14 +148,18 @@
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);
158 154  
  155 + if (set)
  156 + l |= mask;
  157 + else
  158 + l &= ~mask;
  159 +
  160 + __raw_writel(l, base + reg);
  161 +}
  162 +
159 163 /**
160 164 * _set_gpio_debounce - low level gpio debounce time
161 165 * @bank: the gpio bank we're acting upon
162 166  
163 167  
... ... @@ -210,28 +214,28 @@
210 214 u32 gpio_bit = 1 << gpio;
211 215  
212 216 if (cpu_is_omap44xx()) {
213   - MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT0, gpio_bit,
214   - trigger & IRQ_TYPE_LEVEL_LOW);
215   - MOD_REG_BIT(OMAP4_GPIO_LEVELDETECT1, gpio_bit,
216   - trigger & IRQ_TYPE_LEVEL_HIGH);
217   - MOD_REG_BIT(OMAP4_GPIO_RISINGDETECT, gpio_bit,
218   - trigger & IRQ_TYPE_EDGE_RISING);
219   - MOD_REG_BIT(OMAP4_GPIO_FALLINGDETECT, gpio_bit,
220   - trigger & IRQ_TYPE_EDGE_FALLING);
  217 + _gpio_rmw(base, OMAP4_GPIO_LEVELDETECT0, gpio_bit,
  218 + trigger & IRQ_TYPE_LEVEL_LOW);
  219 + _gpio_rmw(base, OMAP4_GPIO_LEVELDETECT1, gpio_bit,
  220 + trigger & IRQ_TYPE_LEVEL_HIGH);
  221 + _gpio_rmw(base, OMAP4_GPIO_RISINGDETECT, gpio_bit,
  222 + trigger & IRQ_TYPE_EDGE_RISING);
  223 + _gpio_rmw(base, OMAP4_GPIO_FALLINGDETECT, gpio_bit,
  224 + trigger & IRQ_TYPE_EDGE_FALLING);
221 225 } else {
222   - MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT0, gpio_bit,
223   - trigger & IRQ_TYPE_LEVEL_LOW);
224   - MOD_REG_BIT(OMAP24XX_GPIO_LEVELDETECT1, gpio_bit,
225   - trigger & IRQ_TYPE_LEVEL_HIGH);
226   - MOD_REG_BIT(OMAP24XX_GPIO_RISINGDETECT, gpio_bit,
227   - trigger & IRQ_TYPE_EDGE_RISING);
228   - MOD_REG_BIT(OMAP24XX_GPIO_FALLINGDETECT, gpio_bit,
229   - trigger & IRQ_TYPE_EDGE_FALLING);
  226 + _gpio_rmw(base, OMAP24XX_GPIO_LEVELDETECT0, gpio_bit,
  227 + trigger & IRQ_TYPE_LEVEL_LOW);
  228 + _gpio_rmw(base, OMAP24XX_GPIO_LEVELDETECT1, gpio_bit,
  229 + trigger & IRQ_TYPE_LEVEL_HIGH);
  230 + _gpio_rmw(base, OMAP24XX_GPIO_RISINGDETECT, gpio_bit,
  231 + trigger & IRQ_TYPE_EDGE_RISING);
  232 + _gpio_rmw(base, OMAP24XX_GPIO_FALLINGDETECT, gpio_bit,
  233 + trigger & IRQ_TYPE_EDGE_FALLING);
230 234 }
231 235 if (likely(!(bank->non_wakeup_gpios & gpio_bit))) {
232 236 if (cpu_is_omap44xx()) {
233   - MOD_REG_BIT(OMAP4_GPIO_IRQWAKEN0, gpio_bit,
234   - trigger != 0);
  237 + _gpio_rmw(base, OMAP4_GPIO_IRQWAKEN0, gpio_bit,
  238 + trigger != 0);
235 239 } else {
236 240 /*
237 241 * GPIO wakeup request can only be generated on edge
... ... @@ -1086,6 +1090,11 @@
1086 1090  
1087 1091 gc = irq_alloc_generic_chip("MPUIO", 1, irq_start, bank->base,
1088 1092 handle_simple_irq);
  1093 + if (!gc) {
  1094 + dev_err(bank->dev, "Memory alloc failed for gc\n");
  1095 + return;
  1096 + }
  1097 +
1089 1098 ct = gc->chip_types;
1090 1099  
1091 1100 /* NOTE: No ack required, reading IRQ status clears it. */
drivers/gpio/gpio-pca953x.c
... ... @@ -596,9 +596,6 @@
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 }
... ... @@ -640,7 +637,7 @@
640 637 struct pca953x_platform_data *pdata;
641 638 struct pca953x_chip *chip;
642 639 int irq_base=0, invert=0;
643   - int ret = 0;
  640 + int ret;
644 641  
645 642 chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
646 643 if (chip == NULL)
647 644  
... ... @@ -673,10 +670,10 @@
673 670 pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
674 671  
675 672 if (chip->chip_type == PCA953X_TYPE)
676   - device_pca953x_init(chip, invert);
677   - else if (chip->chip_type == PCA957X_TYPE)
678   - device_pca957x_init(chip, invert);
  673 + ret = device_pca953x_init(chip, invert);
679 674 else
  675 + ret = device_pca957x_init(chip, invert);
  676 + if (ret)
680 677 goto out_failed;
681 678  
682 679 ret = pca953x_irq_setup(chip, id, irq_base);