[PATCH] asus_acpi M6000A model support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

here is patch for Asus M6A laptop support. It works fine for me.

-- 
Lukáš Hejtmánek
--- asus_acpi.c.old	2005-04-21 02:03:13.000000000 +0200
+++ asus_acpi.c	2005-05-08 18:22:49.000000000 +0200
@@ -128,6 +128,7 @@
 		L8L,      //L8400L
 		M1A,      //M1300A
 		M2E,      //M2400E, L4400L
+		M6A,      //M6000A
 		M6N,      //M6800N
 		M6R,      //M6700R
 		P30,	  //Samsung P30
@@ -304,7 +305,20 @@
 		.display_set       = "SDSP",
 		.display_get       = "\\INFB"
 	},
-
+	{
+		.name              = "M6A",
+		/* M6A does not have MLED */
+		.mt_wled           = "WLED",
+		.mt_lcd_switch     = xxN_PREFIX "_Q10",
+		.lcd_status        = "\\RGPL",
+		.brightness_set    = "SPLV",
+		.brightness_get    = "GPLV",
+		.display_set       = "SDSP",
+		/* FIXME: this is not correct display_get.
+		 * It always returns 1 
+		 * */
+		.display_get       = "\\ADVG"
+	},
 	{
 		.name              = "M6N",
 		.mt_mled           = "MLED",
@@ -622,7 +636,7 @@
 {
 	int lcd = 0;
 
-	if (hotk->model != L3H) {
+	if (hotk->model != L3H && hotk->model != M6A) {
 	/* We don't have to check anything if we are here */
 		if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd))
 			printk(KERN_WARNING "Asus ACPI: Error reading LCD status\n");
@@ -638,22 +652,33 @@
 		
 		input.count = 2;
 		input.pointer = mt_params;
-		/* Note: the following values are partly guessed up, but 
-		   otherwise they seem to work */
 		mt_params[0].type = ACPI_TYPE_INTEGER;
-		mt_params[0].integer.value = 0x02;
 		mt_params[1].type = ACPI_TYPE_INTEGER;
-		mt_params[1].integer.value = 0x02;
+		if(hotk->model == L3H) {
+			/* Note: the following values are partly guessed up, 
+			 * but otherwise they seem to work */
+			mt_params[0].integer.value = 0x02;
+			mt_params[1].integer.value = 0x02;
+		} else if(hotk->model == M6A) {
+			mt_params[0].integer.value = 0x15;
+			mt_params[1].integer.value = 0x01;
+		}
 
 		output.length = sizeof(out_obj);
 		output.pointer = &out_obj;
 		
-		status = acpi_evaluate_object(NULL, hotk->methods->lcd_status, &input, &output);
+		status = acpi_evaluate_object(NULL, hotk->methods->lcd_status, 
+				&input, &output);
 		if (status != AE_OK)
 			return -1;
-		if (out_obj.type == ACPI_TYPE_INTEGER)
-			/* That's what the AML code does */
-			lcd = out_obj.integer.value >> 8;
+		if (out_obj.type == ACPI_TYPE_INTEGER) {
+			if(hotk->model== L3H) {
+				/* That's what the AML code does */
+				lcd = out_obj.integer.value >> 8;
+			} else if(hotk->model == M6A) {
+				lcd = out_obj.integer.value;
+			}
+		}
 	}
 	
 	return (lcd & 1);
@@ -1029,6 +1054,8 @@
 		hotk->model = M6N;
 	else if (strncmp(model->string.pointer, "M6R", 3) == 0)
 		hotk->model = M6R;
+	else if (strncmp(model->string.pointer, "M6A", 3) == 0)
+		hotk->model = M6A;
 	else if (strncmp(model->string.pointer, "M2N", 3) == 0 ||
 		 strncmp(model->string.pointer, "M3N", 3) == 0 ||
 		 strncmp(model->string.pointer, "M5N", 3) == 0 ||
@@ -1058,8 +1085,9 @@
 		hotk->model = L5x;
 
 	if (hotk->model == END_MODEL) {
-		printk("unsupported, trying default values, supply the "
-		       "developers with your DSDT\n");
+		printk("unsupported model %s, trying default values, supply "
+		       "the developers with your DSDT\n", 
+		       model->string.pointer);
 		hotk->model = M2E;
 	} else {
 		printk("supported\n");

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux