blob: 2eb456a470afb09f461eba2d17bc2b029cc0dacc [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/device.h>
16#include <linux/platform_device.h>
17#include <linux/clk.h>
18#include <linux/interrupt.h>
19#include <linux/err.h>
20#include <linux/delay.h>
21#include <linux/io.h>
22#include <linux/ioport.h>
23#include <linux/pm_runtime.h>
24
25#include <linux/device.h>
26#include <linux/pm_qos_params.h>
27#include <mach/msm_hsusb_hw.h>
28#include <mach/msm72k_otg.h>
29#include <mach/msm_hsusb.h>
30#include <linux/debugfs.h>
31#include <linux/uaccess.h>
32#include <mach/clk.h>
33#include <mach/msm_xo.h>
34
35#define MSM_USB_BASE (dev->regs)
36#define USB_LINK_RESET_TIMEOUT (msecs_to_jiffies(10))
37#define DRIVER_NAME "msm_otg"
38static void otg_reset(struct otg_transceiver *xceiv, int phy_reset);
39static void msm_otg_set_vbus_state(int online);
40static void msm_otg_set_id_state(int online);
41
42struct msm_otg *the_msm_otg;
43
44static int is_host(void)
45{
46 struct msm_otg *dev = the_msm_otg;
47
48 if (dev->pmic_id_notif_supp)
49 return dev->pmic_id_status ? 0 : 1;
50 else if (dev->pdata->otg_mode == OTG_ID)
51 return (OTGSC_ID & readl(USB_OTGSC)) ? 0 : 1;
52 else
53 return !test_bit(ID, &dev->inputs);
54}
55
56static int is_b_sess_vld(void)
57{
58 struct msm_otg *dev = the_msm_otg;
59
60 if (dev->pdata->otg_mode == OTG_ID)
61 return (OTGSC_BSV & readl(USB_OTGSC)) ? 1 : 0;
62 else
63 return test_bit(B_SESS_VLD, &dev->inputs);
64}
65
66static unsigned ulpi_read(struct msm_otg *dev, unsigned reg)
67{
68 unsigned ret, timeout = 100000;
69 unsigned long flags;
70
71 spin_lock_irqsave(&dev->lock, flags);
72
73 /* initiate read operation */
74 writel(ULPI_RUN | ULPI_READ | ULPI_ADDR(reg),
75 USB_ULPI_VIEWPORT);
76
77 /* wait for completion */
78 while ((readl(USB_ULPI_VIEWPORT) & ULPI_RUN) && (--timeout))
79 cpu_relax();
80
81 if (timeout == 0) {
82 pr_err("%s: timeout %08x\n", __func__,
83 readl(USB_ULPI_VIEWPORT));
84 spin_unlock_irqrestore(&dev->lock, flags);
85 return 0xffffffff;
86 }
87 ret = ULPI_DATA_READ(readl(USB_ULPI_VIEWPORT));
88
89 spin_unlock_irqrestore(&dev->lock, flags);
90
91 return ret;
92}
93
94static int ulpi_write(struct msm_otg *dev, unsigned val, unsigned reg)
95{
96 unsigned timeout = 10000;
97 unsigned long flags;
98
99 spin_lock_irqsave(&dev->lock, flags);
100
101 /* initiate write operation */
102 writel(ULPI_RUN | ULPI_WRITE |
103 ULPI_ADDR(reg) | ULPI_DATA(val),
104 USB_ULPI_VIEWPORT);
105
106 /* wait for completion */
107 while ((readl(USB_ULPI_VIEWPORT) & ULPI_RUN) && (--timeout))
108 ;
109
110 if (timeout == 0) {
111 pr_err("%s: timeout\n", __func__);
112 spin_unlock_irqrestore(&dev->lock, flags);
113 return -1;
114 }
115
116 spin_unlock_irqrestore(&dev->lock, flags);
117
118 return 0;
119}
120
121static int usb_ulpi_write(struct otg_transceiver *xceiv, u32 val, u32 reg)
122{
123 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
124
125 return ulpi_write(dev, val, reg);
126}
127
128static int usb_ulpi_read(struct otg_transceiver *xceiv, u32 reg)
129{
130 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
131
132 return ulpi_read(dev, reg);
133}
134
135#ifdef CONFIG_USB_EHCI_MSM_72K
136static void enable_idgnd(struct msm_otg *dev)
137{
138 /* Do nothing if instead of ID pin, USER controls mode switch */
139 if (dev->pdata->otg_mode == OTG_USER_CONTROL)
140 return;
141
142 ulpi_write(dev, (1<<4), 0x0E);
143 ulpi_write(dev, (1<<4), 0x11);
144 writel(readl(USB_OTGSC) | OTGSC_IDIE, USB_OTGSC);
145}
146
147static void disable_idgnd(struct msm_otg *dev)
148{
149 /* Do nothing if instead of ID pin, USER controls mode switch */
150 if (dev->pdata->otg_mode == OTG_USER_CONTROL)
151 return;
152
153 ulpi_write(dev, (1<<4), 0x0F);
154 ulpi_write(dev, (1<<4), 0x12);
155 writel(readl(USB_OTGSC) & ~OTGSC_IDIE, USB_OTGSC);
156}
157#endif
158
159static void enable_idabc(struct msm_otg *dev)
160{
161#ifdef CONFIG_USB_MSM_ACA
162 ulpi_write(dev, (1<<5), 0x0E);
163 ulpi_write(dev, (1<<5), 0x11);
164#endif
165}
166static void disable_idabc(struct msm_otg *dev)
167{
168#ifdef CONFIG_USB_MSM_ACA
169 ulpi_write(dev, (1<<5), 0x0F);
170 ulpi_write(dev, (1<<5), 0x12);
171#endif
172}
173
174static void enable_sess_valid(struct msm_otg *dev)
175{
176 /* Do nothing if instead of ID pin, USER controls mode switch */
177 if (dev->pdata->otg_mode == OTG_USER_CONTROL)
178 return;
179
180 ulpi_write(dev, (1<<2), 0x0E);
181 ulpi_write(dev, (1<<2), 0x11);
182 writel(readl(USB_OTGSC) | OTGSC_BSVIE, USB_OTGSC);
183}
184
185static void disable_sess_valid(struct msm_otg *dev)
186{
187 /* Do nothing if instead of ID pin, USER controls mode switch */
188 if (dev->pdata->otg_mode == OTG_USER_CONTROL)
189 return;
190
191 ulpi_write(dev, (1<<2), 0x0F);
192 ulpi_write(dev, (1<<2), 0x12);
193 writel(readl(USB_OTGSC) & ~OTGSC_BSVIE, USB_OTGSC);
194}
195#ifdef CONFIG_USB_MSM_ACA
196static void set_aca_id_inputs(struct msm_otg *dev)
197{
198 u8 phy_ints;
199
200 phy_ints = ulpi_read(dev, 0x13);
201 if (phy_ints == -ETIMEDOUT)
202 return;
203
204 pr_debug("phy_ints = %x\n", phy_ints);
205 clear_bit(ID_A, &dev->inputs);
206 clear_bit(ID_B, &dev->inputs);
207 clear_bit(ID_C, &dev->inputs);
208 if (phy_id_state_a(phy_ints)) {
209 pr_debug("ID_A set\n");
210 set_bit(ID_A, &dev->inputs);
211 set_bit(A_BUS_REQ, &dev->inputs);
212 } else if (phy_id_state_b(phy_ints)) {
213 pr_debug("ID_B set\n");
214 set_bit(ID_B, &dev->inputs);
215 } else if (phy_id_state_c(phy_ints)) {
216 pr_debug("ID_C set\n");
217 set_bit(ID_C, &dev->inputs);
218 }
219 if (is_b_sess_vld())
220 set_bit(B_SESS_VLD, &dev->inputs);
221 else
222 clear_bit(B_SESS_VLD, &dev->inputs);
223}
224#define get_aca_bmaxpower(dev) (dev->b_max_power)
225#define set_aca_bmaxpower(dev, power) (dev->b_max_power = power)
226#else
227#define get_aca_bmaxpower(dev) 0
228#define set_aca_bmaxpower(dev, power)
229#endif
230static inline void set_pre_emphasis_level(struct msm_otg *dev)
231{
232 unsigned res = 0;
233
234 if (!dev->pdata || dev->pdata->pemp_level == PRE_EMPHASIS_DEFAULT)
235 return;
236
237 res = ulpi_read(dev, ULPI_CONFIG_REG3);
238 res &= ~(ULPI_PRE_EMPHASIS_MASK);
239 if (dev->pdata->pemp_level != PRE_EMPHASIS_DISABLE)
240 res |= dev->pdata->pemp_level;
241 ulpi_write(dev, res, ULPI_CONFIG_REG3);
242}
243
244static inline void set_hsdrv_slope(struct msm_otg *dev)
245{
246 unsigned res = 0;
247
248 if (!dev->pdata || dev->pdata->hsdrvslope == HS_DRV_SLOPE_DEFAULT)
249 return;
250
251 res = ulpi_read(dev, ULPI_CONFIG_REG3);
252 res &= ~(ULPI_HSDRVSLOPE_MASK);
253 res |= (dev->pdata->hsdrvslope & ULPI_HSDRVSLOPE_MASK);
254 ulpi_write(dev, res, ULPI_CONFIG_REG3);
255}
256
257static inline void set_cdr_auto_reset(struct msm_otg *dev)
258{
259 unsigned res = 0;
260
261 if (!dev->pdata || dev->pdata->cdr_autoreset == CDR_AUTO_RESET_DEFAULT)
262 return;
263
264 res = ulpi_read(dev, ULPI_DIGOUT_CTRL);
265 if (dev->pdata->cdr_autoreset == CDR_AUTO_RESET_ENABLE)
266 res &= ~ULPI_CDR_AUTORESET;
267 else
268 res |= ULPI_CDR_AUTORESET;
269 ulpi_write(dev, res, ULPI_DIGOUT_CTRL);
270}
271
272static inline void set_se1_gating(struct msm_otg *dev)
273{
274 unsigned res = 0;
275
276 if (!dev->pdata || dev->pdata->se1_gating == SE1_GATING_DEFAULT)
277 return;
278
279 res = ulpi_read(dev, ULPI_DIGOUT_CTRL);
280 if (dev->pdata->se1_gating == SE1_GATING_ENABLE)
281 res &= ~ULPI_SE1_GATE;
282 else
283 res |= ULPI_SE1_GATE;
284 ulpi_write(dev, res, ULPI_DIGOUT_CTRL);
285}
286static inline void set_driver_amplitude(struct msm_otg *dev)
287{
288 unsigned res = 0;
289
290 if (!dev->pdata || dev->pdata->drv_ampl == HS_DRV_AMPLITUDE_DEFAULT)
291 return;
292
293 res = ulpi_read(dev, ULPI_CONFIG_REG2);
294 res &= ~ULPI_DRV_AMPL_MASK;
295 if (dev->pdata->drv_ampl != HS_DRV_AMPLITUDE_ZERO_PERCENT)
296 res |= dev->pdata->drv_ampl;
297 ulpi_write(dev, res, ULPI_CONFIG_REG2);
298}
299
300static const char *state_string(enum usb_otg_state state)
301{
302 switch (state) {
303 case OTG_STATE_A_IDLE: return "a_idle";
304 case OTG_STATE_A_WAIT_VRISE: return "a_wait_vrise";
305 case OTG_STATE_A_WAIT_BCON: return "a_wait_bcon";
306 case OTG_STATE_A_HOST: return "a_host";
307 case OTG_STATE_A_SUSPEND: return "a_suspend";
308 case OTG_STATE_A_PERIPHERAL: return "a_peripheral";
309 case OTG_STATE_A_WAIT_VFALL: return "a_wait_vfall";
310 case OTG_STATE_A_VBUS_ERR: return "a_vbus_err";
311 case OTG_STATE_B_IDLE: return "b_idle";
312 case OTG_STATE_B_SRP_INIT: return "b_srp_init";
313 case OTG_STATE_B_PERIPHERAL: return "b_peripheral";
314 case OTG_STATE_B_WAIT_ACON: return "b_wait_acon";
315 case OTG_STATE_B_HOST: return "b_host";
316 default: return "UNDEFINED";
317 }
318}
319
320static const char *timer_string(int bit)
321{
322 switch (bit) {
323 case A_WAIT_VRISE: return "a_wait_vrise";
324 case A_WAIT_VFALL: return "a_wait_vfall";
325 case B_SRP_FAIL: return "b_srp_fail";
326 case A_WAIT_BCON: return "a_wait_bcon";
327 case A_AIDL_BDIS: return "a_aidl_bdis";
328 case A_BIDL_ADIS: return "a_bidl_adis";
329 case B_ASE0_BRST: return "b_ase0_brst";
330 default: return "UNDEFINED";
331 }
332}
333
334/* Prevent idle power collapse(pc) while operating in peripheral mode */
335static void otg_pm_qos_update_latency(struct msm_otg *dev, int vote)
336{
337 struct msm_otg_platform_data *pdata = dev->pdata;
338 u32 swfi_latency = 0;
339
340 if (pdata)
341 swfi_latency = pdata->swfi_latency + 1;
342
343 if (vote)
344 pm_qos_update_request(&pdata->pm_qos_req_dma,
345 swfi_latency);
346 else
347 pm_qos_update_request(&pdata->pm_qos_req_dma,
348 PM_QOS_DEFAULT_VALUE);
349}
350
351/* If USB Core is running its protocol engine based on PCLK,
352 * PCLK must be running at >60Mhz for correct HSUSB operation and
353 * USB core cannot tolerate frequency changes on PCLK. For such
354 * USB cores, vote for maximum clk frequency on pclk source
355 */
356static void msm_otg_vote_for_pclk_source(struct msm_otg *dev, int vote)
357{
358 if (dev->pclk_src && pclk_requires_voting(&dev->otg)) {
359
360 if (vote)
361 clk_enable(dev->pclk_src);
362 else
363 clk_disable(dev->pclk_src);
364 }
365}
366
367/* Controller gives interrupt for every 1 mesc if 1MSIE is set in OTGSC.
368 * This interrupt can be used as a timer source and OTG timers can be
369 * implemented. But hrtimers on MSM hardware can give atleast 1/32 KHZ
370 * precision. This precision is more than enough for OTG timers.
371 */
372static enum hrtimer_restart msm_otg_timer_func(struct hrtimer *_timer)
373{
374 struct msm_otg *dev = container_of(_timer, struct msm_otg, timer);
375
376 /* Phy lockup issues are observed when VBUS Valid interrupt is
377 * enabled. Hence set A_VBUS_VLD upon timer exipration.
378 */
379 if (dev->active_tmout == A_WAIT_VRISE)
380 set_bit(A_VBUS_VLD, &dev->inputs);
381 else
382 set_bit(dev->active_tmout, &dev->tmouts);
383
384 pr_debug("expired %s timer\n", timer_string(dev->active_tmout));
385 queue_work(dev->wq, &dev->sm_work);
386 return HRTIMER_NORESTART;
387}
388
389static void msm_otg_del_timer(struct msm_otg *dev)
390{
391 int bit = dev->active_tmout;
392
393 pr_debug("deleting %s timer. remaining %lld msec \n", timer_string(bit),
394 div_s64(ktime_to_us(hrtimer_get_remaining(&dev->timer)),
395 1000));
396 hrtimer_cancel(&dev->timer);
397 clear_bit(bit, &dev->tmouts);
398}
399
400static void msm_otg_start_timer(struct msm_otg *dev, int time, int bit)
401{
402 clear_bit(bit, &dev->tmouts);
403 dev->active_tmout = bit;
404 pr_debug("starting %s timer\n", timer_string(bit));
405 hrtimer_start(&dev->timer,
406 ktime_set(time / 1000, (time % 1000) * 1000000),
407 HRTIMER_MODE_REL);
408}
409
410/* No two otg timers run in parallel. So one hrtimer is sufficient */
411static void msm_otg_init_timer(struct msm_otg *dev)
412{
413 hrtimer_init(&dev->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
414 dev->timer.function = msm_otg_timer_func;
415}
416
417static const char *event_string(enum usb_otg_event event)
418{
419 switch (event) {
420 case OTG_EVENT_DEV_CONN_TMOUT:
421 return "DEV_CONN_TMOUT";
422 case OTG_EVENT_NO_RESP_FOR_HNP_ENABLE:
423 return "NO_RESP_FOR_HNP_ENABLE";
424 case OTG_EVENT_HUB_NOT_SUPPORTED:
425 return "HUB_NOT_SUPPORTED";
426 case OTG_EVENT_DEV_NOT_SUPPORTED:
427 return "DEV_NOT_SUPPORTED,";
428 case OTG_EVENT_HNP_FAILED:
429 return "HNP_FAILED";
430 case OTG_EVENT_NO_RESP_FOR_SRP:
431 return "NO_RESP_FOR_SRP";
432 default:
433 return "UNDEFINED";
434 }
435}
436
437static int msm_otg_send_event(struct otg_transceiver *xceiv,
438 enum usb_otg_event event)
439{
440 char module_name[16];
441 char udev_event[128];
442 char *envp[] = { module_name, udev_event, NULL };
443 int ret;
444
445 pr_debug("sending %s event\n", event_string(event));
446
447 snprintf(module_name, 16, "MODULE=%s", DRIVER_NAME);
448 snprintf(udev_event, 128, "EVENT=%s", event_string(event));
449 ret = kobject_uevent_env(&xceiv->dev->kobj, KOBJ_CHANGE, envp);
450 if (ret < 0)
451 pr_info("uevent sending failed with ret = %d\n", ret);
452 return ret;
453}
454
455static int msm_otg_start_hnp(struct otg_transceiver *xceiv)
456{
457 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
458 enum usb_otg_state state;
459 unsigned long flags;
460
461 spin_lock_irqsave(&dev->lock, flags);
462 state = dev->otg.state;
463 spin_unlock_irqrestore(&dev->lock, flags);
464
465 if (state != OTG_STATE_A_HOST) {
466 pr_err("HNP can not be initiated in %s state\n",
467 state_string(state));
468 return -EINVAL;
469 }
470
471 pr_debug("A-Host: HNP initiated\n");
472 clear_bit(A_BUS_REQ, &dev->inputs);
473 wake_lock(&dev->wlock);
474 queue_work(dev->wq, &dev->sm_work);
475 return 0;
476}
477
478static int msm_otg_start_srp(struct otg_transceiver *xceiv)
479{
480 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
481 u32 val;
482 int ret = 0;
483 enum usb_otg_state state;
484 unsigned long flags;
485
486 spin_lock_irqsave(&dev->lock, flags);
487 state = dev->otg.state;
488 spin_unlock_irqrestore(&dev->lock, flags);
489
490 if (state != OTG_STATE_B_IDLE) {
491 pr_err("SRP can not be initiated in %s state\n",
492 state_string(state));
493 ret = -EINVAL;
494 goto out;
495 }
496
497 if ((jiffies - dev->b_last_se0_sess) < msecs_to_jiffies(TB_SRP_INIT)) {
498 pr_debug("initial conditions of SRP are not met. Try again"
499 "after some time\n");
500 ret = -EAGAIN;
501 goto out;
502 }
503
504 /* Harware auto assist data pulsing: Data pulse is given
505 * for 7msec; wait for vbus
506 */
507 val = readl(USB_OTGSC);
508 writel((val & ~OTGSC_INTR_STS_MASK) | OTGSC_HADP, USB_OTGSC);
509
510 /* VBUS plusing is obsoleted in OTG 2.0 supplement */
511out:
512 return ret;
513}
514
515static int msm_otg_set_power(struct otg_transceiver *xceiv, unsigned mA)
516{
517 static enum chg_type curr_chg = USB_CHG_TYPE__INVALID;
518 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
519 struct msm_otg_platform_data *pdata = dev->pdata;
520 enum chg_type new_chg = atomic_read(&dev->chg_type);
521 unsigned charge = mA;
522
523 /* Call chg_connected only if the charger has changed */
524 if (new_chg != curr_chg && pdata->chg_connected) {
525 curr_chg = new_chg;
526 pdata->chg_connected(new_chg);
527 }
528
529 /* Always use USB_IDCHG_MAX for charging in ID_B and ID_C */
530 if (test_bit(ID_C, &dev->inputs) ||
531 test_bit(ID_B, &dev->inputs))
532 charge = USB_IDCHG_MAX;
533
534 pr_debug("Charging with %dmA current\n", charge);
535 /* Call vbus_draw only if the charger is of known type and also
536 * ignore request to stop charging as a result of suspend interrupt
537 * when wall-charger is used.
538 */
539 if (pdata->chg_vbus_draw && new_chg != USB_CHG_TYPE__INVALID &&
540 (charge || new_chg != USB_CHG_TYPE__WALLCHARGER))
541 pdata->chg_vbus_draw(charge);
542
543 if (new_chg == USB_CHG_TYPE__WALLCHARGER) {
544 wake_lock(&dev->wlock);
545 queue_work(dev->wq, &dev->sm_work);
546 }
547
548 return 0;
549}
550
551static int msm_otg_set_clk(struct otg_transceiver *xceiv, int on)
552{
553 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
554
555 if (!dev || (dev != the_msm_otg))
556 return -ENODEV;
557
558 if (on)
559 /* enable clocks */
560 clk_enable(dev->hs_clk);
561 else
562 clk_disable(dev->hs_clk);
563
564 return 0;
565}
566static void msm_otg_start_peripheral(struct otg_transceiver *xceiv, int on)
567{
568 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
569 struct msm_otg_platform_data *pdata = dev->pdata;
570
571 if (!xceiv->gadget)
572 return;
573
574 if (on) {
575 if (pdata->setup_gpio)
576 pdata->setup_gpio(USB_SWITCH_PERIPHERAL);
577 /* vote for minimum dma_latency to prevent idle
578 * power collapse(pc) while running in peripheral mode.
579 */
580 otg_pm_qos_update_latency(dev, 1);
581
582 /* increment the clk reference count so that
583 * it would be still on when disabled from
584 * low power mode routine
585 */
586 if (dev->pdata->pclk_required_during_lpm)
587 clk_enable(dev->hs_pclk);
588
589 usb_gadget_vbus_connect(xceiv->gadget);
590 } else {
591 atomic_set(&dev->chg_type, USB_CHG_TYPE__INVALID);
592 usb_gadget_vbus_disconnect(xceiv->gadget);
593
594 /* decrement the clk reference count so that
595 * it would be off when disabled from
596 * low power mode routine
597 */
598 if (dev->pdata->pclk_required_during_lpm)
599 clk_disable(dev->hs_pclk);
600
601 otg_pm_qos_update_latency(dev, 0);
602 if (pdata->setup_gpio)
603 pdata->setup_gpio(USB_SWITCH_DISABLE);
604 }
605}
606
607static void msm_otg_start_host(struct otg_transceiver *xceiv, int on)
608{
609 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
610 struct msm_otg_platform_data *pdata = dev->pdata;
611
612 if (!xceiv->host)
613 return;
614
615 if (dev->start_host) {
616 /* Some targets, e.g. ST1.5, use GPIO to choose b/w connector */
617 if (on && pdata->setup_gpio)
618 pdata->setup_gpio(USB_SWITCH_HOST);
619
620 /* increment or decrement the clk reference count
621 * to avoid usb h/w lockup issues when low power
622 * mode is initiated and vbus is on.
623 */
624 if (dev->pdata->pclk_required_during_lpm) {
625 if (on)
626 clk_enable(dev->hs_pclk);
627 else
628 clk_disable(dev->hs_pclk);
629 }
630
631 dev->start_host(xceiv->host, on);
632
633 if (!on && pdata->setup_gpio)
634 pdata->setup_gpio(USB_SWITCH_DISABLE);
635 }
636}
637
638static int msm_otg_suspend(struct msm_otg *dev)
639{
640 unsigned long timeout;
641 bool host_bus_suspend;
642 unsigned ret;
643 enum chg_type chg_type = atomic_read(&dev->chg_type);
644 unsigned long flags;
645
646 disable_irq(dev->irq);
647 if (atomic_read(&dev->in_lpm))
648 goto out;
649#ifdef CONFIG_USB_MSM_ACA
650 /*
651 * ACA interrupts are disabled before entering into LPM.
652 * If LPM is allowed in host mode with accessory charger
653 * connected or only accessory charger is connected,
654 * there is a chance that charger is removed and we will
655 * not know about it.
656 *
657 * REVISIT
658 *
659 * Allowing LPM in case of gadget bus suspend is tricky.
660 * Bus suspend can happen in two states.
661 * 1. ID_float: Allowing LPM has pros and cons. If LPM is allowed
662 * and accessory charger is connected, we miss ID_float --> ID_C
663 * transition where we could draw large amount of current
664 * compared to the suspend current.
665 * 2. ID_C: We can not allow LPM. If accessory charger is removed
666 * we should not draw more than what host could supply which will
667 * be less compared to accessory charger.
668 *
669 * For simplicity, LPM is not allowed in bus suspend.
670 */
671#ifndef CONFIG_USB_MSM_STANDARD_ACA
672 /*
673 * RID_A and IdGnd states are only possible with standard ACA. We can
674 * exit from low power mode with !BSV or IdGnd interrupt. Hence LPM
675 * is allowed.
676 */
677 if ((test_bit(ID, &dev->inputs) && test_bit(B_SESS_VLD, &dev->inputs) &&
678 chg_type != USB_CHG_TYPE__WALLCHARGER) ||
679 test_bit(ID_A, &dev->inputs))
680 goto out;
681#endif
682 /* Disable ID_abc interrupts else it causes spurious interrupt */
683 disable_idabc(dev);
684#endif
685 ulpi_read(dev, 0x14);/* clear PHY interrupt latch register */
686
687 /*
688 * Turn on PHY comparators if,
689 * 1. USB wall charger is connected (bus suspend is not supported)
690 * 2. Host bus suspend
691 * 3. host is supported, but, id is not routed to pmic
692 * 4. peripheral is supported, but, vbus is not routed to pmic
693 */
694 host_bus_suspend = dev->otg.host && is_host();
695 if ((dev->otg.gadget && chg_type == USB_CHG_TYPE__WALLCHARGER) ||
696 host_bus_suspend ||
697 (dev->otg.host && !dev->pmic_id_notif_supp) ||
698 (dev->otg.gadget && !dev->pmic_vbus_notif_supp)) {
699 ulpi_write(dev, 0x01, 0x30);
700 }
701
702 ulpi_write(dev, 0x08, 0x09);/* turn off PLL on integrated phy */
703
704 timeout = jiffies + msecs_to_jiffies(500);
705 disable_phy_clk();
706 while (!is_phy_clk_disabled()) {
707 if (time_after(jiffies, timeout)) {
708 pr_err("%s: Unable to suspend phy\n", __func__);
709 /*
710 * Start otg state machine in default state upon
711 * phy suspend failure*/
712 spin_lock_irqsave(&dev->lock, flags);
713 dev->otg.state = OTG_STATE_UNDEFINED;
714 spin_unlock_irqrestore(&dev->lock, flags);
715 queue_work(dev->wq, &dev->sm_work);
716 goto out;
717 }
718 msleep(1);
719 /* check if there are any pending interrupts*/
720 if (((readl(USB_OTGSC) & OTGSC_INTR_MASK) >> 8) &
721 readl(USB_OTGSC)) {
722 enable_idabc(dev);
723 goto out;
724 }
725 }
726
727 writel(readl(USB_USBCMD) | ASYNC_INTR_CTRL | ULPI_STP_CTRL, USB_USBCMD);
728 /* Ensure that above operation is completed before turning off clocks */
729 mb();
730
731 if (dev->hs_pclk)
732 clk_disable(dev->hs_pclk);
733 if (dev->hs_cclk)
734 clk_disable(dev->hs_cclk);
735 /* usb phy no more require TCXO clock, hence vote for TCXO disable*/
736 ret = msm_xo_mode_vote(dev->xo_handle, MSM_XO_MODE_OFF);
737 if (ret)
738 pr_err("%s failed to devote for"
739 "TCXO D1 buffer%d\n", __func__, ret);
740
741 if (device_may_wakeup(dev->otg.dev)) {
742 enable_irq_wake(dev->irq);
743 if (dev->vbus_on_irq)
744 enable_irq_wake(dev->vbus_on_irq);
745 }
746
747 msm_otg_vote_for_pclk_source(dev, 0);
748
749 atomic_set(&dev->in_lpm, 1);
750
751 if (!host_bus_suspend && dev->pmic_vbus_notif_supp) {
752 pr_debug("phy can power collapse: (%d)\n",
753 can_phy_power_collapse(dev));
754 if (can_phy_power_collapse(dev) && dev->pdata->ldo_enable) {
755 pr_debug("disabling the regulators\n");
756 dev->pdata->ldo_enable(0);
757 }
758 }
759
760 /* phy can interrupts when vddcx is at 0.75, so irrespective
761 * of pmic notification support, configure vddcx @0.75
762 */
763 if (dev->pdata->config_vddcx)
764 dev->pdata->config_vddcx(0);
765 pr_info("%s: usb in low power mode\n", __func__);
766
767out:
768 enable_irq(dev->irq);
769
770 return 0;
771}
772
773static int msm_otg_resume(struct msm_otg *dev)
774{
775 unsigned temp;
776 unsigned ret;
777
778 if (!atomic_read(&dev->in_lpm))
779 return 0;
780 /* vote for vddcx, as PHY cannot tolerate vddcx below 1.0V */
781 if (dev->pdata->config_vddcx) {
782 ret = dev->pdata->config_vddcx(1);
783 if (ret) {
784 pr_err("%s: unable to enable vddcx digital core:%d\n",
785 __func__, ret);
786 }
787 }
788 if (dev->pdata->ldo_set_voltage)
789 dev->pdata->ldo_set_voltage(3400);
790
791 /* Vote for TCXO when waking up the phy */
792 ret = msm_xo_mode_vote(dev->xo_handle, MSM_XO_MODE_ON);
793 if (ret)
794 pr_err("%s failed to vote for"
795 "TCXO D1 buffer%d\n", __func__, ret);
796
797 msm_otg_vote_for_pclk_source(dev, 1);
798
799 if (dev->hs_pclk)
800 clk_enable(dev->hs_pclk);
801 if (dev->hs_cclk)
802 clk_enable(dev->hs_cclk);
803
804 temp = readl(USB_USBCMD);
805 temp &= ~ASYNC_INTR_CTRL;
806 temp &= ~ULPI_STP_CTRL;
807 writel(temp, USB_USBCMD);
808
809 if (device_may_wakeup(dev->otg.dev)) {
810 disable_irq_wake(dev->irq);
811 if (dev->vbus_on_irq)
812 disable_irq_wake(dev->vbus_on_irq);
813 }
814
815 atomic_set(&dev->in_lpm, 0);
816
817 pr_info("%s: usb exited from low power mode\n", __func__);
818
819 return 0;
820}
821
822static void msm_otg_get_resume(struct msm_otg *dev)
823{
824#ifdef CONFIG_PM_RUNTIME
825 pm_runtime_get_noresume(dev->otg.dev);
826 pm_runtime_resume(dev->otg.dev);
827#else
828 msm_otg_resume(dev);
829#endif
830}
831
832static void msm_otg_put_suspend(struct msm_otg *dev)
833{
834#ifdef CONFIG_PM_RUNTIME
835 pm_runtime_put_sync(dev->otg.dev);
836#else
837 msm_otg_suspend(dev);
838#endif
839}
840
841static void msm_otg_resume_w(struct work_struct *w)
842{
843 struct msm_otg *dev = container_of(w, struct msm_otg, otg_resume_work);
844 unsigned long timeout;
845
846 msm_otg_get_resume(dev);
847
848 if (!is_phy_clk_disabled())
849 goto phy_resumed;
850
851 timeout = jiffies + usecs_to_jiffies(100);
852 enable_phy_clk();
853 while (is_phy_clk_disabled() || !is_phy_active()) {
854 if (time_after(jiffies, timeout)) {
855 pr_err("%s: Unable to wakeup phy. is_phy_active: %x\n",
856 __func__, !!is_phy_active());
857 /* Reset both phy and link */
858 otg_reset(&dev->otg, 1);
859 break;
860 }
861 udelay(10);
862 }
863
864phy_resumed:
865 /* Enable Idabc interrupts as these were disabled before entering LPM */
866 enable_idabc(dev);
867
868 /* If resume signalling finishes before lpm exit, PCD is not set in
869 * USBSTS register. Drive resume signal to the downstream device now
870 * so that host driver can process the upcoming port change interrupt.*/
871 if (is_host() || test_bit(ID_A, &dev->inputs)) {
872 writel(readl(USB_PORTSC) | PORTSC_FPR, USB_PORTSC);
873 msm_otg_start_host(&dev->otg, REQUEST_RESUME);
874 }
875
876 /* Enable irq which was disabled before scheduling this work.
877 * But don't release wake_lock, as we got async interrupt and
878 * there will be some work pending for OTG state machine.
879 */
880 enable_irq(dev->irq);
881}
882
883static int msm_otg_set_suspend(struct otg_transceiver *xceiv, int suspend)
884{
885 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
886 enum usb_otg_state state;
887 unsigned long flags;
888
889 if (!dev || (dev != the_msm_otg))
890 return -ENODEV;
891
892 spin_lock_irqsave(&dev->lock, flags);
893 state = dev->otg.state;
894 spin_unlock_irqrestore(&dev->lock, flags);
895
896 pr_debug("suspend request in state: %s\n",
897 state_string(state));
898
899 if (suspend) {
900 switch (state) {
901#ifndef CONFIG_MSM_OTG_ENABLE_A_WAIT_BCON_TIMEOUT
902 case OTG_STATE_A_WAIT_BCON:
903 if (test_bit(ID_A, &dev->inputs))
904 msm_otg_set_power(xceiv, USB_IDCHG_MIN - 100);
905 msm_otg_put_suspend(dev);
906 break;
907#endif
908 case OTG_STATE_A_HOST:
909 clear_bit(A_BUS_REQ, &dev->inputs);
910 wake_lock(&dev->wlock);
911 queue_work(dev->wq, &dev->sm_work);
912 break;
913 case OTG_STATE_B_PERIPHERAL:
914 if (xceiv->gadget->b_hnp_enable) {
915 set_bit(A_BUS_SUSPEND, &dev->inputs);
916 set_bit(B_BUS_REQ, &dev->inputs);
917 wake_lock(&dev->wlock);
918 queue_work(dev->wq, &dev->sm_work);
919 }
920 break;
921 case OTG_STATE_A_PERIPHERAL:
922 msm_otg_start_timer(dev, TA_BIDL_ADIS,
923 A_BIDL_ADIS);
924 break;
925 default:
926 break;
927 }
928 } else {
929 unsigned long timeout;
930
931 switch (state) {
932 case OTG_STATE_A_PERIPHERAL:
933 /* A-peripheral observed activity on bus.
934 * clear A_BIDL_ADIS timer.
935 */
936 msm_otg_del_timer(dev);
937 break;
938 case OTG_STATE_A_SUSPEND:
939 /* Remote wakeup or resume */
940 set_bit(A_BUS_REQ, &dev->inputs);
941 spin_lock_irqsave(&dev->lock, flags);
942 dev->otg.state = OTG_STATE_A_HOST;
943 spin_unlock_irqrestore(&dev->lock, flags);
944 if (test_bit(ID_A, &dev->inputs) &&
945 (get_aca_bmaxpower(dev) < USB_IDCHG_MIN))
946 msm_otg_set_power(xceiv,
947 USB_IDCHG_MIN - get_aca_bmaxpower(dev));
948 break;
949 default:
950 break;
951 }
952
953 if (suspend == atomic_read(&dev->in_lpm))
954 return 0;
955
956 disable_irq(dev->irq);
957 if (dev->pmic_vbus_notif_supp)
958 if (can_phy_power_collapse(dev) &&
959 dev->pdata->ldo_enable)
960 dev->pdata->ldo_enable(1);
961
962 msm_otg_get_resume(dev);
963
964 if (!is_phy_clk_disabled())
965 goto out;
966
967 timeout = jiffies + usecs_to_jiffies(100);
968 enable_phy_clk();
969 while (is_phy_clk_disabled() || !is_phy_active()) {
970 if (time_after(jiffies, timeout)) {
971 pr_err("%s: Unable to wakeup phy. "
972 "is_phy_active: %x\n",
973 __func__, !!is_phy_active());
974 /* Reset both phy and link */
975 otg_reset(&dev->otg, 1);
976 break;
977 }
978 udelay(10);
979 }
980out:
981 enable_idabc(dev);
982 enable_irq(dev->irq);
983
984 }
985
986 return 0;
987}
988
989static int msm_otg_set_peripheral(struct otg_transceiver *xceiv,
990 struct usb_gadget *gadget)
991{
992 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
993
994 if (!dev || (dev != the_msm_otg))
995 return -ENODEV;
996
997 if (!gadget) {
998 msm_otg_start_peripheral(xceiv, 0);
999 dev->otg.gadget = 0;
1000 disable_sess_valid(dev);
1001 if (!dev->otg.host)
1002 disable_idabc(dev);
1003 return 0;
1004 }
1005 dev->otg.gadget = gadget;
1006 pr_info("peripheral driver registered w/ tranceiver\n");
1007
1008 wake_lock(&dev->wlock);
1009 queue_work(dev->wq, &dev->sm_work);
1010 return 0;
1011}
1012
1013#ifdef CONFIG_USB_EHCI_MSM_72K
1014static int usbdev_notify(struct notifier_block *self,
1015 unsigned long action, void *device)
1016{
1017 enum usb_otg_state state;
1018 struct msm_otg *dev = container_of(self, struct msm_otg, usbdev_nb);
1019 struct usb_device *udev = device;
1020 int work = 1;
1021 unsigned long flags;
1022
1023 /* Interested in only devices directly connected
1024 * to root hub directly.
1025 */
1026 if (!udev->parent || udev->parent->parent)
1027 goto out;
1028
1029 spin_lock_irqsave(&dev->lock, flags);
1030 state = dev->otg.state;
1031 spin_unlock_irqrestore(&dev->lock, flags);
1032
1033 switch (state) {
1034 case OTG_STATE_A_WAIT_BCON:
1035 if (action == USB_DEVICE_ADD) {
1036 pr_debug("B_CONN set\n");
1037 set_bit(B_CONN, &dev->inputs);
1038 if (udev->actconfig) {
1039 set_aca_bmaxpower(dev,
1040 udev->actconfig->desc.bMaxPower * 2);
1041 goto do_work;
1042 }
1043 if (udev->portnum == udev->bus->otg_port)
1044 set_aca_bmaxpower(dev, USB_IB_UNCFG);
1045 else
1046 set_aca_bmaxpower(dev, 100);
1047 }
1048 break;
1049 case OTG_STATE_A_HOST:
1050 if (action == USB_DEVICE_REMOVE) {
1051 pr_debug("B_CONN clear\n");
1052 clear_bit(B_CONN, &dev->inputs);
1053 set_aca_bmaxpower(dev, 0);
1054 }
1055 break;
1056 default:
1057 work = 0;
1058 break;
1059 }
1060do_work:
1061 if (work) {
1062 wake_lock(&dev->wlock);
1063 queue_work(dev->wq, &dev->sm_work);
1064 }
1065out:
1066 return NOTIFY_OK;
1067}
1068
1069static int msm_otg_set_host(struct otg_transceiver *xceiv, struct usb_bus *host)
1070{
1071 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
1072
1073 if (!dev || (dev != the_msm_otg))
1074 return -ENODEV;
1075
1076 if (!dev->start_host)
1077 return -ENODEV;
1078
1079 if (!host) {
1080 msm_otg_start_host(xceiv, REQUEST_STOP);
1081 usb_unregister_notify(&dev->usbdev_nb);
1082 dev->otg.host = 0;
1083 dev->start_host = 0;
1084 disable_idgnd(dev);
1085 if (!dev->otg.gadget)
1086 disable_idabc(dev);
1087 return 0;
1088 }
1089#ifdef CONFIG_USB_OTG
1090 host->otg_port = 1;
1091#endif
1092 dev->usbdev_nb.notifier_call = usbdev_notify;
1093 usb_register_notify(&dev->usbdev_nb);
1094 dev->otg.host = host;
1095 pr_info("host driver registered w/ tranceiver\n");
1096
1097#ifndef CONFIG_USB_MSM_72K
1098 wake_lock(&dev->wlock);
1099 queue_work(dev->wq, &dev->sm_work);
1100#endif
1101 return 0;
1102}
1103#endif
1104
1105void msm_otg_set_id_state(int id)
1106{
1107 struct msm_otg *dev = the_msm_otg;
1108 unsigned long flags;
1109
1110 if (id == dev->pmic_id_status)
1111 return;
1112
1113 if (id) {
1114 set_bit(ID, &dev->inputs);
1115 dev->pmic_id_status = 1;
1116 } else {
1117 clear_bit(ID, &dev->inputs);
1118 set_bit(A_BUS_REQ, &dev->inputs);
1119 dev->pmic_id_status = 0;
1120 }
1121 spin_lock_irqsave(&dev->lock, flags);
1122 if (dev->otg.state != OTG_STATE_UNDEFINED) {
1123 wake_lock(&dev->wlock);
1124 queue_work(dev->wq, &dev->sm_work);
1125 }
1126 spin_unlock_irqrestore(&dev->lock, flags);
1127}
1128
1129void msm_otg_set_vbus_state(int online)
1130{
1131 struct msm_otg *dev = the_msm_otg;
1132
1133 if (!atomic_read(&dev->in_lpm) || !online)
1134 return;
1135
1136 wake_lock(&dev->wlock);
1137 set_bit(B_SESS_VLD, &dev->inputs);
1138 queue_work(dev->wq, &dev->sm_work);
1139}
1140
1141static irqreturn_t msm_otg_irq(int irq, void *data)
1142{
1143 struct msm_otg *dev = data;
1144 u32 otgsc, sts, pc, sts_mask;
1145 irqreturn_t ret = IRQ_HANDLED;
1146 int work = 0;
1147 enum usb_otg_state state;
1148 unsigned long flags;
1149
1150 if (atomic_read(&dev->in_lpm)) {
1151 disable_irq_nosync(dev->irq);
1152 wake_lock(&dev->wlock);
1153 queue_work(dev->wq, &dev->otg_resume_work);
1154 goto out;
1155 }
1156
1157 /* Return immediately if instead of ID pin, USER controls mode switch */
1158 if (dev->pdata->otg_mode == OTG_USER_CONTROL)
1159 return IRQ_NONE;
1160
1161
1162 otgsc = readl(USB_OTGSC);
1163 sts = readl(USB_USBSTS);
1164
1165 sts_mask = (otgsc & OTGSC_INTR_MASK) >> 8;
1166
1167 if (!((otgsc & sts_mask) || (sts & STS_PCI))) {
1168 ret = IRQ_NONE;
1169 goto out;
1170 }
1171
1172 spin_lock_irqsave(&dev->lock, flags);
1173 state = dev->otg.state;
1174 spin_unlock_irqrestore(&dev->lock, flags);
1175
1176 pr_debug("IRQ state: %s\n", state_string(state));
1177 pr_debug("otgsc = %x\n", otgsc);
1178
1179 if ((otgsc & OTGSC_IDIE) && (otgsc & OTGSC_IDIS)) {
1180 if (otgsc & OTGSC_ID) {
1181 pr_debug("Id set\n");
1182 set_bit(ID, &dev->inputs);
1183 } else {
1184 pr_debug("Id clear\n");
1185 /* Assert a_bus_req to supply power on
1186 * VBUS when Micro/Mini-A cable is connected
1187 * with out user intervention.
1188 */
1189 set_bit(A_BUS_REQ, &dev->inputs);
1190 clear_bit(ID, &dev->inputs);
1191 }
1192 writel(otgsc, USB_OTGSC);
1193 work = 1;
1194 } else if (otgsc & OTGSC_BSVIS) {
1195 writel(otgsc, USB_OTGSC);
1196 /* BSV interrupt comes when operating as an A-device
1197 * (VBUS on/off).
1198 * But, handle BSV when charger is removed from ACA in ID_A
1199 */
1200 if ((state >= OTG_STATE_A_IDLE) &&
1201 !test_bit(ID_A, &dev->inputs))
1202 goto out;
1203 if (otgsc & OTGSC_BSV) {
1204 pr_debug("BSV set\n");
1205 set_bit(B_SESS_VLD, &dev->inputs);
1206 } else {
1207 pr_debug("BSV clear\n");
1208 clear_bit(B_SESS_VLD, &dev->inputs);
1209 }
1210 work = 1;
1211 } else if (otgsc & OTGSC_DPIS) {
1212 pr_debug("DPIS detected\n");
1213 writel(otgsc, USB_OTGSC);
1214 set_bit(A_SRP_DET, &dev->inputs);
1215 set_bit(A_BUS_REQ, &dev->inputs);
1216 work = 1;
1217 } else if (sts & STS_PCI) {
1218 pc = readl(USB_PORTSC);
1219 pr_debug("portsc = %x\n", pc);
1220 ret = IRQ_NONE;
1221 /* HCD Acks PCI interrupt. We use this to switch
1222 * between different OTG states.
1223 */
1224 work = 1;
1225 switch (state) {
1226 case OTG_STATE_A_SUSPEND:
1227 if (dev->otg.host->b_hnp_enable && (pc & PORTSC_CSC) &&
1228 !(pc & PORTSC_CCS)) {
1229 pr_debug("B_CONN clear\n");
1230 clear_bit(B_CONN, &dev->inputs);
1231 }
1232 break;
1233 case OTG_STATE_B_WAIT_ACON:
1234 if ((pc & PORTSC_CSC) && (pc & PORTSC_CCS)) {
1235 pr_debug("A_CONN set\n");
1236 set_bit(A_CONN, &dev->inputs);
1237 /* Clear ASE0_BRST timer */
1238 msm_otg_del_timer(dev);
1239 }
1240 break;
1241 case OTG_STATE_B_HOST:
1242 if ((pc & PORTSC_CSC) && !(pc & PORTSC_CCS)) {
1243 pr_debug("A_CONN clear\n");
1244 clear_bit(A_CONN, &dev->inputs);
1245 }
1246 break;
1247 default:
1248 work = 0;
1249 break;
1250 }
1251 }
1252 if (work) {
1253#ifdef CONFIG_USB_MSM_ACA
1254 /* With ACA, ID can change bcoz of BSVIS as well, so update */
1255 if ((otgsc & OTGSC_IDIS) || (otgsc & OTGSC_BSVIS))
1256 set_aca_id_inputs(dev);
1257#endif
1258 wake_lock(&dev->wlock);
1259 queue_work(dev->wq, &dev->sm_work);
1260 }
1261out:
1262 return ret;
1263}
1264
1265#define ULPI_VERIFY_MAX_LOOP_COUNT 5
1266#define PHY_CALIB_RETRY_COUNT 10
1267static void phy_clk_reset(struct msm_otg *dev)
1268{
1269 unsigned rc;
1270 enum clk_reset_action assert = CLK_RESET_ASSERT;
1271
1272 if (dev->pdata->phy_reset_sig_inverted)
1273 assert = CLK_RESET_DEASSERT;
1274
1275 rc = clk_reset(dev->phy_reset_clk, assert);
1276 if (rc) {
1277 pr_err("%s: phy clk assert failed\n", __func__);
1278 return;
1279 }
1280
1281 msleep(1);
1282
1283 rc = clk_reset(dev->phy_reset_clk, !assert);
1284 if (rc) {
1285 pr_err("%s: phy clk deassert failed\n", __func__);
1286 return;
1287 }
1288
1289 msleep(1);
1290}
1291
1292static unsigned ulpi_read_with_reset(struct msm_otg *dev, unsigned reg)
1293{
1294 int temp;
1295 unsigned res;
1296
1297 for (temp = 0; temp < ULPI_VERIFY_MAX_LOOP_COUNT; temp++) {
1298 res = ulpi_read(dev, reg);
1299 if (res != 0xffffffff)
1300 return res;
1301
1302 phy_clk_reset(dev);
1303 }
1304
1305 pr_err("%s: ulpi read failed for %d times\n",
1306 __func__, ULPI_VERIFY_MAX_LOOP_COUNT);
1307
1308 return -1;
1309}
1310
1311static int ulpi_write_with_reset(struct msm_otg *dev,
1312unsigned val, unsigned reg)
1313{
1314 int temp, res;
1315
1316 for (temp = 0; temp < ULPI_VERIFY_MAX_LOOP_COUNT; temp++) {
1317 res = ulpi_write(dev, val, reg);
1318 if (!res)
1319 return 0;
1320 phy_clk_reset(dev);
1321 }
1322 pr_err("%s: ulpi write failed for %d times\n",
1323 __func__, ULPI_VERIFY_MAX_LOOP_COUNT);
1324
1325 return -1;
1326}
1327
1328/* some of the older targets does not turn off the PLL
1329 * if onclock bit is set and clocksuspendM bit is on,
1330 * hence clear them too and initiate the suspend mode
1331 * by clearing SupendM bit.
1332 */
1333static inline int turn_off_phy_pll(struct msm_otg *dev)
1334{
1335 unsigned res;
1336
1337 res = ulpi_read_with_reset(dev, ULPI_CONFIG_REG1);
1338 if (res == 0xffffffff)
1339 return -ETIMEDOUT;
1340
1341 res = ulpi_write_with_reset(dev,
1342 res & ~(ULPI_ONCLOCK), ULPI_CONFIG_REG1);
1343 if (res)
1344 return -ETIMEDOUT;
1345
1346 res = ulpi_write_with_reset(dev,
1347 ULPI_CLOCK_SUSPENDM, ULPI_IFC_CTRL_CLR);
1348 if (res)
1349 return -ETIMEDOUT;
1350
1351 /*Clear SuspendM bit to initiate suspend mode */
1352 res = ulpi_write_with_reset(dev,
1353 ULPI_SUSPENDM, ULPI_FUNC_CTRL_CLR);
1354 if (res)
1355 return -ETIMEDOUT;
1356
1357 return res;
1358}
1359
1360static inline int check_phy_caliberation(struct msm_otg *dev)
1361{
1362 unsigned res;
1363
1364 res = ulpi_read_with_reset(dev, ULPI_DEBUG);
1365
1366 if (res == 0xffffffff)
1367 return -ETIMEDOUT;
1368
1369 if (!(res & ULPI_CALIB_STS) && ULPI_CALIB_VAL(res))
1370 return 0;
1371
1372 return -1;
1373}
1374
1375static int msm_otg_phy_caliberate(struct msm_otg *dev)
1376{
1377 int i = 0;
1378 unsigned long res;
1379
1380 do {
1381 res = turn_off_phy_pll(dev);
1382 if (res)
1383 return -ETIMEDOUT;
1384
1385 /* bring phy out of suspend */
1386 phy_clk_reset(dev);
1387
1388 res = check_phy_caliberation(dev);
1389 if (!res)
1390 return res;
1391 i++;
1392
1393 } while (i < PHY_CALIB_RETRY_COUNT);
1394
1395 return res;
1396}
1397
1398static int msm_otg_phy_reset(struct msm_otg *dev)
1399{
1400 unsigned rc;
1401 unsigned temp;
1402 unsigned long timeout;
1403
1404 rc = clk_reset(dev->hs_clk, CLK_RESET_ASSERT);
1405 if (rc) {
1406 pr_err("%s: usb hs clk assert failed\n", __func__);
1407 return -1;
1408 }
1409
1410 phy_clk_reset(dev);
1411
1412 rc = clk_reset(dev->hs_clk, CLK_RESET_DEASSERT);
1413 if (rc) {
1414 pr_err("%s: usb hs clk deassert failed\n", __func__);
1415 return -1;
1416 }
1417 /* Observing ulpi timeouts as part of PHY calibration. On resetting
1418 * the HW link explicity by setting the RESET bit in the USBCMD
1419 * register before PHY calibration fixes the ulpi timeout issue.
1420 * This workaround is required for unicorn target
1421 */
1422 writel_relaxed(USBCMD_RESET, USB_USBCMD);
1423 timeout = jiffies + USB_LINK_RESET_TIMEOUT;
1424 do {
1425 if (time_after(jiffies, timeout)) {
1426 pr_err("msm_otg: usb link reset timeout\n");
1427 break;
1428 }
1429 usleep_range(1000, 1200);
1430 } while (readl_relaxed(USB_USBCMD) & USBCMD_RESET);
1431
1432 /* select ULPI phy */
1433 temp = (readl(USB_PORTSC) & ~PORTSC_PTS);
1434 writel(temp | PORTSC_PTS_ULPI, USB_PORTSC);
1435
1436 if (atomic_read(&dev->chg_type) !=
1437 USB_CHG_TYPE__WALLCHARGER) {
1438 rc = msm_otg_phy_caliberate(dev);
1439 if (rc)
1440 return rc;
1441 }
1442
1443 /* TBD: There are two link resets. One is below and other one
1444 * is done immediately after this function. See if we can
1445 * eliminate one of these.
1446 */
1447 writel(USBCMD_RESET, USB_USBCMD);
1448 timeout = jiffies + USB_LINK_RESET_TIMEOUT;
1449 do {
1450 if (time_after(jiffies, timeout)) {
1451 pr_err("msm_otg: usb link reset timeout\n");
1452 break;
1453 }
1454 msleep(1);
1455 } while (readl(USB_USBCMD) & USBCMD_RESET);
1456
1457 if (readl(USB_USBCMD) & USBCMD_RESET) {
1458 pr_err("%s: usb core reset failed\n", __func__);
1459 return -1;
1460 }
1461
1462 return 0;
1463}
1464
1465static void otg_reset(struct otg_transceiver *xceiv, int phy_reset)
1466{
1467 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
1468 unsigned long timeout;
1469 u32 mode, work = 0;
1470
1471 clk_enable(dev->hs_clk);
1472
1473 if (!phy_reset)
1474 goto reset_link;
1475
1476 if (dev->pdata->phy_reset)
1477 dev->pdata->phy_reset(dev->regs);
1478 else
1479 msm_otg_phy_reset(dev);
1480
1481 /*disable all phy interrupts*/
1482 ulpi_write(dev, 0xFF, 0x0F);
1483 ulpi_write(dev, 0xFF, 0x12);
1484 msleep(100);
1485
1486reset_link:
1487 writel(USBCMD_RESET, USB_USBCMD);
1488 timeout = jiffies + USB_LINK_RESET_TIMEOUT;
1489 do {
1490 if (time_after(jiffies, timeout)) {
1491 pr_err("msm_otg: usb link reset timeout\n");
1492 break;
1493 }
1494 msleep(1);
1495 } while (readl(USB_USBCMD) & USBCMD_RESET);
1496
1497 /* select ULPI phy */
1498 writel(0x80000000, USB_PORTSC);
1499
1500 set_pre_emphasis_level(dev);
1501 set_hsdrv_slope(dev);
1502 set_cdr_auto_reset(dev);
1503 set_driver_amplitude(dev);
1504 set_se1_gating(dev);
1505
1506 writel(0x0, USB_AHB_BURST);
1507 writel(0x00, USB_AHB_MODE);
Chandra Devireddyb3fc78c2011-08-30 17:25:55 +05301508 if (dev->pdata->bam_disable) {
1509 writel_relaxed((readl_relaxed(USB_GEN_CONFIG) |
1510 USB_BAM_DISABLE), USB_GEN_CONFIG);
1511 pr_debug("%s(): USB_GEN_CONFIG = %x\n",
1512 __func__, readl_relaxed(USB_GEN_CONFIG));
1513 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001514 /* Ensure that RESET operation is completed before turning off clock */
1515 mb();
1516
1517 clk_disable(dev->hs_clk);
1518
1519 if ((xceiv->gadget && xceiv->gadget->is_a_peripheral) ||
1520 test_bit(ID, &dev->inputs))
1521 mode = USBMODE_SDIS | USBMODE_DEVICE;
1522 else
1523 mode = USBMODE_SDIS | USBMODE_HOST;
1524 writel(mode, USB_USBMODE);
1525
1526 writel_relaxed((readl_relaxed(USB_OTGSC) | OTGSC_IDPU), USB_OTGSC);
1527 if (dev->otg.gadget) {
1528 enable_sess_valid(dev);
1529 /* Due to the above 100ms delay, interrupts from PHY are
1530 * sometimes missed during fast plug-in/plug-out of cable.
1531 * Check for such cases here.
1532 */
1533 if (is_b_sess_vld() && !test_bit(B_SESS_VLD, &dev->inputs)) {
1534 pr_debug("%s: handle missing BSV event\n", __func__);
1535 set_bit(B_SESS_VLD, &dev->inputs);
1536 work = 1;
1537 } else if (!is_b_sess_vld() && test_bit(B_SESS_VLD,
1538 &dev->inputs)) {
1539 pr_debug("%s: handle missing !BSV event\n", __func__);
1540 clear_bit(B_SESS_VLD, &dev->inputs);
1541 work = 1;
1542 }
1543 }
1544
1545#ifdef CONFIG_USB_EHCI_MSM_72K
1546 if (dev->otg.host && !dev->pmic_id_notif_supp) {
1547 enable_idgnd(dev);
1548 /* Handle missing ID_GND interrupts during fast PIPO */
1549 if (is_host() && test_bit(ID, &dev->inputs)) {
1550 pr_debug("%s: handle missing ID_GND event\n", __func__);
1551 clear_bit(ID, &dev->inputs);
1552 work = 1;
1553 } else if (!is_host() && !test_bit(ID, &dev->inputs)) {
1554 pr_debug("%s: handle missing !ID_GND event\n",
1555 __func__);
1556 set_bit(ID, &dev->inputs);
1557 work = 1;
1558 }
1559 } else {
1560 disable_idgnd(dev);
1561 }
1562#endif
1563
1564 enable_idabc(dev);
1565
1566 if (work) {
1567 wake_lock(&dev->wlock);
1568 queue_work(dev->wq, &dev->sm_work);
1569 }
1570}
1571
1572static void msm_otg_sm_work(struct work_struct *w)
1573{
1574 struct msm_otg *dev = container_of(w, struct msm_otg, sm_work);
1575 enum chg_type chg_type = atomic_read(&dev->chg_type);
1576 int ret;
1577 int work = 0;
1578 enum usb_otg_state state;
1579 unsigned long flags;
1580
1581 if (atomic_read(&dev->in_lpm))
1582 msm_otg_set_suspend(&dev->otg, 0);
1583
1584 spin_lock_irqsave(&dev->lock, flags);
1585 state = dev->otg.state;
1586 spin_unlock_irqrestore(&dev->lock, flags);
1587
1588 switch (state) {
1589 case OTG_STATE_UNDEFINED:
1590
1591 /*
1592 * We can come here when LPM fails with wall charger
1593 * connected. Increment the PM usage counter to reflect
1594 * the actual device state. Change the state to
1595 * B_PERIPHERAL and schedule the work which takes care
1596 * of resetting the PHY and putting the hardware in
1597 * low power mode.
1598 */
1599 if (atomic_read(&dev->chg_type) ==
1600 USB_CHG_TYPE__WALLCHARGER) {
1601 msm_otg_get_resume(dev);
1602 spin_lock_irqsave(&dev->lock, flags);
1603 dev->otg.state = OTG_STATE_B_PERIPHERAL;
1604 spin_unlock_irqrestore(&dev->lock, flags);
1605 work = 1;
1606 break;
1607 }
1608
1609 /* Reset both phy and link */
1610 otg_reset(&dev->otg, 1);
1611
1612#ifdef CONFIG_USB_MSM_ACA
1613 set_aca_id_inputs(dev);
1614#endif
1615 if (dev->pdata->otg_mode == OTG_USER_CONTROL) {
1616 if ((dev->pdata->usb_mode == USB_PERIPHERAL_MODE) ||
1617 !dev->otg.host) {
1618 set_bit(ID, &dev->inputs);
1619 set_bit(B_SESS_VLD, &dev->inputs);
1620 }
1621 } else {
1622 if (!dev->otg.host || !is_host())
1623 set_bit(ID, &dev->inputs);
1624
1625 if (dev->otg.gadget && is_b_sess_vld())
1626 set_bit(B_SESS_VLD, &dev->inputs);
1627 }
1628 spin_lock_irqsave(&dev->lock, flags);
1629 if ((test_bit(ID, &dev->inputs)) &&
1630 !test_bit(ID_A, &dev->inputs)) {
1631 dev->otg.state = OTG_STATE_B_IDLE;
1632 } else {
1633 set_bit(A_BUS_REQ, &dev->inputs);
1634 dev->otg.state = OTG_STATE_A_IDLE;
1635 }
1636 spin_unlock_irqrestore(&dev->lock, flags);
1637
1638 work = 1;
1639 break;
1640 case OTG_STATE_B_IDLE:
1641 dev->otg.default_a = 0;
1642 if (!test_bit(ID, &dev->inputs) ||
1643 test_bit(ID_A, &dev->inputs)) {
1644 pr_debug("!id || id_A\n");
1645 clear_bit(B_BUS_REQ, &dev->inputs);
1646 otg_reset(&dev->otg, 0);
1647
1648 spin_lock_irqsave(&dev->lock, flags);
1649 dev->otg.state = OTG_STATE_A_IDLE;
1650 spin_unlock_irqrestore(&dev->lock, flags);
1651 msm_otg_set_power(&dev->otg, 0);
1652 work = 1;
1653 } else if (test_bit(B_SESS_VLD, &dev->inputs) &&
1654 !test_bit(ID_B, &dev->inputs)) {
1655 pr_debug("b_sess_vld\n");
1656 spin_lock_irqsave(&dev->lock, flags);
1657 dev->otg.state = OTG_STATE_B_PERIPHERAL;
1658 spin_unlock_irqrestore(&dev->lock, flags);
1659 msm_otg_set_power(&dev->otg, 0);
1660 msm_otg_start_peripheral(&dev->otg, 1);
1661 } else if (test_bit(B_BUS_REQ, &dev->inputs)) {
1662 pr_debug("b_sess_end && b_bus_req\n");
1663 ret = msm_otg_start_srp(&dev->otg);
1664 if (ret < 0) {
1665 /* notify user space */
1666 clear_bit(B_BUS_REQ, &dev->inputs);
1667 work = 1;
1668 break;
1669 }
1670 spin_lock_irqsave(&dev->lock, flags);
1671 dev->otg.state = OTG_STATE_B_SRP_INIT;
1672 spin_unlock_irqrestore(&dev->lock, flags);
1673 msm_otg_start_timer(dev, TB_SRP_FAIL, B_SRP_FAIL);
1674 break;
1675 } else if (test_bit(ID_B, &dev->inputs)) {
1676 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1677 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1678 } else {
1679 msm_otg_set_power(&dev->otg, 0);
1680 pr_debug("entering into lpm\n");
1681 msm_otg_put_suspend(dev);
1682
1683 if (dev->pdata->ldo_set_voltage)
1684 dev->pdata->ldo_set_voltage(3075);
1685 }
1686 break;
1687 case OTG_STATE_B_SRP_INIT:
1688 if (!test_bit(ID, &dev->inputs) ||
1689 test_bit(ID_A, &dev->inputs) ||
1690 test_bit(ID_C, &dev->inputs) ||
1691 (test_bit(B_SESS_VLD, &dev->inputs) &&
1692 !test_bit(ID_B, &dev->inputs))) {
1693 pr_debug("!id || id_a/c || b_sess_vld+!id_b\n");
1694 msm_otg_del_timer(dev);
1695 spin_lock_irqsave(&dev->lock, flags);
1696 dev->otg.state = OTG_STATE_B_IDLE;
1697 spin_unlock_irqrestore(&dev->lock, flags);
1698 work = 1;
1699 } else if (test_bit(B_SRP_FAIL, &dev->tmouts)) {
1700 pr_debug("b_srp_fail\n");
1701 /* notify user space */
1702 msm_otg_send_event(&dev->otg,
1703 OTG_EVENT_NO_RESP_FOR_SRP);
1704 clear_bit(B_BUS_REQ, &dev->inputs);
1705 clear_bit(B_SRP_FAIL, &dev->tmouts);
1706 spin_lock_irqsave(&dev->lock, flags);
1707 dev->otg.state = OTG_STATE_B_IDLE;
1708 spin_unlock_irqrestore(&dev->lock, flags);
1709 dev->b_last_se0_sess = jiffies;
1710 work = 1;
1711 }
1712 break;
1713 case OTG_STATE_B_PERIPHERAL:
1714 if (!test_bit(ID, &dev->inputs) ||
1715 test_bit(ID_A, &dev->inputs) ||
1716 test_bit(ID_B, &dev->inputs) ||
1717 !test_bit(B_SESS_VLD, &dev->inputs)) {
1718 pr_debug("!id || id_a/b || !b_sess_vld\n");
1719 clear_bit(B_BUS_REQ, &dev->inputs);
1720 spin_lock_irqsave(&dev->lock, flags);
1721 dev->otg.state = OTG_STATE_B_IDLE;
1722 spin_unlock_irqrestore(&dev->lock, flags);
1723 msm_otg_start_peripheral(&dev->otg, 0);
1724 dev->b_last_se0_sess = jiffies;
1725
1726 /* Workaround: Reset phy after session */
1727 otg_reset(&dev->otg, 1);
1728 work = 1;
1729 } else if (test_bit(B_BUS_REQ, &dev->inputs) &&
1730 dev->otg.gadget->b_hnp_enable &&
1731 test_bit(A_BUS_SUSPEND, &dev->inputs)) {
1732 pr_debug("b_bus_req && b_hnp_en && a_bus_suspend\n");
1733 msm_otg_start_timer(dev, TB_ASE0_BRST, B_ASE0_BRST);
1734 msm_otg_start_peripheral(&dev->otg, 0);
1735 spin_lock_irqsave(&dev->lock, flags);
1736 dev->otg.state = OTG_STATE_B_WAIT_ACON;
1737 spin_unlock_irqrestore(&dev->lock, flags);
1738 /* start HCD even before A-device enable
1739 * pull-up to meet HNP timings.
1740 */
1741 dev->otg.host->is_b_host = 1;
1742 msm_otg_start_host(&dev->otg, REQUEST_START);
1743
1744 } else if (test_bit(ID_C, &dev->inputs)) {
1745 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1746 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1747 } else if (chg_type == USB_CHG_TYPE__WALLCHARGER) {
1748#ifdef CONFIG_USB_MSM_ACA
1749 del_timer_sync(&dev->id_timer);
1750#endif
1751 /* Workaround: Reset PHY in SE1 state */
1752 otg_reset(&dev->otg, 1);
1753 pr_debug("entering into lpm with wall-charger\n");
1754 msm_otg_put_suspend(dev);
1755 /* Allow idle power collapse */
1756 otg_pm_qos_update_latency(dev, 0);
1757 }
1758 break;
1759 case OTG_STATE_B_WAIT_ACON:
1760 if (!test_bit(ID, &dev->inputs) ||
1761 test_bit(ID_A, &dev->inputs) ||
1762 test_bit(ID_B, &dev->inputs) ||
1763 !test_bit(B_SESS_VLD, &dev->inputs)) {
1764 pr_debug("!id || id_a/b || !b_sess_vld\n");
1765 msm_otg_del_timer(dev);
1766 /* A-device is physically disconnected during
1767 * HNP. Remove HCD.
1768 */
1769 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1770 dev->otg.host->is_b_host = 0;
1771
1772 clear_bit(B_BUS_REQ, &dev->inputs);
1773 clear_bit(A_BUS_SUSPEND, &dev->inputs);
1774 dev->b_last_se0_sess = jiffies;
1775 spin_lock_irqsave(&dev->lock, flags);
1776 dev->otg.state = OTG_STATE_B_IDLE;
1777 spin_unlock_irqrestore(&dev->lock, flags);
1778
1779 /* Workaround: Reset phy after session */
1780 otg_reset(&dev->otg, 1);
1781 work = 1;
1782 } else if (test_bit(A_CONN, &dev->inputs)) {
1783 pr_debug("a_conn\n");
1784 clear_bit(A_BUS_SUSPEND, &dev->inputs);
1785 spin_lock_irqsave(&dev->lock, flags);
1786 dev->otg.state = OTG_STATE_B_HOST;
1787 spin_unlock_irqrestore(&dev->lock, flags);
1788 if (test_bit(ID_C, &dev->inputs)) {
1789 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1790 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1791 }
1792 } else if (test_bit(B_ASE0_BRST, &dev->tmouts)) {
1793 /* TODO: A-device may send reset after
1794 * enabling HNP; a_bus_resume case is
1795 * not handled for now.
1796 */
1797 pr_debug("b_ase0_brst_tmout\n");
1798 msm_otg_send_event(&dev->otg,
1799 OTG_EVENT_HNP_FAILED);
1800 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1801 dev->otg.host->is_b_host = 0;
1802 clear_bit(B_ASE0_BRST, &dev->tmouts);
1803 clear_bit(A_BUS_SUSPEND, &dev->inputs);
1804 clear_bit(B_BUS_REQ, &dev->inputs);
1805
1806 spin_lock_irqsave(&dev->lock, flags);
1807 dev->otg.state = OTG_STATE_B_PERIPHERAL;
1808 spin_unlock_irqrestore(&dev->lock, flags);
1809 msm_otg_start_peripheral(&dev->otg, 1);
1810 } else if (test_bit(ID_C, &dev->inputs)) {
1811 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1812 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1813 }
1814 break;
1815 case OTG_STATE_B_HOST:
1816 /* B_BUS_REQ is not exposed to user space. So
1817 * it must be A_CONN for now.
1818 */
1819 if (!test_bit(B_BUS_REQ, &dev->inputs) ||
1820 !test_bit(A_CONN, &dev->inputs)) {
1821 pr_debug("!b_bus_req || !a_conn\n");
1822 clear_bit(A_CONN, &dev->inputs);
1823 clear_bit(B_BUS_REQ, &dev->inputs);
1824
1825 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1826 dev->otg.host->is_b_host = 0;
1827
1828 spin_lock_irqsave(&dev->lock, flags);
1829 dev->otg.state = OTG_STATE_B_IDLE;
1830 spin_unlock_irqrestore(&dev->lock, flags);
1831 /* Workaround: Reset phy after session */
1832 otg_reset(&dev->otg, 1);
1833 work = 1;
1834 } else if (test_bit(ID_C, &dev->inputs)) {
1835 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1836 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1837 }
1838 break;
1839 case OTG_STATE_A_IDLE:
1840 dev->otg.default_a = 1;
1841 if (test_bit(ID, &dev->inputs) &&
1842 !test_bit(ID_A, &dev->inputs)) {
1843 pr_debug("id && !id_a\n");
1844 dev->otg.default_a = 0;
1845 otg_reset(&dev->otg, 0);
1846 spin_lock_irqsave(&dev->lock, flags);
1847 dev->otg.state = OTG_STATE_B_IDLE;
1848 spin_unlock_irqrestore(&dev->lock, flags);
1849 msm_otg_set_power(&dev->otg, 0);
1850 work = 1;
1851 } else if (!test_bit(A_BUS_DROP, &dev->inputs) &&
1852 (test_bit(A_SRP_DET, &dev->inputs) ||
1853 test_bit(A_BUS_REQ, &dev->inputs))) {
1854 pr_debug("!a_bus_drop && (a_srp_det || a_bus_req)\n");
1855
1856 clear_bit(A_SRP_DET, &dev->inputs);
1857 /* Disable SRP detection */
1858 writel((readl(USB_OTGSC) & ~OTGSC_INTR_STS_MASK) &
1859 ~OTGSC_DPIE, USB_OTGSC);
1860
1861 spin_lock_irqsave(&dev->lock, flags);
1862 dev->otg.state = OTG_STATE_A_WAIT_VRISE;
1863 spin_unlock_irqrestore(&dev->lock, flags);
1864 /* ACA: ID_A: Stop charging untill enumeration */
1865 if (test_bit(ID_A, &dev->inputs))
1866 msm_otg_set_power(&dev->otg, 0);
1867 else
1868 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
1869 msm_otg_start_timer(dev, TA_WAIT_VRISE, A_WAIT_VRISE);
1870 /* no need to schedule work now */
1871 } else {
1872 pr_debug("No session requested\n");
1873
1874 /* A-device is not providing power on VBUS.
1875 * Enable SRP detection.
1876 */
1877 writel((readl(USB_OTGSC) & ~OTGSC_INTR_STS_MASK) |
1878 OTGSC_DPIE, USB_OTGSC);
1879 msm_otg_put_suspend(dev);
1880
1881 }
1882 break;
1883 case OTG_STATE_A_WAIT_VRISE:
1884 if ((test_bit(ID, &dev->inputs) &&
1885 !test_bit(ID_A, &dev->inputs)) ||
1886 test_bit(A_BUS_DROP, &dev->inputs) ||
1887 test_bit(A_WAIT_VRISE, &dev->tmouts)) {
1888 pr_debug("id || a_bus_drop || a_wait_vrise_tmout\n");
1889 clear_bit(A_BUS_REQ, &dev->inputs);
1890 msm_otg_del_timer(dev);
1891 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1892 spin_lock_irqsave(&dev->lock, flags);
1893 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
1894 spin_unlock_irqrestore(&dev->lock, flags);
1895 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
1896 } else if (test_bit(A_VBUS_VLD, &dev->inputs)) {
1897 pr_debug("a_vbus_vld\n");
1898 spin_lock_irqsave(&dev->lock, flags);
1899 dev->otg.state = OTG_STATE_A_WAIT_BCON;
1900 spin_unlock_irqrestore(&dev->lock, flags);
1901 if (TA_WAIT_BCON > 0)
1902 msm_otg_start_timer(dev, TA_WAIT_BCON,
1903 A_WAIT_BCON);
1904 /* Start HCD to detect peripherals. */
1905 msm_otg_start_host(&dev->otg, REQUEST_START);
1906 }
1907 break;
1908 case OTG_STATE_A_WAIT_BCON:
1909 if ((test_bit(ID, &dev->inputs) &&
1910 !test_bit(ID_A, &dev->inputs)) ||
1911 test_bit(A_BUS_DROP, &dev->inputs) ||
1912 test_bit(A_WAIT_BCON, &dev->tmouts)) {
1913 pr_debug("id_f/b/c || a_bus_drop ||"
1914 "a_wait_bcon_tmout\n");
1915 if (test_bit(A_WAIT_BCON, &dev->tmouts))
1916 msm_otg_send_event(&dev->otg,
1917 OTG_EVENT_DEV_CONN_TMOUT);
1918 msm_otg_del_timer(dev);
1919 clear_bit(A_BUS_REQ, &dev->inputs);
1920 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1921 /* Reset both phy and link */
1922 otg_reset(&dev->otg, 1);
1923 /* ACA: ID_A with NO accessory, just the A plug is
1924 * attached to ACA: Use IDCHG_MAX for charging
1925 */
1926 if (test_bit(ID_A, &dev->inputs))
1927 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1928 else
1929 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1930 spin_lock_irqsave(&dev->lock, flags);
1931 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
1932 spin_unlock_irqrestore(&dev->lock, flags);
1933 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
1934 } else if (test_bit(B_CONN, &dev->inputs)) {
1935 pr_debug("b_conn\n");
1936 msm_otg_del_timer(dev);
1937 /* HCD is added already. just move to
1938 * A_HOST state.
1939 */
1940 spin_lock_irqsave(&dev->lock, flags);
1941 dev->otg.state = OTG_STATE_A_HOST;
1942 spin_unlock_irqrestore(&dev->lock, flags);
1943 if (test_bit(ID_A, &dev->inputs)) {
1944 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1945 msm_otg_set_power(&dev->otg,
1946 USB_IDCHG_MIN - get_aca_bmaxpower(dev));
1947 }
1948 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
1949 pr_debug("!a_vbus_vld\n");
1950 msm_otg_del_timer(dev);
1951 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1952 spin_lock_irqsave(&dev->lock, flags);
1953 dev->otg.state = OTG_STATE_A_VBUS_ERR;
1954 spin_unlock_irqrestore(&dev->lock, flags);
1955 /* Reset both phy and link */
1956 otg_reset(&dev->otg, 1);
1957 } else if (test_bit(ID_A, &dev->inputs)) {
1958 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1959 } else if (!test_bit(ID, &dev->inputs)) {
1960 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
1961 }
1962 break;
1963 case OTG_STATE_A_HOST:
1964 if ((test_bit(ID, &dev->inputs) &&
1965 !test_bit(ID_A, &dev->inputs)) ||
1966 test_bit(A_BUS_DROP, &dev->inputs)) {
1967 pr_debug("id_f/b/c || a_bus_drop\n");
1968 clear_bit(B_CONN, &dev->inputs);
1969 spin_lock_irqsave(&dev->lock, flags);
1970 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
1971 spin_unlock_irqrestore(&dev->lock, flags);
1972 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1973 /* Reset both phy and link */
1974 otg_reset(&dev->otg, 1);
1975 if (!test_bit(ID_A, &dev->inputs))
1976 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1977 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
1978 msm_otg_set_power(&dev->otg, 0);
1979 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
1980 pr_debug("!a_vbus_vld\n");
1981 clear_bit(B_CONN, &dev->inputs);
1982 spin_lock_irqsave(&dev->lock, flags);
1983 dev->otg.state = OTG_STATE_A_VBUS_ERR;
1984 spin_unlock_irqrestore(&dev->lock, flags);
1985 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1986 /* Reset both phy and link */
1987 otg_reset(&dev->otg, 1);
1988 /* no work */
1989 } else if (!test_bit(A_BUS_REQ, &dev->inputs)) {
1990 /* a_bus_req is de-asserted when root hub is
1991 * suspended or HNP is in progress.
1992 */
1993 pr_debug("!a_bus_req\n");
1994 spin_lock_irqsave(&dev->lock, flags);
1995 dev->otg.state = OTG_STATE_A_SUSPEND;
1996 spin_unlock_irqrestore(&dev->lock, flags);
1997 if (dev->otg.host->b_hnp_enable) {
1998 msm_otg_start_timer(dev, TA_AIDL_BDIS,
1999 A_AIDL_BDIS);
2000 } else {
2001 /* No HNP. Root hub suspended */
2002 msm_otg_put_suspend(dev);
2003 }
2004 if (test_bit(ID_A, &dev->inputs))
2005 msm_otg_set_power(&dev->otg,
2006 USB_IDCHG_MIN - USB_IB_UNCFG);
2007 } else if (!test_bit(B_CONN, &dev->inputs)) {
2008 pr_debug("!b_conn\n");
2009 spin_lock_irqsave(&dev->lock, flags);
2010 dev->otg.state = OTG_STATE_A_WAIT_BCON;
2011 spin_unlock_irqrestore(&dev->lock, flags);
2012 if (TA_WAIT_BCON > 0)
2013 msm_otg_start_timer(dev, TA_WAIT_BCON,
2014 A_WAIT_BCON);
2015 } else if (test_bit(ID_A, &dev->inputs)) {
2016 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2017 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2018 msm_otg_set_power(&dev->otg,
2019 USB_IDCHG_MIN - get_aca_bmaxpower(dev));
2020 } else if (!test_bit(ID, &dev->inputs)) {
2021 atomic_set(&dev->chg_type, USB_CHG_TYPE__INVALID);
2022 msm_otg_set_power(&dev->otg, 0);
2023 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
2024 }
2025 break;
2026 case OTG_STATE_A_SUSPEND:
2027 if ((test_bit(ID, &dev->inputs) &&
2028 !test_bit(ID_A, &dev->inputs)) ||
2029 test_bit(A_BUS_DROP, &dev->inputs) ||
2030 test_bit(A_AIDL_BDIS, &dev->tmouts)) {
2031 pr_debug("id_f/b/c || a_bus_drop ||"
2032 "a_aidl_bdis_tmout\n");
2033 if (test_bit(A_AIDL_BDIS, &dev->tmouts))
2034 msm_otg_send_event(&dev->otg,
2035 OTG_EVENT_HNP_FAILED);
2036 msm_otg_del_timer(dev);
2037 clear_bit(B_CONN, &dev->inputs);
2038 spin_lock_irqsave(&dev->lock, flags);
2039 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
2040 spin_unlock_irqrestore(&dev->lock, flags);
2041 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2042 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2043 /* Reset both phy and link */
2044 otg_reset(&dev->otg, 1);
2045 if (!test_bit(ID_A, &dev->inputs))
2046 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2047 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
2048 msm_otg_set_power(&dev->otg, 0);
2049 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
2050 pr_debug("!a_vbus_vld\n");
2051 msm_otg_del_timer(dev);
2052 clear_bit(B_CONN, &dev->inputs);
2053 spin_lock_irqsave(&dev->lock, flags);
2054 dev->otg.state = OTG_STATE_A_VBUS_ERR;
2055 spin_unlock_irqrestore(&dev->lock, flags);
2056 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2057 /* Reset both phy and link */
2058 otg_reset(&dev->otg, 1);
2059 } else if (!test_bit(B_CONN, &dev->inputs) &&
2060 dev->otg.host->b_hnp_enable) {
2061 pr_debug("!b_conn && b_hnp_enable");
2062 /* Clear AIDL_BDIS timer */
2063 msm_otg_del_timer(dev);
2064 spin_lock_irqsave(&dev->lock, flags);
2065 dev->otg.state = OTG_STATE_A_PERIPHERAL;
2066 spin_unlock_irqrestore(&dev->lock, flags);
2067
2068 msm_otg_start_host(&dev->otg, REQUEST_HNP_SUSPEND);
2069
2070 /* We may come here even when B-dev is physically
2071 * disconnected during HNP. We go back to host
2072 * role if bus is idle for BIDL_ADIS time.
2073 */
2074 dev->otg.gadget->is_a_peripheral = 1;
2075 msm_otg_start_peripheral(&dev->otg, 1);
2076 /* If ID_A: we can charge in a_peripheral as well */
2077 if (test_bit(ID_A, &dev->inputs)) {
2078 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2079 msm_otg_set_power(&dev->otg,
2080 USB_IDCHG_MIN - USB_IB_UNCFG);
2081 }
2082 } else if (!test_bit(B_CONN, &dev->inputs) &&
2083 !dev->otg.host->b_hnp_enable) {
2084 pr_debug("!b_conn && !b_hnp_enable");
2085 /* bus request is dropped during suspend.
2086 * acquire again for next device.
2087 */
2088 set_bit(A_BUS_REQ, &dev->inputs);
2089 spin_lock_irqsave(&dev->lock, flags);
2090 dev->otg.state = OTG_STATE_A_WAIT_BCON;
2091 spin_unlock_irqrestore(&dev->lock, flags);
2092 if (TA_WAIT_BCON > 0)
2093 msm_otg_start_timer(dev, TA_WAIT_BCON,
2094 A_WAIT_BCON);
2095 msm_otg_set_power(&dev->otg, 0);
2096 } else if (test_bit(ID_A, &dev->inputs)) {
2097 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2098 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2099 msm_otg_set_power(&dev->otg,
2100 USB_IDCHG_MIN - USB_IB_UNCFG);
2101 } else if (!test_bit(ID, &dev->inputs)) {
2102 msm_otg_set_power(&dev->otg, 0);
2103 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
2104 }
2105 break;
2106 case OTG_STATE_A_PERIPHERAL:
2107 if ((test_bit(ID, &dev->inputs) &&
2108 !test_bit(ID_A, &dev->inputs)) ||
2109 test_bit(A_BUS_DROP, &dev->inputs)) {
2110 pr_debug("id _f/b/c || a_bus_drop\n");
2111 /* Clear BIDL_ADIS timer */
2112 msm_otg_del_timer(dev);
2113 spin_lock_irqsave(&dev->lock, flags);
2114 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
2115 spin_unlock_irqrestore(&dev->lock, flags);
2116 msm_otg_start_peripheral(&dev->otg, 0);
2117 dev->otg.gadget->is_a_peripheral = 0;
2118 /* HCD was suspended before. Stop it now */
2119 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2120
2121 /* Reset both phy and link */
2122 otg_reset(&dev->otg, 1);
2123 if (!test_bit(ID_A, &dev->inputs))
2124 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2125 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
2126 msm_otg_set_power(&dev->otg, 0);
2127 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
2128 pr_debug("!a_vbus_vld\n");
2129 /* Clear BIDL_ADIS timer */
2130 msm_otg_del_timer(dev);
2131 spin_lock_irqsave(&dev->lock, flags);
2132 dev->otg.state = OTG_STATE_A_VBUS_ERR;
2133 spin_unlock_irqrestore(&dev->lock, flags);
2134 msm_otg_start_peripheral(&dev->otg, 0);
2135 dev->otg.gadget->is_a_peripheral = 0;
2136 /* HCD was suspended before. Stop it now */
2137 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2138 } else if (test_bit(A_BIDL_ADIS, &dev->tmouts)) {
2139 pr_debug("a_bidl_adis_tmout\n");
2140 msm_otg_start_peripheral(&dev->otg, 0);
2141 dev->otg.gadget->is_a_peripheral = 0;
2142
2143 spin_lock_irqsave(&dev->lock, flags);
2144 dev->otg.state = OTG_STATE_A_WAIT_BCON;
2145 spin_unlock_irqrestore(&dev->lock, flags);
2146 set_bit(A_BUS_REQ, &dev->inputs);
2147 msm_otg_start_host(&dev->otg, REQUEST_HNP_RESUME);
2148 if (TA_WAIT_BCON > 0)
2149 msm_otg_start_timer(dev, TA_WAIT_BCON,
2150 A_WAIT_BCON);
2151 msm_otg_set_power(&dev->otg, 0);
2152 } else if (test_bit(ID_A, &dev->inputs)) {
2153 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2154 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2155 msm_otg_set_power(&dev->otg,
2156 USB_IDCHG_MIN - USB_IB_UNCFG);
2157 } else if (!test_bit(ID, &dev->inputs)) {
2158 msm_otg_set_power(&dev->otg, 0);
2159 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
2160 }
2161 break;
2162 case OTG_STATE_A_WAIT_VFALL:
2163 if (test_bit(A_WAIT_VFALL, &dev->tmouts)) {
2164 clear_bit(A_VBUS_VLD, &dev->inputs);
2165 spin_lock_irqsave(&dev->lock, flags);
2166 dev->otg.state = OTG_STATE_A_IDLE;
2167 spin_unlock_irqrestore(&dev->lock, flags);
2168 work = 1;
2169 }
2170 break;
2171 case OTG_STATE_A_VBUS_ERR:
2172 if ((test_bit(ID, &dev->inputs) &&
2173 !test_bit(ID_A, &dev->inputs)) ||
2174 test_bit(A_BUS_DROP, &dev->inputs) ||
2175 test_bit(A_CLR_ERR, &dev->inputs)) {
2176 spin_lock_irqsave(&dev->lock, flags);
2177 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
2178 spin_unlock_irqrestore(&dev->lock, flags);
2179 if (!test_bit(ID_A, &dev->inputs))
2180 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2181 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
2182 msm_otg_set_power(&dev->otg, 0);
2183 }
2184 break;
2185 default:
2186 pr_err("invalid OTG state\n");
2187 }
2188
2189 if (work)
2190 queue_work(dev->wq, &dev->sm_work);
2191
2192#ifdef CONFIG_USB_MSM_ACA
2193 /* Start id_polling if (ID_FLOAT&BSV) || ID_A/B/C */
2194 if ((test_bit(ID, &dev->inputs) &&
2195 test_bit(B_SESS_VLD, &dev->inputs) &&
2196 chg_type != USB_CHG_TYPE__WALLCHARGER) ||
2197 test_bit(ID_A, &dev->inputs)) {
2198 mod_timer(&dev->id_timer, jiffies +
2199 msecs_to_jiffies(OTG_ID_POLL_MS));
2200 return;
2201 }
2202 del_timer(&dev->id_timer);
2203#endif
2204 /* IRQ/sysfs may queue work. Check work_pending. otherwise
2205 * we might endup releasing wakelock after it is acquired
2206 * in IRQ/sysfs.
2207 */
2208 if (!work_pending(&dev->sm_work) && !hrtimer_active(&dev->timer) &&
2209 !work_pending(&dev->otg_resume_work))
2210 wake_unlock(&dev->wlock);
2211}
2212
2213#ifdef CONFIG_USB_MSM_ACA
2214static void msm_otg_id_func(unsigned long _dev)
2215{
2216 struct msm_otg *dev = (struct msm_otg *) _dev;
2217 u8 phy_ints;
2218
2219#ifdef CONFIG_USB_MSM_STANDARD_ACA
2220 /*
2221 * When standard ACA is attached RID_A and RID_GND states are only
2222 * possible. RID_A-->RID_GND transition generates IdGnd interrupt
2223 * from PHY. Hence polling is disabled.
2224 */
2225 if (test_bit(ID_A, &dev->inputs))
2226 goto out;
2227#endif
2228
2229 if (atomic_read(&dev->in_lpm))
2230 msm_otg_set_suspend(&dev->otg, 0);
2231
2232 phy_ints = ulpi_read(dev, 0x13);
2233
2234 /*
2235 * ACA timer will be kicked again after the PHY
2236 * state is recovered.
2237 */
2238 if (phy_ints == -ETIMEDOUT)
2239 return;
2240
2241
2242 /* If id_gnd happened then stop and let isr take care of this */
2243 if (phy_id_state_gnd(phy_ints))
2244 goto out;
2245
2246 if ((test_bit(ID_A, &dev->inputs) == phy_id_state_a(phy_ints)) &&
2247 (test_bit(ID_B, &dev->inputs) == phy_id_state_b(phy_ints)) &&
2248 (test_bit(ID_C, &dev->inputs) == phy_id_state_c(phy_ints))) {
2249 mod_timer(&dev->id_timer,
2250 jiffies + msecs_to_jiffies(OTG_ID_POLL_MS));
2251 goto out;
2252 } else {
2253 set_aca_id_inputs(dev);
2254 }
2255 wake_lock(&dev->wlock);
2256 queue_work(dev->wq, &dev->sm_work);
2257out:
2258 /* OOPS: runing while !BSV, schedule work to initiate LPM */
2259 if (!is_b_sess_vld()) {
2260 clear_bit(B_SESS_VLD, &dev->inputs);
2261 wake_lock(&dev->wlock);
2262 queue_work(dev->wq, &dev->sm_work);
2263 }
2264 return;
2265}
2266#endif
2267#ifdef CONFIG_USB_OTG
2268static ssize_t
2269set_pwr_down(struct device *_dev, struct device_attribute *attr,
2270 const char *buf, size_t count)
2271{
2272 struct msm_otg *dev = the_msm_otg;
2273 int value;
2274 enum usb_otg_state state;
2275 unsigned long flags;
2276
2277 spin_lock_irqsave(&dev->lock, flags);
2278 state = dev->otg.state;
2279 spin_unlock_irqrestore(&dev->lock, flags);
2280
2281 /* Applicable for only A-Device */
2282 if (state <= OTG_STATE_A_IDLE)
2283 return -EINVAL;
2284
2285 sscanf(buf, "%d", &value);
2286
2287 if (test_bit(A_BUS_DROP, &dev->inputs) != !!value) {
2288 change_bit(A_BUS_DROP, &dev->inputs);
2289 wake_lock(&dev->wlock);
2290 queue_work(dev->wq, &dev->sm_work);
2291 }
2292
2293 return count;
2294}
2295static DEVICE_ATTR(pwr_down, S_IRUGO | S_IWUSR, NULL, set_pwr_down);
2296
2297static ssize_t
2298set_srp_req(struct device *_dev, struct device_attribute *attr,
2299 const char *buf, size_t count)
2300{
2301 struct msm_otg *dev = the_msm_otg;
2302 enum usb_otg_state state;
2303 unsigned long flags;
2304
2305 spin_lock_irqsave(&dev->lock, flags);
2306 state = dev->otg.state;
2307 spin_unlock_irqrestore(&dev->lock, flags);
2308
2309 if (state != OTG_STATE_B_IDLE)
2310 return -EINVAL;
2311
2312 set_bit(B_BUS_REQ, &dev->inputs);
2313 wake_lock(&dev->wlock);
2314 queue_work(dev->wq, &dev->sm_work);
2315
2316 return count;
2317}
2318static DEVICE_ATTR(srp_req, S_IRUGO | S_IWUSR, NULL, set_srp_req);
2319
2320static ssize_t
2321set_clr_err(struct device *_dev, struct device_attribute *attr,
2322 const char *buf, size_t count)
2323{
2324 struct msm_otg *dev = the_msm_otg;
2325 enum usb_otg_state state;
2326 unsigned long flags;
2327
2328 spin_lock_irqsave(&dev->lock, flags);
2329 state = dev->otg.state;
2330 spin_unlock_irqrestore(&dev->lock, flags);
2331
2332 if (state == OTG_STATE_A_VBUS_ERR) {
2333 set_bit(A_CLR_ERR, &dev->inputs);
2334 wake_lock(&dev->wlock);
2335 queue_work(dev->wq, &dev->sm_work);
2336 }
2337
2338 return count;
2339}
2340static DEVICE_ATTR(clr_err, S_IRUGO | S_IWUSR, NULL, set_clr_err);
2341
2342static struct attribute *msm_otg_attrs[] = {
2343 &dev_attr_pwr_down.attr,
2344 &dev_attr_srp_req.attr,
2345 &dev_attr_clr_err.attr,
2346 NULL,
2347};
2348
2349static struct attribute_group msm_otg_attr_grp = {
2350 .attrs = msm_otg_attrs,
2351};
2352#endif
2353
2354#ifdef CONFIG_DEBUG_FS
2355static int otg_open(struct inode *inode, struct file *file)
2356{
2357 file->private_data = inode->i_private;
2358 return 0;
2359}
2360static ssize_t otg_mode_write(struct file *file, const char __user *buf,
2361 size_t count, loff_t *ppos)
2362{
2363 struct msm_otg *dev = file->private_data;
2364 int ret = count;
2365 int work = 0;
2366 unsigned long flags;
2367
2368 spin_lock_irqsave(&dev->lock, flags);
2369 dev->pdata->otg_mode = OTG_USER_CONTROL;
2370 if (!memcmp(buf, "none", count - 1)) {
2371 clear_bit(B_SESS_VLD, &dev->inputs);
2372 set_bit(ID, &dev->inputs);
2373 work = 1;
2374 } else if (!memcmp(buf, "peripheral", count - 1)) {
2375 set_bit(B_SESS_VLD, &dev->inputs);
2376 set_bit(ID, &dev->inputs);
2377 work = 1;
2378 } else if (!memcmp(buf, "host", count - 1)) {
2379 clear_bit(B_SESS_VLD, &dev->inputs);
2380 clear_bit(ID, &dev->inputs);
2381 set_bit(A_BUS_REQ, &dev->inputs);
2382 work = 1;
2383 } else {
2384 pr_info("%s: unknown mode specified\n", __func__);
2385 ret = -EINVAL;
2386 }
2387 spin_unlock_irqrestore(&dev->lock, flags);
2388
2389 if (work) {
2390 wake_lock(&dev->wlock);
2391 queue_work(dev->wq, &dev->sm_work);
2392 }
2393
2394 return ret;
2395}
2396const struct file_operations otgfs_fops = {
2397 .open = otg_open,
2398 .write = otg_mode_write,
2399};
2400
2401#define OTG_INFO_SIZE 512
2402static ssize_t otg_info_read(struct file *file, char __user *ubuf,
2403 size_t count, loff_t *ppos)
2404{
2405 char *buf;
2406 int temp = 0;
2407 int ret;
2408 struct msm_otg *dev = file->private_data;
2409
2410 buf = kzalloc(sizeof(char) * OTG_INFO_SIZE, GFP_KERNEL);
2411 if (!buf)
2412 return -ENOMEM;
2413
2414 temp += scnprintf(buf + temp, OTG_INFO_SIZE - temp,
2415 "OTG State: %s\n"
2416 "OTG Mode: %d\n"
2417 "OTG Inputs: 0x%lx\n"
2418 "Charger Type: %d\n"
2419 "PMIC VBUS Support: %u\n"
2420 "PMIC ID Support: %u\n"
2421 "Core Clock: %u\n"
2422 "USB In SPS: %d\n"
2423 "pre_emphasis_level: 0x%x\n"
2424 "cdr_auto_reset: 0x%x\n"
2425 "hs_drv_amplitude: 0x%x\n"
2426 "se1_gate_state: 0x%x\n"
2427 "swfi_latency: 0x%x\n"
2428 "PHY Powercollapse: 0x%x\n"
2429 "PCLK Voting: 0x%x\n",
2430 state_string(dev->otg.state),
2431 dev->pdata->otg_mode,
2432 dev->inputs,
2433 atomic_read(&dev->chg_type),
2434 dev->pmic_vbus_notif_supp,
2435 dev->pmic_id_notif_supp,
2436 dev->pdata->core_clk,
2437 dev->pdata->usb_in_sps,
2438 dev->pdata->pemp_level,
2439 dev->pdata->cdr_autoreset,
2440 dev->pdata->drv_ampl,
2441 dev->pdata->se1_gating,
2442 dev->pdata->swfi_latency,
2443 dev->pdata->phy_can_powercollapse,
2444 pclk_requires_voting(&dev->otg));
2445
2446 ret = simple_read_from_buffer(ubuf, count, ppos, buf, temp);
2447
2448 kfree(buf);
2449
2450 return ret;
2451}
2452
2453const struct file_operations otgfs_info_fops = {
2454 .open = otg_open,
2455 .read = otg_info_read,
2456};
2457
2458struct dentry *otg_debug_root;
2459struct dentry *otg_debug_mode;
2460struct dentry *otg_debug_info;
2461#endif
2462
2463static int otg_debugfs_init(struct msm_otg *dev)
2464{
2465#ifdef CONFIG_DEBUG_FS
2466 otg_debug_root = debugfs_create_dir("otg", NULL);
2467 if (!otg_debug_root)
2468 return -ENOENT;
2469
2470 otg_debug_mode = debugfs_create_file("mode", 0222,
2471 otg_debug_root, dev,
2472 &otgfs_fops);
2473 if (!otg_debug_mode)
2474 goto free_root;
2475
2476 otg_debug_info = debugfs_create_file("info", 0444,
2477 otg_debug_root, dev,
2478 &otgfs_info_fops);
2479 if (!otg_debug_info)
2480 goto free_mode;
2481
2482 return 0;
2483
2484free_mode:
2485 debugfs_remove(otg_debug_mode);
2486 otg_debug_mode = NULL;
2487
2488free_root:
2489 debugfs_remove(otg_debug_root);
2490 otg_debug_root = NULL;
2491 return -ENOENT;
2492#endif
2493 return 0;
2494}
2495
2496static void otg_debugfs_cleanup(void)
2497{
2498#ifdef CONFIG_DEBUG_FS
2499 debugfs_remove(otg_debug_info);
2500 debugfs_remove(otg_debug_mode);
2501 debugfs_remove(otg_debug_root);
2502#endif
2503}
2504
2505struct otg_io_access_ops msm_otg_io_ops = {
2506 .read = usb_ulpi_read,
2507 .write = usb_ulpi_write,
2508};
2509
2510static int __init msm_otg_probe(struct platform_device *pdev)
2511{
2512 int ret = 0;
2513 struct resource *res;
2514 struct msm_otg *dev;
2515
2516 dev = kzalloc(sizeof(struct msm_otg), GFP_KERNEL);
2517 if (!dev)
2518 return -ENOMEM;
2519
2520 the_msm_otg = dev;
2521 dev->otg.dev = &pdev->dev;
2522 dev->pdata = pdev->dev.platform_data;
2523
2524 if (!dev->pdata) {
2525 ret = -ENODEV;
2526 goto free_dev;
2527 }
2528
2529#ifdef CONFIG_USB_EHCI_MSM_72K
2530 if (!dev->pdata->vbus_power) {
2531 ret = -ENODEV;
2532 goto free_dev;
2533 } else
2534 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2535
2536#endif
2537
2538
2539 if (dev->pdata->rpc_connect) {
2540 ret = dev->pdata->rpc_connect(1);
2541 pr_debug("%s: rpc_connect(%d)\n", __func__, ret);
2542 if (ret) {
2543 pr_err("%s: rpc connect failed\n", __func__);
2544 ret = -ENODEV;
2545 goto free_dev;
2546 }
2547 }
2548
2549 dev->hs_clk = clk_get(&pdev->dev, "usb_hs_clk");
2550 if (IS_ERR(dev->hs_clk)) {
2551 pr_err("%s: failed to get usb_hs_clk\n", __func__);
2552 ret = PTR_ERR(dev->hs_clk);
2553 goto rpc_fail;
2554 }
2555 clk_set_rate(dev->hs_clk, 60000000);
2556
2557 /* pm qos request to prevent apps idle power collapse */
2558 pm_qos_add_request(&dev->pdata->pm_qos_req_dma, PM_QOS_CPU_DMA_LATENCY,
2559 PM_QOS_DEFAULT_VALUE);
2560
2561 /* If USB Core is running its protocol engine based on PCLK,
2562 * PCLK must be running at >60Mhz for correct HSUSB operation and
2563 * USB core cannot tolerate frequency changes on PCLK. For such
2564 * USB cores, vote for maximum clk frequency on pclk source
2565 */
2566 if (dev->pdata->pclk_src_name) {
2567 dev->pclk_src = clk_get(0, dev->pdata->pclk_src_name);
2568 if (IS_ERR(dev->pclk_src))
2569 goto put_hs_clk;
2570 clk_set_rate(dev->pclk_src, INT_MAX);
2571 msm_otg_vote_for_pclk_source(dev, 1);
2572 }
2573
2574 if (!dev->pdata->pclk_is_hw_gated) {
2575 dev->hs_pclk = clk_get(&pdev->dev, "usb_hs_pclk");
2576 if (IS_ERR(dev->hs_pclk)) {
2577 pr_err("%s: failed to get usb_hs_pclk\n", __func__);
2578 ret = PTR_ERR(dev->hs_pclk);
2579 goto put_pclk_src;
2580 }
2581 clk_enable(dev->hs_pclk);
2582 }
2583
2584 if (dev->pdata->core_clk) {
2585 dev->hs_cclk = clk_get(&pdev->dev, "usb_hs_core_clk");
2586 if (IS_ERR(dev->hs_cclk)) {
2587 pr_err("%s: failed to get usb_hs_core_clk\n", __func__);
2588 ret = PTR_ERR(dev->hs_cclk);
2589 goto put_hs_pclk;
2590 }
2591 clk_enable(dev->hs_cclk);
2592 }
2593
2594 if (!dev->pdata->phy_reset) {
2595 dev->phy_reset_clk = clk_get(&pdev->dev, "usb_phy_clk");
2596 if (IS_ERR(dev->phy_reset_clk)) {
2597 pr_err("%s: failed to get usb_phy_clk\n", __func__);
2598 ret = PTR_ERR(dev->phy_reset_clk);
2599 goto put_hs_cclk;
2600 }
2601 }
2602
2603 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2604 if (!res) {
2605 pr_err("%s: failed to get platform resource mem\n", __func__);
2606 ret = -ENODEV;
2607 goto put_phy_clk;
2608 }
2609
2610 dev->regs = ioremap(res->start, resource_size(res));
2611 if (!dev->regs) {
2612 pr_err("%s: ioremap failed\n", __func__);
2613 ret = -ENOMEM;
2614 goto put_phy_clk;
2615 }
2616 dev->irq = platform_get_irq(pdev, 0);
2617 if (!dev->irq) {
2618 pr_err("%s: platform_get_irq failed\n", __func__);
2619 ret = -ENODEV;
2620 goto free_regs;
2621 }
2622 dev->xo_handle = msm_xo_get(MSM_XO_TCXO_D1, "usb");
2623 if (IS_ERR(dev->xo_handle)) {
2624 pr_err(" %s not able to get the handle"
2625 "to vote for TCXO D1 buffer\n", __func__);
2626 ret = PTR_ERR(dev->xo_handle);
2627 goto free_regs;
2628 }
2629
2630 ret = msm_xo_mode_vote(dev->xo_handle, MSM_XO_MODE_ON);
2631 if (ret) {
2632 pr_err("%s failed to vote for TCXO"
2633 "D1 buffer%d\n", __func__, ret);
2634 goto free_xo_handle;
2635 }
2636
2637
2638 msm_otg_init_timer(dev);
2639 INIT_WORK(&dev->sm_work, msm_otg_sm_work);
2640 INIT_WORK(&dev->otg_resume_work, msm_otg_resume_w);
2641 spin_lock_init(&dev->lock);
2642 wake_lock_init(&dev->wlock, WAKE_LOCK_SUSPEND, "msm_otg");
2643
2644 dev->wq = alloc_workqueue("k_otg", WQ_NON_REENTRANT, 0);
2645 if (!dev->wq) {
2646 ret = -ENOMEM;
2647 goto free_wlock;
2648 }
2649
2650 if (dev->pdata->init_gpio) {
2651 ret = dev->pdata->init_gpio(1);
2652 if (ret) {
2653 pr_err("%s: gpio init failed with err:%d\n",
2654 __func__, ret);
2655 goto free_wq;
2656 }
2657 }
2658 /* To reduce phy power consumption and to avoid external LDO
2659 * on the board, PMIC comparators can be used to detect VBUS
2660 * session change.
2661 */
2662 if (dev->pdata->pmic_vbus_notif_init) {
2663 ret = dev->pdata->pmic_vbus_notif_init
2664 (&msm_otg_set_vbus_state, 1);
2665 if (!ret) {
2666 dev->pmic_vbus_notif_supp = 1;
2667 } else if (ret != -ENOTSUPP) {
2668 pr_err("%s: pmic_vbus_notif_init() failed, err:%d\n",
2669 __func__, ret);
2670 goto free_gpio;
2671 }
2672 }
2673
2674 if (dev->pdata->pmic_id_notif_init) {
2675 ret = dev->pdata->pmic_id_notif_init(&msm_otg_set_id_state, 1);
2676 if (!ret) {
2677 dev->pmic_id_notif_supp = 1;
2678 } else if (ret != -ENOTSUPP) {
2679 pr_err("%s: pmic_id_ notif_init failed err:%d",
2680 __func__, ret);
2681 goto free_pmic_vbus_notif;
2682 }
2683 }
2684
2685 if (dev->pdata->pmic_vbus_irq)
2686 dev->vbus_on_irq = dev->pdata->pmic_vbus_irq;
2687
2688 /* vote for vddcx, as PHY cannot tolerate vddcx below 1.0V */
2689 if (dev->pdata->init_vddcx) {
2690 ret = dev->pdata->init_vddcx(1);
2691 if (ret) {
2692 pr_err("%s: unable to enable vddcx digital core:%d\n",
2693 __func__, ret);
2694 goto free_pmic_id_notif;
2695 }
2696 }
2697
2698 if (dev->pdata->ldo_init) {
2699 ret = dev->pdata->ldo_init(1);
2700 if (ret) {
2701 pr_err("%s: ldo_init failed with err:%d\n",
2702 __func__, ret);
2703 goto free_config_vddcx;
2704 }
2705 }
2706
2707 if (dev->pdata->ldo_enable) {
2708 ret = dev->pdata->ldo_enable(1);
2709 if (ret) {
2710 pr_err("%s: ldo_enable failed with err:%d\n",
2711 __func__, ret);
2712 goto free_ldo_init;
2713 }
2714 }
2715
2716
2717 /* ACk all pending interrupts and clear interrupt enable registers */
2718 writel((readl(USB_OTGSC) & ~OTGSC_INTR_MASK), USB_OTGSC);
2719 writel(readl(USB_USBSTS), USB_USBSTS);
2720 writel(0, USB_USBINTR);
2721 /* Ensure that above STOREs are completed before enabling interrupts */
2722 mb();
2723
2724 ret = request_irq(dev->irq, msm_otg_irq, IRQF_SHARED,
2725 "msm_otg", dev);
2726 if (ret) {
2727 pr_err("%s: request irq failed\n", __func__);
2728 goto free_ldo_enable;
2729 }
2730
2731 dev->otg.set_peripheral = msm_otg_set_peripheral;
2732#ifdef CONFIG_USB_EHCI_MSM_72K
2733 dev->otg.set_host = msm_otg_set_host;
2734#endif
2735 dev->otg.set_suspend = msm_otg_set_suspend;
2736 dev->otg.start_hnp = msm_otg_start_hnp;
2737 dev->otg.send_event = msm_otg_send_event;
2738 dev->otg.set_power = msm_otg_set_power;
2739 dev->set_clk = msm_otg_set_clk;
2740 dev->reset = otg_reset;
2741 dev->otg.io_ops = &msm_otg_io_ops;
2742 if (otg_set_transceiver(&dev->otg)) {
2743 WARN_ON(1);
2744 goto free_otg_irq;
2745 }
2746#ifdef CONFIG_USB_MSM_ACA
2747 /* Link doesnt support id_a/b/c interrupts, hence polling
2748 * needs to be done to support ACA charger
2749 */
2750 init_timer(&dev->id_timer);
2751 dev->id_timer.function = msm_otg_id_func;
2752 dev->id_timer.data = (unsigned long) dev;
2753#endif
2754
2755 atomic_set(&dev->chg_type, USB_CHG_TYPE__INVALID);
2756 if (dev->pdata->chg_init && dev->pdata->chg_init(1))
2757 pr_err("%s: chg_init failed\n", __func__);
2758
2759 device_init_wakeup(&pdev->dev, 1);
2760
2761 ret = pm_runtime_set_active(&pdev->dev);
2762 if (ret < 0)
2763 pr_err("%s: pm_runtime: Fail to set active\n", __func__);
2764
2765 ret = 0;
2766 pm_runtime_enable(&pdev->dev);
2767 pm_runtime_get(&pdev->dev);
2768
2769
2770 ret = otg_debugfs_init(dev);
2771 if (ret) {
2772 pr_err("%s: otg_debugfs_init failed\n", __func__);
2773 goto chg_deinit;
2774 }
2775
2776#ifdef CONFIG_USB_OTG
2777 ret = sysfs_create_group(&pdev->dev.kobj, &msm_otg_attr_grp);
2778 if (ret < 0) {
2779 pr_err("%s: Failed to create the sysfs entry\n", __func__);
2780 otg_debugfs_cleanup();
2781 goto chg_deinit;
2782 }
2783#endif
2784
2785
2786 return 0;
2787
2788chg_deinit:
2789 if (dev->pdata->chg_init)
2790 dev->pdata->chg_init(0);
2791free_otg_irq:
2792 free_irq(dev->irq, dev);
2793free_ldo_enable:
2794 if (dev->pdata->ldo_enable)
2795 dev->pdata->ldo_enable(0);
2796 if (dev->pdata->setup_gpio)
2797 dev->pdata->setup_gpio(USB_SWITCH_DISABLE);
2798free_ldo_init:
2799 if (dev->pdata->ldo_init)
2800 dev->pdata->ldo_init(0);
2801free_config_vddcx:
2802 if (dev->pdata->init_vddcx)
2803 dev->pdata->init_vddcx(0);
2804free_pmic_id_notif:
2805 if (dev->pdata->pmic_id_notif_init && dev->pmic_id_notif_supp)
2806 dev->pdata->pmic_id_notif_init(&msm_otg_set_id_state, 0);
2807free_pmic_vbus_notif:
2808 if (dev->pdata->pmic_vbus_notif_init && dev->pmic_vbus_notif_supp)
2809 dev->pdata->pmic_vbus_notif_init(&msm_otg_set_vbus_state, 0);
2810free_gpio:
2811 if (dev->pdata->init_gpio)
2812 dev->pdata->init_gpio(0);
2813free_wq:
2814 destroy_workqueue(dev->wq);
2815free_wlock:
2816 wake_lock_destroy(&dev->wlock);
2817free_xo_handle:
2818 msm_xo_put(dev->xo_handle);
2819free_regs:
2820 iounmap(dev->regs);
2821put_phy_clk:
2822 if (dev->phy_reset_clk)
2823 clk_put(dev->phy_reset_clk);
2824put_hs_cclk:
2825 if (dev->hs_cclk) {
2826 clk_disable(dev->hs_cclk);
2827 clk_put(dev->hs_cclk);
2828 }
2829put_hs_pclk:
2830 if (dev->hs_pclk) {
2831 clk_disable(dev->hs_pclk);
2832 clk_put(dev->hs_pclk);
2833 }
2834put_pclk_src:
2835 if (dev->pclk_src) {
2836 msm_otg_vote_for_pclk_source(dev, 0);
2837 clk_put(dev->pclk_src);
2838 }
2839put_hs_clk:
2840 if (dev->hs_clk)
2841 clk_put(dev->hs_clk);
2842rpc_fail:
2843 if (dev->pdata->rpc_connect)
2844 dev->pdata->rpc_connect(0);
2845free_dev:
2846 kfree(dev);
2847 return ret;
2848}
2849
2850static int __exit msm_otg_remove(struct platform_device *pdev)
2851{
2852 struct msm_otg *dev = the_msm_otg;
2853
2854 otg_debugfs_cleanup();
2855#ifdef CONFIG_USB_OTG
2856 sysfs_remove_group(&pdev->dev.kobj, &msm_otg_attr_grp);
2857#endif
2858 destroy_workqueue(dev->wq);
2859 wake_lock_destroy(&dev->wlock);
2860
2861 if (dev->pdata->setup_gpio)
2862 dev->pdata->setup_gpio(USB_SWITCH_DISABLE);
2863
2864 if (dev->pdata->init_vddcx)
2865 dev->pdata->init_vddcx(0);
2866 if (dev->pdata->ldo_enable)
2867 dev->pdata->ldo_enable(0);
2868
2869 if (dev->pdata->ldo_init)
2870 dev->pdata->ldo_init(0);
2871
2872 if (dev->pmic_vbus_notif_supp)
2873 dev->pdata->pmic_vbus_notif_init(&msm_otg_set_vbus_state, 0);
2874
2875 if (dev->pmic_id_notif_supp)
2876 dev->pdata->pmic_id_notif_init(&msm_otg_set_id_state, 0);
2877
2878#ifdef CONFIG_USB_MSM_ACA
2879 del_timer_sync(&dev->id_timer);
2880#endif
2881 if (dev->pdata->chg_init)
2882 dev->pdata->chg_init(0);
2883 free_irq(dev->irq, pdev);
2884 iounmap(dev->regs);
2885 if (dev->hs_cclk) {
2886 clk_disable(dev->hs_cclk);
2887 clk_put(dev->hs_cclk);
2888 }
2889 if (dev->hs_pclk) {
2890 clk_disable(dev->hs_pclk);
2891 clk_put(dev->hs_pclk);
2892 }
2893 if (dev->hs_clk)
2894 clk_put(dev->hs_clk);
2895 if (dev->phy_reset_clk)
2896 clk_put(dev->phy_reset_clk);
2897 if (dev->pdata->rpc_connect)
2898 dev->pdata->rpc_connect(0);
2899 msm_xo_put(dev->xo_handle);
2900
2901 pm_runtime_put(&pdev->dev);
2902 pm_runtime_disable(&pdev->dev);
2903 kfree(dev);
2904 pm_qos_remove_request(&dev->pdata->pm_qos_req_dma);
2905 clk_put(dev->pclk_src);
2906 return 0;
2907}
2908
2909static int msm_otg_runtime_suspend(struct device *dev)
2910{
2911 struct msm_otg *otg = the_msm_otg;
2912
2913 dev_dbg(dev, "pm_runtime: suspending...\n");
2914 msm_otg_suspend(otg);
2915 return 0;
2916}
2917
2918static int msm_otg_runtime_resume(struct device *dev)
2919{
2920 struct msm_otg *otg = the_msm_otg;
2921
2922 dev_dbg(dev, "pm_runtime: resuming...\n");
2923 msm_otg_resume(otg);
2924 return 0;
2925}
2926
2927static int msm_otg_runtime_idle(struct device *dev)
2928{
2929 dev_dbg(dev, "pm_runtime: idling...\n");
2930 return 0;
2931}
2932
2933static struct dev_pm_ops msm_otg_dev_pm_ops = {
2934 .runtime_suspend = msm_otg_runtime_suspend,
2935 .runtime_resume = msm_otg_runtime_resume,
2936 .runtime_idle = msm_otg_runtime_idle,
2937};
2938
2939static struct platform_driver msm_otg_driver = {
2940 .remove = __exit_p(msm_otg_remove),
2941 .driver = {
2942 .name = DRIVER_NAME,
2943 .owner = THIS_MODULE,
2944 .pm = &msm_otg_dev_pm_ops,
2945 },
2946};
2947
2948static int __init msm_otg_init(void)
2949{
2950 return platform_driver_probe(&msm_otg_driver, msm_otg_probe);
2951}
2952
2953static void __exit msm_otg_exit(void)
2954{
2955 platform_driver_unregister(&msm_otg_driver);
2956}
2957
2958module_init(msm_otg_init);
2959module_exit(msm_otg_exit);
2960
2961MODULE_LICENSE("GPL v2");
2962MODULE_DESCRIPTION("MSM usb transceiver driver");
2963MODULE_VERSION("1.00");