diff options
author | Frank Wang <frank.wang@rock-chips.com> | 2019-06-24 17:56:51 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2019-06-26 09:56:39 +0800 |
commit | ee35bc3e7100898556d7810401c5212e267f75f0 (patch) | |
tree | 0468f1ef2573811912aaf2dba2dc779e15598ad0 /drivers | |
parent | d69af8ab6534bb28c1556076f08d2a5ab4935d95 (diff) |
phy: phy-rockchip-inno-usb2: fix otg-id irq error
For the 'otg-mux' irq in SoC should include 'otg-bvalid', 'linestate',
and 'otg-id'. This change fix the previous error condition.
Change-Id: I8fe46c8c9efd6ce04eead89c276227d4cc70902e
Signed-off-by: Frank Wang <frank.wang@rock-chips.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c index 3341c8afed30..34f28a3dee17 100644 --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c @@ -1468,17 +1468,6 @@ static irqreturn_t rockchip_usb2phy_bvalid_irq(int irq, void *data) return IRQ_HANDLED; } -static irqreturn_t rockchip_usb2phy_otg_mux_irq(int irq, void *data) -{ - struct rockchip_usb2phy_port *rport = data; - struct rockchip_usb2phy *rphy = dev_get_drvdata(rport->phy->dev.parent); - - if (property_enabled(rphy->grf, &rport->port_cfg->bvalid_det_st)) - return rockchip_usb2phy_bvalid_irq(irq, data); - else - return IRQ_NONE; -} - static irqreturn_t rockchip_usb2phy_id_irq(int irq, void *data) { struct rockchip_usb2phy_port *rport = data; @@ -1515,6 +1504,17 @@ static irqreturn_t rockchip_usb2phy_id_irq(int irq, void *data) return IRQ_HANDLED; } +static irqreturn_t rockchip_usb2phy_otg_mux_irq(int irq, void *data) +{ + irqreturn_t ret = IRQ_NONE; + + ret = rockchip_usb2phy_id_irq(irq, data); + ret |= rockchip_usb2phy_bvalid_irq(irq, data); + ret |= rockchip_usb2phy_linestate_irq(irq, data); + + return ret; +} + static int rockchip_usb2phy_host_port_init(struct rockchip_usb2phy *rphy, struct rockchip_usb2phy_port *rport, struct device_node *child_np) @@ -1533,9 +1533,9 @@ static int rockchip_usb2phy_host_port_init(struct rockchip_usb2phy *rphy, INIT_DELAYED_WORK(&rport->sm_work, rockchip_usb2phy_sm_work); rport->ls_irq = of_irq_get_byname(child_np, "linestate"); - if (rport->ls_irq < 0) { + if (rport->ls_irq <= 0) { dev_err(rphy->dev, "no linestate irq provided\n"); - return rport->ls_irq; + return -EINVAL; } ret = devm_request_threaded_irq(rphy->dev, rport->ls_irq, NULL, @@ -1656,9 +1656,9 @@ static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy, } } else { rport->bvalid_irq = of_irq_get_byname(child_np, "otg-bvalid"); - if (rport->bvalid_irq < 0) { + if (rport->bvalid_irq <= 0) { dev_err(rphy->dev, "no vbus valid irq provided\n"); - return rport->bvalid_irq; + return -EINVAL; } ret = devm_request_threaded_irq(rphy->dev, rport->bvalid_irq, @@ -1674,9 +1674,9 @@ static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy, } rport->ls_irq = of_irq_get_byname(child_np, "linestate"); - if (rport->ls_irq < 0) { + if (rport->ls_irq <= 0) { dev_err(rphy->dev, "no linestate irq provided\n"); - return rport->ls_irq; + return -EINVAL; } ret = devm_request_threaded_irq(rphy->dev, rport->ls_irq, NULL, @@ -1687,24 +1687,28 @@ static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy, dev_err(rphy->dev, "failed to request linestate irq handle\n"); return ret; } - } - if (rphy->edev_self) { - rport->id_irq = of_irq_get_byname(child_np, "otg-id"); - if (rport->id_irq < 0) { - dev_err(rphy->dev, "no otg id irq provided\n"); - return rport->id_irq; - } + if (rphy->edev_self) { + rport->id_irq = of_irq_get_byname(child_np, "otg-id"); + if (rport->id_irq <= 0) { + dev_err(rphy->dev, "no otg id irq provided\n"); + return -EINVAL; + } - ret = devm_request_threaded_irq(rphy->dev, rport->id_irq, NULL, - rockchip_usb2phy_id_irq, - IRQF_ONESHOT, - "rockchip_usb2phy_id", rport); - if (ret) { - dev_err(rphy->dev, "failed to request otg-id irq handle\n"); - return ret; + ret = devm_request_threaded_irq(rphy->dev, + rport->id_irq, NULL, + rockchip_usb2phy_id_irq, + IRQF_ONESHOT, + "rockchip_usb2phy_id", + rport); + if (ret) { + dev_err(rphy->dev, "failed to request otg-id irq handle\n"); + return ret; + } } + } + if (rphy->edev_self) { iddig = property_enabled(rphy->grf, &rport->port_cfg->utmi_iddig); if (!iddig) { extcon_set_state(rphy->edev, EXTCON_USB, false); |