ARM: OMAP1: fix USB host on 1710
There is a long-standing bug that OHCI USB host controller does not respond on 1710, because of wrong clock definitions. See e.g. http://marc.info/?l=linux-omap&m=119634441229321&w=2. All register reads return just zeroes: [ 1.896606] ohci ohci: OMAP OHCI [ 1.912597] ohci ohci: new USB bus registered, assigned bus number 1 [ 1.933776] ohci ohci: irq 38, io mem 0xfffba000 [ 2.012573] ohci ohci: init err (00000000 0000) [ 2.030334] ohci ohci: can't start [ 2.046661] ohci ohci: startup error -75 [ 2.063201] ohci ohci: USB bus 1 deregistered After some experiments, it seems that when changing the usb_dc_ck / SOFT_REQ enable bit from USB_REQ_EN_SHIFT to SOFT_USB_OTG_DPLL_REQ_SHIFT (like done also on 7XX), the USB appears to work: [ 2.183959] ohci ohci: OMAP OHCI [ 2.198242] ohci ohci: new USB bus registered, assigned bus number 1 [ 2.215820] ohci ohci: irq 38, io mem 0xfffba000 [ 2.324798] hub 1-0:1.0: USB hub found [ 2.361267] hub 1-0:1.0: 3 ports detected The patch is tested on Nokia 770. Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi> Signed-off-by: Paul Walmsley <paul@pwsan.com>
This commit is contained in:
parent
f6161aa153
commit
13872ebb91
|
@ -538,15 +538,6 @@ static struct clk usb_hhc_ck16xx = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk usb_dc_ck = {
|
static struct clk usb_dc_ck = {
|
||||||
.name = "usb_dc_ck",
|
|
||||||
.ops = &clkops_generic,
|
|
||||||
/* Direct from ULPD, no parent */
|
|
||||||
.rate = 48000000,
|
|
||||||
.enable_reg = OMAP1_IO_ADDRESS(SOFT_REQ_REG),
|
|
||||||
.enable_bit = USB_REQ_EN_SHIFT,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct clk usb_dc_ck7xx = {
|
|
||||||
.name = "usb_dc_ck",
|
.name = "usb_dc_ck",
|
||||||
.ops = &clkops_generic,
|
.ops = &clkops_generic,
|
||||||
/* Direct from ULPD, no parent */
|
/* Direct from ULPD, no parent */
|
||||||
|
@ -727,8 +718,7 @@ static struct omap_clk omap_clks[] = {
|
||||||
CLK(NULL, "usb_clko", &usb_clko, CK_16XX | CK_1510 | CK_310),
|
CLK(NULL, "usb_clko", &usb_clko, CK_16XX | CK_1510 | CK_310),
|
||||||
CLK(NULL, "usb_hhc_ck", &usb_hhc_ck1510, CK_1510 | CK_310),
|
CLK(NULL, "usb_hhc_ck", &usb_hhc_ck1510, CK_1510 | CK_310),
|
||||||
CLK(NULL, "usb_hhc_ck", &usb_hhc_ck16xx, CK_16XX),
|
CLK(NULL, "usb_hhc_ck", &usb_hhc_ck16xx, CK_16XX),
|
||||||
CLK(NULL, "usb_dc_ck", &usb_dc_ck, CK_16XX),
|
CLK(NULL, "usb_dc_ck", &usb_dc_ck, CK_16XX | CK_7XX),
|
||||||
CLK(NULL, "usb_dc_ck", &usb_dc_ck7xx, CK_7XX),
|
|
||||||
CLK(NULL, "mclk", &mclk_1510, CK_1510 | CK_310),
|
CLK(NULL, "mclk", &mclk_1510, CK_1510 | CK_310),
|
||||||
CLK(NULL, "mclk", &mclk_16xx, CK_16XX),
|
CLK(NULL, "mclk", &mclk_16xx, CK_16XX),
|
||||||
CLK(NULL, "bclk", &bclk_1510, CK_1510 | CK_310),
|
CLK(NULL, "bclk", &bclk_1510, CK_1510 | CK_310),
|
||||||
|
|
Loading…
Reference in New Issue