Lines Matching refs:ps
212 static void p9636InitializeAsicRegister( pScanData ps )
214 memset( &ps->AsicReg, 0, sizeof(RegData));
215 ps->AsicReg.RD_ScanControl = _SCAN_1ST_AVERAGE + _SCAN_BYTEMODE;
216 ps->Scan.bFifoSelect = ps->RegGFifoOffset;
230 static void p9636Init98001( pScanData ps, Bool shading )
240 bData = IODataRegisterFromScanner( ps, ps->RegConfiguration );
242 ps->Device.bCCDID = bData;
243 ps->Device.bCCDID &= _P98_CCD_TYPE_ID;
247 dwID = (ULong)ps->Device.bCCDID;
249 ps->sCaps.dwFlag |= dwID;
252 ps->Device.f0_8_16 = _FALSE;
254 ps->Shade.pCcdDac->DarkCmpHi.Colors.Red = 0x30;
255 ps->Shade.pCcdDac->DarkCmpLo.Colors.Red = 0x20;
256 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
257 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
258 ps->Shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x30;
259 ps->Shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x20;
261 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0x10;
262 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0x10;
263 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0x10;
265 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xd0;
266 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xd0;
267 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xd0;
274 ps->Device.dwModelOriginY = 0x50;
275 ps->Device.wNumDACRegs = _NUM_OF_DACREGS_W8144;
277 switch( ps->Device.bCCDID ) {
280 DBG( DBG_HIGH, "CCD-ID = 0x%02X = _CCD_3797\n", ps->Device.bCCDID );
281 ps->Shade.pCcdDac->GainResize.Colors.Red = 100;
282 ps->Shade.pCcdDac->GainResize.Colors.Green = 100;
283 ps->Shade.pCcdDac->GainResize.Colors.Blue = 96;
285 if( ps->DataInf.dwScanFlag & SCANDEF_TPA ) {
286 if (ps->DataInf.dwScanFlag & SCANDEF_Transparency) {
288 ps->Shade.pCcdDac->GainResize.Colors.Red = 130;
289 ps->Shade.pCcdDac->GainResize.Colors.Green = 110;
290 ps->Shade.pCcdDac->GainResize.Colors.Blue = 112;
292 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xcc;
293 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xcc;
294 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xcc;
296 ps->bsPreRedDAC = ps->bsPreGreenDAC = ps->bsPreBlueDAC = 0xcc;
298 ps->wsDACCompareHighRed = 0x0B0;
299 ps->wsDACCompareLowRed = 0x0A0;
300 ps->wsDACCompareHighGreen = 0x90;
301 ps->wsDACCompareLowGreen = 0x80;
302 ps->wsDACCompareHighBlue = 0x90;
303 ps->wsDACCompareLowBlue = 0x80;
304 ps->wsDACOffsetRed =
305 ps->wsDACOffsetGreen = ps->wsDACOffsetBlue = 0x30;
307 ps->Shade.pCcdDac->GainResize.Colors.Red = 97;
308 ps->Shade.pCcdDac->GainResize.Colors.Green = 82;
309 ps->Shade.pCcdDac->GainResize.Colors.Blue = 100;
311 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0x80;
312 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0x80;
313 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0x80;
315 ps->bsPreRedDAC = ps->bsPreGreenDAC = ps->bsPreBlueDAC = 0x80;
317 ps->wsDACCompareHighRed = 0x90;
318 ps->wsDACCompareLowRed = 0x80;
319 ps->wsDACCompareHighGreen = 0x1a0;
320 ps->wsDACCompareLowGreen = 0x190;
321 ps->wsDACCompareHighBlue = 0x260;
322 ps->wsDACCompareLowBlue = 0x250;
323 ps->wsDACOffsetRed =
324 ps->wsDACOffsetGreen = ps->wsDACOffsetBlue = 0x20;
327 ps->Shade.pCcdDac->DarkCmpHi.Colors.Red = 0x50;
328 ps->Shade.pCcdDac->DarkCmpLo.Colors.Red = 0x40;
329 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x38;
330 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x28;
331 ps->Shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x28;
332 ps->Shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x18;
334 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0x30;
335 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0x18;
336 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0x08;
338 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xf0;
339 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xcc;
340 if (ps->bSetScanModeFlag & _ScanMode_Mono) {
341 ps->Shade.pCcdDac->DarkDAC.Colors.Green =
342 ((ps->bSetScanModeFlag & _ScanMode_AverageOut)? 0xa0:0x68);
344 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xcc;
348 if ((ps->bSetScanModeFlag & _ScanMode_Mono) ||
349 (ps->DataInf.dwScanFlag & SCANDEF_Negative)) {
359 DBG( DBG_HIGH, "CCD-ID = 0x%02X = _CCD_3717\n", ps->Device.bCCDID );
361 ps->Shade.pCcdDac->GainResize.Colors.Red = 96;
362 ps->Shade.pCcdDac->GainResize.Colors.Green = 97;
363 ps->Shade.pCcdDac->GainResize.Colors.Blue = 100;
365 ps->Shade.pCcdDac->DarkCmpHi.Colors.Red = 0x15;
366 ps->Shade.pCcdDac->DarkCmpLo.Colors.Red = 0x05;
367 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x10;
368 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x01;
369 ps->Shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x10;
370 ps->Shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x01;
372 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0x28;
373 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0x14;
374 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0x10;
376 ps->Shade.pCcdDac->DarkDAC.Colors.Green =
377 ((ps->bSetScanModeFlag&_ScanMode_Mono)?0xd0:0xd6);
378 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xdd;
379 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xd9;
380 ps->Device.f0_8_16 = _TRUE;
385 DBG( DBG_HIGH, "CCD-ID = 0x%02X = _CCD_535\n", ps->Device.bCCDID );
386 ps->Shade.pCcdDac->GainResize.Colors.Red = 100;
387 ps->Shade.pCcdDac->GainResize.Colors.Green = 100;
388 ps->Shade.pCcdDac->GainResize.Colors.Blue = 95;
390 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0x2e;
391 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0x20;
392 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0x28;
394 ps->wMinCmpDpi = 75;
395 ps->lpEppColorHomePos->wMaxSteps = 890;
396 ps->lpBppColorHomePos->wMaxSteps = 890;
397 ps->lpSppColorHomePos->wMaxSteps = 890;
400 * ps->lpEppColorHomePos->bExposureTime = 48;
402 ps->lpEppColorHomePos->bExposureTime = 64;
403 ps->a_tabDiffParam[_ColorEpp60].bStepSpeed = 8;
404 ps->a_ColorSettings [1].bExposureTime = 64;
405 ps->a_tabDiffParam[_ColorEpp100_1400].bStepSpeed = 16;
406 ps->lpBppColorHomePos->bExposureTime = 96;
407 ps->lpSppColorHomePos->bExposureTime = 96;
409 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xf0;
410 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xdf;
412 if (ps->bSetScanModeFlag & _ScanMode_Mono) {
413 ps->Shade.pCcdDac->GainResize.Colors.Green = 110;
415 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
416 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
417 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0x20;
418 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xf0;
420 if (ps->bSetScanModeFlag & _ScanMode_AverageOut) {
422 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xf6;
423 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xe5;
424 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xe4;
425 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0x18;
426 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0;
427 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0;
429 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xf0;
430 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xe1;
431 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xdf;
438 DBG( DBG_HIGH, "CCD-ID = 0x%02X = _CCD_2556\n", ps->Device.bCCDID );
439 ps->Shade.pCcdDac->GainResize.Colors.Red = 100;
440 ps->Shade.pCcdDac->GainResize.Colors.Green = 100;
441 ps->Shade.pCcdDac->GainResize.Colors.Blue = 100;
443 ps->Shade.pCcdDac->DarkCmpHi.Colors.Red = 0x20;
444 ps->Shade.pCcdDac->DarkCmpLo.Colors.Red = 0x10;
445 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x20;
446 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x10;
447 ps->Shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x20;
448 ps->Shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x10;
450 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0;
451 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0;
452 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0;
458 DBG( DBG_HIGH, "CCD-ID = 0x%02X = _CCD_518\n", ps->Device.bCCDID );
459 ps->Device.dwModelOriginY = 0x50-3; /* 0x50-13 */
460 ps->Shade.pCcdDac->GainResize.Colors.Red = 98;
461 ps->Shade.pCcdDac->GainResize.Colors.Green = 98;
462 ps->Shade.pCcdDac->GainResize.Colors.Blue = 98;
464 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xcc;
465 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xcc;
466 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xcc;
468 if (ps->bSetScanModeFlag & _ScanMode_Mono) {
470 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
471 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
474 if( ps->DataInf.dwScanFlag & SCANDEF_TPA ) {
475 if( ps->DataInf.dwScanFlag & SCANDEF_Transparency ) {
476 ps->Shade.pCcdDac->GainResize.Colors.Red = 104;
477 ps->Shade.pCcdDac->GainResize.Colors.Green = 92;
478 ps->Shade.pCcdDac->GainResize.Colors.Blue = 96;
479 ps->bsPreRedDAC = ps->bsPreGreenDAC = ps->bsPreBlueDAC = 0xcc;
481 ps->Shade.pCcdDac->DarkCmpHi.Colors.Red = 0x20;
482 ps->Shade.pCcdDac->DarkCmpLo.Colors.Red = 0x10;
483 ps->Shade.pCcdDac->DarkCmpHi.Colors.Green = 0x20;
484 ps->Shade.pCcdDac->DarkCmpLo.Colors.Green = 0x10;
485 ps->Shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x20;
486 ps->Shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x10;
488 ps->Shade.pCcdDac->DarkOffSub.Colors.Red = 0;
489 ps->Shade.pCcdDac->DarkOffSub.Colors.Green = 0;
490 ps->Shade.pCcdDac->DarkOffSub.Colors.Blue = 0;
492 ps->wsDACCompareHighRed = 0x80; /* 0x35 */
493 ps->wsDACCompareLowRed = 0x70; /* 0x25 */
494 ps->wsDACCompareHighGreen = 0x80; /* 0x46 */
495 ps->wsDACCompareLowGreen = 0x70; /* 0x36 */
496 ps->wsDACCompareHighBlue = 0x80; /* 0x54 */
497 ps->wsDACCompareLowBlue = 0x70; /* 0x44 */
498 ps->wsDACOffsetRed =
499 ps->wsDACOffsetGreen = ps->wsDACOffsetBlue = 0; /* 0x70 */
501 ps->Shade.pCcdDac->GainResize.Colors.Red = 94;
502 ps->Shade.pCcdDac->GainResize.Colors.Green = 80;
503 ps->Shade.pCcdDac->GainResize.Colors.Blue = 78;
505 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0x80;
506 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0x80;
507 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0x80;
509 ps->bsPreRedDAC = ps->bsPreGreenDAC = ps->bsPreBlueDAC = 0x80;
511 ps->wsDACCompareHighRed = 0x90;
512 ps->wsDACCompareLowRed = 0x80;
513 ps->wsDACCompareHighGreen = 0x1a0;
514 ps->wsDACCompareLowGreen = 0x190;
515 ps->wsDACCompareHighBlue = 0x160;
516 ps->wsDACCompareLowBlue = 0x150;
517 ps->wsDACOffsetRed = 0xb0; /* 0x180 */
518 ps->wsDACOffsetGreen = 0xcc; /* 0x180 */
519 ps->wsDACOffsetBlue = 0xe2; /* 0x240 */
523 if ((ps->bSetScanModeFlag & _ScanMode_Mono) ||
524 (ps->DataInf.dwScanFlag & SCANDEF_Negative)) {
529 ps->Device.f0_8_16 = _TRUE;
537 DBG( DBG_HIGH, "CCD-ID = 0x%02X = _CCD_539\n", ps->Device.bCCDID );
538 ps->Shade.pCcdDac->GainResize.Colors.Red = 100;
539 ps->Shade.pCcdDac->GainResize.Colors.Green = 100;
540 ps->Shade.pCcdDac->GainResize.Colors.Blue = 98;
542 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0xcc;
543 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0xcc;
544 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0xcc;
546 if( ps->DataInf.dwScanFlag & SCANDEF_TPA ) {
547 if( ps->DataInf.dwScanFlag & SCANDEF_Transparency ) {
549 ps->Shade.pCcdDac->GainResize.Colors.Red = 80;
550 ps->Shade.pCcdDac->GainResize.Colors.Green = 80;
551 ps->Shade.pCcdDac->GainResize.Colors.Blue = 80;
552 ps->bsPreRedDAC = 0xcc;
553 ps->bsPreGreenDAC = 0xcc;
554 ps->bsPreBlueDAC = 0xcc;
555 ps->wsDACCompareHighRed = 0x90;
556 ps->wsDACCompareLowRed = 0x80;
557 ps->wsDACCompareHighGreen = 0x90;
558 ps->wsDACCompareLowGreen = 0x80;
559 ps->wsDACCompareHighBlue = 0x90;
560 ps->wsDACCompareLowBlue = 0x80;
561 ps->wsDACOffsetRed =
562 ps->wsDACOffsetGreen = ps->wsDACOffsetBlue = 0x70;
564 ps->Shade.pCcdDac->GainResize.Colors.Red = 80;
565 ps->Shade.pCcdDac->GainResize.Colors.Green = 96;
566 ps->Shade.pCcdDac->GainResize.Colors.Blue = 95;
568 ps->Shade.pCcdDac->DarkDAC.Colors.Red = 0x90;
569 ps->Shade.pCcdDac->DarkDAC.Colors.Green = 0x90;
570 ps->Shade.pCcdDac->DarkDAC.Colors.Blue = 0x90;
572 ps->bsPreRedDAC = ps->bsPreGreenDAC = ps->bsPreBlueDAC = 0x90;
573 ps->wsDACCompareHighRed = 0xd0; /* 0x90 */
574 ps->wsDACCompareLowRed = 0xc0; /* 0x80 */
575 ps->wsDACCompareHighGreen = 0x110; /* 0x1a0 */
576 ps->wsDACCompareLowGreen = 0x100; /* 0x190 */
577 ps->wsDACCompareHighBlue = 0x130; /* 0x260 */
578 ps->wsDACCompareLowBlue = 0x120; /* 0x250 */
579 ps->wsDACOffsetRed = 0x70; /* 0x70 */
580 ps->wsDACOffsetGreen = 0x70; /* 0x180 */
581 ps->wsDACOffsetBlue = 0x70; /* 0x240 */
585 if (ps->bSetScanModeFlag & _ScanMode_Mono ||
586 (ps->DataInf.dwScanFlag & SCANDEF_Negative)) {
591 ps->Device.f0_8_16 = _TRUE;
596 if( ps->bSetScanModeFlag == _ScanMode_Color )
601 if( ps->bSetScanModeFlag == _ScanMode_Mono )
606 ps->OpenScanPath( ps );
611 DBG( DBG_IO, "Programming DAC (%u regs)\n", ps->Device.wNumDACRegs );
613 for( w = 0; w < ps->Device.wNumDACRegs; w++) {
617 IODataRegisterToDAC( ps,
621 if( ps->bSetScanModeFlag & _ScanMode_Mono ) {
622 ps->AsicReg.RD_Model1Control = _MOTOR_2916 + _BUTTON_MODE +
625 ps->AsicReg.RD_Model1Control = _MOTOR_2916 +
628 IODataToRegister( ps, ps->RegModel1Control, ps->AsicReg.RD_Model1Control );
631 IODataToRegister( ps, ps->RegWaitStateInsert, 6 );
636 pw = pw + (ULong)ps->bSetScanModeFlag * 24;
637 DBG( DBG_LOW, "bSetScanModeFlag = %u\n", ps->bSetScanModeFlag );
641 IODataToRegister( ps, Data.wOverlap.b1st, Data.wOverlap.b2nd );
644 ps->CloseScanPath( ps );
651 static void p9636SetupScannerVariables( pScanData ps )
653 ps->ReInitAsic( ps, _FALSE );
655 IOCmdRegisterToScanner(ps, ps->RegLineControl, ps-> AsicReg.RD_LineControl);
657 memset( ps->a_nbNewAdrPointer, 0, _SCANSTATE_BYTES);
658 IOSetToMotorRegister( ps );
664 static void p9636SetGeneralRegister( pScanData ps )
668 ps->AsicReg.RD_StepControl = _MOTOR0_SCANSTATE + _MOTOR0_ONESTEP;
669 ps->AsicReg.RD_ModeControl = _ModeScan + _ModeFifoRSel;
670 ps->AsicReg.RD_Motor1Control = _MotorOn + _MotorDirForward;
671 ps->AsicReg.RD_Motor0Control = ps->bHpMotor | (_MotorOn+_MotorDirForward);
672 ps->AsicReg.RD_XStepTime = ps->bStepSpeed;
674 if( COLOR_BW == ps->DataInf.wPhyDataType ) {
676 ps->AsicReg.RD_ScanControl = _SCAN_BITMODE;
678 if( !(ps->DataInf.dwScanFlag & SCANDEF_Inverse))
679 ps->AsicReg.RD_ScanControl |= _P98_SCANDATA_INVERT;
683 if (COLOR_TRUE48 == ps->DataInf.wPhyDataType) {
684 ps->AsicReg.RD_ScanControl = _SCAN_12BITMODE;
686 if (!(ps->DataInf.dwScanFlag & SCANDEF_RightAlign))
687 ps->AsicReg.RD_ScanControl |= _BITALIGN_LEFT;
689 ps->AsicReg.RD_ScanControl = _SCAN_BYTEMODE;
691 if( ps->DataInf.dwScanFlag & SCANDEF_Inverse )
692 ps->AsicReg.RD_ScanControl |= _P98_SCANDATA_INVERT;
695 ps->AsicReg.RD_ScanControl |= _SCAN_1ST_AVERAGE;
696 IOSelectLampSource( ps );
702 static void p9636SetStartStopRegister( pScanData ps )
704 ps->AsicReg.RD_Origin = (UShort)(ps->dwOffset70 + ps->Device.DataOriginX +
705 ps->DataInf.crImage.x);
709 if (ps->bSetScanModeFlag & _ScanMode_AverageOut )
711 ps->AsicReg.RD_Origin = ps->AsicReg.RD_Origin >> 1;
713 if (ps->DataInf.wPhyDataType < COLOR_256GRAY) {
714 ps->AsicReg.RD_Pixels = (UShort)ps->DataInf.dwAsicBytesPerLine;
716 ps->AsicReg.RD_Pixels = (UShort)ps->DataInf.dwAsicPixelsPerPlane;
720 ps->AsicReg.RD_Origin, ps->AsicReg.RD_Pixels );
726 static void p9636SetupScanningCondition( pScanData ps )
730 IORegisterDirectToScanner( ps, ps->RegInitDataFifo );
732 ps->InitialSetCurrentSpeed( ps );
734 if (ps->DataInf.wPhyDataType > COLOR_TRUE24) {
735 if (ps->DataInf.dwAsicBytesPerPlane < 1024)
736 ps->Scan.dwMinReadFifo = 1024;
738 ps->Scan.dwMinReadFifo = ps->DataInf.dwAsicBytesPerPlane;
740 if (ps->DataInf.dwAsicBytesPerPlane * 2 < 1024)
741 ps->Scan.dwMinReadFifo = 1024;
743 ps->Scan.dwMinReadFifo = ps->DataInf.dwAsicBytesPerPlane * 2;
746 p9636SetGeneralRegister( ps );
748 IORegisterDirectToScanner( ps, ps->RegInitDataFifo );
750 ps->SetupMotorRunTable( ps );
752 ps->AsicReg.RD_Dpi = ps->DataInf.xyPhyDpi.x;
754 p9636SetStartStopRegister( ps );
755 IOSetToMotorRegister ( ps );
757 ps->bCurrentLineCount = 0;
758 IOCmdRegisterToScanner(ps, ps->RegScanControl, ps->AsicReg.RD_ScanControl);
760 IOPutOnAllRegisters( ps );
762 ps->OpenScanPath( ps );
764 ps->AsicReg.RD_ModeControl &= ~_ModeIdle;
765 IODataToRegister( ps, ps->RegModeControl, ps->AsicReg.RD_ModeControl);
767 ps->AsicReg.RD_ModeControl = _ModeScan + _ModeFifoRSel;
768 IODataToRegister( ps, ps->RegModeControl, ps->AsicReg.RD_ModeControl);
770 IORegisterToScanner( ps, ps->RegInitDataFifo );
772 ps->CloseScanPath( ps );
774 if (ps->DataInf.wPhyDataType >= COLOR_TRUE24) {
776 dw = ps->DataInf.dwAsicPixelsPerPlane;
777 ps->dwMaxReadFifoData = _SIZE_COLORFIFO -
778 ps->DataInf.dwAsicBytesPerPlane * 64UL /
779 (ULong)ps->bCurrentSpeed - dw;
781 dw = ps->DataInf.dwAsicBytesPerPlane;
782 ps->dwMaxReadFifoData = _SIZE_GRAYFIFO -
783 ps->DataInf.dwAsicBytesPerPlane * 64UL /
784 (ULong)ps->bCurrentSpeed - dw;
787 if ((dw = dw * 4UL) > ps->dwMaxReadFifoData) {
788 ps->dwSizeMustProcess = ps->dwMaxReadFifoData;
790 ps->dwSizeMustProcess = dw;
793 if (ps->DataInf.wPhyDataType >= COLOR_TRUE24) {
795 if (ps->DataInf.xyPhyDpi.y <= 150) {
796 dw = ps->DataInf.dwAsicPixelsPerPlane;
798 if (ps->DataInf.xyPhyDpi.y <= 300) {
799 dw = ps->DataInf.dwAsicPixelsPerPlane * 2;
801 if (ps->DataInf.xyPhyDpi.y <= 600) {
802 dw = ps->DataInf.dwAsicPixelsPerPlane * 4;
804 dw = ps->DataInf.dwAsicPixelsPerPlane * 8;
809 if (ps->Device.f0_8_16 && (ps->DataInf.xyPhyDpi.y >= 150))
812 ps->dwSizeMustProcess += dw;
813 ps->Scan.dwMinReadFifo += dw;
814 ps->dwMaxReadFifoData += dw;
821 static void p9636PutToIdleMode( pScanData ps )
830 IOCmdRegisterToScanner( ps, ps->RegMotor0Control, 0x00 );
831 IOCmdRegisterToScanner( ps, ps->RegLineControl,ps->AsicReg.RD_LineControl);
833 IOCmdRegisterToScanner( ps, ps->RegModeControl,
836 ps->OpenScanPath(ps);
843 IODataToRegister( ps, ccdStop[i].bReg, ccdStop[i].bParam );
846 IODataRegisterToDAC( ps, 0x01, 0x00 ); /* Close ADC */
848 ps->CloseScanPath(ps);
856 static int p9636Calibration( pScanData ps )
860 ps->Scan.bFifoSelect = ps->RegGFifoOffset;
865 _ASSERT(ps->WaitForShading);
866 if( !ps->WaitForShading( ps ))
869 IOCmdRegisterToScanner( ps, ps->RegLineControl, _DEFAULT_LINESCANTIME );
874 _ASSERT(ps->WaitForPositionY);
875 ps->WaitForPositionY( ps );
877 IOCmdRegisterToScanner( ps, ps->RegLineControl,
878 ps->AsicReg.RD_LineControl );
880 ps->fDoFilter = ps->fFilterFirstLine = _FALSE;
881 ps->dwDivFilter = ps->dwMul = 53;
882 ps->bOffsetFilter = 12;
884 if (COLOR_256GRAY == ps->DataInf.wPhyDataType) {
885 ps->fDoFilter = _TRUE;
886 ps->pFilterBuf = ps->pGet1 = ps->pProcessingBuf;
887 ps->pGet2 = ps->pGet1 + 5120;
888 ps->pGet3 = ps->pGet2 + 5120;
889 ps->pEndBuf = ps->pGet3 + 5120;
891 ps->fFilterFirstLine = _TRUE;
892 ps->dwLinesFilter = ps->DataInf.dwAppLinesPerArea;
895 ps->bCurrentLineCount = 0x3f;
906 _LOC int P9636InitAsic( pScanData ps )
915 p9636InitializeAsicRegister( ps );
917 ps->IO.bOpenCount = 0;
922 ps->RegSwitchBus = 0;
923 ps->RegEPPEnable = 1;
924 ps->RegECPEnable = 2;
925 ps->RegReadDataMode = 3;
926 ps->RegWriteDataMode = 4;
927 ps->RegInitDataFifo = 5;
928 ps->RegForceStep = 6;
929 ps->RegInitScanState = 7;
930 ps->RegRefreshScanState = 8;
931 ps->RegWaitStateInsert = 0x0a;
932 ps->RegRFifoOffset = 0x0a;
933 ps->RegGFifoOffset = 0x0b;
934 ps->RegBFifoOffset = 0x0c;
935 ps->RegBitDepth = 0x13;
936 ps->RegStepControl = 0x14;
937 ps->RegMotor0Control = 0x15;
938 ps->RegXStepTime = 0x16;
939 ps->RegGetScanState = 0x17;
940 ps->RegAsicID = 0x18;
941 ps->RegMemoryLow = 0x19;
942 ps->RegMemoryHigh = 0x1a;
943 ps->RegModeControl = 0x1b;
944 ps->RegLineControl = 0x1c;
945 ps->RegScanControl = 0x1d;
946 ps->RegConfiguration = 0x1e;
947 ps->RegModelControl = 0x1f;
948 ps->RegModel1Control = 0x20;
949 ps->RegDpiLow = 0x21;
950 ps->RegDpiHigh = 0x22;
951 ps->RegScanPosLow = 0x23;
952 ps->RegScanPosHigh = 0x24;
953 ps->RegWidthPixelsLow = 0x25;
954 ps->RegWidthPixelsHigh = 0x26;
955 ps->RegThresholdLow = 0x27;
956 ps->RegThresholdHigh = 0x28;
957 ps->RegThresholdGapControl = 0x29;
958 ps->RegADCAddress = 0x2a;
959 ps->RegADCData = 0x2b;
960 ps->RegADCPixelOffset = 0x2c;
961 ps->RegADCSerialOutStr = 0x2d;
962 ps->RegResetConfig = 0x2e;
963 ps->RegLensPosition = 0x2f;
964 ps->RegStatus = 0x30;
965 ps->RegScanStateControl = 0x31;
966 ps->RegRedChDarkOffsetLow = 0x33;
967 ps->RegRedChDarkOffsetHigh = 0x34;
968 ps->RegGreenChDarkOffsetLow = 0x35;
969 ps->RegGreenChDarkOffsetHigh= 0x36;
970 ps->RegBlueChDarkOffsetLow = 0x37;
971 ps->RegBlueChDarkOffsetHigh = 0x38;
972 ps->RegResetPulse0 = 0x39;
973 ps->RegResetPulse1 = 0x3a;
974 ps->RegCCDClampTiming0 = 0x3b;
975 ps->RegCCDClampTiming1 = 0x3c;
976 ps->RegVSMPTiming0 = 0x41;
977 ps->RegVSMPTiming1 = 0x42;
978 ps->RegCCDQ1Timing0 = 0x43;
979 ps->RegCCDQ1Timing1 = 0x44;
980 ps->RegCCDQ1Timing2 = 0x45;
981 ps->RegCCDQ1Timing3 = 0x46;
982 ps->RegCCDQ2Timing0 = 0x47;
983 ps->RegCCDQ2Timing1 = 0x48;
984 ps->RegCCDQ2Timing2 = 0x49;
985 ps->RegCCDQ2Timing3 = 0x4a;
986 ps->RegADCclockTiming0 = 0x4b;
987 ps->RegADCclockTiming1 = 0x4c;
988 ps->RegADCclockTiming2 = 0x4d;
989 ps->RegADCclockTiming3 = 0x4e;
990 ps->RegADCDVTiming0 = 0x50;
991 ps->RegADCDVTiming1 = 0x51;
992 ps->RegADCDVTiming2 = 0x52;
993 ps->RegADCDVTiming3 = 0x53;
998 ps->SetupScannerVariables = p9636SetupScannerVariables;
999 ps->SetupScanningCondition = p9636SetupScanningCondition;
1000 ps->ReInitAsic = p9636Init98001;
1001 ps->PutToIdleMode = p9636PutToIdleMode;
1002 ps->Calibration = p9636Calibration;
1007 ps->CtrlReadHighNibble = _CTRL_GENSIGNAL + _CTRL_AUTOLF + _CTRL_STROBE;
1008 ps->CtrlReadLowNibble = _CTRL_GENSIGNAL + _CTRL_AUTOLF;
1010 ps->f97003 = _FALSE;
1011 ps->IO.useEPPCmdMode = _FALSE;
1012 ps->Scan.fRefreshState = _TRUE;
1013 ps->wMinCmpDpi = 60;
1014 ps->Scan.fMotorBackward = _FALSE;
1016 IOSetXStepLineScanTime( ps, _DEFAULT_LINESCANTIME );
1018 ps->Shade.pCcdDac = &shadingVar;
1019 ps->bFastMoveFlag = _FastMove_Low_C75_G150;
1020 ps->dwOffset70 = _P98_OFFSET70;
1026 result = DacInitialize( ps );
1030 result = ImageInitialize( ps );
1034 result = IOFuncInitialize( ps );
1038 result = IOInitialize( ps );
1042 result = MotorInitialize( ps );
1050 if( _FALSE == MiscAllPointersSet( ps ))
1054 DBG( DBG_LOW, "0x%02x\n", ps->sCaps.AsicID );
1056 if( _FALSE == ps->OpenScanPath( ps )) {
1062 ps->Device.bCCDID = IODataFromRegister( ps, ps->RegConfiguration );
1063 ps->Device.bCCDID &= _P98_CCD_TYPE_ID;
1064 DBG( DBG_HIGH, "CCID = 0x%02X\n", ps->Device.bCCDID);
1066 ps->CloseScanPath( ps );
1071 switch( ps->Device.bCCDID ) {
1077 ps->sCaps.Model = MODEL_OP_9636PP;
1078 ps->sCaps.dwFlag &= ~SFLAG_TPA;