]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/char/i8k.c
driver core: Remove dpm_sysfs_remove() from error path of device_add()
[linux-2.6-omap-h63xx.git] / drivers / char / i8k.c
index cd406416effdb30eba7d25c97495052d2b8151f2..8609b8236c67d42562ada21812b3c757534166b6 100644 (file)
@@ -113,6 +113,33 @@ static int i8k_smm(struct smm_regs *regs)
        int rc;
        int eax = regs->eax;
 
+#if defined(CONFIG_X86_64)
+       asm("pushq %%rax\n\t"
+               "movl 0(%%rax),%%edx\n\t"
+               "pushq %%rdx\n\t"
+               "movl 4(%%rax),%%ebx\n\t"
+               "movl 8(%%rax),%%ecx\n\t"
+               "movl 12(%%rax),%%edx\n\t"
+               "movl 16(%%rax),%%esi\n\t"
+               "movl 20(%%rax),%%edi\n\t"
+               "popq %%rax\n\t"
+               "out %%al,$0xb2\n\t"
+               "out %%al,$0x84\n\t"
+               "xchgq %%rax,(%%rsp)\n\t"
+               "movl %%ebx,4(%%rax)\n\t"
+               "movl %%ecx,8(%%rax)\n\t"
+               "movl %%edx,12(%%rax)\n\t"
+               "movl %%esi,16(%%rax)\n\t"
+               "movl %%edi,20(%%rax)\n\t"
+               "popq %%rdx\n\t"
+               "movl %%edx,0(%%rax)\n\t"
+               "lahf\n\t"
+               "shrl $8,%%eax\n\t"
+               "andl $1,%%eax\n"
+               :"=a"(rc)
+               :    "a"(regs)
+               :    "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
+#else
        asm("pushl %%eax\n\t"
            "movl 0(%%eax),%%edx\n\t"
            "push %%edx\n\t"
@@ -137,7 +164,7 @@ static int i8k_smm(struct smm_regs *regs)
            "andl $1,%%eax\n":"=a"(rc)
            :    "a"(regs)
            :    "%ebx", "%ecx", "%edx", "%esi", "%edi", "memory");
-
+#endif
        if (rc != 0 || (regs->eax & 0xffff) == 0xffff || regs->eax == eax)
                return -EINVAL;
 
@@ -371,14 +398,14 @@ static int i8k_proc_show(struct seq_file *seq, void *offset)
        int fn_key, cpu_temp, ac_power;
        int left_fan, right_fan, left_speed, right_speed;
 
-       cpu_temp        = i8k_get_temp(0);                      /* 11100 µs */
-       left_fan        = i8k_get_fan_status(I8K_FAN_LEFT);     /*   580 µs */
-       right_fan       = i8k_get_fan_status(I8K_FAN_RIGHT);    /*   580 µs */
-       left_speed      = i8k_get_fan_speed(I8K_FAN_LEFT);      /*   580 µs */
-       right_speed     = i8k_get_fan_speed(I8K_FAN_RIGHT);     /*   580 µs */
-       fn_key          = i8k_get_fn_status();                  /*   750 µs */
+       cpu_temp        = i8k_get_temp(0);                      /* 11100 Âµs */
+       left_fan        = i8k_get_fan_status(I8K_FAN_LEFT);     /*   580 Âµs */
+       right_fan       = i8k_get_fan_status(I8K_FAN_RIGHT);    /*   580 Âµs */
+       left_speed      = i8k_get_fan_speed(I8K_FAN_LEFT);      /*   580 Âµs */
+       right_speed     = i8k_get_fan_speed(I8K_FAN_RIGHT);     /*   580 Âµs */
+       fn_key          = i8k_get_fn_status();                  /*   750 Âµs */
        if (power_status)
-               ac_power = i8k_get_power_status();              /* 14700 µs */
+               ac_power = i8k_get_power_status();              /* 14700 Âµs */
        else
                ac_power = -1;
 
@@ -439,6 +466,20 @@ static struct dmi_system_id __initdata i8k_dmi_table[] = {
                        DMI_MATCH(DMI_PRODUCT_NAME, "Latitude"),
                },
        },
+       {       /* UK Inspiron 6400  */
+               .ident = "Dell Inspiron 3",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "MM061"),
+               },
+       },
+       {
+               .ident = "Dell Inspiron 3",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "MP061"),
+               },
+       },
        { }
 };