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