55
55
/* Read and write RAM, registers and AFE */
56
56
/* ------------------------------------------------------------------------ */
62
write_end_access (Genesys_Device * dev, uint8_t index, uint8_t val)
66
DBG (DBG_io, "write_end_access: 0x%02x,0x%02x\n", index, val);
69
sanei_usb_control_msg (dev->dn, REQUEST_TYPE_OUT, REQUEST_REGISTER,
70
VALUE_BUF_ENDACCESS, index, 1, &val);
71
if (status != SANE_STATUS_GOOD)
74
"write_end_access: failed %s\n", sane_strstatus (status));
80
60
* Write bulk data (e.g. gamma or shading data) */
744
710
SETREG (0x9b, 0x80);
745
711
SETREG (0xac, 0x00);
714
if (strcmp (dev->model->name, "canon-canoscan-4400f") == 0)
716
SETREG (0x06, 0xf0); /* SCANMOD=111, PWRBIT and no GAIN4 */
717
SETREG (0x0b, 0x69); /* 16M only */
727
SETREG (0x87, 0x02); /* MCLOCK -> CK4MAP */
728
SETREG (0x9d, 0x08); /* STEPTIM=2 */
731
sanei_genesys_set_double(dev->reg,REG_EXPR,0x9c40);
732
sanei_genesys_set_double(dev->reg,REG_EXPG,0x9c40);
733
sanei_genesys_set_double(dev->reg,REG_EXPB,0x9c40);
736
if (strcmp (dev->model->name, "canon-canoscan-8400f") == 0)
739
SETREG (0x06, 0xd0); /* SCANMOD=110, PWRBIT and no GAIN4 */
750
SETREG (0x87, 0x02); /* MCLOCK -> CK4MAP */
751
SETREG (0x9d, 0x08); /* STEPTIM=2 */
748
754
/* fine tune upon device description */
749
755
dev->reg[reg_0x05].value &= ~REG05_DPIHW;
800
805
sprintf (msg, "write slope %d (%d)=", table_nr, steps);
801
806
for (i = 0; i < steps; i++)
803
sprintf (msg, "%s,%d", msg, slope_table[i]);
808
sprintf (msg+strlen(msg), "%d", slope_table[i]);
805
810
DBG (DBG_io, "%s: %s\n", __FUNCTION__, msg);
808
814
/* slope table addresses are fixed : 0x4000, 0x4800, 0x5000, 0x5800, 0x6000 */
809
/* XXX STEF XXX USB 1.1 ? write_end_access (dev, 0x0f, 0x14); */
815
/* XXX STEF XXX USB 1.1 ? sanei_genesys_write_0x8c (dev, 0x0f, 0x14); */
810
816
status = write_data (dev, 0x4000 + 0x800 * table_nr, steps * 2, table);
811
817
if (status != SANE_STATUS_GOOD)
1003
1007
fast_step_type=scan_step_type;
1005
fast_time=sanei_genesys_slope_table(fast_table,
1007
sanei_genesys_get_lowest_ydpi(dev),
1009
dev->motor.base_ydpi,
1012
dev->model->motor_type,
1009
sanei_genesys_slope_table(fast_table,
1011
sanei_genesys_get_lowest_ydpi(dev),
1013
dev->motor.base_ydpi,
1016
dev->model->motor_type,
1014
1018
RIE(gl843_send_slope_table (dev, STOP_TABLE, fast_table, fast_steps*factor));
1015
1019
RIE(gl843_send_slope_table (dev, FAST_TABLE, fast_table, fast_steps*factor));
1016
1020
RIE(gl843_send_slope_table (dev, HOME_TABLE, fast_table, fast_steps*factor));
1125
1131
/** @brief setup optical related registers
1126
1132
* start and pixels are expressed in optical sensor resolution coordinate
1134
* @param dev device to use
1135
* @param reg registers to set up
1128
1136
* @param exposure exposure time to use
1129
1137
* @param used_res scanning resolution used, may differ from
1131
1139
* @param start logical start pixel coordinate
1132
1140
* @param pixels logical number of pixels to use
1141
* @param channels number of color channles used (1 or 3)
1142
* @param depth bit depth of the scan (1, 8 or 16 bits)
1143
* @param half_ccd SANE_TRUE if timings are such that x coordiantes must be halved
1144
* @param color_filter to choose the color channel used in gray scans
1133
1145
* @param flags to drive specific settings such no calibration, XPA use ...
1134
1146
* @return SANE_STATUS_GOOD if OK
1315
1327
r->value |= REG05_GMMENB;
1317
sanei_genesys_set_double(reg,REG_DPISET,dpiset);
1318
DBG (DBG_io2, "%s: dpiset used=%d\n", __FUNCTION__, dpiset);
1331
sanei_genesys_set_double(reg,REG_DPISET,dpiset*4);
1332
DBG (DBG_io2, "%s: dpiset used=%d\n", __FUNCTION__, dpiset*4);
1336
sanei_genesys_set_double(reg,REG_DPISET,dpiset);
1337
DBG (DBG_io2, "%s: dpiset used=%d\n", __FUNCTION__, dpiset);
1320
1340
sanei_genesys_set_double(reg,REG_STRPIXEL,startx/tgtime);
1321
1341
sanei_genesys_set_double(reg,REG_ENDPIXEL,endx/tgtime);
1777
1791
/* compute correct pixels number */
1778
1792
used_pixels = (pixels * optical_res) / xres;
1779
1793
DBG (DBG_info, "%s: used_pixels=%d\n", __FUNCTION__, used_pixels);
1783
/* cis color scan is effectively a gray scan with 3 gray lines per color
1784
line and a FILTER of 0 */
1785
if (dev->model->is_cis)
1786
slope_dpi = yres * channels;
1791
1796
exposure = gl843_compute_exposure (dev, used_res, oflags);
1793
/* scan_step_type */
1794
scan_step_type = sanei_genesys_compute_step_type(gl843_motors, dev->model->motor_type, exposure);
1795
1797
DBG (DBG_info, "%s : exposure=%d pixels\n", __FUNCTION__, exposure);
1797
1799
/* it seems base_dpi of the G4050 motor is changed above 600 dpi*/
2323
2325
dpihw = sanei_genesys_compute_dpihw (dev, dpiset);
2325
2327
/* set up GPIO for scan */
2327
if (dev->model->gpo_type == GPO_KVSS080)
2329
RIE (sanei_genesys_write_register (dev, REGA9, 0x00));
2330
RIE (sanei_genesys_write_register (dev, REGA6, 0xf6));
2332
RIE (sanei_genesys_write_register (dev, 0x7e, 0x04));
2334
if (dev->model->gpo_type == GPO_G4050)
2336
RIE (sanei_genesys_write_register (dev, REGA7, 0xfe));
2337
RIE (sanei_genesys_write_register (dev, REGA8, 0x3e));
2338
RIE (sanei_genesys_write_register (dev, REGA9, 0x06));
2344
RIE (sanei_genesys_write_register (dev, REG6C, 0x60));
2345
RIE (sanei_genesys_write_register (dev, REGA6, 0x46));
2347
default: /* 600 dpi case */
2348
RIE (sanei_genesys_write_register (dev, REG6C, 0x20));
2349
RIE (sanei_genesys_write_register (dev, REGA6, 0x44));
2352
/* turn on XPA lamp if XPA is selected and lamp power on*/
2353
r03 = sanei_genesys_read_reg_from_set (reg, REG03);
2354
if ((r03 & REG03_XPASEL) && (r03 & REG03_LAMPPWR))
2356
RIE(gl843_xpa_lamp_on(dev));
2359
/* enable XPA lamp motor */
2360
if (r03 & REG03_XPASEL)
2362
RIE(gl843_xpa_motor_on(dev));
2366
RIE (sanei_genesys_write_register (dev, REG7E, 0x01));
2328
switch(dev->model->gpo_type)
2332
RIE (sanei_genesys_write_register (dev, REGA9, 0x00));
2333
RIE (sanei_genesys_write_register (dev, REGA6, 0xf6));
2335
RIE (sanei_genesys_write_register (dev, 0x7e, 0x04));
2338
RIE (sanei_genesys_write_register (dev, REGA7, 0xfe));
2339
RIE (sanei_genesys_write_register (dev, REGA8, 0x3e));
2340
RIE (sanei_genesys_write_register (dev, REGA9, 0x06));
2346
RIE (sanei_genesys_write_register (dev, REG6C, 0x60));
2347
RIE (sanei_genesys_write_register (dev, REGA6, 0x46));
2349
default: /* 600 dpi case */
2350
RIE (sanei_genesys_write_register (dev, REG6C, 0x20));
2351
RIE (sanei_genesys_write_register (dev, REGA6, 0x44));
2354
/* turn on XPA lamp if XPA is selected and lamp power on*/
2355
r03 = sanei_genesys_read_reg_from_set (reg, REG03);
2356
if ((r03 & REG03_XPASEL) && (r03 & REG03_LAMPPWR))
2358
RIE(gl843_xpa_lamp_on(dev));
2361
/* enable XPA lamp motor */
2362
if (r03 & REG03_XPASEL)
2364
RIE(gl843_xpa_motor_on(dev));
2368
RIE (sanei_genesys_write_register (dev, REG7E, 0x01));
2369
2376
/* clear scan and feed count */
3072
3080
return SANE_STATUS_GOOD;
3076
* this function sends generic gamma table (ie linear ones)
3077
* or the Sensor specific one if provided
3084
* This function sends gamma tables to ASIC
3079
3086
static SANE_Status
3080
gl843_send_gamma_table (Genesys_Device * dev, SANE_Bool generic)
3087
gl843_send_gamma_table (Genesys_Device * dev)
3084
3091
uint8_t *gamma;
3087
DBG (DBG_proc, "gl843_send_gamma_table\n");
3089
/* don't send anything if no specific gamma table defined */
3091
&& (dev->sensor.red_gamma_table == NULL
3092
|| dev->sensor.green_gamma_table == NULL
3093
|| dev->sensor.blue_gamma_table == NULL))
3095
DBG (DBG_proc, "gl843_send_gamma_table: nothing to send, skipping\n");
3096
return SANE_STATUS_GOOD;
3104
3101
return SANE_STATUS_NO_MEM;
3106
/* take care off generic/specific data */
3109
/* fill with default values */
3110
for (i = 0; i < size; i++)
3113
gamma[i * 2 + size * 0 + 0] = gmmval & 0xff;
3114
gamma[i * 2 + size * 0 + 1] = (gmmval >> 8) & 0xff;
3115
gamma[i * 2 + size * 2 + 0] = gmmval & 0xff;
3116
gamma[i * 2 + size * 2 + 1] = (gmmval >> 8) & 0xff;
3117
gamma[i * 2 + size * 4 + 0] = gmmval & 0xff;
3118
gamma[i * 2 + size * 4 + 1] = (gmmval >> 8) & 0xff;
3123
/* copy sensor specific's gamma tables */
3124
for (i = 0; i < size; i++)
3126
gamma[i * 2 + size * 0 + 0] = dev->sensor.red_gamma_table[i] & 0xff;
3127
gamma[i * 2 + size * 0 + 1] =
3128
(dev->sensor.red_gamma_table[i] >> 8) & 0xff;
3129
gamma[i * 2 + size * 2 + 0] =
3130
dev->sensor.green_gamma_table[i] & 0xff;
3131
gamma[i * 2 + size * 2 + 1] =
3132
(dev->sensor.green_gamma_table[i] >> 8) & 0xff;
3133
gamma[i * 2 + size * 4 + 0] =
3134
dev->sensor.blue_gamma_table[i] & 0xff;
3135
gamma[i * 2 + size * 4 + 1] =
3136
(dev->sensor.blue_gamma_table[i] >> 8) & 0xff;
3103
/* copy sensor specific's gamma tables */
3104
for (i = 0; i < size; i++)
3106
gamma[i * 2 + size * 0 + 0] = dev->sensor.gamma_table[GENESYS_RED][i] & 0xff;
3107
gamma[i * 2 + size * 0 + 1] = (dev->sensor.gamma_table[GENESYS_RED][i] >> 8) & 0xff;
3108
gamma[i * 2 + size * 2 + 0] = dev->sensor.gamma_table[GENESYS_GREEN][i] & 0xff;
3109
gamma[i * 2 + size * 2 + 1] = (dev->sensor.gamma_table[GENESYS_GREEN][i] >> 8) & 0xff;
3110
gamma[i * 2 + size * 4 + 0] = dev->sensor.gamma_table[GENESYS_BLUE][i] & 0xff;
3111
gamma[i * 2 + size * 4 + 1] = (dev->sensor.gamma_table[GENESYS_BLUE][i] >> 8) & 0xff;
3140
3114
/* send address */
3476
3450
dev->frontend.offset[i] = bottom[i];
3477
3451
dev->frontend.gain[i] = 0;
3479
RIE (gl843_set_fe (dev, AFE_SET));
3453
RIEF2 (gl843_set_fe (dev, AFE_SET), first_line, second_line);
3481
3455
/* scan with obttom AFE settings */
3482
RIE (gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS));
3456
RIEF2 (dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS), first_line, second_line);
3483
3457
DBG (DBG_info, "gl843_offset_calibration: starting first line reading\n");
3484
RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE));
3485
RIE (sanei_genesys_read_data_from_scanner (dev, first_line, total_size));
3458
RIEF2 (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE), first_line, second_line);
3459
RIEF2 (sanei_genesys_read_data_from_scanner (dev, first_line, total_size), first_line, second_line);
3486
3460
if (DBG_LEVEL >= DBG_data)
3488
3462
for (i = 0; i < 3; i++)
3505
3479
dev->frontend.offset[i] = top[i];
3507
RIE (gl843_set_fe (dev, AFE_SET));
3481
RIEF2 (gl843_set_fe (dev, AFE_SET), first_line, second_line);
3509
3483
/* scan with top AFE values */
3510
RIE (gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS));
3484
RIEF2 (dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS), first_line, second_line);
3511
3485
DBG (DBG_info, "gl843_offset_calibration: starting second line reading\n");
3512
RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE));
3513
RIE (sanei_genesys_read_data_from_scanner (dev, second_line, total_size));
3486
RIEF2 (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE), first_line, second_line);
3487
RIEF2 (sanei_genesys_read_data_from_scanner (dev, second_line, total_size), first_line, second_line);
3515
3489
for (i = 0; i < 3; i++)
3535
3509
dev->frontend.offset[i] = (top[i] + bottom[i]) / 2;
3538
RIE (gl843_set_fe (dev, AFE_SET));
3512
RIEF2 (gl843_set_fe (dev, AFE_SET), first_line, second_line);
3540
3514
/* scan with no move */
3541
RIE (gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS));
3515
RIEF2 (dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS), first_line, second_line);
3542
3516
DBG (DBG_info, "gl843_offset_calibration: starting second line reading\n");
3543
RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE));
3544
RIE (sanei_genesys_read_data_from_scanner (dev, second_line, total_size));
3517
RIEF2 (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE), first_line, second_line);
3518
RIEF2 (sanei_genesys_read_data_from_scanner (dev, second_line, total_size), first_line, second_line);
3546
3520
if (DBG_LEVEL >= DBG_data)
3674
3648
return SANE_STATUS_NO_MEM;
3676
RIE (gl843_set_fe(dev, AFE_SET));
3677
RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE));
3678
RIE (sanei_genesys_read_data_from_scanner (dev, line, total_size));
3650
RIEF (gl843_set_fe(dev, AFE_SET), line);
3651
RIEF (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE), line);
3652
RIEF (sanei_genesys_read_data_from_scanner (dev, line, total_size), line);
3680
3654
if (DBG_LEVEL >= DBG_data)
3681
3655
sanei_genesys_write_pnm_file ("coarse.pnm", line, bpp, channels, pixels, lines);
3826
3800
RIE (sanei_genesys_write_register (dev, REG6F, dev->gpo.enable[1]));
3827
3801
RIE (sanei_genesys_write_register (dev, REG6C, dev->gpo.value[0]));
3828
3802
RIE (sanei_genesys_write_register (dev, REG6D, dev->gpo.value[1]));
3829
if ((strcmp (dev->model->name, "hewlett-packard-scanjet-g4010") == 0)
3830
|| (strcmp (dev->model->name, "hewlett-packard-scanjet-4850c") == 0)
3831
|| (strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0))
3805
while(dev->model->gpo_type != gpios[idx].gpo_type && gpios[idx].gpo_type!=0)
3809
if (gpios[idx].gpo_type!=0)
3811
RIE (sanei_genesys_write_register (dev, REGA6, gpios[idx].ra6));
3812
RIE (sanei_genesys_write_register (dev, REGA7, gpios[idx].ra7));
3813
RIE (sanei_genesys_write_register (dev, REGA8, gpios[idx].ra8));
3814
RIE (sanei_genesys_write_register (dev, REGA9, gpios[idx].ra9));
3818
status=SANE_STATUS_INVAL;
3839
RIE (sanei_genesys_write_register (dev, REGA6, gpios[i].ra6));
3840
RIE (sanei_genesys_write_register (dev, REGA7, gpios[i].ra7));
3841
RIE (sanei_genesys_write_register (dev, REGA8, gpios[i].ra8));
3842
RIE (sanei_genesys_write_register (dev, REGA9, gpios[i].ra9));
3850
3827
* initialize ASIC from power on condition
3853
gl843_cold_boot (Genesys_Device * dev)
3829
#ifndef UNIT_TESTING
3833
gl843_boot (Genesys_Device * dev, SANE_Bool cold)
3855
3835
SANE_Status status;
3860
RIE (sanei_genesys_write_register (dev, 0x0e, 0x01));
3861
RIE (sanei_genesys_write_register (dev, 0x0e, 0x00));
3842
RIE (sanei_genesys_write_register (dev, 0x0e, 0x01));
3843
RIE (sanei_genesys_write_register (dev, 0x0e, 0x00));
3846
if(dev->usb_mode == 1)
3854
RIE (sanei_genesys_write_0x8c (dev, 0x0f, val));
3863
3856
/* test CHKVER */
3864
3857
RIE (sanei_genesys_read_register (dev, REG40, &val));
3921
3917
gl843_init (Genesys_Device * dev)
3923
3919
SANE_Status status;
3925
SANE_Bool cold = SANE_TRUE;
3931
/* URB 16 control 0xc0 0x0c 0x8e 0x0b len 1 read 0x00 */
3933
sanei_usb_control_msg (dev->dn, REQUEST_TYPE_IN, REQUEST_REGISTER,
3934
VALUE_GET_REGISTER, 0x0b, 1, &val);
3935
if (status != SANE_STATUS_GOOD)
3938
"gl843_init: request register failed %s\n",
3939
sane_strstatus (status));
3942
DBG (DBG_io2, "gl843_init: value=0x%02x\n", val);
3943
DBG (DBG_info, "%s: device is %s\n", __FUNCTION__,
3944
(val & 0x08) ? "USB 1.0" : "USB2.0");
3947
/* URB 17 control 0x40 0x0c 0x8c 0x0f len 1 wrote 0x14 */
3953
/* URB 17 control 0x40 0x0c 0x8c 0x0f len 1 wrote 0x11 */
3957
RIE (write_end_access (dev, 0x0f, val));
3959
/* check if the device has already been initialized and powered up
3960
* we read register 6 and check PWRBIT, if reset scanner has been
3961
* freshly powered up. This bit will be set to later so that following
3962
* reads can detect power down/up cycle*/
3963
RIE (sanei_genesys_read_register (dev, 0x06, &val));
3964
if (val & REG06_PWRBIT)
3968
DBG (DBG_info, "%s: device is %s\n", __FUNCTION__, cold ? "cold" : "warm");
3970
/* don't do anything if backend is initialized and hardware hasn't been
3972
if (dev->already_initialized && !cold)
3974
DBG (DBG_info, "gl843_init: already initialized, nothing to do\n");
3975
return SANE_STATUS_GOOD;
3978
/* set up hardware and registers */
3979
RIE (gl843_cold_boot (dev));
3981
/* move head away from park position */
3982
gl843_feed (dev, 300);
3985
/* now hardware part is OK, set up device struct */
3986
FREE_IFNOT_NULL (dev->white_average_data);
3987
FREE_IFNOT_NULL (dev->dark_average_data);
3988
FREE_IFNOT_NULL (dev->sensor.red_gamma_table);
3989
FREE_IFNOT_NULL (dev->sensor.green_gamma_table);
3990
FREE_IFNOT_NULL (dev->sensor.blue_gamma_table);
3992
dev->settings.color_filter = 0;
3994
memcpy (dev->calib_reg, dev->reg, GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set));
3996
/* Set analog frontend */
3997
RIE (gl843_set_fe (dev, AFE_INIT));
3999
/* init gamma tables */
4001
if (dev->sensor.red_gamma_table == NULL)
4003
dev->sensor.red_gamma_table = (uint16_t *) malloc (2 * size);
4004
if (dev->sensor.red_gamma_table == NULL)
4007
"gl843_init: could not allocate memory for gamma table\n");
4008
return SANE_STATUS_NO_MEM;
4010
sanei_genesys_create_gamma_table (dev->sensor.red_gamma_table, size, 65535, 65535, dev->sensor.red_gamma);
4012
if (dev->sensor.green_gamma_table == NULL)
4014
dev->sensor.green_gamma_table = (uint16_t *) malloc (2 * size);
4015
if (dev->sensor.red_gamma_table == NULL)
4018
"gl843_init: could not allocate memory for gamma table\n");
4019
return SANE_STATUS_NO_MEM;
4021
sanei_genesys_create_gamma_table (dev->sensor.green_gamma_table, size, 65535, 65535, dev->sensor.green_gamma);
4023
if (dev->sensor.blue_gamma_table == NULL)
4025
dev->sensor.blue_gamma_table = (uint16_t *) malloc (2 * size);
4026
if (dev->sensor.red_gamma_table == NULL)
4029
"gl843_init: could not allocate memory for gamma table\n");
4030
return SANE_STATUS_NO_MEM;
4032
sanei_genesys_create_gamma_table (dev->sensor.blue_gamma_table, size, 65535, 65535, dev->sensor.blue_gamma);
4035
dev->oe_buffer.buffer = NULL;
4036
dev->already_initialized = SANE_TRUE;
4038
/* Move home if needed */
4039
RIE (gl843_slow_back_home (dev, SANE_TRUE));
4040
dev->scanhead_position_in_steps = 0;
4042
/* Set powersaving (default = 15 minutes) */
4043
RIE (gl843_set_powersaving (dev, 15));
3924
status=sanei_genesys_asic_init(dev, GENESYS_GL843_MAX_REGS);
4058
3939
RIE (sanei_genesys_read_register (s->dev, REG6D, &val));
4060
if (s->dev->model->gpo_type == GPO_KVSS080)
4062
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
4063
s->val[OPT_SCAN_SW].b = (val & 0x04) == 0;
4067
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
4068
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
4069
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
4070
s->val[OPT_FILE_SW].b = (val & 0x02) == 0;
4071
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
4072
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
4073
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
4074
s->val[OPT_COPY_SW].b = (val & 0x08) == 0;
3941
switch (s->dev->model->gpo_type)
3944
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
3945
s->val[OPT_SCAN_SW].b = (val & 0x04) == 0;
3948
if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b)
3949
s->val[OPT_SCAN_SW].b = (val & 0x01) == 0;
3950
if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b)
3951
s->val[OPT_FILE_SW].b = (val & 0x02) == 0;
3952
if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b)
3953
s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0;
3954
if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b)
3955
s->val[OPT_COPY_SW].b = (val & 0x08) == 0;