|
@@ -90,10 +90,10 @@ static void port_power(struct sl811 *sl811, int is_on)
|
|
|
|
|
|
/* hub is inactive unless the port is powered */
|
|
|
if (is_on) {
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_POWER))
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_POWER)
|
|
|
return;
|
|
|
|
|
|
- sl811->port1 = (1 << USB_PORT_FEAT_POWER);
|
|
|
+ sl811->port1 = USB_PORT_STAT_POWER;
|
|
|
sl811->irq_enable = SL11H_INTMASK_INSRMV;
|
|
|
} else {
|
|
|
sl811->port1 = 0;
|
|
@@ -407,7 +407,7 @@ static struct sl811h_ep *start(struct sl811 *sl811, u8 bank)
|
|
|
|
|
|
static inline void start_transfer(struct sl811 *sl811)
|
|
|
{
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_SUSPEND))
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_SUSPEND)
|
|
|
return;
|
|
|
if (sl811->active_a == NULL) {
|
|
|
sl811->active_a = start(sl811, SL811_EP_A(SL811_HOST_BUF));
|
|
@@ -721,23 +721,23 @@ retry:
|
|
|
* force the reset and make khubd clean up later.
|
|
|
*/
|
|
|
if (irqstat & SL11H_INTMASK_RD)
|
|
|
- sl811->port1 &= ~(1 << USB_PORT_FEAT_CONNECTION);
|
|
|
+ sl811->port1 &= ~USB_PORT_STAT_CONNECTION;
|
|
|
else
|
|
|
- sl811->port1 |= 1 << USB_PORT_FEAT_CONNECTION;
|
|
|
+ sl811->port1 |= USB_PORT_STAT_CONNECTION;
|
|
|
|
|
|
- sl811->port1 |= 1 << USB_PORT_FEAT_C_CONNECTION;
|
|
|
+ sl811->port1 |= USB_PORT_STAT_C_CONNECTION << 16;
|
|
|
|
|
|
} else if (irqstat & SL11H_INTMASK_RD) {
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_SUSPEND)) {
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_SUSPEND) {
|
|
|
DBG("wakeup\n");
|
|
|
- sl811->port1 |= 1 << USB_PORT_FEAT_C_SUSPEND;
|
|
|
+ sl811->port1 |= USB_PORT_STAT_C_SUSPEND << 16;
|
|
|
sl811->stat_wake++;
|
|
|
} else
|
|
|
irqstat &= ~SL11H_INTMASK_RD;
|
|
|
}
|
|
|
|
|
|
if (irqstat) {
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_ENABLE))
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_ENABLE)
|
|
|
start_transfer(sl811);
|
|
|
ret = IRQ_HANDLED;
|
|
|
if (retries--)
|
|
@@ -819,7 +819,7 @@ static int sl811h_urb_enqueue(
|
|
|
spin_lock_irqsave(&sl811->lock, flags);
|
|
|
|
|
|
/* don't submit to a dead or disabled port */
|
|
|
- if (!(sl811->port1 & (1 << USB_PORT_FEAT_ENABLE))
|
|
|
+ if (!(sl811->port1 & USB_PORT_STAT_ENABLE)
|
|
|
|| !HC_IS_RUNNING(hcd->state)) {
|
|
|
retval = -ENODEV;
|
|
|
kfree(ep);
|
|
@@ -1119,8 +1119,8 @@ sl811h_timer(unsigned long _sl811)
|
|
|
unsigned long flags;
|
|
|
u8 irqstat;
|
|
|
u8 signaling = sl811->ctrl1 & SL11H_CTL1MASK_FORCE;
|
|
|
- const u32 mask = (1 << USB_PORT_FEAT_CONNECTION)
|
|
|
- | (1 << USB_PORT_FEAT_ENABLE)
|
|
|
+ const u32 mask = USB_PORT_STAT_CONNECTION
|
|
|
+ | USB_PORT_STAT_ENABLE
|
|
|
| USB_PORT_STAT_LOW_SPEED;
|
|
|
|
|
|
spin_lock_irqsave(&sl811->lock, flags);
|
|
@@ -1135,8 +1135,8 @@ sl811h_timer(unsigned long _sl811)
|
|
|
switch (signaling) {
|
|
|
case SL11H_CTL1MASK_SE0:
|
|
|
DBG("end reset\n");
|
|
|
- sl811->port1 = (1 << USB_PORT_FEAT_C_RESET)
|
|
|
- | (1 << USB_PORT_FEAT_POWER);
|
|
|
+ sl811->port1 = (USB_PORT_STAT_C_RESET << 16)
|
|
|
+ | USB_PORT_STAT_POWER;
|
|
|
sl811->ctrl1 = 0;
|
|
|
/* don't wrongly ack RD */
|
|
|
if (irqstat & SL11H_INTMASK_INSRMV)
|
|
@@ -1144,7 +1144,7 @@ sl811h_timer(unsigned long _sl811)
|
|
|
break;
|
|
|
case SL11H_CTL1MASK_K:
|
|
|
DBG("end resume\n");
|
|
|
- sl811->port1 &= ~(1 << USB_PORT_FEAT_SUSPEND);
|
|
|
+ sl811->port1 &= ~USB_PORT_STAT_SUSPEND;
|
|
|
break;
|
|
|
default:
|
|
|
DBG("odd timer signaling: %02x\n", signaling);
|
|
@@ -1154,9 +1154,9 @@ sl811h_timer(unsigned long _sl811)
|
|
|
|
|
|
if (irqstat & SL11H_INTMASK_RD) {
|
|
|
/* usbcore nukes all pending transactions on disconnect */
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_CONNECTION))
|
|
|
- sl811->port1 |= (1 << USB_PORT_FEAT_C_CONNECTION)
|
|
|
- | (1 << USB_PORT_FEAT_C_ENABLE);
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_CONNECTION)
|
|
|
+ sl811->port1 |= (USB_PORT_STAT_C_CONNECTION << 16)
|
|
|
+ | (USB_PORT_STAT_C_ENABLE << 16);
|
|
|
sl811->port1 &= ~mask;
|
|
|
sl811->irq_enable = SL11H_INTMASK_INSRMV;
|
|
|
} else {
|
|
@@ -1166,7 +1166,7 @@ sl811h_timer(unsigned long _sl811)
|
|
|
sl811->irq_enable = SL11H_INTMASK_INSRMV | SL11H_INTMASK_RD;
|
|
|
}
|
|
|
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_CONNECTION)) {
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_CONNECTION) {
|
|
|
u8 ctrl2 = SL811HS_CTL2_INIT;
|
|
|
|
|
|
sl811->irq_enable |= SL11H_INTMASK_DONE_A;
|
|
@@ -1233,7 +1233,7 @@ sl811h_hub_control(
|
|
|
|
|
|
switch (wValue) {
|
|
|
case USB_PORT_FEAT_ENABLE:
|
|
|
- sl811->port1 &= (1 << USB_PORT_FEAT_POWER);
|
|
|
+ sl811->port1 &= USB_PORT_STAT_POWER;
|
|
|
sl811->ctrl1 = 0;
|
|
|
sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
|
|
|
sl811->irq_enable = SL11H_INTMASK_INSRMV;
|
|
@@ -1241,7 +1241,7 @@ sl811h_hub_control(
|
|
|
sl811->irq_enable);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_SUSPEND:
|
|
|
- if (!(sl811->port1 & (1 << USB_PORT_FEAT_SUSPEND)))
|
|
|
+ if (!(sl811->port1 & USB_PORT_STAT_SUSPEND))
|
|
|
break;
|
|
|
|
|
|
/* 20 msec of resume/K signaling, other irqs blocked */
|
|
@@ -1290,9 +1290,9 @@ sl811h_hub_control(
|
|
|
goto error;
|
|
|
switch (wValue) {
|
|
|
case USB_PORT_FEAT_SUSPEND:
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_RESET))
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_RESET)
|
|
|
goto error;
|
|
|
- if (!(sl811->port1 & (1 << USB_PORT_FEAT_ENABLE)))
|
|
|
+ if (!(sl811->port1 & USB_PORT_STAT_ENABLE))
|
|
|
goto error;
|
|
|
|
|
|
DBG("suspend...\n");
|
|
@@ -1303,9 +1303,9 @@ sl811h_hub_control(
|
|
|
port_power(sl811, 1);
|
|
|
break;
|
|
|
case USB_PORT_FEAT_RESET:
|
|
|
- if (sl811->port1 & (1 << USB_PORT_FEAT_SUSPEND))
|
|
|
+ if (sl811->port1 & USB_PORT_STAT_SUSPEND)
|
|
|
goto error;
|
|
|
- if (!(sl811->port1 & (1 << USB_PORT_FEAT_POWER)))
|
|
|
+ if (!(sl811->port1 & USB_PORT_STAT_POWER))
|
|
|
break;
|
|
|
|
|
|
/* 50 msec of reset/SE0 signaling, irqs blocked */
|
|
@@ -1314,7 +1314,7 @@ sl811h_hub_control(
|
|
|
sl811->irq_enable);
|
|
|
sl811->ctrl1 = SL11H_CTL1MASK_SE0;
|
|
|
sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
|
|
|
- sl811->port1 |= (1 << USB_PORT_FEAT_RESET);
|
|
|
+ sl811->port1 |= USB_PORT_STAT_RESET;
|
|
|
mod_timer(&sl811->timer, jiffies
|
|
|
+ msecs_to_jiffies(50));
|
|
|
break;
|