|
@@ -293,7 +293,7 @@ static int tusb_draw_power(struct usb_phy *x, unsigned mA)
|
|
|
* The actual current usage would be very board-specific. For now,
|
|
|
* it's simpler to just use an aggregate (also board-specific).
|
|
|
*/
|
|
|
- if (x->default_a || mA < (musb->min_power << 1))
|
|
|
+ if (x->otg->default_a || mA < (musb->min_power << 1))
|
|
|
mA = 0;
|
|
|
|
|
|
reg = musb_readl(tbase, TUSB_PRCM_MNGMT);
|
|
@@ -510,6 +510,7 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
|
|
|
void __iomem *tbase = musb->ctrl_base;
|
|
|
u32 conf, prcm, timer;
|
|
|
u8 devctl;
|
|
|
+ struct usb_otg *otg = musb->xceiv->otg;
|
|
|
|
|
|
/* HDRC controls CPEN, but beware current surges during device
|
|
|
* connect. They can trigger transient overcurrent conditions
|
|
@@ -522,7 +523,7 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
|
|
|
|
|
|
if (is_on) {
|
|
|
timer = OTG_TIMER_MS(OTG_TIME_A_WAIT_VRISE);
|
|
|
- musb->xceiv->default_a = 1;
|
|
|
+ otg->default_a = 1;
|
|
|
musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
|
|
|
devctl |= MUSB_DEVCTL_SESSION;
|
|
|
|
|
@@ -548,11 +549,11 @@ static void tusb_musb_set_vbus(struct musb *musb, int is_on)
|
|
|
musb->xceiv->state = OTG_STATE_A_IDLE;
|
|
|
}
|
|
|
musb->is_active = 0;
|
|
|
- musb->xceiv->default_a = 1;
|
|
|
+ otg->default_a = 1;
|
|
|
MUSB_HST_MODE(musb);
|
|
|
} else {
|
|
|
musb->is_active = 0;
|
|
|
- musb->xceiv->default_a = 0;
|
|
|
+ otg->default_a = 0;
|
|
|
musb->xceiv->state = OTG_STATE_B_IDLE;
|
|
|
MUSB_DEV_MODE(musb);
|
|
|
}
|
|
@@ -644,6 +645,7 @@ tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase)
|
|
|
{
|
|
|
u32 otg_stat = musb_readl(tbase, TUSB_DEV_OTG_STAT);
|
|
|
unsigned long idle_timeout = 0;
|
|
|
+ struct usb_otg *otg = musb->xceiv->otg;
|
|
|
|
|
|
/* ID pin */
|
|
|
if ((int_src & TUSB_INT_SRC_ID_STATUS_CHNG)) {
|
|
@@ -654,7 +656,7 @@ tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase)
|
|
|
else
|
|
|
default_a = is_host_enabled(musb);
|
|
|
dev_dbg(musb->controller, "Default-%c\n", default_a ? 'A' : 'B');
|
|
|
- musb->xceiv->default_a = default_a;
|
|
|
+ otg->default_a = default_a;
|
|
|
tusb_musb_set_vbus(musb, default_a);
|
|
|
|
|
|
/* Don't allow idling immediately */
|
|
@@ -666,7 +668,7 @@ tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase)
|
|
|
if (int_src & TUSB_INT_SRC_VBUS_SENSE_CHNG) {
|
|
|
|
|
|
/* B-dev state machine: no vbus ~= disconnect */
|
|
|
- if ((is_otg_enabled(musb) && !musb->xceiv->default_a)
|
|
|
+ if ((is_otg_enabled(musb) && !otg->default_a)
|
|
|
|| !is_host_enabled(musb)) {
|
|
|
/* ? musb_root_disconnect(musb); */
|
|
|
musb->port1_status &=
|