linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices"
@ 2018-02-22 21:30 Wenkai Du
  2018-02-27  6:50 ` Benson Leung
  2018-03-07 16:07 ` Lee Jones
  0 siblings, 2 replies; 3+ messages in thread
From: Wenkai Du @ 2018-02-22 21:30 UTC (permalink / raw)
  To: Lee Jones
  Cc: Benson Leung, linux-kernel, Archana Patni, Rafael J . Wysocki, Wenkai Du

This reverts commit e04653a9dcf4d98defe2149c885382e5cc72082f.

It is no longer needed to install Chrome EC GPE handler to have
GPE enabled in suspend to idle path. It is found that with this
handler installed, EC wake up doesn't work because default EC
event handler that can wake up system is not getting called.

Signed-off-by: Wenkai Du <wenkai.du@intel.com>
---
 drivers/mfd/Makefile           |   1 -
 drivers/mfd/cros_ec.c          |  15 ++----
 drivers/mfd/cros_ec_acpi_gpe.c | 103 -----------------------------------------
 include/linux/mfd/cros_ec.h    |  18 -------
 4 files changed, 3 insertions(+), 134 deletions(-)
 delete mode 100644 drivers/mfd/cros_ec_acpi_gpe.c

diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index d9d2cf0d32ef..e9fd20dba18d 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -13,7 +13,6 @@ obj-$(CONFIG_MFD_ASIC3)		+= asic3.o tmio_core.o
 obj-$(CONFIG_MFD_BCM590XX)	+= bcm590xx.o
 obj-$(CONFIG_MFD_BD9571MWV)	+= bd9571mwv.o
 cros_ec_core-objs		:= cros_ec.o
-cros_ec_core-$(CONFIG_ACPI)	+= cros_ec_acpi_gpe.o
 obj-$(CONFIG_MFD_CROS_EC)	+= cros_ec_core.o
 obj-$(CONFIG_MFD_CROS_EC_I2C)	+= cros_ec_i2c.o
 obj-$(CONFIG_MFD_CROS_EC_SPI)	+= cros_ec_spi.o
diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c
index d61024141e2b..c221163d5b9e 100644
--- a/drivers/mfd/cros_ec.c
+++ b/drivers/mfd/cros_ec.c
@@ -173,8 +173,6 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
 
 	dev_info(dev, "Chrome EC device registered\n");
 
-	cros_ec_acpi_install_gpe_handler(dev);
-
 	return 0;
 
 fail_mfd:
