From patchwork Sun May 25 10:40:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pengyu Luo X-Patchwork-Id: 892517 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.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 896421EB3D; Sun, 25 May 2025 10:40:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748169634; cv=none; b=e6X+QsF45lGced64AbHPHO5yzT1NNe375ABp4sFMtDHtICZfW89yddtwPUBKo1CxO704ELCTZuLwHExHY/IM7dezx0mKGLXF/zjjx3BdXPbVW2plrqn52WWuHNJjhRrYE9s6RQo+t0heMaFivVodkqR3zznzO+jt9l0fJkO6SF8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748169634; c=relaxed/simple; bh=WgACCt68qfQfxTlmxlqUkIyjawT4I/8tTVhBz4juMQ0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=KWnrr9VblSbnAMCHMBBVBdiy3a+prYZXcga86nefKYgtQs9f9ykC+BvPhJMkABkX/wutwxLCaKYXPDMT3fxmwv346fQhVFqX18Er+k8dsulQ66JpTfce9JYdEufNM5/vDZdqtOpCgtUDO00kWu1B+GLesOWMn5WudbmjQqzOKDE= 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=A1ueCzT+; arc=none smtp.client-ip=209.85.210.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="A1ueCzT+" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-73972a54919so949215b3a.3; Sun, 25 May 2025 03:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748169632; x=1748774432; 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=GaYAYQTXNpM2WMYfSuIUveFo2umn4ZAMC5svAIDE8aA=; b=A1ueCzT+LMe/Kxtq2F71XhwDjdTT0mYryMGvrD2YUnH8JusCS4z6OPXT7GPS9MfAOb 5Y44+6BoDK+c+4HR9KvF16liSdF8RGo28qlT5YJ2h1J51eS7ZNeqm6KxbIkKbMm3TUyW 4AI0W75DURX9hsf/1Gawxdxcc7tFDC+ZJDQTSrJGkYpsn15IXp96gT2Otb4QB33pzIbB XZ5ZKz62o2rkzRp2ZFmqqPKfUiDG6eILhqzOujpTjWeA21pjlN5rZNGbeECVRfX9Vj49 SiCCBCksMNH0Ylyfl4RZvyPY5AQqH8NdV9yUu/Ztyyl89Bk1QtDZBwRirlsZBHWeB4UY 9xww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748169632; x=1748774432; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GaYAYQTXNpM2WMYfSuIUveFo2umn4ZAMC5svAIDE8aA=; b=K77YP0DCrZ1nO4OrtlV9fVkRXJw7VPnPMuYVv4pe5AL0/W9U3COvOo9cglzQLk+KbE +JmBXMLsRAvBUYpRv4k7Uj2n1oHuGgk3DuVsTTztWnGoHA2dKWDTixHDtl105t3B/srk bnmZMYMJLzQ74sUbdmZg4yQcp1OcslVBOrFu70XssXVF9h9qOE2yGD2M97/VNt+O1VN8 HuzG1bcr+mUrfl296sNyCHCb7xzg9S0hYc2mQxvwqsL7C60QGGIjgL2XB/8HRWHS4IMS sIG/5kOMqJ6K6mKF2yYkproK1Cw1m7ig31XK6SHh+evNjGp3pbWXq6gZz5+Vhgrfj1la pcjg== X-Forwarded-Encrypted: i=1; AJvYcCUXWcNhmwF6Q8P7HYkbi4pXFp3aeXAuircMlnP26Ft/n1vlFv7qtS0TxiBWGehB/iUJ6tSo2rpuRUNlYw==@vger.kernel.org, AJvYcCWHk+MyoloyX/ZWASF3Cz+rcQd49bWvukSicR5nCtvcOaay/UnFx+OqK6HUJICT9W20exzcKfId2UszTtQs@vger.kernel.org X-Gm-Message-State: AOJu0YzWjJhKC6vEh2AFuQ7pfw5edh4Q7YH0PnTPwTQYd9h4Dr7SKhAN GAstK+mA6cnUdJcgCRkPOA9Pj7s1rBfufozNrdn38BR+z93Q4zt677zf2pQ4TA== X-Gm-Gg: ASbGncufuhvWEaSEveGz8i9hIHy2pjnqh5iUYZfYQe2BYNHsKfR+H7lDNO26yH5m6QK Na9iZMqvL8W+vMGkXeaZZ674+qtWUHDnbM90T9AfyjzMN1sey3xDwLSXeXUvmT90eo1P98p7e53 Yd27Vesrj2DIu30x15Bb6Hujt70w6oMLGZneHolqZvPLXavddLezAdpizKaqRXO1C1Md9Og1NfR 4EIwzwBM/0CSVqKU3lb1E2ePS9XvJbVMqJcURazVA9oHhQOjoP5XuwPh69x9bVaOGjExvMdOroi 8ke4ikijl6B2UReHCDZLJyNrpZFeCAtxKR/QB2INHFSM8YMbkw== X-Google-Smtp-Source: AGHT+IGlJGZJeHx8OGbctaBG1uExbLaC8Q3Ayyr+IhhjqqI6aLuKbhMEoRnhVaFAlORnkwrGEyDb6w== X-Received: by 2002:a05:6a20:c709:b0:217:4f95:6a51 with SMTP id adf61e73a8af0-2188c362e27mr9194105637.29.1748169631662; Sun, 25 May 2025 03:40:31 -0700 (PDT) Received: from nuvole.. ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a96defa1sm15833363b3a.12.2025.05.25.03.40.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 May 2025 03:40:31 -0700 (PDT) From: Pengyu Luo To: Lee Jones , Daniel Thompson , Jingoo Han , Helge Deller Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, Pengyu Luo Subject: [RFC PATCH 1/2] backlight: Rename duplicated devices to support dual-backlight setups Date: Sun, 25 May 2025 18:40:21 +0800 Message-ID: <20250525104022.1326997-1-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.49.0 Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 When registering a backlight device, if a device with the same name already exists, append "-secondary" to the new device's name. This is useful for platforms with dual backlight drivers (e.g. some panels use dual ktz8866), where both instances need to coexist. For now, only one secondary instance is supported. If more instances are needed, this logic can be extended with auto-increment or a more flexible naming scheme. Suggested-by: Daniel Thompson Signed-off-by: Pengyu Luo --- drivers/video/backlight/backlight.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 9dc93c5e4..991702f5d 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -365,7 +365,8 @@ struct backlight_device *backlight_device_register(const char *name, struct device *parent, void *devdata, const struct backlight_ops *ops, const struct backlight_properties *props) { - struct backlight_device *new_bd; + struct backlight_device *new_bd, *prev_bd; + const char *new_name = NULL; int rc; pr_debug("backlight_device_register: name=%s\n", name); @@ -377,10 +378,23 @@ struct backlight_device *backlight_device_register(const char *name, mutex_init(&new_bd->update_lock); mutex_init(&new_bd->ops_lock); + /* + * If there is an instance with the same name already, then rename it. + * We also can use an auto-increment field, but it seems that there is + * no triple or quad case. + */ + prev_bd = backlight_device_get_by_name(name); + if (!IS_ERR_OR_NULL(prev_bd)) { + new_name = kasprintf(GFP_KERNEL, "%s-secondary", name); + if (!new_name) + return ERR_PTR(-ENOMEM); + put_device(&prev_bd->dev); + } + new_bd->dev.class = &backlight_class; new_bd->dev.parent = parent; new_bd->dev.release = bl_device_release; - dev_set_name(&new_bd->dev, "%s", name); + dev_set_name(&new_bd->dev, "%s", new_name ? new_name : name); dev_set_drvdata(&new_bd->dev, devdata); /* Set default properties */ @@ -414,6 +428,8 @@ struct backlight_device *backlight_device_register(const char *name, list_add(&new_bd->entry, &backlight_dev_list); mutex_unlock(&backlight_dev_list_mutex); + kfree(new_name); + return new_bd; } EXPORT_SYMBOL(backlight_device_register); From patchwork Sun May 25 10:40:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pengyu Luo X-Patchwork-Id: 892835 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.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 933211F09B6; Sun, 25 May 2025 10:40:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748169637; cv=none; b=q6WCeXSi3+D+4Oe/d5WokNygbUVgeYUG3lY/i2/602LwGXQWMWct4c23Z6mKQD8/N14nAlnFa6rx/OMi+sK5In7WmCsMa93NFI+32rv4iZKAHSRPGa07dYnzPNQ1KXWVGTLxZdgmJVlkZcvU6TNYhQj/CkUxfcARIapBIGuts9E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748169637; c=relaxed/simple; bh=nO6zb6SjCFPUZ7IEufrR6PiJ70F6QMV0RRUqlhL9aNQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LBI4s1KM1vffJa/wtKGGgaZtJhgnIlsnT0GNIIKz3djUxTZx8hA/rRi9U5dXtujidEobuRFBq8ty53i3Ylwmy7N55zR695KV7I+BDp2ykdwZixgb+IhHo3wZD354M9P9g4kIlYPAt45sepBRPN7w3XkfN3NK3ZqqLW54gjKjBjY= 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=HXvN6I5G; arc=none smtp.client-ip=209.85.210.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="HXvN6I5G" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-7424ccbef4eso983131b3a.2; Sun, 25 May 2025 03:40:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748169635; x=1748774435; 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=AkaxFjVGSe2Qwk7a8pqzzV8ilfKVeuiiyO9oBhvP6G8=; b=HXvN6I5GpnAr5lmhjAQgxOD7e+YhmQxYpXg4RVZXaeH4pUoMqcqxkR1duS7Ml8hBQH NPNHUzh5AsNX/CACmKZJZLH2eKzE0PHeYLbM9FzNbg5vJxtM1XYIa0X03QUjE+lgjN6g xYthIW6n7Bd+S/gGoFFD+xb5w3Sp1XJS8lsV7yStAXrVqnR1acUYPIoLPR+ALLh5qIAd QSaC96yoGfjmbWqsEMAlMVbh5sDkQoJL36KYTEfyOQ+obtarMmnCGnjNycecDCzbnACd wh8HyB1qylhJz+EWmq99PePFw0PsrhdYI02i8DQtogsYI6eqJPatKfPhcLj5D78XdcVk WaDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748169635; x=1748774435; 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=AkaxFjVGSe2Qwk7a8pqzzV8ilfKVeuiiyO9oBhvP6G8=; b=iuULv2agAgWyw4VgIsC1bxDTztc2MN2hItit6Rlw9ok6jEbeH1d4VW/zfDDBkPoiyS DvPxgGwoexxhAInZqAR8/QJmcIhPLKyNSo/z6gs0gCVGf0kWDbnsojzoMCZhP4a3HOoP 4tfWxSPwZwoc7MZP8W4LGjMZvRYhwJIdyBNZkshODyi/l7s633nJbK9dSBejM6Ks+F4N RgVUCo8dxEk9XH4j1/QCnVcUjyaNXsC4gOmAAUZeIjRiC6hYPbphYXCu2p8xAxZJZ1lN weK+bppZyPwuEpyD+rJYtTsWD6+8+adpvTEgVIMAxS3PHGrYZkryVo2F+fsyXS63swIG pFng== X-Forwarded-Encrypted: i=1; AJvYcCUUcRM9jLmrXAPnm3YwYHG1znJG8zNSIqOgrNygMNmuyDRr24/Vlh8cDa9H8/yfTQsZ0mgvoGdyv/hUOQ==@vger.kernel.org, AJvYcCXZ38u3SU9JsQ0eewHJxO+fKT+phPQmWaX5Q63XC8JkeW3n/PkXYycZNBdWre0YfIx+dlxaXCylcYrP8pSc@vger.kernel.org X-Gm-Message-State: AOJu0Yz/OGzE4/CA5fPksMWmekPp7oyN1V+hnt6QLbVX4wIongrgAeCQ oa/wdJfuvhmlRA/uLa77fmKrMxPrkw1pTSFF5cfNlNwPSRLE/HICIK97 X-Gm-Gg: ASbGnctV6F9NZ6cmTBz4wny0+LdmghoHOs2hSM5rzhA7nUQ5/llAWOK5PX32fsjWuL0 JVcV+IpPu8P9vSFZ6bPHzYHstqasjwbPU8NpUW6d6WO8UlSKWZPzqY8RLxHaTZcYpTA8rcJCgFf i2vdqwz+e6013oXgHjooJpV7RDiykD2REALKd9297WYL4Y3jw5r+/8Sm53+bDKz++EbFLU1oLqN 7D1uk9qplYALDuf0oy5oXEaXSAT/85ndiMSy7DSFS7KfM9il9sH6CAoMDL26vUgbLjFyVFmPuQg mKM9bWAMKK6XcopmGkVD/siL6jFkropS39Yp7jgAvY45ydYg8g== X-Google-Smtp-Source: AGHT+IGOV1Qoz9M8Hpj3ynpz5Bb7xb/5hezEEoZviGII3MnP9qNtCwtF+oiJboyMF+/MRa5DZgNxCg== X-Received: by 2002:a05:6a00:4b02:b0:742:a02e:dd8d with SMTP id d2e1a72fcca58-745fe05907amr9090249b3a.20.1748169634693; Sun, 25 May 2025 03:40:34 -0700 (PDT) Received: from nuvole.. ([144.202.86.13]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a96defa1sm15833363b3a.12.2025.05.25.03.40.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 May 2025 03:40:34 -0700 (PDT) From: Pengyu Luo To: Lee Jones , Daniel Thompson , Jingoo Han , Helge Deller Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, Pengyu Luo Subject: [RFC PATCH 2/2] backlight: Improve support for dual backlight with primary/secondary linkage Date: Sun, 25 May 2025 18:40:22 +0800 Message-ID: <20250525104022.1326997-2-mitltlatltl@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250525104022.1326997-1-mitltlatltl@gmail.com> References: <20250525104022.1326997-1-mitltlatltl@gmail.com> Precedence: bulk X-Mailing-List: linux-fbdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This patch enhances dual-backlight handling by explicitly linking primary and secondary backlight devices using new fields: - `is_secondary`: Marks if a device is secondary in a pair - `secondary`: Points to the associated secondary device (if any) - `primary`: Points to the primary device (for secondary devices) It also update `backlight_update_status()` to ensure that both primary and secondary devices are updated together during brightness changes. This provides a consistent update mechanism in dual-backlight case. Suggested-by: Daniel Thompson Signed-off-by: Pengyu Luo --- drivers/video/backlight/backlight.c | 9 +++++- include/linux/backlight.h | 50 +++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 991702f5d..2e7b179bc 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -388,7 +388,6 @@ struct backlight_device *backlight_device_register(const char *name, new_name = kasprintf(GFP_KERNEL, "%s-secondary", name); if (!new_name) return ERR_PTR(-ENOMEM); - put_device(&prev_bd->dev); } new_bd->dev.class = &backlight_class; @@ -428,6 +427,14 @@ struct backlight_device *backlight_device_register(const char *name, list_add(&new_bd->entry, &backlight_dev_list); mutex_unlock(&backlight_dev_list_mutex); + /* set them until the secondary device is available */ + if (prev_bd) { + prev_bd->secondary = new_bd; + new_bd->primary = prev_bd; + new_bd->is_secondary = true; + put_device(&prev_bd->dev); + } + kfree(new_name); return new_bd; diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 10e626db7..cde992e10 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -291,13 +291,42 @@ struct backlight_device { * @use_count: The number of unblanked displays. */ int use_count; + + /** + * @is_secondary: Indicates whether this backlight device is secondary. + */ + bool is_secondary; + + /** + * @secondary: Pointer to the secondary backlight device. + */ + struct backlight_device *secondary; + + /** + * @primary: Pointer to the primary backlight device. + * + * Non-NULL only for secondary devices. + */ + struct backlight_device *primary; }; +static inline struct backlight_device * +to_primary_backlight_device(struct backlight_device *bd) +{ + return bd->is_secondary ? bd->primary : bd; +} + +static inline struct backlight_device * +to_secondary_backlight_device(struct backlight_device *bd) +{ + return bd->is_secondary ? bd : bd->secondary; +} + /** - * backlight_update_status - force an update of the backlight device status + * backlight_update_status_single - force an update of the backlight device status * @bd: the backlight device */ -static inline int backlight_update_status(struct backlight_device *bd) +static inline int backlight_update_status_single(struct backlight_device *bd) { int ret = -ENOENT; @@ -309,6 +338,23 @@ static inline int backlight_update_status(struct backlight_device *bd) return ret; } +/** + * backlight_update_status - update primary and secondary backlight devices + * @bd: the backlight device + */ +static inline int backlight_update_status(struct backlight_device *bd) +{ + struct backlight_device *primary = to_primary_backlight_device(bd); + struct backlight_device *secondary = to_secondary_backlight_device(bd); + int ret; + + ret = backlight_update_status_single(primary); + if (!secondary || ret) + return ret; + + return backlight_update_status_single(secondary); +} + /** * backlight_enable - Enable backlight * @bd: the backlight device to enable