[Midnightbsd-cvs] src [12272] stable/1.1/sys/dev/acpi_support/acpi_ibm.c: update acpi_ibm compatibiility
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Oct 18 12:16:05 EDT 2019
Revision: 12272
http://svnweb.midnightbsd.org/src/?rev=12272
Author: laffer1
Date: 2019-10-18 12:16:05 -0400 (Fri, 18 Oct 2019)
Log Message:
-----------
update acpi_ibm compatibiility
Modified Paths:
--------------
stable/1.1/sys/dev/acpi_support/acpi_ibm.c
Modified: stable/1.1/sys/dev/acpi_support/acpi_ibm.c
===================================================================
--- stable/1.1/sys/dev/acpi_support/acpi_ibm.c 2019-10-18 16:13:38 UTC (rev 12271)
+++ stable/1.1/sys/dev/acpi_support/acpi_ibm.c 2019-10-18 16:16:05 UTC (rev 12272)
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/10/sys/dev/acpi_support/acpi_ibm.c 273847 2014-10-30 08:04:48Z hselasky $");
+__FBSDID("$FreeBSD: stable/11/sys/dev/acpi_support/acpi_ibm.c 300421 2016-05-22 13:58:32Z loos $");
/*
* Driver for extra ACPI-controlled gadgets found on IBM ThinkPad laptops.
@@ -40,6 +40,7 @@
#include "opt_acpi.h"
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <machine/cpufunc.h>
@@ -262,6 +263,37 @@
{ NULL, 0, NULL, 0 }
};
+/*
+ * Per-model default list of event mask.
+ */
+#define ACPI_IBM_HKEY_RFKILL_MASK (1 << 4)
+#define ACPI_IBM_HKEY_DSWITCH_MASK (1 << 6)
+#define ACPI_IBM_HKEY_BRIGHTNESS_UP_MASK (1 << 15)
+#define ACPI_IBM_HKEY_BRIGHTNESS_DOWN_MASK (1 << 16)
+#define ACPI_IBM_HKEY_SEARCH_MASK (1 << 18)
+#define ACPI_IBM_HKEY_MICMUTE_MASK (1 << 26)
+#define ACPI_IBM_HKEY_SETTINGS_MASK (1 << 28)
+#define ACPI_IBM_HKEY_VIEWOPEN_MASK (1 << 30)
+#define ACPI_IBM_HKEY_VIEWALL_MASK (1 << 31)
+
+struct acpi_ibm_models {
+ const char *maker;
+ const char *product;
+ uint32_t eventmask;
+} acpi_ibm_models[] = {
+ { "LENOVO", "20BSCTO1WW",
+ ACPI_IBM_HKEY_RFKILL_MASK |
+ ACPI_IBM_HKEY_DSWITCH_MASK |
+ ACPI_IBM_HKEY_BRIGHTNESS_UP_MASK |
+ ACPI_IBM_HKEY_BRIGHTNESS_DOWN_MASK |
+ ACPI_IBM_HKEY_SEARCH_MASK |
+ ACPI_IBM_HKEY_MICMUTE_MASK |
+ ACPI_IBM_HKEY_SETTINGS_MASK |
+ ACPI_IBM_HKEY_VIEWOPEN_MASK |
+ ACPI_IBM_HKEY_VIEWALL_MASK
+ }
+};
+
ACPI_SERIAL_DECL(ibm, "ACPI IBM extras");
static int acpi_ibm_probe(device_t dev);
@@ -355,7 +387,9 @@
static int
acpi_ibm_attach(device_t dev)
{
+ int i;
struct acpi_ibm_softc *sc;
+ char *maker, *product;
devclass_t ec_devclass;
ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
@@ -446,8 +480,35 @@
/* Hook up light to led(4) */
if (sc->light_set_supported)
- sc->led_dev = led_create_state(ibm_led, sc, "thinklight", sc->light_val);
+ sc->led_dev = led_create_state(ibm_led, sc, "thinklight",
+ (sc->light_val ? 1 : 0));
+ /* Enable per-model events. */
+ maker = getenv("smbios.system.maker");
+ product = getenv("smbios.system.product");
+ if (maker == NULL || product == NULL)
+ goto nosmbios;
+
+ for (i = 0; i < nitems(acpi_ibm_models); i++) {
+ if (strcmp(maker, acpi_ibm_models[i].maker) == 0 &&
+ strcmp(product, acpi_ibm_models[i].product) == 0) {
+ ACPI_SERIAL_BEGIN(ibm);
+ acpi_ibm_sysctl_set(sc, ACPI_IBM_METHOD_EVENTMASK,
+ acpi_ibm_models[i].eventmask);
+ ACPI_SERIAL_END(ibm);
+ }
+ }
+
+nosmbios:
+ freeenv(maker);
+ freeenv(product);
+
+ /* Enable events by default. */
+ ACPI_SERIAL_BEGIN(ibm);
+ acpi_ibm_sysctl_set(sc, ACPI_IBM_METHOD_EVENTS, 1);
+ ACPI_SERIAL_END(ibm);
+
+
return (0);
}
@@ -531,7 +592,7 @@
int error = 0;
int function;
int method;
-
+
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
sc = (struct acpi_ibm_softc *)oidp->oid_arg1;
@@ -770,7 +831,6 @@
switch (method) {
case ACPI_IBM_METHOD_EVENTS:
- /* Events are disabled by default */
return (TRUE);
case ACPI_IBM_METHOD_EVENTMASK:
@@ -780,7 +840,7 @@
case ACPI_IBM_METHOD_BRIGHTNESS:
case ACPI_IBM_METHOD_VOLUME:
case ACPI_IBM_METHOD_MUTE:
- /* EC is required here, which was aready checked before */
+ /* EC is required here, which was already checked before */
return (TRUE);
case ACPI_IBM_METHOD_THINKLIGHT:
@@ -824,7 +884,7 @@
return (FALSE);
case ACPI_IBM_METHOD_FANSPEED:
- /*
+ /*
* Some models report the fan speed in levels from 0-7
* Newer models report it contiguously
*/
@@ -835,7 +895,7 @@
case ACPI_IBM_METHOD_FANLEVEL:
case ACPI_IBM_METHOD_FANSTATUS:
- /*
+ /*
* Fan status is only supported on those models,
* which report fan RPM contiguously, not in levels
*/
@@ -872,10 +932,10 @@
for (int i = 0; i < 8; ++i) {
temp_cmd[3] = '0' + i;
-
- /*
+
+ /*
* The TMPx methods seem to return +/- 128 or 0
- * when the respecting sensor is not available
+ * when the respecting sensor is not available
*/
if (ACPI_FAILURE(acpi_GetInteger(sc->ec_handle, temp_cmd,
&temp[i])) || ABS(temp[i]) == 128 || temp[i] == 0)
@@ -882,7 +942,7 @@
temp[i] = -1;
else if (sc->thermal_updt_supported)
/* Temperature is reported in tenth of Kelvin */
- temp[i] = (temp[i] - 2732 + 5) / 10;
+ temp[i] = (temp[i] - 2731 + 5) / 10;
}
error = sysctl_handle_opaque(oidp, &temp, 8*sizeof(int), req);
@@ -1229,7 +1289,6 @@
for (;;) {
acpi_GetInteger(acpi_get_handle(dev), IBM_NAME_EVENTS_GET, &event);
-
if (event == 0)
break;
More information about the Midnightbsd-cvs
mailing list