diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2012-12-07 13:37:26 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2012-12-07 13:37:26 +0100 |
commit | 775ab07d5e710c4811a66b246f8f8708a09eba28 (patch) | |
tree | df725ba1aea0bccbfb64e29d49fa04bfc671ec11 /firmware/export/usb.h | |
parent | fb43a137e72d1f428efef00047a416497463edfb (diff) | |
download | rockbox-775ab07d5e710c4811a66b246f8f8708a09eba28.tar.gz rockbox-775ab07d5e710c4811a66b246f8f8708a09eba28.zip |
usb: add support for hardware handled SET ADDR/CONFIG
Some USB controllers like the one of the Rockchip 27xx handle some
requests in pure hardware. This is especially a problem for two
of them:
- SET ADDR which is used by our core to track the DEFAULT/ADDRESS
state and is required for the drivers to work properly
- SET CONFIG which is used by our core to initialise the drivers
by calling init_connection()
In these cases we need a way to notify the core that such requests
happened.
We do this by exporting two functions which directly notify the
core about these requests and perform the necessary init steps
required without doing the actual USB transfers. Special care is
needed because these functions could be called from an interrupt
handler. For this reason we still use the usb_queue and introduce
new IDs so that they are processed in order and safely.
No functional change is intended, both in the usbstack and on
targets without such quirks.
Change-Id: Ie42feffd4584e88bf37cff018b627f333dca1140
Diffstat (limited to 'firmware/export/usb.h')
-rw-r--r-- | firmware/export/usb.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/firmware/export/usb.h b/firmware/export/usb.h index 8954e9cc59..13ef3983b2 100644 --- a/firmware/export/usb.h +++ b/firmware/export/usb.h | |||
@@ -44,6 +44,8 @@ enum | |||
44 | #endif | 44 | #endif |
45 | #ifdef HAVE_USBSTACK | 45 | #ifdef HAVE_USBSTACK |
46 | USB_TRANSFER_COMPLETION, /* Event */ | 46 | USB_TRANSFER_COMPLETION, /* Event */ |
47 | USB_NOTIFY_SET_ADDR, /* Event */ | ||
48 | USB_NOTIFY_SET_CONFIG, /* Event */ | ||
47 | #endif | 49 | #endif |
48 | #ifdef USB_FIREWIRE_HANDLING | 50 | #ifdef USB_FIREWIRE_HANDLING |
49 | USB_REQUEST_REBOOT, /* Event */ | 51 | USB_REQUEST_REBOOT, /* Event */ |
@@ -130,6 +132,7 @@ void usb_charger_update(void); | |||
130 | #ifdef HAVE_USBSTACK | 132 | #ifdef HAVE_USBSTACK |
131 | void usb_signal_transfer_completion( | 133 | void usb_signal_transfer_completion( |
132 | struct usb_transfer_completion_event_data *event_data); | 134 | struct usb_transfer_completion_event_data *event_data); |
135 | void usb_signal_notify(long id, intptr_t data); | ||
133 | bool usb_driver_enabled(int driver); | 136 | bool usb_driver_enabled(int driver); |
134 | bool usb_exclusive_storage(void); /* storage is available for usb */ | 137 | bool usb_exclusive_storage(void); /* storage is available for usb */ |
135 | #endif | 138 | #endif |