@@ -22,6 +22,7 @@
#include <linux/slab.h>
#include <linux/suspend.h>
#include <linux/property.h>
+#include <linux/dmi.h>
#include <asm/io.h>
@@ -174,6 +175,24 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id);
static bool (*i8042_platform_filter)(unsigned char data, unsigned char str,
struct serio *serio);
+static int __init i8042_set_noaux(const struct dmi_system_id *dmi)
+{
+ i8042_noaux = true;
+ return 1;
+}
+
+static const struct dmi_system_id i8042_quirks[] __initconst = {
+ {
+ .callback = i8042_set_noaux,
+ .ident = "Dell laptop",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Precision 5550"),
+ },
+ },
+ {},
+};
+
void i8042_lock_chip(void)
{
mutex_lock(&i8042_mutex);
@@ -1559,6 +1578,8 @@ static int __init i8042_probe(struct platform_device *dev)
i8042_dritek_enable();
#endif
+ dmi_check_system(i8042_quirks);
+
if (!i8042_noaux) {
error = i8042_setup_aux();
if (error && error != -ENODEV && error != -EBUSY)