Re: Controlling par port

Phil Wilshire (philwil@on-ramp.ior.com)
Wed, 27 Oct 1999 15:37:24 -0700


This is a multi-part message in MIME format.
--------------7AD77AF9C3E2E5183AA4A1D5
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Chris Jones wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi
>
> Could someone point me at some docs for simple control of the parallel
> port?
>
>
THis is a bit messy since it uses some bits of RT Linux
Tidy it up thussly
Good luck.
If you find a description of the Parallel port Control reg mail me back
with it please.

Phil Wilshire

/* Parallel Port Example
Author: Phil Wilshire
Original: Many Others
Date: 4/23/99
$Id$

This code shows how to set up and use the parallel port
I have included an interrupt detector
*/

#include <linux/module.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/cons.h>
#include <linux/sched.h>

#define LPT_PORT 0x378
#define LPTS 0x379
#define LPTC 0x37A

#define LPT_IRQ 7
#define PULSE_TIME 10000

#ifndef NULL
#define NULL 0
#endif

static int i;

static int irq_tries[] = {3,4,5,6,9,0};
static int irq_tried[] = {0,0,0,0,0};
static int got_irq;

void irq_handler(void) {
/* output a small pulse */
outb(inb_p(LPT_PORT) | (0x01) , LPT_PORT );
for ( i = 0 ; i < PULSE_TIME ; i++ ) ;
outb(inb_p(LPT_PORT) & ~(0x01) , LPT_PORT );
}

void dummy_probe(int irq, void * dev_id, struct pt_regs * regs) {
if ( got_irq == 0 ) got_irq = irq;

}

int init_module(void) {
int inbyte;
int i;
int count;

/* set up interrupt controller */

/*outb_p(inb_p(0x21)&(0x80),0x21);
outb_p(0x20,0x20); */

/* get all the irqs */
for ( i = 0; irq_tries[i] ; i++ ) {
irq_tried[i] = request_irq(irq_tries[i],dummy_probe,
SA_INTERRUPT, "dummy probe", NULL);
}

/* run the probe */
count = 0;
got_irq = 0;

do {
got_irq = 0;
outb_p(inb_p(LPTC)|(0x10),LPTC); /* enable */
outb(0x00, LPT_PORT ); /* low */
for ( i = 0 ; i < 10000 ; i++ );
outb(0xFF, LPT_PORT ); /* high */
for ( i = 0 ; i < 10000 ; i++ );
outb_p(inb_p(LPTC)&~(0x10),LPTC); /* disable */
if ( got_irq == 0 ) {
printk(" %d no irq reported ...\n",count);
}
count ++;
} while ( got_irq <= 0 && count < 5 );

printk(" got_irq reported %d...\n",got_irq);

/* enable port irqs */
return 0;
}

void cleanup_module(void) {
/* disable port irqs */
outb_p(inb_p(LPTC)&~(0x10),LPTC);

/* give them all back */
for ( i = 0; irq_tries[i] ; i++ ) {
free_irq(irq_tries[i],NULL);
}
}

/* makefile

CFLAGS= -D__KERNEL__ -DMODULE

pport.o : pport.c
gcc -O2 $(CFLAGS) -c pport.c

*/
--------------7AD77AF9C3E2E5183AA4A1D5
Content-Type: application/octet-stream;
name="parallel.tgz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="parallel.tgz"

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
EiRIkPDlhP8BOslc2ABQAAA=
--------------7AD77AF9C3E2E5183AA4A1D5--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/