parport_pc: Coding style
Michael's patch fixed some of the coding style so the style is now inconsistent. Sort the rest out Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
@@ -56,10 +56,10 @@
|
|||||||
#include <linux/pnp.h>
|
#include <linux/pnp.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/sysctl.h>
|
#include <linux/sysctl.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/dma.h>
|
#include <asm/dma.h>
|
||||||
#include <asm/uaccess.h>
|
|
||||||
|
|
||||||
#include <linux/parport.h>
|
#include <linux/parport.h>
|
||||||
#include <linux/parport_pc.h>
|
#include <linux/parport_pc.h>
|
||||||
@@ -123,7 +123,7 @@ static void frob_econtrol (struct parport *pb, unsigned char m,
|
|||||||
outb((ectr & ~m) ^ v, ECONTROL(pb));
|
outb((ectr & ~m) ^ v, ECONTROL(pb));
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline__ void frob_set_mode (struct parport *p, int mode)
|
static inline void frob_set_mode(struct parport *p, int mode)
|
||||||
{
|
{
|
||||||
frob_econtrol(p, ECR_MODE_MASK, mode << 5);
|
frob_econtrol(p, ECR_MODE_MASK, mode << 5);
|
||||||
}
|
}
|
||||||
@@ -151,7 +151,8 @@ static int change_mode(struct parport *p, int m)
|
|||||||
/* Bits <7:5> contain the mode. */
|
/* Bits <7:5> contain the mode. */
|
||||||
oecr = inb(ECONTROL(p));
|
oecr = inb(ECONTROL(p));
|
||||||
mode = (oecr >> 5) & 0x7;
|
mode = (oecr >> 5) & 0x7;
|
||||||
if (mode == m) return 0;
|
if (mode == m)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (mode >= 2 && !(priv->ctr & 0x20)) {
|
if (mode >= 2 && !(priv->ctr & 0x20)) {
|
||||||
/* This mode resets the FIFO, so we may
|
/* This mode resets the FIFO, so we may
|
||||||
@@ -165,7 +166,8 @@ static int change_mode(struct parport *p, int m)
|
|||||||
for (counter = 0; counter < 40; counter++) {
|
for (counter = 0; counter < 40; counter++) {
|
||||||
if (inb(ECONTROL(p)) & 0x01)
|
if (inb(ECONTROL(p)) & 0x01)
|
||||||
break;
|
break;
|
||||||
if (signal_pending (current)) break;
|
if (signal_pending(current))
|
||||||
|
break;
|
||||||
udelay(5);
|
udelay(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,7 +176,8 @@ static int change_mode(struct parport *p, int m)
|
|||||||
if (time_after_eq(jiffies, expire))
|
if (time_after_eq(jiffies, expire))
|
||||||
/* The FIFO is stuck. */
|
/* The FIFO is stuck. */
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
schedule_timeout_interruptible(msecs_to_jiffies(10));
|
schedule_timeout_interruptible(
|
||||||
|
msecs_to_jiffies(10));
|
||||||
if (signal_pending(current))
|
if (signal_pending(current))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -235,7 +238,9 @@ static int get_fifo_residue (struct parport *p)
|
|||||||
/* Back to PS2 mode. */
|
/* Back to PS2 mode. */
|
||||||
frob_set_mode(p, ECR_PS2);
|
frob_set_mode(p, ECR_PS2);
|
||||||
|
|
||||||
DPRINTK (KERN_DEBUG "*** get_fifo_residue: done residue collecting (ecr = 0x%2.2x)\n", inb (ECONTROL (p)));
|
DPRINTK(KERN_DEBUG
|
||||||
|
"*** get_fifo_residue: done residue collecting (ecr = 0x%2.2x)\n",
|
||||||
|
inb(ECONTROL(p)));
|
||||||
return residue;
|
return residue;
|
||||||
}
|
}
|
||||||
#endif /* 0 */
|
#endif /* 0 */
|
||||||
@@ -272,7 +277,8 @@ static int clear_epp_timeout(struct parport *pb)
|
|||||||
* of these are in parport_pc.h.
|
* of these are in parport_pc.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void parport_pc_init_state(struct pardevice *dev, struct parport_state *s)
|
static void parport_pc_init_state(struct pardevice *dev,
|
||||||
|
struct parport_state *s)
|
||||||
{
|
{
|
||||||
s->u.pc.ctr = 0xc;
|
s->u.pc.ctr = 0xc;
|
||||||
if (dev->irq_func &&
|
if (dev->irq_func &&
|
||||||
@@ -292,7 +298,8 @@ static void parport_pc_save_state(struct parport *p, struct parport_state *s)
|
|||||||
s->u.pc.ecr = inb(ECONTROL(p));
|
s->u.pc.ecr = inb(ECONTROL(p));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parport_pc_restore_state(struct parport *p, struct parport_state *s)
|
static void parport_pc_restore_state(struct parport *p,
|
||||||
|
struct parport_state *s)
|
||||||
{
|
{
|
||||||
struct parport_pc_private *priv = p->physport->private_data;
|
struct parport_pc_private *priv = p->physport->private_data;
|
||||||
register unsigned char c = s->u.pc.ctr & priv->ctr_writable;
|
register unsigned char c = s->u.pc.ctr & priv->ctr_writable;
|
||||||
@@ -318,14 +325,13 @@ static size_t parport_pc_epp_read_data (struct parport *port, void *buf,
|
|||||||
*/
|
*/
|
||||||
status = inb(STATUS(port));
|
status = inb(STATUS(port));
|
||||||
|
|
||||||
while (!(status & 0x08) && (got < length)) {
|
while (!(status & 0x08) && got < length) {
|
||||||
if ((left >= 16) && (status & 0x20) && !(status & 0x08)) {
|
if (left >= 16 && (status & 0x20) && !(status & 0x08)) {
|
||||||
/* can grab 16 bytes from warp fifo */
|
/* can grab 16 bytes from warp fifo */
|
||||||
if (!((long)buf & 0x03)) {
|
if (!((long)buf & 0x03))
|
||||||
insl(EPPDATA(port), buf, 4);
|
insl(EPPDATA(port), buf, 4);
|
||||||
} else {
|
else
|
||||||
insb(EPPDATA(port), buf, 16);
|
insb(EPPDATA(port), buf, 16);
|
||||||
}
|
|
||||||
buf += 16;
|
buf += 16;
|
||||||
got += 16;
|
got += 16;
|
||||||
left -= 16;
|
left -= 16;
|
||||||
@@ -339,19 +345,18 @@ static size_t parport_pc_epp_read_data (struct parport *port, void *buf,
|
|||||||
status = inb(STATUS(port));
|
status = inb(STATUS(port));
|
||||||
if (status & 0x01) {
|
if (status & 0x01) {
|
||||||
/* EPP timeout should never occur... */
|
/* EPP timeout should never occur... */
|
||||||
printk (KERN_DEBUG "%s: EPP timeout occurred while talking to "
|
printk(KERN_DEBUG
|
||||||
"w91284pic (should not have done)\n", port->name);
|
"%s: EPP timeout occurred while talking to w91284pic (should not have done)\n", port->name);
|
||||||
clear_epp_timeout(port);
|
clear_epp_timeout(port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return got;
|
return got;
|
||||||
}
|
}
|
||||||
if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
|
if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
|
||||||
if (!(((long)buf | length) & 0x03)) {
|
if (!(((long)buf | length) & 0x03))
|
||||||
insl(EPPDATA(port), buf, (length >> 2));
|
insl(EPPDATA(port), buf, (length >> 2));
|
||||||
} else {
|
else
|
||||||
insb(EPPDATA(port), buf, length);
|
insb(EPPDATA(port), buf, length);
|
||||||
}
|
|
||||||
if (inb(STATUS(port)) & 0x01) {
|
if (inb(STATUS(port)) & 0x01) {
|
||||||
clear_epp_timeout(port);
|
clear_epp_timeout(port);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@@ -377,11 +382,10 @@ static size_t parport_pc_epp_write_data (struct parport *port, const void *buf,
|
|||||||
size_t written = 0;
|
size_t written = 0;
|
||||||
|
|
||||||
if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
|
if ((flags & PARPORT_EPP_FAST) && (length > 1)) {
|
||||||
if (!(((long)buf | length) & 0x03)) {
|
if (!(((long)buf | length) & 0x03))
|
||||||
outsl(EPPDATA(port), buf, (length >> 2));
|
outsl(EPPDATA(port), buf, (length >> 2));
|
||||||
} else {
|
else
|
||||||
outsb(EPPDATA(port), buf, length);
|
outsb(EPPDATA(port), buf, length);
|
||||||
}
|
|
||||||
if (inb(STATUS(port)) & 0x01) {
|
if (inb(STATUS(port)) & 0x01) {
|
||||||
clear_epp_timeout(port);
|
clear_epp_timeout(port);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@@ -555,7 +559,8 @@ static size_t parport_pc_fifo_write_block_pio (struct parport *port,
|
|||||||
ECR_WRITE(port, ecrval & ~(1<<2));
|
ECR_WRITE(port, ecrval & ~(1<<2));
|
||||||
false_alarm:
|
false_alarm:
|
||||||
ret = parport_wait_event(port, HZ);
|
ret = parport_wait_event(port, HZ);
|
||||||
if (ret < 0) break;
|
if (ret < 0)
|
||||||
|
break;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if (!time_before(jiffies, expire)) {
|
if (!time_before(jiffies, expire)) {
|
||||||
/* Timed out. */
|
/* Timed out. */
|
||||||
@@ -589,7 +594,8 @@ static size_t parport_pc_fifo_write_block_pio (struct parport *port,
|
|||||||
left -= n;
|
left -= n;
|
||||||
|
|
||||||
/* Adjust the poll time. */
|
/* Adjust the poll time. */
|
||||||
if (i < (poll_for - 2)) poll_for--;
|
if (i < (poll_for - 2))
|
||||||
|
poll_for--;
|
||||||
continue;
|
continue;
|
||||||
} else if (i++ < poll_for) {
|
} else if (i++ < poll_for) {
|
||||||
udelay(10);
|
udelay(10);
|
||||||
@@ -602,7 +608,6 @@ static size_t parport_pc_fifo_write_block_pio (struct parport *port,
|
|||||||
outb(byte, fifo);
|
outb(byte, fifo);
|
||||||
left--;
|
left--;
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_parport_state("leave fifo_write_block_pio", port);
|
dump_parport_state("leave fifo_write_block_pio", port);
|
||||||
return length - left;
|
return length - left;
|
||||||
}
|
}
|
||||||
@@ -630,7 +635,8 @@ dump_parport_state ("enter fifo_write_block_dma", port);
|
|||||||
dma_addr = dma_handle = dma_map_single(dev, (void *)buf, length,
|
dma_addr = dma_handle = dma_map_single(dev, (void *)buf, length,
|
||||||
DMA_TO_DEVICE);
|
DMA_TO_DEVICE);
|
||||||
} else {
|
} else {
|
||||||
/* above 16 MB we use a bounce buffer as ISA-DMA is not possible */
|
/* above 16 MB we use a bounce buffer as ISA-DMA
|
||||||
|
is not possible */
|
||||||
maxlen = PAGE_SIZE; /* sizeof(priv->dma_buf) */
|
maxlen = PAGE_SIZE; /* sizeof(priv->dma_buf) */
|
||||||
dma_addr = priv->dma_handle;
|
dma_addr = priv->dma_handle;
|
||||||
dma_handle = 0;
|
dma_handle = 0;
|
||||||
@@ -676,12 +682,14 @@ dump_parport_state ("enter fifo_write_block_dma", port);
|
|||||||
/* assume DMA will be successful */
|
/* assume DMA will be successful */
|
||||||
left -= count;
|
left -= count;
|
||||||
buf += count;
|
buf += count;
|
||||||
if (dma_handle) dma_addr += count;
|
if (dma_handle)
|
||||||
|
dma_addr += count;
|
||||||
|
|
||||||
/* Wait for interrupt. */
|
/* Wait for interrupt. */
|
||||||
false_alarm:
|
false_alarm:
|
||||||
ret = parport_wait_event(port, HZ);
|
ret = parport_wait_event(port, HZ);
|
||||||
if (ret < 0) break;
|
if (ret < 0)
|
||||||
|
break;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if (!time_before(jiffies, expire)) {
|
if (!time_before(jiffies, expire)) {
|
||||||
/* Timed out. */
|
/* Timed out. */
|
||||||
@@ -712,7 +720,8 @@ dump_parport_state ("enter fifo_write_block_dma", port);
|
|||||||
/* update for possible DMA residue ! */
|
/* update for possible DMA residue ! */
|
||||||
buf -= count;
|
buf -= count;
|
||||||
left += count;
|
left += count;
|
||||||
if (dma_handle) dma_addr -= count;
|
if (dma_handle)
|
||||||
|
dma_addr -= count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Maybe got here through break, so adjust for DMA residue! */
|
/* Maybe got here through break, so adjust for DMA residue! */
|
||||||
@@ -763,7 +772,9 @@ static size_t parport_pc_compat_write_block_pio (struct parport *port,
|
|||||||
parport_pc_data_forward(port); /* Must be in PS2 mode */
|
parport_pc_data_forward(port); /* Must be in PS2 mode */
|
||||||
parport_pc_frob_control(port, PARPORT_CONTROL_STROBE, 0);
|
parport_pc_frob_control(port, PARPORT_CONTROL_STROBE, 0);
|
||||||
r = change_mode(port, ECR_PPF); /* Parallel port FIFO */
|
r = change_mode(port, ECR_PPF); /* Parallel port FIFO */
|
||||||
if (r) printk (KERN_DEBUG "%s: Warning change_mode ECR_PPF failed\n", port->name);
|
if (r)
|
||||||
|
printk(KERN_DEBUG "%s: Warning change_mode ECR_PPF failed\n",
|
||||||
|
port->name);
|
||||||
|
|
||||||
port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
|
port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
|
||||||
|
|
||||||
@@ -779,9 +790,8 @@ static size_t parport_pc_compat_write_block_pio (struct parport *port,
|
|||||||
do {
|
do {
|
||||||
/* Wait for the FIFO to empty */
|
/* Wait for the FIFO to empty */
|
||||||
r = change_mode(port, ECR_PS2);
|
r = change_mode(port, ECR_PS2);
|
||||||
if (r != -EBUSY) {
|
if (r != -EBUSY)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
} while (time_before(jiffies, expire));
|
} while (time_before(jiffies, expire));
|
||||||
if (r == -EBUSY) {
|
if (r == -EBUSY) {
|
||||||
|
|
||||||
@@ -859,7 +869,9 @@ static size_t parport_pc_ecp_write_block_pio (struct parport *port,
|
|||||||
PARPORT_CONTROL_AUTOFD,
|
PARPORT_CONTROL_AUTOFD,
|
||||||
0);
|
0);
|
||||||
r = change_mode(port, ECR_ECP); /* ECP FIFO */
|
r = change_mode(port, ECR_ECP); /* ECP FIFO */
|
||||||
if (r) printk (KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n", port->name);
|
if (r)
|
||||||
|
printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n",
|
||||||
|
port->name);
|
||||||
port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
|
port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
|
||||||
|
|
||||||
/* Write the data to the FIFO. */
|
/* Write the data to the FIFO. */
|
||||||
@@ -874,9 +886,8 @@ static size_t parport_pc_ecp_write_block_pio (struct parport *port,
|
|||||||
do {
|
do {
|
||||||
/* Wait for the FIFO to empty */
|
/* Wait for the FIFO to empty */
|
||||||
r = change_mode(port, ECR_PS2);
|
r = change_mode(port, ECR_PS2);
|
||||||
if (r != -EBUSY) {
|
if (r != -EBUSY)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
} while (time_before(jiffies, expire));
|
} while (time_before(jiffies, expire));
|
||||||
if (r == -EBUSY) {
|
if (r == -EBUSY) {
|
||||||
|
|
||||||
@@ -998,7 +1009,9 @@ dump_parport_state ("enter fcn", port);
|
|||||||
PARPORT_CONTROL_AUTOFD,
|
PARPORT_CONTROL_AUTOFD,
|
||||||
PARPORT_CONTROL_AUTOFD); */
|
PARPORT_CONTROL_AUTOFD); */
|
||||||
r = change_mode(port, ECR_ECP); /* ECP FIFO */
|
r = change_mode(port, ECR_ECP); /* ECP FIFO */
|
||||||
if (r) printk (KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n", port->name);
|
if (r)
|
||||||
|
printk(KERN_DEBUG "%s: Warning change_mode ECR_ECP failed\n",
|
||||||
|
port->name);
|
||||||
|
|
||||||
port->ieee1284.phase = IEEE1284_PH_REV_DATA;
|
port->ieee1284.phase = IEEE1284_PH_REV_DATA;
|
||||||
|
|
||||||
@@ -1021,7 +1034,8 @@ dump_parport_state ("43-44", port);
|
|||||||
0);
|
0);
|
||||||
dump_parport_state("pre 45", port);
|
dump_parport_state("pre 45", port);
|
||||||
/* Event 45: Wait for nAck to go high */
|
/* Event 45: Wait for nAck to go high */
|
||||||
/* r = parport_wait_peripheral (port, PARPORT_STATUS_ACK, PARPORT_STATUS_ACK); */
|
/* r = parport_wait_peripheral(port, PARPORT_STATUS_ACK,
|
||||||
|
PARPORT_STATUS_ACK); */
|
||||||
dump_parport_state("post 45", port);
|
dump_parport_state("post 45", port);
|
||||||
r = 0;
|
r = 0;
|
||||||
if (r) {
|
if (r) {
|
||||||
@@ -1069,7 +1083,8 @@ dump_parport_state ("FIFO empty", port);
|
|||||||
false_alarm:
|
false_alarm:
|
||||||
dump_parport_state("waiting", port);
|
dump_parport_state("waiting", port);
|
||||||
ret = parport_wait_event(port, HZ);
|
ret = parport_wait_event(port, HZ);
|
||||||
DPRINTK (KERN_DEBUG "parport_wait_event returned %d\n", ret);
|
DPRINTK(KERN_DEBUG "parport_wait_event returned %d\n",
|
||||||
|
ret);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@@ -1164,8 +1179,7 @@ dump_parport_state ("fwd idle", port);
|
|||||||
|
|
||||||
/* GCC is not inlining extern inline function later overwriten to non-inline,
|
/* GCC is not inlining extern inline function later overwriten to non-inline,
|
||||||
so we use outlined_ variants here. */
|
so we use outlined_ variants here. */
|
||||||
static const struct parport_operations parport_pc_ops =
|
static const struct parport_operations parport_pc_ops = {
|
||||||
{
|
|
||||||
.write_data = parport_pc_write_data,
|
.write_data = parport_pc_write_data,
|
||||||
.read_data = parport_pc_read_data,
|
.read_data = parport_pc_read_data,
|
||||||
|
|
||||||
@@ -1229,21 +1243,27 @@ static void __devinit show_parconfig_smsc37c669(int io, int key)
|
|||||||
outb(0xaa, io);
|
outb(0xaa, io);
|
||||||
|
|
||||||
if (verbose_probing) {
|
if (verbose_probing) {
|
||||||
printk (KERN_INFO "SMSC 37c669 LPT Config: cr_1=0x%02x, 4=0x%02x, "
|
printk(KERN_INFO
|
||||||
|
"SMSC 37c669 LPT Config: cr_1=0x%02x, 4=0x%02x, "
|
||||||
"A=0x%2x, 23=0x%02x, 26=0x%02x, 27=0x%02x\n",
|
"A=0x%2x, 23=0x%02x, 26=0x%02x, 27=0x%02x\n",
|
||||||
cr1, cr4, cra, cr23, cr26, cr27);
|
cr1, cr4, cra, cr23, cr26, cr27);
|
||||||
|
|
||||||
/* The documentation calls DMA and IRQ-Lines by letters, so
|
/* The documentation calls DMA and IRQ-Lines by letters, so
|
||||||
the board maker can/will wire them
|
the board maker can/will wire them
|
||||||
appropriately/randomly... G=reserved H=IDE-irq, */
|
appropriately/randomly... G=reserved H=IDE-irq, */
|
||||||
printk (KERN_INFO "SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, "
|
printk(KERN_INFO
|
||||||
"fifo threshold=%d\n", cr23*4,
|
"SMSC LPT Config: io=0x%04x, irq=%c, dma=%c, fifo threshold=%d\n",
|
||||||
|
cr23 * 4,
|
||||||
(cr27 & 0x0f) ? 'A' - 1 + (cr27 & 0x0f) : '-',
|
(cr27 & 0x0f) ? 'A' - 1 + (cr27 & 0x0f) : '-',
|
||||||
(cr26 &0x0f) ? 'A'-1+(cr26 &0x0f): '-', cra & 0x0f);
|
(cr26 & 0x0f) ? 'A' - 1 + (cr26 & 0x0f) : '-',
|
||||||
|
cra & 0x0f);
|
||||||
printk(KERN_INFO "SMSC LPT Config: enabled=%s power=%s\n",
|
printk(KERN_INFO "SMSC LPT Config: enabled=%s power=%s\n",
|
||||||
(cr23*4 >=0x100) ?"yes":"no", (cr1 & 4) ? "yes" : "no");
|
(cr23 * 4 >= 0x100) ? "yes" : "no",
|
||||||
printk(KERN_INFO "SMSC LPT Config: Port mode=%s, EPP version =%s\n",
|
(cr1 & 4) ? "yes" : "no");
|
||||||
(cr1 & 0x08 ) ? "Standard mode only (SPP)" : modes[cr4 & 0x03],
|
printk(KERN_INFO
|
||||||
|
"SMSC LPT Config: Port mode=%s, EPP version =%s\n",
|
||||||
|
(cr1 & 0x08) ? "Standard mode only (SPP)"
|
||||||
|
: modes[cr4 & 0x03],
|
||||||
(cr4 & 0x40) ? "1.7" : "1.9");
|
(cr4 & 0x40) ? "1.7" : "1.9");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1272,7 +1292,7 @@ static void __devinit show_parconfig_smsc37c669(int io, int key)
|
|||||||
superios[i].irq = 5;
|
superios[i].irq = 5;
|
||||||
}
|
}
|
||||||
d = (cr26 & 0x0f);
|
d = (cr26 & 0x0f);
|
||||||
if((d==1) || (d==3))
|
if (d == 1 || d == 3)
|
||||||
superios[i].dma = d;
|
superios[i].dma = d;
|
||||||
else
|
else
|
||||||
superios[i].dma = PARPORT_DMA_NONE;
|
superios[i].dma = PARPORT_DMA_NONE;
|
||||||
@@ -1319,17 +1339,20 @@ static void __devinit show_parconfig_winbond(int io, int key)
|
|||||||
outb(0xaa, io);
|
outb(0xaa, io);
|
||||||
|
|
||||||
if (verbose_probing) {
|
if (verbose_probing) {
|
||||||
printk(KERN_INFO "Winbond LPT Config: cr_30=%02x 60,61=%02x%02x "
|
printk(KERN_INFO
|
||||||
"70=%02x 74=%02x, f0=%02x\n", cr30,cr60,cr61,cr70,cr74,crf0);
|
"Winbond LPT Config: cr_30=%02x 60,61=%02x%02x 70=%02x 74=%02x, f0=%02x\n",
|
||||||
|
cr30, cr60, cr61, cr70, cr74, crf0);
|
||||||
printk(KERN_INFO "Winbond LPT Config: active=%s, io=0x%02x%02x irq=%d, ",
|
printk(KERN_INFO "Winbond LPT Config: active=%s, io=0x%02x%02x irq=%d, ",
|
||||||
(cr30 & 0x01) ? "yes" : "no", cr60, cr61, cr70 & 0x0f);
|
(cr30 & 0x01) ? "yes" : "no", cr60, cr61, cr70 & 0x0f);
|
||||||
if ((cr74 & 0x07) > 3)
|
if ((cr74 & 0x07) > 3)
|
||||||
printk("dma=none\n");
|
printk("dma=none\n");
|
||||||
else
|
else
|
||||||
printk("dma=%d\n", cr74 & 0x07);
|
printk("dma=%d\n", cr74 & 0x07);
|
||||||
printk(KERN_INFO "Winbond LPT Config: irqtype=%s, ECP fifo threshold=%d\n",
|
printk(KERN_INFO
|
||||||
|
"Winbond LPT Config: irqtype=%s, ECP fifo threshold=%d\n",
|
||||||
irqtypes[crf0>>7], (crf0>>3)&0x0f);
|
irqtypes[crf0>>7], (crf0>>3)&0x0f);
|
||||||
printk(KERN_INFO "Winbond LPT Config: Port mode=%s\n", modes[crf0 & 0x07]);
|
printk(KERN_INFO "Winbond LPT Config: Port mode=%s\n",
|
||||||
|
modes[crf0 & 0x07]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cr30 & 0x01) { /* the settings can be interrogated later ... */
|
if (cr30 & 0x01) { /* the settings can be interrogated later ... */
|
||||||
@@ -1346,7 +1369,8 @@ static void __devinit show_parconfig_winbond(int io, int key)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __devinit decode_winbond(int efer, int key, int devid, int devrev, int oldid)
|
static void __devinit decode_winbond(int efer, int key, int devid,
|
||||||
|
int devrev, int oldid)
|
||||||
{
|
{
|
||||||
const char *type = "unknown";
|
const char *type = "unknown";
|
||||||
int id, progif = 2;
|
int id, progif = 2;
|
||||||
@@ -1360,18 +1384,34 @@ static void __devinit decode_winbond(int efer, int key, int devid, int devrev, i
|
|||||||
|
|
||||||
/* Values are from public data sheets pdf files, I can just
|
/* Values are from public data sheets pdf files, I can just
|
||||||
confirm 83977TF is correct :-) */
|
confirm 83977TF is correct :-) */
|
||||||
if (id == 0x9771) type="83977F/AF";
|
if (id == 0x9771)
|
||||||
else if (id == 0x9773) type="83977TF / SMSC 97w33x/97w34x";
|
type = "83977F/AF";
|
||||||
else if (id == 0x9774) type="83977ATF";
|
else if (id == 0x9773)
|
||||||
else if ((id & ~0x0f) == 0x5270) type="83977CTF / SMSC 97w36x";
|
type = "83977TF / SMSC 97w33x/97w34x";
|
||||||
else if ((id & ~0x0f) == 0x52f0) type="83977EF / SMSC 97w35x";
|
else if (id == 0x9774)
|
||||||
else if ((id & ~0x0f) == 0x5210) type="83627";
|
type = "83977ATF";
|
||||||
else if ((id & ~0x0f) == 0x6010) type="83697HF";
|
else if ((id & ~0x0f) == 0x5270)
|
||||||
else if ((oldid &0x0f ) == 0x0a) { type="83877F"; progif=1;}
|
type = "83977CTF / SMSC 97w36x";
|
||||||
else if ((oldid &0x0f ) == 0x0b) { type="83877AF"; progif=1;}
|
else if ((id & ~0x0f) == 0x52f0)
|
||||||
else if ((oldid &0x0f ) == 0x0c) { type="83877TF"; progif=1;}
|
type = "83977EF / SMSC 97w35x";
|
||||||
else if ((oldid &0x0f ) == 0x0d) { type="83877ATF"; progif=1;}
|
else if ((id & ~0x0f) == 0x5210)
|
||||||
else progif=0;
|
type = "83627";
|
||||||
|
else if ((id & ~0x0f) == 0x6010)
|
||||||
|
type = "83697HF";
|
||||||
|
else if ((oldid & 0x0f) == 0x0a) {
|
||||||
|
type = "83877F";
|
||||||
|
progif = 1;
|
||||||
|
} else if ((oldid & 0x0f) == 0x0b) {
|
||||||
|
type = "83877AF";
|
||||||
|
progif = 1;
|
||||||
|
} else if ((oldid & 0x0f) == 0x0c) {
|
||||||
|
type = "83877TF";
|
||||||
|
progif = 1;
|
||||||
|
} else if ((oldid & 0x0f) == 0x0d) {
|
||||||
|
type = "83877ATF";
|
||||||
|
progif = 1;
|
||||||
|
} else
|
||||||
|
progif = 0;
|
||||||
|
|
||||||
if (verbose_probing)
|
if (verbose_probing)
|
||||||
printk(KERN_INFO "Winbond chip at EFER=0x%x key=0x%02x "
|
printk(KERN_INFO "Winbond chip at EFER=0x%x key=0x%02x "
|
||||||
@@ -1396,10 +1436,15 @@ static void __devinit decode_smsc(int efer, int key, int devid, int devrev)
|
|||||||
func = NULL;
|
func = NULL;
|
||||||
id = (devid << 8) | devrev;
|
id = (devid << 8) | devrev;
|
||||||
|
|
||||||
if (id==0x0302) {type="37c669"; func=show_parconfig_smsc37c669;}
|
if (id == 0x0302) {
|
||||||
else if (id==0x6582) type="37c665IR";
|
type = "37c669";
|
||||||
else if (devid==0x65) type="37c665GT";
|
func = show_parconfig_smsc37c669;
|
||||||
else if (devid==0x66) type="37c666GT";
|
} else if (id == 0x6582)
|
||||||
|
type = "37c665IR";
|
||||||
|
else if (devid == 0x65)
|
||||||
|
type = "37c665GT";
|
||||||
|
else if (devid == 0x66)
|
||||||
|
type = "37c666GT";
|
||||||
|
|
||||||
if (verbose_probing)
|
if (verbose_probing)
|
||||||
printk(KERN_INFO "SMSC chip at EFER=0x%x "
|
printk(KERN_INFO "SMSC chip at EFER=0x%x "
|
||||||
@@ -1470,7 +1515,7 @@ static void __devinit winbond_check2(int io,int key)
|
|||||||
oldid = inb(io + 2);
|
oldid = inb(io + 2);
|
||||||
outb(0xaa, io); /* Magic Seal */
|
outb(0xaa, io); /* Magic Seal */
|
||||||
|
|
||||||
if ((x_devid == devid) && (x_devrev == devrev) && (x_oldid == oldid))
|
if (x_devid == devid && x_devrev == devrev && x_oldid == oldid)
|
||||||
goto out; /* protection against false positives */
|
goto out; /* protection against false positives */
|
||||||
|
|
||||||
decode_winbond(io, key, devid, devrev, oldid);
|
decode_winbond(io, key, devid, devrev, oldid);
|
||||||
@@ -1508,8 +1553,8 @@ static void __devinit smsc_check(int io, int key)
|
|||||||
rev = inb(io + 1);
|
rev = inb(io + 1);
|
||||||
outb(0xaa, io); /* Magic Seal */
|
outb(0xaa, io); /* Magic Seal */
|
||||||
|
|
||||||
if ((x_id == id) && (x_oldrev == oldrev) &&
|
if (x_id == id && x_oldrev == oldrev &&
|
||||||
(x_oldid == oldid) && (x_rev == rev))
|
x_oldid == oldid && x_rev == rev)
|
||||||
goto out; /* protection against false positives */
|
goto out; /* protection against false positives */
|
||||||
|
|
||||||
decode_smsc(io, key, oldid, oldrev);
|
decode_smsc(io, key, oldid, oldrev);
|
||||||
@@ -1750,10 +1795,12 @@ static int parport_PS2_supported(struct parport *pb)
|
|||||||
parport_pc_data_reverse(pb);
|
parport_pc_data_reverse(pb);
|
||||||
|
|
||||||
parport_pc_write_data(pb, 0x55);
|
parport_pc_write_data(pb, 0x55);
|
||||||
if (parport_pc_read_data(pb) != 0x55) ok++;
|
if (parport_pc_read_data(pb) != 0x55)
|
||||||
|
ok++;
|
||||||
|
|
||||||
parport_pc_write_data(pb, 0xaa);
|
parport_pc_write_data(pb, 0xaa);
|
||||||
if (parport_pc_read_data(pb) != 0xaa) ok++;
|
if (parport_pc_read_data(pb) != 0xaa)
|
||||||
|
ok++;
|
||||||
|
|
||||||
/* cancel input mode */
|
/* cancel input mode */
|
||||||
parport_pc_data_forward(pb);
|
parport_pc_data_forward(pb);
|
||||||
@@ -1869,7 +1916,8 @@ static int parport_ECP_supported(struct parport *pb)
|
|||||||
priv->pword = pword;
|
priv->pword = pword;
|
||||||
|
|
||||||
if (verbose_probing) {
|
if (verbose_probing) {
|
||||||
printk (KERN_DEBUG "0x%lx: PWord is %d bits\n", pb->base, 8 * pword);
|
printk(KERN_DEBUG "0x%lx: PWord is %d bits\n",
|
||||||
|
pb->base, 8 * pword);
|
||||||
|
|
||||||
printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base,
|
printk(KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base,
|
||||||
config & 0x80 ? "Level" : "Pulses");
|
config & 0x80 ? "Level" : "Pulses");
|
||||||
@@ -1932,9 +1980,8 @@ static int parport_EPP_supported(struct parport *pb)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* If EPP timeout bit clear then EPP available */
|
/* If EPP timeout bit clear then EPP available */
|
||||||
if (!clear_epp_timeout(pb)) {
|
if (!clear_epp_timeout(pb))
|
||||||
return 0; /* No way to clear timeout */
|
return 0; /* No way to clear timeout */
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for Intel bug. */
|
/* Check for Intel bug. */
|
||||||
if (priv->ecr) {
|
if (priv->ecr) {
|
||||||
@@ -1965,9 +2012,8 @@ static int parport_ECPEPP_supported(struct parport *pb)
|
|||||||
int result;
|
int result;
|
||||||
unsigned char oecr;
|
unsigned char oecr;
|
||||||
|
|
||||||
if (!priv->ecr) {
|
if (!priv->ecr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
oecr = inb(ECONTROL(pb));
|
oecr = inb(ECONTROL(pb));
|
||||||
/* Search for SMC style EPP+ECP mode */
|
/* Search for SMC style EPP+ECP mode */
|
||||||
@@ -1993,11 +2039,25 @@ static int parport_ECPEPP_supported(struct parport *pb)
|
|||||||
/* Don't bother probing for modes we know we won't use. */
|
/* Don't bother probing for modes we know we won't use. */
|
||||||
static int __devinit parport_PS2_supported(struct parport *pb) { return 0; }
|
static int __devinit parport_PS2_supported(struct parport *pb) { return 0; }
|
||||||
#ifdef CONFIG_PARPORT_PC_FIFO
|
#ifdef CONFIG_PARPORT_PC_FIFO
|
||||||
static int parport_ECP_supported(struct parport *pb) { return 0; }
|
static int parport_ECP_supported(struct parport *pb)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
static int __devinit parport_EPP_supported(struct parport *pb) { return 0; }
|
static int __devinit parport_EPP_supported(struct parport *pb)
|
||||||
static int __devinit parport_ECPEPP_supported(struct parport *pb){return 0;}
|
{
|
||||||
static int __devinit parport_ECPPS2_supported(struct parport *pb){return 0;}
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __devinit parport_ECPEPP_supported(struct parport *pb)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __devinit parport_ECPPS2_supported(struct parport *pb)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* No IEEE 1284 support */
|
#endif /* No IEEE 1284 support */
|
||||||
|
|
||||||
@@ -2155,8 +2215,8 @@ static int programmable_dma_support (struct parport *p)
|
|||||||
static int parport_dma_probe(struct parport *p)
|
static int parport_dma_probe(struct parport *p)
|
||||||
{
|
{
|
||||||
const struct parport_pc_private *priv = p->private_data;
|
const struct parport_pc_private *priv = p->private_data;
|
||||||
if (priv->ecr)
|
if (priv->ecr) /* ask ECP chipset first */
|
||||||
p->dma = programmable_dma_support(p); /* ask ECP chipset first */
|
p->dma = programmable_dma_support(p);
|
||||||
if (p->dma == PARPORT_DMA_NONE) {
|
if (p->dma == PARPORT_DMA_NONE) {
|
||||||
/* ask known Super-IO chips proper, although these
|
/* ask known Super-IO chips proper, although these
|
||||||
claim ECP compatible, some don't report their DMA
|
claim ECP compatible, some don't report their DMA
|
||||||
@@ -2290,16 +2350,23 @@ struct parport *parport_pc_probe_port(unsigned long int base,
|
|||||||
if (p->dma != PARPORT_DMA_NONE) {
|
if (p->dma != PARPORT_DMA_NONE) {
|
||||||
printk(", dma %d", p->dma);
|
printk(", dma %d", p->dma);
|
||||||
p->modes |= PARPORT_MODE_DMA;
|
p->modes |= PARPORT_MODE_DMA;
|
||||||
}
|
} else
|
||||||
else printk(", using FIFO");
|
printk(", using FIFO");
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
/* We can't use the DMA channel after all. */
|
/* We can't use the DMA channel after all. */
|
||||||
p->dma = PARPORT_DMA_NONE;
|
p->dma = PARPORT_DMA_NONE;
|
||||||
#endif /* Allowed to use FIFO/DMA */
|
#endif /* Allowed to use FIFO/DMA */
|
||||||
|
|
||||||
printk(" [");
|
printk(" [");
|
||||||
#define printmode(x) {if(p->modes&PARPORT_MODE_##x){printk("%s%s",f?",":"",#x);f++;}}
|
|
||||||
|
#define printmode(x) \
|
||||||
|
{\
|
||||||
|
if (p->modes & PARPORT_MODE_##x) {\
|
||||||
|
printk("%s%s", f ? "," : "", #x);\
|
||||||
|
f++;\
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
int f = 0;
|
int f = 0;
|
||||||
printmode(PCSPP);
|
printmode(PCSPP);
|
||||||
@@ -2403,7 +2470,6 @@ out1:
|
|||||||
platform_device_unregister(pdev);
|
platform_device_unregister(pdev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(parport_pc_probe_port);
|
EXPORT_SYMBOL(parport_pc_probe_port);
|
||||||
|
|
||||||
void parport_pc_unregister_port(struct parport *p)
|
void parport_pc_unregister_port(struct parport *p)
|
||||||
@@ -2436,7 +2502,6 @@ void parport_pc_unregister_port (struct parport *p)
|
|||||||
parport_put_port(p);
|
parport_put_port(p);
|
||||||
kfree(ops); /* hope no-one cached it */
|
kfree(ops); /* hope no-one cached it */
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(parport_pc_unregister_port);
|
EXPORT_SYMBOL(parport_pc_unregister_port);
|
||||||
|
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
@@ -2456,7 +2521,7 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
|
|
||||||
DPRINTK(KERN_DEBUG "sio_ite_8872_probe()\n");
|
DPRINTK(KERN_DEBUG "sio_ite_8872_probe()\n");
|
||||||
|
|
||||||
// make sure which one chip
|
/* make sure which one chip */
|
||||||
for (i = 0; i < 5; i++) {
|
for (i = 0; i < 5; i++) {
|
||||||
base_res = request_region(inta_addr[i], 32, "it887x");
|
base_res = request_region(inta_addr[i], 32, "it887x");
|
||||||
if (base_res) {
|
if (base_res) {
|
||||||
@@ -2466,7 +2531,8 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
pci_write_config_dword(pdev, 0x78,
|
pci_write_config_dword(pdev, 0x78,
|
||||||
0x00000000 | inta_addr[i]);
|
0x00000000 | inta_addr[i]);
|
||||||
test = inb(inta_addr[i]);
|
test = inb(inta_addr[i]);
|
||||||
if (test != 0xff) break;
|
if (test != 0xff)
|
||||||
|
break;
|
||||||
release_region(inta_addr[i], 0x8);
|
release_region(inta_addr[i], 0x8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2512,8 +2578,8 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
pci_write_config_dword(pdev, 0x6c, 0xe3000000 | ite8872_lpt);
|
pci_write_config_dword(pdev, 0x6c, 0xe3000000 | ite8872_lpt);
|
||||||
pci_write_config_dword(pdev, 0x70, 0xe3000000 | ite8872_lpthi);
|
pci_write_config_dword(pdev, 0x70, 0xe3000000 | ite8872_lpthi);
|
||||||
pci_write_config_dword(pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt);
|
pci_write_config_dword(pdev, 0x80, (ite8872_lpthi<<16) | ite8872_lpt);
|
||||||
// SET SPP&EPP , Parallel Port NO DMA , Enable All Function
|
/* SET SPP&EPP , Parallel Port NO DMA , Enable All Function */
|
||||||
// SET Parallel IRQ
|
/* SET Parallel IRQ */
|
||||||
pci_write_config_dword(pdev, 0x9c,
|
pci_write_config_dword(pdev, 0x9c,
|
||||||
ite8872set | (ite8872_irq * 0x11111));
|
ite8872set | (ite8872_irq * 0x11111));
|
||||||
|
|
||||||
@@ -2548,7 +2614,7 @@ static int __devinit sio_ite_8872_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
|
|
||||||
/* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
|
/* VIA 8231 support by Pavel Fedin <sonic_amiga@rambler.ru>
|
||||||
based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
|
based on VIA 686a support code by Jeff Garzik <jgarzik@pobox.com> */
|
||||||
static int __devinitdata parport_init_mode = 0;
|
static int __devinitdata parport_init_mode;
|
||||||
|
|
||||||
/* Data for two known VIA chips */
|
/* Data for two known VIA chips */
|
||||||
static struct parport_pc_via_data via_686a_data __devinitdata = {
|
static struct parport_pc_via_data via_686a_data __devinitdata = {
|
||||||
@@ -2582,8 +2648,7 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
|
|
||||||
printk(KERN_DEBUG "parport_pc: VIA 686A/8231 detected\n");
|
printk(KERN_DEBUG "parport_pc: VIA 686A/8231 detected\n");
|
||||||
|
|
||||||
switch(parport_init_mode)
|
switch (parport_init_mode) {
|
||||||
{
|
|
||||||
case 1:
|
case 1:
|
||||||
printk(KERN_DEBUG "parport_pc: setting SPP mode\n");
|
printk(KERN_DEBUG "parport_pc: setting SPP mode\n");
|
||||||
siofunc = VIA_FUNCTION_PARPORT_SPP;
|
siofunc = VIA_FUNCTION_PARPORT_SPP;
|
||||||
@@ -2611,7 +2676,8 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
have_epp = 1;
|
have_epp = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_DEBUG "parport_pc: probing current configuration\n");
|
printk(KERN_DEBUG
|
||||||
|
"parport_pc: probing current configuration\n");
|
||||||
siofunc = VIA_FUNCTION_PROBE;
|
siofunc = VIA_FUNCTION_PROBE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2628,13 +2694,10 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
/* Bit 5: EPP+ECP enable; bit 7: PS/2 bidirectional port enable */
|
/* Bit 5: EPP+ECP enable; bit 7: PS/2 bidirectional port enable */
|
||||||
outb(via->viacfg_parport_control, VIA_CONFIG_INDEX);
|
outb(via->viacfg_parport_control, VIA_CONFIG_INDEX);
|
||||||
tmp2 = inb(VIA_CONFIG_DATA);
|
tmp2 = inb(VIA_CONFIG_DATA);
|
||||||
if (siofunc == VIA_FUNCTION_PROBE)
|
if (siofunc == VIA_FUNCTION_PROBE) {
|
||||||
{
|
|
||||||
siofunc = tmp & VIA_FUNCTION_PARPORT_DISABLE;
|
siofunc = tmp & VIA_FUNCTION_PARPORT_DISABLE;
|
||||||
ppcontrol = tmp2;
|
ppcontrol = tmp2;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
tmp &= ~VIA_FUNCTION_PARPORT_DISABLE;
|
tmp &= ~VIA_FUNCTION_PARPORT_DISABLE;
|
||||||
tmp |= siofunc;
|
tmp |= siofunc;
|
||||||
outb(via->viacfg_function, VIA_CONFIG_INDEX);
|
outb(via->viacfg_function, VIA_CONFIG_INDEX);
|
||||||
@@ -2649,12 +2712,13 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
|
outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
|
||||||
port1 = inb(VIA_CONFIG_DATA) << 2;
|
port1 = inb(VIA_CONFIG_DATA) << 2;
|
||||||
|
|
||||||
printk (KERN_DEBUG "parport_pc: Current parallel port base: 0x%X\n",port1);
|
printk(KERN_DEBUG "parport_pc: Current parallel port base: 0x%X\n",
|
||||||
if ((port1 == 0x3BC) && have_epp)
|
port1);
|
||||||
{
|
if (port1 == 0x3BC && have_epp) {
|
||||||
outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
|
outb(via->viacfg_parport_base, VIA_CONFIG_INDEX);
|
||||||
outb((0x378 >> 2), VIA_CONFIG_DATA);
|
outb((0x378 >> 2), VIA_CONFIG_DATA);
|
||||||
printk(KERN_DEBUG "parport_pc: Parallel port base changed to 0x378\n");
|
printk(KERN_DEBUG
|
||||||
|
"parport_pc: Parallel port base changed to 0x378\n");
|
||||||
port1 = 0x378;
|
port1 = 0x378;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2674,14 +2738,13 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
pci_read_config_byte(pdev, via->via_pci_parport_irq_reg, &tmp);
|
pci_read_config_byte(pdev, via->via_pci_parport_irq_reg, &tmp);
|
||||||
irq = ((tmp & VIA_IRQCONTROL_PARALLEL) >> 4);
|
irq = ((tmp & VIA_IRQCONTROL_PARALLEL) >> 4);
|
||||||
|
|
||||||
if (siofunc == VIA_FUNCTION_PARPORT_ECP)
|
if (siofunc == VIA_FUNCTION_PARPORT_ECP) {
|
||||||
{
|
|
||||||
/* Bits 3-2: PnP Routing for Parallel Port DMA */
|
/* Bits 3-2: PnP Routing for Parallel Port DMA */
|
||||||
pci_read_config_byte(pdev, via->via_pci_parport_dma_reg, &tmp);
|
pci_read_config_byte(pdev, via->via_pci_parport_dma_reg, &tmp);
|
||||||
dma = ((tmp & VIA_DMACONTROL_PARALLEL) >> 2);
|
dma = ((tmp & VIA_DMACONTROL_PARALLEL) >> 2);
|
||||||
}
|
} else
|
||||||
else
|
/* if ECP not enabled, DMA is not enabled, assumed
|
||||||
/* if ECP not enabled, DMA is not enabled, assumed bogus 'dma' value */
|
bogus 'dma' value */
|
||||||
dma = PARPORT_DMA_NONE;
|
dma = PARPORT_DMA_NONE;
|
||||||
|
|
||||||
/* Let the user (or defaults) steer us away from interrupts and DMA */
|
/* Let the user (or defaults) steer us away from interrupts and DMA */
|
||||||
@@ -2693,11 +2756,15 @@ static int __devinit sio_via_probe (struct pci_dev *pdev, int autoirq,
|
|||||||
dma = PARPORT_DMA_NONE;
|
dma = PARPORT_DMA_NONE;
|
||||||
|
|
||||||
switch (port1) {
|
switch (port1) {
|
||||||
case 0x3bc: port2 = 0x7bc; break;
|
case 0x3bc:
|
||||||
case 0x378: port2 = 0x778; break;
|
port2 = 0x7bc; break;
|
||||||
case 0x278: port2 = 0x678; break;
|
case 0x378:
|
||||||
|
port2 = 0x778; break;
|
||||||
|
case 0x278:
|
||||||
|
port2 = 0x678; break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_INFO "parport_pc: Weird VIA parport base 0x%X, ignoring\n",
|
printk(KERN_INFO
|
||||||
|
"parport_pc: Weird VIA parport base 0x%X, ignoring\n",
|
||||||
port1);
|
port1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -2813,8 +2880,8 @@ static struct parport_pc_pci {
|
|||||||
struct { /* BAR (base address registers) numbers in the config
|
struct { /* BAR (base address registers) numbers in the config
|
||||||
space header */
|
space header */
|
||||||
int lo;
|
int lo;
|
||||||
int hi; /* -1 if not there, >6 for offset-method (max
|
int hi;
|
||||||
BAR is 6) */
|
/* -1 if not there, >6 for offset-method (max BAR is 6) */
|
||||||
} addr[4];
|
} addr[4];
|
||||||
|
|
||||||
/* If set, this is called immediately after pci_enable_device.
|
/* If set, this is called immediately after pci_enable_device.
|
||||||
@@ -2875,11 +2942,14 @@ static struct parport_pc_pci {
|
|||||||
/* oxsemi_pcie_pport */ { 1, { { 0, 1 }, } },
|
/* oxsemi_pcie_pport */ { 1, { { 0, 1 }, } },
|
||||||
/* aks_0100 */ { 1, { { 0, -1 }, } },
|
/* aks_0100 */ { 1, { { 0, -1 }, } },
|
||||||
/* mobility_pp */ { 1, { { 0, 1 }, } },
|
/* mobility_pp */ { 1, { { 0, 1 }, } },
|
||||||
/* netmos_9705 */ { 1, { { 0, -1 }, } }, /* untested */
|
|
||||||
/* netmos_9715 */ { 2, { { 0, 1 }, { 2, 3 },} }, /* untested */
|
/* The netmos entries below are untested */
|
||||||
/* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} }, /* untested */
|
/* netmos_9705 */ { 1, { { 0, -1 }, } },
|
||||||
/* netmos_9805 */ { 1, { { 0, -1 }, } }, /* untested */
|
/* netmos_9715 */ { 2, { { 0, 1 }, { 2, 3 },} },
|
||||||
/* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } }, /* untested */
|
/* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} },
|
||||||
|
/* netmos_9805 */ { 1, { { 0, -1 }, } },
|
||||||
|
/* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } },
|
||||||
|
|
||||||
/* quatech_sppxp100 */ { 1, { { 0, 1 }, } },
|
/* quatech_sppxp100 */ { 1, { { 0, 1 }, } },
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2942,7 +3012,8 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {
|
|||||||
{ 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 },
|
{ 0x9710, 0x9805, 0x1000, 0x0010, 0, 0, titan_1284p1 },
|
||||||
{ 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },
|
{ 0x9710, 0x9815, 0x1000, 0x0020, 0, 0, titan_1284p2 },
|
||||||
/* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
|
/* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
|
||||||
{ 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p}, /* AFAVLAB_TK9902 */
|
/* AFAVLAB_TK9902 */
|
||||||
|
{ 0x14db, 0x2120, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1p},
|
||||||
{ 0x14db, 0x2121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2p},
|
{ 0x14db, 0x2121, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_2p},
|
||||||
{ PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952PP,
|
{ PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952PP,
|
||||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_952 },
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, oxsemi_952 },
|
||||||
@@ -3005,7 +3076,8 @@ static int parport_pc_pci_probe (struct pci_dev *dev,
|
|||||||
/* This is a PCI card */
|
/* This is a PCI card */
|
||||||
i -= last_sio;
|
i -= last_sio;
|
||||||
count = 0;
|
count = 0;
|
||||||
if ((err = pci_enable_device (dev)) != 0)
|
err = pci_enable_device(dev);
|
||||||
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
data = kmalloc(sizeof(struct pci_parport_data), GFP_KERNEL);
|
data = kmalloc(sizeof(struct pci_parport_data), GFP_KERNEL);
|
||||||
@@ -3103,8 +3175,9 @@ static int __init parport_pc_init_superio (int autoirq, int autodma)
|
|||||||
if (id == NULL || id->driver_data >= last_sio)
|
if (id == NULL || id->driver_data >= last_sio)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (parport_pc_superio_info[id->driver_data].probe
|
if (parport_pc_superio_info[id->driver_data].probe(
|
||||||
(pdev, autoirq, autodma,parport_pc_superio_info[id->driver_data].via)) {
|
pdev, autoirq, autodma,
|
||||||
|
parport_pc_superio_info[id->driver_data].via)) {
|
||||||
ret++;
|
ret++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3113,7 +3186,10 @@ static int __init parport_pc_init_superio (int autoirq, int autodma)
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static struct pci_driver parport_pc_pci_driver;
|
static struct pci_driver parport_pc_pci_driver;
|
||||||
static int __init parport_pc_init_superio(int autoirq, int autodma) {return 0;}
|
static int __init parport_pc_init_superio(int autoirq, int autodma)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* CONFIG_PCI */
|
#endif /* CONFIG_PCI */
|
||||||
|
|
||||||
#ifdef CONFIG_PNP
|
#ifdef CONFIG_PNP
|
||||||
@@ -3128,7 +3204,8 @@ static const struct pnp_device_id parport_pc_pnp_tbl[] = {
|
|||||||
|
|
||||||
MODULE_DEVICE_TABLE(pnp, parport_pc_pnp_tbl);
|
MODULE_DEVICE_TABLE(pnp, parport_pc_pnp_tbl);
|
||||||
|
|
||||||
static int parport_pc_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id *id)
|
static int parport_pc_pnp_probe(struct pnp_dev *dev,
|
||||||
|
const struct pnp_device_id *id)
|
||||||
{
|
{
|
||||||
struct parport *pdata;
|
struct parport *pdata;
|
||||||
unsigned long io_lo, io_hi;
|
unsigned long io_lo, io_hi;
|
||||||
@@ -3159,8 +3236,8 @@ static int parport_pc_pnp_probe(struct pnp_dev *dev, const struct pnp_device_id
|
|||||||
dma = PARPORT_DMA_NONE;
|
dma = PARPORT_DMA_NONE;
|
||||||
|
|
||||||
dev_info(&dev->dev, "reported by %s\n", dev->protocol->name);
|
dev_info(&dev->dev, "reported by %s\n", dev->protocol->name);
|
||||||
if (!(pdata = parport_pc_probe_port(io_lo, io_hi,
|
pdata = parport_pc_probe_port(io_lo, io_hi, irq, dma, &dev->dev, 0);
|
||||||
irq, dma, &dev->dev, 0)))
|
if (pdata == NULL)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
pnp_set_drvdata(dev, pdata);
|
pnp_set_drvdata(dev, pdata);
|
||||||
@@ -3263,11 +3340,18 @@ static void __init parport_pc_find_ports (int autoirq, int autodma)
|
|||||||
* syntax and keep in mind that code below is a cleaned up version.
|
* syntax and keep in mind that code below is a cleaned up version.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int __initdata io[PARPORT_PC_MAX_PORTS+1] = { [0 ... PARPORT_PC_MAX_PORTS] = 0 };
|
static int __initdata io[PARPORT_PC_MAX_PORTS+1] = {
|
||||||
static int __initdata io_hi[PARPORT_PC_MAX_PORTS+1] =
|
[0 ... PARPORT_PC_MAX_PORTS] = 0
|
||||||
{ [0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO };
|
};
|
||||||
static int __initdata dmaval[PARPORT_PC_MAX_PORTS] = { [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE };
|
static int __initdata io_hi[PARPORT_PC_MAX_PORTS+1] = {
|
||||||
static int __initdata irqval[PARPORT_PC_MAX_PORTS] = { [0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY };
|
[0 ... PARPORT_PC_MAX_PORTS] = PARPORT_IOHI_AUTO
|
||||||
|
};
|
||||||
|
static int __initdata dmaval[PARPORT_PC_MAX_PORTS] = {
|
||||||
|
[0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_DMA_NONE
|
||||||
|
};
|
||||||
|
static int __initdata irqval[PARPORT_PC_MAX_PORTS] = {
|
||||||
|
[0 ... PARPORT_PC_MAX_PORTS-1] = PARPORT_IRQ_PROBEONLY
|
||||||
|
};
|
||||||
|
|
||||||
static int __init parport_parse_param(const char *s, int *val,
|
static int __init parport_parse_param(const char *s, int *val,
|
||||||
int automatic, int none, int nofifo)
|
int automatic, int none, int nofifo)
|
||||||
@@ -3308,7 +3392,8 @@ static int __init parport_parse_dma(const char *dmastr, int *val)
|
|||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
static int __init parport_init_mode_setup(char *str)
|
static int __init parport_init_mode_setup(char *str)
|
||||||
{
|
{
|
||||||
printk(KERN_DEBUG "parport_pc.c: Specified parameter parport_init_mode=%s\n", str);
|
printk(KERN_DEBUG
|
||||||
|
"parport_pc.c: Specified parameter parport_init_mode=%s\n", str);
|
||||||
|
|
||||||
if (!strcmp(str, "spp"))
|
if (!strcmp(str, "spp"))
|
||||||
parport_init_mode = 1;
|
parport_init_mode = 1;
|
||||||
@@ -3343,7 +3428,8 @@ module_param(verbose_probing, int, 0644);
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_PCI
|
#ifdef CONFIG_PCI
|
||||||
static char *init_mode;
|
static char *init_mode;
|
||||||
MODULE_PARM_DESC(init_mode, "Initialise mode for VIA VT8231 port (spp, ps2, epp, ecp or ecpepp)");
|
MODULE_PARM_DESC(init_mode,
|
||||||
|
"Initialise mode for VIA VT8231 port (spp, ps2, epp, ecp or ecpepp)");
|
||||||
module_param(init_mode, charp, 0);
|
module_param(init_mode, charp, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -3398,7 +3484,7 @@ static int __init parse_parport_params(void)
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static int parport_setup_ptr __initdata = 0;
|
static int parport_setup_ptr __initdata;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Acceptable parameters:
|
* Acceptable parameters:
|
||||||
@@ -3495,7 +3581,7 @@ static int __init parport_pc_init(void)
|
|||||||
for (i = 0; i < PARPORT_PC_MAX_PORTS; i++) {
|
for (i = 0; i < PARPORT_PC_MAX_PORTS; i++) {
|
||||||
if (!io[i])
|
if (!io[i])
|
||||||
break;
|
break;
|
||||||
if ((io_hi[i]) == PARPORT_IOHI_AUTO)
|
if (io_hi[i] == PARPORT_IOHI_AUTO)
|
||||||
io_hi[i] = 0x400 + io[i];
|
io_hi[i] = 0x400 + io[i];
|
||||||
parport_pc_probe_port(io[i], io_hi[i],
|
parport_pc_probe_port(io[i], io_hi[i],
|
||||||
irqval[i], dmaval[i], NULL, 0);
|
irqval[i], dmaval[i], NULL, 0);
|
||||||
|
Reference in New Issue
Block a user