From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yb1-f179.google.com (mail-yb1-f179.google.com [209.85.219.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CF291F7904; Fri, 7 Feb 2025 14:08:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937292; cv=none; b=Mqe7+XhDaLylvswVtDMPagO5St4qzwc826gNyLhrSzl+z/yIh82VYSmqotP74s2+BSqJa0DHcZ0x0RX2eVbgrzFVQBCDebYlmCV3UiIKoMJfigOstwCoST3HdT7Fz+Nj+eWSamoflu2++sCVFWtdMMs/LzkJmHvjp9v9f5/w9j8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937292; c=relaxed/simple; bh=49eKxDqQtP3po1mBGZJU1bNO+vDFpnsz8KG9NigI21E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gc/lhopA6GGiveoAn/PorTvXzvYPJfJgM0s02oGvZHTl5EMKzzonNg8AwXSosqmRHHPGT7iNAe9NnkWHkl9bp/p5IZhzLUA/UnESSeenBZ26Ai4BwUHHaJrcTE0nEgjMP6FeNwg7qfLMH4IMytsxdeSncukfwZ28DbgSw1XUFUs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=FYu3WOtP; arc=none smtp.client-ip=209.85.219.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="FYu3WOtP" Received: by mail-yb1-f179.google.com with SMTP id 3f1490d57ef6-e3c8ae3a3b2so1661549276.0; Fri, 07 Feb 2025 06:08:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937289; x=1739542089; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=78jUbb12GWv+OJbtaS4vNafGBdENBEI5UTnuBg/ppNE=; b=FYu3WOtPIf1J/HaGqV/mNoOk9Lz8gLFS/c9CVR7LGQzVz1MoND/LIFCKZcQW5alIaM 5bC2lnXP0gFXlJ+Ks8T+dSb654dwkD0Q7UawHo8PR/JngqC/bxUv5uTH4XAxVcg7u5IG QkUH0oX89wlcjSEB/8VryI2fdnELl8zSYveXhOGXvUD/3K4fCWTR4Z3iq27MH21+Pm4S MrA37MDiEFNAvxXlGz9sD502wBLJS2408br3sqMlkeM9u2P//MEirbELdf8vdx1YvZn7 f2mMNRp7eFQA2dNGuyRDbAaz2bHC7sH5X0TD9Eu/tGY3lMDU/b+bzmF7eNweuSHLolyY Azag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937289; x=1739542089; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=78jUbb12GWv+OJbtaS4vNafGBdENBEI5UTnuBg/ppNE=; b=niTr7PnkuBulSS1HF+44g5U++tNAesMly8MuNlVxWTqPAonxlIwiK7rqmntC7kTHMj qBG5ML7W9Js5qT0ZZ7T+z4WUdVA09pxRHOl8/zJfQq/c0F/c5lkTA0gTJqxM03PQjT3B sR0W7ueI8KjLFJrYyyvEvTC9wCoVewNVfopCIY6sZ3NulLuhPDc0PzWpTTUGx/DRRUeD C2JECdwz5Y3bllGTclkmAZ61KmOIwB6N5Ysv18ROSFqqeUo1Cp1FGLAWNJCWNCIGs59t LtlvNzer5XsCeIE+MAdsDV8ykVi0vYYC7fD6hMs6zZOJEf9P3GDQOo1OtehLInYkbDnv BUpg== X-Forwarded-Encrypted: i=1; AJvYcCXSxmNvu4pQYByqh0EOIgdqyOZBFp8LUdMtFiI+4WuRUMgpxO3xZpkKJVatD69Jszf5TjbRUCU1M3ifIDw=@vger.kernel.org X-Gm-Message-State: AOJu0YzEA8GDHs+8buPn+l2wu+dKk39R6aoZ7K8UoDSPeKhBkM8SVZvH gSM0KC8/bf7X8lijzxyHlSabE8FZFyM+xeCuhoI5Jpq+i+GtXaznW5sYTg== X-Gm-Gg: ASbGncvNON+YnneRY+Iw03DcFP1J4OfkHNzm63p17qUNMnUn3id8ioXV16hbo1y2Qzu 0WzaEupERZdaFQOkG05u7Xa46iIxoDVJbxE4n6rd/nmMruoPOURuPU/8SE0WYlJZO/npKwhObXX l1MQAvTiuCL8DAgxPK5qmtdkbfC1Ogq1PAwxmpAEj8XNs526Cgx0pmIJKZXL9Es50ai1e0QB05o 1828PM/s4d5/7AHqhSa//gAi4qZILFNNaMayzfFladMhuK6Mzxodf6sIQ2D6jPsLiVdgqQkhb4M ePmU9gBIpMsa+9STGGQR29E= X-Google-Smtp-Source: AGHT+IFevhJ9cciL54SwiH08riEH6aj6edC4nYaIu0IoLYwxfoaH0poaRA80/tyM9UfWvTC9ZdPMOA== X-Received: by 2002:a05:690c:3610:b0:6f9:a997:3a52 with SMTP id 00721157ae682-6f9b29e29f0mr24671197b3.38.1738937289128; Fri, 07 Feb 2025 06:08:09 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:08 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 01/14] platform/x86: alienware-wmi: Add a state container for LED control feature Date: Fri, 7 Feb 2025 09:07:30 -0500 Message-ID: <20250207140743.16822-2-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a state container for the "alienware-wmi" platform device and initialize it on the new alienfx_probe(). Migrate all LED control functions to use this state container to support upcoming file split. Additionally move the led_classdev registration to the platform driver probe and make it device managed. Drop alienware_zone_init() and alienware_zone_exit() because they are no longer needed and mimic the `quirks->num_zone > 0` check by failing the platform device probe. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 125 ++++++++++++---------- 1 file changed, 68 insertions(+), 57 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index e252e0cf47ef..ab86deb1adb9 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -413,13 +413,18 @@ struct wmax_u32_args { u8 arg3; }; =20 +struct alienfx_priv { + struct platform_device *pdev; + struct led_classdev global_led; + struct color_platform colors[4]; + u8 global_brightness; + u8 lighting_control_state; +}; + static struct platform_device *platform_device; -static struct color_platform colors[4]; static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_= LAST]; =20 static u8 interface; -static u8 lighting_control_state; -static u8 global_brightness; =20 /* * Helpers used for zone control @@ -451,7 +456,7 @@ static int parse_rgb(const char *buf, struct color_plat= form *colors) /* * Individual RGB zone control */ -static int alienware_update_led(u8 location) +static int alienware_update_led(struct alienfx_priv *priv, u8 location) { int method_id; acpi_status status; @@ -461,21 +466,21 @@ static int alienware_update_led(u8 location) struct wmax_led_args wmax_basic_args; if (interface =3D=3D WMAX) { wmax_basic_args.led_mask =3D 1 << location; - wmax_basic_args.colors =3D colors[location]; - wmax_basic_args.state =3D lighting_control_state; + wmax_basic_args.colors =3D priv->colors[location]; + wmax_basic_args.state =3D priv->lighting_control_state; guid =3D WMAX_CONTROL_GUID; method_id =3D WMAX_METHOD_ZONE_CONTROL; =20 input.length =3D sizeof(wmax_basic_args); input.pointer =3D &wmax_basic_args; } else { - legacy_args.colors =3D colors[location]; - legacy_args.brightness =3D global_brightness; + legacy_args.colors =3D priv->colors[location]; + legacy_args.brightness =3D priv->global_brightness; legacy_args.state =3D 0; - if (lighting_control_state =3D=3D LEGACY_BOOTING || - lighting_control_state =3D=3D LEGACY_SUSPEND) { + if (priv->lighting_control_state =3D=3D LEGACY_BOOTING || + priv->lighting_control_state =3D=3D LEGACY_SUSPEND) { guid =3D LEGACY_POWER_CONTROL_GUID; - legacy_args.state =3D lighting_control_state; + legacy_args.state =3D priv->lighting_control_state; } else guid =3D LEGACY_CONTROL_GUID; method_id =3D location + 1; @@ -494,22 +499,26 @@ static int alienware_update_led(u8 location) static ssize_t zone_show(struct device *dev, struct device_attribute *attr, char *buf, u8 location) { + struct alienfx_priv *priv =3D dev_get_drvdata(dev); + struct color_platform *colors =3D &priv->colors[location]; + return sprintf(buf, "red: %d, green: %d, blue: %d\n", - colors[location].red, colors[location].green, - colors[location].blue); + colors->red, colors->green, colors->blue); =20 } =20 static ssize_t zone_store(struct device *dev, struct device_attribute *att= r, const char *buf, size_t count, u8 location) { + struct alienfx_priv *priv =3D dev_get_drvdata(dev); + struct color_platform *colors =3D &priv->colors[location]; int ret; =20 - ret =3D parse_rgb(buf, &colors[location]); + ret =3D parse_rgb(buf, colors); if (ret) return ret; =20 - ret =3D alienware_update_led(location); + ret =3D alienware_update_led(priv, location); =20 return ret ? ret : count; } @@ -577,9 +586,11 @@ static ssize_t lighting_control_state_show(struct devi= ce *dev, struct device_attribute *attr, char *buf) { - if (lighting_control_state =3D=3D LEGACY_BOOTING) + struct alienfx_priv *priv =3D dev_get_drvdata(dev); + + if (priv->lighting_control_state =3D=3D LEGACY_BOOTING) return sysfs_emit(buf, "[booting] running suspend\n"); - else if (lighting_control_state =3D=3D LEGACY_SUSPEND) + else if (priv->lighting_control_state =3D=3D LEGACY_SUSPEND) return sysfs_emit(buf, "booting running [suspend]\n"); =20 return sysfs_emit(buf, "booting [running] suspend\n"); @@ -589,6 +600,7 @@ static ssize_t lighting_control_state_store(struct devi= ce *dev, struct device_attribute *attr, const char *buf, size_t count) { + struct alienfx_priv *priv =3D dev_get_drvdata(dev); u8 val; =20 if (strcmp(buf, "booting\n") =3D=3D 0) @@ -600,9 +612,9 @@ static ssize_t lighting_control_state_store(struct devi= ce *dev, else val =3D WMAX_RUNNING; =20 - lighting_control_state =3D val; + priv->lighting_control_state =3D val; pr_debug("alienware-wmi: updated control state to %d\n", - lighting_control_state); + priv->lighting_control_state); =20 return count; } @@ -662,46 +674,26 @@ static int wmax_brightness(int brightness) static void global_led_set(struct led_classdev *led_cdev, enum led_brightness brightness) { + struct alienfx_priv *priv =3D container_of(led_cdev, struct alienfx_priv, + global_led); int ret; - global_brightness =3D brightness; + + priv->global_brightness =3D brightness; + if (interface =3D=3D WMAX) ret =3D wmax_brightness(brightness); else - ret =3D alienware_update_led(0); + ret =3D alienware_update_led(priv, 0); if (ret) pr_err("LED brightness update failed\n"); } =20 static enum led_brightness global_led_get(struct led_classdev *led_cdev) { - return global_brightness; -} - -static struct led_classdev global_led =3D { - .brightness_set =3D global_led_set, - .brightness_get =3D global_led_get, - .name =3D "alienware::global_brightness", -}; + struct alienfx_priv *priv =3D container_of(led_cdev, struct alienfx_priv, + global_led); =20 -static int alienware_zone_init(struct platform_device *dev) -{ - if (interface =3D=3D WMAX) { - lighting_control_state =3D WMAX_RUNNING; - } else if (interface =3D=3D LEGACY) { - lighting_control_state =3D LEGACY_RUNNING; - } - global_led.max_brightness =3D 0x0F; - global_brightness =3D global_led.max_brightness; - - return led_classdev_register(&dev->dev, &global_led); -} - -static void alienware_zone_exit(struct platform_device *dev) -{ - if (!quirks->num_zones) - return; - - led_classdev_unregister(&global_led); + return priv->global_brightness; } =20 static acpi_status alienware_wmax_command(void *in_args, size_t in_size, @@ -1157,6 +1149,33 @@ static int create_thermal_profile(struct platform_de= vice *platform_device) /* * Platform Driver */ +static int alienfx_probe(struct platform_device *pdev) +{ + struct alienfx_priv *priv; + + if (!quirks->num_zones) + return -ENODEV; + + priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + if (interface =3D=3D WMAX) + priv->lighting_control_state =3D WMAX_RUNNING; + else + priv->lighting_control_state =3D LEGACY_RUNNING; + + priv->pdev =3D pdev; + priv->global_led.name =3D "alienware::global_brightness"; + priv->global_led.brightness_set =3D global_led_set; + priv->global_led.brightness_get =3D global_led_get; + priv->global_led.max_brightness =3D 0x0F; + priv->global_brightness =3D priv->global_led.max_brightness; + platform_set_drvdata(pdev, priv); + + return devm_led_classdev_register(&pdev->dev, &priv->global_led); +} + static const struct attribute_group *alienfx_groups[] =3D { &zone_attribute_group, &hdmi_attribute_group, @@ -1170,6 +1189,7 @@ static struct platform_driver platform_driver =3D { .name =3D "alienware-wmi", .dev_groups =3D alienfx_groups, }, + .probe =3D alienfx_probe, }; =20 static int __init alienware_wmi_init(void) @@ -1217,16 +1237,8 @@ static int __init alienware_wmi_init(void) goto fail_prep_thermal_profile; } =20 - if (quirks->num_zones > 0) { - ret =3D alienware_zone_init(platform_device); - if (ret) - goto fail_prep_zones; - } - return 0; =20 -fail_prep_zones: - alienware_zone_exit(platform_device); fail_prep_thermal_profile: platform_device_del(platform_device); fail_platform_device2: @@ -1241,7 +1253,6 @@ module_init(alienware_wmi_init); =20 static void __exit alienware_wmi_exit(void) { - alienware_zone_exit(platform_device); platform_device_unregister(platform_device); platform_driver_unregister(&platform_driver); } --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f175.google.com (mail-yw1-f175.google.com [209.85.128.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B5CC22068B; Fri, 7 Feb 2025 14:08:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937294; cv=none; b=Bwvg/Tu5u13h3YYnHJ/6T3RtoNr4nKlDCrzqBx5N4D3Z9B/IkYn2/GQCjWAJpLKzDJBJfYfeAsQLSw+9BsYp2Ljwjb2kWWjNSP7Tqka07a2yfMPXxmoR+K43dXmeFo8C2iJIs1z0KBOK0wEeB6SNNwgu2OtQ+2QOVjX9gD29kTw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937294; c=relaxed/simple; bh=pFOd5OL2a6LO2xbS7qts8y3TQPrzRuVcyofMbUr0fok=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dO6rBp5cLN2XIhkLhbMAUHZfuRlhXZ/DgfixvQXAbKwQk4drbsw3drT4ngoICcxpEf7TbnztB4t70eK6zil1Q56dJVAsdHVQBmRJ4GWSRc0miaOjmU9fYo/dYmesJM9Ho1mF07WRbpOjMhqcQpfjRSEW4CVVfXUCU3U0HEI/haA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XPzBiigi; arc=none smtp.client-ip=209.85.128.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XPzBiigi" Received: by mail-yw1-f175.google.com with SMTP id 00721157ae682-6f678a27787so20238027b3.1; Fri, 07 Feb 2025 06:08:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937291; x=1739542091; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SA+zyldD3XpeByN7bIqz8d5mixA6TM9KjPHEPee9EzA=; b=XPzBiigiWA8FqPiorK0CwW+FkqAkEWbRsnlKnVjYzVKfIniJ1+BthG20BtEqtIVCxQ s1PUmgzehJbKIDwpXSQL4BE7W2qxsGcX1OuAXZ0X5q1NHXVnbmMNMJJ0nYVMLdXbNLlf 0Ajt1EMiQYjEmP5VrQ3+eFv+J3MQXFVBaGVwcCb6pi9nQFddnBmxCRWoq5vYRAwQWAzD dwABsGXMhmjJpSTWFOjX+m42f0PpY+7Eo7nmyRzq045rxgScrcSPiVTWumVJoIkZwINb SO5KgP2Yrz8EcOBwoxmS9P1XzQ3M5mGk8llLO/Uq2lTUzyj3/CGo/bqi4ZZQFBXkjCq2 1HAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937291; x=1739542091; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SA+zyldD3XpeByN7bIqz8d5mixA6TM9KjPHEPee9EzA=; b=HM112Dnpk01V3kvV2Qgrs0Vba3bfjMdpvm21WwoTO20qGAALToXoV516OI2QaM3OyJ xmSvE9ux9NUGtn8NkT9Ot404Ib4y5tRSjyCgJtyjg36yFw0ZS9/XhMBslDLwFxQQfAFd FjCSynF5H0Tf+uIBDVCDlM1uHBuGHVfKpocqvVH9cuwhWCfInLC6/x5mdDu/rqLvxlH3 7U65brXi+i8/3MWTtqMSOlOHvHDs2fSyzWk2vTXTEFx1kVPYcF6cvVtBKVykJ1Nvj6Nn NgYei9KiQ0q6MZqJkavsPVhyc3eXn7Tr1yYHkfoNaxEdgDMAyjR0Pfn1tfWUcYLZQoKc et5g== X-Forwarded-Encrypted: i=1; AJvYcCXAftgHDJXe1CvX5NhISqmlrClAB7QUsIP3+NkxKOIubjOPxZvijKMDROJ0UKMwmc5yiaPUkvfuvdN7rM4=@vger.kernel.org X-Gm-Message-State: AOJu0YxWbaO1XD99eNRpxkblEnKPVdUYcS1mot/NRfeP3V4V1hP+XNiz p3bseXvnx2NO9sK0worPaVP6qBlXoOWZ2tLPRT4VWqIZKiKZVoCQ22vpTA== X-Gm-Gg: ASbGnctFethMnxZisSL3OkkEGJ5TlZvKKyHPW95scOGgHkRqPoCPH4C0Ki4k9/k9Yn+ F9ErSqt4eRYdeF0ST7gcdoKrS/255tgVxe2XXYarw2kobJkDqV2Eb/7xD8KHjRjIcT3hYhQTIHl ncWCWsxVJAUUuvACV5CY5LD4PXE6wdf/JrCrf3ycrGs5X8FQAP17pmLIzRsbkCqs6cU+3y0kcXz wDbBwFdRXifTsu9DydCj+eNR7WEIGg4dVhD9Ldk9p0Omk3ogw46D0Lxjr8UNBmdqKTW74APT9gC konU1sk0bVldloSCjD5j18o= X-Google-Smtp-Source: AGHT+IELFvB3VQJ1AxcFrkBgW31Dn18JOKogaby8ikCeY9ALwy4gSSzTNJNLwUSpdtQT1l1RsFHa8g== X-Received: by 2002:a05:690c:7449:b0:6ef:79d8:c908 with SMTP id 00721157ae682-6f9b2878db7mr25300327b3.14.1738937290804; Fri, 07 Feb 2025 06:08:10 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:10 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 02/14] platform/x86: alienware-wmi: Add WMI Drivers Date: Fri, 7 Feb 2025 09:07:31 -0500 Message-ID: <20250207140743.16822-3-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add WMI drivers for LEGACY and WMAX devices. This involves moving the platform device registration to a helper function that is now called from the driver's preferred WMI device driver probe. In the case of the WMAX this is done only if `!quirks->thermal` because the newer WMAX interface doesn't support any of the LED features of this driver. This also eliminates the need to check for `quirks->num_zones > 0` inside alienfx_probe(). Only one WMI driver is registered on module initialization to prevent registering a duplicate platform device. Additionally, create_thermal_profile() now takes wmi_device * instead of platform_device *. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 177 ++++++++++++++++------ 1 file changed, 134 insertions(+), 43 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index ab86deb1adb9..506c096553e8 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -15,6 +15,7 @@ #include #include #include +#include =20 #define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" #define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" @@ -39,8 +40,6 @@ MODULE_AUTHOR("Mario Limonciello "); MODULE_DESCRIPTION("Alienware special feature control"); MODULE_LICENSE("GPL"); -MODULE_ALIAS("wmi:" LEGACY_CONTROL_GUID); -MODULE_ALIAS("wmi:" WMAX_CONTROL_GUID); =20 static bool force_platform_profile; module_param_unsafe(force_platform_profile, bool, 0); @@ -421,7 +420,10 @@ struct alienfx_priv { u8 lighting_control_state; }; =20 -static struct platform_device *platform_device; +struct alienfx_platdata { + struct wmi_device *wdev; +}; + static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_= LAST]; =20 static u8 interface; @@ -801,7 +803,7 @@ static DEVICE_ATTR_RW(source); =20 static bool hdmi_group_visible(struct kobject *kobj) { - return quirks->hdmi_mux; + return interface =3D=3D WMAX && quirks->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); =20 @@ -848,7 +850,7 @@ static DEVICE_ATTR_RO(status); =20 static bool amplifier_group_visible(struct kobject *kobj) { - return quirks->amplifier; + return interface =3D=3D WMAX && quirks->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); =20 @@ -917,7 +919,7 @@ static DEVICE_ATTR_RW(deepsleep); =20 static bool deepsleep_group_visible(struct kobject *kobj) { - return quirks->deepslp; + return interface =3D=3D WMAX && quirks->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); =20 @@ -1136,11 +1138,11 @@ static const struct platform_profile_ops awcc_platf= orm_profile_ops =3D { .profile_set =3D thermal_profile_set, }; =20 -static int create_thermal_profile(struct platform_device *platform_device) +static int create_thermal_profile(struct wmi_device *wdev) { struct device *ppdev; =20 - ppdev =3D devm_platform_profile_register(&platform_device->dev, "alienwar= e-wmi", + ppdev =3D devm_platform_profile_register(&wdev->dev, "alienware-wmi", NULL, &awcc_platform_profile_ops); =20 return PTR_ERR_OR_ZERO(ppdev); @@ -1153,9 +1155,6 @@ static int alienfx_probe(struct platform_device *pdev) { struct alienfx_priv *priv; =20 - if (!quirks->num_zones) - return -ENODEV; - priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; @@ -1192,18 +1191,118 @@ static struct platform_driver platform_driver =3D { .probe =3D alienfx_probe, }; =20 -static int __init alienware_wmi_init(void) +static void alienware_alienfx_remove(void *data) { + struct platform_device *pdev =3D data; + + platform_device_unregister(pdev); +} + +static int alienware_alienfx_setup(struct alienfx_platdata *pdata) +{ + struct device *dev =3D &pdata->wdev->dev; + struct platform_device *pdev; int ret; =20 - if (wmi_has_guid(LEGACY_CONTROL_GUID)) - interface =3D LEGACY; - else if (wmi_has_guid(WMAX_CONTROL_GUID)) - interface =3D WMAX; - else { - pr_warn("alienware-wmi: No known WMI GUID found\n"); - return -ENODEV; - } + pdev =3D platform_device_register_data(NULL, "alienware-wmi", + PLATFORM_DEVID_NONE, pdata, + sizeof(*pdata)); + if (IS_ERR(pdev)) + return PTR_ERR(pdev); + + dev_set_drvdata(dev, pdev); + ret =3D devm_add_action_or_reset(dev, alienware_alienfx_remove, pdev); + if (ret) + return ret; + + return 0; +} + +/* + * Legacy WMI driver + */ +static int legacy_wmi_probe(struct wmi_device *wdev, const void *context) +{ + struct alienfx_platdata pdata =3D { + .wdev =3D wdev, + }; + + return alienware_alienfx_setup(&pdata); +} + +static const struct wmi_device_id alienware_legacy_device_id_table[] =3D { + { LEGACY_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table); + +static struct wmi_driver alienware_legacy_wmi_driver =3D { + .driver =3D { + .name =3D "alienware-wmi-alienfx", + .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table =3D alienware_legacy_device_id_table, + .probe =3D legacy_wmi_probe, + .no_singleton =3D true, +}; + +static int __init alienware_legacy_wmi_init(void) +{ + return wmi_driver_register(&alienware_legacy_wmi_driver); +} + +static void __exit alienware_legacy_wmi_exit(void) +{ + wmi_driver_unregister(&alienware_legacy_wmi_driver); +} + +/* + * WMAX WMI driver + */ +static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) +{ + struct alienfx_platdata pdata =3D { + .wdev =3D wdev, + }; + int ret; + + if (quirks->thermal) + ret =3D create_thermal_profile(wdev); + else + ret =3D alienware_alienfx_setup(&pdata); + + return ret; +} + +static const struct wmi_device_id alienware_wmax_device_id_table[] =3D { + { WMAX_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_wmax_device_id_table); + +static struct wmi_driver alienware_wmax_wmi_driver =3D { + .driver =3D { + .name =3D "alienware-wmi-wmax", + .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table =3D alienware_wmax_device_id_table, + .probe =3D wmax_wmi_probe, + .no_singleton =3D true, +}; + +static int __init alienware_wmax_wmi_init(void) +{ + return wmi_driver_register(&alienware_wmax_wmi_driver); +} + +static void __exit alienware_wmax_wmi_exit(void) +{ + wmi_driver_unregister(&alienware_wmax_wmi_driver); +} + +static int __init alienware_wmi_init(void) +{ + int ret; =20 dmi_check_system(alienware_quirks); if (quirks =3D=3D NULL) @@ -1220,32 +1319,20 @@ static int __init alienware_wmi_init(void) } =20 ret =3D platform_driver_register(&platform_driver); - if (ret) - goto fail_platform_driver; - platform_device =3D platform_device_alloc("alienware-wmi", PLATFORM_DEVID= _NONE); - if (!platform_device) { - ret =3D -ENOMEM; - goto fail_platform_device1; - } - ret =3D platform_device_add(platform_device); - if (ret) - goto fail_platform_device2; + if (ret < 0) + return ret; =20 - if (quirks->thermal) { - ret =3D create_thermal_profile(platform_device); - if (ret) - goto fail_prep_thermal_profile; + if (wmi_has_guid(WMAX_CONTROL_GUID)) { + interface =3D WMAX; + ret =3D alienware_wmax_wmi_init(); + } else { + interface =3D LEGACY; + ret =3D alienware_legacy_wmi_init(); } =20 - return 0; + if (ret < 0) + platform_driver_unregister(&platform_driver); =20 -fail_prep_thermal_profile: - platform_device_del(platform_device); -fail_platform_device2: - platform_device_put(platform_device); -fail_platform_device1: - platform_driver_unregister(&platform_driver); -fail_platform_driver: return ret; } =20 @@ -1253,7 +1340,11 @@ module_init(alienware_wmi_init); =20 static void __exit alienware_wmi_exit(void) { - platform_device_unregister(platform_device); + if (interface =3D=3D WMAX) + alienware_wmax_wmi_exit(); + else + alienware_legacy_wmi_exit(); + platform_driver_unregister(&platform_driver); } =20 --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6F332206A7; Fri, 7 Feb 2025 14:08:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937295; cv=none; b=R2aSmvlgO8hc6PMTEN8OCjIOVXhyjwgkDHSFaMLeanmMxrOjmBdLAtIbHM9O+w1SUi/EdBC2KBEk+rgORVTxIMmahZlDUtxWyrceSRo02e12haD82RBIX+p9yH+9qCc4U51NSWOrHTx0719GAr4sU4D/Ov1Mnp10yOOZ2Sy7jfg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937295; c=relaxed/simple; bh=CQOdNIc583x14fsDOLKm2hyQoPhlC3QadwB4vTCp9Uo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fBdiqcj5/zaU6YVu7+dp3cVl0demeujYyc4q8YN7l5w4k1HFg0ZFwB46STiT0+1lylpKLQzrKrdIB2PugdEdXgXK+6LjHraVHVh+xZOig6ibUDCFqM/YKOxvLyxLrNjgSWtoc/n5ss1grx2NQMQwHn7LZylBMfJXiiArwKudnqs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PYvTGg5L; arc=none smtp.client-ip=209.85.128.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PYvTGg5L" Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-6f9bb24d033so4770467b3.0; Fri, 07 Feb 2025 06:08:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937292; x=1739542092; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eh9MtY8QMee8pu6PHbRVyWPVH4kaZoOf3tRPuu+Pts8=; b=PYvTGg5L20bvOtATZCi2Tnw6LNZeMKlL3swgRONZXPtuDLvSn5vT/pbFpMXz5a3iUC ePJcCKXbq1Ld+vW8FJoQHef8pf2KJtQz6wQskKIzbEJqlpk69CpsQfjM26L14H7iAMeP OvjxqwTt7HOMCnOVFPBuDaRdWaBU5pQ3QuG2SKGt6h2VCz+KvswS5mCKOlEcbuxJfgzI p3mOPMgwGLJmLkNS+tJ0qGSrI1udFwcc6GnBDUi9VcVhJM18Quz7MkyD5v/u3tP9CSQ/ zy0c1GI+6SKyO3/qMTdebpczlgW/vjIg/AdCG+OPITgndI3yz+1ou9IdaDtPaR/g+evY jBNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937292; x=1739542092; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eh9MtY8QMee8pu6PHbRVyWPVH4kaZoOf3tRPuu+Pts8=; b=frEIw6RznD+YKe6v/pnNFLvsX4kBxC+p8Dr3bTBcjtY4sr25p6evQM4QBig/ptfk0i rX4b1seVBbN5MDM/QWhi8DEeHtLNXArGD9+BTH1svp2aOOOQeTZ+Jjw8NMdrz5ItyLt8 kqO4SAStrqMkU8odJmRN2++b7ha06ThdN0AyVxZEiQ6f2oRegnXWOTLrJNKYVJvyORFb z7gORs4oG4AuIuFgA2ivyalQxOOpjNqW9pVyiiVMADF7WCgbcrkgvghhFXbuaw8z2F+j QZTexViCCDw9ywSxgr91og/cODv/4Yi1WyVNR7nw+vsclTqws6+I+h1+XgAYVW4IpSPi P/9Q== X-Forwarded-Encrypted: i=1; AJvYcCXrLFCelX1V9t4tnBvcoAxYoQjzshBsx1WHXyncatoaPzoeUMbmdyiE5WRUsgaFzxJH+dBGGA3UUbO0a7Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5sc4wTiumuLg38o4qGOxDmf/c13OEyuyPZW4U06W9L96epRKQ K4c4LDhKzDD1IhpOt+11GmwIR0H7LYZy1yFKUMLqAOlyO0DfCV4Apfuttw== X-Gm-Gg: ASbGncsSTie3LTO48x3XQiOeUDhZOSfcJBCVPtzxq9buvIVouJC8B05KBsyAItHzP4D 91VH6QMQkZTfWL3lF8dI1F+gFX0Nf+6KFNrbneOt9Wd44873gayw8nnLoYKBaUe+ABCKmmCkQJY xqCSJ1dRRgO3rZVvLtQk8cOuJx+8jhAkN2YWh1GEzvLhJAF4i4+5UuYrz+SLRiw0u1yVNZpyvGw F9dptfRAdZLwcOsBXW1bYxe2ZZDKT4L2fAKIj7AqKjlM2aKsDVuwWEF980MxsbEsoh5lmg8PedZ yP/EJrn89yjPT+SX7rLnwUk= X-Google-Smtp-Source: AGHT+IFO0v8GqLki5C/9ECRXacfeDWLsVuQsyX6hVewAmVobWmdd1pnhaXbbq8AqPHQl/oApieMm2g== X-Received: by 2002:a05:690c:4c13:b0:6f9:79b2:ce02 with SMTP id 00721157ae682-6f9b29d4f65mr27403187b3.35.1738937292431; Fri, 07 Feb 2025 06:08:12 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:12 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 03/14] platform/x86: alienware-wmi: Add a state container for thermal control methods Date: Fri, 7 Feb 2025 09:07:32 -0500 Message-ID: <20250207140743.16822-4-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Refactor all thermal control methods to use the newly defined awcc_priv state container instead of global variables. While at it, rename create_thermal_profile() to awcc_platform_profile_init() and introduce alienware_awcc_setup() to set up the "AWCC" WMI device driver data. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 50 ++++++++++++++++++----- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index 506c096553e8..9512143c82ec 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -412,6 +412,12 @@ struct wmax_u32_args { u8 arg3; }; =20 +struct awcc_priv { + struct wmi_device *wdev; + struct device *ppdev; + enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; +}; + struct alienfx_priv { struct platform_device *pdev; struct led_classdev global_led; @@ -424,8 +430,6 @@ struct alienfx_platdata { struct wmi_device *wdev; }; =20 -static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_= LAST]; - static u8 interface; =20 /* @@ -1060,6 +1064,8 @@ static int thermal_profile_get(struct device *dev, static int thermal_profile_set(struct device *dev, enum platform_profile_option profile) { + struct awcc_priv *priv =3D dev_get_drvdata(dev); + if (quirks->gmode) { u32 gmode_status; int ret; @@ -1080,12 +1086,13 @@ static int thermal_profile_set(struct device *dev, } } =20 - return wmax_thermal_control(supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->supported_thermal_profiles[profile]); } =20 static int thermal_profile_probe(void *drvdata, unsigned long *choices) { enum platform_profile_option profile; + struct awcc_priv *priv =3D drvdata; enum wmax_thermal_mode mode; u8 sys_desc[4]; u32 first_mode; @@ -1114,7 +1121,7 @@ static int thermal_profile_probe(void *drvdata, unsig= ned long *choices) =20 mode =3D out_data & WMAX_THERMAL_MODE_MASK; profile =3D wmax_mode_to_platform_profile[mode]; - supported_thermal_profiles[profile] =3D out_data; + priv->supported_thermal_profiles[profile] =3D out_data; =20 set_bit(profile, choices); } @@ -1123,7 +1130,7 @@ static int thermal_profile_probe(void *drvdata, unsig= ned long *choices) return -ENODEV; =20 if (quirks->gmode) { - supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =3D + priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =3D WMAX_THERMAL_MODE_GMODE; =20 set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); @@ -1138,14 +1145,35 @@ static const struct platform_profile_ops awcc_platf= orm_profile_ops =3D { .profile_set =3D thermal_profile_set, }; =20 -static int create_thermal_profile(struct wmi_device *wdev) +static int awcc_platform_profile_init(struct wmi_device *wdev) { - struct device *ppdev; + struct awcc_priv *priv =3D dev_get_drvdata(&wdev->dev); + + priv->ppdev =3D devm_platform_profile_register(&wdev->dev, "alienware-wmi= ", + priv, &awcc_platform_profile_ops); + + return PTR_ERR_OR_ZERO(priv->ppdev); +} =20 - ppdev =3D devm_platform_profile_register(&wdev->dev, "alienware-wmi", - NULL, &awcc_platform_profile_ops); +static int alienware_awcc_setup(struct wmi_device *wdev) +{ + struct awcc_priv *priv; + int ret; + + priv =3D devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; =20 - return PTR_ERR_OR_ZERO(ppdev); + priv->wdev =3D wdev; + dev_set_drvdata(&wdev->dev, priv); + + if (quirks->thermal) { + ret =3D awcc_platform_profile_init(wdev); + if (ret) + return ret; + } + + return 0; } =20 /* @@ -1267,7 +1295,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, co= nst void *context) int ret; =20 if (quirks->thermal) - ret =3D create_thermal_profile(wdev); + ret =3D alienware_awcc_setup(wdev); else ret =3D alienware_alienfx_setup(&pdata); =20 --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f175.google.com (mail-yw1-f175.google.com [209.85.128.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53A0F2206BB; Fri, 7 Feb 2025 14:08:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937297; cv=none; b=MDAnIyVfHFt11voFDDxLlxvHVSjYCkKN7kikUPQVKX/rELU2At6JQzgRtSBOWOoQLwooMnix7FV7eOL9J6YUudBtPlwGw/KxAZIkhHpZQfTn09kn7DzbQGrX5HlY+Jf1ikMpsiJNBzcKHPs7rMULsfqbn/ohCtqEq5Mw4qEDpX4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937297; c=relaxed/simple; bh=qRYy/r/XEIn6bETnvu6Yn5nbRR5ag52p7PQHk8zmJfo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e+RdIAuLELgGohNOgpxqEwViUThKMRPxo8Knhd53k13hZgJolHdu8Oi9nOh0jfeV80fhuwrayUeQpdFKtGStPq2lPgES3B23oKG8Qon4V90vCgJXGpUZfLZQBoQBo7pgDy5rHZAwK7kRDq4WtNZS+BRk2J3txaxbpny0ULycO6w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gMM0p1VV; arc=none smtp.client-ip=209.85.128.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gMM0p1VV" Received: by mail-yw1-f175.google.com with SMTP id 00721157ae682-6f9b8291c49so4847677b3.1; Fri, 07 Feb 2025 06:08:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937294; x=1739542094; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2nYctGPSzCHBlA4oNi+PZAVP+DCpxvNXbv6MyrcOof0=; b=gMM0p1VViOp0ujuLxKpUIepw5CJHXpBmz2M6MqfKdXWS7hLv6SnRG/D8LHWCZbCLre b1R7qibQrn1m+Cvfzu1VihqHqOGSBRubFU2hFdo9I6gofHT7bgqvqcAgqKxt9QKAVZF5 Xfgf8rjwZyPrvrjHKYRIZLH+rZXBZPlfXF64NT+Y9rTNBLZjEe5v3jvtixgtL9R/JtRm 9xmtgZLU8QixGVyWOz+mAdUEREPI28hFBBCl6T3a5WzZV1Ra5/i4Nq1UhpD/4z0jbhta YrGlyI9L2ifVnI2bPBtlV0zLcorSFL0IWNysyeLdHKnAGo+ITmItHcybD5zsxdWXnLB4 kZrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937294; x=1739542094; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2nYctGPSzCHBlA4oNi+PZAVP+DCpxvNXbv6MyrcOof0=; b=WQOAvgf5q88O0rGj70Kme65M3mdMGnDrzt97axXYNXFY0VZlPa/bOs28+9J/2/JKvl S0P6/OXFyx2guiqe4Sbk8hKHeMmqoNaQYZigVRh91/dWmxt5uiwdRHyqUnfkGKWRK/Lt gVUPNGltIQmE8sQkIybK4uajSr3XOGt2usUYVpZRvTlkt2E3V3l5G2WO4aWvpoKuD0Al y3FsAEgYK6hZKulO8iO9XsGyCvpKqvrH9ILykm7lQULRyh33RPtwOmX4zMD1lY4jAfGP 53Z5U+wAErGccpVeHG/dqKF6kwyTi2kM+WgK8q0A6d+Ujoa4y2ezX6CiJ/s9p6ADMs9W lxHA== X-Forwarded-Encrypted: i=1; AJvYcCU2cv8aXpS5lfl6Iff5Yy7buk7gXUYsj7EN7hHMTM0IBNFpSDFVK77qUFf0cPbeoF0v1kY4tJdvivBlMog=@vger.kernel.org X-Gm-Message-State: AOJu0YxMULQvLTLr9UgGSaN98JVqnR+1fzxzmJmWnsPxncbR+bO5AjK6 xrfYac9+sB5NWf+yF40qYpPim1M5x/PVxyyWdC/2N9tx3Fq9MmpGA/6vuw== X-Gm-Gg: ASbGnctQAYrDAT4eBVa0qAHe3JDN4Oi4ThZwZL2IHMB2G5OrUC5Stfyq5IEVerJ+cBo zZ7Wlb3Rk3I7cVWJZ9llCjJTxN9QttIo5pN7WdAgNYzyneohhdnPKU82UXS5dGMZ7X33U2VRBG6 y4Wj9k77kPBoPTdiW3zQ4bT+c2MW12MVswXoP7B7h8qU3dyUaFVu8W+hY7hD55n6SLp+Lvchy7I RWqxzVJE2aoHz6/Z46c6rqmoaHkKUHNS5HRVZCCuG7jPR2hF/RhFwBuOBkKLzXaOobSm9UUc1Iw qqLiSJG3gOuC40trAOoxPho= X-Google-Smtp-Source: AGHT+IHMTl1GMR9FKLzrKKxdB45NoadNMBsPTsGmTLAXBVTabWSxUcnEO3RPOUpyibWYS9GG38+wKw== X-Received: by 2002:a05:690c:6502:b0:6f9:8d47:35b8 with SMTP id 00721157ae682-6f9b284d948mr30477397b3.13.1738937293967; Fri, 07 Feb 2025 06:08:13 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:13 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 04/14] platform/x86: alienware-wmi: Refactor LED control methods Date: Fri, 7 Feb 2025 09:07:33 -0500 Message-ID: <20250207140743.16822-5-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Both WMI devices handled by this module specify a distinct interface for LED control. Previously this module handled this by dynamically adapting arguments passed to wmi_evaluate_method() based on the `interface` global variable. To avoid the use of global variables, and enable the migration to non-deprecated WMI methods, let the WMI drivers define upd_led and upd_brightness operations, which completely replace alienware_update_led() and wmax_brightness(). Also define alienware_wmi_command(), which serves as a wrapper for wmidev_evaluate_method(). This new method is very similar to alienware_wmax_command() but is WMI device agnostic. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 166 ++++++++++++++-------- 1 file changed, 104 insertions(+), 62 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index 9512143c82ec..525d25a1fa6c 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -426,12 +427,43 @@ struct alienfx_priv { u8 lighting_control_state; }; =20 +struct alienfx_ops { + int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 location); + int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 brightness); +}; + struct alienfx_platdata { struct wmi_device *wdev; + struct alienfx_ops ops; }; =20 static u8 interface; =20 +static int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, + void *in_args, size_t in_size, u32 *out_data) +{ + struct acpi_buffer out =3D {ACPI_ALLOCATE_BUFFER, NULL}; + struct acpi_buffer in =3D {in_size, in_args}; + acpi_status ret; + + ret =3D wmidev_evaluate_method(wdev, 0, method_id, &in, out_data ? &out := NULL); + if (ACPI_FAILURE(ret)) + return -EIO; + + union acpi_object *obj __free(kfree) =3D out.pointer; + + if (out_data) { + if (obj && obj->type =3D=3D ACPI_TYPE_INTEGER) + *out_data =3D (u32)obj->integer.value; + else + return -ENOMSG; + } + + return 0; +} + /* * Helpers used for zone control */ @@ -462,46 +494,6 @@ static int parse_rgb(const char *buf, struct color_pla= tform *colors) /* * Individual RGB zone control */ -static int alienware_update_led(struct alienfx_priv *priv, u8 location) -{ - int method_id; - acpi_status status; - char *guid; - struct acpi_buffer input; - struct legacy_led_args legacy_args; - struct wmax_led_args wmax_basic_args; - if (interface =3D=3D WMAX) { - wmax_basic_args.led_mask =3D 1 << location; - wmax_basic_args.colors =3D priv->colors[location]; - wmax_basic_args.state =3D priv->lighting_control_state; - guid =3D WMAX_CONTROL_GUID; - method_id =3D WMAX_METHOD_ZONE_CONTROL; - - input.length =3D sizeof(wmax_basic_args); - input.pointer =3D &wmax_basic_args; - } else { - legacy_args.colors =3D priv->colors[location]; - legacy_args.brightness =3D priv->global_brightness; - legacy_args.state =3D 0; - if (priv->lighting_control_state =3D=3D LEGACY_BOOTING || - priv->lighting_control_state =3D=3D LEGACY_SUSPEND) { - guid =3D LEGACY_POWER_CONTROL_GUID; - legacy_args.state =3D priv->lighting_control_state; - } else - guid =3D LEGACY_CONTROL_GUID; - method_id =3D location + 1; - - input.length =3D sizeof(legacy_args); - input.pointer =3D &legacy_args; - } - pr_debug("alienware-wmi: guid %s method %d\n", guid, method_id); - - status =3D wmi_evaluate_method(guid, 0, method_id, &input, NULL); - if (ACPI_FAILURE(status)) - pr_err("alienware-wmi: zone set failure: %u\n", status); - return ACPI_FAILURE(status); -} - static ssize_t zone_show(struct device *dev, struct device_attribute *attr, char *buf, u8 location) { @@ -518,13 +510,14 @@ static ssize_t zone_store(struct device *dev, struct = device_attribute *attr, { struct alienfx_priv *priv =3D dev_get_drvdata(dev); struct color_platform *colors =3D &priv->colors[location]; + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); int ret; =20 ret =3D parse_rgb(buf, colors); if (ret) return ret; =20 - ret =3D alienware_update_led(priv, location); + ret =3D pdata->ops.upd_led(priv, pdata->wdev, location); =20 return ret ? ret : count; } @@ -660,36 +653,17 @@ static struct attribute_group zone_attribute_group = =3D { /* * LED Brightness (Global) */ -static int wmax_brightness(int brightness) -{ - acpi_status status; - struct acpi_buffer input; - struct wmax_brightness_args args =3D { - .led_mask =3D 0xFF, - .percentage =3D brightness, - }; - input.length =3D sizeof(args); - input.pointer =3D &args; - status =3D wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - WMAX_METHOD_BRIGHTNESS, &input, NULL); - if (ACPI_FAILURE(status)) - pr_err("alienware-wmi: brightness set failure: %u\n", status); - return ACPI_FAILURE(status); -} - static void global_led_set(struct led_classdev *led_cdev, enum led_brightness brightness) { struct alienfx_priv *priv =3D container_of(led_cdev, struct alienfx_priv, global_led); + struct alienfx_platdata *pdata =3D dev_get_platdata(&priv->pdev->dev); int ret; =20 priv->global_brightness =3D brightness; =20 - if (interface =3D=3D WMAX) - ret =3D wmax_brightness(brightness); - else - ret =3D alienware_update_led(priv, 0); + ret =3D pdata->ops.upd_brightness(priv, pdata->wdev, brightness); if (ret) pr_err("LED brightness update failed\n"); } @@ -1249,10 +1223,49 @@ static int alienware_alienfx_setup(struct alienfx_p= latdata *pdata) /* * Legacy WMI driver */ +static int legacy_wmi_update_led(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 location) +{ + struct legacy_led_args legacy_args =3D { + .colors =3D priv->colors[location], + .brightness =3D priv->global_brightness, + .state =3D 0, + }; + struct acpi_buffer input; + acpi_status status; + + if (legacy_args.state !=3D LEGACY_RUNNING) { + legacy_args.state =3D priv->lighting_control_state; + + input.length =3D sizeof(legacy_args); + input.pointer =3D &legacy_args; + + status =3D wmi_evaluate_method(LEGACY_POWER_CONTROL_GUID, 0, + location + 1, &input, NULL); + if (ACPI_FAILURE(status)) + return -EIO; + + return 0; + } + + return alienware_wmi_command(wdev, location + 1, &legacy_args, + sizeof(legacy_args), NULL); +} + +static int legacy_wmi_update_brightness(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 brightness) +{ + return legacy_wmi_update_led(priv, wdev, 0); +} + static int legacy_wmi_probe(struct wmi_device *wdev, const void *context) { struct alienfx_platdata pdata =3D { .wdev =3D wdev, + .ops =3D { + .upd_led =3D legacy_wmi_update_led, + .upd_brightness =3D legacy_wmi_update_brightness, + }, }; =20 return alienware_alienfx_setup(&pdata); @@ -1287,10 +1300,39 @@ static void __exit alienware_legacy_wmi_exit(void) /* * WMAX WMI driver */ +static int wmax_wmi_update_led(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 location) +{ + struct wmax_led_args in_args =3D { + .led_mask =3D 1 << location, + .colors =3D priv->colors[location], + .state =3D priv->lighting_control_state, + }; + + return alienware_wmi_command(wdev, WMAX_METHOD_ZONE_CONTROL, &in_args, + sizeof(in_args), NULL); +} + +static int wmax_wmi_update_brightness(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 brightness) +{ + struct wmax_brightness_args in_args =3D { + .led_mask =3D 0xFF, + .percentage =3D brightness, + }; + + return alienware_wmi_command(wdev, WMAX_METHOD_BRIGHTNESS, &in_args, + sizeof(in_args), NULL); +} + static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) { struct alienfx_platdata pdata =3D { .wdev =3D wdev, + .ops =3D { + .upd_led =3D wmax_wmi_update_led, + .upd_brightness =3D wmax_wmi_update_brightness, + }, }; int ret; =20 --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f175.google.com (mail-yw1-f175.google.com [209.85.128.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DBE2B222561; Fri, 7 Feb 2025 14:08:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937298; cv=none; b=ROTff79nABWsxVqACBlHgPkE15J0qKbl4pcu0mrkUYE5BCWZurN1CQY+j5WSzGr4s5eZwjxbTW0rNTDsy4gQwgnCau31Z9TrGu+FJsqOqFcvE8c2565oAx6SQZYwGf5BqmUGQhKmW+tZAeJyn8JURC6nEvwqTMvIR6J8aimWjlk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937298; c=relaxed/simple; bh=TpImHDyw13v88DYqCWjn7O634fBAq+Jz7uz+a4wm1hk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PDu4NpdyAJpUhTeuW9Pq4qF+GeGmZaL848xcI1vuIH3h1sBJC6DorpB4YWcsYYoaeUAfUDP6l0Qmn7sqsjtieDAplZ7P1MDCjEtSPNVn1KdYPLwy7iz4QKIrl8H7W0euzSnRnXno2zjQl9on0EoDTCKgy9NBqbgSxnw2I19DUxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dZyVu7hD; arc=none smtp.client-ip=209.85.128.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dZyVu7hD" Received: by mail-yw1-f175.google.com with SMTP id 00721157ae682-6efe4324f96so18970517b3.1; Fri, 07 Feb 2025 06:08:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937295; x=1739542095; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aT5BPDOOXltaw9HQr5o8Si+JPli8HqWhNbfpXgv/A8c=; b=dZyVu7hDAVFaQoHmrHPbXeGH+8Vq9d7Yy0QIM/8Y5E9bHlSaZnFV7cXx3Lk8RViMvM OXY+jzlyj10cwR57+5UEy8mPyGctwTNn+pwjscPP6iEbYFRYlH8P3cBSreRQa5P2Kmz5 8263yLad+613ojouS//TmAUMJMNO5SjgVV2cV71Zr1vPBdgrsnYrdLlP4om6opwCfJYw piTdEaU0dKb9iHFwI+w8McJQ0715CW1TgSKVOBLWmgAv67TZDUuUnIGda0ImefZAHOvc s5rB5GQYbt8NNTVLg9LG030V/8qcQDi5A3gg8Blwt43zP8qnlqs9Vil30FTutYH3d7B8 Ikhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937295; x=1739542095; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aT5BPDOOXltaw9HQr5o8Si+JPli8HqWhNbfpXgv/A8c=; b=tVQTV1brDRw7aIaFsOEaCmFmOc12v7nem+oPHIQf3ip+Hb6Gf1YCafmeJMIyX3UfBY aNmI9bwEwZBDJl9gcQ1t9pLxPGSS2q9GaLWGc5r1y30sEBjota67UAvVQbSXiyISLkRs znc6VI0jNJ3qUqxK1Bn/igmZAMSAn94HsZrh1lGZo14E51dEmV6zgCkBzBWhMHWAeEcx jeRdyMFx/3785ADM8W2/W1pBljSB05iy3h5Z8FVEoIRsFLhP5B0aES23t638VxWWJh/I SmeNMypD/xTBtDaO0mzQvEadSMpTdu+u+TsB0xJwsz/jUEe6R51EhZSSGgFSIRkf4eRv vuPw== X-Forwarded-Encrypted: i=1; AJvYcCXIqBMbggsDgOzoNTc38/yD3tzolp+Aph0/5O0AFzGOtd6xc3Uq8YJYiw75o/TsM6DgJxlmMQZtwAASBLg=@vger.kernel.org X-Gm-Message-State: AOJu0YwtADlOokqLtK3caIkQfLCpRPiiIGQw/xFkSAc3PyNEe9Z6UPeR uNX+yMz43eb0Qe0O0VVYpOZq2oaJhXPkkMyngIQZFsxJIzE35gkQGaSi7g== X-Gm-Gg: ASbGncstNRbolXPR3QM0VoJ5jGVAvf2sknB10P431PZEIvPZuQQkBepOFulquZeKJ47 pgjydJ875mOeQeaU97idVrA43lXrCOMEo25oTFd8yKnMIaEdYaxn5hDvgE0IbmOQVsXjPtCLfr5 u1d+uoKa+xK4j9pPkAg1XrMUpZ1tAYi8P9qRpXnoN64Tq8LDtazdeVpxpEUhRz0MpclTWja7fg9 /Dm4rvBxUEyi9SzM8S7Rbcm861BbNoWXG+3itEcwDZDQsHrCm0JqcV6x8wVgEzuc104gQCE/IlZ fnuF5iva216RzILYyfCnxqo= X-Google-Smtp-Source: AGHT+IFMia48ZKw+yJcvxn7ASAFZ5gyJG5qj2eE+DWVZwXk3yRd8yXwQgF9RBmqbscVTXZlzxuXBcQ== X-Received: by 2002:a05:690c:b15:b0:6f9:75b6:bef3 with SMTP id 00721157ae682-6f9b2a081ffmr31460067b3.35.1738937295507; Fri, 07 Feb 2025 06:08:15 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:15 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 05/14] platform/x86: alienware-wmi: Refactor hdmi, amplifier, deepslp methods Date: Fri, 7 Feb 2025 09:07:34 -0500 Message-ID: <20250207140743.16822-6-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Refactor show/store methods for hdmi, amplifier, deepslp sysfs groups to use alienware_wmi_command() instead of alienware_wmax_command() which uses deprecated WMI methods. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 76 ++++++++++++----------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index 525d25a1fa6c..6e12164132a6 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -711,53 +711,55 @@ static acpi_status alienware_wmax_command(void *in_ar= gs, size_t in_size, static ssize_t cable_show(struct device *dev, struct device_attribute *att= r, char *buf) { + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); struct wmax_basic_args in_args =3D { .arg =3D 0, }; - acpi_status status; u32 out_data; + int ret; =20 - status =3D - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data =3D=3D 0) return sysfs_emit(buf, "[unconnected] connected unknown\n"); else if (out_data =3D=3D 1) return sysfs_emit(buf, "unconnected [connected] unknown\n"); } - pr_err("alienware-wmi: unknown HDMI cable status: %d\n", status); + + pr_err("alienware-wmi: unknown HDMI cable status: %d\n", ret); return sysfs_emit(buf, "unconnected connected [unknown]\n"); } =20 static ssize_t source_show(struct device *dev, struct device_attribute *at= tr, char *buf) { + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); struct wmax_basic_args in_args =3D { .arg =3D 0, }; - acpi_status status; u32 out_data; + int ret; =20 - status =3D - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_STATUS, &out_data); - - if (ACPI_SUCCESS(status)) { + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data =3D=3D 1) return sysfs_emit(buf, "[input] gpu unknown\n"); else if (out_data =3D=3D 2) return sysfs_emit(buf, "input [gpu] unknown\n"); } - pr_err("alienware-wmi: unknown HDMI source status: %u\n", status); + + pr_err("alienware-wmi: unknown HDMI source status: %u\n", ret); return sysfs_emit(buf, "input gpu [unknown]\n"); } =20 static ssize_t source_store(struct device *dev, struct device_attribute *a= ttr, const char *buf, size_t count) { + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); struct wmax_basic_args args; - acpi_status status; + int ret; =20 if (strcmp(buf, "gpu\n") =3D=3D 0) args.arg =3D 1; @@ -767,12 +769,11 @@ static ssize_t source_store(struct device *dev, struc= t device_attribute *attr, args.arg =3D 3; pr_debug("alienware-wmi: setting hdmi to %d : %s", args.arg, buf); =20 - status =3D alienware_wmax_command(&args, sizeof(args), - WMAX_METHOD_HDMI_SOURCE, NULL); + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_SOURCE, &args, + sizeof(args), NULL); + if (ret < 0) + pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", ret); =20 - if (ACPI_FAILURE(status)) - pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", - status); return count; } =20 @@ -805,22 +806,23 @@ static const struct attribute_group hdmi_attribute_gr= oup =3D { static ssize_t status_show(struct device *dev, struct device_attribute *at= tr, char *buf) { + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); struct wmax_basic_args in_args =3D { .arg =3D 0, }; - acpi_status status; u32 out_data; + int ret; =20 - status =3D - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_AMPLIFIER_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_AMPLIFIER_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data =3D=3D 0) return sysfs_emit(buf, "[unconnected] connected unknown\n"); else if (out_data =3D=3D 1) return sysfs_emit(buf, "unconnected [connected] unknown\n"); } - pr_err("alienware-wmi: unknown amplifier cable status: %d\n", status); + + pr_err("alienware-wmi: unknown amplifier cable status: %d\n", ret); return sysfs_emit(buf, "unconnected connected [unknown]\n"); } =20 @@ -850,15 +852,16 @@ static const struct attribute_group amplifier_attribu= te_group =3D { static ssize_t deepsleep_show(struct device *dev, struct device_attribute = *attr, char *buf) { + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); struct wmax_basic_args in_args =3D { .arg =3D 0, }; - acpi_status status; u32 out_data; + int ret; =20 - status =3D alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_DEEP_SLEEP_STATUS, &out_data); - if (ACPI_SUCCESS(status)) { + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data =3D=3D 0) return sysfs_emit(buf, "[disabled] s5 s5_s4\n"); else if (out_data =3D=3D 1) @@ -866,15 +869,17 @@ static ssize_t deepsleep_show(struct device *dev, str= uct device_attribute *attr, else if (out_data =3D=3D 2) return sysfs_emit(buf, "disabled s5 [s5_s4]\n"); } - pr_err("alienware-wmi: unknown deep sleep status: %d\n", status); + + pr_err("alienware-wmi: unknown deep sleep status: %d\n", ret); return sysfs_emit(buf, "disabled s5 s5_s4 [unknown]\n"); } =20 static ssize_t deepsleep_store(struct device *dev, struct device_attribute= *attr, const char *buf, size_t count) { + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); struct wmax_basic_args args; - acpi_status status; + int ret; =20 if (strcmp(buf, "disabled\n") =3D=3D 0) args.arg =3D 0; @@ -884,12 +889,11 @@ static ssize_t deepsleep_store(struct device *dev, st= ruct device_attribute *attr args.arg =3D 2; pr_debug("alienware-wmi: setting deep sleep to %d : %s", args.arg, buf); =20 - status =3D alienware_wmax_command(&args, sizeof(args), - WMAX_METHOD_DEEP_SLEEP_CONTROL, NULL); + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_CONTROL, + &args, sizeof(args), NULL); + if (!ret) + pr_err("alienware-wmi: deep sleep control failed: results: %u\n", ret); =20 - if (ACPI_FAILURE(status)) - pr_err("alienware-wmi: deep sleep control failed: results: %u\n", - status); return count; } =20 --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6CE8221DA6; Fri, 7 Feb 2025 14:08:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937301; cv=none; b=GjdP2S2uEtqsZFFQjsUWwOSZ2O+BIChA44WfL3+IigBeFdqiG5a5N8FHaqx8o31INHMH4Kqm9nPehuQ4MCrdDulMDG+irqiOn+CzROwCzW/7N+Tszz0vJJcvv1gTpfH4eAxhNC/VFDGHUnfAIZ2uNPlRyM8Az/tFKQQMlYhmIoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937301; c=relaxed/simple; bh=iLplJqGOUWH2yC/l1CaxhcXFjVrg8V0rQaqfGwOIqnk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l5UlU306OobalDSlGO69DTySfXiGtLsYJ5IWGw3O60L57wgoRhb9d0m2SpClmrcABpYUzuhqgcqD6LiFZa/hO8R5yNmPR2QeWvOIgvDHZoLoJEr/NHAp450s5bRJFTQRLn4UjSSmfMy39RFNDaB18ou1ZMbUclTIU+MUEnIfECs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gPZYXgA9; arc=none smtp.client-ip=209.85.128.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gPZYXgA9" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-6efe4324f96so18970987b3.1; Fri, 07 Feb 2025 06:08:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937298; x=1739542098; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MwdRGSFgj7FqI1tYvmFFNT3wx7x6pU35t6rwqkf283A=; b=gPZYXgA9QnlHceXTM87GqX2503l1FeU8a9czRt27pj64L9YF4QMdYc41Qgws0JUtoF WQVaSivxlo+xf6iQR2+/WJzFvd3YWPIXmEGGYXPvgKtNiDcZRB7TPOyWuvWdI+wxWNGg aDizgR1YX/gqNVP/Y3LNTsn6f/EDMnjH2QzxBblsIvl5onGbv5Fz8gNolbm3ZvDXJLcf VjAdJEUuzaoU8dQJ8vMPsEiYWjV8ycm9+Gv1e2CBR5hqtWsP9hUO989zCXrV1ITsSSPe 1m/icUOSdWU+R6NI9p8DqopALoQbs5KLQf/ga2c5qSohy22u4XkQTi5AyM1KYYFAITPC Q5gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937298; x=1739542098; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MwdRGSFgj7FqI1tYvmFFNT3wx7x6pU35t6rwqkf283A=; b=BcOCamLgSE/hBqHMJBmcfMSzBSd4qGOAzvw4n3YADzcZafw687U+FZnN13WRZ4fd+r 2N6n4P8ri5DkiwsCJVYnSBoj6AwZRxVYN1AfW9139sQm07a3GJxqCt6ji9EqlnRLdSrT zQnc9APm7jhxrIIM8TE2DnE/IvAXyA26IlV1DCsja43qo4zTKmtNpiDusFM5RG+OLSNR uk7u0Yms8gI/RH4zKyHjexDDEDtuQFIJVL+IvRrZ0zPmL3o13XbbGLzN70rvr60ZVxgo opm1Xh1KZf+7oVhW6YbOY3O1p/S8pAwG43EgEM5b44fNcMIxkFyqrQzKiPc1kx9rpqNh 39Vw== X-Forwarded-Encrypted: i=1; AJvYcCUWPU17jJnEbagoDOFpBzle33KSevwrwVJMh30+P/9eTrG4bjPgiyCIRfPhBfUVKYjzNdF2a7ZYTg9bBBw=@vger.kernel.org X-Gm-Message-State: AOJu0YxruIzl07khuU/VojGT/tHJ5g+iBL8r4cpsQtMuQzDc2iYF4xic CuJWe6zT3i1zqr2s5w3mjAVXpOoUt2wGLRxGXrDQEw/HQm/HV+QUR5jqHw== X-Gm-Gg: ASbGncuhE5a8yx2BfIosi3JnvlVo/dejah6XVguMuA6KzuxFEu2Se7LX5f3bn2ffqJo 1nZdzwjGpP5Fcw7awvVnTuuli7Ci3a47r9TFqOLamW0sBk4TTQEwQiubYxA8kuXJFkBe9koasNB GMqWHmubqwJ9+bhuB7jTi2O6Wts34H2JHi5JWoL+FzITesvvCVtfXCZHfI2dtW+L18YUMlLYCKt Aal1FY9lWS0y4336f2sEyZ3DRFKGhTtwGssiFBgCuUeYzEim2jl1O+YVua2Tio9fiBj6upBbPbR DGa2EHhOq807JzKYHhAD/ko= X-Google-Smtp-Source: AGHT+IH5YbJY1m9zEGhFMc3bfFRYAnCBEYDz+OxdTb48LcMqYo/S0s8dQdg5NCj39OA0hGX+/rIAZA== X-Received: by 2002:a05:690c:4986:b0:6f9:4bb6:eb4e with SMTP id 00721157ae682-6f9b29ead87mr31468997b3.31.1738937297044; Fri, 07 Feb 2025 06:08:17 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:16 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 06/14] platform/x86: alienware-wmi: Refactor thermal control methods Date: Fri, 7 Feb 2025 09:07:35 -0500 Message-ID: <20250207140743.16822-7-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Refactor thermal control methods to use alienware_wmi_command() instead of alienware_wmax_command(). Drop alienware_wmax_command() as there is no more users left. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 88 ++++++++--------------- 1 file changed, 30 insertions(+), 58 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index 6e12164132a6..04c526f95c2f 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -676,34 +676,6 @@ static enum led_brightness global_led_get(struct led_c= lassdev *led_cdev) return priv->global_brightness; } =20 -static acpi_status alienware_wmax_command(void *in_args, size_t in_size, - u32 command, u32 *out_data) -{ - acpi_status status; - union acpi_object *obj; - struct acpi_buffer input; - struct acpi_buffer output; - - input.length =3D in_size; - input.pointer =3D in_args; - if (out_data) { - output.length =3D ACPI_ALLOCATE_BUFFER; - output.pointer =3D NULL; - status =3D wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - command, &input, &output); - if (ACPI_SUCCESS(status)) { - obj =3D (union acpi_object *)output.pointer; - if (obj && obj->type =3D=3D ACPI_TYPE_INTEGER) - *out_data =3D (u32)obj->integer.value; - } - kfree(output.pointer); - } else { - status =3D wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - command, &input, NULL); - } - return status; -} - /* * The HDMI mux sysfs node indicates the status of the HDMI input mux. * It can toggle between standard system GPU output and HDMI input. @@ -943,7 +915,8 @@ static bool is_wmax_thermal_code(u32 code) return false; } =20 -static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) +static int wmax_thermal_information(struct wmi_device *wdev, u8 operation, + u8 arg, u32 *out_data) { struct wmax_u32_args in_args =3D { .operation =3D operation, @@ -951,14 +924,12 @@ static int wmax_thermal_information(u8 operation, u8 = arg, u32 *out_data) .arg2 =3D 0, .arg3 =3D 0, }; - acpi_status status; - - status =3D alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_THERMAL_INFORMATION, - out_data); + int ret; =20 - if (ACPI_FAILURE(status)) - return -EIO; + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; =20 if (*out_data =3D=3D WMAX_FAILURE_CODE) return -EBADRQC; @@ -966,7 +937,7 @@ static int wmax_thermal_information(u8 operation, u8 ar= g, u32 *out_data) return 0; } =20 -static int wmax_thermal_control(u8 profile) +static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) { struct wmax_u32_args in_args =3D { .operation =3D WMAX_OPERATION_ACTIVATE_PROFILE, @@ -974,15 +945,13 @@ static int wmax_thermal_control(u8 profile) .arg2 =3D 0, .arg3 =3D 0, }; - acpi_status status; u32 out_data; + int ret; =20 - status =3D alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_THERMAL_CONTROL, - &out_data); - - if (ACPI_FAILURE(status)) - return -EIO; + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, + &in_args, sizeof(in_args), &out_data); + if (ret) + return ret; =20 if (out_data =3D=3D WMAX_FAILURE_CODE) return -EBADRQC; @@ -990,7 +959,8 @@ static int wmax_thermal_control(u8 profile) return 0; } =20 -static int wmax_game_shift_status(u8 operation, u32 *out_data) +static int wmax_game_shift_status(struct wmi_device *wdev, u8 operation, + u32 *out_data) { struct wmax_u32_args in_args =3D { .operation =3D operation, @@ -998,14 +968,12 @@ static int wmax_game_shift_status(u8 operation, u32 *= out_data) .arg2 =3D 0, .arg3 =3D 0, }; - acpi_status status; - - status =3D alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_GAME_SHIFT_STATUS, - out_data); + int ret; =20 - if (ACPI_FAILURE(status)) - return -EIO; + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; =20 if (*out_data =3D=3D WMAX_FAILURE_CODE) return -EOPNOTSUPP; @@ -1016,10 +984,11 @@ static int wmax_game_shift_status(u8 operation, u32 = *out_data) static int thermal_profile_get(struct device *dev, enum platform_profile_option *profile) { + struct awcc_priv *priv =3D dev_get_drvdata(dev); u32 out_data; int ret; =20 - ret =3D wmax_thermal_information(WMAX_OPERATION_CURRENT_PROFILE, + ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFI= LE, 0, &out_data); =20 if (ret < 0) @@ -1048,7 +1017,8 @@ static int thermal_profile_set(struct device *dev, u32 gmode_status; int ret; =20 - ret =3D wmax_game_shift_status(WMAX_OPERATION_GET_GAME_SHIFT_STATUS, + ret =3D wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS, &gmode_status); =20 if (ret < 0) @@ -1056,7 +1026,8 @@ static int thermal_profile_set(struct device *dev, =20 if ((profile =3D=3D PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || (profile !=3D PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { - ret =3D wmax_game_shift_status(WMAX_OPERATION_TOGGLE_GAME_SHIFT, + ret =3D wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_TOGGLE_GAME_SHIFT, &gmode_status); =20 if (ret < 0) @@ -1064,7 +1035,8 @@ static int thermal_profile_set(struct device *dev, } } =20 - return wmax_thermal_control(priv->supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->wdev, + priv->supported_thermal_profiles[profile]); } =20 static int thermal_profile_probe(void *drvdata, unsigned long *choices) @@ -1077,7 +1049,7 @@ static int thermal_profile_probe(void *drvdata, unsig= ned long *choices) u32 out_data; int ret; =20 - ret =3D wmax_thermal_information(WMAX_OPERATION_SYS_DESCRIPTION, + ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_SYS_DESCRIPTI= ON, 0, (u32 *) &sys_desc); if (ret < 0) return ret; @@ -1085,7 +1057,7 @@ static int thermal_profile_probe(void *drvdata, unsig= ned long *choices) first_mode =3D sys_desc[0] + sys_desc[1]; =20 for (u32 i =3D 0; i < sys_desc[3]; i++) { - ret =3D wmax_thermal_information(WMAX_OPERATION_LIST_IDS, + ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_LIST_IDS, i + first_mode, &out_data); =20 if (ret =3D=3D -EIO) --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f175.google.com (mail-yw1-f175.google.com [209.85.128.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F21C2236EF; Fri, 7 Feb 2025 14:08:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937302; cv=none; b=tHeeoAHwGolSuGiAOKaRW4mWn34v9EUP/jnebmRgdCuFyXZMJq/LZ/Q8aZdwTbUuDsVcI4lklKb18agUcsCjOZP8X0h+B8jWEZrvFtVk6M8xFILSBJ57r2uS0BfgpDDnfdGghouxP1RqfSfw8rz4D4++BhaXXP5hv/JLnTNcWqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937302; c=relaxed/simple; bh=WNK/zhnhWne1KhFy1ru5tXjKwHW1D7tIpQQubkriI9Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ShNecJtDed0e/wWNcqxgLiooiiNLaoZ1jY8u/NCZKYswUf4G9mWLHz/fqlJm4JG/kp3sqZNtJQz8r4y0hHOdiwRdm09/LVEuTgQ1s0cvnWDWo4Kk8wzrJ5r7cj1crISzwp216YhWIZNFl95ujh5ivmTKKXgdU9RG4QxV6iLW7G0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=foqKSgi2; arc=none smtp.client-ip=209.85.128.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="foqKSgi2" Received: by mail-yw1-f175.google.com with SMTP id 00721157ae682-6f47ed1f40dso16585617b3.1; Fri, 07 Feb 2025 06:08:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937299; x=1739542099; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KeplABhvsldXq+TfWYcnOdbCWYVX3O6/Sz7wRQiltlA=; b=foqKSgi2DTnZER7sGVDtlHcqUO5AkXrkt0B1sV5Oa/uUa41EjgPi25MDCVn2dDbLfg HB0sRfNqltjfuZ09w+Jtf4CokPFVM1Tfslv1sYFiM8KteF7dr+sP86MCzdH/79FJ+BBF X9T0pV240Eou7Ss9wrSHOwIAUdx/Qeh8vencL2gWXoylX1C0EfwBeWh49kZ7BnhxvJL4 swYUBNWnKu+oSySynfsFzbOOr13TdgsOL4NQyo0k5bwZfGN/rCUXFPeaMKN4AxEmvvKW SBDym8WjV6XGO9a214BcT+hOv8ljpuMqe4UB6uaPFNOCfL969Ern9PElu1uknEzp+eeK srKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937299; x=1739542099; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KeplABhvsldXq+TfWYcnOdbCWYVX3O6/Sz7wRQiltlA=; b=U9NYtjUhSxcipIvqz2I9ltqMFoIO/ocwLlBMvRdIAepdeCfR+bMIwOMluDjuAyPiil ROgP3PxnSWY2jEfQj5cDMfpPyBE4eotLAjwXkciGQybDmlYF1/Cf6lJ4EYmoQ0yackdD /cIILh5g5J4K2yK3fiO/u7S2Ti5FX68o5RG2fm0Zsb0wtTGbV4t3mgOFm1pAHoY5Sng1 if5PMGffCVBxuzyZJBT9DIpj5j8dj61Dsqu4Fqr3751lkAP38UoB0XIUb6zxKeN19DwY 5z1tlFYTGSxm1EulXCAbDZG2yLOuPsf/MXNMJlDyBOYYe9LsphgP4sMi2e9rHEn15fBd Ez0A== X-Forwarded-Encrypted: i=1; AJvYcCXBcygCx4hPLvamuT3x9fYz76A19wIlnr3T8J1yV/9pvD6tCliQjNQCECntKRYt7Nej3XBIxfvsMVheRKs=@vger.kernel.org X-Gm-Message-State: AOJu0YycFS3CFirDfY+TRgcmzitbHKakF2rzVk7V0ROx9lJWkMou2zkj 9sMJzDbDCcg1nHO2KArPK6HTNQmMoF1YyOVLBfNuIjG7+7O01OKm0ig/sQ== X-Gm-Gg: ASbGncv2KQbibuPpQpbRFgPvJe8zEW3z03glQr503jzdojbb3Q0fsVnFf1n75/mgjE/ 3jp4RpQtwLV8lOTyPLFh45HmRgXF7XsqQy6hIgPNQdIzd4wEsGA5+sfPV9PH+xjjYGfN1UxU/M9 cynxeFo6xXCM4wW6W9Sve0kNO7QHVcGWMOaPCv/qBJf1KAReB8gnQ52SF5G8U6/D8lfzbCYG0Er Oa80tQhyMXcADjDCu4LlbKc8gPIiZ8+t9VKguHsVRxeLMyv9726iyQFZnzaG8nRIzyeT422OdeX Bxcgb6FjTQ2k5ePdYg7znFg= X-Google-Smtp-Source: AGHT+IHRDHBwzlMypbIkZeTPTMQjKNWEe558U0Ass7RTAjezfXDqkV2Uq1CqY/Ux+EkeBhDftTydEw== X-Received: by 2002:a05:690c:6810:b0:6f9:a3c6:b2d7 with SMTP id 00721157ae682-6f9b2a1598amr25767617b3.38.1738937298690; Fri, 07 Feb 2025 06:08:18 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:18 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 07/14] platform/x86: alienware-wmi: Split DMI table Date: Fri, 7 Feb 2025 09:07:36 -0500 Message-ID: <20250207140743.16822-8-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Split thermal features into a new DMI table to support upcoming file split. While at it: Rename quirk_entry -> alienfx_quirks, Rename quirks -> alienfx and change hdmi_mux, amplifier and deepslp types to bool, because they are already being implicitly used as bools. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 363 +++++++++++----------- 1 file changed, 175 insertions(+), 188 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index 04c526f95c2f..c575b82f11df 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -114,102 +114,68 @@ static const enum platform_profile_option wmax_mode_= to_platform_profile[THERMAL_ [THERMAL_MODE_BASIC_PERFORMANCE] =3D PLATFORM_PROFILE_PERFORMANCE, }; =20 -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; }; =20 -static struct quirk_entry *quirks; +static struct alienfx_quirks *alienfx; =20 =20 -static struct quirk_entry quirk_inspiron5675 =3D { +static struct alienfx_quirks quirk_inspiron5675 =3D { .num_zones =3D 2, - .hdmi_mux =3D 0, - .amplifier =3D 0, - .deepslp =3D 0, - .thermal =3D false, - .gmode =3D false, + .hdmi_mux =3D false, + .amplifier =3D false, + .deepslp =3D false, }; =20 -static struct quirk_entry quirk_unknown =3D { +static struct alienfx_quirks quirk_unknown =3D { .num_zones =3D 2, - .hdmi_mux =3D 0, - .amplifier =3D 0, - .deepslp =3D 0, - .thermal =3D false, - .gmode =3D false, + .hdmi_mux =3D false, + .amplifier =3D false, + .deepslp =3D false, }; =20 -static struct quirk_entry quirk_x51_r1_r2 =3D { +static struct alienfx_quirks quirk_x51_r1_r2 =3D { .num_zones =3D 3, - .hdmi_mux =3D 0, - .amplifier =3D 0, - .deepslp =3D 0, - .thermal =3D false, - .gmode =3D false, + .hdmi_mux =3D false, + .amplifier =3D false, + .deepslp =3D false, }; =20 -static struct quirk_entry quirk_x51_r3 =3D { +static struct alienfx_quirks quirk_x51_r3 =3D { .num_zones =3D 4, - .hdmi_mux =3D 0, - .amplifier =3D 1, - .deepslp =3D 0, - .thermal =3D false, - .gmode =3D false, + .hdmi_mux =3D false, + .amplifier =3D true, + .deepslp =3D false, }; =20 -static struct quirk_entry quirk_asm100 =3D { +static struct alienfx_quirks quirk_asm100 =3D { .num_zones =3D 2, - .hdmi_mux =3D 1, - .amplifier =3D 0, - .deepslp =3D 0, - .thermal =3D false, - .gmode =3D false, + .hdmi_mux =3D true, + .amplifier =3D false, + .deepslp =3D false, }; =20 -static struct quirk_entry quirk_asm200 =3D { +static struct alienfx_quirks quirk_asm200 =3D { .num_zones =3D 2, - .hdmi_mux =3D 1, - .amplifier =3D 0, - .deepslp =3D 1, - .thermal =3D false, - .gmode =3D false, + .hdmi_mux =3D true, + .amplifier =3D false, + .deepslp =3D true, }; =20 -static struct quirk_entry quirk_asm201 =3D { +static struct alienfx_quirks quirk_asm201 =3D { .num_zones =3D 2, - .hdmi_mux =3D 1, - .amplifier =3D 1, - .deepslp =3D 1, - .thermal =3D false, - .gmode =3D false, -}; - -static struct quirk_entry quirk_g_series =3D { - .num_zones =3D 0, - .hdmi_mux =3D 0, - .amplifier =3D 0, - .deepslp =3D 0, - .thermal =3D true, - .gmode =3D true, -}; - -static struct quirk_entry quirk_x_series =3D { - .num_zones =3D 0, - .hdmi_mux =3D 0, - .amplifier =3D 0, - .deepslp =3D 0, - .thermal =3D true, - .gmode =3D false, + .hdmi_mux =3D true, + .amplifier =3D true, + .deepslp =3D true, }; =20 static int __init dmi_matched(const struct dmi_system_id *dmi) { - quirks =3D dmi->driver_data; + alienfx =3D dmi->driver_data; return 1; } =20 @@ -241,51 +207,6 @@ static const struct dmi_system_id alienware_quirks[] _= _initconst =3D { }, .driver_data =3D &quirk_asm201, }, - { - .callback =3D dmi_matched, - .ident =3D "Alienware m16 R1 AMD", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), - }, - .driver_data =3D &quirk_x_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Alienware m17 R5", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data =3D &quirk_x_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Alienware m18 R2", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data =3D &quirk_x_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Alienware x15 R1", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data =3D &quirk_x_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Alienware x17 R2", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data =3D &quirk_x_series, - }, { .callback =3D dmi_matched, .ident =3D "Alienware X51 R1", @@ -313,60 +234,6 @@ static const struct dmi_system_id alienware_quirks[] _= _initconst =3D { }, .driver_data =3D &quirk_x51_r3, }, - { - .callback =3D dmi_matched, - .ident =3D "Dell Inc. G15 5510", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), - }, - .driver_data =3D &quirk_g_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Dell Inc. G15 5511", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), - }, - .driver_data =3D &quirk_g_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Dell Inc. G15 5515", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), - }, - .driver_data =3D &quirk_g_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Dell Inc. G3 3500", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), - }, - .driver_data =3D &quirk_g_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Dell Inc. G3 3590", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), - }, - .driver_data =3D &quirk_g_series, - }, - { - .callback =3D dmi_matched, - .ident =3D "Dell Inc. G5 5500", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), - }, - .driver_data =3D &quirk_g_series, - }, { .callback =3D dmi_matched, .ident =3D "Dell Inc. Inspiron 5675", @@ -441,6 +308,116 @@ struct alienfx_platdata { =20 static u8 interface; =20 +struct awcc_quirks { + bool pprof; + bool gmode; +}; + +static struct awcc_quirks g_series_quirks =3D { + .pprof =3D true, + .gmode =3D true, +}; + +static struct awcc_quirks generic_quirks =3D { + .pprof =3D true, + .gmode =3D false, +}; + +static struct awcc_quirks empty_quirks; + +static const struct dmi_system_id awcc_dmi_table[] __initconst =3D { + { + .ident =3D "Alienware m16 R1 AMD", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware m17 R5", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware m18 R2", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware x15 R1", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware x17 R2", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Dell Inc. G15 5510", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G15 5511", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G15 5515", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G3 3500", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G3 3590", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G5 5500", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data =3D &g_series_quirks, + }, +}; + +static 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) { @@ -623,7 +600,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; =20 return 0; @@ -631,7 +608,7 @@ static umode_t zone_attr_visible(struct kobject *kobj, =20 static bool zone_group_visible(struct kobject *kobj) { - return quirks->num_zones > 0; + return alienfx->num_zones > 0; } DEFINE_SYSFS_GROUP_VISIBLE(zone); =20 @@ -754,7 +731,7 @@ static DEVICE_ATTR_RW(source); =20 static bool hdmi_group_visible(struct kobject *kobj) { - return interface =3D=3D WMAX && quirks->hdmi_mux; + return interface =3D=3D WMAX && alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); =20 @@ -802,7 +779,7 @@ static DEVICE_ATTR_RO(status); =20 static bool amplifier_group_visible(struct kobject *kobj) { - return interface =3D=3D WMAX && quirks->amplifier; + return interface =3D=3D WMAX && alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); =20 @@ -873,7 +850,7 @@ static DEVICE_ATTR_RW(deepsleep); =20 static bool deepsleep_group_visible(struct kobject *kobj) { - return interface =3D=3D WMAX && quirks->deepslp; + return interface =3D=3D WMAX && alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); =20 @@ -1013,7 +990,7 @@ static int thermal_profile_set(struct device *dev, { struct awcc_priv *priv =3D dev_get_drvdata(dev); =20 - if (quirks->gmode) { + if (awcc->gmode) { u32 gmode_status; int ret; =20 @@ -1079,7 +1056,7 @@ static int thermal_profile_probe(void *drvdata, unsig= ned long *choices) if (bitmap_empty(choices, PLATFORM_PROFILE_LAST)) return -ENODEV; =20 - if (quirks->gmode) { + if (awcc->gmode) { priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =3D WMAX_THERMAL_MODE_GMODE; =20 @@ -1117,7 +1094,7 @@ static int alienware_awcc_setup(struct wmi_device *wd= ev) priv->wdev =3D wdev; dev_set_drvdata(&wdev->dev, priv); =20 - if (quirks->thermal) { + if (awcc->pprof) { ret =3D awcc_platform_profile_init(wdev); if (ret) return ret; @@ -1312,7 +1289,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, co= nst void *context) }; int ret; =20 - if (quirks->thermal) + if (awcc) ret =3D alienware_awcc_setup(wdev); else ret =3D alienware_alienfx_setup(&pdata); @@ -1338,6 +1315,26 @@ static struct wmi_driver alienware_wmax_wmi_driver = =3D { =20 static int __init alienware_wmax_wmi_init(void) { + const struct dmi_system_id *id; + + id =3D dmi_first_match(awcc_dmi_table); + if (id) + awcc =3D id->driver_data; + + if (force_platform_profile) { + if (!awcc) + awcc =3D &empty_quirks; + + awcc->pprof =3D true; + } + + if (force_gmode) { + if (awcc) + awcc->gmode =3D true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + return wmi_driver_register(&alienware_wmax_wmi_driver); } =20 @@ -1351,18 +1348,8 @@ static int __init alienware_wmi_init(void) int ret; =20 dmi_check_system(alienware_quirks); - if (quirks =3D=3D NULL) - quirks =3D &quirk_unknown; - - if (force_platform_profile) - quirks->thermal =3D true; - - if (force_gmode) { - if (quirks->thermal) - quirks->gmode =3D true; - else - pr_warn("force_gmode requires platform profile support\n"); - } + if (!alienfx) + alienfx =3D &quirk_unknown; =20 ret =3D platform_driver_register(&platform_driver); if (ret < 0) --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f169.google.com (mail-yw1-f169.google.com [209.85.128.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9329422489B; Fri, 7 Feb 2025 14:08:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937303; cv=none; b=Sz2xNFsIUZYounFjGRVrZJXfGvnZNOhzsvD71Gr2+ha30XD2pF71OORPX64IqqIKCd2vHYrX7b7z+TNi3+tiBTeBPIfKR2GzuG6IVHZHpKvI+ZUqIW8QD86Oo2Hs/zyOG92mxTujYwOmDWkyiC1V303oz3JNxAAuDEddDYfln+E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937303; c=relaxed/simple; bh=6/0ifSyK9A1jLPrUzoCWiVZBxNyv0pTaBibcfd2UN0w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GKG1cKi/mgc+KkD5lqK+c2br25/g6oAKBZ3UwezT9O16FqcotXAtB/ax4fs0JvITlFdKcctlE097vLL74lqI3ER3+N54KjavekRBc6+wCt3SWFX3LrWMpAXraVw/joj6xXjZelPaBoJi+pDLty2muh8UDXJ1IfRXq7ALMM6OdQQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WRUsbz7I; arc=none smtp.client-ip=209.85.128.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WRUsbz7I" Received: by mail-yw1-f169.google.com with SMTP id 00721157ae682-6f7031ea11cso20761857b3.2; Fri, 07 Feb 2025 06:08:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937300; x=1739542100; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q94zQ2y0w1KQlOf/S2AvbwbvutIGIqCEv4xXfHY0lQA=; b=WRUsbz7IlZLHtMTQ7LGDPymAo3HT1zjkDMcSF9Hr4T4cNi/1OUkFrp45/yxI15hjuH 57jw/oGZjiRRfX/IX3pxwgUr68GQoGwlsYxCV5P/LTdTeTWgeft53HnKiY1wgCb6VcJo 73jlQwYGJ9Iz48yiF21QnjDjeQPkd5Fp55k+ASphcddSUfdmO+ZQg0AXypDoWnorGo+3 Lb0eWzn9DgWuUv1yIGN/HP6eBzdpyTG6D+jEwPIBbROv3A3FBAV2FwlXU57ToFbLkh+t e4hZP5rQMKJ+4bPdfpU7rUj7b5plbR/vSnxl0Qo2lt/yr0mIWyWSbaPhyfasKZ0s9JGj iSgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937300; x=1739542100; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q94zQ2y0w1KQlOf/S2AvbwbvutIGIqCEv4xXfHY0lQA=; b=sQ9Duwv2Q5ko8m6KGB80X/uvcr6UnAgEbZ5ZsCHAS2Y685VNVf2j9TCLv0nHPKxHU+ 3Bt+PO+GZ/4sikZ1nLPMbCXb+Is+82Mr68kWF0ETMzwhdPGeYcfDH3KHBOCA3BMPSVr7 bse6k1LNxHU4d+OKMKgYJnxax5tXVfijOnBK7HC78AzwtPwyh7Ph0+PpSXOxRodSEx49 0quSregTRX+vJjTuSE4lva5eLP0AKfxj+fCopIhw9jXungvZ+jbY45qvbfI5t/TJwUYm x6PWPK9elvmerQYIzlQRD2cIOi7PbhDkInI2VZ6V3SUhlCSlyyo+gq1fY2RGVx2L/k+I JF6A== X-Forwarded-Encrypted: i=1; AJvYcCVf0xReNde7EXim+9DPNg6ED/f6RqLOcwlpzkMpDg/1Oxi11zFuyb7US8ah/2iJNJydpvLZfWyeaPJxVtc=@vger.kernel.org X-Gm-Message-State: AOJu0YytGnHrmOcWIWL2PyDLC7GWsn0tAEQ7RvljVxAJjjz0qhD5R4iZ 0v1Xz/UvuHDeSdKx6iPTXsqRecvAutfJsAqYlw+YpLdhmtcouPGJUeCk3g== X-Gm-Gg: ASbGncvcHYzlN6sm5cNr3OH12xVja9P636V+rsKQWXeg7OlO78BjwVegtJOUqSGgHmE 3R8jsqWmJ2P6Tjo5CA69eUorQHzQpp24x9BhLiR4Z8T+BJt0tVYsnfF9iaJEA1I4t7o4Fkf8Haw h6Ffyci6euuo68sk3DluiJVP0boB1B4C40iOnTEmZ+6tlYQTC3znRH4mKoJ2Va3T1ohlhC+UeRV ebY0/TovjLXonFggA4eeIL0ZOZ+CzWfz8BUqS/A2inx6++jN/HK2/a3Kzg3A2vwFY5VTlzhxlYK 4Ga0vYNimKxBCEQGo6vYX3I= X-Google-Smtp-Source: AGHT+IGdaTQ4xX+n+jt3sjR/yqwrt6anwNGc48AHbejYlW2rJRVbI50bpriFOsjfXIZB7veWu7Yyag== X-Received: by 2002:a05:690c:3812:b0:6f4:8207:c68d with SMTP id 00721157ae682-6f9b2845562mr27876307b3.3.1738937300338; Fri, 07 Feb 2025 06:08:20 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:20 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 08/14] MAINTAINERS: Update ALIENWARE WMI DRIVER entry Date: Fri, 7 Feb 2025 09:07:37 -0500 Message-ID: <20250207140743.16822-9-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Dell has been inactive in its maintainership role of this driver since around 2021. Due to this, add myself as a maintainer and update path to support upcoming changes. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- MAINTAINERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index f7550dcced78..3dd440f34c63 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -792,10 +792,12 @@ F: Documentation/admin-guide/perf/alibaba_pmu.rst F: drivers/perf/alibaba_uncore_drw_pmu.c =20 ALIENWARE WMI DRIVER +M: Kurt Borja +L: platform-driver-x86@vger.kernel.org L: Dell.Client.Kernel@dell.com S: Maintained F: Documentation/wmi/devices/alienware-wmi.rst -F: drivers/platform/x86/dell/alienware-wmi.c +F: drivers/platform/x86/dell/alienware-wmi* =20 ALLEGRO DVT VIDEO IP CORE DRIVER M: Michael Tretter --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f174.google.com (mail-yw1-f174.google.com [209.85.128.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A782414A4F9; Fri, 7 Feb 2025 14:08:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937305; cv=none; b=JLrfOEQhBMvsFcp4KpiumjuAQdDTftm1a/fRmU1Ffj+vweVxMYrStD/ZgjdI2Cl5AIqFBrolee4u8eL5tsL7VPjo2uP2c+y17c/1FQwYTHeGJWkVFDP5jViH7HJ2bcyjA5MRW5cB49tlrwbY0FNON9xF7J6ellP81k780/7TdXk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937305; c=relaxed/simple; bh=Woq4swbnYq3xsWIj3EtplDj2WuXqxSueFP8J8UTTZS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WbADubfl0iMyHw4XdMrhr1Rtu6v0pIxxjkjITQEk1/WeYAqUYgjnPlmM1FSBkZv74dke0NlC2Om8zqWZab3qF8xVwiB+6nEfti1Ex65gy/eJ+aD32pWhQXqpTk0dQg8yCIa4fdSWq0U4PS2F8GxF20rxYkxwJsJ0y6c+fWKZjOo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gD3Slv2x; arc=none smtp.client-ip=209.85.128.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gD3Slv2x" Received: by mail-yw1-f174.google.com with SMTP id 00721157ae682-6f99efce804so13524477b3.0; Fri, 07 Feb 2025 06:08:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937302; x=1739542102; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=H0Qac2DNxaP3+ckGylXZbGeHgHst/csov0aaJCMEn8w=; b=gD3Slv2xs4HvYNW34qOEhNS++mByMYpnPP1uFLZTZ/IHnWWL14sPhWewgOh4Exm4Hp fwy1/HSKHm25VM9GVMZJHcD5gcsXiKVmJoloZcWDkMFviUiD41Ev1EizqmrbWG7qNtYH fjzOr5YIaj1pQB33hwKFK/YoVsr4t+eHVY5npbH7v748nYAAyEQC9DHhVh9ff3Ac15ZI nEoZHkd6z9LfBoJoan+DKXIaNplGMj/SMBZHG/VVMtYRyZOD+cma3SfUvce6/NPjTOH5 sOyykf5TaoWHrSJZ8oikBst0GshRs+5KpurX7BceY4VVJi02jrZNbpixKGqqABOksLwm VYOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937302; x=1739542102; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=H0Qac2DNxaP3+ckGylXZbGeHgHst/csov0aaJCMEn8w=; b=kcPJhgEeGRsNvIysPHHBs7dP/B5IqJ20w8Qvc7adDAS1GnWBoVlUoKar+GkoBr9gxP 1zeyRx1VDeSOlkJPYIJuK2i5rf2nEUEJWQGF4vdBNdayYGtdW4hW/LGRt2911gb/MGPr Pw8jujhvo6V1tvKjiKrmpaWJoWVjQS0QCGAxPxKyHHy3chPTLxDGZDHQR6jA57vUQ8R3 4xiYhsrqhsPdqTElnKYq6EcT6FtuuPKMnEqgmW1Masd4zuEx4kNyZ79crJgKgvAgXv26 66JKHaaefI6IhyVxHK/mooaQl6ATDud41Rf5w4ZsRFV0OUAytTVOUS95HpH7OV4ca6Db FYOw== X-Forwarded-Encrypted: i=1; AJvYcCV2A/TTu2TxUMgIRDy2Ns83R+9fTE6wqLpTwzJTdatUzAq4I79OgCwo24rytlFVQKY7KeSxwJJ9n4RJ+kk=@vger.kernel.org X-Gm-Message-State: AOJu0YzFfu4F/vJSO1UB6uvHFTLoVSVuSb8zFF52igXD6a7GsN5dP9tK Y4cAv8AmIZ3NzcnMtPC20lNeUDMWk++hHNkj2cdZiITCEqzvaQjK1alW7w== X-Gm-Gg: ASbGnctHwv6GTctC28uUBf6XjtxPHpOu0KOAGKS6m3trHTl5ZDvIxPIXbytjeAfXb7q Uur2LZzkd10klXVbexh2AvIk188GIn8JWECDzqbiWDuJ5tDS7DIOWzUpYbJHlw4W3A/YAi1omXI 1yts7nGyzd8+OzqKbswO+18oohisNKIHWiWW7DoHiXvqIChfyXfEaJMg47VEYIkVzrp0B6gfYei LJufigXJk8FjdK6FxRed5Dd6w3rELVw+o91JVh4CrDrX0RevHpYDxgH7vMjElltcXqYx4Bf5Po4 4CtK4CO6RDTD0vVNzIW6lJU= X-Google-Smtp-Source: AGHT+IHTG5LqJ6Gi1ormcGQVLppxbpSJ4fyzSwZ3VqJRFYn0XAYJIHw4gdPA6TpiLGCvwn2ASEsQFg== X-Received: by 2002:a05:690c:4908:b0:6f7:5605:c63c with SMTP id 00721157ae682-6f9b29d88e0mr28866257b3.30.1738937301934; Fri, 07 Feb 2025 06:08:21 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:21 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 09/14] platform/x86: Rename alienware-wmi.c Date: Fri, 7 Feb 2025 09:07:38 -0500 Message-ID: <20250207140743.16822-10-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Rename alienware-wmi to support upcoming split. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/Makefile | 1 + .../platform/x86/dell/{alienware-wmi.c =3D> alienware-wmi-base.c} | 0 2 files changed, 1 insertion(+) rename drivers/platform/x86/dell/{alienware-wmi.c =3D> alienware-wmi-base.= c} (100%) diff --git a/drivers/platform/x86/dell/Makefile b/drivers/platform/x86/dell= /Makefile index bb3cbd470a46..f8aec8502c2f 100644 --- a/drivers/platform/x86/dell/Makefile +++ b/drivers/platform/x86/dell/Makefile @@ -5,6 +5,7 @@ # =20 obj-$(CONFIG_ALIENWARE_WMI) +=3D alienware-wmi.o +alienware-wmi-objs :=3D alienware-wmi-base.o obj-$(CONFIG_DCDBAS) +=3D dcdbas.o obj-$(CONFIG_DELL_LAPTOP) +=3D dell-laptop.o obj-$(CONFIG_DELL_RBTN) +=3D dell-rbtn.o diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi-base.c similarity index 100% rename from drivers/platform/x86/dell/alienware-wmi.c rename to drivers/platform/x86/dell/alienware-wmi-base.c --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f178.google.com (mail-yw1-f178.google.com [209.85.128.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1AC5522FF50; Fri, 7 Feb 2025 14:08:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937307; cv=none; b=Tu42C5jbfXg2x4fYlLpa6Wh5LUQAwsvQRkMJ4Kv4p1GDjDkytwukGGrMJLS+QEx4ZcR3VoUYzPIhVeVSrZLGuPzVykjhzN6Buc/+bowRZ4mEqsXvtn0jM/sbAUXZqenrPowjJ5TuvsFKceU0iSBppCYBMtGLCQq4bfJ1HRvXubA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937307; c=relaxed/simple; bh=fHiEhMW/MUAzNqGF+k0nw60BIC1B+41IdC8VtYXtMTQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ocy64+b9/Z0elwOm7BGYgIWpfR7UjMjTzXwaENcxqTSWLZCBATQsUxp14SzeD4n3wQrH+pvkMfGNFob+qoqd+sFtoLNDSAvMoWZ+QrRRHBWB35uA/w4iJuHlUUZStRqO9Xephb58UABxSJ+mVdCgmrHl/QRa2bocN7h1SuJ6wHA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KRUgkoXt; arc=none smtp.client-ip=209.85.128.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KRUgkoXt" Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-6f6cb364c7fso14894207b3.3; Fri, 07 Feb 2025 06:08:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937304; x=1739542104; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m3qXBhgYFmwgLXKfxYMj7rB53ypV2bfglBTEP4SO1Kk=; b=KRUgkoXtk3BhSzUEloosvsVrD8UBZQVAJkYE5gRun91CcBBeaGg1TCJOGmvaZ8J/Rj oiwtXPGSYeiZjzIDpGUzmFMtY+ykhddD13nVtxxqs1ccRGLtgMY94aIcZ6BkvOfONnwk EmR9MHzubUI2XaWa5ouOQ+/awXsco1RkB8y8fXbRu47b0QlVG08FerZgeZB0mcFj9dFV gfl5ahcFmnnw4cMrv2uw19b26tpb/nZK8wRQePIk1QCGH47NLDrkQVktHJd21GYob6a5 8cLBjd0/6OBN4PVSGZbvd+vGrLd9Qhd6/7CoieBN0DzR2TeNTgB9DBxQJXUqaQojRA6f kgIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937304; x=1739542104; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m3qXBhgYFmwgLXKfxYMj7rB53ypV2bfglBTEP4SO1Kk=; b=tGmXlxQ+MdzBfW9Y/LYfa8xgJ+Hs0txNOIp2tVF+lpaPX1YPtJU10DrO+xZehAg5gk IvlM+zO6ytg+QmJSsJpA9Y32kDjeJqu94vO2yVaUra3XVglgee7gKVXsog4iusr4VXeD GKtsqNWXvjjOEIkZ6LVnphsIPkka1UBR4C4OAkaajxw0ZUJtEVeQTUEC7Fl1vWb3Vf/z /FRPTgniVp8J6Np9bTGSCCSuJKOcEfUpaGR7WjCZwF3BW/CW116lxRAfRvI9NbGqNBj5 j0JOAx/5lVt4m4RNw6t8KXAp090tBcbK0Fz0E5hO2uRGlKqz9PEiiyQZrPm44kHo7SNE 40lg== X-Forwarded-Encrypted: i=1; AJvYcCXynVSY4INcu4ypydyFnwdOnnYJnbgUL9ugg9K/Q1qJW/cnvYczMmJ1LankvGC05Lc+o1VywIZ388ujFQc=@vger.kernel.org X-Gm-Message-State: AOJu0YykiiFJra3hw1iT+ET2KZYDySyMFt0lsw7W20gcANBCxc6x+Kuc /24u72jVDwONZtqRuRRQlCbW/bZzgnR78jv3uvg1HBeAF58m/R03vEX0vg== X-Gm-Gg: ASbGnct6QeuLpja0bfBUpz/hE9XAA6mTXFci8oGcTNmvdYOMnmL9cP8R1Z02Mifxoft iYlSeAjc7Hd48f43Abic3da0tQbNhPnWT8D6pnwWNaPxxQKdYvm7bE3cniWMbckLLbDEM8go4+F Q5lfpgIbj5lSs70Om7iQ2wwV+n21wnCca4Iv0gf8pP7MMZVZMc0w0Z4ISx0x0YybrePTVEW18sV EiO9WFuNn6tUZjaTC/L4nYXWMwD+lxeT5YmFLRjieIsxC1SDUWfhmkcmoNWFqtduNbHNdC8wpcM CcaY8hUglxqCMF5S3ZBlgc0= X-Google-Smtp-Source: AGHT+IFBe2sysKs/9C3wOqr5Tx7XJK46c2e3eJvQTDBwko4Zc0eNe6N6/Vd2hM3xPewLsZCIMJY4FQ== X-Received: by 2002:a05:690c:4c13:b0:6f9:97f7:a5c3 with SMTP id 00721157ae682-6f9b287a22emr32814927b3.18.1738937303727; Fri, 07 Feb 2025 06:08:23 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:23 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 10/14] platform/x86: Add alienware-wmi.h Date: Fri, 7 Feb 2025 09:07:39 -0500 Message-ID: <20250207140743.16822-11-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a header file for alienware-wmi with shared resources to support the upcoming file split. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- .../platform/x86/dell/alienware-wmi-base.c | 100 ++++-------------- drivers/platform/x86/dell/alienware-wmi.h | 92 ++++++++++++++++ 2 files changed, 114 insertions(+), 78 deletions(-) create mode 100644 drivers/platform/x86/dell/alienware-wmi.h diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platf= orm/x86/dell/alienware-wmi-base.c index c575b82f11df..124969e13ec4 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -17,10 +17,7 @@ #include #include #include - -#define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" -#define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" -#define WMAX_CONTROL_GUID "A70591CE-A997-11DA-B012-B622A1EF5492" +#include "alienware-wmi.h" =20 #define WMAX_METHOD_HDMI_SOURCE 0x1 #define WMAX_METHOD_HDMI_STATUS 0x2 @@ -50,23 +47,6 @@ static bool force_gmode; module_param_unsafe(force_gmode, bool, 0); MODULE_PARM_DESC(force_gmode, "Forces G-Mode when performance profile is s= elected"); =20 -enum INTERFACE_FLAGS { - LEGACY, - WMAX, -}; - -enum LEGACY_CONTROL_STATES { - LEGACY_RUNNING =3D 1, - LEGACY_BOOTING =3D 0, - LEGACY_SUSPEND =3D 3, -}; - -enum WMAX_CONTROL_STATES { - WMAX_RUNNING =3D 0xFF, - WMAX_BOOTING =3D 0, - WMAX_SUSPEND =3D 3, -}; - enum WMAX_THERMAL_INFORMATION_OPERATIONS { WMAX_OPERATION_SYS_DESCRIPTION =3D 0x02, WMAX_OPERATION_LIST_IDS =3D 0x03, @@ -114,15 +94,7 @@ static const enum platform_profile_option wmax_mode_to_= platform_profile[THERMAL_ [THERMAL_MODE_BASIC_PERFORMANCE] =3D PLATFORM_PROFILE_PERFORMANCE, }; =20 -struct alienfx_quirks { - u8 num_zones; - bool hdmi_mux; - bool amplifier; - bool deepslp; -}; - -static struct alienfx_quirks *alienfx; - +struct alienfx_quirks *alienfx; =20 static struct alienfx_quirks quirk_inspiron5675 =3D { .num_zones =3D 2, @@ -246,12 +218,6 @@ static const struct dmi_system_id alienware_quirks[] _= _initconst =3D { {} }; =20 -struct color_platform { - u8 blue; - u8 green; - u8 red; -} __packed; - struct wmax_brightness_args { u32 led_mask; u32 percentage; @@ -286,27 +252,7 @@ struct awcc_priv { enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; }; =20 -struct alienfx_priv { - struct platform_device *pdev; - struct led_classdev global_led; - struct color_platform colors[4]; - u8 global_brightness; - u8 lighting_control_state; -}; - -struct alienfx_ops { - int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, - u8 location); - int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, - u8 brightness); -}; - -struct alienfx_platdata { - struct wmi_device *wdev; - struct alienfx_ops ops; -}; - -static u8 interface; +u8 alienware_interface; =20 struct awcc_quirks { bool pprof; @@ -418,8 +364,8 @@ static const struct dmi_system_id awcc_dmi_table[] __in= itconst =3D { =20 static struct awcc_quirks *awcc; =20 -static int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, - void *in_args, size_t in_size, u32 *out_data) +int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, + void *in_args, size_t in_size, u32 *out_data) { struct acpi_buffer out =3D {ACPI_ALLOCATE_BUFFER, NULL}; struct acpi_buffer in =3D {in_size, in_args}; @@ -583,7 +529,7 @@ static ssize_t lighting_control_state_store(struct devi= ce *dev, val =3D LEGACY_BOOTING; else if (strcmp(buf, "suspend\n") =3D=3D 0) val =3D LEGACY_SUSPEND; - else if (interface =3D=3D LEGACY) + else if (alienware_interface =3D=3D LEGACY) val =3D LEGACY_RUNNING; else val =3D WMAX_RUNNING; @@ -731,7 +677,7 @@ static DEVICE_ATTR_RW(source); =20 static bool hdmi_group_visible(struct kobject *kobj) { - return interface =3D=3D WMAX && alienfx->hdmi_mux; + return alienware_interface =3D=3D WMAX && alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); =20 @@ -741,7 +687,7 @@ static struct attribute *hdmi_attrs[] =3D { NULL, }; =20 -static const struct attribute_group hdmi_attribute_group =3D { +const struct attribute_group wmax_hdmi_attribute_group =3D { .name =3D "hdmi", .is_visible =3D SYSFS_GROUP_VISIBLE(hdmi), .attrs =3D hdmi_attrs, @@ -779,7 +725,7 @@ static DEVICE_ATTR_RO(status); =20 static bool amplifier_group_visible(struct kobject *kobj) { - return interface =3D=3D WMAX && alienfx->amplifier; + return alienware_interface =3D=3D WMAX && alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); =20 @@ -788,7 +734,7 @@ static struct attribute *amplifier_attrs[] =3D { NULL, }; =20 -static const struct attribute_group amplifier_attribute_group =3D { +const struct attribute_group wmax_amplifier_attribute_group =3D { .name =3D "amplifier", .is_visible =3D SYSFS_GROUP_VISIBLE(amplifier), .attrs =3D amplifier_attrs, @@ -850,7 +796,7 @@ static DEVICE_ATTR_RW(deepsleep); =20 static bool deepsleep_group_visible(struct kobject *kobj) { - return interface =3D=3D WMAX && alienfx->deepslp; + return alienware_interface =3D=3D WMAX && alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); =20 @@ -859,7 +805,7 @@ static struct attribute *deepsleep_attrs[] =3D { NULL, }; =20 -static const struct attribute_group deepsleep_attribute_group =3D { +const struct attribute_group wmax_deepsleep_attribute_group =3D { .name =3D "deepsleep", .is_visible =3D SYSFS_GROUP_VISIBLE(deepsleep), .attrs =3D deepsleep_attrs, @@ -1114,7 +1060,7 @@ static int alienfx_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; =20 - if (interface =3D=3D WMAX) + if (alienware_interface =3D=3D WMAX) priv->lighting_control_state =3D WMAX_RUNNING; else priv->lighting_control_state =3D LEGACY_RUNNING; @@ -1132,9 +1078,7 @@ static int alienfx_probe(struct platform_device *pdev) =20 static const struct attribute_group *alienfx_groups[] =3D { &zone_attribute_group, - &hdmi_attribute_group, - &lifier_attribute_group, - &deepsleep_attribute_group, + WMAX_DEV_GROUPS NULL }; =20 @@ -1153,7 +1097,7 @@ static void alienware_alienfx_remove(void *data) platform_device_unregister(pdev); } =20 -static int alienware_alienfx_setup(struct alienfx_platdata *pdata) +int alienware_alienfx_setup(struct alienfx_platdata *pdata) { struct device *dev =3D &pdata->wdev->dev; struct platform_device *pdev; @@ -1240,12 +1184,12 @@ static struct wmi_driver alienware_legacy_wmi_drive= r =3D { .no_singleton =3D true, }; =20 -static int __init alienware_legacy_wmi_init(void) +int __init alienware_legacy_wmi_init(void) { return wmi_driver_register(&alienware_legacy_wmi_driver); } =20 -static void __exit alienware_legacy_wmi_exit(void) +void __exit alienware_legacy_wmi_exit(void) { wmi_driver_unregister(&alienware_legacy_wmi_driver); } @@ -1313,7 +1257,7 @@ static struct wmi_driver alienware_wmax_wmi_driver = =3D { .no_singleton =3D true, }; =20 -static int __init alienware_wmax_wmi_init(void) +int __init alienware_wmax_wmi_init(void) { const struct dmi_system_id *id; =20 @@ -1338,7 +1282,7 @@ static int __init alienware_wmax_wmi_init(void) return wmi_driver_register(&alienware_wmax_wmi_driver); } =20 -static void __exit alienware_wmax_wmi_exit(void) +void __exit alienware_wmax_wmi_exit(void) { wmi_driver_unregister(&alienware_wmax_wmi_driver); } @@ -1356,10 +1300,10 @@ static int __init alienware_wmi_init(void) return ret; =20 if (wmi_has_guid(WMAX_CONTROL_GUID)) { - interface =3D WMAX; + alienware_interface =3D WMAX; ret =3D alienware_wmax_wmi_init(); } else { - interface =3D LEGACY; + alienware_interface =3D LEGACY; ret =3D alienware_legacy_wmi_init(); } =20 @@ -1373,7 +1317,7 @@ module_init(alienware_wmi_init); =20 static void __exit alienware_wmi_exit(void) { - if (interface =3D=3D WMAX) + if (alienware_interface =3D=3D WMAX) alienware_wmax_wmi_exit(); else alienware_legacy_wmi_exit(); diff --git a/drivers/platform/x86/dell/alienware-wmi.h b/drivers/platform/x= 86/dell/alienware-wmi.h new file mode 100644 index 000000000000..b950c91e1979 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -0,0 +1,92 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Alienware WMI special features driver + * + * Copyright (C) 2014 Dell Inc + * Copyright (C) 2024 Kurt Borja + */ + +#ifndef _ALIENWARE_WMI_H_ +#define _ALIENWARE_WMI_H_ + +#include +#include +#include + +#define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" +#define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" +#define WMAX_CONTROL_GUID "A70591CE-A997-11DA-B012-B622A1EF5492" + +enum INTERFACE_FLAGS { + LEGACY, + WMAX, +}; + +enum LEGACY_CONTROL_STATES { + LEGACY_RUNNING =3D 1, + LEGACY_BOOTING =3D 0, + LEGACY_SUSPEND =3D 3, +}; + +enum WMAX_CONTROL_STATES { + WMAX_RUNNING =3D 0xFF, + WMAX_BOOTING =3D 0, + WMAX_SUSPEND =3D 3, +}; + +struct alienfx_quirks { + u8 num_zones; + bool hdmi_mux; + bool amplifier; + bool deepslp; +}; + +struct color_platform { + u8 blue; + u8 green; + u8 red; +} __packed; + +struct alienfx_priv { + struct platform_device *pdev; + struct led_classdev global_led; + struct color_platform colors[4]; + u8 global_brightness; + u8 lighting_control_state; +}; + +struct alienfx_ops { + int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 location); + int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 brightness); +}; + +struct alienfx_platdata { + struct wmi_device *wdev; + struct alienfx_ops ops; +}; + +extern u8 alienware_interface; +extern struct alienfx_quirks *alienfx; + +int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, + void *in_args, size_t in_size, u32 *out_data); + +int alienware_alienfx_setup(struct alienfx_platdata *pdata); + +int __init alienware_legacy_wmi_init(void); +void __exit alienware_legacy_wmi_exit(void); + +extern const struct attribute_group wmax_hdmi_attribute_group; +extern const struct attribute_group wmax_amplifier_attribute_group; +extern const struct attribute_group wmax_deepsleep_attribute_group; + +#define WMAX_DEV_GROUPS &wmax_hdmi_attribute_group, \ + &wmax_amplifier_attribute_group, \ + &wmax_deepsleep_attribute_group, + +int __init alienware_wmax_wmi_init(void); +void __exit alienware_wmax_wmi_exit(void); + +#endif --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f182.google.com (mail-yw1-f182.google.com [209.85.128.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AA23236432; Fri, 7 Feb 2025 14:08:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937310; cv=none; b=fR7Yj4GwJ7mwI5hS511ZClqgkd2t/u+rqvlCYwgGkoZJdoD+7X508RYl3ykozj8OSn7usyxlxaHiXPEDJaSkkUKgnp0ZBKRTk/JKqomm3CMhT9xlx1HDecg6ZYEd+5j6SU6lULSOvk917JW8XPa8/KswOWRXm/W/8rI/1Hyb+sY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937310; c=relaxed/simple; bh=SrcnujrnGufZBLSEdBxQHicFKTesADp98gACdHGqGro=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EF9hUSpmMYpDMUJm1LLZGA4wKiHvCNBMmKGceIr/raUsnehLLVELcAEWhAHMDoUgYX89aXgF7a2+mp+K43nn7OADoyMwKcj4m/FcDv4vOrieUeH2dliXPkJc1kER6+ucx0+r5zpzpqu8JoPp0DcBmqNvS0X92LKTGGeMFbcDL+0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Xmz1erTU; arc=none smtp.client-ip=209.85.128.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Xmz1erTU" Received: by mail-yw1-f182.google.com with SMTP id 00721157ae682-6ef60e500d7so16939307b3.0; Fri, 07 Feb 2025 06:08:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937306; x=1739542106; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EZKkb1SVasBnFPckxsAmCJ7JRXkGzzbkEsJuaWn9Tik=; b=Xmz1erTUqty6Liy2KNGeww3oH1c8k4qUH5bazBmvML7kkrkh4tekMG40hXFxg6Eb34 tBx4kl/0+mjK6d8hD0Edt8Jb72fPEH7qccgAj3eO2l+MoXop4wXrZ0CDozPNUot+9JX1 ibtoZ13EWfm/bn+6CI9sUt7CHiz445mHqgsXvcjYLMXh2FfEVKH+UfWwmzxi7ZjI7Rwp qM1k+ww8DaOv4exJKu95XCQ5OzC7rOP66MfAXgpBrJOthK80o4Uc99D+OoWAKzP0Raz9 Z42+3pCS0IP/4GhQgvPWmUMUJ+EhpVmAjL12HuCRTI8qKPx4h804yqqT7lcUWmvvAF9Z 83pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937306; x=1739542106; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EZKkb1SVasBnFPckxsAmCJ7JRXkGzzbkEsJuaWn9Tik=; b=q1WSPBWU0hPyBTI0rmAz2SExAmuEQAczXk+bdvGNMyrdqCvTgt0fdtZOnTlJlfpdHh qObmbI2+sNDEetMOO8yOc3FfeBbMayiR3PITtCupmmGVmUVQBt61HyS1TOCihSwDI90o EKXds7SVpuCeWTSNonGTOXzT4vK41vvgS/NltM5DeYCbkqNsnpCA7WE0ZbgjhsmLNppp Uo+ETCYq1YxNQjBa9AKJo+JSSekOiZBcqpVqJgVm38//YnBS93LsR/9OFMT0k18IZrFt AFg24goA6zpmHWQdvYcHcQ7fiuGTjsqEBq3MaPgskHb9vDYHtebwhhAKfTaiRMUGQlxS YnfQ== X-Forwarded-Encrypted: i=1; AJvYcCXgjuRPPDxSVfjj3BN6Xkc8nBddyCD+gOA4NCoe18ePuupADLxeTYsYZOpBvjiCAow0MlAxDLNb6vYOjjA=@vger.kernel.org X-Gm-Message-State: AOJu0YwKJCMSfhEzhYyKjdl8YdLyov9Dk+FYqlb9WoOyRSwLpspYf7XU Ti0zaWnBbMtgC7uKhv1sg/ZtM7b+JZoelnHfuRKJdVU97/UPkZVwt/Oa0g== X-Gm-Gg: ASbGncvJaQcqi937h/wqzs4a/HT8n/TlVg/FVDvnfnfi50gG7AQJIAipw5Gdph6Or5X mKYdkCxeiFyLY5fruVWpFyepus9fNv66uN6lGVU+mDhCEZYBb40Q2hbA1LkQwVM5T+STyy/Y5JG FNCSUdk3eMCTXG/C5HUkw4kYrFZlun7mYfNwdoFbCfi6jqKwPodSvRki6VjYyKUMCuBlZ+Jd0Lz g/Ei827Bn8/tzV3ahzK35w5dsqpShMYpKWZ15DQ01O7OqonG6TEiC7Ep04UwLXwcXrvW5zOrvKT 6sAznAoF4r9gPHAT/tnDvnQ= X-Google-Smtp-Source: AGHT+IFGBT5BKdiJJDSOH9epgMHXCQ6zjKspcpyLV4PIRuGcjU939zz7R3kaUG117N6j4RInEN/ybQ== X-Received: by 2002:a05:690c:4c04:b0:6ef:8c41:defc with SMTP id 00721157ae682-6f9b284bc95mr31220607b3.11.1738937305616; Fri, 07 Feb 2025 06:08:25 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:25 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 11/14] platform/x86: Split the alienware-wmi driver Date: Fri, 7 Feb 2025 09:07:40 -0500 Message-ID: <20250207140743.16822-12-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Split alienware-wmi WMI drivers into different files. This is done seamlessly by copying and pasting, however some blocks are reordered. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/Makefile | 2 + .../platform/x86/dell/alienware-wmi-base.c | 839 ------------------ .../platform/x86/dell/alienware-wmi-legacy.c | 95 ++ .../platform/x86/dell/alienware-wmi-wmax.c | 768 ++++++++++++++++ 4 files changed, 865 insertions(+), 839 deletions(-) create mode 100644 drivers/platform/x86/dell/alienware-wmi-legacy.c create mode 100644 drivers/platform/x86/dell/alienware-wmi-wmax.c diff --git a/drivers/platform/x86/dell/Makefile b/drivers/platform/x86/dell= /Makefile index f8aec8502c2f..03ba459f3d31 100644 --- a/drivers/platform/x86/dell/Makefile +++ b/drivers/platform/x86/dell/Makefile @@ -6,6 +6,8 @@ =20 obj-$(CONFIG_ALIENWARE_WMI) +=3D alienware-wmi.o alienware-wmi-objs :=3D alienware-wmi-base.o +alienware-wmi-y +=3D alienware-wmi-legacy.o +alienware-wmi-y +=3D alienware-wmi-wmax.o obj-$(CONFIG_DCDBAS) +=3D dcdbas.o obj-$(CONFIG_DELL_LAPTOP) +=3D dell-laptop.o obj-$(CONFIG_DELL_RBTN) +=3D dell-rbtn.o diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platf= orm/x86/dell/alienware-wmi-base.c index 124969e13ec4..7bad9717183d 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -8,92 +8,17 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 #include -#include -#include #include #include #include -#include #include #include -#include #include "alienware-wmi.h" =20 -#define WMAX_METHOD_HDMI_SOURCE 0x1 -#define WMAX_METHOD_HDMI_STATUS 0x2 -#define WMAX_METHOD_BRIGHTNESS 0x3 -#define WMAX_METHOD_ZONE_CONTROL 0x4 -#define WMAX_METHOD_HDMI_CABLE 0x5 -#define WMAX_METHOD_AMPLIFIER_CABLE 0x6 -#define WMAX_METHOD_DEEP_SLEEP_CONTROL 0x0B -#define WMAX_METHOD_DEEP_SLEEP_STATUS 0x0C -#define WMAX_METHOD_THERMAL_INFORMATION 0x14 -#define WMAX_METHOD_THERMAL_CONTROL 0x15 -#define WMAX_METHOD_GAME_SHIFT_STATUS 0x25 - -#define WMAX_THERMAL_MODE_GMODE 0xAB - -#define WMAX_FAILURE_CODE 0xFFFFFFFF - MODULE_AUTHOR("Mario Limonciello "); MODULE_DESCRIPTION("Alienware special feature control"); MODULE_LICENSE("GPL"); =20 -static bool force_platform_profile; -module_param_unsafe(force_platform_profile, bool, 0); -MODULE_PARM_DESC(force_platform_profile, "Forces auto-detecting thermal pr= ofiles without checking if WMI thermal backend is available"); - -static bool force_gmode; -module_param_unsafe(force_gmode, bool, 0); -MODULE_PARM_DESC(force_gmode, "Forces G-Mode when performance profile is s= elected"); - -enum WMAX_THERMAL_INFORMATION_OPERATIONS { - WMAX_OPERATION_SYS_DESCRIPTION =3D 0x02, - WMAX_OPERATION_LIST_IDS =3D 0x03, - WMAX_OPERATION_CURRENT_PROFILE =3D 0x0B, -}; - -enum WMAX_THERMAL_CONTROL_OPERATIONS { - WMAX_OPERATION_ACTIVATE_PROFILE =3D 0x01, -}; - -enum WMAX_GAME_SHIFT_STATUS_OPERATIONS { - WMAX_OPERATION_TOGGLE_GAME_SHIFT =3D 0x01, - WMAX_OPERATION_GET_GAME_SHIFT_STATUS =3D 0x02, -}; - -enum WMAX_THERMAL_TABLES { - WMAX_THERMAL_TABLE_BASIC =3D 0x90, - WMAX_THERMAL_TABLE_USTT =3D 0xA0, -}; - -enum wmax_thermal_mode { - THERMAL_MODE_USTT_BALANCED, - THERMAL_MODE_USTT_BALANCED_PERFORMANCE, - THERMAL_MODE_USTT_COOL, - THERMAL_MODE_USTT_QUIET, - THERMAL_MODE_USTT_PERFORMANCE, - THERMAL_MODE_USTT_LOW_POWER, - THERMAL_MODE_BASIC_QUIET, - THERMAL_MODE_BASIC_BALANCED, - THERMAL_MODE_BASIC_BALANCED_PERFORMANCE, - THERMAL_MODE_BASIC_PERFORMANCE, - THERMAL_MODE_LAST, -}; - -static const enum platform_profile_option wmax_mode_to_platform_profile[TH= ERMAL_MODE_LAST] =3D { - [THERMAL_MODE_USTT_BALANCED] =3D PLATFORM_PROFILE_BALANCED, - [THERMAL_MODE_USTT_BALANCED_PERFORMANCE] =3D PLATFORM_PROFILE_BALANCED_PE= RFORMANCE, - [THERMAL_MODE_USTT_COOL] =3D PLATFORM_PROFILE_COOL, - [THERMAL_MODE_USTT_QUIET] =3D PLATFORM_PROFILE_QUIET, - [THERMAL_MODE_USTT_PERFORMANCE] =3D PLATFORM_PROFILE_PERFORMANCE, - [THERMAL_MODE_USTT_LOW_POWER] =3D PLATFORM_PROFILE_LOW_POWER, - [THERMAL_MODE_BASIC_QUIET] =3D PLATFORM_PROFILE_QUIET, - [THERMAL_MODE_BASIC_BALANCED] =3D PLATFORM_PROFILE_BALANCED, - [THERMAL_MODE_BASIC_BALANCED_PERFORMANCE] =3D PLATFORM_PROFILE_BALANCED_P= ERFORMANCE, - [THERMAL_MODE_BASIC_PERFORMANCE] =3D PLATFORM_PROFILE_PERFORMANCE, -}; - struct alienfx_quirks *alienfx; =20 static struct alienfx_quirks quirk_inspiron5675 =3D { @@ -218,152 +143,8 @@ static const struct dmi_system_id alienware_quirks[] = __initconst =3D { {} }; =20 -struct wmax_brightness_args { - u32 led_mask; - u32 percentage; -}; - -struct wmax_basic_args { - u8 arg; -}; - -struct legacy_led_args { - struct color_platform colors; - u8 brightness; - u8 state; -} __packed; - -struct wmax_led_args { - u32 led_mask; - struct color_platform colors; - u8 state; -} __packed; - -struct wmax_u32_args { - u8 operation; - u8 arg1; - u8 arg2; - u8 arg3; -}; - -struct awcc_priv { - struct wmi_device *wdev; - struct device *ppdev; - enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; -}; - u8 alienware_interface; =20 -struct awcc_quirks { - bool pprof; - bool gmode; -}; - -static struct awcc_quirks g_series_quirks =3D { - .pprof =3D true, - .gmode =3D true, -}; - -static struct awcc_quirks generic_quirks =3D { - .pprof =3D true, - .gmode =3D false, -}; - -static struct awcc_quirks empty_quirks; - -static const struct dmi_system_id awcc_dmi_table[] __initconst =3D { - { - .ident =3D "Alienware m16 R1 AMD", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), - }, - .driver_data =3D &generic_quirks, - }, - { - .ident =3D "Alienware m17 R5", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data =3D &generic_quirks, - }, - { - .ident =3D "Alienware m18 R2", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data =3D &generic_quirks, - }, - { - .ident =3D "Alienware x15 R1", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data =3D &generic_quirks, - }, - { - .ident =3D "Alienware x17 R2", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data =3D &generic_quirks, - }, - { - .ident =3D "Dell Inc. G15 5510", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), - }, - .driver_data =3D &g_series_quirks, - }, - { - .ident =3D "Dell Inc. G15 5511", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), - }, - .driver_data =3D &g_series_quirks, - }, - { - .ident =3D "Dell Inc. G15 5515", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), - }, - .driver_data =3D &g_series_quirks, - }, - { - .ident =3D "Dell Inc. G3 3500", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), - }, - .driver_data =3D &g_series_quirks, - }, - { - .ident =3D "Dell Inc. G3 3590", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), - }, - .driver_data =3D &g_series_quirks, - }, - { - .ident =3D "Dell Inc. G5 5500", - .matches =3D { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), - }, - .driver_data =3D &g_series_quirks, - }, -}; - -static struct awcc_quirks *awcc; - int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, void *in_args, size_t in_size, u32 *out_data) { @@ -599,456 +380,6 @@ static enum led_brightness global_led_get(struct led_= classdev *led_cdev) return priv->global_brightness; } =20 -/* - * The HDMI mux sysfs node indicates the status of the HDMI input mux. - * It can toggle between standard system GPU output and HDMI input. - */ -static ssize_t cable_show(struct device *dev, struct device_attribute *att= r, - char *buf) -{ - struct alienfx_platdata *pdata =3D dev_get_platdata(dev); - struct wmax_basic_args in_args =3D { - .arg =3D 0, - }; - u32 out_data; - int ret; - - ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data =3D=3D 0) - return sysfs_emit(buf, "[unconnected] connected unknown\n"); - else if (out_data =3D=3D 1) - return sysfs_emit(buf, "unconnected [connected] unknown\n"); - } - - pr_err("alienware-wmi: unknown HDMI cable status: %d\n", ret); - return sysfs_emit(buf, "unconnected connected [unknown]\n"); -} - -static ssize_t source_show(struct device *dev, struct device_attribute *at= tr, - char *buf) -{ - struct alienfx_platdata *pdata =3D dev_get_platdata(dev); - struct wmax_basic_args in_args =3D { - .arg =3D 0, - }; - u32 out_data; - int ret; - - ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data =3D=3D 1) - return sysfs_emit(buf, "[input] gpu unknown\n"); - else if (out_data =3D=3D 2) - return sysfs_emit(buf, "input [gpu] unknown\n"); - } - - pr_err("alienware-wmi: unknown HDMI source status: %u\n", ret); - return sysfs_emit(buf, "input gpu [unknown]\n"); -} - -static ssize_t source_store(struct device *dev, struct device_attribute *a= ttr, - const char *buf, size_t count) -{ - struct alienfx_platdata *pdata =3D dev_get_platdata(dev); - struct wmax_basic_args args; - int ret; - - if (strcmp(buf, "gpu\n") =3D=3D 0) - args.arg =3D 1; - else if (strcmp(buf, "input\n") =3D=3D 0) - args.arg =3D 2; - else - args.arg =3D 3; - pr_debug("alienware-wmi: setting hdmi to %d : %s", args.arg, buf); - - ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_SOURCE, &args, - sizeof(args), NULL); - if (ret < 0) - pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", ret); - - return count; -} - -static DEVICE_ATTR_RO(cable); -static DEVICE_ATTR_RW(source); - -static bool hdmi_group_visible(struct kobject *kobj) -{ - return alienware_interface =3D=3D WMAX && alienfx->hdmi_mux; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); - -static struct attribute *hdmi_attrs[] =3D { - &dev_attr_cable.attr, - &dev_attr_source.attr, - NULL, -}; - -const struct attribute_group wmax_hdmi_attribute_group =3D { - .name =3D "hdmi", - .is_visible =3D SYSFS_GROUP_VISIBLE(hdmi), - .attrs =3D hdmi_attrs, -}; - -/* - * Alienware GFX amplifier support - * - Currently supports reading cable status - * - Leaving expansion room to possibly support dock/undock events later - */ -static ssize_t status_show(struct device *dev, struct device_attribute *at= tr, - char *buf) -{ - struct alienfx_platdata *pdata =3D dev_get_platdata(dev); - struct wmax_basic_args in_args =3D { - .arg =3D 0, - }; - u32 out_data; - int ret; - - ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_AMPLIFIER_CABLE, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data =3D=3D 0) - return sysfs_emit(buf, "[unconnected] connected unknown\n"); - else if (out_data =3D=3D 1) - return sysfs_emit(buf, "unconnected [connected] unknown\n"); - } - - pr_err("alienware-wmi: unknown amplifier cable status: %d\n", ret); - return sysfs_emit(buf, "unconnected connected [unknown]\n"); -} - -static DEVICE_ATTR_RO(status); - -static bool amplifier_group_visible(struct kobject *kobj) -{ - return alienware_interface =3D=3D WMAX && alienfx->amplifier; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); - -static struct attribute *amplifier_attrs[] =3D { - &dev_attr_status.attr, - NULL, -}; - -const struct attribute_group wmax_amplifier_attribute_group =3D { - .name =3D "amplifier", - .is_visible =3D SYSFS_GROUP_VISIBLE(amplifier), - .attrs =3D amplifier_attrs, -}; - -/* - * Deep Sleep Control support - * - Modifies BIOS setting for deep sleep control allowing extra wakeup ev= ents - */ -static ssize_t deepsleep_show(struct device *dev, struct device_attribute = *attr, - char *buf) -{ - struct alienfx_platdata *pdata =3D dev_get_platdata(dev); - struct wmax_basic_args in_args =3D { - .arg =3D 0, - }; - u32 out_data; - int ret; - - ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_STATUS, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data =3D=3D 0) - return sysfs_emit(buf, "[disabled] s5 s5_s4\n"); - else if (out_data =3D=3D 1) - return sysfs_emit(buf, "disabled [s5] s5_s4\n"); - else if (out_data =3D=3D 2) - return sysfs_emit(buf, "disabled s5 [s5_s4]\n"); - } - - pr_err("alienware-wmi: unknown deep sleep status: %d\n", ret); - return sysfs_emit(buf, "disabled s5 s5_s4 [unknown]\n"); -} - -static ssize_t deepsleep_store(struct device *dev, struct device_attribute= *attr, - const char *buf, size_t count) -{ - struct alienfx_platdata *pdata =3D dev_get_platdata(dev); - struct wmax_basic_args args; - int ret; - - if (strcmp(buf, "disabled\n") =3D=3D 0) - args.arg =3D 0; - else if (strcmp(buf, "s5\n") =3D=3D 0) - args.arg =3D 1; - else - args.arg =3D 2; - pr_debug("alienware-wmi: setting deep sleep to %d : %s", args.arg, buf); - - ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_CONTROL, - &args, sizeof(args), NULL); - if (!ret) - pr_err("alienware-wmi: deep sleep control failed: results: %u\n", ret); - - return count; -} - -static DEVICE_ATTR_RW(deepsleep); - -static bool deepsleep_group_visible(struct kobject *kobj) -{ - return alienware_interface =3D=3D WMAX && alienfx->deepslp; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); - -static struct attribute *deepsleep_attrs[] =3D { - &dev_attr_deepsleep.attr, - NULL, -}; - -const struct attribute_group wmax_deepsleep_attribute_group =3D { - .name =3D "deepsleep", - .is_visible =3D SYSFS_GROUP_VISIBLE(deepsleep), - .attrs =3D deepsleep_attrs, -}; - -/* - * Thermal Profile control - * - Provides thermal profile control through the Platform Profile API - */ -#define WMAX_THERMAL_TABLE_MASK GENMASK(7, 4) -#define WMAX_THERMAL_MODE_MASK GENMASK(3, 0) -#define WMAX_SENSOR_ID_MASK BIT(8) - -static bool is_wmax_thermal_code(u32 code) -{ - if (code & WMAX_SENSOR_ID_MASK) - return false; - - if ((code & WMAX_THERMAL_MODE_MASK) >=3D THERMAL_MODE_LAST) - return false; - - if ((code & WMAX_THERMAL_TABLE_MASK) =3D=3D WMAX_THERMAL_TABLE_BASIC && - (code & WMAX_THERMAL_MODE_MASK) >=3D THERMAL_MODE_BASIC_QUIET) - return true; - - if ((code & WMAX_THERMAL_TABLE_MASK) =3D=3D WMAX_THERMAL_TABLE_USTT && - (code & WMAX_THERMAL_MODE_MASK) <=3D THERMAL_MODE_USTT_LOW_POWER) - return true; - - return false; -} - -static int wmax_thermal_information(struct wmi_device *wdev, u8 operation, - u8 arg, u32 *out_data) -{ - struct wmax_u32_args in_args =3D { - .operation =3D operation, - .arg1 =3D arg, - .arg2 =3D 0, - .arg3 =3D 0, - }; - int ret; - - ret =3D alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, - &in_args, sizeof(in_args), out_data); - if (ret < 0) - return ret; - - if (*out_data =3D=3D WMAX_FAILURE_CODE) - return -EBADRQC; - - return 0; -} - -static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) -{ - struct wmax_u32_args in_args =3D { - .operation =3D WMAX_OPERATION_ACTIVATE_PROFILE, - .arg1 =3D profile, - .arg2 =3D 0, - .arg3 =3D 0, - }; - u32 out_data; - int ret; - - ret =3D alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, - &in_args, sizeof(in_args), &out_data); - if (ret) - return ret; - - if (out_data =3D=3D WMAX_FAILURE_CODE) - return -EBADRQC; - - return 0; -} - -static int wmax_game_shift_status(struct wmi_device *wdev, u8 operation, - u32 *out_data) -{ - struct wmax_u32_args in_args =3D { - .operation =3D operation, - .arg1 =3D 0, - .arg2 =3D 0, - .arg3 =3D 0, - }; - int ret; - - ret =3D alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, - &in_args, sizeof(in_args), out_data); - if (ret < 0) - return ret; - - if (*out_data =3D=3D WMAX_FAILURE_CODE) - return -EOPNOTSUPP; - - return 0; -} - -static int thermal_profile_get(struct device *dev, - enum platform_profile_option *profile) -{ - struct awcc_priv *priv =3D dev_get_drvdata(dev); - u32 out_data; - int ret; - - ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFI= LE, - 0, &out_data); - - if (ret < 0) - return ret; - - if (out_data =3D=3D WMAX_THERMAL_MODE_GMODE) { - *profile =3D PLATFORM_PROFILE_PERFORMANCE; - return 0; - } - - if (!is_wmax_thermal_code(out_data)) - return -ENODATA; - - out_data &=3D WMAX_THERMAL_MODE_MASK; - *profile =3D wmax_mode_to_platform_profile[out_data]; - - return 0; -} - -static int thermal_profile_set(struct device *dev, - enum platform_profile_option profile) -{ - struct awcc_priv *priv =3D dev_get_drvdata(dev); - - if (awcc->gmode) { - u32 gmode_status; - int ret; - - ret =3D wmax_game_shift_status(priv->wdev, - WMAX_OPERATION_GET_GAME_SHIFT_STATUS, - &gmode_status); - - if (ret < 0) - return ret; - - if ((profile =3D=3D PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || - (profile !=3D PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { - ret =3D wmax_game_shift_status(priv->wdev, - WMAX_OPERATION_TOGGLE_GAME_SHIFT, - &gmode_status); - - if (ret < 0) - return ret; - } - } - - return wmax_thermal_control(priv->wdev, - priv->supported_thermal_profiles[profile]); -} - -static int thermal_profile_probe(void *drvdata, unsigned long *choices) -{ - enum platform_profile_option profile; - struct awcc_priv *priv =3D drvdata; - enum wmax_thermal_mode mode; - u8 sys_desc[4]; - u32 first_mode; - u32 out_data; - int ret; - - ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_SYS_DESCRIPTI= ON, - 0, (u32 *) &sys_desc); - if (ret < 0) - return ret; - - first_mode =3D sys_desc[0] + sys_desc[1]; - - for (u32 i =3D 0; i < sys_desc[3]; i++) { - ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_LIST_IDS, - i + first_mode, &out_data); - - if (ret =3D=3D -EIO) - return ret; - - if (ret =3D=3D -EBADRQC) - break; - - if (!is_wmax_thermal_code(out_data)) - continue; - - mode =3D out_data & WMAX_THERMAL_MODE_MASK; - profile =3D wmax_mode_to_platform_profile[mode]; - priv->supported_thermal_profiles[profile] =3D out_data; - - set_bit(profile, choices); - } - - if (bitmap_empty(choices, PLATFORM_PROFILE_LAST)) - return -ENODEV; - - if (awcc->gmode) { - priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =3D - WMAX_THERMAL_MODE_GMODE; - - set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); - } - - return 0; -} - -static const struct platform_profile_ops awcc_platform_profile_ops =3D { - .probe =3D thermal_profile_probe, - .profile_get =3D thermal_profile_get, - .profile_set =3D thermal_profile_set, -}; - -static int awcc_platform_profile_init(struct wmi_device *wdev) -{ - struct awcc_priv *priv =3D dev_get_drvdata(&wdev->dev); - - priv->ppdev =3D devm_platform_profile_register(&wdev->dev, "alienware-wmi= ", - priv, &awcc_platform_profile_ops); - - return PTR_ERR_OR_ZERO(priv->ppdev); -} - -static int alienware_awcc_setup(struct wmi_device *wdev) -{ - struct awcc_priv *priv; - int ret; - - priv =3D devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - priv->wdev =3D wdev; - dev_set_drvdata(&wdev->dev, priv); - - if (awcc->pprof) { - ret =3D awcc_platform_profile_init(wdev); - if (ret) - return ret; - } - - return 0; -} - /* * Platform Driver */ @@ -1117,176 +448,6 @@ int alienware_alienfx_setup(struct alienfx_platdata = *pdata) return 0; } =20 -/* - * Legacy WMI driver - */ -static int legacy_wmi_update_led(struct alienfx_priv *priv, - struct wmi_device *wdev, u8 location) -{ - struct legacy_led_args legacy_args =3D { - .colors =3D priv->colors[location], - .brightness =3D priv->global_brightness, - .state =3D 0, - }; - struct acpi_buffer input; - acpi_status status; - - if (legacy_args.state !=3D LEGACY_RUNNING) { - legacy_args.state =3D priv->lighting_control_state; - - input.length =3D sizeof(legacy_args); - input.pointer =3D &legacy_args; - - status =3D wmi_evaluate_method(LEGACY_POWER_CONTROL_GUID, 0, - location + 1, &input, NULL); - if (ACPI_FAILURE(status)) - return -EIO; - - return 0; - } - - return alienware_wmi_command(wdev, location + 1, &legacy_args, - sizeof(legacy_args), NULL); -} - -static int legacy_wmi_update_brightness(struct alienfx_priv *priv, - struct wmi_device *wdev, u8 brightness) -{ - return legacy_wmi_update_led(priv, wdev, 0); -} - -static int legacy_wmi_probe(struct wmi_device *wdev, const void *context) -{ - struct alienfx_platdata pdata =3D { - .wdev =3D wdev, - .ops =3D { - .upd_led =3D legacy_wmi_update_led, - .upd_brightness =3D legacy_wmi_update_brightness, - }, - }; - - return alienware_alienfx_setup(&pdata); -} - -static const struct wmi_device_id alienware_legacy_device_id_table[] =3D { - { LEGACY_CONTROL_GUID, NULL }, - { }, -}; -MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table); - -static struct wmi_driver alienware_legacy_wmi_driver =3D { - .driver =3D { - .name =3D "alienware-wmi-alienfx", - .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, - }, - .id_table =3D alienware_legacy_device_id_table, - .probe =3D legacy_wmi_probe, - .no_singleton =3D true, -}; - -int __init alienware_legacy_wmi_init(void) -{ - return wmi_driver_register(&alienware_legacy_wmi_driver); -} - -void __exit alienware_legacy_wmi_exit(void) -{ - wmi_driver_unregister(&alienware_legacy_wmi_driver); -} - -/* - * WMAX WMI driver - */ -static int wmax_wmi_update_led(struct alienfx_priv *priv, - struct wmi_device *wdev, u8 location) -{ - struct wmax_led_args in_args =3D { - .led_mask =3D 1 << location, - .colors =3D priv->colors[location], - .state =3D priv->lighting_control_state, - }; - - return alienware_wmi_command(wdev, WMAX_METHOD_ZONE_CONTROL, &in_args, - sizeof(in_args), NULL); -} - -static int wmax_wmi_update_brightness(struct alienfx_priv *priv, - struct wmi_device *wdev, u8 brightness) -{ - struct wmax_brightness_args in_args =3D { - .led_mask =3D 0xFF, - .percentage =3D brightness, - }; - - return alienware_wmi_command(wdev, WMAX_METHOD_BRIGHTNESS, &in_args, - sizeof(in_args), NULL); -} - -static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) -{ - struct alienfx_platdata pdata =3D { - .wdev =3D wdev, - .ops =3D { - .upd_led =3D wmax_wmi_update_led, - .upd_brightness =3D wmax_wmi_update_brightness, - }, - }; - int ret; - - if (awcc) - ret =3D alienware_awcc_setup(wdev); - else - ret =3D alienware_alienfx_setup(&pdata); - - return ret; -} - -static const struct wmi_device_id alienware_wmax_device_id_table[] =3D { - { WMAX_CONTROL_GUID, NULL }, - { }, -}; -MODULE_DEVICE_TABLE(wmi, alienware_wmax_device_id_table); - -static struct wmi_driver alienware_wmax_wmi_driver =3D { - .driver =3D { - .name =3D "alienware-wmi-wmax", - .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, - }, - .id_table =3D alienware_wmax_device_id_table, - .probe =3D wmax_wmi_probe, - .no_singleton =3D true, -}; - -int __init alienware_wmax_wmi_init(void) -{ - const struct dmi_system_id *id; - - id =3D dmi_first_match(awcc_dmi_table); - if (id) - awcc =3D id->driver_data; - - if (force_platform_profile) { - if (!awcc) - awcc =3D &empty_quirks; - - awcc->pprof =3D true; - } - - if (force_gmode) { - if (awcc) - awcc->gmode =3D true; - else - pr_warn("force_gmode requires platform profile support\n"); - } - - return wmi_driver_register(&alienware_wmax_wmi_driver); -} - -void __exit alienware_wmax_wmi_exit(void) -{ - wmi_driver_unregister(&alienware_wmax_wmi_driver); -} - static int __init alienware_wmi_init(void) { int ret; diff --git a/drivers/platform/x86/dell/alienware-wmi-legacy.c b/drivers/pla= tform/x86/dell/alienware-wmi-legacy.c new file mode 100644 index 000000000000..4a84a2fe918b --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi-legacy.c @@ -0,0 +1,95 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Alienware LEGACY WMI device driver + * + * Copyright (C) 2025 Kurt Borja + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include "alienware-wmi.h" + +struct legacy_led_args { + struct color_platform colors; + u8 brightness; + u8 state; +} __packed; + + +/* + * Legacy WMI driver + */ +static int legacy_wmi_update_led(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 location) +{ + struct legacy_led_args legacy_args =3D { + .colors =3D priv->colors[location], + .brightness =3D priv->global_brightness, + .state =3D 0, + }; + struct acpi_buffer input; + acpi_status status; + + if (legacy_args.state !=3D LEGACY_RUNNING) { + legacy_args.state =3D priv->lighting_control_state; + + input.length =3D sizeof(legacy_args); + input.pointer =3D &legacy_args; + + status =3D wmi_evaluate_method(LEGACY_POWER_CONTROL_GUID, 0, + location + 1, &input, NULL); + if (ACPI_FAILURE(status)) + return -EIO; + + return 0; + } + + return alienware_wmi_command(wdev, location + 1, &legacy_args, + sizeof(legacy_args), NULL); +} + +static int legacy_wmi_update_brightness(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 brightness) +{ + return legacy_wmi_update_led(priv, wdev, 0); +} + +static int legacy_wmi_probe(struct wmi_device *wdev, const void *context) +{ + struct alienfx_platdata pdata =3D { + .wdev =3D wdev, + .ops =3D { + .upd_led =3D legacy_wmi_update_led, + .upd_brightness =3D legacy_wmi_update_brightness, + }, + }; + + return alienware_alienfx_setup(&pdata); +} + +static const struct wmi_device_id alienware_legacy_device_id_table[] =3D { + { LEGACY_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table); + +static struct wmi_driver alienware_legacy_wmi_driver =3D { + .driver =3D { + .name =3D "alienware-wmi-alienfx", + .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table =3D alienware_legacy_device_id_table, + .probe =3D legacy_wmi_probe, + .no_singleton =3D true, +}; + +int __init alienware_legacy_wmi_init(void) +{ + return wmi_driver_register(&alienware_legacy_wmi_driver); +} + +void __exit alienware_legacy_wmi_exit(void) +{ + wmi_driver_unregister(&alienware_legacy_wmi_driver); +} diff --git a/drivers/platform/x86/dell/alienware-wmi-wmax.c b/drivers/platf= orm/x86/dell/alienware-wmi-wmax.c new file mode 100644 index 000000000000..5b6a0c866be2 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c @@ -0,0 +1,768 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Alienware WMAX WMI device driver + * + * Copyright (C) 2014 Dell Inc + * Copyright (C) 2025 Kurt Borja + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include "alienware-wmi.h" + +#define WMAX_METHOD_HDMI_SOURCE 0x1 +#define WMAX_METHOD_HDMI_STATUS 0x2 +#define WMAX_METHOD_HDMI_CABLE 0x5 +#define WMAX_METHOD_AMPLIFIER_CABLE 0x6 +#define WMAX_METHOD_DEEP_SLEEP_CONTROL 0x0B +#define WMAX_METHOD_DEEP_SLEEP_STATUS 0x0C +#define WMAX_METHOD_BRIGHTNESS 0x3 +#define WMAX_METHOD_ZONE_CONTROL 0x4 +#define WMAX_METHOD_THERMAL_INFORMATION 0x14 +#define WMAX_METHOD_THERMAL_CONTROL 0x15 +#define WMAX_METHOD_GAME_SHIFT_STATUS 0x25 + +#define WMAX_THERMAL_MODE_GMODE 0xAB + +#define WMAX_FAILURE_CODE 0xFFFFFFFF +#define WMAX_THERMAL_TABLE_MASK GENMASK(7, 4) +#define WMAX_THERMAL_MODE_MASK GENMASK(3, 0) +#define WMAX_SENSOR_ID_MASK BIT(8) + +static bool force_platform_profile; +module_param_unsafe(force_platform_profile, bool, 0); +MODULE_PARM_DESC(force_platform_profile, "Forces auto-detecting thermal pr= ofiles without checking if WMI thermal backend is available"); + +static bool force_gmode; +module_param_unsafe(force_gmode, bool, 0); +MODULE_PARM_DESC(force_gmode, "Forces G-Mode when performance profile is s= elected"); + +struct awcc_quirks { + bool pprof; + bool gmode; +}; + +static struct awcc_quirks g_series_quirks =3D { + .pprof =3D true, + .gmode =3D true, +}; + +static struct awcc_quirks generic_quirks =3D { + .pprof =3D true, + .gmode =3D false, +}; + +static struct awcc_quirks empty_quirks; + +static const struct dmi_system_id awcc_dmi_table[] __initconst =3D { + { + .ident =3D "Alienware m16 R1 AMD", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Alienware m17 R5", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware m18 R2", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware x15 R1", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Alienware x17 R2", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data =3D &generic_quirks, + }, + { + .ident =3D "Dell Inc. G15 5510", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G15 5511", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G15 5515", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G3 3500", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G3 3590", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data =3D &g_series_quirks, + }, + { + .ident =3D "Dell Inc. G5 5500", + .matches =3D { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data =3D &g_series_quirks, + }, +}; + +enum WMAX_THERMAL_INFORMATION_OPERATIONS { + WMAX_OPERATION_SYS_DESCRIPTION =3D 0x02, + WMAX_OPERATION_LIST_IDS =3D 0x03, + WMAX_OPERATION_CURRENT_PROFILE =3D 0x0B, +}; + +enum WMAX_THERMAL_CONTROL_OPERATIONS { + WMAX_OPERATION_ACTIVATE_PROFILE =3D 0x01, +}; + +enum WMAX_GAME_SHIFT_STATUS_OPERATIONS { + WMAX_OPERATION_TOGGLE_GAME_SHIFT =3D 0x01, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS =3D 0x02, +}; + +enum WMAX_THERMAL_TABLES { + WMAX_THERMAL_TABLE_BASIC =3D 0x90, + WMAX_THERMAL_TABLE_USTT =3D 0xA0, +}; + +enum wmax_thermal_mode { + THERMAL_MODE_USTT_BALANCED, + THERMAL_MODE_USTT_BALANCED_PERFORMANCE, + THERMAL_MODE_USTT_COOL, + THERMAL_MODE_USTT_QUIET, + THERMAL_MODE_USTT_PERFORMANCE, + THERMAL_MODE_USTT_LOW_POWER, + THERMAL_MODE_BASIC_QUIET, + THERMAL_MODE_BASIC_BALANCED, + THERMAL_MODE_BASIC_BALANCED_PERFORMANCE, + THERMAL_MODE_BASIC_PERFORMANCE, + THERMAL_MODE_LAST, +}; + +struct wmax_led_args { + u32 led_mask; + struct color_platform colors; + u8 state; +} __packed; + +struct wmax_brightness_args { + u32 led_mask; + u32 percentage; +}; + +struct wmax_basic_args { + u8 arg; +}; + +struct wmax_u32_args { + u8 operation; + u8 arg1; + u8 arg2; + u8 arg3; +}; + +struct awcc_priv { + struct wmi_device *wdev; + struct device *ppdev; + enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; +}; + +static const enum platform_profile_option wmax_mode_to_platform_profile[TH= ERMAL_MODE_LAST] =3D { + [THERMAL_MODE_USTT_BALANCED] =3D PLATFORM_PROFILE_BALANCED, + [THERMAL_MODE_USTT_BALANCED_PERFORMANCE] =3D PLATFORM_PROFILE_BALANCED_PE= RFORMANCE, + [THERMAL_MODE_USTT_COOL] =3D PLATFORM_PROFILE_COOL, + [THERMAL_MODE_USTT_QUIET] =3D PLATFORM_PROFILE_QUIET, + [THERMAL_MODE_USTT_PERFORMANCE] =3D PLATFORM_PROFILE_PERFORMANCE, + [THERMAL_MODE_USTT_LOW_POWER] =3D PLATFORM_PROFILE_LOW_POWER, + [THERMAL_MODE_BASIC_QUIET] =3D PLATFORM_PROFILE_QUIET, + [THERMAL_MODE_BASIC_BALANCED] =3D PLATFORM_PROFILE_BALANCED, + [THERMAL_MODE_BASIC_BALANCED_PERFORMANCE] =3D PLATFORM_PROFILE_BALANCED_P= ERFORMANCE, + [THERMAL_MODE_BASIC_PERFORMANCE] =3D PLATFORM_PROFILE_PERFORMANCE, +}; + +static struct awcc_quirks *awcc; + +/* + * The HDMI mux sysfs node indicates the status of the HDMI input mux. + * It can toggle between standard system GPU output and HDMI input. + */ +static ssize_t cable_show(struct device *dev, struct device_attribute *att= r, + char *buf) +{ + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); + struct wmax_basic_args in_args =3D { + .arg =3D 0, + }; + u32 out_data; + int ret; + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data =3D=3D 0) + return sysfs_emit(buf, "[unconnected] connected unknown\n"); + else if (out_data =3D=3D 1) + return sysfs_emit(buf, "unconnected [connected] unknown\n"); + } + + pr_err("alienware-wmi: unknown HDMI cable status: %d\n", ret); + return sysfs_emit(buf, "unconnected connected [unknown]\n"); +} + +static ssize_t source_show(struct device *dev, struct device_attribute *at= tr, + char *buf) +{ + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); + struct wmax_basic_args in_args =3D { + .arg =3D 0, + }; + u32 out_data; + int ret; + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data =3D=3D 1) + return sysfs_emit(buf, "[input] gpu unknown\n"); + else if (out_data =3D=3D 2) + return sysfs_emit(buf, "input [gpu] unknown\n"); + } + + pr_err("alienware-wmi: unknown HDMI source status: %u\n", ret); + return sysfs_emit(buf, "input gpu [unknown]\n"); +} + +static ssize_t source_store(struct device *dev, struct device_attribute *a= ttr, + const char *buf, size_t count) +{ + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); + struct wmax_basic_args args; + int ret; + + if (strcmp(buf, "gpu\n") =3D=3D 0) + args.arg =3D 1; + else if (strcmp(buf, "input\n") =3D=3D 0) + args.arg =3D 2; + else + args.arg =3D 3; + pr_debug("alienware-wmi: setting hdmi to %d : %s", args.arg, buf); + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_SOURCE, &args, + sizeof(args), NULL); + if (ret < 0) + pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", ret); + + return count; +} + +static DEVICE_ATTR_RO(cable); +static DEVICE_ATTR_RW(source); + +static bool hdmi_group_visible(struct kobject *kobj) +{ + return alienware_interface =3D=3D WMAX && alienfx->hdmi_mux; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); + +static struct attribute *hdmi_attrs[] =3D { + &dev_attr_cable.attr, + &dev_attr_source.attr, + NULL, +}; + +const struct attribute_group wmax_hdmi_attribute_group =3D { + .name =3D "hdmi", + .is_visible =3D SYSFS_GROUP_VISIBLE(hdmi), + .attrs =3D hdmi_attrs, +}; + +/* + * Alienware GFX amplifier support + * - Currently supports reading cable status + * - Leaving expansion room to possibly support dock/undock events later + */ +static ssize_t status_show(struct device *dev, struct device_attribute *at= tr, + char *buf) +{ + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); + struct wmax_basic_args in_args =3D { + .arg =3D 0, + }; + u32 out_data; + int ret; + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_AMPLIFIER_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data =3D=3D 0) + return sysfs_emit(buf, "[unconnected] connected unknown\n"); + else if (out_data =3D=3D 1) + return sysfs_emit(buf, "unconnected [connected] unknown\n"); + } + + pr_err("alienware-wmi: unknown amplifier cable status: %d\n", ret); + return sysfs_emit(buf, "unconnected connected [unknown]\n"); +} + +static DEVICE_ATTR_RO(status); + +static bool amplifier_group_visible(struct kobject *kobj) +{ + return alienware_interface =3D=3D WMAX && alienfx->amplifier; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); + +static struct attribute *amplifier_attrs[] =3D { + &dev_attr_status.attr, + NULL, +}; + +const struct attribute_group wmax_amplifier_attribute_group =3D { + .name =3D "amplifier", + .is_visible =3D SYSFS_GROUP_VISIBLE(amplifier), + .attrs =3D amplifier_attrs, +}; + +/* + * Deep Sleep Control support + * - Modifies BIOS setting for deep sleep control allowing extra wakeup ev= ents + */ +static ssize_t deepsleep_show(struct device *dev, struct device_attribute = *attr, + char *buf) +{ + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); + struct wmax_basic_args in_args =3D { + .arg =3D 0, + }; + u32 out_data; + int ret; + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data =3D=3D 0) + return sysfs_emit(buf, "[disabled] s5 s5_s4\n"); + else if (out_data =3D=3D 1) + return sysfs_emit(buf, "disabled [s5] s5_s4\n"); + else if (out_data =3D=3D 2) + return sysfs_emit(buf, "disabled s5 [s5_s4]\n"); + } + + pr_err("alienware-wmi: unknown deep sleep status: %d\n", ret); + return sysfs_emit(buf, "disabled s5 s5_s4 [unknown]\n"); +} + +static ssize_t deepsleep_store(struct device *dev, struct device_attribute= *attr, + const char *buf, size_t count) +{ + struct alienfx_platdata *pdata =3D dev_get_platdata(dev); + struct wmax_basic_args args; + int ret; + + if (strcmp(buf, "disabled\n") =3D=3D 0) + args.arg =3D 0; + else if (strcmp(buf, "s5\n") =3D=3D 0) + args.arg =3D 1; + else + args.arg =3D 2; + pr_debug("alienware-wmi: setting deep sleep to %d : %s", args.arg, buf); + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_CONTROL, + &args, sizeof(args), NULL); + if (!ret) + pr_err("alienware-wmi: deep sleep control failed: results: %u\n", ret); + + return count; +} + +static DEVICE_ATTR_RW(deepsleep); + +static bool deepsleep_group_visible(struct kobject *kobj) +{ + return alienware_interface =3D=3D WMAX && alienfx->deepslp; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); + +static struct attribute *deepsleep_attrs[] =3D { + &dev_attr_deepsleep.attr, + NULL, +}; + +const struct attribute_group wmax_deepsleep_attribute_group =3D { + .name =3D "deepsleep", + .is_visible =3D SYSFS_GROUP_VISIBLE(deepsleep), + .attrs =3D deepsleep_attrs, +}; + +/* + * Thermal Profile control + * - Provides thermal profile control through the Platform Profile API + */ +static bool is_wmax_thermal_code(u32 code) +{ + if (code & WMAX_SENSOR_ID_MASK) + return false; + + if ((code & WMAX_THERMAL_MODE_MASK) >=3D THERMAL_MODE_LAST) + return false; + + if ((code & WMAX_THERMAL_TABLE_MASK) =3D=3D WMAX_THERMAL_TABLE_BASIC && + (code & WMAX_THERMAL_MODE_MASK) >=3D THERMAL_MODE_BASIC_QUIET) + return true; + + if ((code & WMAX_THERMAL_TABLE_MASK) =3D=3D WMAX_THERMAL_TABLE_USTT && + (code & WMAX_THERMAL_MODE_MASK) <=3D THERMAL_MODE_USTT_LOW_POWER) + return true; + + return false; +} + +static int wmax_thermal_information(struct wmi_device *wdev, u8 operation, + u8 arg, u32 *out_data) +{ + struct wmax_u32_args in_args =3D { + .operation =3D operation, + .arg1 =3D arg, + .arg2 =3D 0, + .arg3 =3D 0, + }; + int ret; + + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; + + if (*out_data =3D=3D WMAX_FAILURE_CODE) + return -EBADRQC; + + return 0; +} + +static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) +{ + struct wmax_u32_args in_args =3D { + .operation =3D WMAX_OPERATION_ACTIVATE_PROFILE, + .arg1 =3D profile, + .arg2 =3D 0, + .arg3 =3D 0, + }; + u32 out_data; + int ret; + + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, + &in_args, sizeof(in_args), &out_data); + if (ret) + return ret; + + if (out_data =3D=3D WMAX_FAILURE_CODE) + return -EBADRQC; + + return 0; +} + +static int wmax_game_shift_status(struct wmi_device *wdev, u8 operation, + u32 *out_data) +{ + struct wmax_u32_args in_args =3D { + .operation =3D operation, + .arg1 =3D 0, + .arg2 =3D 0, + .arg3 =3D 0, + }; + int ret; + + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; + + if (*out_data =3D=3D WMAX_FAILURE_CODE) + return -EOPNOTSUPP; + + return 0; +} + +static int thermal_profile_get(struct device *dev, + enum platform_profile_option *profile) +{ + struct awcc_priv *priv =3D dev_get_drvdata(dev); + u32 out_data; + int ret; + + ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFI= LE, + 0, &out_data); + + if (ret < 0) + return ret; + + if (out_data =3D=3D WMAX_THERMAL_MODE_GMODE) { + *profile =3D PLATFORM_PROFILE_PERFORMANCE; + return 0; + } + + if (!is_wmax_thermal_code(out_data)) + return -ENODATA; + + out_data &=3D WMAX_THERMAL_MODE_MASK; + *profile =3D wmax_mode_to_platform_profile[out_data]; + + return 0; +} + +static int thermal_profile_set(struct device *dev, + enum platform_profile_option profile) +{ + struct awcc_priv *priv =3D dev_get_drvdata(dev); + + if (awcc->gmode) { + u32 gmode_status; + int ret; + + ret =3D wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS, + &gmode_status); + + if (ret < 0) + return ret; + + if ((profile =3D=3D PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || + (profile !=3D PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { + ret =3D wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_TOGGLE_GAME_SHIFT, + &gmode_status); + + if (ret < 0) + return ret; + } + } + + return wmax_thermal_control(priv->wdev, + priv->supported_thermal_profiles[profile]); +} + +static int thermal_profile_probe(void *drvdata, unsigned long *choices) +{ + enum platform_profile_option profile; + struct awcc_priv *priv =3D drvdata; + enum wmax_thermal_mode mode; + u8 sys_desc[4]; + u32 first_mode; + u32 out_data; + int ret; + + ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_SYS_DESCRIPTI= ON, + 0, (u32 *) &sys_desc); + if (ret < 0) + return ret; + + first_mode =3D sys_desc[0] + sys_desc[1]; + + for (u32 i =3D 0; i < sys_desc[3]; i++) { + ret =3D wmax_thermal_information(priv->wdev, WMAX_OPERATION_LIST_IDS, + i + first_mode, &out_data); + + if (ret =3D=3D -EIO) + return ret; + + if (ret =3D=3D -EBADRQC) + break; + + if (!is_wmax_thermal_code(out_data)) + continue; + + mode =3D out_data & WMAX_THERMAL_MODE_MASK; + profile =3D wmax_mode_to_platform_profile[mode]; + priv->supported_thermal_profiles[profile] =3D out_data; + + set_bit(profile, choices); + } + + if (bitmap_empty(choices, PLATFORM_PROFILE_LAST)) + return -ENODEV; + + if (awcc->gmode) { + priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] =3D + WMAX_THERMAL_MODE_GMODE; + + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); + } + + return 0; +} + +static const struct platform_profile_ops awcc_platform_profile_ops =3D { + .probe =3D thermal_profile_probe, + .profile_get =3D thermal_profile_get, + .profile_set =3D thermal_profile_set, +}; + +static int awcc_platform_profile_init(struct wmi_device *wdev) +{ + struct awcc_priv *priv =3D dev_get_drvdata(&wdev->dev); + + priv->ppdev =3D devm_platform_profile_register(&wdev->dev, "alienware-wmi= ", + priv, &awcc_platform_profile_ops); + + return PTR_ERR_OR_ZERO(priv->ppdev); +} + +static int alienware_awcc_setup(struct wmi_device *wdev) +{ + struct awcc_priv *priv; + int ret; + + priv =3D devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->wdev =3D wdev; + dev_set_drvdata(&wdev->dev, priv); + + if (awcc->pprof) { + ret =3D awcc_platform_profile_init(wdev); + if (ret) + return ret; + } + + return 0; +} + +/* + * WMAX WMI driver + */ +static int wmax_wmi_update_led(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 location) +{ + struct wmax_led_args in_args =3D { + .led_mask =3D 1 << location, + .colors =3D priv->colors[location], + .state =3D priv->lighting_control_state, + }; + + return alienware_wmi_command(wdev, WMAX_METHOD_ZONE_CONTROL, &in_args, + sizeof(in_args), NULL); +} + +static int wmax_wmi_update_brightness(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 brightness) +{ + struct wmax_brightness_args in_args =3D { + .led_mask =3D 0xFF, + .percentage =3D brightness, + }; + + return alienware_wmi_command(wdev, WMAX_METHOD_BRIGHTNESS, &in_args, + sizeof(in_args), NULL); +} + +static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) +{ + struct alienfx_platdata pdata =3D { + .wdev =3D wdev, + .ops =3D { + .upd_led =3D wmax_wmi_update_led, + .upd_brightness =3D wmax_wmi_update_brightness, + }, + }; + int ret; + + if (awcc) + ret =3D alienware_awcc_setup(wdev); + else + ret =3D alienware_alienfx_setup(&pdata); + + return ret; +} + +static const struct wmi_device_id alienware_wmax_device_id_table[] =3D { + { WMAX_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_wmax_device_id_table); + +static struct wmi_driver alienware_wmax_wmi_driver =3D { + .driver =3D { + .name =3D "alienware-wmi-wmax", + .probe_type =3D PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table =3D alienware_wmax_device_id_table, + .probe =3D wmax_wmi_probe, + .no_singleton =3D true, +}; + +int __init alienware_wmax_wmi_init(void) +{ + const struct dmi_system_id *id; + + id =3D dmi_first_match(awcc_dmi_table); + if (id) + awcc =3D id->driver_data; + + if (force_platform_profile) { + if (!awcc) + awcc =3D &empty_quirks; + + awcc->pprof =3D true; + } + + if (force_gmode) { + if (awcc) + awcc->gmode =3D true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + + return wmi_driver_register(&alienware_wmax_wmi_driver); +} + +void __exit alienware_wmax_wmi_exit(void) +{ + wmi_driver_unregister(&alienware_wmax_wmi_driver); +} --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f179.google.com (mail-yw1-f179.google.com [209.85.128.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6406236450; Fri, 7 Feb 2025 14:08:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937310; cv=none; b=SdH+r6/kfrIF8qgbeh2cH+hcgnDZ302wQ3XoUDbPqL/fBRiWnKky8Cz17yRVP2GtQGKc5cd7Z9sDlNOSNPUz08UKQE3vziSTDXeBBSh/msJ+atAreS6BJk8l53lx93XnUl2zbi7CsY0LjyCb885KWK4A/v5OQigOq5ejaKuopCg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937310; c=relaxed/simple; bh=FuBXIXgK5ndfxQCn2S+4A0NXk7qR5VltBqHb6gMI8Kg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rAM3TCwwx6NRNeQRIM3HNH4YhbwaK8KVta64FxnbuPfVLskH6IltIgS4Hhz2IunpyfZ0nkKzH2nwuUz6jjS6YCJqhEDJPiTKYTazY0fqv9BzAfxDgGOban/60pq5F0L4yDbDw/3hPxqGSc0Ql4Btd4JtG/kfBWRPUAcCqy3m6BQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dOgE7YNH; arc=none smtp.client-ip=209.85.128.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dOgE7YNH" Received: by mail-yw1-f179.google.com with SMTP id 00721157ae682-6f9b8291c49so4849337b3.1; Fri, 07 Feb 2025 06:08:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937307; x=1739542107; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cfYoqReQRrtyZU9W1S4tsxAjwEta3UMCiJteabSijcg=; b=dOgE7YNHMVs1JR4aNVWom2nAC+D15vlbCDXkvRgl+/jqHk4NQ5arxCPaF34Ubqe1xR iUBPyD2gLOLfpItRvTuA/Qc/JQrAx643yGFpyUm6ZP7pXrc9VORsh5kOcnAizCuC2uI3 7UKtcmTxnmQzxO2ClKdzihxRBOU7qoMgicNiAOKz6PijAy1zHZtsJYitrHiWtBdT9A/o kBwEf8xwmuxF8lVm38F2Hk2Vgu0q+PKGfNvKS6G97sJ8QKip6N8Ne+k68mDUNLcpWwFD OdoyKlrRSMBiCNa0PdFPm2n2/j8tk5v6jaCZ4d/vnA30PNwQpC9OJ8jZlzYUwxbU3HS3 bsNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937307; x=1739542107; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cfYoqReQRrtyZU9W1S4tsxAjwEta3UMCiJteabSijcg=; b=ktrqVHuokIQqj5y+v1+FkeGF8lK4LY2POCBdsxNqPLtN6wGIyHj2332RoOX9A33zgU Z/XkQC8pgY9aJVRxK3UvMZf8GR9AqBOuH27xjD/jrFtRsIn7FSPBfma81SE3NVWUxT0G 0C3EBd3j1u10vBejJMEF87W5Rav2fcIYMzoXfXjc3EH0NrVtgZTj99Ie8uqTojPsF+66 5NfgeVJvHqr0y6/+1RBgzvyvqjQt8E+VJdv0if0zu746scMZEuWE+J4eQ57BKn3icLhK GXHRtTehnPMaPuR+dz3CbN6PJmgbQOZu+3jOcI7/rIU6jcS2Tag4+jE7/5xyijXAUJpG Rjfg== X-Forwarded-Encrypted: i=1; AJvYcCX4lFoWqAU7shBDxwlYzIGwss0vG3Evp6WgMkLH7Og1gZqk384UV0iNcMtgWWwzms7Wsdf8uLBIRHl5uUo=@vger.kernel.org X-Gm-Message-State: AOJu0YxMgRfLfeOSkN62EMvonW7D2pfJBmqOiLK3Z7iiLHtju3tXYwZi 3QGYPGReSjrPNv/0++0cX8R2slCBoaYNtT19yf7tekvkN3xRpdDbmZH4eA== X-Gm-Gg: ASbGnctCFclUi/wyclGHLL0pge4vzQLeCPVTPhr7gdLSQV2P2V0fw+2eGypNWBwS+C5 xsktyZyv5ZqeAHahn5QUF3AY01uO4IDqe+pTX8/DY6HXAopkwZoxfvoUbT+xoh5KFLVY19BKNzb rUgh/ZYWESOe90Sk0rLw9scefIw9gYEalrObvhnj/tFxWKyJFf3RuKwOgMjA3udL7RrJR9HDlbG L6P9IefV41Hu/2hp59n5pcht7YPQBN3ZKyRwYDZulzRmli9g8olwN1CwPBqOivfC5I+91H7Ol6X I/6r4+9Y88dI8Zq/toE5wUU= X-Google-Smtp-Source: AGHT+IEbVT1Pg0odsuKa4bw4ZpRzfZRIyt/MPhazWDnCNH3ULDt90KxF/3tKPY0U1emzZm+a/9DmtQ== X-Received: by 2002:a05:690c:6812:b0:6f7:a6d8:349 with SMTP id 00721157ae682-6f9b284bc17mr34146307b3.10.1738937307140; Fri, 07 Feb 2025 06:08:27 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:26 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 12/14] platform/x86: dell: Modify Makefile alignment Date: Fri, 7 Feb 2025 09:07:41 -0500 Message-ID: <20250207140743.16822-13-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add one more TAB to each line to support upcoming changes. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/Makefile | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/drivers/platform/x86/dell/Makefile b/drivers/platform/x86/dell= /Makefile index 03ba459f3d31..d5718ef34c48 100644 --- a/drivers/platform/x86/dell/Makefile +++ b/drivers/platform/x86/dell/Makefile @@ -4,27 +4,27 @@ # Dell x86 Platform-Specific Drivers # =20 -obj-$(CONFIG_ALIENWARE_WMI) +=3D alienware-wmi.o -alienware-wmi-objs :=3D alienware-wmi-base.o -alienware-wmi-y +=3D alienware-wmi-legacy.o -alienware-wmi-y +=3D alienware-wmi-wmax.o -obj-$(CONFIG_DCDBAS) +=3D dcdbas.o -obj-$(CONFIG_DELL_LAPTOP) +=3D dell-laptop.o -obj-$(CONFIG_DELL_RBTN) +=3D dell-rbtn.o -obj-$(CONFIG_DELL_RBU) +=3D dell_rbu.o -obj-$(CONFIG_DELL_PC) +=3D dell-pc.o -obj-$(CONFIG_DELL_SMBIOS) +=3D dell-smbios.o -dell-smbios-objs :=3D dell-smbios-base.o -dell-smbios-$(CONFIG_DELL_SMBIOS_WMI) +=3D dell-smbios-wmi.o -dell-smbios-$(CONFIG_DELL_SMBIOS_SMM) +=3D dell-smbios-smm.o -obj-$(CONFIG_DELL_SMO8800) +=3D dell-smo8800.o -obj-$(CONFIG_DELL_SMO8800) +=3D dell-lis3lv02d.o -obj-$(CONFIG_DELL_UART_BACKLIGHT) +=3D dell-uart-backlight.o -obj-$(CONFIG_DELL_WMI) +=3D dell-wmi.o -dell-wmi-objs :=3D dell-wmi-base.o -dell-wmi-$(CONFIG_DELL_WMI_PRIVACY) +=3D dell-wmi-privacy.o -obj-$(CONFIG_DELL_WMI_AIO) +=3D dell-wmi-aio.o -obj-$(CONFIG_DELL_WMI_DESCRIPTOR) +=3D dell-wmi-descriptor.o -obj-$(CONFIG_DELL_WMI_DDV) +=3D dell-wmi-ddv.o -obj-$(CONFIG_DELL_WMI_LED) +=3D dell-wmi-led.o -obj-$(CONFIG_DELL_WMI_SYSMAN) +=3D dell-wmi-sysman/ +obj-$(CONFIG_ALIENWARE_WMI) +=3D alienware-wmi.o +alienware-wmi-objs :=3D alienware-wmi-base.o +alienware-wmi-y +=3D alienware-wmi-legacy.o +alienware-wmi-y +=3D alienware-wmi-wmax.o +obj-$(CONFIG_DCDBAS) +=3D dcdbas.o +obj-$(CONFIG_DELL_LAPTOP) +=3D dell-laptop.o +obj-$(CONFIG_DELL_RBTN) +=3D dell-rbtn.o +obj-$(CONFIG_DELL_RBU) +=3D dell_rbu.o +obj-$(CONFIG_DELL_PC) +=3D dell-pc.o +obj-$(CONFIG_DELL_SMBIOS) +=3D dell-smbios.o +dell-smbios-objs :=3D dell-smbios-base.o +dell-smbios-$(CONFIG_DELL_SMBIOS_WMI) +=3D dell-smbios-wmi.o +dell-smbios-$(CONFIG_DELL_SMBIOS_SMM) +=3D dell-smbios-smm.o +obj-$(CONFIG_DELL_SMO8800) +=3D dell-smo8800.o +obj-$(CONFIG_DELL_SMO8800) +=3D dell-lis3lv02d.o +obj-$(CONFIG_DELL_UART_BACKLIGHT) +=3D dell-uart-backlight.o +obj-$(CONFIG_DELL_WMI) +=3D dell-wmi.o +dell-wmi-objs :=3D dell-wmi-base.o +dell-wmi-$(CONFIG_DELL_WMI_PRIVACY) +=3D dell-wmi-privacy.o +obj-$(CONFIG_DELL_WMI_AIO) +=3D dell-wmi-aio.o +obj-$(CONFIG_DELL_WMI_DESCRIPTOR) +=3D dell-wmi-descriptor.o +obj-$(CONFIG_DELL_WMI_DDV) +=3D dell-wmi-ddv.o +obj-$(CONFIG_DELL_WMI_LED) +=3D dell-wmi-led.o +obj-$(CONFIG_DELL_WMI_SYSMAN) +=3D dell-wmi-sysman/ --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yb1-f174.google.com (mail-yb1-f174.google.com [209.85.219.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64B3A23645C; Fri, 7 Feb 2025 14:08:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937312; cv=none; b=W0QTVaCSTlSo+lA2H0j7+C24AhtnTNj8c7/ayIoPyusdi+tNwLSxd5rGn2tsDc+p1yFh2Q7pqn6To35Sx75SU+EeTQn1xRhH6cTD3OUvy781z2yT03MVrdQv4aIuf4Vr+CgwpF3g3heohC4UokohBpegBGWtDYMfzVEStHyOwSo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937312; c=relaxed/simple; bh=0Zjdw9NpuyixOjift32u/5Rw66qhX9ntW7jPh3oiamc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dJGKAfYX9VtytLUNxaPaQa471sNZp45W+JHOjEghs9X2GZF4Jeln8ALRzqlLVxSPAF+Eee0y+DdxgEOOxPYL6o1U79ZjMy6uCox1Hl2HrUVM9K8pG18qd7PaLlQryKlqIyEc1o9NJ6oadqNc20Yf509/8X8InxbxjdoKnohSrl8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SBq4g9it; arc=none smtp.client-ip=209.85.219.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SBq4g9it" Received: by mail-yb1-f174.google.com with SMTP id 3f1490d57ef6-e5b32f64ffeso1823830276.3; Fri, 07 Feb 2025 06:08:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937309; x=1739542109; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=c9pp9x2wBsw/6QWgWZUu2H51n8MPvLiJNzq+9sr/6qk=; b=SBq4g9itw2QFhxr7FwhfAdpv7x2z2RgKa0+bT71ai3/UtSSX25W8QcbtjEfcZmNCpl wY86ok22w90lG8K+gGpEDD/8VH02+TGrz2bkCb6NnIGua0oSZUHwmlS75VjLKiYaO1oe 2NxM2b5+mqEWFMhAjPtH8jYdoiJ7VfHZHSvxvHmoAGiizw0gwMUXe2J5ruNl+q06IJgw qkH+w3DR7RnmZvhml9ne2UUWohZ48qH76g9Mbhcr4P03oCiyvYUCz3fDtB4WZb6e6NQF tcDUR0GLLBWLneyoSagL19P1cm2LsZKvJLSf2QiJd8wKSnn95Yhxe/SO9mkD19VtPHLs V+dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937309; x=1739542109; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c9pp9x2wBsw/6QWgWZUu2H51n8MPvLiJNzq+9sr/6qk=; b=VGrpaWxgWstShyuSUD54EcqmcfetV/ybQlcSGjHy/bRFWxDm4oKd5kxD6wcN+WkRuo CLqo8ORHAbN257AEZaaI9+ZC0mmeZID7iS8WlKRbjBHZZ/3aJlu6roHR6VAv+e993BDF chZ9PH/dFvg3aslLZEzb+MtrJW17TyY+m3JyvVICMTKd2cfet0JbreBoMlsJogHgpZlc lNTi/Xa+CrjOPbifOnx/YuCWbB7GfKkuos9/7KmLgPihRdTvHVByf947gwYiD9lrbjmk muy6qiKstRwj5ouwbcTxSEK+P/yg+zIX5CWlNNR1dicimagoaY7o1Ju8zPJ5+Q/RlxQ1 4PSA== X-Forwarded-Encrypted: i=1; AJvYcCWTuUuNsdE9xhvzkZNr0t6WMBWP5NNyUEZ379fLmKInhLpY1s0T1343UaNiOnSyM/a8k+BWeogWgGnleu0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5Yf6dwQ29hppnJlkjGeUDEffSQFc9CZAItQKtqbr2nm01tcs2 4WZiMojraIU4XZ+i1zJUG6IECGRdxnHn9rYcZlJRg3DjdF3CaaIFsAlH/Q== X-Gm-Gg: ASbGncucEdQ9MOB32DrP+NFj6JEaAo8xG4t0KbZDn3YmHGYNxsB3mG5lNQMCDbKhfeL +sIDAU501R68dNJNImadphrxk4aip/YDLIgdcPcRI51zTQRfTrz5rSOX7UetEfZjWR6KuCuMxIl JbzVRfWq1FwCxsCQ+YrItsOAAaGv1OzFDJVUZTtJr5JJ/YvsDbQOA2VUbvTjPIgMJiS6foqxdbw UrZosQM7JW3GVg22NkRMTtnaFWZDUY/TTrBsb+XrpHMaRIjQb/vxRjG3LRLY2eHLiLITHayO8q6 NJTE9eX5QV6yJzcxo5gN7IU= X-Google-Smtp-Source: AGHT+IG031B3KAKCzswk8qjhMkf+rDzb+OfAfZ/ncOEfdaiF0IG2cVHidURzliDIm6hZ0GJDBzROgg== X-Received: by 2002:a05:690c:9989:b0:6f9:a75f:f245 with SMTP id 00721157ae682-6f9b2878035mr31806127b3.15.1738937308812; Fri, 07 Feb 2025 06:08:28 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:28 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 13/14] platform/x86: Update alienware-wmi config entries Date: Fri, 7 Feb 2025 09:07:42 -0500 Message-ID: <20250207140743.16822-14-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add config entries for each WMI driver managed by the alienware-wmi module to be able to conditionally compile them. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/Kconfig | 30 +++++++++++++++++++---- drivers/platform/x86/dell/Makefile | 4 +-- drivers/platform/x86/dell/alienware-wmi.h | 25 +++++++++++++++++++ 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/dell/Kconfig b/drivers/platform/x86/dell/= Kconfig index d09060aedd3f..f8a0dffcaab7 100644 --- a/drivers/platform/x86/dell/Kconfig +++ b/drivers/platform/x86/dell/Kconfig @@ -18,15 +18,35 @@ config ALIENWARE_WMI tristate "Alienware Special feature control" default m depends on ACPI + depends on ACPI_WMI + depends on DMI depends on LEDS_CLASS depends on NEW_LEDS - depends on ACPI_WMI + help + This is a driver for controlling Alienware WMI driven features. + + On legacy devices, it exposes an interface for controlling the AlienFX + zones on Alienware machines that don't contain a dedicated + AlienFX USB MCU such as the X51 and X51-R2. + + On newer devices, it exposes the AWCC thermal control interface through + known Kernel APIs. + +config ALIENWARE_WMI_LEGACY + bool "Alienware Legacy WMI device driver" + default y + depends on ALIENWARE_WMI + help + Legacy Alienware WMI driver with AlienFX LED control capabilities. + +config ALIENWARE_WMI_WMAX + bool "Alienware WMAX WMI device driver" + default y + depends on ALIENWARE_WMI select ACPI_PLATFORM_PROFILE help - This is a driver for controlling Alienware BIOS driven - features. It exposes an interface for controlling the AlienFX - zones on Alienware machines that don't contain a dedicated AlienFX - USB MCU such as the X51 and X51-R2. + Alienware WMI driver with AlienFX LED, HDMI, amplifier, deep sleep and + AWCC thermal control capabilities. =20 config DCDBAS tristate "Dell Systems Management Base Driver" diff --git a/drivers/platform/x86/dell/Makefile b/drivers/platform/x86/dell= /Makefile index d5718ef34c48..8ac9a933c770 100644 --- a/drivers/platform/x86/dell/Makefile +++ b/drivers/platform/x86/dell/Makefile @@ -6,8 +6,8 @@ =20 obj-$(CONFIG_ALIENWARE_WMI) +=3D alienware-wmi.o alienware-wmi-objs :=3D alienware-wmi-base.o -alienware-wmi-y +=3D alienware-wmi-legacy.o -alienware-wmi-y +=3D alienware-wmi-wmax.o +alienware-wmi-$(CONFIG_ALIENWARE_WMI_LEGACY) +=3D alienware-wmi-legacy.o +alienware-wmi-$(CONFIG_ALIENWARE_WMI_WMAX) +=3D alienware-wmi-wmax.o obj-$(CONFIG_DCDBAS) +=3D dcdbas.o obj-$(CONFIG_DELL_LAPTOP) +=3D dell-laptop.o obj-$(CONFIG_DELL_RBTN) +=3D dell-rbtn.o diff --git a/drivers/platform/x86/dell/alienware-wmi.h b/drivers/platform/x= 86/dell/alienware-wmi.h index b950c91e1979..68d4242211ae 100644 --- a/drivers/platform/x86/dell/alienware-wmi.h +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -75,9 +75,21 @@ int alienware_wmi_command(struct wmi_device *wdev, u32 m= ethod_id, =20 int alienware_alienfx_setup(struct alienfx_platdata *pdata); =20 +#if IS_ENABLED(CONFIG_ALIENWARE_WMI_LEGACY) int __init alienware_legacy_wmi_init(void); void __exit alienware_legacy_wmi_exit(void); +#else +static inline int alienware_legacy_wmi_init(void) +{ + return -ENODEV; +} + +static inline void alienware_legacy_wmi_exit(void) +{ +} +#endif =20 +#if IS_ENABLED(CONFIG_ALIENWARE_WMI_WMAX) extern const struct attribute_group wmax_hdmi_attribute_group; extern const struct attribute_group wmax_amplifier_attribute_group; extern const struct attribute_group wmax_deepsleep_attribute_group; @@ -88,5 +100,18 @@ extern const struct attribute_group wmax_deepsleep_attr= ibute_group; =20 int __init alienware_wmax_wmi_init(void); void __exit alienware_wmax_wmi_exit(void); +#else +#define WMAX_DEV_GROUPS + +static inline int alienware_wmax_wmi_init(void) +{ + return -ENODEV; +} + + +static inline void alienware_wmax_wmi_exit(void) +{ +} +#endif =20 #endif --=20 2.48.1 From nobody Mon Feb 9 12:01:43 2026 Received: from mail-yw1-f173.google.com (mail-yw1-f173.google.com [209.85.128.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B3BF81F942D; Fri, 7 Feb 2025 14:08:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937313; cv=none; b=Fxk5XbZ/k1ZMx5Z2/ufZXpjRC9IG4e4psiDpawXbzaV96xGav4q/TdE97E038OkWoZdxviEtO4gOB9/sQj4uuR8r4MbKu6NYx+Csc1VD5SYxFWr2f8KQ6qk5xbiyuHfseDLgi0PCMdfQR0PaClxvpm9mfDz9XB4sd7j0CzfLZek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738937313; c=relaxed/simple; bh=6RWNKULCLcyX3qpo9lp6BHXXTfrdV+asCm2vmn5XUs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cGUgH29WA8Hb4Yayu0E718p/zJoxOT6bNHU4I1xOVduHQ4ZyxdC0Smcu4JnS5ddyLlxlwEDpUN4dhwNGN1u6ymOK8jjqFBLvHJ3mgPilVvW/xLgb9pnNoLnqiZ7AW7CCAp5ql3SmWDEKWUfVidjAPFSdSF08KdN+FwuMG45vFMU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PMCYMhtT; arc=none smtp.client-ip=209.85.128.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PMCYMhtT" Received: by mail-yw1-f173.google.com with SMTP id 00721157ae682-6f8c58229f1so18889017b3.0; Fri, 07 Feb 2025 06:08:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738937310; x=1739542110; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S0LaXj60IfZoo+YSUXOLYVoLSI33CAZzHP32NqgEr2w=; b=PMCYMhtTK2xHf99QKqh2OUpIEwbChCNT0f3qPmrThS3nlUPWF0e3bpDv4sD1Orr+Ly mI9s/+fz+xwRGu2Ny1plf+anPS3y8qKQOqVWsknL4aJJ1GNfsaodo49h5iVTtpqDi3iN uGq2IvB9b7ttgco/uhvNFKHUECS0x7YNC3GftcOrBXQ6MrTmeBXUgRxe6yCqWdVHWjUn CsJehUhn+Ib+nWHpzcWDWCCEv6erhx2vs0K5ZWfkHPNWFTtuu5nCO0DvdDww5wKniUEX w9GitHvUMF8Yc9ddNUm0hjjuHOftQ1/s08q1zfzc7FY60h/G5/Fa57+UiaIYoJi7F1Il /IQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738937310; x=1739542110; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S0LaXj60IfZoo+YSUXOLYVoLSI33CAZzHP32NqgEr2w=; b=wH+adXF4zk+1JZS7nv+BYg/CoHXCRBqpuCbwBWx8gQ4W4Ca8MuQnYa2iNobiZwTm+5 K0gVVEuwxdMe+Ulkbzs8xRGzKT7Zt0607IoaUL3oYGGMDFpUw5VFGTZrjQ4HNkKmXAjR Y9HYCNPTMJDDkCDspnx/OLYaEQaaTVLAzvuEKpV59mA/usrtrXE0W/4CgmBZ31Edh6YS WS1RVDVputSTB286zKoocDUdj/RsEXeDgpnnadrZXw2xh18QBuchhBE+YFgfjC/kppf9 iwurb4P6nk1uGnO6SFGS9o4NN6FquPuWrkiuBP3f/bOg7+zDRylhzDLJFrTNdnEuMSz7 jAMg== X-Forwarded-Encrypted: i=1; AJvYcCWd0Zl1riHBnIJ9m/qp50fkF3vc8RJEh1lkigc4YTHHxDoi8+Q1EhQ7nm1Qs8of1CyI3y9JI0Qy80ODRMo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3BXbtYVY44XvPEBWdtiC4ksJ7OzWRWokqZzd445lrZS2LNfZc EaMnvt994HTa981kyJjEUR9Ph6riXp49xiNBIcP/aXTNjtSp91Z+lSNffA== X-Gm-Gg: ASbGncvqMspzjLjiZJMPoOW9r4S+sDhmliOJPMQPieQdlxjsHK/GqHqsm9Zu9D9tcpL sshUf24oCFXmmafFsvs5izlh2FK/OkcY3uyguvU3IplDl4s50ovNlcO3ptM+S5xQvZS1B7DecAE /9JRXeqzN6KiaV3mLhmEEzIgaGCKDcRbzOBKPssAqtf1J2qkXl0g0H/qVR19M2Aviz6DSYALmB4 35laLJaOAV/7rSghIn6Yx420pMdmN6zBzpJlDhZSOlQWdod0924zZsDMuBnEvIYOlt9Chzmhi72 5D08GaQ+Q7b5020mwfJqFM8= X-Google-Smtp-Source: AGHT+IFqYSkDT5NPOt3lNuVM8zUo7/RGZZYj9S65i0BkR6vq2Jtm/NqPOMB1f4KjBlt/6UC/sjsChw== X-Received: by 2002:a05:690c:c1e:b0:6f9:4b81:3dc7 with SMTP id 00721157ae682-6f9b3820127mr22843567b3.1.1738937310323; Fri, 07 Feb 2025 06:08:30 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6f9a000f577sm5525607b3.118.2025.02.07.06.08.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 06:08:30 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v9 14/14] platform/x86: alienware-wmi: Update header and module information Date: Fri, 7 Feb 2025 09:07:43 -0500 Message-ID: <20250207140743.16822-15-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207140743.16822-1-kuurtb@gmail.com> References: <20250207140743.16822-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update module header and description. Additionally add myself as a module author. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi-base.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platf= orm/x86/dell/alienware-wmi-base.c index 7bad9717183d..64562b92314f 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -1,8 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Alienware AlienFX control + * Alienware special feature control * * Copyright (C) 2014 Dell Inc + * Copyright (C) 2025 Kurt Borja */ =20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -16,6 +17,7 @@ #include "alienware-wmi.h" =20 MODULE_AUTHOR("Mario Limonciello "); +MODULE_AUTHOR("Kurt Borja "); MODULE_DESCRIPTION("Alienware special feature control"); MODULE_LICENSE("GPL"); =20 --=20 2.48.1