From patchwork Fri Feb 7 15:45:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965338 Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.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 F3C3D240619; Fri, 7 Feb 2025 15:46:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943211; cv=none; b=NEpaDv3zPIh6b6GKiHKFhpnuiFymEYM9oRPEslaqEiKTgHKGdnbkrKKA3sdJzA64H6sFqa8WqHfy2NFyNCFuVBV3j3Ygi5lN+2rSzHYm4Drjt/kfp3uiVvmaVz6gLZzRIwrrHtJbMAgYq4BUMY8aMHW/qHxul2BT6h+n1HqgfkA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943211; c=relaxed/simple; bh=49eKxDqQtP3po1mBGZJU1bNO+vDFpnsz8KG9NigI21E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Epvh7NcPbaTXc8k+YI/ID1O/h7/+2p+jtVay3RlIK+qDfrTujGeZDmMug54xQqLf/QiKVcmGTkUEYRq3wCZvr8NigBr+unlqzjNT7ILLAMdHD7JBtakEpaN/7P1Q+x/UfNx/crD00zIA5Z++4RsjAP7jPFoVs9Bh0LiunxM468I= 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=b+fL+OOn; arc=none smtp.client-ip=209.85.160.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="b+fL+OOn" Received: by mail-qt1-f173.google.com with SMTP id d75a77b69052e-46fa734a0b8so20840111cf.1; Fri, 07 Feb 2025 07:46:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943208; x=1739548008; 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=b+fL+OOnNtp7f7OW3GLTflGKevlcjTdoWGsNfkB+TYZVSK2OpcxSBWHOXyTKlSrsPv uHHW+TyQ6d4CKACFmKnZ6q9YUp5anQsRabfSjj7CN2aEEWPC7nAOfe0OkTlASgYiqsr7 MA25DGvdLuXFug15+ZJ8bvmnDOebV0YlPJMe2pMuHUcthLKNjIWbG7AGvBSYrLuxzQtB nNbDeplPQQIAvdjcTwiac99M9jshjfyTrjKk+Hiu1IsEHiX/WYJOgq9aoUJUyzlGKywG rkqJBTB28jVUzvONdHLEm44/30oiUC6j4uvVdDO93OOy7LDiesb301M1ZxDO6BCtR7Et aUEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943208; x=1739548008; 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=lYjbCc9h2Xh8xSK65bVVbTwDPShIgobMetNYBt9NlUsy88MEg5hSiFBupBIRx8VqhS czQw4h8OTABSzSj9k5VMZcyLzNhkL6W1yT18UA1Nz5VGfuzKdWYtB7SF4K8U2ZeK3jZ6 v0u3WGM+TouCX7TiDnBQxxFhb7hEdGq+BPmrNmqJPLSxeR6tVbNX2kHcIfoAHXI0RZKR /xSONwmv+TLijNp6NNQm7gpZs0LwuurV2QVdNDWhqF2+yQiIRNTUf5DQ1MlwFtjrxYY7 YGhdkx0oC4Y3d79vV8tPUn0D+R/WugMIPRdyo1RrwR79SmaGv7hCm/idaRHNR7W9szbI aECA== X-Forwarded-Encrypted: i=1; AJvYcCXOI1n9HVCnD4rZsF0RlqWJR3zpmwdjZ2o33o698DllW1Jo5n+54IIRN/puJb4OAXHylCEVIMqxSsssiHY=@vger.kernel.org X-Gm-Message-State: AOJu0YyO+jH3q7TzfnnOftHM/G2l8kZJWsIzJkAgxI47Sm0cYv17Bkf6 uqVqCV/4u9MeAtXLldCeWyiwH4E/CwmJetF3uGQRN3bNwYzXzC9G8A3Stw== X-Gm-Gg: ASbGncvFMkuLixoXSq687Ip+1cZL0oMDTnj0AnD3n905+aCYoXAa6XNWVmLpug/GBfp tsTolVNqRi/A5x1sTPcFyAOD7rxyiVVFczQK6PCsvF2kKU7Djh9w9/eD79KXYvTjR8VfAOXI51B Mh+JPeXB4NC3faS70JXv81piyRIjAfcDItdH+qnCkjwf5G0zY4YzGs9o4xSdMv5PzdHqJvvUJOG bjS2sDQGZ7RgLqtRbJ5V59ByACg2YlYC+9f02IVSpFnW/C/I7pdFerrnzlL3tvzPjV7+L7l+mlQ LimJf+0WvD5a+OJS/fScVs8= X-Google-Smtp-Source: AGHT+IESDhgOXyUBZI+XXH+RMub8qO+GEhXatYpSD1773R3+eKigH0srpYm6YIeMFCZgsMg78pMciA== X-Received: by 2002:a05:622a:cd:b0:467:54b3:2704 with SMTP id d75a77b69052e-471679dbf8emr46594621cf.16.1738943208545; Fri, 07 Feb 2025 07:46:48 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.46.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:46:47 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 01/14] platform/x86: alienware-wmi: Add a state container for LED control feature Date: Fri, 7 Feb 2025 10:45:57 -0500 Message-ID: <20250207154610.13675-2-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/x86/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; }; +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]; static u8 interface; -static u8 lighting_control_state; -static u8 global_brightness; /* * Helpers used for zone control @@ -451,7 +456,7 @@ static int parse_rgb(const char *buf, struct color_platform *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 == WMAX) { wmax_basic_args.led_mask = 1 << location; - wmax_basic_args.colors = colors[location]; - wmax_basic_args.state = lighting_control_state; + wmax_basic_args.colors = priv->colors[location]; + wmax_basic_args.state = priv->lighting_control_state; guid = WMAX_CONTROL_GUID; method_id = WMAX_METHOD_ZONE_CONTROL; input.length = sizeof(wmax_basic_args); input.pointer = &wmax_basic_args; } else { - legacy_args.colors = colors[location]; - legacy_args.brightness = global_brightness; + legacy_args.colors = priv->colors[location]; + legacy_args.brightness = priv->global_brightness; legacy_args.state = 0; - if (lighting_control_state == LEGACY_BOOTING || - lighting_control_state == LEGACY_SUSPEND) { + if (priv->lighting_control_state == LEGACY_BOOTING || + priv->lighting_control_state == LEGACY_SUSPEND) { guid = LEGACY_POWER_CONTROL_GUID; - legacy_args.state = lighting_control_state; + legacy_args.state = priv->lighting_control_state; } else guid = LEGACY_CONTROL_GUID; method_id = 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 = dev_get_drvdata(dev); + struct color_platform *colors = &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); } static ssize_t zone_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count, u8 location) { + struct alienfx_priv *priv = dev_get_drvdata(dev); + struct color_platform *colors = &priv->colors[location]; int ret; - ret = parse_rgb(buf, &colors[location]); + ret = parse_rgb(buf, colors); if (ret) return ret; - ret = alienware_update_led(location); + ret = alienware_update_led(priv, location); return ret ? ret : count; } @@ -577,9 +586,11 @@ static ssize_t lighting_control_state_show(struct device *dev, struct device_attribute *attr, char *buf) { - if (lighting_control_state == LEGACY_BOOTING) + struct alienfx_priv *priv = dev_get_drvdata(dev); + + if (priv->lighting_control_state == LEGACY_BOOTING) return sysfs_emit(buf, "[booting] running suspend\n"); - else if (lighting_control_state == LEGACY_SUSPEND) + else if (priv->lighting_control_state == LEGACY_SUSPEND) return sysfs_emit(buf, "booting running [suspend]\n"); return sysfs_emit(buf, "booting [running] suspend\n"); @@ -589,6 +600,7 @@ static ssize_t lighting_control_state_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { + struct alienfx_priv *priv = dev_get_drvdata(dev); u8 val; if (strcmp(buf, "booting\n") == 0) @@ -600,9 +612,9 @@ static ssize_t lighting_control_state_store(struct device *dev, else val = WMAX_RUNNING; - lighting_control_state = val; + priv->lighting_control_state = val; pr_debug("alienware-wmi: updated control state to %d\n", - lighting_control_state); + priv->lighting_control_state); 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 = container_of(led_cdev, struct alienfx_priv, + global_led); int ret; - global_brightness = brightness; + + priv->global_brightness = brightness; + if (interface == WMAX) ret = wmax_brightness(brightness); else - ret = alienware_update_led(0); + ret = alienware_update_led(priv, 0); if (ret) pr_err("LED brightness update failed\n"); } static enum led_brightness global_led_get(struct led_classdev *led_cdev) { - return global_brightness; -} - -static struct led_classdev global_led = { - .brightness_set = global_led_set, - .brightness_get = global_led_get, - .name = "alienware::global_brightness", -}; + struct alienfx_priv *priv = container_of(led_cdev, struct alienfx_priv, + global_led); -static int alienware_zone_init(struct platform_device *dev) -{ - if (interface == WMAX) { - lighting_control_state = WMAX_RUNNING; - } else if (interface == LEGACY) { - lighting_control_state = LEGACY_RUNNING; - } - global_led.max_brightness = 0x0F; - global_brightness = 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; } static acpi_status alienware_wmax_command(void *in_args, size_t in_size, @@ -1157,6 +1149,33 @@ static int create_thermal_profile(struct platform_device *platform_device) /* * Platform Driver */ +static int alienfx_probe(struct platform_device *pdev) +{ + struct alienfx_priv *priv; + + if (!quirks->num_zones) + return -ENODEV; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + if (interface == WMAX) + priv->lighting_control_state = WMAX_RUNNING; + else + priv->lighting_control_state = LEGACY_RUNNING; + + priv->pdev = pdev; + priv->global_led.name = "alienware::global_brightness"; + priv->global_led.brightness_set = global_led_set; + priv->global_led.brightness_get = global_led_get; + priv->global_led.max_brightness = 0x0F; + priv->global_brightness = 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[] = { &zone_attribute_group, &hdmi_attribute_group, @@ -1170,6 +1189,7 @@ static struct platform_driver platform_driver = { .name = "alienware-wmi", .dev_groups = alienfx_groups, }, + .probe = alienfx_probe, }; static int __init alienware_wmi_init(void) @@ -1217,16 +1237,8 @@ static int __init alienware_wmi_init(void) goto fail_prep_thermal_profile; } - if (quirks->num_zones > 0) { - ret = alienware_zone_init(platform_device); - if (ret) - goto fail_prep_zones; - } - return 0; -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); static void __exit alienware_wmi_exit(void) { - alienware_zone_exit(platform_device); platform_device_unregister(platform_device); platform_driver_unregister(&platform_driver); } From patchwork Fri Feb 7 15:45:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965339 Received: from mail-vs1-f47.google.com (mail-vs1-f47.google.com [209.85.217.47]) (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 696752475C8; Fri, 7 Feb 2025 15:46:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943214; cv=none; b=o0dbeNhFNpx5I7oi/K4c/75xMEvuy9SLFdq9X4AzlFUVNsNFsWQjOUNw6+0koySKuVe+xcJcNCHkDXAHgHYuiivEcgKM2UZx3n7XoDwWIli6/zpds2aVvxat5dNa2dSequgeEj//NFUlLGw8HIyzVvIUTVuGPtGaq0H7mjxi/os= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943214; c=relaxed/simple; bh=pFOd5OL2a6LO2xbS7qts8y3TQPrzRuVcyofMbUr0fok=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BkuyDm8HDxP3WvievrAoVbyXcvviaxT/ayaVchhmw5eTk8nnfpwMxHZC1nWVHsESBr8iqDiQ+aFvXVOYLHoBf1e4/vYreArcPO+q9VnR36Df38iz+mXz5lYq1HfIYHx4KjduGBBGGo/ClYWwia9v1NgW3t3jQJxkzxyN2+msYXM= 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=gKKmdrj0; arc=none smtp.client-ip=209.85.217.47 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="gKKmdrj0" Received: by mail-vs1-f47.google.com with SMTP id ada2fe7eead31-4ba7a9c17c0so992052137.0; Fri, 07 Feb 2025 07:46:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943211; x=1739548011; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SA+zyldD3XpeByN7bIqz8d5mixA6TM9KjPHEPee9EzA=; b=gKKmdrj08AAgSjacNUCsHcpx783DiMjWiMTtpnP7vbbX9JVH+j/jS88Cb3guKP1pDf M5ECilEJKMpbiArnnMFUkQv20ZZwdkfNeYgFJ/PQELJlwRCGhfwI1EVH2XK/JJBN9YUy P4NVdTxy5ioVXlyOVTIxudfgVA1umZ8NJFSVm021e4RTUS5ijE8iIehrSQjKRrJaiSQ9 YmxJ4oSRvEo3s45tp0u4kTvMCRj7ilIr60afaY2b1j6X03p1ExVaUVpy8o6iJEBtbk/h 6Pu3G1ZELrHZNDMSKbx6N36EDSlWRSRllUWsCC80zef/oIXHnvlBiQ7AulcQiDTYccZI oTLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943211; x=1739548011; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SA+zyldD3XpeByN7bIqz8d5mixA6TM9KjPHEPee9EzA=; b=dh0aMRyAjHP348qfDQGEC+BOBkTCJvf9Bl0Q4CxUQyM+KqyWfOQnsp5Xq/TaT6I91U 8XO/ExpYM0OIELP/KtLjqnyXIoTxsEznpPlwXt26HCQGi8jpYGJRdMPua1OXRwPR+hIo vfZNy1CN+vjGDNWyn9YWosLer/r3asdVYLhN/82pUFrXrEiAlqA516nwNTPXh70zMljF c4A3Sr2M+jHQPZNCt0c062pDi+8l4teY61DfM+r3qwfUiZiPHzasiRYglFopaiA3L61D 9PePAz1r5PTTtLItpJ1jQC0i/kiswZtHINntIU96ouhuBbkL5NRaBIKWRqHHAMetVPAx /9lw== X-Forwarded-Encrypted: i=1; AJvYcCUGA+8S2YusF2/WzcBU6A+KvaUvYWdOoJDiGhDKeXxrkiJrVircTEJa1k+tJvjgp064OKVBh+/+e+Arbu4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4TUTwbkINeJ5GW+B+z7uRIJecvsWerm0GOLtHZjOENB6+PwM+ 0L5reOIiASuafIaWuankKahraqF19CA6Rl/01FZxl1A2yEn6UsgyvhbkAQ== X-Gm-Gg: ASbGncvI8AQpwfwOgIGAYUa0/LhyhoB27WDUpysNBhaD3cmkIG0h06vjf6wZfslwnkQ TKDhkWKRli5B1jDhJgvDtzwm+PQFMbbw2I8V5XfFc1hZ9Pgvh0afyzGgAEI2Eg9fQztGpTS/IZL 9PTjBQkwj7EM4lHiIzOg3djcgBlefI8tFFPYER3lv37EsEt3QHGDCMMm+6tFDkAiXZrDLk5yCCD pvRl7AeuXx2Ardu5FlXLo/D+53AJoAv6qHvqmQZH9GSRZ+XTmvlFBukhkZG/A7oKaiJAsKDMTqR CBOymyV4ZQj2d5xNbXIbE5I= X-Google-Smtp-Source: AGHT+IHtiWJJMSpqvbe7yL8FC2fanMfda3w6fubFYTD+4YjUogDBqtI2yxEjpOpPjj5HE8yWrXgdPw== X-Received: by 2002:a05:6102:82d2:b0:4b5:c302:37b3 with SMTP id ada2fe7eead31-4ba71f8cffcmr5148617137.5.1738943211079; Fri, 07 Feb 2025 07:46:51 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.46.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:46:50 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 02/14] platform/x86: alienware-wmi: Add WMI Drivers Date: Fri, 7 Feb 2025 10:45:58 -0500 Message-ID: <20250207154610.13675-3-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add WMI drivers for LEGACY and WMAX devices. This involves moving the platform device registration to a helper function that is now called from the driver's preferred WMI device driver probe. In the case of the WMAX this is done only if `!quirks->thermal` because the newer WMAX interface doesn't support any of the LED features of this driver. This also eliminates the need to check for `quirks->num_zones > 0` inside alienfx_probe(). Only one WMI driver is registered on module initialization to prevent registering a duplicate platform device. Additionally, create_thermal_profile() now takes wmi_device * instead of platform_device *. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 177 ++++++++++++++++------ 1 file changed, 134 insertions(+), 43 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index ab86deb1adb9..506c096553e8 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -15,6 +15,7 @@ #include #include #include +#include #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); static bool force_platform_profile; module_param_unsafe(force_platform_profile, bool, 0); @@ -421,7 +420,10 @@ struct alienfx_priv { u8 lighting_control_state; }; -static struct platform_device *platform_device; +struct alienfx_platdata { + struct wmi_device *wdev; +}; + static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; static u8 interface; @@ -801,7 +803,7 @@ static DEVICE_ATTR_RW(source); static bool hdmi_group_visible(struct kobject *kobj) { - return quirks->hdmi_mux; + return interface == WMAX && quirks->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); @@ -848,7 +850,7 @@ static DEVICE_ATTR_RO(status); static bool amplifier_group_visible(struct kobject *kobj) { - return quirks->amplifier; + return interface == WMAX && quirks->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); @@ -917,7 +919,7 @@ static DEVICE_ATTR_RW(deepsleep); static bool deepsleep_group_visible(struct kobject *kobj) { - return quirks->deepslp; + return interface == WMAX && quirks->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); @@ -1136,11 +1138,11 @@ static const struct platform_profile_ops awcc_platform_profile_ops = { .profile_set = thermal_profile_set, }; -static int create_thermal_profile(struct platform_device *platform_device) +static int create_thermal_profile(struct wmi_device *wdev) { struct device *ppdev; - ppdev = devm_platform_profile_register(&platform_device->dev, "alienware-wmi", + ppdev = devm_platform_profile_register(&wdev->dev, "alienware-wmi", NULL, &awcc_platform_profile_ops); return PTR_ERR_OR_ZERO(ppdev); @@ -1153,9 +1155,6 @@ static int alienfx_probe(struct platform_device *pdev) { struct alienfx_priv *priv; - if (!quirks->num_zones) - return -ENODEV; - priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; @@ -1192,18 +1191,118 @@ static struct platform_driver platform_driver = { .probe = alienfx_probe, }; -static int __init alienware_wmi_init(void) +static void alienware_alienfx_remove(void *data) { + struct platform_device *pdev = data; + + platform_device_unregister(pdev); +} + +static int alienware_alienfx_setup(struct alienfx_platdata *pdata) +{ + struct device *dev = &pdata->wdev->dev; + struct platform_device *pdev; int ret; - if (wmi_has_guid(LEGACY_CONTROL_GUID)) - interface = LEGACY; - else if (wmi_has_guid(WMAX_CONTROL_GUID)) - interface = WMAX; - else { - pr_warn("alienware-wmi: No known WMI GUID found\n"); - return -ENODEV; - } + pdev = 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 = 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 = { + .wdev = wdev, + }; + + return alienware_alienfx_setup(&pdata); +} + +static const struct wmi_device_id alienware_legacy_device_id_table[] = { + { LEGACY_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table); + +static struct wmi_driver alienware_legacy_wmi_driver = { + .driver = { + .name = "alienware-wmi-alienfx", + .probe_type = PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table = alienware_legacy_device_id_table, + .probe = legacy_wmi_probe, + .no_singleton = 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 = { + .wdev = wdev, + }; + int ret; + + if (quirks->thermal) + ret = create_thermal_profile(wdev); + else + ret = alienware_alienfx_setup(&pdata); + + return ret; +} + +static const struct wmi_device_id alienware_wmax_device_id_table[] = { + { WMAX_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_wmax_device_id_table); + +static struct wmi_driver alienware_wmax_wmi_driver = { + .driver = { + .name = "alienware-wmi-wmax", + .probe_type = PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table = alienware_wmax_device_id_table, + .probe = wmax_wmi_probe, + .no_singleton = 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 == NULL) @@ -1220,32 +1319,20 @@ static int __init alienware_wmi_init(void) } ret = platform_driver_register(&platform_driver); - if (ret) - goto fail_platform_driver; - platform_device = platform_device_alloc("alienware-wmi", PLATFORM_DEVID_NONE); - if (!platform_device) { - ret = -ENOMEM; - goto fail_platform_device1; - } - ret = platform_device_add(platform_device); - if (ret) - goto fail_platform_device2; + if (ret < 0) + return ret; - if (quirks->thermal) { - ret = create_thermal_profile(platform_device); - if (ret) - goto fail_prep_thermal_profile; + if (wmi_has_guid(WMAX_CONTROL_GUID)) { + interface = WMAX; + ret = alienware_wmax_wmi_init(); + } else { + interface = LEGACY; + ret = alienware_legacy_wmi_init(); } - return 0; + if (ret < 0) + platform_driver_unregister(&platform_driver); -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; } @@ -1253,7 +1340,11 @@ module_init(alienware_wmi_init); static void __exit alienware_wmi_exit(void) { - platform_device_unregister(platform_device); + if (interface == WMAX) + alienware_wmax_wmi_exit(); + else + alienware_legacy_wmi_exit(); + platform_driver_unregister(&platform_driver); } From patchwork Fri Feb 7 15:45:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965340 Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) (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 0C7282475E7; Fri, 7 Feb 2025 15:46:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943216; cv=none; b=nY0daAcV1628/a3qcc9uNu1XuZyP9qsvWZtYjvV5Ac6kkXNbbhRBCn9eA3i3i+LdEBbvplZN7hMOUI2okk5bn7rQR3eGcggXtSiMXypxHqLu84QHLGslODsjg9HuuYHVPwzvoCqmlefkGZFH7UDDlHUZS/wCIqKmj+IBLoEgsqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943216; c=relaxed/simple; bh=CQOdNIc583x14fsDOLKm2hyQoPhlC3QadwB4vTCp9Uo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J+TxVRfxdpFSVjNStjH9LlQpbVg3Br/Y1iQgaZPnD+PWh8XpQUu0NWqXfiFFychy5pDyBfkLt2PQyT6fQ/xeK0C3Vn9cMxEyouN0B0Xz+g7VibrG5EB4EkgFVkKVVTaZeJL41GZKepxdTNf6lGSYU2FBS4IUkQ/EU9u52l3Ab6U= 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=MwiwtrWQ; arc=none smtp.client-ip=209.85.217.46 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="MwiwtrWQ" Received: by mail-vs1-f46.google.com with SMTP id ada2fe7eead31-4ba9680271fso49790137.1; Fri, 07 Feb 2025 07:46:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943213; x=1739548013; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eh9MtY8QMee8pu6PHbRVyWPVH4kaZoOf3tRPuu+Pts8=; b=MwiwtrWQlw8ifqoUCjo+izA28VhYm1dcImU8wVmrwuulU70ONHt6kuMVmaM6QtfQ7Q G3tGfhJbiDznCN87MsIAOwlIu3ATX82YQFPzMzjdF0yM2u6dYzsVGgFsCjZscjK1pn6I LeJMoYxFszJxWrrb77XhRs7zThbpp11iPMC5agpPsLq6GuQCc+RhIR8EX1oAoxtDiJVw PrwrYY7F5fIdlRpcu5IlMix+cTgQ+1YXkAAbwUKZErEzy4FHNx62nqhmQ6vZysCfZJ1h p6GHheE0PUCVzCi8JKp7hGTBf3FGsN1wfM6x4X8G4kIWzQ9ybYJ1Az3wreXIzzUGzMtH 3OgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943213; x=1739548013; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eh9MtY8QMee8pu6PHbRVyWPVH4kaZoOf3tRPuu+Pts8=; b=JD8GnsJLJuy4m7N3n9fIMaLJz32i9SD/h0p9aN+Ihuj4blhyVEGWhQn4BzslhlkVng JvPrJZfkeDI6KTbADGmRrkwOiqdvbYzDQVI21eXWy5684VK7Fwuamsp1IZaSsoBm0jwW Ryyh2nTwWUNwiIQU4ibKpo5wJ/ZzN7xEWR57Bw7HQajCBs854WkHqnbd4xRZ+ky//T5w u8QPAOA5iAXsxTS4DgSB245peS9qc3o8mY3KCEzzIyAxEB9Y7QlgbTM+o2FOF6AH42uI 8SVnZc3mhIr7j/3zMYvjfRhZbnmrzVeFyr76VrX1sJWMpT1OXSuTAhp1zKxamzBoRGtl 3TSA== X-Forwarded-Encrypted: i=1; AJvYcCW9qtBjfMgvw/Nsdt2pYXvEjITQsw180bZtdBogZUkYB8ro+ZQJBokWUIVirOxYfjZWuOvv5JLof9OdluA=@vger.kernel.org X-Gm-Message-State: AOJu0YzmHZXBt25DzR8pUhIb0TS6reMwpPd3O4L3ciNiA5N4JhWxpicj 08PWSJRQqBoYVeoED5ukozlvmpJwufjCg26epgm3fQvJueyN/s+20w0j2A== X-Gm-Gg: ASbGncvHp2n8xFXv8FXKDKPP2+ZTFh1UXo/AeKZ47ZlooCZNJd5pmvlSUkBJnjy1bJy p0EAUlUJ/OBawTrEM3dzyygCIWgHwTWImMmgqO1l1SXnCtwOCsn7Zsvs978K1JOXSMbSv2eYwg7 bwKYvC8YXDJJf1anTNq8til8AhFDtNS559kCdfFKqxN9BZL1lpXz/pFF6aCS5gQ62r2cNd+rchi rGBC05Iv8GO4aiSIQNiN3ZeYNm96CiH5HPjEqBSr5kYqfuA5qBMZD9h+oPerHuwO2b6FhAHEP4H QnDvv6IhvqrsewMLgQdaURY= X-Google-Smtp-Source: AGHT+IHUu+UXJ3E8TFVf09WEqaaTw74CZZsbFkV2e68LZ+sjlzm82mzbFGJhxYH338f4N1dBrrJTOg== X-Received: by 2002:a67:fa98:0:b0:4ba:708e:58fc with SMTP id ada2fe7eead31-4ba71feca49mr4539978137.6.1738943213633; Fri, 07 Feb 2025 07:46:53 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.46.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:46:52 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 03/14] platform/x86: alienware-wmi: Add a state container for thermal control methods Date: Fri, 7 Feb 2025 10:45:59 -0500 Message-ID: <20250207154610.13675-4-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/x86/dell/alienware-wmi.c index 506c096553e8..9512143c82ec 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -412,6 +412,12 @@ struct wmax_u32_args { u8 arg3; }; +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; }; -static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; - static u8 interface; /* @@ -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 = dev_get_drvdata(dev); + if (quirks->gmode) { u32 gmode_status; int ret; @@ -1080,12 +1086,13 @@ static int thermal_profile_set(struct device *dev, } } - return wmax_thermal_control(supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->supported_thermal_profiles[profile]); } static int thermal_profile_probe(void *drvdata, unsigned long *choices) { enum platform_profile_option profile; + struct awcc_priv *priv = drvdata; enum wmax_thermal_mode mode; u8 sys_desc[4]; u32 first_mode; @@ -1114,7 +1121,7 @@ static int thermal_profile_probe(void *drvdata, unsigned long *choices) mode = out_data & WMAX_THERMAL_MODE_MASK; profile = wmax_mode_to_platform_profile[mode]; - supported_thermal_profiles[profile] = out_data; + priv->supported_thermal_profiles[profile] = out_data; set_bit(profile, choices); } @@ -1123,7 +1130,7 @@ static int thermal_profile_probe(void *drvdata, unsigned long *choices) return -ENODEV; if (quirks->gmode) { - supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] = + priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] = WMAX_THERMAL_MODE_GMODE; set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); @@ -1138,14 +1145,35 @@ static const struct platform_profile_ops awcc_platform_profile_ops = { .profile_set = thermal_profile_set, }; -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 = dev_get_drvdata(&wdev->dev); + + priv->ppdev = devm_platform_profile_register(&wdev->dev, "alienware-wmi", + priv, &awcc_platform_profile_ops); + + return PTR_ERR_OR_ZERO(priv->ppdev); +} - ppdev = devm_platform_profile_register(&wdev->dev, "alienware-wmi", - NULL, &awcc_platform_profile_ops); +static int alienware_awcc_setup(struct wmi_device *wdev) +{ + struct awcc_priv *priv; + int ret; + + priv = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; - return PTR_ERR_OR_ZERO(ppdev); + priv->wdev = wdev; + dev_set_drvdata(&wdev->dev, priv); + + if (quirks->thermal) { + ret = awcc_platform_profile_init(wdev); + if (ret) + return ret; + } + + return 0; } /* @@ -1267,7 +1295,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) int ret; if (quirks->thermal) - ret = create_thermal_profile(wdev); + ret = alienware_awcc_setup(wdev); else ret = alienware_alienfx_setup(&pdata); From patchwork Fri Feb 7 15:46:00 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965341 Received: from mail-vs1-f52.google.com (mail-vs1-f52.google.com [209.85.217.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 23FA224817C; Fri, 7 Feb 2025 15:46:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943219; cv=none; b=ptBcElYRXhZvc12ROGq0i1Ui2nZX57ksikK6DmpvKN4aWztwEPq/RS+eE4wB5izwYQF/njZ+lIKEZ933Dw3qIoSAtR+28b5oGa6bjgPXi3AiHRTJgPKHLcqStXxjqK5N9oQEDYJpSKCGZU2E2wB4AOUHLBuJ3jDsScB+EuCdjp4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943219; c=relaxed/simple; bh=qRYy/r/XEIn6bETnvu6Yn5nbRR5ag52p7PQHk8zmJfo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rjtd24ajJZbXF5wbzgtDduK6n9wlGDdlEscnQeh1DqMSFjcC0GOHMGoCesBaxqm+xFblu9V5RDtYLqm0G3E1EidtNFJuOlxGL0BFKSvfyhvhgtcfd/qHVjJGheDfVFxLq6/3n+HwnbHtdHoVaTWIQHgXaeMsa5p/eQxxB/Q+vrY= 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=DK8s4alK; arc=none smtp.client-ip=209.85.217.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="DK8s4alK" Received: by mail-vs1-f52.google.com with SMTP id ada2fe7eead31-4ba74d1d4a9so729661137.1; Fri, 07 Feb 2025 07:46:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943216; x=1739548016; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2nYctGPSzCHBlA4oNi+PZAVP+DCpxvNXbv6MyrcOof0=; b=DK8s4alK28eWtGsDAunlFBR0rW8W0jggXpgvElDg6kS3O7v2O+qbIfk8lOolDjzFXV 5XVeKut95Z6oJ41FvzC0d8l157tPlrXIOiWmPxAcNNOdxcJgsBzj6NTww8XwIaUOIBLQ VyG5he6M6a01nWi5cmdQvn+qqX6UXYIGVLbIZslQZ3dA9e/KPwl/XBBY32seJ/XnYjU3 XWYnfZkJ+jn32eE29a7dx2BWzQczdbiEPP6ZaGE31IrHvV8M7aS59Qwwzip13LccUPYf 6aJfI4So4QZqF2aNzImjeN5aiihxl3YwDeHEXcEhAD2lDjLRMrW1jFgBPJBvHhCILYTR 8CGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943216; x=1739548016; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2nYctGPSzCHBlA4oNi+PZAVP+DCpxvNXbv6MyrcOof0=; b=lnhRVyFiOGIcpUVSzrnf32sAN7GO7rJtO8/HC1FnUvNBMipNfNWJ0hL18O/Ehc87w+ CkY3peWCbtvfaTN/1P1Ekb1NDziw1D8sRcyPyCoMHb6eeFnE18L+EZw8HXsaKswSEuVS 1J465dY02JKSZp3zqDoWIkpGCj4/BhC8/T0CSKqqWE8Bgoq/qppkQR+wr2KnMURpjFb7 cgs//32RB2PpZh+a5YJ6/iaDo5wvDK/wrcLjnmqfFLr22qKRuO1dWoQfxSYyJyLv1Rwj 8B1HF1JNa3jnznNuqVEF1Jx88L+wnZ0Tpz+U4bLCaYNGQYvdlku7KA9l52GKSz8H8WKQ zOAQ== X-Forwarded-Encrypted: i=1; AJvYcCVqq+viOYQtfvoCmHocUlvZNvri9irXiecPLjKmNJB5Hepr+QdgeYVTHjOEFDRf/1ScLIVCw/0U3NFWNZE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8rYnXc/Z7O+9rOwOJhecHLTyRFQe2vGO42r+BwLuN5OJNrcRm Xk31YpXu4hA3wNtPRtSr/ERbJYCvksCoZi+zs3zHL/gitMqgq9kWWEGBXw== X-Gm-Gg: ASbGncsOwFw49jjwdUCwuuw7tBnkj+ECM+PdZJtUA0b4hgYJmhFJTdZmKV73wZvifGL 2lUSqiyWLMio8W8wDJoqKEJo/Z3Ds39EiLEEoxuG1pmEI3DxIdNljtx5BTlZIvh5qCNNFS9LLFC SnDeRu+9OIOLkmdQhM1Sq9AWwhdUAWN55e/h0k/+rEvQT9Et3JTNYsLtflv/MqZoCdkn6bUjm77 GKfoc9lckwivDTlooVxp3NLmBIjZDo5fzF8T9XzzXg4g4QTjwDG3KzqfuYQdtZNAp77muumNWDz 5lbLX5oyj7d3/POasvTS4Vc= X-Google-Smtp-Source: AGHT+IE0LSX/hrQKlZegvBTwRZ93bnWsGrwABQ78G214sOxPojx3T9hF3uWnc5cyEOp+O7Gzxct7jg== X-Received: by 2002:a05:6102:5e96:b0:4b9:bd30:34c6 with SMTP id ada2fe7eead31-4ba85e8cd46mr2871213137.15.1738943215684; Fri, 07 Feb 2025 07:46:55 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.46.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:46:54 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 04/14] platform/x86: alienware-wmi: Refactor LED control methods Date: Fri, 7 Feb 2025 10:46:00 -0500 Message-ID: <20250207154610.13675-5-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/x86/dell/alienware-wmi.c index 9512143c82ec..525d25a1fa6c 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -426,12 +427,43 @@ struct alienfx_priv { u8 lighting_control_state; }; +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; +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 = {ACPI_ALLOCATE_BUFFER, NULL}; + struct acpi_buffer in = {in_size, in_args}; + acpi_status ret; + + ret = wmidev_evaluate_method(wdev, 0, method_id, &in, out_data ? &out : NULL); + if (ACPI_FAILURE(ret)) + return -EIO; + + union acpi_object *obj __free(kfree) = out.pointer; + + if (out_data) { + if (obj && obj->type == ACPI_TYPE_INTEGER) + *out_data = (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_platform *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 == WMAX) { - wmax_basic_args.led_mask = 1 << location; - wmax_basic_args.colors = priv->colors[location]; - wmax_basic_args.state = priv->lighting_control_state; - guid = WMAX_CONTROL_GUID; - method_id = WMAX_METHOD_ZONE_CONTROL; - - input.length = sizeof(wmax_basic_args); - input.pointer = &wmax_basic_args; - } else { - legacy_args.colors = priv->colors[location]; - legacy_args.brightness = priv->global_brightness; - legacy_args.state = 0; - if (priv->lighting_control_state == LEGACY_BOOTING || - priv->lighting_control_state == LEGACY_SUSPEND) { - guid = LEGACY_POWER_CONTROL_GUID; - legacy_args.state = priv->lighting_control_state; - } else - guid = LEGACY_CONTROL_GUID; - method_id = location + 1; - - input.length = sizeof(legacy_args); - input.pointer = &legacy_args; - } - pr_debug("alienware-wmi: guid %s method %d\n", guid, method_id); - - status = 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 = dev_get_drvdata(dev); struct color_platform *colors = &priv->colors[location]; + struct alienfx_platdata *pdata = dev_get_platdata(dev); int ret; ret = parse_rgb(buf, colors); if (ret) return ret; - ret = alienware_update_led(priv, location); + ret = pdata->ops.upd_led(priv, pdata->wdev, location); return ret ? ret : count; } @@ -660,36 +653,17 @@ static struct attribute_group zone_attribute_group = { /* * LED Brightness (Global) */ -static int wmax_brightness(int brightness) -{ - acpi_status status; - struct acpi_buffer input; - struct wmax_brightness_args args = { - .led_mask = 0xFF, - .percentage = brightness, - }; - input.length = sizeof(args); - input.pointer = &args; - status = 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 = container_of(led_cdev, struct alienfx_priv, global_led); + struct alienfx_platdata *pdata = dev_get_platdata(&priv->pdev->dev); int ret; priv->global_brightness = brightness; - if (interface == WMAX) - ret = wmax_brightness(brightness); - else - ret = alienware_update_led(priv, 0); + ret = pdata->ops.upd_brightness(priv, pdata->wdev, brightness); if (ret) pr_err("LED brightness update failed\n"); } @@ -1249,10 +1223,49 @@ static int alienware_alienfx_setup(struct alienfx_platdata *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 = { + .colors = priv->colors[location], + .brightness = priv->global_brightness, + .state = 0, + }; + struct acpi_buffer input; + acpi_status status; + + if (legacy_args.state != LEGACY_RUNNING) { + legacy_args.state = priv->lighting_control_state; + + input.length = sizeof(legacy_args); + input.pointer = &legacy_args; + + status = 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 = { .wdev = wdev, + .ops = { + .upd_led = legacy_wmi_update_led, + .upd_brightness = legacy_wmi_update_brightness, + }, }; return alienware_alienfx_setup(&pdata); @@ -1287,10 +1300,39 @@ static void __exit alienware_legacy_wmi_exit(void) /* * WMAX WMI driver */ +static int wmax_wmi_update_led(struct alienfx_priv *priv, + struct wmi_device *wdev, u8 location) +{ + struct wmax_led_args in_args = { + .led_mask = 1 << location, + .colors = priv->colors[location], + .state = 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 = { + .led_mask = 0xFF, + .percentage = 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 = { .wdev = wdev, + .ops = { + .upd_led = wmax_wmi_update_led, + .upd_brightness = wmax_wmi_update_brightness, + }, }; int ret; From patchwork Fri Feb 7 15:46:01 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965342 Received: from mail-vs1-f45.google.com (mail-vs1-f45.google.com [209.85.217.45]) (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 9EC522500D3; Fri, 7 Feb 2025 15:46:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943221; cv=none; b=T9fo84ezq3n4iB47QM9mrQf1WN+UVobERGFnHiQ1vaAr0cTSGEmK2MVFUppZ0zGFFGPxSqhcIiG3hBP0YFAbYDn3VqRyzj9AGerpgWF2cT2cb8G6svqX6n4PP2/DSofuGMINuYTm9h7dQ0ErvEnKQF7kUCFVU4fmv3jkBIfxmWI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943221; c=relaxed/simple; bh=TpImHDyw13v88DYqCWjn7O634fBAq+Jz7uz+a4wm1hk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k+TzQcUcTt18K23bGjP1pc1CuE4AcdPJ078J0VdL876ferMsDf3bvqpK1UguOiC71eptwM8Uba1glUnlmDcdBlcTecxFoQlkzH2b3PLZxejAg21S3IjXWc53it7QJqKqdwlN/nuVaM5zEzl24Jd9LIkKAskNmMhTRHI/XqiEFcQ= 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=kjiMbKIm; arc=none smtp.client-ip=209.85.217.45 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="kjiMbKIm" Received: by mail-vs1-f45.google.com with SMTP id ada2fe7eead31-4ba7d79cb57so460614137.2; Fri, 07 Feb 2025 07:46:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943218; x=1739548018; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aT5BPDOOXltaw9HQr5o8Si+JPli8HqWhNbfpXgv/A8c=; b=kjiMbKImvA+sOpGGRPrYEVtNMK3fAXcJSGUf4LKWOeEhzvyU9qYrCBuL/76sr+6BCP uePzZb5f40ERREhvTRVJYMq5tnTTxwW6AbclonlrNWE8o+z3hTnWdrWb5U/+le4LaZ2V iygEZ0FPs1a19X8JIUp1FuhCkQtRUTyG/JS+MiJQOLKNfpln1f7BDRgmky/lmllva6ZE c/N669rMhjLw9uoyP8dQvh8lzSkQA8Sxpdn6rvfJaoBFvp2HB1w3a01SAaAOPt2mu8+v cRAYmvWnLUUWaLC++cmPw5AAeMiMz61/aGUsTbtUe4S15Io40RI85h/ciKKuqXQt/fX/ i5Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943218; x=1739548018; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aT5BPDOOXltaw9HQr5o8Si+JPli8HqWhNbfpXgv/A8c=; b=W7tPHcWbdW8CysBKVH/iEKAeH40aWeXMiroqwGrnTRVxtosvAR3oEhnem9MSbhjoFo ma0+FNdlLbEyuUlIsD6f3mDsJ+cgBl6xNZKVarK4FUuSFk7qj/ik2EIfmQUT12g+v+nj r0ZcBF6+UnhG9OSXULPPBAwMpau42X8oMMTLlz7TF5f/eQON5um3ohaiPy17EdSdTvvZ /wVdtUmKQ5ohrkHAqV2ZANYzxDoCpHU6gsgdDXUucVNnBJNWcohnngcXsrzD0UoXmPS/ iwhl3gVJ5MrPOsGF5HUENbJ0Mx6EwGPIL/5ZQw6X2khnphUz7Al0Hfq8ZmUDKYkhSyWs mOOg== X-Forwarded-Encrypted: i=1; AJvYcCWCx9wVBWNB3FzQ+r0IL6exCBD5+hm2yZ9H3TVvp951QzivnE/aw8Dc6C3WIKo2hfQWIym3TRAt0dMj3JY=@vger.kernel.org X-Gm-Message-State: AOJu0Yzg/CPPR+ESOrYLxDVZFnNxD2TphNtbhsFCLV5xpEPhPpKafP3l G+A6vkgZGpFkXEPajfAkfx7vkCevCqzCN6mCrsiRxw/VaM5/PvWKtBIXPg== X-Gm-Gg: ASbGncvlXzqZ4VpB2IW9O/VioM8sFBlnQBbrVavHugqKKX+8N8YKVtf2qJs58iCkHZf HVMrEoUzgu+KMSrUTIQCkNGNYbsWL9t1Ng1tWGLoWgBX9OmYBXrjoYwIJNaXUibzl2Sukhose0z addplS3iaO0Ea1TbhMY/1dZIaTdMi+w0IuzxpWYM/Wj6WR2xL7Omzg2Jwy9hbASIGnBo2gtuGpw msPXj+4u6sspiONeV21//IO98yBSfeyW0+4fslEGhucYfXTz2Ba+MmUXzwtsanyKeggdqdZJ2Sr tjQUapPDR7lztBgaWuj+eMw= X-Google-Smtp-Source: AGHT+IFdCbCrEDbHqgeIro5mJhxBZa0YFL+Aw68w+AiAOOxB2ev9vms8Z5zl4cOx9sYtBGODK3DMIA== X-Received: by 2002:a05:6102:1591:b0:4b2:5ccb:1596 with SMTP id ada2fe7eead31-4ba85fa2a61mr3661616137.24.1738943218221; Fri, 07 Feb 2025 07:46:58 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.46.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:46:57 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 05/14] platform/x86: alienware-wmi: Refactor hdmi, amplifier, deepslp methods Date: Fri, 7 Feb 2025 10:46:01 -0500 Message-ID: <20250207154610.13675-6-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Refactor show/store methods for hdmi, amplifier, deepslp sysfs groups to use alienware_wmi_command() instead of alienware_wmax_command() which uses deprecated WMI methods. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 76 ++++++++++++----------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 525d25a1fa6c..6e12164132a6 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -711,53 +711,55 @@ static acpi_status alienware_wmax_command(void *in_args, size_t in_size, static ssize_t cable_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct alienfx_platdata *pdata = dev_get_platdata(dev); struct wmax_basic_args in_args = { .arg = 0, }; - acpi_status status; u32 out_data; + int ret; - status = - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data == 0) return sysfs_emit(buf, "[unconnected] connected unknown\n"); else if (out_data == 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"); } static ssize_t source_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct alienfx_platdata *pdata = dev_get_platdata(dev); struct wmax_basic_args in_args = { .arg = 0, }; - acpi_status status; u32 out_data; + int ret; - status = - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_STATUS, &out_data); - - if (ACPI_SUCCESS(status)) { + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data == 1) return sysfs_emit(buf, "[input] gpu unknown\n"); else if (out_data == 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"); } static ssize_t source_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { + struct alienfx_platdata *pdata = dev_get_platdata(dev); struct wmax_basic_args args; - acpi_status status; + int ret; if (strcmp(buf, "gpu\n") == 0) args.arg = 1; @@ -767,12 +769,11 @@ static ssize_t source_store(struct device *dev, struct device_attribute *attr, args.arg = 3; pr_debug("alienware-wmi: setting hdmi to %d : %s", args.arg, buf); - status = alienware_wmax_command(&args, sizeof(args), - WMAX_METHOD_HDMI_SOURCE, NULL); + ret = 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); - if (ACPI_FAILURE(status)) - pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", - status); return count; } @@ -805,22 +806,23 @@ static const struct attribute_group hdmi_attribute_group = { static ssize_t status_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct alienfx_platdata *pdata = dev_get_platdata(dev); struct wmax_basic_args in_args = { .arg = 0, }; - acpi_status status; u32 out_data; + int ret; - status = - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_AMPLIFIER_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_AMPLIFIER_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data == 0) return sysfs_emit(buf, "[unconnected] connected unknown\n"); else if (out_data == 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"); } @@ -850,15 +852,16 @@ static const struct attribute_group amplifier_attribute_group = { static ssize_t deepsleep_show(struct device *dev, struct device_attribute *attr, char *buf) { + struct alienfx_platdata *pdata = dev_get_platdata(dev); struct wmax_basic_args in_args = { .arg = 0, }; - acpi_status status; u32 out_data; + int ret; - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_DEEP_SLEEP_STATUS, &out_data); - if (ACPI_SUCCESS(status)) { + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { if (out_data == 0) return sysfs_emit(buf, "[disabled] s5 s5_s4\n"); else if (out_data == 1) @@ -866,15 +869,17 @@ static ssize_t deepsleep_show(struct device *dev, struct device_attribute *attr, else if (out_data == 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"); } static ssize_t deepsleep_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { + struct alienfx_platdata *pdata = dev_get_platdata(dev); struct wmax_basic_args args; - acpi_status status; + int ret; if (strcmp(buf, "disabled\n") == 0) args.arg = 0; @@ -884,12 +889,11 @@ static ssize_t deepsleep_store(struct device *dev, struct device_attribute *attr args.arg = 2; pr_debug("alienware-wmi: setting deep sleep to %d : %s", args.arg, buf); - status = alienware_wmax_command(&args, sizeof(args), - WMAX_METHOD_DEEP_SLEEP_CONTROL, NULL); + ret = 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); - if (ACPI_FAILURE(status)) - pr_err("alienware-wmi: deep sleep control failed: results: %u\n", - status); return count; } From patchwork Fri Feb 7 15:46:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965343 Received: from mail-vs1-f49.google.com (mail-vs1-f49.google.com [209.85.217.49]) (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 0D3D525949C; Fri, 7 Feb 2025 15:47:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943223; cv=none; b=KxVXjJu8ozVgbuH6ewNbVroSR/skSqFaU62woFdJ3v9rqwbNVbthiQ3HxjDW4lPZveDgNazZwOJRwnmRtjA6oNBP6+bmpD+COsN7OaVxUwwK3UE5WbeanXpazqKB6fNpQ7QZrOhESYshspvXuZ+SVDzsrDdxrbobcuAIT5WLU7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943223; c=relaxed/simple; bh=iLplJqGOUWH2yC/l1CaxhcXFjVrg8V0rQaqfGwOIqnk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=reGSVq7ijLf50cPtK/XTcXq42pjyw6euypf4KzJB3dCu4H3MV2aaMM+SmupIv2owyxGMXIvCBBkzLoHpQihVcRoBufcEgzywhvlctMxRQldVVWtyRhus9/4UZYJHY1JvjSVB5CIRsGZTxAMlA5S9SB3fmRBUhG4qqllKW6A+WAM= 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=R6yq6sQx; arc=none smtp.client-ip=209.85.217.49 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="R6yq6sQx" Received: by mail-vs1-f49.google.com with SMTP id ada2fe7eead31-4ba00b6821aso603809137.2; Fri, 07 Feb 2025 07:47:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943220; x=1739548020; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MwdRGSFgj7FqI1tYvmFFNT3wx7x6pU35t6rwqkf283A=; b=R6yq6sQxSL+drIxmSQ1R+1HIk+Zcn1dDWsHZvKw8dnlaV+KFkFrrGv8yBADLXvMogC 3grqsDKtZ6lZCr6XeqNNhENLunGcOdFcPd8+M7sHcrOoX3QEY4vcZZ18AAgIt7qkIrwo WJligN9NXz1MNiX0+Y8uj2SX5ROwgDqrDoikGdc7noStQm4CoRLPROCEE3x6fQFbO1N5 /XzM83I0KMhszl/Uy9R387HCa79USFyRSZOgCuQvf2h5TYjksbRH9w55BL7W24dJ/jWG 9h9NUKDsbQxFbB90H1NcG12UAwQ+o3c+m0r7iXRhbXgN2FM61i7QT6PW9MhZ24pLuQS6 eyzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943220; x=1739548020; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MwdRGSFgj7FqI1tYvmFFNT3wx7x6pU35t6rwqkf283A=; b=vzR73w5fBLyybqmqSe237Dmxxadkty6/TtAOJa5kHtOkKXVDbvs+VMqTYepgLHljO6 rtEt/hsKYRc1550hKKSjVmy0tpef/TP9KdajXmFEiY5n1h0oASK5P3O4fzCYh30uc03q wx21S3gvds/hXk1RlPuucm0A9Y9L6I0cCiIcVoTJZ73zE46eFStJpKyhB4fJUnWJLhEx tQIWmIMGGTI5pbdWmEVKMwx8C5/8uAp4NU/Fz8HqLPmqvJjyVfl3VfH+7CKpPOF9vXpZ vLp4bHSaOEwQ9wV+/laQDT037ggdZK+uxn+296s0SkUKZ1sWi5IBw8rjMBUsLWy1IJWV Ihlw== X-Forwarded-Encrypted: i=1; AJvYcCUFukh+1SolGUSfKH14XxgKu+kVI1uXX/+RR8xvG0mzZ0rjbsdcQnOEiP5o7yttEg66nBCtx2SAB/WDBAQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwmeSxFSvl9zXvftjgZRd6mcZOqN3Mgx6N5Crr8NvdV2/CHyOMU EGF5jcmd/GhznOoGQkiOUDZinUbPIUf5Jj8VXmCwxNWkiu7XPoIfUBtdZg== X-Gm-Gg: ASbGnctvcuJJSCd9tldFtLcneQA5enaTNnrD5VhKQayV7laX7ncECguLl2xJsbJHvsS SNhqg4v38YFnGQdRXMLx57c42AF7OPY5/LAg4zDCRiYfdVYlJp9i0AR9Fn5HAnOH0wE/yOuLCSz cokHQsf7U/ErZhXhZ+JG4YTFbtAOgkIoWeW5ki+e+uDXCcYVtFbB8kKFkdp12NP3mbrbzlPpmK7 LnoQqgw7Mp2hklDevp06fe9PsJX4a938Vg/EFej9TANsqlKsR4C/N/gPeCgzERNDebRhKJV0Hoa xIr3+Oqm88nLfX2dbzzePI4= X-Google-Smtp-Source: AGHT+IE8d9Abb2BQ19iV1I8ZqIv6LjHmj4QajnSK3jxdcdiUHwQcTJxX3Geq0z2BO2awthH+CLocAw== X-Received: by 2002:a05:6102:3ed4:b0:4b2:7446:fc18 with SMTP id ada2fe7eead31-4ba85f063b1mr2830352137.17.1738943220607; Fri, 07 Feb 2025 07:47:00 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.46.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:46:59 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 06/14] platform/x86: alienware-wmi: Refactor thermal control methods Date: Fri, 7 Feb 2025 10:46:02 -0500 Message-ID: <20250207154610.13675-7-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Refactor thermal control methods to use alienware_wmi_command() instead of alienware_wmax_command(). Drop alienware_wmax_command() as there is no more users left. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 88 ++++++++--------------- 1 file changed, 30 insertions(+), 58 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 6e12164132a6..04c526f95c2f 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -676,34 +676,6 @@ static enum led_brightness global_led_get(struct led_classdev *led_cdev) return priv->global_brightness; } -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 = in_size; - input.pointer = in_args; - if (out_data) { - output.length = ACPI_ALLOCATE_BUFFER; - output.pointer = NULL; - status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - command, &input, &output); - if (ACPI_SUCCESS(status)) { - obj = (union acpi_object *)output.pointer; - if (obj && obj->type == ACPI_TYPE_INTEGER) - *out_data = (u32)obj->integer.value; - } - kfree(output.pointer); - } else { - status = wmi_evaluate_method(WMAX_CONTROL_GUID, 0, - command, &input, NULL); - } - return status; -} - /* * The HDMI mux sysfs node indicates the status of the HDMI input mux. * It can toggle between standard system GPU output and HDMI input. @@ -943,7 +915,8 @@ static bool is_wmax_thermal_code(u32 code) return false; } -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 = { .operation = operation, @@ -951,14 +924,12 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) .arg2 = 0, .arg3 = 0, }; - acpi_status status; - - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_THERMAL_INFORMATION, - out_data); + int ret; - if (ACPI_FAILURE(status)) - return -EIO; + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; if (*out_data == WMAX_FAILURE_CODE) return -EBADRQC; @@ -966,7 +937,7 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) return 0; } -static int wmax_thermal_control(u8 profile) +static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) { struct wmax_u32_args in_args = { .operation = WMAX_OPERATION_ACTIVATE_PROFILE, @@ -974,15 +945,13 @@ static int wmax_thermal_control(u8 profile) .arg2 = 0, .arg3 = 0, }; - acpi_status status; u32 out_data; + int ret; - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_THERMAL_CONTROL, - &out_data); - - if (ACPI_FAILURE(status)) - return -EIO; + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, + &in_args, sizeof(in_args), &out_data); + if (ret) + return ret; if (out_data == WMAX_FAILURE_CODE) return -EBADRQC; @@ -990,7 +959,8 @@ static int wmax_thermal_control(u8 profile) return 0; } -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 = { .operation = operation, @@ -998,14 +968,12 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) .arg2 = 0, .arg3 = 0, }; - acpi_status status; - - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_GAME_SHIFT_STATUS, - out_data); + int ret; - if (ACPI_FAILURE(status)) - return -EIO; + ret = alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; if (*out_data == WMAX_FAILURE_CODE) return -EOPNOTSUPP; @@ -1016,10 +984,11 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) static int thermal_profile_get(struct device *dev, enum platform_profile_option *profile) { + struct awcc_priv *priv = dev_get_drvdata(dev); u32 out_data; int ret; - ret = wmax_thermal_information(WMAX_OPERATION_CURRENT_PROFILE, + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFILE, 0, &out_data); if (ret < 0) @@ -1048,7 +1017,8 @@ static int thermal_profile_set(struct device *dev, u32 gmode_status; int ret; - ret = wmax_game_shift_status(WMAX_OPERATION_GET_GAME_SHIFT_STATUS, + ret = wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS, &gmode_status); if (ret < 0) @@ -1056,7 +1026,8 @@ static int thermal_profile_set(struct device *dev, if ((profile == PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || (profile != PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { - ret = wmax_game_shift_status(WMAX_OPERATION_TOGGLE_GAME_SHIFT, + ret = wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_TOGGLE_GAME_SHIFT, &gmode_status); if (ret < 0) @@ -1064,7 +1035,8 @@ static int thermal_profile_set(struct device *dev, } } - return wmax_thermal_control(priv->supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->wdev, + priv->supported_thermal_profiles[profile]); } static int thermal_profile_probe(void *drvdata, unsigned long *choices) @@ -1077,7 +1049,7 @@ static int thermal_profile_probe(void *drvdata, unsigned long *choices) u32 out_data; int ret; - ret = wmax_thermal_information(WMAX_OPERATION_SYS_DESCRIPTION, + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_SYS_DESCRIPTION, 0, (u32 *) &sys_desc); if (ret < 0) return ret; @@ -1085,7 +1057,7 @@ static int thermal_profile_probe(void *drvdata, unsigned long *choices) first_mode = sys_desc[0] + sys_desc[1]; for (u32 i = 0; i < sys_desc[3]; i++) { - ret = wmax_thermal_information(WMAX_OPERATION_LIST_IDS, + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_LIST_IDS, i + first_mode, &out_data); if (ret == -EIO) From patchwork Fri Feb 7 15:46:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965344 Received: from mail-qk1-f170.google.com (mail-qk1-f170.google.com [209.85.222.170]) (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 A1B0A25A636; Fri, 7 Feb 2025 15:47:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943226; cv=none; b=G29N+0XhSYpVz4/Nx7hioR8frPvePW8BGVn+CtyZc65ZjvAwdNEcx9D7MlJueHFO2LKNorrmpkPhtlpMU9vpmw34A6nNTAEgSi61tgQrx6N0df4HqgkgIO17zINxpAu04HKu4xy8PyQg6E2sdRqYSfSAY7Rp8KERBWEeYCKNmcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943226; c=relaxed/simple; bh=WNK/zhnhWne1KhFy1ru5tXjKwHW1D7tIpQQubkriI9Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RdlodYrQF7DJjTOMXAG3Kan7vrqg+BZHbkJ4MlKfTXQ8vbhhr64NA751THQ+oiZeC3+pNYCCIADou+mJWdISjtLm+LUd9Jag72NcIKgR12n9Jqd1mk5fkaK53Y/Q7+sW82QmAJ5SM0x0CuttPXarZ1g2ITFqS78y3RoMMYg6BnI= 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=XHVmqpmj; arc=none smtp.client-ip=209.85.222.170 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="XHVmqpmj" Received: by mail-qk1-f170.google.com with SMTP id af79cd13be357-7b6f95d2eafso242844385a.3; Fri, 07 Feb 2025 07:47:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943223; x=1739548023; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KeplABhvsldXq+TfWYcnOdbCWYVX3O6/Sz7wRQiltlA=; b=XHVmqpmj+tYwXowNN7JMXKb4xRO+XtzF/OaOQxvuCGef/+uY8gduSETPOAONuupuoy FeigxS4iXRLuQF3dWKjQz51k+wnh2K8rMcLcdWOBL+Jgzw9QsAPNzcfy+SByaG9qzdoH 5toZWtjWuJ3XYVaX/gPqELjDcnBR4H2qrmTBt+womZUAj7QYfXPfus2x+Bfxq+5xsQFY 3HJb9iN+ZTfBfoPXbRCf7VdSmpC2Y7cW63iGYIrHODPfcFt1jzn6QStsNosjmL3+Oloq T89G9au11sqwDaidYTqqKTJ9lizAsooH3K78TVjbb0HpG/AzDzE8EfDYiC6jjACXy5BA 1LMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943223; x=1739548023; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KeplABhvsldXq+TfWYcnOdbCWYVX3O6/Sz7wRQiltlA=; b=oAhfoixYrNqXgBrB23VkT9pyk92gGIcsL3bjNmdGjalnsWFUo8weKQ4F6nkfoD0LXz OU22SXWL0f/9KiA1HehEaSTWCThH67+hLAXSwM4FR6sdCFmSVKw/NW7N5b6rje5uOiTt wBRTAqFiWx8wB966wTCRFjpIG1g2G56FOGc63N3FXWUSEEQo3XlMrUhdV3f0ATlnGqU1 3w62BbHYGs4puXgw74ds7witFYvOPN2/1I1nPurxXy1n3fijDAfb+n6Ww9IK2QrU3bMi /m8tcY+C0ld0dsNEd8QId9ddDjNjkcNQtLkplCFZizLr/OFsFmYIIQ1Ri7mduqqBofPI z+Rw== X-Forwarded-Encrypted: i=1; AJvYcCUEkH761BxN6J4AKt8TnCpOTcR59VBnIstttD7ScX4fvCgzseN5s7hJjGzHFBFLXtqJy3YetthNbuSQIf0=@vger.kernel.org X-Gm-Message-State: AOJu0YwX8/dR/YLlor48oBZ4WbGnjPTBNlBgxgXo7FpU66i08eOzmvER PV+AnE1KM2xjrT8DUj2N3ysbMtqUHtn1sGzPsEZHdLQYMlKZVyGDcRZM3g== X-Gm-Gg: ASbGnctF8U0eY32lgjmfx3fpMnQUACJM+RJzypYLAxUiqLStbYfZUaly9uwrV6gfU45 MUqWDAANmQQCHEaOChQKhTecPA9RujnAygVrA8WObxrJxh0Es+ceNqPNgdWEtATywajymAWs6uI Hz2YcmACc2vr0eqf3wfxxW/F+8XwiultZet/yEQsS2kKuV8m0Fa+fOZ2yoeG2+icVW3q1LUvbRT bYb2NsLt8p1trzVwqO5JPNZ3xtZ2cRyu5r/1rD1BnDJcqVfsHIm/ZL1mCx1xk2jGHi9rq0tz7R4 wNUAE1VZ7rLF73PSPrab/SY= X-Google-Smtp-Source: AGHT+IFuaQNFrTGmXY7NqA6tqUjmiq0GBFJGWtOLz349YOpWbGXa03G2ngWN+XoLPIgxbBCYC9Xb1g== X-Received: by 2002:a05:620a:4448:b0:7c0:b82:8f90 with SMTP id af79cd13be357-7c047c2139amr581147885a.35.1738943223176; Fri, 07 Feb 2025 07:47:03 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:02 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 07/14] platform/x86: alienware-wmi: Split DMI table Date: Fri, 7 Feb 2025 10:46:03 -0500 Message-ID: <20250207154610.13675-8-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/x86/dell/alienware-wmi.c index 04c526f95c2f..c575b82f11df 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -114,102 +114,68 @@ static const enum platform_profile_option wmax_mode_to_platform_profile[THERMAL_ [THERMAL_MODE_BASIC_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, }; -struct quirk_entry { +struct alienfx_quirks { u8 num_zones; - u8 hdmi_mux; - u8 amplifier; - u8 deepslp; - bool thermal; - bool gmode; + bool hdmi_mux; + bool amplifier; + bool deepslp; }; -static struct quirk_entry *quirks; +static struct alienfx_quirks *alienfx; -static struct quirk_entry quirk_inspiron5675 = { +static struct alienfx_quirks quirk_inspiron5675 = { .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_unknown = { +static struct alienfx_quirks quirk_unknown = { .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_x51_r1_r2 = { +static struct alienfx_quirks quirk_x51_r1_r2 = { .num_zones = 3, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_x51_r3 = { +static struct alienfx_quirks quirk_x51_r3 = { .num_zones = 4, - .hdmi_mux = 0, - .amplifier = 1, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = true, + .deepslp = false, }; -static struct quirk_entry quirk_asm100 = { +static struct alienfx_quirks quirk_asm100 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = true, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_asm200 = { +static struct alienfx_quirks quirk_asm200 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 0, - .deepslp = 1, - .thermal = false, - .gmode = false, + .hdmi_mux = true, + .amplifier = false, + .deepslp = true, }; -static struct quirk_entry quirk_asm201 = { +static struct alienfx_quirks quirk_asm201 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 1, - .deepslp = 1, - .thermal = false, - .gmode = false, -}; - -static struct quirk_entry quirk_g_series = { - .num_zones = 0, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = true, - .gmode = true, -}; - -static struct quirk_entry quirk_x_series = { - .num_zones = 0, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = true, - .gmode = false, + .hdmi_mux = true, + .amplifier = true, + .deepslp = true, }; static int __init dmi_matched(const struct dmi_system_id *dmi) { - quirks = dmi->driver_data; + alienfx = dmi->driver_data; return 1; } @@ -241,51 +207,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { }, .driver_data = &quirk_asm201, }, - { - .callback = dmi_matched, - .ident = "Alienware m16 R1 AMD", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware m17 R5", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware m18 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware x15 R1", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware x17 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data = &quirk_x_series, - }, { .callback = dmi_matched, .ident = "Alienware X51 R1", @@ -313,60 +234,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { }, .driver_data = &quirk_x51_r3, }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G15 5510", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G15 5511", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G15 5515", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G3 3500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G3 3590", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G5 5500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), - }, - .driver_data = &quirk_g_series, - }, { .callback = dmi_matched, .ident = "Dell Inc. Inspiron 5675", @@ -441,6 +308,116 @@ struct alienfx_platdata { static u8 interface; +struct awcc_quirks { + bool pprof; + bool gmode; +}; + +static struct awcc_quirks g_series_quirks = { + .pprof = true, + .gmode = true, +}; + +static struct awcc_quirks generic_quirks = { + .pprof = true, + .gmode = false, +}; + +static struct awcc_quirks empty_quirks; + +static const struct dmi_system_id awcc_dmi_table[] __initconst = { + { + .ident = "Alienware m16 R1 AMD", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m17 R5", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m18 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x15 R1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x17 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Dell Inc. G15 5510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5511", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5515", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3590", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G5 5500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data = &g_series_quirks, + }, +}; + +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; return 0; @@ -631,7 +608,7 @@ static umode_t zone_attr_visible(struct kobject *kobj, static bool zone_group_visible(struct kobject *kobj) { - return quirks->num_zones > 0; + return alienfx->num_zones > 0; } DEFINE_SYSFS_GROUP_VISIBLE(zone); @@ -754,7 +731,7 @@ static DEVICE_ATTR_RW(source); static bool hdmi_group_visible(struct kobject *kobj) { - return interface == WMAX && quirks->hdmi_mux; + return interface == WMAX && alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); @@ -802,7 +779,7 @@ static DEVICE_ATTR_RO(status); static bool amplifier_group_visible(struct kobject *kobj) { - return interface == WMAX && quirks->amplifier; + return interface == WMAX && alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); @@ -873,7 +850,7 @@ static DEVICE_ATTR_RW(deepsleep); static bool deepsleep_group_visible(struct kobject *kobj) { - return interface == WMAX && quirks->deepslp; + return interface == WMAX && alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); @@ -1013,7 +990,7 @@ static int thermal_profile_set(struct device *dev, { struct awcc_priv *priv = dev_get_drvdata(dev); - if (quirks->gmode) { + if (awcc->gmode) { u32 gmode_status; int ret; @@ -1079,7 +1056,7 @@ static int thermal_profile_probe(void *drvdata, unsigned long *choices) if (bitmap_empty(choices, PLATFORM_PROFILE_LAST)) return -ENODEV; - if (quirks->gmode) { + if (awcc->gmode) { priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] = WMAX_THERMAL_MODE_GMODE; @@ -1117,7 +1094,7 @@ static int alienware_awcc_setup(struct wmi_device *wdev) priv->wdev = wdev; dev_set_drvdata(&wdev->dev, priv); - if (quirks->thermal) { + if (awcc->pprof) { ret = awcc_platform_profile_init(wdev); if (ret) return ret; @@ -1312,7 +1289,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) }; int ret; - if (quirks->thermal) + if (awcc) ret = alienware_awcc_setup(wdev); else ret = alienware_alienfx_setup(&pdata); @@ -1338,6 +1315,26 @@ static struct wmi_driver alienware_wmax_wmi_driver = { static int __init alienware_wmax_wmi_init(void) { + const struct dmi_system_id *id; + + id = dmi_first_match(awcc_dmi_table); + if (id) + awcc = id->driver_data; + + if (force_platform_profile) { + if (!awcc) + awcc = &empty_quirks; + + awcc->pprof = true; + } + + if (force_gmode) { + if (awcc) + awcc->gmode = true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + return wmi_driver_register(&alienware_wmax_wmi_driver); } @@ -1351,18 +1348,8 @@ static int __init alienware_wmi_init(void) int ret; dmi_check_system(alienware_quirks); - if (quirks == NULL) - quirks = &quirk_unknown; - - if (force_platform_profile) - quirks->thermal = true; - - if (force_gmode) { - if (quirks->thermal) - quirks->gmode = true; - else - pr_warn("force_gmode requires platform profile support\n"); - } + if (!alienfx) + alienfx = &quirk_unknown; ret = platform_driver_register(&platform_driver); if (ret < 0) From patchwork Fri Feb 7 15:46:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965345 Received: from mail-vs1-f52.google.com (mail-vs1-f52.google.com [209.85.217.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 195A93DABE6; Fri, 7 Feb 2025 15:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943228; cv=none; b=Y/vQZncVKvgk896TG5p91Ev3wJWpIkdP6zdI97pxrY5DD2V/f0OSDxIGv/Y9FsHv9c7O//t53SbrkD5yhHcGe7moBtDJqFpTCqrBgj423P2a0z7G/aOJSyLX8kGrF4tWSs1MJTKwuiVE1W+dyrVpdx69rzOF4JrmT9OZu5f+MTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943228; c=relaxed/simple; bh=6/0ifSyK9A1jLPrUzoCWiVZBxNyv0pTaBibcfd2UN0w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hkVnMeBw944RJgLM8QbSF0vP1C+mn88gzKMjekAonpXi8SFwyVu6pByKvLyjsIyAeOk/PbeEr4NzZn+0XN+xaMnaoZyEUGEOb9UxUsJnYME1XQNs4APBGNXln2iFm7r4HHhjSvmD7Mj7U7N/MujhkQLUAPeistbu060mH2yYMlY= 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=W3/aJMhI; arc=none smtp.client-ip=209.85.217.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="W3/aJMhI" Received: by mail-vs1-f52.google.com with SMTP id ada2fe7eead31-4ba71bf28efso790103137.0; Fri, 07 Feb 2025 07:47:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943225; x=1739548025; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q94zQ2y0w1KQlOf/S2AvbwbvutIGIqCEv4xXfHY0lQA=; b=W3/aJMhIxcaZi/xKsSmzDeOTkGrU2mK2Wvkz35QH0NANYC0jg69AHJ38iWIIv682g6 RvXYkJ3Tqswu65I9CYc5CADuSRhzJCbP93E8xBaP0v4XtnHL2MAK0TZUo8nqvgF8b7iS GYKQ8v4WePwj7fro0chhWI0/5BHijeU1pcw6lpwRx9gYdaa8V97uEv8S7a8lAMwz79MJ 2N+e44AubsfT6X2iNFYUqFeb3LqoKiFnpzdmEcZxos9JBypp/NZ52EyIPR5YV69RJuwE KOWdb/LdofuyVA368kYSazF2yFjcoEIVrGowP8ctMZJUEOHq+lFLFbz8RptX6V39I3NT v3YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943225; x=1739548025; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q94zQ2y0w1KQlOf/S2AvbwbvutIGIqCEv4xXfHY0lQA=; b=pJ1jBfLVgWq1omGrYuVJKLX/OjCJbD8PRk4GDK6rAPQ4dds68S6X+fSQ4ivpNj/9qu 1AwK75ieDHAdtIuDn28HhudVyPZp/s4cVe30Y1wvlepEJES2jbKAKNj9nM6ji0Z5ZIsp VXiAdlCw/czVoMnZt5yHBEGPgX8qB11BjOMierAPBgFwET+7qm1ssSkZvbCj0VOi+N2z OEHOE359kbKIBlTIjrx7AHtFgW5VX7wj3Q44+/lxZLmeBvP6srRWnLBvn/wbFeiSWpgp k1u6ikyVHxO2rWBGuIbD+dRnkwZpTJ5mB0gd0A7dVSaKwQZSowX2nnqsogil2FtepuJM TPVg== X-Forwarded-Encrypted: i=1; AJvYcCUyDKUqBaSuoH9anuE8EIm260/D5coem9b6QHKwPIbE4AxpMYxUNJ0kBkPhWrBSxmcoVJIGjoEf9liI+lM=@vger.kernel.org X-Gm-Message-State: AOJu0YwCAfhGawqZoReaiuESbkAbM58bzN2/Nz1SDWAcs6kS0QAEPX1t BZNQLit4WYQEEeKTd53QkfhvrR5zYB0mkZVDHixBBlyP47PrDkyqjxrLSg== X-Gm-Gg: ASbGnctYeAC1NyqjWSjvh4scdxOXn5I6+W2pw3vyCsOI32cw0B7ux8dIyqdUr6821Cs GP+4NEVa0iW2cd+4hlMJf3zp4rS/k/ht0Q32TX17PF6GuTRHyySpKYjefkgUVecra3DdZjU6xD8 y7BZDU9pTDXT8/H4zuf39cApgsy4PG3SZaqRya4pGy99lW1BWmLjc0eHH8fwGeRocrnRNAVn7Qn COyqGiUE2Kacf+lzr1Q9fVzuhsuPTMJMBE/1VyTDN1NOyj/qg/l0UOgDTYQKUIVCG8YSpkhs0gM WqGX41Z2WKSB7sWBjEERNHM= X-Google-Smtp-Source: AGHT+IHc0MCHKgRHMdMC4LoF+LZgaujLC0fx0Nu12T79sSLgxWwMj2LmhR2hFaufiDMU9jh+svizyg== X-Received: by 2002:a05:6102:8082:b0:4b2:9eeb:518f with SMTP id ada2fe7eead31-4ba85e4b3a9mr2809728137.10.1738943225603; Fri, 07 Feb 2025 07:47:05 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:04 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 08/14] MAINTAINERS: Update ALIENWARE WMI DRIVER entry Date: Fri, 7 Feb 2025 10:46:04 -0500 Message-ID: <20250207154610.13675-9-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Dell has been inactive in its maintainership role of this driver since around 2021. Due to this, add myself as a maintainer and update path to support upcoming changes. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- MAINTAINERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index f7550dcced78..3dd440f34c63 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -792,10 +792,12 @@ F: Documentation/admin-guide/perf/alibaba_pmu.rst F: drivers/perf/alibaba_uncore_drw_pmu.c 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* ALLEGRO DVT VIDEO IP CORE DRIVER M: Michael Tretter From patchwork Fri Feb 7 15:46:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965346 Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) (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 64CC43DABFD; Fri, 7 Feb 2025 15:47:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943231; cv=none; b=IGrJQw6gPWCL/crIvc3DxoHbnDT9EALMz7Y8ubXdC1zAz6X2MJ1/2Gjr4HkuSekuMAiF1BejEfStSde5rfNbVLg55NzaKAwL2/KjaJkm2qHmrTC1+sE5Z5nfxG0/IUkPM2zTo0/CYWhFvPaTapSOPDHuk5DRBLqzhFRvzcZBg1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943231; c=relaxed/simple; bh=Woq4swbnYq3xsWIj3EtplDj2WuXqxSueFP8J8UTTZS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HwtFyCncQF5bBdCTb4OGhiu5J+dfeWvTA9gddV4bziI60jGWB0FPr2m9/xnCaOXMCYeRSuJgkIedEdpw6EbF8blKSzyZEXfOiMRUjCVWDeanXbU2LwLpwo836tf8vKmcdpKFOsSXHlVvmuaMf1vpBs8PDCnkcq3G8P2JNQYw3OA= 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=aRmtpESJ; arc=none smtp.client-ip=209.85.217.46 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="aRmtpESJ" Received: by mail-vs1-f46.google.com with SMTP id ada2fe7eead31-4aff31b77e8so711243137.1; Fri, 07 Feb 2025 07:47:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943228; x=1739548028; 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=aRmtpESJSzdPkU2dcmRbK7xxevebpSNAJ/DtuzexE92IS1AiiQ/YZaYneEAYjbcOFC TTG3UiLZ1ThX2kYXFlJ9pP8c6B382xK6HBL9xxxn8tJ775pEMl3jwNzFZJUvpiDuJEtH LAdkOh/xC+t5IOPFgrQkGXyHntSxY5u7j3e9kbpERj9JYxSUMCW/kIxia/eZLy1oqmx2 jIV10gXKrehsMv34udFVQCMShTXFc3eo9AQYm5aLTxjUoqq9UAuK0fsoU7EzAxDoJ8Vw hQnCsWRHEpXQgD9pdza/4Wdo/A94mN+N15XqCXCutQ+A5IAiG/wvt2hZ2IhPIDNLSecS EALA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943228; x=1739548028; 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=Iz6YC98d5Ucm7OrZbi9LmsqYFIn4SDWzgc/rHTpYotPqYia3arTbBjOOIq/n4L5Y1W jwThEq/ysMzJxmOfyK6J6cq2wI/vYarzdFZFIzVfC7W+QcWUdjvJVYUgM0yErsK2ZzhS dlqQa8jxjHKTAsZlAvt16Zy94nD8GGWzT3xEKXpcSfRnsoRcQTcFMPMl3GakDNDQ0HbF IoI9OLA5yPSDFXG7UVlCcVWnxIYMVs4PKAWgygFWjIkeDvYo2GWg+q1AjWfdVQHqeebr 43iDktTsWWZ2ZQMcwFY78Ire0Hnu21I/mC7EIFtTwu6FJq9UAky4v3jaS3HNrxi/HbRB DNVA== X-Forwarded-Encrypted: i=1; AJvYcCV7DyitZ3kTH5HP9nzziJeOA17T02yMmub4G4vSIrrAmWH9IuRiwh0CcYlgS1XUSfcEis0ClAlIhHRSYhI=@vger.kernel.org X-Gm-Message-State: AOJu0YxmPOeqOHA8Lmi4CBmoSCEoQrOSP19Hp8a/hynveTwVNc8yMPAU TKOqn9qpqgz14vNWIJqNXLzdmwyZ3FXL3DGcDmegUsUq14h2j3qKmyDxDQ== X-Gm-Gg: ASbGnctI8hOzzcUKrzkty0tl6uAU7uLNL1zSVMlgeFuNrx1tLUkT8hvLkk+pezLJeM/ SDBXOLj4ev3bUstUSAvlV6GFpoSLTIvDn9p1ahjUXQbiDcYmnv6G4Yp3ME+XoVZWtqGVH1eV8M0 Z34+xMJ4/lCk7hDRWX52ClvmiquMfjNoahPEBP8lL6qmh/tYIiu/srsH5w8dqQWyvvUO0tCB95g m5VtVca/oYt4vqU4Z0xhALnP5qBxZKGiuS0iUGlB7YbX2OJIbsGK6Dfye/075hluonueFILN4Ff iv5xtPO9T0tjBCEE74kJv5g= X-Google-Smtp-Source: AGHT+IG9M84DUoDjnrMI3ULMO7C3hVpBmr5VBx8cHv2k8DKFj/Vjf53dc9dsFs/qZ7JHr0gDYYqx0A== X-Received: by 2002:a05:6102:41a4:b0:4b1:3409:5dcd with SMTP id ada2fe7eead31-4ba85f460c3mr2701268137.20.1738943228128; Fri, 07 Feb 2025 07:47:08 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:07 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 09/14] platform/x86: Rename alienware-wmi.c Date: Fri, 7 Feb 2025 10:46:05 -0500 Message-ID: <20250207154610.13675-10-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 => alienware-wmi-base.c} | 0 2 files changed, 1 insertion(+) rename drivers/platform/x86/dell/{alienware-wmi.c => 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 @@ # obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o +alienware-wmi-objs := alienware-wmi-base.o obj-$(CONFIG_DCDBAS) += dcdbas.o obj-$(CONFIG_DELL_LAPTOP) += dell-laptop.o obj-$(CONFIG_DELL_RBTN) += dell-rbtn.o diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/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 From patchwork Fri Feb 7 15:46:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965347 Received: from mail-vs1-f41.google.com (mail-vs1-f41.google.com [209.85.217.41]) (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 1B8CC22538B; Fri, 7 Feb 2025 15:47:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943234; cv=none; b=rGFAzz3E3W7nIYBkPjeRXmEUzaxSQjaw8IUuIQm3QRomQWWBYEKh4W5S/iEJUwyvh4wTsyP35XN922znWnjgBsiboPJbiCBXAK+7QKhP+i9CVHhgYoVIS4WHhzkuFfIqizuNkVVObeOeLSXErUxTO4/C8B3Js1vkgKTmJDQoHZg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943234; c=relaxed/simple; bh=fHiEhMW/MUAzNqGF+k0nw60BIC1B+41IdC8VtYXtMTQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UYu9uNREMk/FvRIWuHHAMqPLsz+zkQ4aVqKKqDQR+wVewwazEB1gulgMtNPnLvAyRKZ9yIZonJWnVZES4eZBcijtNQmNwo28U/cShn/RLChYAAAFw9N7liHb8YgCaScfuZdafSWlcjs/Ei3ElwkT7oC1nXwO/BvNi2v2CYfAEmU= 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=bP8ULtEb; arc=none smtp.client-ip=209.85.217.41 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="bP8ULtEb" Received: by mail-vs1-f41.google.com with SMTP id ada2fe7eead31-4ba7a9c17c0so992109137.0; Fri, 07 Feb 2025 07:47:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943230; x=1739548030; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m3qXBhgYFmwgLXKfxYMj7rB53ypV2bfglBTEP4SO1Kk=; b=bP8ULtEbeFdwiVHEHMpN92TPixxe2QzJCfMKeZCafZa+LG6Ge+p86wXRYs9WLpgvIr DZArZSOWjtURl3zqKt6zLIcK3yKRrWEfxGwJxir0xNfvMKN4HcXs19urtyEbfFRRWksZ sYLoFj+fTS8yqqUCnZzzdm0jZ59TpByEjK3zeV9ngHWzbkayDvGsdgGRLyaDkr+PDJKE nwjhyG1IJsEm/56L5PAHLfaPXfyYWBKzzCm/R/zheqU4Tts6bHmq1yet7Kt3ynxlexQW xjlgkQgw3/qcrwRg+2gN/uAklV5HKEnK+RZ8l1CWMsQioONfjGZPPuMMDb2HOJvBU8fz gtuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943230; x=1739548030; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m3qXBhgYFmwgLXKfxYMj7rB53ypV2bfglBTEP4SO1Kk=; b=whrqCu6beALvkuQ0uWL35TivGTkKYyJ/i1oj6GTXHgHbjTwEsCkLafTfCwgTIIgH85 LwrD/w2c+NvbVA8vP2jowBp1SDuCT5tthgbjOvW2tsq90J6dscL87fs6rSXe627SQXrJ GgXNE9RptokZVxrWp34QesIl6KnNsYTS/lT4V14Ixvkc2tfw01yLv4cihhiI41Noi8w0 M1ipOji+CMCdktDXC5Y4m/oYVMXXaIJwR6eL/e+DBQIcxF/9V4vb1jGl/uqvcOWEXdPA p9AjfHIEry4FKDr20iVJtLSNGZZV/jiwZY9HG0JuXmzHthiWo4ARYVUuJ7EV8CKpMxpD HgFA== X-Forwarded-Encrypted: i=1; AJvYcCXmbnZZYedEcQd3xcSAf6frsBEAXH9Kfgj1121GGhK0bbJCtOeqkT+NmMUWY6phR8dUBovXiOwuRi+aHQQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzTIVgeNQQ3jsTqb1cB0LbIi6hrqywuE/pr9CM90oIldQw4Hzye SMY0BIdk4dfWq/JY9gTPes6EbtHGFJ7Zvwceq+8qxUneyZP1MjjWFb4vNQ== X-Gm-Gg: ASbGncsz4jzvQGkTGL5+3c9ZZUe71XN4qhcwlxCTT0CBt/BLjZ4DiBlnLzGzEwsuCa+ el/3mOLbjVebkcJCnIaZXDmCqLSaoBMUxFuzpSJ2MiGvmgoWIFCsKNxd2WcOIVKwI+ttxeGjpfM Uf7U3ALncVhHVD6jtmZGq8on8T7mt0apBmjT1EZMDnc2PC6L6XPREgi7NoGW2evqil9r7wKvGUl HU45Z9HNs1BPrZI4y/i/joFv4271pgY2VRtib/dJkalgE8moud4oPqMSmrBrEREuPRUXB6k2Ljr 0lUQW8snYax0nfi6Y73UKEk= X-Google-Smtp-Source: AGHT+IEKEeVe7+8yOjm5MthpaSEjyUqcAnbpGPZ62LFsTmyg1SetrEy2biANVXa+bGl4NKKtbv78UA== X-Received: by 2002:a05:6102:5e88:b0:4b5:aa91:f29f with SMTP id ada2fe7eead31-4ba87141794mr2424062137.8.1738943230597; Fri, 07 Feb 2025 07:47:10 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:09 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 10/14] platform/x86: Add alienware-wmi.h Date: Fri, 7 Feb 2025 10:46:06 -0500 Message-ID: <20250207154610.13675-11-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add a header file for alienware-wmi with shared resources to support the upcoming file split. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- .../platform/x86/dell/alienware-wmi-base.c | 100 ++++-------------- drivers/platform/x86/dell/alienware-wmi.h | 92 ++++++++++++++++ 2 files changed, 114 insertions(+), 78 deletions(-) create mode 100644 drivers/platform/x86/dell/alienware-wmi.h diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platform/x86/dell/alienware-wmi-base.c index c575b82f11df..124969e13ec4 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -17,10 +17,7 @@ #include #include #include - -#define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" -#define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" -#define WMAX_CONTROL_GUID "A70591CE-A997-11DA-B012-B622A1EF5492" +#include "alienware-wmi.h" #define WMAX_METHOD_HDMI_SOURCE 0x1 #define WMAX_METHOD_HDMI_STATUS 0x2 @@ -50,23 +47,6 @@ static bool force_gmode; module_param_unsafe(force_gmode, bool, 0); MODULE_PARM_DESC(force_gmode, "Forces G-Mode when performance profile is selected"); -enum INTERFACE_FLAGS { - LEGACY, - WMAX, -}; - -enum LEGACY_CONTROL_STATES { - LEGACY_RUNNING = 1, - LEGACY_BOOTING = 0, - LEGACY_SUSPEND = 3, -}; - -enum WMAX_CONTROL_STATES { - WMAX_RUNNING = 0xFF, - WMAX_BOOTING = 0, - WMAX_SUSPEND = 3, -}; - enum WMAX_THERMAL_INFORMATION_OPERATIONS { WMAX_OPERATION_SYS_DESCRIPTION = 0x02, WMAX_OPERATION_LIST_IDS = 0x03, @@ -114,15 +94,7 @@ static const enum platform_profile_option wmax_mode_to_platform_profile[THERMAL_ [THERMAL_MODE_BASIC_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, }; -struct alienfx_quirks { - u8 num_zones; - bool hdmi_mux; - bool amplifier; - bool deepslp; -}; - -static struct alienfx_quirks *alienfx; - +struct alienfx_quirks *alienfx; static struct alienfx_quirks quirk_inspiron5675 = { .num_zones = 2, @@ -246,12 +218,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { {} }; -struct color_platform { - u8 blue; - u8 green; - u8 red; -} __packed; - struct wmax_brightness_args { u32 led_mask; u32 percentage; @@ -286,27 +252,7 @@ struct awcc_priv { enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; }; -struct alienfx_priv { - struct platform_device *pdev; - struct led_classdev global_led; - struct color_platform colors[4]; - u8 global_brightness; - u8 lighting_control_state; -}; - -struct alienfx_ops { - int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, - u8 location); - int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, - u8 brightness); -}; - -struct alienfx_platdata { - struct wmi_device *wdev; - struct alienfx_ops ops; -}; - -static u8 interface; +u8 alienware_interface; struct awcc_quirks { bool pprof; @@ -418,8 +364,8 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = { 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) +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 = {ACPI_ALLOCATE_BUFFER, NULL}; struct acpi_buffer in = {in_size, in_args}; @@ -583,7 +529,7 @@ static ssize_t lighting_control_state_store(struct device *dev, val = LEGACY_BOOTING; else if (strcmp(buf, "suspend\n") == 0) val = LEGACY_SUSPEND; - else if (interface == LEGACY) + else if (alienware_interface == LEGACY) val = LEGACY_RUNNING; else val = WMAX_RUNNING; @@ -731,7 +677,7 @@ static DEVICE_ATTR_RW(source); static bool hdmi_group_visible(struct kobject *kobj) { - return interface == WMAX && alienfx->hdmi_mux; + return alienware_interface == WMAX && alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); @@ -741,7 +687,7 @@ static struct attribute *hdmi_attrs[] = { NULL, }; -static const struct attribute_group hdmi_attribute_group = { +const struct attribute_group wmax_hdmi_attribute_group = { .name = "hdmi", .is_visible = SYSFS_GROUP_VISIBLE(hdmi), .attrs = hdmi_attrs, @@ -779,7 +725,7 @@ static DEVICE_ATTR_RO(status); static bool amplifier_group_visible(struct kobject *kobj) { - return interface == WMAX && alienfx->amplifier; + return alienware_interface == WMAX && alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); @@ -788,7 +734,7 @@ static struct attribute *amplifier_attrs[] = { NULL, }; -static const struct attribute_group amplifier_attribute_group = { +const struct attribute_group wmax_amplifier_attribute_group = { .name = "amplifier", .is_visible = SYSFS_GROUP_VISIBLE(amplifier), .attrs = amplifier_attrs, @@ -850,7 +796,7 @@ static DEVICE_ATTR_RW(deepsleep); static bool deepsleep_group_visible(struct kobject *kobj) { - return interface == WMAX && alienfx->deepslp; + return alienware_interface == WMAX && alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); @@ -859,7 +805,7 @@ static struct attribute *deepsleep_attrs[] = { NULL, }; -static const struct attribute_group deepsleep_attribute_group = { +const struct attribute_group wmax_deepsleep_attribute_group = { .name = "deepsleep", .is_visible = SYSFS_GROUP_VISIBLE(deepsleep), .attrs = deepsleep_attrs, @@ -1114,7 +1060,7 @@ static int alienfx_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; - if (interface == WMAX) + if (alienware_interface == WMAX) priv->lighting_control_state = WMAX_RUNNING; else priv->lighting_control_state = LEGACY_RUNNING; @@ -1132,9 +1078,7 @@ static int alienfx_probe(struct platform_device *pdev) static const struct attribute_group *alienfx_groups[] = { &zone_attribute_group, - &hdmi_attribute_group, - &lifier_attribute_group, - &deepsleep_attribute_group, + WMAX_DEV_GROUPS NULL }; @@ -1153,7 +1097,7 @@ static void alienware_alienfx_remove(void *data) platform_device_unregister(pdev); } -static int alienware_alienfx_setup(struct alienfx_platdata *pdata) +int alienware_alienfx_setup(struct alienfx_platdata *pdata) { struct device *dev = &pdata->wdev->dev; struct platform_device *pdev; @@ -1240,12 +1184,12 @@ static struct wmi_driver alienware_legacy_wmi_driver = { .no_singleton = true, }; -static int __init alienware_legacy_wmi_init(void) +int __init alienware_legacy_wmi_init(void) { return wmi_driver_register(&alienware_legacy_wmi_driver); } -static void __exit alienware_legacy_wmi_exit(void) +void __exit alienware_legacy_wmi_exit(void) { wmi_driver_unregister(&alienware_legacy_wmi_driver); } @@ -1313,7 +1257,7 @@ static struct wmi_driver alienware_wmax_wmi_driver = { .no_singleton = true, }; -static int __init alienware_wmax_wmi_init(void) +int __init alienware_wmax_wmi_init(void) { const struct dmi_system_id *id; @@ -1338,7 +1282,7 @@ static int __init alienware_wmax_wmi_init(void) return wmi_driver_register(&alienware_wmax_wmi_driver); } -static void __exit alienware_wmax_wmi_exit(void) +void __exit alienware_wmax_wmi_exit(void) { wmi_driver_unregister(&alienware_wmax_wmi_driver); } @@ -1356,10 +1300,10 @@ static int __init alienware_wmi_init(void) return ret; if (wmi_has_guid(WMAX_CONTROL_GUID)) { - interface = WMAX; + alienware_interface = WMAX; ret = alienware_wmax_wmi_init(); } else { - interface = LEGACY; + alienware_interface = LEGACY; ret = alienware_legacy_wmi_init(); } @@ -1373,7 +1317,7 @@ module_init(alienware_wmi_init); static void __exit alienware_wmi_exit(void) { - if (interface == WMAX) + if (alienware_interface == WMAX) alienware_wmax_wmi_exit(); else alienware_legacy_wmi_exit(); diff --git a/drivers/platform/x86/dell/alienware-wmi.h b/drivers/platform/x86/dell/alienware-wmi.h new file mode 100644 index 000000000000..b950c91e1979 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -0,0 +1,92 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Alienware WMI special features driver + * + * Copyright (C) 2014 Dell Inc + * Copyright (C) 2024 Kurt Borja + */ + +#ifndef _ALIENWARE_WMI_H_ +#define _ALIENWARE_WMI_H_ + +#include +#include +#include + +#define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" +#define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" +#define WMAX_CONTROL_GUID "A70591CE-A997-11DA-B012-B622A1EF5492" + +enum INTERFACE_FLAGS { + LEGACY, + WMAX, +}; + +enum LEGACY_CONTROL_STATES { + LEGACY_RUNNING = 1, + LEGACY_BOOTING = 0, + LEGACY_SUSPEND = 3, +}; + +enum WMAX_CONTROL_STATES { + WMAX_RUNNING = 0xFF, + WMAX_BOOTING = 0, + WMAX_SUSPEND = 3, +}; + +struct alienfx_quirks { + u8 num_zones; + bool hdmi_mux; + bool amplifier; + bool deepslp; +}; + +struct color_platform { + u8 blue; + u8 green; + u8 red; +} __packed; + +struct alienfx_priv { + struct platform_device *pdev; + struct led_classdev global_led; + struct color_platform colors[4]; + u8 global_brightness; + u8 lighting_control_state; +}; + +struct alienfx_ops { + int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 location); + int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 brightness); +}; + +struct alienfx_platdata { + struct wmi_device *wdev; + struct alienfx_ops ops; +}; + +extern u8 alienware_interface; +extern struct alienfx_quirks *alienfx; + +int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, + void *in_args, size_t in_size, u32 *out_data); + +int alienware_alienfx_setup(struct alienfx_platdata *pdata); + +int __init alienware_legacy_wmi_init(void); +void __exit alienware_legacy_wmi_exit(void); + +extern const struct attribute_group wmax_hdmi_attribute_group; +extern const struct attribute_group wmax_amplifier_attribute_group; +extern const struct attribute_group wmax_deepsleep_attribute_group; + +#define WMAX_DEV_GROUPS &wmax_hdmi_attribute_group, \ + &wmax_amplifier_attribute_group, \ + &wmax_deepsleep_attribute_group, + +int __init alienware_wmax_wmi_init(void); +void __exit alienware_wmax_wmi_exit(void); + +#endif From patchwork Fri Feb 7 15:46:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965348 Received: from mail-vs1-f42.google.com (mail-vs1-f42.google.com [209.85.217.42]) (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 C71BD2253A2; Fri, 7 Feb 2025 15:47:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943238; cv=none; b=qLtFDHsPLj98HQpb9SgMOab5VN9bwudHqZ32ZiueLIgr49OgQgyJ+fruuhMbxIy/4X2D9WrPAiowr7+nMR79OrGRO2ojbNI59qZpl3nrWJTXbYCP5+PLJpQp0mXu+f+J8sg9s3s68gfSFK1SjtOhI6T3SZGZhuL3s4sI5ddTzVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943238; c=relaxed/simple; bh=ZoYP3YJJPb0Z4bHpgqXmkDosuAI3v+iXt9GlTY9QVBk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m77aG+Z69b4publOAU8FZJ4sXw5NUuoCZGcIWwYfae2fyc18NgV1OGV5UHQrfzm0qRp2EpuhPGfRzMZVSaB6SUDbxipOuYu5bWxVa3DClB5OY9KhhOhntgG5ef1HIubCmqqfTRBcdrUbov3I4cdmCySSsOkjAO4ZZN6EzXUs5dw= 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=QBAx6Yo6; arc=none smtp.client-ip=209.85.217.42 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="QBAx6Yo6" Received: by mail-vs1-f42.google.com with SMTP id ada2fe7eead31-4aff31b77e8so711282137.1; Fri, 07 Feb 2025 07:47:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943233; x=1739548033; 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=NhLIskOTeE54aDcPYyFmvLTK7sGgODnr4d/ZwFsIdLE=; b=QBAx6Yo6jtSY5UyGvEngg5ynVO52BrTega3Lkx/xwize+Mx05NxYhLDw4q+o1dvKPR sGrRBs0AbncfIrIExXWyxdqERGLrZQblB2R4u2DO1QcsvqrL9oTSX8qZILI7Nv4ZSu3h 0FrY020VLVGykpeC4J7eMrHtSIMJbzy3wTJiGOnz+W7qWX48CbFcp+dpDfanIKuHfhyl OXfptXGnD45XIMlEJ6khJIzRdf1NnQpQDh5OavxgcTOikxOsgopgLV31IOsb4iOsa1Cx cXCcLidYRBcxL7H2cqG3poWDrE/UJ3u9Oas4obUl3hGfsc2HEt0YdpSZhYkDPNkyz6KH S/xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943233; x=1739548033; 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=NhLIskOTeE54aDcPYyFmvLTK7sGgODnr4d/ZwFsIdLE=; b=MdHQTbxcVWLAnU/09Ybxvq8hUfv7vlQK55WXwYo+cMMxREf7/xdvEJ2w7cpADlV/T+ fn+h9vSl5OJMVKhFf3htbY6rUjIUz6fCNLhyuD79+wWd2CvoS7YaOPzhv+rWmtcIkyGa UmcY2kt0jGXiGgodTX9bVlbdLTWgRS/69O0P7oUWIqrVqjrYJA2XLx/shB4H/XI8LWmE n68MCfFuVjs6ALmvgVfCdx/qZqUA0AwouqiJwKG1dkN/rcAx6e4jScFd2J15g6yultC8 xCkuHp1LTdtNJ5Xuc9BDU7T59l5HEQPlOZvSJlzJGxqDDF4qnAYaCgwqYEt4aQNFr0+x B/cA== X-Forwarded-Encrypted: i=1; AJvYcCXmjMmdKpeypo7z3dg9gQZarrYiBHZIO4nnd/BrA6w6IUah45wdrmdttZk2xLeLBCH6xhr3En3pP1NDyYo=@vger.kernel.org X-Gm-Message-State: AOJu0YwgY+6TRoi1w6zX7A7OZJz3Qtm1JQN9I14rYTqSBZ/iSIMWmpR6 Ho4FEAOvtSF3nQxhrJH4Xyr5NbyCLpqVkm1R61sslypjh7I7+jbqLY6tkw== X-Gm-Gg: ASbGnctjDMNSaUWfVZLQ39VLH1/NRB6G61/iJZPDT0WP9vU88Jplmr6YejWKJBKi16Q 2BoH5N9AQc+1DVTLl9bFtAsWBYJ35WykshNteRCTyJgyiZiskJkab8sqj+qK+HEWr4MKLMWWbx3 AML/wiKUsSyrO3Y0wOBXHRTN/l7kXDLjhxltRPYgqFbwwE758djf8Hg097bCnuaFKlyafJa/R8f xNDZvUedmTwQPWhUFNMfYzdG9XuJgSfBTuEniXuo1udg4/NGQiAm1zI4EJ0ReNVRNjZKQRJbe8Q 47ZB3O1iIqUQyQB5NZKdTqA= X-Google-Smtp-Source: AGHT+IGerlTfQs8+9vzmFU3vbiYBSol+1oRvxfB5QsOgheF4Hp8iwHSRVPdaG2EWiFHkQA3ZonSbFQ== X-Received: by 2002:a05:6102:2d08:b0:4a3:ab95:9637 with SMTP id ada2fe7eead31-4ba85e4148emr3239851137.12.1738943232887; Fri, 07 Feb 2025 07:47:12 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:11 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 11/14] platform/x86: Split the alienware-wmi driver Date: Fri, 7 Feb 2025 10:46:07 -0500 Message-ID: <20250207154610.13675-12-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Split alienware-wmi WMI drivers into different files. This is done seamlessly by copying and pasting, however some blocks are reordered. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/Makefile | 2 + .../platform/x86/dell/alienware-wmi-base.c | 839 ------------------ .../platform/x86/dell/alienware-wmi-legacy.c | 95 ++ .../platform/x86/dell/alienware-wmi-wmax.c | 768 ++++++++++++++++ 4 files changed, 865 insertions(+), 839 deletions(-) create mode 100644 drivers/platform/x86/dell/alienware-wmi-legacy.c create mode 100644 drivers/platform/x86/dell/alienware-wmi-wmax.c diff --git a/drivers/platform/x86/dell/Makefile b/drivers/platform/x86/dell/Makefile index f8aec8502c2f..03ba459f3d31 100644 --- a/drivers/platform/x86/dell/Makefile +++ b/drivers/platform/x86/dell/Makefile @@ -6,6 +6,8 @@ obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o alienware-wmi-objs := alienware-wmi-base.o +alienware-wmi-y += alienware-wmi-legacy.o +alienware-wmi-y += alienware-wmi-wmax.o obj-$(CONFIG_DCDBAS) += dcdbas.o obj-$(CONFIG_DELL_LAPTOP) += dell-laptop.o obj-$(CONFIG_DELL_RBTN) += dell-rbtn.o diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platform/x86/dell/alienware-wmi-base.c index 124969e13ec4..7bad9717183d 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -8,92 +8,17 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include -#include -#include #include #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_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"); -static bool force_platform_profile; -module_param_unsafe(force_platform_profile, bool, 0); -MODULE_PARM_DESC(force_platform_profile, "Forces auto-detecting thermal profiles 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 selected"); - -enum WMAX_THERMAL_INFORMATION_OPERATIONS { - WMAX_OPERATION_SYS_DESCRIPTION = 0x02, - WMAX_OPERATION_LIST_IDS = 0x03, - WMAX_OPERATION_CURRENT_PROFILE = 0x0B, -}; - -enum WMAX_THERMAL_CONTROL_OPERATIONS { - WMAX_OPERATION_ACTIVATE_PROFILE = 0x01, -}; - -enum WMAX_GAME_SHIFT_STATUS_OPERATIONS { - WMAX_OPERATION_TOGGLE_GAME_SHIFT = 0x01, - WMAX_OPERATION_GET_GAME_SHIFT_STATUS = 0x02, -}; - -enum WMAX_THERMAL_TABLES { - WMAX_THERMAL_TABLE_BASIC = 0x90, - WMAX_THERMAL_TABLE_USTT = 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[THERMAL_MODE_LAST] = { - [THERMAL_MODE_USTT_BALANCED] = PLATFORM_PROFILE_BALANCED, - [THERMAL_MODE_USTT_BALANCED_PERFORMANCE] = PLATFORM_PROFILE_BALANCED_PERFORMANCE, - [THERMAL_MODE_USTT_COOL] = PLATFORM_PROFILE_COOL, - [THERMAL_MODE_USTT_QUIET] = PLATFORM_PROFILE_QUIET, - [THERMAL_MODE_USTT_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, - [THERMAL_MODE_USTT_LOW_POWER] = PLATFORM_PROFILE_LOW_POWER, - [THERMAL_MODE_BASIC_QUIET] = PLATFORM_PROFILE_QUIET, - [THERMAL_MODE_BASIC_BALANCED] = PLATFORM_PROFILE_BALANCED, - [THERMAL_MODE_BASIC_BALANCED_PERFORMANCE] = PLATFORM_PROFILE_BALANCED_PERFORMANCE, - [THERMAL_MODE_BASIC_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, -}; - struct alienfx_quirks *alienfx; static struct alienfx_quirks quirk_inspiron5675 = { @@ -218,152 +143,8 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { {} }; -struct wmax_brightness_args { - u32 led_mask; - u32 percentage; -}; - -struct wmax_basic_args { - u8 arg; -}; - -struct legacy_led_args { - struct color_platform colors; - u8 brightness; - u8 state; -} __packed; - -struct wmax_led_args { - u32 led_mask; - struct color_platform colors; - u8 state; -} __packed; - -struct wmax_u32_args { - u8 operation; - u8 arg1; - u8 arg2; - u8 arg3; -}; - -struct awcc_priv { - struct wmi_device *wdev; - struct device *ppdev; - enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; -}; - u8 alienware_interface; -struct awcc_quirks { - bool pprof; - bool gmode; -}; - -static struct awcc_quirks g_series_quirks = { - .pprof = true, - .gmode = true, -}; - -static struct awcc_quirks generic_quirks = { - .pprof = true, - .gmode = false, -}; - -static struct awcc_quirks empty_quirks; - -static const struct dmi_system_id awcc_dmi_table[] __initconst = { - { - .ident = "Alienware m16 R1 AMD", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware m17 R5", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware m18 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware x15 R1", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware x17 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Dell Inc. G15 5510", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G15 5511", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G15 5515", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G3 3500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G3 3590", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G5 5500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), - }, - .driver_data = &g_series_quirks, - }, -}; - -static struct awcc_quirks *awcc; - int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, void *in_args, size_t in_size, u32 *out_data) { @@ -599,456 +380,6 @@ static enum led_brightness global_led_get(struct led_classdev *led_cdev) return priv->global_brightness; } -/* - * 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 *attr, - char *buf) -{ - struct alienfx_platdata *pdata = dev_get_platdata(dev); - struct wmax_basic_args in_args = { - .arg = 0, - }; - u32 out_data; - int ret; - - ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data == 0) - return sysfs_emit(buf, "[unconnected] connected unknown\n"); - else if (out_data == 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 *attr, - char *buf) -{ - struct alienfx_platdata *pdata = dev_get_platdata(dev); - struct wmax_basic_args in_args = { - .arg = 0, - }; - u32 out_data; - int ret; - - ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data == 1) - return sysfs_emit(buf, "[input] gpu unknown\n"); - else if (out_data == 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 *attr, - const char *buf, size_t count) -{ - struct alienfx_platdata *pdata = dev_get_platdata(dev); - struct wmax_basic_args args; - int ret; - - if (strcmp(buf, "gpu\n") == 0) - args.arg = 1; - else if (strcmp(buf, "input\n") == 0) - args.arg = 2; - else - args.arg = 3; - pr_debug("alienware-wmi: setting hdmi to %d : %s", args.arg, buf); - - ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_SOURCE, &args, - sizeof(args), NULL); - if (ret < 0) - pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", ret); - - return count; -} - -static DEVICE_ATTR_RO(cable); -static DEVICE_ATTR_RW(source); - -static bool hdmi_group_visible(struct kobject *kobj) -{ - return alienware_interface == WMAX && alienfx->hdmi_mux; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); - -static struct attribute *hdmi_attrs[] = { - &dev_attr_cable.attr, - &dev_attr_source.attr, - NULL, -}; - -const struct attribute_group wmax_hdmi_attribute_group = { - .name = "hdmi", - .is_visible = SYSFS_GROUP_VISIBLE(hdmi), - .attrs = 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 *attr, - char *buf) -{ - struct alienfx_platdata *pdata = dev_get_platdata(dev); - struct wmax_basic_args in_args = { - .arg = 0, - }; - u32 out_data; - int ret; - - ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_AMPLIFIER_CABLE, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data == 0) - return sysfs_emit(buf, "[unconnected] connected unknown\n"); - else if (out_data == 1) - return sysfs_emit(buf, "unconnected [connected] unknown\n"); - } - - pr_err("alienware-wmi: unknown amplifier cable status: %d\n", ret); - return sysfs_emit(buf, "unconnected connected [unknown]\n"); -} - -static DEVICE_ATTR_RO(status); - -static bool amplifier_group_visible(struct kobject *kobj) -{ - return alienware_interface == WMAX && alienfx->amplifier; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); - -static struct attribute *amplifier_attrs[] = { - &dev_attr_status.attr, - NULL, -}; - -const struct attribute_group wmax_amplifier_attribute_group = { - .name = "amplifier", - .is_visible = SYSFS_GROUP_VISIBLE(amplifier), - .attrs = amplifier_attrs, -}; - -/* - * Deep Sleep Control support - * - Modifies BIOS setting for deep sleep control allowing extra wakeup events - */ -static ssize_t deepsleep_show(struct device *dev, struct device_attribute *attr, - char *buf) -{ - struct alienfx_platdata *pdata = dev_get_platdata(dev); - struct wmax_basic_args in_args = { - .arg = 0, - }; - u32 out_data; - int ret; - - ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_STATUS, - &in_args, sizeof(in_args), &out_data); - if (!ret) { - if (out_data == 0) - return sysfs_emit(buf, "[disabled] s5 s5_s4\n"); - else if (out_data == 1) - return sysfs_emit(buf, "disabled [s5] s5_s4\n"); - else if (out_data == 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 = dev_get_platdata(dev); - struct wmax_basic_args args; - int ret; - - if (strcmp(buf, "disabled\n") == 0) - args.arg = 0; - else if (strcmp(buf, "s5\n") == 0) - args.arg = 1; - else - args.arg = 2; - pr_debug("alienware-wmi: setting deep sleep to %d : %s", args.arg, buf); - - ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_CONTROL, - &args, sizeof(args), NULL); - if (!ret) - pr_err("alienware-wmi: deep sleep control failed: results: %u\n", ret); - - return count; -} - -static DEVICE_ATTR_RW(deepsleep); - -static bool deepsleep_group_visible(struct kobject *kobj) -{ - return alienware_interface == WMAX && alienfx->deepslp; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); - -static struct attribute *deepsleep_attrs[] = { - &dev_attr_deepsleep.attr, - NULL, -}; - -const struct attribute_group wmax_deepsleep_attribute_group = { - .name = "deepsleep", - .is_visible = SYSFS_GROUP_VISIBLE(deepsleep), - .attrs = 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) >= THERMAL_MODE_LAST) - return false; - - if ((code & WMAX_THERMAL_TABLE_MASK) == WMAX_THERMAL_TABLE_BASIC && - (code & WMAX_THERMAL_MODE_MASK) >= THERMAL_MODE_BASIC_QUIET) - return true; - - if ((code & WMAX_THERMAL_TABLE_MASK) == WMAX_THERMAL_TABLE_USTT && - (code & WMAX_THERMAL_MODE_MASK) <= 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 = { - .operation = operation, - .arg1 = arg, - .arg2 = 0, - .arg3 = 0, - }; - int ret; - - ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, - &in_args, sizeof(in_args), out_data); - if (ret < 0) - return ret; - - if (*out_data == WMAX_FAILURE_CODE) - return -EBADRQC; - - return 0; -} - -static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) -{ - struct wmax_u32_args in_args = { - .operation = WMAX_OPERATION_ACTIVATE_PROFILE, - .arg1 = profile, - .arg2 = 0, - .arg3 = 0, - }; - u32 out_data; - int ret; - - ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, - &in_args, sizeof(in_args), &out_data); - if (ret) - return ret; - - if (out_data == 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 = { - .operation = operation, - .arg1 = 0, - .arg2 = 0, - .arg3 = 0, - }; - int ret; - - ret = alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, - &in_args, sizeof(in_args), out_data); - if (ret < 0) - return ret; - - if (*out_data == WMAX_FAILURE_CODE) - return -EOPNOTSUPP; - - return 0; -} - -static int thermal_profile_get(struct device *dev, - enum platform_profile_option *profile) -{ - struct awcc_priv *priv = dev_get_drvdata(dev); - u32 out_data; - int ret; - - ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFILE, - 0, &out_data); - - if (ret < 0) - return ret; - - if (out_data == WMAX_THERMAL_MODE_GMODE) { - *profile = PLATFORM_PROFILE_PERFORMANCE; - return 0; - } - - if (!is_wmax_thermal_code(out_data)) - return -ENODATA; - - out_data &= WMAX_THERMAL_MODE_MASK; - *profile = 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 = dev_get_drvdata(dev); - - if (awcc->gmode) { - u32 gmode_status; - int ret; - - ret = wmax_game_shift_status(priv->wdev, - WMAX_OPERATION_GET_GAME_SHIFT_STATUS, - &gmode_status); - - if (ret < 0) - return ret; - - if ((profile == PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || - (profile != PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { - ret = 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 = drvdata; - enum wmax_thermal_mode mode; - u8 sys_desc[4]; - u32 first_mode; - u32 out_data; - int ret; - - ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_SYS_DESCRIPTION, - 0, (u32 *) &sys_desc); - if (ret < 0) - return ret; - - first_mode = sys_desc[0] + sys_desc[1]; - - for (u32 i = 0; i < sys_desc[3]; i++) { - ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_LIST_IDS, - i + first_mode, &out_data); - - if (ret == -EIO) - return ret; - - if (ret == -EBADRQC) - break; - - if (!is_wmax_thermal_code(out_data)) - continue; - - mode = out_data & WMAX_THERMAL_MODE_MASK; - profile = wmax_mode_to_platform_profile[mode]; - priv->supported_thermal_profiles[profile] = 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] = - WMAX_THERMAL_MODE_GMODE; - - set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); - } - - return 0; -} - -static const struct platform_profile_ops awcc_platform_profile_ops = { - .probe = thermal_profile_probe, - .profile_get = thermal_profile_get, - .profile_set = thermal_profile_set, -}; - -static int awcc_platform_profile_init(struct wmi_device *wdev) -{ - struct awcc_priv *priv = dev_get_drvdata(&wdev->dev); - - priv->ppdev = 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 = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - priv->wdev = wdev; - dev_set_drvdata(&wdev->dev, priv); - - if (awcc->pprof) { - ret = awcc_platform_profile_init(wdev); - if (ret) - return ret; - } - - return 0; -} - /* * Platform Driver */ @@ -1117,176 +448,6 @@ int alienware_alienfx_setup(struct alienfx_platdata *pdata) return 0; } -/* - * 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 = { - .colors = priv->colors[location], - .brightness = priv->global_brightness, - .state = 0, - }; - struct acpi_buffer input; - acpi_status status; - - if (legacy_args.state != LEGACY_RUNNING) { - legacy_args.state = priv->lighting_control_state; - - input.length = sizeof(legacy_args); - input.pointer = &legacy_args; - - status = 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 = { - .wdev = wdev, - .ops = { - .upd_led = legacy_wmi_update_led, - .upd_brightness = legacy_wmi_update_brightness, - }, - }; - - return alienware_alienfx_setup(&pdata); -} - -static const struct wmi_device_id alienware_legacy_device_id_table[] = { - { LEGACY_CONTROL_GUID, NULL }, - { }, -}; -MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table); - -static struct wmi_driver alienware_legacy_wmi_driver = { - .driver = { - .name = "alienware-wmi-alienfx", - .probe_type = PROBE_PREFER_ASYNCHRONOUS, - }, - .id_table = alienware_legacy_device_id_table, - .probe = legacy_wmi_probe, - .no_singleton = 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 = { - .led_mask = 1 << location, - .colors = priv->colors[location], - .state = 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 = { - .led_mask = 0xFF, - .percentage = 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 = { - .wdev = wdev, - .ops = { - .upd_led = wmax_wmi_update_led, - .upd_brightness = wmax_wmi_update_brightness, - }, - }; - int ret; - - if (awcc) - ret = alienware_awcc_setup(wdev); - else - ret = alienware_alienfx_setup(&pdata); - - return ret; -} - -static const struct wmi_device_id alienware_wmax_device_id_table[] = { - { WMAX_CONTROL_GUID, NULL }, - { }, -}; -MODULE_DEVICE_TABLE(wmi, alienware_wmax_device_id_table); - -static struct wmi_driver alienware_wmax_wmi_driver = { - .driver = { - .name = "alienware-wmi-wmax", - .probe_type = PROBE_PREFER_ASYNCHRONOUS, - }, - .id_table = alienware_wmax_device_id_table, - .probe = wmax_wmi_probe, - .no_singleton = true, -}; - -int __init alienware_wmax_wmi_init(void) -{ - const struct dmi_system_id *id; - - id = dmi_first_match(awcc_dmi_table); - if (id) - awcc = id->driver_data; - - if (force_platform_profile) { - if (!awcc) - awcc = &empty_quirks; - - awcc->pprof = true; - } - - if (force_gmode) { - if (awcc) - awcc->gmode = true; - else - pr_warn("force_gmode requires platform profile support\n"); - } - - return wmi_driver_register(&alienware_wmax_wmi_driver); -} - -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/platform/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 = { + .colors = priv->colors[location], + .brightness = priv->global_brightness, + .state = 0, + }; + struct acpi_buffer input; + acpi_status status; + + if (legacy_args.state != LEGACY_RUNNING) { + legacy_args.state = priv->lighting_control_state; + + input.length = sizeof(legacy_args); + input.pointer = &legacy_args; + + status = 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 = { + .wdev = wdev, + .ops = { + .upd_led = legacy_wmi_update_led, + .upd_brightness = legacy_wmi_update_brightness, + }, + }; + + return alienware_alienfx_setup(&pdata); +} + +static const struct wmi_device_id alienware_legacy_device_id_table[] = { + { LEGACY_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_legacy_device_id_table); + +static struct wmi_driver alienware_legacy_wmi_driver = { + .driver = { + .name = "alienware-wmi-alienfx", + .probe_type = PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table = alienware_legacy_device_id_table, + .probe = legacy_wmi_probe, + .no_singleton = 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/platform/x86/dell/alienware-wmi-wmax.c new file mode 100644 index 000000000000..3d3014b5adf0 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c @@ -0,0 +1,768 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Alienware WMAX WMI device driver + * + * Copyright (C) 2014 Dell Inc + * Copyright (C) 2025 Kurt Borja + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include +#include +#include +#include +#include +#include +#include "alienware-wmi.h" + +#define WMAX_METHOD_HDMI_SOURCE 0x1 +#define WMAX_METHOD_HDMI_STATUS 0x2 +#define WMAX_METHOD_HDMI_CABLE 0x5 +#define WMAX_METHOD_AMPLIFIER_CABLE 0x6 +#define WMAX_METHOD_DEEP_SLEEP_CONTROL 0x0B +#define WMAX_METHOD_DEEP_SLEEP_STATUS 0x0C +#define WMAX_METHOD_BRIGHTNESS 0x3 +#define WMAX_METHOD_ZONE_CONTROL 0x4 +#define WMAX_METHOD_THERMAL_INFORMATION 0x14 +#define WMAX_METHOD_THERMAL_CONTROL 0x15 +#define WMAX_METHOD_GAME_SHIFT_STATUS 0x25 + +#define WMAX_THERMAL_MODE_GMODE 0xAB + +#define WMAX_FAILURE_CODE 0xFFFFFFFF +#define WMAX_THERMAL_TABLE_MASK GENMASK(7, 4) +#define WMAX_THERMAL_MODE_MASK GENMASK(3, 0) +#define WMAX_SENSOR_ID_MASK BIT(8) + +static bool force_platform_profile; +module_param_unsafe(force_platform_profile, bool, 0); +MODULE_PARM_DESC(force_platform_profile, "Forces auto-detecting thermal profiles 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 selected"); + +struct awcc_quirks { + bool pprof; + bool gmode; +}; + +static struct awcc_quirks g_series_quirks = { + .pprof = true, + .gmode = true, +}; + +static struct awcc_quirks generic_quirks = { + .pprof = true, + .gmode = false, +}; + +static struct awcc_quirks empty_quirks; + +static const struct dmi_system_id awcc_dmi_table[] __initconst = { + { + .ident = "Alienware m16 R1 AMD", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m17 R5", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m18 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x15 R1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x17 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Dell Inc. G15 5510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5511", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5515", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3590", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G5 5500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data = &g_series_quirks, + }, +}; + +enum WMAX_THERMAL_INFORMATION_OPERATIONS { + WMAX_OPERATION_SYS_DESCRIPTION = 0x02, + WMAX_OPERATION_LIST_IDS = 0x03, + WMAX_OPERATION_CURRENT_PROFILE = 0x0B, +}; + +enum WMAX_THERMAL_CONTROL_OPERATIONS { + WMAX_OPERATION_ACTIVATE_PROFILE = 0x01, +}; + +enum WMAX_GAME_SHIFT_STATUS_OPERATIONS { + WMAX_OPERATION_TOGGLE_GAME_SHIFT = 0x01, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS = 0x02, +}; + +enum WMAX_THERMAL_TABLES { + WMAX_THERMAL_TABLE_BASIC = 0x90, + WMAX_THERMAL_TABLE_USTT = 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[THERMAL_MODE_LAST] = { + [THERMAL_MODE_USTT_BALANCED] = PLATFORM_PROFILE_BALANCED, + [THERMAL_MODE_USTT_BALANCED_PERFORMANCE] = PLATFORM_PROFILE_BALANCED_PERFORMANCE, + [THERMAL_MODE_USTT_COOL] = PLATFORM_PROFILE_COOL, + [THERMAL_MODE_USTT_QUIET] = PLATFORM_PROFILE_QUIET, + [THERMAL_MODE_USTT_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, + [THERMAL_MODE_USTT_LOW_POWER] = PLATFORM_PROFILE_LOW_POWER, + [THERMAL_MODE_BASIC_QUIET] = PLATFORM_PROFILE_QUIET, + [THERMAL_MODE_BASIC_BALANCED] = PLATFORM_PROFILE_BALANCED, + [THERMAL_MODE_BASIC_BALANCED_PERFORMANCE] = PLATFORM_PROFILE_BALANCED_PERFORMANCE, + [THERMAL_MODE_BASIC_PERFORMANCE] = 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 *attr, + char *buf) +{ + struct alienfx_platdata *pdata = dev_get_platdata(dev); + struct wmax_basic_args in_args = { + .arg = 0, + }; + u32 out_data; + int ret; + + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data == 0) + return sysfs_emit(buf, "[unconnected] connected unknown\n"); + else if (out_data == 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 *attr, + char *buf) +{ + struct alienfx_platdata *pdata = dev_get_platdata(dev); + struct wmax_basic_args in_args = { + .arg = 0, + }; + u32 out_data; + int ret; + + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data == 1) + return sysfs_emit(buf, "[input] gpu unknown\n"); + else if (out_data == 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 *attr, + const char *buf, size_t count) +{ + struct alienfx_platdata *pdata = dev_get_platdata(dev); + struct wmax_basic_args args; + int ret; + + if (strcmp(buf, "gpu\n") == 0) + args.arg = 1; + else if (strcmp(buf, "input\n") == 0) + args.arg = 2; + else + args.arg = 3; + pr_debug("alienware-wmi: setting hdmi to %d : %s", args.arg, buf); + + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_HDMI_SOURCE, &args, + sizeof(args), NULL); + if (ret < 0) + pr_err("alienware-wmi: HDMI toggle failed: results: %u\n", ret); + + return count; +} + +static DEVICE_ATTR_RO(cable); +static DEVICE_ATTR_RW(source); + +static bool hdmi_group_visible(struct kobject *kobj) +{ + return alienware_interface == WMAX && alienfx->hdmi_mux; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); + +static struct attribute *hdmi_attrs[] = { + &dev_attr_cable.attr, + &dev_attr_source.attr, + NULL, +}; + +const struct attribute_group wmax_hdmi_attribute_group = { + .name = "hdmi", + .is_visible = SYSFS_GROUP_VISIBLE(hdmi), + .attrs = 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 *attr, + char *buf) +{ + struct alienfx_platdata *pdata = dev_get_platdata(dev); + struct wmax_basic_args in_args = { + .arg = 0, + }; + u32 out_data; + int ret; + + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_AMPLIFIER_CABLE, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data == 0) + return sysfs_emit(buf, "[unconnected] connected unknown\n"); + else if (out_data == 1) + return sysfs_emit(buf, "unconnected [connected] unknown\n"); + } + + pr_err("alienware-wmi: unknown amplifier cable status: %d\n", ret); + return sysfs_emit(buf, "unconnected connected [unknown]\n"); +} + +static DEVICE_ATTR_RO(status); + +static bool amplifier_group_visible(struct kobject *kobj) +{ + return alienware_interface == WMAX && alienfx->amplifier; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); + +static struct attribute *amplifier_attrs[] = { + &dev_attr_status.attr, + NULL, +}; + +const struct attribute_group wmax_amplifier_attribute_group = { + .name = "amplifier", + .is_visible = SYSFS_GROUP_VISIBLE(amplifier), + .attrs = amplifier_attrs, +}; + +/* + * Deep Sleep Control support + * - Modifies BIOS setting for deep sleep control allowing extra wakeup events + */ +static ssize_t deepsleep_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct alienfx_platdata *pdata = dev_get_platdata(dev); + struct wmax_basic_args in_args = { + .arg = 0, + }; + u32 out_data; + int ret; + + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_STATUS, + &in_args, sizeof(in_args), &out_data); + if (!ret) { + if (out_data == 0) + return sysfs_emit(buf, "[disabled] s5 s5_s4\n"); + else if (out_data == 1) + return sysfs_emit(buf, "disabled [s5] s5_s4\n"); + else if (out_data == 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 = dev_get_platdata(dev); + struct wmax_basic_args args; + int ret; + + if (strcmp(buf, "disabled\n") == 0) + args.arg = 0; + else if (strcmp(buf, "s5\n") == 0) + args.arg = 1; + else + args.arg = 2; + pr_debug("alienware-wmi: setting deep sleep to %d : %s", args.arg, buf); + + ret = alienware_wmi_command(pdata->wdev, WMAX_METHOD_DEEP_SLEEP_CONTROL, + &args, sizeof(args), NULL); + if (!ret) + pr_err("alienware-wmi: deep sleep control failed: results: %u\n", ret); + + return count; +} + +static DEVICE_ATTR_RW(deepsleep); + +static bool deepsleep_group_visible(struct kobject *kobj) +{ + return alienware_interface == WMAX && alienfx->deepslp; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); + +static struct attribute *deepsleep_attrs[] = { + &dev_attr_deepsleep.attr, + NULL, +}; + +const struct attribute_group wmax_deepsleep_attribute_group = { + .name = "deepsleep", + .is_visible = SYSFS_GROUP_VISIBLE(deepsleep), + .attrs = deepsleep_attrs, +}; + +/* + * Thermal Profile control + * - Provides thermal profile control through the Platform Profile API + */ +static bool is_wmax_thermal_code(u32 code) +{ + if (code & WMAX_SENSOR_ID_MASK) + return false; + + if ((code & WMAX_THERMAL_MODE_MASK) >= THERMAL_MODE_LAST) + return false; + + if ((code & WMAX_THERMAL_TABLE_MASK) == WMAX_THERMAL_TABLE_BASIC && + (code & WMAX_THERMAL_MODE_MASK) >= THERMAL_MODE_BASIC_QUIET) + return true; + + if ((code & WMAX_THERMAL_TABLE_MASK) == WMAX_THERMAL_TABLE_USTT && + (code & WMAX_THERMAL_MODE_MASK) <= 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 = { + .operation = operation, + .arg1 = arg, + .arg2 = 0, + .arg3 = 0, + }; + int ret; + + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_INFORMATION, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; + + if (*out_data == WMAX_FAILURE_CODE) + return -EBADRQC; + + return 0; +} + +static int wmax_thermal_control(struct wmi_device *wdev, u8 profile) +{ + struct wmax_u32_args in_args = { + .operation = WMAX_OPERATION_ACTIVATE_PROFILE, + .arg1 = profile, + .arg2 = 0, + .arg3 = 0, + }; + u32 out_data; + int ret; + + ret = alienware_wmi_command(wdev, WMAX_METHOD_THERMAL_CONTROL, + &in_args, sizeof(in_args), &out_data); + if (ret) + return ret; + + if (out_data == 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 = { + .operation = operation, + .arg1 = 0, + .arg2 = 0, + .arg3 = 0, + }; + int ret; + + ret = alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); + if (ret < 0) + return ret; + + if (*out_data == WMAX_FAILURE_CODE) + return -EOPNOTSUPP; + + return 0; +} + +static int thermal_profile_get(struct device *dev, + enum platform_profile_option *profile) +{ + struct awcc_priv *priv = dev_get_drvdata(dev); + u32 out_data; + int ret; + + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_CURRENT_PROFILE, + 0, &out_data); + + if (ret < 0) + return ret; + + if (out_data == WMAX_THERMAL_MODE_GMODE) { + *profile = PLATFORM_PROFILE_PERFORMANCE; + return 0; + } + + if (!is_wmax_thermal_code(out_data)) + return -ENODATA; + + out_data &= WMAX_THERMAL_MODE_MASK; + *profile = 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 = dev_get_drvdata(dev); + + if (awcc->gmode) { + u32 gmode_status; + int ret; + + ret = wmax_game_shift_status(priv->wdev, + WMAX_OPERATION_GET_GAME_SHIFT_STATUS, + &gmode_status); + + if (ret < 0) + return ret; + + if ((profile == PLATFORM_PROFILE_PERFORMANCE && !gmode_status) || + (profile != PLATFORM_PROFILE_PERFORMANCE && gmode_status)) { + ret = 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 = drvdata; + enum wmax_thermal_mode mode; + u8 sys_desc[4]; + u32 first_mode; + u32 out_data; + int ret; + + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_SYS_DESCRIPTION, + 0, (u32 *) &sys_desc); + if (ret < 0) + return ret; + + first_mode = sys_desc[0] + sys_desc[1]; + + for (u32 i = 0; i < sys_desc[3]; i++) { + ret = wmax_thermal_information(priv->wdev, WMAX_OPERATION_LIST_IDS, + i + first_mode, &out_data); + + if (ret == -EIO) + return ret; + + if (ret == -EBADRQC) + break; + + if (!is_wmax_thermal_code(out_data)) + continue; + + mode = out_data & WMAX_THERMAL_MODE_MASK; + profile = wmax_mode_to_platform_profile[mode]; + priv->supported_thermal_profiles[profile] = 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] = + WMAX_THERMAL_MODE_GMODE; + + set_bit(PLATFORM_PROFILE_PERFORMANCE, choices); + } + + return 0; +} + +static const struct platform_profile_ops awcc_platform_profile_ops = { + .probe = thermal_profile_probe, + .profile_get = thermal_profile_get, + .profile_set = thermal_profile_set, +}; + +static int awcc_platform_profile_init(struct wmi_device *wdev) +{ + struct awcc_priv *priv = dev_get_drvdata(&wdev->dev); + + priv->ppdev = 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 = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->wdev = wdev; + dev_set_drvdata(&wdev->dev, priv); + + if (awcc->pprof) { + ret = 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 = { + .led_mask = 1 << location, + .colors = priv->colors[location], + .state = 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 = { + .led_mask = 0xFF, + .percentage = 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 = { + .wdev = wdev, + .ops = { + .upd_led = wmax_wmi_update_led, + .upd_brightness = wmax_wmi_update_brightness, + }, + }; + int ret; + + if (awcc) + ret = alienware_awcc_setup(wdev); + else + ret = alienware_alienfx_setup(&pdata); + + return ret; +} + +static const struct wmi_device_id alienware_wmax_device_id_table[] = { + { WMAX_CONTROL_GUID, NULL }, + { }, +}; +MODULE_DEVICE_TABLE(wmi, alienware_wmax_device_id_table); + +static struct wmi_driver alienware_wmax_wmi_driver = { + .driver = { + .name = "alienware-wmi-wmax", + .probe_type = PROBE_PREFER_ASYNCHRONOUS, + }, + .id_table = alienware_wmax_device_id_table, + .probe = wmax_wmi_probe, + .no_singleton = true, +}; + +int __init alienware_wmax_wmi_init(void) +{ + const struct dmi_system_id *id; + + id = dmi_first_match(awcc_dmi_table); + if (id) + awcc = id->driver_data; + + if (force_platform_profile) { + if (!awcc) + awcc = &empty_quirks; + + awcc->pprof = true; + } + + if (force_gmode) { + if (awcc) + awcc->gmode = true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + + return wmi_driver_register(&alienware_wmax_wmi_driver); +} + +void __exit alienware_wmax_wmi_exit(void) +{ + wmi_driver_unregister(&alienware_wmax_wmi_driver); +} From patchwork Fri Feb 7 15:46:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965349 Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) (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 CBE712253B9; Fri, 7 Feb 2025 15:47:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943239; cv=none; b=csu4CjtCpi8vSPJlUDGhs+8rQoadkfYTkfQzJoM1XaSXxtd75DCs/YQEqVmSO+E3CdSHEGDFMy6nYsTdZ0rIgPxc8VJ3UQLyX1tIzNVblb4ELSHZeK1dywOoE6raGZZ/7Yl2JALSHBMUrqxsoij8D0sC4P+z/1kHSjkq/D6hBgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943239; c=relaxed/simple; bh=FuBXIXgK5ndfxQCn2S+4A0NXk7qR5VltBqHb6gMI8Kg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HZkZKCNtpFKAAIP5Fgcsc6amYyyUMwZDkmn3uWQm8mHLHTDMCVQE5uvM5ilKJzBHcSmk/PewRrSQpJyGD2EdkXwwAW+1HG3APbBeO1WNdbqL4eIkZmMgjIzzN+nhTIrA4il2Klb8WHxbDzhSTiTA47/+1UrqtELtrSe77ic91Es= 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=BZMs5YvW; arc=none smtp.client-ip=209.85.217.46 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="BZMs5YvW" Received: by mail-vs1-f46.google.com with SMTP id ada2fe7eead31-4ba7ab22192so565373137.3; Fri, 07 Feb 2025 07:47:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943235; x=1739548035; 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=BZMs5YvWXonMwPq4DNPCXDwzqIdZbfYsRjW5vFnTflA3jv7iq2WnTfxvx8ahPHiEpd FZ2CWHzojAxlFcBiY3YGs6jjl9u4CZHvrX5p0u4TlvgHwxU52+tJPgAD+xfc3MVg9RQ2 EGEJNCXKwUSjPm9b+ToYw8r18DBG+JSvtzQj18TD4sv7qwonVNVSlrk9ecfIo5yGP9Q8 sw/i0n79NVofcfxRk3bOlrJnKuFYPg8+Y63JHia07cKnm9FzW8KWgeLNty9ZOmbx7jpi HiNte5ePWWJKu12u67YnMQ7FyUyaAprK4nFQcnTYunQJ9/MI0Q30NOiLEmbYxl1ZQmyO 6xUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943235; x=1739548035; 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=ed4pFUFDfaE9MShk20RiAgE9pHMLgr1Z3dZS7IznE3VLjHjr6zYgEx49h8fSDsHrY1 SnBfhpQbP3xW8HM6W8cZMv4E9EjhDmEOLGSYABes7U1eNgae6QGmP6OJ9uDqqHUYtfF0 fWlUOlCBeJssMunqIojpMXPdPAYa5k5E3Lj299HvV9g2i6Xo0Pq251OsBq4q7m+V/VO6 SdQedpCxkQ7K1Y5AnJn/VESuqv+EIWUc+7tIaLSvP8K/CCRtlTuP186GzDzkzXXutdrM 4Ycjx36wmTC9ht/O9T1//VJNm/BNZkfkE+K4WtVu58qydZi1BU6UrqrO+XBEtCqnM32R RkCg== X-Forwarded-Encrypted: i=1; AJvYcCUPgda6tp/Ux68cQP3QJBqQOxjJTUaSe7p8ORdnlx854LwDr527uCVW0JlhdfQeUOgYSyQdZsuOSzarEgs=@vger.kernel.org X-Gm-Message-State: AOJu0YwKnQWZ8OIIPfEZnNmO1qq46ug5ffoPEe7tGY4w2ZMOEQSKJbok Mu9GJcnY3uuvqRZID/Qnx8GqAquY5JhhpWwGtiU2fVxCENvY+sfCPdZaOQ== X-Gm-Gg: ASbGncuLUonYQHkYG76FOSsr6dSxEOH781HNGOCHcim+u7gG+woKqsRi1P3H7XDoT1e /N3oMOiYvXscTXb8MOHgyptDpr3ZRAXA2SBpagUtBIp8eJ3XxNtW/D1sadZggryslFHB2kWiPVE USnnsj55N3FqkPqZo8AVS8R5qC+xLLcWMTo+EIwXSGfArvuA2CHwLvodjQnYVWfu98LLtT3ZTpj 7EdopMPbVeHHiEcP8nhq1sqmnhnyqqDWKN2t0k2v0C4gCTY+IUbGs/+ry+4+Hk8o47ImXbqqbBB oMoyAIaF0hIswadZUqydgvo= X-Google-Smtp-Source: AGHT+IEOqhDIHU8yQVzigzHi7yEmKeknvLzhaCLGiwy5Lc6Uz7nwOPsjHd03PrIA3Gv3h27ZRwQiqg== X-Received: by 2002:a05:6102:c0e:b0:4b2:cc94:1881 with SMTP id ada2fe7eead31-4ba85f6666bmr2350659137.21.1738943235338; Fri, 07 Feb 2025 07:47:15 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:14 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 12/14] platform/x86: dell: Modify Makefile alignment Date: Fri, 7 Feb 2025 10:46:08 -0500 Message-ID: <20250207154610.13675-13-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 # -obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o -alienware-wmi-objs := alienware-wmi-base.o -alienware-wmi-y += alienware-wmi-legacy.o -alienware-wmi-y += alienware-wmi-wmax.o -obj-$(CONFIG_DCDBAS) += dcdbas.o -obj-$(CONFIG_DELL_LAPTOP) += dell-laptop.o -obj-$(CONFIG_DELL_RBTN) += dell-rbtn.o -obj-$(CONFIG_DELL_RBU) += dell_rbu.o -obj-$(CONFIG_DELL_PC) += dell-pc.o -obj-$(CONFIG_DELL_SMBIOS) += dell-smbios.o -dell-smbios-objs := dell-smbios-base.o -dell-smbios-$(CONFIG_DELL_SMBIOS_WMI) += dell-smbios-wmi.o -dell-smbios-$(CONFIG_DELL_SMBIOS_SMM) += dell-smbios-smm.o -obj-$(CONFIG_DELL_SMO8800) += dell-smo8800.o -obj-$(CONFIG_DELL_SMO8800) += dell-lis3lv02d.o -obj-$(CONFIG_DELL_UART_BACKLIGHT) += dell-uart-backlight.o -obj-$(CONFIG_DELL_WMI) += dell-wmi.o -dell-wmi-objs := dell-wmi-base.o -dell-wmi-$(CONFIG_DELL_WMI_PRIVACY) += dell-wmi-privacy.o -obj-$(CONFIG_DELL_WMI_AIO) += dell-wmi-aio.o -obj-$(CONFIG_DELL_WMI_DESCRIPTOR) += dell-wmi-descriptor.o -obj-$(CONFIG_DELL_WMI_DDV) += dell-wmi-ddv.o -obj-$(CONFIG_DELL_WMI_LED) += dell-wmi-led.o -obj-$(CONFIG_DELL_WMI_SYSMAN) += dell-wmi-sysman/ +obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o +alienware-wmi-objs := alienware-wmi-base.o +alienware-wmi-y += alienware-wmi-legacy.o +alienware-wmi-y += alienware-wmi-wmax.o +obj-$(CONFIG_DCDBAS) += dcdbas.o +obj-$(CONFIG_DELL_LAPTOP) += dell-laptop.o +obj-$(CONFIG_DELL_RBTN) += dell-rbtn.o +obj-$(CONFIG_DELL_RBU) += dell_rbu.o +obj-$(CONFIG_DELL_PC) += dell-pc.o +obj-$(CONFIG_DELL_SMBIOS) += dell-smbios.o +dell-smbios-objs := dell-smbios-base.o +dell-smbios-$(CONFIG_DELL_SMBIOS_WMI) += dell-smbios-wmi.o +dell-smbios-$(CONFIG_DELL_SMBIOS_SMM) += dell-smbios-smm.o +obj-$(CONFIG_DELL_SMO8800) += dell-smo8800.o +obj-$(CONFIG_DELL_SMO8800) += dell-lis3lv02d.o +obj-$(CONFIG_DELL_UART_BACKLIGHT) += dell-uart-backlight.o +obj-$(CONFIG_DELL_WMI) += dell-wmi.o +dell-wmi-objs := dell-wmi-base.o +dell-wmi-$(CONFIG_DELL_WMI_PRIVACY) += dell-wmi-privacy.o +obj-$(CONFIG_DELL_WMI_AIO) += dell-wmi-aio.o +obj-$(CONFIG_DELL_WMI_DESCRIPTOR) += dell-wmi-descriptor.o +obj-$(CONFIG_DELL_WMI_DDV) += dell-wmi-ddv.o +obj-$(CONFIG_DELL_WMI_LED) += dell-wmi-led.o +obj-$(CONFIG_DELL_WMI_SYSMAN) += dell-wmi-sysman/ From patchwork Fri Feb 7 15:46:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965350 Received: from mail-vs1-f49.google.com (mail-vs1-f49.google.com [209.85.217.49]) (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 27BFE24060F; Fri, 7 Feb 2025 15:47:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943240; cv=none; b=KsUqytwVNSgQaglI44Vza+zQ9+PH8ba5XLS/3gG4jvRWbVys/MTD+NMbcSyFOLFeQ83xOpdK7dZOprM4WGb+wflp7wJUhgfsyGqOLpF0gdcS+pZpMlJ5SU/e/GE0o1+4eVy31YBjk1IOK7AwOyZNe9Z44vf2YdF1m5dWr9XBKF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943240; c=relaxed/simple; bh=0Zjdw9NpuyixOjift32u/5Rw66qhX9ntW7jPh3oiamc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HkVYrZPtaWrCh/FB6xhboMYSCjkFg2sQxVYIYXq2w0KNdEdQq3cyw+vE0H0B60ulHAogn2Q/GpnfzxRB130MiKZ0sLjMjbBBM9tIvqpSaHYaua5/U+KNohCwJAN3CNoTzEutS55n/OJU8DHxUJ76Z2DnhbkA260r9DOovpuY/mA= 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=eeITKvZB; arc=none smtp.client-ip=209.85.217.49 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="eeITKvZB" Received: by mail-vs1-f49.google.com with SMTP id ada2fe7eead31-4ba7d79cb57so460706137.2; Fri, 07 Feb 2025 07:47:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943238; x=1739548038; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=c9pp9x2wBsw/6QWgWZUu2H51n8MPvLiJNzq+9sr/6qk=; b=eeITKvZBkvsKTndOKoYNConlExIACufbX+8mfqw50wek2e6TBstiR8FOQ3AHarN8Bf GuuDsaNkIvQKYQ0rnn1EKU2IQlJEkd9VqD0H0elnIfOZMok9Brya4ANvSuJWOiGrsGfQ uC6c9R+SQD9pqKVgilJaAX+RiGq6KgnXQa1uQNPNfoF5TgR2hMjD9ZXZ0nmh60lX7z8r AIZT6oHxUeRCS4ODv0oOz5JuFyJ3zXg9GXu47e1s5RdcYE4fssiE6yWdxgROcBgdGJ+6 4XtGc6HADaUm/xR9D/eaNvNJQx18rfcLyE1NKQNJ1eAO0dZ+IShctQD0E9DURO5rv/7C VQDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943238; x=1739548038; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c9pp9x2wBsw/6QWgWZUu2H51n8MPvLiJNzq+9sr/6qk=; b=XJegRubnc1/9QJeWwwWCIyRisVdJ9OphCA1a7J+vpH1qjG9HJA/O79eChK7IvJBFjx jcWt5ytggIZ0bgKF64zdHn8GLxx3m1Mnj8gIsS/k+9Bw6F9frIW+v1ogPbcrqKYPItEW XCEzfsWK+nUVnw0We63eAmw3lbav7rJQxrzYKfps5KaA6ns0pmtPDZE+oU3mZEn//eZm OqAnA5vKy/Rcd03ll3rzQud7toeZvwjhRgYLAM4IslsFId2KfwCVC67Gk++clpnP+Alk L/5JWOjky5vxsSF5dO6vvE01dX2hQVF6Lf5WMwi6X70VG2NyMtqzj0mXnw4nqIrZ6fbA b+7w== X-Forwarded-Encrypted: i=1; AJvYcCV8oWn905q+pFZRD4/LF+6oCKnhgmMUXyitw7Efg9a106wdxj5awiklOmiE5FVrOO9AagkjVEVYWGZ1p5M=@vger.kernel.org X-Gm-Message-State: AOJu0YyrdGbk1qa6OuAAFAugobr1ETjMZXOKHp4qnAUo1cKPye1ifzsq 31aYqv/OAEqD5hVEesZGGB5pMMCZwF44VmsUj4/X5DeOVEe73Mw/92MW6w== X-Gm-Gg: ASbGncsFrllGBjScP5PNHVsMqBr5KOrPJcD42dZU4QrYP854lbstQhrHJ60bbt7zTwD Pf0+ksprqk0uHuUtn9RJ8PSdotkuPQHmMzOb3cU8fA5PNkkKraEXNgKdiuEfmt0FCFazC5ijTwS hsRJ3oDEMthbbXwxdRvVZx94BIIRNfb6JPQOM3zmgb/MUATSTfpU8VAvZaCQwrBVP7iFr33vl38 Xmo9MLtuhNSZ+hjegPOaoI/A8ngTtVbL8b3jsucpGw3e9X1hM+S6rANkqlc2GEGc6snEHuSId8f jOLsBow+LyqqWRxlFMFi+WA= X-Google-Smtp-Source: AGHT+IG6kWcOutbwPvcvnvsve6FnqTEXVLlXKAsW2kfL4I3odG5jk8b0QmDiGAcxvQrZsKVmz/S68Q== X-Received: by 2002:a05:6102:72e:b0:4ba:974c:891e with SMTP id ada2fe7eead31-4ba974c90bamr295424137.17.1738943237770; Fri, 07 Feb 2025 07:47:17 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:17 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 13/14] platform/x86: Update alienware-wmi config entries Date: Fri, 7 Feb 2025 10:46:09 -0500 Message-ID: <20250207154610.13675-14-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Add config entries for each WMI driver managed by the alienware-wmi module to be able to conditionally compile them. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/Kconfig | 30 +++++++++++++++++++---- drivers/platform/x86/dell/Makefile | 4 +-- drivers/platform/x86/dell/alienware-wmi.h | 25 +++++++++++++++++++ 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/dell/Kconfig b/drivers/platform/x86/dell/Kconfig index d09060aedd3f..f8a0dffcaab7 100644 --- a/drivers/platform/x86/dell/Kconfig +++ b/drivers/platform/x86/dell/Kconfig @@ -18,15 +18,35 @@ config ALIENWARE_WMI tristate "Alienware Special feature control" default m depends on ACPI + depends on ACPI_WMI + depends on DMI depends on LEDS_CLASS depends on NEW_LEDS - depends on ACPI_WMI + help + This is a driver for controlling Alienware WMI driven features. + + On legacy devices, it exposes an interface for controlling the AlienFX + zones on Alienware machines that don't contain a dedicated + AlienFX USB MCU such as the X51 and X51-R2. + + On newer devices, it exposes the AWCC thermal control interface through + known Kernel APIs. + +config ALIENWARE_WMI_LEGACY + bool "Alienware Legacy WMI device driver" + default y + depends on ALIENWARE_WMI + help + Legacy Alienware WMI driver with AlienFX LED control capabilities. + +config ALIENWARE_WMI_WMAX + bool "Alienware WMAX WMI device driver" + default y + depends on ALIENWARE_WMI select ACPI_PLATFORM_PROFILE help - This is a driver for controlling Alienware BIOS driven - features. It exposes an interface for controlling the AlienFX - zones on Alienware machines that don't contain a dedicated AlienFX - USB MCU such as the X51 and X51-R2. + Alienware WMI driver with AlienFX LED, HDMI, amplifier, deep sleep and + AWCC thermal control capabilities. 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 @@ obj-$(CONFIG_ALIENWARE_WMI) += alienware-wmi.o alienware-wmi-objs := alienware-wmi-base.o -alienware-wmi-y += alienware-wmi-legacy.o -alienware-wmi-y += alienware-wmi-wmax.o +alienware-wmi-$(CONFIG_ALIENWARE_WMI_LEGACY) += alienware-wmi-legacy.o +alienware-wmi-$(CONFIG_ALIENWARE_WMI_WMAX) += alienware-wmi-wmax.o obj-$(CONFIG_DCDBAS) += dcdbas.o obj-$(CONFIG_DELL_LAPTOP) += dell-laptop.o obj-$(CONFIG_DELL_RBTN) += dell-rbtn.o diff --git a/drivers/platform/x86/dell/alienware-wmi.h b/drivers/platform/x86/dell/alienware-wmi.h index b950c91e1979..68d4242211ae 100644 --- a/drivers/platform/x86/dell/alienware-wmi.h +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -75,9 +75,21 @@ int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, int alienware_alienfx_setup(struct alienfx_platdata *pdata); +#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 +#if IS_ENABLED(CONFIG_ALIENWARE_WMI_WMAX) extern const struct attribute_group wmax_hdmi_attribute_group; extern const struct attribute_group wmax_amplifier_attribute_group; extern const struct attribute_group wmax_deepsleep_attribute_group; @@ -88,5 +100,18 @@ extern const struct attribute_group wmax_deepsleep_attribute_group; int __init alienware_wmax_wmi_init(void); void __exit alienware_wmax_wmi_exit(void); +#else +#define WMAX_DEV_GROUPS + +static inline int alienware_wmax_wmi_init(void) +{ + return -ENODEV; +} + + +static inline void alienware_wmax_wmi_exit(void) +{ +} +#endif #endif From patchwork Fri Feb 7 15:46:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13965351 Received: from mail-vs1-f44.google.com (mail-vs1-f44.google.com [209.85.217.44]) (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 1C2B63DAC0A; Fri, 7 Feb 2025 15:47:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943242; cv=none; b=dnrUkPj33njUhHUigQnPSCvUoBQRY8RhgWnbu4103XGBp1Ocqd4g22L/mxTsCx3tIOn8Ic5fNEodMnTY4LgkTuZ8lmiTCPTOEfsJuASzp+efK6IO3EYYzDaIl+PUVfey+8x9rM0HmdwY3xWu3OJ31CE1vzFK1XD2uTWE/EQtO9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738943242; c=relaxed/simple; bh=6RWNKULCLcyX3qpo9lp6BHXXTfrdV+asCm2vmn5XUs4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=vAQIezIyAJUvcbJ0HllWDpnpCIJEyw8ZTMz5lmk3ipzFeKPF1+JoIxGUdoxwtalEYMfZQGNF0eCCA3oqguHbubpw/vjB6XgZfA0f97BDmXDb9awWHHkiE2lPIXNFYNjSSzbVjqeuhFl3KcN+RFq50RlGZPxbt+I36LcRjfFPWa8= 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=jvwHHr18; arc=none smtp.client-ip=209.85.217.44 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="jvwHHr18" Received: by mail-vs1-f44.google.com with SMTP id ada2fe7eead31-4b6398d477fso617499137.0; Fri, 07 Feb 2025 07:47:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738943239; x=1739548039; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=S0LaXj60IfZoo+YSUXOLYVoLSI33CAZzHP32NqgEr2w=; b=jvwHHr18iIAYsGcF2b/7CFPD3EBF3pWXQKxdrYHiO3WUOpV1SLGOZLz/aLrdNE6M4d RaQOKn79nsa1ejeGIDgX/tljfxlHfenxjGn1yKZseCHxDbj+1FLxMzQAbx0dtO/YOLRb +dWWftIvWwHisZlJbUM6CTNDwxdrxuSShQoS/RIXcIF6aMkD0Aoto7ci3os5N6bnvBZV G6WeNkyNCyTMF/jhA7A/g/UIDath/gCD8B+x7wXuBeUHa2ApE6Doa0tNGvSI7KmDNsVH RHcxwEZE14EndATRy1+Ant9VsO8+90PDPX0afeCRWDTmgMRsiZAaw//EmrqeTKk8iRJp 5oUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738943239; x=1739548039; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S0LaXj60IfZoo+YSUXOLYVoLSI33CAZzHP32NqgEr2w=; b=G5+gTX9JDt4PY9TdfxXqHvZN7bRERN8A0TwJ3Mov0dAhRgU2VH5x/HwbWKlY8PnPjb c7qKS2rbeu9PETglvpCPT7D1LpZhm+k/HFnjcBKjZ2NpHsHC1+XELl3TlKbx758Zxchw kHlWPcF98b2Z5+QKC2XY2Kqh7hgJJ0e84g0xDaCsViivjPSSoTfQcZnkqALnJGA7oaEa 1+U9ibSkRHqX5O/lNKM8RriiuAI9HtC/ezdot8dyyMRl1FJdppGI7xIKOnrvJS6vrZ7+ IryTa+4dnAi4sc8YhV1wGi+AhDB4TFg4IJ3VEDH42MpR8e3GdFVOc/0XDOu5AIRJ3EDq Cb8w== X-Forwarded-Encrypted: i=1; AJvYcCUC3kDA1RZFszsMsjqQbFvvbUSf98q0p7LkUbHURIzcpjDjHWevB7K+59KDIIhe2aOJuHSesg3pjWtuLcU=@vger.kernel.org X-Gm-Message-State: AOJu0YxgKeKBtrMxXV+q1ve3CUqbFfrEbCsfIeO0l15+md+EQoFLSBpN RKy5XFo53tq+7w9jwNRkBgkjG926IWUFyJEw4RJPsCjTgj/UwJLSODgKIw== X-Gm-Gg: ASbGncseCJpXBLgr5BiG8EFTsnlLvXGLEp4nvIWBWwL+n44w3pGTVJKCnflwAaA/QmD MyXqRGWTWKhT0YMVP+nXvIwFDbDYqkwPVRPVZRqjFFGiBjEFkT23eqo/zHu2+Q3xeD+Trse6vx2 gWbyDJ3hZeHpyI/XJ6suKHeECUCfaaXJRH3czVPDdg/PWGUqjx+2LqK+joQg7vAVG1SwXQqukK0 ECaw57baPofpgEoK1qPKmlXDcqjtP/VAr3g6ApgWq+hSpJSO8uhGIT+NMVDQCDgT4oUfLaYd0np WrSS4u0vNohoH0TWy5Dh9VM= X-Google-Smtp-Source: AGHT+IF0ojTLU4Crj5l01g+S1d6l/y8g1K8kJdjeHzMJYvYvgFIHv7FBmpohcnN1XXj9wCbBuStdjg== X-Received: by 2002:a05:6102:cd3:b0:4b2:5d65:6f0 with SMTP id ada2fe7eead31-4ba85f0a5d5mr2777096137.19.1738943239681; Fri, 07 Feb 2025 07:47:19 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:3d2:4207:a956:ebad:2a64]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-4ba76cb8e44sm768456137.0.2025.02.07.07.47.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Feb 2025 07:47:18 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: =?utf-8?q?Ilpo_J=C3=A4rvinen?= , "Armin Wolf" , "Mario Limonciello" , "Hans de Goede" , Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, "Kurt Borja" Subject: [PATCH v10 14/14] platform/x86: alienware-wmi: Update header and module information Date: Fri, 7 Feb 2025 10:46:10 -0500 Message-ID: <20250207154610.13675-15-kuurtb@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250207154610.13675-1-kuurtb@gmail.com> References: <20250207154610.13675-1-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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/platform/x86/dell/alienware-wmi-base.c index 7bad9717183d..64562b92314f 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -1,8 +1,9 @@ // SPDX-License-Identifier: GPL-2.0-or-later /* - * Alienware AlienFX control + * Alienware special feature control * * Copyright (C) 2014 Dell Inc + * Copyright (C) 2025 Kurt Borja */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -16,6 +17,7 @@ #include "alienware-wmi.h" MODULE_AUTHOR("Mario Limonciello "); +MODULE_AUTHOR("Kurt Borja "); MODULE_DESCRIPTION("Alienware special feature control"); MODULE_LICENSE("GPL");