hwmon: (applesmc) Decode and act on read/write status codes
authorHenrik Rydberg <rydberg@euromail.se>
Fri, 27 Jul 2012 18:12:46 +0000 (20:12 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Fri, 27 Jul 2012 21:00:12 +0000 (14:00 -0700)
commit829917cd7246204d6c5f066c40b66d2b62d0930d
treeeb63dc0146157820aa1ad674e3a50001b7ed2d2a
parent5953e2761be088f66fd930dfbf6b36a5a41d82a3
hwmon: (applesmc) Decode and act on read/write status codes

The behavior of the SMC has changed several times over the years,
causing read failures in the driver. It seems the problem can be
explained by a shift in SMC speed combined with improper action on
status codes.

We should first wait for the SMC to settle, which was the most
frequent response on the old slow machines. Then, if the SMC is busy,
we need to try again later by resending the command. This was the most
likely response until 2012. Now, with a shorter wait time, we are
again most likely to poll while the SMC is settling, and as a result
we see high failure rates on many old and new models.

With the distinction between busy and failure, we can also wait longer
before retrying, without sacrificing speed.  This seems to bring
failures down to virtually zero on all models.

Tested on: MBA1,1 MBA3,1 MBA5,1 MBA5,2 MBP9,2

Tested-by: Adam Somerville <adamsomerville@gmail.com>
Tested-by: Hubert Eichner <hubert.georg.eichner@gmail.com>
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/applesmc.c