diff options
Diffstat (limited to 'debian')
| -rw-r--r-- | debian/changelog | 13 | ||||
| -rw-r--r-- | debian/control | 2 | ||||
| -rw-r--r-- | debian/patches/0190-remove-kernel-driver-for-plustek_pp.patch | 2949 | ||||
| -rw-r--r-- | debian/patches/0195-genesys_fix_total_file_size_exceeding.patch | 100 | ||||
| -rw-r--r-- | debian/patches/series | 2 | ||||
| -rwxr-xr-x | debian/rules | 9 | 
6 files changed, 3070 insertions, 5 deletions
| diff --git a/debian/changelog b/debian/changelog index 3d71c46..93a91d7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,16 @@ +sane-backends (1.1.1-5) unstable; urgency=medium + +  * debian/rules: +    - Change configure parameter --enable-parport-directio to use only on  +      hurd-i386 (Closes: #1008488). +  * debian/control: +   - Change Build-Depend from virtual package libltdl3-dev to libltdl-dev. +  * New debian/patches/0195-genesys_fix_total_file_size_exceeding.patch: +   - Fix out off memory on high resultions (Closes: #942176) +     Cherry-picked from upstream. + + -- Jörg Frings-Fürst <debian@jff.email>  Sun, 27 Mar 2022 18:31:28 +0200 +  sane-backends (1.1.1-4) unstable; urgency=medium    * debian/sane-utils.preinst: Remove man file only on update. diff --git a/debian/control b/debian/control index a7b9e87..87c1306 100644 --- a/debian/control +++ b/debian/control @@ -16,7 +16,7 @@ Build-Depends:   libgphoto2-dev,   libieee1284-3-dev [!hurd-i386],   libjpeg-dev, - libltdl3-dev, + libltdl-dev,   libpoppler-glib-dev,   libsnmp-dev [!kfreebsd-any],   libsystemd-dev [linux-any], diff --git a/debian/patches/0190-remove-kernel-driver-for-plustek_pp.patch b/debian/patches/0190-remove-kernel-driver-for-plustek_pp.patch new file mode 100644 index 0000000..45377dc --- /dev/null +++ b/debian/patches/0190-remove-kernel-driver-for-plustek_pp.patch @@ -0,0 +1,2949 @@ +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 <YYYY-MM-DD, last update of the meta-information, optional> +--- +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 <assert.h> + #  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. +  * <hr> +  */ +-#ifdef __KERNEL__ +-# include <linux/module.h> +-# include <linux/version.h> +- +-# ifdef CONFIG_DEVFS_FS +-#  include <linux/devfs_fs_kernel.h> +-#  if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,69)) +-#   define DEVFS_26_STYLE +-#  endif +-# endif +-#endif +- + #include "plustek-pp_scan.h" +  +-#ifdef __KERNEL__ +-# include <linux/param.h> +-#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 <gerhard@gjaeger.de>"); +-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 <stdlib.h> + # include <stdarg.h> + # include <string.h> +@@ -76,19 +74,6 @@ + # ifdef HAVE_SYS_IO_H + #  include <sys/io.h> + # endif +-#else +-# include <linux/kernel.h> +-# include <linux/init.h> +-# include <linux/version.h> +-# include "plustek-pp_sysdep.h" +-# include <linux/delay.h> +-# include <linux/parport.h> +- +-#ifdef LINUX_24 +-# include <linux/parport_pc.h> +-#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 <jochen@puchalla-online.de>, 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 <ENTER> to continue or <CTRL><C> 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 <ENTER> to continue or <CTRL><C> 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 <ENTER> to continue or <CTRL><C> to cancel." +-read +- +-make -C $BUILD_DIR load +-echo "done." +- +-echo "Should I remove the build directory?" +-echo "Press <ENTER> to continue or <CTRL><C> 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 <gerhard@gjaeger.de> + ==================================================================== +  +- + 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-Version>/kernel/drivers/parport/pt_drv.o +-The Linux kernelmodule for kernels < 2.6.x. +-.TP +-.I /lib/modules/<Kernel-Version>/kernel/drivers/parport/pt_drv.ko +-The Linux kernelmodule for kernels >= 2.6.x. +-.PP +  + .SH ENVIRONMENT + .TP diff --git a/debian/patches/0195-genesys_fix_total_file_size_exceeding.patch b/debian/patches/0195-genesys_fix_total_file_size_exceeding.patch new file mode 100644 index 0000000..4b95241 --- /dev/null +++ b/debian/patches/0195-genesys_fix_total_file_size_exceeding.patch @@ -0,0 +1,100 @@ +Description: Fix out off memory on high resultions +Origin: upstream, https://gitlab.com/sane-project/backends/-/merge_requests/697 +Bug: https://gitlab.com/sane-project/backends/-/issues/580 +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=942176 +Forwarded: no +Last-Update: 2022-03-27 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +Index: trunk/backend/genesys/gl124.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl124.cpp ++++ trunk/backend/genesys/gl124.cpp +@@ -745,7 +745,7 @@ void CommandSetGl124::init_regs_for_scan +     dev->session = session; +  +     dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; +  +     DBG(DBG_info, "%s: total bytes to send to frontend = %zu\n", __func__, +         dev->total_bytes_to_read); +Index: trunk/backend/genesys/gl646.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl646.cpp ++++ trunk/backend/genesys/gl646.cpp +@@ -817,7 +817,8 @@ void CommandSetGl646::init_regs_for_scan +     dev->session = session; +  +     dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t) session.output_line_bytes_requested ++          * (size_t) session.params.lines; +  +     /* select color filter based on settings */ +     regs->find_reg(0x04).value &= ~REG_0x04_FILTER; +Index: trunk/backend/genesys/gl841.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl841.cpp ++++ trunk/backend/genesys/gl841.cpp +@@ -920,7 +920,7 @@ dummy \ scanned lines +     dev->session = session; +  +     dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; +     if (session.use_host_side_gray) { +         dev->total_bytes_to_read /= 3; +     } +Index: trunk/backend/genesys/gl842.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl842.cpp ++++ trunk/backend/genesys/gl842.cpp +@@ -568,7 +568,7 @@ void CommandSetGl842::init_regs_for_scan +     dev->session = session; +  +     dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; + } +  + ScanSession CommandSetGl842::calculate_scan_session(const Genesys_Device* dev, +Index: trunk/backend/genesys/gl843.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl843.cpp ++++ trunk/backend/genesys/gl843.cpp +@@ -1041,7 +1041,7 @@ void CommandSetGl843::init_regs_for_scan +     dev->session = session; +  +   dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; +  +     DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); + } +Index: trunk/backend/genesys/gl846.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl846.cpp ++++ trunk/backend/genesys/gl846.cpp +@@ -658,7 +658,7 @@ void CommandSetGl846::init_regs_for_scan +     dev->session = session; +  +     dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; +  +     DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); + } +Index: trunk/backend/genesys/gl847.cpp +=================================================================== +--- trunk.orig/backend/genesys/gl847.cpp ++++ trunk/backend/genesys/gl847.cpp +@@ -624,7 +624,7 @@ void CommandSetGl847::init_regs_for_scan +     dev->session = session; +  +     dev->total_bytes_read = 0; +-    dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines; ++    dev->total_bytes_to_read = (size_t)session.output_line_bytes_requested * (size_t)session.params.lines; +  +     DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read); + } diff --git a/debian/patches/series b/debian/patches/series index 31378d7..4b9da30 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,4 @@ +0195-genesys_fix_total_file_size_exceeding.patch  0035-trim-libraries-in-sane-backends.pc.in.patch  0040-remove_git.patch  0100-source_spelling.patch @@ -19,3 +20,4 @@  0605-fix_groff-warnings.patch  #0180-gt68xx_fix_use-after-free_two_memleaks.patch  0185-Change_output_from_sane-find-scanner.patch +#0190-remove-kernel-driver-for-plustek_pp.patch diff --git a/debian/rules b/debian/rules index ef8e976..838508d 100755 --- a/debian/rules +++ b/debian/rules @@ -15,11 +15,12 @@ ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))  endif  ifeq (,$(filter hurd-i386,$(DEB_HOST_ARCH))) -	INS_CONF = --enable-parport-directio -else  	INS_CONF = "" +else +	INS_CONF = --enable-parport-directio  endif +  %:  	dh $@ @@ -55,8 +56,8 @@ endif  		--enable-pnm-backend \  		--with-usb \  		--without-v4l \ -		--disable-locking \ -		$(INS_CONF) +		--disable-locking +#		$(INS_CONF)  override_dh_autoreconf:  	dh_autoreconf -Xlibtool.m4 | 
