Loading Documentation/devicetree/bindings/usb/msm-phy.txt +4 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,9 @@ Required properties: - reset-names: reset signal name strings sorted in the same order as the resets property. Optional properties: - qcom,param-override-seq: parameter override sequence with value, reg offset pair. Example: hsphy@f9200000 { compatible = "qcom,usb-hsphy-snps-femto"; Loading @@ -32,6 +35,7 @@ Example: vdda18-supply = <&pm8941_l6>; vdda33-supply = <&pm8941_l24>; qcom,vdd-voltage-level = <0 872000 872000>; qcom,param-override-seq = <0x43 0x70>; }; SSUSB-QMP PHY Loading drivers/usb/phy/phy-msm-snps-hs.c +36 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,9 @@ struct msm_hsphy { bool suspended; bool cable_connected; int *param_override_seq; int param_override_seq_cnt; /* emulation targets specific */ void __iomem *emu_phy_base; int *emu_init_seq; Loading Loading @@ -381,6 +384,11 @@ static int msm_hsphy_init(struct usb_phy *uphy) msm_usb_write_readback(phy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL1, VBUSVLDEXT0, VBUSVLDEXT0); /* set parameter ovrride if needed */ if (phy->param_override_seq) hsusb_phy_write_seq(phy->base, phy->param_override_seq, phy->param_override_seq_cnt, 0); msm_usb_write_readback(phy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL_COMMON2, VREGBYPASS, VREGBYPASS); Loading Loading @@ -576,6 +584,34 @@ static int msm_hsphy_probe(struct platform_device *pdev) } } phy->param_override_seq_cnt = of_property_count_elems_of_size( dev->of_node, "qcom,param-override-seq", sizeof(*phy->param_override_seq)); if (phy->param_override_seq_cnt > 0) { phy->param_override_seq = devm_kcalloc(dev, phy->param_override_seq_cnt, sizeof(*phy->param_override_seq), GFP_KERNEL); if (!phy->param_override_seq) return -ENOMEM; if (phy->param_override_seq_cnt % 2) { dev_err(dev, "invalid param_override_seq_len\n"); return -EINVAL; } ret = of_property_read_u32_array(dev->of_node, "qcom,param-override-seq", phy->param_override_seq, phy->param_override_seq_cnt); if (ret) { dev_err(dev, "qcom,param-override-seq read failed %d\n", ret); return ret; } } ret = of_property_read_u32_array(dev->of_node, "qcom,vdd-voltage-level", (u32 *) phy->vdd_levels, ARRAY_SIZE(phy->vdd_levels)); Loading Loading
Documentation/devicetree/bindings/usb/msm-phy.txt +4 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,9 @@ Required properties: - reset-names: reset signal name strings sorted in the same order as the resets property. Optional properties: - qcom,param-override-seq: parameter override sequence with value, reg offset pair. Example: hsphy@f9200000 { compatible = "qcom,usb-hsphy-snps-femto"; Loading @@ -32,6 +35,7 @@ Example: vdda18-supply = <&pm8941_l6>; vdda33-supply = <&pm8941_l24>; qcom,vdd-voltage-level = <0 872000 872000>; qcom,param-override-seq = <0x43 0x70>; }; SSUSB-QMP PHY Loading
drivers/usb/phy/phy-msm-snps-hs.c +36 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,9 @@ struct msm_hsphy { bool suspended; bool cable_connected; int *param_override_seq; int param_override_seq_cnt; /* emulation targets specific */ void __iomem *emu_phy_base; int *emu_init_seq; Loading Loading @@ -381,6 +384,11 @@ static int msm_hsphy_init(struct usb_phy *uphy) msm_usb_write_readback(phy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL1, VBUSVLDEXT0, VBUSVLDEXT0); /* set parameter ovrride if needed */ if (phy->param_override_seq) hsusb_phy_write_seq(phy->base, phy->param_override_seq, phy->param_override_seq_cnt, 0); msm_usb_write_readback(phy->base, USB2_PHY_USB_PHY_HS_PHY_CTRL_COMMON2, VREGBYPASS, VREGBYPASS); Loading Loading @@ -576,6 +584,34 @@ static int msm_hsphy_probe(struct platform_device *pdev) } } phy->param_override_seq_cnt = of_property_count_elems_of_size( dev->of_node, "qcom,param-override-seq", sizeof(*phy->param_override_seq)); if (phy->param_override_seq_cnt > 0) { phy->param_override_seq = devm_kcalloc(dev, phy->param_override_seq_cnt, sizeof(*phy->param_override_seq), GFP_KERNEL); if (!phy->param_override_seq) return -ENOMEM; if (phy->param_override_seq_cnt % 2) { dev_err(dev, "invalid param_override_seq_len\n"); return -EINVAL; } ret = of_property_read_u32_array(dev->of_node, "qcom,param-override-seq", phy->param_override_seq, phy->param_override_seq_cnt); if (ret) { dev_err(dev, "qcom,param-override-seq read failed %d\n", ret); return ret; } } ret = of_property_read_u32_array(dev->of_node, "qcom,vdd-voltage-level", (u32 *) phy->vdd_levels, ARRAY_SIZE(phy->vdd_levels)); Loading