Lines Matching +full:hsic +full:- +full:phy
11 #include <linux/phy/phy.h>
13 #include <linux/pinctrl/pinctrl-state.h>
22 struct phy *phy; member
29 static int qcom_usb_hsic_phy_power_on(struct phy *phy) in qcom_usb_hsic_phy_power_on() argument
31 struct qcom_usb_hsic_phy *uphy = phy_get_drvdata(phy); in qcom_usb_hsic_phy_power_on()
32 struct ulpi *ulpi = uphy->ulpi; in qcom_usb_hsic_phy_power_on()
36 ret = clk_prepare_enable(uphy->phy_clk); in qcom_usb_hsic_phy_power_on()
40 ret = clk_prepare_enable(uphy->cal_clk); in qcom_usb_hsic_phy_power_on()
44 ret = clk_prepare_enable(uphy->cal_sleep_clk); in qcom_usb_hsic_phy_power_on()
58 /* Configure pins for HSIC functionality */ in qcom_usb_hsic_phy_power_on()
59 pins_default = pinctrl_lookup_state(uphy->pctl, PINCTRL_STATE_DEFAULT); in qcom_usb_hsic_phy_power_on()
63 ret = pinctrl_select_state(uphy->pctl, pins_default); in qcom_usb_hsic_phy_power_on()
67 /* Enable HSIC mode in HSIC_CFG register */ in qcom_usb_hsic_phy_power_on()
72 /* Disable auto-resume */ in qcom_usb_hsic_phy_power_on()
80 clk_disable_unprepare(uphy->cal_sleep_clk); in qcom_usb_hsic_phy_power_on()
82 clk_disable_unprepare(uphy->cal_clk); in qcom_usb_hsic_phy_power_on()
84 clk_disable_unprepare(uphy->phy_clk); in qcom_usb_hsic_phy_power_on()
88 static int qcom_usb_hsic_phy_power_off(struct phy *phy) in qcom_usb_hsic_phy_power_off() argument
90 struct qcom_usb_hsic_phy *uphy = phy_get_drvdata(phy); in qcom_usb_hsic_phy_power_off()
92 clk_disable_unprepare(uphy->cal_sleep_clk); in qcom_usb_hsic_phy_power_off()
93 clk_disable_unprepare(uphy->cal_clk); in qcom_usb_hsic_phy_power_off()
94 clk_disable_unprepare(uphy->phy_clk); in qcom_usb_hsic_phy_power_off()
111 uphy = devm_kzalloc(&ulpi->dev, sizeof(*uphy), GFP_KERNEL); in qcom_usb_hsic_phy_probe()
113 return -ENOMEM; in qcom_usb_hsic_phy_probe()
116 uphy->ulpi = ulpi; in qcom_usb_hsic_phy_probe()
117 uphy->pctl = devm_pinctrl_get(&ulpi->dev); in qcom_usb_hsic_phy_probe()
118 if (IS_ERR(uphy->pctl)) in qcom_usb_hsic_phy_probe()
119 return PTR_ERR(uphy->pctl); in qcom_usb_hsic_phy_probe()
121 uphy->phy_clk = clk = devm_clk_get(&ulpi->dev, "phy"); in qcom_usb_hsic_phy_probe()
125 uphy->cal_clk = clk = devm_clk_get(&ulpi->dev, "cal"); in qcom_usb_hsic_phy_probe()
129 uphy->cal_sleep_clk = clk = devm_clk_get(&ulpi->dev, "cal_sleep"); in qcom_usb_hsic_phy_probe()
133 uphy->phy = devm_phy_create(&ulpi->dev, ulpi->dev.of_node, in qcom_usb_hsic_phy_probe()
135 if (IS_ERR(uphy->phy)) in qcom_usb_hsic_phy_probe()
136 return PTR_ERR(uphy->phy); in qcom_usb_hsic_phy_probe()
137 phy_set_drvdata(uphy->phy, uphy); in qcom_usb_hsic_phy_probe()
139 p = devm_of_phy_provider_register(&ulpi->dev, of_phy_simple_xlate); in qcom_usb_hsic_phy_probe()
144 { .compatible = "qcom,usb-hsic-phy", },
158 MODULE_DESCRIPTION("Qualcomm USB HSIC phy");