Re: [PATCH 13/20] alienware-wmi: Split DMI table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 27.12.24 um 05:55 schrieb Kurt Borja:

On Fri, Dec 27, 2024 at 04:55:28AM +0100, Armin Wolf wrote:
Am 21.12.24 um 06:59 schrieb Kurt Borja:

Split thermal features into a new DMI table to support upcoming file
split.
Could it be that you also decided to reorder the quirk entries?
No. I'll make this split lower in the file, so it doesn't mess up the
diff.

If I did reorder it by accident I will fix it.

OK, having a clear diff would make it easier to verify that no quirk entries have been changed.

Thanks,
Armin Wolf


Thanks,
Armin WOlf

Signed-off-by: Kurt Borja <kuurtb@xxxxxxxxx>
---
   drivers/platform/x86/dell/alienware-wmi.c | 163 +++++++++-------------
   1 file changed, 69 insertions(+), 94 deletions(-)

diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c
index 0a0b72dc61ea..8ea08f5f8810 100644
--- a/drivers/platform/x86/dell/alienware-wmi.c
+++ b/drivers/platform/x86/dell/alienware-wmi.c
@@ -118,8 +118,6 @@ struct quirk_entry {
   	u8 hdmi_mux;
   	u8 amplifier;
   	u8 deepslp;
-	bool thermal;
-	bool gmode;
   };

   static struct quirk_entry *quirks;
@@ -130,8 +128,6 @@ static struct quirk_entry quirk_inspiron5675 = {
   	.hdmi_mux = 0,
   	.amplifier = 0,
   	.deepslp = 0,
-	.thermal = false,
-	.gmode = false,
   };

   static struct quirk_entry quirk_unknown = {
@@ -139,8 +135,6 @@ static struct quirk_entry quirk_unknown = {
   	.hdmi_mux = 0,
   	.amplifier = 0,
   	.deepslp = 0,
-	.thermal = false,
-	.gmode = false,
   };

   static struct quirk_entry quirk_x51_r1_r2 = {
@@ -148,8 +142,6 @@ static struct quirk_entry quirk_x51_r1_r2 = {
   	.hdmi_mux = 0,
   	.amplifier = 0,
   	.deepslp = 0,
-	.thermal = false,
-	.gmode = false,
   };

   static struct quirk_entry quirk_x51_r3 = {
@@ -157,8 +149,6 @@ static struct quirk_entry quirk_x51_r3 = {
   	.hdmi_mux = 0,
   	.amplifier = 1,
   	.deepslp = 0,
-	.thermal = false,
-	.gmode = false,
   };

   static struct quirk_entry quirk_asm100 = {
@@ -166,8 +156,6 @@ static struct quirk_entry quirk_asm100 = {
   	.hdmi_mux = 1,
   	.amplifier = 0,
   	.deepslp = 0,
-	.thermal = false,
-	.gmode = false,
   };

   static struct quirk_entry quirk_asm200 = {
@@ -175,8 +163,6 @@ static struct quirk_entry quirk_asm200 = {
   	.hdmi_mux = 1,
   	.amplifier = 0,
   	.deepslp = 1,
-	.thermal = false,
-	.gmode = false,
   };

   static struct quirk_entry quirk_asm201 = {
@@ -184,26 +170,6 @@ static struct quirk_entry quirk_asm201 = {
   	.hdmi_mux = 1,
   	.amplifier = 1,
   	.deepslp = 1,
-	.thermal = false,
-	.gmode = false,
-};
-
-static struct quirk_entry quirk_g_series = {
-	.num_zones = 2,
-	.hdmi_mux = 0,
-	.amplifier = 0,
-	.deepslp = 0,
-	.thermal = true,
-	.gmode = true,
-};
-
-static struct quirk_entry quirk_x_series = {
-	.num_zones = 2,
-	.hdmi_mux = 0,
-	.amplifier = 0,
-	.deepslp = 0,
-	.thermal = true,
-	.gmode = false,
   };

   static int __init dmi_matched(const struct dmi_system_id *dmi)
@@ -242,133 +208,140 @@ static const struct dmi_system_id alienware_quirks[] __initconst = {
   	},
   	{
   		.callback = dmi_matched,
-		.ident = "Alienware m17 R5",
+		.ident = "Alienware X51 R1",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware X51"),
   		},
-		.driver_data = &quirk_x_series,
+		.driver_data = &quirk_x51_r1_r2,
   	},
   	{
   		.callback = dmi_matched,
-		.ident = "Alienware m18 R2",
+		.ident = "Alienware X51 R2",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware X51 R2"),
   		},
-		.driver_data = &quirk_x_series,
+		.driver_data = &quirk_x51_r1_r2,
   	},
   	{
   		.callback = dmi_matched,
-		.ident = "Alienware x15 R1",
+		.ident = "Alienware X51 R3",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware X51 R3"),
   		},
-		.driver_data = &quirk_x_series,
+		.driver_data = &quirk_x51_r3,
   	},
   	{
   		.callback = dmi_matched,
-		.ident = "Alienware x17 R2",
+		.ident = "Dell Inc. Inspiron 5675",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5675"),
+		},
+		.driver_data = &quirk_inspiron5675,
+	},
+	{}
+};
+
+struct awcc_features {
+	bool gmode;
+};
+
+static struct awcc_features g_series_features = {
+	.gmode = true,
+};
+
+static struct awcc_features x_series_features = {
+	.gmode = false,
+};
+
+static const struct dmi_system_id awcc_dmi_table[] __initconst = {
+	{
+		.ident = "Alienware m17 R5",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
   		},
-		.driver_data = &quirk_x_series,
+		.driver_data = &x_series_features,
   	},
   	{
-		.callback = dmi_matched,
-		.ident = "Alienware X51 R1",
+		.ident = "Alienware m18 R2",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware X51"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"),
   		},
