diff options
author | Hans de Goede <hdegoede@redhat.com> | 2015-03-20 15:11:12 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2015-05-26 11:46:54 -0400 |
commit | 6cc2af6d50204e8a1034ecd162378ceea22b09e8 (patch) | |
tree | da62fadb96bb790ebbdc9ce0b1fbe7fbcaf4a2f3 /drivers/usb/musb/musb_core.c | |
parent | 0cb74b3dc45a5448161eb481d4709cdda2a889fd (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.c | 34 |
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 | ||
254 | static u32 musb_default_busctl_offset(u8 epnum, u16 offset) | ||
255 | { | ||
256 | return 0x80 + (0x08 * epnum) + offset; | ||
257 | } | ||
258 | |||
254 | static u8 musb_default_readb(const void __iomem *addr, unsigned offset) | 259 | static 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); |