|
@@ -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;
|