# SPDX-License-Identifier: GPL-2.0-only
config WILCO_EC
	tristate "ChromeOS Wilco Embedded Controller"
	depends on ACPI && X86 && CROS_EC_LPC && LEDS_CLASS
	help
	  If you say Y here, you get support for talking to the ChromeOS
	  Wilco EC over an eSPI bus. This uses a simple byte-level protocol
	  with a checksum.

	  To compile this driver as a module, choose M here: the
	  module will be called wilco_ec.

config WILCO_EC_DEBUGFS
	tristate "Enable raw access to EC via debugfs"
	depends on WILCO_EC
	help
	  If you say Y here, you get support for sending raw commands to
	  the Wilco EC via debugfs.  These commands do not do any byte
	  manipulation and allow for testing arbitrary commands.  This
	  interface is intended for debug only and will not be present
	  on production devices.

config WILCO_EC_EVENTS
	tristate "Enable event forwarding from EC to userspace"
	depends on WILCO_EC
	help
	  If you say Y here, you get support for the EC to send events
	  (such as power state changes) to userspace. The EC sends the events
	  over ACPI, and a driver queues up the events to be read by a
	  userspace daemon from /dev/wilco_event using read() and poll().

config WILCO_EC_CHARGE_SCHEDULE
	tristate "Enable Peak Shift and Advanced Battery Charging support"
	depends on WILCO_EC
	help
	  If you say Y here, you get support to control two charge-scheduling
	  policies managed by the EC, Peak Shift and Advanced Charging. Peak
	  Shift is a power saving policy that minimizes AC usage during the
	  peak-usage times of the day. Advanced Charging Mode maximizes battery
	  health by adjusting the charging algorithm throughout the day. For
	  userspace interface and more info see
	  Documentation/ABI/testing/sysfs-platform-wilco-ec

config WILCO_EC_TELEMETRY
	tristate "Enable querying telemetry data from EC"
	depends on WILCO_EC
	help
	  If you say Y here, you get support to query EC telemetry data from
	  /dev/wilco_telem0 using write() and then read().
