--- freebsd/sys/dev/usb/controller/ohci.h | 2 -- rtemsbsd/sys/dev/usb/controller/lpc_ohci.c | 19 ++++++++++++++++--- rtemsbsd/sys/dev/usb/usb_otg_transceiver.h | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) mode change 100644 => 100755 freebsd/sys/dev/usb/controller/ohci.h mode change 100644 => 100755 rtemsbsd/sys/dev/usb/usb_otg_transceiver.h
diff --git a/freebsd/sys/dev/usb/controller/ohci.h b/freebsd/sys/dev/usb/controller/ohci.h old mode 100644 new mode 100755 index d020d99..a650ce1 --- a/freebsd/sys/dev/usb/controller/ohci.h +++ b/freebsd/sys/dev/usb/controller/ohci.h @@ -234,9 +234,7 @@ typedef struct ohci_softc { struct ohci_ed *sc_bulk_p_last; struct ohci_ed *sc_isoc_p_last; struct ohci_ed *sc_intr_p_last[OHCI_NO_EDS]; -#ifndef __rtems__ void *sc_intr_hdl; -#endif /* __rtems__ */ device_t sc_dev; bus_size_t sc_io_size; bus_space_tag_t sc_io_tag; diff --git a/rtemsbsd/sys/dev/usb/controller/lpc_ohci.c b/rtemsbsd/sys/dev/usb/controller/lpc_ohci.c index 05c169a..4c6ef91 100755 --- a/rtemsbsd/sys/dev/usb/controller/lpc_ohci.c +++ b/rtemsbsd/sys/dev/usb/controller/lpc_ohci.c @@ -99,6 +99,7 @@ static void lpc_usb_host_clock_enable(device_t dev, struct ohci_softc *); static void lpc_otg_status_and_control(device_t dev, struct ohci_softc *); static rtems_interval lpc_usb_timeout_init(void); static bool lpc_usb_timeout_not_expired(rtems_interval start); +static void lpc_usb_delay(uint32_t ms); static int lpc_otg_clk_ctrl(device_t dev, struct ohci_softc *sc, uint32_t otg_clk_ctrl); static int lpc_otg_i2c_wait_for_receive_fifo_not_empty(struct ohci_softc *sc); static int lpc_otg_i2c_wait_for_transaction_done(struct ohci_softc *sc); @@ -192,6 +193,8 @@ lpc_ohci_attach(device_t dev) if (eno != 0) { goto fail; } + //without the delay, _bsd_usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_IOERROR + lpc_usb_delay(10); #endif /* BSP_USB_OTG_TRANSCEIVER_I2C_ADDR */ lpc_usb_host_clock_enable(dev, sc); @@ -311,7 +314,17 @@ static bool lpc_usb_timeout_not_expired(rtems_interval start) { rtems_interval elapsed = rtems_clock_get_ticks_since_boot() - start; - return elapsed < rtems_clock_get_ticks_per_second() / 10; + return elapsed < (rtems_clock_get_ticks_per_second() / 10); +} + +static void lpc_usb_delay(uint32_t ms) +{ + rtems_interval end; + + end = rtems_clock_get_ticks_since_boot() + RTEMS_MILLISECONDS_TO_TICKS(ms); + while (rtems_clock_get_ticks_since_boot() < end) { + /* Wait */ + } } static int lpc_otg_clk_ctrl(device_t dev, struct ohci_softc *sc, uint32_t otg_clk_ctrl) @@ -428,7 +441,7 @@ static int ohci_lpc_otg_transceiver_suspend(device_t dev, struct ohci_softc *sc) } static int -ohci_lpc_resume(device_t dev) +lpc_ohci_resume(device_t dev) { struct ohci_softc *sc = device_get_softc(dev); int eno = 0; @@ -475,7 +488,7 @@ static device_method_t lpc_ohci_methods[] = { DEVMETHOD(device_attach, lpc_ohci_attach), DEVMETHOD(device_detach, lpc_ohci_detach), DEVMETHOD(device_suspend, bus_generic_suspend), - DEVMETHOD(device_resume, ohci_lpc_resume), + DEVMETHOD(device_resume, lpc_ohci_resume), DEVMETHOD(device_shutdown, bus_generic_shutdown), /* Bus interface */ diff --git a/rtemsbsd/sys/dev/usb/usb_otg_transceiver.h b/rtemsbsd/sys/dev/usb/usb_otg_transceiver.h old mode 100644 new mode 100755 index 1e6b738..249d6a7 --- a/rtemsbsd/sys/dev/usb/usb_otg_transceiver.h +++ b/rtemsbsd/sys/dev/usb/usb_otg_transceiver.h @@ -88,6 +88,7 @@ struct usb_otg_transceiver { uint16_t vendor_id; uint16_t product_id; uint8_t i2c_addr; + void* softc; }; int usb_otg_transceiver_read( -- 1.9.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel