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 abx500_get_register_interruptible(ab->dev, 509 AB8500_USB, AB8500_USB_LINE_STAT_REG, ®); 510 lsts = (reg >> 3) & 0x0F; 511 ret = ab8500_usb_link_status_update(ab, lsts); 512 } else if (is_ab8505(ab->ab8500)) { 513 enum ab8505_usb_link_status lsts; 514 515 abx500_get_register_interruptible(ab->dev, 516 AB8500_USB, AB8505_USB_LINE_STAT_REG, ®); 517 lsts = (reg >> 3) & 0x1F; 518 ret = ab8505_usb_link_status_update(ab, lsts); 519 } 520 521 return ret; 522 } 523 524 /* 525 * Disconnection Sequence: 526 * 1. Disconnect Interrupt 527 * 2. Disable regulators 528 * 3. Disable AB clock 529 * 4. Disable the Phy 530 * 5. Link Status Interrupt 531 * 6. Disable Musb Clock 532 */ 533 static irqreturn_t ab8500_usb_disconnect_irq(int irq, void *data) 534 { 535 struct ab8500_usb *ab = (struct ab8500_usb *) data; 536 enum usb_phy_events event = USB_EVENT_NONE; 537 538 /* Link status will not be updated till phy is disabled. */ 539 if (ab->mode == USB_HOST) { 540 ab->phy.otg->default_a = false; 541 ab->vbus_draw = 0; 542 atomic_notifier_call_chain(&ab->phy.notifier, 543 event, &ab->vbus_draw); 544 ab8500_usb_host_phy_dis(ab); 545 ab->mode = USB_IDLE; 546 } 547 548 if (ab->mode == USB_PERIPHERAL) { 549 atomic_notifier_call_chain(&ab->phy.notifier, 550 event, &ab->vbus_draw); 551 ab8500_usb_peri_phy_dis(ab); 552 atomic_notifier_call_chain(&ab->phy.notifier, 553 UX500_MUSB_CLEAN, &ab->vbus_draw); 554 ab->mode = USB_IDLE; 555 ab->phy.otg->default_a = false; 556 ab->vbus_draw = 0; 557 } 558 559 if (is_ab8500_2p0(ab->ab8500)) { 560 if (ab->mode == USB_DEDICATED_CHG) { 561 ab8500_usb_wd_linkstatus(ab, 562 AB8500_BIT_PHY_CTRL_DEVICE_EN); 563 abx500_mask_and_set_register_interruptible(ab->dev, 564 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 565 AB8500_BIT_PHY_CTRL_DEVICE_EN, 0); 566 } 567 } 568 569 return IRQ_HANDLED; 570 } 571 572 static irqreturn_t ab8500_usb_link_status_irq(int irq, void *data) 573 { 574 struct ab8500_usb *ab = (struct ab8500_usb *)data; 575 576 abx500_usb_link_status_update(ab); 577 578 return IRQ_HANDLED; 579 } 580 581 static void ab8500_usb_phy_disable_work(struct work_struct *work) 582 { 583 struct ab8500_usb *ab = container_of(work, struct ab8500_usb, 584 phy_dis_work); 585 586 if (!ab->phy.otg->host) 587 ab8500_usb_host_phy_dis(ab); 588 589 if (!ab->phy.otg->gadget) 590 ab8500_usb_peri_phy_dis(ab); 591 } 592 593 static int ab8500_usb_set_suspend(struct usb_phy *x, int suspend) 594 { 595 /* TODO */ 596 return 0; 597 } 598 599 static int ab8500_usb_set_peripheral(struct usb_otg *otg, 600 struct usb_gadget *gadget) 601 { 602 struct ab8500_usb *ab; 603 604 if (!otg) 605 return -ENODEV; 606 607 ab = phy_to_ab(otg->usb_phy); 608 609 ab->phy.otg->gadget = gadget; 610 611 /* Some drivers call this function in atomic context. 612 * Do not update ab8500 registers directly till this 613 * is fixed. 614 */ 615 616 if ((ab->mode != USB_IDLE) && !gadget) { 617 ab->mode = USB_IDLE; 618 schedule_work(&ab->phy_dis_work); 619 } 620 621 return 0; 622 } 623 624 static int ab8500_usb_set_host(struct usb_otg *otg, struct usb_bus *host) 625 { 626 struct ab8500_usb *ab; 627 628 if (!otg) 629 return -ENODEV; 630 631 ab = phy_to_ab(otg->usb_phy); 632 633 ab->phy.otg->host = host; 634 635 /* Some drivers call this function in atomic context. 636 * Do not update ab8500 registers directly till this 637 * is fixed. 638 */ 639 640 if ((ab->mode != USB_IDLE) && !host) { 641 ab->mode = USB_IDLE; 642 schedule_work(&ab->phy_dis_work); 643 } 644 645 return 0; 646 } 647 648 static void ab8500_usb_restart_phy(struct ab8500_usb *ab) 649 { 650 abx500_mask_and_set_register_interruptible(ab->dev, 651 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 652 AB8500_BIT_PHY_CTRL_DEVICE_EN, 653 AB8500_BIT_PHY_CTRL_DEVICE_EN); 654 655 udelay(100); 656 657 abx500_mask_and_set_register_interruptible(ab->dev, 658 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 659 AB8500_BIT_PHY_CTRL_DEVICE_EN, 660 0); 661 662 abx500_mask_and_set_register_interruptible(ab->dev, 663 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 664 AB8500_BIT_PHY_CTRL_HOST_EN, 665 AB8500_BIT_PHY_CTRL_HOST_EN); 666 667 udelay(100); 668 669 abx500_mask_and_set_register_interruptible(ab->dev, 670 AB8500_USB, AB8500_USB_PHY_CTRL_REG, 671 AB8500_BIT_PHY_CTRL_HOST_EN, 672 0); 673 } 674 675 static int ab8500_usb_regulator_get(struct ab8500_usb *ab) 676 { 677 int err; 678 679 ab->v_ape = devm_regulator_get(ab->dev, "v-ape"); 680 if (IS_ERR(ab->v_ape)) { 681 dev_err(ab->dev, "Could not get v-ape supply\n"); 682 err = PTR_ERR(ab->v_ape); 683 return err; 684 } 685 686 ab->v_ulpi = devm_regulator_get(ab->dev, "vddulpivio18"); 687 if (IS_ERR(ab->v_ulpi)) { 688 dev_err(ab->dev, "Could not get vddulpivio18 supply\n"); 689 err = PTR_ERR(ab->v_ulpi); 690 return err; 691 } 692 693 ab->v_musb = devm_regulator_get(ab->dev, "musb_1v8"); 694 if (IS_ERR(ab->v_musb)) { 695 dev_err(ab->dev, "Could not get musb_1v8 supply\n"); 696 err = PTR_ERR(ab->v_musb); 697 return err; 698 } 699 700 return 0; 701 } 702 703 static int ab8500_usb_irq_setup(struct platform_device *pdev, 704 struct ab8500_usb *ab) 705 { 706 int err; 707 int irq; 708 709 if (ab->flags & AB8500_USB_FLAG_USE_LINK_STATUS_IRQ) { 710 irq = platform_get_irq_byname(pdev, "USB_LINK_STATUS"); 711 if (irq < 0) { 712 dev_err(&pdev->dev, "Link status irq not found\n"); 713 return irq; 714 } 715 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 716 ab8500_usb_link_status_irq, 717 IRQF_NO_SUSPEND | IRQF_SHARED | IRQF_ONESHOT, 718 "usb-link-status", ab); 719 if (err < 0) { 720 dev_err(ab->dev, "request_irq failed for link status irq\n"); 721 return err; 722 } 723 } 724 725 if (ab->flags & AB8500_USB_FLAG_USE_ID_WAKEUP_IRQ) { 726 irq = platform_get_irq_byname(pdev, "ID_WAKEUP_F"); 727 if (irq < 0) { 728 dev_err(&pdev->dev, "ID fall irq not found\n"); 729 return irq; 730 } 731 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 732 ab8500_usb_disconnect_irq, 733 IRQF_NO_SUSPEND | IRQF_SHARED | IRQF_ONESHOT, 734 "usb-id-fall", ab); 735 if (err < 0) { 736 dev_err(ab->dev, "request_irq failed for ID fall irq\n"); 737 return err; 738 } 739 } 740 741 if (ab->flags & AB8500_USB_FLAG_USE_VBUS_DET_IRQ) { 742 irq = platform_get_irq_byname(pdev, "VBUS_DET_F"); 743 if (irq < 0) { 744 dev_err(&pdev->dev, "VBUS fall irq not found\n"); 745 return irq; 746 } 747 err = devm_request_threaded_irq(&pdev->dev, irq, NULL, 748 ab8500_usb_disconnect_irq, 749 IRQF_NO_SUSPEND | IRQF_SHARED | IRQF_ONESHOT, 750 "usb-vbus-fall", ab); 751 if (err < 0) { 752 dev_err(ab->dev, "request_irq failed for Vbus fall irq\n"); 753 return err; 754 } 755 } 756 757 return 0; 758 } 759 760 static void ab8500_usb_set_ab8500_tuning_values(struct ab8500_usb *ab) 761 { 762 int err; 763 764 /* Enable the PBT/Bank 0x12 access */ 765 err = abx500_set_register_interruptible(ab->dev, 766 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 0x01); 767 if (err < 0) 768 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", 769 err); 770 771 err = abx500_set_register_interruptible(ab->dev, 772 AB8500_DEBUG, AB8500_USB_PHY_TUNE1, 0xC8); 773 if (err < 0) 774 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", 775 err); 776 777 err = abx500_set_register_interruptible(ab->dev, 778 AB8500_DEBUG, AB8500_USB_PHY_TUNE2, 0x00); 779 if (err < 0) 780 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", 781 err); 782 783 err = abx500_set_register_interruptible(ab->dev, 784 AB8500_DEBUG, AB8500_USB_PHY_TUNE3, 0x78); 785 if (err < 0) 786 dev_err(ab->dev, "Failed to set PHY_TUNE3 register err=%d\n", 787 err); 788 789 /* Switch to normal mode/disable Bank 0x12 access */ 790 err = abx500_set_register_interruptible(ab->dev, 791 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 0x00); 792 if (err < 0) 793 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", 794 err); 795 } 796 797 static void ab8500_usb_set_ab8505_tuning_values(struct ab8500_usb *ab) 798 { 799 int err; 800 801 /* Enable the PBT/Bank 0x12 access */ 802 err = abx500_mask_and_set_register_interruptible(ab->dev, 803 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 804 0x01, 0x01); 805 if (err < 0) 806 dev_err(ab->dev, "Failed to enable bank12 access err=%d\n", 807 err); 808 809 err = abx500_mask_and_set_register_interruptible(ab->dev, 810 AB8500_DEBUG, AB8500_USB_PHY_TUNE1, 811 0xC8, 0xC8); 812 if (err < 0) 813 dev_err(ab->dev, "Failed to set PHY_TUNE1 register err=%d\n", 814 err); 815 816 err = abx500_mask_and_set_register_interruptible(ab->dev, 817 AB8500_DEBUG, AB8500_USB_PHY_TUNE2, 818 0x60, 0x60); 819 if (err < 0) 820 dev_err(ab->dev, "Failed to set PHY_TUNE2 register err=%d\n", 821 err); 822 823 err = abx500_mask_and_set_register_interruptible(ab->dev, 824 AB8500_DEBUG, AB8500_USB_PHY_TUNE3, 825 0xFC, 0x80); 826 827 if (err < 0) 828 dev_err(ab->dev, "Failed to set PHY_TUNE3 register err=%d\n", 829 err); 830 831 /* Switch to normal mode/disable Bank 0x12 access */ 832 err = abx500_mask_and_set_register_interruptible(ab->dev, 833 AB8500_DEVELOPMENT, AB8500_BANK12_ACCESS, 834 0x00, 0x00); 835 if (err < 0) 836 dev_err(ab->dev, "Failed to switch bank12 access err=%d\n", 837 err); 838 } 839 840 static int ab8500_usb_probe(struct platform_device *pdev) 841 { 842 struct ab8500_usb *ab; 843 struct ab8500 *ab8500; 844 struct usb_otg *otg; 845 int err; 846 int rev; 847 848 ab8500 = dev_get_drvdata(pdev->dev.parent); 849 rev = abx500_get_chip_id(&pdev->dev); 850 851 if (is_ab8500_1p1_or_earlier(ab8500)) { 852 dev_err(&pdev->dev, "Unsupported AB8500 chip rev=%d\n", rev); 853 return -ENODEV; 854 } 855 856 ab = devm_kzalloc(&pdev->dev, sizeof(*ab), GFP_KERNEL); 857 if (!ab) 858 return -ENOMEM; 859 860 otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL); 861 if (!otg) 862 return -ENOMEM; 863 864 ab->dev = &pdev->dev; 865 ab->ab8500 = ab8500; 866 ab->phy.dev = ab->dev; 867 ab->phy.otg = otg; 868 ab->phy.label = "ab8500"; 869 ab->phy.set_suspend = ab8500_usb_set_suspend; 870 ab->phy.otg->state = OTG_STATE_UNDEFINED; 871 872 otg->usb_phy = &ab->phy; 873 otg->set_host = ab8500_usb_set_host; 874 otg->set_peripheral = ab8500_usb_set_peripheral; 875 876 if (is_ab8500(ab->ab8500)) { 877 ab->flags |= AB8500_USB_FLAG_USE_LINK_STATUS_IRQ | 878 AB8500_USB_FLAG_USE_ID_WAKEUP_IRQ | 879 AB8500_USB_FLAG_USE_VBUS_DET_IRQ | 880 AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE; 881 } else if (is_ab8505(ab->ab8500)) { 882 ab->flags |= AB8500_USB_FLAG_USE_LINK_STATUS_IRQ | 883 AB8500_USB_FLAG_USE_ID_WAKEUP_IRQ | 884 AB8500_USB_FLAG_USE_VBUS_DET_IRQ | 885 AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE; 886 } 887 888 /* Disable regulator voltage setting for AB8500 <= v2.0 */ 889 if (is_ab8500_2p0_or_earlier(ab->ab8500)) 890 ab->flags &= ~AB8500_USB_FLAG_REGULATOR_SET_VOLTAGE; 891 892 platform_set_drvdata(pdev, ab); 893 894 /* all: Disable phy when called from set_host and set_peripheral */ 895 INIT_WORK(&ab->phy_dis_work, ab8500_usb_phy_disable_work); 896 897 err = ab8500_usb_regulator_get(ab); 898 if (err) 899 return err; 900 901 ab->sysclk = devm_clk_get(ab->dev, "sysclk"); 902 if (IS_ERR(ab->sysclk)) { 903 dev_err(ab->dev, "Could not get sysclk.\n"); 904 return PTR_ERR(ab->sysclk); 905 } 906 907 err = ab8500_usb_irq_setup(pdev, ab); 908 if (err < 0) 909 return err; 910 911 err = usb_add_phy(&ab->phy, USB_PHY_TYPE_USB2); 912 if (err) { 913 dev_err(&pdev->dev, "Can't register transceiver\n"); 914 return err; 915 } 916 917 if (is_ab8500(ab->ab8500) && !is_ab8500_2p0_or_earlier(ab->ab8500)) 918 /* Phy tuning values for AB8500 > v2.0 */ 919 ab8500_usb_set_ab8500_tuning_values(ab); 920 else if (is_ab8505(ab->ab8500)) 921 /* Phy tuning values for AB8505 */ 922 ab8500_usb_set_ab8505_tuning_values(ab); 923 924 /* Needed to enable ID detection. */ 925 ab8500_usb_wd_workaround(ab); 926 927 /* 928 * This is required for usb-link-status to work properly when a 929 * cable is connected at boot time. 930 */ 931 ab8500_usb_restart_phy(ab); 932 933 abx500_usb_link_status_update(ab); 934 935 dev_info(&pdev->dev, "revision 0x%2x driver initialized\n", rev); 936 937 return 0; 938 } 939 940 static int ab8500_usb_remove(struct platform_device *pdev) 941 { 942 struct ab8500_usb *ab = platform_get_drvdata(pdev); 943 944 cancel_work_sync(&ab->phy_dis_work); 945 946 usb_remove_phy(&ab->phy); 947 948 if (ab->mode == USB_HOST) 949 ab8500_usb_host_phy_dis(ab); 950 else if (ab->mode == USB_PERIPHERAL) 951 ab8500_usb_peri_phy_dis(ab); 952 953 return 0; 954 } 955 956 static const struct platform_device_id ab8500_usb_devtype[] = { 957 { .name = "ab8500-usb", }, 958 { /* sentinel */ } 959 }; 960 MODULE_DEVICE_TABLE(platform, ab8500_usb_devtype); 961 962 static struct platform_driver ab8500_usb_driver = { 963 .probe = ab8500_usb_probe, 964 .remove = ab8500_usb_remove, 965 .id_table = ab8500_usb_devtype, 966 .driver = { 967 .name = "abx5x0-usb", 968 }, 969 }; 970 971 static int __init ab8500_usb_init(void) 972 { 973 return platform_driver_register(&ab8500_usb_driver); 974 } 975 subsys_initcall(ab8500_usb_init); 976 977 static void __exit ab8500_usb_exit(void) 978 { 979 platform_driver_unregister(&ab8500_usb_driver); 980 } 981 module_exit(ab8500_usb_exit); 982 983 MODULE_AUTHOR("ST-Ericsson AB"); 984 MODULE_DESCRIPTION("AB8500 family usb transceiver driver"); 985 MODULE_LICENSE("GPL"); 986