1 /* 2 * drivers/usb/otg/ab8500_usb.c 3 * 4 * USB transceiver driver for AB8500 chip 5 * 6 * Copyright (C) 2010 ST-Ericsson AB 7 * Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 * 23 */ 24 25 #include <linux/module.h> 26 #include <linux/platform_device.h> 27 #include <linux/usb/otg.h> 28 #include <linux/slab.h> 29 #include <linux/notifier.h> 30 #include <linux/interrupt.h> 31 #include <linux/delay.h> 32 #include <linux/clk.h> 33 #include <linux/err.h> 34 #include <linux/mfd/abx500.h> 35 #include <linux/mfd/abx500/ab8500.h> 36 #include <linux/usb/musb-ux500.h> 37 #include <linux/regulator/consumer.h> 38 #include <linux/pinctrl/consumer.h> 39 40 /* Bank AB8500_SYS_CTRL2_BLOCK */ 41 #define AB8500_MAIN_WD_CTRL_REG 0x01 42 43 /* Bank AB8500_USB */ 44 #define AB8500_USB_LINE_STAT_REG 0x80 45 #define AB8505_USB_LINE_STAT_REG 0x94 46 #define AB8500_USB_PHY_CTRL_REG 0x8A 47 48 /* Bank AB8500_DEVELOPMENT */ 49 #define AB8500_BANK12_ACCESS 0x00 50 51 /* Bank AB8500_DEBUG */ 52 #define AB8500_USB_PHY_TUNE1 0x05 53 #define AB8500_USB_PHY_TUNE2 0x06 54 #define AB8500_USB_PHY_TUNE3 0x07 55 56 #define AB8500_BIT_OTG_STAT_ID (1 << 0) 57 #define AB8500_BIT_PHY_CTRL_HOST_EN (1 << 0) 58 #define AB8500_BIT_PHY_CTRL_DEVICE_EN (1 << 1) 59 #define AB8500_BIT_WD_CTRL_ENABLE (1 << 0) 60 #define AB8500_BIT_WD_CTRL_KICK (1 << 1) 61 62 #define AB8500_WD_KICK_DELAY_US 100 /* usec */ 63 #define AB8500_WD_V11_DISABLE_DELAY_US 100 /* usec */ 64 #define AB8500_V20_31952_DISABLE_DELAY_US 100 /* usec */ 65 66 /* Usb line status register */ 67 enum ab8500_usb_link_status { 68 USB_LINK_NOT_CONFIGURED_8500 = 0, 69 USB_LINK_STD_HOST_NC_8500, 70 USB_LINK_STD_HOST_C_NS_8500, 71 USB_LINK_STD_HOST_C_S_8500, 72 USB_LINK_HOST_CHG_NM_8500, 73 USB_LINK_HOST_CHG_HS_8500, 74 USB_LINK_HOST_CHG_HS_CHIRP_8500, 75 USB_LINK_DEDICATED_CHG_8500, 76 USB_LINK_ACA_RID_A_8500, 77 USB_LINK_ACA_RID_B_8500, 78 USB_LINK_ACA_RID_C_NM_8500, 79 USB_LINK_ACA_RID_C_HS_8500, 80 USB_LINK_ACA_RID_C_HS_CHIRP_8500, 81 USB_LINK_HM_IDGND_8500, 82 USB_LINK_RESERVED_8500, 83 USB_LINK_NOT_VALID_LINK_8500, 84 }; 85 86 enum ab8505_usb_link_status { 87 USB_LINK_NOT_CONFIGURED_8505 = 0, 88 USB_LINK_STD_HOST_NC_8505, 89 USB_LINK_STD_HOST_C_NS_8505, 90 USB_LINK_STD_HOST_C_S_8505, 91 USB_LINK_CDP_8505, 92 USB_LINK_RESERVED0_8505, 93 USB_LINK_RESERVED1_8505, 94 USB_LINK_DEDICATED_CHG_8505, 95 USB_LINK_ACA_RID_A_8505, 96 USB_LINK_ACA_RID_B_8505, 97 USB_LINK_ACA_RID_C_NM_8505, 98 USB_LINK_RESERVED2_8505, 99 USB_LINK_RESERVED3_8505, 100 USB_LINK_HM_IDGND_8505, 101 USB_LINK_CHARGERPORT_NOT_OK_8505, 102 USB_LINK_CHARGER_DM_HIGH_8505, 103 USB_LINK_PHYEN_NO_VBUS_NO_IDGND_8505, 104 USB_LINK_STD_UPSTREAM_NO_IDGNG_NO_VBUS_8505, 105 USB_LINK_STD_UPSTREAM_8505, 106 USB_LINK_CHARGER_SE1_8505, 107 USB_LINK_CARKIT_CHGR_1_8505, 108 USB_LINK_CARKIT_CHGR_2_8505, 109 USB_LINK_ACA_DOCK_CHGR_8505, 110 USB_LINK_SAMSUNG_BOOT_CBL_PHY_EN_8505, 111 USB_LINK_SAMSUNG_BOOT_CBL_PHY_DISB_8505, 112 USB_LINK_SAMSUNG_UART_CBL_PHY_EN_8505, 113 USB_LINK_SAMSUNG_UART_CBL_PHY_DISB_8505, 114 USB_LINK_MOTOROLA_FACTORY_CBL_PHY_EN_8505, 115 }; 116 117 enum ab8500_usb_mode { 118 USB_IDLE = 0, 119 USB_PERIPHERAL, 120 USB_HOST, 121 USB_DEDICATED_CHG 122 }; 123 124 struct ab8500_usb { 125 struct usb_phy phy; 126 struct device *dev; 127 struct ab8500 *ab8500; 128 unsigned vbus_draw; 129 struct work_struct phy_dis_work; 130 enum ab8500_usb_mode mode; 131 struct clk *sysclk; 132 struct regulator *v_ape; 133 struct regulator *v_musb; 134 struct regulator *v_ulpi; 135 int saved_v_ulpi; 136 int previous_link_status_state; 137 struct pinctrl *pinctrl; 138 struct pinctrl_state *pins_sleep; 139 }; 140 141 static inline struct ab8500_usb *phy_to_ab(struct usb_phy *x) 142 { 143 return container_of(x, struct ab8500_usb, phy); 144 } 145 146 static void ab8500_usb_wd_workaround(struct ab8500_usb *ab) 147 { 148 abx500_set_register_interruptible(ab->dev, 149 AB8500_SYS_CTRL2_BLOCK, 150 AB8500_MAIN_WD_CTRL_REG, 151 AB8500_BIT_WD_CTRL_ENABLE); 152 153 udelay(AB8500_WD_KICK_DELAY_US); 154 155 abx500_set_register_interruptible(ab->dev, 156 AB8500_SYS_CTRL2_BLOCK, 157 AB8500_MAIN_WD_CTRL_REG, 158 (AB8500_BIT_WD_CTRL_ENABLE 159 | AB8500_BIT_WD_CTRL_KICK)); 160 161 udelay(AB8500_WD_V11_DISABLE_DELAY_US); 162 163 abx500_set_register_interruptible(ab->dev, 164 AB8500_SYS_CTRL2_BLOCK, 165 AB8500_MAIN_WD_CTRL_REG, 166 0); 167 } 168 169 static void ab8500_usb_regulator_enable(struct ab8500_usb *ab) 170 { 171 int ret, volt; 172 173 ret = regulator_enable(ab->v_ape); 174 if (ret) 175 dev_err(ab->dev, "Failed to enable v-ape\n"); 176 177 if (!is_ab8500_2p0_or_earlier(ab->ab8500)) { 178 ab->saved_v_ulpi = regulator_get_voltage(ab->v_ulpi); 179 if (ab->saved_v_ulpi < 0) 180 dev_err(ab->dev, "Failed to get v_ulpi voltage\n"); 181 182 ret = regulator_set_voltage(ab->v_ulpi, 1300000, 1350000); 183 if (ret < 0) 184 dev_err(ab->dev, "Failed to set the Vintcore to 1.3V, ret=%d\n", 185 ret); 186 187 ret = regulator_set_optimum_mode(ab->v_ulpi, 28000); 188 if (ret < 0) 189 dev_err(ab->dev, "Failed to set optimum mode (ret=%d)\n", 190 ret); 191 } 192 193 ret = regulator_enable(ab->v_ulpi); 194 if (ret) 195 dev_err(ab->dev, "Failed to enable vddulpivio18\n"); 196 197 if (!is_ab8500_2p0_or_earlier(ab->ab8500)) { 198 volt = regulator_get_voltage(ab->v_ulpi); 199 if ((volt != 1300000) && (volt != 1350000)) 200 dev_err(ab->dev, "Vintcore is not set to 1.3V volt=%d\n", 201 volt); 202 } 203 204 ret = regulator_enable(ab->v_musb); 205 if (ret) 206 dev_err(ab->dev, "Failed to enable musb_1v8\n"); 207 } 208 209 static void ab8500_usb_regulator_disable(struct ab8500_usb *ab) 210 { 211 int ret; 212 213 regulator_disable(ab->v_musb); 214 215 regulator_disable(ab->v_ulpi); 216 217 /* USB is not the only consumer of Vintcore, restore old settings */ 218 if (!is_ab8500_2p0_or_earlier(ab->ab8500)) { 219 if (ab->saved_v_ulpi > 0) { 220 ret = regulator_set_voltage(ab->v_ulpi, 221 ab->saved_v_ulpi, ab->saved_v_ulpi); 222 if (ret < 0) 223 dev_err(ab->dev, "Failed to set the Vintcore to %duV, ret=%d\n", 224 ab->saved_v_ulpi, ret); 225 } 226 227 ret = regulator_set_optimum_mode(ab->v_ulpi, 0); 228 if (ret < 0) 229 dev_err(ab->dev, "Failed to set optimum mode (ret=%d)\n", 230 ret); 231 } 232 233 regulator_disable(ab->v_ape); 234 } 235 236 static void ab8500_usb_wd_linkstatus(struct ab8500_usb *ab, u8 bit) 237 { 238 /* Workaround for v2.0 bug # 31952 */ 239 if (is_ab8500_2p0(ab->ab8500)) { 240 abx500_mask_and_set_register_interruptible(ab->dev, 241 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 242 bit, bit); 243 udelay(AB8500_V20_31952_DISABLE_DELAY_US); 244 } 245 } 246 247 static void ab8500_usb_phy_enable(struct ab8500_usb *ab, bool sel_host) 248 { 249 u8 bit; 250 bit = sel_host ? AB8500_BIT_PHY_CTRL_HOST_EN : 251 AB8500_BIT_PHY_CTRL_DEVICE_EN; 252 253 /* mux and configure USB pins to DEFAULT state */ 254 ab->pinctrl = pinctrl_get_select(ab->dev, PINCTRL_STATE_DEFAULT); 255 if (IS_ERR(ab->pinctrl)) 256 dev_err(ab->dev, "could not get/set default pinstate\n"); 257 258 if (clk_prepare_enable(ab->sysclk)) 259 dev_err(ab->dev, "can't prepare/enable clock\n"); 260 261 ab8500_usb_regulator_enable(ab); 262 263 abx500_mask_and_set_register_interruptible(ab->dev, 264 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 265 bit, bit); 266 } 267 268 static void ab8500_usb_phy_disable(struct ab8500_usb *ab, bool sel_host) 269 { 270 u8 bit; 271 bit = sel_host ? AB8500_BIT_PHY_CTRL_HOST_EN : 272 AB8500_BIT_PHY_CTRL_DEVICE_EN; 273 274 ab8500_usb_wd_linkstatus(ab, bit); 275 276 abx500_mask_and_set_register_interruptible(ab->dev, 277 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 278 bit, 0); 279 280 /* Needed to disable the phy.*/ 281 ab8500_usb_wd_workaround(ab); 282 283 clk_disable_unprepare(ab->sysclk); 284 285 ab8500_usb_regulator_disable(ab); 286 287 if (!IS_ERR(ab->pinctrl)) { 288 /* configure USB pins to SLEEP state */ 289 ab->pins_sleep = pinctrl_lookup_state(ab->pinctrl, 290 PINCTRL_STATE_SLEEP); 291 292 if (IS_ERR(ab->pins_sleep)) 293 dev_dbg(ab->dev, "could not get sleep pinstate\n"); 294 else if (pinctrl_select_state(ab->pinctrl, ab->pins_sleep)) 295 dev_err(ab->dev, "could not set pins to sleep state\n"); 296 297 /* 298 * as USB pins are shared with iddet, release them to allow 299 * iddet to request them 300 */ 301 pinctrl_put(ab->pinctrl); 302 } 303 } 304 305 #define ab8500_usb_host_phy_en(ab) ab8500_usb_phy_enable(ab, true) 306 #define ab8500_usb_host_phy_dis(ab) ab8500_usb_phy_disable(ab, true) 307 #define ab8500_usb_peri_phy_en(ab) ab8500_usb_phy_enable(ab, false) 308 #define ab8500_usb_peri_phy_dis(ab) ab8500_usb_phy_disable(ab, false) 309 310 static int ab8505_usb_link_status_update(struct ab8500_usb *ab, 311 enum ab8505_usb_link_status lsts) 312 { 313 enum ux500_musb_vbus_id_status event = 0; 314 315 dev_dbg(ab->dev, "ab8505_usb_link_status_update %d\n", lsts); 316 317 /* 318 * Spurious link_status interrupts are seen at the time of 319 * disconnection of a device in RIDA state 320 */ 321 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8505 && 322 (lsts == USB_LINK_STD_HOST_NC_8505)) 323 return 0; 324 325 ab->previous_link_status_state = lsts; 326 327 switch (lsts) { 328 case USB_LINK_ACA_RID_B_8505: 329 event = UX500_MUSB_RIDB; 330 case USB_LINK_NOT_CONFIGURED_8505: 331 case USB_LINK_RESERVED0_8505: 332 case USB_LINK_RESERVED1_8505: 333 case USB_LINK_RESERVED2_8505: 334 case USB_LINK_RESERVED3_8505: 335 ab->mode = USB_IDLE; 336 ab->phy.otg->default_a = false; 337 ab->vbus_draw = 0; 338 if (event != UX500_MUSB_RIDB) 339 event = UX500_MUSB_NONE; 340 /* 341 * Fallback to default B_IDLE as nothing 342 * is connected 343 */ 344 ab->phy.state = OTG_STATE_B_IDLE; 345 break; 346 347 case USB_LINK_ACA_RID_C_NM_8505: 348 event = UX500_MUSB_RIDC; 349 case USB_LINK_STD_HOST_NC_8505: 350 case USB_LINK_STD_HOST_C_NS_8505: 351 case USB_LINK_STD_HOST_C_S_8505: 352 case USB_LINK_CDP_8505: 353 if (ab->mode == USB_IDLE) { 354 ab->mode = USB_PERIPHERAL; 355 ab8500_usb_peri_phy_en(ab); 356 atomic_notifier_call_chain(&ab->phy.notifier, 357 UX500_MUSB_PREPARE, &ab->vbus_draw); 358 } 359 if (event != UX500_MUSB_RIDC) 360 event = UX500_MUSB_VBUS; 361 break; 362 363 case USB_LINK_ACA_RID_A_8505: 364 case USB_LINK_ACA_DOCK_CHGR_8505: 365 event = UX500_MUSB_RIDA; 366 case USB_LINK_HM_IDGND_8505: 367 if (ab->mode == USB_IDLE) { 368 ab->mode = USB_HOST; 369 ab8500_usb_host_phy_en(ab); 370 atomic_notifier_call_chain(&ab->phy.notifier, 371 UX500_MUSB_PREPARE, &ab->vbus_draw); 372 } 373 ab->phy.otg->default_a = true; 374 if (event != UX500_MUSB_RIDA) 375 event = UX500_MUSB_ID; 376 atomic_notifier_call_chain(&ab->phy.notifier, 377 event, &ab->vbus_draw); 378 break; 379 380 case USB_LINK_DEDICATED_CHG_8505: 381 ab->mode = USB_DEDICATED_CHG; 382 event = UX500_MUSB_CHARGER; 383 atomic_notifier_call_chain(&ab->phy.notifier, 384 event, &ab->vbus_draw); 385 break; 386 387 default: 388 break; 389 } 390 391 return 0; 392 } 393 394 static int ab8500_usb_link_status_update(struct ab8500_usb *ab, 395 enum ab8500_usb_link_status lsts) 396 { 397 enum ux500_musb_vbus_id_status event = 0; 398 399 dev_dbg(ab->dev, "ab8500_usb_link_status_update %d\n", lsts); 400 401 /* 402 * Spurious link_status interrupts are seen in case of a 403 * disconnection of a device in IDGND and RIDA stage 404 */ 405 if (ab->previous_link_status_state == USB_LINK_HM_IDGND_8500 && 406 (lsts == USB_LINK_STD_HOST_C_NS_8500 || 407 lsts == USB_LINK_STD_HOST_NC_8500)) 408 return 0; 409 410 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8500 && 411 lsts == USB_LINK_STD_HOST_NC_8500) 412 return 0; 413 414 ab->previous_link_status_state = lsts; 415 416 switch (lsts) { 417 case USB_LINK_ACA_RID_B_8500: 418 event = UX500_MUSB_RIDB; 419 case USB_LINK_NOT_CONFIGURED_8500: 420 case USB_LINK_NOT_VALID_LINK_8500: 421 ab->mode = USB_IDLE; 422 ab->phy.otg->default_a = false; 423 ab->vbus_draw = 0; 424 if (event != UX500_MUSB_RIDB) 425 event = UX500_MUSB_NONE; 426 /* Fallback to default B_IDLE as nothing is connected */ 427 ab->phy.state = OTG_STATE_B_IDLE; 428 break; 429 430 case USB_LINK_ACA_RID_C_NM_8500: 431 case USB_LINK_ACA_RID_C_HS_8500: 432 case USB_LINK_ACA_RID_C_HS_CHIRP_8500: 433 event = UX500_MUSB_RIDC; 434 case USB_LINK_STD_HOST_NC_8500: 435 case USB_LINK_STD_HOST_C_NS_8500: 436 case USB_LINK_STD_HOST_C_S_8500: 437 case USB_LINK_HOST_CHG_NM_8500: 438 case USB_LINK_HOST_CHG_HS_8500: 439 case USB_LINK_HOST_CHG_HS_CHIRP_8500: 440 if (ab->mode == USB_IDLE) { 441 ab->mode = USB_PERIPHERAL; 442 ab8500_usb_peri_phy_en(ab); 443 atomic_notifier_call_chain(&ab->phy.notifier, 444 UX500_MUSB_PREPARE, &ab->vbus_draw); 445 } 446 if (event != UX500_MUSB_RIDC) 447 event = UX500_MUSB_VBUS; 448 break; 449 450 case USB_LINK_ACA_RID_A_8500: 451 event = UX500_MUSB_RIDA; 452 case USB_LINK_HM_IDGND_8500: 453 if (ab->mode == USB_IDLE) { 454 ab->mode = USB_HOST; 455 ab8500_usb_host_phy_en(ab); 456 atomic_notifier_call_chain(&ab->phy.notifier, 457 UX500_MUSB_PREPARE, &ab->vbus_draw); 458 } 459 ab->phy.otg->default_a = true; 460 if (event != UX500_MUSB_RIDA) 461 event = UX500_MUSB_ID; 462 atomic_notifier_call_chain(&ab->phy.notifier, 463 event, &ab->vbus_draw); 464 break; 465 466 case USB_LINK_DEDICATED_CHG_8500: 467 ab->mode = USB_DEDICATED_CHG; 468 event = UX500_MUSB_CHARGER; 469 atomic_notifier_call_chain(&ab->phy.notifier, 470 event, &ab->vbus_draw); 471 break; 472 473 case USB_LINK_RESERVED_8500: 474 break; 475 } 476 477 return 0; 478 } 479 480 /* 481 * Connection Sequence: 482 * 1. Link Status Interrupt 483 * 2. Enable AB clock 484 * 3. Enable AB regulators 485 * 4. Enable USB phy 486 * 5. Reset the musb controller 487 * 6. Switch the ULPI GPIO pins to fucntion mode 488 * 7. Enable the musb Peripheral5 clock 489 * 8. Restore MUSB context 490 */ 491 static int abx500_usb_link_status_update(struct ab8500_usb *ab) 492 { 493 u8 reg; 494 int ret = 0; 495 496 if (is_ab8500(ab->ab8500)) { 497 enum ab8500_usb_link_status lsts; 498 499 abx500_get_register_interruptible(ab->dev, 500 AB8500_USB, AB8500_USB_LINE_STAT_REG, ®); 501 lsts = (reg >> 3) & 0x0F; 502 ret = ab8500_usb_link_status_update(ab, lsts); 503 } else if (is_ab8505(ab->ab8500)) { 504 enum ab8505_usb_link_status lsts; 505 506 abx500_get_register_interruptible(ab->dev, 507 AB8500_USB, AB8505_USB_LINE_STAT_REG, ®); 508 lsts = (reg >> 3) & 0x1F; 509 ret = ab8505_usb_link_status_update(ab, lsts); 510 } 511 512 return ret; 513 } 514 515 /* 516 * Disconnection Sequence: 517 * 1. Disconect Interrupt 518 * 2. Disable regulators 519 * 3. Disable AB clock 520 * 4. Disable the Phy 521 * 5. Link Status Interrupt 522 * 6. Disable Musb Clock 523 */ 524 static irqreturn_t ab8500_usb_disconnect_irq(int irq, void *data) 525 { 526 struct ab8500_usb *ab = (struct ab8500_usb *) data; 527 enum usb_phy_events event = UX500_MUSB_NONE; 528 529 /* Link status will not be updated till phy is disabled. */ 530 if (ab->mode == USB_HOST) { 531 ab->phy.otg->default_a = false; 532 ab->vbus_draw = 0; 533 atomic_notifier_call_chain(&ab->phy.notifier, 534 event, &ab->vbus_draw); 535 ab8500_usb_host_phy_dis(ab); 536 ab->mode = USB_IDLE; 537 } 538 539 if (ab->mode == USB_PERIPHERAL) { 540 atomic_notifier_call_chain(&ab->phy.notifier, 541 event, &ab->vbus_draw); 542 ab8500_usb_peri_phy_dis(ab); 543 atomic_notifier_call_chain(&ab->phy.notifier, 544 UX500_MUSB_CLEAN, &ab->vbus_draw); 545 ab->mode = USB_IDLE; 546 ab->phy.otg->default_a = false; 547 ab->vbus_draw = 0; 548 } 549 550 if (is_ab8500_2p0(ab->ab8500)) { 551 if (ab->mode == USB_DEDICATED_CHG) { 552 ab8500_usb_wd_linkstatus(ab, 553 AB8500_BIT_PHY_CTRL_DEVICE_EN); 554 abx500_mask_and_set_register_interruptible(ab->dev, 555 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 556 AB8500_BIT_PHY_CTRL_DEVICE_EN, 0); 557 } 558 } 559 560 return IRQ_HANDLED; 561 } 562 563 static irqreturn_t ab8500_usb_link_status_irq(int irq, void *data) 564 { 565 struct ab8500_usb *ab = (struct ab8500_usb *)data; 566 567 abx500_usb_link_status_update(ab); 568 569 return IRQ_HANDLED; 570 } 571 572 static void ab8500_usb_phy_disable_work(struct work_struct *work) 573 { 574 struct ab8500_usb *ab = container_of(work, struct ab8500_usb, 575 phy_dis_work); 576 577 if (!ab->phy.otg->host) 578 ab8500_usb_host_phy_dis(ab); 579 580 if (!ab->phy.otg->gadget) 581 ab8500_usb_peri_phy_dis(ab); 582 } 583 584 static unsigned ab8500_eyediagram_workaroud(struct ab8500_usb *ab, unsigned mA) 585 { 586 /* 587 * AB8500 V2 has eye diagram issues when drawing more than 100mA from 588 * VBUS. Set charging current to 100mA in case of standard host 589 */ 590 if (is_ab8500_2p0_or_earlier(ab->ab8500)) 591 if (mA > 100) 592 mA = 100; 593 594 return mA; 595 } 596 597 static int ab8500_usb_set_power(struct usb_phy *phy, unsigned mA) 598 { 599 struct ab8500_usb *ab; 600 601 if (!phy) 602 return -ENODEV; 603 604 ab = phy_to_ab(phy); 605 606 mA = ab8500_eyediagram_workaroud(ab, mA); 607 608 ab->vbus_draw = mA; 609 610 atomic_notifier_call_chain(&ab->phy.notifier, 611 UX500_MUSB_VBUS, &ab->vbus_draw); 612 613 return 0; 614 } 615 616 static int ab8500_usb_set_suspend(struct usb_phy *x, int suspend) 617 { 618 /* TODO */ 619 return 0; 620 } 621 622 static int ab8500_usb_set_peripheral(struct usb_otg *otg, 623 struct usb_gadget *gadget) 624 { 625 struct ab8500_usb *ab; 626 627 if (!otg) 628 return -ENODEV; 629 630 ab = phy_to_ab(otg->phy); 631 632 ab->phy.otg->gadget = gadget; 633 634 /* Some drivers call this function in atomic context. 635 * Do not update ab8500 registers directly till this 636 * is fixed. 637 */ 638 639 if ((ab->mode != USB_IDLE) && !gadget) { 640 ab->mode = USB_IDLE; 641 schedule_work(&ab->phy_dis_work); 642 } 643 644 return 0; 645 } 646 647 static int ab8500_usb_set_host(struct usb_otg *otg, struct usb_bus *host) 648 { 649 struct ab8500_usb *ab; 650 651 if (!otg) 652 return -ENODEV; 653 654 ab = phy_to_ab(otg->phy); 655 656 ab->phy.otg->host = host; 657 658 /* Some drivers call this function in atomic context. 659 * Do not update ab8500 registers directly till this 660 * is fixed. 661 */ 662 663 if ((ab->mode != USB_IDLE) && !host) { 664 ab->mode = USB_IDLE; 665 schedule_work(&ab->phy_dis_work); 666 } 667 668 return 0; 669 } 670 671 static int ab8500_usb_regulator_get(struct ab8500_usb *ab) 672 { 673 int err; 674 675 ab->v_ape = devm_regulator_get(ab->dev, "v-ape"); 676 if (IS_ERR(ab->v_ape)) { 677 dev_err(ab->dev, "Could not get v-ape supply\n"); 678 err = PTR_ERR(ab->v_ape); 679 return err; 680 } 681 682 ab->v_ulpi = devm_regulator_get(ab->dev, "vddulpivio18"); 683 if (IS_ERR(ab->v_ulpi)) { 684 dev_err(ab->dev, "Could not get vddulpivio18 supply\n"); 685 err = PTR_ERR(ab->v_ulpi); 686 return err; 687 } 688 689 ab->v_musb = devm_regulator_get(ab->dev, "musb_1v8"); 690 if (IS_ERR(ab->v_musb)) { 691 dev_err(ab->dev, "Could not get musb_1v8 supply\n"); 692 err = PTR_ERR(ab->v_musb); 693 return err; 694 } 695 696 return 0; 697 } 698 699 static int ab8500_usb_irq_setup(struct platform_device *pdev, 700 struct ab8500_usb *ab) 701 { 702 int err; 703 int irq; 704 705 irq = platform_get_irq_byname(pdev, "USB_LINK_STATUS"); 706 if (irq < 0) { 707 dev_err(&pdev->dev, "Link status irq not found\n"); 708 return irq; 709 } 710 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 711 ab8500_usb_link_status_irq, 712 IRQF_NO_SUSPEND | IRQF_SHARED, "usb-link-status", ab); 713 if (err < 0) { 714 dev_err(ab->dev, "request_irq failed for link status irq\n"); 715 return err; 716 } 717 718 irq = platform_get_irq_byname(pdev, "ID_WAKEUP_F"); 719 if (irq < 0) { 720 dev_err(&pdev->dev, "ID fall irq not found\n"); 721 return irq; 722 } 723 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 724 ab8500_usb_disconnect_irq, 725 IRQF_NO_SUSPEND | IRQF_SHARED, "usb-id-fall", ab); 726 if (err < 0) { 727 dev_err(ab->dev, "request_irq failed for ID fall irq\n"); 728 return err; 729 } 730 731 irq = platform_get_irq_byname(pdev, "VBUS_DET_F"); 732 if (irq < 0) { 733 dev_err(&pdev->dev, "VBUS fall irq not found\n"); 734 return irq; 735 } 736 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 737 ab8500_usb_disconnect_irq, 738 IRQF_NO_SUSPEND | IRQF_SHARED, "usb-vbus-fall", ab); 739 if (err < 0) { 740 dev_err(ab->dev, "request_irq failed for Vbus fall irq\n"); 741 return err; 742 } 743 744 return 0; 745 } 746 747 static int ab8500_usb_probe(struct platform_device *pdev) 748 { 749 struct ab8500_usb *ab; 750 struct ab8500 *ab8500; 751 struct usb_otg *otg; 752 int err; 753 int rev; 754 755 ab8500 = dev_get_drvdata(pdev->dev.parent); 756 rev = abx500_get_chip_id(&pdev->dev); 757 758 if (is_ab8500_1p1_or_earlier(ab8500)) { 759 dev_err(&pdev->dev, "Unsupported AB8500 chip rev=%d\n", rev); 760 return -ENODEV; 761 } 762 763 ab = devm_kzalloc(&pdev->dev, sizeof(*ab), GFP_KERNEL); 764 if (!ab) 765 return -ENOMEM; 766 767 otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL); 768 if (!otg) 769 return -ENOMEM; 770 771 ab->dev = &pdev->dev; 772 ab->ab8500 = ab8500; 773 ab->phy.dev = ab->dev; 774 ab->phy.otg = otg; 775 ab->phy.label = "ab8500"; 776 ab->phy.set_suspend = ab8500_usb_set_suspend; 777 ab->phy.set_power = ab8500_usb_set_power; 778 ab->phy.state = OTG_STATE_UNDEFINED; 779 780 otg->phy = &ab->phy; 781 otg->set_host = ab8500_usb_set_host; 782 otg->set_peripheral = ab8500_usb_set_peripheral; 783 784 platform_set_drvdata(pdev, ab); 785 786 ATOMIC_INIT_NOTIFIER_HEAD(&ab->phy.notifier); 787 788 /* all: Disable phy when called from set_host and set_peripheral */ 789 INIT_WORK(&ab->phy_dis_work, ab8500_usb_phy_disable_work); 790 791 err = ab8500_usb_regulator_get(ab); 792 if (err) 793 return err; 794 795 ab->sysclk = devm_clk_get(ab->dev, "sysclk"); 796 if (IS_ERR(ab->sysclk)) { 797 dev_err(ab->dev, "Could not get sysclk.\n"); 798 return PTR_ERR(ab->sysclk); 799 } 800 801 err = ab8500_usb_irq_setup(pdev, ab); 802 if (err < 0) 803 return err; 804 805 err = usb_add_phy(&ab->phy, USB_PHY_TYPE_USB2); 806 if (err) { 807 dev_err(&pdev->dev, "Can't register transceiver\n"); 808 return err; 809 } 810 811 /* Phy tuning values for AB8500 */ 812 if (!is_ab8500_2p0_or_earlier(ab->ab8500)) { 813 /* Enable the PBT/Bank 0x12 access */ 814 err = abx500_set_register_interruptible(ab->dev, 815 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 0x01); 816 if (err < 0) 817 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", 818 err); 819 820 err = abx500_set_register_interruptible(ab->dev, 821 AB8500_DEBUG, AB8500_USB_PHY_TUNE1, 0xC8); 822 if (err < 0) 823 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", 824 err); 825 826 err = abx500_set_register_interruptible(ab->dev, 827 AB8500_DEBUG, AB8500_USB_PHY_TUNE2, 0x00); 828 if (err < 0) 829 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", 830 err); 831 832 err = abx500_set_register_interruptible(ab->dev, 833 AB8500_DEBUG, AB8500_USB_PHY_TUNE3, 0x78); 834 if (err < 0) 835 dev_err(ab->dev, "Failed to set PHY_TUNE3 regester err=%d\n", 836 err); 837 838 /* Switch to normal mode/disable Bank 0x12 access */ 839 err = abx500_set_register_interruptible(ab->dev, 840 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 0x00); 841 if (err < 0) 842 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", 843 err); 844 } 845 846 /* Phy tuning values for AB8505 */ 847 if (is_ab8505(ab->ab8500)) { 848 /* Enable the PBT/Bank 0x12 access */ 849 err = abx500_mask_and_set_register_interruptible(ab->dev, 850 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 851 0x01, 0x01); 852 if (err < 0) 853 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", 854 err); 855 856 err = abx500_mask_and_set_register_interruptible(ab->dev, 857 AB8500_DEBUG, AB8500_USB_PHY_TUNE1, 858 0xC8, 0xC8); 859 if (err < 0) 860 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", 861 err); 862 863 err = abx500_mask_and_set_register_interruptible(ab->dev, 864 AB8500_DEBUG, AB8500_USB_PHY_TUNE2, 865 0x60, 0x60); 866 if (err < 0) 867 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", 868 err); 869 870 err = abx500_mask_and_set_register_interruptible(ab->dev, 871 AB8500_DEBUG, AB8500_USB_PHY_TUNE3, 872 0xFC, 0x80); 873 874 if (err < 0) 875 dev_err(ab->dev, "Failed to set PHY_TUNE3 regester err=%d\n", 876 err); 877 878 /* Switch to normal mode/disable Bank 0x12 access */ 879 err = abx500_mask_and_set_register_interruptible(ab->dev, 880 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 881 0x00, 0x00); 882 if (err < 0) 883 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", 884 err); 885 } 886 887 /* Needed to enable ID detection. */ 888 ab8500_usb_wd_workaround(ab); 889 890 abx500_usb_link_status_update(ab); 891 892 dev_info(&pdev->dev, "revision 0x%2x driver initialized\n", rev); 893 894 return 0; 895 } 896 897 static int ab8500_usb_remove(struct platform_device *pdev) 898 { 899 struct ab8500_usb *ab = platform_get_drvdata(pdev); 900 901 cancel_work_sync(&ab->phy_dis_work); 902 903 usb_remove_phy(&ab->phy); 904 905 if (ab->mode == USB_HOST) 906 ab8500_usb_host_phy_dis(ab); 907 else if (ab->mode == USB_PERIPHERAL) 908 ab8500_usb_peri_phy_dis(ab); 909 910 return 0; 911 } 912 913 static struct platform_driver ab8500_usb_driver = { 914 .probe = ab8500_usb_probe, 915 .remove = ab8500_usb_remove, 916 .driver = { 917 .name = "ab8500-usb", 918 .owner = THIS_MODULE, 919 }, 920 }; 921 922 static int __init ab8500_usb_init(void) 923 { 924 return platform_driver_register(&ab8500_usb_driver); 925 } 926 subsys_initcall(ab8500_usb_init); 927 928 static void __exit ab8500_usb_exit(void) 929 { 930 platform_driver_unregister(&ab8500_usb_driver); 931 } 932 module_exit(ab8500_usb_exit); 933 934 MODULE_ALIAS("platform:ab8500_usb"); 935 MODULE_AUTHOR("ST-Ericsson AB"); 936 MODULE_DESCRIPTION("AB8500 usb transceiver driver"); 937 MODULE_LICENSE("GPL"); 938