Lines Matching refs:priv
67 #define usbhs_platform_call(priv, func, args...)\ argument
68 (!(priv) ? -ENODEV : \
69 !((priv)->pfunc.func) ? 0 : \
70 (priv)->pfunc.func(args))
75 u16 usbhs_read(struct usbhs_priv *priv, u32 reg) in usbhs_read() argument
77 return ioread16(priv->base + reg); in usbhs_read()
80 void usbhs_write(struct usbhs_priv *priv, u32 reg, u16 data) in usbhs_write() argument
82 iowrite16(data, priv->base + reg); in usbhs_write()
85 void usbhs_bset(struct usbhs_priv *priv, u32 reg, u16 mask, u16 data) in usbhs_bset() argument
87 u16 val = usbhs_read(priv, reg); in usbhs_bset()
92 usbhs_write(priv, reg, val); in usbhs_bset()
103 static void usbhs_sys_clock_ctrl(struct usbhs_priv *priv, int enable) in usbhs_sys_clock_ctrl() argument
105 usbhs_bset(priv, SYSCFG, SCKE, enable ? SCKE : 0); in usbhs_sys_clock_ctrl()
108 void usbhs_sys_host_ctrl(struct usbhs_priv *priv, int enable) in usbhs_sys_host_ctrl() argument
112 int has_otg = usbhs_get_dparam(priv, has_otg); in usbhs_sys_host_ctrl()
115 usbhs_bset(priv, DVSTCTR, (EXTLP | PWEN), (EXTLP | PWEN)); in usbhs_sys_host_ctrl()
123 usbhs_bset(priv, SYSCFG, mask, enable ? val : 0); in usbhs_sys_host_ctrl()
126 void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable) in usbhs_sys_function_ctrl() argument
139 usbhs_bset(priv, SYSCFG, mask, enable ? val : 0); in usbhs_sys_function_ctrl()
142 void usbhs_sys_function_pullup(struct usbhs_priv *priv, int enable) in usbhs_sys_function_pullup() argument
144 usbhs_bset(priv, SYSCFG, DPRPU, enable ? DPRPU : 0); in usbhs_sys_function_pullup()
147 void usbhs_sys_set_test_mode(struct usbhs_priv *priv, u16 mode) in usbhs_sys_set_test_mode() argument
149 usbhs_write(priv, TESTMODE, mode); in usbhs_sys_set_test_mode()
155 int usbhs_frame_get_num(struct usbhs_priv *priv) in usbhs_frame_get_num() argument
157 return usbhs_read(priv, FRMNUM) & FRNM_MASK; in usbhs_frame_get_num()
163 void usbhs_usbreq_get_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req) in usbhs_usbreq_get_val() argument
167 val = usbhs_read(priv, USBREQ); in usbhs_usbreq_get_val()
171 req->wValue = usbhs_read(priv, USBVAL); in usbhs_usbreq_get_val()
172 req->wIndex = usbhs_read(priv, USBINDX); in usbhs_usbreq_get_val()
173 req->wLength = usbhs_read(priv, USBLENG); in usbhs_usbreq_get_val()
176 void usbhs_usbreq_set_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req) in usbhs_usbreq_set_val() argument
178 usbhs_write(priv, USBREQ, (req->bRequest << 8) | req->bRequestType); in usbhs_usbreq_set_val()
179 usbhs_write(priv, USBVAL, req->wValue); in usbhs_usbreq_set_val()
180 usbhs_write(priv, USBINDX, req->wIndex); in usbhs_usbreq_set_val()
181 usbhs_write(priv, USBLENG, req->wLength); in usbhs_usbreq_set_val()
183 usbhs_bset(priv, DCPCTR, SUREQ, SUREQ); in usbhs_usbreq_set_val()
189 void usbhs_bus_send_sof_enable(struct usbhs_priv *priv) in usbhs_bus_send_sof_enable() argument
191 u16 status = usbhs_read(priv, DVSTCTR) & (USBRST | UACT); in usbhs_bus_send_sof_enable()
194 struct device *dev = usbhs_priv_to_dev(priv); in usbhs_bus_send_sof_enable()
198 usbhs_bset(priv, DVSTCTR, (USBRST | UACT), UACT); in usbhs_bus_send_sof_enable()
201 void usbhs_bus_send_reset(struct usbhs_priv *priv) in usbhs_bus_send_reset() argument
203 usbhs_bset(priv, DVSTCTR, (USBRST | UACT), USBRST); in usbhs_bus_send_reset()
206 int usbhs_bus_get_speed(struct usbhs_priv *priv) in usbhs_bus_get_speed() argument
208 u16 dvstctr = usbhs_read(priv, DVSTCTR); in usbhs_bus_get_speed()
222 int usbhs_vbus_ctrl(struct usbhs_priv *priv, int enable) in usbhs_vbus_ctrl() argument
224 struct platform_device *pdev = usbhs_priv_to_pdev(priv); in usbhs_vbus_ctrl()
226 return usbhs_platform_call(priv, set_vbus, pdev, enable); in usbhs_vbus_ctrl()
229 static void usbhsc_bus_init(struct usbhs_priv *priv) in usbhsc_bus_init() argument
231 usbhs_write(priv, DVSTCTR, 0); in usbhsc_bus_init()
233 usbhs_vbus_ctrl(priv, 0); in usbhsc_bus_init()
239 int usbhs_set_device_config(struct usbhs_priv *priv, int devnum, in usbhs_set_device_config() argument
242 struct device *dev = usbhs_priv_to_dev(priv); in usbhs_set_device_config()
271 usbhs_write(priv, reg, UPPHUB(upphub) | in usbhs_set_device_config()
281 void usbhs_xxxsts_clear(struct usbhs_priv *priv, u16 sts_reg, u16 bit) in usbhs_xxxsts_clear() argument
283 u16 pipe_mask = (u16)GENMASK(usbhs_get_dparam(priv, pipe_size), 0); in usbhs_xxxsts_clear()
285 usbhs_write(priv, sts_reg, ~(1 << bit) & pipe_mask); in usbhs_xxxsts_clear()
291 static void usbhsc_set_buswait(struct usbhs_priv *priv) in usbhsc_set_buswait() argument
293 int wait = usbhs_get_dparam(priv, buswait_bwait); in usbhsc_set_buswait()
297 usbhs_bset(priv, BUSWAIT, 0x000F, wait); in usbhsc_set_buswait()
341 static void usbhsc_power_ctrl(struct usbhs_priv *priv, int enable) in usbhsc_power_ctrl() argument
343 struct platform_device *pdev = usbhs_priv_to_pdev(priv); in usbhsc_power_ctrl()
344 struct device *dev = usbhs_priv_to_dev(priv); in usbhsc_power_ctrl()
351 usbhs_platform_call(priv, power_ctrl, pdev, priv->base, enable); in usbhsc_power_ctrl()
354 usbhs_sys_clock_ctrl(priv, enable); in usbhsc_power_ctrl()
357 usbhs_sys_clock_ctrl(priv, enable); in usbhsc_power_ctrl()
360 usbhs_platform_call(priv, power_ctrl, pdev, priv->base, enable); in usbhsc_power_ctrl()
370 static void usbhsc_hotplug(struct usbhs_priv *priv) in usbhsc_hotplug() argument
372 struct platform_device *pdev = usbhs_priv_to_pdev(priv); in usbhsc_hotplug()
373 struct usbhs_mod *mod = usbhs_mod_get_current(priv); in usbhsc_hotplug()
382 enable = usbhs_platform_call(priv, get_vbus, pdev); in usbhsc_hotplug()
387 id = usbhs_platform_call(priv, get_id, pdev); in usbhsc_hotplug()
390 if (priv->edev) { in usbhsc_hotplug()
391 cable = extcon_get_cable_state_(priv->edev, EXTCON_USB_HOST); in usbhsc_hotplug()
400 ret = usbhs_mod_change(priv, id); in usbhsc_hotplug()
407 if (usbhsc_flags_has(priv, USBHSF_RUNTIME_PWCTRL)) in usbhsc_hotplug()
408 usbhsc_power_ctrl(priv, enable); in usbhsc_hotplug()
411 usbhsc_set_buswait(priv); in usbhsc_hotplug()
412 usbhsc_bus_init(priv); in usbhsc_hotplug()
415 usbhs_mod_call(priv, start, priv); in usbhsc_hotplug()
421 usbhs_mod_call(priv, stop, priv); in usbhsc_hotplug()
424 usbhsc_bus_init(priv); in usbhsc_hotplug()
427 if (usbhsc_flags_has(priv, USBHSF_RUNTIME_PWCTRL)) in usbhsc_hotplug()
428 usbhsc_power_ctrl(priv, enable); in usbhsc_hotplug()
430 usbhs_mod_change(priv, -1); in usbhsc_hotplug()
433 usbhs_platform_call(priv, phy_reset, pdev); in usbhsc_hotplug()
442 struct usbhs_priv *priv = container_of(work, in usbhsc_notify_hotplug() local
445 usbhsc_hotplug(priv); in usbhsc_notify_hotplug()
450 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev); in usbhsc_drvcllbck_notify_hotplug() local
451 int delay = usbhs_get_dparam(priv, detection_delay); in usbhsc_drvcllbck_notify_hotplug()
458 schedule_delayed_work(&priv->notify_hotplug_work, in usbhsc_drvcllbck_notify_hotplug()
519 struct usbhs_priv *priv; in usbhs_probe() local
541 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); in usbhs_probe()
542 if (!priv) in usbhs_probe()
546 priv->base = devm_ioremap_resource(&pdev->dev, res); in usbhs_probe()
547 if (IS_ERR(priv->base)) in usbhs_probe()
548 return PTR_ERR(priv->base); in usbhs_probe()
551 priv->edev = extcon_get_edev_by_phandle(&pdev->dev, 0); in usbhs_probe()
552 if (IS_ERR(priv->edev)) in usbhs_probe()
553 return PTR_ERR(priv->edev); in usbhs_probe()
560 memcpy(&priv->dparam, in usbhs_probe()
564 switch (priv->dparam.type) { in usbhs_probe()
566 priv->pfunc = usbhs_rcar2_ops; in usbhs_probe()
567 if (!priv->dparam.pipe_type) { in usbhs_probe()
568 priv->dparam.pipe_type = usbhsc_new_pipe_type; in usbhs_probe()
569 priv->dparam.pipe_size = in usbhs_probe()
578 memcpy(&priv->pfunc, in usbhs_probe()
589 if (!priv->dparam.pipe_type) { in usbhs_probe()
590 priv->dparam.pipe_type = usbhsc_default_pipe_type; in usbhs_probe()
591 priv->dparam.pipe_size = ARRAY_SIZE(usbhsc_default_pipe_type); in usbhs_probe()
593 if (!priv->dparam.pio_dma_border) in usbhs_probe()
594 priv->dparam.pio_dma_border = 64; /* 64byte */ in usbhs_probe()
598 if (priv->pfunc.get_vbus) in usbhs_probe()
599 usbhsc_flags_set(priv, USBHSF_RUNTIME_PWCTRL); in usbhs_probe()
604 priv->irq = irq_res->start; in usbhs_probe()
606 priv->irqflags = IRQF_SHARED; in usbhs_probe()
607 priv->pdev = pdev; in usbhs_probe()
608 INIT_DELAYED_WORK(&priv->notify_hotplug_work, usbhsc_notify_hotplug); in usbhs_probe()
609 spin_lock_init(usbhs_priv_to_lock(priv)); in usbhs_probe()
612 ret = usbhs_pipe_probe(priv); in usbhs_probe()
616 ret = usbhs_fifo_probe(priv); in usbhs_probe()
620 ret = usbhs_mod_probe(priv); in usbhs_probe()
625 platform_set_drvdata(pdev, priv); in usbhs_probe()
631 usbhs_sys_clock_ctrl(priv, 0); in usbhs_probe()
634 if (priv->dparam.enable_gpio) { in usbhs_probe()
635 gpio_request_one(priv->dparam.enable_gpio, GPIOF_IN, NULL); in usbhs_probe()
636 ret = !gpio_get_value(priv->dparam.enable_gpio); in usbhs_probe()
637 gpio_free(priv->dparam.enable_gpio); in usbhs_probe()
641 priv->dparam.enable_gpio); in usbhs_probe()
654 ret = usbhs_platform_call(priv, hardware_init, pdev); in usbhs_probe()
661 usbhs_platform_call(priv, phy_reset, pdev); in usbhs_probe()
665 if (!usbhsc_flags_has(priv, USBHSF_RUNTIME_PWCTRL)) { in usbhs_probe()
666 usbhsc_power_ctrl(priv, 1); in usbhs_probe()
667 usbhs_mod_autonomy_mode(priv); in usbhs_probe()
680 usbhs_mod_remove(priv); in usbhs_probe()
682 usbhs_fifo_remove(priv); in usbhs_probe()
684 usbhs_pipe_remove(priv); in usbhs_probe()
693 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev); in usbhs_remove() local
702 if (!usbhsc_flags_has(priv, USBHSF_RUNTIME_PWCTRL)) in usbhs_remove()
703 usbhsc_power_ctrl(priv, 0); in usbhs_remove()
707 usbhs_platform_call(priv, hardware_exit, pdev); in usbhs_remove()
708 usbhs_mod_remove(priv); in usbhs_remove()
709 usbhs_fifo_remove(priv); in usbhs_remove()
710 usbhs_pipe_remove(priv); in usbhs_remove()
717 struct usbhs_priv *priv = dev_get_drvdata(dev); in usbhsc_suspend() local
718 struct usbhs_mod *mod = usbhs_mod_get_current(priv); in usbhsc_suspend()
721 usbhs_mod_call(priv, stop, priv); in usbhsc_suspend()
722 usbhs_mod_change(priv, -1); in usbhsc_suspend()
725 if (mod || !usbhsc_flags_has(priv, USBHSF_RUNTIME_PWCTRL)) in usbhsc_suspend()
726 usbhsc_power_ctrl(priv, 0); in usbhsc_suspend()
733 struct usbhs_priv *priv = dev_get_drvdata(dev); in usbhsc_resume() local
734 struct platform_device *pdev = usbhs_priv_to_pdev(priv); in usbhsc_resume()
736 if (!usbhsc_flags_has(priv, USBHSF_RUNTIME_PWCTRL)) in usbhsc_resume()
737 usbhsc_power_ctrl(priv, 1); in usbhsc_resume()
739 usbhs_platform_call(priv, phy_reset, pdev); in usbhsc_resume()