aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-omap.c
diff options
context:
space:
mode:
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 */