From nobody Mon Feb 9 15:07:10 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 AC04742983B for ; Tue, 20 Jan 2026 12:50:51 +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=1768913453; cv=none; b=PbsIRFLAybW+2HN6W29n/N/J0p0v+CG3RTMCsikIpG7CqihXhNO8zmnoncJE8SCUAsmLiGYM6INCBnzWUafWeG6eT9TmHXbOfyOvLyvUL2NHcbQ0GkXBTtRcOVNx8Mk9oAp9LbNqb3E7coJGTmpbH2MUFZrBJqevnUi7gNjjTqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768913453; c=relaxed/simple; bh=jIBkxlJHIcCc3JY8HlzcY+4/Sq1XPQvovm3vReAxEQI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gk6U8T3Y28ACBNwRUDntxPucUO4NhS980UeEY9E92g/Gy1WVY0r1jO6zE0irQFNd7JV1PUiHPm515y/FaaKB+iIoTPB9qC/HLK9laKQJOBmX2slikTx2wjGO4/ShpKb5rCjJ5Y4fwjVzbplZx9XxylfwYnneMK5ZMl/B399gGhw= 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=iwpd6/bl; 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="iwpd6/bl" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2a0a95200e8so34628935ad.0 for ; Tue, 20 Jan 2026 04:50:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768913451; x=1769518251; 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=QnR4PJhsaUjZWZn+C6vALPZ6Lj3dxWE4L9BjOpkr0AY=; b=iwpd6/bl8uw0/LmLRlTE4DpbocYpdYAtij2ti6OibJmaoLOl1ul3O3A+4/ygEvVJBp U96MCfXYoPXqzglepNXfHmpsy/Ug8SuUWfY24Sqdg0m4yadYbGddQlccCuv6ceWM65vw zmAGQv2SJYcTfy2HIl4h02FgQbOtQscze8NTVyQsxyEF83LifoLDB7uP7FDAcL5+M73R 90M1mu0d+nbzJw5XQApC6/XBIlIu+mAaXFhx2I1uav1CxeIK70K6j6DX2asQbzgUnmOy yYd/JNcAoNqV+o5GeXsqs6aKiOCws8oszEDugPi5jeUd/I+0qF65V6s0dxjD+0ACKemk wRaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768913451; x=1769518251; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QnR4PJhsaUjZWZn+C6vALPZ6Lj3dxWE4L9BjOpkr0AY=; b=mJVTphR56/uwfVjUnh+1mvkz4XLQXbygz3nF6v4ShP5HtmFFnIHqcBM5aS/uhrOtRq 3M0TztatI6N2mc3GDJ1ntLsoyB56onnlbXxiTQtNBVi0gQr+TWSdP9RO6VQONPIqrgNv VTMiudmK3xP2IUMoTbWyHDLHEMn5qshqW3cxRiXg2fiMF+5LJcaiRZ8O858sSekuagZs 4nPVE4VwqnMWQALbMP7oUyn+gugGsGW+c7lOh8/1gvTkAHfWAEYBQLGRJeTcRKg3GVwG uPVHU3ZfXwq52AX/NiWFtLH1EfVpluckIoKgBqrYALnKUScm0ZnHzt9t+JEzSsrVpWUv dsbQ== X-Forwarded-Encrypted: i=1; AJvYcCW6ef0r1wZSVUYCGul/EJcRfURO91xFQzPGY6KkKTEb+CGj9Bg8PLBmFcyyOhJPpQvuI+VW6tlJaFOFTMI=@vger.kernel.org X-Gm-Message-State: AOJu0YynpRIvE7hxh3F34tvggQngQIHL/dWxJjOcoGYzxF5ye8jmPNdk wyoUtSzkCpso/XxDYhGeiriB+b5+Q8vguvBlIpW9Q92RJ2y+2LGQrOf6 X-Gm-Gg: AZuq6aLB+KaOGT6Th2odF6/KdAGj0Tirzh3+JShtYsuqtuq4zGtE9c3uyE9V8/2r562 Se9rA1N+sjRUn8lVNhxCMaPAtPx91aCPl1KqIEH8SvPG2fEIY1nTJsfox43Ok3ykZzlPrtXnxRv 4MbUPmF+GTQzCcbJ3y83lXL6kavnadwr/B3lqgZJMWQpzWj/N7t3xuWBvPTGFsJF6PTDHeCMfL0 Ya6yJ9UWTd/vhotIR6RrERQrFR5cDOvJs1CRlw6FMwq3LlD+K27U+JiPsHxk62p/o93d9FC3NFj WDk9qs7K9O1aU4Y13EEJfv7S7ctVdwCI0F0YELyMzfJj28ZO70MOz4x2dzBzcq4gwzNsW7AXSIl g5iluEdZ34UFO9xJvA94GRV8s6FoemDGuxDdqx+l1NYEsegKsUjWgqjmjq4ZIQQjWGI/9ErCwrj qGgdU+H1JAw7unHrUjBbW+mLQxE/ojg1jrgTwj X-Received: by 2002:a17:902:e842:b0:2a0:ccef:a5d3 with SMTP id d9443c01a7336-2a768b7a68amr16787195ad.3.1768913450709; Tue, 20 Jan 2026 04:50:50 -0800 (PST) Received: from test-HP-Desktop-Pro-G3.. ([103.218.174.23]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a7193dd582sm124973815ad.52.2026.01.20.04.50.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 04:50:50 -0800 (PST) From: Sudarshan Shetty To: lee@kernel.org, danielt@kernel.org, jingoohan1@gmail.com Cc: deller@gmx.de, pavel@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sudarshan Shetty Subject: [PATCH v2 1/2] dt-bindings: backlight: gpio-backlight: allow multiple GPIOs Date: Tue, 20 Jan 2026 18:20:35 +0530 Message-Id: <20260120125036.2203995-2-tessolveupstream@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260120125036.2203995-1-tessolveupstream@gmail.com> References: <20260120125036.2203995-1-tessolveupstream@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update the gpio-backlight binding to support configurations that require more than one GPIO for enabling/disabling the backlight. Signed-off-by: Sudarshan Shetty --- .../leds/backlight/gpio-backlight.yaml | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Documentation/devicetree/bindings/leds/backlight/gpio-backligh= t.yaml b/Documentation/devicetree/bindings/leds/backlight/gpio-backlight.ya= ml index 584030b6b0b9..4e4a856cbcd7 100644 --- a/Documentation/devicetree/bindings/leds/backlight/gpio-backlight.yaml +++ b/Documentation/devicetree/bindings/leds/backlight/gpio-backlight.yaml @@ -16,8 +16,18 @@ properties: const: gpio-backlight =20 gpios: - description: The gpio that is used for enabling/disabling the backligh= t. - maxItems: 1 + description: | + The gpio that is used for enabling/disabling the backlight. + Multiple GPIOs can be specified for panels that require several + enable signals. All GPIOs are controlled together. + type: array + minItems: 1 + items: + type: array + minItems: 3 + maxItems: 3 + items: + type: integer =20 default-on: description: enable the backlight at boot. @@ -38,4 +48,14 @@ examples: default-on; }; =20 + - | + #include + backlight { + compatible =3D "gpio-backlight"; + gpios =3D <&gpio3 4 GPIO_ACTIVE_HIGH>, + <&gpio3 5 GPIO_ACTIVE_HIGH>, + <&gpio3 6 GPIO_ACTIVE_HIGH>; + default-on; + }; + ... --=20 2.34.1 From nobody Mon Feb 9 15:07:10 2026 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (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 30CF042DFF8 for ; Tue, 20 Jan 2026 12:50:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768913459; cv=none; b=S+xI4VC2vEfBI7XrMXGMUC4Nf1D46gloi9Sk9uYtnNrQJRfCGyvtTOjRI9VuOsNlqK3QDo3zTsiMecgd99jrMbQcObta6ueu6h4ZcNfm+ivGkuLo2y3z5NdpEdgAdK8tm8zISpT70dQmfBc5pU9enfPp+my1v2IF1OFsq4DnX6M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768913459; c=relaxed/simple; bh=wBaSoSs4KKPmkdnBbVJ5VE0QtVfyigKXSTnVZqKJ2eg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QRxbitTKzNzEaHFJoeVpy+I2AWT6k+79DyNeZwPxP98kJsfw1yxsPc+kw7gz7YcIbq27OHhtJzMw1cc+pVssJNsvrDDMcc0N9pHpT+OnubK1Cxh21aPhl8O+bTuNE6tunjh1bFD6ewW8Mhb3ZLFEyIDzeAJ5zA5ru2pMyV+t4FE= 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=kmVqMRh7; arc=none smtp.client-ip=209.85.214.171 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="kmVqMRh7" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-2a07fac8aa1so39988655ad.1 for ; Tue, 20 Jan 2026 04:50:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768913457; x=1769518257; 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=LroXmq9J3VVORG7m8L/kGtxBgy95TWF72WU3KxUKLtI=; b=kmVqMRh72Z60zhUkUYNVVeacAqTKAHaAjF0av00kQCpVIhwQ347S9De5LAtrBCWeVu qxxDzdq1U+Ge1MmJJsxvgLdI/BDmRXk1QBbiMj7PY2Jd7In1g+6SzzesT5QKmv0l+eaV CxTz6JXMrdj9rzUzeuSCfcI/k5xb00ULWBme3a/Z3QjGB+nMabhn3wRsZBytqOSndHhT f6CNURMn7oTbtm1fD5G+wXgLYLgfHOSA6KUaX3P6kcGbNhESxYWjurAsDI3DClprKxV4 LwTAXo3PPPTGrIqpTt1okiFHAL9g5Zo8HsP1mbOSwN7G1sBO3G8FtDlcNvtrfbIyIAVI QH8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768913457; x=1769518257; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=LroXmq9J3VVORG7m8L/kGtxBgy95TWF72WU3KxUKLtI=; b=Kf0B56nnSIausdr/zXO4FWpcW6dg6p5EPE8GbNjkaZCu72o4aqa33X9QlOiFidUHHQ RBEqvlbNA+hZBXbL+wnz4DNhHBz6bmgCUmVXyhmqkyuTqL1QlM68L4mV39soU4Mm0Hnq 4lIgSmoaGLdeh8eX7R2EUWpi67VpVQ73N2B1YKhlRXUvcjwYDsdVPTzbvh/I+qXiS4Mt HqlPMIOjWR6URa1uSxGLrtJeYrGpWafHrJ3oqOuhcNFlBjGamUluSPyZnnvlrEqeQ5nD DQKtvGGfdQPaa853keLdvSCliP2bke3u4HvflAQgA6xgWmFohruTD8PBYUoC1WDWOWU4 FsDA== X-Forwarded-Encrypted: i=1; AJvYcCVCnJkMtNVCONh+hx+y1kv6mvSZI9YLWCYf+KCsJR/fK+1XZoy1HcjcZnL1S7d9700lTd8Xq2Pe0di/dxQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9VmtJveF94K9LOfoSqXLGFEtVXNIluZGfO+IMw8S74SxTQMfk Od8NXXzLh2Pl/cu8QhVNX4Ph5FvsIGfhAUVDuUfBHt1gW8USbtIB5WI7KwBmiQ== X-Gm-Gg: AZuq6aK0uu/r6ImQAGSNUjMo0Og5NwSouCljE5ZH3lrxV1f5qzqtaElcafe8eI7WvQE Q4HKdT0rUW8li2ApAAQX4BqNPdaLwxQlJzpE26+zZCyQIVMrMCCmBqAAQjQgp4GSr8ey9KboiZS SrE4g5Mdp2QIg8wjaj7OCa/sBqFphvocL3kEwCRW1QR1vqbBbRNTNS36vlW+WVO20nNFSW6Y5V8 HLzdvAqTUyzPDArJjlza11/h82vVRs968q/JW9AoV4sihEHCMqwmMc+W8w25D+macPvozwDvsUj N6dO9DjUYRFi+nZkqUTZCkp5G2HIO9HN2pOfEQPAjPF8XBFb45zyeloqj4haS+Hff7IBNRwrFw8 5kN0A6GS1Qd5TqxfLuKW/DnJb/DjmbAvM4SbG7RnzN8+L/0QbZb42/1qhzjBGXk4bl8DjnxTZZN 4RABw7jQtFuKvRARfv/8PWVHlNiMOC+GYgKQkt X-Received: by 2002:a17:903:2ec5:b0:2a0:8859:3722 with SMTP id d9443c01a7336-2a769ae664fmr16859025ad.25.1768913457332; Tue, 20 Jan 2026 04:50:57 -0800 (PST) Received: from test-HP-Desktop-Pro-G3.. ([103.218.174.23]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a7193dd582sm124973815ad.52.2026.01.20.04.50.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 04:50:56 -0800 (PST) From: Sudarshan Shetty To: lee@kernel.org, danielt@kernel.org, jingoohan1@gmail.com Cc: deller@gmx.de, pavel@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sudarshan Shetty Subject: [PATCH v2 2/2] backlight: gpio: add support for multiple GPIOs for backlight control Date: Tue, 20 Jan 2026 18:20:36 +0530 Message-Id: <20260120125036.2203995-3-tessolveupstream@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260120125036.2203995-1-tessolveupstream@gmail.com> References: <20260120125036.2203995-1-tessolveupstream@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The gpio-backlight driver currently supports only a single GPIO to enable or disable a backlight device. Some panels require multiple enable GPIOs to be asserted together. Extend the driver to support an array of GPIOs for a single backlight instance. All configured GPIOs are toggled together based on the backlight state. Existing single-GPIO Device Tree users remain unaffected. Signed-off-by: Sudarshan Shetty --- drivers/video/backlight/gpio_backlight.c | 66 ++++++++++++++++-------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/drivers/video/backlight/gpio_backlight.c b/drivers/video/backl= ight/gpio_backlight.c index 728a546904b0..11d21de82cf5 100644 --- a/drivers/video/backlight/gpio_backlight.c +++ b/drivers/video/backlight/gpio_backlight.c @@ -14,17 +14,29 @@ #include #include #include +#include =20 struct gpio_backlight { struct device *dev; - struct gpio_desc *gpiod; + struct gpio_descs *gpiods; + unsigned long *bitmap; }; =20 static int gpio_backlight_update_status(struct backlight_device *bl) { struct gpio_backlight *gbl =3D bl_get_data(bl); + unsigned int n =3D gbl->gpiods->ndescs; + int br =3D backlight_get_brightness(bl); =20 - gpiod_set_value_cansleep(gbl->gpiod, backlight_get_brightness(bl)); + if (br) + bitmap_fill(gbl->bitmap, n); + else + bitmap_zero(gbl->bitmap, n); + + gpiod_set_array_value_cansleep(n, + gbl->gpiods->desc, + gbl->gpiods->info, + gbl->bitmap); =20 return 0; } @@ -48,26 +60,43 @@ static int gpio_backlight_probe(struct platform_device = *pdev) struct device *dev =3D &pdev->dev; struct gpio_backlight_platform_data *pdata =3D dev_get_platdata(dev); struct device_node *of_node =3D dev->of_node; - struct backlight_properties props; + struct backlight_properties props =3D { }; struct backlight_device *bl; struct gpio_backlight *gbl; - int ret, init_brightness, def_value; + bool def_value; + enum gpiod_flags flags; + unsigned int n; + int words; =20 - gbl =3D devm_kzalloc(dev, sizeof(*gbl), GFP_KERNEL); - if (gbl =3D=3D NULL) + gbl =3D devm_kcalloc(dev, 1, sizeof(*gbl), GFP_KERNEL); + if (!gbl) return -ENOMEM; =20 if (pdata) gbl->dev =3D pdata->dev; =20 def_value =3D device_property_read_bool(dev, "default-on"); + flags =3D def_value ? GPIOD_OUT_HIGH : GPIOD_OUT_LOW; + + gbl->gpiods =3D devm_gpiod_get_array(dev, NULL, flags); + if (IS_ERR(gbl->gpiods)) { + if (PTR_ERR(gbl->gpiods) =3D=3D -ENODEV) + return dev_err_probe(dev, -EINVAL, + "The gpios parameter is missing or invalid\n"); + return PTR_ERR(gbl->gpiods); + } =20 - gbl->gpiod =3D devm_gpiod_get(dev, NULL, GPIOD_ASIS); - if (IS_ERR(gbl->gpiod)) - return dev_err_probe(dev, PTR_ERR(gbl->gpiod), - "The gpios parameter is missing or invalid\n"); + n =3D gbl->gpiods->ndescs; + if (!n) + return dev_err_probe(dev, -EINVAL, + "No GPIOs provided\n"); + + words =3D BITS_TO_LONGS(n); + gbl->bitmap =3D devm_kcalloc(dev, words, sizeof(unsigned long), + GFP_KERNEL); + if (!gbl->bitmap) + return -ENOMEM; =20 - memset(&props, 0, sizeof(props)); props.type =3D BACKLIGHT_RAW; props.max_brightness =3D 1; bl =3D devm_backlight_device_register(dev, dev_name(dev), dev, gbl, @@ -81,21 +110,16 @@ static int gpio_backlight_probe(struct platform_device= *pdev) if (!of_node || !of_node->phandle) /* Not booted with device tree or no phandle link to the node */ bl->props.power =3D def_value ? BACKLIGHT_POWER_ON - : BACKLIGHT_POWER_OFF; - else if (gpiod_get_value_cansleep(gbl->gpiod) =3D=3D 0) + : BACKLIGHT_POWER_OFF; + else if (gpiod_get_value_cansleep(gbl->gpiods->desc[0]) =3D=3D 0) bl->props.power =3D BACKLIGHT_POWER_OFF; else bl->props.power =3D BACKLIGHT_POWER_ON; =20 - bl->props.brightness =3D 1; - - init_brightness =3D backlight_get_brightness(bl); - ret =3D gpiod_direction_output(gbl->gpiod, init_brightness); - if (ret) { - dev_err(dev, "failed to set initial brightness\n"); - return ret; - } + bl->props.brightness =3D def_value ? 1 : 0; =20 + gpio_backlight_update_status(bl); + platform_set_drvdata(pdev, bl); return 0; } --=20 2.34.1