Input: synaptics - switch ForcePad detection to PNP IDs
Subsystems (2)
Dmitry Torokhov
maintainerPATCH 1/1 Input: synaptics - switch ForcePad detection to PNP IDs
According to Synaptics devices with ForcePads use SYN300D and SYN3014 as PNP IDs, so let's switch from DMI-bases detection scheme to PNP-based one, which should be more reliable.
Suggested-by Hans de Goede <[email protected]>
Signed-off-by Dmitry Torokhov <[email protected]>
--- drivers/input/mouse/synaptics.c | 35 ++++++++++++++--------------------- drivers/input/mouse/synaptics.h | 1 + 2 files changed, 15 insertions(+), 21 deletions(-)
drivers/input/mouse/synaptics.c +14 -21
@@ -190,6 +190,13 @@ static const char * const topbuttonpad_pnp_ids[] = { NULL }; +/* This list has been kindly provided by Synaptics. */ +static const char *const forcepad_pnp_ids[] = { +"SYN300D" , +"SYN3014" , +NULL +}; +/***************************************************************************** * Synaptics communications functions ****************************************************************************/
@@ -601,8 +608,6 @@ static void synaptics_parse_agm(const unsigned char buf[], } } -static bool is_forcepad; -static int synaptics_parse_hw_state (const unsigned char buf[],struct synaptics_data *priv,struct synaptics_hw_state *hw)
@@ -632,7 +637,7 @@ static int synaptics_parse_hw_state(const unsigned char buf[], hw->left = (buf[0 ] &0x01 ) ?1 :0 ; hw->right = (buf[0 ] &0x02 ) ?1 :0 ; -if (is_forcepad) { +if (priv->is_forcepad) {/* * ForcePads, like Clickpads, use middle button * bits to report primary button clicks.
@@ -1307,29 +1312,11 @@ static const struct dmi_system_id __initconst cr48_dmi_table[] = { { } }; -static const struct dmi_system_id forcepad_dmi_table[]__initconst = { -#if defined(CONFIG_DMI) && defined(CONFIG_X86) - { - .matches = { -DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"HP EliteBook Folio 1040 G1" ), - }, - }, -#endif - { } -}; -void __init synaptics_module_init (void ) { impaired_toshiba_kbc =dmi_check_system (toshiba_dmi_table); broken_olpc_ec =dmi_check_system (olpc_dmi_table); cr48_profile_sensor =dmi_check_system (cr48_dmi_table); - -/* -* Unfortunately ForcePad capability is not exported over PS/2, -* so we have to resort to checking DMI. -*/ - is_forcepad =dmi_check_system (forcepad_dmi_table); }static int __synaptics_init (struct psmouse *psmouse,bool absolute_mode)
@@ -1364,6 +1351,12 @@ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)if (SYN_ID_DISGEST_SUPPORTED (priv->identity)) priv->disable_gesture = true; +/* +* Unfortunately ForcePad capability is not exported over PS/2, +* so we have to resort to checking PNP IDs. +*/ + priv->is_forcepad =psmouse_matches_pnp_id (psmouse, forcepad_pnp_ids); +if (synaptics_set_mode (psmouse)) {psmouse_err (psmouse,"Unable to initialize device.\n" ); goto init_fail;
drivers/input/mouse/synaptics.h +1 -0
@@ -168,6 +168,7 @@ struct synaptics_data {unsigned long press_start;bool press;bool report_press; +bool is_forcepad; };void synaptics_module_init (void );
Signature · 5 lines
2.2.0.rc0.207.ga3a616c -- Dmitry
Hi,
Looks good to me:
Acked-by Hans de Goede <[email protected]>
Regards,
Hans
Quoted 103 lines · Dmitry Torokhov
According to Synaptics devices with ForcePads use SYN300D and SYN3014 as PNP IDs, so let's switch from DMI-bases detection scheme to PNP-based one, which should be more reliable.
Suggested-by Hans de Goede <[email protected]>Signed-off-by Dmitry Torokhov <[email protected]>--- drivers/input/mouse/synaptics.c | 35 ++++++++++++++--------------------- drivers/input/mouse/synaptics.h | 1 + 2 files changed, 15 insertions(+), 21 deletions(-)drivers/input/mouse/synaptics.c +14
-21@@ -190,6 +190,13 @@ static const char * const topbuttonpad_pnp_ids[] = { NULL }; +/* This list has been kindly provided by Synaptics. */ +static const char *const forcepad_pnp_ids[] = { +"SYN300D" , +"SYN3014" , +NULL +}; +/***************************************************************************** * Synaptics communications functions ****************************************************************************/ @@ -601,8 +608,6 @@ static void synaptics_parse_agm(const unsigned char buf[], } } -static bool is_forcepad; -static int synaptics_parse_hw_state (const unsigned char buf[],struct synaptics_data *priv,struct synaptics_hw_state *hw)@@ -632,7 +637,7 @@ static int synaptics_parse_hw_state(const unsigned char buf[], hw->left = (buf[0 ] &0x01 ) ?1 :0 ; hw->right = (buf[0 ] &0x02 ) ?1 :0 ; -if (is_forcepad) { +if (priv->is_forcepad) {/* * ForcePads, like Clickpads, use middle button * bits to report primary button clicks. @@ -1307,29 +1312,11 @@ static const struct dmi_system_id __initconst cr48_dmi_table[] = { { } }; -static const struct dmi_system_id forcepad_dmi_table[]__initconst = { -#if defined(CONFIG_DMI) && defined(CONFIG_X86) - { - .matches = { -DMI_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"HP EliteBook Folio 1040 G1" ), - }, - }, -#endif - { } -}; -void __init synaptics_module_init (void ) { impaired_toshiba_kbc =dmi_check_system (toshiba_dmi_table); broken_olpc_ec =dmi_check_system (olpc_dmi_table); cr48_profile_sensor =dmi_check_system (cr48_dmi_table); - -/* -* Unfortunately ForcePad capability is not exported over PS/2, -* so we have to resort to checking DMI. -*/ - is_forcepad =dmi_check_system (forcepad_dmi_table); }static int __synaptics_init (struct psmouse *psmouse,bool absolute_mode)@@ -1364,6 +1351,12 @@ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)if (SYN_ID_DISGEST_SUPPORTED (priv->identity)) priv->disable_gesture = true; +/* +* Unfortunately ForcePad capability is not exported over PS/2, +* so we have to resort to checking PNP IDs. +*/ + priv->is_forcepad =psmouse_matches_pnp_id (psmouse, forcepad_pnp_ids); +if (synaptics_set_mode (psmouse)) {psmouse_err (psmouse,"Unable to initialize device.\n" ); goto init_fail;drivers/input/mouse/synaptics.h +1
-0@@ -168,6 +168,7 @@ struct synaptics_data {unsigned long press_start;bool press;bool report_press; +bool is_forcepad; };void synaptics_module_init (void );
Quoted 7 lines · Dmitry Torokhov
According to Synaptics devices with ForcePads use SYN300D and SYN3014 as PNP IDs, so let's switch from DMI-bases detection scheme to PNP-based one, which should be more reliable.
Suggested-by Hans de Goede <[email protected]>Signed-off-by Dmitry Torokhov <[email protected]>---
Looks good to me too:
Reviewed-by Benjamin Tissoires <[email protected]>
Cheers,
Benjamin