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