blob: 88d6b5b807b5ae322803625d6528d75a70413320 [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);
Anji jonnalaeb9e60d2011-10-05 12:19:46 +0530745 if (dev->id_irq)
746 enable_irq_wake(dev->id_irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700747 }
748
749 msm_otg_vote_for_pclk_source(dev, 0);
750
751 atomic_set(&dev->in_lpm, 1);
752
753 if (!host_bus_suspend && dev->pmic_vbus_notif_supp) {
754 pr_debug("phy can power collapse: (%d)\n",
755 can_phy_power_collapse(dev));
756 if (can_phy_power_collapse(dev) && dev->pdata->ldo_enable) {
757 pr_debug("disabling the regulators\n");
758 dev->pdata->ldo_enable(0);
759 }
760 }
761
762 /* phy can interrupts when vddcx is at 0.75, so irrespective
763 * of pmic notification support, configure vddcx @0.75
764 */
765 if (dev->pdata->config_vddcx)
766 dev->pdata->config_vddcx(0);
767 pr_info("%s: usb in low power mode\n", __func__);
768
769out:
770 enable_irq(dev->irq);
771
772 return 0;
773}
774
775static int msm_otg_resume(struct msm_otg *dev)
776{
777 unsigned temp;
778 unsigned ret;
779
780 if (!atomic_read(&dev->in_lpm))
781 return 0;
782 /* vote for vddcx, as PHY cannot tolerate vddcx below 1.0V */
783 if (dev->pdata->config_vddcx) {
784 ret = dev->pdata->config_vddcx(1);
785 if (ret) {
786 pr_err("%s: unable to enable vddcx digital core:%d\n",
787 __func__, ret);
788 }
789 }
790 if (dev->pdata->ldo_set_voltage)
791 dev->pdata->ldo_set_voltage(3400);
792
793 /* Vote for TCXO when waking up the phy */
794 ret = msm_xo_mode_vote(dev->xo_handle, MSM_XO_MODE_ON);
795 if (ret)
796 pr_err("%s failed to vote for"
797 "TCXO D1 buffer%d\n", __func__, ret);
798
799 msm_otg_vote_for_pclk_source(dev, 1);
800
801 if (dev->hs_pclk)
802 clk_enable(dev->hs_pclk);
803 if (dev->hs_cclk)
804 clk_enable(dev->hs_cclk);
805
806 temp = readl(USB_USBCMD);
807 temp &= ~ASYNC_INTR_CTRL;
808 temp &= ~ULPI_STP_CTRL;
809 writel(temp, USB_USBCMD);
810
811 if (device_may_wakeup(dev->otg.dev)) {
812 disable_irq_wake(dev->irq);
813 if (dev->vbus_on_irq)
814 disable_irq_wake(dev->vbus_on_irq);
Anji jonnalaeb9e60d2011-10-05 12:19:46 +0530815 if (dev->id_irq)
816 disable_irq_wake(dev->id_irq);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700817 }
818
819 atomic_set(&dev->in_lpm, 0);
820
821 pr_info("%s: usb exited from low power mode\n", __func__);
822
823 return 0;
824}
825
826static void msm_otg_get_resume(struct msm_otg *dev)
827{
828#ifdef CONFIG_PM_RUNTIME
829 pm_runtime_get_noresume(dev->otg.dev);
830 pm_runtime_resume(dev->otg.dev);
831#else
832 msm_otg_resume(dev);
833#endif
834}
835
836static void msm_otg_put_suspend(struct msm_otg *dev)
837{
838#ifdef CONFIG_PM_RUNTIME
839 pm_runtime_put_sync(dev->otg.dev);
Pavankumar Kondetidc60f122011-09-13 11:17:16 +0530840 if (!atomic_read(&dev->in_lpm))
841 pm_runtime_get_sync(dev->otg.dev);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700842#else
843 msm_otg_suspend(dev);
844#endif
845}
846
847static void msm_otg_resume_w(struct work_struct *w)
848{
849 struct msm_otg *dev = container_of(w, struct msm_otg, otg_resume_work);
850 unsigned long timeout;
851
852 msm_otg_get_resume(dev);
853
854 if (!is_phy_clk_disabled())
855 goto phy_resumed;
856
857 timeout = jiffies + usecs_to_jiffies(100);
858 enable_phy_clk();
859 while (is_phy_clk_disabled() || !is_phy_active()) {
860 if (time_after(jiffies, timeout)) {
861 pr_err("%s: Unable to wakeup phy. is_phy_active: %x\n",
862 __func__, !!is_phy_active());
863 /* Reset both phy and link */
864 otg_reset(&dev->otg, 1);
865 break;
866 }
867 udelay(10);
868 }
869
870phy_resumed:
871 /* Enable Idabc interrupts as these were disabled before entering LPM */
872 enable_idabc(dev);
873
874 /* If resume signalling finishes before lpm exit, PCD is not set in
875 * USBSTS register. Drive resume signal to the downstream device now
876 * so that host driver can process the upcoming port change interrupt.*/
877 if (is_host() || test_bit(ID_A, &dev->inputs)) {
878 writel(readl(USB_PORTSC) | PORTSC_FPR, USB_PORTSC);
879 msm_otg_start_host(&dev->otg, REQUEST_RESUME);
880 }
881
882 /* Enable irq which was disabled before scheduling this work.
883 * But don't release wake_lock, as we got async interrupt and
884 * there will be some work pending for OTG state machine.
885 */
886 enable_irq(dev->irq);
887}
888
889static int msm_otg_set_suspend(struct otg_transceiver *xceiv, int suspend)
890{
891 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
892 enum usb_otg_state state;
893 unsigned long flags;
894
895 if (!dev || (dev != the_msm_otg))
896 return -ENODEV;
897
898 spin_lock_irqsave(&dev->lock, flags);
899 state = dev->otg.state;
900 spin_unlock_irqrestore(&dev->lock, flags);
901
902 pr_debug("suspend request in state: %s\n",
903 state_string(state));
904
905 if (suspend) {
906 switch (state) {
907#ifndef CONFIG_MSM_OTG_ENABLE_A_WAIT_BCON_TIMEOUT
908 case OTG_STATE_A_WAIT_BCON:
909 if (test_bit(ID_A, &dev->inputs))
910 msm_otg_set_power(xceiv, USB_IDCHG_MIN - 100);
911 msm_otg_put_suspend(dev);
912 break;
913#endif
914 case OTG_STATE_A_HOST:
915 clear_bit(A_BUS_REQ, &dev->inputs);
916 wake_lock(&dev->wlock);
917 queue_work(dev->wq, &dev->sm_work);
918 break;
919 case OTG_STATE_B_PERIPHERAL:
920 if (xceiv->gadget->b_hnp_enable) {
921 set_bit(A_BUS_SUSPEND, &dev->inputs);
922 set_bit(B_BUS_REQ, &dev->inputs);
923 wake_lock(&dev->wlock);
924 queue_work(dev->wq, &dev->sm_work);
925 }
926 break;
927 case OTG_STATE_A_PERIPHERAL:
928 msm_otg_start_timer(dev, TA_BIDL_ADIS,
929 A_BIDL_ADIS);
930 break;
931 default:
932 break;
933 }
934 } else {
935 unsigned long timeout;
936
937 switch (state) {
938 case OTG_STATE_A_PERIPHERAL:
939 /* A-peripheral observed activity on bus.
940 * clear A_BIDL_ADIS timer.
941 */
942 msm_otg_del_timer(dev);
943 break;
944 case OTG_STATE_A_SUSPEND:
945 /* Remote wakeup or resume */
946 set_bit(A_BUS_REQ, &dev->inputs);
947 spin_lock_irqsave(&dev->lock, flags);
948 dev->otg.state = OTG_STATE_A_HOST;
949 spin_unlock_irqrestore(&dev->lock, flags);
950 if (test_bit(ID_A, &dev->inputs) &&
951 (get_aca_bmaxpower(dev) < USB_IDCHG_MIN))
952 msm_otg_set_power(xceiv,
953 USB_IDCHG_MIN - get_aca_bmaxpower(dev));
954 break;
955 default:
956 break;
957 }
958
959 if (suspend == atomic_read(&dev->in_lpm))
960 return 0;
961
962 disable_irq(dev->irq);
963 if (dev->pmic_vbus_notif_supp)
964 if (can_phy_power_collapse(dev) &&
965 dev->pdata->ldo_enable)
966 dev->pdata->ldo_enable(1);
967
968 msm_otg_get_resume(dev);
969
970 if (!is_phy_clk_disabled())
971 goto out;
972
973 timeout = jiffies + usecs_to_jiffies(100);
974 enable_phy_clk();
975 while (is_phy_clk_disabled() || !is_phy_active()) {
976 if (time_after(jiffies, timeout)) {
977 pr_err("%s: Unable to wakeup phy. "
978 "is_phy_active: %x\n",
979 __func__, !!is_phy_active());
980 /* Reset both phy and link */
981 otg_reset(&dev->otg, 1);
982 break;
983 }
984 udelay(10);
985 }
986out:
987 enable_idabc(dev);
988 enable_irq(dev->irq);
989
990 }
991
992 return 0;
993}
994
995static int msm_otg_set_peripheral(struct otg_transceiver *xceiv,
996 struct usb_gadget *gadget)
997{
998 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
999
1000 if (!dev || (dev != the_msm_otg))
1001 return -ENODEV;
1002
1003 if (!gadget) {
1004 msm_otg_start_peripheral(xceiv, 0);
1005 dev->otg.gadget = 0;
1006 disable_sess_valid(dev);
1007 if (!dev->otg.host)
1008 disable_idabc(dev);
1009 return 0;
1010 }
1011 dev->otg.gadget = gadget;
1012 pr_info("peripheral driver registered w/ tranceiver\n");
1013
1014 wake_lock(&dev->wlock);
1015 queue_work(dev->wq, &dev->sm_work);
1016 return 0;
1017}
1018
1019#ifdef CONFIG_USB_EHCI_MSM_72K
1020static int usbdev_notify(struct notifier_block *self,
1021 unsigned long action, void *device)
1022{
1023 enum usb_otg_state state;
1024 struct msm_otg *dev = container_of(self, struct msm_otg, usbdev_nb);
1025 struct usb_device *udev = device;
1026 int work = 1;
1027 unsigned long flags;
1028
1029 /* Interested in only devices directly connected
1030 * to root hub directly.
1031 */
1032 if (!udev->parent || udev->parent->parent)
1033 goto out;
1034
1035 spin_lock_irqsave(&dev->lock, flags);
1036 state = dev->otg.state;
1037 spin_unlock_irqrestore(&dev->lock, flags);
1038
1039 switch (state) {
1040 case OTG_STATE_A_WAIT_BCON:
1041 if (action == USB_DEVICE_ADD) {
1042 pr_debug("B_CONN set\n");
1043 set_bit(B_CONN, &dev->inputs);
1044 if (udev->actconfig) {
1045 set_aca_bmaxpower(dev,
1046 udev->actconfig->desc.bMaxPower * 2);
1047 goto do_work;
1048 }
1049 if (udev->portnum == udev->bus->otg_port)
1050 set_aca_bmaxpower(dev, USB_IB_UNCFG);
1051 else
1052 set_aca_bmaxpower(dev, 100);
1053 }
1054 break;
1055 case OTG_STATE_A_HOST:
1056 if (action == USB_DEVICE_REMOVE) {
1057 pr_debug("B_CONN clear\n");
1058 clear_bit(B_CONN, &dev->inputs);
1059 set_aca_bmaxpower(dev, 0);
1060 }
1061 break;
1062 default:
1063 work = 0;
1064 break;
1065 }
1066do_work:
1067 if (work) {
1068 wake_lock(&dev->wlock);
1069 queue_work(dev->wq, &dev->sm_work);
1070 }
1071out:
1072 return NOTIFY_OK;
1073}
1074
1075static int msm_otg_set_host(struct otg_transceiver *xceiv, struct usb_bus *host)
1076{
1077 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
1078
1079 if (!dev || (dev != the_msm_otg))
1080 return -ENODEV;
1081
1082 if (!dev->start_host)
1083 return -ENODEV;
1084
1085 if (!host) {
1086 msm_otg_start_host(xceiv, REQUEST_STOP);
1087 usb_unregister_notify(&dev->usbdev_nb);
1088 dev->otg.host = 0;
1089 dev->start_host = 0;
1090 disable_idgnd(dev);
1091 if (!dev->otg.gadget)
1092 disable_idabc(dev);
1093 return 0;
1094 }
1095#ifdef CONFIG_USB_OTG
1096 host->otg_port = 1;
1097#endif
1098 dev->usbdev_nb.notifier_call = usbdev_notify;
1099 usb_register_notify(&dev->usbdev_nb);
1100 dev->otg.host = host;
1101 pr_info("host driver registered w/ tranceiver\n");
1102
1103#ifndef CONFIG_USB_MSM_72K
1104 wake_lock(&dev->wlock);
1105 queue_work(dev->wq, &dev->sm_work);
1106#endif
1107 return 0;
1108}
1109#endif
1110
1111void msm_otg_set_id_state(int id)
1112{
1113 struct msm_otg *dev = the_msm_otg;
1114 unsigned long flags;
1115
1116 if (id == dev->pmic_id_status)
1117 return;
1118
1119 if (id) {
1120 set_bit(ID, &dev->inputs);
1121 dev->pmic_id_status = 1;
1122 } else {
1123 clear_bit(ID, &dev->inputs);
1124 set_bit(A_BUS_REQ, &dev->inputs);
1125 dev->pmic_id_status = 0;
1126 }
1127 spin_lock_irqsave(&dev->lock, flags);
1128 if (dev->otg.state != OTG_STATE_UNDEFINED) {
1129 wake_lock(&dev->wlock);
1130 queue_work(dev->wq, &dev->sm_work);
1131 }
1132 spin_unlock_irqrestore(&dev->lock, flags);
1133}
1134
1135void msm_otg_set_vbus_state(int online)
1136{
1137 struct msm_otg *dev = the_msm_otg;
1138
1139 if (!atomic_read(&dev->in_lpm) || !online)
1140 return;
1141
1142 wake_lock(&dev->wlock);
1143 set_bit(B_SESS_VLD, &dev->inputs);
1144 queue_work(dev->wq, &dev->sm_work);
1145}
1146
1147static irqreturn_t msm_otg_irq(int irq, void *data)
1148{
1149 struct msm_otg *dev = data;
1150 u32 otgsc, sts, pc, sts_mask;
1151 irqreturn_t ret = IRQ_HANDLED;
1152 int work = 0;
1153 enum usb_otg_state state;
1154 unsigned long flags;
1155
1156 if (atomic_read(&dev->in_lpm)) {
1157 disable_irq_nosync(dev->irq);
1158 wake_lock(&dev->wlock);
1159 queue_work(dev->wq, &dev->otg_resume_work);
1160 goto out;
1161 }
1162
1163 /* Return immediately if instead of ID pin, USER controls mode switch */
1164 if (dev->pdata->otg_mode == OTG_USER_CONTROL)
1165 return IRQ_NONE;
1166
1167
1168 otgsc = readl(USB_OTGSC);
1169 sts = readl(USB_USBSTS);
1170
1171 sts_mask = (otgsc & OTGSC_INTR_MASK) >> 8;
1172
1173 if (!((otgsc & sts_mask) || (sts & STS_PCI))) {
1174 ret = IRQ_NONE;
1175 goto out;
1176 }
1177
1178 spin_lock_irqsave(&dev->lock, flags);
1179 state = dev->otg.state;
1180 spin_unlock_irqrestore(&dev->lock, flags);
1181
1182 pr_debug("IRQ state: %s\n", state_string(state));
1183 pr_debug("otgsc = %x\n", otgsc);
1184
1185 if ((otgsc & OTGSC_IDIE) && (otgsc & OTGSC_IDIS)) {
1186 if (otgsc & OTGSC_ID) {
1187 pr_debug("Id set\n");
1188 set_bit(ID, &dev->inputs);
1189 } else {
1190 pr_debug("Id clear\n");
1191 /* Assert a_bus_req to supply power on
1192 * VBUS when Micro/Mini-A cable is connected
1193 * with out user intervention.
1194 */
1195 set_bit(A_BUS_REQ, &dev->inputs);
1196 clear_bit(ID, &dev->inputs);
1197 }
1198 writel(otgsc, USB_OTGSC);
1199 work = 1;
1200 } else if (otgsc & OTGSC_BSVIS) {
1201 writel(otgsc, USB_OTGSC);
1202 /* BSV interrupt comes when operating as an A-device
1203 * (VBUS on/off).
1204 * But, handle BSV when charger is removed from ACA in ID_A
1205 */
1206 if ((state >= OTG_STATE_A_IDLE) &&
1207 !test_bit(ID_A, &dev->inputs))
1208 goto out;
1209 if (otgsc & OTGSC_BSV) {
1210 pr_debug("BSV set\n");
1211 set_bit(B_SESS_VLD, &dev->inputs);
1212 } else {
1213 pr_debug("BSV clear\n");
1214 clear_bit(B_SESS_VLD, &dev->inputs);
1215 }
1216 work = 1;
1217 } else if (otgsc & OTGSC_DPIS) {
1218 pr_debug("DPIS detected\n");
1219 writel(otgsc, USB_OTGSC);
1220 set_bit(A_SRP_DET, &dev->inputs);
1221 set_bit(A_BUS_REQ, &dev->inputs);
1222 work = 1;
1223 } else if (sts & STS_PCI) {
1224 pc = readl(USB_PORTSC);
1225 pr_debug("portsc = %x\n", pc);
1226 ret = IRQ_NONE;
1227 /* HCD Acks PCI interrupt. We use this to switch
1228 * between different OTG states.
1229 */
1230 work = 1;
1231 switch (state) {
1232 case OTG_STATE_A_SUSPEND:
1233 if (dev->otg.host->b_hnp_enable && (pc & PORTSC_CSC) &&
1234 !(pc & PORTSC_CCS)) {
1235 pr_debug("B_CONN clear\n");
1236 clear_bit(B_CONN, &dev->inputs);
1237 }
1238 break;
1239 case OTG_STATE_B_WAIT_ACON:
1240 if ((pc & PORTSC_CSC) && (pc & PORTSC_CCS)) {
1241 pr_debug("A_CONN set\n");
1242 set_bit(A_CONN, &dev->inputs);
1243 /* Clear ASE0_BRST timer */
1244 msm_otg_del_timer(dev);
1245 }
1246 break;
1247 case OTG_STATE_B_HOST:
1248 if ((pc & PORTSC_CSC) && !(pc & PORTSC_CCS)) {
1249 pr_debug("A_CONN clear\n");
1250 clear_bit(A_CONN, &dev->inputs);
1251 }
1252 break;
1253 default:
1254 work = 0;
1255 break;
1256 }
1257 }
1258 if (work) {
1259#ifdef CONFIG_USB_MSM_ACA
1260 /* With ACA, ID can change bcoz of BSVIS as well, so update */
1261 if ((otgsc & OTGSC_IDIS) || (otgsc & OTGSC_BSVIS))
1262 set_aca_id_inputs(dev);
1263#endif
1264 wake_lock(&dev->wlock);
1265 queue_work(dev->wq, &dev->sm_work);
1266 }
1267out:
1268 return ret;
1269}
1270
1271#define ULPI_VERIFY_MAX_LOOP_COUNT 5
1272#define PHY_CALIB_RETRY_COUNT 10
1273static void phy_clk_reset(struct msm_otg *dev)
1274{
1275 unsigned rc;
1276 enum clk_reset_action assert = CLK_RESET_ASSERT;
1277
1278 if (dev->pdata->phy_reset_sig_inverted)
1279 assert = CLK_RESET_DEASSERT;
1280
1281 rc = clk_reset(dev->phy_reset_clk, assert);
1282 if (rc) {
1283 pr_err("%s: phy clk assert failed\n", __func__);
1284 return;
1285 }
1286
1287 msleep(1);
1288
1289 rc = clk_reset(dev->phy_reset_clk, !assert);
1290 if (rc) {
1291 pr_err("%s: phy clk deassert failed\n", __func__);
1292 return;
1293 }
1294
1295 msleep(1);
1296}
1297
1298static unsigned ulpi_read_with_reset(struct msm_otg *dev, unsigned reg)
1299{
1300 int temp;
1301 unsigned res;
1302
1303 for (temp = 0; temp < ULPI_VERIFY_MAX_LOOP_COUNT; temp++) {
1304 res = ulpi_read(dev, reg);
1305 if (res != 0xffffffff)
1306 return res;
1307
1308 phy_clk_reset(dev);
1309 }
1310
1311 pr_err("%s: ulpi read failed for %d times\n",
1312 __func__, ULPI_VERIFY_MAX_LOOP_COUNT);
1313
1314 return -1;
1315}
1316
1317static int ulpi_write_with_reset(struct msm_otg *dev,
1318unsigned val, unsigned reg)
1319{
1320 int temp, res;
1321
1322 for (temp = 0; temp < ULPI_VERIFY_MAX_LOOP_COUNT; temp++) {
1323 res = ulpi_write(dev, val, reg);
1324 if (!res)
1325 return 0;
1326 phy_clk_reset(dev);
1327 }
1328 pr_err("%s: ulpi write failed for %d times\n",
1329 __func__, ULPI_VERIFY_MAX_LOOP_COUNT);
1330
1331 return -1;
1332}
1333
1334/* some of the older targets does not turn off the PLL
1335 * if onclock bit is set and clocksuspendM bit is on,
1336 * hence clear them too and initiate the suspend mode
1337 * by clearing SupendM bit.
1338 */
1339static inline int turn_off_phy_pll(struct msm_otg *dev)
1340{
1341 unsigned res;
1342
1343 res = ulpi_read_with_reset(dev, ULPI_CONFIG_REG1);
1344 if (res == 0xffffffff)
1345 return -ETIMEDOUT;
1346
1347 res = ulpi_write_with_reset(dev,
1348 res & ~(ULPI_ONCLOCK), ULPI_CONFIG_REG1);
1349 if (res)
1350 return -ETIMEDOUT;
1351
1352 res = ulpi_write_with_reset(dev,
1353 ULPI_CLOCK_SUSPENDM, ULPI_IFC_CTRL_CLR);
1354 if (res)
1355 return -ETIMEDOUT;
1356
1357 /*Clear SuspendM bit to initiate suspend mode */
1358 res = ulpi_write_with_reset(dev,
1359 ULPI_SUSPENDM, ULPI_FUNC_CTRL_CLR);
1360 if (res)
1361 return -ETIMEDOUT;
1362
1363 return res;
1364}
1365
1366static inline int check_phy_caliberation(struct msm_otg *dev)
1367{
1368 unsigned res;
1369
1370 res = ulpi_read_with_reset(dev, ULPI_DEBUG);
1371
1372 if (res == 0xffffffff)
1373 return -ETIMEDOUT;
1374
1375 if (!(res & ULPI_CALIB_STS) && ULPI_CALIB_VAL(res))
1376 return 0;
1377
1378 return -1;
1379}
1380
1381static int msm_otg_phy_caliberate(struct msm_otg *dev)
1382{
1383 int i = 0;
1384 unsigned long res;
1385
1386 do {
1387 res = turn_off_phy_pll(dev);
1388 if (res)
1389 return -ETIMEDOUT;
1390
1391 /* bring phy out of suspend */
1392 phy_clk_reset(dev);
1393
1394 res = check_phy_caliberation(dev);
1395 if (!res)
1396 return res;
1397 i++;
1398
1399 } while (i < PHY_CALIB_RETRY_COUNT);
1400
1401 return res;
1402}
1403
1404static int msm_otg_phy_reset(struct msm_otg *dev)
1405{
1406 unsigned rc;
1407 unsigned temp;
1408 unsigned long timeout;
1409
1410 rc = clk_reset(dev->hs_clk, CLK_RESET_ASSERT);
1411 if (rc) {
1412 pr_err("%s: usb hs clk assert failed\n", __func__);
1413 return -1;
1414 }
1415
1416 phy_clk_reset(dev);
1417
1418 rc = clk_reset(dev->hs_clk, CLK_RESET_DEASSERT);
1419 if (rc) {
1420 pr_err("%s: usb hs clk deassert failed\n", __func__);
1421 return -1;
1422 }
1423 /* Observing ulpi timeouts as part of PHY calibration. On resetting
1424 * the HW link explicity by setting the RESET bit in the USBCMD
1425 * register before PHY calibration fixes the ulpi timeout issue.
1426 * This workaround is required for unicorn target
1427 */
1428 writel_relaxed(USBCMD_RESET, USB_USBCMD);
1429 timeout = jiffies + USB_LINK_RESET_TIMEOUT;
1430 do {
1431 if (time_after(jiffies, timeout)) {
1432 pr_err("msm_otg: usb link reset timeout\n");
1433 break;
1434 }
1435 usleep_range(1000, 1200);
1436 } while (readl_relaxed(USB_USBCMD) & USBCMD_RESET);
1437
1438 /* select ULPI phy */
1439 temp = (readl(USB_PORTSC) & ~PORTSC_PTS);
1440 writel(temp | PORTSC_PTS_ULPI, USB_PORTSC);
1441
1442 if (atomic_read(&dev->chg_type) !=
1443 USB_CHG_TYPE__WALLCHARGER) {
1444 rc = msm_otg_phy_caliberate(dev);
1445 if (rc)
1446 return rc;
1447 }
1448
1449 /* TBD: There are two link resets. One is below and other one
1450 * is done immediately after this function. See if we can
1451 * eliminate one of these.
1452 */
1453 writel(USBCMD_RESET, USB_USBCMD);
1454 timeout = jiffies + USB_LINK_RESET_TIMEOUT;
1455 do {
1456 if (time_after(jiffies, timeout)) {
1457 pr_err("msm_otg: usb link reset timeout\n");
1458 break;
1459 }
1460 msleep(1);
1461 } while (readl(USB_USBCMD) & USBCMD_RESET);
1462
1463 if (readl(USB_USBCMD) & USBCMD_RESET) {
1464 pr_err("%s: usb core reset failed\n", __func__);
1465 return -1;
1466 }
1467
1468 return 0;
1469}
1470
1471static void otg_reset(struct otg_transceiver *xceiv, int phy_reset)
1472{
1473 struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg);
1474 unsigned long timeout;
1475 u32 mode, work = 0;
1476
1477 clk_enable(dev->hs_clk);
1478
1479 if (!phy_reset)
1480 goto reset_link;
1481
1482 if (dev->pdata->phy_reset)
1483 dev->pdata->phy_reset(dev->regs);
1484 else
1485 msm_otg_phy_reset(dev);
1486
1487 /*disable all phy interrupts*/
1488 ulpi_write(dev, 0xFF, 0x0F);
1489 ulpi_write(dev, 0xFF, 0x12);
1490 msleep(100);
1491
1492reset_link:
1493 writel(USBCMD_RESET, USB_USBCMD);
1494 timeout = jiffies + USB_LINK_RESET_TIMEOUT;
1495 do {
1496 if (time_after(jiffies, timeout)) {
1497 pr_err("msm_otg: usb link reset timeout\n");
1498 break;
1499 }
1500 msleep(1);
1501 } while (readl(USB_USBCMD) & USBCMD_RESET);
1502
1503 /* select ULPI phy */
1504 writel(0x80000000, USB_PORTSC);
1505
1506 set_pre_emphasis_level(dev);
1507 set_hsdrv_slope(dev);
1508 set_cdr_auto_reset(dev);
1509 set_driver_amplitude(dev);
1510 set_se1_gating(dev);
1511
1512 writel(0x0, USB_AHB_BURST);
1513 writel(0x00, USB_AHB_MODE);
Chandra Devireddyb3fc78c2011-08-30 17:25:55 +05301514 if (dev->pdata->bam_disable) {
1515 writel_relaxed((readl_relaxed(USB_GEN_CONFIG) |
1516 USB_BAM_DISABLE), USB_GEN_CONFIG);
1517 pr_debug("%s(): USB_GEN_CONFIG = %x\n",
1518 __func__, readl_relaxed(USB_GEN_CONFIG));
1519 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001520 /* Ensure that RESET operation is completed before turning off clock */
1521 mb();
1522
1523 clk_disable(dev->hs_clk);
1524
1525 if ((xceiv->gadget && xceiv->gadget->is_a_peripheral) ||
1526 test_bit(ID, &dev->inputs))
1527 mode = USBMODE_SDIS | USBMODE_DEVICE;
1528 else
1529 mode = USBMODE_SDIS | USBMODE_HOST;
1530 writel(mode, USB_USBMODE);
1531
1532 writel_relaxed((readl_relaxed(USB_OTGSC) | OTGSC_IDPU), USB_OTGSC);
1533 if (dev->otg.gadget) {
1534 enable_sess_valid(dev);
1535 /* Due to the above 100ms delay, interrupts from PHY are
1536 * sometimes missed during fast plug-in/plug-out of cable.
1537 * Check for such cases here.
1538 */
1539 if (is_b_sess_vld() && !test_bit(B_SESS_VLD, &dev->inputs)) {
1540 pr_debug("%s: handle missing BSV event\n", __func__);
1541 set_bit(B_SESS_VLD, &dev->inputs);
1542 work = 1;
1543 } else if (!is_b_sess_vld() && test_bit(B_SESS_VLD,
1544 &dev->inputs)) {
1545 pr_debug("%s: handle missing !BSV event\n", __func__);
1546 clear_bit(B_SESS_VLD, &dev->inputs);
1547 work = 1;
1548 }
1549 }
1550
1551#ifdef CONFIG_USB_EHCI_MSM_72K
1552 if (dev->otg.host && !dev->pmic_id_notif_supp) {
1553 enable_idgnd(dev);
1554 /* Handle missing ID_GND interrupts during fast PIPO */
1555 if (is_host() && test_bit(ID, &dev->inputs)) {
1556 pr_debug("%s: handle missing ID_GND event\n", __func__);
1557 clear_bit(ID, &dev->inputs);
1558 work = 1;
1559 } else if (!is_host() && !test_bit(ID, &dev->inputs)) {
1560 pr_debug("%s: handle missing !ID_GND event\n",
1561 __func__);
1562 set_bit(ID, &dev->inputs);
1563 work = 1;
1564 }
1565 } else {
1566 disable_idgnd(dev);
1567 }
1568#endif
1569
1570 enable_idabc(dev);
1571
1572 if (work) {
1573 wake_lock(&dev->wlock);
1574 queue_work(dev->wq, &dev->sm_work);
1575 }
1576}
1577
1578static void msm_otg_sm_work(struct work_struct *w)
1579{
1580 struct msm_otg *dev = container_of(w, struct msm_otg, sm_work);
1581 enum chg_type chg_type = atomic_read(&dev->chg_type);
1582 int ret;
1583 int work = 0;
1584 enum usb_otg_state state;
1585 unsigned long flags;
1586
1587 if (atomic_read(&dev->in_lpm))
1588 msm_otg_set_suspend(&dev->otg, 0);
1589
1590 spin_lock_irqsave(&dev->lock, flags);
1591 state = dev->otg.state;
1592 spin_unlock_irqrestore(&dev->lock, flags);
1593
1594 switch (state) {
1595 case OTG_STATE_UNDEFINED:
1596
1597 /*
1598 * We can come here when LPM fails with wall charger
Pavankumar Kondetidc60f122011-09-13 11:17:16 +05301599 * connected. Change the state to B_PERIPHERAL and
1600 * schedule the work which takes care of resetting the
1601 * PHY and putting the hardware in low power mode.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001602 */
1603 if (atomic_read(&dev->chg_type) ==
1604 USB_CHG_TYPE__WALLCHARGER) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001605 spin_lock_irqsave(&dev->lock, flags);
1606 dev->otg.state = OTG_STATE_B_PERIPHERAL;
1607 spin_unlock_irqrestore(&dev->lock, flags);
1608 work = 1;
1609 break;
1610 }
1611
1612 /* Reset both phy and link */
1613 otg_reset(&dev->otg, 1);
1614
1615#ifdef CONFIG_USB_MSM_ACA
1616 set_aca_id_inputs(dev);
1617#endif
1618 if (dev->pdata->otg_mode == OTG_USER_CONTROL) {
1619 if ((dev->pdata->usb_mode == USB_PERIPHERAL_MODE) ||
1620 !dev->otg.host) {
1621 set_bit(ID, &dev->inputs);
1622 set_bit(B_SESS_VLD, &dev->inputs);
1623 }
1624 } else {
1625 if (!dev->otg.host || !is_host())
1626 set_bit(ID, &dev->inputs);
1627
1628 if (dev->otg.gadget && is_b_sess_vld())
1629 set_bit(B_SESS_VLD, &dev->inputs);
1630 }
1631 spin_lock_irqsave(&dev->lock, flags);
1632 if ((test_bit(ID, &dev->inputs)) &&
1633 !test_bit(ID_A, &dev->inputs)) {
1634 dev->otg.state = OTG_STATE_B_IDLE;
1635 } else {
1636 set_bit(A_BUS_REQ, &dev->inputs);
1637 dev->otg.state = OTG_STATE_A_IDLE;
1638 }
1639 spin_unlock_irqrestore(&dev->lock, flags);
1640
1641 work = 1;
1642 break;
1643 case OTG_STATE_B_IDLE:
1644 dev->otg.default_a = 0;
1645 if (!test_bit(ID, &dev->inputs) ||
1646 test_bit(ID_A, &dev->inputs)) {
1647 pr_debug("!id || id_A\n");
1648 clear_bit(B_BUS_REQ, &dev->inputs);
1649 otg_reset(&dev->otg, 0);
1650
1651 spin_lock_irqsave(&dev->lock, flags);
1652 dev->otg.state = OTG_STATE_A_IDLE;
1653 spin_unlock_irqrestore(&dev->lock, flags);
1654 msm_otg_set_power(&dev->otg, 0);
1655 work = 1;
1656 } else if (test_bit(B_SESS_VLD, &dev->inputs) &&
1657 !test_bit(ID_B, &dev->inputs)) {
1658 pr_debug("b_sess_vld\n");
1659 spin_lock_irqsave(&dev->lock, flags);
1660 dev->otg.state = OTG_STATE_B_PERIPHERAL;
1661 spin_unlock_irqrestore(&dev->lock, flags);
1662 msm_otg_set_power(&dev->otg, 0);
1663 msm_otg_start_peripheral(&dev->otg, 1);
1664 } else if (test_bit(B_BUS_REQ, &dev->inputs)) {
1665 pr_debug("b_sess_end && b_bus_req\n");
1666 ret = msm_otg_start_srp(&dev->otg);
1667 if (ret < 0) {
1668 /* notify user space */
1669 clear_bit(B_BUS_REQ, &dev->inputs);
1670 work = 1;
1671 break;
1672 }
1673 spin_lock_irqsave(&dev->lock, flags);
1674 dev->otg.state = OTG_STATE_B_SRP_INIT;
1675 spin_unlock_irqrestore(&dev->lock, flags);
1676 msm_otg_start_timer(dev, TB_SRP_FAIL, B_SRP_FAIL);
1677 break;
1678 } else if (test_bit(ID_B, &dev->inputs)) {
1679 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1680 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1681 } else {
1682 msm_otg_set_power(&dev->otg, 0);
1683 pr_debug("entering into lpm\n");
1684 msm_otg_put_suspend(dev);
1685
1686 if (dev->pdata->ldo_set_voltage)
1687 dev->pdata->ldo_set_voltage(3075);
1688 }
1689 break;
1690 case OTG_STATE_B_SRP_INIT:
1691 if (!test_bit(ID, &dev->inputs) ||
1692 test_bit(ID_A, &dev->inputs) ||
1693 test_bit(ID_C, &dev->inputs) ||
1694 (test_bit(B_SESS_VLD, &dev->inputs) &&
1695 !test_bit(ID_B, &dev->inputs))) {
1696 pr_debug("!id || id_a/c || b_sess_vld+!id_b\n");
1697 msm_otg_del_timer(dev);
1698 spin_lock_irqsave(&dev->lock, flags);
1699 dev->otg.state = OTG_STATE_B_IDLE;
1700 spin_unlock_irqrestore(&dev->lock, flags);
1701 work = 1;
1702 } else if (test_bit(B_SRP_FAIL, &dev->tmouts)) {
1703 pr_debug("b_srp_fail\n");
1704 /* notify user space */
1705 msm_otg_send_event(&dev->otg,
1706 OTG_EVENT_NO_RESP_FOR_SRP);
1707 clear_bit(B_BUS_REQ, &dev->inputs);
1708 clear_bit(B_SRP_FAIL, &dev->tmouts);
1709 spin_lock_irqsave(&dev->lock, flags);
1710 dev->otg.state = OTG_STATE_B_IDLE;
1711 spin_unlock_irqrestore(&dev->lock, flags);
1712 dev->b_last_se0_sess = jiffies;
1713 work = 1;
1714 }
1715 break;
1716 case OTG_STATE_B_PERIPHERAL:
1717 if (!test_bit(ID, &dev->inputs) ||
1718 test_bit(ID_A, &dev->inputs) ||
1719 test_bit(ID_B, &dev->inputs) ||
1720 !test_bit(B_SESS_VLD, &dev->inputs)) {
1721 pr_debug("!id || id_a/b || !b_sess_vld\n");
1722 clear_bit(B_BUS_REQ, &dev->inputs);
1723 spin_lock_irqsave(&dev->lock, flags);
1724 dev->otg.state = OTG_STATE_B_IDLE;
1725 spin_unlock_irqrestore(&dev->lock, flags);
1726 msm_otg_start_peripheral(&dev->otg, 0);
1727 dev->b_last_se0_sess = jiffies;
1728
1729 /* Workaround: Reset phy after session */
1730 otg_reset(&dev->otg, 1);
1731 work = 1;
1732 } else if (test_bit(B_BUS_REQ, &dev->inputs) &&
1733 dev->otg.gadget->b_hnp_enable &&
1734 test_bit(A_BUS_SUSPEND, &dev->inputs)) {
1735 pr_debug("b_bus_req && b_hnp_en && a_bus_suspend\n");
1736 msm_otg_start_timer(dev, TB_ASE0_BRST, B_ASE0_BRST);
1737 msm_otg_start_peripheral(&dev->otg, 0);
1738 spin_lock_irqsave(&dev->lock, flags);
1739 dev->otg.state = OTG_STATE_B_WAIT_ACON;
1740 spin_unlock_irqrestore(&dev->lock, flags);
1741 /* start HCD even before A-device enable
1742 * pull-up to meet HNP timings.
1743 */
1744 dev->otg.host->is_b_host = 1;
1745 msm_otg_start_host(&dev->otg, REQUEST_START);
1746
1747 } else if (test_bit(ID_C, &dev->inputs)) {
1748 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1749 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1750 } else if (chg_type == USB_CHG_TYPE__WALLCHARGER) {
1751#ifdef CONFIG_USB_MSM_ACA
1752 del_timer_sync(&dev->id_timer);
1753#endif
1754 /* Workaround: Reset PHY in SE1 state */
1755 otg_reset(&dev->otg, 1);
1756 pr_debug("entering into lpm with wall-charger\n");
1757 msm_otg_put_suspend(dev);
1758 /* Allow idle power collapse */
1759 otg_pm_qos_update_latency(dev, 0);
1760 }
1761 break;
1762 case OTG_STATE_B_WAIT_ACON:
1763 if (!test_bit(ID, &dev->inputs) ||
1764 test_bit(ID_A, &dev->inputs) ||
1765 test_bit(ID_B, &dev->inputs) ||
1766 !test_bit(B_SESS_VLD, &dev->inputs)) {
1767 pr_debug("!id || id_a/b || !b_sess_vld\n");
1768 msm_otg_del_timer(dev);
1769 /* A-device is physically disconnected during
1770 * HNP. Remove HCD.
1771 */
1772 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1773 dev->otg.host->is_b_host = 0;
1774
1775 clear_bit(B_BUS_REQ, &dev->inputs);
1776 clear_bit(A_BUS_SUSPEND, &dev->inputs);
1777 dev->b_last_se0_sess = jiffies;
1778 spin_lock_irqsave(&dev->lock, flags);
1779 dev->otg.state = OTG_STATE_B_IDLE;
1780 spin_unlock_irqrestore(&dev->lock, flags);
1781
1782 /* Workaround: Reset phy after session */
1783 otg_reset(&dev->otg, 1);
1784 work = 1;
1785 } else if (test_bit(A_CONN, &dev->inputs)) {
1786 pr_debug("a_conn\n");
1787 clear_bit(A_BUS_SUSPEND, &dev->inputs);
1788 spin_lock_irqsave(&dev->lock, flags);
1789 dev->otg.state = OTG_STATE_B_HOST;
1790 spin_unlock_irqrestore(&dev->lock, flags);
1791 if (test_bit(ID_C, &dev->inputs)) {
1792 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1793 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1794 }
1795 } else if (test_bit(B_ASE0_BRST, &dev->tmouts)) {
1796 /* TODO: A-device may send reset after
1797 * enabling HNP; a_bus_resume case is
1798 * not handled for now.
1799 */
1800 pr_debug("b_ase0_brst_tmout\n");
1801 msm_otg_send_event(&dev->otg,
1802 OTG_EVENT_HNP_FAILED);
1803 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1804 dev->otg.host->is_b_host = 0;
1805 clear_bit(B_ASE0_BRST, &dev->tmouts);
1806 clear_bit(A_BUS_SUSPEND, &dev->inputs);
1807 clear_bit(B_BUS_REQ, &dev->inputs);
1808
1809 spin_lock_irqsave(&dev->lock, flags);
1810 dev->otg.state = OTG_STATE_B_PERIPHERAL;
1811 spin_unlock_irqrestore(&dev->lock, flags);
1812 msm_otg_start_peripheral(&dev->otg, 1);
1813 } else if (test_bit(ID_C, &dev->inputs)) {
1814 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1815 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1816 }
1817 break;
1818 case OTG_STATE_B_HOST:
1819 /* B_BUS_REQ is not exposed to user space. So
1820 * it must be A_CONN for now.
1821 */
1822 if (!test_bit(B_BUS_REQ, &dev->inputs) ||
1823 !test_bit(A_CONN, &dev->inputs)) {
1824 pr_debug("!b_bus_req || !a_conn\n");
1825 clear_bit(A_CONN, &dev->inputs);
1826 clear_bit(B_BUS_REQ, &dev->inputs);
1827
1828 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1829 dev->otg.host->is_b_host = 0;
1830
1831 spin_lock_irqsave(&dev->lock, flags);
1832 dev->otg.state = OTG_STATE_B_IDLE;
1833 spin_unlock_irqrestore(&dev->lock, flags);
1834 /* Workaround: Reset phy after session */
1835 otg_reset(&dev->otg, 1);
1836 work = 1;
1837 } else if (test_bit(ID_C, &dev->inputs)) {
1838 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1839 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1840 }
1841 break;
1842 case OTG_STATE_A_IDLE:
1843 dev->otg.default_a = 1;
1844 if (test_bit(ID, &dev->inputs) &&
1845 !test_bit(ID_A, &dev->inputs)) {
1846 pr_debug("id && !id_a\n");
1847 dev->otg.default_a = 0;
1848 otg_reset(&dev->otg, 0);
1849 spin_lock_irqsave(&dev->lock, flags);
1850 dev->otg.state = OTG_STATE_B_IDLE;
1851 spin_unlock_irqrestore(&dev->lock, flags);
1852 msm_otg_set_power(&dev->otg, 0);
1853 work = 1;
1854 } else if (!test_bit(A_BUS_DROP, &dev->inputs) &&
1855 (test_bit(A_SRP_DET, &dev->inputs) ||
1856 test_bit(A_BUS_REQ, &dev->inputs))) {
1857 pr_debug("!a_bus_drop && (a_srp_det || a_bus_req)\n");
1858
1859 clear_bit(A_SRP_DET, &dev->inputs);
1860 /* Disable SRP detection */
1861 writel((readl(USB_OTGSC) & ~OTGSC_INTR_STS_MASK) &
1862 ~OTGSC_DPIE, USB_OTGSC);
1863
1864 spin_lock_irqsave(&dev->lock, flags);
1865 dev->otg.state = OTG_STATE_A_WAIT_VRISE;
1866 spin_unlock_irqrestore(&dev->lock, flags);
1867 /* ACA: ID_A: Stop charging untill enumeration */
1868 if (test_bit(ID_A, &dev->inputs))
1869 msm_otg_set_power(&dev->otg, 0);
1870 else
1871 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
1872 msm_otg_start_timer(dev, TA_WAIT_VRISE, A_WAIT_VRISE);
1873 /* no need to schedule work now */
1874 } else {
1875 pr_debug("No session requested\n");
1876
1877 /* A-device is not providing power on VBUS.
1878 * Enable SRP detection.
1879 */
1880 writel((readl(USB_OTGSC) & ~OTGSC_INTR_STS_MASK) |
1881 OTGSC_DPIE, USB_OTGSC);
1882 msm_otg_put_suspend(dev);
1883
1884 }
1885 break;
1886 case OTG_STATE_A_WAIT_VRISE:
1887 if ((test_bit(ID, &dev->inputs) &&
1888 !test_bit(ID_A, &dev->inputs)) ||
1889 test_bit(A_BUS_DROP, &dev->inputs) ||
1890 test_bit(A_WAIT_VRISE, &dev->tmouts)) {
1891 pr_debug("id || a_bus_drop || a_wait_vrise_tmout\n");
1892 clear_bit(A_BUS_REQ, &dev->inputs);
1893 msm_otg_del_timer(dev);
1894 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1895 spin_lock_irqsave(&dev->lock, flags);
1896 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
1897 spin_unlock_irqrestore(&dev->lock, flags);
1898 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
1899 } else if (test_bit(A_VBUS_VLD, &dev->inputs)) {
1900 pr_debug("a_vbus_vld\n");
1901 spin_lock_irqsave(&dev->lock, flags);
1902 dev->otg.state = OTG_STATE_A_WAIT_BCON;
1903 spin_unlock_irqrestore(&dev->lock, flags);
1904 if (TA_WAIT_BCON > 0)
1905 msm_otg_start_timer(dev, TA_WAIT_BCON,
1906 A_WAIT_BCON);
1907 /* Start HCD to detect peripherals. */
1908 msm_otg_start_host(&dev->otg, REQUEST_START);
1909 }
1910 break;
1911 case OTG_STATE_A_WAIT_BCON:
1912 if ((test_bit(ID, &dev->inputs) &&
1913 !test_bit(ID_A, &dev->inputs)) ||
1914 test_bit(A_BUS_DROP, &dev->inputs) ||
1915 test_bit(A_WAIT_BCON, &dev->tmouts)) {
1916 pr_debug("id_f/b/c || a_bus_drop ||"
1917 "a_wait_bcon_tmout\n");
1918 if (test_bit(A_WAIT_BCON, &dev->tmouts))
1919 msm_otg_send_event(&dev->otg,
1920 OTG_EVENT_DEV_CONN_TMOUT);
1921 msm_otg_del_timer(dev);
1922 clear_bit(A_BUS_REQ, &dev->inputs);
1923 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1924 /* Reset both phy and link */
1925 otg_reset(&dev->otg, 1);
1926 /* ACA: ID_A with NO accessory, just the A plug is
1927 * attached to ACA: Use IDCHG_MAX for charging
1928 */
1929 if (test_bit(ID_A, &dev->inputs))
1930 msm_otg_set_power(&dev->otg, USB_IDCHG_MAX);
1931 else
1932 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1933 spin_lock_irqsave(&dev->lock, flags);
1934 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
1935 spin_unlock_irqrestore(&dev->lock, flags);
1936 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
1937 } else if (test_bit(B_CONN, &dev->inputs)) {
1938 pr_debug("b_conn\n");
1939 msm_otg_del_timer(dev);
1940 /* HCD is added already. just move to
1941 * A_HOST state.
1942 */
1943 spin_lock_irqsave(&dev->lock, flags);
1944 dev->otg.state = OTG_STATE_A_HOST;
1945 spin_unlock_irqrestore(&dev->lock, flags);
1946 if (test_bit(ID_A, &dev->inputs)) {
1947 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
1948 msm_otg_set_power(&dev->otg,
1949 USB_IDCHG_MIN - get_aca_bmaxpower(dev));
1950 }
1951 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
1952 pr_debug("!a_vbus_vld\n");
1953 msm_otg_del_timer(dev);
1954 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1955 spin_lock_irqsave(&dev->lock, flags);
1956 dev->otg.state = OTG_STATE_A_VBUS_ERR;
1957 spin_unlock_irqrestore(&dev->lock, flags);
1958 /* Reset both phy and link */
1959 otg_reset(&dev->otg, 1);
1960 } else if (test_bit(ID_A, &dev->inputs)) {
1961 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1962 } else if (!test_bit(ID, &dev->inputs)) {
1963 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
1964 }
1965 break;
1966 case OTG_STATE_A_HOST:
1967 if ((test_bit(ID, &dev->inputs) &&
1968 !test_bit(ID_A, &dev->inputs)) ||
1969 test_bit(A_BUS_DROP, &dev->inputs)) {
1970 pr_debug("id_f/b/c || a_bus_drop\n");
1971 clear_bit(B_CONN, &dev->inputs);
1972 spin_lock_irqsave(&dev->lock, flags);
1973 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
1974 spin_unlock_irqrestore(&dev->lock, flags);
1975 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1976 /* Reset both phy and link */
1977 otg_reset(&dev->otg, 1);
1978 if (!test_bit(ID_A, &dev->inputs))
1979 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
1980 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
1981 msm_otg_set_power(&dev->otg, 0);
1982 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
1983 pr_debug("!a_vbus_vld\n");
1984 clear_bit(B_CONN, &dev->inputs);
1985 spin_lock_irqsave(&dev->lock, flags);
1986 dev->otg.state = OTG_STATE_A_VBUS_ERR;
1987 spin_unlock_irqrestore(&dev->lock, flags);
1988 msm_otg_start_host(&dev->otg, REQUEST_STOP);
1989 /* Reset both phy and link */
1990 otg_reset(&dev->otg, 1);
1991 /* no work */
1992 } else if (!test_bit(A_BUS_REQ, &dev->inputs)) {
1993 /* a_bus_req is de-asserted when root hub is
1994 * suspended or HNP is in progress.
1995 */
1996 pr_debug("!a_bus_req\n");
1997 spin_lock_irqsave(&dev->lock, flags);
1998 dev->otg.state = OTG_STATE_A_SUSPEND;
1999 spin_unlock_irqrestore(&dev->lock, flags);
2000 if (dev->otg.host->b_hnp_enable) {
2001 msm_otg_start_timer(dev, TA_AIDL_BDIS,
2002 A_AIDL_BDIS);
2003 } else {
2004 /* No HNP. Root hub suspended */
2005 msm_otg_put_suspend(dev);
2006 }
2007 if (test_bit(ID_A, &dev->inputs))
2008 msm_otg_set_power(&dev->otg,
2009 USB_IDCHG_MIN - USB_IB_UNCFG);
2010 } else if (!test_bit(B_CONN, &dev->inputs)) {
2011 pr_debug("!b_conn\n");
2012 spin_lock_irqsave(&dev->lock, flags);
2013 dev->otg.state = OTG_STATE_A_WAIT_BCON;
2014 spin_unlock_irqrestore(&dev->lock, flags);
2015 if (TA_WAIT_BCON > 0)
2016 msm_otg_start_timer(dev, TA_WAIT_BCON,
2017 A_WAIT_BCON);
2018 } else if (test_bit(ID_A, &dev->inputs)) {
2019 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2020 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2021 msm_otg_set_power(&dev->otg,
2022 USB_IDCHG_MIN - get_aca_bmaxpower(dev));
2023 } else if (!test_bit(ID, &dev->inputs)) {
2024 atomic_set(&dev->chg_type, USB_CHG_TYPE__INVALID);
2025 msm_otg_set_power(&dev->otg, 0);
2026 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
2027 }
2028 break;
2029 case OTG_STATE_A_SUSPEND:
2030 if ((test_bit(ID, &dev->inputs) &&
2031 !test_bit(ID_A, &dev->inputs)) ||
2032 test_bit(A_BUS_DROP, &dev->inputs) ||
2033 test_bit(A_AIDL_BDIS, &dev->tmouts)) {
2034 pr_debug("id_f/b/c || a_bus_drop ||"
2035 "a_aidl_bdis_tmout\n");
2036 if (test_bit(A_AIDL_BDIS, &dev->tmouts))
2037 msm_otg_send_event(&dev->otg,
2038 OTG_EVENT_HNP_FAILED);
2039 msm_otg_del_timer(dev);
2040 clear_bit(B_CONN, &dev->inputs);
2041 spin_lock_irqsave(&dev->lock, flags);
2042 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
2043 spin_unlock_irqrestore(&dev->lock, flags);
2044 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2045 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2046 /* Reset both phy and link */
2047 otg_reset(&dev->otg, 1);
2048 if (!test_bit(ID_A, &dev->inputs))
2049 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2050 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
2051 msm_otg_set_power(&dev->otg, 0);
2052 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
2053 pr_debug("!a_vbus_vld\n");
2054 msm_otg_del_timer(dev);
2055 clear_bit(B_CONN, &dev->inputs);
2056 spin_lock_irqsave(&dev->lock, flags);
2057 dev->otg.state = OTG_STATE_A_VBUS_ERR;
2058 spin_unlock_irqrestore(&dev->lock, flags);
2059 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2060 /* Reset both phy and link */
2061 otg_reset(&dev->otg, 1);
2062 } else if (!test_bit(B_CONN, &dev->inputs) &&
2063 dev->otg.host->b_hnp_enable) {
2064 pr_debug("!b_conn && b_hnp_enable");
2065 /* Clear AIDL_BDIS timer */
2066 msm_otg_del_timer(dev);
2067 spin_lock_irqsave(&dev->lock, flags);
2068 dev->otg.state = OTG_STATE_A_PERIPHERAL;
2069 spin_unlock_irqrestore(&dev->lock, flags);
2070
2071 msm_otg_start_host(&dev->otg, REQUEST_HNP_SUSPEND);
2072
2073 /* We may come here even when B-dev is physically
2074 * disconnected during HNP. We go back to host
2075 * role if bus is idle for BIDL_ADIS time.
2076 */
2077 dev->otg.gadget->is_a_peripheral = 1;
2078 msm_otg_start_peripheral(&dev->otg, 1);
2079 /* If ID_A: we can charge in a_peripheral as well */
2080 if (test_bit(ID_A, &dev->inputs)) {
2081 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2082 msm_otg_set_power(&dev->otg,
2083 USB_IDCHG_MIN - USB_IB_UNCFG);
2084 }
2085 } else if (!test_bit(B_CONN, &dev->inputs) &&
2086 !dev->otg.host->b_hnp_enable) {
2087 pr_debug("!b_conn && !b_hnp_enable");
2088 /* bus request is dropped during suspend.
2089 * acquire again for next device.
2090 */
2091 set_bit(A_BUS_REQ, &dev->inputs);
2092 spin_lock_irqsave(&dev->lock, flags);
2093 dev->otg.state = OTG_STATE_A_WAIT_BCON;
2094 spin_unlock_irqrestore(&dev->lock, flags);
2095 if (TA_WAIT_BCON > 0)
2096 msm_otg_start_timer(dev, TA_WAIT_BCON,
2097 A_WAIT_BCON);
2098 msm_otg_set_power(&dev->otg, 0);
2099 } else if (test_bit(ID_A, &dev->inputs)) {
2100 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2101 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2102 msm_otg_set_power(&dev->otg,
2103 USB_IDCHG_MIN - USB_IB_UNCFG);
2104 } else if (!test_bit(ID, &dev->inputs)) {
2105 msm_otg_set_power(&dev->otg, 0);
2106 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
2107 }
2108 break;
2109 case OTG_STATE_A_PERIPHERAL:
2110 if ((test_bit(ID, &dev->inputs) &&
2111 !test_bit(ID_A, &dev->inputs)) ||
2112 test_bit(A_BUS_DROP, &dev->inputs)) {
2113 pr_debug("id _f/b/c || a_bus_drop\n");
2114 /* Clear BIDL_ADIS timer */
2115 msm_otg_del_timer(dev);
2116 spin_lock_irqsave(&dev->lock, flags);
2117 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
2118 spin_unlock_irqrestore(&dev->lock, flags);
2119 msm_otg_start_peripheral(&dev->otg, 0);
2120 dev->otg.gadget->is_a_peripheral = 0;
2121 /* HCD was suspended before. Stop it now */
2122 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2123
2124 /* Reset both phy and link */
2125 otg_reset(&dev->otg, 1);
2126 if (!test_bit(ID_A, &dev->inputs))
2127 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2128 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
2129 msm_otg_set_power(&dev->otg, 0);
2130 } else if (!test_bit(A_VBUS_VLD, &dev->inputs)) {
2131 pr_debug("!a_vbus_vld\n");
2132 /* Clear BIDL_ADIS timer */
2133 msm_otg_del_timer(dev);
2134 spin_lock_irqsave(&dev->lock, flags);
2135 dev->otg.state = OTG_STATE_A_VBUS_ERR;
2136 spin_unlock_irqrestore(&dev->lock, flags);
2137 msm_otg_start_peripheral(&dev->otg, 0);
2138 dev->otg.gadget->is_a_peripheral = 0;
2139 /* HCD was suspended before. Stop it now */
2140 msm_otg_start_host(&dev->otg, REQUEST_STOP);
2141 } else if (test_bit(A_BIDL_ADIS, &dev->tmouts)) {
2142 pr_debug("a_bidl_adis_tmout\n");
2143 msm_otg_start_peripheral(&dev->otg, 0);
2144 dev->otg.gadget->is_a_peripheral = 0;
2145
2146 spin_lock_irqsave(&dev->lock, flags);
2147 dev->otg.state = OTG_STATE_A_WAIT_BCON;
2148 spin_unlock_irqrestore(&dev->lock, flags);
2149 set_bit(A_BUS_REQ, &dev->inputs);
2150 msm_otg_start_host(&dev->otg, REQUEST_HNP_RESUME);
2151 if (TA_WAIT_BCON > 0)
2152 msm_otg_start_timer(dev, TA_WAIT_BCON,
2153 A_WAIT_BCON);
2154 msm_otg_set_power(&dev->otg, 0);
2155 } else if (test_bit(ID_A, &dev->inputs)) {
2156 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2157 atomic_set(&dev->chg_type, USB_CHG_TYPE__SDP);
2158 msm_otg_set_power(&dev->otg,
2159 USB_IDCHG_MIN - USB_IB_UNCFG);
2160 } else if (!test_bit(ID, &dev->inputs)) {
2161 msm_otg_set_power(&dev->otg, 0);
2162 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 1);
2163 }
2164 break;
2165 case OTG_STATE_A_WAIT_VFALL:
2166 if (test_bit(A_WAIT_VFALL, &dev->tmouts)) {
2167 clear_bit(A_VBUS_VLD, &dev->inputs);
2168 spin_lock_irqsave(&dev->lock, flags);
2169 dev->otg.state = OTG_STATE_A_IDLE;
2170 spin_unlock_irqrestore(&dev->lock, flags);
2171 work = 1;
2172 }
2173 break;
2174 case OTG_STATE_A_VBUS_ERR:
2175 if ((test_bit(ID, &dev->inputs) &&
2176 !test_bit(ID_A, &dev->inputs)) ||
2177 test_bit(A_BUS_DROP, &dev->inputs) ||
2178 test_bit(A_CLR_ERR, &dev->inputs)) {
2179 spin_lock_irqsave(&dev->lock, flags);
2180 dev->otg.state = OTG_STATE_A_WAIT_VFALL;
2181 spin_unlock_irqrestore(&dev->lock, flags);
2182 if (!test_bit(ID_A, &dev->inputs))
2183 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2184 msm_otg_start_timer(dev, TA_WAIT_VFALL, A_WAIT_VFALL);
2185 msm_otg_set_power(&dev->otg, 0);
2186 }
2187 break;
2188 default:
2189 pr_err("invalid OTG state\n");
2190 }
2191
2192 if (work)
2193 queue_work(dev->wq, &dev->sm_work);
2194
2195#ifdef CONFIG_USB_MSM_ACA
2196 /* Start id_polling if (ID_FLOAT&BSV) || ID_A/B/C */
2197 if ((test_bit(ID, &dev->inputs) &&
2198 test_bit(B_SESS_VLD, &dev->inputs) &&
2199 chg_type != USB_CHG_TYPE__WALLCHARGER) ||
2200 test_bit(ID_A, &dev->inputs)) {
2201 mod_timer(&dev->id_timer, jiffies +
2202 msecs_to_jiffies(OTG_ID_POLL_MS));
2203 return;
2204 }
2205 del_timer(&dev->id_timer);
2206#endif
2207 /* IRQ/sysfs may queue work. Check work_pending. otherwise
2208 * we might endup releasing wakelock after it is acquired
2209 * in IRQ/sysfs.
2210 */
2211 if (!work_pending(&dev->sm_work) && !hrtimer_active(&dev->timer) &&
2212 !work_pending(&dev->otg_resume_work))
2213 wake_unlock(&dev->wlock);
2214}
2215
2216#ifdef CONFIG_USB_MSM_ACA
2217static void msm_otg_id_func(unsigned long _dev)
2218{
2219 struct msm_otg *dev = (struct msm_otg *) _dev;
2220 u8 phy_ints;
2221
2222#ifdef CONFIG_USB_MSM_STANDARD_ACA
2223 /*
2224 * When standard ACA is attached RID_A and RID_GND states are only
2225 * possible. RID_A-->RID_GND transition generates IdGnd interrupt
2226 * from PHY. Hence polling is disabled.
2227 */
2228 if (test_bit(ID_A, &dev->inputs))
2229 goto out;
2230#endif
2231
2232 if (atomic_read(&dev->in_lpm))
2233 msm_otg_set_suspend(&dev->otg, 0);
2234
2235 phy_ints = ulpi_read(dev, 0x13);
2236
2237 /*
2238 * ACA timer will be kicked again after the PHY
2239 * state is recovered.
2240 */
2241 if (phy_ints == -ETIMEDOUT)
2242 return;
2243
2244
2245 /* If id_gnd happened then stop and let isr take care of this */
2246 if (phy_id_state_gnd(phy_ints))
2247 goto out;
2248
2249 if ((test_bit(ID_A, &dev->inputs) == phy_id_state_a(phy_ints)) &&
2250 (test_bit(ID_B, &dev->inputs) == phy_id_state_b(phy_ints)) &&
2251 (test_bit(ID_C, &dev->inputs) == phy_id_state_c(phy_ints))) {
2252 mod_timer(&dev->id_timer,
2253 jiffies + msecs_to_jiffies(OTG_ID_POLL_MS));
2254 goto out;
2255 } else {
2256 set_aca_id_inputs(dev);
2257 }
2258 wake_lock(&dev->wlock);
2259 queue_work(dev->wq, &dev->sm_work);
2260out:
2261 /* OOPS: runing while !BSV, schedule work to initiate LPM */
2262 if (!is_b_sess_vld()) {
2263 clear_bit(B_SESS_VLD, &dev->inputs);
2264 wake_lock(&dev->wlock);
2265 queue_work(dev->wq, &dev->sm_work);
2266 }
2267 return;
2268}
2269#endif
2270#ifdef CONFIG_USB_OTG
2271static ssize_t
2272set_pwr_down(struct device *_dev, struct device_attribute *attr,
2273 const char *buf, size_t count)
2274{
2275 struct msm_otg *dev = the_msm_otg;
2276 int value;
2277 enum usb_otg_state state;
2278 unsigned long flags;
2279
2280 spin_lock_irqsave(&dev->lock, flags);
2281 state = dev->otg.state;
2282 spin_unlock_irqrestore(&dev->lock, flags);
2283
2284 /* Applicable for only A-Device */
2285 if (state <= OTG_STATE_A_IDLE)
2286 return -EINVAL;
2287
2288 sscanf(buf, "%d", &value);
2289
2290 if (test_bit(A_BUS_DROP, &dev->inputs) != !!value) {
2291 change_bit(A_BUS_DROP, &dev->inputs);
2292 wake_lock(&dev->wlock);
2293 queue_work(dev->wq, &dev->sm_work);
2294 }
2295
2296 return count;
2297}
2298static DEVICE_ATTR(pwr_down, S_IRUGO | S_IWUSR, NULL, set_pwr_down);
2299
2300static ssize_t
2301set_srp_req(struct device *_dev, struct device_attribute *attr,
2302 const char *buf, size_t count)
2303{
2304 struct msm_otg *dev = the_msm_otg;
2305 enum usb_otg_state state;
2306 unsigned long flags;
2307
2308 spin_lock_irqsave(&dev->lock, flags);
2309 state = dev->otg.state;
2310 spin_unlock_irqrestore(&dev->lock, flags);
2311
2312 if (state != OTG_STATE_B_IDLE)
2313 return -EINVAL;
2314
2315 set_bit(B_BUS_REQ, &dev->inputs);
2316 wake_lock(&dev->wlock);
2317 queue_work(dev->wq, &dev->sm_work);
2318
2319 return count;
2320}
2321static DEVICE_ATTR(srp_req, S_IRUGO | S_IWUSR, NULL, set_srp_req);
2322
2323static ssize_t
2324set_clr_err(struct device *_dev, struct device_attribute *attr,
2325 const char *buf, size_t count)
2326{
2327 struct msm_otg *dev = the_msm_otg;
2328 enum usb_otg_state state;
2329 unsigned long flags;
2330
2331 spin_lock_irqsave(&dev->lock, flags);
2332 state = dev->otg.state;
2333 spin_unlock_irqrestore(&dev->lock, flags);
2334
2335 if (state == OTG_STATE_A_VBUS_ERR) {
2336 set_bit(A_CLR_ERR, &dev->inputs);
2337 wake_lock(&dev->wlock);
2338 queue_work(dev->wq, &dev->sm_work);
2339 }
2340
2341 return count;
2342}
2343static DEVICE_ATTR(clr_err, S_IRUGO | S_IWUSR, NULL, set_clr_err);
2344
2345static struct attribute *msm_otg_attrs[] = {
2346 &dev_attr_pwr_down.attr,
2347 &dev_attr_srp_req.attr,
2348 &dev_attr_clr_err.attr,
2349 NULL,
2350};
2351
2352static struct attribute_group msm_otg_attr_grp = {
2353 .attrs = msm_otg_attrs,
2354};
2355#endif
2356
2357#ifdef CONFIG_DEBUG_FS
2358static int otg_open(struct inode *inode, struct file *file)
2359{
2360 file->private_data = inode->i_private;
2361 return 0;
2362}
2363static ssize_t otg_mode_write(struct file *file, const char __user *buf,
2364 size_t count, loff_t *ppos)
2365{
2366 struct msm_otg *dev = file->private_data;
2367 int ret = count;
2368 int work = 0;
2369 unsigned long flags;
2370
2371 spin_lock_irqsave(&dev->lock, flags);
2372 dev->pdata->otg_mode = OTG_USER_CONTROL;
Pavankumar Kondetif0f95d82011-09-23 11:38:57 +05302373 if (!memcmp(buf, "none", 4)) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002374 clear_bit(B_SESS_VLD, &dev->inputs);
2375 set_bit(ID, &dev->inputs);
2376 work = 1;
Pavankumar Kondetif0f95d82011-09-23 11:38:57 +05302377 } else if (!memcmp(buf, "peripheral", 10)) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002378 set_bit(B_SESS_VLD, &dev->inputs);
2379 set_bit(ID, &dev->inputs);
2380 work = 1;
Pavankumar Kondetif0f95d82011-09-23 11:38:57 +05302381 } else if (!memcmp(buf, "host", 4)) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002382 clear_bit(B_SESS_VLD, &dev->inputs);
2383 clear_bit(ID, &dev->inputs);
2384 set_bit(A_BUS_REQ, &dev->inputs);
2385 work = 1;
2386 } else {
2387 pr_info("%s: unknown mode specified\n", __func__);
2388 ret = -EINVAL;
2389 }
2390 spin_unlock_irqrestore(&dev->lock, flags);
2391
2392 if (work) {
2393 wake_lock(&dev->wlock);
2394 queue_work(dev->wq, &dev->sm_work);
2395 }
2396
2397 return ret;
2398}
2399const struct file_operations otgfs_fops = {
2400 .open = otg_open,
2401 .write = otg_mode_write,
2402};
2403
2404#define OTG_INFO_SIZE 512
2405static ssize_t otg_info_read(struct file *file, char __user *ubuf,
2406 size_t count, loff_t *ppos)
2407{
2408 char *buf;
2409 int temp = 0;
2410 int ret;
2411 struct msm_otg *dev = file->private_data;
2412
2413 buf = kzalloc(sizeof(char) * OTG_INFO_SIZE, GFP_KERNEL);
2414 if (!buf)
2415 return -ENOMEM;
2416
2417 temp += scnprintf(buf + temp, OTG_INFO_SIZE - temp,
2418 "OTG State: %s\n"
2419 "OTG Mode: %d\n"
2420 "OTG Inputs: 0x%lx\n"
2421 "Charger Type: %d\n"
2422 "PMIC VBUS Support: %u\n"
2423 "PMIC ID Support: %u\n"
2424 "Core Clock: %u\n"
2425 "USB In SPS: %d\n"
2426 "pre_emphasis_level: 0x%x\n"
2427 "cdr_auto_reset: 0x%x\n"
2428 "hs_drv_amplitude: 0x%x\n"
2429 "se1_gate_state: 0x%x\n"
2430 "swfi_latency: 0x%x\n"
2431 "PHY Powercollapse: 0x%x\n"
2432 "PCLK Voting: 0x%x\n",
2433 state_string(dev->otg.state),
2434 dev->pdata->otg_mode,
2435 dev->inputs,
2436 atomic_read(&dev->chg_type),
2437 dev->pmic_vbus_notif_supp,
2438 dev->pmic_id_notif_supp,
2439 dev->pdata->core_clk,
2440 dev->pdata->usb_in_sps,
2441 dev->pdata->pemp_level,
2442 dev->pdata->cdr_autoreset,
2443 dev->pdata->drv_ampl,
2444 dev->pdata->se1_gating,
2445 dev->pdata->swfi_latency,
2446 dev->pdata->phy_can_powercollapse,
2447 pclk_requires_voting(&dev->otg));
2448
2449 ret = simple_read_from_buffer(ubuf, count, ppos, buf, temp);
2450
2451 kfree(buf);
2452
2453 return ret;
2454}
2455
2456const struct file_operations otgfs_info_fops = {
2457 .open = otg_open,
2458 .read = otg_info_read,
2459};
2460
2461struct dentry *otg_debug_root;
2462struct dentry *otg_debug_mode;
2463struct dentry *otg_debug_info;
2464#endif
2465
2466static int otg_debugfs_init(struct msm_otg *dev)
2467{
2468#ifdef CONFIG_DEBUG_FS
2469 otg_debug_root = debugfs_create_dir("otg", NULL);
2470 if (!otg_debug_root)
2471 return -ENOENT;
2472
2473 otg_debug_mode = debugfs_create_file("mode", 0222,
2474 otg_debug_root, dev,
2475 &otgfs_fops);
2476 if (!otg_debug_mode)
2477 goto free_root;
2478
2479 otg_debug_info = debugfs_create_file("info", 0444,
2480 otg_debug_root, dev,
2481 &otgfs_info_fops);
2482 if (!otg_debug_info)
2483 goto free_mode;
2484
2485 return 0;
2486
2487free_mode:
2488 debugfs_remove(otg_debug_mode);
2489 otg_debug_mode = NULL;
2490
2491free_root:
2492 debugfs_remove(otg_debug_root);
2493 otg_debug_root = NULL;
2494 return -ENOENT;
2495#endif
2496 return 0;
2497}
2498
2499static void otg_debugfs_cleanup(void)
2500{
2501#ifdef CONFIG_DEBUG_FS
2502 debugfs_remove(otg_debug_info);
2503 debugfs_remove(otg_debug_mode);
2504 debugfs_remove(otg_debug_root);
2505#endif
2506}
2507
2508struct otg_io_access_ops msm_otg_io_ops = {
2509 .read = usb_ulpi_read,
2510 .write = usb_ulpi_write,
2511};
2512
2513static int __init msm_otg_probe(struct platform_device *pdev)
2514{
2515 int ret = 0;
2516 struct resource *res;
2517 struct msm_otg *dev;
2518
2519 dev = kzalloc(sizeof(struct msm_otg), GFP_KERNEL);
2520 if (!dev)
2521 return -ENOMEM;
2522
2523 the_msm_otg = dev;
2524 dev->otg.dev = &pdev->dev;
2525 dev->pdata = pdev->dev.platform_data;
2526
2527 if (!dev->pdata) {
2528 ret = -ENODEV;
2529 goto free_dev;
2530 }
2531
2532#ifdef CONFIG_USB_EHCI_MSM_72K
2533 if (!dev->pdata->vbus_power) {
2534 ret = -ENODEV;
2535 goto free_dev;
2536 } else
2537 dev->pdata->vbus_power(USB_PHY_INTEGRATED, 0);
2538
2539#endif
2540
2541
2542 if (dev->pdata->rpc_connect) {
2543 ret = dev->pdata->rpc_connect(1);
2544 pr_debug("%s: rpc_connect(%d)\n", __func__, ret);
2545 if (ret) {
2546 pr_err("%s: rpc connect failed\n", __func__);
2547 ret = -ENODEV;
2548 goto free_dev;
2549 }
2550 }
2551
2552 dev->hs_clk = clk_get(&pdev->dev, "usb_hs_clk");
2553 if (IS_ERR(dev->hs_clk)) {
2554 pr_err("%s: failed to get usb_hs_clk\n", __func__);
2555 ret = PTR_ERR(dev->hs_clk);
2556 goto rpc_fail;
2557 }
2558 clk_set_rate(dev->hs_clk, 60000000);
2559
2560 /* pm qos request to prevent apps idle power collapse */
2561 pm_qos_add_request(&dev->pdata->pm_qos_req_dma, PM_QOS_CPU_DMA_LATENCY,
2562 PM_QOS_DEFAULT_VALUE);
2563
2564 /* If USB Core is running its protocol engine based on PCLK,
2565 * PCLK must be running at >60Mhz for correct HSUSB operation and
2566 * USB core cannot tolerate frequency changes on PCLK. For such
2567 * USB cores, vote for maximum clk frequency on pclk source
2568 */
2569 if (dev->pdata->pclk_src_name) {
2570 dev->pclk_src = clk_get(0, dev->pdata->pclk_src_name);
2571 if (IS_ERR(dev->pclk_src))
2572 goto put_hs_clk;
2573 clk_set_rate(dev->pclk_src, INT_MAX);
2574 msm_otg_vote_for_pclk_source(dev, 1);
2575 }
2576
2577 if (!dev->pdata->pclk_is_hw_gated) {
2578 dev->hs_pclk = clk_get(&pdev->dev, "usb_hs_pclk");
2579 if (IS_ERR(dev->hs_pclk)) {
2580 pr_err("%s: failed to get usb_hs_pclk\n", __func__);
2581 ret = PTR_ERR(dev->hs_pclk);
2582 goto put_pclk_src;
2583 }
2584 clk_enable(dev->hs_pclk);
2585 }
2586
2587 if (dev->pdata->core_clk) {
2588 dev->hs_cclk = clk_get(&pdev->dev, "usb_hs_core_clk");
2589 if (IS_ERR(dev->hs_cclk)) {
2590 pr_err("%s: failed to get usb_hs_core_clk\n", __func__);
2591 ret = PTR_ERR(dev->hs_cclk);
2592 goto put_hs_pclk;
2593 }
2594 clk_enable(dev->hs_cclk);
2595 }
2596
2597 if (!dev->pdata->phy_reset) {
2598 dev->phy_reset_clk = clk_get(&pdev->dev, "usb_phy_clk");
2599 if (IS_ERR(dev->phy_reset_clk)) {
2600 pr_err("%s: failed to get usb_phy_clk\n", __func__);
2601 ret = PTR_ERR(dev->phy_reset_clk);
2602 goto put_hs_cclk;
2603 }
2604 }
2605
2606 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2607 if (!res) {
2608 pr_err("%s: failed to get platform resource mem\n", __func__);
2609 ret = -ENODEV;
2610 goto put_phy_clk;
2611 }
2612
2613 dev->regs = ioremap(res->start, resource_size(res));
2614 if (!dev->regs) {
2615 pr_err("%s: ioremap failed\n", __func__);
2616 ret = -ENOMEM;
2617 goto put_phy_clk;
2618 }
2619 dev->irq = platform_get_irq(pdev, 0);
2620 if (!dev->irq) {
2621 pr_err("%s: platform_get_irq failed\n", __func__);
2622 ret = -ENODEV;
2623 goto free_regs;
2624 }
2625 dev->xo_handle = msm_xo_get(MSM_XO_TCXO_D1, "usb");
2626 if (IS_ERR(dev->xo_handle)) {
2627 pr_err(" %s not able to get the handle"
2628 "to vote for TCXO D1 buffer\n", __func__);
2629 ret = PTR_ERR(dev->xo_handle);
2630 goto free_regs;
2631 }
2632
2633 ret = msm_xo_mode_vote(dev->xo_handle, MSM_XO_MODE_ON);
2634 if (ret) {
2635 pr_err("%s failed to vote for TCXO"
2636 "D1 buffer%d\n", __func__, ret);
2637 goto free_xo_handle;
2638 }
2639
2640
2641 msm_otg_init_timer(dev);
2642 INIT_WORK(&dev->sm_work, msm_otg_sm_work);
2643 INIT_WORK(&dev->otg_resume_work, msm_otg_resume_w);
2644 spin_lock_init(&dev->lock);
2645 wake_lock_init(&dev->wlock, WAKE_LOCK_SUSPEND, "msm_otg");
2646
2647 dev->wq = alloc_workqueue("k_otg", WQ_NON_REENTRANT, 0);
2648 if (!dev->wq) {
2649 ret = -ENOMEM;
2650 goto free_wlock;
2651 }
2652
2653 if (dev->pdata->init_gpio) {
2654 ret = dev->pdata->init_gpio(1);
2655 if (ret) {
2656 pr_err("%s: gpio init failed with err:%d\n",
2657 __func__, ret);
2658 goto free_wq;
2659 }
2660 }
2661 /* To reduce phy power consumption and to avoid external LDO
2662 * on the board, PMIC comparators can be used to detect VBUS
2663 * session change.
2664 */
2665 if (dev->pdata->pmic_vbus_notif_init) {
2666 ret = dev->pdata->pmic_vbus_notif_init
2667 (&msm_otg_set_vbus_state, 1);
2668 if (!ret) {
2669 dev->pmic_vbus_notif_supp = 1;
2670 } else if (ret != -ENOTSUPP) {
2671 pr_err("%s: pmic_vbus_notif_init() failed, err:%d\n",
2672 __func__, ret);
2673 goto free_gpio;
2674 }
2675 }
2676
2677 if (dev->pdata->pmic_id_notif_init) {
2678 ret = dev->pdata->pmic_id_notif_init(&msm_otg_set_id_state, 1);
2679 if (!ret) {
2680 dev->pmic_id_notif_supp = 1;
2681 } else if (ret != -ENOTSUPP) {
2682 pr_err("%s: pmic_id_ notif_init failed err:%d",
2683 __func__, ret);
2684 goto free_pmic_vbus_notif;
2685 }
2686 }
2687
2688 if (dev->pdata->pmic_vbus_irq)
2689 dev->vbus_on_irq = dev->pdata->pmic_vbus_irq;
Anji jonnalaeb9e60d2011-10-05 12:19:46 +05302690 if (dev->pdata->pmic_id_irq)
2691 dev->id_irq = dev->pdata->pmic_id_irq;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002692
2693 /* vote for vddcx, as PHY cannot tolerate vddcx below 1.0V */
2694 if (dev->pdata->init_vddcx) {
2695 ret = dev->pdata->init_vddcx(1);
2696 if (ret) {
2697 pr_err("%s: unable to enable vddcx digital core:%d\n",
2698 __func__, ret);
2699 goto free_pmic_id_notif;
2700 }
2701 }
2702
2703 if (dev->pdata->ldo_init) {
2704 ret = dev->pdata->ldo_init(1);
2705 if (ret) {
2706 pr_err("%s: ldo_init failed with err:%d\n",
2707 __func__, ret);
2708 goto free_config_vddcx;
2709 }
2710 }
2711
2712 if (dev->pdata->ldo_enable) {
2713 ret = dev->pdata->ldo_enable(1);
2714 if (ret) {
2715 pr_err("%s: ldo_enable failed with err:%d\n",
2716 __func__, ret);
2717 goto free_ldo_init;
2718 }
2719 }
2720
2721
2722 /* ACk all pending interrupts and clear interrupt enable registers */
2723 writel((readl(USB_OTGSC) & ~OTGSC_INTR_MASK), USB_OTGSC);
2724 writel(readl(USB_USBSTS), USB_USBSTS);
2725 writel(0, USB_USBINTR);
2726 /* Ensure that above STOREs are completed before enabling interrupts */
2727 mb();
2728
2729 ret = request_irq(dev->irq, msm_otg_irq, IRQF_SHARED,
2730 "msm_otg", dev);
2731 if (ret) {
2732 pr_err("%s: request irq failed\n", __func__);
2733 goto free_ldo_enable;
2734 }
2735
2736 dev->otg.set_peripheral = msm_otg_set_peripheral;
2737#ifdef CONFIG_USB_EHCI_MSM_72K
2738 dev->otg.set_host = msm_otg_set_host;
2739#endif
2740 dev->otg.set_suspend = msm_otg_set_suspend;
2741 dev->otg.start_hnp = msm_otg_start_hnp;
2742 dev->otg.send_event = msm_otg_send_event;
2743 dev->otg.set_power = msm_otg_set_power;
2744 dev->set_clk = msm_otg_set_clk;
2745 dev->reset = otg_reset;
2746 dev->otg.io_ops = &msm_otg_io_ops;
2747 if (otg_set_transceiver(&dev->otg)) {
2748 WARN_ON(1);
2749 goto free_otg_irq;
2750 }
2751#ifdef CONFIG_USB_MSM_ACA
2752 /* Link doesnt support id_a/b/c interrupts, hence polling
2753 * needs to be done to support ACA charger
2754 */
2755 init_timer(&dev->id_timer);
2756 dev->id_timer.function = msm_otg_id_func;
2757 dev->id_timer.data = (unsigned long) dev;
2758#endif
2759
2760 atomic_set(&dev->chg_type, USB_CHG_TYPE__INVALID);
2761 if (dev->pdata->chg_init && dev->pdata->chg_init(1))
2762 pr_err("%s: chg_init failed\n", __func__);
2763
2764 device_init_wakeup(&pdev->dev, 1);
2765
2766 ret = pm_runtime_set_active(&pdev->dev);
2767 if (ret < 0)
2768 pr_err("%s: pm_runtime: Fail to set active\n", __func__);
2769
2770 ret = 0;
2771 pm_runtime_enable(&pdev->dev);
2772 pm_runtime_get(&pdev->dev);
2773
2774
2775 ret = otg_debugfs_init(dev);
2776 if (ret) {
2777 pr_err("%s: otg_debugfs_init failed\n", __func__);
2778 goto chg_deinit;
2779 }
2780
2781#ifdef CONFIG_USB_OTG
2782 ret = sysfs_create_group(&pdev->dev.kobj, &msm_otg_attr_grp);
2783 if (ret < 0) {
2784 pr_err("%s: Failed to create the sysfs entry\n", __func__);
2785 otg_debugfs_cleanup();
2786 goto chg_deinit;
2787 }
2788#endif
2789
2790
2791 return 0;
2792
2793chg_deinit:
2794 if (dev->pdata->chg_init)
2795 dev->pdata->chg_init(0);
2796free_otg_irq:
2797 free_irq(dev->irq, dev);
2798free_ldo_enable:
2799 if (dev->pdata->ldo_enable)
2800 dev->pdata->ldo_enable(0);
2801 if (dev->pdata->setup_gpio)
2802 dev->pdata->setup_gpio(USB_SWITCH_DISABLE);
2803free_ldo_init:
2804 if (dev->pdata->ldo_init)
2805 dev->pdata->ldo_init(0);
2806free_config_vddcx:
2807 if (dev->pdata->init_vddcx)
2808 dev->pdata->init_vddcx(0);
2809free_pmic_id_notif:
2810 if (dev->pdata->pmic_id_notif_init && dev->pmic_id_notif_supp)
2811 dev->pdata->pmic_id_notif_init(&msm_otg_set_id_state, 0);
2812free_pmic_vbus_notif:
2813 if (dev->pdata->pmic_vbus_notif_init && dev->pmic_vbus_notif_supp)
2814 dev->pdata->pmic_vbus_notif_init(&msm_otg_set_vbus_state, 0);
2815free_gpio:
2816 if (dev->pdata->init_gpio)
2817 dev->pdata->init_gpio(0);
2818free_wq:
2819 destroy_workqueue(dev->wq);
2820free_wlock:
2821 wake_lock_destroy(&dev->wlock);
2822free_xo_handle:
2823 msm_xo_put(dev->xo_handle);
2824free_regs:
2825 iounmap(dev->regs);
2826put_phy_clk:
2827 if (dev->phy_reset_clk)
2828 clk_put(dev->phy_reset_clk);
2829put_hs_cclk:
2830 if (dev->hs_cclk) {
2831 clk_disable(dev->hs_cclk);
2832 clk_put(dev->hs_cclk);
2833 }
2834put_hs_pclk:
2835 if (dev->hs_pclk) {
2836 clk_disable(dev->hs_pclk);
2837 clk_put(dev->hs_pclk);
2838 }
2839put_pclk_src:
2840 if (dev->pclk_src) {
2841 msm_otg_vote_for_pclk_source(dev, 0);
2842 clk_put(dev->pclk_src);
2843 }
2844put_hs_clk:
2845 if (dev->hs_clk)
2846 clk_put(dev->hs_clk);
2847rpc_fail:
2848 if (dev->pdata->rpc_connect)
2849 dev->pdata->rpc_connect(0);
2850free_dev:
2851 kfree(dev);
2852 return ret;
2853}
2854
2855static int __exit msm_otg_remove(struct platform_device *pdev)
2856{
2857 struct msm_otg *dev = the_msm_otg;
2858
2859 otg_debugfs_cleanup();
2860#ifdef CONFIG_USB_OTG
2861 sysfs_remove_group(&pdev->dev.kobj, &msm_otg_attr_grp);
2862#endif
2863 destroy_workqueue(dev->wq);
2864 wake_lock_destroy(&dev->wlock);
2865
2866 if (dev->pdata->setup_gpio)
2867 dev->pdata->setup_gpio(USB_SWITCH_DISABLE);
2868
2869 if (dev->pdata->init_vddcx)
2870 dev->pdata->init_vddcx(0);
2871 if (dev->pdata->ldo_enable)
2872 dev->pdata->ldo_enable(0);
2873
2874 if (dev->pdata->ldo_init)
2875 dev->pdata->ldo_init(0);
2876
2877 if (dev->pmic_vbus_notif_supp)
2878 dev->pdata->pmic_vbus_notif_init(&msm_otg_set_vbus_state, 0);
2879
2880 if (dev->pmic_id_notif_supp)
2881 dev->pdata->pmic_id_notif_init(&msm_otg_set_id_state, 0);
2882
2883#ifdef CONFIG_USB_MSM_ACA
2884 del_timer_sync(&dev->id_timer);
2885#endif
2886 if (dev->pdata->chg_init)
2887 dev->pdata->chg_init(0);
2888 free_irq(dev->irq, pdev);
2889 iounmap(dev->regs);
2890 if (dev->hs_cclk) {
2891 clk_disable(dev->hs_cclk);
2892 clk_put(dev->hs_cclk);
2893 }
2894 if (dev->hs_pclk) {
2895 clk_disable(dev->hs_pclk);
2896 clk_put(dev->hs_pclk);
2897 }
2898 if (dev->hs_clk)
2899 clk_put(dev->hs_clk);
2900 if (dev->phy_reset_clk)
2901 clk_put(dev->phy_reset_clk);
2902 if (dev->pdata->rpc_connect)
2903 dev->pdata->rpc_connect(0);
Pavankumar Kondetif0f95d82011-09-23 11:38:57 +05302904 if (dev->pclk_src) {
2905 msm_otg_vote_for_pclk_source(dev, 0);
2906 clk_put(dev->pclk_src);
2907 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002908 msm_xo_put(dev->xo_handle);
Pavankumar Kondetif0f95d82011-09-23 11:38:57 +05302909 pm_qos_remove_request(&dev->pdata->pm_qos_req_dma);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002910
2911 pm_runtime_put(&pdev->dev);
2912 pm_runtime_disable(&pdev->dev);
2913 kfree(dev);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002914 return 0;
2915}
2916
2917static int msm_otg_runtime_suspend(struct device *dev)
2918{
2919 struct msm_otg *otg = the_msm_otg;
2920
2921 dev_dbg(dev, "pm_runtime: suspending...\n");
2922 msm_otg_suspend(otg);
2923 return 0;
2924}
2925
2926static int msm_otg_runtime_resume(struct device *dev)
2927{
2928 struct msm_otg *otg = the_msm_otg;
2929
2930 dev_dbg(dev, "pm_runtime: resuming...\n");
2931 msm_otg_resume(otg);
2932 return 0;
2933}
2934
2935static int msm_otg_runtime_idle(struct device *dev)
2936{
2937 dev_dbg(dev, "pm_runtime: idling...\n");
2938 return 0;
2939}
2940
2941static struct dev_pm_ops msm_otg_dev_pm_ops = {
2942 .runtime_suspend = msm_otg_runtime_suspend,
2943 .runtime_resume = msm_otg_runtime_resume,
2944 .runtime_idle = msm_otg_runtime_idle,
2945};
2946
2947static struct platform_driver msm_otg_driver = {
2948 .remove = __exit_p(msm_otg_remove),
2949 .driver = {
2950 .name = DRIVER_NAME,
2951 .owner = THIS_MODULE,
2952 .pm = &msm_otg_dev_pm_ops,
2953 },
2954};
2955
2956static int __init msm_otg_init(void)
2957{
2958 return platform_driver_probe(&msm_otg_driver, msm_otg_probe);
2959}
2960
2961static void __exit msm_otg_exit(void)
2962{
2963 platform_driver_unregister(&msm_otg_driver);
2964}
2965
2966module_init(msm_otg_init);
2967module_exit(msm_otg_exit);
2968
2969MODULE_LICENSE("GPL v2");
2970MODULE_DESCRIPTION("MSM usb transceiver driver");
2971MODULE_VERSION("1.00");