lkml.org 
[lkml]   [2011]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv4 09/19] usb: otg: langwell: Start using struct usb_otg
    Date
    Use struct usb_otg members with OTG specific functions instead
    of usb_phy members.

    Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    ---
    drivers/usb/otg/langwell_otg.c | 333 ++++++++++++++++++++-----------------
    include/linux/usb/intel_mid_otg.h | 6 +-
    2 files changed, 180 insertions(+), 159 deletions(-)

    diff --git a/drivers/usb/otg/langwell_otg.c b/drivers/usb/otg/langwell_otg.c
    index 54ab373..d6bd9c4 100644
    --- a/drivers/usb/otg/langwell_otg.c
    +++ b/drivers/usb/otg/langwell_otg.c
    @@ -55,11 +55,10 @@ static void langwell_otg_remove(struct pci_dev *pdev);
    static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message);
    static int langwell_otg_resume(struct pci_dev *pdev);

    -static int langwell_otg_set_host(struct usb_phy *otg,
    - struct usb_bus *host);
    -static int langwell_otg_set_peripheral(struct usb_phy *otg,
    +static int langwell_otg_set_host(struct usb_otg *otg, struct usb_bus *host);
    +static int langwell_otg_set_peripheral(struct usb_otg *otg,
    struct usb_gadget *gadget);
    -static int langwell_otg_start_srp(struct usb_phy *otg);
    +static int langwell_otg_start_srp(struct usb_otg *otg);

    static const struct pci_device_id pci_ids[] = {{
    .class = ((PCI_CLASS_SERIAL_USB << 8) | 0xfe),
    @@ -118,15 +117,14 @@ void langwell_update_transceiver(void)
    }
    EXPORT_SYMBOL(langwell_update_transceiver);

    -static int langwell_otg_set_host(struct usb_phy *otg,
    - struct usb_bus *host)
    +static int langwell_otg_set_host(struct usb_otg *otg, struct usb_bus *host)
    {
    otg->host = host;

    return 0;
    }

    -static int langwell_otg_set_peripheral(struct usb_phy *otg,
    +static int langwell_otg_set_peripheral(struct usb_otg *otg,
    struct usb_gadget *gadget)
    {
    otg->gadget = gadget;
    @@ -141,7 +139,7 @@ static int langwell_otg_set_power(struct usb_phy *otg,
    }

    /* A-device drives vbus, controlled through IPC commands */
    -static int langwell_otg_set_vbus(struct usb_phy *otg, bool enabled)
    +static int langwell_otg_set_vbus(struct usb_otg *otg, bool enabled)
    {
    struct langwell_otg *lnw = the_transceiver;
    u8 sub_id;
    @@ -180,7 +178,7 @@ static void langwell_otg_chrg_vbus(int on)
    }

    /* Start SRP */
    -static int langwell_otg_start_srp(struct usb_phy *otg)
    +static int langwell_otg_start_srp(struct usb_otg *otg)
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    @@ -205,9 +203,9 @@ static int langwell_otg_start_srp(struct usb_phy *otg)
    writel(val, iotg->base + CI_OTGSC);

    /* Start VBus SRP, drive vbus to generate VBus pulse */
    - iotg->otg.set_vbus(&iotg->otg, true);
    + otg->set_vbus(otg, true);
    msleep(15);
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);

    /* Enable interrupt - b_sess_vld*/
    val = readl(iotg->base + CI_OTGSC);
    @@ -237,7 +235,7 @@ static void langwell_otg_loc_sof(int on)

    dev_dbg(lnw->dev, "%s ---> %s\n", __func__, on ? "suspend" : "resume");

    - hcd = bus_to_hcd(lnw->iotg.otg.host);
    + hcd = bus_to_hcd(lnw->iotg.xceiv.otg->host);
    if (on)
    err = hcd->driver->bus_resume(hcd);
    else
    @@ -672,6 +670,7 @@ static void init_hsm(void)
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = iotg->xceiv.otg;
    u32 val32;

    /* read OTGSC after reset */
    @@ -681,14 +680,14 @@ static void init_hsm(void)
    /* set init state */
    if (val32 & OTGSC_ID) {
    iotg->hsm.id = 1;
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    set_client_mode();
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    } else {
    iotg->hsm.id = 0;
    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    set_host_mode();
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    }

    /* set session indicator */
    @@ -832,6 +831,7 @@ static int langwell_otg_iotg_notify(struct notifier_block *nb,
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = data;
    + struct usb_otg *otg = iotg->xceiv.otg;
    int flag = 0;

    if (iotg == NULL)
    @@ -843,7 +843,7 @@ static int langwell_otg_iotg_notify(struct notifier_block *nb,
    switch (action) {
    case MID_OTG_NOTIFY_CONNECT:
    dev_dbg(lnw->dev, "Lnw OTG Notify Connect Event\n");
    - if (iotg->otg.default_a == 1)
    + if (otg->default_a == 1)
    iotg->hsm.b_conn = 1;
    else
    iotg->hsm.a_conn = 1;
    @@ -851,7 +851,7 @@ static int langwell_otg_iotg_notify(struct notifier_block *nb,
    break;
    case MID_OTG_NOTIFY_DISCONN:
    dev_dbg(lnw->dev, "Lnw OTG Notify Disconnect Event\n");
    - if (iotg->otg.default_a == 1)
    + if (otg->default_a == 1)
    iotg->hsm.b_conn = 0;
    else
    iotg->hsm.a_conn = 0;
    @@ -859,7 +859,7 @@ static int langwell_otg_iotg_notify(struct notifier_block *nb,
    break;
    case MID_OTG_NOTIFY_HSUSPEND:
    dev_dbg(lnw->dev, "Lnw OTG Notify Host Bus suspend Event\n");
    - if (iotg->otg.default_a == 1)
    + if (otg->default_a == 1)
    iotg->hsm.a_suspend_req = 1;
    else
    iotg->hsm.b_bus_req = 0;
    @@ -867,13 +867,13 @@ static int langwell_otg_iotg_notify(struct notifier_block *nb,
    break;
    case MID_OTG_NOTIFY_HRESUME:
    dev_dbg(lnw->dev, "Lnw OTG Notify Host Bus resume Event\n");
    - if (iotg->otg.default_a == 1)
    + if (otg->default_a == 1)
    iotg->hsm.b_bus_resume = 1;
    flag = 1;
    break;
    case MID_OTG_NOTIFY_CSUSPEND:
    dev_dbg(lnw->dev, "Lnw OTG Notify Client Bus suspend Event\n");
    - if (iotg->otg.default_a == 1) {
    + if (otg->default_a == 1) {
    if (iotg->hsm.b_bus_suspend_vld == 2) {
    iotg->hsm.b_bus_suspend = 1;
    iotg->hsm.b_bus_suspend_vld = 0;
    @@ -891,7 +891,7 @@ static int langwell_otg_iotg_notify(struct notifier_block *nb,
    break;
    case MID_OTG_NOTIFY_CRESUME:
    dev_dbg(lnw->dev, "Lnw OTG Notify Client Bus resume Event\n");
    - if (iotg->otg.default_a == 0)
    + if (otg->default_a == 0)
    iotg->hsm.a_bus_suspend = 0;
    flag = 0;
    break;
    @@ -926,31 +926,33 @@ static void langwell_otg_work(struct work_struct *work)
    {
    struct langwell_otg *lnw;
    struct intel_mid_otg_xceiv *iotg;
    + struct usb_otg *otg;
    int retval;
    struct pci_dev *pdev;

    lnw = container_of(work, struct langwell_otg, work);
    iotg = &lnw->iotg;
    pdev = to_pci_dev(lnw->dev);
    + otg = iotg->xceiv.otg;

    dev_dbg(lnw->dev, "%s: old state = %s\n", __func__,
    - usb_phy_state_string(iotg->otg.state));
    + usb_phy_state_string(otg->xceiv->state));

    - switch (iotg->otg.state) {
    + switch (otg->xceiv->state) {
    case USB_PHY_STATE_UNDEFINED:
    case USB_PHY_STATE_B_IDLE:
    if (!iotg->hsm.id) {
    langwell_otg_del_timer(b_srp_init_tmr);
    del_timer_sync(&lnw->hsm_timer);

    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    iotg->hsm.a_srp_det = 0;

    langwell_otg_chrg_vbus(0);
    set_host_mode();
    langwell_otg_phy_low_power(1);

    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    langwell_update_transceiver();
    } else if (iotg->hsm.b_sess_vld) {
    langwell_otg_del_timer(b_srp_init_tmr);
    @@ -961,7 +963,7 @@ static void langwell_otg_work(struct work_struct *work)

    if (lnw->iotg.start_peripheral) {
    lnw->iotg.start_peripheral(&lnw->iotg);
    - iotg->otg.state = USB_PHY_STATE_B_PERIPHERAL;
    + otg->xceiv->state = USB_PHY_STATE_B_PERIPHERAL;
    } else
    dev_dbg(lnw->dev, "client driver not loaded\n");

    @@ -987,7 +989,7 @@ static void langwell_otg_work(struct work_struct *work)

    /* Start SRP */
    langwell_otg_add_timer(b_srp_init_tmr);
    - iotg->otg.start_srp(&iotg->otg);
    + otg->start_srp(otg);
    langwell_otg_del_timer(b_srp_init_tmr);
    langwell_otg_add_ktimer(TB_SRP_FAIL_TMR);

    @@ -998,28 +1000,28 @@ static void langwell_otg_work(struct work_struct *work)
    break;
    case USB_PHY_STATE_B_SRP_INIT:
    if (!iotg->hsm.id) {
    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    iotg->hsm.a_srp_det = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    langwell_otg_chrg_vbus(0);
    set_host_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    langwell_update_transceiver();
    } else if (iotg->hsm.b_sess_vld) {
    langwell_otg_chrg_vbus(0);
    if (lnw->iotg.start_peripheral) {
    lnw->iotg.start_peripheral(&lnw->iotg);
    - iotg->otg.state = USB_PHY_STATE_B_PERIPHERAL;
    + otg->xceiv->state = USB_PHY_STATE_B_PERIPHERAL;
    } else
    dev_dbg(lnw->dev, "client driver not loaded\n");
    }
    break;
    case USB_PHY_STATE_B_PERIPHERAL:
    if (!iotg->hsm.id) {
    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    iotg->hsm.a_srp_det = 0;

    langwell_otg_chrg_vbus(0);
    @@ -1032,7 +1034,7 @@ static void langwell_otg_work(struct work_struct *work)

    set_host_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.b_sess_vld) {
    iotg->hsm.b_hnp_enable = 0;
    @@ -1043,9 +1045,9 @@ static void langwell_otg_work(struct work_struct *work)
    dev_dbg(lnw->dev,
    "client driver has been removed.\n");

    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    - } else if (iotg->hsm.b_bus_req && iotg->otg.gadget &&
    - iotg->otg.gadget->b_hnp_enable &&
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    + } else if (iotg->hsm.b_bus_req && otg->gadget &&
    + otg->gadget->b_hnp_enable &&
    iotg->hsm.a_bus_suspend) {

    if (lnw->iotg.stop_peripheral)
    @@ -1059,7 +1061,7 @@ static void langwell_otg_work(struct work_struct *work)

    if (lnw->iotg.start_host) {
    lnw->iotg.start_host(&lnw->iotg);
    - iotg->otg.state = USB_PHY_STATE_B_WAIT_ACON;
    + otg->xceiv->state = USB_PHY_STATE_B_WAIT_ACON;
    } else
    dev_dbg(lnw->dev,
    "host driver not loaded.\n");
    @@ -1074,7 +1076,7 @@ static void langwell_otg_work(struct work_struct *work)
    /* delete hsm timer for b_ase0_brst_tmr */
    del_timer_sync(&lnw->hsm_timer);

    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    iotg->hsm.a_srp_det = 0;

    langwell_otg_chrg_vbus(0);
    @@ -1088,7 +1090,7 @@ static void langwell_otg_work(struct work_struct *work)

    set_host_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.b_sess_vld) {
    /* delete hsm timer for b_ase0_brst_tmr */
    @@ -1108,13 +1110,13 @@ static void langwell_otg_work(struct work_struct *work)

    set_client_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    } else if (iotg->hsm.a_conn) {
    /* delete hsm timer for b_ase0_brst_tmr */
    del_timer_sync(&lnw->hsm_timer);

    langwell_otg_HAAR(0);
    - iotg->otg.state = USB_PHY_STATE_B_HOST;
    + otg->xceiv->state = USB_PHY_STATE_B_HOST;
    langwell_update_transceiver();
    } else if (iotg->hsm.a_bus_resume ||
    iotg->hsm.b_ase0_brst_tmout) {
    @@ -1139,13 +1141,13 @@ static void langwell_otg_work(struct work_struct *work)
    dev_dbg(lnw->dev,
    "client driver not loaded.\n");

    - iotg->otg.state = USB_PHY_STATE_B_PERIPHERAL;
    + otg->xceiv->state = USB_PHY_STATE_B_PERIPHERAL;
    }
    break;

    case USB_PHY_STATE_B_HOST:
    if (!iotg->hsm.id) {
    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    iotg->hsm.a_srp_det = 0;

    langwell_otg_chrg_vbus(0);
    @@ -1158,7 +1160,7 @@ static void langwell_otg_work(struct work_struct *work)

    set_host_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.b_sess_vld) {
    iotg->hsm.b_hnp_enable = 0;
    @@ -1173,7 +1175,7 @@ static void langwell_otg_work(struct work_struct *work)

    set_client_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    } else if ((!iotg->hsm.b_bus_req) ||
    (!iotg->hsm.a_conn)) {
    iotg->hsm.b_bus_req = 0;
    @@ -1193,33 +1195,33 @@ static void langwell_otg_work(struct work_struct *work)
    dev_dbg(lnw->dev,
    "client driver not loaded.\n");

    - iotg->otg.state = USB_PHY_STATE_B_PERIPHERAL;
    + otg->xceiv->state = USB_PHY_STATE_B_PERIPHERAL;
    }
    break;

    case USB_PHY_STATE_A_IDLE:
    - iotg->otg.default_a = 1;
    + otg->default_a = 1;
    if (iotg->hsm.id) {
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    iotg->hsm.b_bus_req = 0;
    iotg->hsm.vbus_srp_up = 0;

    langwell_otg_chrg_vbus(0);
    set_client_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.a_bus_drop &&
    (iotg->hsm.a_srp_det || iotg->hsm.a_bus_req)) {
    langwell_otg_phy_low_power(0);

    /* Turn on VBus */
    - iotg->otg.set_vbus(&iotg->otg, true);
    + otg->set_vbus(otg, true);

    iotg->hsm.vbus_srp_up = 0;
    iotg->hsm.a_wait_vrise_tmout = 0;
    langwell_otg_add_timer(a_wait_vrise_tmr);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VRISE;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VRISE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.a_bus_drop && iotg->hsm.a_sess_vld) {
    iotg->hsm.vbus_srp_up = 1;
    @@ -1228,12 +1230,12 @@ static void langwell_otg_work(struct work_struct *work)
    langwell_otg_phy_low_power(0);

    /* Turn on VBus */
    - iotg->otg.set_vbus(&iotg->otg, true);
    + otg->set_vbus(otg, true);
    iotg->hsm.a_srp_det = 1;
    iotg->hsm.vbus_srp_up = 0;
    iotg->hsm.a_wait_vrise_tmout = 0;
    langwell_otg_add_timer(a_wait_vrise_tmr);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VRISE;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VRISE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.a_sess_vld &&
    !iotg->hsm.vbus_srp_up) {
    @@ -1244,13 +1246,13 @@ static void langwell_otg_work(struct work_struct *work)
    if (iotg->hsm.id) {
    langwell_otg_del_timer(a_wait_vrise_tmr);
    iotg->hsm.b_bus_req = 0;
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    set_client_mode();
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    } else if (iotg->hsm.a_vbus_vld) {
    langwell_otg_del_timer(a_wait_vrise_tmr);
    iotg->hsm.b_conn = 0;
    @@ -1262,7 +1264,7 @@ static void langwell_otg_work(struct work_struct *work)
    }

    langwell_otg_add_ktimer(TA_WAIT_BCON_TMR);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_BCON;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_BCON;
    } else if (iotg->hsm.a_wait_vrise_tmout) {
    iotg->hsm.b_conn = 0;
    if (iotg->hsm.a_vbus_vld) {
    @@ -1274,13 +1276,13 @@ static void langwell_otg_work(struct work_struct *work)
    break;
    }
    langwell_otg_add_ktimer(TA_WAIT_BCON_TMR);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_BCON;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_BCON;
    } else {

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_A_VBUS_ERR;
    + otg->xceiv->state = USB_PHY_STATE_A_VBUS_ERR;
    }
    }
    break;
    @@ -1289,7 +1291,7 @@ static void langwell_otg_work(struct work_struct *work)
    /* delete hsm timer for a_wait_bcon_tmr */
    del_timer_sync(&lnw->hsm_timer);

    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    iotg->hsm.b_bus_req = 0;

    if (lnw->iotg.stop_host)
    @@ -1299,10 +1301,10 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    set_client_mode();
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.a_vbus_vld) {
    /* delete hsm timer for a_wait_bcon_tmr */
    @@ -1315,9 +1317,9 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_A_VBUS_ERR;
    + otg->xceiv->state = USB_PHY_STATE_A_VBUS_ERR;
    } else if (iotg->hsm.a_bus_drop ||
    (iotg->hsm.a_wait_bcon_tmout &&
    !iotg->hsm.a_bus_req)) {
    @@ -1331,21 +1333,21 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VFALL;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VFALL;
    } else if (iotg->hsm.b_conn) {
    /* delete hsm timer for a_wait_bcon_tmr */
    del_timer_sync(&lnw->hsm_timer);

    iotg->hsm.a_suspend_req = 0;
    - iotg->otg.state = USB_PHY_STATE_A_HOST;
    - if (iotg->hsm.a_srp_det && iotg->otg.host &&
    - !iotg->otg.host->b_hnp_enable) {
    + otg->xceiv->state = USB_PHY_STATE_A_HOST;
    + if (iotg->hsm.a_srp_det && otg->host &&
    + !otg->host->b_hnp_enable) {
    /* SRP capable peripheral-only device */
    iotg->hsm.a_bus_req = 1;
    iotg->hsm.a_srp_det = 0;
    - } else if (!iotg->hsm.a_bus_req && iotg->otg.host &&
    - iotg->otg.host->b_hnp_enable) {
    + } else if (!iotg->hsm.a_bus_req && otg->host &&
    + otg->host->b_hnp_enable) {
    /* It is not safe enough to do a fast
    * transition from A_WAIT_BCON to
    * A_SUSPEND */
    @@ -1369,9 +1371,9 @@ static void langwell_otg_work(struct work_struct *work)
    /* clear PHCD to enable HW timer */
    langwell_otg_phy_low_power(0);
    langwell_otg_add_timer(a_aidl_bdis_tmr);
    - iotg->otg.state = USB_PHY_STATE_A_SUSPEND;
    - } else if (!iotg->hsm.a_bus_req && iotg->otg.host &&
    - !iotg->otg.host->b_hnp_enable) {
    + otg->xceiv->state = USB_PHY_STATE_A_SUSPEND;
    + } else if (!iotg->hsm.a_bus_req && otg->host &&
    + !otg->host->b_hnp_enable) {
    if (lnw->iotg.stop_host)
    lnw->iotg.stop_host(&lnw->iotg);
    else
    @@ -1379,14 +1381,14 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VFALL;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VFALL;
    }
    }
    break;
    case USB_PHY_STATE_A_HOST:
    if (iotg->hsm.id) {
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    iotg->hsm.b_bus_req = 0;

    if (lnw->iotg.stop_host)
    @@ -1396,14 +1398,14 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    set_client_mode();
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (iotg->hsm.a_bus_drop ||
    - (iotg->otg.host &&
    - !iotg->otg.host->b_hnp_enable &&
    + (otg->host &&
    + !otg->host->b_hnp_enable &&
    !iotg->hsm.a_bus_req)) {
    if (lnw->iotg.stop_host)
    lnw->iotg.stop_host(&lnw->iotg);
    @@ -1412,8 +1414,8 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VFALL;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VFALL;
    } else if (!iotg->hsm.a_vbus_vld) {
    if (lnw->iotg.stop_host)
    lnw->iotg.stop_host(&lnw->iotg);
    @@ -1422,11 +1424,11 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_A_VBUS_ERR;
    - } else if (iotg->otg.host &&
    - iotg->otg.host->b_hnp_enable &&
    + otg->xceiv->state = USB_PHY_STATE_A_VBUS_ERR;
    + } else if (otg->host &&
    + otg->host->b_hnp_enable &&
    !iotg->hsm.a_bus_req) {
    /* Set HABA to enable hardware assistance to signal
    * A-connect after receiver B-disconnect. Hardware
    @@ -1449,10 +1451,10 @@ static void langwell_otg_work(struct work_struct *work)
    /* clear PHCD to enable HW timer */
    langwell_otg_phy_low_power(0);
    langwell_otg_add_timer(a_aidl_bdis_tmr);
    - iotg->otg.state = USB_PHY_STATE_A_SUSPEND;
    + otg->xceiv->state = USB_PHY_STATE_A_SUSPEND;
    } else if (!iotg->hsm.b_conn || !iotg->hsm.a_bus_req) {
    langwell_otg_add_ktimer(TA_WAIT_BCON_TMR);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_BCON;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_BCON;
    }
    break;
    case USB_PHY_STATE_A_SUSPEND:
    @@ -1460,7 +1462,7 @@ static void langwell_otg_work(struct work_struct *work)
    langwell_otg_del_timer(a_aidl_bdis_tmr);
    langwell_otg_HABA(0);
    free_irq(pdev->irq, iotg->base);
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    iotg->hsm.b_bus_req = 0;

    if (lnw->iotg.stop_host)
    @@ -1470,10 +1472,10 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    set_client_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (iotg->hsm.a_bus_req ||
    iotg->hsm.b_bus_resume) {
    @@ -1482,7 +1484,7 @@ static void langwell_otg_work(struct work_struct *work)
    free_irq(pdev->irq, iotg->base);
    iotg->hsm.a_suspend_req = 0;
    langwell_otg_loc_sof(1);
    - iotg->otg.state = USB_PHY_STATE_A_HOST;
    + otg->xceiv->state = USB_PHY_STATE_A_HOST;
    } else if (iotg->hsm.a_aidl_bdis_tmout ||
    iotg->hsm.a_bus_drop) {
    langwell_otg_del_timer(a_aidl_bdis_tmr);
    @@ -1495,10 +1497,10 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VFALL;
    - } else if (!iotg->hsm.b_conn && iotg->otg.host &&
    - iotg->otg.host->b_hnp_enable) {
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VFALL;
    + } else if (!iotg->hsm.b_conn && otg->host &&
    + otg->host->b_hnp_enable) {
    langwell_otg_del_timer(a_aidl_bdis_tmr);
    langwell_otg_HABA(0);
    free_irq(pdev->irq, iotg->base);
    @@ -1520,7 +1522,7 @@ static void langwell_otg_work(struct work_struct *work)
    "client driver not loaded.\n");

    langwell_otg_add_ktimer(TB_BUS_SUSPEND_TMR);
    - iotg->otg.state = USB_PHY_STATE_A_PERIPHERAL;
    + otg->xceiv->state = USB_PHY_STATE_A_PERIPHERAL;
    break;
    } else if (!iotg->hsm.a_vbus_vld) {
    langwell_otg_del_timer(a_aidl_bdis_tmr);
    @@ -1533,16 +1535,16 @@ static void langwell_otg_work(struct work_struct *work)
    "host driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_A_VBUS_ERR;
    + otg->xceiv->state = USB_PHY_STATE_A_VBUS_ERR;
    }
    break;
    case USB_PHY_STATE_A_PERIPHERAL:
    if (iotg->hsm.id) {
    /* delete hsm timer for b_bus_suspend_tmr */
    del_timer_sync(&lnw->hsm_timer);
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    iotg->hsm.b_bus_req = 0;
    if (lnw->iotg.stop_peripheral)
    lnw->iotg.stop_peripheral(&lnw->iotg);
    @@ -1551,10 +1553,10 @@ static void langwell_otg_work(struct work_struct *work)
    "client driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    set_client_mode();
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (!iotg->hsm.a_vbus_vld) {
    /* delete hsm timer for b_bus_suspend_tmr */
    @@ -1567,9 +1569,9 @@ static void langwell_otg_work(struct work_struct *work)
    "client driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);
    langwell_otg_phy_low_power_wait(1);
    - iotg->otg.state = USB_PHY_STATE_A_VBUS_ERR;
    + otg->xceiv->state = USB_PHY_STATE_A_VBUS_ERR;
    } else if (iotg->hsm.a_bus_drop) {
    /* delete hsm timer for b_bus_suspend_tmr */
    del_timer_sync(&lnw->hsm_timer);
    @@ -1581,8 +1583,8 @@ static void langwell_otg_work(struct work_struct *work)
    "client driver has been removed.\n");

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VFALL;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VFALL;
    } else if (iotg->hsm.b_bus_suspend) {
    /* delete hsm timer for b_bus_suspend_tmr */
    del_timer_sync(&lnw->hsm_timer);
    @@ -1599,7 +1601,7 @@ static void langwell_otg_work(struct work_struct *work)
    dev_dbg(lnw->dev,
    "host driver not loaded.\n");
    langwell_otg_add_ktimer(TA_WAIT_BCON_TMR);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_BCON;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_BCON;
    } else if (iotg->hsm.b_bus_suspend_tmout) {
    u32 val;
    val = readl(lnw->iotg.base + CI_PORTSC1);
    @@ -1618,24 +1620,24 @@ static void langwell_otg_work(struct work_struct *work)
    dev_dbg(lnw->dev,
    "host driver not loaded.\n");
    langwell_otg_add_ktimer(TA_WAIT_BCON_TMR);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_BCON;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_BCON;
    }
    break;
    case USB_PHY_STATE_A_VBUS_ERR:
    if (iotg->hsm.id) {
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    iotg->hsm.a_clr_err = 0;
    iotg->hsm.a_srp_det = 0;
    set_client_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (iotg->hsm.a_clr_err) {
    iotg->hsm.a_clr_err = 0;
    iotg->hsm.a_srp_det = 0;
    reset_otg();
    init_hsm();
    - if (iotg->otg.state == USB_PHY_STATE_A_IDLE)
    + if (otg->xceiv->state == USB_PHY_STATE_A_IDLE)
    langwell_update_transceiver();
    } else {
    /* FW will clear PHCD bit when any VBus
    @@ -1645,23 +1647,23 @@ static void langwell_otg_work(struct work_struct *work)
    break;
    case USB_PHY_STATE_A_WAIT_VFALL:
    if (iotg->hsm.id) {
    - iotg->otg.default_a = 0;
    + otg->default_a = 0;
    set_client_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    langwell_update_transceiver();
    } else if (iotg->hsm.a_bus_req) {

    /* Turn on VBus */
    - iotg->otg.set_vbus(&iotg->otg, true);
    + otg->set_vbus(otg, true);
    iotg->hsm.a_wait_vrise_tmout = 0;
    langwell_otg_add_timer(a_wait_vrise_tmr);
    - iotg->otg.state = USB_PHY_STATE_A_WAIT_VRISE;
    + otg->xceiv->state = USB_PHY_STATE_A_WAIT_VRISE;
    } else if (!iotg->hsm.a_sess_vld) {
    iotg->hsm.a_srp_det = 0;
    set_host_mode();
    langwell_otg_phy_low_power(1);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    }
    break;
    default:
    @@ -1669,7 +1671,7 @@ static void langwell_otg_work(struct work_struct *work)
    }

    dev_dbg(lnw->dev, "%s: new state = %s\n", __func__,
    - usb_phy_state_string(iotg->otg.state));
    + usb_phy_state_string(otg->xceiv->state));
    }

    static ssize_t
    @@ -1713,17 +1715,18 @@ show_hsm(struct device *_dev, struct device_attribute *attr, char *buf)
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = iotg->xceiv.otg;
    char *next;
    unsigned size, t;

    next = buf;
    size = PAGE_SIZE;

    - if (iotg->otg.host)
    - iotg->hsm.a_set_b_hnp_en = iotg->otg.host->b_hnp_enable;
    + if (otg->host)
    + iotg->hsm.a_set_b_hnp_en = otg->host->b_hnp_enable;

    - if (iotg->otg.gadget)
    - iotg->hsm.b_hnp_enable = iotg->otg.gadget->b_hnp_enable;
    + if (otg->gadget)
    + iotg->hsm.b_hnp_enable = otg->gadget->b_hnp_enable;

    t = scnprintf(next, size,
    "\n"
    @@ -1755,7 +1758,7 @@ show_hsm(struct device *_dev, struct device_attribute *attr, char *buf)
    "b_bus_req = \t%d\n"
    "b_bus_suspend_tmout = \t%d\n"
    "b_bus_suspend_vld = \t%d\n",
    - usb_phy_state_string(iotg->otg.state),
    + usb_phy_state_string(otg->xceiv->state),
    iotg->hsm.a_bus_resume,
    iotg->hsm.a_bus_suspend,
    iotg->hsm.a_conn,
    @@ -1814,8 +1817,9 @@ set_a_bus_req(struct device *dev, struct device_attribute *attr,
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = iotg->xceiv.otg;

    - if (!iotg->otg.default_a)
    + if (!otg->default_a)
    return -1;
    if (count > 2)
    return -1;
    @@ -1861,8 +1865,9 @@ set_a_bus_drop(struct device *dev, struct device_attribute *attr,
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = iotg->xceiv.otg;

    - if (!iotg->otg.default_a)
    + if (!otg->default_a)
    return -1;
    if (count > 2)
    return -1;
    @@ -1907,8 +1912,9 @@ set_b_bus_req(struct device *dev, struct device_attribute *attr,
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = iotg->xceiv.otg;

    - if (iotg->otg.default_a)
    + if (otg->default_a)
    return -1;

    if (count > 2)
    @@ -1935,8 +1941,9 @@ set_a_clr_err(struct device *dev, struct device_attribute *attr,
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = iotg->xceiv.otg;

    - if (!iotg->otg.default_a)
    + if (!otg->default_a)
    return -1;
    if (count > 2)
    return -1;
    @@ -1974,6 +1981,7 @@ static int langwell_otg_probe(struct pci_dev *pdev,
    int retval;
    u32 val32;
    struct langwell_otg *lnw;
    + struct usb_otg *otg;
    char qname[] = "langwell_otg_queue";

    retval = 0;
    @@ -1988,6 +1996,15 @@ static int langwell_otg_probe(struct pci_dev *pdev,
    retval = -ENOMEM;
    goto done;
    }
    +
    + otg = kzalloc(sizeof *otg, GFP_KERNEL);
    + if (otg == NULL) {
    + kfree(lnw);
    + retval = -ENOMEM;
    + goto done;
    + }
    +
    + lnw->iotg.xceiv.otg = otg;
    the_transceiver = lnw;

    /* control register: BAR 0 */
    @@ -2036,16 +2053,18 @@ static int langwell_otg_probe(struct pci_dev *pdev,

    /* OTG common part */
    lnw->dev = &pdev->dev;
    - lnw->iotg.otg.dev = lnw->dev;
    - lnw->iotg.otg.label = driver_name;
    - lnw->iotg.otg.set_host = langwell_otg_set_host;
    - lnw->iotg.otg.set_peripheral = langwell_otg_set_peripheral;
    - lnw->iotg.otg.set_power = langwell_otg_set_power;
    - lnw->iotg.otg.set_vbus = langwell_otg_set_vbus;
    - lnw->iotg.otg.start_srp = langwell_otg_start_srp;
    - lnw->iotg.otg.state = USB_PHY_STATE_UNDEFINED;
    -
    - if (otg_set_transceiver(&lnw->iotg.otg)) {
    + lnw->iotg.xceiv.dev = lnw->dev;
    + lnw->iotg.xceiv.label = driver_name;
    + lnw->iotg.xceiv.set_power = langwell_otg_set_power;
    + lnw->iotg.xceiv.state = USB_PHY_STATE_UNDEFINED;
    +
    + otg->xceiv = &lnw->iotg.xceiv;
    + otg->set_host = langwell_otg_set_host;
    + otg->set_peripheral = langwell_otg_set_peripheral;
    + otg->set_vbus = langwell_otg_set_vbus;
    + otg->start_srp = langwell_otg_start_srp;
    +
    + if (usb_set_transceiver(&lnw->iotg.xceiv)) {
    dev_dbg(lnw->dev, "can't set transceiver\n");
    retval = -EBUSY;
    goto err;
    @@ -2107,7 +2126,7 @@ static int langwell_otg_probe(struct pci_dev *pdev,
    goto err;
    }

    - if (lnw->iotg.otg.state == USB_PHY_STATE_A_IDLE)
    + if (otg->xceiv->state == USB_PHY_STATE_A_IDLE)
    langwell_update_transceiver();

    return 0;
    @@ -2145,11 +2164,12 @@ static void langwell_otg_remove(struct pci_dev *pdev)
    release_mem_region(pci_resource_start(pdev, 0),
    pci_resource_len(pdev, 0));

    - otg_set_transceiver(NULL);
    + usb_set_transceiver(NULL);
    pci_disable_device(pdev);
    sysfs_remove_group(&pdev->dev.kobj, &debug_dev_attr_group);
    device_remove_file(&pdev->dev, &dev_attr_hsm);
    device_remove_file(&pdev->dev, &dev_attr_registers);
    + kfree(lnw->iotg.xceiv.otg);
    kfree(lnw);
    lnw = NULL;
    }
    @@ -2165,6 +2185,7 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    {
    struct langwell_otg *lnw = the_transceiver;
    struct intel_mid_otg_xceiv *iotg = &lnw->iotg;
    + struct usb_otg *otg = lnw->iotg.xceiv.otg;
    int ret = 0;

    /* Disbale OTG interrupts */
    @@ -2179,9 +2200,9 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    lnw->qwork = NULL;

    /* start actions */
    - switch (iotg->otg.state) {
    + switch (otg->xceiv->state) {
    case USB_PHY_STATE_A_WAIT_VFALL:
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    case USB_PHY_STATE_A_IDLE:
    case USB_PHY_STATE_B_IDLE:
    case USB_PHY_STATE_A_VBUS_ERR:
    @@ -2192,8 +2213,8 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    iotg->hsm.a_srp_det = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_A_WAIT_BCON:
    @@ -2206,8 +2227,8 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    iotg->hsm.a_srp_det = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_A_HOST:
    @@ -2219,9 +2240,9 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    iotg->hsm.a_srp_det = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    + otg->set_vbus(otg, false);

    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_A_SUSPEND:
    @@ -2234,8 +2255,8 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    iotg->hsm.a_srp_det = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_A_PERIPHERAL:
    @@ -2249,8 +2270,8 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    iotg->hsm.a_srp_det = 0;

    /* Turn off VBus */
    - iotg->otg.set_vbus(&iotg->otg, false);
    - iotg->otg.state = USB_PHY_STATE_A_IDLE;
    + otg->set_vbus(otg, false);
    + otg->xceiv->state = USB_PHY_STATE_A_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_B_HOST:
    @@ -2259,7 +2280,7 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    else
    dev_dbg(&pdev->dev, "host driver has been removed.\n");
    iotg->hsm.b_bus_req = 0;
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_B_PERIPHERAL:
    @@ -2268,7 +2289,7 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    else
    dev_dbg(&pdev->dev,
    "client driver has been removed.\n");
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    transceiver_suspend(pdev);
    break;
    case USB_PHY_STATE_B_WAIT_ACON:
    @@ -2282,7 +2303,7 @@ static int langwell_otg_suspend(struct pci_dev *pdev, pm_message_t message)
    else
    dev_dbg(&pdev->dev, "host driver has been removed.\n");
    iotg->hsm.b_bus_req = 0;
    - iotg->otg.state = USB_PHY_STATE_B_IDLE;
    + otg->xceiv->state = USB_PHY_STATE_B_IDLE;
    transceiver_suspend(pdev);
    break;
    default:
    diff --git a/include/linux/usb/intel_mid_otg.h b/include/linux/usb/intel_mid_otg.h
    index 756cf55..08687cb 100644
    --- a/include/linux/usb/intel_mid_otg.h
    +++ b/include/linux/usb/intel_mid_otg.h
    @@ -108,7 +108,7 @@ struct iotg_ulpi_access_ops {
    * purpose.
    */
    struct intel_mid_otg_xceiv {
    - struct usb_phy otg;
    + struct usb_phy xceiv;
    struct otg_hsm hsm;

    /* base address */
    @@ -147,9 +147,9 @@ struct intel_mid_otg_xceiv {

    };
    static inline
    -struct intel_mid_otg_xceiv *otg_to_mid_xceiv(struct usb_phy *otg)
    +struct intel_mid_otg_xceiv *otg_to_mid_xceiv(struct usb_phy *xceiv)
    {
    - return container_of(otg, struct intel_mid_otg_xceiv, otg);
    + return container_of(xceiv, struct intel_mid_otg_xceiv, xceiv);
    }

    #define MID_OTG_NOTIFY_CONNECT 0x0001
    --
    1.7.4.1


    \
     
     \ /
      Last update: 2011-09-07 19:05    [W:4.175 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site