From 54e8a24da6e6ea4f5b10963cae81ef4d24952389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Voltz?= Date: Tue, 12 Jan 2010 05:48:30 +0100 Subject: [PATCH] true gray scanning for CIS scanners - turn on LEDADD when doing a gray scan for CIS scanners --- backend/genesys_gl841.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/genesys_gl841.c b/backend/genesys_gl841.c index 383defcfe..cded98bf6 100644 --- a/backend/genesys_gl841.c +++ b/backend/genesys_gl841.c @@ -3,7 +3,7 @@ Copyright (C) 2003 Oliver Rauch Copyright (C) 2003, 2004 Henning Meier-Geinitz Copyright (C) 2004 Gerhard Jaeger - Copyright (C) 2004, 2005 Stephane Voltz + Copyright (C) 2004, 2009 Stephane Voltz Copyright (C) 2005 Philipp Schmid Copyright (C) 2005 - 2009 Pierre Willenbrock Copyright (C) 2006 Laurent Charpentier @@ -256,6 +256,7 @@ #define REG6C_GPIOH 0xff #define REG6C_GPIOL 0xff +#define REG87_LEDADD 0x04 /* we don't need a genesys_sanei_gl841.h yet, declarations aren't numerous enough */ /* writable registers *//*adapted to sanei_gl841 */ @@ -2426,9 +2427,10 @@ gl841_get_dpihw(Genesys_Device * dev) return 0; } -#define OPTICAL_FLAG_DISABLE_GAMMA 1 +#define OPTICAL_FLAG_DISABLE_GAMMA 1 #define OPTICAL_FLAG_DISABLE_SHADING 2 -#define OPTICAL_FLAG_DISABLE_LAMP 4 +#define OPTICAL_FLAG_DISABLE_LAMP 4 +#define OPTICAL_FLAG_ENABLE_LEDADD 8 static SANE_Status gl841_init_optical_regs_off(Genesys_Device * dev, @@ -2592,6 +2594,18 @@ gl841_init_optical_regs_scan(Genesys_Device * dev, } } else r->value |= 0x10; /* color pixel by pixel */ + + /* CIS scanners can do true gray by setting LEDADD */ + if (dev->model->is_cis == SANE_TRUE) + { + r = sanei_genesys_get_address (reg, 0x87); + r->value &= ~REG87_LEDADD; + /* we set up LEDADD only when asked */ + if (channels==1 && (flags & OPTICAL_FLAG_ENABLE_LEDADD)) + { + r->value |= REG87_LEDADD; + } + } /* enable gamma tables */ r = sanei_genesys_get_address (reg, 0x05); @@ -4675,8 +4689,7 @@ gl841_init_regs_for_scan (Genesys_Device * dev) depth, channels, dev->settings.color_filter, - 0 - ); + OPTICAL_FLAG_ENABLE_LEDADD); if (status != SANE_STATUS_GOOD) return status;