-		.driver_data = &quirk_x51_r1_r2,
+		.driver_data = &x_series_features,
   	},
   	{
-		.callback = dmi_matched,
-		.ident = "Alienware X51 R2",
+		.ident = "Alienware x15 R1",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware X51 R2"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"),
   		},
-		.driver_data = &quirk_x51_r1_r2,
+		.driver_data = &x_series_features,
   	},
   	{
-		.callback = dmi_matched,
-		.ident = "Alienware X51 R3",
+		.ident = "Alienware x17 R2",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware X51 R3"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"),
   		},
-		.driver_data = &quirk_x51_r3,
+		.driver_data = &x_series_features,
   	},
   	{
-		.callback = dmi_matched,
   		.ident = "Dell Inc. G15 5510",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
   			DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"),
   		},
-		.driver_data = &quirk_g_series,
+		.driver_data = &g_series_features,
   	},
   	{
-		.callback = dmi_matched,
   		.ident = "Dell Inc. G15 5511",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
   			DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"),
   		},
-		.driver_data = &quirk_g_series,
+		.driver_data = &g_series_features,
   	},
   	{
-		.callback = dmi_matched,
   		.ident = "Dell Inc. G15 5515",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
   			DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"),
   		},
-		.driver_data = &quirk_g_series,
+		.driver_data = &g_series_features,
   	},
   	{
-		.callback = dmi_matched,
   		.ident = "Dell Inc. G3 3500",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
   			DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"),
   		},
-		.driver_data = &quirk_g_series,
+		.driver_data = &g_series_features,
   	},
   	{
-		.callback = dmi_matched,
   		.ident = "Dell Inc. G3 3590",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
   			DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"),
   		},
-		.driver_data = &quirk_g_series,
+		.driver_data = &g_series_features,
   	},
   	{
-		.callback = dmi_matched,
   		.ident = "Dell Inc. G5 5500",
   		.matches = {
   			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
   			DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"),
   		},
-		.driver_data = &quirk_g_series,
-	},
-	{
-		.callback = dmi_matched,
-		.ident = "Dell Inc. Inspiron 5675",
-		.matches = {
-			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
-			DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5675"),
-		},
-		.driver_data = &quirk_inspiron5675,
+		.driver_data = &g_series_features,
   	},
-	{}
   };

+struct awcc_features *awcc;
+
   struct color_platform {
   	u8 blue;
   	u8 green;
@@ -1009,7 +982,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof,

   	priv = container_of(pprof, struct awcc_priv, pp_handler);

-	if (quirks->gmode) {
+	if (awcc->gmode) {
   		u32 gmode_status;
   		int ret;

@@ -1077,7 +1050,7 @@ static int create_thermal_profile(struct wmi_device *wdev)
   	if (bitmap_empty(priv->pp_handler.choices, PLATFORM_PROFILE_LAST))
   		return -ENODEV;

-	if (quirks->gmode) {
+	if (awcc->gmode) {
   		priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =
   			WMAX_THERMAL_MODE_GMODE;

@@ -1328,7 +1301,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context)
   	};
   	int ret = 0;

-	if (quirks->thermal)
+	if (awcc)
   		ret = alienware_awcc_setup(wdev);
   	else
   		ret = alienware_alienfx_setup(&pdata);
@@ -1338,7 +1311,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context)

   static void wmax_wmi_remove(struct wmi_device *wdev)
   {
-	if (quirks->thermal)
+	if (awcc)
   		alienware_awcc_exit(wdev);
   	else
   		alienware_alienfx_exit(wdev);
@@ -1362,6 +1335,18 @@ static struct wmi_driver alienware_wmax_wmi_driver = {

   static int __init alienware_wmax_wmi_init(void)
   {
+	const struct dmi_system_id *id;
+
+	id = dmi_first_match(awcc_dmi_table);
+	if (id)
+		awcc = id->driver_data;
+
+	if (force_platform_profile)
+		awcc = &x_series_features;
+
+	if (force_gmode)
+		awcc = &g_series_features;
+
   	return wmi_driver_register(&alienware_wmax_wmi_driver);
   }

@@ -1378,16 +1363,6 @@ static int __init alienware_wmi_init(void)
   	if (quirks == NULL)
   		quirks = &quirk_unknown;

-	if (force_platform_profile)
-		quirks->thermal = true;
-
-	if (force_gmode) {
-		if (quirks->thermal)
-			quirks->gmode = true;
-		else
-			pr_warn("force_gmode requires platform profile support\n");
-	}
-
   	if (wmi_has_guid(WMAX_CONTROL_GUID)) {
   		interface = WMAX;
   		ret = alienware_wmax_wmi_init();




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux