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 {
/* 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 ) {

Wyświetl plik

@ -203,18 +203,19 @@
/*
* for Asic I/O signal control
*/
#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_END_REGWRITE (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_SIGNAL_DATAWRITE (_CTRL_GENSIGNAL + _CTRL_AUTOLF) /* 0xc6 */
#define _CTRL_END_DATAWRITE (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_EPPSIGNAL_WRITE (_CTRL_GENSIGNAL + _CTRL_STROBE) /* 0xc5 */
#define _CTRL_GENSIGNAL (_CTRL_RESERVED + _CTRL_NOT_INIT) /* 0xc4 */
#define _CTRL_START_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN) /* 0xcc */
#define _CTRL_END_REGWRITE (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_START_DATAWRITE (_CTRL_GENSIGNAL + _CTRL_AUTOLF) /* 0xc6 */
#define _CTRL_END_DATAWRITE (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_EPPSIGNAL_WRITE (_CTRL_GENSIGNAL + _CTRL_STROBE) /* 0xc5 */
#define _CTRL_EPPTRIG_REGWRITE (_CTRL_GENSIGNAL + _CTRL_SELECT_IN + _CTRL_STROBE)
#define _CTRL_END_DATAREAD (_CTRL_GENSIGNAL) /* 0xc4 */
#define _CTRL_SIGNAL_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION + _CTRL_AUTOLF)
#define _CTRL_END_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION) /* 0xe4 */
#define _CTRL_START_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION + _CTRL_AUTOLF)
#define _CTRL_END_BIDIREAD (_CTRL_GENSIGNAL + _CTRL_DIRECTION) /* 0xe4 */
typedef struct

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 fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize );
static pFnReadData ioReadFunc[3] = {
fnEPPRead,
fnSPPRead,
fnBiDirRead
typedef struct {
pFnReadData func;
char *name;
} ioReadFuncDef;
static ioReadFuncDef ioReadFunc[3] = {
{ fnEPPRead, "fnEPPRead" },
{ fnSPPRead, "fnSPPRead" },
{ fnBiDirRead, "fnBiDirRead" }
};
/*************************** some definitions ********************************/
@ -216,51 +221,8 @@ static UChar ioDataFromSPPSlowest( pScanData ps )
return bData;
}
/** 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__
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
/** 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 )
{
@ -290,33 +252,80 @@ static Bool fnSPPRead( pScanData ps, pUChar pBuffer, ULong ulSize )
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 )
{
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));
}
#endif
switch( ps->IO.delay ) {
case 0:
for(; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_BIDIREAD); /* 0xe6 */
for( ; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, start );
*pBuffer = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_END_BIDIREAD ); /* 0xe4 */
_OUTB_CTRL( ps, end );
}
break;
case 1:
_DO_UDELAY( 1 );
for(; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_BIDIREAD); /* 0xe6 */
_OUTB_CTRL( ps, start );
_DO_UDELAY( 1 );
*pBuffer = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_END_BIDIREAD ); /* 0xe4 */
_OUTB_CTRL( ps, end );
_DO_UDELAY( 1 );
}
break;
@ -324,55 +333,53 @@ static Bool fnBiDirRead( pScanData ps, pUChar pBuffer, ULong ulSize )
default:
_DO_UDELAY( 2 );
for(; ulSize; ulSize--, pBuffer++ ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_BIDIREAD); /* 0xe6 */
_OUTB_CTRL( ps, start );
_DO_UDELAY( 2 );
*pBuffer = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_END_BIDIREAD ); /* 0xe4 */
_OUTB_CTRL( ps, end );
_DO_UDELAY( 2 );
}
break;
}
if( _IS_ASIC98(ps->sCaps.AsicID))
_OUTB_CTRL( ps, _CTRL_END_DATAREAD ); /* 0xc4 */
return _TRUE;
#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;
}
/*.............................................................................
* as the name says, we switch to SPP mode
/** as the name says, we switch to SPP mode
*/
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.bOldDataValue = _INB_DATA( ps );
_OUTB_CTRL( ps, _CTRL_NORMAL ); /* 0xc4 */
_DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_GENSIGNAL ); /* 0xc4 */
_DO_UDELAY( 2 );
}
/*.............................................................................
* restore the settings
/** restore the port settings
*/
static void ioRestoreParallelMode( pScanData ps )
{
_OUTB_CTRL( ps, ps->IO.bOldControlValue & 0x3f );
_DO_UDELAY( 1 );
_DO_UDELAY( 1 );
_OUTB_DATA( ps, ps->IO.bOldDataValue );
_DO_UDELAY( 1 );
_DO_UDELAY( 1 );
}
/*.............................................................................
* try to connect to scanner
*/
/*static void ioP98001EstablishScannerConnection( pScanData, ULong );
/** try to connect to scanner (ASIC 9600x and 98001)
*/
_LOC _INL void ioP98001EstablishScannerConnection( pScanData ps, ULong delTime )
{
@ -392,8 +399,24 @@ _LOC _INL void ioP98001EstablishScannerConnection( pScanData ps, ULong delTime )
_DO_UDELAY( delTime );
}
/*.............................................................................
* switch the printer interface to scanner
/** try to connect to scanner (ASIC 98003)
*/
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 )
{
@ -419,23 +442,7 @@ static Bool ioP96OpenScanPath( pScanData ps )
return _TRUE;
}
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 );
}
/*.............................................................................
* try to connect to scanner
/** try to connect to scanner
*/
static Bool ioP98OpenScanPath( pScanData ps )
{
@ -463,8 +470,8 @@ static Bool ioP98OpenScanPath( pScanData ps )
ioP98003EstablishScannerConnection( ps, dw );
}
_INB_STATUS( ps );
tmp = _INB_STATUS( ps );
_INB_STATUS( ps );
tmp = _INB_STATUS( ps );
if( 0x50 == ( tmp & 0xf0 )) {
@ -490,8 +497,7 @@ static Bool ioP98OpenScanPath( pScanData ps )
return _TRUE;
}
/*.............................................................................
* Switch back to printer mode
/** Switch back to printer mode.
* Restore the printer control/data port value.
*/
static void ioCloseScanPath( pScanData ps )
@ -499,7 +505,7 @@ static void ioCloseScanPath( pScanData ps )
if( ps->IO.bOpenCount && !(--ps->IO.bOpenCount)) {
#ifdef DEBUG
ps->IO.bOpenCount = 1;
ps->IO.bOpenCount = 1;
#endif
IORegisterToScanner( ps, 0xff );
@ -516,9 +522,8 @@ static void ioCloseScanPath( pScanData ps )
}
}
/*.............................................................................
* check the memory to see that the data-transfers will work
* ASIC 9800x only
/** check the memory to see that the data-transfers will work.
* (ASIC 9800x only)
*/
static int ioP98ReadWriteTest( pScanData ps )
{
@ -531,7 +536,6 @@ static int ioP98ReadWriteTest( pScanData ps )
/* _MEMTEST_SIZE: Read, _MEMTEST_SIZE:Write */
buffer = _KALLOC( sizeof(UChar) * _MEMTEST_SIZE*2, GFP_KERNEL );
if( NULL == buffer )
return _E_ALLOC;
@ -545,7 +549,7 @@ static int ioP98ReadWriteTest( pScanData ps )
tmp = ps->bLastLampStatus + _SCAN_BYTEMODE;
IODataToRegister( ps, ps->RegScanControl, tmp );
IODataToRegister( ps, ps->RegModelControl, (_LED_ACTIVITY | _LED_CONTROL));
IODataToRegister( ps, ps->RegModelControl, (_LED_ACTIVITY | _LED_CONTROL));
IODataToRegister( ps, ps->RegModeControl, _ModeMappingMem );
IODataToRegister( ps, ps->RegMemoryLow, 0 );
@ -560,19 +564,17 @@ static int ioP98ReadWriteTest( pScanData ps )
IODataToRegister( ps, ps->RegWidthPixelsLow, 0 );
IODataToRegister( ps, ps->RegWidthPixelsHigh, 5 );
ps->AsicReg.RD_ModeControl = _ModeReadMappingMem;
ps->AsicReg.RD_ModeControl = _ModeReadMappingMem;
if( _ASIC_IS_98001 == ps->sCaps.AsicID )
ps->CloseScanPath( ps );
if( _ASIC_IS_98001 == ps->sCaps.AsicID )
ps->CloseScanPath( ps );
IOReadScannerImageData( ps, buffer + _MEMTEST_SIZE, _MEMTEST_SIZE );
if( _ASIC_IS_98003 == ps->sCaps.AsicID )
ps->CloseScanPath( ps );
if( _ASIC_IS_98003 == ps->sCaps.AsicID )
ps->CloseScanPath( ps );
/*
* check the result !
*/
/* check the result ! */
retval = _OK;
for( ul = 0; ul < _MEMTEST_SIZE; ul++ ) {
@ -588,8 +590,7 @@ static int ioP98ReadWriteTest( pScanData ps )
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 )
{
@ -600,7 +601,7 @@ static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
case 0:
for (; size; size--, pBuffer++) {
_OUTB_DATA( ps, *pBuffer );
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
}
break;
@ -610,7 +611,7 @@ static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
for (; size; size--, pBuffer++) {
_OUTB_DATA( ps, *pBuffer );
_DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
_DO_UDELAY( 2 );
@ -621,7 +622,7 @@ static void ioSPPWrite( pScanData ps, pUChar pBuffer, ULong size )
for (; size; size--, pBuffer++) {
_OUTB_DATA( ps, *pBuffer );
_DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
_DO_UDELAY( 3 );
@ -638,24 +639,22 @@ static void ioEnterReadMode( pScanData ps )
if( ps->IO.portMode != _PORT_SPP ) {
_DO_UDELAY( 1 );
IORegisterToScanner( ps, ps->RegEPPEnable );
if( _IS_ASIC98( ps->sCaps.AsicID ))
ps->IO.useEPPCmdMode = _TRUE;
if( _IS_ASIC98( ps->sCaps.AsicID ))
ps->IO.useEPPCmdMode = _TRUE;
}
if( _ASIC_IS_98003 == ps->sCaps.AsicID )
ps->IO.bOldControlValue = _INB_CTRL( ps );
if( _ASIC_IS_98003 == ps->sCaps.AsicID )
ps->IO.bOldControlValue = _INB_CTRL( ps );
/* ask ASIC to enter read mode */
IORegisterToScanner( ps, ps->RegReadDataMode );
IORegisterToScanner( ps, ps->RegReadDataMode );
}
/************************ exported functions *********************************/
/*.............................................................................
* here we do some init work
/** here we do some init work
*/
_LOC int IOInitialize( pScanData ps )
{
@ -667,7 +666,7 @@ _LOC int IOInitialize( pScanData ps )
if( _IS_ASIC98(ps->sCaps.AsicID)) {
ps->OpenScanPath = ioP98OpenScanPath;
ps->ReadWriteTest = ioP98ReadWriteTest;
ps->ReadWriteTest = ioP98ReadWriteTest;
} else if( _IS_ASIC96(ps->sCaps.AsicID)) {
@ -680,60 +679,58 @@ _LOC int IOInitialize( pScanData ps )
}
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;
}
/*.............................................................................
* Write specific length buffer to scanner
/** Write specific length buffer to scanner
* The scan path is already established
*/
_LOC void IOMoveDataToScanner( pScanData ps, pUChar pBuffer, ULong size )
{
#ifdef DEBUG
if( 0 == ps->IO.bOpenCount )
DBG( DBG_IO, "IOMoveDataToScanner - no connection!\n" );
if( 0 == ps->IO.bOpenCount )
DBG( DBG_IO, "IOMoveDataToScanner - no connection!\n" );
#endif
IORegisterToScanner( ps, ps->RegInitDataFifo );
IORegisterToScanner( ps, ps->RegWriteDataMode );
IORegisterToScanner( ps, ps->RegInitDataFifo );
IORegisterToScanner( ps, ps->RegWriteDataMode );
ioSPPWrite( ps, pBuffer, size );
ioSPPWrite( ps, pBuffer, size );
}
/*.............................................................................
* Calling SITUATION: Scanner path is established.
/** Calling SITUATION: Scanner path is established.
* download a scanstate-table
*/
_LOC void IODownloadScanStates( pScanData ps )
{
TimerDef timer;
TimerDef timer;
#ifdef DEBUG
if( 0 == ps->IO.bOpenCount )
DBG( DBG_IO, "IODownloadScanStates - no connection!\n" );
if( 0 == ps->IO.bOpenCount )
DBG( DBG_IO, "IODownloadScanStates - no connection!\n" );
#endif
IORegisterToScanner( ps, ps->RegScanStateControl );
IORegisterToScanner( ps, ps->RegScanStateControl );
ioSPPWrite( ps, ps->a_nbNewAdrPointer, _SCANSTATE_BYTES );
ioSPPWrite( ps, ps->a_nbNewAdrPointer, _SCANSTATE_BYTES );
if( ps->Scan.fRefreshState ) {
if( ps->Scan.fRefreshState ) {
IORegisterToScanner( ps, ps->RegRefreshScanState );
IORegisterToScanner( ps, ps->RegRefreshScanState );
MiscStartTimer( &timer, (_SECOND/2));
do {
MiscStartTimer( &timer, (_SECOND/2));
do {
if (!( IOGetScanState( ps, _TRUE) & _SCANSTATE_STOP))
break;
}
while( !MiscCheckTimer(&timer));
}
if (!( IOGetScanState( ps, _TRUE) & _SCANSTATE_STOP))
break;
}
while( !MiscCheckTimer(&timer));
}
}
/*.............................................................................
* Calling SITUATION: Scanner path is established.
/** Calling SITUATION: Scanner path is established.
* Write a data to asic
*/
_LOC void IODataToScanner( pScanData ps, Byte bValue )
@ -741,7 +738,7 @@ _LOC void IODataToScanner( pScanData ps, Byte bValue )
ULong deltime = 4;
#ifdef DEBUG
if( 0 == ps->IO.bOpenCount )
if( 0 == ps->IO.bOpenCount )
DBG( DBG_IO, "IODataToScanner - no connection!\n" );
#endif
@ -753,7 +750,7 @@ _LOC void IODataToScanner( pScanData ps, Byte bValue )
_DO_UDELAY( deltime );
/* notify asic there is data */
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( deltime );
/* end write cycle */
@ -761,8 +758,7 @@ _LOC void IODataToScanner( pScanData ps, Byte bValue )
_DO_UDELAY( deltime-1 );
}
/*.............................................................................
* Calling SITUATION: Scanner path is established.
/** Calling SITUATION: Scanner path is established.
* Write a data to specific asic's register
*/
_LOC void IODataToRegister( pScanData ps, Byte bReg, Byte bData )
@ -779,13 +775,12 @@ _LOC void IODataToRegister( pScanData ps, Byte bReg, Byte bData )
IODataToScanner( ps, bData );
}
/*.............................................................................
* Calling SITUATION: Scanner path is established.
/** Calling SITUATION: Scanner path is established.
* Read the content of specific asic's register
*/
_LOC Byte IODataFromRegister( pScanData ps, Byte bReg )
{
IORegisterToScanner( ps, bReg );
IORegisterToScanner( ps, bReg );
if( 0 == ps->IO.delay )
return ioDataFromSPPFast( ps );
@ -797,8 +792,7 @@ _LOC Byte IODataFromRegister( pScanData ps, Byte bReg )
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)
*/
_LOC void IORegisterToScanner( pScanData ps, Byte bReg )
@ -835,13 +829,13 @@ _LOC void IORegisterToScanner( pScanData ps, Byte bReg )
if( ps->IO.delay < 2 ) {
_DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_REGWRITE);
_OUTB_CTRL( ps, _CTRL_START_REGWRITE);
_DO_UDELAY( 1 );
_OUTB_CTRL( ps, _CTRL_END_REGWRITE);
} else {
_DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_SIGNAL_REGWRITE);
_OUTB_CTRL( ps, _CTRL_START_REGWRITE);
_DO_UDELAY( 2 );
_OUTB_CTRL( ps, _CTRL_END_REGWRITE);
_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 )
{
@ -865,15 +858,14 @@ _LOC void IODataRegisterToDAC( pScanData ps, Byte bReg, Byte bData )
for( i = 4; i; i-- ) {
_OUTB_CTRL( ps, _CTRL_SIGNAL_DATAWRITE );
_OUTB_CTRL( ps, _CTRL_START_DATAWRITE );
_DO_UDELAY( 5 );
_OUTB_CTRL( ps, _CTRL_NORMAL );
_OUTB_CTRL( ps, _CTRL_END_DATAWRITE );
_DO_UDELAY( 12 );
}
}
/*.............................................................................
* Calling SITUATION: Scanner path was not established.
/** Calling SITUATION: Scanner path was not established.
* Read the content of specific asics' register
*/
_LOC Byte IODataRegisterFromScanner( pScanData ps, Byte bReg )
@ -887,8 +879,7 @@ _LOC Byte IODataRegisterFromScanner( pScanData ps, Byte bReg )
return bData;
}
/*.............................................................................
* Calling SITUATION: Scanner path not established.
/** Calling SITUATION: Scanner path not established.
* Write a value of register to asic
*/
_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 );
}
/*.............................................................................
* Calling SITUATION: Scanner path not established.
/** Calling SITUATION: Scanner path not established.
* Write a register to asic (used for a command without parameter)
*/
_LOC void IORegisterDirectToScanner( pScanData ps, Byte bReg )
@ -909,8 +899,7 @@ _LOC void IORegisterDirectToScanner( pScanData ps, Byte bReg )
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 )
{
@ -1007,6 +996,6 @@ _LOC Byte IOInDelayed( UShort port )
return inb_p( port );
#endif
}
#endif
#endif /* guard __KERNEL__ */
/* END PLUSTEK-PP_IO.C ......................................................*/

