Lines Matching full:ch

107 	struct rcar_gen3_chan *ch;  member
151 struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan, in rcar_gen3_phy_usb2_work() local
154 if (ch->extcon_host) { in rcar_gen3_phy_usb2_work()
155 extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, true); in rcar_gen3_phy_usb2_work()
156 extcon_set_state_sync(ch->extcon, EXTCON_USB, false); in rcar_gen3_phy_usb2_work()
158 extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, false); in rcar_gen3_phy_usb2_work()
159 extcon_set_state_sync(ch->extcon, EXTCON_USB, true); in rcar_gen3_phy_usb2_work()
163 static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host) in rcar_gen3_set_host_mode() argument
165 void __iomem *usb2_base = ch->base; in rcar_gen3_set_host_mode()
168 dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, host); in rcar_gen3_set_host_mode()
176 static void rcar_gen3_set_linectrl(struct rcar_gen3_chan *ch, int dp, int dm) in rcar_gen3_set_linectrl() argument
178 void __iomem *usb2_base = ch->base; in rcar_gen3_set_linectrl()
181 dev_vdbg(ch->dev, "%s: %08x, %d, %d\n", __func__, val, dp, dm); in rcar_gen3_set_linectrl()
190 static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus) in rcar_gen3_enable_vbus_ctrl() argument
192 void __iomem *usb2_base = ch->base; in rcar_gen3_enable_vbus_ctrl()
197 dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, vbus); in rcar_gen3_enable_vbus_ctrl()
198 if (ch->soc_no_adp_ctrl) { in rcar_gen3_enable_vbus_ctrl()
199 if (ch->vbus) in rcar_gen3_enable_vbus_ctrl()
200 regulator_hardware_enable(ch->vbus, vbus); in rcar_gen3_enable_vbus_ctrl()
214 static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable) in rcar_gen3_control_otg_irq() argument
216 void __iomem *usb2_base = ch->base; in rcar_gen3_control_otg_irq()
219 if (ch->uses_otg_pins && enable) in rcar_gen3_control_otg_irq()
220 val |= ch->obint_enable_bits; in rcar_gen3_control_otg_irq()
222 val &= ~ch->obint_enable_bits; in rcar_gen3_control_otg_irq()
226 static void rcar_gen3_init_for_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_host() argument
228 rcar_gen3_set_linectrl(ch, 1, 1); in rcar_gen3_init_for_host()
229 rcar_gen3_set_host_mode(ch, 1); in rcar_gen3_init_for_host()
230 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_for_host()
232 ch->extcon_host = true; in rcar_gen3_init_for_host()
233 schedule_work(&ch->work); in rcar_gen3_init_for_host()
236 static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_peri() argument
238 rcar_gen3_set_linectrl(ch, 0, 1); in rcar_gen3_init_for_peri()
239 rcar_gen3_set_host_mode(ch, 0); in rcar_gen3_init_for_peri()
240 rcar_gen3_enable_vbus_ctrl(ch, 0); in rcar_gen3_init_for_peri()
242 ch->extcon_host = false; in rcar_gen3_init_for_peri()
243 schedule_work(&ch->work); in rcar_gen3_init_for_peri()
246 static void rcar_gen3_init_for_b_host(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_b_host() argument
248 void __iomem *usb2_base = ch->base; in rcar_gen3_init_for_b_host()
254 rcar_gen3_set_linectrl(ch, 1, 1); in rcar_gen3_init_for_b_host()
255 rcar_gen3_set_host_mode(ch, 1); in rcar_gen3_init_for_b_host()
256 rcar_gen3_enable_vbus_ctrl(ch, 0); in rcar_gen3_init_for_b_host()
262 static void rcar_gen3_init_for_a_peri(struct rcar_gen3_chan *ch) in rcar_gen3_init_for_a_peri() argument
264 rcar_gen3_set_linectrl(ch, 0, 1); in rcar_gen3_init_for_a_peri()
265 rcar_gen3_set_host_mode(ch, 0); in rcar_gen3_init_for_a_peri()
266 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_for_a_peri()
269 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
271 rcar_gen3_control_otg_irq(ch, 0); in rcar_gen3_init_from_a_peri_to_a_host()
273 rcar_gen3_enable_vbus_ctrl(ch, 1); in rcar_gen3_init_from_a_peri_to_a_host()
274 rcar_gen3_init_for_host(ch); in rcar_gen3_init_from_a_peri_to_a_host()
276 rcar_gen3_control_otg_irq(ch, 1); in rcar_gen3_init_from_a_peri_to_a_host()
279 static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) in rcar_gen3_check_id() argument
281 if (!ch->uses_otg_pins) in rcar_gen3_check_id()
282 return (ch->dr_mode == USB_DR_MODE_HOST) ? false : true; in rcar_gen3_check_id()
284 if (ch->soc_no_adp_ctrl) in rcar_gen3_check_id()
285 return !!(readl(ch->base + USB2_LINECTRL1) & USB2_LINECTRL1_USB2_IDMON); in rcar_gen3_check_id()
287 return !!(readl(ch->base + USB2_ADPCTRL) & USB2_ADPCTRL_IDDIG); in rcar_gen3_check_id()
290 static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch) in rcar_gen3_device_recognition() argument
292 if (!rcar_gen3_check_id(ch)) in rcar_gen3_device_recognition()
293 rcar_gen3_init_for_host(ch); in rcar_gen3_device_recognition()
295 rcar_gen3_init_for_peri(ch); in rcar_gen3_device_recognition()
298 static bool rcar_gen3_is_host(struct rcar_gen3_chan *ch) in rcar_gen3_is_host() argument
300 return !(readl(ch->base + USB2_COMMCTRL) & USB2_COMMCTRL_OTG_PERI); in rcar_gen3_is_host()
303 static enum phy_mode rcar_gen3_get_phy_mode(struct rcar_gen3_chan *ch) in rcar_gen3_get_phy_mode() argument
305 if (rcar_gen3_is_host(ch)) in rcar_gen3_get_phy_mode()
311 static bool rcar_gen3_is_any_rphy_initialized(struct rcar_gen3_chan *ch) in rcar_gen3_is_any_rphy_initialized() argument
316 if (ch->rphys[i].initialized) in rcar_gen3_is_any_rphy_initialized()
323 static bool rcar_gen3_needs_init_otg(struct rcar_gen3_chan *ch) in rcar_gen3_needs_init_otg() argument
328 if (ch->rphys[i].otg_initialized) in rcar_gen3_needs_init_otg()
335 static bool rcar_gen3_are_all_rphys_power_off(struct rcar_gen3_chan *ch) in rcar_gen3_are_all_rphys_power_off() argument
340 if (ch->rphys[i].powered) in rcar_gen3_are_all_rphys_power_off()
350 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in role_store() local
354 if (!ch->is_otg_channel || !rcar_gen3_is_any_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_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()
411 if (!ch->soc_no_adp_ctrl) { in rcar_gen3_init_otg()
421 writel(ch->obint_enable_bits, usb2_base + USB2_OBINTEN); in rcar_gen3_init_otg()
423 rcar_gen3_device_recognition(ch); in rcar_gen3_init_otg()
428 struct rcar_gen3_chan *ch = _ch; in rcar_gen3_phy_usb2_irq() local
429 void __iomem *usb2_base = ch->base; in rcar_gen3_phy_usb2_irq()
433 if (status & ch->obint_enable_bits) { in rcar_gen3_phy_usb2_irq()
434 dev_vdbg(ch->dev, "%s: %08x\n", __func__, status); in rcar_gen3_phy_usb2_irq()
435 writel(ch->obint_enable_bits, usb2_base + USB2_OBINTSTA); in rcar_gen3_phy_usb2_irq()
436 rcar_gen3_device_recognition(ch); in rcar_gen3_phy_usb2_irq()
446 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_init()
483 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_exit()
507 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_power_on()
539 struct rcar_gen3_chan *channel = rphy->ch; in rcar_gen3_phy_usb2_power_off()
634 struct rcar_gen3_chan *ch = dev_get_drvdata(dev); in rcar_gen3_phy_usb2_xlate() local
637 return ch->rphys[PHY_INDEX_BOTH_HC].phy; in rcar_gen3_phy_usb2_xlate()
644 return ch->rphys[args->args[0]].phy; in rcar_gen3_phy_usb2_xlate()
775 channel->rphys[i].ch = channel; in rcar_gen3_phy_usb2_probe()