提交 0cb74b3d 编写于 作者: H Hans de Goede 提交者: Felipe Balbi

usb: musb: Make musb_write_rxfun* and musb_write_rxhub* work like their tx versions

For some reason the musb_write_rxfun* and musb_write_rxhub* functions had
a different function prototype and some extra magic needed on the caller side
compared to their tx counterparts, this commit makes them work the same as
their tx counterparts.
Signed-off-by: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NFelipe Balbi <balbi@ti.com>
上级 f5e4edb8
...@@ -1544,7 +1544,6 @@ static int musb_core_init(u16 musb_type, struct musb *musb) ...@@ -1544,7 +1544,6 @@ static int musb_core_init(u16 musb_type, struct musb *musb)
#endif #endif
hw_ep->regs = musb->io.ep_offset(i, 0) + mbase; hw_ep->regs = musb->io.ep_offset(i, 0) + mbase;
hw_ep->target_regs = musb_read_target_reg_base(i, mbase);
hw_ep->rx_reinit = 1; hw_ep->rx_reinit = 1;
hw_ep->tx_reinit = 1; hw_ep->tx_reinit = 1;
...@@ -2352,7 +2351,6 @@ static void musb_restore_context(struct musb *musb) ...@@ -2352,7 +2351,6 @@ static void musb_restore_context(struct musb *musb)
{ {
int i; int i;
void __iomem *musb_base = musb->mregs; void __iomem *musb_base = musb->mregs;
void __iomem *ep_target_regs;
void __iomem *epio; void __iomem *epio;
u8 power; u8 power;
...@@ -2420,14 +2418,11 @@ static void musb_restore_context(struct musb *musb) ...@@ -2420,14 +2418,11 @@ static void musb_restore_context(struct musb *musb)
musb_write_txhubport(musb_base, i, musb_write_txhubport(musb_base, i,
musb->context.index_regs[i].txhubport); musb->context.index_regs[i].txhubport);
ep_target_regs = musb_write_rxfunaddr(musb_base, i,
musb_read_target_reg_base(i, musb_base);
musb_write_rxfunaddr(ep_target_regs,
musb->context.index_regs[i].rxfunaddr); musb->context.index_regs[i].rxfunaddr);
musb_write_rxhubaddr(ep_target_regs, musb_write_rxhubaddr(musb_base, i,
musb->context.index_regs[i].rxhubaddr); musb->context.index_regs[i].rxhubaddr);
musb_write_rxhubport(ep_target_regs, musb_write_rxhubport(musb_base, i,
musb->context.index_regs[i].rxhubport); musb->context.index_regs[i].rxhubport);
} }
musb_writeb(musb_base, MUSB_INDEX, musb->context.index); musb_writeb(musb_base, MUSB_INDEX, musb->context.index);
......
...@@ -250,8 +250,6 @@ struct musb_hw_ep { ...@@ -250,8 +250,6 @@ struct musb_hw_ep {
void __iomem *fifo_sync_va; void __iomem *fifo_sync_va;
#endif #endif
void __iomem *target_regs;
/* currently scheduled peripheral endpoint */ /* currently scheduled peripheral endpoint */
struct musb_qh *in_qh; struct musb_qh *in_qh;
struct musb_qh *out_qh; struct musb_qh *out_qh;
......
...@@ -555,8 +555,9 @@ musb_host_packet_rx(struct musb *musb, struct urb *urb, u8 epnum, u8 iso_err) ...@@ -555,8 +555,9 @@ musb_host_packet_rx(struct musb *musb, struct urb *urb, u8 epnum, u8 iso_err)
* the busy/not-empty tests are basically paranoia. * the busy/not-empty tests are basically paranoia.
*/ */
static void static void
musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep) musb_rx_reinit(struct musb *musb, struct musb_qh *qh, u8 epnum)
{ {
struct musb_hw_ep *ep = musb->endpoints + epnum;
u16 csr; u16 csr;
/* NOTE: we know the "rx" fifo reinit never triggers for ep0. /* NOTE: we know the "rx" fifo reinit never triggers for ep0.
...@@ -594,10 +595,9 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep) ...@@ -594,10 +595,9 @@ musb_rx_reinit(struct musb *musb, struct musb_qh *qh, struct musb_hw_ep *ep)
/* target addr and (for multipoint) hub addr/port */ /* target addr and (for multipoint) hub addr/port */
if (musb->is_multipoint) { if (musb->is_multipoint) {
musb_write_rxfunaddr(ep->target_regs, qh->addr_reg); musb_write_rxfunaddr(musb->mregs, epnum, qh->addr_reg);
musb_write_rxhubaddr(ep->target_regs, qh->h_addr_reg); musb_write_rxhubaddr(musb->mregs, epnum, qh->h_addr_reg);
musb_write_rxhubport(ep->target_regs, qh->h_port_reg); musb_write_rxhubport(musb->mregs, epnum, qh->h_port_reg);
} else } else
musb_writeb(musb->mregs, MUSB_FADDR, qh->addr_reg); musb_writeb(musb->mregs, MUSB_FADDR, qh->addr_reg);
...@@ -910,7 +910,7 @@ static void musb_ep_program(struct musb *musb, u8 epnum, ...@@ -910,7 +910,7 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
u16 csr; u16 csr;
if (hw_ep->rx_reinit) { if (hw_ep->rx_reinit) {
musb_rx_reinit(musb, qh, hw_ep); musb_rx_reinit(musb, qh, epnum);
/* init new state: toggle and NYET, maybe DMA later */ /* init new state: toggle and NYET, maybe DMA later */
if (usb_gettoggle(urb->dev, qh->epnum, 0)) if (usb_gettoggle(urb->dev, qh->epnum, 0))
......
...@@ -364,27 +364,25 @@ static inline u16 musb_read_hwvers(void __iomem *mbase) ...@@ -364,27 +364,25 @@ static inline u16 musb_read_hwvers(void __iomem *mbase)
return musb_readw(mbase, MUSB_HWVERS); return musb_readw(mbase, MUSB_HWVERS);
} }
static inline void __iomem *musb_read_target_reg_base(u8 i, void __iomem *mbase) static inline void musb_write_rxfunaddr(void __iomem *mbase, u8 epnum,
{
return (MUSB_BUSCTL_OFFSET(i, 0) + mbase);
}
static inline void musb_write_rxfunaddr(void __iomem *ep_target_regs,
u8 qh_addr_reg) u8 qh_addr_reg)
{ {
musb_writeb(ep_target_regs, MUSB_RXFUNCADDR, qh_addr_reg); musb_writeb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXFUNCADDR),
qh_addr_reg);
} }
static inline void musb_write_rxhubaddr(void __iomem *ep_target_regs, static inline void musb_write_rxhubaddr(void __iomem *mbase, u8 epnum,
u8 qh_h_addr_reg) u8 qh_h_addr_reg)
{ {
musb_writeb(ep_target_regs, MUSB_RXHUBADDR, qh_h_addr_reg); musb_writeb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXHUBADDR),
qh_h_addr_reg);
} }
static inline void musb_write_rxhubport(void __iomem *ep_target_regs, static inline void musb_write_rxhubport(void __iomem *mbase, u8 epnum,
u8 qh_h_port_reg) u8 qh_h_port_reg)
{ {
musb_writeb(ep_target_regs, MUSB_RXHUBPORT, qh_h_port_reg); musb_writeb(mbase, MUSB_BUSCTL_OFFSET(epnum, MUSB_RXHUBPORT),
qh_h_port_reg);
} }
static inline void musb_write_txfunaddr(void __iomem *mbase, u8 epnum, static inline void musb_write_txfunaddr(void __iomem *mbase, u8 epnum,
...@@ -556,22 +554,17 @@ static inline u16 musb_read_hwvers(void __iomem *mbase) ...@@ -556,22 +554,17 @@ static inline u16 musb_read_hwvers(void __iomem *mbase)
return MUSB_HWVERS_1900; return MUSB_HWVERS_1900;
} }
static inline void __iomem *musb_read_target_reg_base(u8 i, void __iomem *mbase) static inline void musb_write_rxfunaddr(void __iomem *mbase, u8 epnum,
{
return NULL;
}
static inline void musb_write_rxfunaddr(void __iomem *ep_target_regs,
u8 qh_addr_req) u8 qh_addr_req)
{ {
} }
static inline void musb_write_rxhubaddr(void __iomem *ep_target_regs, static inline void musb_write_rxhubaddr(void __iomem *mbase, u8 epnum,
u8 qh_h_addr_reg) u8 qh_h_addr_reg)
{ {
} }
static inline void musb_write_rxhubport(void __iomem *ep_target_regs, static inline void musb_write_rxhubport(void __iomem *mbase, u8 epnum,
u8 qh_h_port_reg) u8 qh_h_port_reg)
{ {
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册