A few days later,
same story ;-) Like Craftonix I have run following code as module:
Code:
#include <linux/module.h>
#include <linux/interrupt.h>
#include <asm/io.h>
#define BASEPORT 0x378
static unsigned long devid;
int cntr;
static irqreturn_t handler(int irq, void *data)
{
cntr++;
printk("parint: >>> Interrupt PARALLEL PORT INT %d HANDLED\n", cntr);
return IRQ_HANDLED;
}
int xinit_module(void)
{
int ret;
ret = request_irq(7, handler, SA_INTERRUPT , "parallelport", (void *)&devid);
if (ret) { printk ("parint: error requesting irq 7: returned %d\n", ret); }
outb_p(0x10, BASEPORT + 2);
printk("parint: Generating Interrupt now on all output pins (intr/ACK = pin 10)\n");
//generate interrupt
outb_p(0, BASEPORT);
outb_p(255, BASEPORT);
outb_p(0, BASEPORT);
printk("parint: Interrupt generated. You should see the handler-message\n");
return 0;
}
void xcleanup_module(void)
{
disable_irq(7);
free_irq(7, (void *)&devid);
}
module_init(xinit_module);
module_exit(xcleanup_module);
MODULE_LICENSE("GPL");
Everything seems to work fine at the beginning, including all module startup messages in dmesg. But if I try to run the handler, nothing hapens. To do so I have connected pin 10 and 9 from lpt.
In /proc/interrupt i can see that "parallelport" is bind to irq 7.
It would be very nice if someone can help.