]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ACPI: platform_profile: Add device pointer into platform profile handler
authorMario Limonciello <mario.limonciello@amd.com>
Fri, 6 Dec 2024 03:18:59 +0000 (21:18 -0600)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 10 Dec 2024 17:17:49 +0000 (19:17 +0200)
In order to let platform profile handlers manage platform profile
for their driver the core code will need a pointer to the device.

Add this to the structure and use it in the trivial driver cases.

Reviewed-by: Armin Wolf <W_Armin@gmx.de>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Maximilian Luz <luzmaximilian@gmail.com>
Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20241206031918.1537-4-mario.limonciello@amd.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/surface/surface_platform_profile.c
drivers/platform/x86/acer-wmi.c
drivers/platform/x86/amd/pmf/sps.c
drivers/platform/x86/asus-wmi.c
drivers/platform/x86/dell/alienware-wmi.c
drivers/platform/x86/dell/dell-pc.c
drivers/platform/x86/hp/hp-wmi.c
drivers/platform/x86/ideapad-laptop.c
drivers/platform/x86/inspur_platform_profile.c
drivers/platform/x86/thinkpad_acpi.c
include/linux/platform_profile.h

index 9d3e3f9458186372c707fa4ef17dcdce6eead125..b73cfdd920c6638054caeac404e2470a4fd95a70 100644 (file)
@@ -212,6 +212,7 @@ static int surface_platform_profile_probe(struct ssam_device *sdev)
        tpd->sdev = sdev;
 
        tpd->handler.name = "Surface Platform Profile";
+       tpd->handler.dev = &sdev->dev;
        tpd->handler.profile_get = ssam_platform_profile_get;
        tpd->handler.profile_set = ssam_platform_profile_set;
 
index 53fbc9b4d3df7d418fe5c4058fe78586f798c317..aca4a5746bee1c0c3f9c8ccdb85bf326d8a51327 100644 (file)
@@ -1873,12 +1873,13 @@ acer_predator_v4_platform_profile_set(struct platform_profile_handler *pprof,
        return 0;
 }
 
-static int acer_platform_profile_setup(void)
+static int acer_platform_profile_setup(struct platform_device *device)
 {
        if (quirks->predator_v4) {
                int err;
 
                platform_profile_handler.name = "acer-wmi";
+               platform_profile_handler.dev = &device->dev;
                platform_profile_handler.profile_get =
                        acer_predator_v4_platform_profile_get;
                platform_profile_handler.profile_set =
@@ -2531,7 +2532,7 @@ static int acer_platform_probe(struct platform_device *device)
                goto error_rfkill;
 
        if (has_cap(ACER_CAP_PLATFORM_PROFILE)) {
-               err = acer_platform_profile_setup();
+               err = acer_platform_profile_setup(device);
                if (err)
                        goto error_platform_profile;
        }
index e2d0cc92c4396a3f0777a5f58cb5f8fb4428f9fd..1b94af7c0e0c48b2c7a904e25e36963dc4825fb9 100644 (file)
@@ -406,6 +406,7 @@ int amd_pmf_init_sps(struct amd_pmf_dev *dev)
        }
 
        dev->pprof.name = "amd-pmf";
+       dev->pprof.dev = dev->dev;
        dev->pprof.profile_get = amd_pmf_profile_get;
        dev->pprof.profile_set = amd_pmf_profile_set;
 
index a08dc936276b9e2ee501470e7ba250df75d1b4fd..14d84cad01b49edabd86a3b1276bdd28226cf16d 100644 (file)
@@ -3877,6 +3877,7 @@ static int platform_profile_setup(struct asus_wmi *asus)
        dev_info(dev, "Using throttle_thermal_policy for platform_profile support\n");
 
        asus->platform_profile_handler.name = "asus-wmi";
+       asus->platform_profile_handler.dev = dev;
        asus->platform_profile_handler.profile_get = asus_wmi_platform_profile_get;
        asus->platform_profile_handler.profile_set = asus_wmi_platform_profile_set;
 
index f88d8984475116ac72749653902c63bcd5bd4718..78aac761327886ddcf30c18bc484f4a79ada118a 100644 (file)
@@ -1108,7 +1108,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof,
        return wmax_thermal_control(supported_thermal_profiles[profile]);
 }
 
