summaryrefslogtreecommitdiff
path: root/src/drivers/intel/dptf
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/intel/dptf')
-rw-r--r--src/drivers/intel/dptf/Kconfig7
-rw-r--r--src/drivers/intel/dptf/dptf.c23
-rw-r--r--src/drivers/intel/dptf/dptf.h1
3 files changed, 31 insertions, 0 deletions
diff --git a/src/drivers/intel/dptf/Kconfig b/src/drivers/intel/dptf/Kconfig
index 6f590b9246..a7a5760e0d 100644
--- a/src/drivers/intel/dptf/Kconfig
+++ b/src/drivers/intel/dptf/Kconfig
@@ -12,3 +12,10 @@ config DRIVERS_INTEL_DPTF_SUPPORTS_TPCH
help
When enabled, chip driver/intel/dptf will publish information to the
SSDT for the TPCH device.
+
+config DRIVERS_INTEL_DPTF_SUPPORTS_TPWR
+ def_bool n
+ depends on DRIVERS_INTEL_DPTF
+ help
+ When enabled, chip driver/intel/dptf will publish information to the
+ SSDT for TPWR device.
diff --git a/src/drivers/intel/dptf/dptf.c b/src/drivers/intel/dptf/dptf.c
index 71a25b606e..ecb338bf88 100644
--- a/src/drivers/intel/dptf/dptf.c
+++ b/src/drivers/intel/dptf/dptf.c
@@ -14,10 +14,12 @@ enum dptf_generic_participant_type {
DPTF_GENERIC_PARTICIPANT_TYPE_TSR = 0x3,
DPTF_GENERIC_PARTICIPANT_TYPE_TPCH = 0x5,
DPTF_GENERIC_PARTICIPANT_TYPE_CHARGER = 0xB,
+ DPTF_GENERIC_PARTICIPANT_TYPE_POWER = 0x11,
};
#define DEFAULT_CHARGER_STR "Battery Charger"
#define DEFAULT_TPCH_STR "Intel PCH FIVR Participant"
+#define DEFAULT_POWER_STR "Power Participant"
#define PMC_IPC_COMMAND_FIVR_SIZE 0x8
@@ -368,6 +370,24 @@ static void write_tpch_methods(const struct dptf_platform_info *platform_info)
acpigen_write_device_end(); /* TPCH Device */
}
+static void write_create_tpwr(const struct dptf_platform_info *platform_info)
+{
+ acpigen_write_device("TPWR");
+ acpigen_write_name("_HID");
+ if (platform_info->tpwr_device_hid != NULL)
+ dptf_write_hid(platform_info->use_eisa_hids, platform_info->tpwr_device_hid);
+ acpigen_write_name_string("_UID", "TPWR");
+ acpigen_write_name_string("_STR", DEFAULT_POWER_STR);
+ acpigen_write_name_integer("PTYP", DPTF_GENERIC_PARTICIPANT_TYPE_POWER);
+ acpigen_write_STA(ACPI_STATUS_DEVICE_ALL_ON);
+ acpigen_write_device_end(); /* TPWR Power Participant Device */
+}
+
+static void write_tpwr_methods(const struct dptf_platform_info *platform_info)
+{
+ write_create_tpwr(platform_info);
+}
+
/* \_SB.DPTF - note: leaves the Scope open for child devices */
static void write_open_dptf_device(const struct device *dev,
const struct dptf_platform_info *platform_info)
@@ -406,6 +426,9 @@ static void write_device_definitions(const struct device *dev)
if (CONFIG(DRIVERS_INTEL_DPTF_SUPPORTS_TPCH))
write_tpch_methods(platform_info);
+ if (CONFIG(DRIVERS_INTEL_DPTF_SUPPORTS_TPWR))
+ write_tpwr_methods(platform_info);
+
acpigen_pop_len(); /* DPTF Device (write_open_dptf_device) */
acpigen_pop_len(); /* Scope */
}
diff --git a/src/drivers/intel/dptf/dptf.h b/src/drivers/intel/dptf/dptf.h
index 877aad98e1..c80e64a9ac 100644
--- a/src/drivers/intel/dptf/dptf.h
+++ b/src/drivers/intel/dptf/dptf.h
@@ -15,6 +15,7 @@ struct dptf_platform_info {
const char *generic_hid;
const char *fan_hid;
const char *tpch_device_hid;
+ const char *tpwr_device_hid;
struct {
const char *set_fivr_low_clock_method;
const char *set_fivr_high_clock_method;