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 void ab8500_usb_restart_phy(struct ab8500_usb *ab) 672 { 673 abx500_mask_and_set_register_interruptible(ab->dev, 674 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 675 AB8500_BIT_PHY_CTRL_DEVICE_EN, 676 AB8500_BIT_PHY_CTRL_DEVICE_EN); 677 678 udelay(100); 679 680 abx500_mask_and_set_register_interruptible(ab->dev, 681 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 682 AB8500_BIT_PHY_CTRL_DEVICE_EN, 683 0); 684 685 abx500_mask_and_set_register_interruptible(ab->dev, 686 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 687 AB8500_BIT_PHY_CTRL_HOST_EN, 688 AB8500_BIT_PHY_CTRL_HOST_EN); 689 690 udelay(100); 691 692 abx500_mask_and_set_register_interruptible(ab->dev, 693 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 694 AB8500_BIT_PHY_CTRL_HOST_EN, 695 0); 696 } 697 698 static int ab8500_usb_regulator_get(struct ab8500_usb *ab) 699 { 700 int err; 701 702 ab->v_ape = devm_regulator_get(ab->dev, "v-ape"); 703 if (IS_ERR(ab->v_ape)) { 704 dev_err(ab->dev, "Could not get v-ape supply\n"); 705 err = PTR_ERR(ab->v_ape); 706 return err; 707 } 708 709 ab->v_ulpi = devm_regulator_get(ab->dev, "vddulpivio18"); 710 if (IS_ERR(ab->v_ulpi)) { 711 dev_err(ab->dev, "Could not get vddulpivio18 supply\n"); 712 err = PTR_ERR(ab->v_ulpi); 713 return err; 714 } 715 716 ab->v_musb = devm_regulator_get(ab->dev, "musb_1v8"); 717 if (IS_ERR(ab->v_musb)) { 718 dev_err(ab->dev, "Could not get musb_1v8 supply\n"); 719 err = PTR_ERR(ab->v_musb); 720 return err; 721 } 722 723 return 0; 724 } 725 726 static int ab8500_usb_irq_setup(struct platform_device *pdev, 727 struct ab8500_usb *ab) 728 { 729 int err; 730 int irq; 731 732 irq = platform_get_irq_byname(pdev, "USB_LINK_STATUS"); 733 if (irq < 0) { 734 dev_err(&pdev->dev, "Link status irq not found\n"); 735 return irq; 736 } 737 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 738 ab8500_usb_link_status_irq, 739 IRQF_NO_SUSPEND | IRQF_SHARED, "usb-link-status", ab); 740 if (err < 0) { 741 dev_err(ab->dev, "request_irq failed for link status irq\n"); 742 return err; 743 } 744 745 irq = platform_get_irq_byname(pdev, "ID_WAKEUP_F"); 746 if (irq < 0) { 747 dev_err(&pdev->dev, "ID fall irq not found\n"); 748 return irq; 749 } 750 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 751 ab8500_usb_disconnect_irq, 752 IRQF_NO_SUSPEND | IRQF_SHARED, "usb-id-fall", ab); 753 if (err < 0) { 754 dev_err(ab->dev, "request_irq failed for ID fall irq\n"); 755 return err; 756 } 757 758 irq = platform_get_irq_byname(pdev, "VBUS_DET_F"); 759 if (irq < 0) { 760 dev_err(&pdev->dev, "VBUS fall irq not found\n"); 761 return irq; 762 } 763 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 764 ab8500_usb_disconnect_irq, 765 IRQF_NO_SUSPEND | IRQF_SHARED, "usb-vbus-fall", ab); 766 if (err < 0) { 767 dev_err(ab->dev, "request_irq failed for Vbus fall irq\n"); 768 return err; 769 } 770 771 return 0; 772 } 773 774 static int ab8500_usb_probe(struct platform_device *pdev) 775 { 776 struct ab8500_usb *ab; 777 struct ab8500 *ab8500; 778 struct usb_otg *otg; 779 int err; 780 int rev; 781 782 ab8500 = dev_get_drvdata(pdev->dev.parent); 783 rev = abx500_get_chip_id(&pdev->dev); 784 785 if (is_ab8500_1p1_or_earlier(ab8500)) { 786 dev_err(&pdev->dev, "Unsupported AB8500 chip rev=%d\n", rev); 787 return -ENODEV; 788 } 789 790 ab = devm_kzalloc(&pdev->dev, sizeof(*ab), GFP_KERNEL); 791 if (!ab) 792 return -ENOMEM; 793 794 otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL); 795 if (!otg) 796 return -ENOMEM; 797 798 ab->dev = &pdev->dev; 799 ab->ab8500 = ab8500; 800 ab->phy.dev = ab->dev; 801 ab->phy.otg = otg; 802 ab->phy.label = "ab8500"; 803 ab->phy.set_suspend = ab8500_usb_set_suspend; 804 ab->phy.set_power = ab8500_usb_set_power; 805 ab->phy.state = OTG_STATE_UNDEFINED; 806 807 otg->phy = &ab->phy; 808 otg->set_host = ab8500_usb_set_host; 809 otg->set_peripheral = ab8500_usb_set_peripheral; 810 811 platform_set_drvdata(pdev, ab); 812 813 ATOMIC_INIT_NOTIFIER_HEAD(&ab->phy.notifier); 814 815 /* all: Disable phy when called from set_host and set_peripheral */ 816 INIT_WORK(&ab->phy_dis_work, ab8500_usb_phy_disable_work); 817 818 err = ab8500_usb_regulator_get(ab); 819 if (err) 820 return err; 821 822 ab->sysclk = devm_clk_get(ab->dev, "sysclk"); 823 if (IS_ERR(ab->sysclk)) { 824 dev_err(ab->dev, "Could not get sysclk.\n"); 825 return PTR_ERR(ab->sysclk); 826 } 827 828 err = ab8500_usb_irq_setup(pdev, ab); 829 if (err < 0) 830 return err; 831 832 err = usb_add_phy(&ab->phy, USB_PHY_TYPE_USB2); 833 if (err) { 834 dev_err(&pdev->dev, "Can't register transceiver\n"); 835 return err; 836 } 837 838 /* Phy tuning values for AB8500 */ 839 if (!is_ab8500_2p0_or_earlier(ab->ab8500)) { 840 /* Enable the PBT/Bank 0x12 access */ 841 err = abx500_set_register_interruptible(ab->dev, 842 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 0x01); 843 if (err < 0) 844 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", 845 err); 846 847 err = abx500_set_register_interruptible(ab->dev, 848 AB8500_DEBUG, AB8500_USB_PHY_TUNE1, 0xC8); 849 if (err < 0) 850 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", 851 err); 852 853 err = abx500_set_register_interruptible(ab->dev, 854 AB8500_DEBUG, AB8500_USB_PHY_TUNE2, 0x00); 855 if (err < 0) 856 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", 857 err); 858 859 err = abx500_set_register_interruptible(ab->dev, 860 AB8500_DEBUG, AB8500_USB_PHY_TUNE3, 0x78); 861 if (err < 0) 862 dev_err(ab->dev, "Failed to set PHY_TUNE3 regester err=%d\n", 863 err); 864 865 /* Switch to normal mode/disable Bank 0x12 access */ 866 err = abx500_set_register_interruptible(ab->dev, 867 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 0x00); 868 if (err < 0) 869 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", 870 err); 871 } 872 873 /* Phy tuning values for AB8505 */ 874 if (is_ab8505(ab->ab8500)) { 875 /* Enable the PBT/Bank 0x12 access */ 876 err = abx500_mask_and_set_register_interruptible(ab->dev, 877 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 878 0x01, 0x01); 879 if (err < 0) 880 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", 881 err); 882 883 err = abx500_mask_and_set_register_interruptible(ab->dev, 884 AB8500_DEBUG, AB8500_USB_PHY_TUNE1, 885 0xC8, 0xC8); 886 if (err < 0) 887 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", 888 err); 889 890 err = abx500_mask_and_set_register_interruptible(ab->dev, 891 AB8500_DEBUG, AB8500_USB_PHY_TUNE2, 892 0x60, 0x60); 893 if (err < 0) 894 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", 895 err); 896 897 err = abx500_mask_and_set_register_interruptible(ab->dev, 898 AB8500_DEBUG, AB8500_USB_PHY_TUNE3, 899 0xFC, 0x80); 900 901 if (err < 0) 902 dev_err(ab->dev, "Failed to set PHY_TUNE3 regester err=%d\n", 903 err); 904 905 /* Switch to normal mode/disable Bank 0x12 access */ 906 err = abx500_mask_and_set_register_interruptible(ab->dev, 907 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 908 0x00, 0x00); 909 if (err < 0) 910 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", 911 err); 912 } 913 914 /* Needed to enable ID detection. */ 915 ab8500_usb_wd_workaround(ab); 916 917 /* 918 * This is required for usb-link-status to work properly when a 919 * cable is connected at boot time. 920 */ 921 ab8500_usb_restart_phy(ab); 922 923 abx500_usb_link_status_update(ab); 924 925 dev_info(&pdev->dev, "revision 0x%2x driver initialized\n", rev); 926 927 return 0; 928 } 929 930 static int ab8500_usb_remove(struct platform_device *pdev) 931 { 932 struct ab8500_usb *ab = platform_get_drvdata(pdev); 933 934 cancel_work_sync(&ab->phy_dis_work); 935 936 usb_remove_phy(&ab->phy); 937 938 if (ab->mode == USB_HOST) 939 ab8500_usb_host_phy_dis(ab); 940 else if (ab->mode == USB_PERIPHERAL) 941 ab8500_usb_peri_phy_dis(ab); 942 943 return 0; 944 } 945 946 static struct platform_driver ab8500_usb_driver = { 947 .probe = ab8500_usb_probe, 948 .remove = ab8500_usb_remove, 949 .driver = { 950 .name = "ab8500-usb", 951 .owner = THIS_MODULE, 952 }, 953 }; 954 955 static int __init ab8500_usb_init(void) 956 { 957 return platform_driver_register(&ab8500_usb_driver); 958 } 959 subsys_initcall(ab8500_usb_init); 960 961 static void __exit ab8500_usb_exit(void) 962 { 963 platform_driver_unregister(&ab8500_usb_driver); 964 } 965 module_exit(ab8500_usb_exit); 966 967 MODULE_ALIAS("platform:ab8500_usb"); 968 MODULE_AUTHOR("ST-Ericsson AB"); 969 MODULE_DESCRIPTION("AB8500 usb transceiver driver"); 970 MODULE_LICENSE("GPL"); 971