Lines Matching refs:dev
72 u12shading_DownloadShadingTable( U12_Device *dev, SANE_Byte *buf, u_long len )
80 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeShadingMem );
81 u12io_DataToRegister( dev, REG_MEMORYLO, 0 );
82 u12io_DataToRegister( dev, REG_MEMORYHI, 0 );
85 u12io_DataToRegister( dev, REG_SCANCONTROL,
86 (SANE_Byte)(dev->regs.RD_ScanControl | _SCAN_12BITMODE));
88 u12io_MoveDataToScanner( dev, buf, len );
94 dev->regs.RD_RedDarkOff = dev->shade.DarkOffset.Colors.Red;
95 dev->regs.RD_GreenDarkOff = dev->shade.DarkOffset.Colors.Green;
96 dev->regs.RD_BlueDarkOff = dev->shade.DarkOffset.Colors.Blue;
98 val = (SANE_Byte*)&dev->regs.RD_RedDarkOff;
108 u12io_DataToRegs( dev, regs, c );
113 static SANE_Status u12shadingAdjustShadingWaveform( U12_Device *dev )
126 memset( dev->bufs.b2.pSumBuf, 0, (5400 * 3 * 2));
128 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeIdle );
130 dev->regs.RD_LineControl = _LOBYTE(dev->shade.wExposure);
131 dev->regs.RD_ExtLineControl = _HIBYTE(dev->shade.wExposure);
132 u12io_DataToRegister( dev, REG_EXTENDEDLINECONTROL,
133 dev->regs.RD_ExtLineControl );
134 u12io_DataToRegister( dev, REG_LINECONTROL, dev->regs.RD_LineControl );
136 dev->regs.RD_XStepTime = _LOBYTE(dev->shade.wExposure);
137 dev->regs.RD_ExtXStepTime = _HIBYTE(dev->shade.wExposure);
138 u12io_DataToRegister( dev, REG_EXTENDEDXSTEP, dev->regs.RD_ExtXStepTime );
139 u12io_DataToRegister( dev, REG_XSTEPTIME, dev->regs.RD_XStepTime );
141 dev->regs.RD_ModeControl = _ModeScan;
142 dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
143 dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
145 if( dev->shade.intermediate & _ScanMode_AverageOut ) {
147 dev->regs.RD_Dpi = 300;
148 dev->regs.RD_Pixels = 2700;
151 dev->regs.RD_Dpi = 600;
152 dev->regs.RD_Pixels = 5400;
155 dev->regs.RD_Origin = _SHADING_BEGINX;
157 for( pvar.pdw = (u_long*)dev->scanStates,
162 dev->scan.refreshState = SANE_FALSE;
163 u12io_PutOnAllRegisters( dev );
166 if( dev->shade.pHilight ) {
168 memset( dev->shade.pHilight, 0,
169 shadingBytes * dev->shade.skipHilight * 3 );
171 memset((SANE_Byte*)dev->shade.pHilight +
172 shadingBytes * dev->shade.skipHilight * 3, 0xff,
173 shadingBytes * dev->shade.skipShadow * 3 );
183 u12io_ReadOneShadingLine( dev, ((SANE_Byte*)dev->bufs.b1.pShadingRam)+
186 if( dev->shade.pHilight ) {
188 if ( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
190 cp.red.usp = dev->bufs.b1.pShadingRam + _SHADING_BEGINX;
191 cp.green.usp = cp.red.usp + dev->regs.RD_Pixels;
192 cp.blue.usp = cp.green.usp + dev->regs.RD_Pixels;
193 pvar.pusrgb = (RGBUShortDef*)dev->shade.pHilight +
196 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
203 for( b = dev->shade.skipHilight; b--;
204 pRGB += dev->regs.RD_Pixels ) {
226 for( b = dev->shade.skipShadow; b--;
227 pRGB += dev->regs.RD_Pixels ) {
247 cp.green.usp = dev->bufs.b1.pShadingRam +
248 dev->regs.RD_Pixels + _SHADING_BEGINX;
249 cp.blue.usp = (u_short*)dev->shade.pHilight + _SHADING_BEGINX;
251 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
255 for( b = dev->shade.skipHilight; b--;
256 cp.red.usp += dev->regs.RD_Pixels) {
264 for( b = dev->shade.skipShadow; b--;
265 cp.red.usp += dev->regs.RD_Pixels ) {
277 if( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
279 cp.red.usp = dev->bufs.b1.pShadingRam + _SHADING_BEGINX;
280 cp.green.usp = cp.red.usp + dev->regs.RD_Pixels;
281 cp.blue.usp = cp.green.usp + dev->regs.RD_Pixels;
283 pvar.pulrgb = (RGBULongDef*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
285 for( var.dwValue = (u_long)dev->regs.RD_Pixels - _SHADING_BEGINX;
295 cp.green.usp = dev->bufs.b1.pShadingRam +
296 dev->regs.RD_Pixels + _SHADING_BEGINX;
297 pvar.pdw = (u_long*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
298 for( var.dwValue = (u_long)dev->regs.RD_Pixels - _SHADING_BEGINX;
305 if( u12io_GetFifoLength( dev ) < dev->regs.RD_Pixels )
306 u12io_RegisterToScanner( dev, REG_REFRESHSCANSTATE );
310 if( dev->shade.pHilight ) {
311 if( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
313 psum.pulrgb = (RGBULongDef*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
314 pwsum = (RGBUShortDef*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
315 pvar.pusrgb = (RGBUShortDef*)dev->shade.pHilight + _SHADING_BEGINX;
317 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
321 for( b = dev->shade.skipHilight + dev->shade.skipShadow;
322 b--; pRGB += dev->regs.RD_Pixels ) {
329 pwsum->Red = (u_short)(psum.pulrgb->Red / dev->shade.dwDiv);
330 pwsum->Green = (u_short)(psum.pulrgb->Green / dev->shade.dwDiv);
331 pwsum->Blue = (u_short)(psum.pulrgb->Blue / dev->shade.dwDiv);
336 cp.green.ulp = (u_long*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
337 cp.blue.usp = (u_short*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
338 pvar.pw = (u_short*)dev->shade.pHilight + _SHADING_BEGINX;
340 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
344 for( b = dev->shade.skipHilight + dev->shade.skipShadow;
345 b--; cp.red.usp += dev->regs.RD_Pixels )
348 *cp.blue.usp = (u_short)(*cp.green.ulp / dev->shade.dwDiv);
355 if( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
357 psum.pulrgb = (RGBULongDef*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
358 pwsum = (RGBUShortDef*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
360 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
369 cp.green.ulp = (u_long*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
370 cp.blue.usp = (u_short*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
372 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
382 if( dev->DataInf.dwScanFlag & _SCANDEF_TPA )
383 u12tpa_FindCenterPointer( dev );
385 if( dev->DataInf.dwScanFlag & _SCANDEF_Negative )
386 u12tpa_Reshading( dev );
388 pRGB = (RGBUShortDef*)&dev->shade.pCcdDac->GainResize;
390 if ( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
392 pwsum = (RGBUShortDef*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
394 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
397 if ((short)(pwsum->Red -= dev->shade.DarkOffset.Colors.Red) > 0) {
404 if((short)(pwsum->Green -= dev->shade.DarkOffset.Colors.Green) > 0) {
411 if ((short)(pwsum->Blue -= dev->shade.DarkOffset.Colors.Blue) > 0) {
431 cp.green.usp = (u_short*)dev->bufs.b2.pSumBuf + _SHADING_BEGINX;
433 for( var.dwValue = dev->regs.RD_Pixels - _SHADING_BEGINX;
436 if((short)(*cp.green.usp -= dev->shade.DarkOffset.Colors.Green) > 0) {
452 u12shading_DownloadShadingTable(dev, dev->bufs.b2.pSumBuf, (5400 * 3 * 2));
458 static void u12shading_GainOffsetToDAC( U12_Device *dev, SANE_Byte ch,
461 if( dev->DACType == _DA_SAMSUNG8531 ) {
462 u12io_DataRegisterToDAC( dev, 0, ch );
464 u12io_DataRegisterToDAC( dev, reg, d );
469 static void u12shading_FillToDAC( U12_Device *dev,
472 if( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
474 u12shading_GainOffsetToDAC(dev, _DAC_RED, regs->Red, data->Colors.Red);
475 u12shading_GainOffsetToDAC(dev, _DAC_GREENCOLOR,
477 u12shading_GainOffsetToDAC(dev, _DAC_BLUE,
480 u12shading_GainOffsetToDAC(dev, _DAC_GREENMONO, regs->Green,
511 u12shading_AdjustGain( U12_Device *dev, u_long color, SANE_Byte hilight )
513 if( hilight < dev->shade.bGainLow ) {
515 if( dev->shade.Hilight.bColors[color] < dev->shade.bGainHigh ) {
517 dev->shade.fStop = SANE_FALSE;
518 dev->shade.Hilight.bColors[color] = hilight;
520 if( hilight <= (SANE_Byte)(dev->shade.bGainLow - hilight))
521 dev->shade.Gain.bColors[color] += dev->shade.bGainDouble;
523 dev->shade.Gain.bColors[color]++;
526 if( hilight > dev->shade.bGainHigh ) {
527 dev->shade.fStop = SANE_FALSE;
528 dev->shade.Hilight.bColors[color] = hilight;
529 dev->shade.Gain.bColors[color]--;
531 dev->shade.Hilight.bColors[color] = hilight;
535 if( dev->shade.Gain.bColors[color] > dev->shade.bMaxGain ) {
536 dev->shade.Gain.bColors[color] = dev->shade.bMaxGain;
542 static SANE_Status u12shading_AdjustRGBGain( U12_Device *dev )
549 dev->shade.Gain.Colors.Red =
550 dev->shade.Gain.Colors.Green =
551 dev->shade.Gain.Colors.Blue = dev->shade.bUniGain;
553 dev->shade.Hilight.Colors.Red =
554 dev->shade.Hilight.Colors.Green =
555 dev->shade.Hilight.Colors.Blue = 0;
557 dev->shade.bGainHigh = _GAIN_HIGH;
558 dev->shade.bGainLow = _GAIN_LOW;
560 dev->shade.fStop = SANE_FALSE;
562 for( i = 10; i-- && !dev->shade.fStop; ) {
569 dev->shade.fStop = SANE_TRUE;
571 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeIdle );
573 dev->regs.RD_ScanControl = _SCAN_BYTEMODE;
574 u12hw_SelectLampSource( dev );
575 u12io_DataToRegister( dev, REG_SCANCONTROL, dev->regs.RD_ScanControl );
577 u12shading_FillToDAC( dev, &dev->RegDACGain, &dev->shade.Gain );
579 dev->regs.RD_ModeControl = _ModeScan;
580 dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
581 dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
583 if( dev->shade.intermediate & _ScanMode_AverageOut )
584 dev->regs.RD_Origin = (u_short)_DATA_ORIGIN_X >> 1;
586 dev->regs.RD_Origin = (u_short)_DATA_ORIGIN_X;
588 dev->regs.RD_Dpi = 300;
589 dev->regs.RD_Pixels = 2560;
591 memset( dev->scanStates, 0, _SCANSTATE_BYTES );
592 dev->scanStates[1] = 0x77;
594 u12io_PutOnAllRegisters( dev );
598 if( u12io_ReadOneShadingLine( dev,
599 (SANE_Byte*)dev->bufs.b1.pShadingRam, 2560)) {
601 if( dev->DataInf.wPhyDataType <= COLOR_256GRAY ) {
604 (SANE_Byte*)dev->bufs.b1.pShadingRam + 2560, 2560);
606 u12shading_AdjustGain( dev, _CHANNEL_GREEN, hi[1] );
608 dev->shade.fStop = SANE_FALSE;
612 (SANE_Byte*)dev->bufs.b1.pShadingRam, 2560);
614 (SANE_Byte*)dev->bufs.b1.pShadingRam + 2560, 2560);
616 (SANE_Byte*)dev->bufs.b1.pShadingRam + 5120, 2560);
619 dev->shade.fStop = SANE_FALSE;
621 u12shading_AdjustGain( dev, _CHANNEL_RED, hi[0] );
622 u12shading_AdjustGain( dev, _CHANNEL_GREEN, hi[1] );
623 u12shading_AdjustGain( dev, _CHANNEL_BLUE, hi[2] );
627 dev->shade.fStop = SANE_FALSE;
630 if( !dev->shade.fStop )
633 u12shading_FillToDAC( dev, &dev->RegDACGain, &dev->shade.Gain );
639 static u_short u12shading_SumDarks( U12_Device *dev, u_short *data )
643 if( dev->CCDID == _CCD_3799 ) {
644 if( dev->shade.intermediate & _ScanMode_AverageOut )
649 if( dev->shade.intermediate & _ScanMode_AverageOut )
664 static SANE_Status u12shadingAdjustDark( U12_Device *dev )
670 dev->shade.DarkDAC.Colors = dev->shade.pCcdDac->DarkDAC.Colors;
671 dev->shade.fStop = SANE_FALSE;
673 for( i = 16; i-- && !dev->shade.fStop;) {
680 dev->shade.fStop = SANE_TRUE;
682 u12shading_FillToDAC( dev, &dev->RegDACOffset, &dev->shade.DarkDAC );
683 u12io_DataToRegister( dev, REG_MODECONTROL, _ModeIdle );
685 dev->regs.RD_ScanControl = (_SCAN_12BITMODE + _SCAN_1ST_AVERAGE);
686 u12hw_SelectLampSource( dev );
687 u12io_DataToRegister( dev, REG_SCANCONTROL, dev->regs.RD_ScanControl );
689 dev->regs.RD_StepControl = _MOTOR0_SCANSTATE;
690 dev->regs.RD_Motor0Control = _FORWARD_MOTOR;
692 dev->regs.RD_Origin = _SHADING_BEGINX;
693 dev->regs.RD_Pixels = 512;
695 if( dev->shade.intermediate & _ScanMode_AverageOut )
696 dev->regs.RD_Dpi = 300;
698 dev->regs.RD_Dpi = 600;
700 memset( dev->scanStates, 0, _SCANSTATE_BYTES );
701 dev->scanStates[1] = 0x77;
703 u12io_PutOnAllRegisters( dev );
707 if( u12io_ReadOneShadingLine(dev,
708 (SANE_Byte*)dev->bufs.b1.pShadingRam, 512*2)) {
710 if ( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
712 wDarks[0] = u12shading_SumDarks(dev, dev->bufs.b1.pShadingRam);
713 wDarks[1] = u12shading_SumDarks(dev, dev->bufs.b1.pShadingRam +
714 dev->regs.RD_Pixels );
715 wDarks[2] = u12shading_SumDarks(dev, dev->bufs.b1.pShadingRam +
716 dev->regs.RD_Pixels * 2UL);
719 dev->shade.fStop = SANE_FALSE;
721 dev->shade.DarkOffset.wColors[0] = wDarks[0];
722 dev->shade.DarkOffset.wColors[1] = wDarks[1];
723 dev->shade.DarkOffset.wColors[2] = wDarks[2];
724 (*dev->fnDACDark)( dev,dev->shade.pCcdDac,
726 (*dev->fnDACDark)( dev, dev->shade.pCcdDac,
728 (*dev->fnDACDark)( dev, dev->shade.pCcdDac,
732 wDarks[1] = u12shading_SumDarks(dev, dev->bufs.b1.pShadingRam +
733 dev->regs.RD_Pixels );
735 dev->shade.fStop = SANE_FALSE;
737 dev->shade.DarkOffset.wColors[1] = wDarks[1];
738 (*dev->fnDACDark)( dev, dev->shade.pCcdDac,
743 dev->shade.fStop = SANE_FALSE;
748 if ( dev->DataInf.wPhyDataType > COLOR_256GRAY ) {
749 (*dev->fnDarkOffset)( dev, dev->shade.pCcdDac, _CHANNEL_RED );
750 (*dev->fnDarkOffset)( dev, dev->shade.pCcdDac, _CHANNEL_GREEN );
751 (*dev->fnDarkOffset)( dev, dev->shade.pCcdDac, _CHANNEL_BLUE );
753 (*dev->fnDarkOffset)( dev, dev->shade.pCcdDac, _CHANNEL_GREEN );
760 static void u12shading_DownloadMapTable( U12_Device *dev, SANE_Byte *buf )
765 u12io_DataToRegister( dev, REG_SCANCONTROL,
766 (SANE_Byte)((dev->regs.RD_ScanControl & 0xfc) | _SCAN_BYTEMODE));
778 u12io_DataToRegs( dev, regs, 3 );
780 u12io_MoveDataToScanner( dev, buf, 4096 );
784 u12io_DataToRegister( dev, REG_SCANCONTROL, dev->regs.RD_ScanControl );
789 static SANE_Status u12shading_DoCalibration( U12_Device *dev )
801 u12hw_InitAsic( dev, SANE_TRUE );
803 dev->shade.DarkOffset.Colors.Red = 0;
804 dev->shade.DarkOffset.Colors.Green = 0;
805 dev->shade.DarkOffset.Colors.Blue = 0;
809 _SET_REG( rb, c, REG_MODELCONTROL, dev->regs.RD_ModelControl);
810 _SET_REG( rb, c, REG_MOTORDRVTYPE, dev->regs.RD_MotorDriverType );
813 u12io_DataToRegs( dev, rb, c );
815 res = u12motor_GotoShadingPosition( dev );
819 bScanControl = dev->regs.RD_ScanControl;
822 memset( dev->bufs.b2.pSumBuf, 0xff, (5400 * 3 * 2));
823 u12shading_DownloadShadingTable( dev, dev->bufs.b2.pSumBuf, (5400*3*2));
826 dev->bufs.b1.Buf.pdw[i] =
827 dev->bufs.b1.Buf.pdw[i+1] =
828 dev->bufs.b1.Buf.pdw[i+2] =
829 dev->bufs.b1.Buf.pdw[i+3] = tmp;
832 memcpy( dev->bufs.b1.pShadingMap + 4096, dev->bufs.b1.pShadingMap, 4096 );
833 memcpy( dev->bufs.b1.pShadingMap + 8192, dev->bufs.b1.pShadingMap, 4096 );
834 u12shading_DownloadMapTable( dev, dev->bufs.b1.pShadingMap );
836 DBG( _DBG_INFO, "* wExposure = %u\n", dev->shade.wExposure);
837 DBG( _DBG_INFO, "* wXStep = %u\n", dev->shade.wXStep);
839 dev->regs.RD_LineControl = (_LOBYTE(dev->shade.wExposure));
840 dev->regs.RD_ExtLineControl = (_HIBYTE(dev->shade.wExposure));
841 u12io_DataToRegister( dev, REG_EXTENDEDLINECONTROL,
842 dev->regs.RD_ExtLineControl );
843 u12io_DataToRegister( dev, REG_LINECONTROL, dev->regs.RD_LineControl );
845 res = u12shading_AdjustRGBGain( dev );
849 res = u12shadingAdjustDark( dev );
853 res = u12shadingAdjustShadingWaveform( dev );
857 dev->regs.RD_ScanControl = bScanControl;
860 if( dev->DataInf.wPhyDataType <= COLOR_256GRAY ) {
861 u12map_Adjust( dev, _MAP_MASTER, tb );
863 u12map_Adjust( dev, _MAP_RED, tb );
864 u12map_Adjust( dev, _MAP_GREEN, tb );
865 u12map_Adjust( dev, _MAP_BLUE, tb );
868 u12shading_DownloadMapTable( dev, tb );
870 u12motor_BackToHomeSensor( dev );