Lines Matching defs:dev

78 static void u12hw_SelectLampSource( U12_Device *dev )
80 dev->regs.RD_ScanControl &= (~_SCAN_LAMPS_ON);
82 if( dev->DataInf.dwScanFlag & (_SCANDEF_TPA)) {
83 dev->regs.RD_ScanControl |= _SCAN_TPALAMP_ON;
85 dev->regs.RD_ScanControl |= _SCAN_NORMALLAMP_ON;
91 static void u12hw_PutToIdleMode( U12_Device *dev )
94 u12io_DataToRegs( dev, (SANE_Byte*)u12CcdStop, _STOP_LEN );
99 static void u12hw_ProgramCCD( U12_Device *dev )
104 (u_long)dev->CCDRegs,
105 ((u_long)dev->numCCDRegs * dev->shade.intermediate));
108 dev->numCCDRegs, dev->shade.intermediate );
110 reg_val = (SANE_Byte*)(dev->CCDRegs +
111 (u_long)dev->numCCDRegs * dev->shade.intermediate);
113 u12io_DataToRegs( dev, reg_val, dev->numCCDRegs );
118 static void u12hw_ButtonSetup( U12_Device *dev, SANE_Byte numButtons )
120 dev->Buttons = numButtons;
122 dev->regs.RD_MotorDriverType |= _BUTTON_DISABLE;
123 dev->MotorPower |= _BUTTON_DISABLE;
128 static void u12hw_InitiateComponentModel( U12_Device *dev )
131 dev->Buttons = 0;
132 dev->ModelOriginY = 64;
133 dev->Tpa = SANE_FALSE;
134 dev->ModelCtrl = (_LED_ACTIVITY | _LED_CONTROL);
136 switch( dev->PCBID ) {
145 dev->Tpa = SANE_TRUE;
150 u12hw_ButtonSetup( dev, 4 );
156 dev->Tpa = SANE_TRUE;
157 u12hw_ButtonSetup( dev, 4 );
162 dev->ModelOriginY += 20;
163 u12hw_ButtonSetup( dev, 5 );
169 dev->ModelOriginY += 20;
170 dev->Tpa = SANE_TRUE;
171 u12hw_ButtonSetup( dev, 5 );
176 u12hw_ButtonSetup( dev, 1 );
181 dev->Tpa = SANE_TRUE;
182 u12hw_ButtonSetup( dev, 1 );
187 dev->ModelOriginY = 24; /* 1200 dpi */
192 dev->ModelOriginY -= 33;
193 u12hw_ButtonSetup( dev, 2 );
202 if( _MOTOR0_2003 == dev->MotorID ) {
203 dev->f2003 = SANE_TRUE;
204 dev->XStepMono = 10;
205 dev->XStepColor = 6;
206 dev->XStepBack = 5;
207 dev->regs.RD_MotorDriverType |= _MOTORR_STRONG;
210 dev->f2003 = SANE_FALSE;
211 dev->XStepMono = 8;
212 dev->XStepColor = 4;
213 dev->XStepBack = 5;
214 dev->regs.RD_MotorDriverType |= _MOTORR_WEAK;
220 static SANE_Status u12hw_InitAsic( U12_Device *dev, SANE_Bool shading )
228 dev->DACType = u12io_DataFromRegister( dev, REG_RESETCONFIG );
229 dev->MotorID = (SANE_Byte)(dev->DACType & _MOTOR0_MASK);
231 dev->regs.RD_MotorDriverType =
232 (SANE_Byte)((dev->DACType & _MOTOR0_MASK) >> 3);
233 dev->regs.RD_MotorDriverType |=
234 (SANE_Byte)((dev->DACType & _MOTOR1_MASK) >> 1);
235 dev->DACType &= _ADC_MASK;
237 dev->MotorPower = dev->regs.RD_MotorDriverType | _MOTORR_STRONG;
240 dev->PCBID = u12io_DataFromRegister( dev, REG_CONFIG );
241 dev->CCDID = dev->PCBID & 0x07;
242 dev->PCBID &= 0xf0;
244 if( _AGFA_SCANNER == dev->PCBID )
245 dev->DACType = _DA_WOLFSON8141;
248 dev->PCBID, dev->CCDID, dev->DACType );
250 u12hw_InitiateComponentModel( dev );
251 u12ccd_InitCCDandDAC( dev, shading );
253 dev->regs.RD_Model1Control = _CCD_SHIFT_GATE;
254 if( dev->Buttons != 0 )
255 dev->regs.RD_Model1Control += _BUTTON_MODE;
257 if( dev->shade.intermediate & _ScanMode_Mono )
258 dev->regs.RD_Model1Control += _SCAN_GRAYTYPE;
260 DBG( _DBG_INFO, "* MotorDrvType = 0x%02x\n", dev->regs.RD_MotorDriverType);
261 DBG( _DBG_INFO, "* Model1Cntrl = 0x%02x\n", dev->regs.RD_Model1Control );
264 u12io_DataToRegister( dev, REG_MOTORDRVTYPE, dev->regs.RD_MotorDriverType);
265 u12io_DataToRegister( dev, REG_WAITSTATEINSERT, 4 );
266 u12io_DataToRegister( dev, REG_MODEL1CONTROL, dev->regs.RD_Model1Control );
269 _SET_REG( rb, c, REG_MOTORDRVTYPE, dev->regs.RD_MotorDriverType);
271 _SET_REG( rb, c, REG_MODEL1CONTROL, dev->regs.RD_Model1Control );
272 u12io_DataToRegs( dev, rb, c );
275 u12hw_ProgramCCD( dev );
282 static void u12hw_ControlLampOnOff( U12_Device *dev )
286 dev->warmupNeeded = SANE_TRUE;
288 lampStatus = dev->regs.RD_ScanControl & _SCAN_LAMPS_ON;
290 if ( dev->lastLampStatus != lampStatus ) {
293 dev->lastLampStatus = lampStatus;
295 u12io_DataToRegister( dev, REG_SCANCONTROL, dev->regs.RD_ScanControl );
299 dev->warmupNeeded = SANE_FALSE;
305 static void u12hw_SetGeneralRegister( U12_Device *dev )
309 dev->scan.motorBackward = SANE_FALSE;
310 dev->scan.refreshState = SANE_FALSE;
312 if( COLOR_BW == dev->DataInf.wPhyDataType )
313 dev->regs.RD_ScanControl = _SCAN_BITMODE;
315 if( dev->DataInf.wPhyDataType <= COLOR_TRUE24 )
316 dev->regs.RD_ScanControl = _SCAN_BYTEMODE;
318 dev->regs.RD_ScanControl = _SCAN_12BITMODE;
321 u12hw_SelectLampSource( dev );
323 dev->regs.RD_ModelControl = (_LED_CONTROL | _LED_ACTIVITY);
324 if( dev->shade.intermediate & _ScanMode_AverageOut )
325 dev->regs.RD_ModelControl |= _MODEL_DPI300;
327 dev->regs.RD_ModelControl |= _MODEL_DPI600;
329 dev->regs.RD_Motor0Control = _MotorOn | _MotorHQuarterStep | _MotorPowerEnable;
330 dev->regs.RD_ScanControl1 = _SCANSTOPONBUFFULL | _MFRC_BY_XSTEP;
331 dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
336 static void u12hw_SetupPreviewCondition( U12_Device *dev )
343 u12hw_SetGeneralRegister( dev );
345 u12io_RegisterToScanner( dev, REG_RESETMTSC );
349 memset( dev->scanStates, 0, _SCANSTATE_BYTES );
350 if( dev->DataInf.xyAppDpi.x >= 38 ) { /* 38 <= x <= 75 */
353 dev->scanStates[i] = 0xad;
355 } else if( dev->DataInf.xyAppDpi.x >= 19 ) { /* 19 <= x <= 30(37) */
357 u_short *pState = (u_short*)dev->scanStates;
364 u_long *pState = (u_long*)dev->scanStates;
370 dev->regs.RD_BufFullSize = dev->DataInf.dwAppPixelsPerLine *
371 ((dev->DataInf.xyPhyDpi.y * dev->max_y + 299) / 300) + 1;
372 if( dev->regs.RD_BufFullSize > _SIZE_BLUEFIFO )
373 dev->regs.RD_BufFullSize = _SIZE_BLUEFIFO -
374 dev->DataInf.dwAppPixelsPerLine - 1;
376 dev->scan.dwMaxReadFifo =
377 dev->scan.dwMinReadFifo = dev->DataInf.dwAppPixelsPerLine *2 ;
379 if( dev->scan.dwMinReadFifo < 1024)
380 dev->scan.dwMinReadFifo = dev->scan.dwMaxReadFifo = 1024;
382 dev->scan.dwMaxReadFifo += (dev->DataInf.dwAsicBytesPerPlane / 2);
384 if( dev->DataInf.wPhyDataType > COLOR_256GRAY )
385 dev->scan.bFifoSelect = REG_BFIFOOFFSET;
387 dev->scan.bFifoSelect = REG_GFIFOOFFSET;
389 dev->regs.RD_BufFullSize = _SIZE_BLUEFIFO;
391 dev->regs.RD_LineControl = _LOBYTE(dev->shade.wExposure);
392 dev->regs.RD_ExtLineControl = _HIBYTE(dev->shade.wExposure);
393 dev->regs.RD_XStepTime = _LOBYTE(dev->shade.wXStep);
394 dev->regs.RD_ExtXStepTime = _HIBYTE(dev->shade.wXStep);
395 dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
396 dev->regs.RD_StepControl = _MOTOR0_SCANSTATE | _MOTOR_FREERUN;
397 dev->regs.RD_ModeControl = _ModeScan;
399 if( dev->DataInf.wPhyDataType == COLOR_BW ) {
400 dev->regs.RD_ScanControl = _SCAN_BITMODE;
401 } else if( dev->DataInf.wPhyDataType <= COLOR_TRUE24 )
402 dev->regs.RD_ScanControl = _SCAN_BYTEMODE;
404 dev->regs.RD_ScanControl = _SCAN_12BITMODE;
407 dev->regs.RD_ScanControl |= _SCAN_1ST_AVERAGE;
408 u12hw_SelectLampSource( dev );
410 dev->regs.RD_MotorTotalSteps = (dev->DataInf.crImage.cy * 4) +
411 (dev->f0_8_16 ? 32 : 16) +
412 (dev->scan.bDiscardAll ? 32 : 0);
414 dev->regs.RD_MotorTotalSteps);
416 dev->regs.RD_ScanControl1 = (_MTSC_ENABLE | _SCANSTOPONBUFFULL |
418 DBG( _DBG_INFO, "* RD_ScanControl1 = 0x%02x\n", dev->regs.RD_ScanControl1);
420 dev->regs.RD_Dpi = dev->DataInf.xyPhyDpi.x;
422 dev->regs.RD_Origin = (u_short)(dev->adj.leftNormal*2+_DATA_ORIGIN_X);
423 dev->regs.RD_Origin += dev->DataInf.crImage.x;
425 if( dev->shade.intermediate & _ScanMode_AverageOut )
426 dev->regs.RD_Origin >>= 1;
428 if( dev->DataInf.wPhyDataType == COLOR_BW )
429 dev->regs.RD_Pixels = dev->DataInf.dwAsicBytesPerPlane;
431 dev->regs.RD_Pixels = dev->DataInf.dwAppPixelsPerLine;
434 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeIdle );
436 u12io_DownloadScanStates( dev );
439 _SET_REG( rb, c, REG_LINECONTROL, dev->regs.RD_LineControl );
441 dev->regs.RD_ExtLineControl);
442 _SET_REG( rb, c, REG_XSTEPTIME, dev->regs.RD_XStepTime );
443 _SET_REG( rb, c, REG_EXTENDEDXSTEP, dev->regs.RD_ExtXStepTime );
445 dev->regs.RD_MotorDriverType );
446 _SET_REG( rb, c, REG_STEPCONTROL, dev->regs.RD_StepControl );
447 _SET_REG( rb, c, REG_MOTOR0CONTROL, dev->regs.RD_Motor0Control );
448 _SET_REG( rb, c, REG_MODELCONTROL, dev->regs.RD_ModelControl );
449 _SET_REG( rb, c, REG_DPILO, (_LOBYTE(dev->regs.RD_Dpi)));
450 _SET_REG( rb, c, REG_DPIHI, (_HIBYTE(dev->regs.RD_Dpi)));
451 _SET_REG( rb, c, REG_SCANPOSLO, (_LOBYTE(dev->regs.RD_Origin)));
452 _SET_REG( rb, c, REG_SCANPOSHI,(_HIBYTE(dev->regs.RD_Origin)));
453 _SET_REG( rb, c, REG_WIDTHPIXELLO,(_LOBYTE(dev->regs.RD_Pixels)));
454 _SET_REG( rb, c, REG_WIDTHPIXELHI,(_HIBYTE(dev->regs.RD_Pixels)));
456 (_LOBYTE(dev->regs.RD_ThresholdControl)));
458 (_HIBYTE(dev->regs.RD_ThresholdControl)));
460 (_LOBYTE(dev->regs.RD_MotorTotalSteps)));
462 (_HIBYTE(dev->regs.RD_MotorTotalSteps)));
463 _SET_REG( rb, c, REG_SCANCONTROL, dev->regs.RD_ScanControl);
464 u12io_DataToRegs( dev, rb, c );
467 u12io_RegisterToScanner( dev, REG_INITDATAFIFO );
472 static void u12hw_SetupScanningCondition( U12_Device *dev )
483 u12hw_SetGeneralRegister( dev );
485 u12io_RegisterToScanner( dev, REG_RESETMTSC );
489 if( dev->DataInf.wPhyDataType <= COLOR_TRUE24 ) {
490 dev->scan.dwMaxReadFifo =
491 dev->scan.dwMinReadFifo = dev->DataInf.dwAsicBytesPerPlane * 2;
493 dev->scan.dwMaxReadFifo =
494 dev->scan.dwMinReadFifo = dev->DataInf.dwAppPixelsPerLine << 1;
497 if( dev->scan.dwMinReadFifo < 1024)
498 dev->scan.dwMinReadFifo = dev->scan.dwMaxReadFifo = 1024;
500 dev->scan.dwMaxReadFifo += (dev->DataInf.dwAsicBytesPerPlane / 2);
503 dev->scan.dwMinReadFifo, dev->scan.dwMaxReadFifo );
506 if( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
508 dev->scan.bFifoSelect = REG_BFIFOOFFSET;
510 if( !dev->scan.p48BitBuf.pb ) {
515 dev->DataInf.dwAsicBytesPerPlane - dev->scan.bd_rk.wRedKeep;
518 dev->DataInf.dwAsicBytesPerPlane - dev->scan.gd_gk.wGreenKeep;
524 dev->regs.RD_BufFullSize = _SIZE_REDFIFO;
528 dev->regs.RD_BufFullSize = _SIZE_GREENFIFO;
531 lGreen = (u_long)(-lGreen * dev->DataInf.dwAsicBytesPerPlane);
533 if( dev->DataInf.wPhyDataType > COLOR_TRUE24 )
536 dev->scan.dwMinReadFifo += (u_long)lGreen;
537 dev->scan.dwMaxReadFifo += (u_long)lGreen;
541 dev->regs.RD_BufFullSize = _SIZE_BLUEFIFO;
545 dev->regs.RD_BufFullSize = _SIZE_BLUEFIFO;
548 dev->scan.bFifoSelect = REG_GFIFOOFFSET;
550 dev->regs.RD_BufFullSize = _SIZE_GRAYFIFO;
553 dev->regs.RD_BufFullSize -= (dev->DataInf.dwAsicBytesPerPlane << 1);
555 if( dev->DataInf.wPhyDataType > COLOR_TRUE24 )
556 dev->regs.RD_BufFullSize >>= 1;
558 dev->regs.RD_BufFullSize |= channel;
560 dev->scan.bRefresh = (SANE_Byte)(dev->scan.dwInterval << 1);
561 dev->regs.RD_LineControl = _LOBYTE(dev->shade.wExposure);
562 dev->regs.RD_ExtLineControl = _HIBYTE(dev->shade.wExposure);
563 dev->regs.RD_XStepTime = _LOBYTE(dev->shade.wXStep);
564 dev->regs.RD_ExtXStepTime = _HIBYTE(dev->shade.wXStep);
565 dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
566 dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
567 dev->regs.RD_ModeControl = _ModeScan/*(_ModeScan | _ModeFifoGSel)*/;
569 DBG( _DBG_INFO, "* bRefresh = %i\n", dev->scan.bRefresh );
571 if( dev->DataInf.wPhyDataType == COLOR_BW ) {
572 dev->regs.RD_ScanControl = _SCAN_BITMODE;
573 } else if( dev->DataInf.wPhyDataType <= COLOR_TRUE24 )
574 dev->regs.RD_ScanControl = _SCAN_BYTEMODE;
576 dev->regs.RD_ScanControl = _SCAN_12BITMODE;
579 dev->regs.RD_ScanControl |= _SCAN_1ST_AVERAGE;
580 u12hw_SelectLampSource( dev );
582 DBG( _DBG_INFO, "* RD_ScanControl = 0x%02x\n", dev->regs.RD_ScanControl );
585 dev->DataInf.crImage.x, dev->DataInf.crImage.y,
586 dev->DataInf.crImage.cx, dev->DataInf.crImage.cy );
588 dev->regs.RD_MotorTotalSteps = (dev->DataInf.crImage.cy * 4) +
589 (dev->f0_8_16 ? 32 : 16) +
590 (dev->scan.bDiscardAll ? 32 : 0);
592 dev->regs.RD_MotorTotalSteps);
594 dev->regs.RD_ScanControl1 = (_MTSC_ENABLE | _SCANSTOPONBUFFULL |
596 DBG( _DBG_INFO, "* RD_ScanControl1 = 0x%02x\n", dev->regs.RD_ScanControl1);
598 dev->regs.RD_Dpi = dev->DataInf.xyPhyDpi.x;
600 if(!(dev->DataInf.dwScanFlag & _SCANDEF_TPA )) {
601 dev->regs.RD_Origin = (u_short)(dev->adj.leftNormal*2+_DATA_ORIGIN_X);
603 } else if( dev->DataInf.dwScanFlag & _SCANDEF_Transparency ) {
604 dev->regs.RD_Origin = (u_short)dev->scan.posBegin;
606 dev->regs.RD_Origin = (u_short)dev->scan.negBegin;
608 dev->regs.RD_Origin += dev->DataInf.crImage.x;
610 if( dev->shade.intermediate & _ScanMode_AverageOut )
611 dev->regs.RD_Origin >>= 1;
613 if( dev->DataInf.wPhyDataType == COLOR_BW )
614 dev->regs.RD_Pixels = (u_short)dev->DataInf.dwAsicBytesPerPlane;
616 dev->regs.RD_Pixels = (u_short)dev->DataInf.dwAppPixelsPerLine;
619 dev->regs.RD_Origin, dev->regs.RD_Pixels );
622 memset( dev->scanStates, 0, _SCANSTATE_BYTES );
623 memset( dev->bufs.b1.pReadBuf, 0, _NUMBER_OF_SCANSTEPS );
625 if( dev->DataInf.wPhyDataType <= COLOR_256GRAY )
630 for( channel = _NUMBER_OF_SCANSTEPS, pState = dev->bufs.b1.pReadBuf;
631 channel; channel -= dev->scan.dwInterval ) {
633 pState += dev->scan.dwInterval;
635 for( channel = 0, pState = dev->bufs.b1.pReadBuf;
637 dev->scanStates[channel] = pState[0] | (pState[1] << 4);
645 while(!(u12io_GetScanState( dev ) & _SCANSTATE_STOP) &&
647 u12io_DownloadScanStates( dev );
650 _SET_REG( rb, c, REG_LINECONTROL, dev->regs.RD_LineControl );
652 dev->regs.RD_ExtLineControl);
653 _SET_REG( rb, c, REG_XSTEPTIME, dev->regs.RD_XStepTime );
654 _SET_REG( rb, c, REG_EXTENDEDXSTEP, dev->regs.RD_ExtXStepTime );
656 dev->regs.RD_MotorDriverType );
657 _SET_REG( rb, c, REG_STEPCONTROL, dev->regs.RD_StepControl );
658 _SET_REG( rb, c, REG_MOTOR0CONTROL, dev->regs.RD_Motor0Control );
659 _SET_REG( rb, c, REG_MODELCONTROL, dev->regs.RD_ModelControl );
660 _SET_REG( rb, c, REG_DPILO, (_LOBYTE(dev->regs.RD_Dpi)));
661 _SET_REG( rb, c, REG_DPIHI, (_HIBYTE(dev->regs.RD_Dpi)));
662 _SET_REG( rb, c, REG_SCANPOSLO, (_LOBYTE(dev->regs.RD_Origin)));
663 _SET_REG( rb, c, REG_SCANPOSHI,(_HIBYTE(dev->regs.RD_Origin)));
664 _SET_REG( rb, c, REG_WIDTHPIXELLO,(_LOBYTE(dev->regs.RD_Pixels)));
665 _SET_REG( rb, c, REG_WIDTHPIXELHI,(_HIBYTE(dev->regs.RD_Pixels)));
667 (_LOBYTE(dev->regs.RD_ThresholdControl)));
669 (_HIBYTE(dev->regs.RD_ThresholdControl)));
671 (_LOBYTE(dev->regs.RD_MotorTotalSteps)));
673 (_HIBYTE(dev->regs.RD_MotorTotalSteps)));
674 _SET_REG( rb, c, REG_SCANCONTROL, dev->regs.RD_ScanControl);
675 u12io_DataToRegs( dev, rb, c );
678 u12io_RegisterToScanner( dev, REG_INITDATAFIFO );
683 static SANE_Status u12hw_Memtest( U12_Device *dev )
697 tmp = dev->lastLampStatus + _SCAN_BYTEMODE;
698 u12io_DataToRegister( dev, REG_SCANCONTROL, tmp );
700 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeMappingMem );
701 u12io_DataToRegister( dev, REG_MEMORYLO, 0 );
702 u12io_DataToRegister( dev, REG_MEMORYHI, 0 );
705 u12io_MoveDataToScanner( dev, buf, _TEST_SIZE );
707 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeMappingMem );
708 u12io_DataToRegister( dev, REG_MEMORYLO, 0 );
709 u12io_DataToRegister( dev, REG_MEMORYHI, 0 );
711 u12io_DataToRegister( dev, REG_WIDTHPIXELLO, 0 );
712 u12io_DataToRegister( dev, REG_WIDTHPIXELHI, 5 );
716 dev->regs.RD_ModeControl = _ModeReadMappingMem;
717 u12io_ReadData( dev, buf, _TEST_SIZE );
733 static SANE_Status u12hw_CheckDevice( U12_Device *dev )
741 if( !u12io_IsConnected( dev )) {
743 if( !u12io_OpenScanPath( dev ))
747 /* u12io_IsConnected( dev ); */
748 if( !u12io_OpenScanPath( dev ))
753 tmp = u12io_GetExtendedStatus( dev );
757 dev->lastLampStatus = _SCAN_NORMALLAMP_ON;
759 dev->lastLampStatus = _SCAN_TPALAMP_ON;
768 u12io_DataToRegs( dev, rb, c );
771 return u12hw_Memtest( dev );
773 if( !dev->initialized )
774 return u12hw_Memtest( dev );
779 _VAR_NOT_USED( dev );
790 static void u12hw_CancelSequence( U12_Device *dev )
797 u12motor_PositionModuleToHome( dev );
799 u12motor_ToHomePosition( dev, SANE_TRUE );
801 u12io_DataToRegister( dev, REG_MOTOR0CONTROL, 0 );
802 u12io_DataToRegister( dev, REG_MODELCONTROL, 0x1a );
804 u12hw_PutToIdleMode( dev );
806 if( strcmp( dev->usbId, "0x0458-0x2004" ))
807 u12io_SoftwareReset( dev );
809 u12motor_PositionModuleToHome( dev );
811 u12io_DataToRegister( dev, REG_SCANCONTROL, 0x05 );
812 u12io_DataToRegister( dev, REG_MODELCONTROL, 0x1f );
814 u12hw_PutToIdleMode( dev );
816 u12io_DataToRegister( dev, REG_MODELCONTROL, 0x00 );
818 u12io_DataToRegister( dev, REG_ADCADDR, 0x01 );
819 u12io_DataToRegister( dev, REG_ADCDATA, 0x00 );
820 u12io_DataToRegister( dev, REG_ADCSERIALOUT, 0x00 );
825 u12io_DataToRegs( dev, rb, c );
827 u12io_CloseScanPath( dev );
832 static SANE_Status u12hw_WarmupLamp( U12_Device *dev )
838 if( dev->warmupNeeded ) {
840 u12io_StartTimer( &timer, _SECOND * dev->adj.warmup );
904 static void u12hw_StartLampTimer( U12_Device *dev )
933 interval.it_value.tv_sec = dev->adj.lampOff;
937 if( 0 != dev->adj.lampOff ) {
938 dev_xxx = dev;
939 setitimer( ITIMER_REAL, &interval, &dev->saveSettings );
943 if( 0 != dev->adj.lampOff ) {
944 dev_xxx = dev;
945 alarm( dev->adj.lampOff );
953 static void u12hw_StopLampTimer( U12_Device *dev )
965 if( 0 != dev->adj.lampOff )
966 setitimer( ITIMER_REAL, &dev->saveSettings, NULL );
968 _VAR_NOT_USED( dev );