From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.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 A563D3B0AED for ; Wed, 29 Jul 2026 05:31:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785303083; cv=none; b=IxM59OnPEMYu2O01AHUiRPQ/6brrkMh/NfSsQFt/Vn71Pxw0iHALqBh/FgL9vntYjqDTr91qsNERSLUk07LB1003lsoNTtKRzkYCKZHIvZmogN7uX71kBV1ybo9tvqK5qa9cVqWYkjkRYmYs6J9mnjIRtss1UoZy1g+9r7Dc9WI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785303083; c=relaxed/simple; bh=3KJwD9XcqUpW/+Nc/Bq/gQj4auFX12ZYPdAYhOIse1o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DaxgooRrxdr4lyvnpS8DQN8FhRx1VNDuQeu+M1MJEyEe9txDvdzDufYTTDvBLpn90eSuXKzJWAf+hNwpHZQ8H6f5KvQiYdUSMiNHQ6IAVmte57fKmWLOMV5InzgwtUA2hSFVDWqQnWHynXNrRu1WcxU7p4ovgA2ZYJJJqWA/Kys= 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=MgcMxz17; arc=none smtp.client-ip=209.85.160.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="MgcMxz17" Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-51c2a449c57so3648071cf.1 for ; Tue, 28 Jul 2026 22:31:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785303080; x=1785907880; 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:content-type; bh=hLm9SWgFFlilgJjrWi7UDhw1Z9Vj6CQojSd23FGvUyc=; b=MgcMxz17HWvcPx5fLOLPTNvikLtpoZszEnYjVdXgSdCf2rUrCovN0jlaV+4I6ghZrs 3WtSDqELodB/ICWrM0qcrLwkOdFpV0+eDaVjjfaxbiGv+mQp4czrCrgOOivnh/jKfPpe h4W1sqBN28iJJ8sxKqOuE7xlN2M6P7HYxDiYpa8KSItAVp0IoT0OMN3bzxD/nhYY8uWw ZpLNENeEXz9MgGPD2xYXlRjcqVxc/CZjK2u+rJGFTWildPXSLb5uKxcAHzzDUueNcKF0 1VJx+b+QOSypB5XDWY9JKOCddWfy//tk9Dacvw4RZV9SRJt1slFa0QNNOioGXafMop3T 2CXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785303080; x=1785907880; 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:content-type; bh=hLm9SWgFFlilgJjrWi7UDhw1Z9Vj6CQojSd23FGvUyc=; b=BDtqy9m26n5d84nF4BQ9owRNH8KHCpR8HZ0SJY5g6Tbno21GLJEl47L28T5We7PgMa 9MZG9R/Px8CcFzDNKhgu2Wn8JfWubxrKBw0ubKeL4VuV+IJVub4uY27VIRDGW5h+nch6 +Moq7pTfy/B/TJdv+83/Ud+IsHhBQ9uAvKr0l949qKFL7uSOD5yjyvf/AKxiCpTrBz2m mgZ6ox4J6oUPp3zZMX3RBLZITBl8PQdXd5IrZbHzj6U8bAEGgJb2kGMLZn4i3ebZPTbQ QbfCrLH9KajOuPE6kRMN1ZVHzLodugXY4tLJMGy302jyuCq2ALJminZgX/z4s43M/Hzu iDoA== X-Forwarded-Encrypted: i=1; AHgh+RroavpZPCuZ4JyBsTiZWAXkTadRKb1P/Hr1HSi28YJ51wDURuxkm/GkYrLa01GlyQkFr5IVdXw6Q3ng7v0=@vger.kernel.org X-Gm-Message-State: AOJu0YzpYFxMo595XJf6VFATWcstXo8ZqKoaJVqWZY6MXPqVn1H9al1F nLNFM1jQO0KsKkedFco1XuJHCLXWPXd5LC4/CjwY2ME/x9ijtirVondd X-Gm-Gg: AR+sD13tveTr3kDDXQp5HTlBAQlc2V2zsAn+ixEO5cTiEyxDrvt4kkK18sC+P9VU0JY 2xMvoqH0fJEBJd2Iz03r6mei40zYd2Ido8I0iCvOuNDb2Qfew7FyjhV9FgecdXDt6eQVXPRwKHK FIi9D11Q6uWQsPKKf4lraKhams5Mfe7quyJ2ajl5PyuLWCBw2qTYHUdYOvN+jdPo2JaLpWFhvR4 AzappQQ4LmyE990ujs1wcFyeFFR5hL1L7ghZ03vVNVi5J2AIca0Sceo3ik1cNhjH/P2phC2z+zV ircsvnYSI0203tpwYa/R0ODe0qV8DBO3F9IEiqLOEcjQvySUOMCpmgsQDOzo2A1vBvTnJ+ElU/l ne4Jefbv1ab/P2ej+WNDLL75isfChqPtqPJWMuUF5Sv6yk7wiUV410CH6bhU8Kb8MTzkoTTd4vS G7qhcEQ0ODrfZpkLRkhitPGQMtog8ZcMwhwtptGYq116fLluUSbzMRvRCQ2RE= X-Received: by 2002:a05:622a:5292:b0:51a:8c9c:7f52 with SMTP id d75a77b69052e-529d71475ffmr44443851cf.69.1785303080150; Tue, 28 Jul 2026 22:31:20 -0700 (PDT) Received: from thinker ([65.195.2.74]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-529e2b1a1ddsm12592861cf.5.2026.07.28.22.31.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Jul 2026 22:31:19 -0700 (PDT) From: Amit Barzilai To: Javier Martinez Canillas , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Amit Barzilai Subject: [PATCH 2/2] drm/ssd130x: Add per-family update backlight logic Date: Wed, 29 Jul 2026 08:30:54 +0300 Message-ID: <20260729053054.29374-3-amit.barzilai22@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260729053054.29374-1-amit.barzilai22@gmail.com> References: <20260729053054.29374-1-amit.barzilai22@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: 8bit ssd130x_update_bl() runs for every SSD13xx panel, but it only works for SSD130x and SSD132x: it writes the single global SSD13XX_CONTRAST (0x81) command, which those two families expose. SSD133x has no such command -- it has three per-channel contrast registers (CONTRAST_A/B/C) that must be scaled together -- so ssd130x_update_bl() has no effect on it. Make backlight_ops.update_status a per-family choice. SSD130x and SSD132x keep ssd130x_update_bl() because they share the SSD13XX_CONTRAST interface, while SSD133x gets ssd133x_update_bl(), which drives the three channels through ssd133x_set_contrast(). Signed-off-by: Amit Barzilai --- drivers/gpu/drm/solomon/ssd130x.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c index f49e5245b216..0b0fc6fe3df2 100644 --- a/drivers/gpu/drm/solomon/ssd130x.c +++ b/drivers/gpu/drm/solomon/ssd130x.c @@ -1711,8 +1711,25 @@ static int ssd130x_update_bl(struct backlight_device *bdev) return 0; } -static const struct backlight_ops ssd130xfb_bl_ops = { - .update_status = ssd130x_update_bl, +static int ssd133x_update_bl(struct backlight_device *bdev) +{ + struct ssd130x_device *ssd130x = bl_get_data(bdev); + + ssd130x->contrast = backlight_get_brightness(bdev); + + return ssd133x_set_contrast(ssd130x, ssd130x->contrast); +} + +static const struct backlight_ops ssd130xfb_bl_ops[] = { + [SSD130X_FAMILY] = { + .update_status = ssd130x_update_bl, + }, + [SSD132X_FAMILY] = { + .update_status = ssd130x_update_bl, + }, + [SSD133X_FAMILY] = { + .update_status = ssd133x_update_bl, + }, }; static void ssd130x_parse_properties(struct ssd130x_device *ssd130x) @@ -1919,7 +1936,8 @@ struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap) return ERR_PTR(ret); bl = devm_backlight_device_register(dev, dev_name(dev), dev, ssd130x, - &ssd130xfb_bl_ops, NULL); + &ssd130xfb_bl_ops[ssd130x->device_info->family_id], + NULL); if (IS_ERR(bl)) return ERR_PTR(dev_err_probe(dev, PTR_ERR(bl), "Unable to register backlight device\n")); -- 2.55.0