kopia lustrzana https://gitlab.com/sane-project/backends
				
				
				
			
		
			
				
	
	
		
			1122 wiersze
		
	
	
		
			43 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			1122 wiersze
		
	
	
		
			43 KiB
		
	
	
	
		
			C
		
	
	
/* @file u12-ccd.c
 | 
						|
 * @brief here we have the whole code to intialize the CCD and DAC stuff
 | 
						|
 *
 | 
						|
 * based on sources acquired from Plustek Inc.
 | 
						|
 * Copyright (c) 2003-2004 Gerhard Jaeger <gerhard@gjaeger.de>
 | 
						|
 *
 | 
						|
 * History:
 | 
						|
 * - 0.01 - initial version
 | 
						|
 * - 0.02 - no changes
 | 
						|
 * .
 | 
						|
 * <hr>
 | 
						|
 * This file is part of the SANE package.
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or
 | 
						|
 * modify it under the terms of the GNU General Public License as
 | 
						|
 * published by the Free Software Foundation; either version 2 of the
 | 
						|
 * License, or (at your option) any later version.
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but
 | 
						|
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 * General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU General Public License
 | 
						|
 * along with this program; if not, write to the Free Software
 | 
						|
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 | 
						|
 * MA 02111-1307, USA.
 | 
						|
 *
 | 
						|
 * As a special exception, the authors of SANE give permission for
 | 
						|
 * additional uses of the libraries contained in this release of SANE.
 | 
						|
 *
 | 
						|
 * The exception is that, if you link a SANE library with other files
 | 
						|
 * to produce an executable, this does not by itself cause the
 | 
						|
 * resulting executable to be covered by the GNU General Public
 | 
						|
 * License.  Your use of that executable is in no way restricted on
 | 
						|
 * account of linking the SANE library code into it.
 | 
						|
 *
 | 
						|
 * This exception does not, however, invalidate any other reasons why
 | 
						|
 * the executable file might be covered by the GNU General Public
 | 
						|
 * License.
 | 
						|
 *
 | 
						|
 * If you submit changes to SANE to the maintainers to be included in
 | 
						|
 * a subsequent release, you agree by submitting the changes that
 | 
						|
 * those changes may be distributed with this exception intact.
 | 
						|
 *
 | 
						|
 * If you write modifications of your own for SANE, it is your choice
 | 
						|
 * whether to permit this exception to apply to your modifications.
 | 
						|
 * If you do not wish that, delete this exception notice.
 | 
						|
 * <hr>
 | 
						|
 */
 | 
						|
 | 
						|
/*************************** some definitions ********************************/
 | 
						|
 | 
						|
#define _REFLECTION     0
 | 
						|
#define _TRANSPARENCY   1
 | 
						|
#define _NEGATIVE       2
 | 
						|
 | 
						|
#define _NUM_OF_CCDREGS_W8143    25
 | 
						|
#define _NUM_OF_DACREGS_W8143    10
 | 
						|
 | 
						|
#define _NUM_OF_CCDREGS_S1224    29
 | 
						|
#define _NUM_OF_DACREGS_S1224    7
 | 
						|
 | 
						|
#define _NUM_OF_CCDREGS_S8531    29
 | 
						|
#define _NUM_OF_DACREGS_S8531    9
 | 
						|
 | 
						|
/*************************** some local vars *********************************/
 | 
						|
 | 
						|
static pFnVoid u12ccd_InitFunc = NULL;
 | 
						|
 | 
						|
static RegDef W3797CCDParams[4][_NUM_OF_CCDREGS_W8143] = {
 | 
						|
    {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x2a}, {0x3a, 0x0a}, {0x3b, 0x37},
 | 
						|
        {0x3c, 0x16}, {0x41, 0x0e}, {0x42, 0x90}, {0x43, 0x01},
 | 
						|
        {0x44, 0x27}, {0x45, 0x27}, {0x46, 0x01}, {0x47, 0x03},
 | 
						|
        {0x48, 0x27}, {0x49, 0x2f}, {0x4a, 0x09}, {0x4b, 0x03},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x06}, {0x4e, 0x06}, {0x67, 0x00},
 | 
						|
        {0x50, 0x08}, {0x51, 0x0e}, {0x52, 0x0c}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x3d}, {0x3a, 0x04}, {0x3b, 0x46},
 | 
						|
        {0x3c, 0x06}, {0x41, 0x1f}, {0x42, 0x8c}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf2}, {0x47, 0x02},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x00},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x0e}, {0x67, 0x00},
 | 
						|
        {0x50, 0x01}, {0x51, 0x06}, {0x52, 0x09}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x16}, {0x3a, 0x03}, {0x3b, 0x1f},
 | 
						|
        {0x3c, 0x07}, {0x41, 0x04}, {0x42, 0x1e}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf1}, {0x47, 0x02},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xf9}, {0x4b, 0x04},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x03}, {0x67, 0x00},
 | 
						|
        {0x50, 0x06}, {0x51, 0x03}, {0x52, 0x09}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x18}, {0x3a, 0x04}, {0x3b, 0x1d},
 | 
						|
        {0x3c, 0x03}, {0x41, 0x0c}, {0x42, 0x84}, {0x43, 0x03},
 | 
						|
        {0x44, 0x0a}, {0x45, 0x08}, {0x46, 0xfa}, {0x47, 0x04},
 | 
						|
        {0x48, 0x0a}, {0x49, 0x08}, {0x4a, 0xf2}, {0x4b, 0x02},
 | 
						|
        {0x4c, 0x03}, {0x4d, 0x02}, {0x4e, 0x0e}, {0x67, 0x00},
 | 
						|
        {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x03}, {0x53, 0x03},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
static RegDef W3799CCDParams[4][_NUM_OF_CCDREGS_W8143] = {
 | 
						|
    {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x2c}, {0x3a, 0x05}, {0x3b, 0x3c},
 | 
						|
        {0x3c, 0x0e}, {0x41, 0x0e}, {0x42, 0x90}, {0x43, 0x01},
 | 
						|
        {0x44, 0x27}, {0x45, 0x27}, {0x46, 0x01}, {0x47, 0x02},
 | 
						|
        {0x48, 0x27}, {0x49, 0x2f}, {0x4a, 0x09}, {0x4b, 0x05},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x06}, {0x67, 0x00},
 | 
						|
        {0x50, 0x08}, {0x51, 0x0d}, {0x52, 0x0c}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x3d}, {0x3a, 0x04}, {0x3b, 0x46},
 | 
						|
        {0x3c, 0x06}, {0x41, 0x1f}, {0x42, 0x8c}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf2}, {0x47, 0x01},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x00},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x0e}, {0x67, 0x00},
 | 
						|
        {0x50, 0x01}, {0x51, 0x06}, {0x52, 0x12}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x16}, {0x3a, 0x02}, {0x3b, 0x1a},
 | 
						|
        {0x3c, 0x05}, {0x41, 0x04}, {0x42, 0x1e}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf1}, {0x47, 0x01},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xf9}, {0x4b, 0x04},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x03}, {0x67, 0x00},
 | 
						|
        {0x50, 0x06}, {0x51, 0x03}, {0x52, 0x09}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x18}, {0x3a, 0x04}, {0x3b, 0x1d},
 | 
						|
        {0x3c, 0x03}, {0x41, 0x0c}, {0x42, 0x84}, {0x43, 0x03},
 | 
						|
        {0x44, 0x0a}, {0x45, 0x08}, {0x46, 0xfa}, {0x47, 0x03},
 | 
						|
        {0x48, 0x0a}, {0x49, 0x08}, {0x4a, 0xf2}, {0x4b, 0x02},
 | 
						|
        {0x4c, 0x03}, {0x4d, 0x02}, {0x4e, 0x0e}, {0x67, 0x00},
 | 
						|
        {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x03}, {0x53, 0x03},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
