On Wed, Sep 9, 2015 at 12:56 PM, Felipe Balbi <balbi@xxxxxx> wrote: > On Wed, Sep 09, 2015 at 12:55:24PM -0500, Bin Liu wrote: >> On Wed, Sep 9, 2015 at 12:51 PM, Felipe Balbi <balbi@xxxxxx> wrote: >> > On Wed, Sep 09, 2015 at 12:46:43PM -0500, Bin Liu wrote: >> >> Hi, >> >> >> >> On Wed, Sep 9, 2015 at 12:26 PM, Felipe Balbi <balbi@xxxxxx> wrote: >> >> > On Wed, Sep 09, 2015 at 12:18:27PM -0500, Bin Liu wrote: >> >> >> Hi, >> >> >> >> >> >> On 09/09/2015 08:37 AM, Bin Liu wrote: >> >> >> >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@xxxxxx> >> >> >> >--- >> >> >> > drivers/usb/musb/musb_core.c | 10 +++++----- >> >> >> > include/linux/usb/musb.h | 2 +- >> >> >> > 2 files changed, 6 insertions(+), 6 deletions(-) >> >> >> > >> >> >> >diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c >> >> >> >index 6dca3d7..5d8014e 100644 >> >> >> >--- a/drivers/usb/musb/musb_core.c >> >> >> >+++ b/drivers/usb/musb/musb_core.c >> >> >> >@@ -1014,6 +1014,7 @@ void musb_start(struct musb *musb) >> >> >> > { >> >> >> > void __iomem *regs = musb->mregs; >> >> >> > u8 devctl = musb_readb(regs, MUSB_DEVCTL); >> >> >> >+ u8 power; >> >> >> > >> >> >> > dev_dbg(musb->controller, "<== devctl %02x\n", devctl); >> >> >> > >> >> >> >@@ -1021,11 +1022,10 @@ void musb_start(struct musb *musb) >> >> >> > musb_writeb(regs, MUSB_TESTMODE, 0); >> >> >> > >> >> >> > /* put into basic highspeed mode and start session */ >> >> >> >- musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE >> >> >> >- | MUSB_POWER_HSENAB >> >> >> >- /* ENSUSPEND wedges tusb */ >> >> >> >- /* | MUSB_POWER_ENSUSPEND */ >> >> >> >- ); >> >> >> >+ power = MUSB_POWER_ISOUPDATE; >> >> >> >+ if (musb->config->maximum_speed == USB_SPEED_HIGH) >> >> >> >+ power |= MUSB_POWER_HSENAB; >> >> >> >> >> >> Well, I think this breaks other glue drivers, in which case that >> >> >> musb->config is not allocated, or config->maximum_speed is 0 by default if >> >> >> not set in dts. So, to avoid patching all other glue drivers, is the >> >> >> following change acceptable? >> >> >> >> >> >> + if (musb->config->maximum_speed != USB_SPEED_FULL && >> >> >> + musb->config->maximum_speed != USB_SPEED_LOW) >> >> >> + power |= MUSB_POWER_HSENAB; >> >> > >> >> > /* >> >> > * treating UNKNONW as unspecified maximum speed, in which case >> >> > * we will default to HIGH speed. >> >> > */ >> >> > if (musb->config->maximum_speed == HIGH || >> >> > musb->config->maximum_speed == UNKNOWN) >> >> > power |= HSENAB; >> >> > >> >> > how about that ? >> >> >> >> Yeah, It is easy to read, but is musb->config NULL in am35x.c, >> >> tusb6010.c, davinci.c, and other old style gules? I am unable to >> >> follow their init routine to see how musb->config is initialized. >> > >> > config is never NULL, if it is we have bigger problems ;-) Note that >> > musb->config is also used to hold fifo configuration for endpoint setup. >> >> I noticed fifo config is in musb->config, but just unable to figure >> out how it is initialized in the old style glues. :( I will read the >> code again whenever I get bored. > > see allocate_instance() Aha, thank you very much for the hint. Obviously I quickly forgot all the board config files under each platform... > > -- > balbi -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html