Message ID | 1394128887-4197-4-git-send-email-ben.dooks@codethink.co.uk (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
On 06/03/14 19:16, Sergei Shtylyov wrote: > Hello. > > On 03/06/2014 09:01 PM, Ben Dooks wrote: > >> Add support for the phy-rcar-gen2-usb driver to be probed from device >> tree. > >> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> >> Reviewed-by: Ian Molton <ian.molton@codethink.co.uk> >> --- >> Fixes from v2: >> - fix missed of_match_ptr() >> - fix names of channel selection booleans >> - updated and merged documentation for dt entries >> >> Fixes from v2: >> - fix missing of_if patch >> >> Fixes from v1: >> - use of_property_reasd-bool() >> - remove unused of_id variable >> >> Cc: Felipe Balbi <balbi@ti.com> >> Cc: linux-usb@vger.kernel.org >> Cc: linux-sh@vger.kernel.org >> Cc: Magnus Damm <magnus.damm@gmail.com> >> Cc: Simon Horman <horms@verge.net.au> >> Cc: devicetree@vger.kernel.org > >> Conflicts: >> drivers/usb/phy/phy-rcar-gen2-usb.c >> --- >> .../bindings/usb/renesas,rcar-gen2-usb-phy.txt | 36 >> ++++++++++++++++++++++ >> drivers/pci/host/pci-rcar-gen2.c | 1 + > > Eh? What does this file have to do with USB PHY? Ah, it was a fixup for a missing header that got merged into the wrong file. Will fix that. >> drivers/usb/phy/phy-rcar-gen2-usb.c | 34 >> +++++++++++++++++--- >> 3 files changed, 66 insertions(+), 5 deletions(-) >> create mode 100644 >> Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt > >> diff --git >> a/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >> b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >> new file mode 100644 >> index 0000000..5351a30 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >> @@ -0,0 +1,36 @@ >> +Renesas RCar gen2 USB PHY bindings >> +---------------------------------- >> + >> +Bindings for the USB PHY block used in some Renesas SoCs. >> + >> +Required properties: >> + - compatible: "renesas,usb-phy-r8a7790" for the R8A7790 SoC >> + "renesas,usb-phy-r8a7791" for the R8A7791 SoC >> + - reg : A single region to access device registers >> + - clocks : The reference to the clock to use for this block >> + - clock-names : The name for the clock at index 0 (must be "usbhs") >> + >> +Optional properties: >> + >> + - renesas,usb0-device: boolean, if present USB0 is connected to HS >> device >> + otherwise the USB0 is connected to OHCI/EHCI host. > > IIUC, the testing has shown that USBHS is dual-role controller in > that case, i.e. supports both host and device roles (the manual has the > host controller details too). Vladimir, is it so? Currently there is no auto-detection for this, so it gets set at start time. >> + - renesas,usb2-xhci: boolean, if present USB2 is connected to XHCI >> controller >> + otherwise the USB2 is connected to OHCI/EHCI host. >> + >> + >> +Example device node for SoC dtsi file: >> + >> + usbphy: usbphy@e6590100 { >> + compatible = "renesas,usb-phy-r8a7790"; >> + clocks = <&mstp7_clks R8A7790_CLK_HSUSB>; >> + clock-names = "usbhs"; >> + reg = < 0x0 0xe6590100 0x0 0x100>; >> + status = "disabled"; >> + }; >> + >> +Example board file: >> + >> +&usbphy { >> + status = "okay"; >> +}; > > These are usually merged into one node for the example. Much nicer if separate.
Hello. On 03/06/2014 09:01 PM, Ben Dooks wrote: > Add support for the phy-rcar-gen2-usb driver to be probed from device tree. > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> > Reviewed-by: Ian Molton <ian.molton@codethink.co.uk> > --- > Fixes from v2: > - fix missed of_match_ptr() > - fix names of channel selection booleans > - updated and merged documentation for dt entries > > Fixes from v2: > - fix missing of_if patch > > Fixes from v1: > - use of_property_reasd-bool() > - remove unused of_id variable > > Cc: Felipe Balbi <balbi@ti.com> > Cc: linux-usb@vger.kernel.org > Cc: linux-sh@vger.kernel.org > Cc: Magnus Damm <magnus.damm@gmail.com> > Cc: Simon Horman <horms@verge.net.au> > Cc: devicetree@vger.kernel.org > Conflicts: > drivers/usb/phy/phy-rcar-gen2-usb.c > --- > .../bindings/usb/renesas,rcar-gen2-usb-phy.txt | 36 ++++++++++++++++++++++ > drivers/pci/host/pci-rcar-gen2.c | 1 + Eh? What does this file have to do with USB PHY? > drivers/usb/phy/phy-rcar-gen2-usb.c | 34 +++++++++++++++++--- > 3 files changed, 66 insertions(+), 5 deletions(-) > create mode 100644 Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt > diff --git a/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt > new file mode 100644 > index 0000000..5351a30 > --- /dev/null > +++ b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt > @@ -0,0 +1,36 @@ > +Renesas RCar gen2 USB PHY bindings > +---------------------------------- > + > +Bindings for the USB PHY block used in some Renesas SoCs. > + > +Required properties: > + - compatible: "renesas,usb-phy-r8a7790" for the R8A7790 SoC > + "renesas,usb-phy-r8a7791" for the R8A7791 SoC > + - reg : A single region to access device registers > + - clocks : The reference to the clock to use for this block > + - clock-names : The name for the clock at index 0 (must be "usbhs") > + > +Optional properties: > + > + - renesas,usb0-device: boolean, if present USB0 is connected to HS device > + otherwise the USB0 is connected to OHCI/EHCI host. IIUC, the testing has shown that USBHS is dual-role controller in that case, i.e. supports both host and device roles (the manual has the host controller details too). Vladimir, is it so? > + - renesas,usb2-xhci: boolean, if present USB2 is connected to XHCI controller > + otherwise the USB2 is connected to OHCI/EHCI host. > + > + > +Example device node for SoC dtsi file: > + > + usbphy: usbphy@e6590100 { > + compatible = "renesas,usb-phy-r8a7790"; > + clocks = <&mstp7_clks R8A7790_CLK_HSUSB>; > + clock-names = "usbhs"; > + reg = < 0x0 0xe6590100 0x0 0x100>; > + status = "disabled"; > + }; > + > +Example board file: > + > +&usbphy { > + status = "okay"; > +}; These are usually merged into one node for the example. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello. On 03/06/2014 09:19 PM, Ben Dooks wrote: >>> Add support for the phy-rcar-gen2-usb driver to be probed from device >>> tree. >>> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> >>> Reviewed-by: Ian Molton <ian.molton@codethink.co.uk> [...] >>> drivers/usb/phy/phy-rcar-gen2-usb.c | 34 >>> +++++++++++++++++--- >>> 3 files changed, 66 insertions(+), 5 deletions(-) >>> create mode 100644 >>> Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >>> diff --git >>> a/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >>> b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >>> new file mode 100644 >>> index 0000000..5351a30 >>> --- /dev/null >>> +++ b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt >>> @@ -0,0 +1,36 @@ >>> +Renesas RCar gen2 USB PHY bindings >>> +---------------------------------- >>> + >>> +Bindings for the USB PHY block used in some Renesas SoCs. >>> + >>> +Required properties: >>> + - compatible: "renesas,usb-phy-r8a7790" for the R8A7790 SoC >>> + "renesas,usb-phy-r8a7791" for the R8A7791 SoC >>> + - reg : A single region to access device registers >>> + - clocks : The reference to the clock to use for this block >>> + - clock-names : The name for the clock at index 0 (must be "usbhs") >>> + >>> +Optional properties: >>> + >>> + - renesas,usb0-device: boolean, if present USB0 is connected to HS >>> device >>> + otherwise the USB0 is connected to OHCI/EHCI host. >> IIUC, the testing has shown that USBHS is dual-role controller in >> that case, i.e. supports both host and device roles (the manual has the >> host controller details too). Vladimir, is it so? > Currently there is no auto-detection for this, so it gets set at > start time. The mode can be auto-detected by reading SW5. My point was however, that it doesn't seem correct to call the prop "renesas,usb0-device". I'd rather suggest "renesas,usb0-usbhs" if you keep sticking to the scheme opposite to the platform data. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-sh" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt new file mode 100644 index 0000000..5351a30 --- /dev/null +++ b/Documentation/devicetree/bindings/usb/renesas,rcar-gen2-usb-phy.txt @@ -0,0 +1,36 @@ +Renesas RCar gen2 USB PHY bindings +---------------------------------- + +Bindings for the USB PHY block used in some Renesas SoCs. + +Required properties: + - compatible: "renesas,usb-phy-r8a7790" for the R8A7790 SoC + "renesas,usb-phy-r8a7791" for the R8A7791 SoC + - reg : A single region to access device registers + - clocks : The reference to the clock to use for this block + - clock-names : The name for the clock at index 0 (must be "usbhs") + +Optional properties: + + - renesas,usb0-device: boolean, if present USB0 is connected to HS device + otherwise the USB0 is connected to OHCI/EHCI host. + - renesas,usb2-xhci: boolean, if present USB2 is connected to XHCI controller + otherwise the USB2 is connected to OHCI/EHCI host. + + +Example device node for SoC dtsi file: + + usbphy: usbphy@e6590100 { + compatible = "renesas,usb-phy-r8a7790"; + clocks = <&mstp7_clks R8A7790_CLK_HSUSB>; + clock-names = "usbhs"; + reg = < 0x0 0xe6590100 0x0 0x100>; + status = "disabled"; + }; + +Example board file: + +&usbphy { + status = "okay"; +}; + diff --git a/drivers/pci/host/pci-rcar-gen2.c b/drivers/pci/host/pci-rcar-gen2.c index 1216784..2595078 100644 --- a/drivers/pci/host/pci-rcar-gen2.c +++ b/drivers/pci/host/pci-rcar-gen2.c @@ -15,6 +15,7 @@ #include <linux/io.h> #include <linux/kernel.h> #include <linux/module.h> +#include <linux/of.h> #include <linux/pci.h> #include <linux/of_pci.h> #include <linux/platform_device.h> diff --git a/drivers/usb/phy/phy-rcar-gen2-usb.c b/drivers/usb/phy/phy-rcar-gen2-usb.c index 388d89f..8006c3c 100644 --- a/drivers/usb/phy/phy-rcar-gen2-usb.c +++ b/drivers/usb/phy/phy-rcar-gen2-usb.c @@ -15,6 +15,7 @@ #include <linux/module.h> #include <linux/platform_data/usb-rcar-gen2-phy.h> #include <linux/platform_device.h> +#include <linux/of_device.h> #include <linux/spinlock.h> #include <linux/usb/otg.h> @@ -167,6 +168,15 @@ out: spin_unlock_irqrestore(&priv->lock, flags); } +#ifdef CONFIG_OF +static struct of_device_id rcar_gen2_usb_phy_ofmatch[] = { + { .compatible = "renesas,usb-phy-r8a7790", }, + { .compatible = "renesas,usb-phy-r8a7791", }, + { }, +}; +MODULE_DEVICE_TABLE(of, rcar_gen2_usb_phy_ofmatch); +#endif + static int rcar_gen2_usb_phy_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -178,7 +188,7 @@ static int rcar_gen2_usb_phy_probe(struct platform_device *pdev) int retval; pdata = dev_get_platdata(dev); - if (!pdata) { + if (!pdata && !dev->of_node) { dev_err(dev, "No platform data\n"); return -EINVAL; } @@ -203,16 +213,29 @@ static int rcar_gen2_usb_phy_probe(struct platform_device *pdev) spin_lock_init(&priv->lock); priv->clk = clk; priv->base = base; - priv->ugctrl2 = pdata->chan0_pci ? - USBHS_UGCTRL2_USB0_PCI : USBHS_UGCTRL2_USB0_HS; - priv->ugctrl2 |= pdata->chan2_pci ? - USBHS_UGCTRL2_USB2_PCI : USBHS_UGCTRL2_USB2_SS; priv->phy.dev = dev; priv->phy.label = dev_name(dev); priv->phy.init = rcar_gen2_usb_phy_init; priv->phy.shutdown = rcar_gen2_usb_phy_shutdown; priv->phy.set_suspend = rcar_gen2_usb_phy_set_suspend; + if (dev->of_node) { + if (of_property_read_bool(dev->of_node, "renesas,usb0-device")) + priv->ugctrl2 = USBHS_UGCTRL2_USB0_HS; + else + priv->ugctrl2 = USBHS_UGCTRL2_USB0_PCI; + + if (of_property_read_bool(dev->of_node, "renesas,usb2-xhci")) + priv->ugctrl2 |= USBHS_UGCTRL2_USB2_SS; + else + priv->ugctrl2 |= USBHS_UGCTRL2_USB2_PCI; + } else { + priv->ugctrl2 = pdata->chan0_pci ? + USBHS_UGCTRL2_USB0_PCI : USBHS_UGCTRL2_USB0_HS; + priv->ugctrl2 |= pdata->chan2_pci ? + USBHS_UGCTRL2_USB2_PCI : USBHS_UGCTRL2_USB2_SS; + } + retval = usb_add_phy_dev(&priv->phy); if (retval < 0) { dev_err(dev, "Failed to add USB phy\n"); @@ -236,6 +259,7 @@ static int rcar_gen2_usb_phy_remove(struct platform_device *pdev) static struct platform_driver rcar_gen2_usb_phy_driver = { .driver = { .name = "usb_phy_rcar_gen2", + .of_match_table = of_match_ptr(rcar_gen2_usb_phy_ofmatch), }, .probe = rcar_gen2_usb_phy_probe, .remove = rcar_gen2_usb_phy_remove,