diff options
Diffstat (limited to 'drivers/usb/cdns3/drd.c')
| -rw-r--r-- | drivers/usb/cdns3/drd.c | 13 | 
1 files changed, 9 insertions, 4 deletions
| diff --git a/drivers/usb/cdns3/drd.c b/drivers/usb/cdns3/drd.c index 04b6d12f2b9a..ee917f1b091c 100644 --- a/drivers/usb/cdns3/drd.c +++ b/drivers/usb/cdns3/drd.c @@ -156,7 +156,8 @@ bool cdns_is_device(struct cdns *cdns)   */  static void cdns_otg_disable_irq(struct cdns *cdns)  { -	writel(0, &cdns->otg_irq_regs->ien); +	if (cdns->version) +		writel(0, &cdns->otg_irq_regs->ien);  }  /** @@ -422,15 +423,20 @@ int cdns_drd_init(struct cdns *cdns)  		cdns->otg_regs = (void __iomem *)&cdns->otg_v1_regs->cmd; -		if (readl(&cdns->otg_cdnsp_regs->did) == OTG_CDNSP_DID) { +		state = readl(&cdns->otg_cdnsp_regs->did); + +		if (OTG_CDNSP_CHECK_DID(state)) {  			cdns->otg_irq_regs = (struct cdns_otg_irq_regs __iomem *)  					      &cdns->otg_cdnsp_regs->ien;  			cdns->version  = CDNSP_CONTROLLER_V2; -		} else { +		} else if (OTG_CDNS3_CHECK_DID(state)) {  			cdns->otg_irq_regs = (struct cdns_otg_irq_regs __iomem *)  					      &cdns->otg_v1_regs->ien;  			writel(1, &cdns->otg_v1_regs->simulate);  			cdns->version  = CDNS3_CONTROLLER_V1; +		} else { +			dev_err(cdns->dev, "not supporte DID=0x%08x\n", state); +			return -EINVAL;  		}  		dev_dbg(cdns->dev, "DRD version v1 (ID: %08x, rev: %08x)\n", @@ -483,7 +489,6 @@ int cdns_drd_exit(struct cdns *cdns)  	return 0;  } -  /* Indicate the cdns3 core was power lost before */  bool cdns_power_is_lost(struct cdns *cdns)  { | 