-static int create_thermal_profile(void)
+static int create_thermal_profile(struct platform_device *platform_device)
 {
        u32 out_data;
        u8 sys_desc[4];
@@ -1157,6 +1157,7 @@ static int create_thermal_profile(void)
        pp_handler.profile_get = thermal_profile_get;
        pp_handler.profile_set = thermal_profile_set;
        pp_handler.name = "alienware-wmi";
+       pp_handler.dev = &platform_device->dev;
 
        return platform_profile_register(&pp_handler);
 }
@@ -1225,7 +1226,7 @@ static int __init alienware_wmi_init(void)
        }
 
        if (quirks->thermal) {
-               ret = create_thermal_profile();
+               ret = create_thermal_profile(platform_device);
                if (ret)
                        goto fail_prep_thermal_profile;
        }
index c0dbbd3b2306541ac84c698a3f1a2dbd38fc369a..b9a6dd7b321d9a26fedd81a649c8305403595732 100644 (file)
@@ -257,6 +257,7 @@ static int thermal_init(void)
                goto cleanup_platform_device;
        }
        thermal_handler->name = "dell-pc";
+       thermal_handler->dev = &platform_device->dev;
        thermal_handler->profile_get = thermal_platform_profile_get;
        thermal_handler->profile_set = thermal_platform_profile_set;
 
index 26cac73caf2b92f5c565ae50e8de8c913cdeab29..ffb09799142bc857b1da6bc339ffae037a14011d 100644 (file)
@@ -1565,7 +1565,7 @@ static inline void omen_unregister_powersource_event_handler(void)
        unregister_acpi_notifier(&platform_power_source_nb);
 }
 
-static int thermal_profile_setup(void)
+static int thermal_profile_setup(struct platform_device *device)
 {
        int err, tp;
 
@@ -1625,6 +1625,7 @@ static int thermal_profile_setup(void)
        }
 
        platform_profile_handler.name = "hp-wmi";
+       platform_profile_handler.dev = &device->dev;
        set_bit(PLATFORM_PROFILE_BALANCED, platform_profile_handler.choices);
        set_bit(PLATFORM_PROFILE_PERFORMANCE, platform_profile_handler.choices);
 
@@ -1664,7 +1665,7 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
        if (err < 0)
                return err;
 
-       thermal_profile_setup();
+       thermal_profile_setup(device);
 
        return 0;
 }
index cbdc965eeb2485dc78790316eb0dfbd96201765f..b6586c473ba91604965e36c2324d4366138c46a0 100644 (file)
@@ -1103,6 +1103,7 @@ static int ideapad_dytc_profile_init(struct ideapad_private *priv)
        mutex_init(&priv->dytc->mutex);
 
        priv->dytc->pprof.name = "ideapad-laptop";
+       priv->dytc->pprof.dev = &priv->platform_device->dev;
        priv->dytc->priv = priv;
        priv->dytc->pprof.profile_get = dytc_profile_get;
        priv->dytc->pprof.profile_set = dytc_profile_set;
index 03da2c8cf6789fb59ecfc4a7f652d3cccf9d7b93..5a53949bbbf5f30627a58df4361babdfc0d418b1 100644 (file)
@@ -178,6 +178,7 @@ static int inspur_wmi_probe(struct wmi_device *wdev, const void *context)
        dev_set_drvdata(&wdev->dev, priv);
 
        priv->handler.name = "inspur-wmi";
+       priv->handler.dev = &wdev->dev;
        priv->handler.profile_get = inspur_platform_profile_get;
        priv->handler.profile_set = inspur_platform_profile_set;
 
index 0e03c41e028d41f6a2334b3b481acd8f04d35a54..58af9020382c1d1a9d9e8fffc4b6bbd719d1ab96 100644 (file)
@@ -10638,6 +10638,7 @@ static int tpacpi_dytc_profile_init(struct ibm_init_struct *iibm)
        dbg_printk(TPACPI_DBG_INIT,
                        "DYTC version %d: thermal mode available\n", dytc_version);
 
+       dytc_profile.dev = &tpacpi_pdev->dev;
        /* Create platform_profile structure and register */
        err = platform_profile_register(&dytc_profile);
        /*
index 6fa988e41742880325a8ea7af3cb727d3b9e324d..daec6b9bad81f8a91383da36167ec2c40013da9c 100644 (file)
@@ -28,6 +28,7 @@ enum platform_profile_option {
 
 struct platform_profile_handler {
        const char *name;
+       struct device *dev;
        unsigned long choices[BITS_TO_LONGS(PLATFORM_PROFILE_LAST)];
        int (*profile_get)(struct platform_profile_handler *pprof,
                                enum platform_profile_option *profile);