X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver/blobdiff_plain/5e3d963bcb6112d798f674b876b167c633ff6b59..b316fb2f6fab6acf253eb4fbe67213ebb9baf202:/parport.c diff --git a/parport.c b/parport.c index 9cf35cd..b32b6e2 100644 --- a/parport.c +++ b/parport.c @@ -13,13 +13,19 @@ static int parportfd = -1; -int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, int ecpbase, int num) { +int parport_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, int ecpbase, int num) { int ret = 0; int i; unsigned long port; unsigned char val; static unsigned char last_pp_write = 0; + if (parportfd < 0) + return ret; + + if (ioctl(parportfd, PPCLAIM) == -1) + return -1; + for (i = 0; i < num; i++) { DPRINTF("dwPort: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n", (unsigned long)tr[i].dwPort, tr[i].cmdTrans, tr[i].dwBytes, @@ -33,9 +39,6 @@ int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, int e DPRINTF("write byte: %d\n", val); #endif - if (parportfd < 0) - return ret; - if (port == ppbase + PP_DATA) { DPRINTF("data port\n"); switch(tr[i].cmdTrans) { @@ -114,6 +117,8 @@ int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, int ppbase, int e #endif } + ioctl(parportfd, PPRELEASE); + return ret; } @@ -139,6 +144,7 @@ int parport_open(int num) { if (ioctl(parportfd, PPNEGOT, &pmode) == -1) return -1; + ioctl(parportfd, PPRELEASE); #if 0 if (cr->Card.dwItems > 1 && cr->Card.Item[1].I.IO.dwAddr) { DPRINTF("ECP mode requested\n");