summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authormarkus <markus@FreeBSD.org>2005-06-10 11:56:18 +0000
committermarkus <markus@FreeBSD.org>2005-06-10 11:56:18 +0000
commit06fa0f60f2fe048da8ec0d2449f16e1b831a29ae (patch)
treec2428f776b537ff47d13075e211d7f0e1405e615 /sys
parent9db8f12017c2f55fa932edca2184e5ac3535e501 (diff)
downloadFreeBSD-src-06fa0f60f2fe048da8ec0d2449f16e1b831a29ae.zip
FreeBSD-src-06fa0f60f2fe048da8ec0d2449f16e1b831a29ae.tar.gz
- Only create the led(4) interface, if setting the thinklight is possible
- Initialize val_ec with the content of the volume EC register for ACPI_IBM_METHOD_VOLUME and ACPI_IBM_METHOD_MUTE in acpi_ibm_sysctl_set() if there is no CMOS handle present. This fixes setting volume and mute on such models. Submitted by: ru Approved by: philip
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/acpi_support/acpi_ibm.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/sys/dev/acpi_support/acpi_ibm.c b/sys/dev/acpi_support/acpi_ibm.c
index c7ac547..848efa1 100644
--- a/sys/dev/acpi_support/acpi_ibm.c
+++ b/sys/dev/acpi_support/acpi_ibm.c
@@ -376,7 +376,8 @@ acpi_ibm_attach(device_t dev)
acpi_ibm_notify, dev);
/* Hook up light to led(4) */
- sc->led_dev = led_create(ibm_led, sc, "thinklight");
+ if (sc->light_set_supported)
+ sc->led_dev = led_create(ibm_led, sc, "thinklight");
return (0);
}
@@ -396,7 +397,9 @@ acpi_ibm_detach(device_t dev)
AcpiRemoveNotifyHandler(sc->handle, ACPI_DEVICE_NOTIFY, acpi_ibm_notify);
- led_destroy(sc->led_dev);
+ if (sc->led_dev != NULL)
+ led_destroy(sc->led_dev);
+
return (0);
}
@@ -522,7 +525,7 @@ acpi_ibm_sysctl_get(struct acpi_ibm_softc *sc, int method)
case ACPI_IBM_METHOD_VOLUME:
ACPI_EC_READ(sc->ec_dev, IBM_EC_VOLUME, &val_ec, 1);
- val = val_ec &IBM_EC_MASK_VOL;
+ val = val_ec & IBM_EC_MASK_VOL;
break;
case ACPI_IBM_METHOD_MUTE:
@@ -632,10 +635,11 @@ acpi_ibm_sysctl_set(struct acpi_ibm_softc *sc, int method, int arg)
if (arg < 0 || arg > 14)
return (EINVAL);
+ status = ACPI_EC_READ(sc->ec_dev, IBM_EC_VOLUME, &val_ec, 1);
+ if (ACPI_FAILURE(status))
+ return (status);
+
if (sc->cmos_handle) {
- status = ACPI_EC_READ(sc->ec_dev, IBM_EC_VOLUME, &val_ec, 1);
- if (ACPI_FAILURE(status))
- return (status);
val = val_ec & IBM_EC_MASK_VOL;
Args.Count = 1;
@@ -657,10 +661,11 @@ acpi_ibm_sysctl_set(struct acpi_ibm_softc *sc, int method, int arg)
if (arg < 0 || arg > 1)
return (EINVAL);
+ status = ACPI_EC_READ(sc->ec_dev, IBM_EC_VOLUME, &val_ec, 1);
+ if (ACPI_FAILURE(status))
+ return (status);
+
if (sc->cmos_handle) {
- status = ACPI_EC_READ(sc->ec_dev, IBM_EC_VOLUME, &val_ec, 1);
- if (ACPI_FAILURE(status))
- return (status);
val = val_ec & IBM_EC_MASK_VOL;
Args.Count = 1;
OpenPOWER on IntegriCloud