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