From nobody Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f179.google.com (mail-vk1-f179.google.com [209.85.221.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 415CC4502F; Mon, 3 Feb 2025 06:22:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563774; cv=none; b=pg8uy9HGhUfBZSLn/0GdA4fa7pRw9T8sUQpudCGrUOJ74krpo7645+tYaavubQqBqamRKx2F80UTJ1RwOUNfByh2B6yyRqM2o6dDrqCW4ZUpOhaeRtXbgVJ3CEcuBvuYxLl/sV/H1f/EQ/O2nvYeqP/qTLaI3guMu+mNRW9f+oo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563774; c=relaxed/simple; bh=49eKxDqQtP3po1mBGZJU1bNO+vDFpnsz8KG9NigI21E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g2eBWwQqtWFqTQ/EibjixZuevN4/eUaj/3n57zy2FrrDfkhPM+h+3FZ/0QwBUtCQ8Y5rZcSdJZ+B7OVxZjdi9DyAwJi8ddxRpT99YoLTawaff86kLxXiO9qxNqXTtgwjI02vkolHaloD4mY+FiFtukCA6TvtjuXEFEybUa/auRU= 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=J4yGmLcW; arc=none smtp.client-ip=209.85.221.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="J4yGmLcW" Received: by mail-vk1-f179.google.com with SMTP id 71dfb90a1353d-51640f7bbd3so1313857e0c.2; Sun, 02 Feb 2025 22:22:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563771; x=1739168571; 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=J4yGmLcW9w1FK0NcVLkPU9mHlDcEi2+h1uc5y5fOzSO9HibJqQmfRgNycNoHLtFuZa XeAvSWxN9oStfPy8mxp7PkdTpHum7s4tUQEzL5YIN7CBII6ANUw8KlHGQ5lZ0/EZOP6o ZMKQ/bKkpp5OwvWEAsM5FMJlbYVQ/rgIfkHN1LcgaeL0xJj5ls0OxOSWLH9M6JpDodGv HZBepBg3rEl12KJiAd0IBL+CdrlibZw67PL53bWj9BhoFKwIrSXR3TERzZ76DqQmo4GN NpyyrbD1Awl7XwViQxMrUi+C6kzeNgUMdGpKvv7xZO6IIH/7Tc8jhlx7D6R1ppk3qlor 4Dzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563771; x=1739168571; 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=MJjDqeElJgtSV1NxKLPZykjx1Bh0EYbN9a/klzd7dL4lxDc/TOUEQ6wsGRiJ3bVAsN sGKVHWfCSndfvDQPYxiinFJJ5qlFg7yCQqtNlGeQNpBO1MOpykHhj0zD0NrpXtLCK15M Ie9fzOwoKDq5/3r/q0CMRDRgOnfZohwnJRtKrTTSJmsKl/WS8efajLh+dIIGzvh6ffR6 0NvoIBADAiIUndc4goxc4AL5GnTPupYejiW6AnTispBkyP9x8DpZRnLWpXpIufme2jiG FxPZcWT21osn7NtOKEZ1zS4PiZlRtm1Vux1f32Dwrra2xUnCpn9bbftgQ2kiZ35LLBvf GBBQ== X-Forwarded-Encrypted: i=1; AJvYcCVeDIcH820WillpSDERzq6f47v0sTKhPQb1PkOLg1fy/AT/O97aJB8LXnrUI8V+fZY7A5aPrlI/8zjI5I4=@vger.kernel.org X-Gm-Message-State: AOJu0YybXjgE5xjL4/I2KBfA/Fn42ZePZTXYbLv69LY8+FJQXa5VYbOI dDIsEBZyJwAojfNhzDYe2wNN+Efrq9pfNCmpNCPTBt0gu4veQRKHZ4S0kA== X-Gm-Gg: ASbGnctltk1TaFLH4d67CszKPNcK/k2Lc88W3Cl9gpvlVGlk1suSoPzegpIrN/VzI1j 1fBWtkhUas5P1JerLGOUr9cJOBULb7RpOrDTayCnwR+ys8Ay8e+860f7FM+qpEFCqVa061zdop5 NMYL6kwq5KRdNbzJdBCMQi8pgY1T7KpkpI46Py4wjN+36tds2lBm/rViMWNzFhW1zLr5pfIfqyo Zq+8MNIMhrjNRPpTSvOyCdbZLoQ7c8r6DHHqEDsPRNTM3DPEnvUaeMxRkvJZOBLoHsXpurh1HZq /WycEDBQIv19/vd6NdFvWHg= X-Google-Smtp-Source: AGHT+IFen1Mh/qWWvPJAEX+ME3gIa+VsMp5KSCr6dj+3sMNAnbp3aBBO77hmBfE6iLJFOnzvh0O9tQ== X-Received: by 2002:a05:6122:1c8e:b0:515:4ff6:10c1 with SMTP id 71dfb90a1353d-51e9e1c4554mr13430943e0c.0.1738563770544; Sun, 02 Feb 2025 22:22:50 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:22:49 -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 v7 01/14] platform/x86: alienware-wmi: Add a state container for LED control feature Date: Mon, 3 Feb 2025 01:20:42 -0500 Message-ID: <20250203062055.2915-2-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f175.google.com (mail-vk1-f175.google.com [209.85.221.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 82DC61D89E4; Mon, 3 Feb 2025 06:22:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563777; cv=none; b=aZJ3gbYnHwA32a4/NjN4KcnSqLXQ9yZmGTVDkbLAXa0fjbGBmYfXWcOYOpesyDoNbFE1pepcFmgc/Zhi45QH9KhPBPkp3T/9Ix9BNGqclCvBhMwoQ+WFOcfjUl/8hxlwa5Dg3+vvVc6Ln9N+48e1wAJ+9BFPqYpLQcHoXvKD0Z4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563777; c=relaxed/simple; bh=NTC1zhzDokwYZ3rn7PRVHArPU0q4pmMZLnWnR9+qqBk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ombpU5kt+nL7Y9g+7E3v/O/YbfogjGa25n3bb6lDhy/91nMKJykjnXCPa9M52IPnw6+gs3RPEEdoONvowqGR+CmiWG7XCK9lvKvNeuYThnwGQzlnU0o5/TTdkECgK2h368T+jgkWuHAq9j7MVHFA6p4LLJZLFMLH8td23aX3jRw= 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=YL0tAzwn; arc=none smtp.client-ip=209.85.221.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="YL0tAzwn" Received: by mail-vk1-f175.google.com with SMTP id 71dfb90a1353d-5174f9c0d2aso1336174e0c.1; Sun, 02 Feb 2025 22:22:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563774; x=1739168574; 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=Eir8hv9u+DDtCXlY54FduEVUV5h/s+JniQ3Fdjx7mV8=; b=YL0tAzwnwF/O7Dd53XCMgxWJNJYneLbKVIGqCGDUL4GsbWeAqwDNqeP7rBP1L2Akf4 yRHJYzBnI33iiB4t/NYktTvL0TT+dWk3r6Rouplw360W0dFNqZQdQ8L9u8xX+d12OhNi jkRImw0FtfzNTBUBPcKUPmdS/6du/KLh90cGrUezD6xRRWgksWhqDH+4gvzeh9sVwKbk TL7Ms0LV2A8xz7jjwpCPEpdGzWghpcuKFk9/5gJmEiJPVwZJM2CKQfzFg94Dtv99S1qP NtVqPQYLhIe3lX4CcW1uiaOosZVTsNVJO/oGAnb5NBriBJ4oL3v8jr2uyKuvcbwEVAtR SnuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563774; x=1739168574; 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=Eir8hv9u+DDtCXlY54FduEVUV5h/s+JniQ3Fdjx7mV8=; b=X/b5M3FrlT9jMDbt8yE++2bn3bTQmmjD7W1BklvMmmbUVIZAo8QU/OdHrVeMOq3T3M aJs7vViV0yPt9LslOmSEXZ3/joaU+wDiJz39Wpw6yUu5WhgG0jO6fyY5FbC4g+YOCMUf VuIfFkRc+ZwcsEIXPavGetbJXU4iyhWRrAS2/A+nT4zE9v3q+g+GjttILxRkjQGyJjfY tVsnIM9vZ8gn472ztkj8PER0377jI9jfO9UEL0KBLEuMpYtxlC4Uo0nnU4DmzffpcTLR IaL+5JLajyu5g2Elais+YfgaK5DDbDWxbPWCq8nWLluOT1IWkJ1esz3IZKJv6JO2sywE JL1w== X-Forwarded-Encrypted: i=1; AJvYcCXkuIxfOd9+GIH3AI8iGfxldJg98DH+9hdF9UzvfHfn/0cuUhIIA0S0MpW84wtkJ8bALLA/rIeoPRCRH0E=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3FG4zt2mdt1JkT8ucqJxhFquyXrQWrZOhncH5yjlQF/2vAarj IN0ZsgUvE/SSGa4br8O4KXmCjXLbs8HR33srVZ/SaYaAjort22l6opL6oA== X-Gm-Gg: ASbGnctSJqT59fAKgGLZTm+BtBFMLQ6RxwQ1ZJ92g+H34VhzEMU46WtTyCKTD+fZO7g 5O9+2H1eQsqB26K0GNeP0skg1e8E2c3p9FBNVhXuGs40U4GHaGGSuVtjGACGzVLbBpvgoj0kVrt qKMSCiUEsDZjQkydM8u2JkE+dXKjyED13RWuCuscBPPS3Y5XxIPdFz+wAT//PKV2Lyp1nlmDIuI OvJai0eezBbWpRuLIEjdzSK8Oeatv8GR8YemnXjxN6S0L0BEpJSqzC6PVVdYZQgrWZGHMh1XODM dKBegEzMHza623KX2WjJQXA= X-Google-Smtp-Source: AGHT+IH9lBai6Hvbbjwxmj/XmosgztgTZ3kbqNWA+cUPF3+2Czi7DhXe07E7l+PIiMW/jRX03rKVLg== X-Received: by 2002:a05:6122:378b:b0:518:a261:adca with SMTP id 71dfb90a1353d-51e9e510332mr14868468e0c.8.1738563773700; Sun, 02 Feb 2025 22:22:53 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.22.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:22:52 -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 v7 02/14] platform/x86: alienware-wmi: Add WMI Drivers Date: Mon, 3 Feb 2025 01:20:43 -0500 Message-ID: <20250203062055.2915-3-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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(). The platform_driver's probe type is also set to PROBE_FORCE_SYNCHRONOUS so we can create WMAX-only sysfs groups from within the probe without races. 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 | 182 +++++++++++++++++----- 1 file changed, 143 insertions(+), 39 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index ab86deb1adb9..5ce954137f9d 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; @@ -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; @@ -1178,6 +1177,10 @@ static int alienfx_probe(struct platform_device *pde= v) =20 static const struct attribute_group *alienfx_groups[] =3D { &zone_attribute_group, + NULL +}; + +static const struct attribute_group *wmax_alienfx_groups[] =3D { &hdmi_attribute_group, &lifier_attribute_group, &deepsleep_attribute_group, @@ -1188,23 +1191,132 @@ static struct platform_driver platform_driver =3D { .driver =3D { .name =3D "alienware-wmi", .dev_groups =3D alienfx_groups, + .probe_type =3D PROBE_FORCE_SYNCHRONOUS, }, .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, + }; + struct platform_device *pdev; + int ret; + + if (quirks->thermal) { + ret =3D create_thermal_profile(wdev); + } else { + ret =3D alienware_alienfx_setup(&pdata); + if (ret < 0) + return ret; + + pdev =3D dev_get_drvdata(&wdev->dev); + + ret =3D device_add_groups(&pdev->dev, wmax_alienfx_groups); } =20 + 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; + dmi_check_system(alienware_quirks); if (quirks =3D=3D NULL) quirks =3D &quirk_unknown; @@ -1220,32 +1332,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 +1353,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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f179.google.com (mail-vk1-f179.google.com [209.85.221.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 631941DB12D; Mon, 3 Feb 2025 06:22:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563779; cv=none; b=F2u/WqCoDctNov7xShVRggcgVWfcDnOKB76e5ROFaQwXgoo+rXd9sUQVihc+7y544Dkbv5Fr0BautF9DDamJciIjTcwr3k5qtv3tNBEN4nHWkUVm+rjvKxyqOpIUrISyMz/UtJV4vD4clcoOz6sguAo500Av/rCLYkgr8AbSETc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563779; c=relaxed/simple; bh=/hv9b0y3+QmRGzvNQxI59EEr2+BbcQmrJxFqYRyQaDE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PW5oRWaZrTqQzm8MNBz3Q5hygS/5zXTjl7x/djXAHWCEPth9a2OCGWek7ubiYYh68g8KnI8fhxmy7ifF4NWVXMvwBKRu+2e+ITjR9jT0o7JjoNkYoiFgxoHqWsouhU7IVJOz1Q3x4qyrN6nRhbQWJwuPji/rzpl7n9oQ0d3sgo4= 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=ndyVZIC2; arc=none smtp.client-ip=209.85.221.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="ndyVZIC2" Received: by mail-vk1-f179.google.com with SMTP id 71dfb90a1353d-51878cf85a7so960225e0c.0; Sun, 02 Feb 2025 22:22:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563776; x=1739168576; 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=SVPdXGVcq+AKN0EcXss9rNtSG3r7jQ/iRsXkVRRG+os=; b=ndyVZIC25RBg6/DGMWgo4heI7uipWl1X6FRwNaS4PzHM4fsjt7pwClCCOU71uy8TLo mMx3PMRB0VbBJ1Jl12dZySHg6UZ9zbdXpzNkloz0s8XzulVlHOdNib7xiQUMzku/FaaH i8vsthG3G2QgGuoTzd8TX7oQfbdAi2AV7K86MAbSIAiLG1LebTdVpDyk2gctxCdZcYYQ pzwDw+W7cLkMCTdTcSGwhG88gLeUjw9nRvQ8wlBocIGoA9zPTHNf6nl5tIGlpoi01qgw YEvOOqKyCX/DJeBMgUvh1L3w9Z9kImqeA290LQYskURqEOWihEVw0DNEkLb5CZpXv4rS Tk3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563776; x=1739168576; 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=SVPdXGVcq+AKN0EcXss9rNtSG3r7jQ/iRsXkVRRG+os=; b=CL+qalqsnTOMCt8gpCLHfHo2EKbUxPiXcov78FJRqne1LMpueMeqCQC8Lc6ujDVbM+ Phv/aqC2RalnHw+SJvQCYDOOFCyPCpavdZk44nQC8MEylhdlADkvZQo2tu1L8Cswf9cW 8yL2FLY05+79VcwOpco9Ft4/fhC/NqG9Vk7efTIMoCVf5UVjBHBQDZ7uVPN5J6YRPXlE RRa/Gpf71cxHe3k0eLZDWQmoLoWWly4F9FwP0J9rSlQDBajg9NN5C2dKhUYiwoJVnq5m qNvZzh87ZuJG6W+xrxBYYynRfhqBTNtMiiP1vwb32QdJ629p4hAS11oF8ROhibAJsTNx jQWQ== X-Forwarded-Encrypted: i=1; AJvYcCUi6znL/SantFYH3jUK0QRiUiNfbU3Q8cTnG+zYfhVdybV/lC/o/p5IJPYqX+hZIQkE+suckIoUTebyLys=@vger.kernel.org X-Gm-Message-State: AOJu0YzXWMUlkk2EJR4VOERujlGUDA1Xgvshc0tgfyyJ8533DtM+mO5s guU8Jq5hENXh9QvrPs1YrqbPDiYuCSuu1l0n917nzA/f/iN/IUASpR+c/w== X-Gm-Gg: ASbGncuTVpp4F+60IxjxqEOVE0ST64+2w3kLjgwHLpU7yAoA1brG2PTseHg7Xa36MG8 tlare6JGFAgW8C8XjHIxAnJQbz+x54+qYik2KnfHt67+gcDObc0iWAcUhSX9PGDwUT2M7CcbFMh lcnyRdRN3WWg5so81Z/g6agKGQDUsW2eZ6Bw8CH/ByKekmOcCoYDW/6DIfa4g4tmBmf+5Pw94Mq JeF1w4ZZfAiGfhp0nWnB2m/S0QZs0MLqv2SbIkV4RLenkb9xvrYvfh5RItUm5bRpt9tcTdKa4DU NS1E4UID268Ob69ST6aHTts= X-Google-Smtp-Source: AGHT+IG4suY1DU4GcBDBVKG7BrdLDo8/hS6a+qQfzaKfRjRZIQgnC9cdrxnyhreSYsfO/g59/m66rQ== X-Received: by 2002:a05:6122:da4:b0:516:1582:f72e with SMTP id 71dfb90a1353d-51e9e30993dmr16674199e0c.2.1738563775899; Sun, 02 Feb 2025 22:22:55 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.22.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:22:55 -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 v7 03/14] platform/x86: alienware-wmi: Add a state container for thermal control methods Date: Mon, 3 Feb 2025 01:20:44 -0500 Message-ID: <20250203062055.2915-4-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 5ce954137f9d..6a3385350725 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); =20 - ppdev =3D devm_platform_profile_register(&wdev->dev, "alienware-wmi", - NULL, &awcc_platform_profile_ops); + return PTR_ERR_OR_ZERO(priv->ppdev); +} =20 - return PTR_ERR_OR_ZERO(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 (quirks->thermal) { + ret =3D awcc_platform_profile_init(wdev); + if (ret) + return ret; + } + + return 0; } =20 /* @@ -1273,7 +1301,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); if (ret < 0) --=20 2.48.1 From nobody Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f179.google.com (mail-vk1-f179.google.com [209.85.221.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 613391D86E8; Mon, 3 Feb 2025 06:23:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563782; cv=none; b=gasY0EPXJQbKC56Bjk1EDKkzbZowD7df+T4B2KTVdye6GCztRBA0jawymN8NQu1fxbn/WaZ4dt3XQUteEh42JZLjefnbXJbLccd73sy1FFxUyWdQcpRQIJjmJe2g11c3wx3qi/27qBMiA8WR2MwmOWjB234m8JB5w+z67TyZh7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563782; c=relaxed/simple; bh=sKNBdeGoFKtxdg6L0v0QvFc6CvZcS9SIg4xZ579fCH0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=djgizuKAyi8QBoH5KDS3oJRcxfMqe+j0ctMqQarHr21rQkNm90h6WJvV7++w3XnU97yEcGq4QPc29BwiT8KnEoffaEcc8ZbJ54svU3KilWLt8LBW+UWtvCpAQFHP5MJSaKQct1JNWZhq1Uw9BjQcoDY3mL/6XYQ1QUY1YhkI7/o= 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=CHLEzeHK; arc=none smtp.client-ip=209.85.221.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="CHLEzeHK" Received: by mail-vk1-f179.google.com with SMTP id 71dfb90a1353d-51eb1a714bfso2142827e0c.3; Sun, 02 Feb 2025 22:23:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563779; x=1739168579; 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=xqN943/qLZGcAfve17iT4qcboECw8oPXUJUF0X0yxQk=; b=CHLEzeHKTDnS/WjR06ynhwEwQqIOHl7fUsMdNI99Kc4i8JsthMbqsDDorTnhWVcKSu 2MJt7cGsFLBMJZLGkaMzLA6luoZ9+vaXGokqUfAKf8xGWg59bFRLFps/Wj6IzCKGwapq ybI7XFU3HfPMxaIe/vcjlKiz7e6k98JoPDRe27VX+HIGnCcSF+n2j52JRqt53gOw150V HeNgbxJnP08aB7+wPLE/vNFum0rPeK+zvxHsZdCo/+WMOG1LUShZldoZHUjE4do+UWIZ 7BjNVb+RQh/BjgE6/u4/qoL5eSjkXZC4bI3x90hdMCot0pbdIPfFBt4mUKGaE9lQXKQ0 GhTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563779; x=1739168579; 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=xqN943/qLZGcAfve17iT4qcboECw8oPXUJUF0X0yxQk=; b=XPwNoq4tCVWn7733u5Lawzp8E5XMmaufDNaxcU+bKcH1PpjVsOudzB0kZP/lGyRp9c 9lPmYARaha1VHbxlnSsvua+zXxmx+CgYdNOpVunp9B+jQ4cDJpZkr1wSVmg4Nsty5u9S fuVatp4Ak7/SF4Hcguyg9aBcOa93hIBzShT13a9Ss4UBlsMBFbB0jTK6BsOu3NZ7U598 kZMFomQNDLPlnWY96mZn/mfHtyfYwB+tYonq3XWorIF5LFJ1cU6LB5Q7cuejZQEE0bmm BZ2OpapO282lPNd27HHky7TQyDfd6D57MXU64QgYKXJJl5NPPnRhSrp2ANrr23AXCt0/ bciw== X-Forwarded-Encrypted: i=1; AJvYcCVhu5/rmDhzpe4iMZsNCxHGYp6IV6IiAMDaA03sJe8EGtKcT/fa38U9D5FyUlsO/fbyZ/sAEQniH2dtu/A=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1JBNbE8jNYDCl9eOtkKqXqnqlgBwDH7lmUqYIPM93SPfMVcSB at5FIRHaAtdgkV2Wt7AwXU1dGGdUds2rlg1ecvHhsKLDNdEsiEnd/QyWeQ== X-Gm-Gg: ASbGncsmoYk8BcgKfgaqMXlrGhEgJQ9tQf0IlAbuZZQvHhNLH1JLJlBv6SzlqaFN7hf FUPpFm1ZxvNYtvigGNlWQR3WynDQY0tml5bmKhR5aM/Hdhjizg5rW1Qt4G/jS9NGtr3rnie00kG mjrb04FpW9MRT+3RwBGWG3cBPJ3TFlj+Y+iJYsssqLnFeBBJ0AGyFxhcLKN0AI2RjJNE7DHH2k7 e4w/PZCrcFov0ZHomehoFtjmr0Q11mpJUPZ8c3+WztGRrm7/Jowzd9WjkgdlGMM6bEkgo3zVPSM or00WuAC+BaSXG6fvRrSvi8= X-Google-Smtp-Source: AGHT+IFtYp5yzVXnLTSbSnBLF7gRcmwRhTabc/8C+wG06usSxyFeyomq8LA6Xwd0BKLQY/xMxr+L9g== X-Received: by 2002:a05:6122:3184:b0:50a:d1e3:82f7 with SMTP id 71dfb90a1353d-51e9e42a7a9mr13209376e0c.8.1738563779072; Sun, 02 Feb 2025 22:22:59 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.22.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:22:58 -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 v7 04/14] platform/x86: alienware-wmi: Refactor LED control methods Date: Mon, 3 Feb 2025 01:20:45 -0500 Message-ID: <20250203062055.2915-5-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 6a3385350725..b069c5c585be 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"); } @@ -1254,10 +1228,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); @@ -1292,10 +1305,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, + }, }; struct platform_device *pdev; int ret; --=20 2.48.1 From nobody Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f176.google.com (mail-vk1-f176.google.com [209.85.221.176]) (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 1353A1E7C2F; Mon, 3 Feb 2025 06:23:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563786; cv=none; b=CU3UgqvCPS27bqLyszoAiuWP7k0YlNrONgJDWjBbT3FYNSdMrOmoAgIoYWwrJKwc5l7QFIky2G01FN6vwiTK5JG83rY+oK0oO2D2Xbu3nLz2HT6ARt8CQTuru1kCU4xu1lC3ebKJWolSPntoytPgndPKOvQfq647pZhOVA2sC8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563786; c=relaxed/simple; bh=Vkmcshd6+Pw+U4Vhd8zkxfSSwfZ6jB9Ub0mpkQ5gusI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=khjU2mOQfAWrH5fpCZkTdmVuCMLocB0i7YghW74jytMfZdzQvTN2a2PaJ85VMw/U86sayHN7+lH1O48SjayJCImzGHimYGFYfOCSo7AqBhKM7Tf1mTj2YplZV6uBZ05nl00IuOjPbLPKqIYnxiA5RsSt2dlugzjTqPA2VghYQwU= 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=dvYOrosY; arc=none smtp.client-ip=209.85.221.176 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="dvYOrosY" Received: by mail-vk1-f176.google.com with SMTP id 71dfb90a1353d-51873bc7377so1371887e0c.1; Sun, 02 Feb 2025 22:23:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563783; x=1739168583; 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=fbkHrV/xDeNjrQkI7TvjOH1o/Jz2Ncph7yGYZeBkeJM=; b=dvYOrosYlE0srQrczCc+M8wuPCKcCcu2Ub43iL2EoWsVl5WQqOq57BSPd6d8Wouwpz kM0rzO3yp7KqfrDm6CpOXgtEd/7V1w+Igsg6Jx89qwngKbRREg79Arrv6IKgqN4mqVdG lsOqwLydiEoltEQPJ1fFD//NdpZa9oyh0gmzkpHeObqcYc47DIexgwLfB56fWYV5WE20 g3VFNhv6OKSVpLzVMaF1dm/wKkcjhQMsrT7t2FmnDTJSSih0MItYqfgsO+y3K4TaxRB7 dhgQvNuMOOBFQGtZ07cP8woRCo0QzzPjYjMemvpd3XDv31Ik9bjQcQ3KRg8yMFAVdmnv lOLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563783; x=1739168583; 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=fbkHrV/xDeNjrQkI7TvjOH1o/Jz2Ncph7yGYZeBkeJM=; b=PyqdHaLRnEu7grXXUK8lo2eNc3DF8gTPZ9gOKSXzo5EniMeJyEKP+bynh9AoG1IJpK k6O69ToCBnwrbe9m9xbBvhF2v1plE73KzLdy55OnZFmDVqZ1jpbQfsb1eQI4fdexrOV3 FMlbXoIa/TxX2t9+2lFl6UhCXN9lqvF/zHu1WureUtO0o+GXNy9tPeR7Nl9w8dBrWPdu 8xvEKj1LkRk7vdMODo2heZaYGUiBYxyQpEWu+jJRzoSALrpQMKAqLPQB7l6EvRhWcciy cJIRZjxj+DeNfJM4dkoVauSdj/gi6J7Np01vlFk9Rg/bgiQ3yOQK+WfzQBN8GlkaQaie CmCg== X-Forwarded-Encrypted: i=1; AJvYcCXrFlMaSP3n3Gt4Hj2d1ZSV5+xZU/M8gcJ4XYYnPIGcb4+Kcqzvr8ESEFWM+iGeGgg67ETN1BgTOkbO0t4=@vger.kernel.org X-Gm-Message-State: AOJu0YzlkabK+oiIGwwWik/WxONahx4V/IP6CJtO/G4gvuHUgW9IaJFF XGBYOC8qCj4LSXG2Mz+hup4yYNu4swAZpIRbwaZxhlz8/JfnOQwVKciw7A== X-Gm-Gg: ASbGncvnCHI6mJynfChae9XfCYC65qAdxgX56aycZUHC6q5SUG+2vzjwkDOgl3W2VZd J3tWv6FmlpfvspA9IPGDzlccgDHYNeEXg5xvJSMJWcUUPLCQ5c+dxapPA6yirlkhvtA6QfiUODV yag1Ch3+pbTrsKALQ64JgoE8fdx9WdICkKbMrQErRinL2Yf6bkShgsiMBpkfHrfFuwBDkdFGfic UQrf93aPEYzjS4V0lGpTmX8DNsCf+IapGpj4YmJcwqceLfbMBsQfOo7cGqSkFIonYUvW6fOSN0f Fvr1Ee+QLEN4YUTXCwH9Q3c= X-Google-Smtp-Source: AGHT+IF7MtOA/2kYPLJrhIRnzfVQiMNzZM0nFl/SU0j9HQ9O7a0yXUr2IOiDEScY72WuJOWpOcP6rA== X-Received: by 2002:a05:6122:2108:b0:518:865e:d177 with SMTP id 71dfb90a1353d-51e9e4303c2mr14847792e0c.9.1738563782791; Sun, 02 Feb 2025 22:23:02 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.22.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23:01 -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 v7 05/14] platform/x86: alienware-wmi: Refactor hdmi, amplifier, deepslp methods Date: Mon, 3 Feb 2025 01:20:46 -0500 Message-ID: <20250203062055.2915-6-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 | 80 +++++++++++++---------- 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index b069c5c585be..a219d68ff84e 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -711,53 +711,57 @@ 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; + + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, + &in_args, sizeof(in_args), &out_data); =20 - status =3D - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + 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); + ret =3D alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, + &in_args, sizeof(in_args), &out_data); =20 - if (ACPI_SUCCESS(status)) { + 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 +771,12 @@ 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 +809,24 @@ 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 +856,17 @@ 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 +874,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 +894,12 @@ 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 Fri Dec 19 17:34:19 2025 Received: from mail-ua1-f52.google.com (mail-ua1-f52.google.com [209.85.222.52]) (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 66BDB1E98FE; Mon, 3 Feb 2025 06:23:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563789; cv=none; b=Mz5qw7M43dh5pnKNAwnZvqtOeMYKXC+WWQYhAebjDikXZ1qxWagJdo9QP1rFRZdZQuXCtQJ54c94ZDqArUru/FRfX0jK9opvfCWFvL/dXw87aI8KNmHnX0vBrwgkMO8Y0UOrN6Gx3ONXBpLRVE954t4+xrpusUP9T/iNTSlltWo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563789; c=relaxed/simple; bh=IdcpjdsJDaq1jFspJKftwTEFIZaSoGxu0KtQxVgCGFk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YHAXvzKe7xluX/hVb3609x3wdTl4JZSdr/8UszqUEVM9MTSZjSJaPeV7aHbzYUWBJO86SUdmj1no8qEEq1P2rYp4WnRm/FU2QYJVtNWKcpEwvOaUIEmERxcpGkrmpYiAycHRTdyjQB0z5BYz9v8py66D/gWNAKZAw4m+e6NYm4s= 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=ONJLM5YM; arc=none smtp.client-ip=209.85.222.52 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="ONJLM5YM" Received: by mail-ua1-f52.google.com with SMTP id a1e0cc1a2514c-85bad9e0214so1805712241.3; Sun, 02 Feb 2025 22:23:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563786; x=1739168586; 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=eQq4nmqKcIUI1Qy21JPqGpG0SxeT5xGS5MBZ52udNtY=; b=ONJLM5YM23uXLgbIUW3WmiSPRSVyb275KT69rWn3HB9wVBtr4hWHfaUU46vIHrhhjs 0366MUfGW9KNjIr8MROlKGEc5McipZfo5EDMMn53gCWFwWH/3Mr35y6CS96O8VJUjwfl voP9R95wMVhpFOaVWLnO1glacXQk8uqsUhq4JzKyenCRi/DdMeteiNBpEs4pgdHDg4Nd xmffWrUFxmEqkfsJJr0nY2UmXuQYAafemNN4zRBlWJrq3aGWHodH5fePgwpknbVeOQ8U eBxvlxLEF347hZFs4CdliB/Bwkk0M6sEPTr1wjPTbp528aqlsRCVvkRKoT+owtMrLbYV AJQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563786; x=1739168586; 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=eQq4nmqKcIUI1Qy21JPqGpG0SxeT5xGS5MBZ52udNtY=; b=gqBJ4p4lRvCSWZeVKhJ1lFJRnTplffoByF0bp9DQJXvvCSl+kpvSVR3xogxinVBVfm EM35XLtLYDMOx2o0OIKLgGl1ONSHqW2AMsKuZlLIhJpeiXfbNNPQLdT5QSlwnwTIfM5T oQnJySXXrvxLPqlSUHKGI474xoy7q9p2ANnUF8KM2mUK1HbIKG8o4Ob+7sZlIrX9+jNb HNGu2jZzSBC1lD3kvL0+mQXlQ3su8TreKtAGoJ12NyJC69xzfoqUAGeVoExhVJQ9kpWM JAmrz5ZG+L45t64JnHud3tZuHY9LwV+B2Wv7XYOKjUCopO8fAkZtCAhyfsbrQU3F3u2a 53oA== X-Forwarded-Encrypted: i=1; AJvYcCVRYfbadnsOmPAEBILbug1X3Uxw+DACb9UdGklJMiSUuj2yQDRRCe6aX7ZzLlEd9BXx7tLhzl6ylCf/0Dw=@vger.kernel.org X-Gm-Message-State: AOJu0Yzd5Eol8tYPEN2lnrNi1/lZGZyH/jb1gZDsFVadtAl/IJ0gM3/G TUWKRJs+LmoYXz/ysKRDDn0YbM49zQZScxhEFIrzfbqfwVTMR5SVnzkcVg== X-Gm-Gg: ASbGncuAwhBs01G+lzfPtDZBh0ZskRrn2xTAWuVmGJboptrdqN+rpGd63knd8kEu+Hm Ce8+u9aeVFbTGwQGuhp/WP5516SN9xUaTRLGenPVP9wi57kwQvG3W/Jb43Navg9JZTTj3qj9a01 D7hWjaGMrsw2bYiVROsjiUcVr61LqX66eiSp4c4MIBQO8xmbFCfg+wIOOE1hLJpB9AJw4MAAZD/ Qdvya5/JTZeFZ9QOEYMsUp/KBan0Zk9K6CqdTSqWM2Z0Uthf8TLJhsxeEiG1ygOF27MOo0JuEwn yVCYy93SUvLPd1xmKiUJMSo= X-Google-Smtp-Source: AGHT+IEPWxZicq+HqQ21/658DYPM/eq7yImkKY+GRXEjbInofXyNg0DCS7dJDNCr3PgglwdIo4oHyg== X-Received: by 2002:a05:6122:3212:b0:50d:6a43:d525 with SMTP id 71dfb90a1353d-51e9e30c2b7mr13068445e0c.1.1738563785794; Sun, 02 Feb 2025 22:23:05 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23:05 -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 v7 06/14] platform/x86: alienware-wmi: Refactor thermal control methods Date: Mon, 3 Feb 2025 01:20:47 -0500 Message-ID: <20250203062055.2915-7-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 | 87 ++++++++--------------- 1 file changed, 30 insertions(+), 57 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x= 86/dell/alienware-wmi.c index a219d68ff84e..e63f232dab80 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. @@ -949,7 +921,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, @@ -957,14 +930,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; @@ -972,7 +943,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, @@ -980,15 +951,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; @@ -996,7 +965,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, @@ -1004,14 +974,13 @@ static int wmax_game_shift_status(u8 operation, u32 = *out_data) .arg2 =3D 0, .arg3 =3D 0, }; - acpi_status status; + int ret; =20 - status =3D alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_GAME_SHIFT_STATUS, - out_data); + ret =3D alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); =20 - if (ACPI_FAILURE(status)) - return -EIO; + if (ret < 0) + return ret; =20 if (*out_data =3D=3D WMAX_FAILURE_CODE) return -EOPNOTSUPP; @@ -1022,10 +991,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) @@ -1054,7 +1024,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) @@ -1062,7 +1033,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) @@ -1070,7 +1042,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) @@ -1083,7 +1056,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; @@ -1091,7 +1064,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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f173.google.com (mail-vk1-f173.google.com [209.85.221.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 34A3B1D6DBB; Mon, 3 Feb 2025 06:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563792; cv=none; b=OfjsKgfFapmgEXWLYCs2ouSFoxzZ7FnJcu5eIkgcVP6NgqBiogwdtNyHA7pF47rcnj1tQywg6lS807zkCgNU+HEB2ng3BjX5KiuLhLaQFC1t9YGDoOyUQTJ3fK3qq9I1S2h/t/0FI67//B7SvokpxVSisgtsDhiaJNm4XxGapig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563792; c=relaxed/simple; bh=0SCb7PnfHeQ8kfrW/Zn2QZzAmFjjjqEXXXFOgQ2wzDg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=O218UOD0CDnYba7RY6fAByjqQsciy73m4kAEsUiWnul7lBZ6al4EaXzwS+tYMRsdBAq++o6GrA9eeJ0p13OXaoFEQhOKqxH2tFK2nnOTXi8+7hWBFXRGtIxLplopdH/tQ0CgD6iaIcliMTcS8qMKUtBwj2L1Ka5pVDk1HAV4KzQ= 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=XXoE++8B; arc=none smtp.client-ip=209.85.221.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="XXoE++8B" Received: by mail-vk1-f173.google.com with SMTP id 71dfb90a1353d-518799f2828so2195429e0c.0; Sun, 02 Feb 2025 22:23:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563789; x=1739168589; 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=+KJFejaN2hUA777CdToE/ncuKqP7mW+HC0S8uqtzNoo=; b=XXoE++8BygLLLtahE2BefPRJofGhC2T/+unDPL03vqfBCBxDWBZ4nl7KkNqAAoqYfr Ywkla2MzIYt1rJrJGUfUa0EMEhmPZJu950JY5bp/ycizSaTuLsjs6jatBKBZMn4RACLN Xe2n60ApxGrk6Ec1h0uU206E8Re9r573syZovzjzqXvXeBQreWj3+YlTm69ALiSD8EFf sga1Ee/O+StVKz1C4gCzvOO7R8nyKlH5H3RgQWwEbpQ2/Ax3z+WTKlEuQBzi2ol00USC gZi5xSnXCHBNzj23jppW3oeou5rxAWVL4ZW3d9zzmJ5Vqd/sN2niNOohVb8bVqrIUQ4S OuhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563789; x=1739168589; 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=+KJFejaN2hUA777CdToE/ncuKqP7mW+HC0S8uqtzNoo=; b=wPZ1tvavRBqa1MmzsPhj8HfMNOIUVilq42R5ZWSVROcLdMajuZZXtjLx9Dls45i6PM 1vKn+0Tiz6cTJTHLJg4dAHCxmWNpQGb/C3uVZI6XBy8LJkuCkPGlk9+WvdCO27DGdtU2 AA3VnbxGAvULdGKo1yBHqsK7rPKSrGxzUpIYYuCAp69DNarO6xOXxz5qJK7FheNnIPZz Wy/xS58xvtPPv+XIfO60V5FfbDRAEmGvsuRQyqli53DnP68BbUrFvXTN8PrK8yIoaXr2 /nTkTDa/0qXc/hJf7zZBG5Do7/EsaaBMquA0JMdMHx7xJesrUy4YW2w8ehtYTOiancH4 cH/w== X-Forwarded-Encrypted: i=1; AJvYcCU4JaO4TMLUowXyeEtjLDMhX3DB1XlR2AakBx5GjZ8pa4sUHwr42hnbbJhXE8i+Koh7675TmtqAXKlsFCY=@vger.kernel.org X-Gm-Message-State: AOJu0YwTXlvlWLchnh83T13tIzgMfA8PwXeN1gzVGIWQNKpnHXby/gJg xmF5yluAaPqJwvGO+H+JLFptROudVKKRVFHWDpWmRQ5tPkBra67xgVb+/A== X-Gm-Gg: ASbGncuEfGF/yEYQgF4U3L6d/TUBnw96ooFPwebHiqDI3K9uVShwgtYeZ/IOHwKjNmj NLH4/Vo1bJi2k3uzU2PUqOAm+x5M3j5NcIY9k9g2+DWXQuLh7S4Uow6+/L1IpwjL3YAT6W9uo74 MBcG8c9yFOethprPWfQ/+ebTi7E1VWacKgfqesFwaTJxnUOw4Wpyd37updLOt0YAQ9HLMWos3QI AO33ZiS7DZ7Zmh8I6HqAQHomLBjFV6w5ZZ0asemY3CWBTkTQHAyu8ILt7SQ5hAHEgEV1XkFJeQL 0R2y16TmrnbJojRmwPc3/no= X-Google-Smtp-Source: AGHT+IG5ahipMZuKoIAgu2k+Xt378rUHhulXHdpfraRXzRMTzvVztjVDjc26VJ7Y84PNeqTioaKQug== X-Received: by 2002:a05:6122:6162:b0:50d:4b8d:6750 with SMTP id 71dfb90a1353d-51eaefabd11mr10324753e0c.1.1738563788780; Sun, 02 Feb 2025 22:23:08 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23:07 -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 v7 07/14] platform/x86: alienware-wmi: Split DMI table Date: Mon, 3 Feb 2025 01:20:48 -0500 Message-ID: <20250203062055.2915-8-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 e63f232dab80..e426b266239d 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 @@ -757,7 +734,7 @@ static DEVICE_ATTR_RW(source); =20 static bool hdmi_group_visible(struct kobject *kobj) { - return quirks->hdmi_mux; + return alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); =20 @@ -806,7 +783,7 @@ static DEVICE_ATTR_RO(status); =20 static bool amplifier_group_visible(struct kobject *kobj) { - return quirks->amplifier; + return alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); =20 @@ -879,7 +856,7 @@ static DEVICE_ATTR_RW(deepsleep); =20 static bool deepsleep_group_visible(struct kobject *kobj) { - return quirks->deepslp; + return alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); =20 @@ -1020,7 +997,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 @@ -1086,7 +1063,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 @@ -1124,7 +1101,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; @@ -1325,7 +1302,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, co= nst void *context) struct platform_device *pdev; int ret; =20 - if (quirks->thermal) { + if (awcc) { ret =3D alienware_awcc_setup(wdev); } else { ret =3D alienware_alienfx_setup(&pdata); @@ -1358,6 +1335,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 @@ -1371,18 +1368,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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f175.google.com (mail-vk1-f175.google.com [209.85.221.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 26A271F5424; Mon, 3 Feb 2025 06:23:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563794; cv=none; b=qVyFyLcdhkkj9FWPStJpD9y7DQ1baeYDYl9I/0j6RYB/VGr9SR2WNmSfHZ46rFAuhgeMYWfQf/rgQaeLfcyvPXsQQQ7MMAi+MiRx6DGALI76BsXoQdcXFJvk+5XUBGdbUdrUb6tEh/rgwwi1EokkErQyqMhmFNyQ+KNrNm1NT/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563794; c=relaxed/simple; bh=ndcGEPrnD62GulMfN5unalpKAMLHfYYZBWLNH8mur48=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V9Uax2TXSWoLQrNgYs1m4OMoBvScvVvgXedZIxO00fZb10Wdza1+TqgYosa5KfnsBIiNKc63RANClcgNL5jXSVmHIIWpyk+uGo0+MmDN5f2XeLk6RiY0Y5IJNi2BR53c0shCfgKvSzyjG5jbWBiyjzkSbyO/DlWvusiPYyaz+yo= 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=lhuH5eDp; arc=none smtp.client-ip=209.85.221.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="lhuH5eDp" Received: by mail-vk1-f175.google.com with SMTP id 71dfb90a1353d-5162571e761so1351881e0c.2; Sun, 02 Feb 2025 22:23:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563791; x=1739168591; 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=APpgpffaIqDe69AgyJqHNVwT7sOhy3J7j/9W39EGZXI=; b=lhuH5eDpbDhKoOYtWkSfE3dVKWg5dR2cPv86z8A1YStgltC0o3FPDRxrguBAL/euw8 4GW8rlXN7T3l81GWEyTzN08cb5RsScR5CUPTAggC8tkBIcC/gEgYf7QQzgLf7ih8nIB+ oFK0mKqLdMJXQRALpZb4LqLkdJAsNeKU5GhHSPGLyxA3cD8qbZ0a8tXuCB6xSyBASiW+ LK3o1pHmtn0Lkhz0dl04eEakEKdNLd/vZItrMavs8Z1J0phpb+Z1eGD4eU9q3ck9CPWa JBexMm5V5MEc90hLXPgHr/K5tf1fqR/QDbbkx4pa0HeM8+pRud57p7bzt+gtRDQS//BY xtQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563791; x=1739168591; 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=APpgpffaIqDe69AgyJqHNVwT7sOhy3J7j/9W39EGZXI=; b=AQfDRJHFlY3RJtdCEaoAhpT9OeluT/pV6OPlxS7uHcK5inzFMyH65lKQHnEqWCXRWM JTDWAvzZNDx2d0hMYbhVP0otKBUcZj4qG4K92V3yQEwcRw/xI+0BOXKkmAl2DH7WM1yW v0WGddN2R3aVONGgw4oCmJjgx4lJDYwxgcrI/ytwMSsul+InP8uqfcnItMvHtiP4JAxh c+AEGyHrnBRYpi4KftCZOGHrE+68K/zz9C/rPiodaR+KIqeKAwLhiWzyMxgx/7HebWuR 5tLbpWlC41+TUSPc5tZP+m9JuobJLFOIjPKT363ZVpOGFYIIAPTWyvcQWbpkircXJiKo CpAQ== X-Forwarded-Encrypted: i=1; AJvYcCXxbd4iA4ejGeF/l3lWVZo0nEtDJa6zbr0U5F+DyLqNPhzTGvJYvS1QkCLUaQYacdC4OZU899ZgV0+awbM=@vger.kernel.org X-Gm-Message-State: AOJu0YyzsCEXfn4SyeNDXtLJnpruvpL7L7s1o8kOk13s8Yc/L2gKdAuk eAn5FTqTusFqUtatsdBYTYYlAWlXnIzDu0+HZPKYp+4dmW50fklIVBDgWg== X-Gm-Gg: ASbGncv5Ts6UvkTCw9N83yoQ0AgKL80XDinUt2uEy2oZRakDeIcsX8iNUIzv8FBmUUH DGGGKjLpqOqGK5uidDuXjT+hLSc0pmQnXmLfcpkb89iMKMvFwzgcSeZx1B9X3CI1kCOpqhJnd3L 8xdZtCUpr7B1yCqEcgqr3kWs6QWHve3RgLnITdgN6cP9WpagdeaU/Rgvwhm85eY+tNu4L1WhiXi blQgYEKXcgPq3nBWP0FBAeL4gxWm/ppkoRwz5sjsRQ148jo7acIVw/rpo4H7pxp+a31uPjDxB3z hxPNVZ+STY8OAK4rpIGdLUA= X-Google-Smtp-Source: AGHT+IEM0LzSw4i2ZHoCtIXncShu6ZY51LcW57QXKspBlwqdzVDxFoQNBaluc6Ckokf0RLH5sDMzpQ== X-Received: by 2002:a05:6122:32cb:b0:516:2833:1b8d with SMTP id 71dfb90a1353d-51e9e55db69mr15237430e0c.11.1738563791602; Sun, 02 Feb 2025 22:23:11 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 08/14] MAINTAINERS: Update ALIENWARE WMI DRIVER entry Date: Mon, 3 Feb 2025 01:20:49 -0500 Message-ID: <20250203062055.2915-9-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 936e80f2c9ce..09a117a1f89e 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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f182.google.com (mail-vk1-f182.google.com [209.85.221.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 DF4981DD9A6; Mon, 3 Feb 2025 06:23:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563797; cv=none; b=tDVXTBXdUnk2EjrbBheU3OHlw1sY+IPlKzYbgREutmqpRmFisFHCJQqUv+csp1N4b5gnGvzXp4A0Y6yKk0/ZCGmuQ+gMB4lkrlzOHlPIWUtRkY2yC1q0zI+5Gk7KgW1Eim1Or9iM6gv/IJzlHxxc2hHBZ0o+MzwivOvfF1RFcQ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563797; c=relaxed/simple; bh=Woq4swbnYq3xsWIj3EtplDj2WuXqxSueFP8J8UTTZS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hMYYk9xznFxlimrvBGz7Y8FEzjwfCyPkfCtvpdmxUqW5p8qBXE5bHA3e5k4e2D0YWBR18DnIIgWK/5WPeSAw3u1+N9GSiR7UNDjCob6TbKFgcnMQz1giqDECxBL9ZcY7NnnLnp0MjaP63PNCa00Vh5lfWdIBPif/dXALhucyklQ= 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=i559oPQP; arc=none smtp.client-ip=209.85.221.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="i559oPQP" Received: by mail-vk1-f182.google.com with SMTP id 71dfb90a1353d-51882748165so1250135e0c.3; Sun, 02 Feb 2025 22:23:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563794; x=1739168594; 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=i559oPQPPUQNL5apR3XnizSimSo7HgCeYNVO1XvbCTokbCW/vtmBJ46pGqChbz5D3d eYaFXACWHP8M7gYyIsKBdxsrgoumibnvsyWmrKVslLb0vfrV9Rerp7WpiQr2loHUO8MI HaBy5+XAUjiN798at2DVnavQPlGlJ8NwHd28weFbAzuDVnC6kFZ4obwjDTE9A01R2j0O uHKCuWbPbs68cY1G0e+VhNWv3c5pzcXpnrriY7K42feQqHlcst7D7ijXMWt6GfIM+vjD dpO7J/ux9xpiypUjNsVxJCU4KERfAIaQgM1sFPu5jafuK1BIG6obg2OttKo/kEvC3kxX yvKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563794; x=1739168594; 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=bZFSTJZw1twHt5eamexkxLw70L4MyDX6wuEWx7fvuJxb4sTCrYScAZ5D9zKOEuHMHr tF6aV5Ta2m/wP/wpi6RdeCKvBLqnrWzy7yXqCkYdC6sUN2BFtGm+egcROvp1bjuADvbc ksMWPCKsoaJtnRLs974uHYXrFjVfL0Khw/sB885yNRU9iEPMX1JpMzMznMLjtt+zF33X UcjkGbjPKmKnWOAjNoVzHeT8NC7g9YQkZc/QXa9GgTnu9I+EtmLMMTZ+N/GK/SDUTq4z HjCLfrpsr5e0WHr02rHsBztHL/Qe8X70rPrwqfDBCPf/Yp3bOhbGh1wsFRUh9g4ycfNV halQ== X-Forwarded-Encrypted: i=1; AJvYcCWwHJAiRL0R3CypkfsFUw3V9ITjBRPGF17Cy6wvHdOqAljm4d9vZua9hEDfnbCdQPEU1MoLKTVFaM3f0ok=@vger.kernel.org X-Gm-Message-State: AOJu0YyBcKwWX+9zQ3brlzjSh//vd8mQOCDVvJCLTfzG3KU3N/6IsBsI K0cyZXhE+IQ2G1img8cT/yfW7JO2OjUZ7hRTXg2khiTteWuBX7bDdHr4sQ== X-Gm-Gg: ASbGnct/mY1nZM4JcqOZGHg/V+4zm/Z2e9bRpdIS1/dxhiEn/vfw8srC3+pJO5cxOcC BoNEImLq0t2Lb/Zt3ky12/Fg1pJdcYThNqcE9FnADwIcPtC52jyoBhGYBcgOuyCp46ugVARnDe1 sMAveKhuOaIn1OCnW2LS+YJfOoYiHMdurRrOZ+TLXX4pQJpXZ6n6qiu4at5h4j48Y+b1h/7Sf7c dJfgTsoNyROTzvEGLSK/m7iKtkZfavgOofC+AiT+jzCjxXcFhU5tkLOml+czyO40ZQATU++GRCm TkPd2UJcYQrbySRmnGreU0s= X-Google-Smtp-Source: AGHT+IHKrHTLQK9iQQDWNz2P6RChImI/EQoPH1kAE5B0xYW+X0AB4qmVHkVblfSOAV3dnAuldeTZKw== X-Received: by 2002:a05:6122:8c01:b0:516:1b30:8797 with SMTP id 71dfb90a1353d-51e9e46654bmr14989922e0c.11.1738563794160; Sun, 02 Feb 2025 22:23:14 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 09/14] platform/x86: Rename alienware-wmi.c Date: Mon, 3 Feb 2025 01:20:50 -0500 Message-ID: <20250203062055.2915-10-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f174.google.com (mail-vk1-f174.google.com [209.85.221.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 5F4101D6DBB; Mon, 3 Feb 2025 06:23:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563800; cv=none; b=ovJEUZzj4h4ZPxZgTCUufOet4rjXUMGbZvZvxbOyOlYFAtAWnNZJ8zfnJ7Y66mI6xO6YoVm+r5j52OzF/FhUEVjODg+ayt5pyXfIL5XCnZRPTpjhgN/CuNi/3eBKTzFPCaTKTiPRXMUoC2jF07agYBywiapNU5CbQ+05PQmMrKU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563800; c=relaxed/simple; bh=IUfLnQZ8sT0INsTFkaaZ06HR+R9uujr8y1mPJMTy6Fw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iVJXIsZZ4w2iZSnON93utykRHAE6O3hq/O8l9DH/oGotu6Qni4pOUEjXJ/TfApC2Ejvm7Jj5x2/jA1t4ebwGC6cswbO0Zqw+kkW/tObNFbiYXGx/ukJO3bcgsL7iL9O++sk+9i6bAcN2ivhy0GEwTcsfZHat8iFQ41dAUKgWFv4= 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=ijsLtTBu; arc=none smtp.client-ip=209.85.221.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="ijsLtTBu" Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-51eb1a6954cso1175109e0c.0; Sun, 02 Feb 2025 22:23:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563797; x=1739168597; 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=q/NVGS9TuPPr27z5Yj7VFRKFX5u+0QXnWp1wzELvp+I=; b=ijsLtTBu44wez11JmpRDflS/zOZO6gIxUZjR9tNaPDJRiWR7D8GVlHaq+rQa+Uspq0 emvfYf3xjOKFA6o4NrbSvXlTMrJ2TnZM76qpjkzav8GtZ57q/zPJnP5QG2HNCL3WLa7W rB2yBHuXpvfNGU/PKvtTZgMNtc4KzQ9GEO+8EQDZuvGvrekKUg4riZl1bOy3M96ezZ2V 5Y/rg80dcIoQ1NWLgN+up0SlkeBlyTrVNcqBA6GV8rlGCeCHJgK9bH6PBVXhTdWtU3BL qGiKOiz0h7JKkd52U+JOl+4RazgM+LQtt6alv5cX1xl2ia0fk2LQJ/BTDSBqNFoPX5Gm 2LmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563797; x=1739168597; 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=q/NVGS9TuPPr27z5Yj7VFRKFX5u+0QXnWp1wzELvp+I=; b=TKAB/MVv7ZzxiIGPR7nspeApP7MdHXRCQe00NzdqiQOipxMCZssoOABmzeQpj2IeDx Y9JzIjMB0lVc5K4rjky5EIoOp6x+9x0XvwzagbKDdNWaA8kqVHfVLYQsWGRnrZGMobHH WrWp/1xU44QFEoJ9xq7gsFUQ6Q0bCDFP9frhm1eh1HzNh2x9CpVaPkyBD4ZbjTVemX8W 4/sdDb1r/fHzAZP9mg/lwYsz0O6xLvRQjc7kSE08oPwytdl00hB0hjKn5vzliE/mCXFm 19+cIpzRa/erk/kfjy1PQRIDpkvt/ORcIFKH9/yt+Xn8SMmUpdhzAZ2hoARzdWWPL3nE 1EZA== X-Forwarded-Encrypted: i=1; AJvYcCW1ZVYC6aY1ld1GP7xaYl6RNYRQeLXMwZfVgf1AOfEmvJ8GuswZ0I5O09cbbbzpH5W4ha8HhVqrqXHx9aI=@vger.kernel.org X-Gm-Message-State: AOJu0YyQcec6XtFgpi0ipObvnZr3jBQTl/LiPx17eDUJQJRnLa4z/yYR aUiDy18PzSlavwO4v04qIBQo3PUyZcabOXMnwuOdb/ICgxmscGVuKEZfUQ== X-Gm-Gg: ASbGncvs4Bzsfu9oKM5t88yBSmXLpU3eKN5t21BdwzkrcOakwsE8Om+LZ7J+351A9Gs Neft9oMvUevF65A7tEqmP6tfD5kIHLi9DQ94FSCznqS4hTtuCpemEuVDYB1ENfyXRSlF64Q/Biq Hf8C2VMJT/fZa2QomWUw6He6YpSXthq/fQqRcG1yRvXsW7zWX3qjZwzEtHwMDf3sgvQ+YsvyX4e D9vFByA3Z2NATYzj2rZ5q1snRgstVnKGfeMW/tWg8ua/mkvTMaVGJaaGNljFD0LZi8nfhD/IP8b aLaw+iZ1GDcTB3hQ04HTYzo= X-Google-Smtp-Source: AGHT+IFSZ9bVOIxksVOn0uNWzeSUR8XQmnnbAHOXheO/8CssMVKPyyWKL81aodgRPgvZkLDtMjz8mg== X-Received: by 2002:a05:6122:1821:b0:518:9582:db90 with SMTP id 71dfb90a1353d-51e9e55a408mr14442911e0c.11.1738563796957; Sun, 02 Feb 2025 22:23:16 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 10/14] platform/x86: Add alienware-wmi.h Date: Mon, 3 Feb 2025 01:20:51 -0500 Message-ID: <20250203062055.2915-11-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 | 67 +++------------- drivers/platform/x86/dell/alienware-wmi.h | 78 +++++++++++++++++++ 2 files changed, 87 insertions(+), 58 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 e426b266239d..6824a79292b7 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 @@ -55,18 +52,6 @@ enum INTERFACE_FLAGS { WMAX, }; =20 -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 +99,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 +223,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,26 +257,6 @@ 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; =20 struct awcc_quirks { @@ -418,8 +369,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}; @@ -1165,7 +1116,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; @@ -1252,12 +1203,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); } @@ -1333,7 +1284,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 @@ -1358,7 +1309,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); } 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..39a2597b2fee --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -0,0 +1,78 @@ +/* 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" + +extern struct alienfx_quirks *alienfx; + +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; +}; + +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); + +int __init alienware_wmax_wmi_init(void); +void __exit alienware_wmax_wmi_exit(void); + +#endif --=20 2.48.1 From nobody Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f173.google.com (mail-vk1-f173.google.com [209.85.221.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 C84921FBEAA; Mon, 3 Feb 2025 06:23:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563807; cv=none; b=qMfQ0NGhUixkLBI1WTKZtPZtS6qPpPg9XpSUrcjomBEVtWjW2cGFo8mN3x9wbt7WxActbejmQQV1Iw3TI29T7oLbGdlE6W/G2LLBZSZvI+AkKu0pnp+u9Qt3fJbas9V5pOdDyA6upUNI3d78b0Mt4oic9LsC3TbQHCJGStxJgeY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563807; c=relaxed/simple; bh=/yfqM3V/gUqpQedVSMOgZOt2fDIT+xQZjXVZuy3hSIY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bYxTfjBuTOHmsRmgZlFG4IOKWjKEWCL8YuTJkbjN0aJxE1rzsntyfsW9141rdJqauSOFkBF1HLWdhYXfthw0Wcoj3seBp3Y3FS9v1YceUqiV5J4H31uz3cnKB0uY1+tNQvvKHvzuQZaUgM2GUfdoTrj+fJMHm5/BjsfODl7O/GY= 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=nRk4wlEG; arc=none smtp.client-ip=209.85.221.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="nRk4wlEG" Received: by mail-vk1-f173.google.com with SMTP id 71dfb90a1353d-518ae5060d4so1257858e0c.0; Sun, 02 Feb 2025 22:23:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563802; x=1739168602; 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=pO7vR09BCjcQVZhnQhJfbmZYD7/oO1GUNs9KPY0Ot4k=; b=nRk4wlEGlhqb35TZbqwbw6J922u4RtFYLbqgA8wZr7Ozxu8yfTaPg2eqqJgDBwsd7B Aq8LZUYUIdqyL20kEQEoWKevALlPhNbkhb825pHdk2KrFVwJkzbSB1VYnuo11qwoxtsk X3wT2ym+Mfjlv3rePiYODO1meFYcyesvbpOFbpdoUM/W8tBtcXFfZXpHCX3tZ8ZewvkT pfK6DYe6qntDa2K/JpIBxN+Jw3XX8syrb8zapzoO7TEa2+bPIy3o0msjb0qDCT8ttHur bxH63A2kJjdrymngnY2Lihu6dEbH/wbYVzR69fix/lPzlB8hGQpwap/Tp6eptbI2FJMw d0xA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563802; x=1739168602; 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=pO7vR09BCjcQVZhnQhJfbmZYD7/oO1GUNs9KPY0Ot4k=; b=AdNHFwJl2y1paHfy0BQn7F+ddzCW/ZjodGpffvS6h2n/u83hOsqggfJre6dnFLyVXc 32WGZXMyILr5Ya55rQxXS14+LSayUpuzqIUEnO8EhlqUPdTpYl8bgUN6kdIk/VPRAP9L M05FIYEpU3hHJhIqEZ+6c5yhnlTngFvAdDj3d+MDuARNH9OQLEbiiAxJY2yaFnRk8tNN lAqL310g9csML0s3jeLayPzcZRyuZl0Jlmaza8lSNIPr/PVSGhpGnJlRWZCuwJzpEG3a fx0oQBDWDg3TpyPB5HyIm0U1FMhyVNyAUuaQmAUm+R3LCAcxEOG+lKtyzvL8d2zlXN9W bVzA== X-Forwarded-Encrypted: i=1; AJvYcCXXW4R1BaOZrOzoid+OOUu/uBf3MEOTLT8yFggmimSCgu5E0goXiNXvoWkC9e4ZZ9tv+zrbpjwAaJ+xYMA=@vger.kernel.org X-Gm-Message-State: AOJu0YzH8sTtwsiqRhj0VrCXeU11jUuAm0zxx7OSG/gv+v6I5iyTZJVH N4GWCINY6LLeeTdYDgUtO5dx/QacRfJUBwbV5LwDZ6W4scG+YtQP6KKojA== X-Gm-Gg: ASbGncvP39esKUmhW8eY0/JRnYKny2Kl3UjyKXI059/d1Mvo53n9FuhV+7THpDxQIYp JsDLb/OlhIHLJb4MaLe17ykiVSo6fTbPoxL1tHEaEY64xChKl0r7OFd/S3BO330nOX03JPUde9Z LwoBaw7d+IJ1IuaeZhbc27b0Ry1cuQ9+d6xRPw/pt0QsHSn7uk/L8UqE334Hc0Mbby4bbEky1kE lQHu3Ii16crAqq07RVtrqgXaNHcjnjoF8kR/RHPDOViRuRdQUlHXFgwAlP0/rVpOqQAvjfqGahG vm4S/KgzqrQ4CNHzI7sRbPk= X-Google-Smtp-Source: AGHT+IFooaN9WsBtrGwWERwdTIpew/NgBS4gw5aNFD2920WvWx3ocfmxNZd8cmIsnXk2b0euAN1y1g== X-Received: by 2002:a05:6122:8c2:b0:518:965c:34a with SMTP id 71dfb90a1353d-51e9e3d2831mr15764066e0c.2.1738563801785; Sun, 02 Feb 2025 22:23:21 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 11/14] platform/x86: Split the alienware-wmi driver Date: Mon, 3 Feb 2025 01:20:52 -0500 Message-ID: <20250203062055.2915-12-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 | 861 ------------------ .../platform/x86/dell/alienware-wmi-legacy.c | 95 ++ .../platform/x86/dell/alienware-wmi-wmax.c | 790 ++++++++++++++++ 4 files changed, 887 insertions(+), 861 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 6824a79292b7..034e1181e703 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -8,97 +8,22 @@ #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 INTERFACE_FLAGS { LEGACY, WMAX, }; =20 -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 { @@ -223,152 +148,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]; -}; - 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; - int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, void *in_args, size_t in_size, u32 *out_data) { @@ -604,463 +385,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 alienfx->hdmi_mux; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); - -static struct attribute *hdmi_attrs[] =3D { - &dev_attr_cable.attr, - &dev_attr_source.attr, - NULL, -}; - -static const struct attribute_group 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 alienfx->amplifier; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); - -static struct attribute *amplifier_attrs[] =3D { - &dev_attr_status.attr, - NULL, -}; - -static const struct attribute_group 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 alienfx->deepslp; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); - -static struct attribute *deepsleep_attrs[] =3D { - &dev_attr_deepsleep.attr, - NULL, -}; - -static const struct attribute_group 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 */ @@ -1093,13 +417,6 @@ static const struct attribute_group *alienfx_groups[]= =3D { NULL }; =20 -static const struct attribute_group *wmax_alienfx_groups[] =3D { - &hdmi_attribute_group, - &lifier_attribute_group, - &deepsleep_attribute_group, - NULL -}; - static struct platform_driver platform_driver =3D { .driver =3D { .name =3D "alienware-wmi", @@ -1136,184 +453,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, - }, - }; - struct platform_device *pdev; - int ret; - - if (awcc) { - ret =3D alienware_awcc_setup(wdev); - } else { - ret =3D alienware_alienfx_setup(&pdata); - if (ret < 0) - return ret; - - pdev =3D dev_get_drvdata(&wdev->dev); - - ret =3D device_add_groups(&pdev->dev, wmax_alienfx_groups); - } - - 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..dc9d31d5ae36 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c @@ -0,0 +1,790 @@ +// 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 alienfx->hdmi_mux; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); + +static struct attribute *hdmi_attrs[] =3D { + &dev_attr_cable.attr, + &dev_attr_source.attr, + NULL, +}; + +static const struct attribute_group 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 alienfx->amplifier; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); + +static struct attribute *amplifier_attrs[] =3D { + &dev_attr_status.attr, + NULL, +}; + +static const struct attribute_group 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 alienfx->deepslp; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); + +static struct attribute *deepsleep_attrs[] =3D { + &dev_attr_deepsleep.attr, + NULL, +}; + +static const struct attribute_group deepsleep_attribute_group =3D { + .name =3D "deepsleep", + .is_visible =3D SYSFS_GROUP_VISIBLE(deepsleep), + .attrs =3D deepsleep_attrs, +}; + +static const struct attribute_group *wmax_alienfx_groups[] =3D { + &hdmi_attribute_group, + &lifier_attribute_group, + &deepsleep_attribute_group, + NULL +}; + +/* + * 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, + }, + }; + struct platform_device *pdev; + int ret; + + if (awcc) { + ret =3D alienware_awcc_setup(wdev); + } else { + ret =3D alienware_alienfx_setup(&pdata); + if (ret < 0) + return ret; + + pdev =3D dev_get_drvdata(&wdev->dev); + + ret =3D device_add_groups(&pdev->dev, wmax_alienfx_groups); + } + + 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 Fri Dec 19 17:34:19 2025 Received: from mail-ua1-f51.google.com (mail-ua1-f51.google.com [209.85.222.51]) (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 EB0071DFDB9; Mon, 3 Feb 2025 06:23:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563807; cv=none; b=lpFHYKYpbNWvCOjiNLU2Qu6mOGDxe970W4W8gTfXff52OScv8q3P7Zo2M8HiMnEvrRpVkIJ8iKhHGBdC809Iq3yYdHC+d7QAZWK1HGIXCL6+qkMZMUcy0vQt9Ers9ZiICrA1xZpabXz8DuoXHnvjdWheDVuPejiOaAM14TH67YE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563807; c=relaxed/simple; bh=FuBXIXgK5ndfxQCn2S+4A0NXk7qR5VltBqHb6gMI8Kg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SYL1wPfLXPfNNLZYVeuj3SaiOnQiH40t7xr6tQFnQEVHmIbD0zvUL4WcsA3l5NusxE2vMFXjZ+lINZukBKEmhtI8vGG6FMRtqD+lRQcrUB2Z19DC+G3ZfpMgUu1ZYdjjCBV6bkF54/V6UQh6IhRGO8MvM38q3Com9WVejveFFGQ= 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=Axc3zDiq; arc=none smtp.client-ip=209.85.222.51 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="Axc3zDiq" Received: by mail-ua1-f51.google.com with SMTP id a1e0cc1a2514c-85c529e72bcso705053241.0; Sun, 02 Feb 2025 22:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563804; x=1739168604; 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=Axc3zDiqlCRxqnTt786YuBtpgAA2FvmxeK4PWpUD6iC5F5mf7373yZbo7ZkLOy7yde WS/EK24EeqFZ+YOZrkPukLnYYvTvzK+G3rDUCREmLEcFYTlS/GQRwYaQ82nKGzlM/ir5 4NkjsroBmaGE2Tf2OjZNEC3dPjPNwNySU3qi67TpXKDyHdzzux+9gIS4kimyzI0K/5ZL M3yqp3ZlpsSUt8UnnMx18elnLurVP8tHPdEldjSC07bYEc0axP+Ub0FyWAcjTGyuXSNB oY1aHYeelIRxBbWMNA6ln5JioCiHafjSWGAx2Mu86vk7DknA+IAx6GcgUDQWtGHjPJWZ QIQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563804; x=1739168604; 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=Cw8StS++xPP61yxsl0UjL9+WIb6jYZpPK2gesUOrwzooCRB51t9VknLIYcokxy9fWT Wmq3LPUfOgJlttYVezDVM8Wid4zqomirQDfOafjuzRCXRTyN4cuFlG5SaohADHPktwZz NUU1968zSIxAPYzKF/fqyM/FCC0X8YkGzcSXVjUGusuKTpco02ZGJvo/kjl+xixTBcpn a5XbdMhh2Xa16bo56PlnKFdIyiwW8s0jNNOoCkLBJk+f0DNAFPvd3o1oL/do2niX1lr9 XLjBSb6H9hVFQ/l4vq4od1i7VH0f4kyUFmWul1weOMmM2aP9KfcnpFCNSo7GVuBWg5d/ x+eg== X-Forwarded-Encrypted: i=1; AJvYcCXe6YLwZf9l465KoH+iP4E3LJFyBFSGA6rlQ0RLZjLkeT1gOrOK2/yP20beoQnHpeAiCfDaekrxzLd805s=@vger.kernel.org X-Gm-Message-State: AOJu0YzD9lAbe5W77ye9aOLkUVtP+ejtCnCrgxt+HjZjfLP5EgEEzPAC JtHQyTOpmYeXRBH5qH0F2EF2jIZ7mzYgpL6crG4u3R5HIrYCLU/2Qh60oQ== X-Gm-Gg: ASbGncuHysnl60/dOtvCXVaA1gjfcKXX2xeH9iKxZNC2+pOsEH4FQyxJyUludybz8kx AHk8UPJt6BUj+QYGJQifD841225UeNCVQDJUeSAy/PHpmpC6Y5VOsFu/9uLxIYtb95VMWgnYllL Ba0YBmzuyLlYoNztbNESTmZX+JQmGhtEcucy95vbdlq/DoTth6xigl/DVOYyIfBVy7HawEzQjcD C8FPiLNxh02wibSvmiV1kU6t7j9jQsxm1YE8TZRlh0+Y79G5lKiC/BbUVL1vPIbIj1gRcnMj37A a4vKacnL1NpFXRih7XOyaPo= X-Google-Smtp-Source: AGHT+IGDJKAFnocJa4XLpHJUspTtiwRouQJ30oHf6se6k3gulgwQZFBJI/uKkNrQo9fkVwO1Wgmj0w== X-Received: by 2002:a05:6122:4009:b0:517:4fca:86d4 with SMTP id 71dfb90a1353d-51e9e55ba0amr13989534e0c.11.1738563804513; Sun, 02 Feb 2025 22:23:24 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 12/14] platform/x86: dell: Modify Makefile alignment Date: Mon, 3 Feb 2025 01:20:53 -0500 Message-ID: <20250203062055.2915-13-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f182.google.com (mail-vk1-f182.google.com [209.85.221.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 667EC1FC0EA; Mon, 3 Feb 2025 06:23:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563810; cv=none; b=b6orWI2gWcSELguGrWnx4Unb+BOJxWMw8vnMh5lsqOk2c26ma07/S2ceajJtowM6K6DzsvJWdOSjznBl5Qg9/stgB/nPzYVNDhNhGknm7OtOCRuF3j/Inn6t1S5nOD7dtufl2PMi4HNb8vHacqqoJ6G8j01neIHYxOfENxdFsok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563810; c=relaxed/simple; bh=qpOap77cXjGCFEE7Ib3DtcKq2vg02Aa1BJvEFjtLI1U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z6StpVq9ftftkfTxOz3SKq1P5rg4ige/s5v4OJFEOZrNQKNB/rz/A7y06x/69gRQLqYMqazKmZky4mme12e3gT4+VRFOpMNQKmfcCsrj1PFSv2deK6L2fNo6lFyBUWkhVwxCgh3T3Qc1ua6nXr1EGplOTT9J48xEbdmJ6Q/uATM= 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=nDjQwDXk; arc=none smtp.client-ip=209.85.221.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="nDjQwDXk" Received: by mail-vk1-f182.google.com with SMTP id 71dfb90a1353d-517aea3ee2aso2600838e0c.2; Sun, 02 Feb 2025 22:23:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563807; x=1739168607; 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=9JJ/f/i2YM+KDenChNSxGR+ozsHnFWTtxVHyiGZUle4=; b=nDjQwDXkypajDDkjIy150MHF2ZGsWVK4RKqWgUFeWWhfSPlBf9LYFQPmpz2li+56nG O0Z4mHxPRsqqXQVv3gsiJ8raBYXyy1b5nSX24e/IbjxIvpeYygJ5mLsRlC0MgsjCpq9j JKnIaskvvXTRdexca0K8OPLdt15wBXKH80XENvWT1Ovu8bNJltbZDiqEeqWJ42iphmGc NfbJWRwXSlnkQLtIaaY0mPU9W2o6tgTVq6CGVB90Dbxf4ykGN36ckXaqVDlofQvGvEBt XlXijQsMEa+4kW9UTaJ+DHR8oVwYPcWfyGanXeUnXsWBKjkd1z0Q/w7AATZr0CuE8lZd EPYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563807; x=1739168607; 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=9JJ/f/i2YM+KDenChNSxGR+ozsHnFWTtxVHyiGZUle4=; b=iOE5XTr8mX4ktYrHa6ujnzevHspHnMm+cfSlQg+LJlOZ2PEu0weP+4Eor77x+hv9DN Uxd6YAin/5MIXuv/PBn4grnpTzQ58bMoJOSt0jr26jhsSctHMPZycw+eQ+TWPSfvmL8R CEX8zNMR2pBuvFvKKqUYXtmJn763JH4Il8vglxjYnEru8MWyseIuTsAujCVAU5PodpKY movHyWPNNMDpWvhuG7ifln2uDp24f5UiVVsJseYQFIRg9Slf7SEoy00b1/F/7CM7DEO3 Oh5lBRRahlRGrOGw9XMieEVDB05vNgErERoRWLbhAfRPdl3NMoxwi7fxD0dQy9U3CyCm LGjQ== X-Forwarded-Encrypted: i=1; AJvYcCWmMjDCOXUBBtre86ZW8kDSrfAfoeCAfqzWCNGxqxSdAZAVHmFJVJ8jyEwDVp2JJFP2C2nlxb/EeexgECQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxLuGmQWuIlCmuHvpIijxJdbwopqpYZeySvIVmLCErm8txFRTzX GC1X75S2zUrhWxefS5XkgkAbbvSVmY/IpHzSSWkBkswRaLBG1qX+O5pXVg== X-Gm-Gg: ASbGncsmYt8tVWRgzy4+VhzzvBFWbnu7LCbWf5wFmPPtufNuC08mg0oaSHofLtNdHc6 V4s8YQhW2kYEvwFv1QAaYl/M0JUc0tFWog8V59AhTqTOxghlME6kgJF6BtrucxjWIGHwveoOI85 u41FoiyYPNXDRR+H7SEhlSTYyhvCdWCXRz2jdTUfPTZK9VCCrKqwDS62VsARfpIUzgYT3kBIehM IuhyHVi06685yGxHiIPK+QjYcQJj/PUQ5JZpsmnmZgrOJoTakui7/I0eT9awiRxSxmrWKnOJvOh eYOKo1SCHTbxz2GrevABCeM= X-Google-Smtp-Source: AGHT+IEbLUFVhtukrpPM+aBAq7WHKeM75HoYlCQCloL9atLDyhXOv7DCCoQ0ywFmt8TlFC5TXqSvzQ== X-Received: by 2002:a05:6122:348a:b0:51e:20de:f9f2 with SMTP id 71dfb90a1353d-51e9e3f6a45mr15712121e0c.6.1738563806972; Sun, 02 Feb 2025 22:23:26 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 13/14] platform/x86: Update alienware-wmi config entries Date: Mon, 3 Feb 2025 01:20:54 -0500 Message-ID: <20250203062055.2915-14-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 | 23 +++++++++++++++++ 3 files changed, 50 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 39a2597b2fee..ca1ddaa74ad1 100644 --- a/drivers/platform/x86/dell/alienware-wmi.h +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -69,10 +69,33 @@ int alienware_wmi_command(struct wmi_device *wdev, u32 = method_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) int __init alienware_wmax_wmi_init(void); void __exit alienware_wmax_wmi_exit(void); +#else +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 Fri Dec 19 17:34:19 2025 Received: from mail-vk1-f174.google.com (mail-vk1-f174.google.com [209.85.221.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 24FD1201267; Mon, 3 Feb 2025 06:23:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563812; cv=none; b=fKX/hyFZJZPknZ1XQe66kCRYZVvEQ3VuwKFbqzl34DlwE2TkdPhNBvsrTAwt++HCZi64811GTC6F57K8fv49VETQcWx2CIh/P1dw1GXuCWvMvxHMhCJTXx2/ujDhkr3dV0Nn/Xu1OxWoimt04TEfTISli5Fki0l2yszYpCxfv8s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738563812; c=relaxed/simple; bh=RrCDjR4152pN3u+Y+wutMmEveLQyADtxiFlBdM1B2JM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eKC9ZCIu++AZNMg9bion+FRrXpGaLcD1KYE4PeqtSCcx2MYWXU+q3pSX0G7G17fps2LNqXe1b6NWmvQtgzWYVr1PzuPC9lC4TJR7gRMbchA2XDv9BPs4YyTn+u70HadLVBlBlrOFw7YQHWowbkRJfJCecyua0vdl1LxjHSoL8HM= 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=Qi+Nqdw5; arc=none smtp.client-ip=209.85.221.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="Qi+Nqdw5" Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-51640f7bbd3so1313975e0c.2; Sun, 02 Feb 2025 22:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738563809; x=1739168609; 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=IEXfgKDF/1rU7YBLnOtQPO5qw+zI8YIs9m4T65cNiKc=; b=Qi+Nqdw5vi+Om2ZvtvxCBjgT57TX1fdlXkgTwUT5xTUyMWBLkNPCJytWBpIx8YAIj2 pMA2c6FG0n9uUCb8EvkN++jxbzLRQImQ19+gshXTUiMhfLS/VTrfs+oWfBgIV2mnik2h ajIYg1DDooGfOEGHJlP1qJ+G9y3MTN+xWJrmNs5X8muytWsCChTXumgJh5zEUsqchiOt DbhLm6g24hPj1ISkJo70L5UehxRWQ/5oZycosUhaKhxQ8m+TZZu7jQgFB8yHQ8yUja/j pffFN601zKq8YT3y22Yk8QJWsyoKTVcjX0f71kcXkT54cxnDIelFMK6GYEJ1LjK7whgF /ijA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738563809; x=1739168609; 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=IEXfgKDF/1rU7YBLnOtQPO5qw+zI8YIs9m4T65cNiKc=; b=upqRwVK0Y9Qy3MHt7MzCp/QUC6NfCA0/ati/t8ITtovxoPIetbPx+mAGESFrrP2gaQ OsLJB6SI/WRqg5SrCs3bZ9IQWR1Zy9yAA6i8hM7x6OGrzZc3is66Xo4HYha+bRlUoH2u 2KzA/et2XP+UdViopVH26U+0lXKSUaJPyBHmqictM7BWUYwodseYd5ZPmQJM/I5WYWIr xPviU4bzxgQfceK3ZNLKgzFhrcNfBPutFOl0fg481RYqTOxYAFkm5xU4+/ZisAijidlJ RoLkzFpEi0sMsQEzhPbEWS0iO23Pd+EMKYMsrUoBXEdVgbwKjqMug/9Lc9psv8D6dEQv gPrg== X-Forwarded-Encrypted: i=1; AJvYcCV479B6ms0UsBt8aO7sFuM+nvDZMX9wJjLwyx4mSXh3/Qq0vLVSBzWw+OMQr2qveLE/OyLvLNsEfb0unew=@vger.kernel.org X-Gm-Message-State: AOJu0YwUZcL4/QWFjy83zbF3Q6vKBZyql2p6whxkBKQwr4i6fpjbl7Uq Vu27ss46Wx9vtvzSxkHN5KzXBjA/JwnQvoK6Nkb8/jU3XUza3RO/RE/bgg== X-Gm-Gg: ASbGncvWYaDs2+qHE9Ehpbz3UWZL1sml7JtS9UdJMzgBtcV62fUjZ6+XUImChNjzJbQ O7YHqNBXPJ8rmLP+qwEmDSFEScRI7slFU8hXMAlqCyNzssjqkFrZ+aJfGG/RFqjnwIHfQLncuXZ MhfbkpwEqgxZwLiDM3qXmJpS0UUw3mNuSG+nv0OIfV8HbRmsjXDa5xTL4nZAg7sSqS9bN0pRSCj 5vBeNMDU6TmCIH8/li3/q5FLD430SxUdveJea42KQgcj1xEwY6+hVhb/YObhTs0sq1OLepLFTLP Kk3YFh+YYWPA146/DYsaGIU= X-Google-Smtp-Source: AGHT+IFHLc8WU4cheGdF+PBgec4JiEJV8mvWg0RHa89zu0Aqqg/fmUheeM8EC2cHPCz3eR58UzYCVA== X-Received: by 2002:a05:6122:658c:b0:51b:b750:8303 with SMTP id 71dfb90a1353d-51e9e46170bmr15347712e0c.11.1738563809634; Sun, 02 Feb 2025 22:23:29 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-51eb1d64c20sm1138789e0c.32.2025.02.02.22.23.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Feb 2025 22:23: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 v7 14/14] platform/x86: alienware-wmi: Update header and module information Date: Mon, 3 Feb 2025 01:20:55 -0500 Message-ID: <20250203062055.2915-15-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203062055.2915-1-kuurtb@gmail.com> References: <20250203062055.2915-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 034e1181e703..56965bdcf478 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