usb: musb: set the controller speed based on the config setting

Set the Power register HSENAB bit based on musb->config->maximum_speed,
so that the glue layer can control MUSB to work in high- or full-speed.

Signed-off-by: Bin Liu <b-liu@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Bin Liu
2015-09-09 13:17:23 -05:00
committed by Felipe Balbi
parent f35fe4beb0
commit 9b7537642c
2 changed files with 11 additions and 7 deletions

View File

@@ -1028,18 +1028,22 @@ void musb_start(struct musb *musb)
{ {
void __iomem *regs = musb->mregs; void __iomem *regs = musb->mregs;
u8 devctl = musb_readb(regs, MUSB_DEVCTL); u8 devctl = musb_readb(regs, MUSB_DEVCTL);
u8 power;
dev_dbg(musb->controller, "<== devctl %02x\n", devctl); dev_dbg(musb->controller, "<== devctl %02x\n", devctl);
musb_enable_interrupts(musb); musb_enable_interrupts(musb);
musb_writeb(regs, MUSB_TESTMODE, 0); musb_writeb(regs, MUSB_TESTMODE, 0);
/* put into basic highspeed mode and start session */ power = MUSB_POWER_ISOUPDATE;
musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE /*
| MUSB_POWER_HSENAB * treating UNKNOWN as unspecified maximum speed, in which case
/* ENSUSPEND wedges tusb */ * we will default to high-speed.
/* | MUSB_POWER_ENSUSPEND */ */
); if (musb->config->maximum_speed == USB_SPEED_HIGH ||
musb->config->maximum_speed == USB_SPEED_UNKNOWN)
power |= MUSB_POWER_HSENAB;
musb_writeb(regs, MUSB_POWER, power);
musb->is_active = 0; musb->is_active = 0;
devctl = musb_readb(regs, MUSB_DEVCTL); devctl = musb_readb(regs, MUSB_DEVCTL);

View File

@@ -95,7 +95,7 @@ struct musb_hdrc_config {
/* musb CLKIN in Blackfin in MHZ */ /* musb CLKIN in Blackfin in MHZ */
unsigned char clkin; unsigned char clkin;
#endif #endif
u32 maximum_speed;
}; };
struct musb_hdrc_platform_data { struct musb_hdrc_platform_data {