diff options
Diffstat (limited to 'drivers/gpio/gpio-omap.c')
-rw-r--r-- | drivers/gpio/gpio-omap.c | 188 |
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 | ||
161 | static int _get_gpio_dataout(struct gpio_bank *bank, int offset) | 161 | static 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 | ||
168 | static inline void _gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set) | 168 | static 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 | ||
180 | static inline void _gpio_dbck_enable(struct gpio_bank *bank) | 180 | static 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 | ||
348 | exit: | 348 | exit: |
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 |
378 | static void _toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio) {} | 378 | static 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 | ||
480 | static int gpio_irq_type(struct irq_data *d, unsigned type) | 480 | static 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 | ||
553 | static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio) | 553 | static 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 | ||
594 | static void _disable_gpio_irqbank(struct gpio_bank *bank, int gpio_mask) | 594 | static 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 | ||
616 | static inline void _set_gpio_irqenable(struct gpio_bank *bank, int gpio, int enable) | 616 | static 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 | ||
1492 | static void omap_gpio_restore_context(struct gpio_bank *bank) | 1492 | static 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 */ |