genesys: Sort the initial register map by register on GL843

merge-requests/94/head
Povilas Kanapickas 2019-07-06 21:02:25 +03:00
rodzic a6a09f5dc5
commit f84f1b9d42
1 zmienionych plików z 224 dodań i 166 usunięć

Wyświetl plik

@ -279,6 +279,16 @@ gl843_init_registers (Genesys_Device * dev)
SETREG (0x01, 0x00); SETREG (0x01, 0x00);
SETREG (0x02, 0x78); SETREG (0x02, 0x78);
SETREG (0x03, 0x1f); SETREG (0x03, 0x1f);
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x03, 0x1d);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x03, 0x1c);
}
SETREG (0x04, 0x10); SETREG (0x04, 0x10);
// fine tune upon device description // fine tune upon device description
@ -309,18 +319,49 @@ gl843_init_registers (Genesys_Device * dev)
// TODO: on 8600F the windows driver turns off GAIN4 which is recommended // TODO: on 8600F the windows driver turns off GAIN4 which is recommended
SETREG (0x06, 0xd8); /* SCANMOD=110, PWRBIT and GAIN4 */ SETREG (0x06, 0xd8); /* SCANMOD=110, PWRBIT and GAIN4 */
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x06, 0xd8); /* SCANMOD=110, PWRBIT and GAIN4 */
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
SETREG(0x06, 0xf0); /* SCANMOD=111, PWRBIT and no GAIN4 */
}
SETREG (0x08, 0x00); SETREG (0x08, 0x00);
SETREG (0x09, 0x00); SETREG (0x09, 0x00);
SETREG (0x0a, 0x00); SETREG (0x0a, 0x00);
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x0a, 0x18);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x0a, 0x10);
}
// This register controls clock and RAM settings and is further modified in // This register controls clock and RAM settings and is further modified in
// gl843_boot // gl843_boot
SETREG (0x0b, 0x6a); SETREG (0x0b, 0x6a);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
{ SETREG(0x0b, 0x69); // 16M only
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
SETREG(0x0b, 0x89); SETREG(0x0b, 0x89);
} }
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x0b, 0x69);
}
if (dev->model->model_id != MODEL_CANON_CANOSCAN_8400F) {
SETREG (0x0c, 0x00);
}
// EXPR[0:15], EXPG[0:15], EXPB[0:15]: Exposure time settings. // EXPR[0:15], EXPG[0:15], EXPB[0:15]: Exposure time settings.
SETREG(0x10, 0x00); // SENSOR_DEF SETREG(0x10, 0x00); // SENSOR_DEF
@ -329,12 +370,22 @@ gl843_init_registers (Genesys_Device * dev)
SETREG(0x13, 0x00); // SENSOR_DEF SETREG(0x13, 0x00); // SENSOR_DEF
SETREG(0x14, 0x00); // SENSOR_DEF SETREG(0x14, 0x00); // SENSOR_DEF
SETREG(0x15, 0x00); // SENSOR_DEF SETREG(0x15, 0x00); // SENSOR_DEF
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{ {
dev->reg.set16(REG_EXPR, 0x9c40); dev->reg.set16(REG_EXPR, 0x9c40);
dev->reg.set16(REG_EXPG, 0x9c40); dev->reg.set16(REG_EXPG, 0x9c40);
dev->reg.set16(REG_EXPB, 0x9c40); dev->reg.set16(REG_EXPB, 0x9c40);
} }
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
dev->reg.set16(REG_EXPR, 0x2c09);
dev->reg.set16(REG_EXPG, 0x22b8);
dev->reg.set16(REG_EXPB, 0x10f0);
}
// CCD signal settings. // CCD signal settings.
SETREG(0x16, 0x33); // SENSOR_DEF SETREG(0x16, 0x33); // SENSOR_DEF
SETREG(0x17, 0x1c); // SENSOR_DEF SETREG(0x17, 0x1c); // SENSOR_DEF
@ -350,10 +401,14 @@ gl843_init_registers (Genesys_Device * dev)
SETREG(0x1d, 0x04); // SENSOR_DEF SETREG(0x1d, 0x04); // SENSOR_DEF
SETREG(0x1e, 0x10); SETREG(0x1e, 0x10);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{ {
SETREG(0x1e, 0x20); SETREG(0x1e, 0x20);
} }
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x1e, 0xa0);
}
SETREG (0x1f, 0x01); SETREG (0x1f, 0x01);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
@ -363,17 +418,19 @@ gl843_init_registers (Genesys_Device * dev)
SETREG (0x20, 0x10); SETREG (0x20, 0x10);
SETREG (0x21, 0x04); SETREG (0x21, 0x04);
SETREG(0x22, 0x01); SETREG(0x22, 0x01);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) SETREG(0x23, 0x01);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{ {
SETREG(0x22, 0xc8); SETREG(0x22, 0xc8);
}
SETREG (0x23, 0x01);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{
SETREG(0x23, 0xc8); SETREG(0x23, 0xc8);
} }
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x22, 0x50);
SETREG(0x23, 0x50);
}
SETREG (0x24, 0x04); SETREG (0x24, 0x04);
SETREG (0x25, 0x00); SETREG (0x25, 0x00);
@ -442,15 +499,22 @@ gl843_init_registers (Genesys_Device * dev)
// STOPTIM[0:4]: The stop duration between change of directions in // STOPTIM[0:4]: The stop duration between change of directions in
// backtracking // backtracking
SETREG(0x5e, 0x23); SETREG(0x5e, 0x23);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
{ SETREG(0x5e, 0x3f);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x5e, 0x85);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
SETREG(0x5e, 0x1f); SETREG(0x5e, 0x1f);
} }
//FMOVDEC: The number of deceleration steps in table 5 for auto-go-home //FMOVDEC: The number of deceleration steps in table 5 for auto-go-home
SETREG(0x5f, 0x01); SETREG(0x5f, 0x01);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
{ SETREG(0x5f, 0xf0);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
SETREG(0x5f, 0xf0); SETREG(0x5f, 0xf0);
} }
@ -491,10 +555,20 @@ gl843_init_registers (Genesys_Device * dev)
// GPIO-related register bits // GPIO-related register bits
SETREG(0x6b, 0x30); SETREG(0x6b, 0x30);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{ {
SETREG(0x6b, 0x72); SETREG(0x6b, 0x72);
} }
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x6b, 0xb1);
}
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x6b, 0xf4);
}
// 0x6c, 0x6d, 0x6e, 0x6f are set according to gpio tables. See // 0x6c, 0x6d, 0x6e, 0x6f are set according to gpio tables. See
// gl843_init_gpio. // gl843_init_gpio.
@ -508,13 +582,33 @@ gl843_init_registers (Genesys_Device * dev)
SETREG(0x72, 0x04); SETREG(0x72, 0x04);
SETREG(0x73, 0x05); SETREG(0x73, 0x05);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
{ SETREG(0x70, 0x01);
SETREG(0x71, 0x03);
SETREG(0x72, 0x01);
SETREG(0x73, 0x03);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x70, 0x01);
SETREG(0x71, 0x03);
SETREG(0x72, 0x03);
SETREG(0x73, 0x04);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
SETREG(0x70, 0x00); SETREG(0x70, 0x00);
SETREG(0x71, 0x02); SETREG(0x71, 0x02);
SETREG(0x72, 0x02); SETREG(0x72, 0x02);
SETREG(0x73, 0x04); SETREG(0x73, 0x04);
} }
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x70, 0x00);
SETREG(0x71, 0x02);
SETREG(0x72, 0x00);
SETREG(0x73, 0x00);
}
// CK1MAP[0:17], CK3MAP[0:17], CK4MAP[0:17]: CCD clock bit mapping setting. // CK1MAP[0:17], CK3MAP[0:17], CK4MAP[0:17]: CCD clock bit mapping setting.
SETREG(0x74, 0x00); // SENSOR_DEF SETREG(0x74, 0x00); // SENSOR_DEF
@ -529,6 +623,9 @@ gl843_init_registers (Genesys_Device * dev)
// various AFE settings // various AFE settings
SETREG(0x7d, 0x00); SETREG(0x7d, 0x00);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x7d, 0x20);
}
// GPOLED[x]: LED vs GPIO settings // GPOLED[x]: LED vs GPIO settings
SETREG(0x7e, 0x00); SETREG(0x7e, 0x00);
@ -540,6 +637,18 @@ gl843_init_registers (Genesys_Device * dev)
// VRHOME, VRMOVE, VRBACK, VRSCAN: Vref settings of the motor driver IC for // VRHOME, VRMOVE, VRBACK, VRSCAN: Vref settings of the motor driver IC for
// moving in various situations. // moving in various situations.
SETREG(0x80, 0x00); SETREG(0x80, 0x00);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
SETREG(0x80, 0x0c);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F) {
SETREG(0x80, 0x28);
}
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0x80, 0x50);
}
if (dev->model->model_id != MODEL_CANON_CANOSCAN_4400F) if (dev->model->model_id != MODEL_CANON_CANOSCAN_4400F)
{ {
@ -555,14 +664,15 @@ gl843_init_registers (Genesys_Device * dev)
} }
SETREG(0x87, 0x00); SETREG(0x87, 0x00);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{ {
SETREG(0x87, 0x02); SETREG(0x87, 0x02);
} }
// MTRPLS[0:7]: The width of the ADF motor trigger signal pulse. // MTRPLS[0:7]: The width of the ADF motor trigger signal pulse.
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id != MODEL_CANON_CANOSCAN_8400F) {
{
SETREG(0x94, 0xff); SETREG(0x94, 0xff);
} }
@ -579,130 +689,78 @@ gl843_init_registers (Genesys_Device * dev)
SETREG(0x9a, 0x00); SETREG(0x9a, 0x00);
SETREG(0x9b, 0x00); SETREG(0x9b, 0x00);
} }
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
// TODO: move to set for scan
SETREG(0x98, 0x03);
SETREG(0x99, 0x30);
SETREG(0x9a, 0x01);
SETREG(0x9b, 0x80);
}
// RMADLY[0:1], MOTLAG, CMODE, STEPTIM, MULDMYLN, IFRS // RMADLY[0:1], MOTLAG, CMODE, STEPTIM, MULDMYLN, IFRS
SETREG(0x9d, 0x04); SETREG(0x9d, 0x04);
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F ||
dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{ {
SETREG(0x9d, 0x08); // additionally sets the multiplier for slope tables SETREG(0x9d, 0x08); // sets the multiplier for slope tables
} }
// SEL3INV, TGSTIME[0:2], TGWTIME[0:2] // SEL3INV, TGSTIME[0:2], TGWTIME[0:2]
if (dev->model->model_id != MODEL_CANON_CANOSCAN_8400F)
{
SETREG(0x9e, 0x00); // SENSOR_DEF SETREG(0x9e, 0x00); // SENSOR_DEF
}
// RFHSET[0:4]: Refresh time of SDRAM in units of 2us // RFHSET[0:4]: Refresh time of SDRAM in units of 2us
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F ||
dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{ {
SETREG(0xa2, 0x1f); SETREG(0xa2, 0x1f);
} }
// 0xa6-0xa9: controls gpio, see gl843_gpio_init // 0xa6-0xa9: controls gpio, see gl843_gpio_init
// GPOM9, MULSTOP[0-2], NODECEL, TB3TB1, TB5TB2, FIX16CLK. // not documented
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{
SETREG(0xab, 0x00);
}
// VRHOME[3:2], VRMOVE[3:2], VRBACK[3:2]: Vref setting of the motor driver IC
// for various situations.
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F)
{
SETREG(0xac, 0x00);
}
if (dev->model->model_id != MODEL_CANON_CANOSCAN_8400F)
{
SETREG (0x0c, 0x00);
SETREG (0x94, 0xff);
SETREG (0xab, 0x50);
}
if (dev->model->model_id != MODEL_CANON_CANOSCAN_4400F if (dev->model->model_id != MODEL_CANON_CANOSCAN_4400F
&& dev->model->model_id != MODEL_CANON_CANOSCAN_8400F) && dev->model->model_id != MODEL_CANON_CANOSCAN_8400F)
{ {
SETREG(0xaa, 0x00); SETREG(0xaa, 0x00);
} }
/* G4050 values */ // GPOM9, MULSTOP[0-2], NODECEL, TB3TB1, TB5TB2, FIX16CLK.
if (dev->model->model_id != MODEL_CANON_CANOSCAN_8400F) {
SETREG(0xab, 0x50);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F) {
SETREG(0xab, 0x00);
}
if (dev->model->model_id == MODEL_HP_SCANJET_G4010 || if (dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
dev->model->model_id == MODEL_HP_SCANJET_G4050 || dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C) dev->model->model_id == MODEL_HP_SCANJET_4850C)
{ {
SETREG (0x03, 0x1d); // BUG: this should apply to MODEL_CANON_CANOSCAN_8600F too, but due to previous bug
SETREG (0x06, 0xd0); /* SCANMOD=110, PWRBIT and no GAIN4 */ // the 8400F case overwrote it
SETREG (0x06, 0xd8); /* SCANMOD=110, PWRBIT and GAIN4 */
SETREG (0x0a, 0x18);
SETREG (0x0b, 0x69);
/* CIS exposure is used for XPA lamp movement */
SETREG (0x10, 0x2c);
SETREG (0x11, 0x09);
SETREG (0x12, 0x22);
SETREG (0x13, 0xb8);
SETREG (0x14, 0x10);
SETREG (0x15, 0xf0);
SETREG (0x6b, 0xf4);
SETREG (0x70, 0x00);
SETREG (0x71, 0x02);
SETREG (0x72, 0x00);
SETREG (0x73, 0x00);
SETREG (0x80, 0x50);
SETREG (0x9d, 0x08);
SETREG(0xab, 0x40); SETREG(0xab, 0x40);
}
/* XXX STEF XXX TODO move to set for scan */ // VRHOME[3:2], VRMOVE[3:2], VRBACK[3:2]: Vref setting of the motor driver IC
SETREG (0x98, 0x03); // for various situations.
SETREG (0x99, 0x30); if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F ||
SETREG (0x9a, 0x01); dev->model->model_id == MODEL_HP_SCANJET_G4010 ||
SETREG (0x9b, 0x80); dev->model->model_id == MODEL_HP_SCANJET_G4050 ||
dev->model->model_id == MODEL_HP_SCANJET_4850C)
{
SETREG(0xac, 0x00); SETREG(0xac, 0x00);
} }
if (dev->model->model_id == MODEL_CANON_CANOSCAN_4400F)
{
SETREG (0x06, 0xf0); /* SCANMOD=111, PWRBIT and no GAIN4 */
SETREG (0x0b, 0x69); /* 16M only */
SETREG (0x1e, 0x20);
SETREG (0x22, 0xc8);
SETREG (0x23, 0xc8);
SETREG (0x5e, 0x3f);
SETREG (0x5f, 0xf0);
SETREG (0x6b, 0x72);
SETREG (0x72, 0x01);
SETREG (0x73, 0x03);
SETREG (0x80, 0x0c);
SETREG (0x87, 0x02); /* MCLOCK -> CK4MAP */
SETREG (0x9d, 0x08); /* STEPTIM=2 */
SETREG (0xa2, 0x1f);
SETREG (0xab, 0x00);
sanei_genesys_set_double(&dev->reg,REG_EXPR,0x9c40);
sanei_genesys_set_double(&dev->reg,REG_EXPG,0x9c40);
sanei_genesys_set_double(&dev->reg,REG_EXPB,0x9c40);
}
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8400F)
{
SETREG (0x03, 0x1c);
SETREG (0x06, 0xd0); /* SCANMOD=110, PWRBIT and no GAIN4 */
SETREG (0x0a, 0x10);
SETREG (0x22, 0x50);
SETREG (0x23, 0x50);
SETREG (0x5e, 0x85);
SETREG (0x6b, 0xb1);
SETREG (0x1e, 0xa0);
SETREG (0x72, 0x03);
SETREG (0x73, 0x04);
SETREG (0x7d, 0x20);
SETREG (0x80, 0x28);
SETREG (0x87, 0x02); /* MCLOCK -> CK4MAP */
SETREG (0x9d, 0x08); /* STEPTIM=2 */
}
dev->calib_reg = dev->reg; dev->calib_reg = dev->reg;
DBGCOMPLETED; DBGCOMPLETED;