From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935053AbcJXHxH (ORCPT ); Mon, 24 Oct 2016 03:53:07 -0400 Received: from mail-pf0-f174.google.com ([209.85.192.174]:35494 "EHLO mail-pf0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934678AbcJXHxF (ORCPT ); Mon, 24 Oct 2016 03:53:05 -0400 Date: Mon, 24 Oct 2016 15:53:00 +0800 From: Daniel Hung-yu Wu To: Samuel Ortiz , Lee Jones Cc: hywu@chromium.org, ejcaruso@chromium.org, drinkcat@chromium.org, kyan@chromium.org, linux-kernel@vger.kernel.org Subject: [PATCH] CHROMIUM: ec: register shutdown function to clear delayed works Message-ID: <20161024075257.GA5303@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch applies on top of "mfd: cros_ec: Add EC console read structures definitions" (https://patchwork.kernel.org/patch/9294887/). This patch is currently against a linux 3.18 kernel. Reboot or shutdown during delayed works could corrupt communication with EC, and certain I2C controller may not be able to recover from the error state. A shutdown function is registered to clear delayed works or wait for them to finish. Signed-off-by: Daniel Hung-yu Wu --- drivers/mfd/cros_ec_dev.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c index 8618a7c..3e548f1 100644 --- a/drivers/mfd/cros_ec_dev.c +++ b/drivers/mfd/cros_ec_dev.c @@ -613,6 +613,14 @@ static int ec_device_remove(struct platform_device *pdev) return 0; } +static void ec_device_shutdown(struct platform_device *pdev) +{ + struct cros_ec_dev *ec = dev_get_drvdata(&pdev->dev); + + /* Be sure to clear up debugfs delayed works */ + cros_ec_debugfs_remove(ec); +} + static int ec_device_suspend(struct device *dev) { struct cros_ec_dev *ec = dev_get_drvdata(dev); @@ -656,6 +664,7 @@ static struct platform_driver cros_ec_dev_driver = { }, .probe = ec_device_probe, .remove = ec_device_remove, + .shutdown = ec_device_shutdown, }; static int __init cros_ec_dev_init(void) -- 2.8.0.rc3.226.g39d4020