Made PS/2 bidirectional mode work.

merge-requests/1/head
Gerhard Jaeger 2003-10-30 15:54:07 +00:00
rodzic ccb3053773
commit 4a31f9681a
5 zmienionych plików z 188 dodań i 197 usunięć

Wyświetl plik

@ -490,7 +490,7 @@ _LOC int DetectScanner( pScanData ps, int mode )
} else { } else {
/* this will be called each time before operating on a previously /* this will be called each time before operating on a previously
* detected device, to make sure we're already operating on the same one * detected device, to make sure we are still operating on the same one
*/ */
if( _ASIC_IS_98001 == mode ) { if( _ASIC_IS_98001 == mode ) {

Wyświetl plik

@ -204,16 +204,17 @@
* for Asic I/O signal control * for Asic I/O signal control
*/ */
#define _CTRL_GENSIGNAL (_CTRL_RESERVED + _CTRL_NOT_INIT) /* 0xc4 */ #define _CTRL_GENSIGNAL (_CTRL_RESERVED + _CTRL_NOT_INIT) /* 0xc4 */
#define _CTRL_NORMAL _CTRL_GENSIGNAL
#define _CTRL_SIGNAL_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN) /* 0xcc */ #define _CTRL_START_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN) /* 0xcc */
#define _CTRL_END_REGWRITE (_CTRL_GENSIGNAL) /* 0xc4 */ #define _CTRL_END_REGWRITE (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_SIGNAL_DATAWRITE (_CTRL_GENSIGNAL + _CTRL_AUTOLF) /* 0xc6 */
#define _CTRL_START_DATAWRITE (_CTRL_GENSIGNAL + _CTRL_AUTOLF) /* 0xc6 */
#define _CTRL_END_DATAWRITE (_CTRL_GENSIGNAL) /* 0xc4 */ #define _CTRL_END_DATAWRITE (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_EPPSIGNAL_WRITE (_CTRL_GENSIGNAL + _CTRL_STROBE) /* 0xc5 */ #define _CTRL_EPPSIGNAL_WRITE (_CTRL_GENSIGNAL + _CTRL_STROBE) /* 0xc5 */
#define _CTRL_EPPTRIG_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN + _CTRL_STROBE) #define _CTRL_EPPTRIG_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN + _CTRL_STROBE)
#define _CTRL_END_DATAREAD (_CTRL_GENSIGNAL) /* 0xc4 */ #define _CTRL_START_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION + _CTRL_AUTOLF)
#define _CTRL_SIGNAL_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION + _CTRL_AUTOLF)
#define _CTRL_END_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION) /* 0xe4 */ #define _CTRL_END_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION) /* 0xe4 */

Wyświetl plik

@ -73,10 +73,15 @@ static Bool fnEPPRead ( pScanData ps, pUChar pBuffer, ULong ulSize );
static Bool fnSPPRead ( pScanData ps, pUChar pBuffer, ULong ulSize ); static Bool fnSPPRead ( pScanData ps, pUChar pBuffer, ULong ulSize );
static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize ); static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize );
static pFnReadData ioReadFunc[3] = { typedef struct {
fnEPPRead, pFnReadData func;
fnSPPRead, char *name;
fnBiDirRead } ioReadFuncDef;
static ioReadFuncDef ioReadFunc[3] = {
{ fnEPPRead, "fnEPPRead" },
{ fnSPPRead, "fnSPPRead" },
{ fnBiDirRead, "fnBiDirRead" }
}; };
/*************************** some definitions ********************************/ /*************************** some definitions ********************************/
@ -216,51 +221,8 @@ static UChar ioDataFromSPPSlowest( pScanData ps )
return bData; return bData;
} }
/** Using buffered I/O to read data from EPP Data Port /** Read data from STATUS port. We have to read twice and combine two nibble
*/ * data to one byte.
static Bool fnEPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
{
register ULong i;
if( _IS_ASIC98(ps->sCaps.AsicID)) {
#ifndef __KERNEL__
if( sanei_pp_uses_directio()) {
_OUTB_CTRL( ps, (_CTRL_GENSIGNAL + _CTRL_DIRECTION));
_DO_UDELAY( 1 );
} else {
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__
if( sanei_pp_uses_directio()) {
_OUTB_CTRL( ps, _CTRL_GENSIGNAL );
_DO_UDELAY( 1 );
} else {
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++ )
pBuffer[i] = _INB_EPPDATA( ps );
}
return _TRUE;
}
/*.............................................................................
* Read data from STATUS port. We have to read twice and combine two nibble
* data to one byte
*/ */
static Bool fnSPPRead( pScanData ps, pUChar pBuffer, ULong ulSize ) static Bool fnSPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
{ {
@ -290,33 +252,80 @@ static Bool fnSPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
return _TRUE; return _TRUE;
} }
/*.............................................................................
* /** Using buffered I/O to read data from EPP Data Port
*/
static Bool fnEPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
{
register ULong i;
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++ )
pBuffer[i] = _INB_EPPDATA( ps );
}
return _TRUE;
}
/**
*/ */
static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize ) static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize )
{ {
if( _IS_ASIC98(ps->sCaps.AsicID)) UChar start, end;
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)); _OUTB_CTRL( ps, (_CTRL_GENSIGNAL + _CTRL_DIRECTION));
}
#endif
switch( ps->IO.delay ) { switch( ps->IO.delay ) {
case 0: case 0:
for(; ulSize; ulSize--, pBuffer++ ) { for( ; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_BIDIREAD); /* 0xe6 */ _OUTB_CTRL( ps, start );
*pBuffer = _INB_DATA( ps ); *pBuffer = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_END_BIDIREAD ); /* 0xe4 */ _OUTB_CTRL( ps, end );
} }
break; break;
case 1: case 1:
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
for(; ulSize; ulSize--, pBuffer++ ) { for(; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_BIDIREAD); /* 0xe6 */ _OUTB_CTRL( ps, start );
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
*pBuffer = _INB_DATA( ps ); *pBuffer = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_END_BIDIREAD ); /* 0xe4 */ _OUTB_CTRL( ps, end );
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
} }
break; break;
@ -324,41 +333,42 @@ static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize )
default: default:
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
for(; ulSize; ulSize--, pBuffer++ ) { for(; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_BIDIREAD); /* 0xe6 */ _OUTB_CTRL( ps, start );
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
*pBuffer = _INB_DATA( ps ); *pBuffer = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_END_BIDIREAD ); /* 0xe4 */ _OUTB_CTRL( ps, end );
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
} }
break; break;
} }
if( _IS_ASIC98(ps->sCaps.AsicID)) #ifndef __KERNEL__
_OUTB_CTRL( ps, _CTRL_END_DATAREAD ); /* 0xc4 */ sanei_pp_set_datadir( ps->pardev, SANEI_PP_DATAOUT );
#else
if( _IS_ASIC98(ps->sCaps.AsicID)) {
_OUTB_CTRL( ps, _CTRL_GENSIGNAL );
}
#endif
return _TRUE; return _TRUE;
} }
/*............................................................................. /** as the name says, we switch to SPP mode
* as the name says, we switch to SPP mode
*/ */
static void ioSwitchToSPPMode( pScanData ps ) static void ioSwitchToSPPMode( pScanData ps )
{ {
/* /* save the control and data port value
* save the control and data port value
*/ */
ps->IO.bOldControlValue = _INB_CTRL( ps ); ps->IO.bOldControlValue = _INB_CTRL( ps );
ps->IO.bOldDataValue = _INB_DATA( ps ); ps->IO.bOldDataValue = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_NORMAL ); /* 0xc4 */ _OUTB_CTRL( ps, _CTRL_GENSIGNAL ); /* 0xc4 */
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
} }
/*............................................................................. /** restore the port settings
* restore the settings
*/ */
static void ioRestoreParallelMode( pScanData ps ) static void ioRestoreParallelMode( pScanData ps )
{ {
@ -369,10 +379,7 @@ static void ioRestoreParallelMode( pScanData ps )
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
} }
/*............................................................................. /** try to connect to scanner (ASIC 9600x and 98001)
* try to connect to scanner
*/
/*static void ioP98001EstablishScannerConnection( pScanData, ULong );
*/ */
_LOC _INL void ioP98001EstablishScannerConnection( pScanData ps, ULong delTime ) _LOC _INL void ioP98001EstablishScannerConnection( pScanData ps, ULong delTime )
{ {
@ -392,8 +399,24 @@ _LOC _INL void ioP98001EstablishScannerConnection( pScanData ps, ULong delTime )
_DO_UDELAY( delTime ); _DO_UDELAY( delTime );
} }
/*............................................................................. /** try to connect to scanner (ASIC 98003)
* switch the printer interface to scanner */
static void ioP98003EstablishScannerConnection( pScanData ps, ULong delTime )
{
_OUTB_DATA( ps, _ID1ST );
_DO_UDELAY( delTime );
_OUTB_DATA( ps, _ID2ND );
_DO_UDELAY( delTime );
_OUTB_DATA( ps, _ID3RD );
_DO_UDELAY( delTime );
_OUTB_DATA( ps, _ID4TH );
_DO_UDELAY( delTime );
}
/** switch the printer interface to scanner
*/ */
static Bool ioP96OpenScanPath( pScanData ps ) static Bool ioP96OpenScanPath( pScanData ps )
{ {
@ -419,23 +442,7 @@ static Bool ioP96OpenScanPath( pScanData ps )
return _TRUE; return _TRUE;
} }
static void ioP98003EstablishScannerConnection( pScanData ps, ULong delTime ) /** try to connect to scanner
{
_OUTB_DATA( ps, _ID1ST );
_DO_UDELAY( delTime );
_OUTB_DATA( ps, _ID2ND );
_DO_UDELAY( delTime );
_OUTB_DATA( ps, _ID3RD );
_DO_UDELAY( delTime );
_OUTB_DATA( ps, _ID4TH );
_DO_UDELAY( delTime );
}
/*.............................................................................
* try to connect to scanner
*/ */
static Bool ioP98OpenScanPath( pScanData ps ) static Bool ioP98OpenScanPath( pScanData ps )
{ {
@ -490,8 +497,7 @@ static Bool ioP98OpenScanPath( pScanData ps )
return _TRUE; return _TRUE;
} }
/*............................................................................. /** Switch back to printer mode.
* Switch back to printer mode
* Restore the printer control/data port value. * Restore the printer control/data port value.
*/ */
static void ioCloseScanPath( pScanData ps ) static void ioCloseScanPath( pScanData ps )
@ -516,9 +522,8 @@ static void ioCloseScanPath( pScanData ps )
} }
} }
/*............................................................................. /** check the memory to see that the data-transfers will work.
* check the memory to see that the data-transfers will work * (ASIC 9800x only)
* ASIC 9800x only
*/ */
static int ioP98ReadWriteTest( pScanData ps ) static int ioP98ReadWriteTest( pScanData ps )
{ {
@ -531,7 +536,6 @@ static int ioP98ReadWriteTest( pScanData ps )
/* _MEMTEST_SIZE: Read, _MEMTEST_SIZE:Write */ /* _MEMTEST_SIZE: Read, _MEMTEST_SIZE:Write */
buffer = _KALLOC( sizeof(UChar) * _MEMTEST_SIZE*2, GFP_KERNEL ); buffer = _KALLOC( sizeof(UChar) * _MEMTEST_SIZE*2, GFP_KERNEL );
if( NULL == buffer ) if( NULL == buffer )
return _E_ALLOC; return _E_ALLOC;
@ -570,9 +574,7 @@ static int ioP98ReadWriteTest( pScanData ps )
if( _ASIC_IS_98003 == ps->sCaps.AsicID ) if( _ASIC_IS_98003 == ps->sCaps.AsicID )
ps->CloseScanPath( ps ); ps->CloseScanPath( ps );
/* /* check the result ! */
* check the result !
*/
retval = _OK; retval = _OK;
for( ul = 0; ul < _MEMTEST_SIZE; ul++ ) { for( ul = 0; ul < _MEMTEST_SIZE; ul++ ) {
@ -588,8 +590,7 @@ static int ioP98ReadWriteTest( pScanData ps )
return retval; return retval;
} }
/*............................................................................. /** Put data to DATA port and trigger hardware through CONTROL port to read it.
* Put data to DATA port and trigger hardware through CONTROL port to read it.
*/ */
static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size ) static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
{ {
@ -600,7 +601,7 @@ static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
case 0: case 0:
for (; size; size--, pBuffer++) { for (; size; size--, pBuffer++) {
_OUTB_DATA( ps, *pBuffer ); _OUTB_DATA( ps, *pBuffer );
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
} }
break; break;
@ -610,7 +611,7 @@ static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
for (; size; size--, pBuffer++) { for (; size; size--, pBuffer++) {
_OUTB_DATA( ps, *pBuffer ); _OUTB_DATA( ps, *pBuffer );
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
@ -621,7 +622,7 @@ static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
for (; size; size--, pBuffer++) { for (; size; size--, pBuffer++) {
_OUTB_DATA( ps, *pBuffer ); _OUTB_DATA( ps, *pBuffer );
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
_DO_UDELAY( 3 ); _DO_UDELAY( 3 );
@ -638,7 +639,6 @@ static void ioEnterReadMode( pScanData ps )
if( ps->IO.portMode != _PORT_SPP ) { if( ps->IO.portMode != _PORT_SPP ) {
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
IORegisterToScanner( ps, ps->RegEPPEnable ); IORegisterToScanner( ps, ps->RegEPPEnable );
if( _IS_ASIC98( ps->sCaps.AsicID )) if( _IS_ASIC98( ps->sCaps.AsicID ))
@ -654,8 +654,7 @@ static void ioEnterReadMode( pScanData ps )
/************************ exported functions *********************************/ /************************ exported functions *********************************/
/*............................................................................. /** here we do some init work
* here we do some init work
*/ */
_LOC int IOInitialize( pScanData ps ) _LOC int IOInitialize( pScanData ps )
{ {
@ -680,13 +679,13 @@ _LOC int IOInitialize( pScanData ps )
} }
ps->CloseScanPath = ioCloseScanPath; ps->CloseScanPath = ioCloseScanPath;
ps->Device.ReadData = ioReadFunc[ps->IO.portMode]; ps->Device.ReadData = ioReadFunc[ps->IO.portMode].func;
DBG( DBG_HIGH, "* using readfunction >%s<\n",
ioReadFunc[ps->IO.portMode].name );
return _OK; return _OK;
} }
/*............................................................................. /** Write specific length buffer to scanner
* Write specific length buffer to scanner
* The scan path is already established * The scan path is already established
*/ */
_LOC void IOMoveDataToScanner( pScanData ps, pUChar pBuffer, ULong size ) _LOC void IOMoveDataToScanner( pScanData ps, pUChar pBuffer, ULong size )
@ -702,8 +701,7 @@ _LOC void IOMoveDataToScanner( pScanData ps, pUChar pBuffer, ULong size )
ioSPPWrite( ps, pBuffer, size ); ioSPPWrite( ps, pBuffer, size );
} }
/*............................................................................. /** Calling SITUATION: Scanner path is established.
* Calling SITUATION: Scanner path is established.
* download a scanstate-table * download a scanstate-table
*/ */
_LOC void IODownloadScanStates( pScanData ps ) _LOC void IODownloadScanStates( pScanData ps )
@ -732,8 +730,7 @@ _LOC void IODownloadScanStates( pScanData ps )
} }
} }
/*............................................................................. /** Calling SITUATION: Scanner path is established.
* Calling SITUATION: Scanner path is established.
* Write a data to asic * Write a data to asic
*/ */
_LOC void IODataToScanner( pScanData ps, Byte bValue ) _LOC void IODataToScanner( pScanData ps, Byte bValue )
@ -753,7 +750,7 @@ _LOC void IODataToScanner( pScanData ps, Byte bValue )
_DO_UDELAY( deltime ); _DO_UDELAY( deltime );
/* notify asic there is data */ /* notify asic there is data */
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( deltime ); _DO_UDELAY( deltime );
/* end write cycle */ /* end write cycle */
@ -761,8 +758,7 @@ _LOC void IODataToScanner( pScanData ps, Byte bValue )
_DO_UDELAY( deltime-1 ); _DO_UDELAY( deltime-1 );
} }
/*............................................................................. /** Calling SITUATION: Scanner path is established.
* Calling SITUATION: Scanner path is established.
* Write a data to specific asic's register * Write a data to specific asic's register
*/ */
_LOC void IODataToRegister( pScanData ps, Byte bReg, Byte bData ) _LOC void IODataToRegister( pScanData ps, Byte bReg, Byte bData )
@ -779,8 +775,7 @@ _LOC void IODataToRegister( pScanData ps, Byte bReg, Byte bData )
IODataToScanner( ps, bData ); IODataToScanner( ps, bData );
} }
/*............................................................................. /** Calling SITUATION: Scanner path is established.
* Calling SITUATION: Scanner path is established.
* Read the content of specific asic's register * Read the content of specific asic's register
*/ */
_LOC Byte IODataFromRegister( pScanData ps, Byte bReg ) _LOC Byte IODataFromRegister( pScanData ps, Byte bReg )
@ -797,8 +792,7 @@ _LOC Byte IODataFromRegister( pScanData ps, Byte bReg )
return ioDataFromSPPSlowest( ps ); return ioDataFromSPPSlowest( ps );
} }
/*............................................................................. /** Calling SITUATION: Scanner path is established.
* Calling SITUATION: Scanner path is established.
* Write a register to asic (used for a command without parameter) * Write a register to asic (used for a command without parameter)
*/ */
_LOC void IORegisterToScanner( pScanData ps, Byte bReg ) _LOC void IORegisterToScanner( pScanData ps, Byte bReg )
@ -835,13 +829,13 @@ _LOC void IORegisterToScanner( pScanData ps, Byte bReg )
if( ps->IO.delay < 2 ) { if( ps->IO.delay < 2 ) {
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_REGWRITE); _OUTB_CTRL( ps, _CTRL_START_REGWRITE);
_DO_UDELAY( 1 ); _DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_END_REGWRITE); _OUTB_CTRL( ps, _CTRL_END_REGWRITE);
} else { } else {
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_REGWRITE); _OUTB_CTRL( ps, _CTRL_START_REGWRITE);
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_END_REGWRITE); _OUTB_CTRL( ps, _CTRL_END_REGWRITE);
_DO_UDELAY( 2 ); _DO_UDELAY( 2 );
@ -849,8 +843,7 @@ _LOC void IORegisterToScanner( pScanData ps, Byte bReg )
} }
} }
/*............................................................................. /** write data to the DAC - ASIC 98001/3 only
* write data to the DAC - ASIC 98001/3 only
*/ */
_LOC void IODataRegisterToDAC( pScanData ps, Byte bReg, Byte bData ) _LOC void IODataRegisterToDAC( pScanData ps, Byte bReg, Byte bData )
{ {
@ -865,15 +858,14 @@ _LOC void IODataRegisterToDAC( pScanData ps, Byte bReg, Byte bData )
for( i = 4; i; i-- ) { for( i = 4; i; i-- ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE ); _OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( 5 ); _DO_UDELAY( 5 );
_OUTB_CTRL( ps, _CTRL_NORMAL ); _OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
_DO_UDELAY( 12 ); _DO_UDELAY( 12 );
} }
} }
/*............................................................................. /** Calling SITUATION: Scanner path was not established.
* Calling SITUATION: Scanner path was not established.
* Read the content of specific asics' register * Read the content of specific asics' register
*/ */
_LOC Byte IODataRegisterFromScanner( pScanData ps, Byte bReg ) _LOC Byte IODataRegisterFromScanner( pScanData ps, Byte bReg )
@ -887,8 +879,7 @@ _LOC Byte IODataRegisterFromScanner( pScanData ps, Byte bReg )
return bData; return bData;
} }
/*............................................................................. /** Calling SITUATION: Scanner path not established.
* Calling SITUATION: Scanner path not established.
* Write a value of register to asic * Write a value of register to asic
*/ */
_LOC void IOCmdRegisterToScanner( pScanData ps, Byte bReg, Byte bData ) _LOC void IOCmdRegisterToScanner( pScanData ps, Byte bReg, Byte bData )
@ -898,8 +889,7 @@ _LOC void IOCmdRegisterToScanner( pScanData ps, Byte bReg, Byte bData )
ps->CloseScanPath( ps ); ps->CloseScanPath( ps );
} }
/*............................................................................. /** Calling SITUATION: Scanner path not established.
* Calling SITUATION: Scanner path not established.
* Write a register to asic (used for a command without parameter) * Write a register to asic (used for a command without parameter)
*/ */
_LOC void IORegisterDirectToScanner( pScanData ps, Byte bReg ) _LOC void IORegisterDirectToScanner( pScanData ps, Byte bReg )
@ -909,8 +899,7 @@ _LOC void IORegisterDirectToScanner( pScanData ps, Byte bReg )
ps->CloseScanPath( ps ); /* disconnect */ ps->CloseScanPath( ps ); /* disconnect */
} }
/*............................................................................. /** perform a SW reset of ASIC 98003 models
* perform a SW reset of ASIC 98003 models
*/ */
_LOC void IOSoftwareReset( pScanData ps ) _LOC void IOSoftwareReset( pScanData ps )
{ {
@ -1007,6 +996,6 @@ _LOC Byte IOInDelayed( UShort port )
return inb_p( port ); return inb_p( port );
#endif #endif
} }
#endif #endif /* guard __KERNEL__ */
/* END PLUSTEK-PP_IO.C ......................................................*/ /* END PLUSTEK-PP_IO.C ......................................................*/

Wyświetl plik

@ -251,6 +251,7 @@ static void show_cnf( pCnfDef cnf )
DBG( _DBG_SANE_INIT,"warmup : %ds\n", cnf->adj.warmup ); DBG( _DBG_SANE_INIT,"warmup : %ds\n", cnf->adj.warmup );
DBG( _DBG_SANE_INIT,"lampOff : %d\n", cnf->adj.lampOff ); DBG( _DBG_SANE_INIT,"lampOff : %d\n", cnf->adj.lampOff );
DBG( _DBG_SANE_INIT,"lampOffOnEnd : %s\n", _YN(cnf->adj.lampOffOnEnd )); DBG( _DBG_SANE_INIT,"lampOffOnEnd : %s\n", _YN(cnf->adj.lampOffOnEnd ));
DBG( _DBG_SANE_INIT,"model override: %d\n", cnf->adj.mov );
DBG( _DBG_SANE_INIT,"---------------------\n" ); DBG( _DBG_SANE_INIT,"---------------------\n" );
} }