Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.2-rc2 1940 lines 48 kB view raw
1/* 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 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 15 * 02110-1301, USA. 16 * 17 */ 18 19#include <linux/module.h> 20#include <linux/device.h> 21#include <linux/platform_device.h> 22#include <linux/clk.h> 23#include <linux/slab.h> 24#include <linux/interrupt.h> 25#include <linux/err.h> 26#include <linux/delay.h> 27#include <linux/io.h> 28#include <linux/ioport.h> 29#include <linux/uaccess.h> 30#include <linux/debugfs.h> 31#include <linux/seq_file.h> 32#include <linux/pm_runtime.h> 33#include <linux/of.h> 34#include <linux/of_device.h> 35#include <linux/reset.h> 36 37#include <linux/usb.h> 38#include <linux/usb/otg.h> 39#include <linux/usb/of.h> 40#include <linux/usb/ulpi.h> 41#include <linux/usb/gadget.h> 42#include <linux/usb/hcd.h> 43#include <linux/usb/msm_hsusb.h> 44#include <linux/usb/msm_hsusb_hw.h> 45#include <linux/regulator/consumer.h> 46 47#define MSM_USB_BASE (motg->regs) 48#define DRIVER_NAME "msm_otg" 49 50#define ULPI_IO_TIMEOUT_USEC (10 * 1000) 51#define LINK_RESET_TIMEOUT_USEC (250 * 1000) 52 53#define USB_PHY_3P3_VOL_MIN 3050000 /* uV */ 54#define USB_PHY_3P3_VOL_MAX 3300000 /* uV */ 55#define USB_PHY_3P3_HPM_LOAD 50000 /* uA */ 56#define USB_PHY_3P3_LPM_LOAD 4000 /* uA */ 57 58#define USB_PHY_1P8_VOL_MIN 1800000 /* uV */ 59#define USB_PHY_1P8_VOL_MAX 1800000 /* uV */ 60#define USB_PHY_1P8_HPM_LOAD 50000 /* uA */ 61#define USB_PHY_1P8_LPM_LOAD 4000 /* uA */ 62 63#define USB_PHY_VDD_DIG_VOL_MIN 1000000 /* uV */ 64#define USB_PHY_VDD_DIG_VOL_MAX 1320000 /* uV */ 65#define USB_PHY_SUSP_DIG_VOL 500000 /* uV */ 66 67enum vdd_levels { 68 VDD_LEVEL_NONE = 0, 69 VDD_LEVEL_MIN, 70 VDD_LEVEL_MAX, 71}; 72 73static int msm_hsusb_init_vddcx(struct msm_otg *motg, int init) 74{ 75 int ret = 0; 76 77 if (init) { 78 ret = regulator_set_voltage(motg->vddcx, 79 motg->vdd_levels[VDD_LEVEL_MIN], 80 motg->vdd_levels[VDD_LEVEL_MAX]); 81 if (ret) { 82 dev_err(motg->phy.dev, "Cannot set vddcx voltage\n"); 83 return ret; 84 } 85 86 ret = regulator_enable(motg->vddcx); 87 if (ret) 88 dev_err(motg->phy.dev, "unable to enable hsusb vddcx\n"); 89 } else { 90 ret = regulator_set_voltage(motg->vddcx, 0, 91 motg->vdd_levels[VDD_LEVEL_MAX]); 92 if (ret) 93 dev_err(motg->phy.dev, "Cannot set vddcx voltage\n"); 94 ret = regulator_disable(motg->vddcx); 95 if (ret) 96 dev_err(motg->phy.dev, "unable to disable hsusb vddcx\n"); 97 } 98 99 return ret; 100} 101 102static int msm_hsusb_ldo_init(struct msm_otg *motg, int init) 103{ 104 int rc = 0; 105 106 if (init) { 107 rc = regulator_set_voltage(motg->v3p3, USB_PHY_3P3_VOL_MIN, 108 USB_PHY_3P3_VOL_MAX); 109 if (rc) { 110 dev_err(motg->phy.dev, "Cannot set v3p3 voltage\n"); 111 goto exit; 112 } 113 rc = regulator_enable(motg->v3p3); 114 if (rc) { 115 dev_err(motg->phy.dev, "unable to enable the hsusb 3p3\n"); 116 goto exit; 117 } 118 rc = regulator_set_voltage(motg->v1p8, USB_PHY_1P8_VOL_MIN, 119 USB_PHY_1P8_VOL_MAX); 120 if (rc) { 121 dev_err(motg->phy.dev, "Cannot set v1p8 voltage\n"); 122 goto disable_3p3; 123 } 124 rc = regulator_enable(motg->v1p8); 125 if (rc) { 126 dev_err(motg->phy.dev, "unable to enable the hsusb 1p8\n"); 127 goto disable_3p3; 128 } 129 130 return 0; 131 } 132 133 regulator_disable(motg->v1p8); 134disable_3p3: 135 regulator_disable(motg->v3p3); 136exit: 137 return rc; 138} 139 140static int msm_hsusb_ldo_set_mode(struct msm_otg *motg, int on) 141{ 142 int ret = 0; 143 144 if (on) { 145 ret = regulator_set_load(motg->v1p8, USB_PHY_1P8_HPM_LOAD); 146 if (ret < 0) { 147 pr_err("Could not set HPM for v1p8\n"); 148 return ret; 149 } 150 ret = regulator_set_load(motg->v3p3, USB_PHY_3P3_HPM_LOAD); 151 if (ret < 0) { 152 pr_err("Could not set HPM for v3p3\n"); 153 regulator_set_load(motg->v1p8, USB_PHY_1P8_LPM_LOAD); 154 return ret; 155 } 156 } else { 157 ret = regulator_set_load(motg->v1p8, USB_PHY_1P8_LPM_LOAD); 158 if (ret < 0) 159 pr_err("Could not set LPM for v1p8\n"); 160 ret = regulator_set_load(motg->v3p3, USB_PHY_3P3_LPM_LOAD); 161 if (ret < 0) 162 pr_err("Could not set LPM for v3p3\n"); 163 } 164 165 pr_debug("reg (%s)\n", on ? "HPM" : "LPM"); 166 return ret < 0 ? ret : 0; 167} 168 169static int ulpi_read(struct usb_phy *phy, u32 reg) 170{ 171 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 172 int cnt = 0; 173 174 /* initiate read operation */ 175 writel(ULPI_RUN | ULPI_READ | ULPI_ADDR(reg), 176 USB_ULPI_VIEWPORT); 177 178 /* wait for completion */ 179 while (cnt < ULPI_IO_TIMEOUT_USEC) { 180 if (!(readl(USB_ULPI_VIEWPORT) & ULPI_RUN)) 181 break; 182 udelay(1); 183 cnt++; 184 } 185 186 if (cnt >= ULPI_IO_TIMEOUT_USEC) { 187 dev_err(phy->dev, "ulpi_read: timeout %08x\n", 188 readl(USB_ULPI_VIEWPORT)); 189 return -ETIMEDOUT; 190 } 191 return ULPI_DATA_READ(readl(USB_ULPI_VIEWPORT)); 192} 193 194static int ulpi_write(struct usb_phy *phy, u32 val, u32 reg) 195{ 196 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 197 int cnt = 0; 198 199 /* initiate write operation */ 200 writel(ULPI_RUN | ULPI_WRITE | 201 ULPI_ADDR(reg) | ULPI_DATA(val), 202 USB_ULPI_VIEWPORT); 203 204 /* wait for completion */ 205 while (cnt < ULPI_IO_TIMEOUT_USEC) { 206 if (!(readl(USB_ULPI_VIEWPORT) & ULPI_RUN)) 207 break; 208 udelay(1); 209 cnt++; 210 } 211 212 if (cnt >= ULPI_IO_TIMEOUT_USEC) { 213 dev_err(phy->dev, "ulpi_write: timeout\n"); 214 return -ETIMEDOUT; 215 } 216 return 0; 217} 218 219static struct usb_phy_io_ops msm_otg_io_ops = { 220 .read = ulpi_read, 221 .write = ulpi_write, 222}; 223 224static void ulpi_init(struct msm_otg *motg) 225{ 226 struct msm_otg_platform_data *pdata = motg->pdata; 227 int *seq = pdata->phy_init_seq, idx; 228 u32 addr = ULPI_EXT_VENDOR_SPECIFIC; 229 230 for (idx = 0; idx < pdata->phy_init_sz; idx++) { 231 if (seq[idx] == -1) 232 continue; 233 234 dev_vdbg(motg->phy.dev, "ulpi: write 0x%02x to 0x%02x\n", 235 seq[idx], addr + idx); 236 ulpi_write(&motg->phy, seq[idx], addr + idx); 237 } 238} 239 240static int msm_phy_notify_disconnect(struct usb_phy *phy, 241 enum usb_device_speed speed) 242{ 243 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 244 int val; 245 246 if (motg->manual_pullup) { 247 val = ULPI_MISC_A_VBUSVLDEXT | ULPI_MISC_A_VBUSVLDEXTSEL; 248 usb_phy_io_write(phy, val, ULPI_CLR(ULPI_MISC_A)); 249 } 250 251 /* 252 * Put the transceiver in non-driving mode. Otherwise host 253 * may not detect soft-disconnection. 254 */ 255 val = ulpi_read(phy, ULPI_FUNC_CTRL); 256 val &= ~ULPI_FUNC_CTRL_OPMODE_MASK; 257 val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING; 258 ulpi_write(phy, val, ULPI_FUNC_CTRL); 259 260 return 0; 261} 262 263static int msm_otg_link_clk_reset(struct msm_otg *motg, bool assert) 264{ 265 int ret; 266 267 if (assert) 268 ret = reset_control_assert(motg->link_rst); 269 else 270 ret = reset_control_deassert(motg->link_rst); 271 272 if (ret) 273 dev_err(motg->phy.dev, "usb link clk reset %s failed\n", 274 assert ? "assert" : "deassert"); 275 276 return ret; 277} 278 279static int msm_otg_phy_clk_reset(struct msm_otg *motg) 280{ 281 int ret = 0; 282 283 if (motg->phy_rst) 284 ret = reset_control_reset(motg->phy_rst); 285 286 if (ret) 287 dev_err(motg->phy.dev, "usb phy clk reset failed\n"); 288 289 return ret; 290} 291 292static int msm_link_reset(struct msm_otg *motg) 293{ 294 u32 val; 295 int ret; 296 297 ret = msm_otg_link_clk_reset(motg, 1); 298 if (ret) 299 return ret; 300 301 /* wait for 1ms delay as suggested in HPG. */ 302 usleep_range(1000, 1200); 303 304 ret = msm_otg_link_clk_reset(motg, 0); 305 if (ret) 306 return ret; 307 308 if (motg->phy_number) 309 writel(readl(USB_PHY_CTRL2) | BIT(16), USB_PHY_CTRL2); 310 311 /* put transceiver in serial mode as part of reset */ 312 val = readl(USB_PORTSC) & ~PORTSC_PTS_MASK; 313 writel(val | PORTSC_PTS_SERIAL, USB_PORTSC); 314 315 return 0; 316} 317 318static int msm_otg_reset(struct usb_phy *phy) 319{ 320 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 321 int cnt = 0; 322 323 writel(USBCMD_RESET, USB_USBCMD); 324 while (cnt < LINK_RESET_TIMEOUT_USEC) { 325 if (!(readl(USB_USBCMD) & USBCMD_RESET)) 326 break; 327 udelay(1); 328 cnt++; 329 } 330 if (cnt >= LINK_RESET_TIMEOUT_USEC) 331 return -ETIMEDOUT; 332 333 /* select ULPI phy and clear other status/control bits in PORTSC */ 334 writel(PORTSC_PTS_ULPI, USB_PORTSC); 335 336 writel(0x0, USB_AHBBURST); 337 writel(0x08, USB_AHBMODE); 338 339 if (motg->phy_number) 340 writel(readl(USB_PHY_CTRL2) | BIT(16), USB_PHY_CTRL2); 341 return 0; 342} 343 344static void msm_phy_reset(struct msm_otg *motg) 345{ 346 void __iomem *addr; 347 348 if (motg->pdata->phy_type != SNPS_28NM_INTEGRATED_PHY) { 349 msm_otg_phy_clk_reset(motg); 350 return; 351 } 352 353 addr = USB_PHY_CTRL; 354 if (motg->phy_number) 355 addr = USB_PHY_CTRL2; 356 357 /* Assert USB PHY_POR */ 358 writel(readl(addr) | PHY_POR_ASSERT, addr); 359 360 /* 361 * wait for minimum 10 microseconds as suggested in HPG. 362 * Use a slightly larger value since the exact value didn't 363 * work 100% of the time. 364 */ 365 udelay(12); 366 367 /* Deassert USB PHY_POR */ 368 writel(readl(addr) & ~PHY_POR_ASSERT, addr); 369} 370 371static int msm_usb_reset(struct usb_phy *phy) 372{ 373 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 374 int ret; 375 376 if (!IS_ERR(motg->core_clk)) 377 clk_prepare_enable(motg->core_clk); 378 379 ret = msm_link_reset(motg); 380 if (ret) { 381 dev_err(phy->dev, "phy_reset failed\n"); 382 return ret; 383 } 384 385 ret = msm_otg_reset(&motg->phy); 386 if (ret) { 387 dev_err(phy->dev, "link reset failed\n"); 388 return ret; 389 } 390 391 msleep(100); 392 393 /* Reset USB PHY after performing USB Link RESET */ 394 msm_phy_reset(motg); 395 396 if (!IS_ERR(motg->core_clk)) 397 clk_disable_unprepare(motg->core_clk); 398 399 return 0; 400} 401 402static int msm_phy_init(struct usb_phy *phy) 403{ 404 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 405 struct msm_otg_platform_data *pdata = motg->pdata; 406 u32 val, ulpi_val = 0; 407 408 /* Program USB PHY Override registers. */ 409 ulpi_init(motg); 410 411 /* 412 * It is recommended in HPG to reset USB PHY after programming 413 * USB PHY Override registers. 414 */ 415 msm_phy_reset(motg); 416 417 if (pdata->otg_control == OTG_PHY_CONTROL) { 418 val = readl(USB_OTGSC); 419 if (pdata->mode == USB_DR_MODE_OTG) { 420 ulpi_val = ULPI_INT_IDGRD | ULPI_INT_SESS_VALID; 421 val |= OTGSC_IDIE | OTGSC_BSVIE; 422 } else if (pdata->mode == USB_DR_MODE_PERIPHERAL) { 423 ulpi_val = ULPI_INT_SESS_VALID; 424 val |= OTGSC_BSVIE; 425 } 426 writel(val, USB_OTGSC); 427 ulpi_write(phy, ulpi_val, ULPI_USB_INT_EN_RISE); 428 ulpi_write(phy, ulpi_val, ULPI_USB_INT_EN_FALL); 429 } 430 431 if (motg->manual_pullup) { 432 val = ULPI_MISC_A_VBUSVLDEXTSEL | ULPI_MISC_A_VBUSVLDEXT; 433 ulpi_write(phy, val, ULPI_SET(ULPI_MISC_A)); 434 435 val = readl(USB_GENCONFIG_2); 436 val |= GENCONFIG_2_SESS_VLD_CTRL_EN; 437 writel(val, USB_GENCONFIG_2); 438 439 val = readl(USB_USBCMD); 440 val |= USBCMD_SESS_VLD_CTRL; 441 writel(val, USB_USBCMD); 442 443 val = ulpi_read(phy, ULPI_FUNC_CTRL); 444 val &= ~ULPI_FUNC_CTRL_OPMODE_MASK; 445 val |= ULPI_FUNC_CTRL_OPMODE_NORMAL; 446 ulpi_write(phy, val, ULPI_FUNC_CTRL); 447 } 448 449 if (motg->phy_number) 450 writel(readl(USB_PHY_CTRL2) | BIT(16), USB_PHY_CTRL2); 451 452 return 0; 453} 454 455#define PHY_SUSPEND_TIMEOUT_USEC (500 * 1000) 456#define PHY_RESUME_TIMEOUT_USEC (100 * 1000) 457 458#ifdef CONFIG_PM 459 460static int msm_hsusb_config_vddcx(struct msm_otg *motg, int high) 461{ 462 int max_vol = motg->vdd_levels[VDD_LEVEL_MAX]; 463 int min_vol; 464 int ret; 465 466 if (high) 467 min_vol = motg->vdd_levels[VDD_LEVEL_MIN]; 468 else 469 min_vol = motg->vdd_levels[VDD_LEVEL_NONE]; 470 471 ret = regulator_set_voltage(motg->vddcx, min_vol, max_vol); 472 if (ret) { 473 pr_err("Cannot set vddcx voltage\n"); 474 return ret; 475 } 476 477 pr_debug("%s: min_vol:%d max_vol:%d\n", __func__, min_vol, max_vol); 478 479 return ret; 480} 481 482static int msm_otg_suspend(struct msm_otg *motg) 483{ 484 struct usb_phy *phy = &motg->phy; 485 struct usb_bus *bus = phy->otg->host; 486 struct msm_otg_platform_data *pdata = motg->pdata; 487 void __iomem *addr; 488 int cnt = 0; 489 490 if (atomic_read(&motg->in_lpm)) 491 return 0; 492 493 disable_irq(motg->irq); 494 /* 495 * Chipidea 45-nm PHY suspend sequence: 496 * 497 * Interrupt Latch Register auto-clear feature is not present 498 * in all PHY versions. Latch register is clear on read type. 499 * Clear latch register to avoid spurious wakeup from 500 * low power mode (LPM). 501 * 502 * PHY comparators are disabled when PHY enters into low power 503 * mode (LPM). Keep PHY comparators ON in LPM only when we expect 504 * VBUS/Id notifications from USB PHY. Otherwise turn off USB 505 * PHY comparators. This save significant amount of power. 506 * 507 * PLL is not turned off when PHY enters into low power mode (LPM). 508 * Disable PLL for maximum power savings. 509 */ 510 511 if (motg->pdata->phy_type == CI_45NM_INTEGRATED_PHY) { 512 ulpi_read(phy, 0x14); 513 if (pdata->otg_control == OTG_PHY_CONTROL) 514 ulpi_write(phy, 0x01, 0x30); 515 ulpi_write(phy, 0x08, 0x09); 516 } 517 518 /* 519 * PHY may take some time or even fail to enter into low power 520 * mode (LPM). Hence poll for 500 msec and reset the PHY and link 521 * in failure case. 522 */ 523 writel(readl(USB_PORTSC) | PORTSC_PHCD, USB_PORTSC); 524 while (cnt < PHY_SUSPEND_TIMEOUT_USEC) { 525 if (readl(USB_PORTSC) & PORTSC_PHCD) 526 break; 527 udelay(1); 528 cnt++; 529 } 530 531 if (cnt >= PHY_SUSPEND_TIMEOUT_USEC) { 532 dev_err(phy->dev, "Unable to suspend PHY\n"); 533 msm_otg_reset(phy); 534 enable_irq(motg->irq); 535 return -ETIMEDOUT; 536 } 537 538 /* 539 * PHY has capability to generate interrupt asynchronously in low 540 * power mode (LPM). This interrupt is level triggered. So USB IRQ 541 * line must be disabled till async interrupt enable bit is cleared 542 * in USBCMD register. Assert STP (ULPI interface STOP signal) to 543 * block data communication from PHY. 544 */ 545 writel(readl(USB_USBCMD) | ASYNC_INTR_CTRL | ULPI_STP_CTRL, USB_USBCMD); 546 547 addr = USB_PHY_CTRL; 548 if (motg->phy_number) 549 addr = USB_PHY_CTRL2; 550 551 if (motg->pdata->phy_type == SNPS_28NM_INTEGRATED_PHY && 552 motg->pdata->otg_control == OTG_PMIC_CONTROL) 553 writel(readl(addr) | PHY_RETEN, addr); 554 555 clk_disable_unprepare(motg->pclk); 556 clk_disable_unprepare(motg->clk); 557 if (!IS_ERR(motg->core_clk)) 558 clk_disable_unprepare(motg->core_clk); 559 560 if (motg->pdata->phy_type == SNPS_28NM_INTEGRATED_PHY && 561 motg->pdata->otg_control == OTG_PMIC_CONTROL) { 562 msm_hsusb_ldo_set_mode(motg, 0); 563 msm_hsusb_config_vddcx(motg, 0); 564 } 565 566 if (device_may_wakeup(phy->dev)) 567 enable_irq_wake(motg->irq); 568 if (bus) 569 clear_bit(HCD_FLAG_HW_ACCESSIBLE, &(bus_to_hcd(bus))->flags); 570 571 atomic_set(&motg->in_lpm, 1); 572 enable_irq(motg->irq); 573 574 dev_info(phy->dev, "USB in low power mode\n"); 575 576 return 0; 577} 578 579static int msm_otg_resume(struct msm_otg *motg) 580{ 581 struct usb_phy *phy = &motg->phy; 582 struct usb_bus *bus = phy->otg->host; 583 void __iomem *addr; 584 int cnt = 0; 585 unsigned temp; 586 587 if (!atomic_read(&motg->in_lpm)) 588 return 0; 589 590 clk_prepare_enable(motg->pclk); 591 clk_prepare_enable(motg->clk); 592 if (!IS_ERR(motg->core_clk)) 593 clk_prepare_enable(motg->core_clk); 594 595 if (motg->pdata->phy_type == SNPS_28NM_INTEGRATED_PHY && 596 motg->pdata->otg_control == OTG_PMIC_CONTROL) { 597 598 addr = USB_PHY_CTRL; 599 if (motg->phy_number) 600 addr = USB_PHY_CTRL2; 601 602 msm_hsusb_ldo_set_mode(motg, 1); 603 msm_hsusb_config_vddcx(motg, 1); 604 writel(readl(addr) & ~PHY_RETEN, addr); 605 } 606 607 temp = readl(USB_USBCMD); 608 temp &= ~ASYNC_INTR_CTRL; 609 temp &= ~ULPI_STP_CTRL; 610 writel(temp, USB_USBCMD); 611 612 /* 613 * PHY comes out of low power mode (LPM) in case of wakeup 614 * from asynchronous interrupt. 615 */ 616 if (!(readl(USB_PORTSC) & PORTSC_PHCD)) 617 goto skip_phy_resume; 618 619 writel(readl(USB_PORTSC) & ~PORTSC_PHCD, USB_PORTSC); 620 while (cnt < PHY_RESUME_TIMEOUT_USEC) { 621 if (!(readl(USB_PORTSC) & PORTSC_PHCD)) 622 break; 623 udelay(1); 624 cnt++; 625 } 626 627 if (cnt >= PHY_RESUME_TIMEOUT_USEC) { 628 /* 629 * This is a fatal error. Reset the link and 630 * PHY. USB state can not be restored. Re-insertion 631 * of USB cable is the only way to get USB working. 632 */ 633 dev_err(phy->dev, "Unable to resume USB. Re-plugin the cable\n"); 634 msm_otg_reset(phy); 635 } 636 637skip_phy_resume: 638 if (device_may_wakeup(phy->dev)) 639 disable_irq_wake(motg->irq); 640 if (bus) 641 set_bit(HCD_FLAG_HW_ACCESSIBLE, &(bus_to_hcd(bus))->flags); 642 643 atomic_set(&motg->in_lpm, 0); 644 645 if (motg->async_int) { 646 motg->async_int = 0; 647 pm_runtime_put(phy->dev); 648 enable_irq(motg->irq); 649 } 650 651 dev_info(phy->dev, "USB exited from low power mode\n"); 652 653 return 0; 654} 655#endif 656 657static void msm_otg_notify_charger(struct msm_otg *motg, unsigned mA) 658{ 659 if (motg->cur_power == mA) 660 return; 661 662 /* TODO: Notify PMIC about available current */ 663 dev_info(motg->phy.dev, "Avail curr from USB = %u\n", mA); 664 motg->cur_power = mA; 665} 666 667static int msm_otg_set_power(struct usb_phy *phy, unsigned mA) 668{ 669 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 670 671 /* 672 * Gadget driver uses set_power method to notify about the 673 * available current based on suspend/configured states. 674 * 675 * IDEV_CHG can be drawn irrespective of suspend/un-configured 676 * states when CDP/ACA is connected. 677 */ 678 if (motg->chg_type == USB_SDP_CHARGER) 679 msm_otg_notify_charger(motg, mA); 680 681 return 0; 682} 683 684static void msm_otg_start_host(struct usb_phy *phy, int on) 685{ 686 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 687 struct msm_otg_platform_data *pdata = motg->pdata; 688 struct usb_hcd *hcd; 689 690 if (!phy->otg->host) 691 return; 692 693 hcd = bus_to_hcd(phy->otg->host); 694 695 if (on) { 696 dev_dbg(phy->dev, "host on\n"); 697 698 if (pdata->vbus_power) 699 pdata->vbus_power(1); 700 /* 701 * Some boards have a switch cotrolled by gpio 702 * to enable/disable internal HUB. Enable internal 703 * HUB before kicking the host. 704 */ 705 if (pdata->setup_gpio) 706 pdata->setup_gpio(OTG_STATE_A_HOST); 707#ifdef CONFIG_USB 708 usb_add_hcd(hcd, hcd->irq, IRQF_SHARED); 709 device_wakeup_enable(hcd->self.controller); 710#endif 711 } else { 712 dev_dbg(phy->dev, "host off\n"); 713 714#ifdef CONFIG_USB 715 usb_remove_hcd(hcd); 716#endif 717 if (pdata->setup_gpio) 718 pdata->setup_gpio(OTG_STATE_UNDEFINED); 719 if (pdata->vbus_power) 720 pdata->vbus_power(0); 721 } 722} 723 724static int msm_otg_set_host(struct usb_otg *otg, struct usb_bus *host) 725{ 726 struct msm_otg *motg = container_of(otg->usb_phy, struct msm_otg, phy); 727 struct usb_hcd *hcd; 728 729 /* 730 * Fail host registration if this board can support 731 * only peripheral configuration. 732 */ 733 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL) { 734 dev_info(otg->usb_phy->dev, "Host mode is not supported\n"); 735 return -ENODEV; 736 } 737 738 if (!host) { 739 if (otg->state == OTG_STATE_A_HOST) { 740 pm_runtime_get_sync(otg->usb_phy->dev); 741 msm_otg_start_host(otg->usb_phy, 0); 742 otg->host = NULL; 743 otg->state = OTG_STATE_UNDEFINED; 744 schedule_work(&motg->sm_work); 745 } else { 746 otg->host = NULL; 747 } 748 749 return 0; 750 } 751 752 hcd = bus_to_hcd(host); 753 hcd->power_budget = motg->pdata->power_budget; 754 755 otg->host = host; 756 dev_dbg(otg->usb_phy->dev, "host driver registered w/ tranceiver\n"); 757 758 /* 759 * Kick the state machine work, if peripheral is not supported 760 * or peripheral is already registered with us. 761 */ 762 if (motg->pdata->mode == USB_DR_MODE_HOST || otg->gadget) { 763 pm_runtime_get_sync(otg->usb_phy->dev); 764 schedule_work(&motg->sm_work); 765 } 766 767 return 0; 768} 769 770static void msm_otg_start_peripheral(struct usb_phy *phy, int on) 771{ 772 struct msm_otg *motg = container_of(phy, struct msm_otg, phy); 773 struct msm_otg_platform_data *pdata = motg->pdata; 774 775 if (!phy->otg->gadget) 776 return; 777 778 if (on) { 779 dev_dbg(phy->dev, "gadget on\n"); 780 /* 781 * Some boards have a switch cotrolled by gpio 782 * to enable/disable internal HUB. Disable internal 783 * HUB before kicking the gadget. 784 */ 785 if (pdata->setup_gpio) 786 pdata->setup_gpio(OTG_STATE_B_PERIPHERAL); 787 usb_gadget_vbus_connect(phy->otg->gadget); 788 } else { 789 dev_dbg(phy->dev, "gadget off\n"); 790 usb_gadget_vbus_disconnect(phy->otg->gadget); 791 if (pdata->setup_gpio) 792 pdata->setup_gpio(OTG_STATE_UNDEFINED); 793 } 794 795} 796 797static int msm_otg_set_peripheral(struct usb_otg *otg, 798 struct usb_gadget *gadget) 799{ 800 struct msm_otg *motg = container_of(otg->usb_phy, struct msm_otg, phy); 801 802 /* 803 * Fail peripheral registration if this board can support 804 * only host configuration. 805 */ 806 if (motg->pdata->mode == USB_DR_MODE_HOST) { 807 dev_info(otg->usb_phy->dev, "Peripheral mode is not supported\n"); 808 return -ENODEV; 809 } 810 811 if (!gadget) { 812 if (otg->state == OTG_STATE_B_PERIPHERAL) { 813 pm_runtime_get_sync(otg->usb_phy->dev); 814 msm_otg_start_peripheral(otg->usb_phy, 0); 815 otg->gadget = NULL; 816 otg->state = OTG_STATE_UNDEFINED; 817 schedule_work(&motg->sm_work); 818 } else { 819 otg->gadget = NULL; 820 } 821 822 return 0; 823 } 824 otg->gadget = gadget; 825 dev_dbg(otg->usb_phy->dev, 826 "peripheral driver registered w/ tranceiver\n"); 827 828 /* 829 * Kick the state machine work, if host is not supported 830 * or host is already registered with us. 831 */ 832 if (motg->pdata->mode == USB_DR_MODE_PERIPHERAL || otg->host) { 833 pm_runtime_get_sync(otg->usb_phy->dev); 834 schedule_work(&motg->sm_work); 835 } 836 837 return 0; 838} 839 840static bool msm_chg_check_secondary_det(struct msm_otg *motg) 841{ 842 struct usb_phy *phy = &motg->phy; 843 u32 chg_det; 844 bool ret = false; 845 846 switch (motg->pdata->phy_type) { 847 case CI_45NM_INTEGRATED_PHY: 848 chg_det = ulpi_read(phy, 0x34); 849 ret = chg_det & (1 << 4); 850 break; 851 case SNPS_28NM_INTEGRATED_PHY: 852 chg_det = ulpi_read(phy, 0x87); 853 ret = chg_det & 1; 854 break; 855 default: 856 break; 857 } 858 return ret; 859} 860 861static void msm_chg_enable_secondary_det(struct msm_otg *motg) 862{ 863 struct usb_phy *phy = &motg->phy; 864 u32 chg_det; 865 866 switch (motg->pdata->phy_type) { 867 case CI_45NM_INTEGRATED_PHY: 868 chg_det = ulpi_read(phy, 0x34); 869 /* Turn off charger block */ 870 chg_det |= ~(1 << 1); 871 ulpi_write(phy, chg_det, 0x34); 872 udelay(20); 873 /* control chg block via ULPI */ 874 chg_det &= ~(1 << 3); 875 ulpi_write(phy, chg_det, 0x34); 876 /* put it in host mode for enabling D- source */ 877 chg_det &= ~(1 << 2); 878 ulpi_write(phy, chg_det, 0x34); 879 /* Turn on chg detect block */ 880 chg_det &= ~(1 << 1); 881 ulpi_write(phy, chg_det, 0x34); 882 udelay(20); 883 /* enable chg detection */ 884 chg_det &= ~(1 << 0); 885 ulpi_write(phy, chg_det, 0x34); 886 break; 887 case SNPS_28NM_INTEGRATED_PHY: 888 /* 889 * Configure DM as current source, DP as current sink 890 * and enable battery charging comparators. 891 */ 892 ulpi_write(phy, 0x8, 0x85); 893 ulpi_write(phy, 0x2, 0x85); 894 ulpi_write(phy, 0x1, 0x85); 895 break; 896 default: 897 break; 898 } 899} 900 901static bool msm_chg_check_primary_det(struct msm_otg *motg) 902{ 903 struct usb_phy *phy = &motg->phy; 904 u32 chg_det; 905 bool ret = false; 906 907 switch (motg->pdata->phy_type) { 908 case CI_45NM_INTEGRATED_PHY: 909 chg_det = ulpi_read(phy, 0x34); 910 ret = chg_det & (1 << 4); 911 break; 912 case SNPS_28NM_INTEGRATED_PHY: 913 chg_det = ulpi_read(phy, 0x87); 914 ret = chg_det & 1; 915 break; 916 default: 917 break; 918 } 919 return ret; 920} 921 922static void msm_chg_enable_primary_det(struct msm_otg *motg) 923{ 924 struct usb_phy *phy = &motg->phy; 925 u32 chg_det; 926 927 switch (motg->pdata->phy_type) { 928 case CI_45NM_INTEGRATED_PHY: 929 chg_det = ulpi_read(phy, 0x34); 930 /* enable chg detection */ 931 chg_det &= ~(1 << 0); 932 ulpi_write(phy, chg_det, 0x34); 933 break; 934 case SNPS_28NM_INTEGRATED_PHY: 935 /* 936 * Configure DP as current source, DM as current sink 937 * and enable battery charging comparators. 938 */ 939 ulpi_write(phy, 0x2, 0x85); 940 ulpi_write(phy, 0x1, 0x85); 941 break; 942 default: 943 break; 944 } 945} 946 947static bool msm_chg_check_dcd(struct msm_otg *motg) 948{ 949 struct usb_phy *phy = &motg->phy; 950 u32 line_state; 951 bool ret = false; 952 953 switch (motg->pdata->phy_type) { 954 case CI_45NM_INTEGRATED_PHY: 955 line_state = ulpi_read(phy, 0x15); 956 ret = !(line_state & 1); 957 break; 958 case SNPS_28NM_INTEGRATED_PHY: 959 line_state = ulpi_read(phy, 0x87); 960 ret = line_state & 2; 961 break; 962 default: 963 break; 964 } 965 return ret; 966} 967 968static void msm_chg_disable_dcd(struct msm_otg *motg) 969{ 970 struct usb_phy *phy = &motg->phy; 971 u32 chg_det; 972 973 switch (motg->pdata->phy_type) { 974 case CI_45NM_INTEGRATED_PHY: 975 chg_det = ulpi_read(phy, 0x34); 976 chg_det &= ~(1 << 5); 977 ulpi_write(phy, chg_det, 0x34); 978 break; 979 case SNPS_28NM_INTEGRATED_PHY: 980 ulpi_write(phy, 0x10, 0x86); 981 break; 982 default: 983 break; 984 } 985} 986 987static void msm_chg_enable_dcd(struct msm_otg *motg) 988{ 989 struct usb_phy *phy = &motg->phy; 990 u32 chg_det; 991 992 switch (motg->pdata->phy_type) { 993 case CI_45NM_INTEGRATED_PHY: 994 chg_det = ulpi_read(phy, 0x34); 995 /* Turn on D+ current source */ 996 chg_det |= (1 << 5); 997 ulpi_write(phy, chg_det, 0x34); 998 break; 999 case SNPS_28NM_INTEGRATED_PHY: 1000 /* Data contact detection enable */ 1001 ulpi_write(phy, 0x10, 0x85); 1002 break; 1003 default: 1004 break; 1005 } 1006} 1007 1008static void msm_chg_block_on(struct msm_otg *motg) 1009{ 1010 struct usb_phy *phy = &motg->phy; 1011 u32 func_ctrl, chg_det; 1012 1013 /* put the controller in non-driving mode */ 1014 func_ctrl = ulpi_read(phy, ULPI_FUNC_CTRL); 1015 func_ctrl &= ~ULPI_FUNC_CTRL_OPMODE_MASK; 1016 func_ctrl |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING; 1017 ulpi_write(phy, func_ctrl, ULPI_FUNC_CTRL); 1018 1019 switch (motg->pdata->phy_type) { 1020 case CI_45NM_INTEGRATED_PHY: 1021 chg_det = ulpi_read(phy, 0x34); 1022 /* control chg block via ULPI */ 1023 chg_det &= ~(1 << 3); 1024 ulpi_write(phy, chg_det, 0x34); 1025 /* Turn on chg detect block */ 1026 chg_det &= ~(1 << 1); 1027 ulpi_write(phy, chg_det, 0x34); 1028 udelay(20); 1029 break; 1030 case SNPS_28NM_INTEGRATED_PHY: 1031 /* Clear charger detecting control bits */ 1032 ulpi_write(phy, 0x3F, 0x86); 1033 /* Clear alt interrupt latch and enable bits */ 1034 ulpi_write(phy, 0x1F, 0x92); 1035 ulpi_write(phy, 0x1F, 0x95); 1036 udelay(100); 1037 break; 1038 default: 1039 break; 1040 } 1041} 1042 1043static void msm_chg_block_off(struct msm_otg *motg) 1044{ 1045 struct usb_phy *phy = &motg->phy; 1046 u32 func_ctrl, chg_det; 1047 1048 switch (motg->pdata->phy_type) { 1049 case CI_45NM_INTEGRATED_PHY: 1050 chg_det = ulpi_read(phy, 0x34); 1051 /* Turn off charger block */ 1052 chg_det |= ~(1 << 1); 1053 ulpi_write(phy, chg_det, 0x34); 1054 break; 1055 case SNPS_28NM_INTEGRATED_PHY: 1056 /* Clear charger detecting control bits */ 1057 ulpi_write(phy, 0x3F, 0x86); 1058 /* Clear alt interrupt latch and enable bits */ 1059 ulpi_write(phy, 0x1F, 0x92); 1060 ulpi_write(phy, 0x1F, 0x95); 1061 break; 1062 default: 1063 break; 1064 } 1065 1066 /* put the controller in normal mode */ 1067 func_ctrl = ulpi_read(phy, ULPI_FUNC_CTRL); 1068 func_ctrl &= ~ULPI_FUNC_CTRL_OPMODE_MASK; 1069 func_ctrl |= ULPI_FUNC_CTRL_OPMODE_NORMAL; 1070 ulpi_write(phy, func_ctrl, ULPI_FUNC_CTRL); 1071} 1072 1073#define MSM_CHG_DCD_POLL_TIME (100 * HZ/1000) /* 100 msec */ 1074#define MSM_CHG_DCD_MAX_RETRIES 6 /* Tdcd_tmout = 6 * 100 msec */ 1075#define MSM_CHG_PRIMARY_DET_TIME (40 * HZ/1000) /* TVDPSRC_ON */ 1076#define MSM_CHG_SECONDARY_DET_TIME (40 * HZ/1000) /* TVDMSRC_ON */ 1077static void msm_chg_detect_work(struct work_struct *w) 1078{ 1079 struct msm_otg *motg = container_of(w, struct msm_otg, chg_work.work); 1080 struct usb_phy *phy = &motg->phy; 1081 bool is_dcd, tmout, vout; 1082 unsigned long delay; 1083 1084 dev_dbg(phy->dev, "chg detection work\n"); 1085 switch (motg->chg_state) { 1086 case USB_CHG_STATE_UNDEFINED: 1087 pm_runtime_get_sync(phy->dev); 1088 msm_chg_block_on(motg); 1089 msm_chg_enable_dcd(motg); 1090 motg->chg_state = USB_CHG_STATE_WAIT_FOR_DCD; 1091 motg->dcd_retries = 0; 1092 delay = MSM_CHG_DCD_POLL_TIME; 1093 break; 1094 case USB_CHG_STATE_WAIT_FOR_DCD: 1095 is_dcd = msm_chg_check_dcd(motg); 1096 tmout = ++motg->dcd_retries == MSM_CHG_DCD_MAX_RETRIES; 1097 if (is_dcd || tmout) { 1098 msm_chg_disable_dcd(motg); 1099 msm_chg_enable_primary_det(motg); 1100 delay = MSM_CHG_PRIMARY_DET_TIME; 1101 motg->chg_state = USB_CHG_STATE_DCD_DONE; 1102 } else { 1103 delay = MSM_CHG_DCD_POLL_TIME; 1104 } 1105 break; 1106 case USB_CHG_STATE_DCD_DONE: 1107 vout = msm_chg_check_primary_det(motg); 1108 if (vout) { 1109 msm_chg_enable_secondary_det(motg); 1110 delay = MSM_CHG_SECONDARY_DET_TIME; 1111 motg->chg_state = USB_CHG_STATE_PRIMARY_DONE; 1112 } else { 1113 motg->chg_type = USB_SDP_CHARGER; 1114 motg->chg_state = USB_CHG_STATE_DETECTED; 1115 delay = 0; 1116 } 1117 break; 1118 case USB_CHG_STATE_PRIMARY_DONE: 1119 vout = msm_chg_check_secondary_det(motg); 1120 if (vout) 1121 motg->chg_type = USB_DCP_CHARGER; 1122 else 1123 motg->chg_type = USB_CDP_CHARGER; 1124 motg->chg_state = USB_CHG_STATE_SECONDARY_DONE; 1125 /* fall through */ 1126 case USB_CHG_STATE_SECONDARY_DONE: 1127 motg->chg_state = USB_CHG_STATE_DETECTED; 1128 case USB_CHG_STATE_DETECTED: 1129 msm_chg_block_off(motg); 1130 dev_dbg(phy->dev, "charger = %d\n", motg->chg_type); 1131 schedule_work(&motg->sm_work); 1132 return; 1133 default: 1134 return; 1135 } 1136 1137 schedule_delayed_work(&motg->chg_work, delay); 1138} 1139 1140/* 1141 * We support OTG, Peripheral only and Host only configurations. In case 1142 * of OTG, mode switch (host-->peripheral/peripheral-->host) can happen 1143 * via Id pin status or user request (debugfs). Id/BSV interrupts are not 1144 * enabled when switch is controlled by user and default mode is supplied 1145 * by board file, which can be changed by userspace later. 1146 */ 1147static void msm_otg_init_sm(struct msm_otg *motg) 1148{ 1149 struct msm_otg_platform_data *pdata = motg->pdata; 1150 u32 otgsc = readl(USB_OTGSC); 1151 1152 switch (pdata->mode) { 1153 case USB_DR_MODE_OTG: 1154 if (pdata->otg_control == OTG_PHY_CONTROL) { 1155 if (otgsc & OTGSC_ID) 1156 set_bit(ID, &motg->inputs); 1157 else 1158 clear_bit(ID, &motg->inputs); 1159 1160 if (otgsc & OTGSC_BSV) 1161 set_bit(B_SESS_VLD, &motg->inputs); 1162 else 1163 clear_bit(B_SESS_VLD, &motg->inputs); 1164 } else if (pdata->otg_control == OTG_USER_CONTROL) { 1165 set_bit(ID, &motg->inputs); 1166 clear_bit(B_SESS_VLD, &motg->inputs); 1167 } 1168 break; 1169 case USB_DR_MODE_HOST: 1170 clear_bit(ID, &motg->inputs); 1171 break; 1172 case USB_DR_MODE_PERIPHERAL: 1173 set_bit(ID, &motg->inputs); 1174 if (otgsc & OTGSC_BSV) 1175 set_bit(B_SESS_VLD, &motg->inputs); 1176 else 1177 clear_bit(B_SESS_VLD, &motg->inputs); 1178 break; 1179 default: 1180 break; 1181 } 1182} 1183 1184static void msm_otg_sm_work(struct work_struct *w) 1185{ 1186 struct msm_otg *motg = container_of(w, struct msm_otg, sm_work); 1187 struct usb_otg *otg = motg->phy.otg; 1188 1189 switch (otg->state) { 1190 case OTG_STATE_UNDEFINED: 1191 dev_dbg(otg->usb_phy->dev, "OTG_STATE_UNDEFINED state\n"); 1192 msm_otg_reset(otg->usb_phy); 1193 msm_otg_init_sm(motg); 1194 otg->state = OTG_STATE_B_IDLE; 1195 /* FALL THROUGH */ 1196 case OTG_STATE_B_IDLE: 1197 dev_dbg(otg->usb_phy->dev, "OTG_STATE_B_IDLE state\n"); 1198 if (!test_bit(ID, &motg->inputs) && otg->host) { 1199 /* disable BSV bit */ 1200 writel(readl(USB_OTGSC) & ~OTGSC_BSVIE, USB_OTGSC); 1201 msm_otg_start_host(otg->usb_phy, 1); 1202 otg->state = OTG_STATE_A_HOST; 1203 } else if (test_bit(B_SESS_VLD, &motg->inputs)) { 1204 switch (motg->chg_state) { 1205 case USB_CHG_STATE_UNDEFINED: 1206 msm_chg_detect_work(&motg->chg_work.work); 1207 break; 1208 case USB_CHG_STATE_DETECTED: 1209 switch (motg->chg_type) { 1210 case USB_DCP_CHARGER: 1211 msm_otg_notify_charger(motg, 1212 IDEV_CHG_MAX); 1213 break; 1214 case USB_CDP_CHARGER: 1215 msm_otg_notify_charger(motg, 1216 IDEV_CHG_MAX); 1217 msm_otg_start_peripheral(otg->usb_phy, 1218 1); 1219 otg->state 1220 = OTG_STATE_B_PERIPHERAL; 1221 break; 1222 case USB_SDP_CHARGER: 1223 msm_otg_notify_charger(motg, IUNIT); 1224 msm_otg_start_peripheral(otg->usb_phy, 1225 1); 1226 otg->state 1227 = OTG_STATE_B_PERIPHERAL; 1228 break; 1229 default: 1230 break; 1231 } 1232 break; 1233 default: 1234 break; 1235 } 1236 } else { 1237 /* 1238 * If charger detection work is pending, decrement 1239 * the pm usage counter to balance with the one that 1240 * is incremented in charger detection work. 1241 */ 1242 if (cancel_delayed_work_sync(&motg->chg_work)) { 1243 pm_runtime_put_sync(otg->usb_phy->dev); 1244 msm_otg_reset(otg->usb_phy); 1245 } 1246 msm_otg_notify_charger(motg, 0); 1247 motg->chg_state = USB_CHG_STATE_UNDEFINED; 1248 motg->chg_type = USB_INVALID_CHARGER; 1249 } 1250 1251 if (otg->state == OTG_STATE_B_IDLE) 1252 pm_runtime_put_sync(otg->usb_phy->dev); 1253 break; 1254 case OTG_STATE_B_PERIPHERAL: 1255 dev_dbg(otg->usb_phy->dev, "OTG_STATE_B_PERIPHERAL state\n"); 1256 if (!test_bit(B_SESS_VLD, &motg->inputs) || 1257 !test_bit(ID, &motg->inputs)) { 1258 msm_otg_notify_charger(motg, 0); 1259 msm_otg_start_peripheral(otg->usb_phy, 0); 1260 motg->chg_state = USB_CHG_STATE_UNDEFINED; 1261 motg->chg_type = USB_INVALID_CHARGER; 1262 otg->state = OTG_STATE_B_IDLE; 1263 msm_otg_reset(otg->usb_phy); 1264 schedule_work(w); 1265 } 1266 break; 1267 case OTG_STATE_A_HOST: 1268 dev_dbg(otg->usb_phy->dev, "OTG_STATE_A_HOST state\n"); 1269 if (test_bit(ID, &motg->inputs)) { 1270 msm_otg_start_host(otg->usb_phy, 0); 1271 otg->state = OTG_STATE_B_IDLE; 1272 msm_otg_reset(otg->usb_phy); 1273 schedule_work(w); 1274 } 1275 break; 1276 default: 1277 break; 1278 } 1279} 1280 1281static irqreturn_t msm_otg_irq(int irq, void *data) 1282{ 1283 struct msm_otg *motg = data; 1284 struct usb_phy *phy = &motg->phy; 1285 u32 otgsc = 0; 1286 1287 if (atomic_read(&motg->in_lpm)) { 1288 disable_irq_nosync(irq); 1289 motg->async_int = 1; 1290 pm_runtime_get(phy->dev); 1291 return IRQ_HANDLED; 1292 } 1293 1294 otgsc = readl(USB_OTGSC); 1295 if (!(otgsc & (OTGSC_IDIS | OTGSC_BSVIS))) 1296 return IRQ_NONE; 1297 1298 if ((otgsc & OTGSC_IDIS) && (otgsc & OTGSC_IDIE)) { 1299 if (otgsc & OTGSC_ID) 1300 set_bit(ID, &motg->inputs); 1301 else 1302 clear_bit(ID, &motg->inputs); 1303 dev_dbg(phy->dev, "ID set/clear\n"); 1304 pm_runtime_get_noresume(phy->dev); 1305 } else if ((otgsc & OTGSC_BSVIS) && (otgsc & OTGSC_BSVIE)) { 1306 if (otgsc & OTGSC_BSV) 1307 set_bit(B_SESS_VLD, &motg->inputs); 1308 else 1309 clear_bit(B_SESS_VLD, &motg->inputs); 1310 dev_dbg(phy->dev, "BSV set/clear\n"); 1311 pm_runtime_get_noresume(phy->dev); 1312 } 1313 1314 writel(otgsc, USB_OTGSC); 1315 schedule_work(&motg->sm_work); 1316 return IRQ_HANDLED; 1317} 1318 1319static int msm_otg_mode_show(struct seq_file *s, void *unused) 1320{ 1321 struct msm_otg *motg = s->private; 1322 struct usb_otg *otg = motg->phy.otg; 1323 1324 switch (otg->state) { 1325 case OTG_STATE_A_HOST: 1326 seq_puts(s, "host\n"); 1327 break; 1328 case OTG_STATE_B_PERIPHERAL: 1329 seq_puts(s, "peripheral\n"); 1330 break; 1331 default: 1332 seq_puts(s, "none\n"); 1333 break; 1334 } 1335 1336 return 0; 1337} 1338 1339static int msm_otg_mode_open(struct inode *inode, struct file *file) 1340{ 1341 return single_open(file, msm_otg_mode_show, inode->i_private); 1342} 1343 1344static ssize_t msm_otg_mode_write(struct file *file, const char __user *ubuf, 1345 size_t count, loff_t *ppos) 1346{ 1347 struct seq_file *s = file->private_data; 1348 struct msm_otg *motg = s->private; 1349 char buf[16]; 1350 struct usb_otg *otg = motg->phy.otg; 1351 int status = count; 1352 enum usb_dr_mode req_mode; 1353 1354 memset(buf, 0x00, sizeof(buf)); 1355 1356 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) { 1357 status = -EFAULT; 1358 goto out; 1359 } 1360 1361 if (!strncmp(buf, "host", 4)) { 1362 req_mode = USB_DR_MODE_HOST; 1363 } else if (!strncmp(buf, "peripheral", 10)) { 1364 req_mode = USB_DR_MODE_PERIPHERAL; 1365 } else if (!strncmp(buf, "none", 4)) { 1366 req_mode = USB_DR_MODE_UNKNOWN; 1367 } else { 1368 status = -EINVAL; 1369 goto out; 1370 } 1371 1372 switch (req_mode) { 1373 case USB_DR_MODE_UNKNOWN: 1374 switch (otg->state) { 1375 case OTG_STATE_A_HOST: 1376 case OTG_STATE_B_PERIPHERAL: 1377 set_bit(ID, &motg->inputs); 1378 clear_bit(B_SESS_VLD, &motg->inputs); 1379 break; 1380 default: 1381 goto out; 1382 } 1383 break; 1384 case USB_DR_MODE_PERIPHERAL: 1385 switch (otg->state) { 1386 case OTG_STATE_B_IDLE: 1387 case OTG_STATE_A_HOST: 1388 set_bit(ID, &motg->inputs); 1389 set_bit(B_SESS_VLD, &motg->inputs); 1390 break; 1391 default: 1392 goto out; 1393 } 1394 break; 1395 case USB_DR_MODE_HOST: 1396 switch (otg->state) { 1397 case OTG_STATE_B_IDLE: 1398 case OTG_STATE_B_PERIPHERAL: 1399 clear_bit(ID, &motg->inputs); 1400 break; 1401 default: 1402 goto out; 1403 } 1404 break; 1405 default: 1406 goto out; 1407 } 1408 1409 pm_runtime_get_sync(otg->usb_phy->dev); 1410 schedule_work(&motg->sm_work); 1411out: 1412 return status; 1413} 1414 1415static const struct file_operations msm_otg_mode_fops = { 1416 .open = msm_otg_mode_open, 1417 .read = seq_read, 1418 .write = msm_otg_mode_write, 1419 .llseek = seq_lseek, 1420 .release = single_release, 1421}; 1422 1423static struct dentry *msm_otg_dbg_root; 1424static struct dentry *msm_otg_dbg_mode; 1425 1426static int msm_otg_debugfs_init(struct msm_otg *motg) 1427{ 1428 msm_otg_dbg_root = debugfs_create_dir("msm_otg", NULL); 1429 1430 if (!msm_otg_dbg_root || IS_ERR(msm_otg_dbg_root)) 1431 return -ENODEV; 1432 1433 msm_otg_dbg_mode = debugfs_create_file("mode", S_IRUGO | S_IWUSR, 1434 msm_otg_dbg_root, motg, &msm_otg_mode_fops); 1435 if (!msm_otg_dbg_mode) { 1436 debugfs_remove(msm_otg_dbg_root); 1437 msm_otg_dbg_root = NULL; 1438 return -ENODEV; 1439 } 1440 1441 return 0; 1442} 1443 1444static void msm_otg_debugfs_cleanup(void) 1445{ 1446 debugfs_remove(msm_otg_dbg_mode); 1447 debugfs_remove(msm_otg_dbg_root); 1448} 1449 1450static const struct of_device_id msm_otg_dt_match[] = { 1451 { 1452 .compatible = "qcom,usb-otg-ci", 1453 .data = (void *) CI_45NM_INTEGRATED_PHY 1454 }, 1455 { 1456 .compatible = "qcom,usb-otg-snps", 1457 .data = (void *) SNPS_28NM_INTEGRATED_PHY 1458 }, 1459 { } 1460}; 1461MODULE_DEVICE_TABLE(of, msm_otg_dt_match); 1462 1463static int msm_otg_vbus_notifier(struct notifier_block *nb, unsigned long event, 1464 void *ptr) 1465{ 1466 struct msm_usb_cable *vbus = container_of(nb, struct msm_usb_cable, nb); 1467 struct msm_otg *motg = container_of(vbus, struct msm_otg, vbus); 1468 1469 if (event) 1470 set_bit(B_SESS_VLD, &motg->inputs); 1471 else 1472 clear_bit(B_SESS_VLD, &motg->inputs); 1473 1474 schedule_work(&motg->sm_work); 1475 1476 return NOTIFY_DONE; 1477} 1478 1479static int msm_otg_id_notifier(struct notifier_block *nb, unsigned long event, 1480 void *ptr) 1481{ 1482 struct msm_usb_cable *id = container_of(nb, struct msm_usb_cable, nb); 1483 struct msm_otg *motg = container_of(id, struct msm_otg, id); 1484 1485 if (event) 1486 clear_bit(ID, &motg->inputs); 1487 else 1488 set_bit(ID, &motg->inputs); 1489 1490 schedule_work(&motg->sm_work); 1491 1492 return NOTIFY_DONE; 1493} 1494 1495static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg) 1496{ 1497 struct msm_otg_platform_data *pdata; 1498 struct extcon_dev *ext_id, *ext_vbus; 1499 const struct of_device_id *id; 1500 struct device_node *node = pdev->dev.of_node; 1501 struct property *prop; 1502 int len, ret, words; 1503 u32 val, tmp[3]; 1504 1505 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 1506 if (!pdata) 1507 return -ENOMEM; 1508 1509 motg->pdata = pdata; 1510 1511 id = of_match_device(msm_otg_dt_match, &pdev->dev); 1512 pdata->phy_type = (enum msm_usb_phy_type) id->data; 1513 1514 motg->link_rst = devm_reset_control_get(&pdev->dev, "link"); 1515 if (IS_ERR(motg->link_rst)) 1516 return PTR_ERR(motg->link_rst); 1517 1518 motg->phy_rst = devm_reset_control_get(&pdev->dev, "phy"); 1519 if (IS_ERR(motg->phy_rst)) 1520 motg->phy_rst = NULL; 1521 1522 pdata->mode = of_usb_get_dr_mode(node); 1523 if (pdata->mode == USB_DR_MODE_UNKNOWN) 1524 pdata->mode = USB_DR_MODE_OTG; 1525 1526 pdata->otg_control = OTG_PHY_CONTROL; 1527 if (!of_property_read_u32(node, "qcom,otg-control", &val)) 1528 if (val == OTG_PMIC_CONTROL) 1529 pdata->otg_control = val; 1530 1531 if (!of_property_read_u32(node, "qcom,phy-num", &val) && val < 2) 1532 motg->phy_number = val; 1533 1534 motg->vdd_levels[VDD_LEVEL_NONE] = USB_PHY_SUSP_DIG_VOL; 1535 motg->vdd_levels[VDD_LEVEL_MIN] = USB_PHY_VDD_DIG_VOL_MIN; 1536 motg->vdd_levels[VDD_LEVEL_MAX] = USB_PHY_VDD_DIG_VOL_MAX; 1537 1538 if (of_get_property(node, "qcom,vdd-levels", &len) && 1539 len == sizeof(tmp)) { 1540 of_property_read_u32_array(node, "qcom,vdd-levels", 1541 tmp, len / sizeof(*tmp)); 1542 motg->vdd_levels[VDD_LEVEL_NONE] = tmp[VDD_LEVEL_NONE]; 1543 motg->vdd_levels[VDD_LEVEL_MIN] = tmp[VDD_LEVEL_MIN]; 1544 motg->vdd_levels[VDD_LEVEL_MAX] = tmp[VDD_LEVEL_MAX]; 1545 } 1546 1547 motg->manual_pullup = of_property_read_bool(node, "qcom,manual-pullup"); 1548 1549 ext_id = ERR_PTR(-ENODEV); 1550 ext_vbus = ERR_PTR(-ENODEV); 1551 if (of_property_read_bool(node, "extcon")) { 1552 1553 /* Each one of them is not mandatory */ 1554 ext_vbus = extcon_get_edev_by_phandle(&pdev->dev, 0); 1555 if (IS_ERR(ext_vbus) && PTR_ERR(ext_vbus) != -ENODEV) 1556 return PTR_ERR(ext_vbus); 1557 1558 ext_id = extcon_get_edev_by_phandle(&pdev->dev, 1); 1559 if (IS_ERR(ext_id) && PTR_ERR(ext_id) != -ENODEV) 1560 return PTR_ERR(ext_id); 1561 } 1562 1563 if (!IS_ERR(ext_vbus)) { 1564 motg->vbus.nb.notifier_call = msm_otg_vbus_notifier; 1565 ret = extcon_register_interest(&motg->vbus.conn, ext_vbus->name, 1566 "USB", &motg->vbus.nb); 1567 if (ret < 0) { 1568 dev_err(&pdev->dev, "register VBUS notifier failed\n"); 1569 return ret; 1570 } 1571 1572 ret = extcon_get_cable_state(ext_vbus, "USB"); 1573 if (ret) 1574 set_bit(B_SESS_VLD, &motg->inputs); 1575 else 1576 clear_bit(B_SESS_VLD, &motg->inputs); 1577 } 1578 1579 if (!IS_ERR(ext_id)) { 1580 motg->id.nb.notifier_call = msm_otg_id_notifier; 1581 ret = extcon_register_interest(&motg->id.conn, ext_id->name, 1582 "USB-HOST", &motg->id.nb); 1583 if (ret < 0) { 1584 dev_err(&pdev->dev, "register ID notifier failed\n"); 1585 return ret; 1586 } 1587 1588 ret = extcon_get_cable_state(ext_id, "USB-HOST"); 1589 if (ret) 1590 clear_bit(ID, &motg->inputs); 1591 else 1592 set_bit(ID, &motg->inputs); 1593 } 1594 1595 prop = of_find_property(node, "qcom,phy-init-sequence", &len); 1596 if (!prop || !len) 1597 return 0; 1598 1599 words = len / sizeof(u32); 1600 1601 if (words >= ULPI_EXT_VENDOR_SPECIFIC) { 1602 dev_warn(&pdev->dev, "Too big PHY init sequence %d\n", words); 1603 return 0; 1604 } 1605 1606 pdata->phy_init_seq = devm_kzalloc(&pdev->dev, len, GFP_KERNEL); 1607 if (!pdata->phy_init_seq) 1608 return 0; 1609 1610 ret = of_property_read_u32_array(node, "qcom,phy-init-sequence", 1611 pdata->phy_init_seq, words); 1612 if (!ret) 1613 pdata->phy_init_sz = words; 1614 1615 return 0; 1616} 1617 1618static int msm_otg_probe(struct platform_device *pdev) 1619{ 1620 struct regulator_bulk_data regs[3]; 1621 int ret = 0; 1622 struct device_node *np = pdev->dev.of_node; 1623 struct msm_otg_platform_data *pdata; 1624 struct resource *res; 1625 struct msm_otg *motg; 1626 struct usb_phy *phy; 1627 void __iomem *phy_select; 1628 1629 motg = devm_kzalloc(&pdev->dev, sizeof(struct msm_otg), GFP_KERNEL); 1630 if (!motg) 1631 return -ENOMEM; 1632 1633 pdata = dev_get_platdata(&pdev->dev); 1634 if (!pdata) { 1635 if (!np) 1636 return -ENXIO; 1637 ret = msm_otg_read_dt(pdev, motg); 1638 if (ret) 1639 return ret; 1640 } 1641 1642 motg->phy.otg = devm_kzalloc(&pdev->dev, sizeof(struct usb_otg), 1643 GFP_KERNEL); 1644 if (!motg->phy.otg) 1645 return -ENOMEM; 1646 1647 phy = &motg->phy; 1648 phy->dev = &pdev->dev; 1649 1650 motg->clk = devm_clk_get(&pdev->dev, np ? "core" : "usb_hs_clk"); 1651 if (IS_ERR(motg->clk)) { 1652 dev_err(&pdev->dev, "failed to get usb_hs_clk\n"); 1653 return PTR_ERR(motg->clk); 1654 } 1655 1656 /* 1657 * If USB Core is running its protocol engine based on CORE CLK, 1658 * CORE CLK must be running at >55Mhz for correct HSUSB 1659 * operation and USB core cannot tolerate frequency changes on 1660 * CORE CLK. 1661 */ 1662 motg->pclk = devm_clk_get(&pdev->dev, np ? "iface" : "usb_hs_pclk"); 1663 if (IS_ERR(motg->pclk)) { 1664 dev_err(&pdev->dev, "failed to get usb_hs_pclk\n"); 1665 return PTR_ERR(motg->pclk); 1666 } 1667 1668 /* 1669 * USB core clock is not present on all MSM chips. This 1670 * clock is introduced to remove the dependency on AXI 1671 * bus frequency. 1672 */ 1673 motg->core_clk = devm_clk_get(&pdev->dev, 1674 np ? "alt_core" : "usb_hs_core_clk"); 1675 1676 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1677 if (!res) 1678 return -EINVAL; 1679 motg->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res)); 1680 if (!motg->regs) 1681 return -ENOMEM; 1682 1683 /* 1684 * NOTE: The PHYs can be multiplexed between the chipidea controller 1685 * and the dwc3 controller, using a single bit. It is important that 1686 * the dwc3 driver does not set this bit in an incompatible way. 1687 */ 1688 if (motg->phy_number) { 1689 phy_select = devm_ioremap_nocache(&pdev->dev, USB2_PHY_SEL, 4); 1690 if (!phy_select) 1691 return -ENOMEM; 1692 /* Enable second PHY with the OTG port */ 1693 writel(0x1, phy_select); 1694 } 1695 1696 dev_info(&pdev->dev, "OTG regs = %p\n", motg->regs); 1697 1698 motg->irq = platform_get_irq(pdev, 0); 1699 if (motg->irq < 0) { 1700 dev_err(&pdev->dev, "platform_get_irq failed\n"); 1701 return motg->irq; 1702 } 1703 1704 regs[0].supply = "vddcx"; 1705 regs[1].supply = "v3p3"; 1706 regs[2].supply = "v1p8"; 1707 1708 ret = devm_regulator_bulk_get(motg->phy.dev, ARRAY_SIZE(regs), regs); 1709 if (ret) 1710 return ret; 1711 1712 motg->vddcx = regs[0].consumer; 1713 motg->v3p3 = regs[1].consumer; 1714 motg->v1p8 = regs[2].consumer; 1715 1716 clk_set_rate(motg->clk, 60000000); 1717 1718 clk_prepare_enable(motg->clk); 1719 clk_prepare_enable(motg->pclk); 1720 1721 if (!IS_ERR(motg->core_clk)) 1722 clk_prepare_enable(motg->core_clk); 1723 1724 ret = msm_hsusb_init_vddcx(motg, 1); 1725 if (ret) { 1726 dev_err(&pdev->dev, "hsusb vddcx configuration failed\n"); 1727 goto disable_clks; 1728 } 1729 1730 ret = msm_hsusb_ldo_init(motg, 1); 1731 if (ret) { 1732 dev_err(&pdev->dev, "hsusb vreg configuration failed\n"); 1733 goto disable_vddcx; 1734 } 1735 ret = msm_hsusb_ldo_set_mode(motg, 1); 1736 if (ret) { 1737 dev_err(&pdev->dev, "hsusb vreg enable failed\n"); 1738 goto disable_ldo; 1739 } 1740 1741 writel(0, USB_USBINTR); 1742 writel(0, USB_OTGSC); 1743 1744 INIT_WORK(&motg->sm_work, msm_otg_sm_work); 1745 INIT_DELAYED_WORK(&motg->chg_work, msm_chg_detect_work); 1746 ret = devm_request_irq(&pdev->dev, motg->irq, msm_otg_irq, IRQF_SHARED, 1747 "msm_otg", motg); 1748 if (ret) { 1749 dev_err(&pdev->dev, "request irq failed\n"); 1750 goto disable_ldo; 1751 } 1752 1753 phy->init = msm_phy_init; 1754 phy->set_power = msm_otg_set_power; 1755 phy->notify_disconnect = msm_phy_notify_disconnect; 1756 phy->type = USB_PHY_TYPE_USB2; 1757 1758 phy->io_ops = &msm_otg_io_ops; 1759 1760 phy->otg->usb_phy = &motg->phy; 1761 phy->otg->set_host = msm_otg_set_host; 1762 phy->otg->set_peripheral = msm_otg_set_peripheral; 1763 1764 msm_usb_reset(phy); 1765 1766 ret = usb_add_phy_dev(&motg->phy); 1767 if (ret) { 1768 dev_err(&pdev->dev, "usb_add_phy failed\n"); 1769 goto disable_ldo; 1770 } 1771 1772 platform_set_drvdata(pdev, motg); 1773 device_init_wakeup(&pdev->dev, 1); 1774 1775 if (motg->pdata->mode == USB_DR_MODE_OTG && 1776 motg->pdata->otg_control == OTG_USER_CONTROL) { 1777 ret = msm_otg_debugfs_init(motg); 1778 if (ret) 1779 dev_dbg(&pdev->dev, "Can not create mode change file\n"); 1780 } 1781 1782 pm_runtime_set_active(&pdev->dev); 1783 pm_runtime_enable(&pdev->dev); 1784 1785 return 0; 1786 1787disable_ldo: 1788 msm_hsusb_ldo_init(motg, 0); 1789disable_vddcx: 1790 msm_hsusb_init_vddcx(motg, 0); 1791disable_clks: 1792 clk_disable_unprepare(motg->pclk); 1793 clk_disable_unprepare(motg->clk); 1794 if (!IS_ERR(motg->core_clk)) 1795 clk_disable_unprepare(motg->core_clk); 1796 return ret; 1797} 1798 1799static int msm_otg_remove(struct platform_device *pdev) 1800{ 1801 struct msm_otg *motg = platform_get_drvdata(pdev); 1802 struct usb_phy *phy = &motg->phy; 1803 int cnt = 0; 1804 1805 if (phy->otg->host || phy->otg->gadget) 1806 return -EBUSY; 1807 1808 if (motg->id.conn.edev) 1809 extcon_unregister_interest(&motg->id.conn); 1810 if (motg->vbus.conn.edev) 1811 extcon_unregister_interest(&motg->vbus.conn); 1812 1813 msm_otg_debugfs_cleanup(); 1814 cancel_delayed_work_sync(&motg->chg_work); 1815 cancel_work_sync(&motg->sm_work); 1816 1817 pm_runtime_resume(&pdev->dev); 1818 1819 device_init_wakeup(&pdev->dev, 0); 1820 pm_runtime_disable(&pdev->dev); 1821 1822 usb_remove_phy(phy); 1823 disable_irq(motg->irq); 1824 1825 /* 1826 * Put PHY in low power mode. 1827 */ 1828 ulpi_read(phy, 0x14); 1829 ulpi_write(phy, 0x08, 0x09); 1830 1831 writel(readl(USB_PORTSC) | PORTSC_PHCD, USB_PORTSC); 1832 while (cnt < PHY_SUSPEND_TIMEOUT_USEC) { 1833 if (readl(USB_PORTSC) & PORTSC_PHCD) 1834 break; 1835 udelay(1); 1836 cnt++; 1837 } 1838 if (cnt >= PHY_SUSPEND_TIMEOUT_USEC) 1839 dev_err(phy->dev, "Unable to suspend PHY\n"); 1840 1841 clk_disable_unprepare(motg->pclk); 1842 clk_disable_unprepare(motg->clk); 1843 if (!IS_ERR(motg->core_clk)) 1844 clk_disable_unprepare(motg->core_clk); 1845 msm_hsusb_ldo_init(motg, 0); 1846 1847 pm_runtime_set_suspended(&pdev->dev); 1848 1849 return 0; 1850} 1851 1852#ifdef CONFIG_PM 1853static int msm_otg_runtime_idle(struct device *dev) 1854{ 1855 struct msm_otg *motg = dev_get_drvdata(dev); 1856 struct usb_otg *otg = motg->phy.otg; 1857 1858 dev_dbg(dev, "OTG runtime idle\n"); 1859 1860 /* 1861 * It is observed some times that a spurious interrupt 1862 * comes when PHY is put into LPM immediately after PHY reset. 1863 * This 1 sec delay also prevents entering into LPM immediately 1864 * after asynchronous interrupt. 1865 */ 1866 if (otg->state != OTG_STATE_UNDEFINED) 1867 pm_schedule_suspend(dev, 1000); 1868 1869 return -EAGAIN; 1870} 1871 1872static int msm_otg_runtime_suspend(struct device *dev) 1873{ 1874 struct msm_otg *motg = dev_get_drvdata(dev); 1875 1876 dev_dbg(dev, "OTG runtime suspend\n"); 1877 return msm_otg_suspend(motg); 1878} 1879 1880static int msm_otg_runtime_resume(struct device *dev) 1881{ 1882 struct msm_otg *motg = dev_get_drvdata(dev); 1883 1884 dev_dbg(dev, "OTG runtime resume\n"); 1885 return msm_otg_resume(motg); 1886} 1887#endif 1888 1889#ifdef CONFIG_PM_SLEEP 1890static int msm_otg_pm_suspend(struct device *dev) 1891{ 1892 struct msm_otg *motg = dev_get_drvdata(dev); 1893 1894 dev_dbg(dev, "OTG PM suspend\n"); 1895 return msm_otg_suspend(motg); 1896} 1897 1898static int msm_otg_pm_resume(struct device *dev) 1899{ 1900 struct msm_otg *motg = dev_get_drvdata(dev); 1901 int ret; 1902 1903 dev_dbg(dev, "OTG PM resume\n"); 1904 1905 ret = msm_otg_resume(motg); 1906 if (ret) 1907 return ret; 1908 1909 /* 1910 * Runtime PM Documentation recommends bringing the 1911 * device to full powered state upon resume. 1912 */ 1913 pm_runtime_disable(dev); 1914 pm_runtime_set_active(dev); 1915 pm_runtime_enable(dev); 1916 1917 return 0; 1918} 1919#endif 1920 1921static const struct dev_pm_ops msm_otg_dev_pm_ops = { 1922 SET_SYSTEM_SLEEP_PM_OPS(msm_otg_pm_suspend, msm_otg_pm_resume) 1923 SET_RUNTIME_PM_OPS(msm_otg_runtime_suspend, msm_otg_runtime_resume, 1924 msm_otg_runtime_idle) 1925}; 1926 1927static struct platform_driver msm_otg_driver = { 1928 .probe = msm_otg_probe, 1929 .remove = msm_otg_remove, 1930 .driver = { 1931 .name = DRIVER_NAME, 1932 .pm = &msm_otg_dev_pm_ops, 1933 .of_match_table = msm_otg_dt_match, 1934 }, 1935}; 1936 1937module_platform_driver(msm_otg_driver); 1938 1939MODULE_LICENSE("GPL v2"); 1940MODULE_DESCRIPTION("MSM USB transceiver driver");