Lines Matching full:ch
101 struct rcar_gen3_chan *ch; member
143 struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan, in rcar_gen3_phy_usb2_work() local
146 if (ch->extcon_host) { in rcar_gen3_phy_usb2_work()
147 extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, true); in rcar_gen3_phy_usb2_work()
148 extcon_set_state_sync(ch->extcon, EXTCON_USB, false); in rcar_gen3_phy_usb2_work()
150 extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, false); in rcar_gen3_phy_usb2_work()
151 extcon_set_state_sync(ch->extcon, EXTCON_USB, true); in rcar_gen3_phy_usb2_work()
155 static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host) in rcar_gen3_set_host_mode() argument
157 void __iomem *usb2_base = ch->base; in rcar_gen3_set_host_mode()
160 dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, host); in rcar_gen3_set_host_mode()
168 static void rcar_gen3_set_linectrl(struct rcar_gen3_chan *ch, int dp, int dm) in rcar_gen3_set_linectrl() argument
170 void __iomem *usb2_base = ch->base; in rcar_gen3_set_linectrl()
173 dev_vdbg(ch->dev, "%s: %08x, %d, %d\n", __func__, val, dp, dm); in rcar_gen3_set_linectrl()
182 static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus) in rcar_gen3_enable_vbus_ctrl() argument
184 void __iomem *usb2_base = ch->base; in rcar_gen3_enable_vbus_ctrl()
189 dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, vbus); in rcar_gen3_enable_vbus_ctrl()
190 if (ch->soc_no_adp_ctrl) { in rcar_gen3_enable_vbus_ctrl()
203 static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable) in rcar_gen3_control_otg_irq() argument
205 void __iomem *usb2_base = ch->base; in rcar_gen3_control_otg_irq()
208 if (ch->uses_otg_pins && enable) in rcar_gen3_control_otg_irq()
209 val |= ch->obint_enable_bits; in rcar_gen3_control_otg_irq()
211 val &= ~ch->obint_enable_bits; in rcar_gen3_control_otg_irq()
215 static void rcar_gen3_init_for_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_host() argument
217 rcar_gen3_set_linectrl(ch, 1, 1); in rcar_gen3_init_for_host()
218 rcar_gen3_set_host_mode(ch, 1); in rcar_gen3_init_for_host()
219 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_for_host()
221 ch->extcon_host = true; in rcar_gen3_init_for_host()
222 schedule_work(&ch->work); in rcar_gen3_init_for_host()
225 static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_peri() argument
227 rcar_gen3_set_linectrl(ch, 0, 1); in rcar_gen3_init_for_peri()
228 rcar_gen3_set_host_mode(ch, 0); in rcar_gen3_init_for_peri()
229 rcar_gen3_enable_vbus_ctrl(ch, 0); in rcar_gen3_init_for_peri()
231 ch->extcon_host = false; in rcar_gen3_init_for_peri()
232 schedule_work(&ch->work); in rcar_gen3_init_for_peri()
235 static void rcar_gen3_init_for_b_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_b_host() argument
237 void __iomem *usb2_base = ch->base; in rcar_gen3_init_for_b_host()
243 rcar_gen3_set_linectrl(ch, 1, 1); in rcar_gen3_init_for_b_host()
244 rcar_gen3_set_host_mode(ch, 1); in rcar_gen3_init_for_b_host()
245 rcar_gen3_enable_vbus_ctrl(ch, 0); in rcar_gen3_init_for_b_host()
251 static void rcar_gen3_init_for_a_peri(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_a_peri() argument
253 rcar_gen3_set_linectrl(ch, 0, 1); in rcar_gen3_init_for_a_peri()
254 rcar_gen3_set_host_mode(ch, 0); in rcar_gen3_init_for_a_peri()
255 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_for_a_peri()
258 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
260 rcar_gen3_control_otg_irq(ch, 0); in rcar_gen3_init_from_a_peri_to_a_host()
262 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_from_a_peri_to_a_host()
263 rcar_gen3_init_for_host(ch); in rcar_gen3_init_from_a_peri_to_a_host()
265 rcar_gen3_control_otg_irq(ch, 1); in rcar_gen3_init_from_a_peri_to_a_host()
268 static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) in rcar_gen3_check_id() argument
270 if (!ch->uses_otg_pins) in rcar_gen3_check_id()
271 return (ch->dr_mode == USB_DR_MODE_HOST) ? false : true; in rcar_gen3_check_id()
273 if (ch->soc_no_adp_ctrl) in rcar_gen3_check_id()
274 return !!(readl(ch->base + USB2_LINECTRL1) & USB2_LINECTRL1_USB2_IDMON); in rcar_gen3_check_id()
276 return !!(readl(ch->base + USB2_ADPCTRL) & USB2_ADPCTRL_IDDIG); in rcar_gen3_check_id()
279 static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch) in rcar_gen3_device_recognition() argument
281 if (!rcar_gen3_check_id(ch)) in rcar_gen3_device_recognition()
282 rcar_gen3_init_for_host(ch); in rcar_gen3_device_recognition()
284 rcar_gen3_init_for_peri(ch); in rcar_gen3_device_recognition()
287 static bool rcar_gen3_is_host(struct rcar_gen3_chan *ch) in rcar_gen3_is_host() argument
289 return !(readl(ch->base + USB2_COMMCTRL) & USB2_COMMCTRL_OTG_PERI); in rcar_gen3_is_host()
292 static enum phy_mode rcar_gen3_get_phy_mode(struct rcar_gen3_chan *ch) in rcar_gen3_get_phy_mode() argument
294 if (rcar_gen3_is_host(ch)) in rcar_gen3_get_phy_mode()
300 static bool rcar_gen3_is_any_rphy_initialized(struct rcar_gen3_chan *ch) in rcar_gen3_is_any_rphy_initialized() argument
305 if (ch->rphys[i].initialized) in rcar_gen3_is_any_rphy_initialized()
312 static bool rcar_gen3_needs_init_otg(struct rcar_gen3_chan *ch) in rcar_gen3_needs_init_otg() argument
317 if (ch->rphys[i].otg_initialized) in rcar_gen3_needs_init_otg()
324 static bool rcar_gen3_are_all_rphys_power_off(struct rcar_gen3_chan *ch) in rcar_gen3_are_all_rphys_power_off() argument
329 if (ch->rphys[i].powered) in rcar_gen3_are_all_rphys_power_off()
339 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in role_store() local
343 if (!ch->is_otg_channel || !rcar_gen3_is_any_rphy_initialized(ch)) in role_store()
354 is_b_device = rcar_gen3_check_id(ch); in role_store()
355 cur_mode = rcar_gen3_get_phy_mode(ch); in role_store()
363 rcar_gen3_init_from_a_peri_to_a_host(ch); in role_store()
365 rcar_gen3_init_for_b_host(ch); in role_store()
368 rcar_gen3_init_for_a_peri(ch); in role_store()
370 rcar_gen3_init_for_peri(ch); in role_store()
379 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in role_show() local
381 if (!ch->is_otg_channel || !rcar_gen3_is_any_rphy_initialized(ch)) in role_show()
384 return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" : in role_show()
389 static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch) in rcar_gen3_init_otg() argument
391 void __iomem *usb2_base = ch->base; in rcar_gen3_init_otg()
400 if (!ch->soc_no_adp_ctrl) { in rcar_gen3_init_otg()
410 writel(ch->obint_enable_bits, usb2_base + USB2_OBINTEN); in rcar_gen3_init_otg()
412 rcar_gen3_device_recognition(ch); in rcar_gen3_init_otg()
417 struct rcar_gen3_chan *ch = _ch; in rcar_gen3_phy_usb2_irq() local
418 void __iomem *usb2_base = ch->base; in rcar_gen3_phy_usb2_irq()
422 if (status & ch->obint_enable_bits) { in rcar_gen3_phy_usb2_irq()
423 dev_vdbg(ch->dev, "%s: %08x\n", __func__, status); in rcar_gen3_phy_usb2_irq()
424 writel(ch->obint_enable_bits, usb2_base + USB2_OBINTSTA); in rcar_gen3_phy_usb2_irq()
425 rcar_gen3_device_recognition(ch); in rcar_gen3_phy_usb2_irq()
435 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_init()
472 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_exit()
496 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_power_on()
528 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_power_off()
613 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in rcar_gen3_phy_usb2_xlate() local
616 return ch->rphys[PHY_INDEX_BOTH_HC].phy; in rcar_gen3_phy_usb2_xlate()
623 return ch->rphys[args->args[0]].phy; in rcar_gen3_phy_usb2_xlate()
716 channel->rphys[i].ch = channel; in rcar_gen3_phy_usb2_probe()