[PATCH] parport: phase fixes

Did not move the parport interface properly into IEEE1284_PH_REV_IDLE phase at
end of data due to comparing bytes with nibbles.  Internal phase
IEEE1284_PH_HBUSY_DNA became unused, so remove it.

Signed-off-by: Marko Kohtala <marko.kohtala@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Marko Kohtala
2006-01-06 00:19:44 -08:00
committad av Linus Torvalds
förälder c660629059
incheckning 742ec650e9
3 ändrade filer med 42 tillägg och 51 borttagningar

Visa fil

@@ -165,17 +165,7 @@ size_t parport_ieee1284_read_nibble (struct parport *port,
/* Does the error line indicate end of data? */
if (((i & 1) == 0) &&
(parport_read_status(port) & PARPORT_STATUS_ERROR)) {
port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
DPRINTK (KERN_DEBUG
"%s: No more nibble data (%d bytes)\n",
port->name, i/2);
/* Go to reverse idle phase. */
parport_frob_control (port,
PARPORT_CONTROL_AUTOFD,
PARPORT_CONTROL_AUTOFD);
port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE;
break;
goto end_of_data;
}
/* Event 7: Set nAutoFd low. */
@@ -225,18 +215,25 @@ size_t parport_ieee1284_read_nibble (struct parport *port,
byte = nibble;
}
i /= 2; /* i is now in bytes */
if (i == len) {
/* Read the last nibble without checking data avail. */
port = port->physport;
if (parport_read_status (port) & PARPORT_STATUS_ERROR)
port->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
if (parport_read_status (port) & PARPORT_STATUS_ERROR) {
end_of_data:
DPRINTK (KERN_DEBUG
"%s: No more nibble data (%d bytes)\n",
port->name, i/2);
/* Go to reverse idle phase. */
parport_frob_control (port,
PARPORT_CONTROL_AUTOFD,
PARPORT_CONTROL_AUTOFD);
port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE;
}
else
port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
}
return i;
return i/2;
#endif /* IEEE1284 support */
}
@@ -256,17 +253,7 @@ size_t parport_ieee1284_read_byte (struct parport *port,
/* Data available? */
if (parport_read_status (port) & PARPORT_STATUS_ERROR) {
port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
DPRINTK (KERN_DEBUG
"%s: No more byte data (%Zd bytes)\n",
port->name, count);
/* Go to reverse idle phase. */
parport_frob_control (port,
PARPORT_CONTROL_AUTOFD,
PARPORT_CONTROL_AUTOFD);
port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE;
break;
goto end_of_data;
}
/* Event 14: Place data bus in high impedance state. */
@@ -318,11 +305,20 @@ size_t parport_ieee1284_read_byte (struct parport *port,
if (count == len) {
/* Read the last byte without checking data avail. */
port = port->physport;
if (parport_read_status (port) & PARPORT_STATUS_ERROR)
port->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
if (parport_read_status (port) & PARPORT_STATUS_ERROR) {
end_of_data:
DPRINTK (KERN_DEBUG
"%s: No more byte data (%Zd bytes)\n",
port->name, count);
/* Go to reverse idle phase. */
parport_frob_control (port,
PARPORT_CONTROL_AUTOFD,
PARPORT_CONTROL_AUTOFD);
port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE;
}
else
port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
}
return count;