xref: /linux/drivers/phy/renesas/phy-rcar-gen3-usb2.c (revision 60ee24f055f87c74d3fccdedcb761df9253fd5c0)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Renesas R-Car Gen3 for USB2.0 PHY driver
4  *
5  * Copyright (C) 2015-2017 Renesas Electronics Corporation
6  *
7  * This is based on the phy-rcar-gen2 driver:
8  * Copyright (C) 2014 Renesas Solutions Corp.
9  * Copyright (C) 2014 Cogent Embedded, Inc.
10  */
11 
12 #include <linux/bitfield.h>
13 #include <linux/bits.h>
14 #include <linux/cleanup.h>
15 #include <linux/extcon-provider.h>
16 #include <linux/interrupt.h>
17 #include <linux/io.h>
18 #include <linux/module.h>
19 #include <linux/mutex.h>
20 #include <linux/mux/consumer.h>
21 #include <linux/of.h>
22 #include <linux/phy/phy.h>
23 #include <linux/platform_device.h>
24 #include <linux/pm_runtime.h>
25 #include <linux/regulator/consumer.h>
26 #include <linux/regulator/driver.h>
27 #include <linux/reset.h>
28 #include <linux/string.h>
29 #include <linux/usb/of.h>
30 #include <linux/wait.h>
31 #include <linux/workqueue.h>
32 
33 /******* USB2.0 Host registers (original offset is +0x200) *******/
34 #define USB2_INT_ENABLE		0x000
35 #define USB2_AHB_BUS_CTR	0x008
36 #define USB2_USBCTR		0x00c
37 #define USB2_REGEN_CG_CTRL	0x104	/* RZ/V2H(P) only */
38 #define USB2_SPD_RSM_TIMSET	0x10c
39 #define USB2_OC_TIMSET		0x110
40 #define USB2_UTMI_CTRL		0x118	/* RZ/V2H(P) only */
41 #define USB2_COMMCTRL		0x600
42 #define USB2_OBINTSTA		0x604
43 #define USB2_OBINTEN		0x608
44 #define USB2_VBCTRL		0x60c
45 #define USB2_LINECTRL1		0x610
46 #define USB2_ADPCTRL		0x630
47 
48 /* INT_ENABLE */
49 #define USB2_INT_ENABLE_UCOM_INTEN	BIT(3)
50 #define USB2_INT_ENABLE_USBH_INTB_EN	BIT(2)	/* For EHCI */
51 #define USB2_INT_ENABLE_USBH_INTA_EN	BIT(1)	/* For OHCI */
52 
53 /* AHB_BUS_CTR */
54 #define USB2_AHB_BUS_CTR_MBL_MASK	GENMASK(1, 0)
55 #define USB2_AHB_BUS_CTR_MBL_INCR4	2
56 
57 /* USBCTR */
58 #define USB2_USBCTR_DIRPD	BIT(2)
59 #define USB2_USBCTR_PLL_RST	BIT(1)
60 
61 /* REGEN_CG_CTRL*/
62 #define USB2_REGEN_CG_CTRL_UPHY_WEN	BIT(0)
63 
64 /* SPD_RSM_TIMSET */
65 #define USB2_SPD_RSM_TIMSET_INIT	0x014e029b
66 
67 /* OC_TIMSET */
68 #define USB2_OC_TIMSET_INIT		0x000209ab
69 
70 /* UTMI_CTRL */
71 #define USB2_UTMI_CTRL_INIT		0x8000018f
72 
73 /* COMMCTRL */
74 #define USB2_COMMCTRL_OTG_PERI		BIT(31)	/* 1 = Peripheral mode */
75 
76 /* OBINTSTA and OBINTEN */
77 #define USB2_OBINTSTA_CLEAR		GENMASK(31, 0)
78 #define USB2_OBINT_SESSVLDCHG		BIT(12)
79 #define USB2_OBINT_IDDIGCHG		BIT(11)
80 #define USB2_OBINT_VBSTAINT		BIT(3)
81 #define USB2_OBINT_IDCHG_EN		BIT(0) /*  RZ/G2L specific */
82 
83 /* VBCTRL */
84 #define USB2_VBCTRL_VBSTA_MASK		GENMASK(31, 28)
85 #define USB2_VBCTRL_VBSTA_DEFAULT	2
86 #define USB2_VBCTRL_VBLVL_MASK		GENMASK(23, 20)
87 #define USB2_VBCTRL_VBLVL(m)		FIELD_PREP_CONST(USB2_VBCTRL_VBLVL_MASK, (m))
88 #define USB2_VBCTRL_OCCLREN		BIT(16)
89 #define USB2_VBCTRL_DRVVBUSSEL		BIT(8)
90 #define USB2_VBCTRL_SIDDQREL		BIT(2)
91 #define USB2_VBCTRL_VBOUT		BIT(0)
92 
93 /* LINECTRL1 */
94 #define USB2_LINECTRL1_DPRPD_EN		BIT(19)
95 #define USB2_LINECTRL1_DP_RPD		BIT(18)
96 #define USB2_LINECTRL1_DMRPD_EN		BIT(17)
97 #define USB2_LINECTRL1_DM_RPD		BIT(16)
98 #define USB2_LINECTRL1_OPMODE_NODRV	BIT(6)
99 
100 /* ADPCTRL */
101 #define USB2_ADPCTRL_OTGSESSVLD		BIT(20)
102 #define USB2_ADPCTRL_IDDIG		BIT(19)
103 #define USB2_ADPCTRL_VBUSVALID		BIT(18)
104 #define USB2_ADPCTRL_IDPULLUP		BIT(5)	/* 1 = ID sampling is enabled */
105 #define USB2_ADPCTRL_DRVVBUS		BIT(4)
106 
107 /*  RZ/G2L specific */
108 #define USB2_LINECTRL1_USB2_IDMON	BIT(0)
109 
110 /*
111  * The OTG initialization is expected to finish in 20ms. Choose a large enough
112  * timeout to avoid waiters exit prematurely the waiting section under heavy
113  * CPU load.
114  */
115 #define USB2_OTG_INIT_TIMEOUT		msecs_to_jiffies(120)
116 
117 #define NUM_OF_PHYS			4
118 enum rcar_gen3_phy_index {
119 	PHY_INDEX_BOTH_HC,
120 	PHY_INDEX_OHCI,
121 	PHY_INDEX_EHCI,
122 	PHY_INDEX_HSUSB
123 };
124 
125 static const u32 rcar_gen3_int_enable[NUM_OF_PHYS] = {
126 	USB2_INT_ENABLE_USBH_INTB_EN | USB2_INT_ENABLE_USBH_INTA_EN,
127 	USB2_INT_ENABLE_USBH_INTA_EN,
128 	USB2_INT_ENABLE_USBH_INTB_EN,
129 	0
130 };
131 
132 struct rcar_gen3_phy {
133 	struct phy *phy;
134 	struct rcar_gen3_chan *ch;
135 	u32 int_enable_bits;
136 	bool initialized;
137 	bool powered;
138 };
139 
140 struct rcar_gen3_chan {
141 	void __iomem *base;
142 	struct device *dev;	/* platform_device's device */
143 	const struct rcar_gen3_phy_drv_data *phy_data;
144 	struct extcon_dev *extcon;
145 	struct reset_control *rstc;
146 	struct rcar_gen3_phy rphys[NUM_OF_PHYS];
147 	struct regulator *vbus;
148 	struct work_struct work;
149 	wait_queue_head_t otg_init_done;
150 	spinlock_t lock;	/* protects access to hardware and driver data structure. */
151 	enum usb_dr_mode dr_mode;
152 	bool extcon_host;
153 	bool is_otg_channel;
154 	bool uses_otg_pins;
155 	bool otg_internal_reg;
156 	/*
157 	 * The OTG can be initialized only once and needs to release the spinlock
158 	 * and wait for 20 ms due to hardware constraints. If a thread executes
159 	 * PHY configuration code while the OTG PHY is waiting for the 20 ms, the
160 	 * thread will have to wait for the OTG PHY initialization to complete.
161 	 */
162 	bool otg_initializing;
163 };
164 
165 struct rcar_gen3_phy_drv_data {
166 	const struct phy_ops *phy_usb2_ops;
167 	bool no_adp_ctrl;
168 	bool init_bus;
169 	bool utmi_ctrl;
170 	bool vblvl_ctrl;
171 	u32 obint_enable_bits;
172 };
173 
174 /*
175  * Combination about is_otg_channel and uses_otg_pins:
176  *
177  * Parameters				|| Behaviors
178  * is_otg_channel	| uses_otg_pins	|| irqs		| role sysfs
179  * ---------------------+---------------++--------------+------------
180  * true			| true		|| enabled	| enabled
181  * true                 | false		|| disabled	| enabled
182  * false                | any		|| disabled	| disabled
183  */
184 
rcar_gen3_phy_usb2_work(struct work_struct * work)185 static void rcar_gen3_phy_usb2_work(struct work_struct *work)
186 {
187 	struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan,
188 						 work);
189 
190 	if (ch->extcon_host) {
191 		extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, true);
192 		extcon_set_state_sync(ch->extcon, EXTCON_USB, false);
193 	} else {
194 		extcon_set_state_sync(ch->extcon, EXTCON_USB_HOST, false);
195 		extcon_set_state_sync(ch->extcon, EXTCON_USB, true);
196 	}
197 }
198 
rcar_gen3_set_host_mode(struct rcar_gen3_chan * ch,int host)199 static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host)
200 {
201 	void __iomem *usb2_base = ch->base;
202 	u32 val = readl(usb2_base + USB2_COMMCTRL);
203 
204 	dev_vdbg(ch->dev, "%s: %08x, %d\n", __func__, val, host);
205 	if (host)
206 		val &= ~USB2_COMMCTRL_OTG_PERI;
207 	else
208 		val |= USB2_COMMCTRL_OTG_PERI;
209 	writel(val, usb2_base + USB2_COMMCTRL);
210 }
211 
rcar_gen3_set_linectrl(struct rcar_gen3_chan * ch,int dp,int dm)212 static void rcar_gen3_set_linectrl(struct rcar_gen3_chan *ch, int dp, int dm)
213 {
214 	void __iomem *usb2_base = ch->base;
215 	u32 val = readl(usb2_base + USB2_LINECTRL1);
216 
217 	dev_vdbg(ch->dev, "%s: %08x, %d, %d\n", __func__, val, dp, dm);
218 	val &= ~(USB2_LINECTRL1_DP_RPD | USB2_LINECTRL1_DM_RPD);
219 	if (dp)
220 		val |= USB2_LINECTRL1_DP_RPD;
221 	if (dm)
222 		val |= USB2_LINECTRL1_DM_RPD;
223 	writel(val, usb2_base + USB2_LINECTRL1);
224 }
225 
rcar_gen3_phy_usb2_set_vbus(struct rcar_gen3_chan * ch,u32 vbus_ctrl_reg,u32 vbus_ctrl_val,bool enable)226 static void rcar_gen3_phy_usb2_set_vbus(struct rcar_gen3_chan *ch,
227 					u32 vbus_ctrl_reg,
228 					u32 vbus_ctrl_val,
229 					bool enable)
230 {
231 	void __iomem *usb2_base = ch->base;
232 	u32 val;
233 
234 	val = readl(usb2_base + vbus_ctrl_reg);
235 	if (enable)
236 		val |= vbus_ctrl_val;
237 	else
238 		val &= ~vbus_ctrl_val;
239 	writel(val, usb2_base + vbus_ctrl_reg);
240 
241 	dev_vdbg(ch->dev, "%s: reg=0x%08x, val=%08x, enable=%d\n",
242 		 __func__, vbus_ctrl_reg, val, enable);
243 }
244 
rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan * ch,int vbus)245 static void rcar_gen3_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus)
246 {
247 	if (ch->otg_internal_reg) {
248 		regulator_hardware_enable(ch->vbus, vbus);
249 		return;
250 	}
251 
252 	if (ch->phy_data->no_adp_ctrl || ch->phy_data->vblvl_ctrl) {
253 		if (ch->vbus)
254 			regulator_hardware_enable(ch->vbus, vbus);
255 
256 		rcar_gen3_phy_usb2_set_vbus(ch, USB2_VBCTRL,
257 					    USB2_VBCTRL_VBOUT, vbus);
258 		return;
259 	}
260 
261 	rcar_gen3_phy_usb2_set_vbus(ch, USB2_ADPCTRL,
262 				    USB2_ADPCTRL_DRVVBUS, vbus);
263 }
264 
rcar_gen3_control_otg_irq(struct rcar_gen3_chan * ch,int enable)265 static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable)
266 {
267 	void __iomem *usb2_base = ch->base;
268 	u32 val = readl(usb2_base + USB2_OBINTEN);
269 
270 	if (ch->uses_otg_pins && enable)
271 		val |= ch->phy_data->obint_enable_bits;
272 	else
273 		val &= ~ch->phy_data->obint_enable_bits;
274 	writel(val, usb2_base + USB2_OBINTEN);
275 }
276 
rcar_gen3_init_for_host(struct rcar_gen3_chan * ch)277 static void rcar_gen3_init_for_host(struct rcar_gen3_chan *ch)
278 {
279 	rcar_gen3_set_linectrl(ch, 1, 1);
280 	rcar_gen3_set_host_mode(ch, 1);
281 	rcar_gen3_enable_vbus_ctrl(ch, 1);
282 
283 	ch->extcon_host = true;
284 	schedule_work(&ch->work);
285 }
286 
rcar_gen3_init_for_peri(struct rcar_gen3_chan * ch)287 static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch)
288 {
289 	rcar_gen3_set_linectrl(ch, 0, 1);
290 	rcar_gen3_set_host_mode(ch, 0);
291 	rcar_gen3_enable_vbus_ctrl(ch, 0);
292 
293 	ch->extcon_host = false;
294 	schedule_work(&ch->work);
295 }
296 
rcar_gen3_init_for_b_host(struct rcar_gen3_chan * ch)297 static void rcar_gen3_init_for_b_host(struct rcar_gen3_chan *ch)
298 {
299 	void __iomem *usb2_base = ch->base;
300 	u32 val;
301 
302 	val = readl(usb2_base + USB2_LINECTRL1);
303 	writel(val | USB2_LINECTRL1_OPMODE_NODRV, usb2_base + USB2_LINECTRL1);
304 
305 	rcar_gen3_set_linectrl(ch, 1, 1);
306 	rcar_gen3_set_host_mode(ch, 1);
307 	rcar_gen3_enable_vbus_ctrl(ch, 0);
308 
309 	val = readl(usb2_base + USB2_LINECTRL1);
310 	writel(val & ~USB2_LINECTRL1_OPMODE_NODRV, usb2_base + USB2_LINECTRL1);
311 }
312 
rcar_gen3_init_for_a_peri(struct rcar_gen3_chan * ch)313 static void rcar_gen3_init_for_a_peri(struct rcar_gen3_chan *ch)
314 {
315 	rcar_gen3_set_linectrl(ch, 0, 1);
316 	rcar_gen3_set_host_mode(ch, 0);
317 	rcar_gen3_enable_vbus_ctrl(ch, 1);
318 }
319 
rcar_gen3_init_from_a_peri_to_a_host(struct rcar_gen3_chan * ch)320 static void rcar_gen3_init_from_a_peri_to_a_host(struct rcar_gen3_chan *ch)
321 {
322 	rcar_gen3_control_otg_irq(ch, 0);
323 
324 	rcar_gen3_enable_vbus_ctrl(ch, 1);
325 	rcar_gen3_init_for_host(ch);
326 
327 	rcar_gen3_control_otg_irq(ch, 1);
328 }
329 
rcar_gen3_check_id(struct rcar_gen3_chan * ch)330 static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch)
331 {
332 	if (ch->phy_data->vblvl_ctrl) {
333 		u32 val = readl(ch->base + USB2_ADPCTRL);
334 		bool vbus_valid = val & USB2_ADPCTRL_VBUSVALID;
335 		bool device = val & USB2_ADPCTRL_IDDIG;
336 
337 		return device == vbus_valid;
338 	}
339 
340 	if (!ch->uses_otg_pins)
341 		return ch->dr_mode != USB_DR_MODE_HOST;
342 
343 	if (ch->phy_data->no_adp_ctrl)
344 		return !!(readl(ch->base + USB2_LINECTRL1) & USB2_LINECTRL1_USB2_IDMON);
345 
346 	return !!(readl(ch->base + USB2_ADPCTRL) & USB2_ADPCTRL_IDDIG);
347 }
348 
rcar_gen3_device_recognition(struct rcar_gen3_chan * ch)349 static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch)
350 {
351 	if (!rcar_gen3_check_id(ch))
352 		rcar_gen3_init_for_host(ch);
353 	else
354 		rcar_gen3_init_for_peri(ch);
355 }
356 
rcar_gen3_is_host(struct rcar_gen3_chan * ch)357 static bool rcar_gen3_is_host(struct rcar_gen3_chan *ch)
358 {
359 	return !(readl(ch->base + USB2_COMMCTRL) & USB2_COMMCTRL_OTG_PERI);
360 }
361 
rcar_gen3_get_phy_mode(struct rcar_gen3_chan * ch)362 static enum phy_mode rcar_gen3_get_phy_mode(struct rcar_gen3_chan *ch)
363 {
364 	if (rcar_gen3_is_host(ch))
365 		return PHY_MODE_USB_HOST;
366 
367 	return PHY_MODE_USB_DEVICE;
368 }
369 
rcar_gen3_is_any_rphy_initialized(struct rcar_gen3_chan * ch)370 static bool rcar_gen3_is_any_rphy_initialized(struct rcar_gen3_chan *ch)
371 {
372 	int i;
373 
374 	for (i = 0; i < NUM_OF_PHYS; i++) {
375 		if (ch->rphys[i].initialized)
376 			return true;
377 	}
378 
379 	return false;
380 }
381 
rcar_gen3_is_any_otg_rphy_initialized(struct rcar_gen3_chan * ch)382 static bool rcar_gen3_is_any_otg_rphy_initialized(struct rcar_gen3_chan *ch)
383 {
384 	for (enum rcar_gen3_phy_index i = PHY_INDEX_BOTH_HC; i <= PHY_INDEX_EHCI;
385 	     i++) {
386 		if (ch->rphys[i].initialized)
387 			return true;
388 	}
389 
390 	return false;
391 }
392 
rcar_gen3_are_all_rphys_power_off(struct rcar_gen3_chan * ch)393 static bool rcar_gen3_are_all_rphys_power_off(struct rcar_gen3_chan *ch)
394 {
395 	int i;
396 
397 	for (i = 0; i < NUM_OF_PHYS; i++) {
398 		if (ch->rphys[i].powered)
399 			return false;
400 	}
401 
402 	return true;
403 }
404 
role_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)405 static ssize_t role_store(struct device *dev, struct device_attribute *attr,
406 			  const char *buf, size_t count)
407 {
408 	struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
409 	bool is_b_device;
410 	enum phy_mode cur_mode, new_mode;
411 	int retries = NUM_OF_PHYS;
412 	unsigned long flags;
413 	int ret = -EIO;
414 
415 	spin_lock_irqsave(&ch->lock, flags);
416 
417 	if (!ch->is_otg_channel)
418 		goto unlock;
419 
420 	while (retries-- && ch->otg_initializing) {
421 		spin_unlock_irqrestore(&ch->lock, flags);
422 
423 		ret = wait_event_timeout(ch->otg_init_done, !ch->otg_initializing,
424 					 USB2_OTG_INIT_TIMEOUT);
425 		ret = ret ? 0 : -ETIMEDOUT;
426 		if (ret && !retries)
427 			goto exit;
428 
429 		spin_lock_irqsave(&ch->lock, flags);
430 	}
431 
432 	/* If another thread started a new initialization just return -EBUSY. */
433 	if (ch->otg_initializing) {
434 		ret = -EBUSY;
435 		goto unlock;
436 	} else {
437 		ret = 0;
438 	}
439 
440 	if (!rcar_gen3_is_any_otg_rphy_initialized(ch)) {
441 		ret = -EIO;
442 		goto unlock;
443 	}
444 
445 	if (sysfs_streq(buf, "host")) {
446 		new_mode = PHY_MODE_USB_HOST;
447 	} else if (sysfs_streq(buf, "peripheral")) {
448 		new_mode = PHY_MODE_USB_DEVICE;
449 	} else {
450 		ret = -EINVAL;
451 		goto unlock;
452 	}
453 
454 	/* is_b_device: true is B-Device. false is A-Device. */
455 	is_b_device = rcar_gen3_check_id(ch);
456 	cur_mode = rcar_gen3_get_phy_mode(ch);
457 
458 	/* If current and new mode is the same, this returns the error */
459 	if (cur_mode == new_mode) {
460 		ret = -EINVAL;
461 		goto unlock;
462 	}
463 
464 	if (new_mode == PHY_MODE_USB_HOST) { /* And is_host must be false */
465 		if (!is_b_device)	/* A-Peripheral */
466 			rcar_gen3_init_from_a_peri_to_a_host(ch);
467 		else			/* B-Peripheral */
468 			rcar_gen3_init_for_b_host(ch);
469 	} else {			/* And is_host must be true */
470 		if (!is_b_device)	/* A-Host */
471 			rcar_gen3_init_for_a_peri(ch);
472 		else			/* B-Host */
473 			rcar_gen3_init_for_peri(ch);
474 	}
475 
476 unlock:
477 	spin_unlock_irqrestore(&ch->lock, flags);
478 exit:
479 	return ret ?: count;
480 }
481 
role_show(struct device * dev,struct device_attribute * attr,char * buf)482 static ssize_t role_show(struct device *dev, struct device_attribute *attr,
483 			 char *buf)
484 {
485 	struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
486 
487 	if (!ch->is_otg_channel || !rcar_gen3_is_any_otg_rphy_initialized(ch))
488 		return -EIO;
489 
490 	return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" :
491 							    "peripheral");
492 }
493 static DEVICE_ATTR_RW(role);
494 
rcar_gen3_init_otg_phase0(struct rcar_gen3_chan * ch)495 static void rcar_gen3_init_otg_phase0(struct rcar_gen3_chan *ch)
496 {
497 	void __iomem *usb2_base = ch->base;
498 	u32 val;
499 
500 	/* Should not use functions of read-modify-write a register */
501 	val = readl(usb2_base + USB2_LINECTRL1);
502 	val = (val & ~USB2_LINECTRL1_DP_RPD) | USB2_LINECTRL1_DPRPD_EN |
503 	      USB2_LINECTRL1_DMRPD_EN | USB2_LINECTRL1_DM_RPD;
504 	writel(val, usb2_base + USB2_LINECTRL1);
505 
506 	if (!ch->phy_data->no_adp_ctrl) {
507 		if (ch->phy_data->vblvl_ctrl) {
508 			val = readl(usb2_base + USB2_VBCTRL);
509 			val = (val & ~USB2_VBCTRL_VBLVL_MASK) | USB2_VBCTRL_VBLVL(2);
510 			writel(val, usb2_base + USB2_VBCTRL);
511 			val = readl(usb2_base + USB2_ADPCTRL);
512 			writel(val | USB2_ADPCTRL_IDPULLUP | USB2_ADPCTRL_DRVVBUS,
513 			       usb2_base + USB2_ADPCTRL);
514 		} else {
515 			val = readl(usb2_base + USB2_VBCTRL);
516 			val &= ~USB2_VBCTRL_OCCLREN;
517 			writel(val | USB2_VBCTRL_DRVVBUSSEL, usb2_base + USB2_VBCTRL);
518 			val = readl(usb2_base + USB2_ADPCTRL);
519 			writel(val | USB2_ADPCTRL_IDPULLUP, usb2_base + USB2_ADPCTRL);
520 		}
521 	}
522 }
523 
rcar_gen3_init_otg_phase1(struct rcar_gen3_chan * ch)524 static void rcar_gen3_init_otg_phase1(struct rcar_gen3_chan *ch)
525 {
526 	void __iomem *usb2_base = ch->base;
527 
528 	writel(0xffffffff, usb2_base + USB2_OBINTSTA);
529 	writel(ch->phy_data->obint_enable_bits, usb2_base + USB2_OBINTEN);
530 
531 	rcar_gen3_device_recognition(ch);
532 }
533 
rcar_gen3_configure_vblvl_ctrl(struct rcar_gen3_chan * ch)534 static void rcar_gen3_configure_vblvl_ctrl(struct rcar_gen3_chan *ch)
535 {
536 	void __iomem *usb2_base = ch->base;
537 	u32 val;
538 
539 	if (!ch->phy_data->vblvl_ctrl)
540 		return;
541 
542 	val = readl(usb2_base + USB2_VBCTRL);
543 	if ((val & USB2_VBCTRL_VBSTA_MASK) ==
544 	    FIELD_PREP_CONST(USB2_VBCTRL_VBSTA_MASK, USB2_VBCTRL_VBSTA_DEFAULT))
545 		val &= ~USB2_VBCTRL_VBLVL_MASK;
546 	else
547 		val |= USB2_VBCTRL_VBLVL(USB2_VBCTRL_VBSTA_DEFAULT);
548 	writel(val, usb2_base + USB2_VBCTRL);
549 }
550 
rcar_gen3_phy_usb2_irq(int irq,void * _ch)551 static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch)
552 {
553 	struct rcar_gen3_chan *ch = _ch;
554 	void __iomem *usb2_base = ch->base;
555 	struct device *dev = ch->dev;
556 	irqreturn_t ret = IRQ_NONE;
557 	unsigned long flags;
558 	u32 status;
559 
560 	pm_runtime_get_noresume(dev);
561 
562 	if (pm_runtime_suspended(dev))
563 		goto rpm_put;
564 
565 	spin_lock_irqsave(&ch->lock, flags);
566 
567 	status = readl(usb2_base + USB2_OBINTSTA);
568 	if (status & ch->phy_data->obint_enable_bits) {
569 		dev_vdbg(dev, "%s: %08x\n", __func__, status);
570 		if (ch->phy_data->vblvl_ctrl)
571 			writel(USB2_OBINTSTA_CLEAR, usb2_base + USB2_OBINTSTA);
572 		else
573 			writel(ch->phy_data->obint_enable_bits, usb2_base + USB2_OBINTSTA);
574 
575 		ret = IRQ_HANDLED;
576 
577 		/* This should not happen! */
578 		if (ch->otg_initializing)
579 			goto unlock;
580 
581 		rcar_gen3_device_recognition(ch);
582 		rcar_gen3_configure_vblvl_ctrl(ch);
583 	}
584 
585 unlock:
586 	spin_unlock_irqrestore(&ch->lock, flags);
587 rpm_put:
588 	pm_runtime_put_noidle(dev);
589 	return ret;
590 }
591 
rcar_gen3_phy_usb2_irqs_mask_all(struct rcar_gen3_chan * channel,u32 * masked_irqs_bits)592 static void rcar_gen3_phy_usb2_irqs_mask_all(struct rcar_gen3_chan *channel,
593 					     u32 *masked_irqs_bits)
594 {
595 	u32 val, bitmask = USB2_INT_ENABLE_UCOM_INTEN;
596 	void __iomem *usb2_base = channel->base;
597 
598 	for (unsigned int i = 0; i < NUM_OF_PHYS; i++)
599 		bitmask |= channel->rphys[i].int_enable_bits;
600 
601 	val = readl(usb2_base + USB2_INT_ENABLE);
602 	*masked_irqs_bits = val & bitmask;
603 	val &= ~bitmask;
604 	writel(val, usb2_base + USB2_INT_ENABLE);
605 
606 	/*
607 	 * Don't report channel->phy_data->obint_enable_bits IRQs. These are
608 	 * unmasked anyway in rcar_gen3_init_otg_phase1().
609 	 */
610 	val = readl(usb2_base + USB2_OBINTEN);
611 	val &= ~channel->phy_data->obint_enable_bits;
612 	writel(val, usb2_base + USB2_OBINTEN);
613 }
614 
rcar_gen3_phy_usb2_irqs_unmask(struct rcar_gen3_chan * channel,u32 irqs_bits)615 static void rcar_gen3_phy_usb2_irqs_unmask(struct rcar_gen3_chan *channel,
616 					   u32 irqs_bits)
617 {
618 	u32 val, bitmask = USB2_INT_ENABLE_UCOM_INTEN;
619 	void __iomem *usb2_base = channel->base;
620 
621 	for (unsigned int i = 0; i < NUM_OF_PHYS; i++)
622 		bitmask |= channel->rphys[i].int_enable_bits;
623 
624 	val = readl(usb2_base + USB2_INT_ENABLE);
625 	val &= ~bitmask;
626 	val |= irqs_bits;
627 	writel(val, usb2_base + USB2_INT_ENABLE);
628 }
629 
rcar_gen3_phy_usb2_init(struct phy * p)630 static int rcar_gen3_phy_usb2_init(struct phy *p)
631 {
632 	struct rcar_gen3_phy *rphy = phy_get_drvdata(p);
633 	struct rcar_gen3_chan *channel = rphy->ch;
634 	void __iomem *usb2_base = channel->base;
635 	int retries = NUM_OF_PHYS;
636 	unsigned long flags;
637 	u32 val;
638 	int ret;
639 
640 	spin_lock_irqsave(&channel->lock, flags);
641 
642 	while (retries-- && channel->otg_initializing) {
643 		spin_unlock_irqrestore(&channel->lock, flags);
644 
645 		ret = wait_event_timeout(channel->otg_init_done, !channel->otg_initializing,
646 					 USB2_OTG_INIT_TIMEOUT);
647 		ret = ret ? 0 : -ETIMEDOUT;
648 		if (ret && !retries)
649 			return ret;
650 
651 		spin_lock_irqsave(&channel->lock, flags);
652 	}
653 
654 	/* If another thread started a new initialization just return -EBUSY. */
655 	if (channel->otg_initializing) {
656 		ret = -EBUSY;
657 		goto unlock;
658 	} else {
659 		ret = 0;
660 	}
661 
662 	/* Initialize USB2 part */
663 	val = readl(usb2_base + USB2_INT_ENABLE);
664 	val |= USB2_INT_ENABLE_UCOM_INTEN | rphy->int_enable_bits;
665 	writel(val, usb2_base + USB2_INT_ENABLE);
666 
667 	if (!rcar_gen3_is_any_rphy_initialized(channel)) {
668 		writel(USB2_SPD_RSM_TIMSET_INIT, usb2_base + USB2_SPD_RSM_TIMSET);
669 		writel(USB2_OC_TIMSET_INIT, usb2_base + USB2_OC_TIMSET);
670 	}
671 
672 	/* Initialize otg part (only if we initialize a PHY with IRQs). */
673 	if (rphy->int_enable_bits && channel->is_otg_channel &&
674 	    !rcar_gen3_is_any_otg_rphy_initialized(channel)) {
675 		u32 masked_irq_bits = 0;
676 
677 		rcar_gen3_init_otg_phase0(channel);
678 		rcar_gen3_phy_usb2_irqs_mask_all(channel, &masked_irq_bits);
679 		channel->otg_initializing = true;
680 		spin_unlock_irqrestore(&channel->lock, flags);
681 
682 		fsleep(20000);
683 
684 		spin_lock_irqsave(&channel->lock, flags);
685 		rcar_gen3_phy_usb2_irqs_unmask(channel, masked_irq_bits);
686 		rcar_gen3_init_otg_phase1(channel);
687 		channel->otg_initializing = false;
688 		wake_up_all(&channel->otg_init_done);
689 	}
690 
691 	if (channel->phy_data->vblvl_ctrl) {
692 		/* SIDDQ mode release */
693 		writel(readl(usb2_base + USB2_VBCTRL) | USB2_VBCTRL_SIDDQREL,
694 		       usb2_base + USB2_VBCTRL);
695 		udelay(250);
696 	}
697 
698 	if (channel->phy_data->utmi_ctrl) {
699 		val = readl(usb2_base + USB2_REGEN_CG_CTRL) | USB2_REGEN_CG_CTRL_UPHY_WEN;
700 		writel(val, usb2_base + USB2_REGEN_CG_CTRL);
701 
702 		writel(USB2_UTMI_CTRL_INIT, usb2_base + USB2_UTMI_CTRL);
703 		writel(val & ~USB2_REGEN_CG_CTRL_UPHY_WEN, usb2_base + USB2_REGEN_CG_CTRL);
704 	}
705 
706 	rphy->initialized = true;
707 
708 unlock:
709 	spin_unlock_irqrestore(&channel->lock, flags);
710 
711 	return ret;
712 }
713 
rcar_gen3_phy_usb2_exit(struct phy * p)714 static int rcar_gen3_phy_usb2_exit(struct phy *p)
715 {
716 	struct rcar_gen3_phy *rphy = phy_get_drvdata(p);
717 	struct rcar_gen3_chan *channel = rphy->ch;
718 	void __iomem *usb2_base = channel->base;
719 	int retries = NUM_OF_PHYS;
720 	unsigned long flags;
721 	u32 val;
722 	int ret;
723 
724 	spin_lock_irqsave(&channel->lock, flags);
725 
726 	while (retries-- && channel->otg_initializing) {
727 		spin_unlock_irqrestore(&channel->lock, flags);
728 
729 		ret = wait_event_timeout(channel->otg_init_done, !channel->otg_initializing,
730 					 USB2_OTG_INIT_TIMEOUT);
731 		ret = ret ? 0 : -ETIMEDOUT;
732 		if (ret && !retries)
733 			return ret;
734 
735 		spin_lock_irqsave(&channel->lock, flags);
736 	}
737 
738 	/* If another thread started a new initialization just return -EBUSY. */
739 	if (channel->otg_initializing) {
740 		ret = -EBUSY;
741 		goto unlock;
742 	} else {
743 		ret = 0;
744 	}
745 
746 	rphy->initialized = false;
747 
748 	val = readl(usb2_base + USB2_INT_ENABLE);
749 	val &= ~rphy->int_enable_bits;
750 	if (!rcar_gen3_is_any_rphy_initialized(channel))
751 		val &= ~USB2_INT_ENABLE_UCOM_INTEN;
752 	writel(val, usb2_base + USB2_INT_ENABLE);
753 
754 unlock:
755 	spin_unlock_irqrestore(&channel->lock, flags);
756 	return ret;
757 }
758 
rcar_gen3_phy_usb2_power_on(struct phy * p)759 static int rcar_gen3_phy_usb2_power_on(struct phy *p)
760 {
761 	struct rcar_gen3_phy *rphy = phy_get_drvdata(p);
762 	struct rcar_gen3_chan *channel = rphy->ch;
763 	void __iomem *usb2_base = channel->base;
764 	int retries = NUM_OF_PHYS;
765 	unsigned long flags;
766 	u32 val;
767 	int ret;
768 
769 	if (channel->vbus && !channel->otg_internal_reg) {
770 		ret = regulator_enable(channel->vbus);
771 		if (ret)
772 			return ret;
773 	}
774 
775 	spin_lock_irqsave(&channel->lock, flags);
776 
777 	while (retries-- && channel->otg_initializing) {
778 		spin_unlock_irqrestore(&channel->lock, flags);
779 
780 		ret = wait_event_timeout(channel->otg_init_done, !channel->otg_initializing,
781 					 USB2_OTG_INIT_TIMEOUT);
782 		ret = ret ? 0 : -ETIMEDOUT;
783 		if (ret && !retries)
784 			goto disable_regulator;
785 
786 		spin_lock_irqsave(&channel->lock, flags);
787 	}
788 
789 	/* If another thread started a new initialization just return -EBUSY. */
790 	if (channel->otg_initializing) {
791 		ret = -EBUSY;
792 		goto unlock;
793 	} else {
794 		ret = 0;
795 	}
796 
797 	if (!rcar_gen3_are_all_rphys_power_off(channel))
798 		goto out;
799 
800 	val = readl(usb2_base + USB2_USBCTR);
801 	val |= USB2_USBCTR_PLL_RST;
802 	writel(val, usb2_base + USB2_USBCTR);
803 	val &= ~USB2_USBCTR_PLL_RST;
804 	writel(val, usb2_base + USB2_USBCTR);
805 
806 out:
807 	/* The powered flag should be set for any other phys anyway */
808 	rphy->powered = true;
809 
810 unlock:
811 	spin_unlock_irqrestore(&channel->lock, flags);
812 
813 disable_regulator:
814 	if (ret && channel->vbus && !channel->otg_internal_reg)
815 		regulator_disable(channel->vbus);
816 
817 	return ret;
818 }
819 
rcar_gen3_phy_usb2_power_off(struct phy * p)820 static int rcar_gen3_phy_usb2_power_off(struct phy *p)
821 {
822 	struct rcar_gen3_phy *rphy = phy_get_drvdata(p);
823 	struct rcar_gen3_chan *channel = rphy->ch;
824 	int retries = NUM_OF_PHYS;
825 	unsigned long flags;
826 	int ret;
827 
828 	spin_lock_irqsave(&channel->lock, flags);
829 
830 	while (retries-- && channel->otg_initializing) {
831 		spin_unlock_irqrestore(&channel->lock, flags);
832 
833 		ret = wait_event_timeout(channel->otg_init_done, !channel->otg_initializing,
834 					 USB2_OTG_INIT_TIMEOUT);
835 		ret = ret ? 0 : -ETIMEDOUT;
836 		if (ret && !retries)
837 			return ret;
838 
839 		spin_lock_irqsave(&channel->lock, flags);
840 	}
841 
842 	/* If another thread started a new initialization just return -EBUSY. */
843 	if (channel->otg_initializing) {
844 		ret = -EBUSY;
845 		goto unlock;
846 	} else {
847 		ret = 0;
848 	}
849 
850 	rphy->powered = false;
851 
852 	if (rcar_gen3_are_all_rphys_power_off(channel)) {
853 		u32 val = readl(channel->base + USB2_USBCTR);
854 
855 		val |= USB2_USBCTR_PLL_RST;
856 		writel(val, channel->base + USB2_USBCTR);
857 	}
858 
859 unlock:
860 	spin_unlock_irqrestore(&channel->lock, flags);
861 
862 	if (!ret && channel->vbus && !channel->otg_internal_reg)
863 		ret = regulator_disable(channel->vbus);
864 
865 	return ret;
866 }
867 
868 static const struct phy_ops rcar_gen3_phy_usb2_ops = {
869 	.init		= rcar_gen3_phy_usb2_init,
870 	.exit		= rcar_gen3_phy_usb2_exit,
871 	.power_on	= rcar_gen3_phy_usb2_power_on,
872 	.power_off	= rcar_gen3_phy_usb2_power_off,
873 	.owner		= THIS_MODULE,
874 };
875 
876 static const struct phy_ops rz_g1c_phy_usb2_ops = {
877 	.init		= rcar_gen3_phy_usb2_init,
878 	.exit		= rcar_gen3_phy_usb2_exit,
879 	.owner		= THIS_MODULE,
880 };
881 
882 static const struct rcar_gen3_phy_drv_data rcar_gen3_phy_usb2_data = {
883 	.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
884 	.no_adp_ctrl = false,
885 	.obint_enable_bits = USB2_OBINT_SESSVLDCHG |
886 			     USB2_OBINT_IDDIGCHG,
887 };
888 
889 static const struct rcar_gen3_phy_drv_data rz_g1c_phy_usb2_data = {
890 	.phy_usb2_ops = &rz_g1c_phy_usb2_ops,
891 	.no_adp_ctrl = false,
892 	.obint_enable_bits = USB2_OBINT_SESSVLDCHG |
893 			     USB2_OBINT_IDDIGCHG,
894 };
895 
896 static const struct rcar_gen3_phy_drv_data rz_g2l_phy_usb2_data = {
897 	.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
898 	.no_adp_ctrl = true,
899 	.obint_enable_bits = USB2_OBINT_IDCHG_EN,
900 };
901 
902 static const struct rcar_gen3_phy_drv_data rz_g3s_phy_usb2_data = {
903 	.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
904 	.no_adp_ctrl = true,
905 	.init_bus = true,
906 	.obint_enable_bits = USB2_OBINT_IDCHG_EN,
907 };
908 
909 static const struct rcar_gen3_phy_drv_data rz_t2h_phy_usb2_data = {
910 	.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
911 	.vblvl_ctrl = true,
912 	.obint_enable_bits = USB2_OBINT_IDCHG_EN | USB2_OBINT_VBSTAINT,
913 };
914 
915 static const struct rcar_gen3_phy_drv_data rz_v2h_phy_usb2_data = {
916 	.phy_usb2_ops = &rcar_gen3_phy_usb2_ops,
917 	.no_adp_ctrl = true,
918 	.utmi_ctrl = true,
919 	.obint_enable_bits = USB2_OBINT_IDCHG_EN,
920 };
921 
922 static const struct of_device_id rcar_gen3_phy_usb2_match_table[] = {
923 	{
924 		.compatible = "renesas,usb2-phy-r8a77470",
925 		.data = &rz_g1c_phy_usb2_data,
926 	},
927 	{
928 		.compatible = "renesas,usb2-phy-r8a7795",
929 		.data = &rcar_gen3_phy_usb2_data,
930 	},
931 	{
932 		.compatible = "renesas,usb2-phy-r8a7796",
933 		.data = &rcar_gen3_phy_usb2_data,
934 	},
935 	{
936 		.compatible = "renesas,usb2-phy-r8a77965",
937 		.data = &rcar_gen3_phy_usb2_data,
938 	},
939 	{
940 		.compatible = "renesas,usb2-phy-r9a08g045",
941 		.data = &rz_g3s_phy_usb2_data,
942 	},
943 	{
944 		.compatible = "renesas,usb2-phy-r9a08g046",
945 		.data = &rz_g3s_phy_usb2_data,
946 	},
947 	{
948 		.compatible = "renesas,usb2-phy-r9a09g057",
949 		.data = &rz_v2h_phy_usb2_data,
950 	},
951 	{
952 		.compatible = "renesas,usb2-phy-r9a09g077",
953 		.data = &rz_t2h_phy_usb2_data,
954 	},
955 	{
956 		.compatible = "renesas,rzg2l-usb2-phy",
957 		.data = &rz_g2l_phy_usb2_data,
958 	},
959 	{
960 		.compatible = "renesas,rcar-gen3-usb2-phy",
961 		.data = &rcar_gen3_phy_usb2_data,
962 	},
963 	{ /* sentinel */ },
964 };
965 MODULE_DEVICE_TABLE(of, rcar_gen3_phy_usb2_match_table);
966 
967 static const unsigned int rcar_gen3_phy_cable[] = {
968 	EXTCON_USB,
969 	EXTCON_USB_HOST,
970 	EXTCON_NONE,
971 };
972 
rcar_gen3_phy_usb2_xlate(struct device * dev,const struct of_phandle_args * args)973 static struct phy *rcar_gen3_phy_usb2_xlate(struct device *dev,
974 					    const struct of_phandle_args *args)
975 {
976 	struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
977 
978 	if (args->args_count == 0)	/* For old version dts */
979 		return ch->rphys[PHY_INDEX_BOTH_HC].phy;
980 	else if (args->args_count > 1)	/* Prevent invalid args count */
981 		return ERR_PTR(-ENODEV);
982 
983 	if (args->args[0] >= NUM_OF_PHYS)
984 		return ERR_PTR(-ENODEV);
985 
986 	return ch->rphys[args->args[0]].phy;
987 }
988 
rcar_gen3_get_dr_mode(struct device_node * np)989 static enum usb_dr_mode rcar_gen3_get_dr_mode(struct device_node *np)
990 {
991 	enum usb_dr_mode candidate = USB_DR_MODE_UNKNOWN;
992 	int i;
993 
994 	/*
995 	 * If one of device nodes has other dr_mode except UNKNOWN,
996 	 * this function returns UNKNOWN. To achieve backward compatibility,
997 	 * this loop starts the index as 0.
998 	 */
999 	for (i = 0; i < NUM_OF_PHYS; i++) {
1000 		enum usb_dr_mode mode = of_usb_get_dr_mode_by_phy(np, i);
1001 
1002 		if (mode != USB_DR_MODE_UNKNOWN) {
1003 			if (candidate == USB_DR_MODE_UNKNOWN)
1004 				candidate = mode;
1005 			else if (candidate != mode)
1006 				return USB_DR_MODE_UNKNOWN;
1007 		}
1008 	}
1009 
1010 	return candidate;
1011 }
1012 
rcar_gen3_reset_assert(void * data)1013 static void rcar_gen3_reset_assert(void *data)
1014 {
1015 	reset_control_assert(data);
1016 }
1017 
rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan * channel)1018 static int rcar_gen3_phy_usb2_init_bus(struct rcar_gen3_chan *channel)
1019 {
1020 	struct device *dev = channel->dev;
1021 	int ret;
1022 	u32 val;
1023 
1024 	if (!channel->phy_data->init_bus)
1025 		return 0;
1026 
1027 	ret = pm_runtime_resume_and_get(dev);
1028 	if (ret)
1029 		return ret;
1030 
1031 	val = readl(channel->base + USB2_AHB_BUS_CTR);
1032 	val &= ~USB2_AHB_BUS_CTR_MBL_MASK;
1033 	val |= USB2_AHB_BUS_CTR_MBL_INCR4;
1034 	writel(val, channel->base + USB2_AHB_BUS_CTR);
1035 
1036 	pm_runtime_put(dev);
1037 
1038 	return 0;
1039 }
1040 
rcar_gen3_phy_usb2_regulator_endisable(struct regulator_dev * rdev,bool enable)1041 static int rcar_gen3_phy_usb2_regulator_endisable(struct regulator_dev *rdev,
1042 						  bool enable)
1043 {
1044 	struct rcar_gen3_chan *channel = rdev_get_drvdata(rdev);
1045 	struct device *dev = channel->dev;
1046 	int ret;
1047 
1048 	ret = pm_runtime_resume_and_get(dev);
1049 	if (ret < 0) {
1050 		dev_warn(dev, "pm_runtime_get failed: %i\n", ret);
1051 		return ret;
1052 	}
1053 
1054 	rcar_gen3_phy_usb2_set_vbus(channel, USB2_VBCTRL,
1055 				    USB2_VBCTRL_VBOUT, enable);
1056 	pm_runtime_put_noidle(dev);
1057 
1058 	return ret;
1059 }
1060 
rcar_gen3_phy_usb2_regulator_enable(struct regulator_dev * rdev)1061 static int rcar_gen3_phy_usb2_regulator_enable(struct regulator_dev *rdev)
1062 {
1063 	return rcar_gen3_phy_usb2_regulator_endisable(rdev, true);
1064 }
1065 
rcar_gen3_phy_usb2_regulator_disable(struct regulator_dev * rdev)1066 static int rcar_gen3_phy_usb2_regulator_disable(struct regulator_dev *rdev)
1067 {
1068 	return rcar_gen3_phy_usb2_regulator_endisable(rdev, false);
1069 }
1070 
rcar_gen3_phy_usb2_regulator_is_enabled(struct regulator_dev * rdev)1071 static int rcar_gen3_phy_usb2_regulator_is_enabled(struct regulator_dev *rdev)
1072 {
1073 	struct rcar_gen3_chan *channel = rdev_get_drvdata(rdev);
1074 	void __iomem *usb2_base = channel->base;
1075 	struct device *dev = channel->dev;
1076 	u32 vbus_ctrl_reg = USB2_VBCTRL;
1077 	u32 val;
1078 	int ret;
1079 
1080 	ret = pm_runtime_resume_and_get(dev);
1081 	if (ret < 0) {
1082 		dev_warn(dev, "pm_runtime_get failed: %i\n", ret);
1083 		return ret;
1084 	}
1085 
1086 	val = readl(usb2_base + vbus_ctrl_reg);
1087 
1088 	pm_runtime_put_noidle(dev);
1089 	dev_dbg(channel->dev, "%s: %08x\n", __func__, val);
1090 
1091 	return (val & USB2_VBCTRL_VBOUT) ? 1 : 0;
1092 }
1093 
1094 static const struct regulator_ops rcar_gen3_phy_usb2_regulator_ops = {
1095 	.enable = rcar_gen3_phy_usb2_regulator_enable,
1096 	.disable = rcar_gen3_phy_usb2_regulator_disable,
1097 	.is_enabled = rcar_gen3_phy_usb2_regulator_is_enabled,
1098 };
1099 
1100 static const struct regulator_desc rcar_gen3_phy_usb2_regulator = {
1101 	.name = "otg-vbus-regulator",
1102 	.of_match = of_match_ptr("vbus-regulator"),
1103 	.ops = &rcar_gen3_phy_usb2_regulator_ops,
1104 	.type = REGULATOR_VOLTAGE,
1105 	.owner = THIS_MODULE,
1106 	.fixed_uV = 5000000,
1107 	.n_voltages = 1,
1108 };
1109 
rcar_gen3_phy_usb2_vbus_disable_action(void * data)1110 static void rcar_gen3_phy_usb2_vbus_disable_action(void *data)
1111 {
1112 	struct regulator *vbus = data;
1113 
1114 	regulator_disable(vbus);
1115 }
1116 
rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(struct rcar_gen3_chan * channel,bool enable)1117 static int rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(struct rcar_gen3_chan *channel,
1118 								  bool enable)
1119 {
1120 	struct device *dev = channel->dev;
1121 	int ret;
1122 
1123 	channel->vbus = devm_regulator_get_exclusive(dev, "vbus");
1124 	if (IS_ERR(channel->vbus)) {
1125 		ret = PTR_ERR(channel->vbus);
1126 		/* If vbus-regulator node was present vbus regulator should be available */
1127 		if (channel->otg_internal_reg)
1128 			return ret;
1129 
1130 		if (ret == -EPROBE_DEFER)
1131 			return ret;
1132 
1133 		return 0;
1134 	}
1135 
1136 	if (enable) {
1137 		ret = regulator_enable(channel->vbus);
1138 		if (ret)
1139 			return ret;
1140 	}
1141 
1142 	if (regulator_is_enabled(channel->vbus))
1143 		return devm_add_action_or_reset(dev, rcar_gen3_phy_usb2_vbus_disable_action,
1144 						channel->vbus);
1145 
1146 	return 0;
1147 }
1148 
rcar_gen3_phy_usb2_vbus_regulator_register(struct rcar_gen3_chan * channel)1149 static int rcar_gen3_phy_usb2_vbus_regulator_register(struct rcar_gen3_chan *channel)
1150 {
1151 	struct device *dev = channel->dev;
1152 	struct regulator_config rcfg = { .dev = dev, };
1153 	struct regulator_dev *rdev;
1154 	bool enable = false;
1155 
1156 	rcfg.of_node = of_get_available_child_by_name(dev->of_node,
1157 						      "vbus-regulator");
1158 	if (rcfg.of_node) {
1159 		rcfg.driver_data = channel;
1160 		rdev = devm_regulator_register(dev, &rcar_gen3_phy_usb2_regulator,
1161 					       &rcfg);
1162 		of_node_put(rcfg.of_node);
1163 		if (IS_ERR(rdev))
1164 			return dev_err_probe(dev, PTR_ERR(rdev),
1165 					     "Failed to create vbus-regulator\n");
1166 
1167 		channel->otg_internal_reg = true;
1168 		enable = true;
1169 	}
1170 
1171 	return rcar_gen3_phy_usb2_vbus_regulator_get_exclusive_enable(channel, enable);
1172 }
1173 
rcar_gen3_phy_usb2_probe(struct platform_device * pdev)1174 static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
1175 {
1176 	struct device *dev = &pdev->dev;
1177 	struct rcar_gen3_chan *channel;
1178 	struct phy_provider *provider;
1179 	struct mux_state *mux_state;
1180 	int ret = 0, i, irq;
1181 
1182 	if (!dev->of_node) {
1183 		dev_err(dev, "This driver needs device tree\n");
1184 		return -EINVAL;
1185 	}
1186 
1187 	channel = devm_kzalloc(dev, sizeof(*channel), GFP_KERNEL);
1188 	if (!channel)
1189 		return -ENOMEM;
1190 
1191 	channel->base = devm_platform_ioremap_resource(pdev, 0);
1192 	if (IS_ERR(channel->base))
1193 		return PTR_ERR(channel->base);
1194 
1195 	channel->dr_mode = rcar_gen3_get_dr_mode(dev->of_node);
1196 	if (channel->dr_mode != USB_DR_MODE_UNKNOWN) {
1197 		channel->is_otg_channel = true;
1198 		channel->uses_otg_pins = !of_property_read_bool(dev->of_node,
1199 							"renesas,no-otg-pins");
1200 		channel->extcon = devm_extcon_dev_allocate(dev,
1201 							rcar_gen3_phy_cable);
1202 		if (IS_ERR(channel->extcon))
1203 			return PTR_ERR(channel->extcon);
1204 
1205 		ret = devm_extcon_dev_register(dev, channel->extcon);
1206 		if (ret < 0) {
1207 			dev_err(dev, "Failed to register extcon\n");
1208 			return ret;
1209 		}
1210 	}
1211 
1212 	channel->rstc = devm_reset_control_array_get_optional_shared(dev);
1213 	if (IS_ERR(channel->rstc))
1214 		return PTR_ERR(channel->rstc);
1215 
1216 	ret = reset_control_deassert(channel->rstc);
1217 	if (ret)
1218 		return ret;
1219 
1220 	ret = devm_add_action_or_reset(dev, rcar_gen3_reset_assert, channel->rstc);
1221 	if (ret)
1222 		return ret;
1223 
1224 	/*
1225 	 * devm_phy_create() will call pm_runtime_enable(&phy->dev);
1226 	 * And then, phy-core will manage runtime pm for this device.
1227 	 */
1228 	ret = devm_pm_runtime_enable(dev);
1229 	if (ret)
1230 		return dev_err_probe(dev, ret, "Failed to enable pm_runtime\n");
1231 
1232 	channel->phy_data = of_device_get_match_data(dev);
1233 	if (!channel->phy_data)
1234 		return -EINVAL;
1235 
1236 	platform_set_drvdata(pdev, channel);
1237 	channel->dev = dev;
1238 
1239 	ret = rcar_gen3_phy_usb2_init_bus(channel);
1240 	if (ret)
1241 		return ret;
1242 
1243 	spin_lock_init(&channel->lock);
1244 	init_waitqueue_head(&channel->otg_init_done);
1245 	for (i = 0; i < NUM_OF_PHYS; i++) {
1246 		channel->rphys[i].phy = devm_phy_create(dev, NULL,
1247 							channel->phy_data->phy_usb2_ops);
1248 		if (IS_ERR(channel->rphys[i].phy))
1249 			return dev_err_probe(dev, PTR_ERR(channel->rphys[i].phy),
1250 					     "Failed to create USB2 PHY\n");
1251 
1252 		channel->rphys[i].ch = channel;
1253 		channel->rphys[i].int_enable_bits = rcar_gen3_int_enable[i];
1254 		phy_set_drvdata(channel->rphys[i].phy, &channel->rphys[i]);
1255 	}
1256 
1257 	mux_state = devm_mux_state_get_optional_selected(dev, NULL);
1258 	if (IS_ERR(mux_state))
1259 		return dev_err_probe(dev, PTR_ERR(mux_state), "Failed to get USB mux\n");
1260 
1261 	if (channel->phy_data->no_adp_ctrl && channel->is_otg_channel) {
1262 		ret = rcar_gen3_phy_usb2_vbus_regulator_register(channel);
1263 		if (ret)
1264 			return ret;
1265 	} else {
1266 		channel->vbus = devm_regulator_get_optional(dev, "vbus");
1267 	}
1268 	if (IS_ERR(channel->vbus)) {
1269 		if (PTR_ERR(channel->vbus) == -EPROBE_DEFER)
1270 			return PTR_ERR(channel->vbus);
1271 
1272 		channel->vbus = NULL;
1273 	}
1274 
1275 	irq = platform_get_irq_optional(pdev, 0);
1276 	if (irq < 0 && irq != -ENXIO) {
1277 		return irq;
1278 	} else if (irq > 0) {
1279 		INIT_WORK(&channel->work, rcar_gen3_phy_usb2_work);
1280 		ret = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq,
1281 				       IRQF_SHARED, dev_name(dev), channel);
1282 		if (ret < 0)
1283 			return dev_err_probe(dev, ret,
1284 					     "Failed to request irq (%d)\n",
1285 					     irq);
1286 	}
1287 
1288 	provider = devm_of_phy_provider_register(dev, rcar_gen3_phy_usb2_xlate);
1289 	if (IS_ERR(provider)) {
1290 		return dev_err_probe(dev, PTR_ERR(provider),
1291 				     "Failed to register PHY provider\n");
1292 	} else if (channel->is_otg_channel) {
1293 		ret = device_create_file(dev, &dev_attr_role);
1294 		if (ret < 0)
1295 			return ret;
1296 	}
1297 
1298 	return 0;
1299 }
1300 
rcar_gen3_phy_usb2_remove(struct platform_device * pdev)1301 static void rcar_gen3_phy_usb2_remove(struct platform_device *pdev)
1302 {
1303 	struct rcar_gen3_chan *channel = platform_get_drvdata(pdev);
1304 
1305 	if (channel->is_otg_channel)
1306 		device_remove_file(&pdev->dev, &dev_attr_role);
1307 }
1308 
rcar_gen3_phy_usb2_suspend(struct device * dev)1309 static int rcar_gen3_phy_usb2_suspend(struct device *dev)
1310 {
1311 	struct rcar_gen3_chan *channel = dev_get_drvdata(dev);
1312 
1313 	return reset_control_assert(channel->rstc);
1314 }
1315 
rcar_gen3_phy_usb2_resume(struct device * dev)1316 static int rcar_gen3_phy_usb2_resume(struct device *dev)
1317 {
1318 	struct rcar_gen3_chan *channel = dev_get_drvdata(dev);
1319 	int ret;
1320 
1321 	ret = reset_control_deassert(channel->rstc);
1322 	if (ret)
1323 		return ret;
1324 
1325 	ret = rcar_gen3_phy_usb2_init_bus(channel);
1326 	if (ret)
1327 		reset_control_assert(channel->rstc);
1328 
1329 	return ret;
1330 }
1331 
1332 static DEFINE_SIMPLE_DEV_PM_OPS(rcar_gen3_phy_usb2_pm_ops,
1333 				rcar_gen3_phy_usb2_suspend,
1334 				rcar_gen3_phy_usb2_resume);
1335 
1336 static struct platform_driver rcar_gen3_phy_usb2_driver = {
1337 	.driver = {
1338 		.name		= "phy_rcar_gen3_usb2",
1339 		.of_match_table	= rcar_gen3_phy_usb2_match_table,
1340 		.pm		= pm_ptr(&rcar_gen3_phy_usb2_pm_ops),
1341 	},
1342 	.probe	= rcar_gen3_phy_usb2_probe,
1343 	.remove = rcar_gen3_phy_usb2_remove,
1344 };
1345 module_platform_driver(rcar_gen3_phy_usb2_driver);
1346 
1347 MODULE_LICENSE("GPL v2");
1348 MODULE_DESCRIPTION("Renesas R-Car Gen3 USB 2.0 PHY");
1349 MODULE_AUTHOR("Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>");
1350