14 #include <linux/module.h>
28 #define pdev_to_phy(pdev) \
29 ((struct usb_phy *)platform_get_drvdata(pdev))
71 dev_err(dev,
"Failed to parse property fsl,usbmisc, errno %d\n",
73 memset(usbdev, 0,
sizeof(*usbdev));
89 .name =
"ci13xxx_imx",
112 dev_err(&pdev->
dev,
"Failed to allocate CI13xxx-IMX data!\n");
118 dev_err(&pdev->
dev,
"Can't get device resources!\n");
122 pinctrl = devm_pinctrl_get_select_default(&pdev->
dev);
124 dev_warn(&pdev->
dev,
"pinctrl get/select failed, err=%ld\n",
128 if (IS_ERR(data->
clk)) {
130 "Failed to get clock, err=%ld\n", PTR_ERR(data->
clk));
131 return PTR_ERR(data->
clk);
134 ret = clk_prepare_enable(data->
clk);
137 "Failed to prepare or enable clock, err=%d\n", ret);
149 try_module_get(phy_pdev->
dev.driver->owner)) {
158 if (!IS_ERR(reg_vbus)) {
162 "Failed to enable vbus regulator, err=%d\n",
171 ci13xxx_imx_platdata.phy = data->
phy;
173 if (!pdev->
dev.dma_mask) {
176 if (!pdev->
dev.dma_mask) {
178 dev_err(&pdev->
dev,
"Failed to alloc dma_mask!\n");
185 if (usbmisc_ops && usbmisc_ops->
init) {
186 ret = usbmisc_ops->
init(&pdev->
dev);
189 "usbmisc init failed, ret=%d\n", ret);
196 &ci13xxx_imx_platdata);
197 if (IS_ERR(plat_ci)) {
198 ret = PTR_ERR(plat_ci);
200 "Can't register ci_hdrc platform device, err=%d\n",
206 platform_set_drvdata(pdev, data);
219 clk_disable_unprepare(data->
clk);
227 pm_runtime_disable(&pdev->
dev);
234 usb_phy_shutdown(data->
phy);
235 module_put(data->
phy->dev->driver->owner);
238 of_node_put(data->
phy_np);
240 clk_disable_unprepare(data->
clk);
242 platform_set_drvdata(pdev,
NULL);
247 static const struct of_device_id ci13xxx_imx_dt_ids[] = {
248 { .compatible =
"fsl,imx27-usb", },
254 .probe = ci13xxx_imx_probe,
259 .of_match_table = ci13xxx_imx_dt_ids,