When reviewing and testing the recent platform profile changes I had missed that they prevent the tpacpi platform driver from registering. This error is seen in the kernel logs, and the various tpacpi entries are not created: [ 7550.642171] platform thinkpad_acpi: Resources present before probing I believe this is because the platform_profile driver registers the device as part of it's initialisation in devm_platform_profile_register, and the thinkpad_acpi driver later fails as the resource is already used. Modified thinkpad_acpi so that it has a separate platform driver for the profile handling, leaving the existing tpacpi_pdev to register successfully. Tested on X1 Carbon G12. Fixes: 31658c916fa6 ("platform/x86: thinkpad_acpi: Use devm_platform_profile_register()") Signed-off-by: Mark Pearson <mpearson-lenovo@xxxxxxxxx> --- drivers/platform/x86/thinkpad_acpi.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index 1fcb0f99695a..1dd8f3cc5eda 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -270,6 +270,7 @@ enum tpacpi_hkey_event_t { #define TPACPI_DRVR_NAME TPACPI_FILE #define TPACPI_DRVR_SHORTNAME "tpacpi" #define TPACPI_HWMON_DRVR_NAME TPACPI_NAME "_hwmon" +#define TPACPI_PROFILE_DRVR_NAME TPACPI_NAME "_profile" #define TPACPI_NVRAM_KTHREAD_NAME "ktpacpi_nvramd" #define TPACPI_WORKQUEUE_NAME "ktpacpid" @@ -962,6 +963,7 @@ static const struct proc_ops dispatch_proc_ops = { static struct platform_device *tpacpi_pdev; static struct platform_device *tpacpi_sensors_pdev; +static struct platform_device *tpacpi_profile_pdev; static struct device *tpacpi_hwmon; static struct device *tpacpi_pprof; static struct input_dev *tpacpi_inputdev; @@ -10646,7 +10648,8 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm) "DYTC version %d: thermal mode available\n", dytc_version); /* Create platform_profile structure and register */ - tpacpi_pprof = devm_platform_profile_register(&tpacpi_pdev->dev, "thinkpad-acpi", + tpacpi_pprof = devm_platform_profile_register(&tpacpi_profile_pdev->dev, + "thinkpad-acpi-profile", NULL, &dytc_profile_ops); /* * If for some reason platform_profiles aren't enabled @@ -11815,6 +11818,8 @@ static void thinkpad_acpi_module_exit(void) if (tpacpi_sensors_pdev) platform_device_unregister(tpacpi_sensors_pdev); + if (tpacpi_profile_pdev) + platform_device_unregister(tpacpi_profile_pdev); if (tpacpi_pdev) platform_device_unregister(tpacpi_pdev); if (proc_dir) @@ -11901,6 +11906,17 @@ static int __init thinkpad_acpi_module_init(void) thinkpad_acpi_module_exit(); return ret; } + + tpacpi_profile_pdev = platform_device_register_simple(TPACPI_PROFILE_DRVR_NAME, + PLATFORM_DEVID_NONE, NULL, 0); + if (IS_ERR(tpacpi_profile_pdev)) { + ret = PTR_ERR(tpacpi_profile_pdev); + tpacpi_profile_pdev = NULL; + pr_err("unable to register platform profile device\n"); + thinkpad_acpi_module_exit(); + return ret; + } + tpacpi_sensors_pdev = platform_device_register_simple( TPACPI_HWMON_DRVR_NAME, PLATFORM_DEVID_NONE, NULL, 0); -- 2.48.1