i386/152438: patch to acpi_asus(4) to add extra sysctls for ASUS EeePCs

Yuichiro Goto y7goto at gmail.com
Sun Nov 21 09:10:08 UTC 2010


>Number:         152438
>Category:       i386
>Synopsis:       patch to acpi_asus(4) to add extra sysctls for ASUS EeePCs
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-i386
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Nov 21 09:10:07 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Yuichiro Goto
>Release:        8.1-RELEASE
>Organization:
FreeBSD user
>Environment:
FreeBSD cobalt2.my.domain 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Sun Nov 21 01:11:08 JST 2010     y7goto at cobalt2.my.domain:/usr/home/y7goto/GENERIC  i386
>Description:
Hello,

I added sysctls for turing on/off the LCD backlight and touchpad to acpi_asus(4) for ASUS EeePCs. The attached patch has been only tested on the ASUS EeePC 1015PD, so tests on other models are needed.

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

Index: acpi_asus.c
===================================================================
--- acpi_asus.c	(revision 215401)
+++ acpi_asus.c	(working copy)
@@ -60,6 +60,7 @@
 #define ACPI_ASUS_METHOD_CAMERA	4
 #define ACPI_ASUS_METHOD_CARDRD	5
 #define ACPI_ASUS_METHOD_WLAN	6
+#define ACPI_ASUS_METHOD_TPD	7
 
 #define _COMPONENT	ACPI_OEM
 ACPI_MODULE_NAME("ASUS")
@@ -94,6 +95,9 @@
 	char	*wlan_get;
 	char	*wlan_set;
 
+	char	*tpd_get;
+	char	*tpd_set;
+
 	void	(*n_func)(ACPI_HANDLE, UINT32, void *);
 
 	char	*lcdd;
@@ -137,6 +141,7 @@
 	int			s_cam;
 	int			s_crd;
 	int			s_wlan;
+	int			s_tpd;
 };
 
 static void	acpi_asus_lcdd_notify(ACPI_HANDLE h, UINT32 notify,
@@ -449,12 +454,16 @@
 		.name		= "EEE",
 		.brn_get	= "\\_SB.ATKD.PBLG",
 		.brn_set	= "\\_SB.ATKD.PBLS",
+		.lcd_get	= "\\_SB.ATKD.PBPG",
+		.lcd_set	= "\\_SB.ATKD.PBPS",
 		.cam_get	= "\\_SB.ATKD.CAMG",
 		.cam_set	= "\\_SB.ATKD.CAMS",
 		.crd_set	= "\\_SB.ATKD.CRDS",
 		.crd_get	= "\\_SB.ATKD.CRDG",
 		.wlan_get	= "\\_SB.ATKD.WLDG",
 		.wlan_set	= "\\_SB.ATKD.WLDS",
+		.tpd_get	= "\\_SB.ATKD.TPDG",
+		.tpd_set	= "\\_SB.ATKD.TPDS",
 		.n_func		= acpi_asus_eeepc_notify
 	},
 
@@ -503,6 +512,12 @@
 		.description	= "wireless lan state",
 		.flags		= CTLTYPE_INT | CTLFLAG_RW
 	},
+	{
+		.name		= "touchpad",
+		.method		= ACPI_ASUS_METHOD_TPD,
+		.description	= "touchpad state",
+		.flags		= CTLTYPE_INT | CTLFLAG_RW
+	},
 
 	{ .name = NULL }
 };
@@ -994,6 +1009,9 @@
 	case ACPI_ASUS_METHOD_WLAN:
 		val = sc->s_wlan;
 		break;
+	case ACPI_ASUS_METHOD_TPD:
+		val = sc->s_tpd;
+		break;
 	}
 
 	return (val);
@@ -1050,8 +1068,11 @@
 		if (arg < 0 || arg > 1)
 			return (EINVAL);
 
-		if (strncmp(sc->model->name, "L3H", 3) != 0)
+		if (strncmp(sc->model->name, "EEE", 3) == 0)
 			status = AcpiEvaluateObject(sc->handle,
+			    sc->model->lcd_set, &acpiargs, NULL);
+		else if (strncmp(sc->model->name, "L3H", 3) != 0)
+			status = AcpiEvaluateObject(sc->handle,
 			    sc->model->lcd_set, NULL, NULL);
 		else
 			status = acpi_SetInteger(sc->handle,
@@ -1091,6 +1112,16 @@
 		if (ACPI_SUCCESS(status))
 			sc->s_wlan = arg;
 		break;
+	case ACPI_ASUS_METHOD_TPD:
+		if (arg < 0 || arg > 1)
+			return (EINVAL);
+
+		status = AcpiEvaluateObject(sc->handle,
+		    sc->model->tpd_set, &acpiargs, NULL);
+
+		if (ACPI_SUCCESS(status))
+			sc->s_tpd = arg;
+		break;
 	}
 
 	return (0);
@@ -1209,6 +1240,14 @@
 				return (TRUE);
 		}
 		return (FALSE);
+	case ACPI_ASUS_METHOD_TPD:
+		if (sc->model->tpd_get) {
+			status = acpi_GetInteger(sc->handle,
+			    sc->model->tpd_get, &sc->s_tpd);
+			if (ACPI_SUCCESS(status))
+				return (TRUE);
+		}
+		return (FALSE);
 	}
 	return (FALSE);
 }


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-i386 mailing list