|
@@ -133,6 +133,9 @@ static void scx200_acb_machine(struct scx200_acb_iface *iface, u8 status)
|
|
|
|
|
|
outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1);
|
|
|
outb(ACBST_STASTR | ACBST_NEGACK, ACBST);
|
|
|
+
|
|
|
+ /* Reset the status register */
|
|
|
+ outb(0, ACBST);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -228,6 +231,10 @@ static void scx200_acb_poll(struct scx200_acb_iface *iface)
|
|
|
timeout = jiffies + POLL_TIMEOUT;
|
|
|
while (time_before(jiffies, timeout)) {
|
|
|
status = inb(ACBST);
|
|
|
+
|
|
|
+ /* Reset the status register to avoid the hang */
|
|
|
+ outb(0, ACBST);
|
|
|
+
|
|
|
if ((status & (ACBST_SDAST|ACBST_BER|ACBST_NEGACK)) != 0) {
|
|
|
scx200_acb_machine(iface, status);
|
|
|
return;
|