Lines Matching full:ch
108 struct rcar_gen3_chan *ch; member
150 struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan, in rcar_gen3_phy_usb2_work() local
153 if (ch->extcon_host) { in rcar_gen3_phy_usb2_work()
154 extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, true); in rcar_gen3_phy_usb2_work()
155 extcon_set_state_sync(ch->extcon, EXTCON_USB, false); in rcar_gen3_phy_usb2_work()
157 extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, false); in rcar_gen3_phy_usb2_work()
158 extcon_set_state_sync(ch->extcon, EXTCON_USB, true); in rcar_gen3_phy_usb2_work()
162 static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host) in rcar_gen3_set_host_mode() argument
164 void __iomem *usb2_base = ch->base; in rcar_gen3_set_host_mode()
167 dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, host); in rcar_gen3_set_host_mode()
175 static void rcar_gen3_set_linectrl(struct rcar_gen3_chan *ch, int dp, int dm) in rcar_gen3_set_linectrl() argument
177 void __iomem *usb2_base = ch->base; in rcar_gen3_set_linectrl()
180 dev_vdbg(ch->dev, "%s: %08x, %d, %d\n", __func__, val, dp, dm); in rcar_gen3_set_linectrl()
189 static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus) in rcar_gen3_enable_vbus_ctrl() argument
191 void __iomem *usb2_base = ch->base; in rcar_gen3_enable_vbus_ctrl()
196 dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, vbus); in rcar_gen3_enable_vbus_ctrl()
197 if (ch->soc_no_adp_ctrl) { in rcar_gen3_enable_vbus_ctrl()
198 if (ch->vbus) in rcar_gen3_enable_vbus_ctrl()
199 regulator_hardware_enable(ch->vbus, vbus); in rcar_gen3_enable_vbus_ctrl()
213 static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable) in rcar_gen3_control_otg_irq() argument
215 void __iomem *usb2_base = ch->base; in rcar_gen3_control_otg_irq()
218 if (ch->uses_otg_pins && enable) in rcar_gen3_control_otg_irq()
219 val |= ch->obint_enable_bits; in rcar_gen3_control_otg_irq()
221 val &= ~ch->obint_enable_bits; in rcar_gen3_control_otg_irq()
225 static void rcar_gen3_init_for_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_host() argument
227 rcar_gen3_set_linectrl(ch, 1, 1); in rcar_gen3_init_for_host()
228 rcar_gen3_set_host_mode(ch, 1); in rcar_gen3_init_for_host()
229 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_for_host()
231 ch->extcon_host = true; in rcar_gen3_init_for_host()
232 schedule_work(&ch->work); in rcar_gen3_init_for_host()
235 static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_peri() argument
237 rcar_gen3_set_linectrl(ch, 0, 1); in rcar_gen3_init_for_peri()
238 rcar_gen3_set_host_mode(ch, 0); in rcar_gen3_init_for_peri()
239 rcar_gen3_enable_vbus_ctrl(ch, 0); in rcar_gen3_init_for_peri()
241 ch->extcon_host = false; in rcar_gen3_init_for_peri()
242 schedule_work(&ch->work); in rcar_gen3_init_for_peri()
245 static void rcar_gen3_init_for_b_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_b_host() argument
247 void __iomem *usb2_base = ch->base; in rcar_gen3_init_for_b_host()
253 rcar_gen3_set_linectrl(ch, 1, 1); in rcar_gen3_init_for_b_host()
254 rcar_gen3_set_host_mode(ch, 1); in rcar_gen3_init_for_b_host()
255 rcar_gen3_enable_vbus_ctrl(ch, 0); in rcar_gen3_init_for_b_host()
261 static void rcar_gen3_init_for_a_peri(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_a_peri() argument
263 rcar_gen3_set_linectrl(ch, 0, 1); in rcar_gen3_init_for_a_peri()
264 rcar_gen3_set_host_mode(ch, 0); in rcar_gen3_init_for_a_peri()
265 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_for_a_peri()
268 static void rcar_gen3_init_from_a_peri_to_a_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_from_a_peri_to_a_host() argument
270 rcar_gen3_control_otg_irq(ch, 0); in rcar_gen3_init_from_a_peri_to_a_host()
272 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_from_a_peri_to_a_host()
273 rcar_gen3_init_for_host(ch); in rcar_gen3_init_from_a_peri_to_a_host()
275 rcar_gen3_control_otg_irq(ch, 1); in rcar_gen3_init_from_a_peri_to_a_host()
278 static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) in rcar_gen3_check_id() argument
280 if (!ch->uses_otg_pins) in rcar_gen3_check_id()
281 return (ch->dr_mode == USB_DR_MODE_HOST) ? false : true; in rcar_gen3_check_id()
283 if (ch->soc_no_adp_ctrl) in rcar_gen3_check_id()
284 return !!(readl(ch->base + USB2_LINECTRL1) & USB2_LINECTRL1_USB2_IDMON); in rcar_gen3_check_id()
286 return !!(readl(ch->base + USB2_ADPCTRL) & USB2_ADPCTRL_IDDIG); in rcar_gen3_check_id()
289 static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch) in rcar_gen3_device_recognition() argument
291 if (!rcar_gen3_check_id(ch)) in rcar_gen3_device_recognition()
292 rcar_gen3_init_for_host(ch); in rcar_gen3_device_recognition()
294 rcar_gen3_init_for_peri(ch); in rcar_gen3_device_recognition()
297 static bool rcar_gen3_is_host(struct rcar_gen3_chan *ch) in rcar_gen3_is_host() argument
299 return !(readl(ch->base + USB2_COMMCTRL) & USB2_COMMCTRL_OTG_PERI); in rcar_gen3_is_host()
302 static enum phy_mode rcar_gen3_get_phy_mode(struct rcar_gen3_chan *ch) in rcar_gen3_get_phy_mode() argument
304 if (rcar_gen3_is_host(ch)) in rcar_gen3_get_phy_mode()
310 static bool rcar_gen3_is_any_rphy_initialized(struct rcar_gen3_chan *ch) in rcar_gen3_is_any_rphy_initialized() argument
315 if (ch->rphys[i].initialized) in rcar_gen3_is_any_rphy_initialized()
322 static bool rcar_gen3_is_any_otg_rphy_initialized(struct rcar_gen3_chan *ch) in rcar_gen3_is_any_otg_rphy_initialized() argument
326 if (ch->rphys[i].initialized) in rcar_gen3_is_any_otg_rphy_initialized()
333 static bool rcar_gen3_are_all_rphys_power_off(struct rcar_gen3_chan *ch) in rcar_gen3_are_all_rphys_power_off() argument
338 if (ch->rphys[i].powered) in rcar_gen3_are_all_rphys_power_off()
348 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in role_store() local
352 guard(spinlock_irqsave)(&ch->lock); in role_store()
354 if (!ch->is_otg_channel || !rcar_gen3_is_any_otg_rphy_initialized(ch)) in role_store()
365 is_b_device = rcar_gen3_check_id(ch); in role_store()
366 cur_mode = rcar_gen3_get_phy_mode(ch); in role_store()
374 rcar_gen3_init_from_a_peri_to_a_host(ch); in role_store()
376 rcar_gen3_init_for_b_host(ch); in role_store()
379 rcar_gen3_init_for_a_peri(ch); in role_store()
381 rcar_gen3_init_for_peri(ch); in role_store()
390 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in role_show() local
392 if (!ch->is_otg_channel || !rcar_gen3_is_any_otg_rphy_initialized(ch)) in role_show()
395 return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" : in role_show()
400 static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch) in rcar_gen3_init_otg() argument
402 void __iomem *usb2_base = ch->base; in rcar_gen3_init_otg()
405 if (!ch->is_otg_channel || rcar_gen3_is_any_otg_rphy_initialized(ch)) in rcar_gen3_init_otg()
414 if (!ch->soc_no_adp_ctrl) { in rcar_gen3_init_otg()
424 writel(ch->obint_enable_bits, usb2_base + USB2_OBINTEN); in rcar_gen3_init_otg()
426 rcar_gen3_device_recognition(ch); in rcar_gen3_init_otg()
431 struct rcar_gen3_chan *ch = _ch; in rcar_gen3_phy_usb2_irq() local
432 void __iomem *usb2_base = ch->base; in rcar_gen3_phy_usb2_irq()
433 struct device *dev = ch->dev; in rcar_gen3_phy_usb2_irq()
442 scoped_guard(spinlock, &ch->lock) { in rcar_gen3_phy_usb2_irq()
444 if (status & ch->obint_enable_bits) { in rcar_gen3_phy_usb2_irq()
446 writel(ch->obint_enable_bits, usb2_base + USB2_OBINTSTA); in rcar_gen3_phy_usb2_irq()
447 rcar_gen3_device_recognition(ch); in rcar_gen3_phy_usb2_irq()
460 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_init()
488 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_exit()
508 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_power_on()
540 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_power_off()
637 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in rcar_gen3_phy_usb2_xlate() local
640 return ch->rphys[PHY_INDEX_BOTH_HC].phy; in rcar_gen3_phy_usb2_xlate()
647 return ch->rphys[args->args[0]].phy; in rcar_gen3_phy_usb2_xlate()
776 channel->rphys[i].ch = channel; in rcar_gen3_phy_usb2_probe()