Re: [PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
On Sun, Dec 20, 2015 at 6:07 AM, Kishon Vijay Abraham I wrote: > Hi Rob, > > On Sunday 20 December 2015 09:09 AM, Rob Herring wrote: >> On Tue, Dec 15, 2015 at 02:46:08PM +0530, Kishon Vijay Abraham I wrote: >>> Deprecate using phy-omap-control driver to power on/off the PHY, >>> and use *syscon* framework to do the same. This handles >>> powering on/off the PHY for the USB2 PHYs used in various TI SoCs. >>> >>> Signed-off-by: Kishon Vijay Abraham I >>> --- >>> Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- >>> drivers/phy/phy-omap-usb2.c | 94 >>> ++ >>> include/linux/phy/omap_usb.h | 23 ++ >>> 3 files changed, 107 insertions(+), 18 deletions(-) >>> >>> diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt >>> b/Documentation/devicetree/bindings/phy/ti-phy.txt >>> index 49e5b0c..a3b3945 100644 >>> --- a/Documentation/devicetree/bindings/phy/ti-phy.txt >>> +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt >>> @@ -31,6 +31,8 @@ OMAP USB2 PHY >>> >>> Required properties: >>> - compatible: Should be "ti,omap-usb2" >>> + Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY >>> + in DRA7x >> >> The 2nd instance is different somehow? > > yeah, the bit fields are slightly different. Okay, Acked-by: Rob Herring Rob -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
On Sun, Dec 20, 2015 at 6:07 AM, Kishon Vijay Abraham Iwrote: > Hi Rob, > > On Sunday 20 December 2015 09:09 AM, Rob Herring wrote: >> On Tue, Dec 15, 2015 at 02:46:08PM +0530, Kishon Vijay Abraham I wrote: >>> Deprecate using phy-omap-control driver to power on/off the PHY, >>> and use *syscon* framework to do the same. This handles >>> powering on/off the PHY for the USB2 PHYs used in various TI SoCs. >>> >>> Signed-off-by: Kishon Vijay Abraham I >>> --- >>> Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- >>> drivers/phy/phy-omap-usb2.c | 94 >>> ++ >>> include/linux/phy/omap_usb.h | 23 ++ >>> 3 files changed, 107 insertions(+), 18 deletions(-) >>> >>> diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt >>> b/Documentation/devicetree/bindings/phy/ti-phy.txt >>> index 49e5b0c..a3b3945 100644 >>> --- a/Documentation/devicetree/bindings/phy/ti-phy.txt >>> +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt >>> @@ -31,6 +31,8 @@ OMAP USB2 PHY >>> >>> Required properties: >>> - compatible: Should be "ti,omap-usb2" >>> + Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY >>> + in DRA7x >> >> The 2nd instance is different somehow? > > yeah, the bit fields are slightly different. Okay, Acked-by: Rob Herring Rob -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
Hi Rob, On Sunday 20 December 2015 09:09 AM, Rob Herring wrote: > On Tue, Dec 15, 2015 at 02:46:08PM +0530, Kishon Vijay Abraham I wrote: >> Deprecate using phy-omap-control driver to power on/off the PHY, >> and use *syscon* framework to do the same. This handles >> powering on/off the PHY for the USB2 PHYs used in various TI SoCs. >> >> Signed-off-by: Kishon Vijay Abraham I >> --- >> Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- >> drivers/phy/phy-omap-usb2.c | 94 >> ++ >> include/linux/phy/omap_usb.h | 23 ++ >> 3 files changed, 107 insertions(+), 18 deletions(-) >> >> diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt >> b/Documentation/devicetree/bindings/phy/ti-phy.txt >> index 49e5b0c..a3b3945 100644 >> --- a/Documentation/devicetree/bindings/phy/ti-phy.txt >> +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt >> @@ -31,6 +31,8 @@ OMAP USB2 PHY >> >> Required properties: >> - compatible: Should be "ti,omap-usb2" >> + Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY >> + in DRA7x > > The 2nd instance is different somehow? yeah, the bit fields are slightly different. Thanks Kishon -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
Hi Rob, On Sunday 20 December 2015 09:09 AM, Rob Herring wrote: > On Tue, Dec 15, 2015 at 02:46:08PM +0530, Kishon Vijay Abraham I wrote: >> Deprecate using phy-omap-control driver to power on/off the PHY, >> and use *syscon* framework to do the same. This handles >> powering on/off the PHY for the USB2 PHYs used in various TI SoCs. >> >> Signed-off-by: Kishon Vijay Abraham I>> --- >> Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- >> drivers/phy/phy-omap-usb2.c | 94 >> ++ >> include/linux/phy/omap_usb.h | 23 ++ >> 3 files changed, 107 insertions(+), 18 deletions(-) >> >> diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt >> b/Documentation/devicetree/bindings/phy/ti-phy.txt >> index 49e5b0c..a3b3945 100644 >> --- a/Documentation/devicetree/bindings/phy/ti-phy.txt >> +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt >> @@ -31,6 +31,8 @@ OMAP USB2 PHY >> >> Required properties: >> - compatible: Should be "ti,omap-usb2" >> + Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY >> + in DRA7x > > The 2nd instance is different somehow? yeah, the bit fields are slightly different. Thanks Kishon -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
On Tue, Dec 15, 2015 at 02:46:08PM +0530, Kishon Vijay Abraham I wrote: > Deprecate using phy-omap-control driver to power on/off the PHY, > and use *syscon* framework to do the same. This handles > powering on/off the PHY for the USB2 PHYs used in various TI SoCs. > > Signed-off-by: Kishon Vijay Abraham I > --- > Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- > drivers/phy/phy-omap-usb2.c | 94 > ++ > include/linux/phy/omap_usb.h | 23 ++ > 3 files changed, 107 insertions(+), 18 deletions(-) > > diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt > b/Documentation/devicetree/bindings/phy/ti-phy.txt > index 49e5b0c..a3b3945 100644 > --- a/Documentation/devicetree/bindings/phy/ti-phy.txt > +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt > @@ -31,6 +31,8 @@ OMAP USB2 PHY > > Required properties: > - compatible: Should be "ti,omap-usb2" > +Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY > +in DRA7x The 2nd instance is different somehow? Rob -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
On Tue, Dec 15, 2015 at 02:46:08PM +0530, Kishon Vijay Abraham I wrote: > Deprecate using phy-omap-control driver to power on/off the PHY, > and use *syscon* framework to do the same. This handles > powering on/off the PHY for the USB2 PHYs used in various TI SoCs. > > Signed-off-by: Kishon Vijay Abraham I> --- > Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- > drivers/phy/phy-omap-usb2.c | 94 > ++ > include/linux/phy/omap_usb.h | 23 ++ > 3 files changed, 107 insertions(+), 18 deletions(-) > > diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt > b/Documentation/devicetree/bindings/phy/ti-phy.txt > index 49e5b0c..a3b3945 100644 > --- a/Documentation/devicetree/bindings/phy/ti-phy.txt > +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt > @@ -31,6 +31,8 @@ OMAP USB2 PHY > > Required properties: > - compatible: Should be "ti,omap-usb2" > +Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY > +in DRA7x The 2nd instance is different somehow? Rob -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
Deprecate using phy-omap-control driver to power on/off the PHY, and use *syscon* framework to do the same. This handles powering on/off the PHY for the USB2 PHYs used in various TI SoCs. Signed-off-by: Kishon Vijay Abraham I --- Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- drivers/phy/phy-omap-usb2.c | 94 ++ include/linux/phy/omap_usb.h | 23 ++ 3 files changed, 107 insertions(+), 18 deletions(-) diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt b/Documentation/devicetree/bindings/phy/ti-phy.txt index 49e5b0c..a3b3945 100644 --- a/Documentation/devicetree/bindings/phy/ti-phy.txt +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt @@ -31,6 +31,8 @@ OMAP USB2 PHY Required properties: - compatible: Should be "ti,omap-usb2" + Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY + in DRA7x - reg : Address and length of the register set for the device. - #phy-cells: determine the number of cells that should be given in the phandle while referencing this phy. @@ -40,10 +42,14 @@ Required properties: * "wkupclk" - wakeup clock. * "refclk" - reference clock (optional). -Optional properties: +Deprecated properties: - ctrl-module : phandle of the control module used by PHY driver to power on the PHY. +Recommended properies: +- syscon-phy-power : phandle/offset pair. Phandle to the system control + module and the register offset to power on/off the PHY. + This is usually a subnode of ocp2scp to which it is connected. usb2phy@4a0ad080 { diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c index c79633e..c9c04ff 100644 --- a/drivers/phy/phy-omap-usb2.c +++ b/drivers/phy/phy-omap-usb2.c @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include #define USB2PHY_DISCON_BYP_LATCH (1 << 31) @@ -97,22 +99,40 @@ static int omap_usb_set_peripheral(struct usb_otg *otg, return 0; } -static int omap_usb_power_off(struct phy *x) +static int omap_usb_phy_power(struct omap_usb *phy, int on) { - struct omap_usb *phy = phy_get_drvdata(x); + u32 val; + int ret; - omap_control_phy_power(phy->control_dev, 0); + if (phy->syscon_phy_power) { + if (on) + val = phy->power_on; + else + val = phy->power_off; + + ret = regmap_update_bits(phy->syscon_phy_power, phy->power_reg, +phy->mask, val); + if (ret < 0) + return ret; + } else { + omap_control_phy_power(phy->control_dev, on); + } return 0; } -static int omap_usb_power_on(struct phy *x) +static int omap_usb_power_off(struct phy *x) { struct omap_usb *phy = phy_get_drvdata(x); - omap_control_phy_power(phy->control_dev, 1); + return omap_usb_phy_power(phy, false); +} - return 0; +static int omap_usb_power_on(struct phy *x) +{ + struct omap_usb *phy = phy_get_drvdata(x); + + return omap_usb_phy_power(phy, true); } static int omap_usb_init(struct phy *x) @@ -147,21 +167,38 @@ static const struct phy_ops ops = { static const struct usb_phy_data omap_usb2_data = { .label = "omap_usb2", .flags = OMAP_USB2_HAS_START_SRP | OMAP_USB2_HAS_SET_VBUS, + .mask = OMAP_DEV_PHY_PD, + .power_off = OMAP_DEV_PHY_PD, }; static const struct usb_phy_data omap5_usb2_data = { .label = "omap5_usb2", .flags = 0, + .mask = OMAP_DEV_PHY_PD, + .power_off = OMAP_DEV_PHY_PD, }; static const struct usb_phy_data dra7x_usb2_data = { .label = "dra7x_usb2", .flags = OMAP_USB2_CALIBRATE_FALSE_DISCONNECT, + .mask = OMAP_DEV_PHY_PD, + .power_off = OMAP_DEV_PHY_PD, +}; + +static const struct usb_phy_data dra7x_usb2_phy2_data = { + .label = "dra7x_usb2_phy2", + .flags = OMAP_USB2_CALIBRATE_FALSE_DISCONNECT, + .mask = OMAP_USB2_PHY_PD, + .power_off = OMAP_USB2_PHY_PD, }; static const struct usb_phy_data am437x_usb2_data = { .label = "am437x_usb2", .flags = 0, + .mask = AM437X_USB2_PHY_PD | AM437X_USB2_OTG_PD | + AM437X_USB2_OTGVDET_EN | AM437X_USB2_OTGSESSEND_EN, + .power_on = AM437X_USB2_OTGVDET_EN | AM437X_USB2_OTGSESSEND_EN, + .power_off = AM437X_USB2_PHY_PD | AM437X_USB2_OTG_PD, }; static const struct of_device_id omap_usb2_id_table[] = { @@ -178,6 +215,10 @@ static const struct of_device_id omap_usb2_id_table[] = { .data = _usb2_data, }, { + .compatible = "ti,dra7x-usb2-phy2", + .data = _usb2_phy2_data, + }, + { .compatible = "ti,am437x-usb2", .data = _usb2_data, }, @@ -219,6 +260,9 @@ static int omap_usb2_probe(struct platform_device *pdev)
[PATCH v3 9/9] phy: omap-usb2: use *syscon* framework API to power on/off the PHY
Deprecate using phy-omap-control driver to power on/off the PHY, and use *syscon* framework to do the same. This handles powering on/off the PHY for the USB2 PHYs used in various TI SoCs. Signed-off-by: Kishon Vijay Abraham I--- Documentation/devicetree/bindings/phy/ti-phy.txt |8 +- drivers/phy/phy-omap-usb2.c | 94 ++ include/linux/phy/omap_usb.h | 23 ++ 3 files changed, 107 insertions(+), 18 deletions(-) diff --git a/Documentation/devicetree/bindings/phy/ti-phy.txt b/Documentation/devicetree/bindings/phy/ti-phy.txt index 49e5b0c..a3b3945 100644 --- a/Documentation/devicetree/bindings/phy/ti-phy.txt +++ b/Documentation/devicetree/bindings/phy/ti-phy.txt @@ -31,6 +31,8 @@ OMAP USB2 PHY Required properties: - compatible: Should be "ti,omap-usb2" + Should be "ti,dra7x-usb2-phy2" for the 2nd instance of USB2 PHY + in DRA7x - reg : Address and length of the register set for the device. - #phy-cells: determine the number of cells that should be given in the phandle while referencing this phy. @@ -40,10 +42,14 @@ Required properties: * "wkupclk" - wakeup clock. * "refclk" - reference clock (optional). -Optional properties: +Deprecated properties: - ctrl-module : phandle of the control module used by PHY driver to power on the PHY. +Recommended properies: +- syscon-phy-power : phandle/offset pair. Phandle to the system control + module and the register offset to power on/off the PHY. + This is usually a subnode of ocp2scp to which it is connected. usb2phy@4a0ad080 { diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c index c79633e..c9c04ff 100644 --- a/drivers/phy/phy-omap-usb2.c +++ b/drivers/phy/phy-omap-usb2.c @@ -29,6 +29,8 @@ #include #include #include +#include +#include #include #define USB2PHY_DISCON_BYP_LATCH (1 << 31) @@ -97,22 +99,40 @@ static int omap_usb_set_peripheral(struct usb_otg *otg, return 0; } -static int omap_usb_power_off(struct phy *x) +static int omap_usb_phy_power(struct omap_usb *phy, int on) { - struct omap_usb *phy = phy_get_drvdata(x); + u32 val; + int ret; - omap_control_phy_power(phy->control_dev, 0); + if (phy->syscon_phy_power) { + if (on) + val = phy->power_on; + else + val = phy->power_off; + + ret = regmap_update_bits(phy->syscon_phy_power, phy->power_reg, +phy->mask, val); + if (ret < 0) + return ret; + } else { + omap_control_phy_power(phy->control_dev, on); + } return 0; } -static int omap_usb_power_on(struct phy *x) +static int omap_usb_power_off(struct phy *x) { struct omap_usb *phy = phy_get_drvdata(x); - omap_control_phy_power(phy->control_dev, 1); + return omap_usb_phy_power(phy, false); +} - return 0; +static int omap_usb_power_on(struct phy *x) +{ + struct omap_usb *phy = phy_get_drvdata(x); + + return omap_usb_phy_power(phy, true); } static int omap_usb_init(struct phy *x) @@ -147,21 +167,38 @@ static const struct phy_ops ops = { static const struct usb_phy_data omap_usb2_data = { .label = "omap_usb2", .flags = OMAP_USB2_HAS_START_SRP | OMAP_USB2_HAS_SET_VBUS, + .mask = OMAP_DEV_PHY_PD, + .power_off = OMAP_DEV_PHY_PD, }; static const struct usb_phy_data omap5_usb2_data = { .label = "omap5_usb2", .flags = 0, + .mask = OMAP_DEV_PHY_PD, + .power_off = OMAP_DEV_PHY_PD, }; static const struct usb_phy_data dra7x_usb2_data = { .label = "dra7x_usb2", .flags = OMAP_USB2_CALIBRATE_FALSE_DISCONNECT, + .mask = OMAP_DEV_PHY_PD, + .power_off = OMAP_DEV_PHY_PD, +}; + +static const struct usb_phy_data dra7x_usb2_phy2_data = { + .label = "dra7x_usb2_phy2", + .flags = OMAP_USB2_CALIBRATE_FALSE_DISCONNECT, + .mask = OMAP_USB2_PHY_PD, + .power_off = OMAP_USB2_PHY_PD, }; static const struct usb_phy_data am437x_usb2_data = { .label = "am437x_usb2", .flags = 0, + .mask = AM437X_USB2_PHY_PD | AM437X_USB2_OTG_PD | + AM437X_USB2_OTGVDET_EN | AM437X_USB2_OTGSESSEND_EN, + .power_on = AM437X_USB2_OTGVDET_EN | AM437X_USB2_OTGSESSEND_EN, + .power_off = AM437X_USB2_PHY_PD | AM437X_USB2_OTG_PD, }; static const struct of_device_id omap_usb2_id_table[] = { @@ -178,6 +215,10 @@ static const struct of_device_id omap_usb2_id_table[] = { .data = _usb2_data, }, { + .compatible = "ti,dra7x-usb2-phy2", + .data = _usb2_phy2_data, + }, + { .compatible = "ti,am437x-usb2", .data = _usb2_data, }, @@ -219,6 +260,9 @@ static int omap_usb2_probe(struct