lkml.org 
[lkml]   [2011]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v6 2/6] video, sm501: add I/O functions for use on powerpc
    On Tue, Mar 22, 2011 at 09:27:28AM +0100, Heiko Schocher wrote:
    > - add read/write functions for using this driver
    > also on powerpc plattforms
    >
    > Signed-off-by: Heiko Schocher <hs@denx.de>
    > Acked-by: Samuel Ortiz <sameo@linux.intel.com>

    Merged, thanks.

    g.

    > cc: Wolfram Sang <w.sang@pengutronix.de>
    > cc: Grant Likely <grant.likely@secretlab.ca>
    > cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    > cc: linux-fbdev@vger.kernel.org
    > cc: devicetree-discuss@ozlabs.org
    > cc: Ben Dooks <ben@simtec.co.uk>
    > cc: Vincent Sanders <vince@simtec.co.uk>
    > cc: Samuel Ortiz <sameo@linux.intel.com>
    > cc: linux-kernel@vger.kernel.org
    > cc: Randy Dunlap <rdunlap@xenotime.net>
    > cc: Wolfgang Denk <wd@denx.de>
    > cc: Paul Mundt <lethal@linux-sh.org>
    > ---
    > - changes since v1:
    > add Ben Dooks, Vincent Sanders and Samuel Ortiz to cc, as suggested from
    > Paul Mundt.
    > - changes since v2:
    > add comments from Randy Dunlap:
    > - move parameter documentation to Documentation/fb/sm501.txt
    > - changes since v3:
    > - rebased against v2.6.38-rc2
    > - split in 3 patches
    > - of support patch
    > - i/o routine patch
    > - use ioread/write32{be} accessors instead of
    > __do_readl/__do_writel{_be}
    > - edid support patch
    > - changes for v6:
    > - repost complete patchserie
    > - rebased against current head
    >
    > drivers/mfd/sm501.c | 125 +++++++++++++++++-----------------
    > drivers/video/sm501fb.c | 172 ++++++++++++++++++++++++----------------------
    > include/linux/sm501.h | 8 ++
    > 3 files changed, 161 insertions(+), 144 deletions(-)
    >
    > diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c
    > index 5de3a76..558d5f3 100644
    > --- a/drivers/mfd/sm501.c
    > +++ b/drivers/mfd/sm501.c
    > @@ -133,10 +133,10 @@ static unsigned long decode_div(unsigned long pll2, unsigned long val,
    >
    > static void sm501_dump_clk(struct sm501_devdata *sm)
    > {
    > - unsigned long misct = readl(sm->regs + SM501_MISC_TIMING);
    > - unsigned long pm0 = readl(sm->regs + SM501_POWER_MODE_0_CLOCK);
    > - unsigned long pm1 = readl(sm->regs + SM501_POWER_MODE_1_CLOCK);
    > - unsigned long pmc = readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > + unsigned long misct = smc501_readl(sm->regs + SM501_MISC_TIMING);
    > + unsigned long pm0 = smc501_readl(sm->regs + SM501_POWER_MODE_0_CLOCK);
    > + unsigned long pm1 = smc501_readl(sm->regs + SM501_POWER_MODE_1_CLOCK);
    > + unsigned long pmc = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > unsigned long sdclk0, sdclk1;
    > unsigned long pll2 = 0;
    >
    > @@ -193,29 +193,29 @@ static void sm501_dump_regs(struct sm501_devdata *sm)
    > void __iomem *regs = sm->regs;
    >
    > dev_info(sm->dev, "System Control %08x\n",
    > - readl(regs + SM501_SYSTEM_CONTROL));
    > + smc501_readl(regs + SM501_SYSTEM_CONTROL));
    > dev_info(sm->dev, "Misc Control %08x\n",
    > - readl(regs + SM501_MISC_CONTROL));
    > + smc501_readl(regs + SM501_MISC_CONTROL));
    > dev_info(sm->dev, "GPIO Control Low %08x\n",
    > - readl(regs + SM501_GPIO31_0_CONTROL));
    > + smc501_readl(regs + SM501_GPIO31_0_CONTROL));
    > dev_info(sm->dev, "GPIO Control Hi %08x\n",
    > - readl(regs + SM501_GPIO63_32_CONTROL));
    > + smc501_readl(regs + SM501_GPIO63_32_CONTROL));
    > dev_info(sm->dev, "DRAM Control %08x\n",
    > - readl(regs + SM501_DRAM_CONTROL));
    > + smc501_readl(regs + SM501_DRAM_CONTROL));
    > dev_info(sm->dev, "Arbitration Ctrl %08x\n",
    > - readl(regs + SM501_ARBTRTN_CONTROL));
    > + smc501_readl(regs + SM501_ARBTRTN_CONTROL));
    > dev_info(sm->dev, "Misc Timing %08x\n",
    > - readl(regs + SM501_MISC_TIMING));
    > + smc501_readl(regs + SM501_MISC_TIMING));
    > }
    >
    > static void sm501_dump_gate(struct sm501_devdata *sm)
    > {
    > dev_info(sm->dev, "CurrentGate %08x\n",
    > - readl(sm->regs + SM501_CURRENT_GATE));
    > + smc501_readl(sm->regs + SM501_CURRENT_GATE));
    > dev_info(sm->dev, "CurrentClock %08x\n",
    > - readl(sm->regs + SM501_CURRENT_CLOCK));
    > + smc501_readl(sm->regs + SM501_CURRENT_CLOCK));
    > dev_info(sm->dev, "PowerModeControl %08x\n",
    > - readl(sm->regs + SM501_POWER_MODE_CONTROL));
    > + smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL));
    > }
    >
    > #else
    > @@ -231,7 +231,7 @@ static inline void sm501_dump_clk(struct sm501_devdata *sm) { }
    >
    > static void sm501_sync_regs(struct sm501_devdata *sm)
    > {
    > - readl(sm->regs);
    > + smc501_readl(sm->regs);
    > }
    >
    > static inline void sm501_mdelay(struct sm501_devdata *sm, unsigned int delay)
    > @@ -261,11 +261,11 @@ int sm501_misc_control(struct device *dev,
    >
    > spin_lock_irqsave(&sm->reg_lock, save);
    >
    > - misc = readl(sm->regs + SM501_MISC_CONTROL);
    > + misc = smc501_readl(sm->regs + SM501_MISC_CONTROL);
    > to = (misc & ~clear) | set;
    >
    > if (to != misc) {
    > - writel(to, sm->regs + SM501_MISC_CONTROL);
    > + smc501_writel(to, sm->regs + SM501_MISC_CONTROL);
    > sm501_sync_regs(sm);
    >
    > dev_dbg(sm->dev, "MISC_CONTROL %08lx\n", misc);
    > @@ -294,11 +294,11 @@ unsigned long sm501_modify_reg(struct device *dev,
    >
    > spin_lock_irqsave(&sm->reg_lock, save);
    >
    > - data = readl(sm->regs + reg);
    > + data = smc501_readl(sm->regs + reg);
    > data |= set;
    > data &= ~clear;
    >
    > - writel(data, sm->regs + reg);
    > + smc501_writel(data, sm->regs + reg);
    > sm501_sync_regs(sm);
    >
    > spin_unlock_irqrestore(&sm->reg_lock, save);
    > @@ -322,9 +322,9 @@ int sm501_unit_power(struct device *dev, unsigned int unit, unsigned int to)
    >
    > mutex_lock(&sm->clock_lock);
    >
    > - mode = readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > - gate = readl(sm->regs + SM501_CURRENT_GATE);
    > - clock = readl(sm->regs + SM501_CURRENT_CLOCK);
    > + mode = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > + gate = smc501_readl(sm->regs + SM501_CURRENT_GATE);
    > + clock = smc501_readl(sm->regs + SM501_CURRENT_CLOCK);
    >
    > mode &= 3; /* get current power mode */
    >
    > @@ -356,14 +356,14 @@ int sm501_unit_power(struct device *dev, unsigned int unit, unsigned int to)
    >
    > switch (mode) {
    > case 1:
    > - writel(gate, sm->regs + SM501_POWER_MODE_0_GATE);
    > - writel(clock, sm->regs + SM501_POWER_MODE_0_CLOCK);
    > + smc501_writel(gate, sm->regs + SM501_POWER_MODE_0_GATE);
    > + smc501_writel(clock, sm->regs + SM501_POWER_MODE_0_CLOCK);
    > mode = 0;
    > break;
    > case 2:
    > case 0:
    > - writel(gate, sm->regs + SM501_POWER_MODE_1_GATE);
    > - writel(clock, sm->regs + SM501_POWER_MODE_1_CLOCK);
    > + smc501_writel(gate, sm->regs + SM501_POWER_MODE_1_GATE);
    > + smc501_writel(clock, sm->regs + SM501_POWER_MODE_1_CLOCK);
    > mode = 1;
    > break;
    >
    > @@ -372,7 +372,7 @@ int sm501_unit_power(struct device *dev, unsigned int unit, unsigned int to)
    > goto already;
    > }
    >
    > - writel(mode, sm->regs + SM501_POWER_MODE_CONTROL);
    > + smc501_writel(mode, sm->regs + SM501_POWER_MODE_CONTROL);
    > sm501_sync_regs(sm);
    >
    > dev_dbg(sm->dev, "gate %08lx, clock %08lx, mode %08lx\n",
    > @@ -519,9 +519,9 @@ unsigned long sm501_set_clock(struct device *dev,
    > unsigned long req_freq)
    > {
    > struct sm501_devdata *sm = dev_get_drvdata(dev);
    > - unsigned long mode = readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > - unsigned long gate = readl(sm->regs + SM501_CURRENT_GATE);
    > - unsigned long clock = readl(sm->regs + SM501_CURRENT_CLOCK);
    > + unsigned long mode = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > + unsigned long gate = smc501_readl(sm->regs + SM501_CURRENT_GATE);
    > + unsigned long clock = smc501_readl(sm->regs + SM501_CURRENT_CLOCK);
    > unsigned char reg;
    > unsigned int pll_reg = 0;
    > unsigned long sm501_freq; /* the actual frequency achieved */
    > @@ -592,9 +592,9 @@ unsigned long sm501_set_clock(struct device *dev,
    >
    > mutex_lock(&sm->clock_lock);
    >
    > - mode = readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > - gate = readl(sm->regs + SM501_CURRENT_GATE);
    > - clock = readl(sm->regs + SM501_CURRENT_CLOCK);
    > + mode = smc501_readl(sm->regs + SM501_POWER_MODE_CONTROL);
    > + gate = smc501_readl(sm->regs + SM501_CURRENT_GATE);
    > + clock = smc501_readl(sm->regs + SM501_CURRENT_CLOCK);
    >
    > clock = clock & ~(0xFF << clksrc);
    > clock |= reg<<clksrc;
    > @@ -603,14 +603,14 @@ unsigned long sm501_set_clock(struct device *dev,
    >
    > switch (mode) {
    > case 1:
    > - writel(gate, sm->regs + SM501_POWER_MODE_0_GATE);
    > - writel(clock, sm->regs + SM501_POWER_MODE_0_CLOCK);
    > + smc501_writel(gate, sm->regs + SM501_POWER_MODE_0_GATE);
    > + smc501_writel(clock, sm->regs + SM501_POWER_MODE_0_CLOCK);
    > mode = 0;
    > break;
    > case 2:
    > case 0:
    > - writel(gate, sm->regs + SM501_POWER_MODE_1_GATE);
    > - writel(clock, sm->regs + SM501_POWER_MODE_1_CLOCK);
    > + smc501_writel(gate, sm->regs + SM501_POWER_MODE_1_GATE);
    > + smc501_writel(clock, sm->regs + SM501_POWER_MODE_1_CLOCK);
    > mode = 1;
    > break;
    >
    > @@ -619,10 +619,11 @@ unsigned long sm501_set_clock(struct device *dev,
    > return -1;
    > }
    >
    > - writel(mode, sm->regs + SM501_POWER_MODE_CONTROL);
    > + smc501_writel(mode, sm->regs + SM501_POWER_MODE_CONTROL);
    >
    > if (pll_reg)
    > - writel(pll_reg, sm->regs + SM501_PROGRAMMABLE_PLL_CONTROL);
    > + smc501_writel(pll_reg,
    > + sm->regs + SM501_PROGRAMMABLE_PLL_CONTROL);
    >
    > sm501_sync_regs(sm);
    >
    > @@ -902,7 +903,7 @@ static int sm501_gpio_get(struct gpio_chip *chip, unsigned offset)
    > struct sm501_gpio_chip *smgpio = to_sm501_gpio(chip);
    > unsigned long result;
    >
    > - result = readl(smgpio->regbase + SM501_GPIO_DATA_LOW);
    > + result = smc501_readl(smgpio->regbase + SM501_GPIO_DATA_LOW);
    > result >>= offset;
    >
    > return result & 1UL;
    > @@ -915,13 +916,13 @@ static void sm501_gpio_ensure_gpio(struct sm501_gpio_chip *smchip,
    >
    > /* check and modify if this pin is not set as gpio. */
    >
    > - if (readl(smchip->control) & bit) {
    > + if (smc501_readl(smchip->control) & bit) {
    > dev_info(sm501_gpio_to_dev(smchip->ourgpio)->dev,
    > "changing mode of gpio, bit %08lx\n", bit);
    >
    > - ctrl = readl(smchip->control);
    > + ctrl = smc501_readl(smchip->control);
    > ctrl &= ~bit;
    > - writel(ctrl, smchip->control);
    > + smc501_writel(ctrl, smchip->control);
    >
    > sm501_sync_regs(sm501_gpio_to_dev(smchip->ourgpio));
    > }
    > @@ -942,10 +943,10 @@ static void sm501_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
    >
    > spin_lock_irqsave(&smgpio->lock, save);
    >
    > - val = readl(regs + SM501_GPIO_DATA_LOW) & ~bit;
    > + val = smc501_readl(regs + SM501_GPIO_DATA_LOW) & ~bit;
    > if (value)
    > val |= bit;
    > - writel(val, regs);
    > + smc501_writel(val, regs);
    >
    > sm501_sync_regs(sm501_gpio_to_dev(smgpio));
    > sm501_gpio_ensure_gpio(smchip, bit);
    > @@ -967,8 +968,8 @@ static int sm501_gpio_input(struct gpio_chip *chip, unsigned offset)
    >
    > spin_lock_irqsave(&smgpio->lock, save);
    >
    > - ddr = readl(regs + SM501_GPIO_DDR_LOW);
    > - writel(ddr & ~bit, regs + SM501_GPIO_DDR_LOW);
    > + ddr = smc501_readl(regs + SM501_GPIO_DDR_LOW);
    > + smc501_writel(ddr & ~bit, regs + SM501_GPIO_DDR_LOW);
    >
    > sm501_sync_regs(sm501_gpio_to_dev(smgpio));
    > sm501_gpio_ensure_gpio(smchip, bit);
    > @@ -994,18 +995,18 @@ static int sm501_gpio_output(struct gpio_chip *chip,
    >
    > spin_lock_irqsave(&smgpio->lock, save);
    >
    > - val = readl(regs + SM501_GPIO_DATA_LOW);
    > + val = smc501_readl(regs + SM501_GPIO_DATA_LOW);
    > if (value)
    > val |= bit;
    > else
    > val &= ~bit;
    > - writel(val, regs);
    > + smc501_writel(val, regs);
    >
    > - ddr = readl(regs + SM501_GPIO_DDR_LOW);
    > - writel(ddr | bit, regs + SM501_GPIO_DDR_LOW);
    > + ddr = smc501_readl(regs + SM501_GPIO_DDR_LOW);
    > + smc501_writel(ddr | bit, regs + SM501_GPIO_DDR_LOW);
    >
    > sm501_sync_regs(sm501_gpio_to_dev(smgpio));
    > - writel(val, regs + SM501_GPIO_DATA_LOW);
    > + smc501_writel(val, regs + SM501_GPIO_DATA_LOW);
    >
    > sm501_sync_regs(sm501_gpio_to_dev(smgpio));
    > spin_unlock_irqrestore(&smgpio->lock, save);
    > @@ -1231,7 +1232,7 @@ static ssize_t sm501_dbg_regs(struct device *dev,
    >
    > for (reg = 0x00; reg < 0x70; reg += 4) {
    > ret = sprintf(ptr, "%08x = %08x\n",
    > - reg, readl(sm->regs + reg));
    > + reg, smc501_readl(sm->regs + reg));
    > ptr += ret;
    > }
    >
    > @@ -1255,10 +1256,10 @@ static inline void sm501_init_reg(struct sm501_devdata *sm,
    > {
    > unsigned long tmp;
    >
    > - tmp = readl(sm->regs + reg);
    > + tmp = smc501_readl(sm->regs + reg);
    > tmp &= ~r->mask;
    > tmp |= r->set;
    > - writel(tmp, sm->regs + reg);
    > + smc501_writel(tmp, sm->regs + reg);
    > }
    >
    > /* sm501_init_regs
    > @@ -1299,7 +1300,7 @@ static void sm501_init_regs(struct sm501_devdata *sm,
    >
    > static int sm501_check_clocks(struct sm501_devdata *sm)
    > {
    > - unsigned long pwrmode = readl(sm->regs + SM501_CURRENT_CLOCK);
    > + unsigned long pwrmode = smc501_readl(sm->regs + SM501_CURRENT_CLOCK);
    > unsigned long msrc = (pwrmode & SM501_POWERMODE_M_SRC);
    > unsigned long m1src = (pwrmode & SM501_POWERMODE_M1_SRC);
    >
    > @@ -1334,7 +1335,7 @@ static int __devinit sm501_init_dev(struct sm501_devdata *sm)
    >
    > INIT_LIST_HEAD(&sm->devices);
    >
    > - devid = readl(sm->regs + SM501_DEVICEID);
    > + devid = smc501_readl(sm->regs + SM501_DEVICEID);
    >
    > if ((devid & SM501_DEVICEID_IDMASK) != SM501_DEVICEID_SM501) {
    > dev_err(sm->dev, "incorrect device id %08lx\n", devid);
    > @@ -1342,9 +1343,9 @@ static int __devinit sm501_init_dev(struct sm501_devdata *sm)
    > }
    >
    > /* disable irqs */
    > - writel(0, sm->regs + SM501_IRQ_MASK);
    > + smc501_writel(0, sm->regs + SM501_IRQ_MASK);
    >
    > - dramctrl = readl(sm->regs + SM501_DRAM_CONTROL);
    > + dramctrl = smc501_readl(sm->regs + SM501_DRAM_CONTROL);
    > mem_avail = sm501_mem_local[(dramctrl >> 13) & 0x7];
    >
    > dev_info(sm->dev, "SM501 At %p: Version %08lx, %ld Mb, IRQ %d\n",
    > @@ -1489,7 +1490,7 @@ static int sm501_plat_suspend(struct platform_device *pdev, pm_message_t state)
    > struct sm501_devdata *sm = platform_get_drvdata(pdev);
    >
    > sm->in_suspend = 1;
    > - sm->pm_misc = readl(sm->regs + SM501_MISC_CONTROL);
    > + sm->pm_misc = smc501_readl(sm->regs + SM501_MISC_CONTROL);
    >
    > sm501_dump_regs(sm);
    >
    > @@ -1513,9 +1514,9 @@ static int sm501_plat_resume(struct platform_device *pdev)
    >
    > /* check to see if we are in the same state as when suspended */
    >
    > - if (readl(sm->regs + SM501_MISC_CONTROL) != sm->pm_misc) {
    > + if (smc501_readl(sm->regs + SM501_MISC_CONTROL) != sm->pm_misc) {
    > dev_info(sm->dev, "SM501_MISC_CONTROL changed over sleep\n");
    > - writel(sm->pm_misc, sm->regs + SM501_MISC_CONTROL);
    > + smc501_writel(sm->pm_misc, sm->regs + SM501_MISC_CONTROL);
    >
    > /* our suspend causes the controller state to change,
    > * either by something attempting setup, power loss,
    > diff --git a/drivers/video/sm501fb.c b/drivers/video/sm501fb.c
    > index bcb44a5..5df406c 100644
    > --- a/drivers/video/sm501fb.c
    > +++ b/drivers/video/sm501fb.c
    > @@ -117,7 +117,7 @@ static inline int v_total(struct fb_var_screeninfo *var)
    >
    > static inline void sm501fb_sync_regs(struct sm501fb_info *info)
    > {
    > - readl(info->regs);
    > + smc501_readl(info->regs);
    > }
    >
    > /* sm501_alloc_mem
    > @@ -262,7 +262,7 @@ static void sm501fb_setup_gamma(struct sm501fb_info *fbi,
    >
    > /* set gamma values */
    > for (offset = 0; offset < 256 * 4; offset += 4) {
    > - writel(value, fbi->regs + palette + offset);
    > + smc501_writel(value, fbi->regs + palette + offset);
    > value += 0x010101; /* Advance RGB by 1,1,1.*/
    > }
    > }
    > @@ -476,7 +476,8 @@ static int sm501fb_set_par_common(struct fb_info *info,
    >
    > /* set start of framebuffer to the screen */
    >
    > - writel(par->screen.sm_addr | SM501_ADDR_FLIP, fbi->regs + head_addr);
    > + smc501_writel(par->screen.sm_addr | SM501_ADDR_FLIP,
    > + fbi->regs + head_addr);
    >
    > /* program CRT clock */
    >
    > @@ -519,7 +520,7 @@ static void sm501fb_set_par_geometry(struct fb_info *info,
    > reg = info->fix.line_length;
    > reg |= ((var->xres * var->bits_per_pixel)/8) << 16;
    >
    > - writel(reg, fbi->regs + (par->head == HEAD_CRT ?
    > + smc501_writel(reg, fbi->regs + (par->head == HEAD_CRT ?
    > SM501_DC_CRT_FB_OFFSET : SM501_DC_PANEL_FB_OFFSET));
    >
    > /* program horizontal total */
    > @@ -527,27 +528,27 @@ static void sm501fb_set_par_geometry(struct fb_info *info,
    > reg = (h_total(var) - 1) << 16;
    > reg |= (var->xres - 1);
    >
    > - writel(reg, base + SM501_OFF_DC_H_TOT);
    > + smc501_writel(reg, base + SM501_OFF_DC_H_TOT);
    >
    > /* program horizontal sync */
    >
    > reg = var->hsync_len << 16;
    > reg |= var->xres + var->right_margin - 1;
    >
    > - writel(reg, base + SM501_OFF_DC_H_SYNC);
    > + smc501_writel(reg, base + SM501_OFF_DC_H_SYNC);
    >
    > /* program vertical total */
    >
    > reg = (v_total(var) - 1) << 16;
    > reg |= (var->yres - 1);
    >
    > - writel(reg, base + SM501_OFF_DC_V_TOT);
    > + smc501_writel(reg, base + SM501_OFF_DC_V_TOT);
    >
    > /* program vertical sync */
    > reg = var->vsync_len << 16;
    > reg |= var->yres + var->lower_margin - 1;
    >
    > - writel(reg, base + SM501_OFF_DC_V_SYNC);
    > + smc501_writel(reg, base + SM501_OFF_DC_V_SYNC);
    > }
    >
    > /* sm501fb_pan_crt
    > @@ -566,15 +567,15 @@ static int sm501fb_pan_crt(struct fb_var_screeninfo *var,
    >
    > xoffs = var->xoffset * bytes_pixel;
    >
    > - reg = readl(fbi->regs + SM501_DC_CRT_CONTROL);
    > + reg = smc501_readl(fbi->regs + SM501_DC_CRT_CONTROL);
    >
    > reg &= ~SM501_DC_CRT_CONTROL_PIXEL_MASK;
    > reg |= ((xoffs & 15) / bytes_pixel) << 4;
    > - writel(reg, fbi->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(reg, fbi->regs + SM501_DC_CRT_CONTROL);
    >
    > reg = (par->screen.sm_addr + xoffs +
    > var->yoffset * info->fix.line_length);
    > - writel(reg | SM501_ADDR_FLIP, fbi->regs + SM501_DC_CRT_FB_ADDR);
    > + smc501_writel(reg | SM501_ADDR_FLIP, fbi->regs + SM501_DC_CRT_FB_ADDR);
    >
    > sm501fb_sync_regs(fbi);
    > return 0;
    > @@ -593,10 +594,10 @@ static int sm501fb_pan_pnl(struct fb_var_screeninfo *var,
    > unsigned long reg;
    >
    > reg = var->xoffset | (var->xres_virtual << 16);
    > - writel(reg, fbi->regs + SM501_DC_PANEL_FB_WIDTH);
    > + smc501_writel(reg, fbi->regs + SM501_DC_PANEL_FB_WIDTH);
    >
    > reg = var->yoffset | (var->yres_virtual << 16);
    > - writel(reg, fbi->regs + SM501_DC_PANEL_FB_HEIGHT);
    > + smc501_writel(reg, fbi->regs + SM501_DC_PANEL_FB_HEIGHT);
    >
    > sm501fb_sync_regs(fbi);
    > return 0;
    > @@ -622,7 +623,7 @@ static int sm501fb_set_par_crt(struct fb_info *info)
    > /* enable CRT DAC - note 0 is on!*/
    > sm501_misc_control(fbi->dev->parent, 0, SM501_MISC_DAC_POWER);
    >
    > - control = readl(fbi->regs + SM501_DC_CRT_CONTROL);
    > + control = smc501_readl(fbi->regs + SM501_DC_CRT_CONTROL);
    >
    > control &= (SM501_DC_CRT_CONTROL_PIXEL_MASK |
    > SM501_DC_CRT_CONTROL_GAMMA |
    > @@ -684,7 +685,7 @@ static int sm501fb_set_par_crt(struct fb_info *info)
    > out_update:
    > dev_dbg(fbi->dev, "new control is %08lx\n", control);
    >
    > - writel(control, fbi->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(control, fbi->regs + SM501_DC_CRT_CONTROL);
    > sm501fb_sync_regs(fbi);
    >
    > return 0;
    > @@ -696,18 +697,18 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
    > void __iomem *ctrl_reg = fbi->regs + SM501_DC_PANEL_CONTROL;
    > struct sm501_platdata_fbsub *pd = fbi->pdata->fb_pnl;
    >
    > - control = readl(ctrl_reg);
    > + control = smc501_readl(ctrl_reg);
    >
    > if (to && (control & SM501_DC_PANEL_CONTROL_VDD) == 0) {
    > /* enable panel power */
    >
    > control |= SM501_DC_PANEL_CONTROL_VDD; /* FPVDDEN */
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    >
    > control |= SM501_DC_PANEL_CONTROL_DATA; /* DATA */
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    >
    > @@ -719,7 +720,7 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
    > else
    > control |= SM501_DC_PANEL_CONTROL_BIAS;
    >
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    > }
    > @@ -730,7 +731,7 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
    > else
    > control |= SM501_DC_PANEL_CONTROL_FPEN;
    >
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    > }
    > @@ -742,7 +743,7 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
    > else
    > control &= ~SM501_DC_PANEL_CONTROL_FPEN;
    >
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    > }
    > @@ -753,18 +754,18 @@ static void sm501fb_panel_power(struct sm501fb_info *fbi, int to)
    > else
    > control &= ~SM501_DC_PANEL_CONTROL_BIAS;
    >
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    > }
    >
    > control &= ~SM501_DC_PANEL_CONTROL_DATA;
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    >
    > control &= ~SM501_DC_PANEL_CONTROL_VDD;
    > - writel(control, ctrl_reg);
    > + smc501_writel(control, ctrl_reg);
    > sm501fb_sync_regs(fbi);
    > mdelay(10);
    > }
    > @@ -799,7 +800,7 @@ static int sm501fb_set_par_pnl(struct fb_info *info)
    >
    > /* update control register */
    >
    > - control = readl(fbi->regs + SM501_DC_PANEL_CONTROL);
    > + control = smc501_readl(fbi->regs + SM501_DC_PANEL_CONTROL);
    > control &= (SM501_DC_PANEL_CONTROL_GAMMA |
    > SM501_DC_PANEL_CONTROL_VDD |
    > SM501_DC_PANEL_CONTROL_DATA |
    > @@ -833,16 +834,16 @@ static int sm501fb_set_par_pnl(struct fb_info *info)
    > BUG();
    > }
    >
    > - writel(0x0, fbi->regs + SM501_DC_PANEL_PANNING_CONTROL);
    > + smc501_writel(0x0, fbi->regs + SM501_DC_PANEL_PANNING_CONTROL);
    >
    > /* panel plane top left and bottom right location */
    >
    > - writel(0x00, fbi->regs + SM501_DC_PANEL_TL_LOC);
    > + smc501_writel(0x00, fbi->regs + SM501_DC_PANEL_TL_LOC);
    >
    > reg = var->xres - 1;
    > reg |= (var->yres - 1) << 16;
    >
    > - writel(reg, fbi->regs + SM501_DC_PANEL_BR_LOC);
    > + smc501_writel(reg, fbi->regs + SM501_DC_PANEL_BR_LOC);
    >
    > /* program panel control register */
    >
    > @@ -855,7 +856,7 @@ static int sm501fb_set_par_pnl(struct fb_info *info)
    > if ((var->sync & FB_SYNC_VERT_HIGH_ACT) == 0)
    > control |= SM501_DC_PANEL_CONTROL_VSP;
    >
    > - writel(control, fbi->regs + SM501_DC_PANEL_CONTROL);
    > + smc501_writel(control, fbi->regs + SM501_DC_PANEL_CONTROL);
    > sm501fb_sync_regs(fbi);
    >
    > /* ensure the panel interface is not tristated at this point */
    > @@ -924,7 +925,7 @@ static int sm501fb_setcolreg(unsigned regno,
    > val |= (green >> 8) << 8;
    > val |= blue >> 8;
    >
    > - writel(val, base + (regno * 4));
    > + smc501_writel(val, base + (regno * 4));
    > }
    >
    > break;
    > @@ -980,7 +981,7 @@ static int sm501fb_blank_crt(int blank_mode, struct fb_info *info)
    >
    > dev_dbg(fbi->dev, "%s(mode=%d, %p)\n", __func__, blank_mode, info);
    >
    > - ctrl = readl(fbi->regs + SM501_DC_CRT_CONTROL);
    > + ctrl = smc501_readl(fbi->regs + SM501_DC_CRT_CONTROL);
    >
    > switch (blank_mode) {
    > case FB_BLANK_POWERDOWN:
    > @@ -1004,7 +1005,7 @@ static int sm501fb_blank_crt(int blank_mode, struct fb_info *info)
    >
    > }
    >
    > - writel(ctrl, fbi->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(ctrl, fbi->regs + SM501_DC_CRT_CONTROL);
    > sm501fb_sync_regs(fbi);
    >
    > return 0;
    > @@ -1041,12 +1042,14 @@ static int sm501fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
    > if (cursor->image.depth > 1)
    > return -EINVAL;
    >
    > - hwc_addr = readl(base + SM501_OFF_HWC_ADDR);
    > + hwc_addr = smc501_readl(base + SM501_OFF_HWC_ADDR);
    >
    > if (cursor->enable)
    > - writel(hwc_addr | SM501_HWC_EN, base + SM501_OFF_HWC_ADDR);
    > + smc501_writel(hwc_addr | SM501_HWC_EN,
    > + base + SM501_OFF_HWC_ADDR);
    > else
    > - writel(hwc_addr & ~SM501_HWC_EN, base + SM501_OFF_HWC_ADDR);
    > + smc501_writel(hwc_addr & ~SM501_HWC_EN,
    > + base + SM501_OFF_HWC_ADDR);
    >
    > /* set data */
    > if (cursor->set & FB_CUR_SETPOS) {
    > @@ -1060,7 +1063,7 @@ static int sm501fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
    >
    > //y += cursor->image.height;
    >
    > - writel(x | (y << 16), base + SM501_OFF_HWC_LOC);
    > + smc501_writel(x | (y << 16), base + SM501_OFF_HWC_LOC);
    > }
    >
    > if (cursor->set & FB_CUR_SETCMAP) {
    > @@ -1080,8 +1083,8 @@ static int sm501fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
    >
    > dev_dbg(fbi->dev, "fgcol %08lx, bgcol %08lx\n", fg, bg);
    >
    > - writel(bg, base + SM501_OFF_HWC_COLOR_1_2);
    > - writel(fg, base + SM501_OFF_HWC_COLOR_3);
    > + smc501_writel(bg, base + SM501_OFF_HWC_COLOR_1_2);
    > + smc501_writel(fg, base + SM501_OFF_HWC_COLOR_3);
    > }
    >
    > if (cursor->set & FB_CUR_SETSIZE ||
    > @@ -1102,7 +1105,7 @@ static int sm501fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
    > __func__, cursor->image.width, cursor->image.height);
    >
    > for (op = 0; op < (64*64*2)/8; op+=4)
    > - writel(0x0, dst + op);
    > + smc501_writel(0x0, dst + op);
    >
    > for (y = 0; y < cursor->image.height; y++) {
    > for (x = 0; x < cursor->image.width; x++) {
    > @@ -1141,7 +1144,7 @@ static ssize_t sm501fb_crtsrc_show(struct device *dev,
    > struct sm501fb_info *info = dev_get_drvdata(dev);
    > unsigned long ctrl;
    >
    > - ctrl = readl(info->regs + SM501_DC_CRT_CONTROL);
    > + ctrl = smc501_readl(info->regs + SM501_DC_CRT_CONTROL);
    > ctrl &= SM501_DC_CRT_CONTROL_SEL;
    >
    > return snprintf(buf, PAGE_SIZE, "%s\n", ctrl ? "crt" : "panel");
    > @@ -1172,7 +1175,7 @@ static ssize_t sm501fb_crtsrc_store(struct device *dev,
    >
    > dev_info(dev, "setting crt source to head %d\n", head);
    >
    > - ctrl = readl(info->regs + SM501_DC_CRT_CONTROL);
    > + ctrl = smc501_readl(info->regs + SM501_DC_CRT_CONTROL);
    >
    > if (head == HEAD_CRT) {
    > ctrl |= SM501_DC_CRT_CONTROL_SEL;
    > @@ -1184,7 +1187,7 @@ static ssize_t sm501fb_crtsrc_store(struct device *dev,
    > ctrl &= ~SM501_DC_CRT_CONTROL_TE;
    > }
    >
    > - writel(ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > sm501fb_sync_regs(info);
    >
    > return len;
    > @@ -1205,7 +1208,8 @@ static int sm501fb_show_regs(struct sm501fb_info *info, char *ptr,
    > unsigned int reg;
    >
    > for (reg = start; reg < (len + start); reg += 4)
    > - ptr += sprintf(ptr, "%08x = %08x\n", reg, readl(mem + reg));
    > + ptr += sprintf(ptr, "%08x = %08x\n", reg,
    > + smc501_readl(mem + reg));
    >
    > return ptr - buf;
    > }
    > @@ -1257,7 +1261,7 @@ static int sm501fb_sync(struct fb_info *info)
    >
    > /* wait for the 2d engine to be ready */
    > while ((count > 0) &&
    > - (readl(fbi->regs + SM501_SYSTEM_CONTROL) &
    > + (smc501_readl(fbi->regs + SM501_SYSTEM_CONTROL) &
    > SM501_SYSCTRL_2D_ENGINE_STATUS) != 0)
    > count--;
    >
    > @@ -1312,45 +1316,46 @@ static void sm501fb_copyarea(struct fb_info *info, const struct fb_copyarea *are
    > return;
    >
    > /* set the base addresses */
    > - writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_SOURCE_BASE);
    > - writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_DESTINATION_BASE);
    > + smc501_writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_SOURCE_BASE);
    > + smc501_writel(par->screen.sm_addr,
    > + fbi->regs2d + SM501_2D_DESTINATION_BASE);
    >
    > /* set the window width */
    > - writel((info->var.xres << 16) | info->var.xres,
    > + smc501_writel((info->var.xres << 16) | info->var.xres,
    > fbi->regs2d + SM501_2D_WINDOW_WIDTH);
    >
    > /* set window stride */
    > - writel((info->var.xres_virtual << 16) | info->var.xres_virtual,
    > + smc501_writel((info->var.xres_virtual << 16) | info->var.xres_virtual,
    > fbi->regs2d + SM501_2D_PITCH);
    >
    > /* set data format */
    > switch (info->var.bits_per_pixel) {
    > case 8:
    > - writel(0, fbi->regs2d + SM501_2D_STRETCH);
    > + smc501_writel(0, fbi->regs2d + SM501_2D_STRETCH);
    > break;
    > case 16:
    > - writel(0x00100000, fbi->regs2d + SM501_2D_STRETCH);
    > + smc501_writel(0x00100000, fbi->regs2d + SM501_2D_STRETCH);
    > break;
    > case 32:
    > - writel(0x00200000, fbi->regs2d + SM501_2D_STRETCH);
    > + smc501_writel(0x00200000, fbi->regs2d + SM501_2D_STRETCH);
    > break;
    > }
    >
    > /* 2d compare mask */
    > - writel(0xffffffff, fbi->regs2d + SM501_2D_COLOR_COMPARE_MASK);
    > + smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_COLOR_COMPARE_MASK);
    >
    > /* 2d mask */
    > - writel(0xffffffff, fbi->regs2d + SM501_2D_MASK);
    > + smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_MASK);
    >
    > /* source and destination x y */
    > - writel((sx << 16) | sy, fbi->regs2d + SM501_2D_SOURCE);
    > - writel((dx << 16) | dy, fbi->regs2d + SM501_2D_DESTINATION);
    > + smc501_writel((sx << 16) | sy, fbi->regs2d + SM501_2D_SOURCE);
    > + smc501_writel((dx << 16) | dy, fbi->regs2d + SM501_2D_DESTINATION);
    >
    > /* w/h */
    > - writel((width << 16) | height, fbi->regs2d + SM501_2D_DIMENSION);
    > + smc501_writel((width << 16) | height, fbi->regs2d + SM501_2D_DIMENSION);
    >
    > /* do area move */
    > - writel(0x800000cc | rtl, fbi->regs2d + SM501_2D_CONTROL);
    > + smc501_writel(0x800000cc | rtl, fbi->regs2d + SM501_2D_CONTROL);
    > }
    >
    > static void sm501fb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
    > @@ -1372,47 +1377,49 @@ static void sm501fb_fillrect(struct fb_info *info, const struct fb_fillrect *rec
    > return;
    >
    > /* set the base addresses */
    > - writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_SOURCE_BASE);
    > - writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_DESTINATION_BASE);
    > + smc501_writel(par->screen.sm_addr, fbi->regs2d + SM501_2D_SOURCE_BASE);
    > + smc501_writel(par->screen.sm_addr,
    > + fbi->regs2d + SM501_2D_DESTINATION_BASE);
    >
    > /* set the window width */
    > - writel((info->var.xres << 16) | info->var.xres,
    > + smc501_writel((info->var.xres << 16) | info->var.xres,
    > fbi->regs2d + SM501_2D_WINDOW_WIDTH);
    >
    > /* set window stride */
    > - writel((info->var.xres_virtual << 16) | info->var.xres_virtual,
    > + smc501_writel((info->var.xres_virtual << 16) | info->var.xres_virtual,
    > fbi->regs2d + SM501_2D_PITCH);
    >
    > /* set data format */
    > switch (info->var.bits_per_pixel) {
    > case 8:
    > - writel(0, fbi->regs2d + SM501_2D_STRETCH);
    > + smc501_writel(0, fbi->regs2d + SM501_2D_STRETCH);
    > break;
    > case 16:
    > - writel(0x00100000, fbi->regs2d + SM501_2D_STRETCH);
    > + smc501_writel(0x00100000, fbi->regs2d + SM501_2D_STRETCH);
    > break;
    > case 32:
    > - writel(0x00200000, fbi->regs2d + SM501_2D_STRETCH);
    > + smc501_writel(0x00200000, fbi->regs2d + SM501_2D_STRETCH);
    > break;
    > }
    >
    > /* 2d compare mask */
    > - writel(0xffffffff, fbi->regs2d + SM501_2D_COLOR_COMPARE_MASK);
    > + smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_COLOR_COMPARE_MASK);
    >
    > /* 2d mask */
    > - writel(0xffffffff, fbi->regs2d + SM501_2D_MASK);
    > + smc501_writel(0xffffffff, fbi->regs2d + SM501_2D_MASK);
    >
    > /* colour */
    > - writel(rect->color, fbi->regs2d + SM501_2D_FOREGROUND);
    > + smc501_writel(rect->color, fbi->regs2d + SM501_2D_FOREGROUND);
    >
    > /* x y */
    > - writel((rect->dx << 16) | rect->dy, fbi->regs2d + SM501_2D_DESTINATION);
    > + smc501_writel((rect->dx << 16) | rect->dy,
    > + fbi->regs2d + SM501_2D_DESTINATION);
    >
    > /* w/h */
    > - writel((width << 16) | height, fbi->regs2d + SM501_2D_DIMENSION);
    > + smc501_writel((width << 16) | height, fbi->regs2d + SM501_2D_DIMENSION);
    >
    > /* do rectangle fill */
    > - writel(0x800100cc, fbi->regs2d + SM501_2D_CONTROL);
    > + smc501_writel(0x800100cc, fbi->regs2d + SM501_2D_CONTROL);
    > }
    >
    >
    > @@ -1470,11 +1477,12 @@ static int sm501_init_cursor(struct fb_info *fbi, unsigned int reg_base)
    >
    > /* initialise the colour registers */
    >
    > - writel(par->cursor.sm_addr, par->cursor_regs + SM501_OFF_HWC_ADDR);
    > + smc501_writel(par->cursor.sm_addr,
    > + par->cursor_regs + SM501_OFF_HWC_ADDR);
    >
    > - writel(0x00, par->cursor_regs + SM501_OFF_HWC_LOC);
    > - writel(0x00, par->cursor_regs + SM501_OFF_HWC_COLOR_1_2);
    > - writel(0x00, par->cursor_regs + SM501_OFF_HWC_COLOR_3);
    > + smc501_writel(0x00, par->cursor_regs + SM501_OFF_HWC_LOC);
    > + smc501_writel(0x00, par->cursor_regs + SM501_OFF_HWC_COLOR_1_2);
    > + smc501_writel(0x00, par->cursor_regs + SM501_OFF_HWC_COLOR_3);
    > sm501fb_sync_regs(info);
    >
    > return 0;
    > @@ -1581,7 +1589,7 @@ static int sm501fb_start(struct sm501fb_info *info,
    >
    > /* clear palette ram - undefined at power on */
    > for (k = 0; k < (256 * 3); k++)
    > - writel(0, info->regs + SM501_DC_PANEL_PALETTE + (k * 4));
    > + smc501_writel(0, info->regs + SM501_DC_PANEL_PALETTE + (k * 4));
    >
    > /* enable display controller */
    > sm501_unit_power(dev->parent, SM501_GATE_DISPLAY, 1);
    > @@ -1649,20 +1657,20 @@ static int sm501fb_init_fb(struct fb_info *fb,
    > switch (head) {
    > case HEAD_CRT:
    > pd = info->pdata->fb_crt;
    > - ctrl = readl(info->regs + SM501_DC_CRT_CONTROL);
    > + ctrl = smc501_readl(info->regs + SM501_DC_CRT_CONTROL);
    > enable = (ctrl & SM501_DC_CRT_CONTROL_ENABLE) ? 1 : 0;
    >
    > /* ensure we set the correct source register */
    > if (info->pdata->fb_route != SM501_FB_CRT_PANEL) {
    > ctrl |= SM501_DC_CRT_CONTROL_SEL;
    > - writel(ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > }
    >
    > break;
    >
    > case HEAD_PANEL:
    > pd = info->pdata->fb_pnl;
    > - ctrl = readl(info->regs + SM501_DC_PANEL_CONTROL);
    > + ctrl = smc501_readl(info->regs + SM501_DC_PANEL_CONTROL);
    > enable = (ctrl & SM501_DC_PANEL_CONTROL_EN) ? 1 : 0;
    > break;
    >
    > @@ -1680,7 +1688,7 @@ static int sm501fb_init_fb(struct fb_info *fb,
    >
    > if (head == HEAD_CRT && info->pdata->fb_route == SM501_FB_CRT_PANEL) {
    > ctrl &= ~SM501_DC_CRT_CONTROL_SEL;
    > - writel(ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > enable = 0;
    > }
    >
    > @@ -2085,7 +2093,7 @@ static int sm501fb_suspend(struct platform_device *pdev, pm_message_t state)
    > struct sm501fb_info *info = platform_get_drvdata(pdev);
    >
    > /* store crt control to resume with */
    > - info->pm_crt_ctrl = readl(info->regs + SM501_DC_CRT_CONTROL);
    > + info->pm_crt_ctrl = smc501_readl(info->regs + SM501_DC_CRT_CONTROL);
    >
    > sm501fb_suspend_fb(info, HEAD_CRT);
    > sm501fb_suspend_fb(info, HEAD_PANEL);
    > @@ -2109,10 +2117,10 @@ static int sm501fb_resume(struct platform_device *pdev)
    >
    > /* restore the items we want to be saved for crt control */
    >
    > - crt_ctrl = readl(info->regs + SM501_DC_CRT_CONTROL);
    > + crt_ctrl = smc501_readl(info->regs + SM501_DC_CRT_CONTROL);
    > crt_ctrl &= ~SM501_CRT_CTRL_SAVE;
    > crt_ctrl |= info->pm_crt_ctrl & SM501_CRT_CTRL_SAVE;
    > - writel(crt_ctrl, info->regs + SM501_DC_CRT_CONTROL);
    > + smc501_writel(crt_ctrl, info->regs + SM501_DC_CRT_CONTROL);
    >
    > sm501fb_resume_fb(info, HEAD_CRT);
    > sm501fb_resume_fb(info, HEAD_PANEL);
    > diff --git a/include/linux/sm501.h b/include/linux/sm501.h
    > index 214f932..02fde50 100644
    > --- a/include/linux/sm501.h
    > +++ b/include/linux/sm501.h
    > @@ -172,3 +172,11 @@ struct sm501_platdata {
    > struct sm501_platdata_gpio_i2c *gpio_i2c;
    > unsigned int gpio_i2c_nr;
    > };
    > +
    > +#if defined(CONFIG_PPC32)
    > +#define smc501_readl(addr) ioread32be((addr))
    > +#define smc501_writel(val, addr) iowrite32be((val), (addr))
    > +#else
    > +#define smc501_readl(addr) readl(addr)
    > +#define smc501_writel(val, addr) writel(val, addr)
    > +#endif
    > --
    > 1.7.4
    >


    \
     
     \ /
      Last update: 2011-05-03 00:27    [W:0.103 / U:1.992 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site