diff options
| author | Dmitry Baryshkov <dbaryshkov@gmail.com> | 2008-04-09 18:05:09 -0400 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-04-10 10:31:35 -0400 |
| commit | c353faa4b2abd8d5142640b880532c97a0807460 (patch) | |
| tree | 7e50227256a58c88ca7baefb2cd206f9d55d33e9 /arch | |
| parent | 2f8c51493323550529ed295ba6ddcdd3d0f704d5 (diff) | |
[ARM] 4957/1: Drop special macro SCOOP_REG in favour if ioread16/iowrite16.
Make scoop driver use generic purpose io routines: ioread16
and iowrite16 instead of direct writing to memory.
Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
Acked-by: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/arm/common/scoop.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/arch/arm/common/scoop.c b/arch/arm/common/scoop.c index 04b4a92d7b6f..fc08577cdd6c 100644 --- a/arch/arm/common/scoop.c +++ b/arch/arm/common/scoop.c | |||
| @@ -30,8 +30,6 @@ | |||
| 30 | struct scoop_pcmcia_config *platform_scoop_config; | 30 | struct scoop_pcmcia_config *platform_scoop_config; |
| 31 | EXPORT_SYMBOL(platform_scoop_config); | 31 | EXPORT_SYMBOL(platform_scoop_config); |
| 32 | 32 | ||
| 33 | #define SCOOP_REG(d,adr) (*(volatile __iomem unsigned short*)(d +(adr))) | ||
| 34 | |||
| 35 | struct scoop_dev { | 33 | struct scoop_dev { |
| 36 | void __iomem *base; | 34 | void __iomem *base; |
| 37 | spinlock_t scoop_lock; | 35 | spinlock_t scoop_lock; |
| @@ -44,13 +42,13 @@ void reset_scoop(struct device *dev) | |||
| 44 | { | 42 | { |
| 45 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 43 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
| 46 | 44 | ||
| 47 | SCOOP_REG(sdev->base,SCOOP_MCR) = 0x0100; // 00 | 45 | iowrite16(0x0100, sdev->base + SCOOP_MCR); // 00 |
| 48 | SCOOP_REG(sdev->base,SCOOP_CDR) = 0x0000; // 04 | 46 | iowrite16(0x0000, sdev->base + SCOOP_CDR); // 04 |
| 49 | SCOOP_REG(sdev->base,SCOOP_CCR) = 0x0000; // 10 | 47 | iowrite16(0x0000, sdev->base + SCOOP_CCR); // 10 |
| 50 | SCOOP_REG(sdev->base,SCOOP_IMR) = 0x0000; // 18 | 48 | iowrite16(0x0000, sdev->base + SCOOP_IMR); // 18 |
| 51 | SCOOP_REG(sdev->base,SCOOP_IRM) = 0x00FF; // 14 | 49 | iowrite16(0x00FF, sdev->base + SCOOP_IRM); // 14 |
| 52 | SCOOP_REG(sdev->base,SCOOP_ISR) = 0x0000; // 1C | 50 | iowrite16(0x0000, sdev->base + SCOOP_ISR); // 1C |
| 53 | SCOOP_REG(sdev->base,SCOOP_IRM) = 0x0000; | 51 | iowrite16(0x0000, sdev->base + SCOOP_IRM); |
| 54 | } | 52 | } |
| 55 | 53 | ||
| 56 | unsigned short set_scoop_gpio(struct device *dev, unsigned short bit) | 54 | unsigned short set_scoop_gpio(struct device *dev, unsigned short bit) |
| @@ -60,8 +58,8 @@ unsigned short set_scoop_gpio(struct device *dev, unsigned short bit) | |||
| 60 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 58 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
| 61 | 59 | ||
| 62 | spin_lock_irqsave(&sdev->scoop_lock, flag); | 60 | spin_lock_irqsave(&sdev->scoop_lock, flag); |
| 63 | gpio_bit = SCOOP_REG(sdev->base, SCOOP_GPWR) | bit; | 61 | gpio_bit = ioread16(sdev->base + SCOOP_GPWR) | bit; |
| 64 | SCOOP_REG(sdev->base, SCOOP_GPWR) = gpio_bit; | 62 | iowrite16(gpio_bit, sdev->base + SCOOP_GPWR); |
| 65 | spin_unlock_irqrestore(&sdev->scoop_lock, flag); | 63 | spin_unlock_irqrestore(&sdev->scoop_lock, flag); |
| 66 | 64 | ||
| 67 | return gpio_bit; | 65 | return gpio_bit; |
| @@ -74,8 +72,8 @@ unsigned short reset_scoop_gpio(struct device *dev, unsigned short bit) | |||
| 74 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 72 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
| 75 | 73 | ||
| 76 | spin_lock_irqsave(&sdev->scoop_lock, flag); | 74 | spin_lock_irqsave(&sdev->scoop_lock, flag); |
| 77 | gpio_bit = SCOOP_REG(sdev->base, SCOOP_GPWR) & ~bit; | 75 | gpio_bit = ioread16(sdev->base + SCOOP_GPWR) & ~bit; |
| 78 | SCOOP_REG(sdev->base,SCOOP_GPWR) = gpio_bit; | 76 | iowrite16(gpio_bit, sdev->base + SCOOP_GPWR); |
| 79 | spin_unlock_irqrestore(&sdev->scoop_lock, flag); | 77 | spin_unlock_irqrestore(&sdev->scoop_lock, flag); |
| 80 | 78 | ||
| 81 | return gpio_bit; | 79 | return gpio_bit; |
| @@ -87,13 +85,13 @@ EXPORT_SYMBOL(reset_scoop_gpio); | |||
| 87 | unsigned short read_scoop_reg(struct device *dev, unsigned short reg) | 85 | unsigned short read_scoop_reg(struct device *dev, unsigned short reg) |
| 88 | { | 86 | { |
| 89 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 87 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
| 90 | return SCOOP_REG(sdev->base,reg); | 88 | return ioread16(sdev->base + reg); |
| 91 | } | 89 | } |
| 92 | 90 | ||
| 93 | void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data) | 91 | void write_scoop_reg(struct device *dev, unsigned short reg, unsigned short data) |
| 94 | { | 92 | { |
| 95 | struct scoop_dev *sdev = dev_get_drvdata(dev); | 93 | struct scoop_dev *sdev = dev_get_drvdata(dev); |
| 96 | SCOOP_REG(sdev->base,reg)=data; | 94 | iowrite16(data, sdev->base + reg); |
| 97 | } | 95 | } |
| 98 | 96 | ||
| 99 | EXPORT_SYMBOL(reset_scoop); | 97 | EXPORT_SYMBOL(reset_scoop); |
| @@ -104,9 +102,9 @@ static void check_scoop_reg(struct scoop_dev *sdev) | |||
| 104 | { | 102 | { |
| 105 | unsigned short mcr; | 103 | unsigned short mcr; |
| 106 | 104 | ||
| 107 | mcr = SCOOP_REG(sdev->base, SCOOP_MCR); | 105 | mcr = ioread16(sdev->base + SCOOP_MCR); |
| 108 | if ((mcr & 0x100) == 0) | 106 | if ((mcr & 0x100) == 0) |
| 109 | SCOOP_REG(sdev->base, SCOOP_MCR) = 0x0101; | 107 | iowrite16(0x0101, sdev->base + SCOOP_MCR); |
| 110 | } | 108 | } |
| 111 | 109 | ||
| 112 | #ifdef CONFIG_PM | 110 | #ifdef CONFIG_PM |
| @@ -115,8 +113,8 @@ static int scoop_suspend(struct platform_device *dev, pm_message_t state) | |||
| 115 | struct scoop_dev *sdev = platform_get_drvdata(dev); | 113 | struct scoop_dev *sdev = platform_get_drvdata(dev); |
| 116 | 114 | ||
| 117 | check_scoop_reg(sdev); | 115 | check_scoop_reg(sdev); |
| 118 | sdev->scoop_gpwr = SCOOP_REG(sdev->base, SCOOP_GPWR); | 116 | sdev->scoop_gpwr = ioread16(sdev->base + SCOOP_GPWR); |
| 119 | SCOOP_REG(sdev->base, SCOOP_GPWR) = (sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set; | 117 | iowrite16((sdev->scoop_gpwr & ~sdev->suspend_clr) | sdev->suspend_set, sdev->base + SCOOP_GPWR); |
| 120 | 118 | ||
| 121 | return 0; | 119 | return 0; |
| 122 | } | 120 | } |
| @@ -126,7 +124,7 @@ static int scoop_resume(struct platform_device *dev) | |||
| 126 | struct scoop_dev *sdev = platform_get_drvdata(dev); | 124 | struct scoop_dev *sdev = platform_get_drvdata(dev); |
| 127 | 125 | ||
| 128 | check_scoop_reg(sdev); | 126 | check_scoop_reg(sdev); |
| 129 | SCOOP_REG(sdev->base,SCOOP_GPWR) = sdev->scoop_gpwr; | 127 | iowrite16(sdev->scoop_gpwr, sdev->base + SCOOP_GPWR); |
| 130 | 128 | ||
| 131 | return 0; | 129 | return 0; |
| 132 | } | 130 | } |
| @@ -162,11 +160,11 @@ static int __devinit scoop_probe(struct platform_device *pdev) | |||
| 162 | 160 | ||
| 163 | printk("Sharp Scoop Device found at 0x%08x -> 0x%8p\n",(unsigned int)mem->start, devptr->base); | 161 | printk("Sharp Scoop Device found at 0x%08x -> 0x%8p\n",(unsigned int)mem->start, devptr->base); |
| 164 | 162 | ||
| 165 | SCOOP_REG(devptr->base, SCOOP_MCR) = 0x0140; | 163 | iowrite16(0x0140, devptr->base + SCOOP_MCR); |
| 166 | reset_scoop(&pdev->dev); | 164 | reset_scoop(&pdev->dev); |
| 167 | SCOOP_REG(devptr->base, SCOOP_CPR) = 0x0000; | 165 | iowrite16(0x0000, devptr->base + SCOOP_CPR); |
| 168 | SCOOP_REG(devptr->base, SCOOP_GPCR) = inf->io_dir & 0xffff; | 166 | iowrite16(inf->io_dir & 0xffff, devptr->base + SCOOP_GPCR); |
| 169 | SCOOP_REG(devptr->base, SCOOP_GPWR) = inf->io_out & 0xffff; | 167 | iowrite16(inf->io_out & 0xffff, devptr->base + SCOOP_GPWR); |
| 170 | 168 | ||
| 171 | devptr->suspend_clr = inf->suspend_clr; | 169 | devptr->suspend_clr = inf->suspend_clr; |
| 172 | devptr->suspend_set = inf->suspend_set; | 170 | devptr->suspend_set = inf->suspend_set; |
