• H
    hwmon: (applesmc) Decode and act on read/write status codes · 829917cd
    Henrik Rydberg 提交于
    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: NAdam Somerville <adamsomerville@gmail.com>
    Tested-by: NHubert Eichner <hubert.georg.eichner@gmail.com>
    Signed-off-by: NHenrik Rydberg <rydberg@euromail.se>
    Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
    829917cd
applesmc.c 32.0 KB