usb: phy: Make cfg_ahb_clk optional

USB qusb2 and ssusb qmp phy drivers are not required to
manage gcc_usb_phy_cfg_ahb2phy_clk clock. It will stay
always ON except when in XO-shutdown. RPM will manage
this clock.

Change-Id: I92647d8ba53bb498b1048ea920a25c04441f6e10
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
This commit is contained in:
Hemant Kumar 2016-07-19 16:41:59 -07:00
parent 89e2052bd5
commit 45c86c2e14
3 changed files with 45 additions and 11 deletions

View file

@ -101,6 +101,10 @@ Required properties:
Required "supply-name" examples are: Required "supply-name" examples are:
"vdd" : vdd supply for SSPHY digital circuit operation "vdd" : vdd supply for SSPHY digital circuit operation
"core" : high-voltage analog supply for SSPHY "core" : high-voltage analog supply for SSPHY
- clocks: a list of phandles to the PHY clocks. Use as per
Documentation/devicetree/bindings/clock/clock-bindings.txt
- clock-names: Names of the clocks in 1-1 correspondence with the "clocks"
property. Required clocks are "aux_clk" and "pipe_clk".
- qcom,vdd-voltage-level: This property must be a list of three integer - qcom,vdd-voltage-level: This property must be a list of three integer
values (no, min, max) where each value represents either a voltage in values (no, min, max) where each value represents either a voltage in
microvolts or a value corresponding to voltage corner microvolts or a value corresponding to voltage corner
@ -119,6 +123,10 @@ Optional properties:
- reg: Additional register set of address and length to control QMP PHY are: - reg: Additional register set of address and length to control QMP PHY are:
"tcsr_usb3_dp_phymode" : top-level CSR register to be written to select "tcsr_usb3_dp_phymode" : top-level CSR register to be written to select
super speed usb qmp phy. super speed usb qmp phy.
- clocks: a list of phandles to the PHY clocks. Use as per
Documentation/devicetree/bindings/clock/clock-bindings.txt
- clock-names: Names of the clocks in 1-1 correspondence with the "clocks"
property. Required clocks are "cfg_ahb_clk", "phy_reset" and "phy_phy_reset".
- qcom,vbus-valid-override: If present, indicates VBUS pin is not connected to - qcom,vbus-valid-override: If present, indicates VBUS pin is not connected to
the USB PHY and the controller must rely on external VBUS notification in the USB PHY and the controller must rely on external VBUS notification in
order to manually relay the notification to the SSPHY. order to manually relay the notification to the SSPHY.
@ -138,6 +146,17 @@ Example:
vdda18-supply = <&pmd9635_l8>; vdda18-supply = <&pmd9635_l8>;
qcom,vdd-voltage-level = <0 900000 1050000>; qcom,vdd-voltage-level = <0 900000 1050000>;
qcom,vbus-valid-override; qcom,vbus-valid-override;
clocks = <&clock_gcc clk_gcc_usb3_phy_aux_clk>,
<&clock_gcc clk_gcc_usb3_phy_pipe_clk>,
<&clock_gcc clk_gcc_usb_phy_cfg_ahb2phy_clk>,
<&clock_gcc clk_gcc_usb3_phy_reset>,
<&clock_gcc clk_gcc_usb3phy_phy_reset>,
<&clock_gcc clk_ln_bb_clk1>,
<&clock_gcc clk_gcc_usb3_clkref_clk>;
clock-names = "aux_clk", "pipe_clk", "cfg_ahb_clk", "phy_reset",
"phy_phy_reset", "ref_clk_src", "ref_clk";
}; };
QUSB2 High-Speed PHY QUSB2 High-Speed PHY
@ -157,7 +176,7 @@ Required properties:
- clocks: a list of phandles to the PHY clocks. Use as per - clocks: a list of phandles to the PHY clocks. Use as per
Documentation/devicetree/bindings/clock/clock-bindings.txt Documentation/devicetree/bindings/clock/clock-bindings.txt
- clock-names: Names of the clocks in 1-1 correspondence with the "clocks" - clock-names: Names of the clocks in 1-1 correspondence with the "clocks"
property. Required clocks are "cfg_ahb_clk" and "phy_reset". property. Required clock is "phy_reset".
- phy_type: Should be one of "ulpi" or "utmi". ChipIdea core uses "ulpi" mode. - phy_type: Should be one of "ulpi" or "utmi". ChipIdea core uses "ulpi" mode.
Optional properties: Optional properties:
@ -171,6 +190,10 @@ Optional properties:
allows us to manipulate QUSB PHY bits eg. to enable D+ pull-up using s/w allows us to manipulate QUSB PHY bits eg. to enable D+ pull-up using s/w
control in device mode. The reg-names property is required if the control in device mode. The reg-names property is required if the
reg property is specified. reg property is specified.
- clocks: a list of phandles to the PHY clocks. Use as per
Documentation/devicetree/bindings/clock/clock-bindings.txt
- clock-names: Names of the clocks in 1-1 correspondence with the "clocks"
property. "cfg_ahb_clk", "ref_clk_src" and "ref_clk" are optional clocks.
- qcom,qusb-phy-init-seq: QUSB PHY initialization sequence with value,reg pair. - qcom,qusb-phy-init-seq: QUSB PHY initialization sequence with value,reg pair.
- qcom,emu-init-seq : emulation initialization sequence with value,reg pair. - qcom,emu-init-seq : emulation initialization sequence with value,reg pair.
- qcom,phy-pll-reset-seq : emulation PLL reset sequence with value,reg pair. - qcom,phy-pll-reset-seq : emulation PLL reset sequence with value,reg pair.

View file

@ -767,9 +767,17 @@ static int qusb_phy_probe(struct platform_device *pdev)
else else
clk_set_rate(qphy->ref_clk, 19200000); clk_set_rate(qphy->ref_clk, 19200000);
qphy->cfg_ahb_clk = devm_clk_get(dev, "cfg_ahb_clk"); if (of_property_match_string(pdev->dev.of_node,
if (IS_ERR(qphy->cfg_ahb_clk)) "clock-names", "cfg_ahb_clk") >= 0) {
return PTR_ERR(qphy->cfg_ahb_clk); qphy->cfg_ahb_clk = devm_clk_get(dev, "cfg_ahb_clk");
if (IS_ERR(qphy->cfg_ahb_clk)) {
ret = PTR_ERR(qphy->cfg_ahb_clk);
if (ret != -EPROBE_DEFER)
dev_err(dev,
"clk get failed for cfg_ahb_clk ret %d\n", ret);
return ret;
}
}
qphy->phy_reset = devm_clk_get(dev, "phy_reset"); qphy->phy_reset = devm_clk_get(dev, "phy_reset");
if (IS_ERR(qphy->phy_reset)) if (IS_ERR(qphy->phy_reset))

View file

@ -547,13 +547,16 @@ static int msm_ssphy_qmp_probe(struct platform_device *pdev)
clk_set_rate(phy->aux_clk, clk_round_rate(phy->aux_clk, ULONG_MAX)); clk_set_rate(phy->aux_clk, clk_round_rate(phy->aux_clk, ULONG_MAX));
phy->cfg_ahb_clk = devm_clk_get(dev, "cfg_ahb_clk"); if (of_property_match_string(pdev->dev.of_node,
if (IS_ERR(phy->cfg_ahb_clk)) { "clock-names", "cfg_ahb_clk") >= 0) {
ret = PTR_ERR(phy->cfg_ahb_clk); phy->cfg_ahb_clk = devm_clk_get(dev, "cfg_ahb_clk");
phy->cfg_ahb_clk = NULL; if (IS_ERR(phy->cfg_ahb_clk)) {
if (ret != -EPROBE_DEFER) ret = PTR_ERR(phy->cfg_ahb_clk);
dev_err(dev, "failed to get cfg_ahb_clk\n"); if (ret != -EPROBE_DEFER)
goto err; dev_err(dev,
"failed to get cfg_ahb_clk ret %d\n", ret);
goto err;
}
} }
phy->pipe_clk = devm_clk_get(dev, "pipe_clk"); phy->pipe_clk = devm_clk_get(dev, "pipe_clk");