Message ID | 20250105153019.19206-15-kuurtb@gmail.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Series | platform/x86: alienware-wmi driver rework | expand |
On 1/5/2025 09:30, Kurt Borja wrote: > Split thermal features into a new DMI table to support upcoming file > split. While at it: > > Rename quirk_entry -> alienfx_features, > Rename quirks -> alienfx > > and change hdmi_mux, amplifier and deepslp types to bool, because they are > already being implicitly used as bools. > > Signed-off-by: Kurt Borja <kuurtb@gmail.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> > --- > drivers/platform/x86/dell/alienware-wmi.c | 337 ++++++++++------------ > 1 file changed, 158 insertions(+), 179 deletions(-) > > diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c > index c75ad7ef3d54..e2fcb95b506c 100644 > --- a/drivers/platform/x86/dell/alienware-wmi.c > +++ b/drivers/platform/x86/dell/alienware-wmi.c > @@ -113,102 +113,68 @@ static const enum platform_profile_option wmax_mode_to_platform_profile[THERMAL_ > [THERMAL_MODE_BASIC_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, > }; > > -struct quirk_entry { > +struct alienfx_quirks { > u8 num_zones; > - u8 hdmi_mux; > - u8 amplifier; > - u8 deepslp; > - bool thermal; > - bool gmode; > + bool hdmi_mux; > + bool amplifier; > + bool deepslp; > }; > > -static struct quirk_entry *quirks; > +static struct alienfx_quirks *alienfx; > > > -static struct quirk_entry quirk_inspiron5675 = { > +static struct alienfx_quirks quirk_inspiron5675 = { > .num_zones = 2, > - .hdmi_mux = 0, > - .amplifier = 0, > - .deepslp = 0, > - .thermal = false, > - .gmode = false, > + .hdmi_mux = false, > + .amplifier = false, > + .deepslp = false, > }; > > -static struct quirk_entry quirk_unknown = { > +static struct alienfx_quirks quirk_unknown = { > .num_zones = 2, > - .hdmi_mux = 0, > - .amplifier = 0, > - .deepslp = 0, > - .thermal = false, > - .gmode = false, > + .hdmi_mux = false, > + .amplifier = false, > + .deepslp = false, > }; > > -static struct quirk_entry quirk_x51_r1_r2 = { > +static struct alienfx_quirks quirk_x51_r1_r2 = { > .num_zones = 3, > - .hdmi_mux = 0, > - .amplifier = 0, > - .deepslp = 0, > - .thermal = false, > - .gmode = false, > + .hdmi_mux = false, > + .amplifier = false, > + .deepslp = false, > }; > > -static struct quirk_entry quirk_x51_r3 = { > +static struct alienfx_quirks quirk_x51_r3 = { > .num_zones = 4, > - .hdmi_mux = 0, > - .amplifier = 1, > - .deepslp = 0, > - .thermal = false, > - .gmode = false, > + .hdmi_mux = false, > + .amplifier = true, > + .deepslp = false, > }; > > -static struct quirk_entry quirk_asm100 = { > +static struct alienfx_quirks quirk_asm100 = { > .num_zones = 2, > - .hdmi_mux = 1, > - .amplifier = 0, > - .deepslp = 0, > - .thermal = false, > - .gmode = false, > + .hdmi_mux = true, > + .amplifier = false, > + .deepslp = false, > }; > > -static struct quirk_entry quirk_asm200 = { > +static struct alienfx_quirks quirk_asm200 = { > .num_zones = 2, > - .hdmi_mux = 1, > - .amplifier = 0, > - .deepslp = 1, > - .thermal = false, > - .gmode = false, > + .hdmi_mux = true, > + .amplifier = false, > + .deepslp = true, > }; > > -static struct quirk_entry quirk_asm201 = { > +static struct alienfx_quirks quirk_asm201 = { > .num_zones = 2, > - .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, > + .hdmi_mux = true, > + .amplifier = true, > + .deepslp = true, > }; > > static int __init dmi_matched(const struct dmi_system_id *dmi) > { > - quirks = dmi->driver_data; > + alienfx = dmi->driver_data; > return 1; > } > > @@ -240,42 +206,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { > }, > .driver_data = &quirk_asm201, > }, > - { > - .callback = dmi_matched, > - .ident = "Alienware m17 R5", > - .matches = { > - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), > - }, > - .driver_data = &quirk_x_series, > - }, > - { > - .callback = dmi_matched, > - .ident = "Alienware m18 R2", > - .matches = { > - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), > - }, > - .driver_data = &quirk_x_series, > - }, > - { > - .callback = dmi_matched, > - .ident = "Alienware x15 R1", > - .matches = { > - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), > - }, > - .driver_data = &quirk_x_series, > - }, > - { > - .callback = dmi_matched, > - .ident = "Alienware x17 R2", > - .matches = { > - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), > - }, > - .driver_data = &quirk_x_series, > - }, > { > .callback = dmi_matched, > .ident = "Alienware X51 R1", > @@ -303,60 +233,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { > }, > .driver_data = &quirk_x51_r3, > }, > - { > - .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, > - }, > - { > - .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, > - }, > - { > - .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, > - }, > - { > - .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, > - }, > - { > - .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, > - }, > - { > - .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", > @@ -431,6 +307,103 @@ struct alienfx_platdata { > > static u8 interface; > > +struct awcc_quirks { > + bool gmode; > +}; > + > +static struct awcc_quirks g_series_quirks = { > + .gmode = true, > +}; > + > +static struct awcc_quirks generic_quirks = { > + .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 m17 R5 AMD"), > + }, > + .driver_data = &generic_quirks, > + }, > + { > + .ident = "Alienware m18 R2", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), > + }, > + .driver_data = &generic_quirks, > + }, > + { > + .ident = "Alienware x15 R1", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), > + }, > + .driver_data = &generic_quirks, > + }, > + { > + .ident = "Alienware x17 R2", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), > + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), > + }, > + .driver_data = &generic_quirks, > + }, > + { > + .ident = "Dell Inc. G15 5510", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), > + }, > + .driver_data = &g_series_quirks, > + }, > + { > + .ident = "Dell Inc. G15 5511", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), > + }, > + .driver_data = &g_series_quirks, > + }, > + { > + .ident = "Dell Inc. G15 5515", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), > + }, > + .driver_data = &g_series_quirks, > + }, > + { > + .ident = "Dell Inc. G3 3500", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), > + }, > + .driver_data = &g_series_quirks, > + }, > + { > + .ident = "Dell Inc. G3 3590", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), > + }, > + .driver_data = &g_series_quirks, > + }, > + { > + .ident = "Dell Inc. G5 5500", > + .matches = { > + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), > + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), > + }, > + .driver_data = &g_series_quirks, > + }, > +}; > + > +struct awcc_quirks *awcc; > + > static int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, > void *in_args, size_t in_size, u32 *out_data) > { > @@ -612,7 +585,7 @@ static DEVICE_ATTR_RW(lighting_control_state); > static umode_t zone_attr_visible(struct kobject *kobj, > struct attribute *attr, int n) > { > - if (n < quirks->num_zones + 1) > + if (n < alienfx->num_zones + 1) > return attr->mode; > > return 0; > @@ -620,7 +593,7 @@ static umode_t zone_attr_visible(struct kobject *kobj, > > static bool zone_group_visible(struct kobject *kobj) > { > - return quirks->num_zones > 0; > + return alienfx->num_zones > 0; > } > DEFINE_SYSFS_GROUP_VISIBLE(zone); > > @@ -746,7 +719,7 @@ static DEVICE_ATTR_RW(source); > > static bool hdmi_group_visible(struct kobject *kobj) > { > - return quirks->hdmi_mux; > + return alienfx->hdmi_mux; > } > DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); > > @@ -795,7 +768,7 @@ static DEVICE_ATTR_RO(status); > > static bool amplifier_group_visible(struct kobject *kobj) > { > - return quirks->amplifier; > + return alienfx->amplifier; > } > DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); > > @@ -868,7 +841,7 @@ static DEVICE_ATTR_RW(deepsleep); > > static bool deepsleep_group_visible(struct kobject *kobj) > { > - return quirks->deepslp; > + return alienfx->deepslp; > } > DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); > > @@ -1009,7 +982,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, > { > struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); > > - if (quirks->gmode) { > + if (awcc->gmode) { > u32 gmode_status; > int ret; > > @@ -1075,7 +1048,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; > > @@ -1306,7 +1279,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) > struct platform_device *pdev; > int ret; > > - if (quirks->thermal) { > + if (awcc) { > return alienware_awcc_setup(wdev); > } else { > ret = alienware_alienfx_setup(&pdata); > @@ -1327,7 +1300,7 @@ static void wmax_wmi_remove(struct wmi_device *wdev) > { > struct platform_device *pdev; > > - if (!quirks->thermal) { > + if (!awcc) { > pdev = dev_get_drvdata(&wdev->dev); > > device_remove_groups(&pdev->dev, wmax_alienfx_groups); > @@ -1353,6 +1326,22 @@ 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 = &generic_quirks; > + > + if (force_gmode) { > + if (awcc) > + awcc->gmode = true; > + else > + pr_warn("force_gmode requires platform profile support\n"); > + } > + > return wmi_driver_register(&alienware_wmax_wmi_driver); > } > > @@ -1366,18 +1355,8 @@ static int __init alienware_wmi_init(void) > int ret; > > dmi_check_system(alienware_quirks); > - 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 (!alienfx) > + alienfx = &quirk_unknown; > > if (wmi_has_guid(WMAX_CONTROL_GUID)) { > interface = WMAX;
diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index c75ad7ef3d54..e2fcb95b506c 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -113,102 +113,68 @@ static const enum platform_profile_option wmax_mode_to_platform_profile[THERMAL_ [THERMAL_MODE_BASIC_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, }; -struct quirk_entry { +struct alienfx_quirks { u8 num_zones; - u8 hdmi_mux; - u8 amplifier; - u8 deepslp; - bool thermal; - bool gmode; + bool hdmi_mux; + bool amplifier; + bool deepslp; }; -static struct quirk_entry *quirks; +static struct alienfx_quirks *alienfx; -static struct quirk_entry quirk_inspiron5675 = { +static struct alienfx_quirks quirk_inspiron5675 = { .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_unknown = { +static struct alienfx_quirks quirk_unknown = { .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_x51_r1_r2 = { +static struct alienfx_quirks quirk_x51_r1_r2 = { .num_zones = 3, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_x51_r3 = { +static struct alienfx_quirks quirk_x51_r3 = { .num_zones = 4, - .hdmi_mux = 0, - .amplifier = 1, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = true, + .deepslp = false, }; -static struct quirk_entry quirk_asm100 = { +static struct alienfx_quirks quirk_asm100 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = true, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_asm200 = { +static struct alienfx_quirks quirk_asm200 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 0, - .deepslp = 1, - .thermal = false, - .gmode = false, + .hdmi_mux = true, + .amplifier = false, + .deepslp = true, }; -static struct quirk_entry quirk_asm201 = { +static struct alienfx_quirks quirk_asm201 = { .num_zones = 2, - .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, + .hdmi_mux = true, + .amplifier = true, + .deepslp = true, }; static int __init dmi_matched(const struct dmi_system_id *dmi) { - quirks = dmi->driver_data; + alienfx = dmi->driver_data; return 1; } @@ -240,42 +206,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { }, .driver_data = &quirk_asm201, }, - { - .callback = dmi_matched, - .ident = "Alienware m17 R5", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware m18 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware x15 R1", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware x17 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data = &quirk_x_series, - }, { .callback = dmi_matched, .ident = "Alienware X51 R1", @@ -303,60 +233,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { }, .driver_data = &quirk_x51_r3, }, - { - .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, - }, - { - .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, - }, - { - .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, - }, - { - .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, - }, - { - .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, - }, - { - .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", @@ -431,6 +307,103 @@ struct alienfx_platdata { static u8 interface; +struct awcc_quirks { + bool gmode; +}; + +static struct awcc_quirks g_series_quirks = { + .gmode = true, +}; + +static struct awcc_quirks generic_quirks = { + .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 m17 R5 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m18 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x15 R1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x17 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Dell Inc. G15 5510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5511", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5515", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3590", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G5 5500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data = &g_series_quirks, + }, +}; + +struct awcc_quirks *awcc; + static int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, void *in_args, size_t in_size, u32 *out_data) { @@ -612,7 +585,7 @@ static DEVICE_ATTR_RW(lighting_control_state); static umode_t zone_attr_visible(struct kobject *kobj, struct attribute *attr, int n) { - if (n < quirks->num_zones + 1) + if (n < alienfx->num_zones + 1) return attr->mode; return 0; @@ -620,7 +593,7 @@ static umode_t zone_attr_visible(struct kobject *kobj, static bool zone_group_visible(struct kobject *kobj) { - return quirks->num_zones > 0; + return alienfx->num_zones > 0; } DEFINE_SYSFS_GROUP_VISIBLE(zone); @@ -746,7 +719,7 @@ static DEVICE_ATTR_RW(source); static bool hdmi_group_visible(struct kobject *kobj) { - return quirks->hdmi_mux; + return alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); @@ -795,7 +768,7 @@ static DEVICE_ATTR_RO(status); static bool amplifier_group_visible(struct kobject *kobj) { - return quirks->amplifier; + return alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); @@ -868,7 +841,7 @@ static DEVICE_ATTR_RW(deepsleep); static bool deepsleep_group_visible(struct kobject *kobj) { - return quirks->deepslp; + return alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); @@ -1009,7 +982,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, { struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); - if (quirks->gmode) { + if (awcc->gmode) { u32 gmode_status; int ret; @@ -1075,7 +1048,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; @@ -1306,7 +1279,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) struct platform_device *pdev; int ret; - if (quirks->thermal) { + if (awcc) { return alienware_awcc_setup(wdev); } else { ret = alienware_alienfx_setup(&pdata); @@ -1327,7 +1300,7 @@ static void wmax_wmi_remove(struct wmi_device *wdev) { struct platform_device *pdev; - if (!quirks->thermal) { + if (!awcc) { pdev = dev_get_drvdata(&wdev->dev); device_remove_groups(&pdev->dev, wmax_alienfx_groups); @@ -1353,6 +1326,22 @@ 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 = &generic_quirks; + + if (force_gmode) { + if (awcc) + awcc->gmode = true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + return wmi_driver_register(&alienware_wmax_wmi_driver); } @@ -1366,18 +1355,8 @@ static int __init alienware_wmi_init(void) int ret; dmi_check_system(alienware_quirks); - 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 (!alienfx) + alienfx = &quirk_unknown; if (wmi_has_guid(WMAX_CONTROL_GUID)) { interface = WMAX;
Split thermal features into a new DMI table to support upcoming file split. While at it: Rename quirk_entry -> alienfx_features, Rename quirks -> alienfx and change hdmi_mux, amplifier and deepslp types to bool, because they are already being implicitly used as bools. Signed-off-by: Kurt Borja <kuurtb@gmail.com> --- drivers/platform/x86/dell/alienware-wmi.c | 337 ++++++++++------------ 1 file changed, 158 insertions(+), 179 deletions(-)