Wyświetl plik

@ -492,10 +492,10 @@ _LOC int MiscInitPorts( pScanData ps, int port )
ps->IO.pbStatusPort = (UShort)port+1;
ps->IO.pbControlPort = (UShort)port+2;
ps->IO.pbEppDataPort = (UShort)port+4;
#else
int mode;
if( NULL == ps )
return _E_NULLPTR;

Wyświetl plik

@ -246,11 +246,12 @@ static SANE_Auth_Callback auth = NULL;
static void show_cnf( pCnfDef cnf )
{
DBG( _DBG_SANE_INIT,"Device configuration:\n" );
DBG( _DBG_SANE_INIT,"device name : >%s<\n", cnf->devName );
DBG( _DBG_SANE_INIT,"direct I/O : %s\n", _YN(cnf->adj.direct_io ));
DBG( _DBG_SANE_INIT,"warmup : %ds\n", cnf->adj.warmup );
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,"device name : >%s<\n", cnf->devName );
DBG( _DBG_SANE_INIT,"direct I/O : %s\n", _YN(cnf->adj.direct_io ));
DBG( _DBG_SANE_INIT,"warmup : %ds\n", cnf->adj.warmup );
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,"model override: %d\n", cnf->adj.mov );
DBG( _DBG_SANE_INIT,"---------------------\n" );
}