diff options
author | Hans de Goede <hdegoede@redhat.com> | 2022-09-27 14:57:38 +0200 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2022-09-27 14:57:38 +0200 |
commit | a283781baa0c38a8e9c7b26780e3ee7a91a4f186 (patch) | |
tree | 257446cf3790b01bc6f6da5c744031891a99d9ae /drivers/platform | |
parent | 9732f9c7b4a0c18820cbf9c74f7c8abde60f2834 (diff) | |
parent | 22ee98cb696e95b05a188756d479d382d93559ef (diff) |
Merge branch 'platform-drivers-x86-amd-pmf' into review-hans
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/x86/amd/pmf/acpi.c | 38 | ||||
-rw-r--r-- | drivers/platform/x86/amd/pmf/core.c | 1 | ||||
-rw-r--r-- | drivers/platform/x86/amd/pmf/pmf.h | 1 |
3 files changed, 24 insertions, 16 deletions
diff --git a/drivers/platform/x86/amd/pmf/acpi.c b/drivers/platform/x86/amd/pmf/acpi.c index 05a2b8a056fc..081e84e116e7 100644 --- a/drivers/platform/x86/amd/pmf/acpi.c +++ b/drivers/platform/x86/amd/pmf/acpi.c @@ -243,6 +243,28 @@ int apmf_get_dyn_slider_def_dc(struct amd_pmf_dev *pdev, struct apmf_dyn_slider_ return apmf_if_call_store_buffer(pdev, APMF_FUNC_DYN_SLIDER_DC, data, sizeof(*data)); } +int apmf_install_handler(struct amd_pmf_dev *pmf_dev) +{ + acpi_handle ahandle = ACPI_HANDLE(pmf_dev->dev); + acpi_status status; + + /* Install the APMF Notify handler */ + if (is_apmf_func_supported(pmf_dev, APMF_FUNC_AUTO_MODE) && + is_apmf_func_supported(pmf_dev, APMF_FUNC_SBIOS_REQUESTS)) { + status = acpi_install_notify_handler(ahandle, ACPI_ALL_NOTIFY, + apmf_event_handler, pmf_dev); + if (ACPI_FAILURE(status)) { + dev_err(pmf_dev->dev, "failed to install notify handler\n"); + return -ENODEV; + } + + /* Call the handler once manually to catch up with possibly missed notifies. */ + apmf_event_handler(ahandle, 0, pmf_dev); + } + + return 0; +} + void apmf_acpi_deinit(struct amd_pmf_dev *pmf_dev) { acpi_handle ahandle = ACPI_HANDLE(pmf_dev->dev); @@ -257,8 +279,6 @@ void apmf_acpi_deinit(struct amd_pmf_dev *pmf_dev) int apmf_acpi_init(struct amd_pmf_dev *pmf_dev) { - acpi_handle ahandle = ACPI_HANDLE(pmf_dev->dev); - acpi_status status; int ret; ret = apmf_if_verify_interface(pmf_dev); @@ -279,20 +299,6 @@ int apmf_acpi_init(struct amd_pmf_dev *pmf_dev) schedule_delayed_work(&pmf_dev->heart_beat, 0); } - /* Install the APMF Notify handler */ - if (is_apmf_func_supported(pmf_dev, APMF_FUNC_AUTO_MODE) && - is_apmf_func_supported(pmf_dev, APMF_FUNC_SBIOS_REQUESTS)) { - status = acpi_install_notify_handler(ahandle, - ACPI_ALL_NOTIFY, - apmf_event_handler, pmf_dev); - if (ACPI_FAILURE(status)) { - dev_err(pmf_dev->dev, "failed to install notify handler\n"); - return -ENODEV; - } - /* Call the handler once manually to catch up with possibly missed notifies. */ - apmf_event_handler(ahandle, 0, pmf_dev); - } - out: return ret; } diff --git a/drivers/platform/x86/amd/pmf/core.c b/drivers/platform/x86/amd/pmf/core.c index 44fe30726b62..a5f5a4bcff6d 100644 --- a/drivers/platform/x86/amd/pmf/core.c +++ b/drivers/platform/x86/amd/pmf/core.c @@ -369,6 +369,7 @@ static int amd_pmf_probe(struct platform_device *pdev) apmf_acpi_init(dev); platform_set_drvdata(pdev, dev); amd_pmf_init_features(dev); + apmf_install_handler(dev); amd_pmf_dbgfs_register(dev); mutex_init(&dev->lock); diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/pmf/pmf.h index e5dc3ae238c7..84bbe2c6ea61 100644 --- a/drivers/platform/x86/amd/pmf/pmf.h +++ b/drivers/platform/x86/amd/pmf/pmf.h @@ -381,6 +381,7 @@ int is_apmf_func_supported(struct amd_pmf_dev *pdev, unsigned long index); int amd_pmf_send_cmd(struct amd_pmf_dev *dev, u8 message, bool get, u32 arg, u32 *data); int amd_pmf_init_metrics_table(struct amd_pmf_dev *dev); int amd_pmf_get_power_source(void); +int apmf_install_handler(struct amd_pmf_dev *pmf_dev); /* SPS Layer */ int amd_pmf_get_pprof_modes(struct amd_pmf_dev *pmf); |