X86 platform drivers: Remove EC dump from thinkpad_acpi
There is a general interface for that now (provided by other patches in this patch series): /sys/kernel/debug/ec/*/io Signed-off-by: Thomas Renninger <trenn@suse.de> CC: Alexey Starikovskiy <astarikovskiy@suse.de> CC: Len Brown <lenb@kernel.org> CC: linux-kernel@vger.kernel.org CC: linux-acpi@vger.kernel.org CC: platform-driver-x86@vger.kernel.org CC: Henrique de Moraes Holschuh <hmh@hmh.eng.br> CC: ibm-acpi-devel@lists.sourceforge.net Signed-off-by: Matthew Garrett <mjg@redhat.com>
This commit is contained in:
committed by
Matthew Garrett
parent
49c6c5ff92
commit
a420e46412
@@ -960,70 +960,21 @@ Sysfs notes:
|
|||||||
subsystem, and follow all of the hwmon guidelines at
|
subsystem, and follow all of the hwmon guidelines at
|
||||||
Documentation/hwmon.
|
Documentation/hwmon.
|
||||||
|
|
||||||
|
EXPERIMENTAL: Embedded controller register dump
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
EXPERIMENTAL: Embedded controller register dump -- /proc/acpi/ibm/ecdump
|
This feature is not included in the thinkpad driver anymore.
|
||||||
------------------------------------------------------------------------
|
Instead the EC can be accessed through /sys/kernel/debug/ec with
|
||||||
|
a userspace tool which can be found here:
|
||||||
|
ftp://ftp.suse.com/pub/people/trenn/sources/ec
|
||||||
|
|
||||||
This feature is marked EXPERIMENTAL because the implementation
|
Use it to determine the register holding the fan
|
||||||
directly accesses hardware registers and may not work as expected. USE
|
|
||||||
WITH CAUTION! To use this feature, you need to supply the
|
|
||||||
experimental=1 parameter when loading the module.
|
|
||||||
|
|
||||||
This feature dumps the values of 256 embedded controller
|
|
||||||
registers. Values which have changed since the last time the registers
|
|
||||||
were dumped are marked with a star:
|
|
||||||
|
|
||||||
[root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump
|
|
||||||
EC +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
|
|
||||||
EC 0x00: a7 47 87 01 fe 96 00 08 01 00 cb 00 00 00 40 00
|
|
||||||
EC 0x10: 00 00 ff ff f4 3c 87 09 01 ff 42 01 ff ff 0d 00
|
|
||||||
EC 0x20: 00 00 00 00 00 00 00 00 00 00 00 03 43 00 00 80
|
|
||||||
EC 0x30: 01 07 1a 00 30 04 00 00 *85 00 00 10 00 50 00 00
|
|
||||||
EC 0x40: 00 00 00 00 00 00 14 01 00 04 00 00 00 00 00 00
|
|
||||||
EC 0x50: 00 c0 02 0d 00 01 01 02 02 03 03 03 03 *bc *02 *bc
|
|
||||||
EC 0x60: *02 *bc *02 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0x70: 00 00 00 00 00 12 30 40 *24 *26 *2c *27 *20 80 *1f 80
|
|
||||||
EC 0x80: 00 00 00 06 *37 *0e 03 00 00 00 0e 07 00 00 00 00
|
|
||||||
EC 0x90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xa0: *ff 09 ff 09 ff ff *64 00 *00 *00 *a2 41 *ff *ff *e0 00
|
|
||||||
EC 0xb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xd0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xe0: 00 00 00 00 00 00 00 00 11 20 49 04 24 06 55 03
|
|
||||||
EC 0xf0: 31 55 48 54 35 38 57 57 08 2f 45 73 07 65 6c 1a
|
|
||||||
|
|
||||||
This feature can be used to determine the register holding the fan
|
|
||||||
speed on some models. To do that, do the following:
|
speed on some models. To do that, do the following:
|
||||||
|
|
||||||
- make sure the battery is fully charged
|
- make sure the battery is fully charged
|
||||||
- make sure the fan is running
|
- make sure the fan is running
|
||||||
- run 'cat /proc/acpi/ibm/ecdump' several times, once per second or so
|
- use above mentioned tool to read out the EC
|
||||||
|
|
||||||
The first step makes sure various charging-related values don't
|
Often fan and temperature values vary between
|
||||||
vary. The second ensures that the fan-related values do vary, since
|
|
||||||
the fan speed fluctuates a bit. The third will (hopefully) mark the
|
|
||||||
fan register with a star:
|
|
||||||
|
|
||||||
[root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump
|
|
||||||
EC +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
|
|
||||||
EC 0x00: a7 47 87 01 fe 96 00 08 01 00 cb 00 00 00 40 00
|
|
||||||
EC 0x10: 00 00 ff ff f4 3c 87 09 01 ff 42 01 ff ff 0d 00
|
|
||||||
EC 0x20: 00 00 00 00 00 00 00 00 00 00 00 03 43 00 00 80
|
|
||||||
EC 0x30: 01 07 1a 00 30 04 00 00 85 00 00 10 00 50 00 00
|
|
||||||
EC 0x40: 00 00 00 00 00 00 14 01 00 04 00 00 00 00 00 00
|
|
||||||
EC 0x50: 00 c0 02 0d 00 01 01 02 02 03 03 03 03 bc 02 bc
|
|
||||||
EC 0x60: 02 bc 02 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0x70: 00 00 00 00 00 12 30 40 24 27 2c 27 21 80 1f 80
|
|
||||||
EC 0x80: 00 00 00 06 *be 0d 03 00 00 00 0e 07 00 00 00 00
|
|
||||||
EC 0x90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xa0: ff 09 ff 09 ff ff 64 00 00 00 a2 41 ff ff e0 00
|
|
||||||
EC 0xb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xd0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
||||||
EC 0xe0: 00 00 00 00 00 00 00 00 11 20 49 04 24 06 55 03
|
|
||||||
EC 0xf0: 31 55 48 54 35 38 57 57 08 2f 45 73 07 65 6c 1a
|
|
||||||
|
|
||||||
Another set of values that varies often is the temperature
|
|
||||||
readings. Since temperatures don't change vary fast, you can take
|
readings. Since temperatures don't change vary fast, you can take
|
||||||
several quick dumps to eliminate them.
|
several quick dumps to eliminate them.
|
||||||
|
|
||||||
|
@@ -5837,75 +5837,6 @@ static struct ibm_struct thermal_driver_data = {
|
|||||||
.exit = thermal_exit,
|
.exit = thermal_exit,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
* EC Dump subdriver
|
|
||||||
*/
|
|
||||||
|
|
||||||
static u8 ecdump_regs[256];
|
|
||||||
|
|
||||||
static int ecdump_read(struct seq_file *m)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
u8 v;
|
|
||||||
|
|
||||||
seq_printf(m, "EC "
|
|
||||||
" +00 +01 +02 +03 +04 +05 +06 +07"
|
|
||||||
" +08 +09 +0a +0b +0c +0d +0e +0f\n");
|
|
||||||
for (i = 0; i < 256; i += 16) {
|
|
||||||
seq_printf(m, "EC 0x%02x:", i);
|
|
||||||
for (j = 0; j < 16; j++) {
|
|
||||||
if (!acpi_ec_read(i + j, &v))
|
|
||||||
break;
|
|
||||||
if (v != ecdump_regs[i + j])
|
|
||||||
seq_printf(m, " *%02x", v);
|
|
||||||
else
|
|
||||||
seq_printf(m, " %02x", v);
|
|
||||||
ecdump_regs[i + j] = v;
|
|
||||||
}
|
|
||||||
seq_putc(m, '\n');
|
|
||||||
if (j != 16)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* These are way too dangerous to advertise openly... */
|
|
||||||
#if 0
|
|
||||||
seq_printf(m, "commands:\t0x<offset> 0x<value>"
|
|
||||||
" (<offset> is 00-ff, <value> is 00-ff)\n");
|
|
||||||
seq_printf(m, "commands:\t0x<offset> <value> "
|
|
||||||
" (<offset> is 00-ff, <value> is 0-255)\n");
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ecdump_write(char *buf)
|
|
||||||
{
|
|
||||||
char *cmd;
|
|
||||||
int i, v;
|
|
||||||
|
|
||||||
while ((cmd = next_cmd(&buf))) {
|
|
||||||
if (sscanf(cmd, "0x%x 0x%x", &i, &v) == 2) {
|
|
||||||
/* i and v set */
|
|
||||||
} else if (sscanf(cmd, "0x%x %u", &i, &v) == 2) {
|
|
||||||
/* i and v set */
|
|
||||||
} else
|
|
||||||
return -EINVAL;
|
|
||||||
if (i >= 0 && i < 256 && v >= 0 && v < 256) {
|
|
||||||
if (!acpi_ec_write(i, v))
|
|
||||||
return -EIO;
|
|
||||||
} else
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct ibm_struct ecdump_driver_data = {
|
|
||||||
.name = "ecdump",
|
|
||||||
.read = ecdump_read,
|
|
||||||
.write = ecdump_write,
|
|
||||||
.flags.experimental = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Backlight/brightness subdriver
|
* Backlight/brightness subdriver
|
||||||
*/
|
*/
|
||||||
@@ -8882,9 +8813,6 @@ static struct ibm_init_struct ibms_init[] __initdata = {
|
|||||||
.init = thermal_init,
|
.init = thermal_init,
|
||||||
.data = &thermal_driver_data,
|
.data = &thermal_driver_data,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.data = &ecdump_driver_data,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.init = brightness_init,
|
.init = brightness_init,
|
||||||
.data = &brightness_driver_data,
|
.data = &brightness_driver_data,
|
||||||
@@ -8993,7 +8921,6 @@ TPACPI_PARAM(light);
|
|||||||
TPACPI_PARAM(cmos);
|
TPACPI_PARAM(cmos);
|
||||||
TPACPI_PARAM(led);
|
TPACPI_PARAM(led);
|
||||||
TPACPI_PARAM(beep);
|
TPACPI_PARAM(beep);
|
||||||
TPACPI_PARAM(ecdump);
|
|
||||||
TPACPI_PARAM(brightness);
|
TPACPI_PARAM(brightness);
|
||||||
TPACPI_PARAM(volume);
|
TPACPI_PARAM(volume);
|
||||||
TPACPI_PARAM(fan);
|
TPACPI_PARAM(fan);
|
||||||
|
Reference in New Issue
Block a user