Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1397846

[PATCH 2/6] usb: xhci-mtk: make IPPC register optional

From Chunfeng Yun <chunfeng.yun@mediatek.com>
Newsgroups linux.kernel
Subject [PATCH 2/6] usb: xhci-mtk: make IPPC register optional
Date 2016-05-10 10:30 +0200
Message-ID <rxbdh-76W-33@gated-at.bofh.it> (permalink)
References <rxbdg-76W-5@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Make IPPC register optional to support host side of dual-role mode,
due to it is moved into common glue layer for simplification.

Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
 drivers/usb/host/xhci-mtk.c |   32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c
index 79959f1..dc86832 100644
--- a/drivers/usb/host/xhci-mtk.c
+++ b/drivers/usb/host/xhci-mtk.c
@@ -94,6 +94,9 @@ static int xhci_mtk_host_enable(struct xhci_hcd_mtk *mtk)
 	int ret;
 	int i;
 
+	if (ippc == NULL)
+		return 0;
+
 	/* power on host ip */
 	value = readl(&ippc->ip_pw_ctr1);
 	value &= ~CTRL1_IP_HOST_PDN;
@@ -139,6 +142,9 @@ static int xhci_mtk_host_disable(struct xhci_hcd_mtk *mtk)
 	int ret;
 	int i;
 
+	if (ippc == NULL)
+		return 0;
+
 	/* power down all u3 ports */
 	for (i = 0; i < mtk->num_u3_ports; i++) {
 		value = readl(&ippc->u3_ctrl_p[i]);
@@ -173,6 +179,9 @@ static int xhci_mtk_ssusb_config(struct xhci_hcd_mtk *mtk)
 	struct mu3c_ippc_regs __iomem *ippc = mtk->ippc_regs;
 	u32 value;
 
+	if (ippc == NULL)
+		return 0;
+
 	/* reset whole ip */
 	value = readl(&ippc->ip_pw_ctr0);
 	value |= CTRL0_IP_SW_RST;
@@ -475,6 +484,7 @@ static void xhci_mtk_quirks(struct device *dev, struct xhci_hcd *xhci)
 /* called during probe() after chip reset completes */
 static int xhci_mtk_setup(struct usb_hcd *hcd)
 {
+	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
 	struct xhci_hcd_mtk *mtk = hcd_to_mtk(hcd);
 	int ret;
 
@@ -482,12 +492,21 @@ static int xhci_mtk_setup(struct usb_hcd *hcd)
 		ret = xhci_mtk_ssusb_config(mtk);
 		if (ret)
 			return ret;
+	}
+
+	ret = xhci_gen_setup(hcd, xhci_mtk_quirks);
+	if (ret)
+		return ret;
+
+	if (usb_hcd_is_primary_hcd(hcd)) {
+		mtk->num_u3_ports = xhci->num_usb3_ports;
+		mtk->num_u2_ports = xhci->num_usb2_ports;
 		ret = xhci_mtk_sch_init(mtk);
 		if (ret)
 			return ret;
 	}
 
-	return xhci_gen_setup(hcd, xhci_mtk_quirks);
+	return ret;
 }
 
 static int xhci_mtk_probe(struct platform_device *pdev)
@@ -595,11 +614,14 @@ static int xhci_mtk_probe(struct platform_device *pdev)
 	hcd->rsrc_start = res->start;
 	hcd->rsrc_len = resource_size(res);
 
+	mtk->ippc_regs = NULL;
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-	mtk->ippc_regs = devm_ioremap_resource(dev, res);
-	if (IS_ERR(mtk->ippc_regs)) {
-		ret = PTR_ERR(mtk->ippc_regs);
-		goto put_usb2_hcd;
+	if (res) {	/* ippc register is optional */
+		mtk->ippc_regs = devm_ioremap_resource(dev, res);
+		if (IS_ERR(mtk->ippc_regs)) {
+			ret = PTR_ERR(mtk->ippc_regs);
+			goto put_usb2_hcd;
+		}
 	}
 
 	for (phy_num = 0; phy_num < mtk->num_phys; phy_num++) {
-- 
1.7.9.5

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Add MediaTek USB3 DRD Driver Chunfeng Yun <chunfeng.yun@mediatek.com> - 2016-05-10 10:30 +0200
  [PATCH 6/6] pinctrl: mt8173: set GPIO16 to usb iddig mode Chunfeng Yun <chunfeng.yun@mediatek.com> - 2016-05-10 10:30 +0200
    Re: [PATCH 6/6] pinctrl: mt8173: set GPIO16 to usb iddig mode Linus Walleij <linus.walleij@linaro.org> - 2016-05-11 14:00 +0200
      Re: [PATCH 6/6] pinctrl: mt8173: set GPIO16 to usb iddig mode Hongzhou Yang <hongzhou.yang@mediatek.com> - 2016-05-11 20:40 +0200
        Re: [PATCH 6/6] pinctrl: mt8173: set GPIO16 to usb iddig mode chunfeng yun <chunfeng.yun@mediatek.com> - 2016-05-12 03:50 +0200
          Re: [PATCH 6/6] pinctrl: mt8173: set GPIO16 to usb iddig mode Hongzhou Yang <hongzhou.yang@mediatek.com> - 2016-05-12 04:10 +0200
            Re: [PATCH 6/6] pinctrl: mt8173: set GPIO16 to usb iddig mode Hongzhou Yang <hongzhou.yang@mediatek.com> - 2016-05-12 05:00 +0200
  [PATCH 2/6] usb: xhci-mtk: make IPPC register optional Chunfeng Yun <chunfeng.yun@mediatek.com> - 2016-05-10 10:30 +0200

csiph-web