| From 65e4bd402be9b3c6456ad68d428938b1f6e433c1 Mon Sep 17 00:00:00 2001 |
| From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Date: Thu, 12 Oct 2017 15:34:45 +0900 |
| Subject: [PATCH 0117/1795] phy: rcar-gen3-usb2: check dr_mode for otg mode |
| |
| The previous code assumed a channel has otg capability if a channel |
| has interrupt property. But, it is not good because: |
| - Battery charging feature also needs interrupt property. |
| - Some R-Car Gen3 SoCs (e.g. R-Car D3) don't have OTG capability. |
| |
| So, this patch checks whether usb 2.0 host node has dr_mode property or |
| not. If it has 'dr_mode = "otg";', this driver enables otg capability. |
| |
| Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> |
| Reviewed-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> |
| (cherry picked from commit 7e0540f41332cb07055c5fe6629dc83c71974c82) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/phy/renesas/phy-rcar-gen3-usb2.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c |
| index b33e2994ccce..cc70dca47212 100644 |
| --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c |
| +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c |
| @@ -1,7 +1,7 @@ |
| /* |
| * Renesas R-Car Gen3 for USB2.0 PHY driver |
| * |
| - * Copyright (C) 2015 Renesas Electronics Corporation |
| + * Copyright (C) 2015-2017 Renesas Electronics Corporation |
| * |
| * This is based on the phy-rcar-gen2 driver: |
| * Copyright (C) 2014 Renesas Solutions Corp. |
| @@ -22,6 +22,7 @@ |
| #include <linux/platform_device.h> |
| #include <linux/pm_runtime.h> |
| #include <linux/regulator/consumer.h> |
| +#include <linux/usb/of.h> |
| #include <linux/workqueue.h> |
| |
| /******* USB2.0 Host registers (original offset is +0x200) *******/ |
| @@ -415,13 +416,16 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) |
| /* call request_irq for OTG */ |
| irq = platform_get_irq(pdev, 0); |
| if (irq >= 0) { |
| - int ret; |
| - |
| INIT_WORK(&channel->work, rcar_gen3_phy_usb2_work); |
| irq = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq, |
| IRQF_SHARED, dev_name(dev), channel); |
| if (irq < 0) |
| dev_err(dev, "No irq handler (%d)\n", irq); |
| + } |
| + |
| + if (of_usb_get_dr_mode_by_phy(dev->of_node, 0) == USB_DR_MODE_OTG) { |
| + int ret; |
| + |
| channel->has_otg = true; |
| channel->extcon = devm_extcon_dev_allocate(dev, |
| rcar_gen3_phy_cable); |
| -- |
| 2.19.0 |
| |