From patchwork Sun Jan 5 15:30: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: 13926555 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 A68B815539A; Sun, 5 Jan 2025 15:31:04 +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=1736091066; cv=none; b=N386rMEpBP2jK+P3rwZ1DyFS5JbRWWMl1B2ymGQstX/JYc/flggHQr81GzG5WLOj5A6uW4FEbUJANavcJDH68mdozGTObxga38u1DkfottUsa6i8vBv88Gp8w4fFJyBANmJKjQfoTk2YOm5o5R+uEuq1ZnrIGmbpw6utcC+02xs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091066; c=relaxed/simple; bh=FoGvy+ETozLTWpN9GrlBZXHmiKmKx0RkTR8hL0EcUrM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EWnxmW8VRKlOAR3LoshpuW0uLuiczcIVlz7J0CFQ8lgwyV+K9GXr8kWJrv5wqt7Z51tQ73glKa2OzftSGCSh5pkRByeK2KKKUBN+8QLd7ZeSpStB1cVkSTg/cZMPbS/rRnI17dkqknrAneKRXAb7lO7DF1Xeiz32yZF6hUz6pxc= 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=d4dmpYWp; 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="d4dmpYWp" Received: by mail-vs1-f46.google.com with SMTP id ada2fe7eead31-4afd68271b6so3270968137.0; Sun, 05 Jan 2025 07:31:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091063; x=1736695863; 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=I+4HfxaIvl/WE4mt0BxQUVifVPHzIEPHKNUp7DN73t0=; b=d4dmpYWp8FvlnoyuMsWUdEguSuyWtKQfSFBiUOVo6F9YcOCQMMN08hBf0NJSEiZzXX iYvfh9VG2iyLrbLJcAK7SAQJfuScJ/WCeKmHFETtJYtIepklPzkvzV8TvfHelwwZHIvC PtjehTA9GBQls75JAVPiwlR/WJXkmBQfdC2ngr3ZZ5MiVsCO8WgvC/waO7kKrCx7BoKw rm1feo0qjZlYGP6rd4eYjVCpzY8AdvZfsa17Xb7KpZI84icSptIPsoHHL7zeIqZYtdLL Q7EvaxuTuIClPEbGKaz5dwe4M2W/+S5iPob7/v9dct5o6rxH6YW2i7RnoRCq9Sc7aWuK gR6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091063; x=1736695863; 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=I+4HfxaIvl/WE4mt0BxQUVifVPHzIEPHKNUp7DN73t0=; b=OPRfFYTLU2YkRdQ5t/uB7lz/Oa1m05nBC/sxjTRBAUAa4LoaVbxultxVKBhw+PL6e3 XRuVCfyZduiZlgzG64ZbZW+e5ec3fR5MFskh6sTLD+qsvj1y4AFGRDJedf+H6YT4cVxt tSOXTyE6gB6EIlIgY1Mu619JH0UGCjQkdvmGe6DusepIqoVLNPRYgVZWeYEL1LYWFfFh nUPjCJ8f0C20+7dbVFG5k2xj5u30/+DpYNbx3cm5NZ6J80k6H4oexnRnffEOO77eHSK3 yuVy6sD9quU/ktGMMCqiWvI+D7yJkxzq5pQq7nthkUqMNLvhCJQtU4h4eb6mMjv7sZ1p q29A== X-Forwarded-Encrypted: i=1; AJvYcCXf/wBP2WYc//XCrg/b8EF0ZWnt6CbEnUEMjjKDeCFZfqeP1HiGrY8asJePvO7zbVJgsa2YluLuKFUP/b8=@vger.kernel.org X-Gm-Message-State: AOJu0YxrLujX30Y+4IztPSil7ydCY6QfvBuu9DxdJ+YJ65Fd/wNmuX09 nu9qyjxICPH3j0ChfDoo1tUmq3dEjbOkySOTENsgNQHMoqdnkn4ppQfC8g== X-Gm-Gg: ASbGncsKVP9fHeayCVLl7TnpuUreZuzrHycv7Bl9+mhmCOhVN9xUdbfIh9uW4EoYGBE v6+XCMOiOIPOQmLZl/zeTK7zT15PhBxYFCD525hA3OaClIROGJBNckJZDHcIoHZRtRRQFPc7E4J qYISM4TrFw4mfBRSJcCsPuiTfg8G3rkDK/YN/b/3mEEnhRNMAmjZ4lHwEv4Fd40HFLAtWFB/LNK SQe8/7NcB0it3wd9wIkTJ3UONSWAtjFHRt8B007WZ3uonp0yUPpYCAWMHQYdNFs X-Google-Smtp-Source: AGHT+IFORZLVnvcKI8TfkLn2TO/ncvGVNk2GgruGIDrk+tEm8CeYKxKWa3vTGr7F095S99XYOlZ77g== X-Received: by 2002:a05:6102:41a3:b0:4b2:7446:fc18 with SMTP id ada2fe7eead31-4b2cc4597f3mr45491075137.17.1736091063128; Sun, 05 Jan 2025 07:31:03 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:02 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 01/20] platform/x86: alienware-wmi: Remove unnecessary check at module exit Date: Sun, 5 Jan 2025 10:30:01 -0500 Message-ID: <20250105153019.19206-3-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Module initialization fails if platform device fails to register so it's always not NULL at exit. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 7b3ee2d6a23d..7212d75396b9 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -1250,12 +1250,10 @@ module_init(alienware_wmi_init); static void __exit alienware_wmi_exit(void) { - if (platform_device) { - alienware_zone_exit(platform_device); - remove_hdmi(platform_device); - platform_device_unregister(platform_device); - platform_driver_unregister(&platform_driver); - } + alienware_zone_exit(platform_device); + remove_hdmi(platform_device); + platform_device_unregister(platform_device); + platform_driver_unregister(&platform_driver); } module_exit(alienware_wmi_exit); From patchwork Sun Jan 5 15:30: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: 13926556 Received: from mail-vk1-f173.google.com (mail-vk1-f173.google.com [209.85.221.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2755D14F126; Sun, 5 Jan 2025 15:31:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091072; cv=none; b=OJ1i9zaDDeapXyUkIPxD2Zov7xKX5NAVF5kZFMJIjNGpXZwx/AwmXZYbVEVE59VMZLTa5XLRENax0zIj9O2IdLjL6pIdjz8/Q0MsubNbCvhpEE8QVNaB2dil0DSxonAtv+hmpse67XniAeRJNa7wFYM6pY3YEfWPHz9RkEBvYwM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091072; c=relaxed/simple; bh=cjbHLIm6cBofFRwgshut8z/ERb1ogQg3jm93n14ZK9g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ktd6nJ38bXjCFJqLT5EhmAyzE9NeiwsC1mWfu0LsPeHxrmW0IIPr7UcPHAMAsfQBqhGsdRDv8Kezsw9bGcVLx+vnWEaqv0e9VuJbqarVmbDvT6/XwbLThmnGeVX2lz4FK+l8IO+LkFWOd4rTMtoEADVFfW+deuIAAkw2PskPK3M= 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=Iustmf85; arc=none smtp.client-ip=209.85.221.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Iustmf85" Received: by mail-vk1-f173.google.com with SMTP id 71dfb90a1353d-5187aa2c97dso4578709e0c.2; Sun, 05 Jan 2025 07:31:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091065; x=1736695865; 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=gVm57HLpMUovepuB+LlsnVv0EKiJcbDMFDe9oCSiwjM=; b=Iustmf85Sqe6DEOmNlBcErhg05i7VIo7qQ1kK1/w3Aij10eCCVtW8aq4ZlPpFI2kG2 P0w6Ome9jBL06J9LVj3E6xul5BvdFMJKYWV97uHj8vRYkMEU64dlYtaB4w2OclWOa29v pnm8K3XdCo1PywdH+JLYD1Hxr/wtINFGNEu7Z1srYssWg3OVFdzTQP2WEi+pLhf6WAGi BKT4ZnwLa4WnoxypD+ZvWHHcDlHu3jS6fFj8ST0+Hh6nyIUGOWpv3o+qHBQSwxu+OfRP OtINbaSr3VZ4jcC+MNZyEpVaBqFKkZrx9EkRKP/VUCqwr1UBxHv/CtG9IA/kankDvym9 NNpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091065; x=1736695865; 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=gVm57HLpMUovepuB+LlsnVv0EKiJcbDMFDe9oCSiwjM=; b=SdN9BfqmaMD3LzM+fjajiv9+ZJwgcz4vdgPBV24m+mqdUWY87XPcmBLVzCP5hRQR4k zvMUaF68NUGHLXA9gg9yblRn4T/wZb8x7USL+Fp39vpXVeTFi9CouKKzzBzb6/wnwD+G BKRebeVBvLTjd3GFcN1FJ/IGh6tNCdkck0fb/XNpQxwrHygwBshR0vA+xvdwkaz4HF3J msqpvs47tVkUV/va9r8VplUekm8HyEjyn7Sfqro+l8x+BFriL5CyBMQs3Tmmdo6x8doT 70gFRd/rrtGHEY3+vHxBOQgq0JCuJQWpSMTJUjq1291G6cRhnw9bWNJJ2ULkHJXj+cIx Jdeg== X-Forwarded-Encrypted: i=1; AJvYcCVuSxrZi142pbTGbDviPwMlATK3a7zAZBkXDLT7bQMgDaSJKWtYY2KQEoNBt67GMAXR1k/todrZLYTgjgo=@vger.kernel.org X-Gm-Message-State: AOJu0YzK+A2ikfnvphrs4KtmDUeZU05bwMcwFQON8gq4jCKOc3doefgx fSLBTHR/RlngsggQp1Xhda7GRUhWfCrQrGcxbLSbVU4wm9xohf+2rgYc2A== X-Gm-Gg: ASbGncs6kmV8liNQgsTUlJWCPjo5Dhw3xF2BXc6WjiCNhSVlFFI0jB53ZPH+a44tAyf iTBRixBJClZLapIdrDuJClSrn1CVRyiYbZ8NS/EDH9RLO/bSSTnkMLE1PLFvdIRls5P1X6kEis8 g63vtazelrstRXcx1FmDRh1Urcwa+EtYgqmqLhMjRNJmuBe1Ff345RFGXnzLcS0WMfyGKZckyrm D9kOoshDoK1lK7yd5lwsK57fH2PGKDVMBk4KH+2rZbSl+AeGrs5oH45l6ARBoi6 X-Google-Smtp-Source: AGHT+IHkGVeem+rN9tlY6cY6CfVyJTUsWWt1RXbv6ZezCAwHEfvwcHfEtFZCQM6KLJfcDPhCuGPcxg== X-Received: by 2002:a05:6102:50a3:b0:4b2:5c4b:5186 with SMTP id ada2fe7eead31-4b2cc48075emr43045244137.23.1736091065370; Sun, 05 Jan 2025 07:31:05 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:04 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 02/20] platform/x86: alienware-wmi: Move Lighting Control State Date: Sun, 5 Jan 2025 10:30:02 -0500 Message-ID: <20250105153019.19206-4-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Place Lighting Control State logic next to other attributes of the same sysfs group. While at it, rename: store_control_state() -> lighting_control_state_store() show_control_state() -> lighting_control_state_show() Replace DEVICE_ATTR() with DEVICE_ATTR_RW() and do a general style cleanup. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/alienware-wmi.c | 74 ++++++++++++----------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 7212d75396b9..ec64a8f22301 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -545,6 +545,45 @@ static ssize_t zone_set(struct device *dev, struct device_attribute *attr, return ret ? ret : count; } +/* + * Lighting control state device attribute (Global) + */ +static ssize_t lighting_control_state_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + if (lighting_control_state == LEGACY_BOOTING) + return sysfs_emit(buf, "[booting] running suspend\n"); + else if (lighting_control_state == LEGACY_SUSPEND) + return sysfs_emit(buf, "booting running [suspend]\n"); + + return sysfs_emit(buf, "booting [running] suspend\n"); +} + +static ssize_t lighting_control_state_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + u8 val; + + if (strcmp(buf, "booting\n") == 0) + val = LEGACY_BOOTING; + else if (strcmp(buf, "suspend\n") == 0) + val = LEGACY_SUSPEND; + else if (interface == LEGACY) + val = LEGACY_RUNNING; + else + val = WMAX_RUNNING; + + lighting_control_state = val; + pr_debug("alienware-wmi: updated control state to %d\n", + lighting_control_state); + + return count; +} + +static DEVICE_ATTR_RW(lighting_control_state); + /* * LED Brightness (Global) */ @@ -589,41 +628,6 @@ static struct led_classdev global_led = { .name = "alienware::global_brightness", }; -/* - * Lighting control state device attribute (Global) - */ -static ssize_t show_control_state(struct device *dev, - struct device_attribute *attr, char *buf) -{ - if (lighting_control_state == LEGACY_BOOTING) - return sysfs_emit(buf, "[booting] running suspend\n"); - else if (lighting_control_state == LEGACY_SUSPEND) - return sysfs_emit(buf, "booting running [suspend]\n"); - return sysfs_emit(buf, "booting [running] suspend\n"); -} - -static ssize_t store_control_state(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - long unsigned int val; - if (strcmp(buf, "booting\n") == 0) - val = LEGACY_BOOTING; - else if (strcmp(buf, "suspend\n") == 0) - val = LEGACY_SUSPEND; - else if (interface == LEGACY) - val = LEGACY_RUNNING; - else - val = WMAX_RUNNING; - lighting_control_state = val; - pr_debug("alienware-wmi: updated control state to %d\n", - lighting_control_state); - return count; -} - -static DEVICE_ATTR(lighting_control_state, 0644, show_control_state, - store_control_state); - static int alienware_zone_init(struct platform_device *dev) { u8 zone; From patchwork Sun Jan 5 15:30: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: 13926557 Received: from mail-vk1-f176.google.com (mail-vk1-f176.google.com [209.85.221.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15A6114F9FB; Sun, 5 Jan 2025 15:31:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091073; cv=none; b=TSAdeTnBYEOR99BipvfUSfiRirCQMRfJC0yTT9hd1Nxt0eqpVWc5CgHCvaNBHMylsg2g8SR30wrGlidriU6emny6WuTRKh/MaL8T76mrVrB3tuED9bwa/QLCzzepyZj16F0rMED7SlrouW6/bR7LxYJXDAmyePh72VVMgB6d43I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091073; c=relaxed/simple; bh=Z7FjuxtzNGdACXrFh8YIjDqvOFDSR8+NgzgA5dVIJQk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yfyhu2q9H36SNmmMyK3tlgfFfmb/l5cwDH0H1j/OcbUvjJmQD9PNaaWjClN4yFSTV6cXVI+zJcb0BQXLExy0Hk9ODp8jWw5xrfTYww2Wxp0xEwaQY7MW21K2saQB3C9q1pooiZgLjnKXIkoYwy09rmXGKbbqxjePzyxA6D4fx0s= 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=ABJhaya4; arc=none smtp.client-ip=209.85.221.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ABJhaya4" Received: by mail-vk1-f176.google.com with SMTP id 71dfb90a1353d-51889930cb1so3971800e0c.0; Sun, 05 Jan 2025 07:31:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091067; x=1736695867; 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=b4xidvvDQVdn9MHbPxeNeacaiw+noBQUp+1gjdq6/TQ=; b=ABJhaya4GGjLh4oD1gF3b6ZSNlTWGrn+fkzLlBtQN/adHXko+b4yQURNUnHXuJ4yw9 +L4TryIxsHLBvHJb4ZJTkOVM8MSFJnErvDZPd6hm4pwpj4Bax3bts7sbM0F7uzfsTOP1 JGZyONZFwrkyIM9joY/GkHTM5Tl0sAoU2OS56vf+fUgOzmgdFKZ0bDN44LBOTyp/ZOlB 5CrlLOogaGunwRzvTe7AXmfn6PDbaRS9reduztog7dFP/SL5HwdKcm0+U/k8k2Ls0ST6 9LxqyyUz+QObIyI/xk6LONOeEn3MwvpgxFnrrizw1IXatgKtwFNUHestxAOXyDdeuED3 bJVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091067; x=1736695867; 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=b4xidvvDQVdn9MHbPxeNeacaiw+noBQUp+1gjdq6/TQ=; b=kmtMScZTYMmpAal/DdBdwjl9Pp7OHYsTqZLNLpte1Lan7oa7aP8wg0QVeAkJLnWntF dvH5/ZzCFtMVi9qkkEQ+xUiLzGKGf+GksjGE4hH1w8EyofUEJrNaSz41EjdLkGKYo+3Z GHWrzdR9FkEN+Xa3gFzANBDS9S7Vh6qnEqMwaP/xroZtXFCAi0FbEaPNtHibvY0eZOW6 K5x6mheSj80Yqu9kLFjNoz492wvOudCFpPM6AEVrotm0Ttlqbu53RKZbotOffeLaQLLo CL8I1USQaO3nFlCxfR5alEqyzhQTn9JY/I+R/syZxxU+ePb/eSXcVnLK8bcb//OGqhJc dWJA== X-Forwarded-Encrypted: i=1; AJvYcCWGrRdbWsr0kTpAHj+eMD16cir1drNfoDuIPgbHV9xv/aqGv1YdJaY7M/DfPnMV7cu+/NkBFLyQCxg73mA=@vger.kernel.org X-Gm-Message-State: AOJu0YzW5k45ds4xGFu/82rDqhl/m6lBrdLvbLxfW+OxEfaRDqQPV+AW jbmOhM1ph0XyZ/IE7HYN2qPHFs49UkEXHwoOfLJ59qIyVDMEo7yE3llqiA== X-Gm-Gg: ASbGncsHwOSLq0Bnk1qRqI8ncotqUeiSflcOcybpjfxLfmnizrS5FOnMgRLppqBTf6s BG+YTaKGZxHsrX/NhcynlDBPTKwCUtsIhY/DbrhTJO8gz5eM4cnCT4sDvFGkWDyViLB03yolR/1 XbYO1lmYTgRshPEVB1QAH8DNbq3x6B50ytJKwgCykeakMKRvgObmGhEsQo3JzEJZstrg+0dXTje qWBuo5zodn1173ldARoSbdc7HCcMaDfTP1I7I85iFirYXElCvWKzr8PRkOvUz9l X-Google-Smtp-Source: AGHT+IH8i0DfOcZKX51apAm0woGYx1oVSNzOddA8x6uCPwJ3BH739BcltAZJUxM63C0H+ot0QUatOg== X-Received: by 2002:a05:6102:32c1:b0:4b1:3409:93dd with SMTP id ada2fe7eead31-4b2cc45ebaamr45267598137.18.1736091067547; Sun, 05 Jan 2025 07:31:07 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:07 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 03/20] platform/x86: alienware-wmi: Modify parse_rgb() signature Date: Sun, 5 Jan 2025 10:30:03 -0500 Message-ID: <20250105153019.19206-5-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 parse_rgb() now takes struct color_platform instead of struct platform_zone to support upcoming refactor. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/alienware-wmi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index ec64a8f22301..e54e3cc45691 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -434,7 +434,7 @@ static u8 global_brightness; /* * Helpers used for zone control */ -static int parse_rgb(const char *buf, struct platform_zone *zone) +static int parse_rgb(const char *buf, struct color_platform *colors) { long unsigned int rgb; int ret; @@ -454,7 +454,7 @@ static int parse_rgb(const char *buf, struct platform_zone *zone) repackager.package = rgb & 0x0f0f0f0f; pr_debug("alienware-wmi: r: %d g:%d b: %d\n", repackager.cp.red, repackager.cp.green, repackager.cp.blue); - zone->colors = repackager.cp; + *colors = repackager.cp; return 0; } @@ -538,7 +538,7 @@ static ssize_t zone_set(struct device *dev, struct device_attribute *attr, pr_err("alienware-wmi: invalid target zone\n"); return 1; } - ret = parse_rgb(buf, target_zone); + ret = parse_rgb(buf, &target_zone->colors); if (ret) return ret; ret = alienware_update_led(target_zone); From patchwork Sun Jan 5 15:30: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: 13926558 Received: from mail-vk1-f173.google.com (mail-vk1-f173.google.com [209.85.221.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 038E515623A; Sun, 5 Jan 2025 15:31:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091076; cv=none; b=ZmDM8jrhu/4odFySnukXk2Ug1WDPZ+cQ+QPPoUhaWh+RRQkwcFty6tMq4ukgNELBmZY3BU2Z5ctVOfUSANcPsurzHcDZ911vNYumLCMC7qkj6br4pYyFxteo3aVqeOkh4RPtyZsrVhBoFPbnFrpFNkG6Ud10HxTioN0RubKkwE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091076; c=relaxed/simple; bh=X5UqPOMCZ2pn9lTZB2JsjUpprMYvlXuqPvR7jHs00ec=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Kx/w6Q0S8dUYJrhQoS74uJ7uP4y/8nFlD7+3i/nX6U/4wMHPvXmWd7lRtIWusTG6qN/qp2V5rPpSCH1UpXi503CobBbFY7bGNxRXtRNMH8cOoSVFEUA91+lAzaatVzjJBjceMs2JW6I5pJQShxbLhuSvqFiMbUB/NOuMraxBUfU= 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=KJjPWUXx; arc=none smtp.client-ip=209.85.221.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KJjPWUXx" Received: by mail-vk1-f173.google.com with SMTP id 71dfb90a1353d-5161d5b8650so4189673e0c.3; Sun, 05 Jan 2025 07:31:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091070; x=1736695870; 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=AZ/sijkWytnb1cS1jiHFJ2zUi4hUygkcuKiov36Ane8=; b=KJjPWUXxZTp384c30z75duJyEmX5xMEREXsXgolypOuaWJEU400rr9aOnyQFSvXNiO wjXhBPpf5/28Cw7+Vb57SKZzO3eTecsVQanfdE+luBy1AObWWWeqkZZ889jwKj0YB2b4 pzETBD5yxOgDCepKLgRuI4N7fQAmsMda9K+QHCUdORfLHjy+PmdXH0p6v2LoG/fhRYou XsvCihzDGUAh7ksIQUqCOTysAAVV1Ctf0ovF4Eng8Oi38gxGn/1ELBnrGcncL+pA204d 2edhcXdT7nEGhg3Q+ZnynmlgsmdCxZ5qt4eO+xrQT7MdDqTxSfrqUUnmR6+iOhM6cnPC Xf8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091070; x=1736695870; 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=AZ/sijkWytnb1cS1jiHFJ2zUi4hUygkcuKiov36Ane8=; b=jHra8vEVYLHfPEONG1YKuorIJxUbZ8ZbU8pYQmJgKP3sQ9kGLNKdR2IGITCf+cdRGa IMuDSIP3M9eoAZDmsaQZ+z/b8aPHTmdFuKcTbAgC6ZGn49Tw/lddAsAUovzmHgct6U6D gwhzHpQAPHAwi1gT3Hu/YwR3BNrGRlNCpFFs9GDCQf09zSKcDKC8Pk3P2FYW47JNgRGq ENtEb1+QqCCEDB9s7zRD57SsQSOFYsmDxZXJyE5RuKLGsyEf3m4sQS/uxskCgw5DtRlA Zb03pvBsP8h3rcF/rdfbNiPC1H+YTkcXE4TGlyy2vgN1KFPBIimcGYXJlgW1oO2NA8c6 9LPg== X-Forwarded-Encrypted: i=1; AJvYcCXpzJygSwq9fMSFjpetbygeoYLSArG1awgWTjaC/R/VelZC4AhkW91ID69GUZsJXJG25YNsZGOYzBkiwUs=@vger.kernel.org X-Gm-Message-State: AOJu0YwY6/Ytq8H6u5RmHN6KfKvwl4VgIHOEcegcc13OTUcr96ykIf3b s9EynN++g4GezjNzqr1jroq/SsboM1EqZeUiWhI4cEfmSZf37VA3dsqQYw== X-Gm-Gg: ASbGncuxwa67cGSORtdVKrPMWt0kjnOez4MLWYPY9131IpLS7MpCuvQPIjo/YzshjlM SGHc3HjN1XMZ7QVWr2UUISUUHgLPqKLMuVsPUtMzzWeAaaE2IaCyH6x79YC+bjXUwMhuz5iMh14 TtfKq/Z1nISbKJjNmPRor31BO7lj7SU2tRdU57s/+tPalcbyEfrBBmEsXjDIAT+uIoEX7zLz9gj MCmv/nu/An0f70k92zmC0bEf2SS9XOd4lYMU4aKmotd4FVmEbbrym5yJ3x60Lnw X-Google-Smtp-Source: AGHT+IHTUX3jw8K7Bib4RUdlGQiPFDqV6tBj3JkuW2hR/WW+a5Y64iHE3cfXKnh9wYaSpP8LKV9UXQ== X-Received: by 2002:a05:6102:3913:b0:4b1:ed1:56ac with SMTP id ada2fe7eead31-4b2cc37e0b8mr47244788137.12.1736091070138; Sun, 05 Jan 2025 07:31:10 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:09 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 04/20] platform/x86: alienware-wmi: Improve hdmi_mux, amplifier and deepslp group creation Date: Sun, 5 Jan 2025 10:30:04 -0500 Message-ID: <20250105153019.19206-6-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Devices with hdmi_mux, amplifier or deepslp quirks create a sysfs group for each available feature. To accomplish this, helper create/remove functions were called on module init, but they had the following problems: - Create helpers called remove helpers on failure, which in turn tried to remove the sysfs group that failed to be created - If group creation failed mid way, previous successfully created groups were not cleaned up - Module exit only removed hdmi_mux group To improve this, drop all helpers and let the platform driver manage these sysfs groups, while controlling visibility with their respective quirks. Reviewed-by: Armin Wolf Reviewed-by: Mario Limonciello Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 114 ++++++++-------------- 1 file changed, 38 insertions(+), 76 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index e54e3cc45691..16a131cc9f11 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -417,12 +417,6 @@ static struct platform_zone *zone_data; static struct platform_profile_handler pp_handler; static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; -static struct platform_driver platform_driver = { - .driver = { - .name = "alienware-wmi", - } -}; - static struct attribute_group zone_attribute_group = { .name = "rgb_zones", }; @@ -804,6 +798,12 @@ static DEVICE_ATTR(cable, S_IRUGO, show_hdmi_cable, NULL); static DEVICE_ATTR(source, S_IRUGO | S_IWUSR, show_hdmi_source, toggle_hdmi_source); +static bool hdmi_group_visible(struct kobject *kobj) +{ + return quirks->hdmi_mux; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); + static struct attribute *hdmi_attrs[] = { &dev_attr_cable.attr, &dev_attr_source.attr, @@ -812,25 +812,10 @@ static struct attribute *hdmi_attrs[] = { static const struct attribute_group hdmi_attribute_group = { .name = "hdmi", + .is_visible = SYSFS_GROUP_VISIBLE(hdmi), .attrs = hdmi_attrs, }; -static void remove_hdmi(struct platform_device *dev) -{ - if (quirks->hdmi_mux > 0) - sysfs_remove_group(&dev->dev.kobj, &hdmi_attribute_group); -} - -static int create_hdmi(struct platform_device *dev) -{ - int ret; - - ret = sysfs_create_group(&dev->dev.kobj, &hdmi_attribute_group); - if (ret) - remove_hdmi(dev); - return ret; -} - /* * Alienware GFX amplifier support * - Currently supports reading cable status @@ -859,6 +844,12 @@ static ssize_t show_amplifier_status(struct device *dev, static DEVICE_ATTR(status, S_IRUGO, show_amplifier_status, NULL); +static bool amplifier_group_visible(struct kobject *kobj) +{ + return quirks->amplifier; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); + static struct attribute *amplifier_attrs[] = { &dev_attr_status.attr, NULL, @@ -866,25 +857,10 @@ static struct attribute *amplifier_attrs[] = { static const struct attribute_group amplifier_attribute_group = { .name = "amplifier", + .is_visible = SYSFS_GROUP_VISIBLE(amplifier), .attrs = amplifier_attrs, }; -static void remove_amplifier(struct platform_device *dev) -{ - if (quirks->amplifier > 0) - sysfs_remove_group(&dev->dev.kobj, &lifier_attribute_group); -} - -static int create_amplifier(struct platform_device *dev) -{ - int ret; - - ret = sysfs_create_group(&dev->dev.kobj, &lifier_attribute_group); - if (ret) - remove_amplifier(dev); - return ret; -} - /* * Deep Sleep Control support * - Modifies BIOS setting for deep sleep control allowing extra wakeup events @@ -937,6 +913,12 @@ static ssize_t toggle_deepsleep(struct device *dev, static DEVICE_ATTR(deepsleep, S_IRUGO | S_IWUSR, show_deepsleep_status, toggle_deepsleep); +static bool deepsleep_group_visible(struct kobject *kobj) +{ + return quirks->deepslp; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); + static struct attribute *deepsleep_attrs[] = { &dev_attr_deepsleep.attr, NULL, @@ -944,25 +926,10 @@ static struct attribute *deepsleep_attrs[] = { static const struct attribute_group deepsleep_attribute_group = { .name = "deepsleep", + .is_visible = SYSFS_GROUP_VISIBLE(deepsleep), .attrs = deepsleep_attrs, }; -static void remove_deepsleep(struct platform_device *dev) -{ - if (quirks->deepslp > 0) - sysfs_remove_group(&dev->dev.kobj, &deepsleep_attribute_group); -} - -static int create_deepsleep(struct platform_device *dev) -{ - int ret; - - ret = sysfs_create_group(&dev->dev.kobj, &deepsleep_attribute_group); - if (ret) - remove_deepsleep(dev); - return ret; -} - /* * Thermal Profile control * - Provides thermal profile control through the Platform Profile API @@ -1166,6 +1133,23 @@ static int create_thermal_profile(struct platform_device *platform_device) return devm_platform_profile_register(&pp_handler); } +/* + * Platform Driver + */ +static const struct attribute_group *alienfx_groups[] = { + &hdmi_attribute_group, + &lifier_attribute_group, + &deepsleep_attribute_group, + NULL +}; + +static struct platform_driver platform_driver = { + .driver = { + .name = "alienware-wmi", + .dev_groups = alienfx_groups, + }, +}; + static int __init alienware_wmi_init(void) { int ret; @@ -1205,24 +1189,6 @@ static int __init alienware_wmi_init(void) if (ret) goto fail_platform_device2; - if (quirks->hdmi_mux > 0) { - ret = create_hdmi(platform_device); - if (ret) - goto fail_prep_hdmi; - } - - if (quirks->amplifier > 0) { - ret = create_amplifier(platform_device); - if (ret) - goto fail_prep_amplifier; - } - - if (quirks->deepslp > 0) { - ret = create_deepsleep(platform_device); - if (ret) - goto fail_prep_deepsleep; - } - if (quirks->thermal) { ret = create_thermal_profile(platform_device); if (ret) @@ -1238,9 +1204,6 @@ static int __init alienware_wmi_init(void) fail_prep_zones: alienware_zone_exit(platform_device); fail_prep_thermal_profile: -fail_prep_deepsleep: -fail_prep_amplifier: -fail_prep_hdmi: platform_device_del(platform_device); fail_platform_device2: platform_device_put(platform_device); @@ -1255,7 +1218,6 @@ module_init(alienware_wmi_init); static void __exit alienware_wmi_exit(void) { alienware_zone_exit(platform_device); - remove_hdmi(platform_device); platform_device_unregister(platform_device); platform_driver_unregister(&platform_driver); } From patchwork Sun Jan 5 15:30: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: 13926559 Received: from mail-vk1-f178.google.com (mail-vk1-f178.google.com [209.85.221.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6199E1552FA; Sun, 5 Jan 2025 15:31:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091078; cv=none; b=qChU/E+TLQy2O8BXOpaQLXKGmt41vFeo3ZrsQnC3rC9NVC+ixkV5Tmd9y15WmvzPdjV8BeJTbCZhz1F733F5CfWmY6k3wZc+zaQmvXTWGOBFiopmaWW5/+EqoaQ67ZAhfS2wGIKjA4XI9jPQJLUM0iPUWTEHVV8HPk5hVKn/Sls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091078; c=relaxed/simple; bh=HkjY6Ez9FRIN5INJ+IBdqHpMDRmMBUABEnbSBzmpGuc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cZAy3Oqn5+Yl8iaqmuE7XZCUfETaTM07Vo2qTajD6fzVcrjPTKqHIQ306ktytB2YmhOzd21d4mC4tl048PVoURNbvW99dSKKAt1hjxMU37X9bW6rb6Q5XF7EfFJuxNv57x8dVHN5kSsIFbZNFdeWqu1QWIXaB/e8bBzzhTTbZgA= 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=hQmwYBGC; arc=none smtp.client-ip=209.85.221.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hQmwYBGC" Received: by mail-vk1-f178.google.com with SMTP id 71dfb90a1353d-5189105c5f5so7162565e0c.0; Sun, 05 Jan 2025 07:31:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091073; x=1736695873; 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=DU4TmM4leWVJU7DXQsu0FaAeIpL0mPnNsEC7E/7AJYU=; b=hQmwYBGCbDD88b3E3PHIdqiHUSz4/K26oxws/snEEsAjqrx30MF/oGI036rk7MAXon lUyxhtMMWCX0kuAdY6vGmyS6VFG2+3saMfpeld0QL0a/tVpndaJxmrUJt3KG8v6LZsY7 D2Pb7LJg53J1+IvXIE2QJVz0oEjoSZSPb7Nv+5Q7iq8IDvh+TqLoYjWOkTwvEQhDaUwD Rb/xZjh8J8FHmjTCVGLKjwPqLY7POTs1DOAKI+zuEYwkzFlBJ1TBtDX74Odv4Z8YFVoK rryVhLiIaWtB3vYEUSX3zgsqqF5iwCqInrh+FViMegFso24pJ228ffsvjRPFzv+dc3Lk 44DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091073; x=1736695873; 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=DU4TmM4leWVJU7DXQsu0FaAeIpL0mPnNsEC7E/7AJYU=; b=RxLq0LNHZHFiE7FJDxe+2+gJ7YaubNs9mzx0c++IZeQ07Rt54h6pHRC1xqFiE7YSej h//ND/dNJ4ExKTuMcQabG/wWB2RI6zm9WoCukamTUWkMdHt3YgwsQR/z/7Pr48XV1Bhi kmUwe91jAGKSlMFjbMwcT3rtmH7iCo5g53Uw93mi/lDCa7FzRnwHkA+myQnJEBPprnnS lxAgNos8Eupl+TYi9jFeLgsOD0uVprMvQUZ1+/djZ/xU/YeX+DLP/rgyskGMRfOEYMxA FJ6YTtpPdNW/83Z+gjEtoc8IEfNhWCFmx4KilRvTDuai3gC+lOVu2wC7O1zOMdjPJYsK yOhQ== X-Forwarded-Encrypted: i=1; AJvYcCWBmLfJBn2Yznuu0TKn9+M9z1mrRhCU7/YMgw0kMaTtB/8TYtA/wZNJTRkoKXeeXfgk9EglaKRe9DNqamE=@vger.kernel.org X-Gm-Message-State: AOJu0YyQf8+NaWo75bdUzYCI7rMNX28F34xDRvXwc+Lobu/US/wfS0Vj ev4X7zjrHZfRNIfK2dw1xaOWVET/Op/a9iUHAKislU7ZgrnCWhwzUH8R7A== X-Gm-Gg: ASbGnctVplXUj1c4Ycytupo0/FgWanLDEZeqsdCOfDc4C3Mab6UEceBUB3RlzeLFE2s QDB5cgmvje584PYIUMmfwoP/HvWyi2CiHtzOqcCtLNmrrwvAt3MI8OuMwBUcD53kiIpdGP0a0Fk EwqBDDf+EdUgTFmC1q8MTY3EQtxV2PzMnqx6VBm3k7K6fUI2CbzeP6O2zewnzIvq42qbGshbFC5 03qrWX+wxYPBWGwhn+Uff6EvDwgslhRmYngwVeyG0DlUIZUBsAZsaiF6qHeXzDc X-Google-Smtp-Source: AGHT+IFfFMys1vlFGlHCZIud2T0e/7ei+t1Pgi3PdpJzM2tJumdQDQ6G18jUmkNardmmHCILnHCKWg== X-Received: by 2002:a05:6122:4884:b0:518:89d9:dd99 with SMTP id 71dfb90a1353d-51b75c2a515mr44469325e0c.3.1736091072833; Sun, 05 Jan 2025 07:31:12 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:12 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 05/20] platform/x86: alienware-wmi: Improve rgb-zones group creation Date: Sun, 5 Jan 2025 10:30:05 -0500 Message-ID: <20250105153019.19206-7-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Define zone_attrs statically and initialize zone_attribute_group with platform driver's .dev_groups. Drop match_zone() and instead pass a `location` argument to previous show/store methods to access the correct `zone` LED state. On top of that rename zone_set() -> zone_store() to be more consistent with sysfs conventions. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/alienware-wmi.c | 212 +++++++++++----------- 1 file changed, 105 insertions(+), 107 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 16a131cc9f11..418abf46b593 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -376,12 +376,6 @@ struct color_platform { u8 red; } __packed; -struct platform_zone { - u8 location; - struct device_attribute *attr; - struct color_platform colors; -}; - struct wmax_brightness_args { u32 led_mask; u32 percentage; @@ -411,16 +405,10 @@ struct wmax_u32_args { }; static struct platform_device *platform_device; -static struct device_attribute *zone_dev_attrs; -static struct attribute **zone_attrs; -static struct platform_zone *zone_data; +static struct color_platform colors[4]; static struct platform_profile_handler pp_handler; static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; -static struct attribute_group zone_attribute_group = { - .name = "rgb_zones", -}; - static u8 interface; static u8 lighting_control_state; static u8 global_brightness; @@ -452,24 +440,10 @@ static int parse_rgb(const char *buf, struct color_platform *colors) return 0; } -static struct platform_zone *match_zone(struct device_attribute *attr) -{ - u8 zone; - - for (zone = 0; zone < quirks->num_zones; zone++) { - if ((struct device_attribute *)zone_data[zone].attr == attr) { - pr_debug("alienware-wmi: matched zone location: %d\n", - zone_data[zone].location); - return &zone_data[zone]; - } - } - return NULL; -} - /* * Individual RGB zone control */ -static int alienware_update_led(struct platform_zone *zone) +static int alienware_update_led(u8 location) { int method_id; acpi_status status; @@ -478,8 +452,8 @@ static int alienware_update_led(struct platform_zone *zone) struct legacy_led_args legacy_args; struct wmax_led_args wmax_basic_args; if (interface == WMAX) { - wmax_basic_args.led_mask = 1 << zone->location; - wmax_basic_args.colors = zone->colors; + wmax_basic_args.led_mask = 1 << location; + wmax_basic_args.colors = colors[location]; wmax_basic_args.state = lighting_control_state; guid = WMAX_CONTROL_GUID; method_id = WMAX_METHOD_ZONE_CONTROL; @@ -487,7 +461,7 @@ static int alienware_update_led(struct platform_zone *zone) input.length = sizeof(wmax_basic_args); input.pointer = &wmax_basic_args; } else { - legacy_args.colors = zone->colors; + legacy_args.colors = colors[location]; legacy_args.brightness = global_brightness; legacy_args.state = 0; if (lighting_control_state == LEGACY_BOOTING || @@ -496,7 +470,7 @@ static int alienware_update_led(struct platform_zone *zone) legacy_args.state = lighting_control_state; } else guid = LEGACY_CONTROL_GUID; - method_id = zone->location + 1; + method_id = location + 1; input.length = sizeof(legacy_args); input.pointer = &legacy_args; @@ -510,35 +484,84 @@ static int alienware_update_led(struct platform_zone *zone) } static ssize_t zone_show(struct device *dev, struct device_attribute *attr, - char *buf) + char *buf, u8 location) { - struct platform_zone *target_zone; - target_zone = match_zone(attr); - if (target_zone == NULL) - return sprintf(buf, "red: -1, green: -1, blue: -1\n"); return sprintf(buf, "red: %d, green: %d, blue: %d\n", - target_zone->colors.red, - target_zone->colors.green, target_zone->colors.blue); + colors[location].red, colors[location].green, + colors[location].blue); } -static ssize_t zone_set(struct device *dev, struct device_attribute *attr, - const char *buf, size_t count) +static ssize_t zone_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count, u8 location) { - struct platform_zone *target_zone; int ret; - target_zone = match_zone(attr); - if (target_zone == NULL) { - pr_err("alienware-wmi: invalid target zone\n"); - return 1; - } - ret = parse_rgb(buf, &target_zone->colors); + + ret = parse_rgb(buf, &colors[location]); if (ret) return ret; - ret = alienware_update_led(target_zone); + + ret = alienware_update_led(location); + return ret ? ret : count; } +static ssize_t zone00_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return zone_show(dev, attr, buf, 0); +} + +static ssize_t zone00_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + return zone_store(dev, attr, buf, count, 0); +} + +DEVICE_ATTR_RW(zone00); + +static ssize_t zone01_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return zone_show(dev, attr, buf, 1); +} + +static ssize_t zone01_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + return zone_store(dev, attr, buf, count, 1); +} + +DEVICE_ATTR_RW(zone01); + +static ssize_t zone02_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return zone_show(dev, attr, buf, 2); +} + +static ssize_t zone02_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + return zone_store(dev, attr, buf, count, 2); +} + +DEVICE_ATTR_RW(zone02); + +static ssize_t zone03_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return zone_show(dev, attr, buf, 3); +} + +static ssize_t zone03_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) +{ + return zone_store(dev, attr, buf, count, 3); +} + +DEVICE_ATTR_RW(zone03); + /* * Lighting control state device attribute (Global) */ @@ -578,6 +601,36 @@ static ssize_t lighting_control_state_store(struct device *dev, 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) + return attr->mode; + + return 0; +} + +static bool zone_group_visible(struct kobject *kobj) +{ + return quirks->num_zones > 0; +} +DEFINE_SYSFS_GROUP_VISIBLE(zone); + +static struct attribute *zone_attrs[] = { + &dev_attr_lighting_control_state.attr, + &dev_attr_zone00.attr, + &dev_attr_zone01.attr, + &dev_attr_zone02.attr, + &dev_attr_zone03.attr, + NULL +}; + +static struct attribute_group zone_attribute_group = { + .name = "rgb_zones", + .is_visible = SYSFS_GROUP_VISIBLE(zone), + .attrs = zone_attrs, +}; + /* * LED Brightness (Global) */ @@ -606,7 +659,7 @@ static void global_led_set(struct led_classdev *led_cdev, if (interface == WMAX) ret = wmax_brightness(brightness); else - ret = alienware_update_led(&zone_data[0]); + ret = alienware_update_led(0); if (ret) pr_err("LED brightness update failed\n"); } @@ -624,9 +677,6 @@ static struct led_classdev global_led = { static int alienware_zone_init(struct platform_device *dev) { - u8 zone; - char *name; - if (interface == WMAX) { lighting_control_state = WMAX_RUNNING; } else if (interface == LEGACY) { @@ -635,65 +685,12 @@ static int alienware_zone_init(struct platform_device *dev) global_led.max_brightness = 0x0F; global_brightness = global_led.max_brightness; - /* - * - zone_dev_attrs num_zones + 1 is for individual zones and then - * null terminated - * - zone_attrs num_zones + 2 is for all attrs in zone_dev_attrs + - * the lighting control + null terminated - * - zone_data num_zones is for the distinct zones - */ - zone_dev_attrs = - kcalloc(quirks->num_zones + 1, sizeof(struct device_attribute), - GFP_KERNEL); - if (!zone_dev_attrs) - return -ENOMEM; - - zone_attrs = - kcalloc(quirks->num_zones + 2, sizeof(struct attribute *), - GFP_KERNEL); - if (!zone_attrs) - return -ENOMEM; - - zone_data = - kcalloc(quirks->num_zones, sizeof(struct platform_zone), - GFP_KERNEL); - if (!zone_data) - return -ENOMEM; - - for (zone = 0; zone < quirks->num_zones; zone++) { - name = kasprintf(GFP_KERNEL, "zone%02hhX", zone); - if (name == NULL) - return 1; - sysfs_attr_init(&zone_dev_attrs[zone].attr); - zone_dev_attrs[zone].attr.name = name; - zone_dev_attrs[zone].attr.mode = 0644; - zone_dev_attrs[zone].show = zone_show; - zone_dev_attrs[zone].store = zone_set; - zone_data[zone].location = zone; - zone_attrs[zone] = &zone_dev_attrs[zone].attr; - zone_data[zone].attr = &zone_dev_attrs[zone]; - } - zone_attrs[quirks->num_zones] = &dev_attr_lighting_control_state.attr; - zone_attribute_group.attrs = zone_attrs; - - led_classdev_register(&dev->dev, &global_led); - - return sysfs_create_group(&dev->dev.kobj, &zone_attribute_group); + return led_classdev_register(&dev->dev, &global_led); } static void alienware_zone_exit(struct platform_device *dev) { - u8 zone; - - sysfs_remove_group(&dev->dev.kobj, &zone_attribute_group); led_classdev_unregister(&global_led); - if (zone_dev_attrs) { - for (zone = 0; zone < quirks->num_zones; zone++) - kfree(zone_dev_attrs[zone].attr.name); - } - kfree(zone_dev_attrs); - kfree(zone_data); - kfree(zone_attrs); } static acpi_status alienware_wmax_command(void *in_args, size_t in_size, @@ -1137,6 +1134,7 @@ static int create_thermal_profile(struct platform_device *platform_device) * Platform Driver */ static const struct attribute_group *alienfx_groups[] = { + &zone_attribute_group, &hdmi_attribute_group, &lifier_attribute_group, &deepsleep_attribute_group, From patchwork Sun Jan 5 15:30: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: 13926560 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 EE634155C88; Sun, 5 Jan 2025 15:31:16 +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=1736091079; cv=none; b=Hp5oOSZKADIOO87yFr9suh735XOZWa3Saoz+Sjdjfu58eTYPBM2bgMQBQy4HHsmy5O2FommxXoge6njScJH41RHnThef+nUkPixxCvNZLm5D7STbOFGWNmq3UMREKcmb/BU1YX74Vw76v6fD4JFUCmeVmFA/g8p0NCmslZmlmAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091079; c=relaxed/simple; bh=oShe4pLeM7LOpbU/TmP4vDIO/k3qHvNV/+mA9FQNNtE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mocUCezvpcF+j7Tv8Y3pv8V/rYS7nqEcHKzfGPfa6HMf8ORi1IGN46q5/sd3h6ovK3APVsnLdbaotHE634YP9T2kSJfV8jbo/nWUf2eRMdY5ZsRcrWfk46DvUZhAVoBJhULEAyxRfll+xbYDmLY5TYyb+1GvGYfb7Wxp9AJBJik= 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=V29G2DHe; 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="V29G2DHe" Received: by mail-vs1-f41.google.com with SMTP id ada2fe7eead31-4aff04f17c7so8460384137.0; Sun, 05 Jan 2025 07:31:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091075; x=1736695875; 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=uav5TmLEjJRghDn0i82XJ/BEXJCW5HI2DwMuKG+Hhy4=; b=V29G2DHeEd8tQe8onqo5fVlcuZBVScHptinbe3qlIrazRpbhZEcGcFAdfH07VNS0Eh /1ERYZDN3BTP14BYDOtWW3wWOATXD270lF7aasSY1LmkGBON6fyx81ZH8+PklNH5kGBx FHjRKu9a3Sz2dzHISYKKzeBqGO33c8NL3tGlV9HxxFrCKEeCyOFuEZPvDSnzHbgRoiq/ FHqctJn2slxRhZ2IJ0m6xHcFCgDRYLsTQO2KrBWzQuUySrYnuFRA/LpiuLoKeAZkcz6I McL4XqICcRIY6G0ViKI16P1RQa0eYkFWUhuEC3+o+GsbxAMjRg9mvMLIAcz09JagFRTp 4R6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091075; x=1736695875; 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=uav5TmLEjJRghDn0i82XJ/BEXJCW5HI2DwMuKG+Hhy4=; b=PIW5OD70xaMHX6bB2tfCqaHVcA6Pymy9W8qhVWrVPAJWkLPZLRQR7R5LTA9hN2mLOv tsNHCvHMYixqyMB3QmiphSH7gaOyx5/vpY7Vxt2H8DH7cHyda8hur7J93H8vZKJyc3lz ZDfztOp+F5rZb73SwAhSig3FaAJx4BCisXrM7K3AJyKIL9SNrKpnNC10OI7w5EuUI/4S Sn8RGTySczcivuYTA6yKAkZpS8YwzJAbQA0dQcgcRhl3l+jvooeLkRXr6hLQB/QKszJp uSAhFb3HR9PGKXhwGni8XVBxqb9HlrP/xoAUSVtx5xFQgkCqKeKourSTnwIIF64s9PMt UJwQ== X-Forwarded-Encrypted: i=1; AJvYcCUCmLt9FVLv/lXvp7ZAAdx6DjDHQZ10O1Hr8OKiIaXoJmLyDt58Q7WorD3yBS/B3dIKfnkvjPRx7dUNtW0=@vger.kernel.org X-Gm-Message-State: AOJu0YwE3m4LJKQ4i3GZdelh8g6mCh3xWP3ORt0/ICyK8BeXYhiuZ7C6 UuKfnMaCTC/xnG9LFWuM6yOeTIJUY2rJre8e79hVuitAOvltYP9lWZ2scA== X-Gm-Gg: ASbGncvSslKZJwEAfa3L1FjeWIna9yCe+7Z0gGD1dc+c/sF5oLfZEFCVVK6aMnUSRys hGViJs94yhFkczD5D1B6dG+JHOXsDSxb9SN8qiihGuDPrdP4T3jtuZmezgut1wCPqgfTMN4PsZx nigUrid/ANdgKjA8dZv4wUFHVSRPhU+IfUH/lygStf8OG9Y9jzhCOxg5YCH6mCjCDrbwg+aDrr+ LyI7CTiQlqLK4ekl2eF4aR9i6cnysc+Xu6qklamrtkZS9TU8ZHgg2napYs9jArv X-Google-Smtp-Source: AGHT+IEpz+FOw9lpI98Fk+jRT7JGtIIRqvFrW0YP90Z2WIaSUzYakpkkeupAZ6Mj8+I4zY8nGqW4uQ== X-Received: by 2002:a05:6102:334a:b0:4b1:f903:98d3 with SMTP id ada2fe7eead31-4b2bc01044bmr52673261137.7.1736091075616; Sun, 05 Jan 2025 07:31:15 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:14 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 06/20] platform/x86: alienware_wmi: General cleanup of WMAX methods Date: Sun, 5 Jan 2025 10:30:06 -0500 Message-ID: <20250105153019.19206-8-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-kuurtb@gmail.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Reorder variable declaration from longest to shortest. Standarize show/store method names of WMAX's sysfs groups. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/alienware-wmi.c | 67 +++++++++++------------ 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 418abf46b593..190fee7539bf 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -725,14 +725,14 @@ static acpi_status alienware_wmax_command(void *in_args, size_t in_size, * 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 show_hdmi_cable(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t cable_show(struct device *dev, struct device_attribute *attr, + char *buf) { - acpi_status status; - u32 out_data; struct wmax_basic_args in_args = { .arg = 0, }; + acpi_status status; + u32 out_data; status = alienware_wmax_command(&in_args, sizeof(in_args), WMAX_METHOD_HDMI_CABLE, &out_data); @@ -746,14 +746,14 @@ static ssize_t show_hdmi_cable(struct device *dev, return sysfs_emit(buf, "unconnected connected [unknown]\n"); } -static ssize_t show_hdmi_source(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t source_show(struct device *dev, struct device_attribute *attr, + char *buf) { - acpi_status status; - u32 out_data; struct wmax_basic_args in_args = { .arg = 0, }; + acpi_status status; + u32 out_data; status = alienware_wmax_command(&in_args, sizeof(in_args), WMAX_METHOD_HDMI_STATUS, &out_data); @@ -768,12 +768,11 @@ static ssize_t show_hdmi_source(struct device *dev, return sysfs_emit(buf, "input gpu [unknown]\n"); } -static ssize_t toggle_hdmi_source(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) +static ssize_t source_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) { - acpi_status status; struct wmax_basic_args args; + acpi_status status; if (strcmp(buf, "gpu\n") == 0) args.arg = 1; else if (strcmp(buf, "input\n") == 0) @@ -791,9 +790,8 @@ static ssize_t toggle_hdmi_source(struct device *dev, return count; } -static DEVICE_ATTR(cable, S_IRUGO, show_hdmi_cable, NULL); -static DEVICE_ATTR(source, S_IRUGO | S_IWUSR, show_hdmi_source, - toggle_hdmi_source); +static DEVICE_ATTR_RO(cable); +static DEVICE_ATTR_RW(source); static bool hdmi_group_visible(struct kobject *kobj) { @@ -818,14 +816,14 @@ static const struct attribute_group hdmi_attribute_group = { * - Currently supports reading cable status * - Leaving expansion room to possibly support dock/undock events later */ -static ssize_t show_amplifier_status(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t status_show(struct device *dev, struct device_attribute *attr, + char *buf) { - acpi_status status; - u32 out_data; struct wmax_basic_args in_args = { .arg = 0, }; + acpi_status status; + u32 out_data; status = alienware_wmax_command(&in_args, sizeof(in_args), WMAX_METHOD_AMPLIFIER_CABLE, &out_data); @@ -839,7 +837,7 @@ static ssize_t show_amplifier_status(struct device *dev, return sysfs_emit(buf, "unconnected connected [unknown]\n"); } -static DEVICE_ATTR(status, S_IRUGO, show_amplifier_status, NULL); +static DEVICE_ATTR_RO(status); static bool amplifier_group_visible(struct kobject *kobj) { @@ -862,14 +860,14 @@ static const struct attribute_group amplifier_attribute_group = { * Deep Sleep Control support * - Modifies BIOS setting for deep sleep control allowing extra wakeup events */ -static ssize_t show_deepsleep_status(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t deepsleep_show(struct device *dev, struct device_attribute *attr, + char *buf) { - acpi_status status; - u32 out_data; struct wmax_basic_args in_args = { .arg = 0, }; + acpi_status status; + u32 out_data; status = alienware_wmax_command(&in_args, sizeof(in_args), WMAX_METHOD_DEEP_SLEEP_STATUS, &out_data); if (ACPI_SUCCESS(status)) { @@ -884,12 +882,11 @@ static ssize_t show_deepsleep_status(struct device *dev, return sysfs_emit(buf, "disabled s5 s5_s4 [unknown]\n"); } -static ssize_t toggle_deepsleep(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) +static ssize_t deepsleep_store(struct device *dev, struct device_attribute *attr, + const char *buf, size_t count) { - acpi_status status; struct wmax_basic_args args; + acpi_status status; if (strcmp(buf, "disabled\n") == 0) args.arg = 0; @@ -908,7 +905,7 @@ static ssize_t toggle_deepsleep(struct device *dev, return count; } -static DEVICE_ATTR(deepsleep, S_IRUGO | S_IWUSR, show_deepsleep_status, toggle_deepsleep); +static DEVICE_ATTR_RW(deepsleep); static bool deepsleep_group_visible(struct kobject *kobj) { @@ -956,13 +953,13 @@ static bool is_wmax_thermal_code(u32 code) static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) { - acpi_status status; struct wmax_u32_args in_args = { .operation = operation, .arg1 = arg, .arg2 = 0, .arg3 = 0, }; + acpi_status status; status = alienware_wmax_command(&in_args, sizeof(in_args), WMAX_METHOD_THERMAL_INFORMATION, @@ -979,13 +976,13 @@ static int wmax_thermal_information(u8 operation, u8 arg, u32 *out_data) static int wmax_thermal_control(u8 profile) { - acpi_status status; struct wmax_u32_args in_args = { .operation = WMAX_OPERATION_ACTIVATE_PROFILE, .arg1 = profile, .arg2 = 0, .arg3 = 0, }; + acpi_status status; u32 out_data; status = alienware_wmax_command(&in_args, sizeof(in_args), @@ -1003,13 +1000,13 @@ static int wmax_thermal_control(u8 profile) static int wmax_game_shift_status(u8 operation, u32 *out_data) { - acpi_status status; struct wmax_u32_args in_args = { .operation = operation, .arg1 = 0, .arg2 = 0, .arg3 = 0, }; + acpi_status status; status = alienware_wmax_command(&in_args, sizeof(in_args), WMAX_METHOD_GAME_SHIFT_STATUS, @@ -1078,11 +1075,11 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, static int create_thermal_profile(struct platform_device *platform_device) { - u32 out_data; + enum platform_profile_option profile; + enum wmax_thermal_mode mode; u8 sys_desc[4]; u32 first_mode; - enum wmax_thermal_mode mode; - enum platform_profile_option profile; + u32 out_data; int ret; ret = wmax_thermal_information(WMAX_OPERATION_SYS_DESCRIPTION, From patchwork Sun Jan 5 15:30: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: 13926561 Received: from mail-ua1-f43.google.com (mail-ua1-f43.google.com [209.85.222.43]) (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 1133F155A30; Sun, 5 Jan 2025 15:31:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091083; cv=none; b=mPQIsTqTg6eav53VjlOfSOisHI/Y0zIVRCkbqjdlMhqc3tih2NO8yaV1stqyl72P9G4RiI33QSI5zun82QgqoIXkcGiJTDb5O3J7v64c2DQgtMlMyWlWAOxoDDNW+FwcaCuTO0EHLF+vP8VT64EEk/+hYfR/VyVC7ArajcdxMfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091083; c=relaxed/simple; bh=cuZXuHVXtkHgwdixzn6+UhTb7HfNTS22cGJVlOJjC4Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IxYdh/15xtdc+BUIwIckq8tT4VzNgqXEMoKPCuL4+hwAOQgddHFBe2uHvzoB4+PRlJHrt5jztP3Axb3F2R1m2q1eAPKr4mrMpdzfpCrRQRtPSqeBAVDX6Vpv4wClKwux0i3a9WKl5UeLTtzZ5ltItU0IyTH2mJ2Q/3BE9ViEcts= 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=m3prNJ2/; arc=none smtp.client-ip=209.85.222.43 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="m3prNJ2/" Received: by mail-ua1-f43.google.com with SMTP id a1e0cc1a2514c-85ba92b3acfso5652068241.1; Sun, 05 Jan 2025 07:31:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091078; x=1736695878; 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=eczrdLgGeysgn3Gf5HP1ycGTqNNImmH5MgljjO1dCkc=; b=m3prNJ2/unnuBD+wBqRJDyyHJdB2+tyGt5CjPzHiAuasXhfth0HzW2xBR0o2Nn5Xkr bPEzlFTiP7FbcJo/Bo1c24w8FzPO3TOLpubyiOJcUWYPrEwQeYP/yCYWGGZSOc7DiP4E JD9+mwy0DvDsEkCad8bOHvX1FaBP5MsE51LVSpaYR1b75EVzKL2sAwqdpKmB+H64sd6z JXn9lFnhczu9jXmzV6hIvI5ohh12yYtbS+Nd8YPtSxb3N1JELh1X01AhXzw9tsS1xbb1 AaIxrqOwFLGUTTYjpydBcT06E2nAfVNmFg+yV+l+uAHvGyxwEOyfRcBc/3HUvtYLNZM1 lGkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091078; x=1736695878; 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=eczrdLgGeysgn3Gf5HP1ycGTqNNImmH5MgljjO1dCkc=; b=cT6wDC6pI8UDPtrlrBEToS8e8JQ+sPawpD6rmbjT1aTpPFoUd/iIwftS+jaVsKXDrN fc4+PO6dcGP2YK0ZtcMAiVw9mhS6EonqbDwKhpDKfqOdZ4jF+iNd+XKEBNNolJMlN77Y WR/twXc7za/hEUfCnpHDK9vwqGHqu8wOMd89opFUV2+Uly7WhvjibKfpgsV7+6urT8YA Y22CfPnarKlJRNmEsaL8sCz3yPnB2uFWEhQ0qWD5FQtUmqWv9Kfdb7kpXzGbfZNyE3Pl WC7rvYGq8PWi814ZAfZfIgLnSciJRLCfvr7eaYtiU0zsl4qmE2BUYX/LSjzGsImOjaBY u3Fg== X-Forwarded-Encrypted: i=1; AJvYcCWhgXgq3jApURaB+1zet71dvKFqfv8rQsvLJE9M7NjpUQVlJfE+smhZkXGHeEMBD29kFpHubM1kKRb2x7Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yz255124OE+wiJpGvJMUDeOCgxP6UI7QSlVa265Z2/cmMIoJxuG QdHGjwHyl2+NEWWZ+59eX17tIPagyiNDm5ln+u5pnMwID0pPSeXS53UBtQ== X-Gm-Gg: ASbGnctC2nubfesGx7U7H6jAdlDDiiWdFjsBd5xp4TyaerlOGvYgc0vJVAAbeh1rIeP ekM9kTTbVX196ldkyoTBLXg85J8Gq+0lH8b3vmNVXH2EDDXiBgXGVSlr3zshW8Bie0d+L8Uldjx lxOKjifNrKrkklOeAopENAzKeU2xOsbbmnaLniCeWF7mzNSJ0GCjd5tc8RokJMDD1ZrA8zaI8sI ceibblmomIkWphueBBM148fI+s4Uw0FZIn4YIMi7YhzKvCsTitSpMURYKJqEQ70 X-Google-Smtp-Source: AGHT+IF9wi4a8mUAiQHaCxOGGxSwv3nR1NFp/mZs6hT9XND7O4G9aLBOmfqF66ImuOoqsGS6i7m+yg== X-Received: by 2002:a05:6102:440b:b0:4b2:49ff:e470 with SMTP id ada2fe7eead31-4b2cc449353mr35665817137.21.1736091078372; Sun, 05 Jan 2025 07:31:18 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:17 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja Subject: [PATCH v3 07/20] platform/x86: alienware-wmi: Add a state container for LED control feature Date: Sun, 5 Jan 2025 10:30:07 -0500 Message-ID: <20250105153019.19206-9-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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, as well as hdmi, amplifier, deepslp group visibility methods, 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. Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 119 ++++++++++++---------- 1 file changed, 67 insertions(+), 52 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 190fee7539bf..ca7b9f649541 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -404,14 +404,19 @@ 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 struct platform_profile_handler pp_handler; 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 @@ -443,7 +448,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; @@ -453,21 +458,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; @@ -486,22 +491,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; } @@ -569,9 +578,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"); @@ -581,6 +592,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) @@ -592,9 +604,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; } @@ -654,43 +666,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; -} + struct alienfx_priv *priv = container_of(led_cdev, struct alienfx_priv, + global_led); -static struct led_classdev global_led = { - .brightness_set = global_led_set, - .brightness_get = global_led_get, - .name = "alienware::global_brightness", -}; - -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) -{ - led_classdev_unregister(&global_led); + return priv->global_brightness; } static acpi_status alienware_wmax_command(void *in_args, size_t in_size, @@ -1130,6 +1125,32 @@ static int create_thermal_profile(struct platform_device *platform_device) /* * Platform Driver */ +static int alienfx_probe(struct platform_device *pdev) +{ + struct alienfx_priv *priv; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + platform_set_drvdata(pdev, priv); + priv->pdev = pdev; + + if (interface == WMAX) + priv->lighting_control_state = WMAX_RUNNING; + else if (interface == LEGACY) + priv->lighting_control_state = LEGACY_RUNNING; + + 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; + + return devm_led_classdev_register(&pdev->dev, &priv->global_led); +} + static const struct attribute_group *alienfx_groups[] = { &zone_attribute_group, &hdmi_attribute_group, @@ -1143,6 +1164,7 @@ static struct platform_driver platform_driver = { .name = "alienware-wmi", .dev_groups = alienfx_groups, }, + .probe = alienfx_probe, }; static int __init alienware_wmi_init(void) @@ -1190,14 +1212,8 @@ static int __init alienware_wmi_init(void) goto fail_prep_thermal_profile; } - 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: @@ -1212,7 +1228,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 Sun Jan 5 15:30: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: 13926562 Received: from mail-ua1-f44.google.com (mail-ua1-f44.google.com [209.85.222.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 607741B6541; Sun, 5 Jan 2025 15:31:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091087; cv=none; b=rs3LiR2bSxXOA9xcs0kVcdLB0JEuORc3dV8FCSqV+rNdjeVID2U94plbQhLrkSRToBSkgCWGV0VWOFDrmxd9kRIDiJ6n0v3cRrQkEK+vdU6/bG8ALf+sGCqbzldf6shj4tPc7Bl9DZVWZaCkmxitTGdsKwhZLuT+efYKt3C7eUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091087; c=relaxed/simple; bh=1Cs7NPQXrkmM/U3g10SmIFl0B3gjEAoITIphppnlZsY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pwa8UvsSAjMGARKd6EnVZ5UIH3AAIuwRjYiWsIJ5vBYm5TJn4kr+yWL2JuWzxKea0ZJDP6+vnrG0gMEqpwKAHnfdt2+faiqJp8H2rQTsXZSLasza7kbZ2Fiu2Wd1Drr/LhnXwfxzO4/qacGWCd9edmsp+QchAKyikReHYEpSZhg= 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=B3T87Pia; arc=none smtp.client-ip=209.85.222.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="B3T87Pia" Received: by mail-ua1-f44.google.com with SMTP id a1e0cc1a2514c-85c61388e68so1979214241.3; Sun, 05 Jan 2025 07:31:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091081; x=1736695881; 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=qBEYpXNJcEwMGEbg608CUThjpKF7ebxkYAuwsXZ7cxE=; b=B3T87PiaLIB3SCLUsNx9aAoQXuWnVUV4muudzwoSJUpldSK9ZK5oFC57WRTAc8RrRE 7lD9msQUhpiRZQxJ2qdCZa8zaqE67oq9k85Xitnh/oMXAmv43jxy8pwJWJlGpc6wvo/B TM6pNZ5fyjDUwpDRVt4Hb2Aw6mX6QxDR8Sqb0QH6bIPNhpP4NmUeVgtn8eahSYh7RVC+ i7ZBF2/h8x4ZVmIwXfCGJxH5JCEjgDNpiX4act/I5maCBv8X/MVwV6ZlfeDxzizYuL2d 4G2AbrTz4lkooclBO6UkkORnpifC9OQTSm33WdCOwYrQkLdiTrfqjmR1qvwUWh/Awvnj NqEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091081; x=1736695881; 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=qBEYpXNJcEwMGEbg608CUThjpKF7ebxkYAuwsXZ7cxE=; b=oBjJruWd1EsX+YQ4DJf/oFbpF9hnPTgwpFN/uF3juWjMw1tQnfG56flkczqa8uDYDb W1jGj20sjbx/lMawChSm4zSLAjJyuOfoNE2PuCGfvBeFeiv0bmjRt9z7O24ASj9ms+c2 q1WolPOGXRvGcuwgCso5ym0CrMC9dRHGgAN2GuVg3Ir7ZNIKfthJGW1N+docwALEcDZJ Io05ax/TzOttkcL0a7RYRWLWqrkDS7PwVunqyDNvdjYFXZMUCd46lUI7Ako5SmpwZ4g5 ify8DjqOI1lHVKSEI+67CCAS9OQRTbJl91b82By9AZsVHja0BXzfKGxlt2DcbVJN9sap XwBQ== X-Forwarded-Encrypted: i=1; AJvYcCXpqweo4M8FYcYTM57q9gSr0kpu0szWlhRhaUIuSEN3DTvlqCxgsLjq9qkL3wq9qaJJMoYok9ObEKPezPw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9Md8LCeQ1Y77lyYrDZ3Uh+5ATMEdqLoz0qLUfT8qkyS5T0O5P vf3v/ZZnGpoiZ5dOMjAS+U1s8Cu+RBXd0DMx3L/QKkXV9bnu5vR6nCcPkQ== X-Gm-Gg: ASbGncvgnjfdn1BbkWnNsQcT9bFdZ1Ruwu89eZnd2EVXQ/f2hDlISs2JCMpxqOijhEk WuiOMjMyg/lRXgBUbq4XhLyRpilMtT7IaI8+vi1LOKuFOR1WQV1uneZ7daqAYvsULeVqYLxMVG+ ACAaaUBAY3xfy1ijitylBOYdNzusRo5T/zFOF+VOP8zTAMhaqO0a/9P7lmDPp4qa48Ny/EZxDNl um9rIxLgqDhYbpHZ7sIPpC+Qfv+haglWT9vGgMi+RT6Sii5eqt57QLW6xrU/ZtO X-Google-Smtp-Source: AGHT+IFYWq8aNAUNm5YK8qdR86+N3EmNexioWdrvHfik/IFDXX9xPl9+Js260DDVfKhtxChbzrqCxA== X-Received: by 2002:a05:6102:c8f:b0:4af:e5fd:77fc with SMTP id ada2fe7eead31-4b2cc31f963mr46101484137.3.1736091081125; Sun, 05 Jan 2025 07:31:21 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:20 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja Subject: [PATCH v3 08/20] platform/x86: alienware-wmi: Add WMI Drivers Date: Sun, 5 Jan 2025 10:30:08 -0500 Message-ID: <20250105153019.19206-10-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 platform driver and device registration to a helper function, which is now called from the driver's preferred WMI device driver probe. However this is only done if !quirks->thermal because newer WMAX interface doesn't support any of the features exposed by this device. Only one driver is registered on module initialization to prevent registering duplicate platform driver and device. Additionally, create_thermal_profile() now takes wmi_device * instead of platform_device *. Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 200 +++++++++++++++++----- 1 file changed, 160 insertions(+), 40 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index ca7b9f649541..d7b322be6c19 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); @@ -412,7 +411,10 @@ struct alienfx_priv { u8 lighting_control_state; }; -static struct platform_device *platform_device; +struct alienfx_platdata { + struct wmi_device *wdev; +}; + static struct platform_profile_handler pp_handler; static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; @@ -1068,7 +1070,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, return wmax_thermal_control(supported_thermal_profiles[profile]); } -static int create_thermal_profile(struct platform_device *platform_device) +static int create_thermal_profile(struct wmi_device *wdev) { enum platform_profile_option profile; enum wmax_thermal_mode mode; @@ -1117,7 +1119,7 @@ static int create_thermal_profile(struct platform_device *platform_device) pp_handler.profile_get = thermal_profile_get; pp_handler.profile_set = thermal_profile_set; pp_handler.name = "alienware-wmi"; - pp_handler.dev = &platform_device->dev; + pp_handler.dev = &wdev->dev; return devm_platform_profile_register(&pp_handler); } @@ -1153,6 +1155,10 @@ static int alienfx_probe(struct platform_device *pdev) static const struct attribute_group *alienfx_groups[] = { &zone_attribute_group, + NULL +}; + +static const struct attribute_group *wmax_alienfx_groups[] = { &hdmi_attribute_group, &lifier_attribute_group, &deepsleep_attribute_group, @@ -1167,19 +1173,150 @@ static struct platform_driver platform_driver = { .probe = alienfx_probe, }; -static int __init alienware_wmi_init(void) +static int alienware_alienfx_setup(struct alienfx_platdata *pdata) { + 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; + ret = platform_driver_register(&platform_driver); + if (ret < 0) + return ret; + + pdev = platform_device_register_data(NULL, "alienware-wmi", + PLATFORM_DEVID_NONE, pdata, + sizeof(*pdata)); + + if (IS_ERR(pdev)) { + platform_driver_unregister(&platform_driver); + return PTR_ERR(pdev); } + dev_set_drvdata(&pdata->wdev->dev, pdev); + + return 0; +} + +static void alienware_alienfx_exit(struct wmi_device *wdev) +{ + struct platform_device *pdev = dev_get_drvdata(&wdev->dev); + + platform_device_unregister(pdev); + platform_driver_unregister(&platform_driver); +} + +/* + * 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 void legacy_wmi_remove(struct wmi_device *wdev) +{ + alienware_alienfx_exit(wdev); +} + +static 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, + .remove = legacy_wmi_remove, +}; + +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, + }; + struct platform_device *pdev; + int ret; + + if (quirks->thermal) { + return create_thermal_profile(wdev); + } else { + ret = alienware_alienfx_setup(&pdata); + if (ret < 0) + return ret; + + pdev = dev_get_drvdata(&wdev->dev); + + ret = device_add_groups(&pdev->dev, wmax_alienfx_groups); + if (ret < 0) + alienware_alienfx_exit(wdev); + + return ret; + } +} + +static void wmax_wmi_remove(struct wmi_device *wdev) +{ + struct platform_device *pdev; + + if (!quirks->thermal) { + pdev = dev_get_drvdata(&wdev->dev); + + device_remove_groups(&pdev->dev, wmax_alienfx_groups); + alienware_alienfx_exit(wdev); + } +} + +static 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, + .remove = wmax_wmi_remove, +}; + +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) quirks = &quirk_unknown; @@ -1194,33 +1331,14 @@ static int __init alienware_wmi_init(void) pr_warn("force_gmode requires platform profile support\n"); } - 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 (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; - -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; } @@ -1228,8 +1346,10 @@ module_init(alienware_wmi_init); static void __exit alienware_wmi_exit(void) { - platform_device_unregister(platform_device); - platform_driver_unregister(&platform_driver); + if (interface == WMAX) + alienware_wmax_wmi_exit(); + else + alienware_legacy_wmi_exit(); } module_exit(alienware_wmi_exit); From patchwork Sun Jan 5 15:30: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: 13926563 Received: from mail-ua1-f46.google.com (mail-ua1-f46.google.com [209.85.222.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 414F91C5F0E; Sun, 5 Jan 2025 15:31:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091090; cv=none; b=Fz7Z+ZhNQMIsXVmxSC7VCpfXodldi1u3vDq1OQVLWiW/MzSu7Fe1I4YJiWFch1esubhro0pOZl5jY/mcY+tMUL6e6UieDOtfgJvq1Jky1XAgZexE++XL15exGyLHQUAQ0xnavsp98Kdkl227jALt4+KwZjkzn7FYGgtZQz/pBFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091090; c=relaxed/simple; bh=gr9cq8BeUbI37Em6/gpZe5mNuQ3eoZhCU4IQvRCZJgk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GshdVxZGT6zIM0O2pd2vRbnHrgnoIev9u3Ez7ZmXANIujlDErTMrGq0bXzlFrgzUWl47/ghS2DzQnmg1TBOyPqclHEHOrOH1MHfhwkE8FrG9QoPl2dI8Mal9HQUXB6EnSYMxa6TEguLotyuMVlqfXYZjF37zp61FbrQMFSpviQI= 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=CdLb442w; arc=none smtp.client-ip=209.85.222.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="CdLb442w" Received: by mail-ua1-f46.google.com with SMTP id a1e0cc1a2514c-85c436db302so6652187241.0; Sun, 05 Jan 2025 07:31:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091084; x=1736695884; 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=L2eQOOCqqvrQm0hZJ5xa+q1NnbNHGfYbY03Z0Bh6hWk=; b=CdLb442wwioOcA+N7lf/EGi438PPqLORrkukjp9uMsxrpI1mHVEH/KmKpFFp6+YKnV df+6Ds2lmsm1GRWgqNQvD36+vwiSOWDgYDgXxg257XOuu8MJ70Nu6cK5rXIX0BIKL41v xGmoxfS/pNM1m5GE/F10zUXKV5Pip0SOM85c0nZNEkMdMTibeU9irksA1OCrlG7T4k2u PKteAR91iGGzHkPspO8lmmkYcxi84haqSY/K/kDD7KzBBSy5SAFnyjNKMKMtEWOodD3L ibn8fBwNqlbKTBKyx0Ae63PPen1W4wvl2bLKH86MsnIw8C/dl4UQRRNPCerSFHkN9TYv VPpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091084; x=1736695884; 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=L2eQOOCqqvrQm0hZJ5xa+q1NnbNHGfYbY03Z0Bh6hWk=; b=K+omvXZaJ+WACpOu3IcvaSZ49/m1L8gAMHXdBpBngC5Nt7s8wxvf1kUl8MNPbdEleh T7UTBBuU1n5DgkgUdmov3Ae1B9zWewQ2dftu16MoypGRYYzRG1I9uoiakIcq7iKRr5Iw ZdPy0OgFq/CFnHtH/gVd4Qw/7TuaIrJf42/bLLJEkL+YWoeV6IWHeaOAF4kL6jY3Y2KT qQ/njP4mpkiIa5/q8Bzs3jjGN/w2aG4jq0hLJ3PVABg3U5QbuN8vcS7vMvTJFUxbLndy bTvzGQV7WI7WyJIstr+qITZo/9GVW1CK0VTzutI1ZI660weD0BICB/oMNMPKsLDh7wz0 Hzaw== X-Forwarded-Encrypted: i=1; AJvYcCWQOgcO3ym9jLoZGnOQ/1R6OoDe6HkPlzCxOksvlBCeQSASt8LcK1yycDGbhUxHWPChE9Cjvs5SpjERs/U=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+/p+evzD433xOriK8i6SEEMMHREaWSr/VbqkcMMQ7CwInClyT L1EPMnR6SVFsJRZBgTj2xHzDIC+HQezPKtoarAKlqgJ5DrPJMZ3lDywGBg== X-Gm-Gg: ASbGnctzgfHVVtMmcm8dzjZf7woAn/0AvxHOXEzw3JCSmgH2FI6BOL8/Efnc0Aix56i xTFg6pRbOFcuPdiWVTCKpAqYzHheVReuQssezVcmhb302QMYUso46paHR/GSNslyCDVx/SRnBFz oDKdISHB5AW1UILFHC6d9oVgH3IxykUUbedCdYUGcpYUD+qlhKhMmLN9obWcRRtSat1JOQmp3yw YkLHQ59Y17MyeF8M85qY6P/akNK5DcJVDZT2chIHM/9WhyEcmdu5IP4dwYUOOOh X-Google-Smtp-Source: AGHT+IE2GL5rZuNIXuBZc/oLTC0MKnabm8rTyvZeB9EAfLuC9Vn301LxwQn4ZP6gf6OTCYcelBLhOA== X-Received: by 2002:a67:fd10:0:b0:4af:f576:b639 with SMTP id ada2fe7eead31-4b2bbfcb6e1mr44118620137.4.1736091083778; Sun, 05 Jan 2025 07:31:23 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:23 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 09/20] platform/x86: alienware-wmi: Add a state container for thermal control methods Date: Sun, 5 Jan 2025 10:30:09 -0500 Message-ID: <20250105153019.19206-11-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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. Reviewed-by: Armin Wolf Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 50 ++++++++++++++++------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index d7b322be6c19..da8a9592b1da 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -403,6 +403,12 @@ struct wmax_u32_args { u8 arg3; }; +struct awcc_priv { + struct wmi_device *wdev; + struct platform_profile_handler pp_handler; + enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; +}; + struct alienfx_priv { struct platform_device *pdev; struct led_classdev global_led; @@ -415,9 +421,6 @@ struct alienfx_platdata { struct wmi_device *wdev; }; -static struct platform_profile_handler pp_handler; -static enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; - static u8 interface; /* @@ -1047,6 +1050,8 @@ static int thermal_profile_get(struct platform_profile_handler *pprof, static int thermal_profile_set(struct platform_profile_handler *pprof, enum platform_profile_option profile) { + struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); + if (quirks->gmode) { u32 gmode_status; int ret; @@ -1067,11 +1072,12 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, } } - return wmax_thermal_control(supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->supported_thermal_profiles[profile]); } static int create_thermal_profile(struct wmi_device *wdev) { + struct awcc_priv *priv = dev_get_drvdata(&wdev->dev); enum platform_profile_option profile; enum wmax_thermal_mode mode; u8 sys_desc[4]; @@ -1101,27 +1107,41 @@ static int create_thermal_profile(struct wmi_device *wdev) 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, pp_handler.choices); + set_bit(profile, priv->pp_handler.choices); } - if (bitmap_empty(pp_handler.choices, PLATFORM_PROFILE_LAST)) + if (bitmap_empty(priv->pp_handler.choices, PLATFORM_PROFILE_LAST)) 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, pp_handler.choices); + set_bit(PLATFORM_PROFILE_PERFORMANCE, priv->pp_handler.choices); } - pp_handler.profile_get = thermal_profile_get; - pp_handler.profile_set = thermal_profile_set; - pp_handler.name = "alienware-wmi"; - pp_handler.dev = &wdev->dev; + priv->pp_handler.profile_get = thermal_profile_get; + priv->pp_handler.profile_set = thermal_profile_set; + priv->pp_handler.name = "alienware-wmi"; + priv->pp_handler.dev = &wdev->dev; + + return devm_platform_profile_register(&priv->pp_handler); +} + +static int alienware_awcc_setup(struct wmi_device *wdev) +{ + struct awcc_priv *priv; + + priv = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + dev_set_drvdata(&wdev->dev, priv); + priv->wdev = wdev; - return devm_platform_profile_register(&pp_handler); + return create_thermal_profile(wdev); } /* @@ -1259,7 +1279,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) int ret; if (quirks->thermal) { - return create_thermal_profile(wdev); + return alienware_awcc_setup(wdev); } else { ret = alienware_alienfx_setup(&pdata); if (ret < 0) From patchwork Sun Jan 5 15:30: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: 13926564 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 81F081547D5; Sun, 5 Jan 2025 15:31:28 +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=1736091092; cv=none; b=EdnN7pbir8SQthhBb6itlu3S8l7X/85zLJYQZegoMjYIdddNT24khP5izZJWZDwDiwRYcxpauad1R4UV/jayX0e7S5dS5iX6bonucXmm2EenHl1CsblD1+R2TGGSvfxsPUQAl1jqptwgoDu4bdYo4bxi4kB6KshtG4M97k5oBkA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091092; c=relaxed/simple; bh=Wnxce9rK78lywp5p1IVlFeJPD4SaxVF9400PZSL+4z8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z1QvuRB5TFK2q41XfptIkZTEcBukV5fhkY0MIkfqdnl6NPdaPTnzFnYz4PTk07Zb9FruVFaZMLXw/kQfvcq0zoDBubcBLvIX3itc0TpY/W4x5JaSb3Ikl3HMtWBjFCnGhmzc6+DfXxKt7QGS+6hRwoS3xk6FsUaUmSmhu7VP1R4= 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=kNxUzn96; 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="kNxUzn96" Received: by mail-vs1-f45.google.com with SMTP id ada2fe7eead31-4b11a11a4f0so3475323137.3; Sun, 05 Jan 2025 07:31:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091086; x=1736695886; 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=pnuAbbta73g3wcn3Uriub8zjWympfRjknG1MQ6B9blQ=; b=kNxUzn966BPykTUdcmvJ49nrohkcvdYVF9TOVlTmrCJx5H6fwTBtuH1/hJ3lST833B YaDYkxtm4AHlRo4sYLZZixQFIsD4OsuzShcb3H/TsTdZgsKYrmUNuRpLTcApRXeL1XsX dkXTtc9gQqIq/y5kVXheGhsHE7Qab78KMpOBJhWFkyn/mtvVAbSrWKaQSeP8KWkDIrwo 9A6NaJu4AluRUg3AJkCkPbVtUP0RmglpOtKpqjF+yb03CsO1JyE2pWzeDxVL7DYD4g3o X+wAUVlkPhcaSa+empgBjIbbzlJBwEeL2DhwswnMZpy6grPdMITwiNAAoKs/GDt+DojU YDDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091086; x=1736695886; 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=pnuAbbta73g3wcn3Uriub8zjWympfRjknG1MQ6B9blQ=; b=uZYI/ovyhGCA6byZAwxNKLnLeIEXVKksv6CBQjNMyTXJGzEeGQFzaewUZ7GQz8gsxZ 8T0axUMfboYGDolGNZY1h6B0PPQeOZXCe5+4mhvissMhJ4lYYhtj+riSaWXbyd3l/txL L2/8tnMOFUNYgP4r621mJSTjg1H87YbtZmJpWgwUO184f4nfOurqHZLI0QJvm38aH34m g0k5JARKlRxV+Mg8VFPzr0I0DMhmxITy6PCPThHspCmENoehh/nH64XHYRaSZKw+CtH5 o74opALVSa8KV0zRAJ2eqmEdPotMO0pjdz9CnhUYAuotpDTeymt38hkDnVqvCVXwGHCH RvEQ== X-Forwarded-Encrypted: i=1; AJvYcCUIq/UXuASjaCcWK06zZdgtIFCSJ6yHhHqGVL2Le0FuPsWDEprsbeMJZLGcbUdg5m8ReGCsLr0YgctlyGQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxBx+UJklcdG+VD3YVj+edg6UunUeBsHo5L8Bk22nSiMKmYkNh3 j/nLHxTBCESScypUy81nS/b5X9jJ3WvGN4YWsSgC6gt25NghjXSVA8qTRA== X-Gm-Gg: ASbGncsDUgPIv3uPpcQ9zBczma5QRMVyc5Tdlwb7sDEiz2rn7VOIarlQJH0f4YWFTo8 90MfJHCEB08J5uyR8NDM48i7rPfKuXLgKXl4vGKgf8AYXNnQnKn8DXxyd1wLOh9Ztxjz9ZCXkqn G3QRaWAGHd5MUDK1MSb7t0y/ucogDAY+RuYclDEgD5wf3uD5Cj7pCFntegqZd/FO4ZLMDqZIQj9 IQnP+QJ11nYNcsA0goaNQDCAtSfJmif9fVeImNn8g2nTLt3aI34gBo9510o8E+y X-Google-Smtp-Source: AGHT+IG63/+QYwjvNOVUz3OJgpZ9Kf+rE5vBBD07e/rczO/gWUY1kzfv1UFyW3Bvcc0KC3VZHA2aaw== X-Received: by 2002:a05:6102:1524:b0:4af:f32e:ea76 with SMTP id ada2fe7eead31-4b2cc31c4bcmr44201037137.5.1736091086380; Sun, 05 Jan 2025 07:31:26 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:25 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja Subject: [PATCH v3 10/20] platform/x86: alienware-wmi: Refactor LED control methods Date: Sun, 5 Jan 2025 10:30:10 -0500 Message-ID: <20250105153019.19206-12-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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. Signed-off-by: Kurt Borja --- drivers/platform/x86/dell/alienware-wmi.c | 164 ++++++++++++++-------- 1 file changed, 102 insertions(+), 62 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index da8a9592b1da..ffedb01e81d2 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -417,12 +417,42 @@ 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}; + union acpi_object *obj; + acpi_status ret; + + ret = wmidev_evaluate_method(wdev, 0, method_id, &in, out_data ? &out : NULL); + if (ACPI_FAILURE(ret)) + return -EIO; + + obj = out.pointer; + + if (out_data && obj && obj->type == ACPI_TYPE_INTEGER) + *out_data = (u32)obj->integer.value; + + kfree(obj); + + return 0; +} + /* * Helpers used for zone control */ @@ -453,46 +483,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) { @@ -509,13 +499,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; } @@ -651,36 +642,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"); } @@ -1227,10 +1199,49 @@ static void alienware_alienfx_exit(struct wmi_device *wdev) /* * 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); @@ -1270,10 +1281,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, + }, }; struct platform_device *pdev; int ret; From patchwork Sun Jan 5 15:30:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926565 Received: from mail-vk1-f170.google.com (mail-vk1-f170.google.com [209.85.221.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 5607A1CC8AD; Sun, 5 Jan 2025 15:31:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091094; cv=none; b=fY4UcaJYJXyS4vUpmcrY7Exe4bTmnp2UnjSOdpupSlbStawOcRB1L3UsTSJ5FmfcHH8VHzoyF5GA9oO3VCRwOZ+4J+Z99r3Z354lsI7XDan2OIFkJpOwj1t5umlBhy0K4v00jT8wyz9P1lL0O6IO6us4Y8OXNU6/RGnDzn5WrHs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091094; c=relaxed/simple; bh=2rrwwcjIdyc+5ZAs1ih/MwgtbNiEaL4Zn7Jxkt+IFK4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gjct18DZEPiUuAabI4nClz6UPO7YFlefFzlYjxzErXrMk6HxGCrWK4sYXWZgKWb95ulDFTkGHRNETHHOg7jz2lO7YHbLNRIRl2lLN+FyKXnfJjnnS1+rDoi59JD6LVB7Mfp6q6K+/E2+wyl4bTjAWOmgEb8mZtpt9n3kSP7Dbj4= 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=PotKQtHa; arc=none smtp.client-ip=209.85.221.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="PotKQtHa" Received: by mail-vk1-f170.google.com with SMTP id 71dfb90a1353d-51873bc7377so4367181e0c.1; Sun, 05 Jan 2025 07:31:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091089; x=1736695889; 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=ymBGq2V9LpEqeCXPuiErKmGNmd/ipd+KpY7e8Dau4PI=; b=PotKQtHaumeUaEBRQOMfz9tAZOmCVh2ZppTUU+x7vR2luOlMgcTVjOf+OEyU5Ql2TX s9txoUY6z1AlQ2wq5B2rYGNzqhHiq+4RdIq9bcLaRqJ9pLA4RMjNLD6x7nk6n3Oy+j38 XZZOlal6JIFlf1KF7z2mVlCNr7b7uv32zKLRi27q4n4S384j/dcvSWdhxpCzOhuISkrI PgrDY/j3EIQxhX1ndbilXoNc7MJJ5Mo09vPJg4Y4Xew1mVNoD1GTG+Ueh+92bvl/IgfM aI22h3pIz4J3y5GlmtkpemjObL2vEjtC3bOdCcuCcuySQH0JPadB8Z+L5q96flnw5q1B J2lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091089; x=1736695889; 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=ymBGq2V9LpEqeCXPuiErKmGNmd/ipd+KpY7e8Dau4PI=; b=ddZyUpuHlhzYdjfYi5QZW7J5m/X/kW2dyd2yVp86ZqqpORWdXejh5PdnHyHi51bkB9 vYng9vDIPBJSrfkmvjPjjePUULiYBiCY0GVWUzpAsmLnxrdw3rfXf1kUFnJA/G8RHbNR BvkB7E+zNl8xkrONj7etX1ETt90P9n/6pk3WReOQALB6UjX4v3LNkJm0CP2Vg2m2u7A1 njFloh6KAhHdQvbsTQS0asKL2JWlDIaDTIsSVn/fVNf/gzKLYlH6JP3JS5kTpQwdXNV7 xomGqfeu55OT1SkTByyhjd78qUMGsGqdP9DHB15qIQlXcPoEBylYT62oF4f4aN3NkXgm zRWQ== X-Forwarded-Encrypted: i=1; AJvYcCXZUvzCFjhvkI9sy/K+aYs4t1O9MkBTBfgHIqRRWi3aaKottZ1Lq2gXjaqyrjlnGbyrsSyfGXkaIJUMz/8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/tFMsDwY25YLnax18dHV+ccy+FNerBxVSoYaNzdc6ZIHFtd0I 3smRfq5w8D3HdFJg6TJ30Iiuu87mGJw0imixRRxwE0AuU6hDcWJXsZ3DTg== X-Gm-Gg: ASbGncvSGmCZgH/5M/DkMtWxkrw9ZCLZhvNvTuU9WjH8SL8QQw4ZVtENahrZYiWXd2D pOZ9Zkh5qkFG4Av7VTPxnrWIcV+hiDoXm+vsTm5iUnmKokszxV/5w7GWx8Ozl8LSl43Z5zp4jMc 1RY8S4SVyb/qwh0XmH1QiJcu29feYNAbnnXoqm4td0p6YVD+xB3P9APgpnMrKlB/17fl6QMtJUp SYvDv7q0w6+DLNvpCnQf1iY/tfg8GhQY3HMslqN/9QTJhyzQjvo+I5p6RF651g/ X-Google-Smtp-Source: AGHT+IGJQjqQWsOuPFaLbo2/aHSfJvgmnbBJLSs08YNS0h4yObPJAHNCcG+DLHmBZ5sG+XhC7mjU6Q== X-Received: by 2002:a05:6122:88d:b0:518:859e:87b4 with SMTP id 71dfb90a1353d-51b75d71879mr38236711e0c.12.1736091089100; Sun, 05 Jan 2025 07:31:29 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:28 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 11/20] platform/x86: alienware-wmi: Refactor hdmi, amplifier, deepslp methods Date: Sun, 5 Jan 2025 10:30:11 -0500 Message-ID: <20250105153019.19206-13-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 | 85 +++++++++++++---------- 1 file changed, 50 insertions(+), 35 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index ffedb01e81d2..5918750a3bb1 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -700,51 +700,58 @@ 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; - status = - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + 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", 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; - status = - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_HDMI_STATUS, &out_data); + int ret; - 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; else if (strcmp(buf, "input\n") == 0) @@ -753,12 +760,12 @@ 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; } @@ -791,21 +798,24 @@ 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; - status = - alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_AMPLIFIER_CABLE, &out_data); - if (ACPI_SUCCESS(status)) { + 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", status); + + pr_err("alienware-wmi: unknown amplifier cable status: %d\n", ret); return sysfs_emit(buf, "unconnected connected [unknown]\n"); } @@ -835,14 +845,17 @@ 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; - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_DEEP_SLEEP_STATUS, &out_data); - if (ACPI_SUCCESS(status)) { + 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) @@ -850,15 +863,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; @@ -868,12 +883,12 @@ 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 Sun Jan 5 15:30:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926566 Received: from mail-vs1-f50.google.com (mail-vs1-f50.google.com [209.85.217.50]) (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 6B8A8157466; Sun, 5 Jan 2025 15:31:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091097; cv=none; b=ipNPlFtMwWPdp64w7CGfu+JsZ+L6HEgTBvozc7K+2SYgfe5YYvdjrUlJyvBCEVHNmFwdjeKriJSpp8nCJ/tvBnXCDcjL4uAL4iZdDSjCsNFeW1s6jDeEhtHVuNZEFDW0mgFSjPoPjV2D63Xl6SplYsgAlKBZJPOjUCv8j62fAc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091097; c=relaxed/simple; bh=quTStQICPnEeyOaRj434h3zO/qzGXijhZhMycUBFDxg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YYQtKylqss8xoElJgR2LyCrD0pK97wkPODIZ8cBVloG/jCUgjycJXfWY4efPHGr8bNn/zwtqc2U0YNswueAK5Qc0OKEQBS20E8u9IAWGldbxbyfBnR4sE0csIvNrkvpYFTI8N6llGy3mcCt6rtMdkcIz99gz1lFnIwQUMhZ8PQw= 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=cODWmsG9; arc=none smtp.client-ip=209.85.217.50 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="cODWmsG9" Received: by mail-vs1-f50.google.com with SMTP id ada2fe7eead31-4aff5b3845eso4907901137.2; Sun, 05 Jan 2025 07:31:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091092; x=1736695892; 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=d2qwtTU6ZYZaknQwnWFEkd4Qbc6jF/mwpsElYqofglw=; b=cODWmsG9UOdAAljbSPde5mb5b8LD3j2/CKpGSusk0Ps6W+FCT5xL3bk5RrXHAFnmIk yQLiXuyqC2HTVk6cpL1A4KZaSiyveG7bw5dOFaZPrtkBpqZmda0RVG+yjVfBA3Q7MjRb p5sJ8ktwl8QPHKxhcTl7MbOkpCbxWViMQlJukZlalYKYZqkcwzHcpl151HyHnESvspFS b0bEKxkDBbJrV05XB0JhH1GRzvMwxDHHLin1rW4CqYvZgPE0nS9X88ypFLIG47GiwQ0E n6zihzVUWMiBSz0/aLAVdPSW/KHZlafmmTuxT/fatIUV2MVwouY22OlrE9gFHt2DBNIp oN9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091092; x=1736695892; 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=d2qwtTU6ZYZaknQwnWFEkd4Qbc6jF/mwpsElYqofglw=; b=mxhfyv1P1LSsjEBq7i2W1pONGyIUhO9ZBxIA8d316RK8zNJQ4nVFTtkC4/6R/TzlQB +JlZ/RDeGUDwEJRf/khw8iAzctARmhQezjQ2PQaqdWND3gWaC90kEiYdzKxv1zXDAY4r yX9SoJRfYkIXZADcJEXrpISpujgx+xHEgAKmG72NKmO4qVIGsXzrKCG9HQljfjW5Vir/ jR4fA94LXeQqx6I1NoEkvr3+aRNcgqAmfpwuooS3lSy7NFGTDhV5TdCymF+g5c3VNSDk aHKxqJt/vFLfSAJhLBLK5emx2sOKQ6uNQAx71K2lAEJo7EJDM1rmJuxB2kbkJ5G7JYzZ ZWeg== X-Forwarded-Encrypted: i=1; AJvYcCVwwGS5ArB6rpte8FRPGP7UD7gZLyn3Bd/OCHcyYRRgnOUap0heygSM/cH2VGU/RRx6NpZbOW4JI71I+8c=@vger.kernel.org X-Gm-Message-State: AOJu0Yzr/6J/WCb14Y/pg1dOjjh/iYu0HSQhbKuE2o1ms2HboaZZZr1s 3DS9HFmf65haZ7aT/ZypWhjmWiyfKnXZ9Q6VFG755BZSwtn7D/Kyx52Zxw== X-Gm-Gg: ASbGncsseNq/utCawcqFqrbUiGpH6j5TJIUqic7TPaHaD5GhpfbaeEWmCr7CNuW72zI aTWyX5yebJJIvMkHU5JwrPTp0PHZxnpqs1ReGt2dhIwXwWpJrIpsb0edW4lMG84aF/PwBogqebe Lg954aLqNjKxrf1wbwf6KVRSvrZFo3NQff6YU3BhQG91Nxvpf4gspqx4Fg25AbiiV1PPi0e3wWC sVElN5vyeykOgbIOlJSpb8xdVdNXJ7ubDLV2kE/uCVdAnGVEQ0lmCf2wU8Og22+ X-Google-Smtp-Source: AGHT+IHZOjAVpuHiFUh588MVyRAJwAGuXut5BeqwSHa9HAEFBcgcPDmA5nQMP2cFICHD2G1XV8800w== X-Received: by 2002:a05:6102:3a0b:b0:4b1:2894:1048 with SMTP id ada2fe7eead31-4b2cc351e2bmr44293486137.10.1736091091658; Sun, 05 Jan 2025 07:31:31 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:30 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 12/20] platform/x86: alienware-wmi: Refactor thermal control methods Date: Sun, 5 Jan 2025 10:30:12 -0500 Message-ID: <20250105153019.19206-14-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/alienware-wmi.c | 87 ++++++++--------------- 1 file changed, 30 insertions(+), 57 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index 5918750a3bb1..c75ad7ef3d54 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -665,34 +665,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. @@ -938,7 +910,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, @@ -946,14 +919,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; @@ -961,7 +932,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, @@ -969,15 +940,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; @@ -985,7 +954,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, @@ -993,14 +963,13 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) .arg2 = 0, .arg3 = 0, }; - acpi_status status; + int ret; - status = alienware_wmax_command(&in_args, sizeof(in_args), - WMAX_METHOD_GAME_SHIFT_STATUS, - out_data); + ret = alienware_wmi_command(wdev, WMAX_METHOD_GAME_SHIFT_STATUS, + &in_args, sizeof(in_args), out_data); - if (ACPI_FAILURE(status)) - return -EIO; + if (ret < 0) + return ret; if (*out_data == WMAX_FAILURE_CODE) return -EOPNOTSUPP; @@ -1011,10 +980,11 @@ static int wmax_game_shift_status(u8 operation, u32 *out_data) static int thermal_profile_get(struct platform_profile_handler *pprof, enum platform_profile_option *profile) { + struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); 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) @@ -1043,7 +1013,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, 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) @@ -1051,7 +1022,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, 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) @@ -1059,7 +1031,8 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, } } - return wmax_thermal_control(priv->supported_thermal_profiles[profile]); + return wmax_thermal_control(priv->wdev, + priv->supported_thermal_profiles[profile]); } static int create_thermal_profile(struct wmi_device *wdev) @@ -1072,7 +1045,7 @@ static int create_thermal_profile(struct wmi_device *wdev) u32 out_data; int ret; - ret = wmax_thermal_information(WMAX_OPERATION_SYS_DESCRIPTION, + ret = wmax_thermal_information(wdev, WMAX_OPERATION_SYS_DESCRIPTION, 0, (u32 *) &sys_desc); if (ret < 0) return ret; @@ -1080,7 +1053,7 @@ static int create_thermal_profile(struct wmi_device *wdev) 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(wdev, WMAX_OPERATION_LIST_IDS, i + first_mode, &out_data); if (ret == -EIO) From patchwork Sun Jan 5 15:30:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926567 Received: from mail-vs1-f51.google.com (mail-vs1-f51.google.com [209.85.217.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A032172BA9; Sun, 5 Jan 2025 15:31:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091099; cv=none; b=JqroGv1CO9Unvrzkyg7Kzr2l/fckk8iiW7WVRMt3hdQvd+uwImdL/+PBxQ9ITuv0DjsHPsqBwz00a6NvGBDV5DpVGHOicFhImxrTb038DlQMKY+l5bLhz1gblyXA7TfQPfu1DoV3YpNHiIZEfMaedmo1y95vpSLdFiGbDT0Wo7k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091099; c=relaxed/simple; bh=OyuVpRkJNZLLVat7QatOuAzxH9dy2U3ZTMYj+zDLtys=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CF0tNYB/mTD8tGWkZz8mLobIGNusceqzGL3gdxbXdHvuVVBpT+ww/QmNcdflRLU5jct/SZFBhAlOcVCYqcw+kK9dWwwrR/KilXa3cE7OirbNfPsnOT8iKIEhyx6XKlN9ebNXYvnfMnRr7IF5l2JEVdztJfMJIYOUkjH5+m2Tjqo= 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=eVuT+Uay; arc=none smtp.client-ip=209.85.217.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eVuT+Uay" Received: by mail-vs1-f51.google.com with SMTP id ada2fe7eead31-4afde39e360so3700819137.0; Sun, 05 Jan 2025 07:31:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091094; x=1736695894; 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=WyJvs5chA30E1rE67dWrqqxZyf1MzcbiUQGsWGKe930=; b=eVuT+UayGQ8gv5EzF0U9dxNIOLcBEYmAVZ5q2UcgsXmZCzBLEwZq5NrBL3gKweiXJw i3jHJpJ5rEDnNESX5G+imnqFCa1wTOE94C+iiU/4962EBTD963nQX8Y5E4d9DWMBsihU H/GwzsV9/05Dewnd8LMGrcm1M5ot0tjNaXdZn0eMjPzDWLrraHun/4qdUzzbpWeHUO8Z Nc4Kr5XjmImXSsbGAnIbKWEZPTdC0qclX/ZukAWImWkx5gvx63UOTCMgzE1XER3Asns9 MkJN+Bs3Q3FwU7EMrqHHruJRed7uT+ZtN7JqfKvswlGsk/EQS2HBYZy8jQbbyu8DTMNk TNtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091094; x=1736695894; 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=WyJvs5chA30E1rE67dWrqqxZyf1MzcbiUQGsWGKe930=; b=tGayYhUFh7kguov2LGrjD2j1i3xiHCdjXH+Vc6vX8UEvc4ktZQkGJ+3ZSBBmDPzZxH hyajldMgkyW29C7TqFMqg8nbJi5p4E3yHzytmYho1walgnTVK+dj1eFLQebaIrTFqUlN pTk27WodYGhprKMO4wUTyQWaTRrtltP1BAcRAhOUBdyCdRmvgn3eQYCoQTRqGTZRTbhn W1gFIH6OsQYENOQTJwJdhwsc/RyywVjq0daeLpZ7oV5ixFBaMJqyZJxjoaphXtBjhOxl OjGydZJzQfiHDFKTS2oLWwhegFE70uywpVi8cT+QpkBcV1pcv1UvbLS6hhAbAfh/hlcP HgTA== X-Forwarded-Encrypted: i=1; AJvYcCVDfyaCwG+5qjfodo+B+aJDDvI16idAPERoVFJTbQUOSanVPIbuGq8e8sVmsUvqu5gFyXE9eCZbMIEdD/8=@vger.kernel.org X-Gm-Message-State: AOJu0YwrZCScVdW+tt7bQafzQpi1hon1cOELawXhyObJAWTtYJlVNQJs gV32a8GeZlNGJgr8hIK3yajmHkK7ylE3rIWxgjOMnXCsXIsiuqkfpadDAQ== X-Gm-Gg: ASbGncuCOn+pWYS23JaeViCS9xXYl2u1bORsF4cxAHAM4NXsPQvckLDyc4KJwNd4NIz 0m4G/fb0YxgNZG2eju90dVDJs0U4RpAJa8AcU7yPY1hafrw2FPv/iNNm7xfBxls/dF2M3oyjF3M SR9YMkiIPv/GSziEmVrXreI7aMRF0Fk0WPsxrDDv6VwE7P29v6pWEjTBCp4c66Pvutu5/qECJss srxnOPGBA/xlrDZgucbDTuDCiNXOyXjlW2EiezQdUEr4WjM+Dpk6+PEduQBMw+T X-Google-Smtp-Source: AGHT+IHnRnFTTcanvnyb56o8arQpvtL4enqD+t3ggdHTnwKE3y+sA7u2caNxVxZObzqEPAzA+CnQRQ== X-Received: by 2002:a05:6102:9d8:b0:4b2:5c2a:cc9d with SMTP id ada2fe7eead31-4b2cc3919a0mr45248369137.16.1736091094319; Sun, 05 Jan 2025 07:31:34 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:33 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja Subject: [PATCH v3 13/20] platform/x86: alienware-wmi: Split DMI table Date: Sun, 5 Jan 2025 10:30:13 -0500 Message-ID: <20250105153019.19206-15-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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_features, Rename quirks -> alienfx and change hdmi_mux, amplifier and deepslp types to bool, because they are already being implicitly used as bools. Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/alienware-wmi.c | 337 ++++++++++------------ 1 file changed, 158 insertions(+), 179 deletions(-) diff --git a/drivers/platform/x86/dell/alienware-wmi.c b/drivers/platform/x86/dell/alienware-wmi.c index c75ad7ef3d54..e2fcb95b506c 100644 --- a/drivers/platform/x86/dell/alienware-wmi.c +++ b/drivers/platform/x86/dell/alienware-wmi.c @@ -113,102 +113,68 @@ static const enum platform_profile_option wmax_mode_to_platform_profile[THERMAL_ [THERMAL_MODE_BASIC_PERFORMANCE] = PLATFORM_PROFILE_PERFORMANCE, }; -struct quirk_entry { +struct alienfx_quirks { u8 num_zones; - u8 hdmi_mux; - u8 amplifier; - u8 deepslp; - bool thermal; - bool gmode; + bool hdmi_mux; + bool amplifier; + bool deepslp; }; -static struct quirk_entry *quirks; +static struct alienfx_quirks *alienfx; -static struct quirk_entry quirk_inspiron5675 = { +static struct alienfx_quirks quirk_inspiron5675 = { .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_unknown = { +static struct alienfx_quirks quirk_unknown = { .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_x51_r1_r2 = { +static struct alienfx_quirks quirk_x51_r1_r2 = { .num_zones = 3, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_x51_r3 = { +static struct alienfx_quirks quirk_x51_r3 = { .num_zones = 4, - .hdmi_mux = 0, - .amplifier = 1, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = false, + .amplifier = true, + .deepslp = false, }; -static struct quirk_entry quirk_asm100 = { +static struct alienfx_quirks quirk_asm100 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 0, - .deepslp = 0, - .thermal = false, - .gmode = false, + .hdmi_mux = true, + .amplifier = false, + .deepslp = false, }; -static struct quirk_entry quirk_asm200 = { +static struct alienfx_quirks quirk_asm200 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 0, - .deepslp = 1, - .thermal = false, - .gmode = false, + .hdmi_mux = true, + .amplifier = false, + .deepslp = true, }; -static struct quirk_entry quirk_asm201 = { +static struct alienfx_quirks quirk_asm201 = { .num_zones = 2, - .hdmi_mux = 1, - .amplifier = 1, - .deepslp = 1, - .thermal = false, - .gmode = false, -}; - -static struct quirk_entry quirk_g_series = { - .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = true, - .gmode = true, -}; - -static struct quirk_entry quirk_x_series = { - .num_zones = 2, - .hdmi_mux = 0, - .amplifier = 0, - .deepslp = 0, - .thermal = true, - .gmode = false, + .hdmi_mux = true, + .amplifier = true, + .deepslp = true, }; static int __init dmi_matched(const struct dmi_system_id *dmi) { - quirks = dmi->driver_data; + alienfx = dmi->driver_data; return 1; } @@ -240,42 +206,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { }, .driver_data = &quirk_asm201, }, - { - .callback = dmi_matched, - .ident = "Alienware m17 R5", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware m18 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware x15 R1", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data = &quirk_x_series, - }, - { - .callback = dmi_matched, - .ident = "Alienware x17 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data = &quirk_x_series, - }, { .callback = dmi_matched, .ident = "Alienware X51 R1", @@ -303,60 +233,6 @@ static const struct dmi_system_id alienware_quirks[] __initconst = { }, .driver_data = &quirk_x51_r3, }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G15 5510", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G15 5511", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G15 5515", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G3 3500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G3 3590", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), - }, - .driver_data = &quirk_g_series, - }, - { - .callback = dmi_matched, - .ident = "Dell Inc. G5 5500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), - }, - .driver_data = &quirk_g_series, - }, { .callback = dmi_matched, .ident = "Dell Inc. Inspiron 5675", @@ -431,6 +307,103 @@ struct alienfx_platdata { static u8 interface; +struct awcc_quirks { + bool gmode; +}; + +static struct awcc_quirks g_series_quirks = { + .gmode = true, +}; + +static struct awcc_quirks generic_quirks = { + .gmode = false, +}; + +static const struct dmi_system_id awcc_dmi_table[] __initconst = { + { + .ident = "Alienware m17 R5", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m18 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x15 R1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x17 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Dell Inc. G15 5510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5511", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5515", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3590", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G5 5500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data = &g_series_quirks, + }, +}; + +struct awcc_quirks *awcc; + static int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, void *in_args, size_t in_size, u32 *out_data) { @@ -612,7 +585,7 @@ static DEVICE_ATTR_RW(lighting_control_state); static umode_t zone_attr_visible(struct kobject *kobj, struct attribute *attr, int n) { - if (n < quirks->num_zones + 1) + if (n < alienfx->num_zones + 1) return attr->mode; return 0; @@ -620,7 +593,7 @@ static umode_t zone_attr_visible(struct kobject *kobj, static bool zone_group_visible(struct kobject *kobj) { - return quirks->num_zones > 0; + return alienfx->num_zones > 0; } DEFINE_SYSFS_GROUP_VISIBLE(zone); @@ -746,7 +719,7 @@ static DEVICE_ATTR_RW(source); static bool hdmi_group_visible(struct kobject *kobj) { - return quirks->hdmi_mux; + return alienfx->hdmi_mux; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); @@ -795,7 +768,7 @@ static DEVICE_ATTR_RO(status); static bool amplifier_group_visible(struct kobject *kobj) { - return quirks->amplifier; + return alienfx->amplifier; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); @@ -868,7 +841,7 @@ static DEVICE_ATTR_RW(deepsleep); static bool deepsleep_group_visible(struct kobject *kobj) { - return quirks->deepslp; + return alienfx->deepslp; } DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); @@ -1009,7 +982,7 @@ static int thermal_profile_set(struct platform_profile_handler *pprof, { struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); - if (quirks->gmode) { + if (awcc->gmode) { u32 gmode_status; int ret; @@ -1075,7 +1048,7 @@ static int create_thermal_profile(struct wmi_device *wdev) if (bitmap_empty(priv->pp_handler.choices, PLATFORM_PROFILE_LAST)) return -ENODEV; - if (quirks->gmode) { + if (awcc->gmode) { priv->supported_thermal_profiles[PLATFORM_PROFILE_PERFORMANCE] = WMAX_THERMAL_MODE_GMODE; @@ -1306,7 +1279,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context) struct platform_device *pdev; int ret; - if (quirks->thermal) { + if (awcc) { return alienware_awcc_setup(wdev); } else { ret = alienware_alienfx_setup(&pdata); @@ -1327,7 +1300,7 @@ static void wmax_wmi_remove(struct wmi_device *wdev) { struct platform_device *pdev; - if (!quirks->thermal) { + if (!awcc) { pdev = dev_get_drvdata(&wdev->dev); device_remove_groups(&pdev->dev, wmax_alienfx_groups); @@ -1353,6 +1326,22 @@ static struct wmi_driver alienware_wmax_wmi_driver = { static int __init alienware_wmax_wmi_init(void) { + const struct dmi_system_id *id; + + id = dmi_first_match(awcc_dmi_table); + if (id) + awcc = id->driver_data; + + if (force_platform_profile) + awcc = &generic_quirks; + + if (force_gmode) { + if (awcc) + awcc->gmode = true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + return wmi_driver_register(&alienware_wmax_wmi_driver); } @@ -1366,18 +1355,8 @@ static int __init alienware_wmi_init(void) int ret; dmi_check_system(alienware_quirks); - if (quirks == NULL) - quirks = &quirk_unknown; - - if (force_platform_profile) - quirks->thermal = true; - - if (force_gmode) { - if (quirks->thermal) - quirks->gmode = true; - else - pr_warn("force_gmode requires platform profile support\n"); - } + if (!alienfx) + alienfx = &quirk_unknown; if (wmi_has_guid(WMAX_CONTROL_GUID)) { interface = WMAX; From patchwork Sun Jan 5 15:30:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926568 Received: from mail-vk1-f169.google.com (mail-vk1-f169.google.com [209.85.221.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 53BAD29B0; Sun, 5 Jan 2025 15:31:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091101; cv=none; b=OqXivuy0YLzLtmFSCwhA2zIKZ0T3V2yih8kC6hIZFmG8Szm+UzvTbxlLz8JbHkTIJj6YYGkEoSRrs7gfEZIES1ZdeYBum+bD1PW7L9zcl1ophyMEgEW7v+ohpsCDTBDgS0TBzakUx7yRrcuYovRQS9HRp9QSJFfeVfL2gOWvFNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091101; c=relaxed/simple; bh=gs3uRmNNhDg+gom3qBYm5eDMcpi0sYKqEyaPYfgbx6s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PtjccnntGsiXhkXnpiBc+sA3fnBHGkcnCU/gpTb0ZeLX1FlW2REgOOoNDTlUOkQcGFr+QHDQ9xQqll2ZD5BKM3fF1uK38DpU2pBpfheiSpYubTf+1HhCiU92p5gYR1y2sS0GhMM14L+vbWCy374hbwMNO39FQ7INBk37yx0ZWIQ= 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=T3QzhsNn; arc=none smtp.client-ip=209.85.221.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="T3QzhsNn" Received: by mail-vk1-f169.google.com with SMTP id 71dfb90a1353d-5189a440a65so7983351e0c.1; Sun, 05 Jan 2025 07:31:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091096; x=1736695896; 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=PNFvJ3UKrXcroCkRZ1MUjweZC2rJBHE/2U7k9KVQxGs=; b=T3QzhsNnXBfdxAD/DAE6WIcVTkPLgt7/yPKe9/z/OzNEMCDnf5BcNpX7zGuL8FSQ8E wleoB+LfvmOX82lHSXWrvj4o6Irh8OglNlLO6cKHCDaOo9SOlkyinl9hayVqlRidpb9V nXk/ziGQtiSvjArdy6rOId1M4imIIlP7sRcwSfRsaSQG1NJdmzvajM+MVbZKSclTZJAm +xfWmMEF+Qm0QrOcmmXNDpqUw5YlhPpfVXclyiihbqiFp+F8BAq/LFOAr/DZZk1A4F09 UUa/KAR+j9voCzsd0dGWCnCEBxqrG4lxMxJrHyvE1XORgSWwnSukMSpGTrMAfVNQetQJ mXZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091096; x=1736695896; 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=PNFvJ3UKrXcroCkRZ1MUjweZC2rJBHE/2U7k9KVQxGs=; b=j56xkA2/SloWHsQ4RaWRtw3ctvkBUfJuvRsuV7thHvGk3MeAhsMgJNmE66bQ+PQI79 7XBlbVojbhKnLYRAFcxoZi1cMfP+0t2x3GzK39mOhE09rClqmTDDrLPhU9jyvyZF6lOg P3DvFdH1RscHxQGv9RMKOU8/wQfDQxci6QOgTS61eXvk03XFhASdtMlkrhL6Czy6PdvE GUh51EvBREAnXsuEad7gk1QUccBMw6R8yafyXoOG3UhbRzEzH+90ftDiENDIvu/L/B+W MyKH3uXb7WVtQfE0ZNjn++Gv1G4Q4ToPSqSQJAK/XQNXrXopLq6g8W58Olr5uXokHtki ZJdw== X-Forwarded-Encrypted: i=1; AJvYcCWje+/bTEjSwakEtK9fijxX3jXg5H5mdTq9th1K8fdzMZQz4cVO6zErRFI1Or/GfiEu6dZ+wSX42ABK9Wo=@vger.kernel.org X-Gm-Message-State: AOJu0YzvMTkVCbQ1QkDYDf0fjvoa20W2GzaiwdOg+jL+1YUFL0GqVj78 31yilEZIYVMKd8SpC0ICKM+t5NBcAyB1SHjRm7aBdzwPa0UodakcXQVryw== X-Gm-Gg: ASbGncsaKpcc3vW5Lw88rYQmgHvTDkjFiwiKOhKkRgBeu+Upw9r/Y9IIMyltv5QfO7Z vpfHHJhhq+pyBJ7hCPz/3hf4/vWAqKhER+OVUSRPHCAn82dszO4r239UdOTdFQHwriJDbB0VSq5 U3nyEl+XOyvMvY+3HkE2u2xlFYisjLOdbMAnrxw33Wjl76Bo5GFMqik9VqedMaSdCaTRdryef8C v9iHCGXHf0X+toest1G4hgvmb3C4AxKDV1WPV02BNPB4+8/27trpDFFV52GwltT X-Google-Smtp-Source: AGHT+IHdL+9cww6zPUhSYT7CUjg+DLEdvf1DnMjY1o3BnOXHv9BiPm4DFTGrxrw2ohzaiKJhNG77uA== X-Received: by 2002:a05:6122:1992:b0:516:2d4e:448a with SMTP id 71dfb90a1353d-51b75c3a30cmr44284439e0c.3.1736091096007; Sun, 05 Jan 2025 07:31:36 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:35 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 14/20] MAINTAINERS: Update ALIENWARE WMI DRIVER entry Date: Sun, 5 Jan 2025 10:30:14 -0500 Message-ID: <20250105153019.19206-16-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- MAINTAINERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 3809931b9240..596c6a46478c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -784,10 +784,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 Sun Jan 5 15:30:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926569 Received: from mail-vk1-f173.google.com (mail-vk1-f173.google.com [209.85.221.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6D9C1C68A3; Sun, 5 Jan 2025 15:31:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091103; cv=none; b=dtnAu2sQ8mEEp+Y+WoB2UilxtgxyaScHz9f5u2AmeoiwrNLIGphQEwRduBVXpEyViRLR66nng1i3RMKgesDO0DQIsmYjOfRmeZ/0zZtKqjPlXdsLpF/HatgugeOwdCuVUsOslrd65vtreMs18BtOsUcxa0K0QxG330A94V0jQe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091103; c=relaxed/simple; bh=bzPSssBgJt5ZBR3brnXSotTbVAswx/v9sJIVpn56sHA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qpdMCpY7mGl/UGYWOp/GarlY9GfAFuD/H7jXQ4zNzAj1eA8TD6HSJmVvZcZ8GHeRpWg5FdRpdK+eCEcMwDICo7anJqts27JYkRHnSCs/zbbFbVAw4i3dipvDQwgHVVIVoWywOlTwn31D69UWxaxRhoPix8QaI3ONFfV6aIxtnzk= 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=UqC0gjHD; arc=none smtp.client-ip=209.85.221.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UqC0gjHD" Received: by mail-vk1-f173.google.com with SMTP id 71dfb90a1353d-5189105c5f5so7162764e0c.0; Sun, 05 Jan 2025 07:31:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091098; x=1736695898; 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=lYgATb3bLFskMZWLb+u6o18+64rxGqDmIoLI0qmB+ZE=; b=UqC0gjHDAkgIsouCmqdJqYOLhcNEIsZZlwF8HN+4p0LiVsx9/a9P10oRwyuRJluLFS oMcPwU9r3OG2WZpcthuKVpjGqmekWf65OcvMxqZJlvJHT0dRtTz1OjtViLdHhRoiAk5N cMpSdPbOw9dh57mwWOBB3BFKySVTj1XLnflkoBPrA7ZkHvWnMuD9P620bGL1atJIAZGB OCFpr3/8ejqeddRlmUXU4hL8sVVvqKiGAeIAKcEEGDAF9kckuuZQGNLohlpwjQlqmtDA ci7X543oK4kjyK3+1a7U9zPm2otqa3+G+ghr0nydvCaFUqHbMNKurwdMh1cJrnJ48rBG yMWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091098; x=1736695898; 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=lYgATb3bLFskMZWLb+u6o18+64rxGqDmIoLI0qmB+ZE=; b=rnBiBZXaDeFWrw7TziAD7FF+HGP9Qlm93ZWvyXhKwX1QvQ/PFw62Syoeevt658H6kx 5+Jw10y+ND8ii8XBwuXJnTnrl0a2oNAat82GRXUN27128KnhqdAiNqVypmsze/CvvqY6 wy0LyGCLoC9HmLSpdcxdg/dXU1cOB7PmlV3ntZadGoIQOIJSu4XPR03OcynA7asFZ7Ra Ya0F7Ea8ecGmdwxn/i8n4Ksbjlx5sd8uUfghG3kjWUKaqlvsqVVSXRzfkT/WD3HjWc7G IdYQLbwHI56FQ4njK5EspVF3UFXHiojxDIW2qaWVoi0l2YGJQ6BXh219w6POwEdk/AfZ LORA== X-Forwarded-Encrypted: i=1; AJvYcCUrS5Jqq8Dc02Pd+mkgprcbBEvFTb/JBsXpkGraySl2niRSoPPqHtfhyn955ukqcSDY5KCVxVXm1ygrgFU=@vger.kernel.org X-Gm-Message-State: AOJu0YyYRP2dyWI7D0LcDarGm4+Ez9i/Q30AuzlcY0aGGCpgiswaxhBP 7Sb/PWfxMNBR2Q8tlbtaF5XV87G8odgTKFPqIA4M6mrZtvaFwqSywlO11w== X-Gm-Gg: ASbGncsDrlLFjJjPiW8CIIzYcQjgL14eTYmyccrDepU2YjCVfqf6BTNHDjycvLYldYm C1yXZdKq3a/PgaXwaMF36egwU7Diy56EG5lPtVJ0vl1etqLfsuVH6e1V0jB+9y2Ng5eP+y84HTl K2cPBC3/cvI6HBoAWTmiO/taY86fq5Kc139digezJLILKemJehm9H4Aq4jsnJxLO3NMJSAPFcw3 JNTtbnswGGgUfygO+LmYtVKGWgLHWottSd4xL0nFui7QtOkUpGnI5sXlc99UoH5 X-Google-Smtp-Source: AGHT+IGO2qNPylwZEW3YTcTAGEAZ5mNAIiF8x563Xd2NZoY/Pf2qO5jxpXIxy82UYE64S0MM3t9Sqw== X-Received: by 2002:a05:6122:4884:b0:518:89d9:dd99 with SMTP id 71dfb90a1353d-51b75c2a515mr44473050e0c.3.1736091098620; Sun, 05 Jan 2025 07:31:38 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:37 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 15/20] platform/x86: Rename alienware-wmi.c Date: Sun, 5 Jan 2025 10:30:15 -0500 Message-ID: <20250105153019.19206-17-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- 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 Sun Jan 5 15:30:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926570 Received: from mail-vk1-f175.google.com (mail-vk1-f175.google.com [209.85.221.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F286157A67; Sun, 5 Jan 2025 15:31:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091107; cv=none; b=Z8xPcthxcDk88VsjtA8W+JBfFQ5YR6RXZzwfrTdfGgA5jagpPY3GoptR1nu39O8xjUdgw4uXwQKsaErxMvXg9RCkSP5wCZqEdttcebO6BI3m7NLAQ1Fc9o/ztJCE6zLRZTnSvH2QxJREDEwd7onnbneJl4QogrVariV+VOSUZDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091107; c=relaxed/simple; bh=URAXz2YLX0FC0hhGt9g0ulSYUFXSov2cJdXLWAiZLoE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A6G1Ns29B2RHBtQkm7TtOtexovghcTuVJ+DdaAnSfvkFL9VJAQUj0tB6OChBudyINiTvV8RFleJaUQlYo4bffNToz7vlM3xRaxnBlANa02mAK8Lg+vnS0EcgNuvRjg13TYh1pRdbh/fP6uLcMgqA8OqBNVhYy3L4rfZssFRVZpY= 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=maRjAxMb; arc=none smtp.client-ip=209.85.221.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="maRjAxMb" Received: by mail-vk1-f175.google.com with SMTP id 71dfb90a1353d-5174f9c0e63so4286091e0c.1; Sun, 05 Jan 2025 07:31:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091101; x=1736695901; 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=uAr4bH7tFXBmndl5zVqSa4Vf7TM9vEDhhvRekL30iQo=; b=maRjAxMbAEj/hvS2xU17b+VgbDw5PvbZVKdIKkMwIaBjV40YpyVmErYOGLFO7qwyDI NEydsv9fk9mIY+UXK4SS3VXIiXr6EK6MkfiLt4tYWuXs+pUIlE0LqLKeyB6NREfeX6Ts NTdurwcdwvwDRi1YwgQ46YA54DAf2OfA02FiwzkqKq2ozX7u8d7IE5qAVbduOReU0RgY 98pkkxFPM7rY+XeJTKoDrEaRmE8R4e8HKUIezNjnxm375QknJ1E1ZNZ1m+BdvjUye5qa v8QWTyZlpqAi/QVU3VNXzrOHCnDBVtqWQ6siI+TYHYpz05nx6pNLAZmoM99kbbnUQSdW Mhzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091101; x=1736695901; 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=uAr4bH7tFXBmndl5zVqSa4Vf7TM9vEDhhvRekL30iQo=; b=fa2oWBTlKt9Zbe5JKXiBHTnMey3zMP+n1GvU8JURFunf5xWiwEmCjbV9V3C91QQ0rN 9NeIF7s3O0wmXGXY1ss/tmDHKcbtqNg9T/MAsY0GrSNokMJpmQC0zFIPm91VrGMElUQL jkOOMZntiRdygdjq598r1xvK/6ADryxfuTH3yNi35KP1BBiUhTRiBc6VEbLT+frZQnc8 86lQXVl+F4/iIspK5D2ErXitFcpX+oH/uEyE1CSw9UJw/St/wqokW6vERQTPN7nUBnjD PVZijGu7aVpRGVbc7qnSE9Ju/X4yXFoIL1a2/cZQ6SY9Q4vdbql7iWEpqVru6sJL6Lko 9YDQ== X-Forwarded-Encrypted: i=1; AJvYcCVekUObtiwxAunZSzDyPSdd6wWOrF4hlkTWPBxh1cIrYuhin+8c0aoZX7iXK8IF0xGEkaGZ1q4f/JmNKrI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/ISS5IuAKiMB0wXj53pC0Gu775OiRBHYC3lF+SpehuTwFSZfN KmqME/yPHowwr9ocHJENN2N22o9QTtKYMGUW7E9zWCMmaU9hU8R71VZuBg== X-Gm-Gg: ASbGncug9GNSRHDza7xffxWmmiRQDd6B4ph0ENgmF0eZQ3rKNc2rSN9rnlm5DlLmv0C eifZ2KyUF5OgHj9Uc/wyx7Utm89XbHgCgaIGA0ZkGg+7ShFlsIzxCT7Tj3OHuCwefzjbmTeykq9 99jQhKb//ZydmSLoRxU4kjSal6lMTxxKx8B4NPAZR2I7iok7JqXsVNVXNPLt38L0ijDHHZObv8Z yFAE27z2T5uMpWOtIQOeR/xzYzPu+TxnKHL+mu0QqQnaCFvITLlBvvFlw1dQp65 X-Google-Smtp-Source: AGHT+IEJjeTTOvXdGlGTBsHmyzBS6dO4BCp6iq/6oEsMTDucD/L8yf1xPHXoMROp59ZMkTSb8jMx/A== X-Received: by 2002:a05:6122:659b:b0:516:2d4e:4493 with SMTP id 71dfb90a1353d-51b75c3d499mr39491539e0c.1.1736091100908; Sun, 05 Jan 2025 07:31:40 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:40 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 16/20] platform/x86: Add alienware-wmi.h Date: Sun, 5 Jan 2025 10:30:16 -0500 Message-ID: <20250105153019.19206-18-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 | 71 +++------------- drivers/platform/x86/dell/alienware-wmi.h | 82 +++++++++++++++++++ 2 files changed, 92 insertions(+), 61 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 e2fcb95b506c..9fa5ac48436e 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -5,8 +5,6 @@ * Copyright (C) 2014 Dell Inc */ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - #include #include #include @@ -16,10 +14,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 @@ -54,18 +49,6 @@ enum INTERFACE_FLAGS { 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, @@ -113,15 +96,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, @@ -245,12 +220,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; @@ -285,26 +254,6 @@ 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; struct awcc_quirks { @@ -404,8 +353,8 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = { 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}; @@ -1126,7 +1075,7 @@ static struct platform_driver platform_driver = { .probe = alienfx_probe, }; -static int alienware_alienfx_setup(struct alienfx_platdata *pdata) +int alienware_alienfx_setup(struct alienfx_platdata *pdata) { struct platform_device *pdev; int ret; @@ -1149,7 +1098,7 @@ static int alienware_alienfx_setup(struct alienfx_platdata *pdata) return 0; } -static void alienware_alienfx_exit(struct wmi_device *wdev) +void alienware_alienfx_exit(struct wmi_device *wdev) { struct platform_device *pdev = dev_get_drvdata(&wdev->dev); @@ -1229,12 +1178,12 @@ static struct wmi_driver alienware_legacy_wmi_driver = { .remove = legacy_wmi_remove, }; -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); } @@ -1324,7 +1273,7 @@ static struct wmi_driver alienware_wmax_wmi_driver = { .remove = wmax_wmi_remove, }; -static int __init alienware_wmax_wmi_init(void) +int __init alienware_wmax_wmi_init(void) { const struct dmi_system_id *id; @@ -1345,7 +1294,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); } diff --git a/drivers/platform/x86/dell/alienware-wmi.h b/drivers/platform/x86/dell/alienware-wmi.h new file mode 100644 index 000000000000..427203821967 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Alienware WMI special features driver + * + * Copyright (C) 2014 Dell Inc + * Copyright (C) 2024 Kurt Borja + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#ifndef _ALIENWARE_WMI_H_ +#define _ALIENWARE_WMI_H_ + +#include +#include +#include + +#define LEGACY_CONTROL_GUID "A90597CE-A997-11DA-B012-B622A1EF5492" +#define LEGACY_POWER_CONTROL_GUID "A80593CE-A997-11DA-B012-B622A1EF5492" +#define WMAX_CONTROL_GUID "A70591CE-A997-11DA-B012-B622A1EF5492" + +extern struct alienfx_quirks *alienfx; + +enum LEGACY_CONTROL_STATES { + LEGACY_RUNNING = 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 alienfx_quirks *quirks; + struct led_classdev global_led; + struct color_platform colors[4]; + u8 global_brightness; + u8 lighting_control_state; +}; + +struct alienfx_ops { + int (*upd_led)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 location); + int (*upd_brightness)(struct alienfx_priv *priv, struct wmi_device *wdev, + u8 brightness); +}; + +struct alienfx_platdata { + struct wmi_device *wdev; + struct alienfx_ops ops; +}; + +int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, + void *in_args, size_t in_size, u32 *out_data); + +int alienware_alienfx_setup(struct alienfx_platdata *pdata); +void alienware_alienfx_exit(struct wmi_device *wdev); + +int __init alienware_legacy_wmi_init(void); +void __exit alienware_legacy_wmi_exit(void); + +int __init alienware_wmax_wmi_init(void); +void __exit alienware_wmax_wmi_exit(void); + +#endif From patchwork Sun Jan 5 15:30:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926572 Received: from mail-vk1-f174.google.com (mail-vk1-f174.google.com [209.85.221.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC1701C0DED; Sun, 5 Jan 2025 15:31:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091114; cv=none; b=uU+gPAa0Yo/fNmwARWfz9R7Yi4HVe4g50YkictuzdkBEmtYVQdnKQBFiQScrVzgQH3CkhE+/LBP1+2RkBb0Farb7gH3qywmOJvIy+2qmjSYAE6WNqVncQyJcQfTIK/RzklOUOiHSQhUI/XOyValLPsMJkBip2ba/FeVg952HJ/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091114; c=relaxed/simple; bh=c2pbcIkhnEVOFEsci+HaC6/8KSfLm8X8/6EO2ViOUto=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OKzcPr3NwEpNn8Iy1bsIUGruESfEy67x6SBrG3d8MF0wVICVQuRZQIfYB3u4/y2dk8pJ3NBng6gTs9ndOWpzei0bZ9VqwF8XRrNW4sPaTJGJW81G/N4+ZGyt/Jf1uH0DtccmOy4Wy5rikBY4LoYZ3x1goRyErNoFzC8RVqrB9FE= 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=cG/zxd/h; arc=none smtp.client-ip=209.85.221.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cG/zxd/h" Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-51878d9511bso3992225e0c.0; Sun, 05 Jan 2025 07:31:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091106; x=1736695906; 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=hPDI/eGPG+n0yFmK8SxCHP9x3lCylZNDyV9MmcKpz2k=; b=cG/zxd/hg+Io5YbEDpaeQUd1d9w3NEN19R94G/LQ4qUF85P6XmOTdRJDvkQIaMuCV6 1n8Ed4uxfSZ6qBwbUjuyS+AgUWZi2LEaIIQYTpuEI5iO51exta5xjwR67VfvA3LwKZ5u BMFRpOo5W6NinQ6LWeQrzMOqcJE1d8NhdwMZXG0dC+N4X7G4m9/DOR586kcVbJ54QOk6 rBXLY9OGf3xS/pDHsIVE/evNWMEyIN+SZ2rJ8pQOcp9MZhqGkAo2/R0T21RXQP2NWHXB c8DJOJlb7gUFR0FZ11gCIWXsr7pG09F6usAJIdmXPJySQtJVmVfC7KL4aRrbGISgO8RO JH2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091106; x=1736695906; 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=hPDI/eGPG+n0yFmK8SxCHP9x3lCylZNDyV9MmcKpz2k=; b=UWaHhO1ltDjS/moXIQ93EboYENwnYaUjuJTgdUy+xrYFfzoIzP5q4E9dfT/nvXDShH shCVTJzTDANZB/fiJqSPrmnX4OWewsvgKnP2cRbzikBla8chZdtterNdj/ghaSTv7bCv sBYZ28cq/Rih7YelftXPf+EPIj9l40dygGNftrX2pp9vCP7kfdszKfQOqhOP8VgZ19gl YJzW42Pbmm/KPRFmGDW/uR1HmW81vo4Tlj2FMQOkpH2fGFJQFtYG7wEQCQNpFOjC4nG4 VWgkVM4cwhpMX6ij4UWqTENOCy8TGT42/O53ep/o+/R0twOWftPRDdhno6NDc18e4FHM vIOw== X-Forwarded-Encrypted: i=1; AJvYcCWE6rPClkMuBPKWyRnmdG4HKtztyYTEBea6bhQLqUaMKp7T/BLYgRMxwm/WO+XR7Ffno2tWMr/OI008rrQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxXnlvtbPUTfsIRziLwazQGf6uh3nWd6uPLLhap6IdrJEtiN2vf QvG8sO3C5Bkatv67OTIMSD2wsZh+sZARGDWEpX54borVVrgykPb+D42Trw== X-Gm-Gg: ASbGncv2EN9+2RwaTQX0K5jrHtbYIIAS6EDF9ICuX2VSwKNXGfovuV3nGBsGOYRrEkp bVDkrT3YcRP480wjt+ICLfD8x2ERtw3vGYIP3o1eHKGZOEYEjIQd4Kqaf6MlR9wlhrnk3MRUGqb jULvpKzEVMs4Xzg9U5y464FozgWnM5aiP/EwskLn8LYpqE7dWGlTPLm1ziEIWW/tMCg8cDzZrpB rNtinAYeSe5PUOhGxcMMFvR3C53ZwBO6CLg7eaXb80o/faRkQKuLq5IWluftrn8 X-Google-Smtp-Source: AGHT+IEYs4yejz1v+aoKYeevX9dPe0XIqaFTfDLY/quk8fY/doqQ0DoagCyFrzg7OisOrHP5fAG9vw== X-Received: by 2002:a05:6122:3221:b0:50c:4707:df0 with SMTP id 71dfb90a1353d-51b75c5f0a1mr45275900e0c.5.1736091104663; Sun, 05 Jan 2025 07:31:44 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:43 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 17/20] platform/x86: Split the alienware-wmi driver Date: Sun, 5 Jan 2025 10:30:17 -0500 Message-ID: <20250105153019.19206-19-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/Makefile | 2 + .../platform/x86/dell/alienware-wmi-base.c | 847 +----------------- .../platform/x86/dell/alienware-wmi-legacy.c | 98 ++ .../platform/x86/dell/alienware-wmi-wmax.c | 767 ++++++++++++++++ drivers/platform/x86/dell/alienware-wmi.h | 1 - 5 files changed, 868 insertions(+), 847 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 9fa5ac48436e..78101952094c 100644 --- a/drivers/platform/x86/dell/alienware-wmi-base.c +++ b/drivers/platform/x86/dell/alienware-wmi-base.c @@ -6,96 +6,21 @@ */ #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 INTERFACE_FLAGS { LEGACY, WMAX, }; -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 = { @@ -220,138 +145,7 @@ 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 platform_profile_handler pp_handler; - enum wmax_thermal_mode supported_thermal_profiles[PLATFORM_PROFILE_LAST]; -}; - -static u8 interface; - -struct awcc_quirks { - bool gmode; -}; - -static struct awcc_quirks g_series_quirks = { - .gmode = true, -}; - -static struct awcc_quirks generic_quirks = { - .gmode = false, -}; - -static const struct dmi_system_id awcc_dmi_table[] __initconst = { - { - .ident = "Alienware m17 R5", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware m18 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware x15 R1", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Alienware x17 R2", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), - }, - .driver_data = &generic_quirks, - }, - { - .ident = "Dell Inc. G15 5510", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G15 5511", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G15 5515", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G3 3500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G3 3590", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), - }, - .driver_data = &g_series_quirks, - }, - { - .ident = "Dell Inc. G5 5500", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), - }, - .driver_data = &g_series_quirks, - }, -}; - -struct awcc_quirks *awcc; +u8 interface; int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, void *in_args, size_t in_size, u32 *out_data) @@ -587,445 +381,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 alienfx->hdmi_mux; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); - -static struct attribute *hdmi_attrs[] = { - &dev_attr_cable.attr, - &dev_attr_source.attr, - NULL, -}; - -static const struct attribute_group 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 alienfx->amplifier; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); - -static struct attribute *amplifier_attrs[] = { - &dev_attr_status.attr, - NULL, -}; - -static const struct attribute_group 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 alienfx->deepslp; -} -DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); - -static struct attribute *deepsleep_attrs[] = { - &dev_attr_deepsleep.attr, - NULL, -}; - -static const struct attribute_group 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 platform_profile_handler *pprof, - enum platform_profile_option *profile) -{ - struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); - 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 platform_profile_handler *pprof, - enum platform_profile_option profile) -{ - struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); - - 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 create_thermal_profile(struct wmi_device *wdev) -{ - struct awcc_priv *priv = dev_get_drvdata(&wdev->dev); - enum platform_profile_option profile; - enum wmax_thermal_mode mode; - u8 sys_desc[4]; - u32 first_mode; - u32 out_data; - int ret; - - ret = wmax_thermal_information(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(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, priv->pp_handler.choices); - } - - if (bitmap_empty(priv->pp_handler.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, priv->pp_handler.choices); - } - - priv->pp_handler.profile_get = thermal_profile_get; - priv->pp_handler.profile_set = thermal_profile_set; - priv->pp_handler.name = "alienware-wmi"; - priv->pp_handler.dev = &wdev->dev; - - return devm_platform_profile_register(&priv->pp_handler); -} - -static int alienware_awcc_setup(struct wmi_device *wdev) -{ - struct awcc_priv *priv; - - priv = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); - if (!priv) - return -ENOMEM; - - dev_set_drvdata(&wdev->dev, priv); - priv->wdev = wdev; - - return create_thermal_profile(wdev); -} - /* * Platform Driver */ @@ -1060,13 +415,6 @@ static const struct attribute_group *alienfx_groups[] = { NULL }; -static const struct attribute_group *wmax_alienfx_groups[] = { - &hdmi_attribute_group, - &lifier_attribute_group, - &deepsleep_attribute_group, - NULL -}; - static struct platform_driver platform_driver = { .driver = { .name = "alienware-wmi", @@ -1106,199 +454,6 @@ void alienware_alienfx_exit(struct wmi_device *wdev) platform_driver_unregister(&platform_driver); } -/* - * 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 void legacy_wmi_remove(struct wmi_device *wdev) -{ - alienware_alienfx_exit(wdev); -} - -static 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, - .remove = legacy_wmi_remove, -}; - -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, - }, - }; - struct platform_device *pdev; - int ret; - - if (awcc) { - return alienware_awcc_setup(wdev); - } else { - ret = alienware_alienfx_setup(&pdata); - if (ret < 0) - return ret; - - pdev = dev_get_drvdata(&wdev->dev); - - ret = device_add_groups(&pdev->dev, wmax_alienfx_groups); - if (ret < 0) - alienware_alienfx_exit(wdev); - - return ret; - } -} - -static void wmax_wmi_remove(struct wmi_device *wdev) -{ - struct platform_device *pdev; - - if (!awcc) { - pdev = dev_get_drvdata(&wdev->dev); - - device_remove_groups(&pdev->dev, wmax_alienfx_groups); - alienware_alienfx_exit(wdev); - } -} - -static 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, - .remove = wmax_wmi_remove, -}; - -int __init alienware_wmax_wmi_init(void) -{ - const struct dmi_system_id *id; - - id = dmi_first_match(awcc_dmi_table); - if (id) - awcc = id->driver_data; - - if (force_platform_profile) - awcc = &generic_quirks; - - if (force_gmode) { - if (awcc) - awcc->gmode = true; - else - pr_warn("force_gmode requires platform profile support\n"); - } - - return wmi_driver_register(&alienware_wmax_wmi_driver); -} - -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..45ff6b6518e5 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi-legacy.c @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Alienware LEGACY WMI device driver + * + * Copyright (C) 2025 Kurt Borja + */ + +#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 void legacy_wmi_remove(struct wmi_device *wdev) +{ + alienware_alienfx_exit(wdev); +} + +static 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, + .remove = legacy_wmi_remove, +}; + +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..9b65e401b454 --- /dev/null +++ b/drivers/platform/x86/dell/alienware-wmi-wmax.c @@ -0,0 +1,767 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Alienware WMAX WMI device driver + * + * Copyright (C) 2014 Dell Inc + * Copyright (C) 2025 Kurt Borja + */ + +#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 gmode; +}; + +static struct awcc_quirks g_series_quirks = { + .gmode = true, +}; + +static struct awcc_quirks generic_quirks = { + .gmode = false, +}; + +static const struct dmi_system_id awcc_dmi_table[] __initconst = { + { + .ident = "Alienware m17 R5", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware m18 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x15 R1", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Alienware x17 R2", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), + DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"), + }, + .driver_data = &generic_quirks, + }, + { + .ident = "Dell Inc. G15 5510", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5511", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G15 5515", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G3 3590", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"), + }, + .driver_data = &g_series_quirks, + }, + { + .ident = "Dell Inc. G5 5500", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"), + }, + .driver_data = &g_series_quirks, + }, +}; + +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 platform_profile_handler pp_handler; + 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, +}; + +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 alienfx->hdmi_mux; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(hdmi); + +static struct attribute *hdmi_attrs[] = { + &dev_attr_cable.attr, + &dev_attr_source.attr, + NULL, +}; + +static const struct attribute_group 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 alienfx->amplifier; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(amplifier); + +static struct attribute *amplifier_attrs[] = { + &dev_attr_status.attr, + NULL, +}; + +static const struct attribute_group 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 alienfx->deepslp; +} +DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE(deepsleep); + +static struct attribute *deepsleep_attrs[] = { + &dev_attr_deepsleep.attr, + NULL, +}; + +static const struct attribute_group deepsleep_attribute_group = { + .name = "deepsleep", + .is_visible = SYSFS_GROUP_VISIBLE(deepsleep), + .attrs = deepsleep_attrs, +}; + +static const struct attribute_group *wmax_alienfx_groups[] = { + &hdmi_attribute_group, + &lifier_attribute_group, + &deepsleep_attribute_group, + NULL +}; + +/* + * Thermal Profile control + * - Provides thermal profile control through the Platform Profile API + */ +static bool is_wmax_thermal_code(u32 code) +{ + if (code & WMAX_SENSOR_ID_MASK) + return false; + + if ((code & WMAX_THERMAL_MODE_MASK) >= 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 platform_profile_handler *pprof, + enum platform_profile_option *profile) +{ + struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); + 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 platform_profile_handler *pprof, + enum platform_profile_option profile) +{ + struct awcc_priv *priv = container_of(pprof, struct awcc_priv, pp_handler); + + 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 create_thermal_profile(struct wmi_device *wdev) +{ + struct awcc_priv *priv = dev_get_drvdata(&wdev->dev); + enum platform_profile_option profile; + enum wmax_thermal_mode mode; + u8 sys_desc[4]; + u32 first_mode; + u32 out_data; + int ret; + + ret = wmax_thermal_information(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(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, priv->pp_handler.choices); + } + + if (bitmap_empty(priv->pp_handler.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, priv->pp_handler.choices); + } + + priv->pp_handler.profile_get = thermal_profile_get; + priv->pp_handler.profile_set = thermal_profile_set; + priv->pp_handler.name = "alienware-wmi"; + priv->pp_handler.dev = &wdev->dev; + + return devm_platform_profile_register(&priv->pp_handler); +} + +static int alienware_awcc_setup(struct wmi_device *wdev) +{ + struct awcc_priv *priv; + + priv = devm_kzalloc(&wdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + dev_set_drvdata(&wdev->dev, priv); + priv->wdev = wdev; + + return create_thermal_profile(wdev); +} + +/* + * 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, + }, + }; + struct platform_device *pdev; + int ret = 0; + + if (awcc) { + return alienware_awcc_setup(wdev); + } else { + ret = alienware_alienfx_setup(&pdata); + if (ret < 0) + return ret; + + pdev = dev_get_drvdata(&wdev->dev); + + ret = device_add_groups(&pdev->dev, wmax_alienfx_groups); + if (ret < 0) + alienware_alienfx_exit(wdev); + + return ret; + } +} + +static void wmax_wmi_remove(struct wmi_device *wdev) +{ + struct platform_device *pdev; + + if (!awcc) { + pdev = dev_get_drvdata(&wdev->dev); + + device_remove_groups(&pdev->dev, wmax_alienfx_groups); + alienware_alienfx_exit(wdev); + } +} + +static 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, + .remove = wmax_wmi_remove, +}; + +int __init alienware_wmax_wmi_init(void) +{ + const struct dmi_system_id *id; + + id = dmi_first_match(awcc_dmi_table); + if (id) + awcc = id->driver_data; + + if (force_platform_profile) + awcc = &generic_quirks; + + if (force_gmode) { + if (awcc) + awcc->gmode = true; + else + pr_warn("force_gmode requires platform profile support\n"); + } + + return wmi_driver_register(&alienware_wmax_wmi_driver); +} + +void __exit alienware_wmax_wmi_exit(void) +{ + wmi_driver_unregister(&alienware_wmax_wmi_driver); +} diff --git a/drivers/platform/x86/dell/alienware-wmi.h b/drivers/platform/x86/dell/alienware-wmi.h index 427203821967..e4b75b1acd10 100644 --- a/drivers/platform/x86/dell/alienware-wmi.h +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -48,7 +48,6 @@ struct color_platform { struct alienfx_priv { struct platform_device *pdev; - struct alienfx_quirks *quirks; struct led_classdev global_led; struct color_platform colors[4]; u8 global_brightness; From patchwork Sun Jan 5 15:30:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926571 Received: from mail-ua1-f48.google.com (mail-ua1-f48.google.com [209.85.222.48]) (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 A2BED1547D5; Sun, 5 Jan 2025 15:31:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091112; cv=none; b=DoK0/OTTD5G9rSpXQxApFUCEdbaha/jE93V60yiLacY6/ADnVDlgEc19GyDeRpZyEYAGmI3wTPh+m4Zk03gvAMNEbAp2B8+qNvzZ3djAvMSb8EB/MUQpbaiYoFQyZ0mcLRH1bzTMOQ5Rh8glfoTUvr24AECmpwhpjRfFZ9l8k0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091112; c=relaxed/simple; bh=fYOgJwgKTd4DHoTXBUjVryZrq6+FTwe5bLkfajCUcZw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YzNz8X93NSTtQoKF+9355UdyVG5G+k2/vsKfGVmXI933v2yc40sBFXOmsvkGGYrHVQmUe3rp5PSZcbEjvY7nRhTyFzUMXxuA9Rfb6ideeE1nGlVCBGi8219wNMSMHD8267tgFIlEUqZLQVKCYUDesU+GT0v16rU8DSFbuC9U55U= 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=KmNfPLqW; arc=none smtp.client-ip=209.85.222.48 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="KmNfPLqW" Received: by mail-ua1-f48.google.com with SMTP id a1e0cc1a2514c-85c559ed230so2350810241.0; Sun, 05 Jan 2025 07:31:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091107; x=1736695907; 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=wzql+0NbG6E8T/ZwGnUcjMqpNG9BOV0R9Dxh4H3SXlM=; b=KmNfPLqWSE+96axR9a+0k53SzLEdXoaJBjHfSSnwX6jVt6zYDPnGkpm6KsrcGnUyTb m01sRR6aZ1gmItXn9raVfeVtVF4LsEYHJlLfGcksS+C07tkjFjT8NVPrmaNO33X7Ya8j 1wXNg2vEI8zog+2HINKO7xs5OIp6EEgt1uokorvtO1oPNajq96LsOReC2EB0ATPvqs5h k2EuHeeUmhK+4SrF9TCRyTb37ZM0CrZeVykKXR/64Lgc9wy3AKx0X/qy5S2xbubVC/Uc EvMEBrmdVkVdFxD0ibIRhAFzt3aimGra0g+TOvsKddSTM5PZQKvD9PoYbsRgRHtuKesl b/5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091107; x=1736695907; 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=wzql+0NbG6E8T/ZwGnUcjMqpNG9BOV0R9Dxh4H3SXlM=; b=k0RqrTmjlJkTbQXUm/yl+BpQVyvk0taEGAvotpVUTutYiWn6aUdl/oWJOh7UkSsCBC zfkj4Es5pt4YwSiLu+xskNw4aEzRIoTjqvkGT8HplYC++pGzYnUfvJ+O853H8eEG+FVG DmWbuqlSsvonrV0evuYWgF0d3xumPzfLay+HuhhMKxx8mh+xcf3ec7rBXPkMo3mV5CMV VGr9XHXuTa0KhxN1RFuDHVwHEcJag5Nx8AEqnMqka2BrjZ1xlodMjztG+xKMJhWot5r2 PSO5hg26XeMiyBquWNLx8/9gerZUSSS1X31Mfd+cpDbreEdusHUzI5Vn+hXqSU72U5ec tGAQ== X-Forwarded-Encrypted: i=1; AJvYcCV17HTm3MGMa2i4vOiBgwC1pDe0PskLziwlUu9uSrtZjQqgmp0nuwFPIl1VwZESKrQLsJGj/ta3QQHanHw=@vger.kernel.org X-Gm-Message-State: AOJu0Yxm9a5iBA4taeQ2zZRnLSjQ8nAkMK/nIZx42M6J8lvwjgyNKjcZ /fWrdtE3PkZLzdR17EmlsK7lsGkGTsc4ZWv3JZ5K6QqrXb84e2j3lZXwgw== X-Gm-Gg: ASbGncuO4WWhKhRJIFcKqPLqmIbJ8rlCr3rD2s2Jt6ziWJ94E9SG0/qXLgUpmcNervD YMTPSBK9yxlUNh9N2YdtME3B194i8EjCyKLFN22iy//524DYk00qPeEFBfjsdE6oxt2nyFYJ20N kK4yqrVtOBxe4hZVtJvnDLnGzEnd1isN7lFgtJ5PdefFbEs+O4venCTktBlLyjFv7n+3I7TqyCl f/GPnhfrxhoG+cXgeb4hAjsticYHPZrUO/XOPI3AT9I3l+lU194LmTXIh9ekFyx X-Google-Smtp-Source: AGHT+IEZprA3yFTSzTgbSndK7IxZvnAk4N6fmNSFvl/ydA+DdDmb0rtekZmobaf8UY93Mldix1EZ9A== X-Received: by 2002:a05:6102:e0e:b0:4b2:9e8b:54c with SMTP id ada2fe7eead31-4b2cc488c39mr39705561137.24.1736091107577; Sun, 05 Jan 2025 07:31:47 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:46 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 18/20] platform/x86: dell: Modify Makefile alignment Date: Sun, 5 Jan 2025 10:30:18 -0500 Message-ID: <20250105153019.19206-20-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- 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 Sun Jan 5 15:30:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926573 Received: from mail-ua1-f49.google.com (mail-ua1-f49.google.com [209.85.222.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 C56671D63CF; Sun, 5 Jan 2025 15:31:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091115; cv=none; b=jpHU7eIxxOYaOp26BOjoPHVYrhGs7gxJY3S/7Hbfm17PfMwI2c6+RIm0j3mE5w8QZ4uwBZgQHejSSCrYKuZ3i93fIedinf0xHYkEKXp8e193xvE9gmWD04f4qnJ1HyMIWP2OVmIwGYkrzU+WAcWMy00pVRsQhRKnibJT/OwQCck= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091115; c=relaxed/simple; bh=mofHRnjzZBeMrOixowVvjsphMdWpR8UxyDDKlQ5oUgQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R6hV4nIKd3pZJCrZ3+ZQYsDvqVok2qoRoxai4bI5RtedDIyGPUyJxmfD5sAp+ksIQAnzU3bZvyO9Mc0Xnx+HyrC+0crRuGPmDsr+0exAJ0FOS2BtrXsf+0K2qTobPEWOVivtx4IHOEGgcPfV3KnWi8z+yZ1HADNvHyqhV8B7Zx0= 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=YPa97OTU; arc=none smtp.client-ip=209.85.222.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="YPa97OTU" Received: by mail-ua1-f49.google.com with SMTP id a1e0cc1a2514c-85bafa89d73so2050750241.2; Sun, 05 Jan 2025 07:31:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091110; x=1736695910; 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=61DglG1nwpVdhL1WtytyiQkVAjk3omk/B7echDEv+BU=; b=YPa97OTU+YxRJ6wRaX0JF1xHP8OfDUmsHJuKaHNNy84/h+FB3JCZoj50JEzEZqVkLI t4znPXjKNYIFfKWa2uvImfLor7yHNbAu+xPxlcOOn7eg1xpL2q0IjpyYVAfCjK38BPKs XrK+tKM+DWwRjXVx7NVjBMII9v/E8mP9CrFJw1viASlO/IUWh9djJYxukuShoKxT2GsF VKABVvRu8HmUsCzR0RO76GH8+Cl81myNnXcx1f7XQNrTM1gqeL4J1E6tVMABFCAMtVhy 8x7RSDXJuCi9JvbwnBfubUSLVsCN+QOtWijuzRu+zjWranpxdXXMCastJZDvN0OEtoTy ndow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091110; x=1736695910; 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=61DglG1nwpVdhL1WtytyiQkVAjk3omk/B7echDEv+BU=; b=sDyeyeZK0NkKtH76ffQkw5Xu1RecLQIn8TlaSqq9XoybNqR8jebPlWUessaXepscnJ idSDPAeXsRFZvCKAF8V6LKwHBptPH7ucXsfQ7vgLk+h9O5SVyiiCImECUPD5KiHpZvk9 9jeZeptFHbFP7TnQGmgXp1AHp6afBiiMNUmynrOn+8u/BHWz5LuNxo4d9nmuqpJW0e0v CwAWnxVOWG+55QNMba5DFzu+/oo+9JEYeOs9+wpgL57zeOBvjDzaXvqoUJG0M4UYkKN4 067iXAERkrRS9w9Eg/+eih7I/XjOKh97lwGHyL24u6UeCOdQkXX7m7t4GXA7fdLT86KH arEQ== X-Forwarded-Encrypted: i=1; AJvYcCW6EB1HG4TMHgBbvhk/S3IGTjYzVU068TOVs0HV3KmKCOSCuh83b3Bi68vneL7A0dAmuSVwMSjq9wjO+LI=@vger.kernel.org X-Gm-Message-State: AOJu0YyL2UwBzsK/P5xH4jDjLpXBiwVe6I0qWC1wAIDIVgKZx5XbQoNb sVy6FbquBdduiok5AKSMxQ6zLBf/Vy4xI0mzOOVz9OQPxF+S97cBpcaBiQ== X-Gm-Gg: ASbGncvFUHouvFwfkpQivUxMXhMJ4oEIXdAub2l5SawvrYOH3qXNLVNe8Cyf/x9Y6MF CRje0HfnW+hDP0pZVN0NLCcFGcv3mEryQUlqxLMaX2nOTm69fELolusg7GzyuzwO7vY2ubvXDNo GO3FlF4mNbGIeuzsiI+emeC62s0sIPUBDbpFMy0nLPMjsyMAJ/ZK26QoFyg0b2TGCHGLd5uOqTu V2aJOVuSC0WS9ESBokFKE/fcO3URdlVvzE0nr6h+WX8Giu7a2j8d6Gghz5HLx/y X-Google-Smtp-Source: AGHT+IHkCIjecNaxsEtwTGE643jCJ/ctTJeK0sfDu7DeHNzgwPcy3LuwlAJImAcCG5Hy/Y/KpiRByA== X-Received: by 2002:a05:6102:38cd:b0:4b0:2d7c:43e1 with SMTP id ada2fe7eead31-4b2cc4592f7mr44699886137.20.1736091110194; Sun, 05 Jan 2025 07:31:50 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:49 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 19/20] platform/x86: Update alienware-wmi config entries Date: Sun, 5 Jan 2025 10:30:19 -0500 Message-ID: <20250105153019.19206-21-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- drivers/platform/x86/dell/Kconfig | 30 +++++++++++++++++++---- drivers/platform/x86/dell/Makefile | 4 +-- drivers/platform/x86/dell/alienware-wmi.h | 23 +++++++++++++++++ 3 files changed, 50 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/dell/Kconfig b/drivers/platform/x86/dell/Kconfig index d09060aedd3f..f8a0dffcaab7 100644 --- a/drivers/platform/x86/dell/Kconfig +++ b/drivers/platform/x86/dell/Kconfig @@ -18,15 +18,35 @@ config ALIENWARE_WMI tristate "Alienware Special feature control" default m depends on ACPI + depends on ACPI_WMI + depends on DMI depends on LEDS_CLASS depends on NEW_LEDS - depends on ACPI_WMI + help + This is a driver for controlling Alienware WMI driven features. + + On legacy devices, it exposes an interface for controlling the AlienFX + zones on Alienware machines that don't contain a dedicated + AlienFX USB MCU such as the X51 and X51-R2. + + On newer devices, it exposes the AWCC thermal control interface through + known Kernel APIs. + +config ALIENWARE_WMI_LEGACY + bool "Alienware Legacy WMI device driver" + default y + depends on ALIENWARE_WMI + help + Legacy Alienware WMI driver with AlienFX LED control capabilities. + +config ALIENWARE_WMI_WMAX + bool "Alienware WMAX WMI device driver" + default y + depends on ALIENWARE_WMI select ACPI_PLATFORM_PROFILE help - This is a driver for controlling Alienware BIOS driven - features. It exposes an interface for controlling the AlienFX - zones on Alienware machines that don't contain a dedicated AlienFX - USB MCU such as the X51 and X51-R2. + Alienware WMI driver with AlienFX LED, HDMI, amplifier, deep sleep and + AWCC thermal control capabilities. 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 e4b75b1acd10..a810767a0eb7 100644 --- a/drivers/platform/x86/dell/alienware-wmi.h +++ b/drivers/platform/x86/dell/alienware-wmi.h @@ -72,10 +72,33 @@ int alienware_wmi_command(struct wmi_device *wdev, u32 method_id, int alienware_alienfx_setup(struct alienfx_platdata *pdata); void alienware_alienfx_exit(struct wmi_device *wdev); +#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) int __init alienware_wmax_wmi_init(void); void __exit alienware_wmax_wmi_exit(void); +#else +static inline int alienware_wmax_wmi_init(void) +{ + return -ENODEV; +} + + +static inline void alienware_wmax_wmi_exit(void) +{ +} +#endif #endif From patchwork Sun Jan 5 15:30:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kurt Borja X-Patchwork-Id: 13926574 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 D4D531D619D; Sun, 5 Jan 2025 15:31:54 +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=1736091118; cv=none; b=fTEc9e8ZdsmOIUc3pdQ2u2Rpys537xDB97AojG7dbADRbVvBYX8FzZhMLM8FamX3O3sSyklgARJ77d7qriYNz2ad33nujC5lIWFeY2e1paqdcp6Va1QMGPnOb77stxu3vXt70DAmwh6O2O4SaagaEUGmrn7qQFpdlK2rndu1GAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736091118; c=relaxed/simple; bh=fPQbAuBQIcWYIyaeAJThPBrTbUj1bF4pa4LF9jX/wIw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tMRoha7RhnJ6/fth0ejyBWZkHtn0vezDPP8nFoP3siJ6uhIQWo0f+7r+foVFNlSV+ZYwvytMMKeUzj28fHcwOr1GBTmWkLhqx91Wea7tucf5gygIEn8f0kd1dndG/kmSw+JmTjFR6GlnintNnTsnfnSKvaErkNHbup6J6TYZE7Y= 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=N0tkLhHn; 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="N0tkLhHn" Received: by mail-vs1-f49.google.com with SMTP id ada2fe7eead31-4b10dd44c8bso3791578137.3; Sun, 05 Jan 2025 07:31:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091113; x=1736695913; 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=sxLvlvRHaFURIFeRia2uFNbyXNyI0WQCaBZ2ZzqsIrc=; b=N0tkLhHnTNC1XM923x0avG8vXilctGBaSn1pO65/OZnluqYlfXh/KAe0UDiTNotbZo 1zKEhwUVjTKAGgb1DvvOvUdfNbcIBrM4Lca0nZCbsrRX1kOi057XTjRk3FYbau76XjpI jZ9JUfnwOAMMxIqeX2lGdgt7vQDwrQpA53Ndz/8jk4Bw0xI7XSBQu/+IkZAz5ZDXPqNn WscLeg+maV40Gw7dfsjxLnKuz/6rvtFT75xsE44axW+5acH17MWa3nxRfWtvp9EW/tQP NTJVm6JszLkYCyk9EkA0aMZ3qk0n+g6NxVbU6lMdZEVTGUwoHHAgbZ6Xt55G28/JjiNi 035Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091113; x=1736695913; 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=sxLvlvRHaFURIFeRia2uFNbyXNyI0WQCaBZ2ZzqsIrc=; b=ErCGMYTafLkNLiUK0ZlOYcmr3V7A7il0OpocO7fzsYXuTzf8g/fgU8dTJpqggvWp7a eEzPeQHLMp/1H/SKe7SLNiIrxxJDiPz9tvyLnc6jpORFkedAOgssskQ1RcbVjr2pRR9a R9sBHxVEd4nLaEFvk42LjSa86VXlKfXCV7M2/Rrd97drN1wZtpvfucRHs1zWcnAUStrS URWzAxBr8tEqJHuOyZlRDlzF5aBci1x3TezRACYQ961374DpXseUvvHXB2R3Rl7+J5pJ hWb40Ay9iLjLwxbzCM21oxGtVop+LutjDKHS9jLt7D0JBlR5k/FqOTTAWuNrlKgwnvcr clNQ== X-Forwarded-Encrypted: i=1; AJvYcCUPiO6Obumlm8x6MQm+6Fs6b6mLk7eNetpfLVOXK5wzWtzR6QPEO42gJvdwbWa5NStCmVs9X/m+8ngJYKI=@vger.kernel.org X-Gm-Message-State: AOJu0YzSv4lB0JeRNkAiPVmAR9uNxK7S+xoBelETYUxp7QCAEFI9/kPk is69Eml9Htj+SQn1xVcUccIsQKksMZa5dlwOg3rQrcAHY3J6iKy1I1+ruw== X-Gm-Gg: ASbGncu/kJk3nEsSdZyFz0BCIYWqlVuCmrxxslwVKBLkondq0tjScgqybcVNdiARmCa nMZBI8YEtys93MB3Oz/iE5misjxm/94XzHkPWdCL1PXb0nQd3eILqsPeBW+7EfUNXHcHPFPFgrP xG8mTWjQ9+NWAO6TrZyVEE5Guuv4If7fQFfzZGjgnHlbnQcR+6HV2rrEDXwh7/Bm+gJ+E17U/0T Y9h6J4rONRHuZzKmWi8sgBtvyRfSr/g4FhOrjxjKwPBRSdfhaYu9a/fVWYhPOD8 X-Google-Smtp-Source: AGHT+IGmaC5hgQabrDFppPAAipfc7m2gULCelFXr6KJuk/J/vWbB8qfNhA36w/yyf5KHjkYdO/EcZw== X-Received: by 2002:a05:6102:15a4:b0:4b1:1a3b:a62a with SMTP id ada2fe7eead31-4b2cc499d76mr48605260137.26.1736091112746; Sun, 05 Jan 2025 07:31:52 -0800 (PST) Received: from localhost.localdomain ([2800:bf0:82:1159:1ea9:11b1:7af9:1277]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-8610ad3f34bsm6778975241.28.2025.01.05.07.31.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 05 Jan 2025 07:31:52 -0800 (PST) From: Kurt Borja To: platform-driver-x86@vger.kernel.org Cc: ilpo.jarvinen@linux.intel.com, w_armin@gmx.de, mario.limonciello@amd.com, hdegoede@redhat.com, Dell.Client.Kernel@dell.com, linux-kernel@vger.kernel.org, Kurt Borja , Armin Wolf Subject: [PATCH v3 20/20] platform/x86: alienware-wmi: Update header and module information Date: Sun, 5 Jan 2025 10:30:20 -0500 Message-ID: <20250105153019.19206-22-kuurtb@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250105153019.19206-2-kuurtb@gmail.com> References: <20250105153019.19206-2-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 Signed-off-by: Kurt Borja Reviewed-by: Mario Limonciello --- 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 78101952094c..c98c65341233 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 */ #include @@ -13,6 +14,7 @@ #include "alienware-wmi.h" MODULE_AUTHOR("Mario Limonciello "); +MODULE_AUTHOR("Kurt Borja "); MODULE_DESCRIPTION("Alienware special feature control"); MODULE_LICENSE("GPL");