|
@@ -607,6 +607,8 @@ static void synaptics_parse_agm(const unsigned char buf[],
|
|
|
priv->agm_pending = true;
|
|
|
}
|
|
|
|
|
|
+static bool is_forcepad;
|
|
|
+
|
|
|
static int synaptics_parse_hw_state(const unsigned char buf[],
|
|
|
struct synaptics_data *priv,
|
|
|
struct synaptics_hw_state *hw)
|
|
@@ -636,7 +638,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 (SYN_CAP_FORCEPAD(priv->ext_cap_0c)) {
|
|
|
+ if (is_forcepad) {
|
|
|
/*
|
|
|
* ForcePads, like Clickpads, use middle button
|
|
|
* bits to report primary button clicks.
|
|
@@ -1667,11 +1669,29 @@ 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)
|