|
@@ -2304,15 +2304,19 @@ static void s3c_hsotg_core_init(struct s3c_hsotg *hsotg)
|
|
|
GAHBCFG_HBstLen_Incr4,
|
|
|
hsotg->regs + GAHBCFG);
|
|
|
else
|
|
|
- writel(GAHBCFG_GlblIntrEn, hsotg->regs + GAHBCFG);
|
|
|
+ writel(((hsotg->dedicated_fifos) ? (GAHBCFG_NPTxFEmpLvl |
|
|
|
+ GAHBCFG_PTxFEmpLvl) : 0) |
|
|
|
+ GAHBCFG_GlblIntrEn,
|
|
|
+ hsotg->regs + GAHBCFG);
|
|
|
|
|
|
/*
|
|
|
- * Enabling INTknTXFEmpMsk here seems to be a big mistake, we end
|
|
|
- * up being flooded with interrupts if the host is polling the
|
|
|
- * endpoint to try and read data.
|
|
|
+ * If INTknTXFEmpMsk is enabled, it's important to disable ep interrupts
|
|
|
+ * when we have no data to transfer. Otherwise we get being flooded by
|
|
|
+ * interrupts.
|
|
|
*/
|
|
|
|
|
|
- writel(((hsotg->dedicated_fifos) ? DIEPMSK_TxFIFOEmpty : 0) |
|
|
|
+ writel(((hsotg->dedicated_fifos) ? DIEPMSK_TxFIFOEmpty |
|
|
|
+ DIEPMSK_INTknTXFEmpMsk : 0) |
|
|
|
DIEPMSK_EPDisbldMsk | DIEPMSK_XferComplMsk |
|
|
|
DIEPMSK_TimeOUTMsk | DIEPMSK_AHBErrMsk |
|
|
|
DIEPMSK_INTknEPMisMsk,
|