I think that the recent changes (in 2.4.18pre2) in
parport code broke the PLIP code. I will undo the
changes in parport.c and test tomorow so hopefully I
will follow up with much more information in case my
hunch misguides me or an explicit modification which
triggers the problem for my setup.
In the mean time may I ask:
Is this already known? Should I address to a different
list/person?
I am not subscribed to the list but I will read any
answers from the WWW archives.
Thank you for your time
.Bill
__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/
Hi Marcelo,
This patch from Niels fixes the problem with PLIP.
Tim.
*/
--- linux/drivers/parport/parport_pc.c.ecr2 Sun Jan 13 12:44:52 2002
+++ linux/drivers/parport/parport_pc.c Sun Jan 13 12:45:08 2002
@@ -128,7 +128,6 @@
static int change_mode(struct parport *p, int m)
{
const struct parport_pc_private *priv = p->physport->private_data;
- int ecr = ECONTROL(p);
unsigned char oecr;
int mode;
@@ -140,7 +139,7 @@
}
/* Bits <7:5> contain the mode. */
- oecr = inb (ecr);
+ oecr = inb (ECONTROL (p));
mode = (oecr >> 5) & 0x7;
if (mode == m) return 0;
@@ -631,7 +630,7 @@
/* FIFO is full. Wait for interrupt. */
/* Clear serviceIntr */
- outb (ecrval & ~(1<<2), ECONTROL (port));
+ ECR_WRITE (port, ecrval & ~(1<<2));
false_alarm:
ret = parport_wait_event (port, HZ);
if (ret < 0) break;
@@ -859,7 +858,7 @@
printk (KERN_DEBUG "%s: FIFO is stuck\n", port->name);
/* Prevent further data transfer. */
- frob_econtrol (port, 0xe0, ECR_TST << 5);
+ frob_set_mode (port, ECR_TST);
/* Adjust for the contents of the FIFO. */
for (written -= priv->fifo_depth; ; written++) {
@@ -956,7 +955,7 @@
printk (KERN_DEBUG "%s: FIFO is stuck\n", port->name);
/* Prevent further data transfer. */
- frob_econtrol (port, 0xe0, ECR_TST << 5);
+ frob_set_mode (port, ECR_TST);
/* Adjust for the contents of the FIFO. */
for (written -= priv->fifo_depth; ; written++) {
@@ -1135,7 +1134,7 @@
}
/* Clear serviceIntr */
- outb (ecrval & ~(1<<2), ECONTROL (port));
+ ECR_WRITE (port, ecrval & ~(1<<2));
false_alarm:
dump_parport_state ("waiting", port);
ret = parport_wait_event (port, HZ);
@@ -1738,7 +1737,7 @@
if ((inb (ECONTROL (pb)) & 0x3 ) != 0x1)
goto no_reg;
- outb (0x34, ECONTROL (pb));
+ ECR_WRITE (pb, 0x34);
if (inb (ECONTROL (pb)) != 0x35)
goto no_reg;
@@ -1816,8 +1815,8 @@
return 0;
/* Find out FIFO depth */
- frob_set_mode (pb, ECR_SPP); /* Reset FIFO */
- frob_set_mode (pb, ECR_TST); /* TEST FIFO */
+ ECR_WRITE (pb, ECR_SPP << 5); /* Reset FIFO */
+ ECR_WRITE (pb, ECR_TST << 5); /* TEST FIFO */
for (i=0; i < 1024 && !(inb (ECONTROL (pb)) & 0x02); i++)
outb (0xaa, FIFO (pb));
@@ -1826,7 +1825,7 @@
* it doesn't support ECP or FIFO MODE
*/
if (i == 1024) {
- frob_set_mode (pb, ECR_SPP);
+ ECR_WRITE (pb, ECR_SPP << 5);
return 0;
}
@@ -1877,8 +1876,8 @@
priv->readIntrThreshold = i;
- frob_set_mode (pb, ECR_SPP); /* Reset FIFO */
- outb (0xf4, ECONTROL (pb)); /* Configuration mode */
+ ECR_WRITE (pb, ECR_SPP << 5); /* Reset FIFO */
+ ECR_WRITE (pb, 0xf4); /* Configuration mode */
config = inb (CONFIGA (pb));
pword = (config >> 4) & 0x7;
switch (pword) {
@@ -1939,7 +1938,7 @@
return 0;
oecr = inb (ECONTROL (pb));
- frob_set_mode (pb, ECR_PS2);
+ ECR_WRITE (pb, ECR_PS2 << 5);
result = parport_PS2_supported(pb);
ECR_WRITE (pb, oecr);
return result;
@@ -1972,8 +1971,8 @@
/* Check for Intel bug. */
if (priv->ecr) {
unsigned char i;
- for (i = 0; i < 4; i++) {
- frob_set_mode (pb, i);
+ for (i = 0x00; i < 0x80; i += 0x20) {
+ ECR_WRITE (pb, i);
if (clear_epp_timeout (pb)) {
/* Phony EPP in ECP. */
return 0;
@@ -2004,7 +2003,7 @@
oecr = inb (ECONTROL (pb));
/* Search for SMC style EPP+ECP mode */
- frob_set_mode (pb, ECR_EPP);
+ ECR_WRITE (pb, 0x80);
outb (0x04, CONTROL (pb));
result = parport_EPP_supported(pb);
@@ -2045,7 +2044,7 @@
PARPORT_IRQ_NONE, 7, 9, 10, 11, 14, 15, 5
};
- frob_set_mode (pb, ECR_CNF); /* Configuration MODE */
+ ECR_WRITE (pb, ECR_CNF << 5); /* Configuration MODE */
intrLine = (inb (CONFIGB (pb)) >> 3) & 0x07;
irq = lookup[intrLine];
@@ -2062,16 +2061,16 @@
sti();
irqs = probe_irq_on();
- frob_set_mode (pb, ECR_SPP); /* Reset FIFO */
- frob_econtrol (pb, ECR_MODE_MASK | 0x04, (ECR_TST << 5) | 0x04);
- frob_set_mode (pb, ECR_TST);
+ ECR_WRITE (pb, ECR_SPP << 5); /* Reset FIFO */
+ ECR_WRITE (pb, (ECR_TST << 5) | 0x04);
+ ECR_WRITE (pb, ECR_TST << 5);
/* If Full FIFO sure that writeIntrThreshold is generated */
for (i=0; i < 1024 && !(inb (ECONTROL (pb)) & 0x02) ; i++)
outb (0xaa, FIFO (pb));
pb->irq = probe_irq_off(irqs);
- frob_set_mode (pb, ECR_SPP);
+ ECR_WRITE (pb, ECR_SPP << 5);
if (pb->irq <= 0)
pb->irq = PARPORT_IRQ_NONE;
--- linux/drivers/parport/ChangeLog.ecr2 Sun Jan 13 12:44:52 2002
+++ linux/drivers/parport/ChangeLog Sun Jan 13 12:45:08 2002
@@ -1,3 +1,8 @@
+2002-01-13 Niels Kristian Bech Jensen <[email protected]>
+
+ * parport_pc.c: Change some occurrences of frob_set_mode to
+ ECR_WRITE. This fixes PLIP.
+
2002-01-04 Tim Waugh <[email protected]>
* share.c (parport_claim_or_block): Sleep interruptibly to prevent