genesys: Merge XPA motor setup to a single function

merge-requests/82/head
Povilas Kanapickas 2019-06-08 14:04:29 +03:00
rodzic 4d4b3be12d
commit 4adb96b7af
1 zmienionych plików z 67 dodań i 75 usunięć

Wyświetl plik

@ -2048,50 +2048,8 @@ gl843_detect_document_end (Genesys_Device * dev)
return SANE_STATUS_GOOD;
}
/** @brief disable XPA slider motor
* toggle gpios to switch disble XPA slider motor
* @param dev device to set up
*/
static SANE_Status gl843_xpa_motor_off(Genesys_Device *dev)
{
uint8_t val;
SANE_Status status=SANE_STATUS_GOOD;
DBGSTART;
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
RIE(sanei_genesys_read_register(dev, REG6C, &val));
val |= REG6C_GPIO14;
val &= ~REG6C_GPIO10;
RIE(sanei_genesys_write_register(dev, REG6C, val));
RIE(sanei_genesys_read_register(dev, REGA6, &val));
val &= ~REGA6_GPIO17;
RIE(sanei_genesys_write_register(dev, REGA6,val));
} else {
/* unset GPOADF */
RIE (sanei_genesys_read_register (dev, REG6B, &val));
val &= ~REG6B_GPOADF;
RIE (sanei_genesys_write_register (dev, REG6B, val));
RIE (sanei_genesys_read_register (dev, REGA8, &val));
val |= REGA8_GPO27;
RIE (sanei_genesys_write_register (dev, REGA8, val));
RIE (sanei_genesys_read_register (dev, REGA9, &val));
val &= ~REGA9_GPO31;
RIE (sanei_genesys_write_register (dev, REGA9, val));
}
DBGCOMPLETED;
return status;
}
/** @brief enable XPA slider motor
* toggle gpios to switch enable XPA slider motor
* @param dev device to set up
*/
static SANE_Status gl843_xpa_motor_on(Genesys_Device *dev)
// enables or disables XPA slider motor
static SANE_Status gl843_set_xpa_motor_power(Genesys_Device *dev, bool set)
{
uint8_t val;
SANE_Status status=SANE_STATUS_GOOD;
@ -2099,38 +2057,72 @@ static SANE_Status gl843_xpa_motor_on(Genesys_Device *dev)
DBGSTART;
if (dev->model->model_id == MODEL_CANON_CANOSCAN_8600F) {
RIE(sanei_genesys_read_register(dev, REG6C, &val));
val &= ~REG6C_GPIO14;
if (dev->current_setup.xres >= 2400) {
val |= REG6C_GPIO10;
if (set) {
RIE(sanei_genesys_read_register(dev, REG6C, &val));
val &= ~REG6C_GPIO14;
if (dev->current_setup.xres >= 2400) {
val |= REG6C_GPIO10;
}
RIE(sanei_genesys_write_register(dev, REG6C, val));
RIE(sanei_genesys_read_register(dev, REGA6, &val));
val |= REGA6_GPIO17;
RIE(sanei_genesys_write_register(dev, REGA6,val));
} else {
RIE(sanei_genesys_read_register(dev, REG6C, &val));
val |= REG6C_GPIO14;
val &= ~REG6C_GPIO10;
RIE(sanei_genesys_write_register(dev, REG6C, val));
RIE(sanei_genesys_read_register(dev, REGA6, &val));
val &= ~REGA6_GPIO17;
RIE(sanei_genesys_write_register(dev, REGA6,val));
}
RIE(sanei_genesys_write_register(dev, REG6C, val));
DBGCOMPLETED;
return status;
}
RIE(sanei_genesys_read_register(dev, REGA6, &val));
val |= REGA6_GPIO17;
RIE(sanei_genesys_write_register(dev, REGA6,val));
} else {
/* set MULTFILM et GPOADF */
RIE (sanei_genesys_read_register (dev, REG6B, &val));
val |=REG6B_MULTFILM|REG6B_GPOADF;
RIE (sanei_genesys_write_register (dev, REG6B, val));
if (dev->model->model_id == MODEL_HP_SCANJET_G4050) {
RIE (sanei_genesys_read_register (dev, REG6C, &val));
val &= ~REG6C_GPIO15;
RIE (sanei_genesys_write_register (dev, REG6C, val));
if (set) {
/* set MULTFILM et GPOADF */
RIE (sanei_genesys_read_register (dev, REG6B, &val));
val |=REG6B_MULTFILM|REG6B_GPOADF;
RIE (sanei_genesys_write_register (dev, REG6B, val));
/* Motor power ? No move at all without this one */
RIE (sanei_genesys_read_register (dev, REGA6, &val));
val |= REGA6_GPIO20;
RIE (sanei_genesys_write_register(dev,REGA6,val));
RIE (sanei_genesys_read_register (dev, REG6C, &val));
val &= ~REG6C_GPIO15;
RIE (sanei_genesys_write_register (dev, REG6C, val));
RIE (sanei_genesys_read_register (dev, REGA8, &val));
val &= ~REGA8_GPO27;
RIE (sanei_genesys_write_register (dev, REGA8, val));
/* Motor power ? No move at all without this one */
RIE (sanei_genesys_read_register (dev, REGA6, &val));
val |= REGA6_GPIO20;
RIE (sanei_genesys_write_register(dev,REGA6,val));
RIE (sanei_genesys_read_register (dev, REGA9, &val));
val |= REGA9_GPO32|REGA9_GPO31;
RIE (sanei_genesys_write_register (dev, REGA9, val));
RIE (sanei_genesys_read_register (dev, REGA8, &val));
val &= ~REGA8_GPO27;
RIE (sanei_genesys_write_register (dev, REGA8, val));
RIE (sanei_genesys_read_register (dev, REGA9, &val));
val |= REGA9_GPO32|REGA9_GPO31;
RIE (sanei_genesys_write_register (dev, REGA9, val));
} else {
/* unset GPOADF */
RIE (sanei_genesys_read_register (dev, REG6B, &val));
val &= ~REG6B_GPOADF;
RIE (sanei_genesys_write_register (dev, REG6B, val));
RIE (sanei_genesys_read_register (dev, REGA8, &val));
val |= REGA8_GPO27;
RIE (sanei_genesys_write_register (dev, REGA8, val));
RIE (sanei_genesys_read_register (dev, REGA9, &val));
val &= ~REGA9_GPO31;
RIE (sanei_genesys_write_register (dev, REGA9, val));
}
DBGCOMPLETED;
return status;
}
DBGCOMPLETED;
@ -2219,7 +2211,7 @@ gl843_begin_scan (Genesys_Device * dev, const Genesys_Sensor& sensor, Genesys_Re
if (reg->state.is_xpa_on) {
dev->needs_home_ta = SANE_TRUE;
RIE(gl843_xpa_motor_on(dev));
RIE(gl843_set_xpa_motor_power(dev, true));
}
/* blinking led */
@ -2228,7 +2220,7 @@ gl843_begin_scan (Genesys_Device * dev, const Genesys_Sensor& sensor, Genesys_Re
case GPO_CS8600F:
if (reg->state.is_xpa_on) {
dev->needs_home_ta = SANE_TRUE;
RIE(gl843_xpa_motor_on(dev));
RIE(gl843_set_xpa_motor_power(dev, true));
}
break;
case GPO_CS4400F:
@ -2337,7 +2329,7 @@ static SANE_Status gl843_park_xpa_lamp (Genesys_Device * dev)
/* write to scanner and start action */
RIE (dev->model->cmd_set->bulk_write_register(dev, local_reg));
RIE (gl843_xpa_motor_on(dev));
RIE(gl843_set_xpa_motor_power(dev, true));
status = gl843_start_action (dev);
if (status != SANE_STATUS_GOOD)
{
@ -2367,8 +2359,8 @@ static SANE_Status gl843_park_xpa_lamp (Genesys_Device * dev)
DBG(DBG_info, "%s: reached home position\n", __func__);
DBG(DBG_proc, "%s: finished\n", __func__);
gl843_xpa_motor_off(dev);
dev->needs_home_ta = SANE_FALSE;
gl843_set_xpa_motor_power(dev, false);
dev->needs_home_ta = SANE_FALSE;
return SANE_STATUS_GOOD;
}