|
@@ -67,6 +67,7 @@
|
|
|
#define DWC3_DEVICE_EVENT_OVERFLOW 11
|
|
|
|
|
|
#define DWC3_GEVNTCOUNT_MASK 0xfffc
|
|
|
+#define DWC3_GEVNTCOUNT_EHB (1 << 31)
|
|
|
#define DWC3_GSNPSID_MASK 0xffff0000
|
|
|
#define DWC3_GSNPSREV_MASK 0xffff
|
|
|
|
|
@@ -149,6 +150,8 @@
|
|
|
#define DWC3_DEPCMDPAR0 0x08
|
|
|
#define DWC3_DEPCMD 0x0c
|
|
|
|
|
|
+#define DWC3_DEV_IMOD(n) (0xca00 + (n * 0x4))
|
|
|
+
|
|
|
/* OTG Registers */
|
|
|
#define DWC3_OCFG 0xcc00
|
|
|
#define DWC3_OCTL 0xcc04
|
|
@@ -465,6 +468,11 @@
|
|
|
#define DWC3_DEPCMD_TYPE_BULK 2
|
|
|
#define DWC3_DEPCMD_TYPE_INTR 3
|
|
|
|
|
|
+#define DWC3_DEV_IMOD_COUNT_SHIFT 16
|
|
|
+#define DWC3_DEV_IMOD_COUNT_MASK (0xffff << 16)
|
|
|
+#define DWC3_DEV_IMOD_INTERVAL_SHIFT 0
|
|
|
+#define DWC3_DEV_IMOD_INTERVAL_MASK (0xffff << 0)
|
|
|
+
|
|
|
/* Structures */
|
|
|
|
|
|
struct dwc3_trb;
|
|
@@ -846,6 +854,8 @@ struct dwc3_scratchpad_array {
|
|
|
* 1 - -3.5dB de-emphasis
|
|
|
* 2 - No de-emphasis
|
|
|
* 3 - Reserved
|
|
|
+ * @imod_interval: set the interrupt moderation interval in 250ns
|
|
|
+ * increments or 0 to disable.
|
|
|
*/
|
|
|
struct dwc3 {
|
|
|
struct usb_ctrlrequest *ctrl_req;
|
|
@@ -933,6 +943,7 @@ struct dwc3 {
|
|
|
*/
|
|
|
#define DWC3_REVISION_IS_DWC31 0x80000000
|
|
|
#define DWC3_USB31_REVISION_110A (0x3131302a | DWC3_REVISION_IS_DWC31)
|
|
|
+#define DWC3_USB31_REVISION_120A (0x3132302a | DWC3_REVISION_IS_DWC31)
|
|
|
|
|
|
enum dwc3_ep0_next ep0_next_event;
|
|
|
enum dwc3_ep0_state ep0state;
|
|
@@ -991,6 +1002,8 @@ struct dwc3 {
|
|
|
|
|
|
unsigned tx_de_emphasis_quirk:1;
|
|
|
unsigned tx_de_emphasis:2;
|
|
|
+
|
|
|
+ u16 imod_interval;
|
|
|
};
|
|
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
@@ -1162,6 +1175,8 @@ static inline bool dwc3_is_usb31(struct dwc3 *dwc)
|
|
|
return !!(dwc->revision & DWC3_REVISION_IS_DWC31);
|
|
|
}
|
|
|
|
|
|
+bool dwc3_has_imod(struct dwc3 *dwc);
|
|
|
+
|
|
|
#if IS_ENABLED(CONFIG_USB_DWC3_HOST) || IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)
|
|
|
int dwc3_host_init(struct dwc3 *dwc);
|
|
|
void dwc3_host_exit(struct dwc3 *dwc);
|