aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-omap.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-01-21 12:40:46 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-21 13:09:12 -0500
commit8e5096607280d4e103389bfe8f8b7decbf538ff6 (patch)
tree60352a466e96c7b36d41263d7590ee79e0aaff35 /drivers/gpio/gpio-omap.c
parent02d0a752460ea5dab34ce36c9ddc9c682e846a0d (diff)
parentde755c330512364d3396c7da0c20b1c20b3b08b2 (diff)
Merge tag 'gpio-v3.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull GPIO tree bulk changes from Linus Walleij: "A big set this merge window, as we have much going on in this subsystem. The changes to other subsystems (notably a slew of ARM machines as I am doing away with their custom APIs) have all been ACKed to the extent possible. Major changes this time: - Some core improvements and cleanups to the new GPIO descriptor API. This seems to be working now so we can start the exodus to this API, moving gradually away from the global GPIO numberspace. - Incremental improvements to the ACPI GPIO core, and move the few GPIO ACPI clients we have to the GPIO descriptor API right *now* before we go any further. We actually managed to contain this *before* we started to litter the kernel with yet another hackish global numberspace for the ACPI GPIOs, which is a big win. - The RFkill GPIO driver and all platforms using it have been migrated to use the GPIO descriptors rather than fixed number assignments. Tegra machine has been migrated as part of this. - New drivers for MOXA ART, Xtensa GPIO32 and SMSC SCH311x. Those should be really good examples of how I expect a nice GPIO driver to look these days. - Do away with custom GPIO implementations on a major part of the ARM machines: ks8695, lpc32xx, mv78xx0. Make a first step towards the same in the horribly convoluted Samsung S3C include forest. We expect to continue to clean this up as we move forward. - Flag GPIO lines used for IRQ on adnp, bcm-kona, em, intel-mid and lynxpoint. This makes the GPIOlib core aware that a certain GPIO line is used for IRQs and can then enforce some semantics such as disallowing a GPIO line marked as in use for IRQ to be switched to output mode. - Drop all use of irq_set_chip_and_handler_name(). The name provided in these cases were just unhelpful tags like "mux" or "demux". - Extend the MCP23s08 driver to handle interrupts. - Minor incremental improvements for rcar, lynxpoint, em 74x164 and msm drivers. - Some non-urgent bug fixes here and there, duplicate #includes and that usual kind of cleanups" Fix up broken Kconfig file manually to make this all compile. * tag 'gpio-v3.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (71 commits) gpio: mcp23s08: fix casting caused build warning gpio: mcp23s08: depend on OF_GPIO gpio: mcp23s08: Add irq functionality for i2c chips ARM: S5P[v210|c100|64x0]: Fix build error gpio: pxa: clamp gpio get value to [0,1] ARM: s3c24xx: explicit dependency on <plat/gpio-cfg.h> ARM: S3C[24|64]xx: move includes back under <mach/> scope Documentation / ACPI: update to GPIO descriptor API gpio / ACPI: get rid of acpi_gpio.h gpio / ACPI: register to ACPI events automatically mmc: sdhci-acpi: convert to use GPIO descriptor API ARM: s3c24xx: fix build error gpio: f7188x: set can_sleep attribute gpio: samsung: Update documentation gpio: samsung: Remove hardware.h inclusion gpio: xtensa: depend on HAVE_XTENSA_GPIO32 gpio: clps711x: Enable driver compilation with COMPILE_TEST gpio: clps711x: Use of_match_ptr() net: rfkill: gpio: convert to descriptor-based GPIO interface leds: s3c24xx: Fix build failure ...
Diffstat (limited to 'drivers/gpio/gpio-omap.c')
-rw-r--r--drivers/gpio/gpio-omap.c188
1 files changed, 94 insertions, 94 deletions
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index f319c9ffd4a8..424319061e09 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -108,12 +108,12 @@ static void _set_gpio_direction(struct gpio_bank *bank, int gpio, int is_input)
108 u32 l; 108 u32 l;
109 109
110 reg += bank->regs->direction; 110 reg += bank->regs->direction;
111 l = __raw_readl(reg); 111 l = readl_relaxed(reg);
112 if (is_input) 112 if (is_input)
113 l |= 1 << gpio; 113 l |= 1 << gpio;
114 else 114 else
115 l &= ~(1 << gpio); 115 l &= ~(1 << gpio);
116 __raw_writel(l, reg); 116 writel_relaxed(l, reg);
117 bank->context.oe = l; 117 bank->context.oe = l;
118} 118}
119 119
@@ -132,7 +132,7 @@ static void _set_gpio_dataout_reg(struct gpio_bank *bank, int gpio, int enable)
132 bank->context.dataout &= ~l; 132 bank->context.dataout &= ~l;
133 } 133 }
134 134
135 __raw_writel(l, reg); 135 writel_relaxed(l, reg);
136} 136}
137 137
138/* set data out value using mask register */ 138/* set data out value using mask register */
@@ -142,12 +142,12 @@ static void _set_gpio_dataout_mask(struct gpio_bank *bank, int gpio, int enable)
142 u32 gpio_bit = GPIO_BIT(bank, gpio); 142 u32 gpio_bit = GPIO_BIT(bank, gpio);
143 u32 l; 143 u32 l;
144 144
145 l = __raw_readl(reg); 145 l = readl_relaxed(reg);
146 if (enable) 146 if (enable)
147 l |= gpio_bit; 147 l |= gpio_bit;
148 else 148 else
149 l &= ~gpio_bit; 149 l &= ~gpio_bit;
150 __raw_writel(l, reg); 150 writel_relaxed(l, reg);
151 bank->context.dataout = l; 151 bank->context.dataout = l;
152} 152}
153 153
@@ -155,26 +155,26 @@ static int _get_gpio_datain(struct gpio_bank *bank, int offset)
155{ 155{
156 void __iomem *reg = bank->base + bank->regs->datain; 156 void __iomem *reg = bank->base + bank->regs->datain;
157 157
158 return (__raw_readl(reg) & (1 << offset)) != 0; 158 return (readl_relaxed(reg) & (1 << offset)) != 0;
159} 159}
160 160
161static int _get_gpio_dataout(struct gpio_bank *bank, int offset) 161static int _get_gpio_dataout(struct gpio_bank *bank, int offset)
162{ 162{
163 void __iomem *reg = bank->base + bank->regs->dataout; 163 void __iomem *reg = bank->base + bank->regs->dataout;
164 164
165 return (__raw_readl(reg) & (1 << offset)) != 0; 165 return (readl_relaxed(reg) & (1 << offset)) != 0;
166} 166}
167 167
168static inline void _gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set) 168static inline void _gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set)
169{ 169{
170 int l = __raw_readl(base + reg); 170 int l = readl_relaxed(base + reg);
171 171
172 if (set) 172 if (set)
173 l |= mask; 173 l |= mask;
174 else 174 else
175 l &= ~mask; 175 l &= ~mask;
176 176
177 __raw_writel(l, base + reg); 177 writel_relaxed(l, base + reg);
178} 178}
179 179
180static inline void _gpio_dbck_enable(struct gpio_bank *bank) 180static inline void _gpio_dbck_enable(struct gpio_bank *bank)
@@ -183,7 +183,7 @@ static inline void _gpio_dbck_enable(struct gpio_bank *bank)
183 clk_enable(bank->dbck); 183 clk_enable(bank->dbck);
184 bank->dbck_enabled = true; 184 bank->dbck_enabled = true;
185 185
186 __raw_writel(bank->dbck_enable_mask, 186 writel_relaxed(bank->dbck_enable_mask,
187 bank->base + bank->regs->debounce_en); 187 bank->base + bank->regs->debounce_en);
188 } 188 }
189} 189}
@@ -196,7 +196,7 @@ static inline void _gpio_dbck_disable(struct gpio_bank *bank)
196 * enabled but the clock is not, GPIO module seems to be unable 196 * enabled but the clock is not, GPIO module seems to be unable
197 * to detect events and generate interrupts at least on OMAP3. 197 * to detect events and generate interrupts at least on OMAP3.
198 */ 198 */
199 __raw_writel(0, bank->base + bank->regs->debounce_en); 199 writel_relaxed(0, bank->base + bank->regs->debounce_en);
200 200
201 clk_disable(bank->dbck); 201 clk_disable(bank->dbck);
202 bank->dbck_enabled = false; 202 bank->dbck_enabled = false;
@@ -233,10 +233,10 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
233 233
234 clk_enable(bank->dbck); 234 clk_enable(bank->dbck);
235 reg = bank->base + bank->regs->debounce; 235 reg = bank->base + bank->regs->debounce;
236 __raw_writel(debounce, reg); 236 writel_relaxed(debounce, reg);
237 237
238 reg = bank->base + bank->regs->debounce_en; 238 reg = bank->base + bank->regs->debounce_en;
239 val = __raw_readl(reg); 239 val = readl_relaxed(reg);
240 240
241 if (debounce) 241 if (debounce)
242 val |= l; 242 val |= l;
@@ -244,7 +244,7 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
244 val &= ~l; 244 val &= ~l;
245 bank->dbck_enable_mask = val; 245 bank->dbck_enable_mask = val;
246 246
247 __raw_writel(val, reg); 247 writel_relaxed(val, reg);
248 clk_disable(bank->dbck); 248 clk_disable(bank->dbck);
249 /* 249 /*
250 * Enable debounce clock per module. 250 * Enable debounce clock per module.
@@ -283,12 +283,12 @@ static void _clear_gpio_debounce(struct gpio_bank *bank, unsigned gpio)
283 283
284 bank->dbck_enable_mask &= ~gpio_bit; 284 bank->dbck_enable_mask &= ~gpio_bit;
285 bank->context.debounce_en &= ~gpio_bit; 285 bank->context.debounce_en &= ~gpio_bit;
286 __raw_writel(bank->context.debounce_en, 286 writel_relaxed(bank->context.debounce_en,
287 bank->base + bank->regs->debounce_en); 287 bank->base + bank->regs->debounce_en);
288 288
289 if (!bank->dbck_enable_mask) { 289 if (!bank->dbck_enable_mask) {
290 bank->context.debounce = 0; 290 bank->context.debounce = 0;
291 __raw_writel(bank->context.debounce, bank->base + 291 writel_relaxed(bank->context.debounce, bank->base +
292 bank->regs->debounce); 292 bank->regs->debounce);
293 clk_disable(bank->dbck); 293 clk_disable(bank->dbck);
294 bank->dbck_enabled = false; 294 bank->dbck_enabled = false;
@@ -311,18 +311,18 @@ static inline void set_gpio_trigger(struct gpio_bank *bank, int gpio,
311 trigger & IRQ_TYPE_EDGE_FALLING); 311 trigger & IRQ_TYPE_EDGE_FALLING);
312 312
313 bank->context.leveldetect0 = 313 bank->context.leveldetect0 =
314 __raw_readl(bank->base + bank->regs->leveldetect0); 314 readl_relaxed(bank->base + bank->regs->leveldetect0);
315 bank->context.leveldetect1 = 315 bank->context.leveldetect1 =
316 __raw_readl(bank->base + bank->regs->leveldetect1); 316 readl_relaxed(bank->base + bank->regs->leveldetect1);
317 bank->context.risingdetect = 317 bank->context.risingdetect =
318 __raw_readl(bank->base + bank->regs->risingdetect); 318 readl_relaxed(bank->base + bank->regs->risingdetect);
319 bank->context.fallingdetect = 319 bank->context.fallingdetect =
320 __raw_readl(bank->base + bank->regs->fallingdetect); 320 readl_relaxed(bank->base + bank->regs->fallingdetect);
321 321
322 if (likely(!(bank->non_wakeup_gpios & gpio_bit))) { 322 if (likely(!(bank->non_wakeup_gpios & gpio_bit))) {
323 _gpio_rmw(base, bank->regs->wkup_en, gpio_bit, trigger != 0); 323 _gpio_rmw(base, bank->regs->wkup_en, gpio_bit, trigger != 0);
324 bank->context.wake_en = 324 bank->context.wake_en =
325 __raw_readl(bank->base + bank->regs->wkup_en); 325 readl_relaxed(bank->base + bank->regs->wkup_en);
326 } 326 }
327 327
328 /* This part needs to be executed always for OMAP{34xx, 44xx} */ 328 /* This part needs to be executed always for OMAP{34xx, 44xx} */
@@ -347,8 +347,8 @@ static inline void set_gpio_trigger(struct gpio_bank *bank, int gpio,
347 347
348exit: 348exit:
349 bank->level_mask = 349 bank->level_mask =
350 __raw_readl(bank->base + bank->regs->leveldetect0) | 350 readl_relaxed(bank->base + bank->regs->leveldetect0) |
351 __raw_readl(bank->base + bank->regs->leveldetect1); 351 readl_relaxed(bank->base + bank->regs->leveldetect1);
352} 352}
353 353
354#ifdef CONFIG_ARCH_OMAP1 354#ifdef CONFIG_ARCH_OMAP1
@@ -366,13 +366,13 @@ static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)
366 366
367 reg += bank->regs->irqctrl; 367 reg += bank->regs->irqctrl;
368 368
369 l = __raw_readl(reg); 369 l = readl_relaxed(reg);
370 if ((l >> gpio) & 1) 370 if ((l >> gpio) & 1)
371 l &= ~(1 << gpio); 371 l &= ~(1 << gpio);
372 else 372 else
373 l |= 1 << gpio; 373 l |= 1 << gpio;
374 374
375 __raw_writel(l, reg); 375 writel_relaxed(l, reg);
376} 376}
377#else 377#else
378static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio) {} 378static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio) {}
@@ -390,7 +390,7 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
390 } else if (bank->regs->irqctrl) { 390 } else if (bank->regs->irqctrl) {
391 reg += bank->regs->irqctrl; 391 reg += bank->regs->irqctrl;
392 392
393 l = __raw_readl(reg); 393 l = readl_relaxed(reg);
394 if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH) 394 if ((trigger & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH)
395 bank->toggle_mask |= 1 << gpio; 395 bank->toggle_mask |= 1 << gpio;
396 if (trigger & IRQ_TYPE_EDGE_RISING) 396 if (trigger & IRQ_TYPE_EDGE_RISING)
@@ -400,7 +400,7 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
400 else 400 else
401 return -EINVAL; 401 return -EINVAL;
402 402
403 __raw_writel(l, reg); 403 writel_relaxed(l, reg);
404 } else if (bank->regs->edgectrl1) { 404 } else if (bank->regs->edgectrl1) {
405 if (gpio & 0x08) 405 if (gpio & 0x08)
406 reg += bank->regs->edgectrl2; 406 reg += bank->regs->edgectrl2;
@@ -408,7 +408,7 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
408 reg += bank->regs->edgectrl1; 408 reg += bank->regs->edgectrl1;
409 409
410 gpio &= 0x07; 410 gpio &= 0x07;
411 l = __raw_readl(reg); 411 l = readl_relaxed(reg);
412 l &= ~(3 << (gpio << 1)); 412 l &= ~(3 << (gpio << 1));
413 if (trigger & IRQ_TYPE_EDGE_RISING) 413 if (trigger & IRQ_TYPE_EDGE_RISING)
414 l |= 2 << (gpio << 1); 414 l |= 2 << (gpio << 1);
@@ -418,8 +418,8 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
418 /* Enable wake-up during idle for dynamic tick */ 418 /* Enable wake-up during idle for dynamic tick */
419 _gpio_rmw(base, bank->regs->wkup_en, 1 << gpio, trigger); 419 _gpio_rmw(base, bank->regs->wkup_en, 1 << gpio, trigger);
420 bank->context.wake_en = 420 bank->context.wake_en =
421 __raw_readl(bank->base + bank->regs->wkup_en); 421 readl_relaxed(bank->base + bank->regs->wkup_en);
422 __raw_writel(l, reg); 422 writel_relaxed(l, reg);
423 } 423 }
424 return 0; 424 return 0;
425} 425}
@@ -430,17 +430,17 @@ static void _enable_gpio_module(struct gpio_bank *bank, unsigned offset)
430 void __iomem *reg = bank->base + bank->regs->pinctrl; 430 void __iomem *reg = bank->base + bank->regs->pinctrl;
431 431
432 /* Claim the pin for MPU */ 432 /* Claim the pin for MPU */
433 __raw_writel(__raw_readl(reg) | (1 << offset), reg); 433 writel_relaxed(readl_relaxed(reg) | (1 << offset), reg);
434 } 434 }
435 435
436 if (bank->regs->ctrl && !BANK_USED(bank)) { 436 if (bank->regs->ctrl && !BANK_USED(bank)) {
437 void __iomem *reg = bank->base + bank->regs->ctrl; 437 void __iomem *reg = bank->base + bank->regs->ctrl;
438 u32 ctrl; 438 u32 ctrl;
439 439
440 ctrl = __raw_readl(reg); 440 ctrl = readl_relaxed(reg);
441 /* Module is enabled, clocks are not gated */ 441 /* Module is enabled, clocks are not gated */
442 ctrl &= ~GPIO_MOD_CTRL_BIT; 442 ctrl &= ~GPIO_MOD_CTRL_BIT;
443 __raw_writel(ctrl, reg); 443 writel_relaxed(ctrl, reg);
444 bank->context.ctrl = ctrl; 444 bank->context.ctrl = ctrl;
445 } 445 }
446} 446}
@@ -455,17 +455,17 @@ static void _disable_gpio_module(struct gpio_bank *bank, unsigned offset)
455 /* Disable wake-up during idle for dynamic tick */ 455 /* Disable wake-up during idle for dynamic tick */
456 _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0); 456 _gpio_rmw(base, bank->regs->wkup_en, 1 << offset, 0);
457 bank->context.wake_en = 457 bank->context.wake_en =
458 __raw_readl(bank->base + bank->regs->wkup_en); 458 readl_relaxed(bank->base + bank->regs->wkup_en);
459 } 459 }
460 460
461 if (bank->regs->ctrl && !BANK_USED(bank)) { 461 if (bank->regs->ctrl && !BANK_USED(bank)) {
462 void __iomem *reg = bank->base + bank->regs->ctrl; 462 void __iomem *reg = bank->base + bank->regs->ctrl;
463 u32 ctrl; 463 u32 ctrl;
464 464
465 ctrl = __raw_readl(reg); 465 ctrl = readl_relaxed(reg);
466 /* Module is disabled, clocks are gated */ 466 /* Module is disabled, clocks are gated */
467 ctrl |= GPIO_MOD_CTRL_BIT; 467 ctrl |= GPIO_MOD_CTRL_BIT;
468 __raw_writel(ctrl, reg); 468 writel_relaxed(ctrl, reg);
469 bank->context.ctrl = ctrl; 469 bank->context.ctrl = ctrl;
470 } 470 }
471} 471}
@@ -474,7 +474,7 @@ static int gpio_is_input(struct gpio_bank *bank, int mask)
474{ 474{
475 void __iomem *reg = bank->base + bank->regs->direction; 475 void __iomem *reg = bank->base + bank->regs->direction;
476 476
477 return __raw_readl(reg) & mask; 477 return readl_relaxed(reg) & mask;
478} 478}
479 479
480static int gpio_irq_type(struct irq_data *d, unsigned type) 480static int gpio_irq_type(struct irq_data *d, unsigned type)
@@ -538,16 +538,16 @@ static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
538 void __iomem *reg = bank->base; 538 void __iomem *reg = bank->base;
539 539
540 reg += bank->regs->irqstatus; 540 reg += bank->regs->irqstatus;
541 __raw_writel(gpio_mask, reg); 541 writel_relaxed(gpio_mask, reg);
542 542
543 /* Workaround for clearing DSP GPIO interrupts to allow retention */ 543 /* Workaround for clearing DSP GPIO interrupts to allow retention */
544 if (bank->regs->irqstatus2) { 544 if (bank->regs->irqstatus2) {
545 reg = bank->base + bank->regs->irqstatus2; 545 reg = bank->base + bank->regs->irqstatus2;
546 __raw_writel(gpio_mask, reg); 546 writel_relaxed(gpio_mask, reg);
547 } 547 }
548 548
549 /* Flush posted write for the irq status to avoid spurious interrupts */ 549 /* Flush posted write for the irq status to avoid spurious interrupts */
550 __raw_readl(reg); 550 readl_relaxed(reg);
551} 551}
552 552
553static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio) 553static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio)
@@ -562,7 +562,7 @@ static u32 _get_gpio_irqbank_mask(struct gpio_bank *bank)
562 u32 mask = (1 << bank->width) - 1; 562 u32 mask = (1 << bank->width) - 1;
563 563
564 reg += bank->regs->irqenable; 564 reg += bank->regs->irqenable;
565 l = __raw_readl(reg); 565 l = readl_relaxed(reg);
566 if (bank->regs->irqenable_inv) 566 if (bank->regs->irqenable_inv)
567 l = ~l; 567 l = ~l;
568 l &= mask; 568 l &= mask;
@@ -580,7 +580,7 @@ static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
580 bank->context.irqenable1 |= gpio_mask; 580 bank->context.irqenable1 |= gpio_mask;
581 } else { 581 } else {
582 reg += bank->regs->irqenable; 582 reg += bank->regs->irqenable;
583 l = __raw_readl(reg); 583 l = readl_relaxed(reg);
584 if (bank->regs->irqenable_inv) 584 if (bank->regs->irqenable_inv)
585 l &= ~gpio_mask; 585 l &= ~gpio_mask;
586 else 586 else
@@ -588,7 +588,7 @@ static void _enable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
588 bank->context.irqenable1 = l; 588 bank->context.irqenable1 = l;
589 } 589 }
590 590
591 __raw_writel(l, reg); 591 writel_relaxed(l, reg);
592} 592}
593 593
594static void _disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask) 594static void _disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
@@ -602,7 +602,7 @@ static void _disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
602 bank->context.irqenable1 &= ~gpio_mask; 602 bank->context.irqenable1 &= ~gpio_mask;
603 } else { 603 } else {
604 reg += bank->regs->irqenable; 604 reg += bank->regs->irqenable;
605 l = __raw_readl(reg); 605 l = readl_relaxed(reg);
606 if (bank->regs->irqenable_inv) 606 if (bank->regs->irqenable_inv)
607 l |= gpio_mask; 607 l |= gpio_mask;
608 else 608 else
@@ -610,7 +610,7 @@ static void _disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask)
610 bank->context.irqenable1 = l; 610 bank->context.irqenable1 = l;
611 } 611 }
612 612
613 __raw_writel(l, reg); 613 writel_relaxed(l, reg);
614} 614}
615 615
616static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int enable) 616static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int enable)
@@ -646,7 +646,7 @@ static int _set_gpio_wakeup(struct gpio_bank *bank, int gpio, int enable)
646 else 646 else
647 bank->context.wake_en &= ~gpio_bit; 647 bank->context.wake_en &= ~gpio_bit;
648 648
649 __raw_writel(bank->context.wake_en, bank->base + bank->regs->wkup_en); 649 writel_relaxed(bank->context.wake_en, bank->base + bank->regs->wkup_en);
650 spin_unlock_irqrestore(&bank->lock, flags); 650 spin_unlock_irqrestore(&bank->lock, flags);
651 651
652 return 0; 652 return 0;
@@ -748,7 +748,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
748 u32 enabled; 748 u32 enabled;
749 749
750 enabled = _get_gpio_irqbank_mask(bank); 750 enabled = _get_gpio_irqbank_mask(bank);
751 isr_saved = isr = __raw_readl(isr_reg) & enabled; 751 isr_saved = isr = readl_relaxed(isr_reg) & enabled;
752 752
753 if (bank->level_mask) 753 if (bank->level_mask)
754 level_mask = bank->level_mask & enabled; 754 level_mask = bank->level_mask & enabled;
@@ -883,7 +883,7 @@ static int omap_mpuio_suspend_noirq(struct device *dev)
883 unsigned long flags; 883 unsigned long flags;
884 884
885 spin_lock_irqsave(&bank->lock, flags); 885 spin_lock_irqsave(&bank->lock, flags);
886 __raw_writel(0xffff & ~bank->context.wake_en, mask_reg); 886 writel_relaxed(0xffff & ~bank->context.wake_en, mask_reg);
887 spin_unlock_irqrestore(&bank->lock, flags); 887 spin_unlock_irqrestore(&bank->lock, flags);
888 888
889 return 0; 889 return 0;
@@ -898,7 +898,7 @@ static int omap_mpuio_resume_noirq(struct device *dev)
898 unsigned long flags; 898 unsigned long flags;
899 899
900 spin_lock_irqsave(&bank->lock, flags); 900 spin_lock_irqsave(&bank->lock, flags);
901 __raw_writel(bank->context.wake_en, mask_reg); 901 writel_relaxed(bank->context.wake_en, mask_reg);
902 spin_unlock_irqrestore(&bank->lock, flags); 902 spin_unlock_irqrestore(&bank->lock, flags);
903 903
904 return 0; 904 return 0;
@@ -1011,7 +1011,7 @@ static void __init omap_gpio_show_rev(struct gpio_bank *bank)
1011 if (called || bank->regs->revision == USHRT_MAX) 1011 if (called || bank->regs->revision == USHRT_MAX)
1012 return; 1012 return;
1013 1013
1014 rev = __raw_readw(bank->base + bank->regs->revision); 1014 rev = readw_relaxed(bank->base + bank->regs->revision);
1015 pr_info("OMAP GPIO hardware version %d.%d\n", 1015 pr_info("OMAP GPIO hardware version %d.%d\n",
1016 (rev >> 4) & 0x0f, rev & 0x0f); 1016 (rev >> 4) & 0x0f, rev & 0x0f);
1017 1017
@@ -1032,20 +1032,20 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)
1032 l = 0xffff; 1032 l = 0xffff;
1033 1033
1034 if (bank->is_mpuio) { 1034 if (bank->is_mpuio) {
1035 __raw_writel(l, bank->base + bank->regs->irqenable); 1035 writel_relaxed(l, bank->base + bank->regs->irqenable);
1036 return; 1036 return;
1037 } 1037 }
1038 1038
1039 _gpio_rmw(base, bank->regs->irqenable, l, bank->regs->irqenable_inv); 1039 _gpio_rmw(base, bank->regs->irqenable, l, bank->regs->irqenable_inv);
1040 _gpio_rmw(base, bank->regs->irqstatus, l, !bank->regs->irqenable_inv); 1040 _gpio_rmw(base, bank->regs->irqstatus, l, !bank->regs->irqenable_inv);
1041 if (bank->regs->debounce_en) 1041 if (bank->regs->debounce_en)
1042 __raw_writel(0, base + bank->regs->debounce_en); 1042 writel_relaxed(0, base + bank->regs->debounce_en);
1043 1043
1044 /* Save OE default value (0xffffffff) in the context */ 1044 /* Save OE default value (0xffffffff) in the context */
1045 bank->context.oe = __raw_readl(bank->base + bank->regs->direction); 1045 bank->context.oe = readl_relaxed(bank->base + bank->regs->direction);
1046 /* Initialize interface clk ungated, module enabled */ 1046 /* Initialize interface clk ungated, module enabled */
1047 if (bank->regs->ctrl) 1047 if (bank->regs->ctrl)
1048 __raw_writel(0, base + bank->regs->ctrl); 1048 writel_relaxed(0, base + bank->regs->ctrl);
1049 1049
1050 bank->dbck = clk_get(bank->dev, "dbclk"); 1050 bank->dbck = clk_get(bank->dev, "dbclk");
1051 if (IS_ERR(bank->dbck)) 1051 if (IS_ERR(bank->dbck))
@@ -1282,11 +1282,11 @@ static int omap_gpio_runtime_suspend(struct device *dev)
1282 */ 1282 */
1283 wake_low = bank->context.leveldetect0 & bank->context.wake_en; 1283 wake_low = bank->context.leveldetect0 & bank->context.wake_en;
1284 if (wake_low) 1284 if (wake_low)
1285 __raw_writel(wake_low | bank->context.fallingdetect, 1285 writel_relaxed(wake_low | bank->context.fallingdetect,
1286 bank->base + bank->regs->fallingdetect); 1286 bank->base + bank->regs->fallingdetect);
1287 wake_hi = bank->context.leveldetect1 & bank->context.wake_en; 1287 wake_hi = bank->context.leveldetect1 & bank->context.wake_en;
1288 if (wake_hi) 1288 if (wake_hi)
1289 __raw_writel(wake_hi | bank->context.risingdetect, 1289 writel_relaxed(wake_hi | bank->context.risingdetect,
1290 bank->base + bank->regs->risingdetect); 1290 bank->base + bank->regs->risingdetect);
1291 1291
1292 if (!bank->enabled_non_wakeup_gpios) 1292 if (!bank->enabled_non_wakeup_gpios)
@@ -1301,7 +1301,7 @@ static int omap_gpio_runtime_suspend(struct device *dev)
1301 * non-wakeup GPIOs. Otherwise spurious IRQs will be 1301 * non-wakeup GPIOs. Otherwise spurious IRQs will be
1302 * generated. See OMAP2420 Errata item 1.101. 1302 * generated. See OMAP2420 Errata item 1.101.
1303 */ 1303 */
1304 bank->saved_datain = __raw_readl(bank->base + 1304 bank->saved_datain = readl_relaxed(bank->base +
1305 bank->regs->datain); 1305 bank->regs->datain);
1306 l1 = bank->context.fallingdetect; 1306 l1 = bank->context.fallingdetect;
1307 l2 = bank->context.risingdetect; 1307 l2 = bank->context.risingdetect;
@@ -1309,8 +1309,8 @@ static int omap_gpio_runtime_suspend(struct device *dev)
1309 l1 &= ~bank->enabled_non_wakeup_gpios; 1309 l1 &= ~bank->enabled_non_wakeup_gpios;
1310 l2 &= ~bank->enabled_non_wakeup_gpios; 1310 l2 &= ~bank->enabled_non_wakeup_gpios;
1311 1311
1312 __raw_writel(l1, bank->base + bank->regs->fallingdetect); 1312 writel_relaxed(l1, bank->base + bank->regs->fallingdetect);
1313 __raw_writel(l2, bank->base + bank->regs->risingdetect); 1313 writel_relaxed(l2, bank->base + bank->regs->risingdetect);
1314 1314
1315 bank->workaround_enabled = true; 1315 bank->workaround_enabled = true;
1316 1316
@@ -1358,9 +1358,9 @@ static int omap_gpio_runtime_resume(struct device *dev)
1358 * generate a PRCM wakeup. Here we restore the 1358 * generate a PRCM wakeup. Here we restore the
1359 * pre-runtime_suspend() values for edge triggering. 1359 * pre-runtime_suspend() values for edge triggering.
1360 */ 1360 */
1361 __raw_writel(bank->context.fallingdetect, 1361 writel_relaxed(bank->context.fallingdetect,
1362 bank->base + bank->regs->fallingdetect); 1362 bank->base + bank->regs->fallingdetect);
1363 __raw_writel(bank->context.risingdetect, 1363 writel_relaxed(bank->context.risingdetect,
1364 bank->base + bank->regs->risingdetect); 1364 bank->base + bank->regs->risingdetect);
1365 1365
1366 if (bank->loses_context) { 1366 if (bank->loses_context) {
@@ -1382,7 +1382,7 @@ static int omap_gpio_runtime_resume(struct device *dev)
1382 return 0; 1382 return 0;
1383 } 1383 }
1384 1384
1385 l = __raw_readl(bank->base + bank->regs->datain); 1385 l = readl_relaxed(bank->base + bank->regs->datain);
1386 1386
1387 /* 1387 /*
1388 * Check if any of the non-wakeup interrupt GPIOs have changed 1388 * Check if any of the non-wakeup interrupt GPIOs have changed
@@ -1412,24 +1412,24 @@ static int omap_gpio_runtime_resume(struct device *dev)
1412 if (gen) { 1412 if (gen) {
1413 u32 old0, old1; 1413 u32 old0, old1;
1414 1414
1415 old0 = __raw_readl(bank->base + bank->regs->leveldetect0); 1415 old0 = readl_relaxed(bank->base + bank->regs->leveldetect0);
1416 old1 = __raw_readl(bank->base + bank->regs->leveldetect1); 1416 old1 = readl_relaxed(bank->base + bank->regs->leveldetect1);
1417 1417
1418 if (!bank->regs->irqstatus_raw0) { 1418 if (!bank->regs->irqstatus_raw0) {
1419 __raw_writel(old0 | gen, bank->base + 1419 writel_relaxed(old0 | gen, bank->base +
1420 bank->regs->leveldetect0); 1420 bank->regs->leveldetect0);
1421 __raw_writel(old1 | gen, bank->base + 1421 writel_relaxed(old1 | gen, bank->base +
1422 bank->regs->leveldetect1); 1422 bank->regs->leveldetect1);
1423 } 1423 }
1424 1424
1425 if (bank->regs->irqstatus_raw0) { 1425 if (bank->regs->irqstatus_raw0) {
1426 __raw_writel(old0 | l, bank->base + 1426 writel_relaxed(old0 | l, bank->base +
1427 bank->regs->leveldetect0); 1427 bank->regs->leveldetect0);
1428 __raw_writel(old1 | l, bank->base + 1428 writel_relaxed(old1 | l, bank->base +
1429 bank->regs->leveldetect1); 1429 bank->regs->leveldetect1);
1430 } 1430 }
1431 __raw_writel(old0, bank->base + bank->regs->leveldetect0); 1431 writel_relaxed(old0, bank->base + bank->regs->leveldetect0);
1432 __raw_writel(old1, bank->base + bank->regs->leveldetect1); 1432 writel_relaxed(old1, bank->base + bank->regs->leveldetect1);
1433 } 1433 }
1434 1434
1435 bank->workaround_enabled = false; 1435 bank->workaround_enabled = false;
@@ -1471,55 +1471,55 @@ static void omap_gpio_init_context(struct gpio_bank *p)
1471 struct omap_gpio_reg_offs *regs = p->regs; 1471 struct omap_gpio_reg_offs *regs = p->regs;
1472 void __iomem *base = p->base; 1472 void __iomem *base = p->base;
1473 1473
1474 p->context.ctrl = __raw_readl(base + regs->ctrl); 1474 p->context.ctrl = readl_relaxed(base + regs->ctrl);
1475 p->context.oe = __raw_readl(base + regs->direction); 1475 p->context.oe = readl_relaxed(base + regs->direction);
1476 p->context.wake_en = __raw_readl(base + regs->wkup_en); 1476 p->context.wake_en = readl_relaxed(base + regs->wkup_en);
1477 p->context.leveldetect0 = __raw_readl(base + regs->leveldetect0); 1477 p->context.leveldetect0 = readl_relaxed(base + regs->leveldetect0);
1478 p->context.leveldetect1 = __raw_readl(base + regs->leveldetect1); 1478 p->context.leveldetect1 = readl_relaxed(base + regs->leveldetect1);
1479 p->context.risingdetect = __raw_readl(base + regs->risingdetect); 1479 p->context.risingdetect = readl_relaxed(base + regs->risingdetect);
1480 p->context.fallingdetect = __raw_readl(base + regs->fallingdetect); 1480 p->context.fallingdetect = readl_relaxed(base + regs->fallingdetect);
1481 p->context.irqenable1 = __raw_readl(base + regs->irqenable); 1481 p->context.irqenable1 = readl_relaxed(base + regs->irqenable);
1482 p->context.irqenable2 = __raw_readl(base + regs->irqenable2); 1482 p->context.irqenable2 = readl_relaxed(base + regs->irqenable2);
1483 1483
1484 if (regs->set_dataout && p->regs->clr_dataout) 1484 if (regs->set_dataout && p->regs->clr_dataout)
1485 p->context.dataout = __raw_readl(base + regs->set_dataout); 1485 p->context.dataout = readl_relaxed(base + regs->set_dataout);
1486 else 1486 else
1487 p->context.dataout = __raw_readl(base + regs->dataout); 1487 p->context.dataout = readl_relaxed(base + regs->dataout);
1488 1488
1489 p->context_valid = true; 1489 p->context_valid = true;
1490} 1490}
1491 1491
1492static void omap_gpio_restore_context(struct gpio_bank *bank) 1492static void omap_gpio_restore_context(struct gpio_bank *bank)
1493{ 1493{
1494 __raw_writel(bank->context.wake_en, 1494 writel_relaxed(bank->context.wake_en,
1495 bank->base + bank->regs->wkup_en); 1495 bank->base + bank->regs->wkup_en);
1496 __raw_writel(bank->context.ctrl, bank->base + bank->regs->ctrl); 1496 writel_relaxed(bank->context.ctrl, bank->base + bank->regs->ctrl);
1497 __raw_writel(bank->context.leveldetect0, 1497 writel_relaxed(bank->context.leveldetect0,
1498 bank->base + bank->regs->leveldetect0); 1498 bank->base + bank->regs->leveldetect0);
1499 __raw_writel(bank->context.leveldetect1, 1499 writel_relaxed(bank->context.leveldetect1,
1500 bank->base + bank->regs->leveldetect1); 1500 bank->base + bank->regs->leveldetect1);
1501 __raw_writel(bank->context.risingdetect, 1501 writel_relaxed(bank->context.risingdetect,
1502 bank->base + bank->regs->risingdetect); 1502 bank->base + bank->regs->risingdetect);
1503 __raw_writel(bank->context.fallingdetect, 1503 writel_relaxed(bank->context.fallingdetect,
1504 bank->base + bank->regs->fallingdetect); 1504 bank->base + bank->regs->fallingdetect);
1505 if (bank->regs->set_dataout && bank->regs->clr_dataout) 1505 if (bank->regs->set_dataout && bank->regs->clr_dataout)
1506 __raw_writel(bank->context.dataout, 1506 writel_relaxed(bank->context.dataout,
1507 bank->base + bank->regs->set_dataout); 1507 bank->base + bank->regs->set_dataout);
1508 else 1508 else
1509 __raw_writel(bank->context.dataout, 1509 writel_relaxed(bank->context.dataout,
1510 bank->base + bank->regs->dataout); 1510 bank->base + bank->regs->dataout);
1511 __raw_writel(bank->context.oe, bank->base + bank->regs->direction); 1511 writel_relaxed(bank->context.oe, bank->base + bank->regs->direction);
1512 1512
1513 if (bank->dbck_enable_mask) { 1513 if (bank->dbck_enable_mask) {
1514 __raw_writel(bank->context.debounce, bank->base + 1514 writel_relaxed(bank->context.debounce, bank->base +
1515 bank->regs->debounce); 1515 bank->regs->debounce);
1516 __raw_writel(bank->context.debounce_en, 1516 writel_relaxed(bank->context.debounce_en,
1517 bank->base + bank->regs->debounce_en); 1517 bank->base + bank->regs->debounce_en);
1518 } 1518 }
1519 1519
1520 __raw_writel(bank->context.irqenable1, 1520 writel_relaxed(bank->context.irqenable1,
1521 bank->base + bank->regs->irqenable); 1521 bank->base + bank->regs->irqenable);
1522 __raw_writel(bank->context.irqenable2, 1522 writel_relaxed(bank->context.irqenable2,
1523 bank->base + bank->regs->irqenable2); 1523 bank->base + bank->regs->irqenable2);
1524} 1524}
1525#endif /* CONFIG_PM_RUNTIME */ 1525#endif /* CONFIG_PM_RUNTIME */