diff options
| author | Thomas Renninger <trenn@suse.de> | 2010-07-16 07:11:35 -0400 |
|---|---|---|
| committer | Matthew Garrett <mjg@redhat.com> | 2010-08-03 09:49:06 -0400 |
| commit | a420e46412ad9d33c7174cd4311b91728122e2c4 (patch) | |
| tree | 36c01a0fc6f2a0a0a8daa23f6a8ca906021d35f3 | |
| parent | 49c6c5ff924cecc0b6260109a510b7ed4c970dc5 (diff) | |
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>
| -rw-r--r-- | Documentation/laptops/thinkpad-acpi.txt | 71 | ||||
| -rw-r--r-- | drivers/platform/x86/thinkpad_acpi.c | 73 |
2 files changed, 11 insertions, 133 deletions
diff --git a/Documentation/laptops/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt index fc15538d8b46..f6f80257addb 100644 --- a/Documentation/laptops/thinkpad-acpi.txt +++ b/Documentation/laptops/thinkpad-acpi.txt | |||
| @@ -960,70 +960,21 @@ Sysfs notes: | |||
| 960 | subsystem, and follow all of the hwmon guidelines at | 960 | subsystem, and follow all of the hwmon guidelines at |
| 961 | Documentation/hwmon. | 961 | Documentation/hwmon. |
| 962 | 962 | ||
| 963 | EXPERIMENTAL: Embedded controller register dump | ||
| 964 | ----------------------------------------------- | ||
| 963 | 965 | ||
| 964 | EXPERIMENTAL: Embedded controller register dump -- /proc/acpi/ibm/ecdump | 966 | This feature is not included in the thinkpad driver anymore. |
| 965 | ------------------------------------------------------------------------ | 967 | Instead the EC can be accessed through /sys/kernel/debug/ec with |
| 966 | 968 | a userspace tool which can be found here: | |
| 967 | This feature is marked EXPERIMENTAL because the implementation | 969 | ftp://ftp.suse.com/pub/people/trenn/sources/ec |
| 968 | directly accesses hardware registers and may not work as expected. USE | ||
| 969 | WITH CAUTION! To use this feature, you need to supply the | ||
| 970 | experimental=1 parameter when loading the module. | ||
| 971 | |||
| 972 | This feature dumps the values of 256 embedded controller | ||
| 973 | registers. Values which have changed since the last time the registers | ||
| 974 | were dumped are marked with a star: | ||
| 975 | |||
| 976 | [root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump | ||
| 977 | EC +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f | ||
| 978 | EC 0x00: a7 47 87 01 fe 96 00 08 01 00 cb 00 00 00 40 00 | ||
| 979 | EC 0x10: 00 00 ff ff f4 3c 87 09 01 ff 42 01 ff ff 0d 00 | ||
| 980 | EC 0x20: 00 00 00 00 00 00 00 00 00 00 00 03 43 00 00 80 | ||
| 981 | EC 0x30: 01 07 1a 00 30 04 00 00 *85 00 00 10 00 50 00 00 | ||
| 982 | EC 0x40: 00 00 00 00 00 00 14 01 00 04 00 00 00 00 00 00 | ||
| 983 | EC 0x50: 00 c0 02 0d 00 01 01 02 02 03 03 03 03 *bc *02 *bc | ||
| 984 | EC 0x60: *02 *bc *02 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 985 | EC 0x70: 00 00 00 00 00 12 30 40 *24 *26 *2c *27 *20 80 *1f 80 | ||
| 986 | EC 0x80: 00 00 00 06 *37 *0e 03 00 00 00 0e 07 00 00 00 00 | ||
| 987 | EC 0x90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 988 | EC 0xa0: *ff 09 ff 09 ff ff *64 00 *00 *00 *a2 41 *ff *ff *e0 00 | ||
| 989 | EC 0xb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 990 | EC 0xc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 991 | EC 0xd0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 992 | EC 0xe0: 00 00 00 00 00 00 00 00 11 20 49 04 24 06 55 03 | ||
| 993 | EC 0xf0: 31 55 48 54 35 38 57 57 08 2f 45 73 07 65 6c 1a | ||
| 994 | |||
| 995 | This feature can be used to determine the register holding the fan | ||
| 996 | speed on some models. To do that, do the following: | ||
| 997 | 970 | ||
| 971 | Use it to determine the register holding the fan | ||
| 972 | speed on some models. To do that, do the following: | ||
| 998 | - make sure the battery is fully charged | 973 | - make sure the battery is fully charged |
| 999 | - make sure the fan is running | 974 | - make sure the fan is running |
| 1000 | - run 'cat /proc/acpi/ibm/ecdump' several times, once per second or so | 975 | - use above mentioned tool to read out the EC |
| 1001 | 976 | ||
| 1002 | The first step makes sure various charging-related values don't | 977 | Often fan and temperature values vary between |
| 1003 | vary. The second ensures that the fan-related values do vary, since | ||
| 1004 | the fan speed fluctuates a bit. The third will (hopefully) mark the | ||
| 1005 | fan register with a star: | ||
| 1006 | |||
| 1007 | [root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump | ||
| 1008 | EC +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f | ||
| 1009 | EC 0x00: a7 47 87 01 fe 96 00 08 01 00 cb 00 00 00 40 00 | ||
| 1010 | EC 0x10: 00 00 ff ff f4 3c 87 09 01 ff 42 01 ff ff 0d 00 | ||
| 1011 | EC 0x20: 00 00 00 00 00 00 00 00 00 00 00 03 43 00 00 80 | ||
| 1012 | EC 0x30: 01 07 1a 00 30 04 00 00 85 00 00 10 00 50 00 00 | ||
| 1013 | EC 0x40: 00 00 00 00 00 00 14 01 00 04 00 00 00 00 00 00 | ||
| 1014 | EC 0x50: 00 c0 02 0d 00 01 01 02 02 03 03 03 03 bc 02 bc | ||
| 1015 | EC 0x60: 02 bc 02 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 1016 | EC 0x70: 00 00 00 00 00 12 30 40 24 27 2c 27 21 80 1f 80 | ||
| 1017 | EC 0x80: 00 00 00 06 *be 0d 03 00 00 00 0e 07 00 00 00 00 | ||
| 1018 | EC 0x90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 1019 | EC 0xa0: ff 09 ff 09 ff ff 64 00 00 00 a2 41 ff ff e0 00 | ||
| 1020 | EC 0xb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 1021 | EC 0xc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 1022 | EC 0xd0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| 1023 | EC 0xe0: 00 00 00 00 00 00 00 00 11 20 49 04 24 06 55 03 | ||
| 1024 | EC 0xf0: 31 55 48 54 35 38 57 57 08 2f 45 73 07 65 6c 1a | ||
| 1025 | |||
| 1026 | Another set of values that varies often is the temperature | ||
| 1027 | readings. Since temperatures don't change vary fast, you can take | 978 | readings. Since temperatures don't change vary fast, you can take |
| 1028 | several quick dumps to eliminate them. | 979 | several quick dumps to eliminate them. |
| 1029 | 980 | ||
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index 4bdb13796e24..5d6119bed00c 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c | |||
| @@ -5838,75 +5838,6 @@ static struct ibm_struct thermal_driver_data = { | |||
| 5838 | }; | 5838 | }; |
| 5839 | 5839 | ||
| 5840 | /************************************************************************* | 5840 | /************************************************************************* |
| 5841 | * EC Dump subdriver | ||
| 5842 | */ | ||
| 5843 | |||
| 5844 | static u8 ecdump_regs[256]; | ||
| 5845 | |||
| 5846 | static int ecdump_read(struct seq_file *m) | ||
| 5847 | { | ||
| 5848 | int i, j; | ||
| 5849 | u8 v; | ||
| 5850 | |||
| 5851 | seq_printf(m, "EC " | ||
| 5852 | " +00 +01 +02 +03 +04 +05 +06 +07" | ||
| 5853 | " +08 +09 +0a +0b +0c +0d +0e +0f\n"); | ||
| 5854 | for (i = 0; i < 256; i += 16) { | ||
| 5855 | seq_printf(m, "EC 0x%02x:", i); | ||
| 5856 | for (j = 0; j < 16; j++) { | ||
| 5857 | if (!acpi_ec_read(i + j, &v)) | ||
| 5858 | break; | ||
| 5859 | if (v != ecdump_regs[i + j]) | ||
| 5860 | seq_printf(m, " *%02x", v); | ||
| 5861 | else | ||
| 5862 | seq_printf(m, " %02x", v); | ||
| 5863 | ecdump_regs[i + j] = v; | ||
| 5864 | } | ||
| 5865 | seq_putc(m, '\n'); | ||
| 5866 | if (j != 16) | ||
| 5867 | break; | ||
| 5868 | } | ||
| 5869 | |||
| 5870 | /* These are way too dangerous to advertise openly... */ | ||
| 5871 | #if 0 | ||
| 5872 | seq_printf(m, "commands:\t0x<offset> 0x<value>" | ||
| 5873 | " (<offset> is 00-ff, <value> is 00-ff)\n"); | ||
| 5874 | seq_printf(m, "commands:\t0x<offset> <value> " | ||
| 5875 | " (<offset> is 00-ff, <value> is 0-255)\n"); | ||
| 5876 | #endif | ||
| 5877 | return 0; | ||
| 5878 | } | ||
| 5879 | |||
| 5880 | static int ecdump_write(char *buf) | ||
| 5881 | { | ||
| 5882 | char *cmd; | ||
| 5883 | int i, v; | ||
| 5884 | |||
| 5885 | while ((cmd = next_cmd(&buf))) { | ||
| 5886 | if (sscanf(cmd, "0x%x 0x%x", &i, &v) == 2) { | ||
| 5887 | /* i and v set */ | ||
| 5888 | } else if (sscanf(cmd, "0x%x %u", &i, &v) == 2) { | ||
| 5889 | /* i and v set */ | ||
| 5890 | } else | ||
| 5891 | return -EINVAL; | ||
| 5892 | if (i >= 0 && i < 256 && v >= 0 && v < 256) { | ||
| 5893 | if (!acpi_ec_write(i, v)) | ||
| 5894 | return -EIO; | ||
| 5895 | } else | ||
| 5896 | return -EINVAL; | ||
| 5897 | } | ||
| 5898 | |||
| 5899 | return 0; | ||
| 5900 | } | ||
| 5901 | |||
| 5902 | static struct ibm_struct ecdump_driver_data = { | ||
| 5903 | .name = "ecdump", | ||
| 5904 | .read = ecdump_read, | ||
| 5905 | .write = ecdump_write, | ||
| 5906 | .flags.experimental = 1, | ||
| 5907 | }; | ||
| 5908 | |||
| 5909 | /************************************************************************* | ||
| 5910 | * Backlight/brightness subdriver | 5841 | * Backlight/brightness subdriver |
| 5911 | */ | 5842 | */ |
| 5912 | 5843 | ||
| @@ -8883,9 +8814,6 @@ static struct ibm_init_struct ibms_init[] __initdata = { | |||
| 8883 | .data = &thermal_driver_data, | 8814 | .data = &thermal_driver_data, |
| 8884 | }, | 8815 | }, |
| 8885 | { | 8816 | { |
| 8886 | .data = &ecdump_driver_data, | ||
| 8887 | }, | ||
| 8888 | { | ||
| 8889 | .init = brightness_init, | 8817 | .init = brightness_init, |
| 8890 | .data = &brightness_driver_data, | 8818 | .data = &brightness_driver_data, |
| 8891 | }, | 8819 | }, |
| @@ -8993,7 +8921,6 @@ TPACPI_PARAM(light); | |||
| 8993 | TPACPI_PARAM(cmos); | 8921 | TPACPI_PARAM(cmos); |
| 8994 | TPACPI_PARAM(led); | 8922 | TPACPI_PARAM(led); |
| 8995 | TPACPI_PARAM(beep); | 8923 | TPACPI_PARAM(beep); |
| 8996 | TPACPI_PARAM(ecdump); | ||
| 8997 | TPACPI_PARAM(brightness); | 8924 | TPACPI_PARAM(brightness); |
| 8998 | TPACPI_PARAM(volume); | 8925 | TPACPI_PARAM(volume); |
| 8999 | TPACPI_PARAM(fan); | 8926 | TPACPI_PARAM(fan); |
