From nobody Thu Apr 2 10:38:30 2026 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (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 7C048823DD for ; Sat, 14 Mar 2026 22:40:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773528032; cv=none; b=DO6D9JC1Pb6T6M81mNN13sBQaRaJ62bOQXJhd/AQBKTogte/Kk1Nax8gR6lMAdPlm4HNQ49ZPac2m3zBg4BRq3e1Zyp5sUtbXWhtPaJSCTaHtTflMrR0xrGV0USwgfXMhMEiI7tIW8l7CkaV81kIfHXTuZbt7Rbd6+3npfg/i7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773528032; c=relaxed/simple; bh=EiECS9uS2raJald4G1Z7WH5nAju0GwEo/qx/RGKwHQk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=lye+UA33KdCxRLzr0Piz9+lf23MO3wNjMUExQYvowLTWspsjuAADTPNyz0tUzGwJutsl2mQpeInSnS7FFFGh4xhBIfXBFEPM/edcLEcqyDjwkpzhXW3wnc9R5HMcZAfPu3SVYKJgL2dXX7iSfWinh7j4sh3RpuiDsyOBCbeBAIE= 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=no+oKk3b; arc=none smtp.client-ip=209.85.214.177 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="no+oKk3b" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2b04e6a989eso1104755ad.3 for ; Sat, 14 Mar 2026 15:40:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773528031; x=1774132831; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=k/YNPxsCw6jxw3lcUUiuO3dmDTUsSL1Ns+YaCfsyYUE=; b=no+oKk3b1Mo6QYIfMxzRdmYKW4YvBhEB2Pn+H/PnhZODcNFNGOml0o7o83FtdZt/ym PwSn3A7R/eis0PR8Jdn3KrjdoL1e7Gw8XgFftfbRACARYMt4OOzThidW6+u7nKrM8iOv wHlRKFCXda9F/R0z8nW7eRHQufDDLIKQYYCsDX8SfAEZ5tjkrE6dl8BEFJt+BxGXHPpX KXhRLyeAQvUlggob/Tt/rGX60PfZ29me1b0TR9Cwm3vX6P7RGbXJv7gymj+lPYZD33TG dO0IA64CMjSurFH9wszTtLb20jdh9ZP1f8ubpq85OwEwIcDHR1KzDGIvOB2LUv0Z0+O0 Y9KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773528031; x=1774132831; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=k/YNPxsCw6jxw3lcUUiuO3dmDTUsSL1Ns+YaCfsyYUE=; b=LgOo/w+3F+dlq6VMdua7/gi84EMXRwsllCIkvQTPWT8o3BybDa+ziExzIApHsi1cER nwcJpuCCuiUQz8EMtk4SV7/MF9LWbrYEqqOBQI0UkXGOiaH6AYfyWqP5RisqQFyqLOC1 74zHSakRmoIWkNkZX57w+4E7wt9JMCvqkRbjH9DG9iEnbZfHCYLLmUPOZjWl2Za09taB VePEyd8sIeoAP4q2ZM1SDeEXTCpB5Nq/kb4XDHjVUtzuc+r/IMKOnp0xJgPfcrrSG3Hv kq1kt8SLENYg6P9TS1KK4Z/pToZm4RSEGJ7OmxSRAmJle9pq6yOeQCcRDjJtOR+YbRIC Q/6w== X-Forwarded-Encrypted: i=1; AJvYcCUcpE0J3ZPMiBvTqUXRa2tbE5Q2bIaKsro0fTMLuJjUb0V3eD+o+ldBc5XNKe1ozLwnWAdt/yOSvv5Oz6U=@vger.kernel.org X-Gm-Message-State: AOJu0YwbcM1ix7JvgJ8f9puHf1PKDwA0ACpoAEHWwvQkDfg+fgG1YnKW pHepa+UqXObXl4KKRRGCFQ+/CA12yykNJ1eX6/dxdng6P+wBIPmB18yG0bDl X-Gm-Gg: ATEYQzzWZFGGJ9gRgJFE0yahaEDcg15pyxRqUf0IznHjM0a9evOnwo7r2IFiOWJRd5R yV4FfFOIrDAKqO4lKX5WNEDV/1YVl6+WO4dwDA42ponF0MFnckPf1qAg3Decg+rBG+fbALz28qK o3qHw4YCcVDyg543QAq4/HWPFEqGWE3Z8koBAVksOljK3qg5szywwZW78EKCDsgRgMAbnXgvwkd cP1byF890mEqYiRT/dhNsNqbNQmLKqBX45S4wDJ2UDiKcIBWnuhFMsfujtlmB0NBGL3a4Zb8f1z CtqGOXvVzuQWxzDmHaY6rxvR/HhIIvXKb8N05CeLXclabccrw/noc5HVjeGMYYaPqmwYHNjJNNa u2Sn36b+8BYganGSo7m+Zqsaxp6WRkvDS23f+Z8wVXzsSyP1uj6XT7faeB+yKP1m3FGPKoT+sl9 kPg2+BFvgrl7h5LxB77sGPQKdiL05ayJJDRWrEUaeMT9C6hEVjJJ5AOLK1/e2F63g= X-Received: by 2002:a17:902:f601:b0:2ae:6364:e6f1 with SMTP id d9443c01a7336-2aeca940e7dmr86120365ad.1.1773528030850; Sat, 14 Mar 2026 15:40:30 -0700 (PDT) Received: from at-Standard-PC-Q35-ICH9-2009.. ([171.61.163.197]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b050656d13sm2088905ad.87.2026.03.14.15.40.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Mar 2026 15:40:30 -0700 (PDT) From: Atharva Tiwari To: Cc: Atharva Tiwari , Hans de Goede , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4] apple-gmux: preserve brightness using EFI Date: Sun, 15 Mar 2026 04:10:15 +0530 Message-ID: <20260314224017.11982-1-atharvatiwarilinuxdev@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Make apple-gmux save the current backlight brightness to EFI on shutdown, so the brightness level is preserved across reboots. (tested on iMac20,1) Signed-off-by: Atharva Tiwari --- v4: - Fix Build warnings when compiled without CONFIG_EFI v3: - Only save the brightness when it differs from the boot brightness. v2: - Used correct size for efi_data --- drivers/platform/x86/apple-gmux.c | 69 +++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple= -gmux.c index 1417e230edbd..6becaf67c862 100644 --- a/drivers/platform/x86/apple-gmux.c +++ b/drivers/platform/x86/apple-gmux.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include =20 @@ -78,6 +79,11 @@ struct apple_gmux_data { /* debugfs data */ u8 selected_port; struct dentry *debug_dentry; + + /* efi data */ + efi_status_t efi_status; + u32 efi_attr; + u16 efi_data; }; =20 static struct apple_gmux_data *apple_gmux_data; @@ -107,6 +113,9 @@ struct apple_gmux_config { =20 # define MMIO_GMUX_MAX_BRIGHTNESS 0xffff =20 +#define EFI_BRIGHTNESS_NAME L"backlight-level" +#define EFI_BRIGHTNESS_GUID EFI_GUID(0x7c436110, 0xab2a, 0x4bbb, 0xa8, 0x= 80, 0xfe, 0x41, 0x99, 0x5c, 0x9f, 0x82) + static u8 gmux_pio_read8(struct apple_gmux_data *gmux_data, int port) { return inb(gmux_data->iostart + port); @@ -751,6 +760,35 @@ static void gmux_fini_debugfs(struct apple_gmux_data *= gmux_data) debugfs_remove_recursive(gmux_data->debug_dentry); } =20 +#ifdef CONFIG_EFI +MODULE_IMPORT_NS("EFIVAR"); +static void gmux_init_efi(struct apple_gmux_data *gmux_data) +{ + unsigned long size =3D sizeof(gmux_data->efi_data); + + gmux_data->efi_status =3D EFI_UNSUPPORTED; + + if (!efi_rt_services_supported(EFI_RT_SUPPORTED_SET_VARIABLE)) + return; + + if (efivar_lock()) + return; + + gmux_data->efi_status =3D efivar_get_variable(EFI_BRIGHTNESS_NAME, &EFI_B= RIGHTNESS_GUID, + &gmux_data->efi_attr, &size, &gmux_data->efi_data); + + efivar_unlock(); +} + +#else /* CONFIG_EFI */ + +static void gmux_init_efi(struct apple_gmux_data *gmux_data) +{ + return; +} + +#endif /* CONFIG_EFI */ + static int gmux_suspend(struct device *dev) { struct pnp_dev *pnp =3D to_pnp_dev(dev); @@ -960,6 +998,8 @@ static int gmux_probe(struct pnp_dev *pnp, const struct= pnp_device_id *id) } =20 gmux_init_debugfs(gmux_data); + gmux_init_efi(gmux_data); + return 0; =20 err_register_handler: @@ -1012,6 +1052,34 @@ static void gmux_remove(struct pnp_dev *pnp) kfree(gmux_data); } =20 +#ifdef CONFIG_EFI +static void gmux_shutdown(struct pnp_dev *pnp) +{ + struct apple_gmux_data *gmux_data =3D pnp_get_drvdata(pnp); + u16 brightness =3D (u16)gmux_get_brightness(gmux_data->bdev); + + if (gmux_data->efi_status =3D=3D EFI_SUCCESS && gmux_data->efi_data !=3D = brightness) { + gmux_data->efi_status =3D efivar_set_variable(EFI_BRIGHTNESS_NAME, + &EFI_BRIGHTNESS_GUID, + gmux_data->efi_attr, + sizeof(brightness), + &brightness); + if (gmux_data->efi_status !=3D EFI_SUCCESS) + pr_info("Unable to save brightness: 0x%lx\n", gmux_data->efi_status); + } + + gmux_remove(pnp); +} + +#else /* CONFIG_EFI */ + +static void gmux_shutdown(struct pnp_dev *pnp) +{ + return; +} + +#endif /* CONFIG_EFI */ + static const struct pnp_device_id gmux_device_ids[] =3D { {GMUX_ACPI_HID, 0}, {"", 0} @@ -1026,6 +1094,7 @@ static struct pnp_driver gmux_pnp_driver =3D { .name =3D "apple-gmux", .probe =3D gmux_probe, .remove =3D gmux_remove, + .shutdown =3D gmux_shutdown, .id_table =3D gmux_device_ids, .driver =3D { .pm =3D &gmux_dev_pm_ops, --=20 2.43.0