Commit 0ed930bf authored by Anti Sullin's avatar Anti Sullin Committed by Greg Kroah-Hartman

USB: isp116x: fix enumeration on boot

This patch removes the buffering of the status register.
USB core behavior has changed a bit and this buffering was not refreshed
at the right time.  The core got buffered old value of HCRHPORT and it
did not detect any devices on boot.
Signed-off-by: default avatarAnti Sullin <anti.sullin@artecdesign.ee>
Acked by: Olav Kongas <ok@artecdesign.ee>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent b5f7a0ec
...@@ -911,8 +911,7 @@ static int isp116x_hub_status_data(struct usb_hcd *hcd, char *buf) ...@@ -911,8 +911,7 @@ static int isp116x_hub_status_data(struct usb_hcd *hcd, char *buf)
buf[0] = 0; buf[0] = 0;
for (i = 0; i < ports; i++) { for (i = 0; i < ports; i++) {
u32 status = isp116x->rhport[i] = u32 status = isp116x_read_reg32(isp116x, i ? HCRHPORT2 : HCRHPORT1);
isp116x_read_reg32(isp116x, i ? HCRHPORT2 : HCRHPORT1);
if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
| RH_PS_OCIC | RH_PS_PRSC)) { | RH_PS_OCIC | RH_PS_PRSC)) {
...@@ -1031,7 +1030,9 @@ static int isp116x_hub_control(struct usb_hcd *hcd, ...@@ -1031,7 +1030,9 @@ static int isp116x_hub_control(struct usb_hcd *hcd,
DBG("GetPortStatus\n"); DBG("GetPortStatus\n");
if (!wIndex || wIndex > ports) if (!wIndex || wIndex > ports)
goto error; goto error;
tmp = isp116x->rhport[--wIndex]; spin_lock_irqsave(&isp116x->lock, flags);
tmp = isp116x_read_reg32(isp116x, (--wIndex) ? HCRHPORT2 : HCRHPORT1);
spin_unlock_irqrestore(&isp116x->lock, flags);
*(__le32 *) buf = cpu_to_le32(tmp); *(__le32 *) buf = cpu_to_le32(tmp);
DBG("GetPortStatus: port[%d] %08x\n", wIndex + 1, tmp); DBG("GetPortStatus: port[%d] %08x\n", wIndex + 1, tmp);
break; break;
...@@ -1080,8 +1081,6 @@ static int isp116x_hub_control(struct usb_hcd *hcd, ...@@ -1080,8 +1081,6 @@ static int isp116x_hub_control(struct usb_hcd *hcd,
spin_lock_irqsave(&isp116x->lock, flags); spin_lock_irqsave(&isp116x->lock, flags);
isp116x_write_reg32(isp116x, wIndex isp116x_write_reg32(isp116x, wIndex
? HCRHPORT2 : HCRHPORT1, tmp); ? HCRHPORT2 : HCRHPORT1, tmp);
isp116x->rhport[wIndex] =
isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
spin_unlock_irqrestore(&isp116x->lock, flags); spin_unlock_irqrestore(&isp116x->lock, flags);
break; break;
case SetPortFeature: case SetPortFeature:
...@@ -1095,24 +1094,22 @@ static int isp116x_hub_control(struct usb_hcd *hcd, ...@@ -1095,24 +1094,22 @@ static int isp116x_hub_control(struct usb_hcd *hcd,
spin_lock_irqsave(&isp116x->lock, flags); spin_lock_irqsave(&isp116x->lock, flags);
isp116x_write_reg32(isp116x, wIndex isp116x_write_reg32(isp116x, wIndex
? HCRHPORT2 : HCRHPORT1, RH_PS_PSS); ? HCRHPORT2 : HCRHPORT1, RH_PS_PSS);
spin_unlock_irqrestore(&isp116x->lock, flags);
break; break;
case USB_PORT_FEAT_POWER: case USB_PORT_FEAT_POWER:
DBG("USB_PORT_FEAT_POWER\n"); DBG("USB_PORT_FEAT_POWER\n");
spin_lock_irqsave(&isp116x->lock, flags); spin_lock_irqsave(&isp116x->lock, flags);
isp116x_write_reg32(isp116x, wIndex isp116x_write_reg32(isp116x, wIndex
? HCRHPORT2 : HCRHPORT1, RH_PS_PPS); ? HCRHPORT2 : HCRHPORT1, RH_PS_PPS);
spin_unlock_irqrestore(&isp116x->lock, flags);
break; break;
case USB_PORT_FEAT_RESET: case USB_PORT_FEAT_RESET:
DBG("USB_PORT_FEAT_RESET\n"); DBG("USB_PORT_FEAT_RESET\n");
root_port_reset(isp116x, wIndex); root_port_reset(isp116x, wIndex);
spin_lock_irqsave(&isp116x->lock, flags);
break; break;
default: default:
goto error; goto error;
} }
isp116x->rhport[wIndex] =
isp116x_read_reg32(isp116x, wIndex ? HCRHPORT2 : HCRHPORT1);
spin_unlock_irqrestore(&isp116x->lock, flags);
break; break;
default: default:
......
...@@ -270,7 +270,6 @@ struct isp116x { ...@@ -270,7 +270,6 @@ struct isp116x {
u32 rhdesca; u32 rhdesca;
u32 rhdescb; u32 rhdescb;
u32 rhstatus; u32 rhstatus;
u32 rhport[2];
/* async schedule: control, bulk */ /* async schedule: control, bulk */
struct list_head async; struct list_head async;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment