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 case USB_LINK_NOT_CONFIGURED_8505: 334 case USB_LINK_RESERVED0_8505: 335 case USB_LINK_RESERVED1_8505: 336 case USB_LINK_RESERVED2_8505: 337 case USB_LINK_RESERVED3_8505: 338 ab->mode = USB_IDLE; 339 ab->phy.otg->default_a = false; 340 ab->vbus_draw = 0; 341 if (event != UX500_MUSB_RIDB) 342 event = UX500_MUSB_NONE; 343 /* 344 * Fallback to default B_IDLE as nothing 345 * is connected 346 */ 347 ab->phy.otg->state = OTG_STATE_B_IDLE; 348 usb_phy_set_event(&ab->phy, USB_EVENT_NONE); 349 break; 350 351 case USB_LINK_ACA_RID_C_NM_8505: 352 event = UX500_MUSB_RIDC; 353 case USB_LINK_STD_HOST_NC_8505: 354 case USB_LINK_STD_HOST_C_NS_8505: 355 case USB_LINK_STD_HOST_C_S_8505: 356 case USB_LINK_CDP_8505: 357 if (ab->mode == USB_IDLE) { 358 ab->mode = USB_PERIPHERAL; 359 ab8500_usb_peri_phy_en(ab); 360 atomic_notifier_call_chain(&ab->phy.notifier, 361 UX500_MUSB_PREPARE, &ab->vbus_draw); 362 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED); 363 } 364 if (event != UX500_MUSB_RIDC) 365 event = UX500_MUSB_VBUS; 366 break; 367 368 case USB_LINK_ACA_RID_A_8505: 369 case USB_LINK_ACA_DOCK_CHGR_8505: 370 event = UX500_MUSB_RIDA; 371 case USB_LINK_HM_IDGND_8505: 372 if (ab->mode == USB_IDLE) { 373 ab->mode = USB_HOST; 374 ab8500_usb_host_phy_en(ab); 375 atomic_notifier_call_chain(&ab->phy.notifier, 376 UX500_MUSB_PREPARE, &ab->vbus_draw); 377 } 378 ab->phy.otg->default_a = true; 379 if (event != UX500_MUSB_RIDA) 380 event = UX500_MUSB_ID; 381 atomic_notifier_call_chain(&ab->phy.notifier, 382 event, &ab->vbus_draw); 383 break; 384 385 case USB_LINK_DEDICATED_CHG_8505: 386 ab->mode = USB_DEDICATED_CHG; 387 event = UX500_MUSB_CHARGER; 388 atomic_notifier_call_chain(&ab->phy.notifier, 389 event, &ab->vbus_draw); 390 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER); 391 break; 392 393 default: 394 break; 395 } 396 397 return 0; 398 } 399 400 static int ab8500_usb_link_status_update(struct ab8500_usb *ab, 401 enum ab8500_usb_link_status lsts) 402 { 403 enum ux500_musb_vbus_id_status event = 0; 404 405 dev_dbg(ab->dev, "ab8500_usb_link_status_update %d\n", lsts); 406 407 /* 408 * Spurious link_status interrupts are seen in case of a 409 * disconnection of a device in IDGND and RIDA stage 410 */ 411 if (ab->previous_link_status_state == USB_LINK_HM_IDGND_8500 && 412 (lsts == USB_LINK_STD_HOST_C_NS_8500 || 413 lsts == USB_LINK_STD_HOST_NC_8500)) 414 return 0; 415 416 if (ab->previous_link_status_state == USB_LINK_ACA_RID_A_8500 && 417 lsts == USB_LINK_STD_HOST_NC_8500) 418 return 0; 419 420 ab->previous_link_status_state = lsts; 421 422 switch (lsts) { 423 case USB_LINK_ACA_RID_B_8500: 424 event = UX500_MUSB_RIDB; 425 case USB_LINK_NOT_CONFIGURED_8500: 426 case USB_LINK_NOT_VALID_LINK_8500: 427 ab->mode = USB_IDLE; 428 ab->phy.otg->default_a = false; 429 ab->vbus_draw = 0; 430 if (event != UX500_MUSB_RIDB) 431 event = UX500_MUSB_NONE; 432 /* Fallback to default B_IDLE as nothing is connected */ 433 ab->phy.otg->state = OTG_STATE_B_IDLE; 434 usb_phy_set_event(&ab->phy, USB_EVENT_NONE); 435 break; 436 437 case USB_LINK_ACA_RID_C_NM_8500: 438 case USB_LINK_ACA_RID_C_HS_8500: 439 case USB_LINK_ACA_RID_C_HS_CHIRP_8500: 440 event = UX500_MUSB_RIDC; 441 case USB_LINK_STD_HOST_NC_8500: 442 case USB_LINK_STD_HOST_C_NS_8500: 443 case USB_LINK_STD_HOST_C_S_8500: 444 case USB_LINK_HOST_CHG_NM_8500: 445 case USB_LINK_HOST_CHG_HS_8500: 446 case USB_LINK_HOST_CHG_HS_CHIRP_8500: 447 if (ab->mode == USB_IDLE) { 448 ab->mode = USB_PERIPHERAL; 449 ab8500_usb_peri_phy_en(ab); 450 atomic_notifier_call_chain(&ab->phy.notifier, 451 UX500_MUSB_PREPARE, &ab->vbus_draw); 452 usb_phy_set_event(&ab->phy, USB_EVENT_ENUMERATED); 453 } 454 if (event != UX500_MUSB_RIDC) 455 event = UX500_MUSB_VBUS; 456 break; 457 458 case USB_LINK_ACA_RID_A_8500: 459 event = UX500_MUSB_RIDA; 460 case USB_LINK_HM_IDGND_8500: 461 if (ab->mode == USB_IDLE) { 462 ab->mode = USB_HOST; 463 ab8500_usb_host_phy_en(ab); 464 atomic_notifier_call_chain(&ab->phy.notifier, 465 UX500_MUSB_PREPARE, &ab->vbus_draw); 466 } 467 ab->phy.otg->default_a = true; 468 if (event != UX500_MUSB_RIDA) 469 event = UX500_MUSB_ID; 470 atomic_notifier_call_chain(&ab->phy.notifier, 471 event, &ab->vbus_draw); 472 break; 473 474 case USB_LINK_DEDICATED_CHG_8500: 475 ab->mode = USB_DEDICATED_CHG; 476 event = UX500_MUSB_CHARGER; 477 atomic_notifier_call_chain(&ab->phy.notifier, 478 event, &ab->vbus_draw); 479 usb_phy_set_event(&ab->phy, USB_EVENT_CHARGER); 480 break; 481 482 case USB_LINK_RESERVED_8500: 483 break; 484 } 485 486 return 0; 487 } 488 489 /* 490 * Connection Sequence: 491 * 1. Link Status Interrupt 492 * 2. Enable AB clock 493 * 3. Enable AB regulators 494 * 4. Enable USB phy 495 * 5. Reset the musb controller 496 * 6. Switch the ULPI GPIO pins to fucntion mode 497 * 7. Enable the musb Peripheral5 clock 498 * 8. Restore MUSB context 499 */ 500 static int abx500_usb_link_status_update(struct ab8500_usb *ab) 501 { 502 u8 reg; 503 int ret = 0; 504 505 if (is_ab8500(ab->ab8500)) { 506 enum ab8500_usb_link_status lsts; 507 508 ret = abx500_get_register_interruptible(ab->dev, 509 AB8500_USB, AB8500_USB_LINE_STAT_REG, ®); 510 if (ret < 0) 511 return ret; 512 lsts = (reg >> 3) & 0x0F; 513 ret = ab8500_usb_link_status_update(ab, lsts); 514 } else if (is_ab8505(ab->ab8500)) { 515 enum ab8505_usb_link_status lsts; 516 517 ret = abx500_get_register_interruptible(ab->dev, 518 AB8500_USB, AB8505_USB_LINE_STAT_REG, ®); 519 if (ret < 0) 520 return ret; 521 lsts = (reg >> 3) & 0x1F; 522 ret = ab8505_usb_link_status_update(ab, lsts); 523 } 524 525 return ret; 526 } 527 528 /* 529 * Disconnection Sequence: 530 * 1. Disconnect Interrupt 531 * 2. Disable regulators 532 * 3. Disable AB clock 533 * 4. Disable the Phy 534 * 5. Link Status Interrupt 535 * 6. Disable Musb Clock 536 */ 537 static irqreturn_t ab8500_usb_disconnect_irq(int irq, void *data) 538 { 539 struct ab8500_usb *ab = (struct ab8500_usb *) data; 540 enum usb_phy_events event = USB_EVENT_NONE; 541 542 /* Link status will not be updated till phy is disabled. */ 543 if (ab->mode == USB_HOST) { 544 ab->phy.otg->default_a = false; 545 ab->vbus_draw = 0; 546 atomic_notifier_call_chain(&ab->phy.notifier, 547 event, &ab->vbus_draw); 548 ab8500_usb_host_phy_dis(ab); 549 ab->mode = USB_IDLE; 550 } 551 552 if (ab->mode == USB_PERIPHERAL) { 553 atomic_notifier_call_chain(&ab->phy.notifier, 554 event, &ab->vbus_draw); 555 ab8500_usb_peri_phy_dis(ab); 556 atomic_notifier_call_chain(&ab->phy.notifier, 557 UX500_MUSB_CLEAN, &ab->vbus_draw); 558 ab->mode = USB_IDLE; 559 ab->phy.otg->default_a = false; 560 ab->vbus_draw = 0; 561 } 562 563 if (is_ab8500_2p0(ab->ab8500)) { 564 if (ab->mode == USB_DEDICATED_CHG) { 565 ab8500_usb_wd_linkstatus(ab, 566 AB8500_BIT_PHY_CTRL_DEVICE_EN); 567 abx500_mask_and_set_register_interruptible(ab->dev, 568 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 569 AB8500_BIT_PHY_CTRL_DEVICE_EN, 0); 570 } 571 } 572 573 return IRQ_HANDLED; 574 } 575 576 static irqreturn_t ab8500_usb_link_status_irq(int irq, void *data) 577 { 578 struct ab8500_usb *ab = (struct ab8500_usb *)data; 579 580 abx500_usb_link_status_update(ab); 581 582 return IRQ_HANDLED; 583 } 584 585 static void ab8500_usb_phy_disable_work(struct work_struct *work) 586 { 587 struct ab8500_usb *ab = container_of(work, struct ab8500_usb, 588 phy_dis_work); 589 590 if (!ab->phy.otg->host) 591 ab8500_usb_host_phy_dis(ab); 592 593 if (!ab->phy.otg->gadget) 594 ab8500_usb_peri_phy_dis(ab); 595 } 596 597 static int ab8500_usb_set_suspend(struct usb_phy *x, int suspend) 598 { 599 /* TODO */ 600 return 0; 601 } 602 603 static int ab8500_usb_set_peripheral(struct usb_otg *otg, 604 struct usb_gadget *gadget) 605 { 606 struct ab8500_usb *ab; 607 608 if (!otg) 609 return -ENODEV; 610 611 ab = phy_to_ab(otg->usb_phy); 612 613 ab->phy.otg->gadget = gadget; 614 615 /* Some drivers call this function in atomic context. 616 * Do not update ab8500 registers directly till this 617 * is fixed. 618 */ 619 620 if ((ab->mode != USB_IDLE) && !gadget) { 621 ab->mode = USB_IDLE; 622 schedule_work(&ab->phy_dis_work); 623 } 624 625 return 0; 626 } 627 628 static int ab8500_usb_set_host(struct usb_otg *otg, struct usb_bus *host) 629 { 630 struct ab8500_usb *ab; 631 632 if (!otg) 633 return -ENODEV; 634 635 ab = phy_to_ab(otg->usb_phy); 636 637 ab->phy.otg->host = host; 638 639 /* Some drivers call this function in atomic context. 640 * Do not update ab8500 registers directly till this 641 * is fixed. 642 */ 643 644 if ((ab->mode != USB_IDLE) && !host) { 645 ab->mode = USB_IDLE; 646 schedule_work(&ab->phy_dis_work); 647 } 648 649 return 0; 650 } 651 652 static void ab8500_usb_restart_phy(struct ab8500_usb *ab) 653 { 654 abx500_mask_and_set_register_interruptible(ab->dev, 655 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 656 AB8500_BIT_PHY_CTRL_DEVICE_EN, 657 AB8500_BIT_PHY_CTRL_DEVICE_EN); 658 659 udelay(100); 660 661 abx500_mask_and_set_register_interruptible(ab->dev, 662 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 663 AB8500_BIT_PHY_CTRL_DEVICE_EN, 664 0); 665 666 abx500_mask_and_set_register_interruptible(ab->dev, 667 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 668 AB8500_BIT_PHY_CTRL_HOST_EN, 669 AB8500_BIT_PHY_CTRL_HOST_EN); 670 671 udelay(100); 672 673 abx500_mask_and_set_register_interruptible(ab->dev, 674 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 675 AB8500_BIT_PHY_CTRL_HOST_EN, 676 0); 677 } 678 679 static int ab8500_usb_regulator_get(struct ab8500_usb *ab) 680 { 681 int err; 682 683 ab->v_ape = devm_regulator_get(ab->dev, "v-ape"); 684 if (IS_ERR(ab->v_ape)) { 685 dev_err(ab->dev, "Could not get v-ape supply\n"); 686 err = PTR_ERR(ab->v_ape); 687 return err; 688 } 689 690 ab->v_ulpi = devm_regulator_get(ab->dev, "vddulpivio18"); 691 if (IS_ERR(ab->v_ulpi)) { 692 dev_err(ab->dev, "Could not get vddulpivio18 supply\n"); 693 err = PTR_ERR(ab->v_ulpi); 694 return err; 695 } 696 697 ab->v_musb = devm_regulator_get(ab->dev, "musb_1v8"); 698 if (IS_ERR(ab->v_musb)) { 699 dev_err(ab->dev, "Could not get musb_1v8 supply\n"); 700 err = PTR_ERR(ab->v_musb); 701 return err; 702 } 703 704 return 0; 705 } 706 707 static int ab8500_usb_irq_setup(struct platform_device *pdev, 708 struct ab8500_usb *ab) 709 { 710 int err; 711 int irq; 712 713 if (ab->flags & AB8500_USB_FLAG_USE_LINK_STATUS_IRQ) { 714 irq = platform_get_irq_byname(pdev, "USB_LINK_STATUS"); 715 if (irq < 0) { 716 dev_err(&pdev->dev, "Link status irq not found\n"); 717 return irq; 718 } 719 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 720 ab8500_usb_link_status_irq, 721 IRQF_NO_SUSPEND | IRQF_SHARED | IRQF_ONESHOT, 722 "usb-link-status", ab); 723 if (err < 0) { 724 dev_err(ab->dev, "request_irq failed for link status irq\n"); 725 return err; 726 } 727 } 728 729 if (ab->flags & AB8500_USB_FLAG_USE_ID_WAKEUP_IRQ) { 730 irq = platform_get_irq_byname(pdev, "ID_WAKEUP_F"); 731 if (irq < 0) { 732 dev_err(&pdev->dev, "ID fall irq not found\n"); 733 return irq; 734 } 735 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 736 ab8500_usb_disconnect_irq, 737 IRQF_NO_SUSPEND | IRQF_SHARED | IRQF_ONESHOT, 738 "usb-id-fall", ab); 739 if (err < 0) { 740 dev_err(ab->dev, "request_irq failed for ID fall irq\n"); 741 return err; 742 } 743 } 744 745 if (ab->flags & AB8500_USB_FLAG_USE_VBUS_DET_IRQ) { 746 irq = platform_get_irq_byname(pdev, "VBUS_DET_F"); 747 if (irq < 0) { 748 dev_err(&pdev->dev, "VBUS fall irq not found\n"); 749 return irq; 750 } 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