diff options
Diffstat (limited to 'drivers/platform/chrome/cros_ec_lpc.c')
| -rw-r--r-- | drivers/platform/chrome/cros_ec_lpc.c | 32 | 
1 files changed, 22 insertions, 10 deletions
| diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c index 500a61b093e4..f0f3d3d56157 100644 --- a/drivers/platform/chrome/cros_ec_lpc.c +++ b/drivers/platform/chrome/cros_ec_lpc.c @@ -327,8 +327,8 @@ static void cros_ec_lpc_acpi_notify(acpi_handle device, u32 value, void *data)  		dev_emerg(ec_dev->dev, "CrOS EC Panic Reported. Shutdown is imminent!");  		blocking_notifier_call_chain(&ec_dev->panic_notifier, 0, ec_dev);  		kobject_uevent_env(&ec_dev->dev->kobj, KOBJ_CHANGE, (char **)env); -		/* Begin orderly shutdown. Force shutdown after 1 second. */ -		hw_protection_shutdown("CrOS EC Panic", 1000); +		/* Begin orderly shutdown. EC will force reset after a short period. */ +		hw_protection_shutdown("CrOS EC Panic", -1);  		/* Do not query for other events after a panic is reported */  		return;  	} @@ -460,7 +460,7 @@ static int cros_ec_lpc_probe(struct platform_device *pdev)  	return 0;  } -static int cros_ec_lpc_remove(struct platform_device *pdev) +static void cros_ec_lpc_remove(struct platform_device *pdev)  {  	struct cros_ec_device *ec_dev = platform_get_drvdata(pdev);  	struct acpi_device *adev; @@ -471,8 +471,6 @@ static int cros_ec_lpc_remove(struct platform_device *pdev)  					   cros_ec_lpc_acpi_notify);  	cros_ec_unregister(ec_dev); - -	return 0;  }  static const struct acpi_device_id cros_ec_lpc_acpi_device_ids[] = { @@ -549,22 +547,36 @@ MODULE_DEVICE_TABLE(dmi, cros_ec_lpc_dmi_table);  static int cros_ec_lpc_prepare(struct device *dev)  {  	struct cros_ec_device *ec_dev = dev_get_drvdata(dev); - -	return cros_ec_suspend(ec_dev); +	return cros_ec_suspend_prepare(ec_dev);  }  static void cros_ec_lpc_complete(struct device *dev)  {  	struct cros_ec_device *ec_dev = dev_get_drvdata(dev); -	cros_ec_resume(ec_dev); +	cros_ec_resume_complete(ec_dev); +} + +static int cros_ec_lpc_suspend_late(struct device *dev) +{ +	struct cros_ec_device *ec_dev = dev_get_drvdata(dev); + +	return cros_ec_suspend_late(ec_dev); +} + +static int cros_ec_lpc_resume_early(struct device *dev) +{ +	struct cros_ec_device *ec_dev = dev_get_drvdata(dev); + +	return cros_ec_resume_early(ec_dev);  }  #endif  static const struct dev_pm_ops cros_ec_lpc_pm_ops = {  #ifdef CONFIG_PM_SLEEP  	.prepare = cros_ec_lpc_prepare, -	.complete = cros_ec_lpc_complete +	.complete = cros_ec_lpc_complete,  #endif +	SET_LATE_SYSTEM_SLEEP_PM_OPS(cros_ec_lpc_suspend_late, cros_ec_lpc_resume_early)  };  static struct platform_driver cros_ec_lpc_driver = { @@ -580,7 +592,7 @@ static struct platform_driver cros_ec_lpc_driver = {  		.probe_type = PROBE_FORCE_SYNCHRONOUS,  	},  	.probe = cros_ec_lpc_probe, -	.remove = cros_ec_lpc_remove, +	.remove_new = cros_ec_lpc_remove,  };  static struct platform_device cros_ec_lpc_device = { |