Lines Matching refs:hsotg

118 static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg)  in __dwc2_lowlevel_hw_enable()  argument
120 struct platform_device *pdev = to_platform_device(hsotg->dev); in __dwc2_lowlevel_hw_enable()
123 ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies), in __dwc2_lowlevel_hw_enable()
124 hsotg->supplies); in __dwc2_lowlevel_hw_enable()
128 if (hsotg->clk) { in __dwc2_lowlevel_hw_enable()
129 ret = clk_prepare_enable(hsotg->clk); in __dwc2_lowlevel_hw_enable()
134 if (hsotg->uphy) in __dwc2_lowlevel_hw_enable()
135 ret = usb_phy_init(hsotg->uphy); in __dwc2_lowlevel_hw_enable()
136 else if (hsotg->plat && hsotg->plat->phy_init) in __dwc2_lowlevel_hw_enable()
137 ret = hsotg->plat->phy_init(pdev, hsotg->plat->phy_type); in __dwc2_lowlevel_hw_enable()
139 ret = phy_power_on(hsotg->phy); in __dwc2_lowlevel_hw_enable()
141 ret = phy_init(hsotg->phy); in __dwc2_lowlevel_hw_enable()
154 int dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg) in dwc2_lowlevel_hw_enable() argument
156 int ret = __dwc2_lowlevel_hw_enable(hsotg); in dwc2_lowlevel_hw_enable()
159 hsotg->ll_hw_enabled = true; in dwc2_lowlevel_hw_enable()
163 static int __dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg) in __dwc2_lowlevel_hw_disable() argument
165 struct platform_device *pdev = to_platform_device(hsotg->dev); in __dwc2_lowlevel_hw_disable()
168 if (hsotg->uphy) in __dwc2_lowlevel_hw_disable()
169 usb_phy_shutdown(hsotg->uphy); in __dwc2_lowlevel_hw_disable()
170 else if (hsotg->plat && hsotg->plat->phy_exit) in __dwc2_lowlevel_hw_disable()
171 ret = hsotg->plat->phy_exit(pdev, hsotg->plat->phy_type); in __dwc2_lowlevel_hw_disable()
173 ret = phy_exit(hsotg->phy); in __dwc2_lowlevel_hw_disable()
175 ret = phy_power_off(hsotg->phy); in __dwc2_lowlevel_hw_disable()
180 if (hsotg->clk) in __dwc2_lowlevel_hw_disable()
181 clk_disable_unprepare(hsotg->clk); in __dwc2_lowlevel_hw_disable()
183 ret = regulator_bulk_disable(ARRAY_SIZE(hsotg->supplies), in __dwc2_lowlevel_hw_disable()
184 hsotg->supplies); in __dwc2_lowlevel_hw_disable()
196 int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg) in dwc2_lowlevel_hw_disable() argument
198 int ret = __dwc2_lowlevel_hw_disable(hsotg); in dwc2_lowlevel_hw_disable()
201 hsotg->ll_hw_enabled = false; in dwc2_lowlevel_hw_disable()
205 static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) in dwc2_lowlevel_hw_init() argument
210 hsotg->phyif = GUSBCFG_PHYIF16; in dwc2_lowlevel_hw_init()
216 hsotg->phy = devm_phy_get(hsotg->dev, "usb2-phy"); in dwc2_lowlevel_hw_init()
217 if (IS_ERR(hsotg->phy)) { in dwc2_lowlevel_hw_init()
218 ret = PTR_ERR(hsotg->phy); in dwc2_lowlevel_hw_init()
222 hsotg->phy = NULL; in dwc2_lowlevel_hw_init()
227 dev_err(hsotg->dev, "error getting phy %d\n", ret); in dwc2_lowlevel_hw_init()
232 if (!hsotg->phy) { in dwc2_lowlevel_hw_init()
233 hsotg->uphy = devm_usb_get_phy(hsotg->dev, USB_PHY_TYPE_USB2); in dwc2_lowlevel_hw_init()
234 if (IS_ERR(hsotg->uphy)) { in dwc2_lowlevel_hw_init()
235 ret = PTR_ERR(hsotg->uphy); in dwc2_lowlevel_hw_init()
239 hsotg->uphy = NULL; in dwc2_lowlevel_hw_init()
244 dev_err(hsotg->dev, "error getting usb phy %d\n", in dwc2_lowlevel_hw_init()
251 hsotg->plat = dev_get_platdata(hsotg->dev); in dwc2_lowlevel_hw_init()
253 if (hsotg->phy) { in dwc2_lowlevel_hw_init()
258 if (phy_get_bus_width(hsotg->phy) == 8) in dwc2_lowlevel_hw_init()
259 hsotg->phyif = GUSBCFG_PHYIF8; in dwc2_lowlevel_hw_init()
263 hsotg->clk = devm_clk_get(hsotg->dev, "otg"); in dwc2_lowlevel_hw_init()
264 if (IS_ERR(hsotg->clk)) { in dwc2_lowlevel_hw_init()
265 hsotg->clk = NULL; in dwc2_lowlevel_hw_init()
266 dev_dbg(hsotg->dev, "cannot get otg clock\n"); in dwc2_lowlevel_hw_init()
270 for (i = 0; i < ARRAY_SIZE(hsotg->supplies); i++) in dwc2_lowlevel_hw_init()
271 hsotg->supplies[i].supply = dwc2_hsotg_supply_names[i]; in dwc2_lowlevel_hw_init()
273 ret = devm_regulator_bulk_get(hsotg->dev, ARRAY_SIZE(hsotg->supplies), in dwc2_lowlevel_hw_init()
274 hsotg->supplies); in dwc2_lowlevel_hw_init()
276 dev_err(hsotg->dev, "failed to request supplies: %d\n", ret); in dwc2_lowlevel_hw_init()
295 struct dwc2_hsotg *hsotg = platform_get_drvdata(dev); in dwc2_driver_remove() local
297 dwc2_debugfs_exit(hsotg); in dwc2_driver_remove()
298 if (hsotg->hcd_enabled) in dwc2_driver_remove()
299 dwc2_hcd_remove(hsotg); in dwc2_driver_remove()
300 if (hsotg->gadget_enabled) in dwc2_driver_remove()
301 dwc2_hsotg_remove(hsotg); in dwc2_driver_remove()
303 if (hsotg->ll_hw_enabled) in dwc2_driver_remove()
304 dwc2_lowlevel_hw_disable(hsotg); in dwc2_driver_remove()
335 struct dwc2_hsotg *hsotg; in dwc2_driver_probe() local
355 hsotg = devm_kzalloc(&dev->dev, sizeof(*hsotg), GFP_KERNEL); in dwc2_driver_probe()
356 if (!hsotg) in dwc2_driver_probe()
359 hsotg->dev = &dev->dev; in dwc2_driver_probe()
371 hsotg->regs = devm_ioremap_resource(&dev->dev, res); in dwc2_driver_probe()
372 if (IS_ERR(hsotg->regs)) in dwc2_driver_probe()
373 return PTR_ERR(hsotg->regs); in dwc2_driver_probe()
376 (unsigned long)res->start, hsotg->regs); in dwc2_driver_probe()
378 hsotg->dr_mode = usb_get_dr_mode(&dev->dev); in dwc2_driver_probe()
380 hsotg->dr_mode != USB_DR_MODE_HOST) { in dwc2_driver_probe()
381 hsotg->dr_mode = USB_DR_MODE_HOST; in dwc2_driver_probe()
382 dev_warn(hsotg->dev, in dwc2_driver_probe()
385 hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) { in dwc2_driver_probe()
386 hsotg->dr_mode = USB_DR_MODE_PERIPHERAL; in dwc2_driver_probe()
387 dev_warn(hsotg->dev, in dwc2_driver_probe()
391 retval = dwc2_lowlevel_hw_init(hsotg); in dwc2_driver_probe()
395 spin_lock_init(&hsotg->lock); in dwc2_driver_probe()
397 hsotg->core_params = devm_kzalloc(&dev->dev, in dwc2_driver_probe()
398 sizeof(*hsotg->core_params), GFP_KERNEL); in dwc2_driver_probe()
399 if (!hsotg->core_params) in dwc2_driver_probe()
402 dwc2_set_all_params(hsotg->core_params, -1); in dwc2_driver_probe()
410 dev_dbg(hsotg->dev, "registering common handler for irq%d\n", in dwc2_driver_probe()
412 retval = devm_request_irq(hsotg->dev, irq, in dwc2_driver_probe()
414 dev_name(hsotg->dev), hsotg); in dwc2_driver_probe()
418 retval = dwc2_lowlevel_hw_enable(hsotg); in dwc2_driver_probe()
423 retval = dwc2_get_hwparams(hsotg); in dwc2_driver_probe()
428 dwc2_set_parameters(hsotg, params); in dwc2_driver_probe()
430 if (hsotg->dr_mode != USB_DR_MODE_HOST) { in dwc2_driver_probe()
431 retval = dwc2_gadget_init(hsotg, irq); in dwc2_driver_probe()
434 hsotg->gadget_enabled = 1; in dwc2_driver_probe()
437 if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) { in dwc2_driver_probe()
438 retval = dwc2_hcd_init(hsotg, irq); in dwc2_driver_probe()
440 if (hsotg->gadget_enabled) in dwc2_driver_probe()
441 dwc2_hsotg_remove(hsotg); in dwc2_driver_probe()
444 hsotg->hcd_enabled = 1; in dwc2_driver_probe()
447 platform_set_drvdata(dev, hsotg); in dwc2_driver_probe()
449 dwc2_debugfs_init(hsotg); in dwc2_driver_probe()
452 if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) in dwc2_driver_probe()
453 dwc2_lowlevel_hw_disable(hsotg); in dwc2_driver_probe()
458 dwc2_lowlevel_hw_disable(hsotg); in dwc2_driver_probe()