Description: Remove kernel driver for plustek_pp Cherry-Picked from upstream. Origin: upstream Bug:https://gitlab.com/sane-project/backends/-/issues/578 Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1008275 Forwarded: not-needed Last-Update: 2022-03-26 --- This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ Index: trunk/backend/plustek-pp.h =================================================================== --- trunk.orig/backend/plustek-pp.h +++ trunk/backend/plustek-pp.h @@ -235,11 +235,7 @@ typedef const struct mode_param #define _E_SEQUENCE (_FIRST_ERR-30) /* caller sequence does not match */ #define _E_NO_ASIC (_FIRST_ERR-31) /* can't detect ASIC */ -#ifdef __KERNEL__ -# define _E_FAULT (-EFAULT) -#else # define _E_FAULT (_E_INTERNAL) /* should never happen in userspace */ -#endif #define _E_LAMP_NOT_IN_POS (_FIRST_ERR-40) #define _E_LAMP_NOT_STABLE (_FIRST_ERR-41) @@ -471,10 +467,6 @@ typedef struct { #define _ScanMode_AverageOut 1 /* CCD averaged 2 pixels value for output*/ #define _ScanMode_Mono 2 /* not color mode */ - -#ifndef __KERNEL__ - - #define PLUSTEK_CONFIG_FILE "plustek_pp.conf" #ifndef PATH_MAX @@ -631,7 +623,6 @@ typedef struct { AdjDef adj; } CnfDef, *pCnfDef; -#endif /* guard __KERNEL__ */ #endif /* guard __PLUSTEKPP_H__ */ Index: trunk/backend/plustek-pp_dbg.h =================================================================== --- trunk.orig/backend/plustek-pp_dbg.h +++ trunk/backend/plustek-pp_dbg.h @@ -47,22 +47,11 @@ /* #define _ASIC_98001_SIM */ /* - * the print macros - */ -#ifdef __KERNEL__ -# define _PRINT printk -#endif - -/* * some debug definitions */ #ifdef DEBUG -# ifndef __KERNEL__ # include # define _ASSERT(x) assert(x) -# else -# define _ASSERT(x) -# endif # ifndef DBG # define DBG(level, msg, args...) if ((dbg_level) & (level)) { \ Index: trunk/backend/plustek-pp_detect.c =================================================================== --- trunk.orig/backend/plustek-pp_detect.c +++ trunk/backend/plustek-pp_detect.c @@ -97,11 +97,6 @@ static int detectScannerConnection( pSca UChar data, control, status; int retval = _E_NO_CONN; -#ifdef __KERNEL__ - DBG( DBG_LOW, "Dataport = 0x%04x\n", ps->IO.pbSppDataPort ); - DBG( DBG_LOW, "Ctrlport = 0x%04x\n", ps->IO.pbControlPort ); -#endif - detectResetPort( ps ); /* @@ -177,11 +172,7 @@ static int detectScannerConnection( pSca /* work on the result */ if ( _OK == retval ) { -#ifdef __KERNEL__ - ps->sCaps.wIOBase = ps->IO.pbSppDataPort; -#else ps->sCaps.wIOBase = ps->pardev; -#endif ps->PutToIdleMode( ps ); } else { @@ -209,11 +200,7 @@ static int detectSetupBuffers( pScanData */ if ( 0 == ps->TotalBufferRequire ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv: asic 0x%x probably not supported\n", ps->sCaps.AsicID); return _E_ALLOC; /* Out of memory */ @@ -228,11 +215,7 @@ static int detectSetupBuffers( pScanData if ( NULL == ps->driverbuf ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv: Not enough kernel memory %d\n", ps->TotalBufferRequire); return _E_ALLOC; /* Out of memory */ @@ -380,11 +363,7 @@ static int detectAsic98001( pScanData ps return detectScannerConnection( ps ); #else -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "!!!! WARNING, have a look at function detectAsic98001() !!!!\n" ); ps->sCaps.AsicID = _ASIC_IS_98001; ps->sCaps.wIOBase = ps->IO.pbSppDataPort; @@ -434,11 +413,7 @@ _LOC int DetectScanner( pScanData ps, in /* read Register 0x18 (AsicID Register) of Asic9800x based devices */ #ifdef _ASIC_98001_SIM -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "!!!! WARNING, SW-Emulation active !!!!\n" ); asic = _ASIC_IS_98001; #else Index: trunk/backend/plustek-pp_hwdefs.h =================================================================== --- trunk.orig/backend/plustek-pp_hwdefs.h +++ trunk/backend/plustek-pp_hwdefs.h @@ -586,19 +586,6 @@ typedef struct * structure to hold IO port specific stuff */ typedef struct { - -#ifdef __KERNEL__ - pFnOut fnOut; - pFnIn fnIn; - - UShort pbSppDataPort; - UShort pbEppDataPort; - - UShort pbStatusPort; - UShort pbControlPort; - UShort pbAddrOffsetPort; -#endif - UShort portBase; UShort portMode; UShort lastPortMode; Index: trunk/backend/plustek-pp_image.c =================================================================== --- trunk.orig/backend/plustek-pp_image.c +++ trunk/backend/plustek-pp_image.c @@ -1288,11 +1288,7 @@ static Bool imageP98003ReadOneImageLine( } while( !MiscCheckTimer( &timer )); -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "Timeout - Scanner malfunction !!\n" ); MotorToHomePosition(ps); Index: trunk/backend/plustek-pp_io.c =================================================================== --- trunk.orig/backend/plustek-pp_io.c +++ trunk/backend/plustek-pp_io.c @@ -257,21 +257,11 @@ static Bool fnEPPRead( pScanData ps, pUC if( _IS_ASIC98(ps->sCaps.AsicID)) { -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAIN ); -#else - _OUTB_CTRL( ps, (_CTRL_GENSIGNAL + _CTRL_DIRECTION)); - _DO_UDELAY( 1 ); -#endif for( i = 0; i < ulSize; i++ ) pBuffer[i] = _INB_EPPDATA( ps ); -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT ); -#else - _OUTB_CTRL( ps, _CTRL_GENSIGNAL ); - _DO_UDELAY( 1 ); -#endif } else { for( i = 0; i < ulSize; i++ ) @@ -290,18 +280,12 @@ static Bool fnBiDirRead( pScanData ps, p start = _CTRL_START_BIDIREAD; end = _CTRL_END_BIDIREAD; -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAIN ); if( !sanei_pp_uses_directio()) { start &= ~_CTRL_DIRECTION; end &= ~_CTRL_DIRECTION; } -#else - if( _IS_ASIC98(ps->sCaps.AsicID)) { - _OUTB_CTRL( ps, (_CTRL_GENSIGNAL + _CTRL_DIRECTION)); - } -#endif switch( ps->IO.delay ) { @@ -341,13 +325,7 @@ static Bool fnBiDirRead( pScanData ps, p } -#ifndef __KERNEL__ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT ); -#else - if( _IS_ASIC98(ps->sCaps.AsicID)) { - _OUTB_CTRL( ps, _CTRL_GENSIGNAL ); - } -#endif return _TRUE; } @@ -953,45 +931,4 @@ _LOC void IOReadScannerImageData( pScanD ps->OpenScanPath( ps ); } -#ifdef __KERNEL__ - -/** the wrapper functions to support delayed and non-delayed I/O - */ -_LOC void IOOut( Byte data, UShort port ) -{ - DBG( DBG_IOF, "outb(0x%04x, 0x%02x)\n", port, data ); - outb( data, port ); -} - -_LOC void IOOutDelayed( Byte data, UShort port ) -{ - DBG( DBG_IOF, "outb_p(0x%04x, 0x%02x)\n", port, data ); - outb_p( data, port ); -} - -_LOC Byte IOIn( UShort port ) -{ -#ifdef DEBUG - Byte data = inb( port ); - - DBG( DBG_IOF, "inb(0x%04x) = 0x%02x\n", port, data ); - return data; -#else - return inb( port ); -#endif -} - -_LOC Byte IOInDelayed( UShort port ) -{ -#ifdef DEBUG - Byte data = inb_p( port ); - - DBG( DBG_IOF, "inb_p(0x%04x) = 0x%02x\n", port, data ); - return data; -#else - return inb_p( port ); -#endif -} -#endif /* guard __KERNEL__ */ - /* END PLUSTEK-PP_IO.C ......................................................*/ Index: trunk/backend/plustek-pp_misc.c =================================================================== --- trunk.orig/backend/plustek-pp_misc.c +++ trunk/backend/plustek-pp_misc.c @@ -77,27 +77,11 @@ /*************************** some definitions ********************************/ -#ifndef __KERNEL__ # define PPA_PROBE_SPP 0x0001 # define PPA_PROBE_PS2 0x0002 # define PPA_PROBE_ECR 0x0010 # define PPA_PROBE_EPP17 0x0100 # define PPA_PROBE_EPP19 0x0200 -#else - -/* the parport driver in Kernel 2.4 has changed. It does report the - * possible modes in a different, more general way. As long, as - * we do not use the parport-module change mode facility, I assume - * the following correlations - */ -#if defined LINUX_24 || defined LINUX_26 -# define PARPORT_MODE_PCPS2 PARPORT_MODE_TRISTATE -# define PARPORT_MODE_PCEPP PARPORT_MODE_EPP -# define PARPORT_MODE_PCECPPS2 PARPORT_MODE_TRISTATE -# define PARPORT_MODE_PCECPEPP PARPORT_MODE_EPP -# define PARPORT_MODE_PCECR PARPORT_MODE_ECP -#endif -#endif #define _PP_A 16807 /**< multiplier */ #define _PP_M 2147483647L /**< 2**31 - 1 */ @@ -107,298 +91,10 @@ static int port_feature = 0; static long randomnum = 1; -#ifdef __KERNEL__ -static int portIsClaimed[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -MODELSTR; /**< a static char array (see plustek-pp.h) */ - -#else static int portIsClaimed[_MAX_PTDEVS] = { 0, 0, 0, 0 }; -#endif /*************************** local functions *********************************/ -#ifdef __KERNEL__ -#ifdef LINUX_26 - -static pScanData __ps = NULL; -static int __pa = -1; - -/** callback from parport driver - */ -static void misc_attach(struct parport *port) -{ - DBG( DBG_LOW, "misc_attach\n" ); - - __ps->pp = NULL; - if( port->base == (unsigned long)__pa ) { - DBG( DBG_LOW, "Requested port (0x%02x) found\n", __pa ); - DBG( DBG_LOW, "Port mode reported: (0x%04x)\n", port->modes ); - __ps->pp = port; - } -} - -static void misc_detach( struct parport *port ) -{ - DBG( DBG_LOW, "misc_detach\n" ); -} - -static struct parport_driver pt_drv = { - .name = "pt_drv", - .attach = misc_attach, - .detach = misc_detach, -}; -#endif - -/** display the available port-modes - */ -#ifdef DEBUG -static void miscShowPortModes( int modes ) -{ - DBG( DBG_LOW, "parport-modi:" ); - - if( modes & PARPORT_MODE_PCSPP ) - DBG( DBG_LOW, " SPP" ); - - if( modes & PARPORT_MODE_PCPS2 ) - DBG( DBG_LOW, " PS/2" ); - - if( modes & PARPORT_MODE_PCEPP ) - DBG( DBG_LOW, " EPP" ); - - if( modes & PARPORT_MODE_PCECR ) - DBG( DBG_LOW, " ECP" ); - - if( modes & PARPORT_MODE_PCECPEPP ) - DBG( DBG_LOW, " EPP(ECP)" ); - - if( modes & PARPORT_MODE_PCECPPS2 ) - DBG( DBG_LOW, " PS/2(ECP)" ); - - DBG( DBG_LOW, "\n" ); -} -#endif - -/** probe the parallel port - */ -static int initPortProbe( pScanData ps ) -{ - int retv = 0; - - /* clear the controls */ - ps->IO.lastPortMode = 0xFFFF; - - if( NULL != ps->pardev ) - retv = ps->pardev->port->modes; - return retv; -} - -/** will be called by the parport module when we already have access, but - * another module wants access to the port... - */ -static int miscPreemptionCallback( pVoid data ) -{ - pScanData ps = (pScanData)data; - - if( NULL != ps ) { - - /* never release during scanning */ - if( ps->DataInf.dwScanFlag & _SCANNER_SCANNING ) { - DBG( DBG_LOW, "no way!!!\n" ); - return 1; - } - } - - /* let the port go...*/ - return 0; -} - -/** depending on the reported possible port modes, we try to set a faster mode - * than SPP - */ -static int miscSetFastMode( pScanData ps ) -{ - UChar a, b; - - /* - * when previously found the EPP mode, break right here - */ - if (( _PORT_EPP == ps->IO.portMode ) && (!(port_feature & PARPORT_MODE_PCECR))) - return _OK; - - /* CHECK REMOVE: from here we should have SPP (Paranoia Code !) */ - if (( _PORT_SPP != ps->IO.portMode ) && (!(port_feature & PARPORT_MODE_PCECR))) - return _OK; - - DBG(DBG_LOW, "Trying faster mode...\n" ); - - /* - * ECP mode usually has sub-modes of EPP and/or PS2. - * First we try to set EPP - */ - if((port_feature & PARPORT_MODE_PCECR) && - (port_feature & PARPORT_MODE_PCECPEPP)){ - - DBG(DBG_LOW, "Attempting to set EPP from ECP mode.\n" ); - - a = _INB_ECTL(ps); /* get current ECR */ - ps->IO.lastPortMode = a; /* save it for restoring later */ - a = (a & 0x1F) | 0x80; /* set to EPP */ - _OUTB_ECTL(ps, a); /* write it back */ - _DO_UDELAY(1); - - /* - * It is probably unnecessary to - * do this check but it makes me feel better - */ - b = _INB_ECTL(ps); /* check to see if port set */ - if( a == b ) { - DBG( DBG_LOW, "Port is set to (ECP) EPP mode.\n" ); - ps->IO.portMode = _PORT_EPP; - return _OK; - - } else { - DBG( DBG_LOW, "Port could not be set to (ECP) EPP mode. " - "Using SPP mode.\n" ); - _OUTB_ECTL(ps,(Byte)ps->IO.lastPortMode); /* restore */ - _DO_UDELAY(1); - ps->IO.portMode = _PORT_SPP; - - /* go ahead and try with other settings...*/ - } - } - - /* If port cannot be set to EPP, try PS2 */ - if((port_feature & PARPORT_MODE_PCECR) && - (port_feature & PARPORT_MODE_PCECPPS2)) { - - DBG(DBG_LOW, "Attempting to set PS2 from ECPPS2 mode.\n" ); - - a = _INB_ECTL(ps); /* get current ECR */ - ps->IO.lastPortMode = a; /* save it for restoring later */ - - /* set to Fast Centronics/bi-directional/PS2 */ - a = (a & 0x1F) | 0x20; - _OUTB_ECTL(ps,a); /* write it back */ - _DO_UDELAY(1); - - /* - * It is probably unnecessary to do this check - * but it makes me feel better - */ - b = _INB_ECTL(ps); /* check to see if port set */ - if (a == b) { - DBG(DBG_LOW, "Port is set to (ECP) PS2 bidirectional mode.\n"); - ps->IO.portMode = _PORT_BIDI; - return _OK; - } else { - DBG(DBG_LOW, "Port could not be set to (ECP) PS2 mode. " - "Using SPP mode.\n"); - a = ps->IO.lastPortMode & 0x1F; - _OUTB_ECTL(ps, a); /* set ECP ctrl to SPP */ - _DO_UDELAY(1); - ps->IO.portMode = _PORT_SPP; - - /* next mode, last attempt... */ - } - } - - /* - * Some BIOS/cards have only a Bi-directional/PS2 mode (no EPP). - * Make one last attempt to set to PS2 mode. - */ - if ( port_feature & PARPORT_MODE_PCPS2 ){ - - DBG(DBG_LOW, "Attempting to set PS2 mode.\n" ); - - a = _INB_CTRL(ps); /* get current setting of control register*/ - ps->IO.lastPortMode = a; /* save it for restoring later */ - a = a | 0x20; /* set bit 5 of control reg */ - _OUTB_CTRL(ps,a); /* set to Fast Centronics/bi-directional/PS2 */ - _DO_UDELAY(1); - a = 0; - - _OUTB_DATA(ps,0x55); - _DO_UDELAY(1); - if ((inb(ps->IO.portBase)) != 0x55) /* read data */ - a++; - - _OUTB_DATA(ps,0xAA); - _DO_UDELAY(1); - - if (_INB_DATA(ps) != 0xAA) /* read data */ - a++; - - if( 2 == a ) { - DBG(DBG_LOW, "Port is set to PS2 bidirectional mode.\n"); - ps->IO.portMode = _PORT_BIDI; - return _OK; - - } else { - DBG(DBG_LOW, "Port could not be set to PS2 mode. " - "Using SPP mode.\n"); - _OUTB_CTRL(ps,(Byte)ps->IO.lastPortMode); /* restore */ - _DO_UDELAY(1); - ps->IO.portMode = _PORT_SPP; - } - } - - /* reaching this point, we're back in SPP mode and there's no need - * to restore at shutdown... - */ - ps->IO.lastPortMode = 0xFFFF; - - return _OK; -} - -/** check the state of the par-port and switch to EPP-mode if possible - */ -static int miscSetPortMode( pScanData ps ) -{ - /* try to detect the port settings, SPP seems to work in any case ! */ - port_feature = initPortProbe( ps ); - -#ifdef DEBUG - miscShowPortModes( port_feature ); -#endif - - switch( ps->IO.forceMode ) { - - case 1: - DBG( DBG_LOW, "Use of SPP-mode enforced\n" ); - ps->IO.portMode = _PORT_SPP; - return _OK; - break; - - case 2: - DBG( DBG_LOW, "Use of EPP-mode enforced\n" ); - ps->IO.portMode = _PORT_EPP; - return _OK; - break; - - default: - break; - } - - if( !(port_feature & PARPORT_MODE_PCEPP)) { - - if( !(port_feature & PARPORT_MODE_PCSPP )) { - _PRINT("\nThis Port supports not the SPP- or EPP-Mode\n" ); - _PRINT("Please activate SPP-Mode, EPP-Mode or\nEPP + ECP-Mode!\n"); - return _E_NOSUPP; - } else { - DBG(DBG_LOW, "Using SPP-mode\n" ); - ps->IO.portMode = _PORT_SPP; - } - } else { - DBG(DBG_LOW, "Using EPP-mode\n" ); - ps->IO.portMode = _PORT_EPP; - } - - /* else try to set to a faster mode than SPP */ - return miscSetFastMode( ps ); -} -#endif /** miscNextLongRand() -- generate 2**31-2 random numbers ** @@ -488,34 +184,6 @@ _LOC int MiscReinitStruct( pScanData ps */ _LOC int MiscInitPorts( pScanData ps, int port ) { -#ifdef __KERNEL__ - int status; - - if( NULL == ps ) - return _E_NULLPTR; - - /* - * Get access to the ports - */ - ps->IO.portBase = (UShort)port; - - status = miscSetPortMode(ps); - - if( _OK != status ) { - ps->sCaps.wIOBase = _NO_BASE; - ps->IO.portBase = _NO_BASE; - return status; - } - - /* - * the port settings - */ - ps->IO.pbSppDataPort = (UShort)port; - ps->IO.pbStatusPort = (UShort)port+1; - ps->IO.pbControlPort = (UShort)port+2; - ps->IO.pbEppDataPort = (UShort)port+4; - -#else int mode, mts; if( NULL == ps ) @@ -560,7 +228,6 @@ _LOC int MiscInitPorts( pScanData ps, in sanei_pp_setmode( ps->pardev, mts ); _VAR_NOT_USED( port ); -#endif return _OK; } @@ -568,11 +235,6 @@ _LOC int MiscInitPorts( pScanData ps, in */ _LOC void MiscRestorePort( pScanData ps ) { -#ifdef __KERNEL__ - if( 0 == ps->IO.pbSppDataPort ) - return; -#endif - DBG(DBG_LOW,"MiscRestorePort()\n"); /* don't restore if not necessary */ @@ -582,19 +244,9 @@ _LOC void MiscRestorePort( pScanData ps } /*Restore Port-Mode*/ -#ifdef __KERNEL__ - if( port_feature & PARPORT_MODE_PCECR ){ - _OUTB_ECTL( ps, (Byte)ps->IO.lastPortMode ); - _DO_UDELAY(1); - } else { - _OUTB_CTRL( ps, (Byte)ps->IO.lastPortMode ); - _DO_UDELAY(1); - } -#else if( port_feature & PPA_PROBE_ECR ){ _OUTB_ECTL(ps,ps->IO.lastPortMode); } -#endif } /** Initializes a timer. @@ -605,11 +257,7 @@ _LOC void MiscStartTimer( TimerDef *time { struct timeval start_time; -#ifdef __KERNEL__ - _GET_TIME( &start_time ); -#else gettimeofday(&start_time, NULL); -#endif *timer = (TimerDef)start_time.tv_sec * 1000000 + (TimerDef)start_time.tv_usec + us; } @@ -624,21 +272,14 @@ _LOC int MiscCheckTimer( TimerDef *timer { struct timeval current_time; -#ifdef __KERNEL__ - _GET_TIME( ¤t_time ); -#else gettimeofday(¤t_time, NULL); -#endif if ((TimerDef)current_time.tv_sec * 1000000 + (TimerDef)current_time.tv_usec > *timer) { return _E_TIMEOUT; } else { -#ifdef __KERNEL__ - schedule(); /*#else sched_yield(); */ -#endif return _OK; } } @@ -673,65 +314,8 @@ _LOC Bool MiscAllPointersSet( pScanData */ _LOC int MiscRegisterPort( pScanData ps, int portAddr ) { -#ifndef __KERNEL__ DBG( DBG_LOW, "Assigning port handle %i\n", portAddr ); ps->pardev = portAddr; -#else - -#ifdef LINUX_26 - __ps = ps; - __pa = portAddr; - - DBG( DBG_LOW, "Requested port at 0x%02x\n", portAddr ); - - if( parport_register_driver(&pt_drv)) { - /* Failed; nothing we can do. */ - return _E_REGISTER; - } - -#else - struct parport *pp = NULL; - - DBG( DBG_LOW, "Requested port at 0x%02x\n", portAddr ); - - pp = parport_enumerate(); - ps->pardev = NULL; - - if( NULL == pp ) { - return _E_PORTSEARCH; - } - - /* go through the list - */ - for( ps->pp = NULL; NULL != pp; ) { - - if( pp->base == (unsigned long)portAddr ) { - DBG( DBG_LOW, "Requested port (0x%02x) found\n", portAddr ); - DBG( DBG_LOW, "Port mode reported: (0x%04x)\n", pp->modes ); - ps->pp = pp; - break; - } - pp = pp->next; - } -#endif - - if( NULL == ps->pp ) { - printk("PORT not found!!!\n"); - return _E_NO_PORT; - } - - /* - * register this device - */ - ps->pardev = parport_register_device( ps->pp, "Plustek Driver", - miscPreemptionCallback, NULL, NULL, 0, (pVoid)ps ); - - if( NULL == ps->pardev ) { - return _E_REGISTER; - } - - DBG( DBG_LOW, "Port for device %u registered\n", ps->devno ); -#endif portIsClaimed[ps->devno] = 0; return _OK; @@ -741,17 +325,7 @@ _LOC int MiscRegisterPort( pScanData ps, */ _LOC void MiscUnregisterPort( pScanData ps ) { -#ifdef __KERNEL__ - if( NULL != ps->pardev ) { - DBG( DBG_LOW, "Port unregistered\n" ); - parport_unregister_device( ps->pardev ); - } -#ifdef LINUX_26 - parport_unregister_driver( &pt_drv ); -#endif -#else sanei_pp_close( ps->pardev ); -#endif } /** Try to claim the port @@ -763,11 +337,7 @@ _LOC int MiscClaimPort( pScanData ps ) if( 0 == portIsClaimed[ps->devno] ) { DBG( DBG_HIGH, "Try to claim the parport\n" ); -#ifdef __KERNEL__ - if( 0 != parport_claim( ps->pardev )) { -#else if( SANE_STATUS_GOOD != sanei_pp_claim( ps->pardev )) { -#endif return _E_BUSY; } } @@ -785,11 +355,7 @@ _LOC void MiscReleasePort( pScanData ps if( 0 == portIsClaimed[ps->devno] ) { DBG( DBG_HIGH, "Releasing parport\n" ); -#ifdef __KERNEL__ - parport_release( ps->pardev ); -#else sanei_pp_release( ps->pardev ); -#endif } } } Index: trunk/backend/plustek-pp_procs.h =================================================================== --- trunk.orig/backend/plustek-pp_procs.h +++ trunk/backend/plustek-pp_procs.h @@ -219,13 +219,6 @@ _LOC void IORegisterDirectToScanner( pSc _LOC void IOSoftwareReset ( pScanData ps ); _LOC void IOReadScannerImageData ( pScanData ps, pUChar pBuf, ULong size ); -#ifdef __KERNEL__ -_LOC void IOOut ( Byte data, UShort port ); -_LOC void IOOutDelayed( Byte data, UShort port ); -_LOC Byte IOIn ( UShort port ); -_LOC Byte IOInDelayed ( UShort port ); -#endif - /* * implementation in plustek-pp_tpa.c */ @@ -238,16 +231,6 @@ _LOC void TPAP98003Reshading ( p */ _LOC void ScaleX( pScanData ps, pUChar inBuf, pUChar outBuf ); -/* - * implementation in plustek-pp_procfs.c (Kernel-mode only) - */ -#ifdef __KERNEL__ -int ProcFsInitialize ( void ); -void ProcFsShutdown ( void ); -void ProcFsRegisterDevice ( pScanData ps ); -void ProcFsUnregisterDevice( pScanData ps ); -#endif - #endif /* guard __PROCS_H__ */ /* END PLUSTEK-PP_PROCS.H ...................................................*/ Index: trunk/backend/plustek-pp_ptdrv.c =================================================================== --- trunk.orig/backend/plustek-pp_ptdrv.c +++ trunk/backend/plustek-pp_ptdrv.c @@ -94,52 +94,13 @@ * If you do not wish that, delete this exception notice. *
*/ -#ifdef __KERNEL__ -# include -# include - -# ifdef CONFIG_DEVFS_FS -# include -# if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,69)) -# define DEVFS_26_STYLE -# endif -# endif -#endif - #include "plustek-pp_scan.h" -#ifdef __KERNEL__ -# include -#endif - /****************************** static vars **********************************/ /* default port is at 0x378 */ static int port[_MAX_PTDEVS] = { 0x378, 0, 0, 0 }; -#ifdef __KERNEL__ -static pScanData PtDrvDevices[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = NULL}; - -/* default is 180 secs for lamp switch off */ -static int lampoff[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 180 }; - -/* warmup period for lamp (30 secs) */ -static int warmup[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 30 }; - -/* switch lamp off on unload (default = no)*/ -static int lOffonEnd[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -/* model override (0-->none) */ -static UShort mov[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -/* forceMode (0--> auto, 1: SPP, 2:EPP, others: auto) */ -static UShort forceMode[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = 0 }; - -/* to use delayed I/O for each device */ -static Bool slowIO[_MAX_PTDEVS] = { [0 ... (_MAX_PTDEVS-1)] = _FALSE }; - -#else - static pScanData PtDrvDevices[_MAX_PTDEVS]= { NULL, NULL, NULL, NULL }; static int lampoff[_MAX_PTDEVS] = { 180, 180, 180, 180 }; static int warmup[_MAX_PTDEVS] = { 30, 30, 30, 30 }; @@ -147,140 +108,14 @@ static int lOffonEnd[_MAX_PTDEVS] static UShort mov[_MAX_PTDEVS] = { 0, 0, 0, 0 }; static UShort forceMode[_MAX_PTDEVS] = { 0, 0, 0, 0 }; -#endif - /* timers for warmup checks */ static TimerDef toTimer[_MAX_PTDEVS]; -#ifndef __KERNEL__ static Bool PtDrvInitialized = _FALSE; #ifdef HAVE_SETITIMER static struct itimerval saveSettings; #endif -#else -static Bool deviceScanning = _FALSE; - -static struct timer_list tl[_MAX_PTDEVS]; - -/* for calculation of the timer expiration */ -extern volatile unsigned long jiffies; - -/* the parameter interface - */ -#if ((LINUX_VERSION_CODE > 0x020111) && defined(MODULE)) -MODULE_AUTHOR("Gerhard Jaeger "); -MODULE_DESCRIPTION("Plustek parallelport-scanner driver"); - -/* addresses this 'new' license feature... */ -#ifdef MODULE_LICENSE -MODULE_LICENSE("GPL"); -#endif - -#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)) -MODULE_PARM(port, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(lampoff, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(warmup,"1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(lOffonEnd, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(mov, "1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(slowIO,"1-" __MODULE_STRING(_MAX_PTDEVS) "i"); -MODULE_PARM(forceMode,"1-" __MODULE_STRING(_MAX_PTDEVS) "i"); - -#else - -static int array_len = _MAX_PTDEVS; - -module_param_array(port, int, &array_len, 0); -module_param_array(lampoff, int, &array_len, 0); -module_param_array(warmup, int, &array_len, 0); -module_param_array(lOffonEnd, int, &array_len, 0); -module_param_array(mov, ushort, &array_len, 0); -module_param_array(slowIO, int, &array_len, 0); -module_param_array(forceMode, ushort, &array_len, 0); - -#endif - - -MODULE_PARM_DESC(port, "I/O base address of parport"); -MODULE_PARM_DESC(lampoff, "Lamp-Off timer preset in seconds"); -MODULE_PARM_DESC(warmup, "Minimum warmup time in seconds"); -MODULE_PARM_DESC(lOffonEnd, "1 - switchoff lamp on unload"); -MODULE_PARM_DESC(mov, "Modell-override switch"); -MODULE_PARM_DESC(slowIO, "0 = Fast I/O, 1 = Delayed I/O"); -MODULE_PARM_DESC(forceMode, "0 = use auto detection, " - "1 = use SPP mode, 2 = use EPP mode"); -#endif - -#if defined (CONFIG_DEVFS_FS) -# ifndef (DEVFS_26_STYLE) - static devfs_handle_t devfs_handle = NULL; -# endif -#else -# ifdef LINUX_26 - static class_t *ptdrv_class; -# endif -#endif - -/* - * the module interface - */ -static int pt_drv_open ( struct inode *, struct file *); -static CLOSETYPE pt_drv_close( struct inode *, struct file *); - -#ifdef LINUX_20 - static int pt_drv_read( struct inode*, struct file*, char*, int ); - static int pt_drv_write( struct inode*, struct file*, const char*, int ); -#else - static ssize_t pt_drv_read ( struct file *file, - char *buffer, size_t count, loff_t *); - static ssize_t pt_drv_write( struct file *file, - const char *buffer, size_t tmp,loff_t *count); -#endif - -#ifdef NOLOCK_IOCTL - static long pt_drv_ioctl( struct file *, UInt, unsigned long ); -#else - static int pt_drv_ioctl( struct inode *, struct file *, UInt, unsigned long ); -#endif - - -/* - * the driver interface - */ -#ifdef LINUX_20 - -static struct file_operations pt_drv_fops = -{ - NULL, /* seek */ - pt_drv_read, /* read */ - pt_drv_write, /* write */ - NULL, /* readdir */ - NULL, /* select */ - pt_drv_ioctl, /* ioctl */ - NULL, /* mmap */ - pt_drv_open, /* open */ - pt_drv_close, /* release */ - NULL, /* fsync */ - NULL, /* fasync */ - NULL, /* check_media_change */ - NULL /* revalidate */ -}; - -#else /* 2.2.x and higher stuff */ - -static struct file_operations pt_drv_fops = { -#ifdef LINUX_24 - owner: THIS_MODULE, -#endif - read: pt_drv_read, - write: pt_drv_write, - IOCTL: pt_drv_ioctl, - open: pt_drv_open, - release: pt_drv_close, -}; -#endif - -#endif /* guard __KERNEL */ /****************************** some prototypes ******************************/ @@ -288,23 +123,6 @@ static void ptdrvStartLampTimer( pScanDa /****************************** local functions ******************************/ -#ifdef __KERNEL__ -/** depending on the device, return the data structure - */ -static pScanData get_pt_from_inode(struct inode *ip) -{ - int minor = _MINOR(ip); - - /* - * unit out of range - */ - if (minor >= _MAX_PTDEVS ) - return NULL; - - return( PtDrvDevices[minor] ); -} -#endif - /** copy user-space data into kernel memory */ static int getUserPtr(const pVoid useraddr, pVoid where, UInt size ) @@ -315,32 +133,9 @@ static int getUserPtr(const pVoid userad if((NULL == useraddr) || ( 0 == size)) return _E_INVALID; -#ifdef __KERNEL__ - if ((err = verify_area_20(VERIFY_READ, useraddr, size))) - return err; -#endif - switch (size) { -#ifdef __KERNEL__ - case sizeof(u_char): - GET_USER_RET(*(u_char *)where, (u_char *) useraddr, -EFAULT); - break; - - case sizeof(u_short): - GET_USER_RET(*(u_short *)where, (u_short *) useraddr, -EFAULT); - break; - - case sizeof(u_long): - GET_USER_RET(*(u_long *)where, (u_long *) useraddr, -EFAULT); - break; - - default: - if (copy_from_user(where, useraddr, size)) - return -EFAULT; -#else default: memcpy( where, useraddr, size ); -#endif } return err; } @@ -354,20 +149,11 @@ static int putUserPtr( const pVoid ptr, if (NULL == useraddr) return _E_INVALID; -#ifdef __KERNEL__ - if ((err = verify_area_20(VERIFY_WRITE, useraddr, size))) - return err; - - if (copy_to_user(useraddr, ptr, size )) - return -EFAULT; -#else memcpy( useraddr, ptr, size ); -#endif return err; } -#ifndef __KERNEL__ static unsigned long copy_from_user( pVoid dest, pVoid src, unsigned long len ) { memcpy( dest, src, len ); @@ -379,37 +165,16 @@ static unsigned long copy_to_user( pVoid memcpy( dest, src, len ); return 0; } -#endif /** */ static int putUserVal(const ULong value, pVoid useraddr, UInt size) { -#ifdef __KERNEL__ - int err; -#endif - if (NULL == useraddr) return _E_INVALID; -#ifdef __KERNEL__ - if ((err = verify_area_20(VERIFY_WRITE, useraddr, size))) - return err; -#endif - switch (size) { -#ifdef __KERNEL__ - case sizeof(u_char): - PUT_USER_RET((u_char)value, (u_char *) useraddr, -EFAULT); - break; - case sizeof(u_short): - PUT_USER_RET((u_short)value, (u_short *) useraddr, -EFAULT); - break; - case sizeof(u_long): - PUT_USER_RET((u_long)value, (u_long *) useraddr, -EFAULT); - break; -#else case sizeof(UChar): *(pUChar)useraddr = (UChar)value; break; @@ -420,7 +185,6 @@ static int putUserVal(const ULong value, *(pULong)useraddr = (ULong)value; break; -#endif default: return _E_INVALID; } @@ -506,22 +270,14 @@ static void ptdrvLampWarmup( pScanData p /** */ -#ifdef __KERNEL__ -static void ptdrvLampTimerIrq( unsigned long ptr ) -#else static void ptdrvLampTimerIrq( int sig_num ) -#endif { pScanData ps; DBG( DBG_HIGH, "!! IRQ !! Lamp-Timer stopped.\n" ); -#ifdef __KERNEL__ - ps = (pScanData)ptr; -#else _VAR_NOT_USED( sig_num ); ps = PtDrvDevices[0]; -#endif /* * paranoia check! @@ -559,7 +315,6 @@ static void ptdrvLampTimerIrq( int sig_n */ static void ptdrvStartLampTimer( pScanData ps ) { -#ifndef __KERNEL__ sigset_t block, pause_mask; struct sigaction s; #ifdef HAVE_SETITIMER @@ -597,17 +352,6 @@ static void ptdrvStartLampTimer( pScanDa #else alarm( ps->lampoff ); #endif -#else - init_timer( &tl[ps->devno] ); - - /* timeout val in seconds */ - tl[ps->devno].expires = jiffies + ps->lampoff * HZ; - tl[ps->devno].data = (unsigned long)ps; - tl[ps->devno].function = ptdrvLampTimerIrq; - - if( 0 != ps->lampoff ) - add_timer( &tl[ps->devno] ); -#endif DBG( DBG_HIGH, "Lamp-Timer started!\n" ); } @@ -616,7 +360,6 @@ static void ptdrvStartLampTimer( pScanDa */ static void ptdrvStopLampTimer( pScanData ps ) { -#ifndef __KERNEL__ sigset_t block, pause_mask; /* block SIGALRM */ @@ -630,10 +373,6 @@ static void ptdrvStopLampTimer( pScanDat _VAR_NOT_USED( ps ); alarm(0); #endif -#else - if( 0 != ps->lampoff ) - del_timer( &tl[ps->devno] ); -#endif DBG( DBG_HIGH, "Lamp-Timer stopped!\n" ); } @@ -701,23 +440,11 @@ static int ptdrvOpenDevice( pScanData ps UShort lastMode; ULong devno; -#ifdef __KERNEL__ - UShort flags; - struct pardevice *pd; - struct parport *pp; - ProcDirDef procDir; -#else int pd; -#endif /* * push some values from the struct */ -#ifdef __KERNEL__ - flags = ps->flags; - pp = ps->pp; - procDir = ps->procDir; -#endif pd = ps->pardev; iobase = ps->sCaps.wIOBase; asic = ps->sCaps.AsicID; @@ -734,29 +461,10 @@ static int ptdrvOpenDevice( pScanData ps /* * pop the val(s) */ -#ifdef __KERNEL__ - ps->flags = flags; - ps->pp = pp; - ps->procDir = procDir; -#endif ps->pardev = pd; ps->bLastLampStatus = lastStat; ps->IO.lastPortMode = lastMode; ps->devno = devno; - -#ifdef __KERNEL__ - if( _TRUE == slowIO[devno] ) { - DBG( DBG_LOW, "Using slow I/O\n" ); - ps->IO.slowIO = _TRUE; - ps->IO.fnOut = IOOutDelayed; - ps->IO.fnIn = IOInDelayed; - } else { - DBG( DBG_LOW, "Using fast I/O\n" ); - ps->IO.slowIO = _FALSE; - ps->IO.fnOut = IOOut; - ps->IO.fnIn = IOIn; - } -#endif ps->ModelOverride = mov[devno]; ps->warmup = warmup[devno]; ps->lampoff = lampoff[devno]; @@ -798,19 +506,6 @@ static int ptdrvInit( int devno ) return _E_ALLOC; } -#ifdef __KERNEL__ - if( _TRUE == slowIO[devno] ) { - DBG( DBG_LOW, "Using slow I/O\n" ); - ps->IO.slowIO = _TRUE; - ps->IO.fnOut = IOOutDelayed; - ps->IO.fnIn = IOInDelayed; - } else { - DBG( DBG_LOW, "Using fast I/O\n" ); - ps->IO.slowIO = _FALSE; - ps->IO.fnOut = IOOut; - ps->IO.fnIn = IOIn; - } -#endif ps->ModelOverride = mov[devno]; ps->warmup = warmup[devno]; ps->lampoff = lampoff[devno]; @@ -845,13 +540,8 @@ static int ptdrvInit( int devno ) if( _OK == retval ) { -#ifdef __KERNEL__ - _PRINT( "pt_drv%u: %s found on port 0x%04x\n", - devno, MiscGetModelName(ps->sCaps.Model), ps->IO.pbSppDataPort ); -#else DBG( DBG_LOW, "pt_drv%u: %s found\n", devno, MiscGetModelName(ps->sCaps.Model)); -#endif /* * initialize the timespan timer @@ -859,43 +549,23 @@ static int ptdrvInit( int devno ) MiscStartTimer( &toTimer[ps->devno], (_SECOND * ps->warmup)); if( 0 == ps->lampoff ) -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp-Timer switched off.\n", devno ); else { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp-Timer set to %u seconds.\n", devno, ps->lampoff ); } -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: WarmUp period set to %u seconds.\n", devno, ps->warmup ); if( 0 == ps->lOffonEnd ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp untouched on driver unload.\n", devno ); } else { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv%u: Lamp switch-off on driver unload.\n", devno ); } @@ -1287,31 +957,19 @@ static int ptdrvRead( pScanData ps, pUCh int retval = _OK; #ifdef _ASIC_98001_SIM -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_LOW, -#endif "pt_drv : Software-Emulation active, can't read!\n" ); return _E_INVALID; #endif if((NULL == buffer) || (NULL == ps)) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv : Internal NULL-pointer!\n" ); return _E_NULLPTR; } if( 0 == count ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: reading 0 bytes makes no sense!\n", ps->devno ); return _E_INVALID; } @@ -1325,11 +983,7 @@ static int ptdrvRead( pScanData ps, pUCh * when using the cat /dev/pt_drv command! */ if (!(ps->DataInf.dwVxdFlag & _VF_ENVIRONMENT_READY)) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: Cannot read, driver not initialized!\n",ps->devno); return _E_SEQUENCE; } @@ -1340,11 +994,7 @@ static int ptdrvRead( pScanData ps, pUCh ps->Scan.bp.pMonoBuf = _KALLOC( ps->DataInf.dwAppPhyBytesPerLine, GFP_KERNEL); if ( NULL == ps->Scan.bp.pMonoBuf ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: Not enough memory available!\n", ps->devno ); return _E_ALLOC; } @@ -1355,11 +1005,7 @@ static int ptdrvRead( pScanData ps, pUCh scaleBuf = _KALLOC( ps->DataInf.dwAppPhyBytesPerLine, GFP_KERNEL); if ( NULL == scaleBuf ) { _KFREE( ps->Scan.bp.pMonoBuf ); -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: Not enough memory available!\n", ps->devno ); return _E_ALLOC; } @@ -1406,11 +1052,7 @@ static int ptdrvRead( pScanData ps, pUCh retval = ps->Calibration( ps ); if( _OK != retval ) { -#ifdef __KERNEL__ - _PRINT( -#else DBG( DBG_HIGH, -#endif "pt_drv%u: calibration failed, result = %i\n", ps->devno, retval ); goto ReadFinished; @@ -1507,12 +1149,9 @@ static int ptdrvRead( pScanData ps, pUCh ps->Scan.dwLinesToRead--; /* needed, esp. to avoid freezing the system in SPP mode */ -#ifdef __KERNEL__ - schedule(); /*#else sched_yield(); */ -#endif } if (ps->fScanningStatus) { @@ -1565,346 +1204,6 @@ ReadFinished: return retval; } -/*************************** the module interface ****************************/ - -#ifdef __KERNEL__ /* the kernel module interface */ - -/* Designed to be used as a module */ -#ifdef MODULE - -/*............................................................................. - * gets called upon module initialization - */ -#ifdef LINUX_26 -static int __init ptdrv_init( void ) -#else -int init_module( void ) -#endif -{ - UInt devCount; - UInt i; - int retval = _OK; - int result = _OK; -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - char controlname[24]; -#endif -# ifdef LINUX_26 - char devname[20]; -#endif - - DBG( DBG_HIGH, "*********************************************\n" ); - DBG( DBG_HIGH, "pt_drv: init_module()\n" ); - -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - devfs_handle = devfs_mk_dir(NULL, "scanner", NULL); - if( devfs_register_chrdev(_PTDRV_MAJOR, _DRV_NAME, &pt_drv_fops)) { -#else - if( register_chrdev(_PTDRV_MAJOR, _DRV_NAME, &pt_drv_fops)) { -#endif - - _PRINT(KERN_INFO "pt_drv: unable to get major %d for pt_drv devices\n", - _PTDRV_MAJOR); - return -EIO; - } - printk( KERN_INFO "pt_drv : driver version "_PTDRV_VERSTR"\n" ); - -#if !defined (CONFIG_DEVFS_FS) && defined (LINUX_26) - ptdrv_class = class_create(THIS_MODULE, "scanner"); - if (IS_ERR(ptdrv_class)) - goto out_devfs; -#endif - - /* register the proc_fs */ - ProcFsInitialize(); - - /* go through the list of defined ports and try to find a device - */ - devCount = 0; - for( i = 0; i < _MAX_PTDEVS; i++ ) { - - if( 0 != port[i] ) { - result = ptdrvInit( i ); - - if ( _OK == result ) { - PtDrvDevices[i]->flags |= _PTDRV_INITALIZED; - -#ifdef CONFIG_DEVFS_FS -# ifndef DEVFS_26_STYLE - sprintf( controlname, "scanner/pt_drv%d", devCount ); - devfs_register( NULL, controlname, - DEVFS_FL_DEFAULT, _PTDRV_MAJOR, 0, - (S_IFCHR | S_IRUGO | S_IWUGO | S_IFCHR), - &pt_drv_fops, NULL ); -# else /* DEVFS_26_STYLE */ - devfs_mk_cdev(MKDEV(_PTDRV_MAJOR, devCount), - (S_IFCHR | S_IRUGO | S_IWUGO | S_IFCHR), - "scanner/pt_drv%d", devCount); -# endif -#else -# ifdef LINUX_26 - sprintf(devname, "pt_drv%d", devCount); - CLASS_DEV_CREATE(ptdrv_class, - MKDEV(_PTDRV_MAJOR, devCount), NULL, - devname); - -# endif /* LINUX_26 */ -#endif /* CONFIG_DEVFS_FS */ - ProcFsRegisterDevice( PtDrvDevices[i] ); - devCount++; - } else { - retval = result; - ptdrvShutdown( PtDrvDevices[i] ); - PtDrvDevices[i] = NULL; - } - } - } - - /* * if something went wrong, shutdown all... */ - if( devCount == 0 ) { - -#if !defined (CONFIG_DEVFS_FS) && defined (LINUX_26) -out_devfs: - class_destroy(ptdrv_class); -#endif - -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - devfs_unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#else - unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#endif - ProcFsShutdown(); - -#ifdef __KERNEL__ - _PRINT( KERN_INFO "pt_drv : no device(s) detected, (%i)\n", retval ); -#endif - - } else { - - DBG( DBG_HIGH, "pt_drv : init done, %u device(s) found\n", devCount ); - retval = _OK; - } - DBG( DBG_HIGH, "---------------------------------------------\n" ); - - deviceScanning = _FALSE; - return retval; -} - -/*............................................................................. - * cleanup the show - */ -#ifdef LINUX_26 -static void __exit ptdrv_exit( void ) -#else -void cleanup_module( void ) -#endif -{ - UInt i; - pScanData ps; -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - char controlname[24]; - devfs_handle_t master; -#endif - - DBG( DBG_HIGH, "pt_drv: cleanup_module()\n" ); - - for ( i = 0; i < _MAX_PTDEVS; i++ ) { - - ps = PtDrvDevices[i]; - PtDrvDevices[i] = NULL; - - if ( NULL != ps ) { -#ifdef CONFIG_DEVFS_FS -# ifndef DEVFS_26_STYLE - sprintf( controlname, "scanner/pt_drv%d", i ); - master = devfs_find_handle( NULL,controlname, 0, 0, - DEVFS_SPECIAL_CHR, 0 ); - devfs_unregister( master ); -# else - devfs_remove("scanner/pt_drv%d", i); -# endif -#else -# ifdef LINUX_26 - CLASS_DEV_DESTROY(ptdrv_class, MKDEV(_PTDRV_MAJOR, i)); -# endif /* LINUX_26 */ -#endif /* CONFIG_DEVFS_FS */ - ptdrvShutdown( ps ); - ProcFsUnregisterDevice( ps ); - } - } - -#if (defined(CONFIG_DEVFS_FS) && !defined(DEVFS_26_STYLE)) - devfs_unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#else - unregister_chrdev( _PTDRV_MAJOR, _DRV_NAME ); -#endif - ProcFsShutdown(); - -#if !defined (CONFIG_DEVFS_FS) && defined (LINUX_26) - class_destroy(ptdrv_class); -#endif - - DBG( DBG_HIGH, "pt_drv: cleanup done.\n" ); - DBG( DBG_HIGH, "*********************************************\n" ); -} - -#ifdef LINUX_26 -module_init(ptdrv_init); -module_exit(ptdrv_exit); -#endif - -#endif /*MODULE*/ - - -/*............................................................................. - * device open... - */ -static int pt_drv_open(struct inode *inode, struct file *file) -{ - pScanData ps; - - DBG( DBG_HIGH, "pt_drv_open()\n" ); - - ps = get_pt_from_inode(inode); - - if ( NULL == ps ) { - return(-ENXIO); - } - - /* device not found ? */ - if (!(ps->flags & _PTDRV_INITALIZED)) { - return(-ENXIO); - } - - /* device is busy ? */ - if (ps->flags & _PTDRV_OPEN) { - return(-EBUSY); - } - -#ifdef LINUX_26 - if (!try_module_get(THIS_MODULE)) - return -EAGAIN; -#else - MOD_INC_USE_COUNT; -#endif - ps->flags |= _PTDRV_OPEN; - - return _OK; -} - -/*............................................................................. - * device close... - */ -static CLOSETYPE pt_drv_close(struct inode * inode, struct file * file) -{ - pScanData ps; - - DBG( DBG_HIGH, "pt_drv_close()\n" ); - - if ((ps = get_pt_from_inode(inode)) ) { - - ptdrvClose( ps ); - - ps->flags &= ~_PTDRV_OPEN; -#ifdef LINUX_26 - module_put(THIS_MODULE); -#else - MOD_DEC_USE_COUNT; -#endif - CLOSERETURN(0); - } else { - - DBG( DBG_HIGH, "pt_drv: - close failed!\n" ); - CLOSERETURN(-ENXIO); - } -} - -/*............................................................................. - * read data from device - */ -#ifdef LINUX_20 -static int pt_drv_read(struct inode *inode, struct file *file, - char *buffer, int count) -{ - int result; - pScanData ps; - - if ( !(ps = get_pt_from_inode(inode))) - return(-ENXIO); -#else -static ssize_t pt_drv_read( struct file *file, - char *buffer, size_t count, loff_t *tmp ) -{ - int result; - pScanData ps; - - if ( !(ps = get_pt_from_inode(file->f_dentry->d_inode)) ) - return(-ENXIO); -#endif - if ((result = verify_area_20(VERIFY_WRITE, buffer, count))) - return result; - - /* - * as the driver contains some global vars, it is not - * possible to scan simultaenously with two or more devices - */ - if( _TRUE == deviceScanning ) { - printk( KERN_INFO "pt_drv: device %u busy!!!\n", ps->devno ); - return(-EBUSY); - } - - deviceScanning = _TRUE; - - result = ptdrvRead( ps, buffer, count ); - - deviceScanning = _FALSE; - return result; -} - -/*............................................................................. - * writing makes no sense - */ -#ifdef LINUX_20 -static int pt_drv_write(struct inode * inode, struct file * file, - const char * buffer, int count) -{ - return -EPERM; -} -#else - static ssize_t pt_drv_write( struct file * file,const char * buffer, - size_t tmp,loff_t* count) -{ - return -EPERM; -} -#endif - -/*............................................................................. - * the ioctl interface - */ -#ifdef NOLOCK_IOCTL -static long pt_drv_ioctl( struct file *file, UInt cmd, unsigned long arg ) -{ - pScanData ps; - - if ( !(ps = get_pt_from_inode(file->f_dentry->d_inode)) ) - return(-ENXIO); - - return ptdrvIoctl( ps, cmd, (pVoid)arg); -} -#else -static int pt_drv_ioctl( struct inode *inode, struct file *file, - UInt cmd, unsigned long arg ) -{ - pScanData ps; - - if ( !(ps = get_pt_from_inode(inode)) ) - return(-ENXIO); - - return ptdrvIoctl( ps, cmd, (pVoid)arg); -} -#endif - -#else /* the user-mode interface */ - /*............................................................................. * here we only have wrapper functions */ @@ -1980,6 +1279,4 @@ static int PtDrvRead ( pUChar buffer, in return ptdrvRead( PtDrvDevices[0], buffer, count ); } -#endif /* guard __KERNEL__ */ - /* END PLUSTEK-PP_PTDRV.C ...................................................*/ Index: trunk/backend/plustek-pp_scan.h =================================================================== --- trunk.orig/backend/plustek-pp_scan.h +++ trunk/backend/plustek-pp_scan.h @@ -63,8 +63,6 @@ #ifndef __PLUSTEK_SCAN_H__ #define __PLUSTEK_SCAN_H__ -#ifndef __KERNEL__ - # include # include # include @@ -76,19 +74,6 @@ # ifdef HAVE_SYS_IO_H # include # endif -#else -# include -# include -# include -# include "plustek-pp_sysdep.h" -# include -# include - -#ifdef LINUX_24 -# include -#endif /* LINUX_24 */ - -#endif /* __KERNEL__ */ /*............................................................................. * driver properties @@ -104,20 +89,6 @@ # define _OPF ps->IO.fnOut # define _IPF ps->IO.fnIn -#ifdef __KERNEL__ - -#define _OUTB_CTRL(pSD,port_value) _OPF(port_value,pSD->IO.pbControlPort) -#define _OUTB_DATA(pSD,port_value) _OPF(port_value,pSD->IO.pbSppDataPort) -#define _OUTB_ECTL(pSD,port_value) _OPF(port_value,(pSD->IO.portBase+0x402)) - -#define _INB_CTRL(pSD) _IPF(pSD->IO.pbControlPort) -#define _INB_DATA(pSD) _IPF(pSD->IO.pbSppDataPort) -#define _INB_EPPDATA(pSD) _IPF(pSD->IO.pbEppDataPort) -#define _INB_STATUS(pSD) _IPF(pSD->IO.pbStatusPort) -#define _INB_ECTL(pSD) _IPF((pSD->IO.portBase+0x402)) - -#else - #define _OUTB_CTRL(pSD,port_value) sanei_pp_outb_ctrl(pSD->pardev, port_value) #define _OUTB_DATA(pSD,port_value) sanei_pp_outb_data(pSD->pardev, port_value) #define _OUTB_ECTL(pSD,port_value) @@ -127,32 +98,19 @@ #define _INB_EPPDATA(pSD) sanei_pp_inb_epp(pSD->pardev) #define _INB_STATUS(pSD) sanei_pp_inb_stat(pSD->pardev) -#endif - /*............................................................................. * for memory allocation */ -#ifndef __KERNEL__ # define _KALLOC(x,y) malloc(x) # define _KFREE(x) free(x) # define _VMALLOC(x) malloc(x) # define _VFREE(x) free(x) -#else -# define _KALLOC(x,y) kmalloc(x,y) -# define _KFREE(x) kfree(x) -# define _VMALLOC(x) vmalloc(x) -# define _VFREE(x) vfree(x) -#endif /* * WARNING - never use the _SECOND define with the _DODELAY macro !! * they are for use the MiscStartTimer function and the _DO_UDELAY macro */ -#ifndef __KERNEL__ typedef double TimerDef, *pTimerDef; -#else -typedef long long TimerDef, *pTimerDef; -#endif #define _MSECOND 1000 /* based on 1 us */ #define _SECOND (1000*_MSECOND) @@ -160,13 +118,8 @@ typedef long long TimerDef, *pTimerDef; /*............................................................................. * timer topics */ -#ifndef __KERNEL__ # define _DO_UDELAY(usecs) sanei_pp_udelay(usecs) # define _DODELAY(msecs) { int i; for( i = msecs; i--; ) _DO_UDELAY(1000); } -#else -# define _DO_UDELAY(usecs) udelay(usecs) -# define _DODELAY(msecs) mdelay(msecs) -#endif /*............................................................................. * include the shared stuff right here, this concerns the ioctl interface Index: trunk/backend/plustek-pp_scandata.h =================================================================== --- trunk.orig/backend/plustek-pp_scandata.h +++ trunk/backend/plustek-pp_scandata.h @@ -143,17 +143,7 @@ typedef struct { */ typedef struct scandata { -#ifdef __KERNEL__ - UInt flags; /* as follows: */ -#define _PTDRV_INITALIZED 0x00000001 -#define _PTDRV_OPEN 0x00000002 - - struct pardevice *pardev; /* for accessing parport... */ - struct parport *pp; - ProcDirDef procDir; -#else int pardev; /* parport handle in user-space */ -#endif /* * device control Index: trunk/doc/Makefile.am =================================================================== --- trunk.orig/doc/Makefile.am +++ trunk/doc/Makefile.am @@ -124,8 +124,8 @@ BEDOCS += mustek/mustek.CHANGES BEDOCS += mustek_usb/mustek_usb.CHANGES mustek_usb/mustek_usb.TODO BEDOCS += mustek_usb2/mustek_usb2.CHANGES mustek_usb2/mustek_usb2.TODO BEDOCS += niash/niash.TODO -BEDOCS += plustek/FAQ plustek/MakeModule.sh plustek/Makefile.kernel24 \ - plustek/Makefile.kernel26 plustek/Plustek-PARPORT-TODO.txt \ +BEDOCS += plustek/FAQ \ + plustek/Plustek-PARPORT-TODO.txt \ plustek/Plustek-PARPORT.changes plustek/Plustek-PARPORT.txt \ plustek/Plustek-USB-TODO.txt plustek/Plustek-USB.changes \ plustek/Plustek-USB.txt Index: trunk/doc/plustek/FAQ =================================================================== --- trunk.orig/doc/plustek/FAQ +++ trunk/doc/plustek/FAQ @@ -12,111 +12,10 @@ If you have some more FAQ entries, let m THANKS to Jochen , who roamed through the mailing-list and gathered the different questions. - ******************************************************************************* -* TROUBLE-SHOOTING * -* * -* DRIVER TOPICS * +* General * ******************************************************************************* - -SYMPTOM: "kernel-module version mismatch" --------- -"When I try to "make load" I get an error" - -/sbin/modprobe pt_drv || exit 1 -/lib/modules/2.2.14-6.0.6/misc/pt_drv.o: kernel-module version mismatch -/lib/modules/2.2.14-6.0.1/misc/pt_drv.o was compiled -for kernel version 2.2.14-5.0 -while this kernel is version 2.2.14-6.0.1. - -PROBLEM: --------- -You're using the wrong Kernel-header files. - -The path -/usr/include/linux is a link to -/usr/src/linux/include/linux and -/usr/src/linux is normally a link to your current -kernel, i.e: -/usr/src/linux-2.2.14 - -If you now upgrade your kernel and you have -forgotten to correct the link /usr/src/linux, then -every kernel-module you build outside the -kernelsource structure will include the wrong -version information. - -SOLUTION: ---------- -Set the link /usr/src/linux -to your current kernel-source tree before recompiling -kernel-modules like pt_drv, then your version mismatch -problem should be solved. - - - -SYMPTOM: "Device or resource busy" --------- -Any attempt to "modprobe" or "make load" the driver leads -to this message. - -PROBLEM: --------- -The driver refuses to load. During startup, the driver performs -some tests according to the parallel port and the connected -scanners. -If the parallel port is not supported or the scanner cannot be -found, the driver returns an error and the system will report -"device or resource busy" - -SOLUTION: ---------- -There's no way to provide a general solution. First of all -you should check your connections and the parallel port. -Also check power for your scanner. -If the problem still exists, enable the debug-messages of the -pt_drv module (see INSTALL). -Then check the messages after loading or send the output to -the mailing list. -Most of these problems are related to HW-problems. Before -giving up, check the scanner under Windows (not really a -good advice I know, but it helps to find HW-damage). -There was also one case were the internal plugs of the parport -connection were wrong... - - - -SYMPTOM: "Unresolved symbols" --------- -"make load" or "modprobe pt_drv" produces this message: - -/sbin/modprobe pt_drv || exit 1 -/lib/modules/2.2.14-5.0/misc/pt_drv.o: unresolved symbol parport_unregister_device -/lib/modules/2.2.14-5.0/misc/pt_drv.o: unresolved symbol parport_enumerate -/lib/modules/2.2.14-5.0/misc/pt_drv.o: unresolved symbol parport_register_device -/lib/modules/2.2.14-5.0/misc/pt_drv.o: unresolved symbol parport_claim -/lib/modules/2.2.14-5.0/misc/pt_drv.o: unresolved symbol parport_release -/lib/modules/2.2.14-5.0/misc/pt_drv.o: insmod -/lib/modules/2.2.14-5.0/misc/pt_drv.o failed - - -PROBLEM: --------- -The driver needs at least the parport_pc and the parport modules -to work. They MUST be loaded prior to pt_drv. If these modules -are not loaded you get this message. - -SOLUTION: ---------- -Simply load the parport module. You can add this dependency to -your /etc/modules.conf (or /etc/conf.modules) file (see INSTALL). -Then every time you load pt_drv with modprobe, parport will be loaded -automatically. After modifying this file, call -depmod -va - - - SYMPTOM: Scanner makes awful noise -------- @@ -138,7 +37,6 @@ The second case is often reported when t already loaded. So remove lp.o before loading pt_drv. - SYMPTOM: Printer starts to print while scanning -------- @@ -294,23 +192,6 @@ A: You should be able to use xscanimage now the Acquire Image menu entry. That's all. If not, start gimp from an xterm and have a look at the output. - -Q: Is there any way to load the plustek_driver at bootup-time? - -A: Normally, there is no need to do so, because once you - altered your /etc/conf.modules file (or /etc/modules.conf) - and added the suggested stuff (see INSTALL file), you won't - have to worry about loading the driver. It happens automagically. ;-) - The driver will be loaded when needed (and eventually - removed after a specific time of not using it). - - Nevertheless, another possibility is to do a modprobe pt_drv in the - /etc/rc.d/boot.local (using SuSE) or - /etc/rc.d/rc.local (using RedHat or Mandrake) file - So the driver will be loaded at bootup-time... - !!! YOUR SCANNER MUST BE ONLINE during power-up then !!! - - Q: I wonder if Mandrake 7.1's sane rpm file has this support already built in. My scanner light is coming on yet Xscanimage seems to report that there is no scanner present. Index: trunk/doc/plustek/MakeModule.sh =================================================================== --- trunk.orig/doc/plustek/MakeModule.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/bin/bash -#****************************************************************************** -# -# Bash-Script to create Plustek-Scannerdriver modules for Kernel 2.4, 2.6 and 3.x -# out of the backend sources... -# - -BUILD_DIR=$PWD/build -SRC_DIR=$PWD/../../backend -MAKEFILE=$PWD/Makefile.kernel26 -KERNEL_V=`uname -r` -OSMINOR=`uname -r | cut -b 3` -OSMAJOR=`uname -r | cut -b 1` - -# -# some intro ;-) -# -echo "This script will try and build a suitable kernel-module for your system." -echo "If you'd like to make the module WITH debug output, restart this script" -echo "with as follows:" -echo "./MakeModule.sh DEBUG=y" -echo "Press to continue or to cancel." -read - -# -# we need to be root user... -# -echo -n "Check for root..." -if [ $EUID -ne 0 ]; then - echo -e "\b\b\b - failed" - echo "Please retry as root user." - exit -1 -fi -echo -e "\b\b\b - done." - -# -# Version checks... -# -echo -e "\nCheck for kernelversion:" -if [ "$OSMAJOR" == "3" ];then - echo "Using makefile for kernel 2.6.x - okay for kernel 3 as well..." - MAKEFILE=$PWD/Makefile.kernel26 -elif [ "$OSMINOR" == "6" ]; then - echo "Using makefile for kernel 2.6.x" - MAKEFILE=$PWD/Makefile.kernel26 -elif [ "$OSMINOR" == "4" ]; then - echo "Using makefile for kernel 2.4.x" - MAKEFILE=$PWD/Makefile.kernel24 -else - echo "Your kernelversion >"$OSMAJOR"."$OSMINOR"< is probably not supported" - exit -2 -fi - -# -# Setup... -# -echo -e "Build-directory: \n"$BUILD_DIR -echo -n "Removing build-directory..." -rm -rf $BUILD_DIR -echo -e "\b\b\b - done." - -echo -n "Creating build-directory..." -mkdir $BUILD_DIR -cd $BUILD_DIR -echo -e "\b\b\b - done.\n" - -echo -n "Linking source files..." -C_FILES=`ls $SRC_DIR/plustek-pp_*.c` -H_FILES=`ls $SRC_DIR/plustek-pp_*.h` - -for F in $C_FILES $H_FILES $SRC_DIR/plustek-pp.h $SRC_DIR/plustek_pp.c; do - ln -s $F . -done -echo -e "\b\b\b - done." - -echo -n "Copying Makefile to build-directory..." -cp $MAKEFILE Makefile -echo -e "\b\b\b - done." - -# -# Building the module... -# -echo "Making the module..." -if [ "$OSMAJOR" == "2" -a "$OSMINOR" == "4" ]; then - make all $1 -else - make -C /lib/modules/$KERNEL_V/build/ SUBDIRS=$BUILD_DIR modules $1 -fi -RES=$? -cd .. -if [ $RES != 0 ]; then - echo "There were some build errors..." - exit -1 -fi -echo "done." - -echo "Should I install the module?" -echo "Press to continue or to cancel." -read - -make -C $BUILD_DIR install - -echo "Should I try and load the module?" -echo "If this step fails, check the kernel-log." -echo "Press to continue or to cancel." -read - -make -C $BUILD_DIR load -echo "done." - -echo "Should I remove the build directory?" -echo "Press to continue or to cancel." -read - -rm -rf $BUILD_DIR -echo "done." Index: trunk/doc/plustek/Makefile.kernel24 =================================================================== --- trunk.orig/doc/plustek/Makefile.kernel24 +++ /dev/null @@ -1,250 +0,0 @@ -# Makefile for the plustek scanner driver (kernel-module) -# -############################################################################### -# -# define the directories -# -HOME_DIR := . -SRC_DIR := $(HOME_DIR) -INC_DIR := $(SRC_DIR) -OBJ_DIR := $(HOME_DIR)/obj -DOC_DIR := $(HOME_DIR)/doc -BACKEND := $(SRC_DIR) - -# -# define the used tools -# -MD = mkdir -p -CC = gcc -TAR = tar -REF = cxref - -# -# Comment/uncomment the following line to disable/enable debugging -# can also be set by commandline parameter: make all DEBUG=y -# -#DEBUG = y - -# -# common compiler options -# -OPT = -fomit-frame-pointer -D_PTDRV_VERSTR=\"$(VERSIONSTR)\" - -# -# cxref options -# -REFOPT = -xref-all -index-all -html32 - -# -# Comment out if you are not running SMP. Someone take this out of here -# when the SMP stuff gets moved out of the kernel Makefile. -# SMP = 1 -# SMP_PROF = 1 - -# -# add the following to get assembly listing -# -Wa,-alh,-L -g - -# -# get some version numbers -# -ifeq ($(LINUXVERSION),) - LINUXVERSION = $(shell uname -r) -endif - -VERSIONSTR = $(shell grep "define BACKEND_VERSION" $(SRC_DIR)/plustek_pp.c | cut -b25-50 ) - -# Change it here or specify it on the "make" commandline -ifeq ($(HEADER_PATH),) -MACHTYPE = $(shell env | grep debian-linux | wc -l | sed 's/ //g') -ifeq ($(MACHTYPE),1) -# debian - HEADER_PATH = /usr/src/kernel-headers-$(LINUXVERSION)/include -else -# redhat, slackware - HEADER_PATH = /usr/src/linux/include -endif -# HEADER_PATH = /usr/include -endif - -ifeq ($(DEBUG),y) - DEBFLAGS = -O -g -DDEBUG # "-O" is needed to expand inlines -else - DEBFLAGS = -O2 -endif - -# -# the new style reference -# -K24_HEADER_PATH = /lib/modules/$(LINUXVERSION)/build/include - -# -# try to autodetect if we can use the new style header include references -# -KERNEL_HEADERS = $(shell if test -d $(K24_HEADER_PATH); then \ - echo $(K24_HEADER_PATH); \ - else \ - echo $(HEADER_PATH); \ - fi; ) - -# -# seems to be necessary for kernels 2.4.x -# -MODVERFILE = $(shell if [ -e $(KERNEL_HEADERS)/linux/modversions.h ]; then \ - echo $(KERNEL_HEADERS)/linux/modversions.h ; \ - else \ - echo $(KERNEL_HEADERS)/linux/modsetver.h ; \ - fi ) - -MODFLAGS = -DMODULE - -# -# set MODVERSIONS if the kernel uses it -# -VERSUSED = $(shell grep 'define CONFIG_MODVERSIONS' \ - $(KERNEL_HEADERS)/linux/autoconf.h | wc -l | sed 's/ //g') -ifeq ($(VERSUSED),1) - MODFLAGS += -DMODVERSIONS -include $(MODVERFILE) -endif - - -WARNFLAGS = -Wall -Wstrict-prototypes -CFLAGS = $(WARNFLAGS) $(OPT) -D__KERNEL__ -I$(KERNEL_HEADERS) -I$(INC_DIR) -I$(BACKEND) $(DEBFLAGS) $(MODFLAGS) -MODLIB = /lib/modules/$(LINUXVERSION) - -ifdef SMP -CFLAGS += -D__SMP__ - -ifdef SMP_PROF -CFLAGS += -D__SMP_PROF__ -endif -endif - -TARGET = pt_drv - -OBJ = $(TARGET).o -NAMES := dac detect genericio image map misc models io procfs -NAMES := $(NAMES) motor p9636 ptdrv scale tpa p48xx p12 p12ccd -NAMES := $(addprefix plustek-pp_, $(NAMES)) -SRCS := $(addprefix $(SRC_DIR)/, $(NAMES)) -SRCS := $(addsuffix .c, $(SRCS)) -OBJS := $(addprefix $(OBJ_DIR)/, $(NAMES)) -OBJS := $(addsuffix .o, $(OBJS)) -INCS := scan dbg types scandata procs hwdefs sysdep -INCS := $(addsuffix .h, $(INCS)) -HDRS = $(addprefix $(INC_DIR)/plustek-pp_, $(INCS)) - -# -# the header files we need from the backend -# -BACKINCS := plustek-pp.h -BACKINCS := $(addprefix $(BACKEND)/, $(BACKINCS)) - -group = "root" -mode = "644" -INST_DIR = /lib/modules/$(LINUXVERSION)/kernel/drivers/char - -info: - @clear - @echo "Makefile to create the Plustek-Scanner kernel-module:" - @echo "all ... builds the module" - @echo "all DEBUG=y ... builds the module with debug-messages enabled" - @echo "clean ... cleans up the show" - @echo "install ... installs the module to the library path" - @echo "uninstall ... removes the module from the library path" - @echo "load ... tries to load the module and creates device nodes" - @echo "unload ... unloads the module" - - -all: .depend chkdir $(OBJ) - -# -# create object directory -# -.PHONY : chkdir -chkdir: - @-$(MD) $(OBJ_DIR) - @-$(MD) $(DOC_DIR) - -$(OBJ): $(OBJS) - $(LD) -r $^ -o $@ - -$(OBJS): Makefile $(HDRS) $(BACKINCS) - -$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c - $(CC) $(CFLAGS) -c $< -o $@ - -$(OBJ_DIR)/$(OBJ): VERSION1 VERSION0 - -# -# copy the driver to the modules directory -# -install: - mkdir -p $(INST_DIR) - install -c -m $(mode) $(OBJ) $(INST_DIR) - /sbin/depmod -a - -# -# remove it -# -uninstall: - rm -f $(INST_DIR)/$(OBJ) - -# -# use modprobe to load the driver, remember to set the -# parameter in /etc/modules.conf (see sane-plustek_pp.man for more details) -# -load: $(INST_DIR)/$(OBJ) -# invoke modprobe with all arguments we got - /sbin/modprobe $(TARGET) || exit 1 - -# Remove stale nodes and replace them, then give gid and perms - rm -f /dev/$(TARGET)* - -# when using the devfs support, we check the /dev/scanner entries -# and only create links to the devfs nodes -# at least we create one link - @if [ -e /dev/scanner/$(TARGET)* ]; then \ - ln -s /dev/scanner/$(TARGET)0 /dev/$(TARGET); \ - for name in `ls /dev/scanner | grep $(TARGET)`; do \ - ln -s /dev/scanner/$$name /dev/$$name ; \ - done \ - else \ - mknod /dev/$(TARGET) c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 0; \ - mknod /dev/$(TARGET)0 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 0; \ - mknod /dev/$(TARGET)1 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 1; \ - mknod /dev/$(TARGET)2 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 2; \ - mknod /dev/$(TARGET)3 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 3; \ - \ - chgrp $(group) /dev/$(TARGET)*; \ - chmod $(mode) /dev/$(TARGET)*; \ - fi - -# -# unload the driver -# -unload: - /sbin/modprobe -r $(TARGET) || exit 1 - -# Remove stale nodes - rm -f /dev/$(TARGET)* - -# -# create reference docu -# -doc: chkdir - $(REF) $(REFOPT) $(INC_DIR)/*.h $(SRC_DIR)/*.c $(BACKEND)/plustek-share.h \ - -D__KERNEL__ -I$(KERNEL_HEADERS) -I$(INC_DIR) -I$(BACKEND) $(MODFLAGS) \ - -D_PTDRV_V1=$(VERSION1) -D_PTDRV_V0=$(VERSION0) -D_PTDRV_BUILD=$(BUILD) -O$(DOC_DIR) - -clean: - @-rm -f $(OBJ_DIR)/*.o .depend depend dep $(REF).* *.html $(TARGET).o - @-rm -rf $(OBJ_DIR) - @-rm -rf $(DOC_DIR) - -depend .depend dep: - $(CC) $(CFLAGS) -M $(SRCS) > $@ - -ifeq (.depend,$(wildcard .depend)) -#include .depend -endif Index: trunk/doc/plustek/Makefile.kernel26 =================================================================== --- trunk.orig/doc/plustek/Makefile.kernel26 +++ /dev/null @@ -1,124 +0,0 @@ -# Makefile for the plustek scanner driver (kernel-module) -# -############################################################################### - -# -# retrieve the version numbers -# -ifeq ($(LINUXVERSION),) - LINUXVERSION = $(shell uname -r) -endif -LINUXRELEASE = $(shell uname -r | cut -d'.' -f3) - -ifeq ($(VERSIONSTR),) - ifeq ($(SUBDIRS),) - VERSIONSTR = $(shell grep "define BACKEND_VERSION" $(M)/plustek_pp.c | cut -b25-50 ) - else - VERSIONSTR = $(shell grep "define BACKEND_VERSION" $(SUBDIRS)/plustek_pp.c | cut -b25-50 ) - endif -endif - -# -# extra flags -# -EXTRA_CFLAGS += -D_PTDRV_VERSTR=\"$(VERSIONSTR)\" - -ifeq ($(DEBUG),y) - EXTRA_CFLAGS += -DDEBUG -endif - -# -# the module name -# -TARGET := pt_drv -MODULE := $(TARGET).ko - -# -# our files... -# -NAMES := dac detect genericio image map misc models io procfs -NAMES := $(NAMES) motor p9636 ptdrv scale tpa p48xx p12 p12ccd -NAMES := $(addprefix plustek-pp_, $(NAMES)) -OBJS := $(addsuffix .o, $(NAMES)) - -# -# now the kernel magic -# -ifneq ($(KERNELRELEASE),) -obj-m := $(TARGET).o - -$(TARGET)-objs := $(OBJS) - -else -KDIR := /lib/modules/$(shell uname -r)/build -PWD := $(shell pwd) - -default: - $(MAKE) -C $(KDIR) M=$(PWD) modules -endif - -# -# the installation stuff -# -group = "root" -mode = "644" -INST_DIR = /lib/modules/$(LINUXVERSION)/kernel/drivers/parport - -# -# copy the driver to the modules directory -# -install: - mkdir -p $(INST_DIR) - install -c -m $(mode) $(MODULE) $(INST_DIR) - /sbin/depmod -a - -# -# -# -uninstall: - rm -f $(INST_DIR)/$(MODULE) - -# -# use modprobe to load the driver, remember to set the -# parameter in /etc/conf.modules (see INSTALL for more details) -# -load: $(INST_DIR)/$(MODULE) -# invoke modprobe with all arguments we got - /sbin/modprobe $(TARGET) || exit 1 - -# Remove stale nodes and replace them, then give gid and perms - rm -f /dev/$(TARGET)* - -# when using the devfs support, we check the /dev/scanner entries -# and only create links to the devfs nodes -# at least we create one link - @if [ -e /dev/scanner/$(TARGET)* ]; then \ - ln -s /dev/scanner/$(TARGET)0 /dev/$(TARGET); \ - for name in `ls /dev/scanner | grep $(TARGET)`; do \ - ln -s /dev/scanner/$$name /dev/$$name ; \ - done \ - else \ - mknod /dev/$(TARGET) c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 0; \ - mknod /dev/$(TARGET)0 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 0; \ - mknod /dev/$(TARGET)1 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 1; \ - mknod /dev/$(TARGET)2 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 2; \ - mknod /dev/$(TARGET)3 c `cat /proc/devices | sed -ne "s/\([0-9]*\) pt_drv/\1/p"` 3; \ - \ - chgrp $(group) /dev/$(TARGET)*; \ - chmod $(mode) /dev/$(TARGET)*; \ - fi - -# -# unload the driver -# -unload: - /sbin/modprobe -r $(TARGET) || exit 1 - -# Remove stale nodes - rm -f /dev/$(TARGET)* - -# -# cleanup the show -# -clean: - @-rm -f *.o .depend depend dep $(MODULE) $(TARGET).o $(TARGET).mod.c .*.cmd Index: trunk/doc/plustek/Plustek-PARPORT.txt =================================================================== --- trunk.orig/doc/plustek/Plustek-PARPORT.txt +++ trunk/doc/plustek/Plustek-PARPORT.txt @@ -1,46 +1,10 @@ Plustek-PARPRORT.txt (2004-03-28) Gerhard Jäger ==================================================================== - Beginning with SANE-1.0.13, there's a backend called plustek_pp. This is for controlling Plustek parallel-port scanner and compatible devices. For a full listing, see plustek_pp.desc. -This code formerly was available for creating the Linux kernelmodule -pt_drv. This should no longer be necessary. You should be able to use +This code formerly was available for creating the Linux kernel module +pt_drv. This is no longer be necessary. You should be able to use the backend out of the box. - - -The kernel module ------------------ - -As it might be helpful to create and use the kernel-module, this way still -exists. It's possible to create this module out of the backend sources -in sane-backends/backend. Simply do (as root user) - -./MakeModule.sh - -Then the module should be compiled, installed and loaded. - -Add the following three lines to file /etc/modules.conf - -alias char-major-40 pt_drv -pre-install pt_drv modprobe -k parport -options pt_drv lampoff=180 warmup=15 port=0x378 lOffonEnd=0 mov=0 slowIO=1 - -See man page for sane-plustek_pp ("man sane-plustek_pp") for explanation of -these options. - -Now "scanimage -L" should show something like this: -device `plustek:/dev/pt_drv' is a Plustek 9630P flatbed scanner - - -Known Problems: ---------------- - -Sometimes it is necessary to change the ioctl-interface between the -driver and the backend, in this case the version number of the communication -protocol will be changed and newer drivers won't work with older backends -and vice versa. -In this case (error -9019 in the SANE debug output!!) you have to recompile SANE -AND the driver (have a look at the installation procedure above). Index: trunk/doc/plustek/Plustek-USB.txt =================================================================== --- trunk.orig/doc/plustek/Plustek-USB.txt +++ trunk/doc/plustek/Plustek-USB.txt @@ -4,10 +4,7 @@ Plustek-USB.txt (2005-08-08) Gerhard Jä NOTE: ----- -ALL YOU NEED TO RUN YOUR USB SCANNER IS ALREADY INCLUDED. THERE'S -NO NEED TO INSTALL THE KERNEL MODULE pt_drv. THIS ONE IS ONLY NEEDED -FOR THE PLUSTEK PARALLELPORT SCANNER. - +ALL YOU NEED TO RUN YOUR USB SCANNER IS ALREADY INCLUDED. List of all currently implemented devices ----------------------------------------- Index: trunk/doc/sane-plustek_pp.man =================================================================== --- trunk.orig/doc/sane-plustek_pp.man +++ trunk/doc/sane-plustek_pp.man @@ -9,18 +9,10 @@ The library implements a SANE (Scanner Access Now Easy) backend that provides access to Plustek ASIC 9600[1/3] and P9800[1/3] based parallel port flatbed scanners. -The access of the scanner is either done directly by the backend -or via kernel module, called pt_drv which can be created out of -the -.B sane\-plustek_pp -backend code \- see also section -.B "BUILDING THE KERNEL MODULE" -for further information. .SH "SUPPORTED DEVICES" -At present, the following scanners should work with this backend -and/or the kernel module: +At present, the following scanners should work with this backend: .PP .B "PLUSTEK SCANNERS" .PP @@ -112,18 +104,14 @@ BrightScan OpticPro OpticPro P12 .ft R .SH "DEVICE NAMES" -This backend works in two modes, the so called "direct-mode" -and the "kernel-mode". In direct-mode, the user-space backend is -used, in kernel-mode, you should have a kernel-module named pt_drv -loaded. -This backends default device is: +This backend's default device is: .PP .RS .I 0x378 .RE .PP -This "default device" will be used, if no configuration -file can be found. It is rather the base address of the parallel port +This "default device" will be used if no configuration +file can be found. It is the base address of the parallel port on i386 machines. .PP As the backend supports up to four devices, it is possible to @@ -150,24 +138,13 @@ For a proper setup, you will need at lea .I device 0x378 .RE .PP -or -.RS -.I [kernel] -.br -.I device /dev/pt_drv -.RE -.PP .I direct tells the backend, that the following devicename (here .IR 0x378 ) has to be interpreted as parallel port scanner device. In -fact it is the address to use, alternatively you can use +fact it is the address to use. Alternatively you can use .I /dev/parport0 if the backend has been compiled with libieee1284 support. -.I kernel -should only be used, when a kernel-module has been built -out of the backend sources. See below for more instructions -about this. .PP Further options: .PP @@ -235,157 +212,6 @@ See the file for examples. .PP -.SH "BUILDING THE KERNEL MODULE" -As mentioned before, the -.B sane\-plustek_pp -backend code can also be compiled and installed as linux kernel module. To do so, -you will need the source-files of this sane\-backend installation. -Unpack this tar-ball and go to the directory: -.IR sane\-backends/doc/plustek . -Within this directory, you should find a script called: -.IR MakeModule.sh . -Now if your Linux kernelsources are installed correctly, -it should be possible to build, install and load the -module -.BR pt_drv . -.B Please note, -that the kernelsources need to be configured correctly. -Refer to your distributions -manual on how this is done. As root user, try -.PP -.I ./MakeModule.sh -.PP -the script will try and get all necessary information about your -running kernel and will lead you through the whole installation -process. -.br -.B Note: Installing and loading the can only be done as -superuser. -.PP - -.SH "KERNEL MODULE SETUP" -The configuration of the kernel module is done by providing -some or more options found below to the kernel module at -load time. This can be done by invoking -.BR insmod (8) -with the appropriate parameters or appending the options to the file -.I /etc/modules.conf (kernel < 2.6.x) -or -.I /etc/modprobe.conf (kernel >= 2.6.x) -.PP -.B -The Options: -.br -lampoff=lll -.RS -The value -.I lll -tells the driver, after how many seconds to -switch-off the lamp(s). The default value is 180. -0 will disable this feature. -.br -.B HINT: -Do not use a value that is too small, because often -switching on/off the lamps will reduce their lifetime. -.RE -.PP -port=ppp -.RS -.I ppp -specifies the port base address, where the scanner -is connected to. The default value is 0x378, which -is normally a standard. -.RE -.PP -warmup=www -.RS -.I www -specifies the time in seconds, how long a lamp has to be on, -until the driver will start to scan. The default value is 30. -.RE -.PP -lOffonEnd=e -.RS -.I e -specifies the behaviour when unloading the driver, 1 --> switch -lamps off, 0 --> do not change lamp status -.RE -.PP -slowIO=s -.RS -.I s -specifies which I/O functions the driver should use, 1 --> use -delayed functions, 0 --> use the non-delayed ones -.RE -.PP -forceMode=fm -.RS -.I fm -specifies port mode which should be used, 0 --> autodetection, -1 --> use SPP mode and 2 --> use EPP mode -.RE -.PP -mov=m -.RS -.TP -.IR m " = 0" -default: no override -.TP -.IR m " = 1" -OpticPro 9630PL override (works if OP9630 -has been detected) forces legal size (14") -.TP -.IR m " = 2" -Primax 4800Direct override (works if OP600 -has been detected) swaps red/green color -.TP -.IR m " = 3" -OpticPro 9636 override (works if OP9636 has -been detected) disables backends -transparency/negative capabilities -.TP -.IR m " = 4" -OpticPro 9636P override (works if OP9636 has -been detected) disables backends -transparency/negative capabilities -.TP -.IR m " = 5" -OpticPro A3I override (works if OP12000 has -been detected) enables A3 scanning -.TP -.IR m " = 6" -OpticPro 4800P override (works if OP600 -has been detected) swaps red/green color -.TP -.IR m " = 7" -Primax 4800Direct 30bit override (works if -OP4830 has been detected) -.RE -.PP -Sample entry for file -.IR /etc/modules.conf : -.PP -.RS -alias char\-major\-40 pt_drv -.br -pre-install pt_drv modprobe -k parport -.br -options pt_drv lampoff=180 warmup=15 port=0x378 lOffonEnd=0 mov=0 slowIO=0 forceMode=0 -.RE -.PP -For multidevice support, simply add values separated by commas to -the different options -.PP -.RS -options pt_drv port=0x378,0x278 mov=0,4 slowIO=0,1 forceMode=0,1 -.RE -.PP -Remember to call -.BR depmod (8) -after changing -.IR /etc/conf.modules . -.PP - .SH "PARALLEL PORT MODES" .PP The current driver works best, when the parallel port @@ -423,13 +249,6 @@ The static library implementing this bac .I @LIBDIR@/libsane\-plustek_pp.so The shared library implementing this backend (present on systems that support dynamic loading). -.TP -.I /lib/modules//kernel/drivers/parport/pt_drv.o -The Linux kernelmodule for kernels < 2.6.x. -.TP -.I /lib/modules//kernel/drivers/parport/pt_drv.ko -The Linux kernelmodule for kernels >= 2.6.x. -.PP .SH ENVIRONMENT .TP