Unverified Commit 7c63fe4d authored by Mario Limonciello's avatar Mario Limonciello Committed by Ilpo Järvinen
Browse files

platform/x86/dell: dell-pc: Create platform device



In order to have a device for the platform profile core to reference
create a platform device for dell-pc.

While doing this change the memory allocation for the thermal handler
to be device managed to follow the lifecycle of that device.

Reviewed-by: default avatarArmin Wolf <W_Armin@gmx.de>
Tested-by: default avatarMark Pearson <mpearson-lenovo@squebb.ca>
Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: default avatarMark Pearson <mpearson-lenovo@squebb.ca>
Signed-off-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20241206031918.1537-3-mario.limonciello@amd.com


Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent 549de562
Loading
Loading
Loading
Loading
+24 −10
Original line number Diff line number Diff line
@@ -18,10 +18,13 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_profile.h>
#include <linux/platform_device.h>
#include <linux/slab.h>

#include "dell-smbios.h"

static struct platform_device *platform_device;

static const struct dmi_system_id dell_device_table[] __initconst = {
	{
		.ident = "Dell Inc.",
@@ -244,9 +247,15 @@ static int thermal_init(void)
	if (!supported_modes)
		return 0;

	thermal_handler = kzalloc(sizeof(*thermal_handler), GFP_KERNEL);
	if (!thermal_handler)
		return -ENOMEM;
	platform_device = platform_device_register_simple("dell-pc", PLATFORM_DEVID_NONE, NULL, 0);
	if (IS_ERR(platform_device))
		return PTR_ERR(platform_device);

	thermal_handler = devm_kzalloc(&platform_device->dev, sizeof(*thermal_handler), GFP_KERNEL);
	if (!thermal_handler) {
		ret = -ENOMEM;
		goto cleanup_platform_device;
	}
	thermal_handler->name = "dell-pc";
	thermal_handler->profile_get = thermal_platform_profile_get;
	thermal_handler->profile_set = thermal_platform_profile_set;
@@ -262,20 +271,25 @@ static int thermal_init(void)

	/* Clean up if failed */
	ret = platform_profile_register(thermal_handler);
	if (ret) {
		kfree(thermal_handler);
	if (ret)
		goto cleanup_thermal_handler;

	return 0;

cleanup_thermal_handler:
	thermal_handler = NULL;
	}

cleanup_platform_device:
	platform_device_unregister(platform_device);

	return ret;
}

static void thermal_cleanup(void)
{
	if (thermal_handler) {
	if (thermal_handler)
		platform_profile_remove();
		kfree(thermal_handler);
	}
	platform_device_unregister(platform_device);
}

static int __init dell_init(void)