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