/* Genius ColorPage Vivid III */
 | 
						|
static RegDef W548CCDParams[4][_NUM_OF_CCDREGS_W8143] = {
 | 
						|
    {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x2c}, {0x3a, 0x05}, {0x3b, 0x3c},
 | 
						|
        {0x3c, 0x0e}, {0x41, 0x0e}, {0x42, 0x90}, {0x43, 0x01},
 | 
						|
        {0x44, 0x27}, {0x45, 0x27}, {0x46, 0x01}, {0x47, 0x02},
 | 
						|
        {0x48, 0x27}, {0x49, 0x2f}, {0x4a, 0x09}, {0x4b, 0x05},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x06}, {0x67, 0x00},
 | 
						|
        {0x50, 0x08}, {0x51, 0x0d}, {0x52, 0x0c}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x3d}, {0x3a, 0x04}, {0x3b, 0x46},
 | 
						|
        {0x3c, 0x06}, {0x41, 0x1f}, {0x42, 0x8c}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf2}, {0x47, 0x01},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x00},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x0e}, {0x67, 0x00},
 | 
						|
        {0x50, 0x01}, {0x51, 0x06}, {0x52, 0x12}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x16}, {0x3a, 0x02}, {0x3b, 0x1a},
 | 
						|
        {0x3c, 0x05}, {0x41, 0x04}, {0x42, 0x1e}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf1}, {0x47, 0x01},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xf9}, {0x4b, 0x04},
 | 
						|
        {0x4c, 0x07}, {0x4d, 0x05}, {0x4e, 0x03}, {0x67, 0x00},
 | 
						|
        {0x50, 0x06}, {0x51, 0x03}, {0x52, 0x09}, {0x53, 0x0b},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x18}, {0x3a, 0x04}, {0x3b, 0x1d},
 | 
						|
        {0x3c, 0x03}, {0x41, 0x0c}, {0x42, 0x84}, {0x43, 0x03},
 | 
						|
        {0x44, 0x0a}, {0x45, 0x08}, {0x46, 0xfa}, {0x47, 0x03},
 | 
						|
        {0x48, 0x0a}, {0x49, 0x08}, {0x4a, 0xf2}, {0x4b, 0x02},
 | 
						|
        {0x4c, 0x03}, {0x4d, 0x02}, {0x4e, 0x0e}, {0x67, 0x00},
 | 
						|
        {0x50, 0x00}, {0x51, 0x09}, {0x52, 0x03}, {0x53, 0x03},
 | 
						|
        {0xf0, 0x00}
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
static RegDef S3797CCDParams[4][_NUM_OF_CCDREGS_S1224] = {
 | 
						|
    {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x2a}, {0x3a, 0x0a}, {0x3b, 0x37},
 | 
						|
        {0x3c, 0x16}, {0x41, 0x2c}, {0x42, 0x9f}, {0x43, 0x01},
 | 
						|
        {0x44, 0x27}, {0x45, 0x27}, {0x46, 0x01}, {0x47, 0x03},
 | 
						|
        {0x48, 0x27}, {0x49, 0x27}, {0x4a, 0x09}, {0x4b, 0x0b},
 | 
						|
        {0x4c, 0x06}, {0x4d, 0x06}, {0x4e, 0x0b}, {0x50, 0x13},
 | 
						|
        {0x51, 0x06}, {0x52, 0x06}, {0x53, 0x0b}, {0x67, 0x00},
 | 
						|
        {0x6f, 0x20}, {0x70, 0x06}, {0x60, 0x07}, {0x61, 0x9f},
 | 
						|
        {0x65, 0x01}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x3d}, {0x3a, 0x06}, {0x3b, 0x46},
 | 
						|
        {0x3c, 0x06}, {0x41, 0x3d}, {0x42, 0x92}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf2}, {0x47, 0x02},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x1b},
 | 
						|
        {0x4c, 0x06}, {0x4d, 0x06}, {0x4e, 0x0b}, {0x50, 0x23},
 | 
						|
        {0x51, 0x06}, {0x52, 0x06}, {0x53, 0x0b}, {0x67, 0x00},
 | 
						|
        {0x6f, 0x30}, {0x70, 0x06}, {0x60, 0x17}, {0x61, 0x9f},
 | 
						|
        {0x65, 0x01}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x16}, {0x3a, 0x03}, {0x3b, 0x1f},
 | 
						|
        {0x3c, 0x07}, {0x41, 0x1c}, {0x42, 0x99}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf1}, {0x47, 0x02},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x09},
 | 
						|
        {0x4c, 0x13}, {0x4d, 0x14}, {0x4e, 0x09}, {0x50, 0x09},
 | 
						|
        {0x51, 0x14}, {0x52, 0x13}, {0x53, 0x01}, {0x67, 0x00},
 | 
						|
        {0x6f, 0xff}, {0x70, 0x7f}, {0x60, 0x04}, {0x61, 0x8f},
 | 
						|
        {0x65, 0x01}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x16}, {0x3a, 0x03}, {0x3b, 0x1f},
 | 
						|
        {0x3c, 0x07}, {0x41, 0x1c}, {0x42, 0x99}, {0x43, 0x01},
 | 
						|
        {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf1}, {0x47, 0x02},
 | 
						|
        {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x09},
 | 
						|
        {0x4c, 0x13}, {0x4d, 0x14}, {0x4e, 0x09}, {0x50, 0x09},
 | 
						|
        {0x51, 0x14}, {0x52, 0x13}, {0x53, 0x01}, {0x67, 0x00},
 | 
						|
        {0x6f, 0xff}, {0x70, 0x7f}, {0x60, 0x04}, {0x61, 0x8f},
 | 
						|
        {0x65, 0x01}
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
static RegDef S3799CCDParams[4][_NUM_OF_CCDREGS_S1224] = {
 | 
						|
    {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x2a}, {0x3a, 0x0a}, {0x3b, 0x37},
 | 
						|
        {0x3c, 0x16}, {0x41, 0x2c}, {0x42, 0x8f}, {0x43, 0x01},
 | 
						|
	    {0x44, 0x27}, {0x45, 0x27}, {0x46, 0x01}, {0x47, 0x01},
 | 
						|
	    {0x48, 0x27}, {0x49, 0x27}, {0x4a, 0x09}, {0x4b, 0x0b},
 | 
						|
	    {0x4c, 0x06}, {0x4d, 0x06}, {0x4e, 0x0b}, {0x50, 0x13},
 | 
						|
	    {0x51, 0x06}, {0x52, 0x06}, {0x53, 0x0b}, {0x67, 0x00},
 | 
						|
	    {0x6f, 0x20}, {0x70, 0x06}, {0x60, 0x07}, {0x61, 0x9f},
 | 
						|
	    {0x65, 0x01}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x3d}, {0x3a, 0x06}, {0x3b, 0x46},
 | 
						|
	    {0x3c, 0x06}, {0x41, 0x3d}, {0x42, 0x92}, {0x43, 0x01},
 | 
						|
	    {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf2}, {0x47, 0x01},
 | 
						|
	    {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x1b},
 | 
						|
	    {0x4c, 0x06}, {0x4d, 0x06}, {0x4e, 0x0b}, {0x50, 0x23},
 | 
						|
	    {0x51, 0x06}, {0x52, 0x06}, {0x53, 0x0b}, {0x67, 0x00},
 | 
						|
	    {0x6f, 0x30}, {0x70, 0x06}, {0x60, 0x17}, {0x61, 0x9f},
 | 
						|
	    {0x65, 0x01}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x02}, {0x39, 0x16}, {0x3a, 0x03}, {0x3b, 0x1f},
 | 
						|
	    {0x3c, 0x07}, {0x41, 0x1c}, {0x42, 0x99}, {0x43, 0x01},
 | 
						|
	    {0x44, 0x13}, {0x45, 0x13}, {0x46, 0xf1}, {0x47, 0x01},
 | 
						|
	    {0x48, 0x13}, {0x49, 0x13}, {0x4a, 0xfa}, {0x4b, 0x09},
 | 
						|
	    {0x4c, 0x13}, {0x4d, 0x14}, {0x4e, 0x09}, {0x50, 0x09},
 | 
						|
	    {0x51, 0x14}, {0x52, 0x13}, {0x53, 0x01}, {0x67, 0x00},
 | 
						|
	    {0x6f, 0xff}, {0x70, 0x7f}, {0x60, 0x04}, {0x61, 0x8f},
 | 
						|
	    {0x65, 0x01}
 | 
						|
    }, {
 | 
						|
        {0x2c, 0x00}, {0x39, 0x16}, {0x3a, 0x03}, {0x3b, 0x1f},
 | 
						|
	    {0x3c, 0x07}, {0x41, 0x1c}, {0x42, 0x99}, {0x43, 0x03},
 | 
						|
	    {0x44, 0x0a}, {0x45, 0x08}, {0x46, 0xfa}, {0x47, 0x03},
 | 
						|
	    {0x48, 0x0a}, {0x49, 0x08}, {0x4a, 0xf2}, {0x4b, 0x02},
 | 
						|
	    {0x4c, 0x03}, {0x4d, 0x02}, {0x4e, 0x0e}, {0x50, 0x00},
 | 
						|
	    {0x51, 0x09}, {0x52, 0x03}, {0x53, 0x03}, {0x67, 0x00},
 | 
						|
	    {0x6f, 0xff}, {0x70, 0x7f}, {0x60, 0x04}, {0x61, 0x8f},
 | 
						|
	    {0x65, 0x01}
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
static RegDef WolfsonDAC8143[_NUM_OF_DACREGS_W8143] = {
 | 
						|
    {0x01, 0x01}, {0x02, 0x04}, {0x03, 0x42}, {0x05, 0x10}, {0x20, 0xd0},
 | 
						|
    {0x21, 0xd0}, {0x22, 0xd0}, {0x24, 0x00}, {0x25, 0x00},	{0x26, 0x00}
 | 
						|
};
 | 
						|
 | 
						|
static RegDef SamsungDAC8531[_NUM_OF_DACREGS_S8531] = {
 | 
						|
    {0x00, 0x51}, {0x02, 0x01}, {0x01, 0x80},
 | 
						|
    {0x00, 0x55}, {0x02, 0x01}, {0x01, 0x80},
 | 
						|
    {0x00, 0x59}, {0x02, 0x01}, {0x01, 0x80}
 | 
						|
};
 | 
						|
 | 
						|
static RegDef SamsungDAC1224[_NUM_OF_DACREGS_S1224] ={
 | 
						|
    {0x00, 0x00}, {0x01, 0x80}, {0x02, 0x80},
 | 
						|
    {0x03, 0x80}, {0x04, 0x06}, {0x05, 0x06}, {0x06, 0x06}
 | 
						|
};
 | 
						|
 | 
						|
static ShadingVarDef ShadingVar3797[3] = {
 | 
						|
    {
 | 
						|
        {{99, 100, 94}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x20, 0x20, 0x20}}, {{0x04, 0x00, 0x00}}, {{0xcc, 0xcc, 0xcc}}, 0
 | 
						|
    }, {
 | 
						|
        {{100, 90, 100}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x20, 0x20, 0x20}}, {{0x10, 0x10, 0x10}}, {{0xcc, 0xcc, 0xcc}}, 0
 | 
						|
    }, {
 | 
						|
        {{90, 90, 90}}, {{0x30, 0x30, 0x30}}, {{0x20, 0x20, 0x20}},
 | 
						|
        {{0x10, 0x10, 0x10}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
static ShadingVarDef ShadingVar3799[3] = {
 | 
						|
    {
 | 
						|
        {{100, 97, 92}}, {{0x90, 0xe0, 0x80}},
 | 
						|
        {{0x70, 0xc0, 0x60}}, {{0x90, 0x34, 0x3c}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }, {
 | 
						|
        {{75, 75, 75}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x10, 0x10, 0x10}}, {{0x20, 0x20, 0x20}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }, {
 | 
						|
        {{80, 75, 64}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x20, 0x20, 0x20}}, {{0x10, 0x10, 0x10}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
/* Genius ColorPage Vivid III */
 | 
						|
static ShadingVarDef ShadingVar548[3] = {
 | 
						|
    {
 | 
						|
        {{100, 97, 92}}, {{0x90, 0xe0, 0x80}},
 | 
						|
        {{0x70, 0xc0, 0x60}}, {{0x90, 0x34, 0x3c}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }, {
 | 
						|
        {{75, 75, 75}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x10, 0x10, 0x10}}, {{0x20, 0x20, 0x20}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }, {
 | 
						|
        {{80, 75, 64}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x20, 0x20, 0x20}}, {{0x10, 0x10, 0x10}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
static ShadingVarDef ShadingVar3777[3] = {
 | 
						|
    {
 | 
						|
        {{100, 100, 100}}, {{0x90, 0xe0, 0x80}},
 | 
						|
        {{0x70, 0xc0, 0x60}}, {{0x90, 0x34, 0x3c}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }, {
 | 
						|
        {{75, 75, 75}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x10, 0x10, 0x10}}, {{0x20, 0x20, 0x20}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }, {
 | 
						|
        {{80, 75, 64}}, {{0x30, 0x30, 0x30}},
 | 
						|
        {{0x20, 0x20, 0x20}}, {{0x10, 0x10, 0x10}}, {{0x80, 0x80, 0x80}}, 0
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
/*************************** local functions *********************************/
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitWolfson3797( U12_Device *dev )
 | 
						|
{
 | 
						|
	if( dev->shade.intermediate & _ScanMode_Mono )
 | 
						|
		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0xcc;
 | 
						|
	else
 | 
						|
		if( dev->shade.intermediate & _ScanMode_AverageOut)
 | 
						|
			dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x68;
 | 
						|
		else
 | 
						|
			dev->shade.pCcdDac->DarkDAC.Colors.Green = 0xa0;
 | 
						|
 | 
						|
	if((dev->shade.intermediate & _ScanMode_AverageOut) ||
 | 
						|
		                       (dev->DataInf.dwScanFlag & _SCANDEF_Negative)) {
 | 
						|
		WolfsonDAC8143[3].val = 0x12;
 | 
						|
	} else {
 | 
						|
		WolfsonDAC8143[3].val = 0x10;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitSamsung3797( U12_Device *dev )
 | 
						|
{
 | 
						|
	if(!(dev->DataInf.dwScanFlag & _SCANDEF_TPA)) {
 | 
						|
 | 
						|
		if (!(dev->shade.intermediate & _ScanMode_AverageOut)) {
 | 
						|
 | 
						|
			if( dev->PCBID == _OPTICWORKS2000 ) {
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Red = 102;
 | 
						|
	        	dev->shade.pCcdDac->GainResize.Colors.Green = 102;
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Blue = 97;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x40;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x40;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x40;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x48;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x40;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x40;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x38;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x48;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x38;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x40;
 | 
						|
	        } else {
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Red = 99;
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Green = 101;
 | 
						|
		        dev->shade.pCcdDac->GainResize.Colors.Blue = 94;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x40;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x40;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x40;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x20;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x20;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x04;
 | 
						|
		        dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x00;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x00;
 | 
						|
	        }
 | 
						|
    	} else {
 | 
						|
            if( dev->PCBID == _OPTICWORKS2000 ) {
 | 
						|
    	    	dev->shade.pCcdDac->GainResize.Colors.Red = 100;
 | 
						|
    	    	dev->shade.pCcdDac->GainResize.Colors.Green = 100;
 | 
						|
	    	    dev->shade.pCcdDac->GainResize.Colors.Blue = 96;
 | 
						|
    	    	dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x30;
 | 
						|
	        	dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x30;
 | 
						|
    	    	dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x48;
 | 
						|
    	    	dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x48;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x48;
 | 
						|
	        	dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x38;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x38;
 | 
						|
	        	dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x38;
 | 
						|
    		    dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x48;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x48;
 | 
						|
    	    	dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x48;
 | 
						|
	        } else {
 | 
						|
    	    	dev->shade.pCcdDac->GainResize.Colors.Red = 100;   /*  98 */
 | 
						|
    	    	dev->shade.pCcdDac->GainResize.Colors.Green = 103; /* 106 */
 | 
						|
	    	    dev->shade.pCcdDac->GainResize.Colors.Blue = 96;	  /*  96 */
 | 
						|
    	    	dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x20;
 | 
						|
	    	    dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x10;
 | 
						|
    		    dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x10;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x110;
 | 
						|
	        	dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x1f0;
 | 
						|
    		    dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x190;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x100;
 | 
						|
	        	dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x1e0;
 | 
						|
    		    dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x180;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x20;
 | 
						|
	        	dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x10;
 | 
						|
    		    dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x20;
 | 
						|
	        }
 | 
						|
       	}
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitWolfson3799( U12_Device *dev )
 | 
						|
{
 | 
						|
    if(!(dev->DataInf.dwScanFlag & _SCANDEF_Negative)) {
 | 
						|
 | 
						|
        if (!(dev->shade.intermediate & _ScanMode_AverageOut)) {
 | 
						|
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Red = 103;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Green = 102;
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Blue = 99;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Red = 0xc8;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Green = 0xc8;
 | 
						|
    	    dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0xc8;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x48;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x30;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x40;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x28;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x28;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x48;
 | 
						|
    	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x18;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x2c;
 | 
						|
    	} else {
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Red = 100;
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Green = 98;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Blue = 95;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Red = 0xd0;
 | 
						|
    	    dev->shade.pCcdDac->DarkDAC.Colors.Green = 0xd0;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0xd0;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x30;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x30;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x28;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x28;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x28;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x0;
 | 
						|
    	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x0;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x0;
 | 
						|
    	}
 | 
						|
    } else {
 | 
						|
    	dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x80;
 | 
						|
	    dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x80;
 | 
						|
    	dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x80;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x28;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x28;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x28;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x20;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x20;
 | 
						|
	    dev->shade.pCcdDac->DarkOffSub.Colors.Red = -0x38;
 | 
						|
    	dev->shade.pCcdDac->DarkOffSub.Colors.Green = -0x108;
 | 
						|
	    dev->shade.pCcdDac->DarkOffSub.Colors.Blue = -0x1c8;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitWolfson548( U12_Device *dev )
 | 
						|
{
 | 
						|
    if (!(dev->shade.intermediate & _ScanMode_AverageOut)) {
 | 
						|
 | 
						|
 	    dev->shade.pCcdDac->GainResize.Colors.Red   = 103;
 | 
						|
        dev->shade.pCcdDac->GainResize.Colors.Green = 102;
 | 
						|
   	    dev->shade.pCcdDac->GainResize.Colors.Blue  = 99;
 | 
						|
        dev->shade.pCcdDac->DarkDAC.Colors.Red      = 0xc8;
 | 
						|
        dev->shade.pCcdDac->DarkDAC.Colors.Green    = 0xc8;
 | 
						|
   	    dev->shade.pCcdDac->DarkDAC.Colors.Blue     = 0xc8;
 | 
						|
        dev->shade.pCcdDac->DarkCmpHi.Colors.Red    = 0x48;
 | 
						|
        dev->shade.pCcdDac->DarkCmpHi.Colors.Green  = 0x30;
 | 
						|
   	    dev->shade.pCcdDac->DarkCmpHi.Colors.Blue   = 0x30;
 | 
						|
        dev->shade.pCcdDac->DarkCmpLo.Colors.Red    = 0x40;
 | 
						|
        dev->shade.pCcdDac->DarkCmpLo.Colors.Green  = 0x28;
 | 
						|
   	    dev->shade.pCcdDac->DarkCmpLo.Colors.Blue   = 0x28;
 | 
						|
        dev->shade.pCcdDac->DarkOffSub.Colors.Red   = 0x48;
 | 
						|
   	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x18;
 | 
						|
        dev->shade.pCcdDac->DarkOffSub.Colors.Blue  = 0x2c;
 | 
						|
 | 
						|
   	} else {
 | 
						|
        dev->shade.pCcdDac->GainResize.Colors.Red   = 100;
 | 
						|
   	    dev->shade.pCcdDac->GainResize.Colors.Green = 98;
 | 
						|
        dev->shade.pCcdDac->GainResize.Colors.Blue  = 95;
 | 
						|
        dev->shade.pCcdDac->DarkDAC.Colors.Red      = 0xd0;
 | 
						|
   	    dev->shade.pCcdDac->DarkDAC.Colors.Green    = 0xd0;
 | 
						|
        dev->shade.pCcdDac->DarkDAC.Colors.Blue     = 0xd0;
 | 
						|
        dev->shade.pCcdDac->DarkCmpHi.Colors.Red    = 0x30;
 | 
						|
   	    dev->shade.pCcdDac->DarkCmpHi.Colors.Green  = 0x30;
 | 
						|
        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue   = 0x30;
 | 
						|
   	    dev->shade.pCcdDac->DarkCmpLo.Colors.Red    = 0x28;
 | 
						|
        dev->shade.pCcdDac->DarkCmpLo.Colors.Green  = 0x28;
 | 
						|
   	    dev->shade.pCcdDac->DarkCmpLo.Colors.Blue   = 0x28;
 | 
						|
        dev->shade.pCcdDac->DarkOffSub.Colors.Red   = 0x0;
 | 
						|
   	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x0;
 | 
						|
        dev->shade.pCcdDac->DarkOffSub.Colors.Blue  = 0x0;
 | 
						|
   	}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitSamsung3777( U12_Device *dev )
 | 
						|
{
 | 
						|
    if(!(dev->DataInf.dwScanFlag & _SCANDEF_Negative)) {
 | 
						|
 | 
						|
        if (!(dev->shade.intermediate & _ScanMode_AverageOut)) {
 | 
						|
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Red = 109;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Green = 108;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Blue = 105;
 | 
						|
    	    dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x4a;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x4a;
 | 
						|
            dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x4a;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x3c;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x38;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x38;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x28;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x2c;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x28;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x30;
 | 
						|
    	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x30;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x3C;
 | 
						|
    	} else {
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Red = 108;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Green = 107;
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Blue = 104;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x50;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x50;
 | 
						|
    	    dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x50;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x40;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x40;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x40;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x30;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x30;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x30;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x20;
 | 
						|
    	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x20;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x20;
 | 
						|
	    }
 | 
						|
    } else {
 | 
						|
    	dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x80;
 | 
						|
	    dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x80;
 | 
						|
    	dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x80;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x28;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x28;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x28;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x20;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x20;
 | 
						|
    	dev->shade.pCcdDac->DarkOffSub.Colors.Red = -0x38;
 | 
						|
	    dev->shade.pCcdDac->DarkOffSub.Colors.Green = -0x108;
 | 
						|
    	dev->shade.pCcdDac->DarkOffSub.Colors.Blue = -0x1c8;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitSamsung3799( U12_Device *dev )
 | 
						|
{
 | 
						|
    if(!(dev->DataInf.dwScanFlag & _SCANDEF_TPA)) {
 | 
						|
 | 
						|
        if (!(dev->shade.intermediate & _ScanMode_AverageOut)) {
 | 
						|
 | 
						|
    	    if( dev->PCBID == _SCANNER2Button ) {
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Red = 109;
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Green = 109;
 | 
						|
		        dev->shade.pCcdDac->GainResize.Colors.Blue = 105;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x68;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x68;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x68;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x28;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x28;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x28;
 | 
						|
		        dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x24;    /* 0 */
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x20;  /* 0 */
 | 
						|
		        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x1c;   /* 0 */
 | 
						|
    	    } else {
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Red = 98;
 | 
						|
		        dev->shade.pCcdDac->GainResize.Colors.Green = 97;
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Blue = 92;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x90;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x90;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x90;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0xc0;	    /* 0x90 */
 | 
						|
		        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0xc0;   /* 0xe0 */
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0xc0;    /* 0x80 */
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0xb0;	    /* 0x70 */
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0xb0;   /* 0xc0 */
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0xb0;    /* 0x60 */
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x24;    /* 0x90 */
 | 
						|
		        dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x00;	/* 0x34 */
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x0c;	/* 0x3c */
 | 
						|
	        }
 | 
						|
    	} else {
 | 
						|
    	    if( dev->PCBID == _SCANNER2Button ) {
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Red = 107;
 | 
						|
		        dev->shade.pCcdDac->GainResize.Colors.Green = 106;
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Blue = 103;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x48;
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x48;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x48;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x30;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x30;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x30;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x28;
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x28;
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x28;
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x28;    /* 0 */
 | 
						|
		        dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x18;  /* 0 */
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x20;   /* 0 */
 | 
						|
	        } else {
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Red = 104;
 | 
						|
		        dev->shade.pCcdDac->GainResize.Colors.Green = 107;
 | 
						|
        		dev->shade.pCcdDac->GainResize.Colors.Blue = 99;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x30;	    /* 0x80 */
 | 
						|
        		dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x30;
 | 
						|
		        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x30;	    /* 0x0a0 */
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x150;    /* 0x170 */
 | 
						|
		        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x130;  /* 0x90  */
 | 
						|
        		dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x110;   /* 0x130 */
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x140;    /* 0x150 */
 | 
						|
        		dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x120;  /* 0x70  */
 | 
						|
		        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x100;   /* 0x120 */
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0xF0;    /* 0x90  */
 | 
						|
		        dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0xD4;  /* 0x50  */
 | 
						|
        		dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0xCC;   /* 0x60  */
 | 
						|
	        }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnCCDInitESIC3799( U12_Device *dev )
 | 
						|
{
 | 
						|
    if(!(dev->DataInf.dwScanFlag & _SCANDEF_Negative)) {
 | 
						|
 | 
						|
        if (!(dev->shade.intermediate & _ScanMode_AverageOut)) {
 | 
						|
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Red = 100;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Green = 99;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Blue = 94;
 | 
						|
    	    dev->shade.pCcdDac->DarkDAC.Colors.Red = 0xc8;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Green = 0xc8;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0xc8;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x58;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x38;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x48;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x48;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x28;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x38;
 | 
						|
    	    dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x58;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0x38;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0x48;
 | 
						|
    	} else {
 | 
						|
    	    dev->shade.pCcdDac->GainResize.Colors.Red = 100;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Green = 98;
 | 
						|
	        dev->shade.pCcdDac->GainResize.Colors.Blue = 93;
 | 
						|
    	    dev->shade.pCcdDac->DarkDAC.Colors.Red = 0xd0;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Green = 0xd0;
 | 
						|
	        dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0xd0;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x108;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0xf8;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0xc8;
 | 
						|
    	    dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x100;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0xf0;
 | 
						|
	        dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0xc0;
 | 
						|
    	    dev->shade.pCcdDac->DarkOffSub.Colors.Red = 0x108;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Green = 0xf8;
 | 
						|
	        dev->shade.pCcdDac->DarkOffSub.Colors.Blue = 0xc8;
 | 
						|
    	}
 | 
						|
    } else {
 | 
						|
    	dev->shade.pCcdDac->DarkDAC.Colors.Red = 0x80;
 | 
						|
	    dev->shade.pCcdDac->DarkDAC.Colors.Green = 0x80;
 | 
						|
    	dev->shade.pCcdDac->DarkDAC.Colors.Blue = 0x80;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpHi.Colors.Red = 0x28;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpHi.Colors.Green = 0x28;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpHi.Colors.Blue = 0x28;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpLo.Colors.Red = 0x20;
 | 
						|
	    dev->shade.pCcdDac->DarkCmpLo.Colors.Green = 0x20;
 | 
						|
    	dev->shade.pCcdDac->DarkCmpLo.Colors.Blue = 0x20;
 | 
						|
	    dev->shade.pCcdDac->DarkOffSub.Colors.Red = -0x38;
 | 
						|
    	dev->shade.pCcdDac->DarkOffSub.Colors.Green = -0x38;
 | 
						|
	    dev->shade.pCcdDac->DarkOffSub.Colors.Blue = -0x38;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void
 | 
						|
fnDarkOffsetWolfson3797( U12_Device *dev, ShadingVarDef *sTbl, u_long dwCh )
 | 
						|
{
 | 
						|
	if(( dev->shade.DarkOffset.wColors[dwCh] -=
 | 
						|
                sTbl->DarkOffSub.wColors[dwCh]) > 0xfff ) {
 | 
						|
		dev->shade.DarkOffset.wColors[dwCh] = 0;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void
 | 
						|
fnDarkOffsetSamsung3777( U12_Device *dev, ShadingVarDef *sTbl, u_long dwCh )
 | 
						|
{
 | 
						|
	dev->shade.DarkOffset.wColors[dwCh] += sTbl->DarkOffSub.wColors [dwCh];
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void
 | 
						|
fnDarkOffsetSamsung3797( U12_Device *dev, ShadingVarDef *sTbl, u_long dwCh )
 | 
						|
{
 | 
						|
	if( dev->shade.DarkOffset.wColors[dwCh] > sTbl->DarkOffSub.wColors[dwCh] )
 | 
						|
		dev->shade.DarkOffset.wColors[dwCh] -= sTbl->DarkOffSub.wColors[dwCh];
 | 
						|
	else
 | 
						|
		dev->shade.DarkOffset.wColors[dwCh] = 0;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void
 | 
						|
fnDarkOffsetSamsung3799( U12_Device *dev, ShadingVarDef *sTbl, u_long dwCh )
 | 
						|
{
 | 
						|
	if( dev->shade.DarkOffset.wColors[dwCh] > sTbl->DarkOffSub.wColors[dwCh])
 | 
						|
		dev->shade.DarkOffset.wColors[dwCh] -= sTbl->DarkOffSub.wColors[dwCh];
 | 
						|
	else
 | 
						|
		dev->shade.DarkOffset.wColors[dwCh] = 0;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnDACDarkWolfson( U12_Device *dev, ShadingVarDef *sTbl,
 | 
						|
                              u_long dwCh, u_short wDarkest )
 | 
						|
{
 | 
						|
	u_short w = dev->shade.DarkDAC.bColors[dwCh];
 | 
						|
 | 
						|
	if( wDarkest > sTbl->DarkCmpHi.wColors[dwCh] ) {
 | 
						|
 | 
						|
		wDarkest -= sTbl->DarkCmpHi.wColors[dwCh];
 | 
						|
		if( wDarkest > dev->shade.wDarkLevels)
 | 
						|
	        w += (u_short)wDarkest / dev->shade.wDarkLevels;
 | 
						|
		else
 | 
						|
			w++;
 | 
						|
 | 
						|
		if (w > 0xff)
 | 
						|
			w = 0xff;
 | 
						|
 | 
						|
		if(w != (u_short)dev->shade.DarkDAC.bColors[dwCh] ) {
 | 
						|
			dev->shade.DarkDAC.bColors[dwCh] = (SANE_Byte)w;
 | 
						|
			dev->shade.fStop                 = SANE_FALSE;
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		if((wDarkest < sTbl->DarkCmpLo.wColors[dwCh]) &&
 | 
						|
                                	        dev->shade.DarkDAC.bColors[dwCh]) {
 | 
						|
			if( wDarkest )
 | 
						|
				w = (u_short)dev->shade.DarkDAC.bColors[dwCh] - 2U;
 | 
						|
			else
 | 
						|
				w = (u_short)dev->shade.DarkDAC.bColors[dwCh] - dev->shade.wDarkLevels;
 | 
						|
 | 
						|
			if ((short) w < 0)
 | 
						|
				w = 0;
 | 
						|
 | 
						|
			if( w != (u_short)dev->shade.DarkDAC.bColors[dwCh] ) {
 | 
						|
				dev->shade.DarkDAC.bColors [dwCh] = (SANE_Byte)w;
 | 
						|
				dev->shade.fStop                  = SANE_FALSE;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 */
 | 
						|
static void fnDACDarkSamsung( U12_Device *dev, ShadingVarDef *sTbl,
 | 
						|
                              u_long dwCh, u_short wDarkest )
 | 
						|
{
 | 
						|
	u_short w;
 | 
						|
 | 
						|
	if( wDarkest > sTbl->DarkCmpHi.wColors[dwCh] ) {
 | 
						|
 | 
						|
		wDarkest -= sTbl->DarkCmpHi.wColors[dwCh];
 | 
						|
		if( wDarkest > dev->shade.wDarkLevels )
 | 
						|
			w = (u_short)dev->shade.DarkDAC.bColors[dwCh] -
 | 
						|
	                                        wDarkest / dev->shade.wDarkLevels;
 | 
						|
		else
 | 
						|
			w = (u_short)dev->shade.DarkDAC.bColors[dwCh] - 1U;
 | 
						|
 | 
						|
		if((short) w < 0)
 | 
						|
			w = 0;
 | 
						|
 | 
						|
		if(w != (u_short)dev->shade.DarkDAC.bColors[dwCh]) {
 | 
						|
			dev->shade.DarkDAC.bColors [dwCh] = (SANE_Byte)w;
 | 
						|
	        dev->shade.fStop                  = SANE_FALSE;
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		if((wDarkest < sTbl->DarkCmpLo.wColors[dwCh]) &&
 | 
						|
		                                    dev->shade.DarkDAC.bColors[dwCh]) {
 | 
						|
			if( wDarkest )
 | 
						|
				w = (u_short)dev->shade.DarkDAC.bColors[dwCh] + 2U;
 | 
						|
			else
 | 
						|
				w = dev->shade.wDarkLevels + (u_short)dev->shade.DarkDAC.bColors[dwCh];
 | 
						|
 | 
						|
			if (w > 0xff)
 | 
						|
				w = 0xff;
 | 
						|
 | 
						|
			if(w != (u_short)dev->shade.DarkDAC.bColors[dwCh]) {
 | 
						|
				dev->shade.DarkDAC.bColors[dwCh] = (SANE_Byte)w;
 | 
						|
				dev->shade.fStop                 = SANE_FALSE;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/************************ exported functions *********************************/
 | 
						|
 | 
						|
/** according to detected CCD and DAC, we set their correct init values
 | 
						|
 *  and functions
 | 
						|
 */
 | 
						|
static void u12ccd_InitCCDandDAC( U12_Device *dev, SANE_Bool shading )
 | 
						|
{
 | 
						|
	u_short        w;
 | 
						|
	ShadingVarDef *pDAC_CCD;
 | 
						|
 | 
						|
	DBG( _DBG_INFO, "CCD & DAC init\n" );
 | 
						|
 | 
						|
	/* some presets */
 | 
						|
	dev->f0_8_16 = SANE_FALSE;
 | 
						|
 | 
						|
	switch( dev->DACType ) {
 | 
						|
 | 
						|
	case _DA_WOLFSON8143:
 | 
						|
 | 
						|
		DBG( _DBG_INFO, "* DAC: WOLFSON 8143\n" );
 | 
						|
		switch( dev->CCDID ) {
 | 
						|
 | 
						|
		case _CCD_3797:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3797\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3797;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitWolfson3797;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetWolfson3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkWolfson;
 | 
						|
			dev->CCDRegs      = (RegDef*)W3797CCDParams;
 | 
						|
			break;
 | 
						|
 | 
						|
		case _CCD_548:
 | 
						|
			DBG( _DBG_INFO, "* CCD-548\n" );
 | 
						|
			pDAC_CCD          = ShadingVar548;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitWolfson548;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetWolfson3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkWolfson;
 | 
						|
			dev->CCDRegs      = (RegDef*)W548CCDParams;
 | 
						|
			break;
 | 
						|
 | 
						|
 | 
						|
		default:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3799\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3799;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitWolfson3799;
 | 
						|
/* CHECK: org was to  fnDarkOffsetWolfson3797 */
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetWolfson3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkWolfson;
 | 
						|
			dev->CCDRegs      = (RegDef*)W3799CCDParams;
 | 
						|
		}
 | 
						|
 | 
						|
		dev->numCCDRegs         = _NUM_OF_CCDREGS_W8143;
 | 
						|
		dev->numDACRegs         = _NUM_OF_DACREGS_W8143;
 | 
						|
		dev->DACRegs            = WolfsonDAC8143;
 | 
						|
		dev->RegDACOffset.Red   = 0x20;
 | 
						|
		dev->RegDACOffset.Green = 0x21;
 | 
						|
		dev->RegDACOffset.Blue  = 0x22;
 | 
						|
		dev->RegDACGain.Red     = 0x28;
 | 
						|
		dev->RegDACGain.Green   = 0x29;
 | 
						|
		dev->RegDACGain.Blue    = 0x2a;
 | 
						|
 | 
						|
		if( dev->shade.intermediate & _ScanMode_AverageOut ) {
 | 
						|
			dev->shade.bUniGain    = 1;
 | 
						|
			dev->shade.bGainDouble = 1;
 | 
						|
		} else {
 | 
						|
			dev->shade.bUniGain    = 2;
 | 
						|
			dev->shade.bGainDouble = 4;
 | 
						|
		}
 | 
						|
		dev->shade.bMinGain    = 1;
 | 
						|
		dev->shade.bMaxGain    = 0x1f;
 | 
						|
		dev->shade.wDarkLevels = 10;
 | 
						|
 | 
						|
		if( dev->shade.intermediate == _ScanMode_Color )
 | 
						|
			WolfsonDAC8143[2].val = 0x52;
 | 
						|
		else
 | 
						|
			WolfsonDAC8143[2].val = 0x42;
 | 
						|
 | 
						|
		if (dev->shade.intermediate == _ScanMode_Mono )
 | 
						|
			WolfsonDAC8143[0].val = 7;
 | 
						|
		else
 | 
						|
			WolfsonDAC8143[0].val = 3;
 | 
						|
		break;
 | 
						|
 | 
						|
	case _DA_SAMSUNG1224:
 | 
						|
		DBG( _DBG_INFO, "* DAC: Samsung 1224\n" );
 | 
						|
 | 
						|
		switch( dev->CCDID ) {
 | 
						|
 | 
						|
		case _CCD_3797:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3797\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3797;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitSamsung3797;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetSamsung3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkSamsung;
 | 
						|
			dev->CCDRegs      = (RegDef*)S3797CCDParams;
 | 
						|
			break;
 | 
						|
 | 
						|
		default:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3799\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3799;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitSamsung3799;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetSamsung3799;
 | 
						|
			dev->fnDACDark    = fnDACDarkSamsung;
 | 
						|
			dev->CCDRegs      = (RegDef*)S3799CCDParams;
 | 
						|
		}
 | 
						|
		dev->numCCDRegs         = _NUM_OF_CCDREGS_S1224;
 | 
						|
		dev->numDACRegs         = _NUM_OF_DACREGS_S1224;
 | 
						|
		dev->DACRegs            = SamsungDAC1224;
 | 
						|
		dev->RegDACOffset.Red   = 1;
 | 
						|
		dev->RegDACOffset.Green = 2;
 | 
						|
		dev->RegDACOffset.Blue  = 3;
 | 
						|
		dev->RegDACGain.Red     = 4;
 | 
						|
		dev->RegDACGain.Green   = 5;
 | 
						|
		dev->RegDACGain.Blue    = 6;
 | 
						|
		dev->shade.bGainDouble  = 6;
 | 
						|
		dev->shade.bUniGain     = 7;
 | 
						|
		dev->shade.bMinGain     = 0;
 | 
						|
		dev->shade.bMaxGain     = 0x1f;
 | 
						|
		dev->shade.wDarkLevels  = 10;
 | 
						|
 | 
						|
		if( dev->shade.intermediate & _ScanMode_Mono )
 | 
						|
			SamsungDAC1224[0].val = 0x57;
 | 
						|
		else
 | 
						|
			SamsungDAC1224[0].val = 0x51;
 | 
						|
		break;
 | 
						|
 | 
						|
	case _DA_ESIC:
 | 
						|
		DBG( _DBG_INFO, "* DAC: ESIC\n" );
 | 
						|
 | 
						|
		switch( dev->CCDID ) {
 | 
						|
 | 
						|
		case _CCD_3797:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3797\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3797;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitWolfson3797;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetWolfson3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkWolfson;
 | 
						|
			dev->CCDRegs      = (RegDef*)W3797CCDParams;
 | 
						|
			break;
 | 
						|
 | 
						|
		default:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3799\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3799;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitESIC3799;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetWolfson3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkWolfson;
 | 
						|
			dev->CCDRegs      = (RegDef*)W3799CCDParams;
 | 
						|
		}
 | 
						|
 | 
						|
		dev->numCCDRegs         = _NUM_OF_CCDREGS_W8143;
 | 
						|
		dev->numDACRegs         = _NUM_OF_DACREGS_W8143;
 | 
						|
		dev->DACRegs            = WolfsonDAC8143;
 | 
						|
		dev->RegDACOffset.Red   = 0x20;
 | 
						|
		dev->RegDACOffset.Green = 0x21;
 | 
						|
		dev->RegDACOffset.Blue  = 0x22;
 | 
						|
		dev->RegDACGain.Red     = 0x28;
 | 
						|
		dev->RegDACGain.Green   = 0x29;
 | 
						|
		dev->RegDACGain.Blue    = 0x2a;
 | 
						|
 | 
						|
		if( dev->shade.intermediate & _ScanMode_AverageOut ) {
 | 
						|
			dev->shade.bUniGain    = 1;
 | 
						|
			dev->shade.bGainDouble = 1;
 | 
						|
		} else {
 | 
						|
			dev->shade.bUniGain    = 2;
 | 
						|
			dev->shade.bGainDouble = 4;
 | 
						|
		}
 | 
						|
		dev->shade.bMinGain    = 1;
 | 
						|
		dev->shade.bMaxGain    = 0x1f;
 | 
						|
		dev->shade.wDarkLevels = 10;
 | 
						|
 | 
						|
		if( dev->shade.intermediate == _ScanMode_Color )
 | 
						|
			WolfsonDAC8143[2].val = 0x52;
 | 
						|
		else
 | 
						|
			WolfsonDAC8143[2].val = 0x42;
 | 
						|
 | 
						|
		if(dev->shade.intermediate == _ScanMode_Mono )
 | 
						|
			WolfsonDAC8143[0].val = 7;
 | 
						|
		else
 | 
						|
			WolfsonDAC8143[0].val = 3;
 | 
						|
		break;
 | 
						|
 | 
						|
	default:
 | 
						|
 | 
						|
		DBG( _DBG_INFO, "* DAC: SAMSUNG 8531\n" );
 | 
						|
		switch( dev->CCDID ) {
 | 
						|
 | 
						|
		case _CCD_3797:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3797\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3797;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitSamsung3797;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetSamsung3797;
 | 
						|
			dev->fnDACDark    = fnDACDarkSamsung;
 | 
						|
			dev->CCDRegs      = (RegDef*)S3797CCDParams;
 | 
						|
			break;
 | 
						|
 | 
						|
		case _CCD_3777:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3777\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3777;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitSamsung3777;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetSamsung3777;
 | 
						|
			dev->fnDACDark    = fnDACDarkSamsung;
 | 
						|
			dev->CCDRegs      = (RegDef*)S3797CCDParams;
 | 
						|
			dev->f0_8_16      = SANE_TRUE;
 | 
						|
			break;
 | 
						|
 | 
						|
		default:
 | 
						|
			DBG( _DBG_INFO, "* CCD-3799\n" );
 | 
						|
			pDAC_CCD          = ShadingVar3799;
 | 
						|
			u12ccd_InitFunc   = fnCCDInitSamsung3799;
 | 
						|
			dev->fnDarkOffset = fnDarkOffsetSamsung3799;
 | 
						|
			dev->fnDACDark    = fnDACDarkSamsung;
 | 
						|
			dev->CCDRegs      = (RegDef*)S3799CCDParams;
 | 
						|
		}
 | 
						|
 | 
						|
		dev->numCCDRegs         = _NUM_OF_CCDREGS_S8531;
 | 
						|
		dev->numDACRegs         = _NUM_OF_DACREGS_S8531;
 | 
						|
		dev->DACRegs            = SamsungDAC8531;
 | 
						|
		dev->RegDACOffset.Red   = 1;
 | 
						|
		dev->RegDACOffset.Green = 1;
 | 
						|
		dev->RegDACOffset.Blue  = 1;
 | 
						|
		dev->RegDACGain.Red     = 2;
 | 
						|
		dev->RegDACGain.Green   = 2;
 | 
						|
		dev->RegDACGain.Blue    = 2;
 | 
						|
		dev->shade.bGainDouble  = 6;
 | 
						|
		dev->shade.bMinGain     = 1;
 | 
						|
		dev->shade.bMaxGain     = 0x1f;
 | 
						|
		if( dev->DataInf.dwScanFlag & _SCANDEF_TPA )
 | 
						|
			dev->shade.bUniGain = 2;
 | 
						|
		else
 | 
						|
			dev->shade.bUniGain = 7;
 | 
						|
 | 
						|
		dev->shade.wDarkLevels = 10;
 | 
						|
 | 
						|
		if( dev->shade.intermediate & _ScanMode_Mono ) {
 | 
						|
			SamsungDAC8531[0].val = 0x57;
 | 
						|
			SamsungDAC8531[3].val = 0x57;
 | 
						|
			SamsungDAC8531[6].val = 0x57;
 | 
						|
		} else {
 | 
						|
			SamsungDAC8531[0].val = 0x51;
 | 
						|
			SamsungDAC8531[3].val = 0x55;
 | 
						|
			SamsungDAC8531[6].val = 0x59;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if( shading ) {
 | 
						|
 | 
						|
		if( !(dev->DataInf.dwScanFlag & _SCANDEF_TPA))
 | 
						|
			dev->shade.pCcdDac = &pDAC_CCD[_REFLECTION];
 | 
						|
		else {
 | 
						|
			if( dev->DataInf.dwScanFlag & _SCANDEF_Transparency )
 | 
						|
				dev->shade.pCcdDac = &pDAC_CCD[_TRANSPARENCY];
 | 
						|
			else
 | 
						|
				dev->shade.pCcdDac = &pDAC_CCD[_NEGATIVE];
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		dev->shade.pCcdDac = &pDAC_CCD[_REFLECTION];
 | 
						|
	}
 | 
						|
 | 
						|
	/* as we now have the correct init function, call it */
 | 
						|
	u12ccd_InitFunc( dev );
 | 
						|
 | 
						|
	DBG( _DBG_INFO, "* Programming DAC (%u regs)\n", dev->numDACRegs );
 | 
						|
 | 
						|
	for( w = 0; w < dev->numDACRegs; w++ ) {
 | 
						|
 | 
						|
		DBG( _DBG_INFO, "* [0x%02x] = 0x%02x\n", dev->DACRegs[w].reg,
 | 
						|
		                                         dev->DACRegs[w].val );
 | 
						|
#if 0
 | 
						|
		u12io_DataRegisterToDAC( dev, dev->DACRegs[w].reg,
 | 
						|
		                              dev->DACRegs[w].val );
 | 
						|
#else
 | 
						|
		u12io_DataToRegister( dev, REG_ADCADDR, dev->DACRegs[w].reg );
 | 
						|
		u12io_DataToRegister( dev, REG_ADCDATA, dev->DACRegs[w].val );
 | 
						|
		u12io_DataToRegister( dev, REG_ADCSERIALOUT, dev->DACRegs[w].val );
 | 
						|
#endif
 | 
						|
	}
 | 
						|
	DBG( _DBG_INFO, "CCD & DAC init done.\n" );
 | 
						|
}
 | 
						|
 | 
						|
/* END U12-CCD.C ............................................................*/
 |