diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c index f853cb0..6c5052c 100644 --- a/libfprint/drivers/elan.c +++ b/libfprint/drivers/elan.c @@ -805,27 +805,12 @@ static void dev_deactivate(struct fp_img_dev *dev) elan_deactivate(dev); } -static const struct usb_id id_table[] = { - {.vendor = ELAN_VENDOR_ID,.product = 0x0903,.driver_data = - ELAN_ALL_DEVICES}, - {.vendor = ELAN_VENDOR_ID,.product = 0x0907,.driver_data = ELAN_0907}, - {.vendor = ELAN_VENDOR_ID,.product = 0x0c03,.driver_data = - ELAN_ALL_DEVICES}, - {.vendor = ELAN_VENDOR_ID,.product = 0x0c16,.driver_data = - ELAN_ALL_DEVICES}, - {.vendor = ELAN_VENDOR_ID,.product = 0x0c1a,.driver_data = - ELAN_ALL_DEVICES}, - {.vendor = ELAN_VENDOR_ID,.product = 0x0c26,.driver_data = - ELAN_ALL_DEVICES}, - {0, 0, 0,}, -}; - struct fp_img_driver elan_driver = { .driver = { .id = ELAN_ID, .name = FP_COMPONENT, .full_name = "ElanTech Fingerprint Sensor", - .id_table = id_table, + .id_table = elan_id_table, .scan_type = FP_SCAN_TYPE_SWIPE, }, .flags = 0, diff --git a/libfprint/drivers/elan.h b/libfprint/drivers/elan.h index 2b73f23..132374f 100644 --- a/libfprint/drivers/elan.h +++ b/libfprint/drivers/elan.h @@ -24,10 +24,10 @@ #include #include -#define ELAN_VENDOR_ID 0x04f3 +#define ELAN_VEND_ID 0x04f3 /* a default device type */ -#define ELAN_ALL_DEVICES 0 +#define ELAN_ALL_DEV 0 /* devices with quirks */ #define ELAN_0907 1 @@ -78,14 +78,14 @@ static const struct elan_cmd get_sensor_dim_cmd = { .cmd = {0x00, 0x0c}, .response_len = 0x4, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; static const struct elan_cmd get_fw_ver_cmd = { .cmd = {0x40, 0x19}, .response_len = 0x2, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; /* unknown, returns 0x0 0x1 on 0907 */ @@ -102,28 +102,28 @@ static const struct elan_cmd get_image_cmd = { * device */ .response_len = -1, .response_in = ELAN_EP_IMG_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; static const struct elan_cmd read_sensor_status_cmd = { .cmd = {0x40, 0x13}, .response_len = 0x1, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; static const struct elan_cmd get_calib_status_cmd = { .cmd = {0x40, 0x23}, .response_len = 0x1, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; static const struct elan_cmd get_calib_mean_cmd = { .cmd = {0x40, 0x24}, .response_len = 0x2, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; static const struct elan_cmd led_on_cmd = { @@ -139,7 +139,7 @@ static const struct elan_cmd pre_scan_cmd = { .cmd = {0x40, 0x3f}, .response_len = 0x1, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, }; /* led off, stop waiting for finger */ @@ -147,7 +147,64 @@ static const struct elan_cmd stop_cmd = { .cmd = {0x00, 0x0b}, .response_len = ELAN_CMD_SKIP_READ, .response_in = ELAN_EP_CMD_IN, - .devices = ELAN_ALL_DEVICES, + .devices = ELAN_ALL_DEV, +}; + +static const struct usb_id elan_id_table[] = { + {.vendor = ELAN_VEND_ID,.product = 0x0903,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0907,.driver_data = ELAN_0907}, + {.vendor = ELAN_VEND_ID,.product = 0x0c01,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c02,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c03,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c04,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c05,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c06,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c07,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c08,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c09,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c0a,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c0b,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c0c,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c0d,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c0e,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c0f,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c10,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c11,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c12,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c13,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c14,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c15,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c16,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c17,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c18,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c19,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c1a,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c1b,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c1c,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c1d,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c1e,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c1f,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c20,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c21,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c22,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c23,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c24,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c25,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c26,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c27,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c28,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c29,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c2a,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c2b,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c2c,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c2d,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c2e,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c2f,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c30,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c31,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c32,.driver_data = ELAN_ALL_DEV}, + {.vendor = ELAN_VEND_ID,.product = 0x0c33,.driver_data = ELAN_ALL_DEV}, + {0, 0, 0,}, }; static void elan_cmd_done(struct fpi_ssm *ssm);