mfd: cros_ec_dev: Don't advertise junk features on failure
authorStephen Boyd <swboyd@chromium.org>
Thu, 31 May 2018 06:23:43 +0000 (23:23 -0700)
committerLee Jones <lee.jones@linaro.org>
Mon, 4 Jun 2018 07:46:42 +0000 (08:46 +0100)
If the feature query fails during this driver's probe, we memset the
features bits to 0, but then we continue to overwrite that with whatever
junk we read back when the feature probing failed. In the case of a SPI
device, it may be complete junk, causing the caller of this function to
think certain features are present when they aren't. Don't copy over the
bad message on failure so we can fail more gracefully.

Fixes: e4244ebddae2 ("platform/chrome: Introduce a new function to check EC features.")
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Acked-by: Benson Leung <bleung@chromium.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/cros_ec_dev.c

index 81466264f7fcdbee4f2e9d70fec02b000888fe70..dfc9f131aabe46b3a46b51e59a5759ce7ece5d5a 100644 (file)
@@ -113,10 +113,10 @@ static int cros_ec_check_features(struct cros_ec_dev *ec, int feature)
                        dev_warn(ec->dev, "cannot get EC features: %d/%d\n",
                                 ret, msg->result);
                        memset(ec->features, 0, sizeof(ec->features));
+               } else {
+                       memcpy(ec->features, msg->data, sizeof(ec->features));
                }
 
-               memcpy(ec->features, msg->data, sizeof(ec->features));
-
                dev_dbg(ec->dev, "EC features %08x %08x\n",
                        ec->features[0], ec->features[1]);