@@ -188,8 +186,6 @@ int cros_ec_remove(struct cros_ec_device *ec_dev)
 {
 	mfd_remove_devices(ec_dev->dev);
 
-	cros_ec_acpi_remove_gpe_handler();
-
 	if (ec_dev->irq)
 		free_irq(ec_dev->irq, ec_dev);
 
@@ -204,14 +200,9 @@ int cros_ec_suspend(struct cros_ec_device *ec_dev)
 	int ret;
 	u8 sleep_event;
 
-	if (!IS_ENABLED(CONFIG_ACPI) || pm_suspend_via_firmware()) {
-		sleep_event = HOST_SLEEP_EVENT_S3_SUSPEND;
-	} else {
-		sleep_event = HOST_SLEEP_EVENT_S0IX_SUSPEND;
-
-		/* Clearing the GPE status for any pending event */
-		cros_ec_acpi_clear_gpe();
-	}
+	sleep_event = (!IS_ENABLED(CONFIG_ACPI) || pm_suspend_via_firmware()) ?
+		      HOST_SLEEP_EVENT_S3_SUSPEND :
+		      HOST_SLEEP_EVENT_S0IX_SUSPEND;
 
 	ret = cros_ec_sleep_event(ec_dev, sleep_event);
 	if (ret < 0)
diff --git a/drivers/mfd/cros_ec_acpi_gpe.c b/drivers/mfd/cros_ec_acpi_gpe.c
deleted file mode 100644
index 56d305dab2d4..000000000000
--- a/drivers/mfd/cros_ec_acpi_gpe.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * ChromeOS EC multi-function device
- *
- * Copyright (C) 2017 Google, Inc
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * The ChromeOS EC multi function device is used to mux all the requests
- * to the EC device for its multiple features: keyboard controller,
- * battery charging and regulator control, firmware update.
- */
-#include <linux/acpi.h>
-
-#define ACPI_LID_DEVICE      "LID0"
-
-static int ec_wake_gpe = -EINVAL;
-
-/*
- * This handler indicates to ACPI core that this GPE should stay enabled for
- * lid to work in suspend to idle path.
- */
-static u32 cros_ec_gpe_handler(acpi_handle gpe_device, u32 gpe_number,
-			       void *data)
-{
-	return ACPI_INTERRUPT_HANDLED | ACPI_REENABLE_GPE;
-}
-
-/*
- * Get ACPI GPE for LID0 device.
- */
-static int cros_ec_get_ec_wake_gpe(struct device *dev)
-{
-	struct acpi_device *cros_acpi_dev;
-	struct acpi_device *adev;
-	acpi_handle handle;
-	acpi_status status;
-	int ret;
-
-	cros_acpi_dev = ACPI_COMPANION(dev);
-
-	if (!cros_acpi_dev || !cros_acpi_dev->parent ||
-	   !cros_acpi_dev->parent->handle)
-		return -EINVAL;
-
-	status = acpi_get_handle(cros_acpi_dev->parent->handle, ACPI_LID_DEVICE,
-				 &handle);
-	if (ACPI_FAILURE(status))
-		return -EINVAL;
-
-	ret = acpi_bus_get_device(handle, &adev);
-	if (ret)
-		return ret;
-
-	return adev->wakeup.gpe_number;
-}
-
-int cros_ec_acpi_install_gpe_handler(struct device *dev)
-{
-	acpi_status status;
-
-	ec_wake_gpe = cros_ec_get_ec_wake_gpe(dev);
-
-	if (ec_wake_gpe < 0)
-		return ec_wake_gpe;
-
-	status = acpi_install_gpe_handler(NULL, ec_wake_gpe,
-					  ACPI_GPE_EDGE_TRIGGERED,
-					  &cros_ec_gpe_handler, NULL);
-	if (ACPI_FAILURE(status))
-		return -ENODEV;
-
-	dev_info(dev, "Initialized, GPE = 0x%x\n", ec_wake_gpe);
-
-	return 0;
-}
-
-void cros_ec_acpi_remove_gpe_handler(void)
-{
-	acpi_status status;
-
-	if (ec_wake_gpe < 0)
-		return;
-
-	status = acpi_remove_gpe_handler(NULL, ec_wake_gpe,
-						 &cros_ec_gpe_handler);
-	if (ACPI_FAILURE(status))
-		pr_err("failed to remove gpe handler\n");
-}
-
-void cros_ec_acpi_clear_gpe(void)
-{
-	if (ec_wake_gpe < 0)
-		return;
-
-	acpi_clear_gpe(NULL, ec_wake_gpe);
-}
diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
index c61535979b8f..23af6806bc07 100644
--- a/include/linux/mfd/cros_ec.h
+++ b/include/linux/mfd/cros_ec.h
@@ -326,22 +326,4 @@ extern struct attribute_group cros_ec_vbc_attr_group;
 int cros_ec_debugfs_init(struct cros_ec_dev *ec);
 void cros_ec_debugfs_remove(struct cros_ec_dev *ec);
 
-/* ACPI GPE handler */
-#ifdef CONFIG_ACPI
-
-int cros_ec_acpi_install_gpe_handler(struct device *dev);
-void cros_ec_acpi_remove_gpe_handler(void);
-void cros_ec_acpi_clear_gpe(void);
-
-#else /* CONFIG_ACPI */
-
-static inline int cros_ec_acpi_install_gpe_handler(struct device *dev)
-{
-	return -ENODEV;
-}
-static inline void cros_ec_acpi_remove_gpe_handler(void) {}
-static inline void cros_ec_acpi_clear_gpe(void) {}
-
-#endif /* CONFIG_ACPI */
-
 #endif /* __LINUX_MFD_CROS_EC_H */
-- 
2.16.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices"
  2018-02-22 21:30 [PATCH] Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices" Wenkai Du
@ 2018-02-27  6:50 ` Benson Leung
  2018-03-07 16:07 ` Lee Jones
  1 sibling, 0 replies; 3+ messages in thread
From: Benson Leung @ 2018-02-27  6:50 UTC (permalink / raw)
  To: Wenkai Du
  Cc: Lee Jones, Benson Leung, linux-kernel, Archana Patni, Rafael J . Wysocki

[-- Attachment #1: Type: text/plain, Size: 6868 bytes --]

On Thu, Feb 22, 2018 at 01:30:52PM -0800, Wenkai Du wrote:
> This reverts commit e04653a9dcf4d98defe2149c885382e5cc72082f.
> 
> It is no longer needed to install Chrome EC GPE handler to have
> GPE enabled in suspend to idle path. It is found that with this
> handler installed, EC wake up doesn't work because default EC
> event handler that can wake up system is not getting called.
> 
> Signed-off-by: Wenkai Du <wenkai.du@intel.com>

Acked-by: Benson Leung <bleung@chromium.org>

> ---
>  drivers/mfd/Makefile           |   1 -
>  drivers/mfd/cros_ec.c          |  15 ++----
>  drivers/mfd/cros_ec_acpi_gpe.c | 103 -----------------------------------------
>  include/linux/mfd/cros_ec.h    |  18 -------
>  4 files changed, 3 insertions(+), 134 deletions(-)
>  delete mode 100644 drivers/mfd/cros_ec_acpi_gpe.c
> 
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index d9d2cf0d32ef..e9fd20dba18d 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -13,7 +13,6 @@ obj-$(CONFIG_MFD_ASIC3)		+= asic3.o tmio_core.o
>  obj-$(CONFIG_MFD_BCM590XX)	+= bcm590xx.o
>  obj-$(CONFIG_MFD_BD9571MWV)	+= bd9571mwv.o
>  cros_ec_core-objs		:= cros_ec.o
> -cros_ec_core-$(CONFIG_ACPI)	+= cros_ec_acpi_gpe.o
>  obj-$(CONFIG_MFD_CROS_EC)	+= cros_ec_core.o
>  obj-$(CONFIG_MFD_CROS_EC_I2C)	+= cros_ec_i2c.o
>  obj-$(CONFIG_MFD_CROS_EC_SPI)	+= cros_ec_spi.o
> diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c
> index d61024141e2b..c221163d5b9e 100644
> --- a/drivers/mfd/cros_ec.c
> +++ b/drivers/mfd/cros_ec.c
> @@ -173,8 +173,6 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
>  
>  	dev_info(dev, "Chrome EC device registered\n");
>  
> -	cros_ec_acpi_install_gpe_handler(dev);
> -
>  	return 0;
>  
>  fail_mfd:
> @@ -188,8 +186,6 @@ int cros_ec_remove(struct cros_ec_device *ec_dev)
>  {
>  	mfd_remove_devices(ec_dev->dev);
>  
> -	cros_ec_acpi_remove_gpe_handler();
> -
>  	if (ec_dev->irq)
>  		free_irq(ec_dev->irq, ec_dev);
>  
> @@ -204,14 +200,9 @@ int cros_ec_suspend(struct cros_ec_device *ec_dev)
>  	int ret;
>  	u8 sleep_event;
>  
> -	if (!IS_ENABLED(CONFIG_ACPI) || pm_suspend_via_firmware()) {
> -		sleep_event = HOST_SLEEP_EVENT_S3_SUSPEND;
> -	} else {
> -		sleep_event = HOST_SLEEP_EVENT_S0IX_SUSPEND;
> -
> -		/* Clearing the GPE status for any pending event */
> -		cros_ec_acpi_clear_gpe();
> -	}
> +	sleep_event = (!IS_ENABLED(CONFIG_ACPI) || pm_suspend_via_firmware()) ?
> +		      HOST_SLEEP_EVENT_S3_SUSPEND :
> +		      HOST_SLEEP_EVENT_S0IX_SUSPEND;
>  
>  	ret = cros_ec_sleep_event(ec_dev, sleep_event);
>  	if (ret < 0)
> diff --git a/drivers/mfd/cros_ec_acpi_gpe.c b/drivers/mfd/cros_ec_acpi_gpe.c
> deleted file mode 100644
> index 56d305dab2d4..000000000000
> --- a/drivers/mfd/cros_ec_acpi_gpe.c
> +++ /dev/null
> @@ -1,103 +0,0 @@
> -/*
> - * ChromeOS EC multi-function device
> - *
> - * Copyright (C) 2017 Google, Inc
> - *
> - * This software is licensed under the terms of the GNU General Public
> - * License version 2, as published by the Free Software Foundation, and
> - * may be copied, distributed, and modified under those terms.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * The ChromeOS EC multi function device is used to mux all the requests
> - * to the EC device for its multiple features: keyboard controller,
> - * battery charging and regulator control, firmware update.
> - */
> -#include <linux/acpi.h>
> -
> -#define ACPI_LID_DEVICE      "LID0"
> -
> -static int ec_wake_gpe = -EINVAL;
> -
> -/*
> - * This handler indicates to ACPI core that this GPE should stay enabled for
> - * lid to work in suspend to idle path.
> - */
> -static u32 cros_ec_gpe_handler(acpi_handle gpe_device, u32 gpe_number,
> -			       void *data)
> -{
> -	return ACPI_INTERRUPT_HANDLED | ACPI_REENABLE_GPE;
> -}
> -
> -/*
> - * Get ACPI GPE for LID0 device.
> - */
> -static int cros_ec_get_ec_wake_gpe(struct device *dev)
> -{
> -	struct acpi_device *cros_acpi_dev;
> -	struct acpi_device *adev;
> -	acpi_handle handle;
> -	acpi_status status;
> -	int ret;
> -
> -	cros_acpi_dev = ACPI_COMPANION(dev);
> -
> -	if (!cros_acpi_dev || !cros_acpi_dev->parent ||
> -	   !cros_acpi_dev->parent->handle)
> -		return -EINVAL;
> -
> -	status = acpi_get_handle(cros_acpi_dev->parent->handle, ACPI_LID_DEVICE,
> -				 &handle);
> -	if (ACPI_FAILURE(status))
> -		return -EINVAL;
> -
> -	ret = acpi_bus_get_device(handle, &adev);
> -	if (ret)
> -		return ret;
> -
> -	return adev->wakeup.gpe_number;
> -}
> -
> -int cros_ec_acpi_install_gpe_handler(struct device *dev)
> -{
> -	acpi_status status;
> -
> -	ec_wake_gpe = cros_ec_get_ec_wake_gpe(dev);
> -
> -	if (ec_wake_gpe < 0)
> -		return ec_wake_gpe;
> -
> -	status = acpi_install_gpe_handler(NULL, ec_wake_gpe,
> -					  ACPI_GPE_EDGE_TRIGGERED,
> -					  &cros_ec_gpe_handler, NULL);
> -	if (ACPI_FAILURE(status))
> -		return -ENODEV;
> -
> -	dev_info(dev, "Initialized, GPE = 0x%x\n", ec_wake_gpe);
> -
> -	return 0;
> -}
> -
> -void cros_ec_acpi_remove_gpe_handler(void)
> -{
> -	acpi_status status;
> -
> -	if (ec_wake_gpe < 0)
> -		return;
> -
> -	status = acpi_remove_gpe_handler(NULL, ec_wake_gpe,
> -						 &cros_ec_gpe_handler);
> -	if (ACPI_FAILURE(status))
> -		pr_err("failed to remove gpe handler\n");
> -}
> -
> -void cros_ec_acpi_clear_gpe(void)
> -{
> -	if (ec_wake_gpe < 0)
> -		return;
> -
> -	acpi_clear_gpe(NULL, ec_wake_gpe);
> -}
> diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
> index c61535979b8f..23af6806bc07 100644
> --- a/include/linux/mfd/cros_ec.h
> +++ b/include/linux/mfd/cros_ec.h
> @@ -326,22 +326,4 @@ extern struct attribute_group cros_ec_vbc_attr_group;
>  int cros_ec_debugfs_init(struct cros_ec_dev *ec);
>  void cros_ec_debugfs_remove(struct cros_ec_dev *ec);
>  
> -/* ACPI GPE handler */
> -#ifdef CONFIG_ACPI
> -
> -int cros_ec_acpi_install_gpe_handler(struct device *dev);
> -void cros_ec_acpi_remove_gpe_handler(void);
> -void cros_ec_acpi_clear_gpe(void);
> -
> -#else /* CONFIG_ACPI */
> -
> -static inline int cros_ec_acpi_install_gpe_handler(struct device *dev)
> -{
> -	return -ENODEV;
> -}
> -static inline void cros_ec_acpi_remove_gpe_handler(void) {}
> -static inline void cros_ec_acpi_clear_gpe(void) {}
> -
> -#endif /* CONFIG_ACPI */
> -
>  #endif /* __LINUX_MFD_CROS_EC_H */
> -- 
> 2.16.1
> 

-- 
Benson Leung
Staff Software Engineer
Chrome OS Kernel
Google Inc.
bleung@google.com
Chromium OS Project
bleung@chromium.org

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices"
  2018-02-22 21:30 [PATCH] Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices" Wenkai Du
  2018-02-27  6:50 ` Benson Leung
@ 2018-03-07 16:07 ` Lee Jones
  1 sibling, 0 replies; 3+ messages in thread
From: Lee Jones @ 2018-03-07 16:07 UTC (permalink / raw)
  To: Wenkai Du; +Cc: Benson Leung, linux-kernel, Archana Patni, Rafael J . Wysocki

On Thu, 22 Feb 2018, Wenkai Du wrote:

> This reverts commit e04653a9dcf4d98defe2149c885382e5cc72082f.
> 
> It is no longer needed to install Chrome EC GPE handler to have
> GPE enabled in suspend to idle path. It is found that with this
> handler installed, EC wake up doesn't work because default EC
> event handler that can wake up system is not getting called.
> 
> Signed-off-by: Wenkai Du <wenkai.du@intel.com>
> ---
>  drivers/mfd/Makefile           |   1 -
>  drivers/mfd/cros_ec.c          |  15 ++----
>  drivers/mfd/cros_ec_acpi_gpe.c | 103 -----------------------------------------
>  include/linux/mfd/cros_ec.h    |  18 -------
>  4 files changed, 3 insertions(+), 134 deletions(-)
>  delete mode 100644 drivers/mfd/cros_ec_acpi_gpe.c

Applied, thanks.

-- 
Lee Jones
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-03-07 16:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-22 21:30 [PATCH] Revert "mfd: cros_ec: Add ACPI GPE handler for LID0 devices" Wenkai Du
2018-02-27  6:50 ` Benson Leung
2018-03-07 16:07 ` Lee Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).