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 fc15538d8b4..f6f80257add 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 4bdb13796e2..5d6119bed00 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); |