elantech: distinguish various hardware/firmware versions
Subsystems (2)
PATCH 2/6 elantech: distinguish various hardware/firmware versions
According to the protocol document, there are a couple of different versions of the hardware and firmware. Using the version number, it should be possible to distinguish between them, at least for the properties we care about.
Signed-off-by Éric Piel <[email protected]>
--- drivers/input/mouse/elantech.c | 34 +++++++++++++++++++++------------- drivers/input/mouse/elantech.h | 10 +++++++++- 2 files changed, 30 insertions(+), 14 deletions(-)
drivers/input/mouse/elantech.c +21 -13
@@ -719,15 +719,32 @@ int elantech_init(struct psmouse *psmouse)* Assume every version greater than this is new EeePC style * hardware with 6 byte packets */ -if (etd->fw_version >=0x020030 ) { +if (etd->fw_version >=0x020800 ) { etd->hw_version =2 ;/* For now show extra debug information */ etd->debug =1 ; -/* Don't know how to do parity checking for version 2 */ - etd->paritycheck =0 ; + etd->paritycheck =ETP_CONST_CHECK ; + etd->reports_pres =1 ; + }else if (etd->fw_version ==0x020030 ) { + etd->hw_version =2 ; +/* For now show extra debug information */ + etd->debug =1 ; + etd->paritycheck =ETP_EF113_CHECK ; + etd->reports_pres =0 ; + }else if ((etd->fw_version ==0x020022 ) || (etd->fw_version ==0x020600 )) { +/* +* This firmware suffers from misreporting coordinates when +* a touch action starts causing the mouse cursor or scrolled page +* to jump. Enable a workaround. +*/ +pr_info ("firmware version 2.0.34/2.6.0 detected, enabling jumpy cursor workaround\n" ); + etd->jumpy_cursor =1 ; + etd->debug =1 ; + etd->hw_version =1 ; + etd->paritycheck =ETP_FULL_PC ; }else { etd->hw_version =1 ; - etd->paritycheck =1 ; + etd->paritycheck =ETP_FULL_PC ; } pr_info("assuming hardware version %d, firmware version %d.%d.%d\n",
@@ -741,15 +758,6 @@ int elantech_init(struct psmouse *psmouse) param[0], param[1], param[2]); etd->capabilities = param[0 ]; -/* -* This firmware suffers from misreporting coordinates when -* a touch action starts causing the mouse cursor or scrolled page -* to jump. Enable a workaround. -*/ -if (etd->fw_version ==0x020022 || etd->fw_version ==0x020600 ) { -pr_info ("firmware version 2.0.34/2.6.0 detected, enabling jumpy cursor workaround\n" ); - etd->jumpy_cursor = true; - }if (elantech_set_absolute_mode (psmouse)) {pr_err ("failed to put touchpad into absolute mode.\n" );
drivers/input/mouse/elantech.h +9 -1
@@ -100,14 +100,22 @@ struct elantech_data {unsigned char reg_26;unsigned char debug;unsigned char capabilities; -bool paritycheck; +unsigned char paritycheck;bool jumpy_cursor; + unsigned char reports_pres :1;unsigned char hw_version;unsigned int fw_version;unsigned int single_finger_reports;unsigned char parity[256 ]; }; +enum paritycheck_types { +ETP_NOT_CHECK =0 , +ETP_FULL_PC ,/* used in 4-byte protocol */ +ETP_EF113_CHECK ,/* check used only on the EF113 */ +ETP_CONST_CHECK ,/* used in 6-byte protocol, only checking constant bits */ +}; +#ifdef CONFIG_MOUSE_PS2_ELANTECH int elantech_detect (struct psmouse *psmouse,bool set_properties);int elantech_init (struct psmouse *psmouse);
Signature · 6 lines
1.7.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html