This is a multi-part message in MIME format.
--------------010201010504090102010302
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello,

Stef, I think you are absolutely right with your diagnostic that the 
genesys driver (written for gl646) fails with gl841 because the 
registers of the gl841 are different to the regs from gl646.

So I've shortly compared the gl841 with the gl646. The result is in the 
attached file.

As far as I am concerned, I think we mainly have to adapt the functions 
handling the scanner controler registers (e.g. genesys_init_registers). 
I think we can use the whole file genesys.c and the register/memory 
write/read functions for a gl841 driver, but I don't have the overview 
to decide this.

As I don't know the best way to support the gl841 controller without the 
development of parts, that are equal to gl646, I'd be glad to get some 
suggestions on this subject.  



Thanks for your suggestions

    Philipp

--------------010201010504090102010302
Content-Type: text/plain;
 name="comparison_GL841_GL646.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="comparison_GL841_GL646.txt"

This is a comparison of between the scanner controllers GL841 and GL646.
The bases of this comparision are the datasheets of this controllers.
(http://www.genesyslogic.com/econtents/product02.asp?SN=47&minicidx=3&lastcidx=18
 and 
http://www.genesyslogic.com/econtents/product02.asp?SN=48&minicidx=3&lastcidx=18)


Attention: This comparison isn't complete at all !  

analogue frontend:

GL646 has a built-in 16-bit AFE. GL841 needs an external AFE. In lide50, it
is reported to be WM8199CDS (see 
http://www.wolfsonmicro.com/products/digital_imaging/WM8199/)

PC interface:

GL646 has a built-in USB 1.1 interface. Optional there is an extern USB 2.0 or
IEEE 1394 interface controller.
The only interface in the GL841 is the built-in USB 2.0 controller.

registers:

view of GL 841:

0x01    Bit 4:          nothing         instead of      FASTMOD
        Bit 3:          M16DRAM         instead of      COMPENB
0x02    Bit 2:          HOMENEG 
        Bit 1:          LONGCURV        instead of      STEPSEL[1:0] 
0x03    Bit 7:          LAMPDOG         instead of      TG3
        Bit 4-0:        LAMPTIM[3:0]    instead of      LAMPDOG, LAMPTIM[2:0]
0x04    Bit 5-4:        AFEMOD[1:0]     instead of      ADTYPE[1:0]
0x05    Bit 5-4:        MTLLAMP[1:0]    instead of      GMMITYPE[1:0]
        Bit 2:          nothing         instead of      LEDADD
        Bit 1-0:        MTLBASE[1:0]    instead of      BASESEL[1:0]
0x06    Bit 7-5:        SCANMOD[2:0]    instead of      nothing
0x07    Bit 3:          SRAMSEL         instead of      nothing
        Bit 2:          FASTDMA         instead of      nothing
0x08    Bit 6:          DECFLAG         instead of      nothing
        Bit 5:          GMMFFR          instead of      nothing
        Bit 4:          GMMFFG
        Bit 3:          GMMFFB
        Bit 2:          GMMZR
        Bit 1:          GMMZG
        Bit 0:          GMMZB           instead of      RSH[4:0]
0x09    Bit 7-6:        MCNTSET[1:0]    instead of      nothing
        Bit 5-4:        CLKSET[1:0]
        Bit 3:          BACKSCAN        
        Bit 2:          ENHANCE
        Bit 1:          SHORTTG
        Bit 0:          NWAIT           instead of      RSL[4:0]
0x0A    Bit 0:          SRAMBUG         instead of      CPH[4:0] (Bit 4-0)
0x0B                    nothing         instead of      CPL[4:0] (Bit 4-0)
0x0C    equal (nothing)
0x0D    Bit 7:          CLRLNCNT        instead of      nothing
0x0E    equal (nothing)
0x0F    equal (nothing)
0x10    equal (nothing)
0x11    equal (nothing)
0x12    equal (nothing)
0x13    equal (nothing)
0x14    equal (nothing)
0x15    equal (nothing)
0x16    Bit 6:          TOSHIBA         instead of      SELINV
0x17    equal
0x18    equal
0x19    equal
0x1A    Bit 5:          MANUAL3
        Bit 4:          MANUAL1
        Bit 3:          CK4INV
        Bit 2:          CK3INV
        Bit 1:          LINECLP         instead of      CKH[4:0] (Bit 4-0)
0x1B                    nothing         instead of      CKL[4:0] (Bit 4-0)
0x1C    Bit 7:          CK3MTGL         instead of      CK3SEL
        Bit 6:          CK3MTGL         instead of      CK3INV
        Bit 5:          CK1MTGL
        Bit 4:          CKAREA
        Bit 3:          MTLWD
        Bit 2-0:        GGTIME[2:0]     instead of      TGSEL[5:0]      
0x1D    Bit 7:          CK4LOW          instead of      CKMANUAL
        Bit 6:          CK3LOW          instead of      TCDFAST
        Bit 5:          CK1LOW          instead of      DMYPIY
0x1E    equal
0x1F    equal
0x20    equal
0x21    equal
0x22    equal
0x23    equal
0x24    equal
0x25    Bit 3-0:        LINCNT[19:16]   instead of      LINCNT[17:16] (Bit 1-0)
0x26    equal
0x27    equal
0x28    Bit 7-0         "GMMWRDATA"     instead of      LAMPPWM[8] (Bit 0)
0x29    equal
0x2A/B                  RAMADDR[15:0]   instead of      RAMA[14:0]
        (This registers have different names, but I think, the meaning is the
        same exept for missing Bit 15 in gl646)
0x2C    equal
0x2D    equal
0x2E    equal
0x2F    equal
0x30    equal
0x31    equal
0x32    equal
0x33    equal
0x34    equal
0x35                    MAXWD[19:16]    instead of      MAXWD[18:16]
0x36    equal
0x37    equal
0x38    equal
0x39    equal
0x3A                    FEWRDATA[8]     instead of      FEWDATA[9:8]
0x3B    equal
0x3C    equal
0x3D                    FEEDL[19:16]    instead of      FEEDL[17:16]
0x3E    equal
0x3F    equal
0x40    Bit 2:          HISPDFLG
        Bit 1:          MOTMFGL
        Bit 0:          DATAENB         instead of      empty register
0x41    Bit 0:          MOTORENB        instead of      MOTMFLG
0x42    equal
0x43    equal   
0x44    equal
0x45    equal
0x46    equal
0x47                    FERDATA[8]      instead of      FERDATA[9:8]
0x48                    FEDCNT[19:16]   instead of      FEDCNT[17:16]
0x49    equal
0x4A    equal
0x4B                    SCANCNT[19:16]  instead of      SCANCNT[17:16]
0x4C    equal
0x4D    equal
0x4E                    "GMMRDDATA"     instead of      LPERIODRD[15:8]
0x4F                    empty register  instead of      LPERIODRD[7:0]
0x50    equal
0x51    equal
0x52    equal
0x53    equal
0x54    equal
0x55    equal
0x56    equal
0x57    equal
0x58    equal
0x59    equal
0x5A    Bit 1:          ADCLKINV        instead of      WMSEL
0x5B                    GMMADDR[9:8]    instead of      CKFH[4:0]
0x5C                    GMMADDR[7:0]    instead of      CKFL[4:0]
0x5D                    HISPD[7:0]      instead of      CKSH[4:0]
0x5E    Bit 7-5:        DECSEL[2:0]     
        Bit 4-0:        STOPTIM[4:0]    instead of      CKSL[4:0]
0x5F                    FMOVDEC[7:0]    instead of      empty register

Z1MOD and Z2MOD are 21 bit big instead of 18 bit on the gl646. In the gl841, 
the Z1MOD[20:16] and ZIMOD[20:16] bits are next to the other Z1MOD and Z2MOD 
bits. 
In the gl646 Z1MOD[18:16] and Z2MOD[18:16] bits are behind the GPO bits in 
register
0x6C. 
So the differences after 0x5F are enourmous. gl841 has 0x87 registers wheras
gl646 has only 0x71 registers. Please read the datasheets to get the detailed
differences. 


--------------010201010504090102010302--


Reply via email to