aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb/musb_core.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2015-03-20 15:11:12 -0400
committerFelipe Balbi <balbi@ti.com>2015-05-26 11:46:54 -0400
commit6cc2af6d50204e8a1034ecd162378ceea22b09e8 (patch)
treeda62fadb96bb790ebbdc9ce0b1fbe7fbcaf4a2f3 /drivers/usb/musb/musb_core.c
parent0cb74b3dc45a5448161eb481d4709cdda2a889fd (diff)
usb: musb: Make busctl_offset an io-op rather then a define
The Allwinner (sunxi) implementation of the musb has its busctl registers indexed by the MUSB_INDEX register rather then in a flat address space. This commit turns MUSB_BUSCTL_OFFSET from a macro into an io-op which can be overridden from the platform ops. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/musb/musb_core.c')
-rw-r--r--drivers/usb/musb/musb_core.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index a3bc06d56fcb..fea3402f12d5 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -251,6 +251,11 @@ static u32 musb_indexed_ep_offset(u8 epnum, u16 offset)
251 return 0x10 + offset; 251 return 0x10 + offset;
252} 252}
253 253
254static u32 musb_default_busctl_offset(u8 epnum, u16 offset)
255{
256 return 0x80 + (0x08 * epnum) + offset;
257}
258
254static u8 musb_default_readb(const void __iomem *addr, unsigned offset) 259static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
255{ 260{
256 return __raw_readb(addr + offset); 261 return __raw_readb(addr + offset);
@@ -2052,6 +2057,11 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
2052 else 2057 else
2053 musb->io.fifo_offset = musb_default_fifo_offset; 2058 musb->io.fifo_offset = musb_default_fifo_offset;
2054 2059
2060 if (musb->ops->busctl_offset)
2061 musb->io.busctl_offset = musb->ops->busctl_offset;
2062 else
2063 musb->io.busctl_offset = musb_default_busctl_offset;
2064
2055 if (musb->ops->readb) 2065 if (musb->ops->readb)
2056 musb_readb = musb->ops->readb; 2066 musb_readb = musb->ops->readb;
2057 if (musb->ops->writeb) 2067 if (musb->ops->writeb)
@@ -2332,18 +2342,18 @@ static void musb_save_context(struct musb *musb)
2332 musb_readb(epio, MUSB_RXINTERVAL); 2342 musb_readb(epio, MUSB_RXINTERVAL);
2333 2343
2334 musb->context.index_regs[i].txfunaddr = 2344 musb->context.index_regs[i].txfunaddr =
2335 musb_read_txfunaddr(musb_base, i); 2345 musb_read_txfunaddr(musb, i);
2336 musb->context.index_regs[i].txhubaddr = 2346 musb->context.index_regs[i].txhubaddr =
2337 musb_read_txhubaddr(musb_base, i); 2347 musb_read_txhubaddr(musb, i);
2338 musb->context.index_regs[i].txhubport = 2348 musb->context.index_regs[i].txhubport =
2339 musb_read_txhubport(musb_base, i); 2349 musb_read_txhubport(musb, i);
2340 2350
2341 musb->context.index_regs[i].rxfunaddr = 2351 musb->context.index_regs[i].rxfunaddr =
2342 musb_read_rxfunaddr(musb_base, i); 2352 musb_read_rxfunaddr(musb, i);
2343 musb->context.index_regs[i].rxhubaddr = 2353 musb->context.index_regs[i].rxhubaddr =
2344 musb_read_rxhubaddr(musb_base, i); 2354 musb_read_rxhubaddr(musb, i);
2345 musb->context.index_regs[i].rxhubport = 2355 musb->context.index_regs[i].rxhubport =
2346 musb_read_rxhubport(musb_base, i); 2356 musb_read_rxhubport(musb, i);
2347 } 2357 }
2348} 2358}
2349 2359
@@ -2411,18 +2421,18 @@ static void musb_restore_context(struct musb *musb)
2411 musb_writeb(epio, MUSB_RXINTERVAL, 2421 musb_writeb(epio, MUSB_RXINTERVAL,
2412 2422
2413 musb->context.index_regs[i].rxinterval); 2423 musb->context.index_regs[i].rxinterval);
2414 musb_write_txfunaddr(musb_base, i, 2424 musb_write_txfunaddr(musb, i,
2415 musb->context.index_regs[i].txfunaddr); 2425 musb->context.index_regs[i].txfunaddr);
2416 musb_write_txhubaddr(musb_base, i, 2426 musb_write_txhubaddr(musb, i,
2417 musb->context.index_regs[i].txhubaddr); 2427 musb->context.index_regs[i].txhubaddr);
2418 musb_write_txhubport(musb_base, i, 2428 musb_write_txhubport(musb, i,
2419 musb->context.index_regs[i].txhubport); 2429 musb->context.index_regs[i].txhubport);
2420 2430
2421 musb_write_rxfunaddr(musb_base, i, 2431 musb_write_rxfunaddr(musb, i,
2422 musb->context.index_regs[i].rxfunaddr); 2432 musb->context.index_regs[i].rxfunaddr);
2423 musb_write_rxhubaddr(musb_base, i, 2433 musb_write_rxhubaddr(musb, i,
2424 musb->context.index_regs[i].rxhubaddr); 2434 musb->context.index_regs[i].rxhubaddr);
2425 musb_write_rxhubport(musb_base, i, 2435 musb_write_rxhubport(musb, i,
2426 musb->context.index_regs[i].rxhubport); 2436 musb->context.index_regs[i].rxhubport);
2427 } 2437 }
2428 musb_writeb(musb_base, MUSB_INDEX, musb->context.index); 2438 musb_writeb(musb_base, MUSB_INDEX, musb->context.index);