summaryrefslogtreecommitdiffstats
path: root/include/linux/parport_pc.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1999-12-04 03:58:56 +0000
committerRalf Baechle <ralf@linux-mips.org>1999-12-04 03:58:56 +0000
commit1d67e90f19a7acfd9a05dc59678e7d0c5090bd0d (patch)
tree357efc7b93f8f5102110d20d293f41360ec212fc /include/linux/parport_pc.h
parentaea27b2e18d69af87e673972246e66657b4fa274 (diff)
Merge with Linux 2.3.21.
Diffstat (limited to 'include/linux/parport_pc.h')
-rw-r--r--include/linux/parport_pc.h69
1 files changed, 45 insertions, 24 deletions
diff --git a/include/linux/parport_pc.h b/include/linux/parport_pc.h
index a8c67bc9d..6898c4e5f 100644
--- a/include/linux/parport_pc.h
+++ b/include/linux/parport_pc.h
@@ -41,33 +41,50 @@ struct parport_pc_private {
extern __inline__ void parport_pc_write_data(struct parport *p, unsigned char d)
{
+#ifdef DEBUG_PARPORT
+ printk (KERN_DEBUG "parport_pc_write_data(%p,0x%02x)\n", p, d);
+#endif
outb(d, DATA(p));
}
extern __inline__ unsigned char parport_pc_read_data(struct parport *p)
{
- return inb(DATA(p));
+ unsigned char val = inb (DATA (p));
+#ifdef DEBUG_PARPORT
+ printk (KERN_DEBUG "parport_pc_read_data(%p) = 0x%02x\n",
+ p, val);
+#endif
+ return val;
}
-extern __inline__ unsigned char __frob_control (struct parport *p,
- unsigned char mask,
- unsigned char val)
+/* __parport_pc_frob_control differs from parport_pc_frob_control in that
+ * it doesn't do any extra masking. */
+static __inline__ unsigned char __parport_pc_frob_control (struct parport *p,
+ unsigned char mask,
+ unsigned char val)
{
- const unsigned char wm = (PARPORT_CONTROL_STROBE |
- PARPORT_CONTROL_AUTOFD |
- PARPORT_CONTROL_INIT |
- PARPORT_CONTROL_SELECT);
struct parport_pc_private *priv = p->physport->private_data;
unsigned char ctr = priv->ctr;
+#ifdef DEBUG_PARPORT
+ printk (KERN_DEBUG
+ "__parport_pc_frob_control(%02x,%02x): %02x -> %02x\n",
+ mask, val, ctr, ((ctr & ~mask) ^ val) & priv->ctr_writable);
+#endif
ctr = (ctr & ~mask) ^ val;
ctr &= priv->ctr_writable; /* only write writable bits. */
outb (ctr, CONTROL (p));
- return priv->ctr = ctr & wm; /* update soft copy */
+ priv->ctr = ctr; /* Update soft copy */
+ return ctr;
}
extern __inline__ void parport_pc_data_reverse (struct parport *p)
{
- __frob_control (p, 0x20, 0x20);
+ __parport_pc_frob_control (p, 0x20, 0x20);
+}
+
+extern __inline__ void parport_pc_data_forward (struct parport *p)
+{
+ __parport_pc_frob_control (p, 0x20, 0x00);
}
extern __inline__ void parport_pc_write_control (struct parport *p,
@@ -80,18 +97,22 @@ extern __inline__ void parport_pc_write_control (struct parport *p,
/* Take this out when drivers have adapted to newer interface. */
if (d & 0x20) {
- printk (KERN_DEBUG "%s (%s): use data_reverse for this!\n",
- p->name, p->cad->name);
- parport_pc_data_reverse (p);
+ printk (KERN_DEBUG "%s (%s): use data_reverse for this!\n",
+ p->name, p->cad->name);
+ parport_pc_data_reverse (p);
}
- __frob_control (p, wm, d & wm);
+ __parport_pc_frob_control (p, wm, d & wm);
}
extern __inline__ unsigned char parport_pc_read_control(struct parport *p)
{
+ const unsigned char rm = (PARPORT_CONTROL_STROBE |
+ PARPORT_CONTROL_AUTOFD |
+ PARPORT_CONTROL_INIT |
+ PARPORT_CONTROL_SELECT);
const struct parport_pc_private *priv = p->physport->private_data;
- return priv->ctr; /* Use soft copy */
+ return priv->ctr & rm; /* Use soft copy */
}
extern __inline__ unsigned char parport_pc_frob_control (struct parport *p,
@@ -105,16 +126,20 @@ extern __inline__ unsigned char parport_pc_frob_control (struct parport *p,
/* Take this out when drivers have adapted to newer interface. */
if (mask & 0x20) {
- printk (KERN_DEBUG "%s (%s): use data_reverse for this!\n",
- p->name, p->cad->name);
+ printk (KERN_DEBUG "%s (%s): use data_%s for this!\n",
+ p->name, p->cad->name,
+ (val & 0x20) ? "reverse" : "forward");
+ if (val & 0x20)
parport_pc_data_reverse (p);
+ else
+ parport_pc_data_forward (p);
}
/* Restrict mask and val to control lines. */
mask &= wm;
val &= wm;
- return __frob_control (p, mask, val);
+ return __parport_pc_frob_control (p, mask, val);
}
extern __inline__ unsigned char parport_pc_read_status(struct parport *p)
@@ -122,19 +147,15 @@ extern __inline__ unsigned char parport_pc_read_status(struct parport *p)
return inb(STATUS(p));
}
-extern __inline__ void parport_pc_data_forward (struct parport *p)
-{
- __frob_control (p, 0x20, 0x00);
-}
extern __inline__ void parport_pc_disable_irq(struct parport *p)
{
- __frob_control (p, 0x10, 0x00);
+ __parport_pc_frob_control (p, 0x10, 0x00);
}
extern __inline__ void parport_pc_enable_irq(struct parport *p)
{
- __frob_control (p, 0x10, 0x10);
+ __parport_pc_frob_control (p, 0x10, 0x10);
}
extern void parport_pc_release_resources(struct parport *p);