linux/drivers/usb/phy/phy-ab8500-usb.c
<<
>>
Prefs
   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};
 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
 125struct 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
 144static inline struct ab8500_usb *phy_to_ab(struct usb_phy *x)
 145{
 146        return container_of(x, struct ab8500_usb, phy);
 147}
 148
 149static 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
 172static 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
 212static 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
 239static 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
 250static 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
 271static 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
 313static 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
 400static 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 */
 500static 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, &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, &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 */
 533static 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
 572static 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
 581static 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
 593static int ab8500_usb_set_suspend(struct usb_phy *x, int suspend)
 594{
 595        /* TODO */
 596        return 0;
 597}
 598
 599static 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
 624static 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
 648static 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
 675static 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
 703static 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
 760static 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
 797static 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
 840static 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
 940static 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
 956static const struct platform_device_id ab8500_usb_devtype[] = {
 957        { .name = "ab8500-usb", },
 958        { /* sentinel */ }
 959};
 960MODULE_DEVICE_TABLE(platform, ab8500_usb_devtype);
 961
 962static 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
 971static int __init ab8500_usb_init(void)
 972{
 973        return platform_driver_register(&ab8500_usb_driver);
 974}
 975subsys_initcall(ab8500_usb_init);
 976
 977static void __exit ab8500_usb_exit(void)
 978{
 979        platform_driver_unregister(&ab8500_usb_driver);
 980}
 981module_exit(ab8500_usb_exit);
 982
 983MODULE_AUTHOR("ST-Ericsson AB");
 984MODULE_DESCRIPTION("AB8500 family usb transceiver driver");
 985MODULE_LICENSE("GPL");
 986