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