Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31e0729a authored by Luca Tettamanti's avatar Luca Tettamanti Committed by Len Brown
Browse files

asus_acpi: add support for F3Sa



Add support for ASUS F3Sa notebook. Features:
- LCD on/off
- Brightness
- Wifi kill
- Bluetooth kill

Signed-off-by: default avatarLuca Tettamanti <kronos.it@gmail.com>
Cc: Corentin Chary <corentincj@iksaif.net>
Cc: Karol Kozimor <sziwan@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent e1af14e4
Loading
Loading
Loading
Loading
+45 −10
Original line number Original line Diff line number Diff line
@@ -142,6 +142,7 @@ struct asus_hotk {
		xxN,		//M2400N, M3700N, M5200N, M6800N, S1300N, S5200N
		xxN,		//M2400N, M3700N, M5200N, M6800N, S1300N, S5200N
		A4S,            //Z81sp
		A4S,            //Z81sp
		//(Centrino)
		//(Centrino)
		F3Sa,
		END_MODEL
		END_MODEL
	} model;		//Models currently supported
	} model;		//Models currently supported
	u16 event_count[128];	//count for each event TODO make this better
	u16 event_count[128];	//count for each event TODO make this better
@@ -405,7 +406,20 @@ static struct model_data model_conf[END_MODEL] = {
		.brightness_get    = "GPLV",
		.brightness_get    = "GPLV",
		.mt_bt_switch      = "BLED",
		.mt_bt_switch      = "BLED",
		.mt_wled           = "WLED"
		.mt_wled           = "WLED"
	}
	},

	{
		.name		= "F3Sa",
		.mt_bt_switch	= "BLED",
		.mt_wled	= "WLED",
		.mt_mled	= "MLED",
		.brightness_get	= "GPLV",
		.brightness_set	= "SPLV",
		.mt_lcd_switch	= "\\_SB.PCI0.SBRG.EC0._Q10",
		.lcd_status	= "\\_SB.PCI0.SBRG.EC0.RPIN",
		.display_get	= "\\ADVG",
		.display_set	= "SDSP",
	},


};
};


@@ -710,15 +724,8 @@ static int get_lcd_state(void)
{
{
	int lcd = 0;
	int lcd = 0;


	if (hotk->model != L3H) {
	if (hotk->model == L3H) {
		/* We don't have to check anything if we are here */
		/* L3H and the like have to be handled differently */
		if (!read_acpi_int(NULL, hotk->methods->lcd_status, &lcd))
			printk(KERN_WARNING
			       "Asus ACPI: Error reading LCD status\n");

		if (hotk->model == L2D)
			lcd = ~lcd;
	} else {		/* L3H and the like have to be handled differently */
		acpi_status status = 0;
		acpi_status status = 0;
		struct acpi_object_list input;
		struct acpi_object_list input;
		union acpi_object mt_params[2];
		union acpi_object mt_params[2];
@@ -745,6 +752,32 @@ static int get_lcd_state(void)
		if (out_obj.type == ACPI_TYPE_INTEGER)
		if (out_obj.type == ACPI_TYPE_INTEGER)
			/* That's what the AML code does */
			/* That's what the AML code does */
			lcd = out_obj.integer.value >> 8;
			lcd = out_obj.integer.value >> 8;
	} else if (hotk->model == F3Sa) {
		unsigned long tmp;
		union acpi_object param;
		struct acpi_object_list input;
		acpi_status status;

		/* Read pin 11 */
		param.type = ACPI_TYPE_INTEGER;
		param.integer.value = 0x11;
		input.count = 1;
		input.pointer = &param;

		status = acpi_evaluate_integer(NULL, hotk->methods->lcd_status,
						&input, &tmp);
		if (status != AE_OK)
			return -1;

		lcd = tmp;
	} else {
		/* 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");

		if (hotk->model == L2D)
			lcd = ~lcd;
	}
	}


	return (lcd & 1);
	return (lcd & 1);
@@ -1134,6 +1167,8 @@ static int asus_model_match(char *model)
		return W5A;
		return W5A;
	else if (strncmp(model, "A4S", 3) == 0)
	else if (strncmp(model, "A4S", 3) == 0)
		return A4S;
		return A4S;
	else if (strncmp(model, "F3Sa", 4) == 0)
		return F3Sa;
	else
	else
		return END_MODEL;
		return END_MODEL;
}
}