ulpi: provide start_srp Add support for setting CHRGVBUS thanks to start_srp and use it to workaround a hardware bug on efika mx/sb boards. See http://lists.infradead.org/pipermail/linux-arm-kernel/2011-January/037341.html Signed-off-by: Arnaud Patard Index: linux-2.6-submit/drivers/usb/otg/ulpi.c =================================================================== --- linux-2.6-submit.orig/drivers/usb/otg/ulpi.c 2011-01-04 17:12:26.000000000 +0100 +++ linux-2.6-submit/drivers/usb/otg/ulpi.c 2011-01-06 14:44:50.000000000 +0100 @@ -247,6 +247,14 @@ return otg_io_write(otg, flags, ULPI_OTG_CTRL); } +static int ulpi_start_srp(struct otg_transceiver *otg, bool on) +{ + unsigned int flags = otg_io_read(otg, ULPI_OTG_CTRL); + + flags |= ULPI_OTG_CTRL_CHRGVBUS; + return otg_io_write(otg, flags, ULPI_OTG_CTRL); +} + struct otg_transceiver * otg_ulpi_create(struct otg_io_access_ops *ops, unsigned int flags) @@ -263,6 +271,7 @@ otg->init = ulpi_init; otg->set_host = ulpi_set_host; otg->set_vbus = ulpi_set_vbus; + otg->start_srp = ulpi_start_srp; return otg; } Index: linux-2.6-submit/drivers/usb/host/ehci-mxc.c =================================================================== --- linux-2.6-submit.orig/drivers/usb/host/ehci-mxc.c 2011-01-06 14:45:14.000000000 +0100 +++ linux-2.6-submit/drivers/usb/host/ehci-mxc.c 2011-01-06 15:48:16.000000000 +0100 @@ -25,6 +25,8 @@ #include +#include + #define ULPI_VIEWPORT_OFFSET 0x170 struct ehci_mxc_priv { @@ -239,6 +241,13 @@ dev_err(dev, "unable to enable vbus on transceiver\n"); goto err_add; } + if (machine_is_mx51_efikamx() || machine_is_mx51_efikasb()) { + ret = otg_start_srp(pdata->otg); + if (ret) { + dev_err(dev, "unable to start srp\n"); + goto err_add; + } + } } return 0;