From nobody Mon May 25 06:41:57 2026 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.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 CC9193101D4 for ; Sun, 17 May 2026 07:43:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003816; cv=none; b=niNdum1G2EXTShDGbctRL/UN7ZmeYLwEPtcwfAWDe7ZZfwzdS/iMLlse64i5WA0q5ZIoQDybxDwlml1rdG527zKbn5+kb/n+qp/FhK7RsmABBE8KlTJ2wsnKOtlYsaaVgHUJLECnruIQU1LV02dbGCl0/oL+6qlKcpmpuI733k0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003816; c=relaxed/simple; bh=/lQ5p0ayr6Df3JRkR1L9VpuelhqYjdc8n9A686KbQ4Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U6b/9I51cegOsAKdF9CyAPRuaDDXKsybMOpmczQQKPbexiOWZB9mEE5xoLEeTi7RDZ8oad4iiwXocLnhP46EazPl35E02+TiJ6MZ4vNe5YZnWvckxP1YSQPAIuSnOmaU9g92rofaf96YyA9Jv67nuQAuY1mu5jZdfWr67n5ZR3w= 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=Q6r8JckQ; arc=none smtp.client-ip=209.85.221.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="Q6r8JckQ" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-4585a116a4aso929392f8f.3 for ; Sun, 17 May 2026 00:43:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779003812; x=1779608612; 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=XZKo5UvI/gJnxHMbxa9ycLb7RHsv/YC/zH6YHBOw+mM=; b=Q6r8JckQaZmzEcWMCW1IlDib5w/BSx9TX4M89boT3EoUKnz+b34wo4sgh8C/EBRjZw gzX4tjYBUZGS6WO6BOO/5K8dukMbKeb0F2bknhOmtRGTgGAWlhXm+6OPA+GH4MpHYNGZ Vg8gcOibNUiFIA6/R2EoO4YzzYULCrktERHtwe48re/j+LYhSncKtyTJWgH2PhpA3nNP mIvfV8M4AwPbeWq/TCwJoQoKwpghiJ1nl9JbBfuVUUYFzm+zkvXCBMmiuF633l8ZYoVZ gQHycrXNLKb4fOEWm7Jh36Q87CtR3tYWXExFa4WvlSd6bT3SOGKNh1SmZ/BvEEmyvpPA q/0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779003812; x=1779608612; 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=XZKo5UvI/gJnxHMbxa9ycLb7RHsv/YC/zH6YHBOw+mM=; b=eIK+T3kElCMvVgknDeOWG2CvUdTgdzO0Jzo8uUO0lodfvYnr3qbFMe2Y8GCF/GrI4A IQNrH2Yts8LL6A1vtmrKKsmMQC6fZq5HOaW2+WMo7SQ9Yw48utDdJq2WfT25EYNReoo9 ESw1nxSVwVlHqaems3pBXeZLvHCK6JdgeSZsHP7PvrJVD9LEP5nxQHs5Lybu6hBXdKXM Oy/NR8PO5xR+f84xNmvA8bQ3WeRVJ7ELjDWchVe88JntwUMyS8BPKJDI07lBBa0PhQ77 zolhDBH3cEHSsvJdDrxT/dfTmB2N4KhZEevOyb1JyPQJ75irXSALnTbqrj5eHKsRE1qJ dgMA== X-Forwarded-Encrypted: i=1; AFNElJ/pLS0hpHSEOwDrokjvG8Fm1Jb3ueWjx3QLpY3t7WKntb+pNf2DKyNaGimA4CloeUUOJumLJZiSEreeO58=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1FmCYdffMOMctmeRWaD2vlJd/M6Z4/Jd924hFs6xSjGNzJBFu m6RXPAJS9IwSkTF/AvmdQZxwSGXCwz7trbpXH4auzZgEYUSB2vJA0J3M X-Gm-Gg: Acq92OFdmkizvHeFXOJGOxi7fRHSSU4wr2kG7QbCmwQ51rMGr4xYZ788DkSbqRHJRD3 lgt40RXDxmdDbwiEezvFJiRZvboMSez/pw+05mNOhhj4atk7GSceTS6AW0BJby+f6FslNQC+0yd pX2HLckK94aJCUm2OmMzt9F6YKVDafBpe6pLjnesKRHQAkNWyx9xx0RBYi/Y/jLJ1vo1oOgN9JE srqo9anmgJz1vLJhJ3Eo66KOMha6qKsz6QNA4bMF6VNyjqmJEpM8feYGTHO+5STfbB2Au6XTq1v 2amPv7rwnqBBMV7XGRHQZavvmhElda4waQbtq45I6k5X3JqBOPeaJz1Wal36bj6kU7sj4ByrWSv dfa3AH9O7N1JspoI/pNk8SssC/tMBvKwB73wQr/sMYusm0h8OjnuTsZUbXVi4KbZITOWYWfa7TN osFXK4s6B+X9go X-Received: by 2002:a05:6000:26c4:b0:43c:fc5c:aa0b with SMTP id ffacd0b85a97d-45e5c5e1da2mr15644370f8f.42.1779003811985; Sun, 17 May 2026 00:43:31 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe248dsm27512864f8f.30.2026.05.17.00.43.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 00:43:31 -0700 (PDT) From: Svyatoslav Ryhel To: Lee Jones , Daniel Thompson , Jingoo Han , Pavel Machek , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Helge Deller , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: [PATCH v1 1/6] dt-bindings: leds: Document TI LM3533 LED controller Date: Sun, 17 May 2026 10:43:01 +0300 Message-ID: <20260517074306.30937-2-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260517074306.30937-1-clamor95@gmail.com> References: <20260517074306.30937-1-clamor95@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" Document the LM3533 - a complete power source for backlight, keypad and indicator LEDs in smartphone handsets. The high-voltage inductive boost converter provides the power for two series LED strings display backlight and keypad functions. Signed-off-by: Svyatoslav Ryhel --- .../leds/backlight/ti,lm3533-backlight.yaml | 68 +++++++ .../bindings/leds/ti,lm3533-leds.yaml | 66 ++++++ .../devicetree/bindings/leds/ti,lm3533.yaml | 190 ++++++++++++++++++ 3 files changed, 324 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/backlight/ti,lm3= 533-backlight.yaml create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3533-leds.y= aml create mode 100644 Documentation/devicetree/bindings/leds/ti,lm3533.yaml diff --git a/Documentation/devicetree/bindings/leds/backlight/ti,lm3533-bac= klight.yaml b/Documentation/devicetree/bindings/leds/backlight/ti,lm3533-ba= cklight.yaml new file mode 100644 index 000000000000..866b0fb8ed04 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/backlight/ti,lm3533-backlight.= yaml @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/leds/backlight/ti,lm3533-backlight.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TI LM3533 high voltage series LED strings + +description: + This is part of the TI LM3533 MFD device. It represents two high voltage= series + LED strings for display backlight controlled by the TI LM3533. + +maintainers: + - Svyatoslav Ryhel + +allOf: + - $ref: /schemas/leds/backlight/common.yaml# + +properties: + compatible: + const: ti,lm3533-backlight + + reg: + description: Control bank selection (0 =3D bank A, 1 =3D bank B). + maximum: 1 + + led-max-microamp: + description: maximum current in uA with a 800 uA step. + minimum: 5000 + maximum: 29800 + default: 5000 + + led-sources: + description: | + HVLED strings associated with this control bank: + 0 - HVLED1 + 1 - HVLED2 + minItems: 1 + maxItems: 2 + items: + maximum: 1 + + ti,pwm-config-mask: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Control Bank PWM Configuration Register mask that allows to configure + PWM input in Zones 0-4 + BIT(0) - PWM Input is enabled + BIT(1) - PWM Input is enabled in Zone 0 + BIT(2) - PWM Input is enabled in Zone 1 + BIT(3) - PWM Input is enabled in Zone 2 + BIT(4) - PWM Input is enabled in Zone 3 + BIT(5) - PWM Input is enabled in Zone 4 + + ti,linear-mapping-mode: + description: + Enable linear mapping mode. If disabled, then it will use exponential + mapping mode in which the ramp up/down appears to have a more uniform + transition to the human eye. + type: boolean + +required: + - compatible + - reg + +unevaluatedProperties: false + +# see ti,lm3533.yaml for an example diff --git a/Documentation/devicetree/bindings/leds/ti,lm3533-leds.yaml b/D= ocumentation/devicetree/bindings/leds/ti,lm3533-leds.yaml new file mode 100644 index 000000000000..a582d7d2f955 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/ti,lm3533-leds.yaml @@ -0,0 +1,66 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/leds/ti,lm3533-leds.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TI LM3533 low voltage control banks for individual LEDs + +description: + This is part of the TI LM3533 MFD device. It represents four low voltage + control banks for individual LEDs provided by the TI LM3533. + +maintainers: + - Svyatoslav Ryhel + +allOf: + - $ref: /schemas/leds/common.yaml# + +properties: + compatible: + const: ti,lm3533-leds + + reg: + description: + Control bank selection (2 =3D bank C, 3 =3D bank D, 4 =3D bank E, 5 = =3D bank F). + minimum: 2 + maximum: 5 + + led-max-microamp: + description: maximum current in uA with a 800 uA step. + minimum: 5000 + maximum: 29800 + default: 5000 + + led-sources: + description: | + LVLED associated with this control bank. May be more than 1 source p= er bank. + 0 - LVLED1 + 1 - LVLED2 + 2 - LVLED3 + 3 - LVLED4 + 4 - LVLED5 + minItems: 1 + maxItems: 5 + items: + maximum: 5 + + ti,pwm-config-mask: + $ref: /schemas/types.yaml#/definitions/uint32 + description: | + Control Bank PWM Configuration Register mask that allows to configure + PWM input in Zones 0-4 + BIT(0) - PWM Input is enabled + BIT(1) - PWM Input is enabled in Zone 0 + BIT(2) - PWM Input is enabled in Zone 1 + BIT(3) - PWM Input is enabled in Zone 2 + BIT(4) - PWM Input is enabled in Zone 3 + BIT(5) - PWM Input is enabled in Zone 4 + +required: + - compatible + - reg + +unevaluatedProperties: false + +# see ti,lm3533.yaml for an example diff --git a/Documentation/devicetree/bindings/leds/ti,lm3533.yaml b/Docume= ntation/devicetree/bindings/leds/ti,lm3533.yaml new file mode 100644 index 000000000000..2e200f172400 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/ti,lm3533.yaml @@ -0,0 +1,190 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/leds/ti,lm3533.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: TI LM3533 Complete Lighting Power Solution + +description: > + The LM3533 is a complete power source for backlight, keypad, and indicat= or LEDs + in smartphone handsets. The high-voltage inductive boost converter provi= des the + power for two high voltage series LED strings for display backlight and = four low + voltage control banks for individual LEDs. Additionally, LM3533 features= an ALS + sensor support. + + https://www.ti.com/product/LM3533 + +maintainers: + - Svyatoslav Ryhel + +properties: + compatible: + const: ti,lm3533 + + reg: + maxItems: 1 + + enable-gpios: + description: GPIO connected to the HWEN pin. + maxItems: 1 + + vin-supply: + description: Supply connected to the IN line (2.7 V to 5.5 V). + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + ti,boost-ovp-microvolt: + description: boost OVP select (16V, 24V, 32V, 40V) + enum: [ 16000000, 24000000, 32000000, 40000000 ] + default: 16000000 + + ti,boost-freq-hz: + description: boost frequency select (500KHz or 1MHz) + enum: [ 500000, 1000000 ] + default: 500000 + + light-sensor: + type: object + additionalProperties: false + + properties: + compatible: + const: ti,lm3533-als + + interrupts: + maxItems: 1 + + ti,resistor-ohm: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Internal configuration resister value when ALS is in Analog Sens= or + mode and PWM mode is disabled. + minimum: 1575 + maximum: 200000 + + ti,pwm-mode: + type: boolean + description: + Switch for mode in which ALS is running. If this property is set + then ALS is running in PWM mode, internal resistor value is set = to + high-impedance (0) and ti,resistor-ohm property is ignored. + + required: + - compatible + + anyOf: + - required: + - ti,resistor-ohm + - required: + - ti,pwm-mode + +patternProperties: + "^backlight@[01]$": + $ref: /schemas/leds/backlight/ti,lm3533-backlight.yaml# + + "^led@[2-5]$": + $ref: /schemas/leds/ti,lm3533-leds.yaml# + +required: + - compatible + - reg + - light-sensor + - backlight@0 + - backlight@1 + - led@2 + - led@3 + - led@4 + - led@5 + +additionalProperties: false + +examples: + - | + #include + #include + + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + led-controller@36 { + compatible =3D "ti,lm3533"; + reg =3D <0x36>; + + enable-gpios =3D <&gpio 110 GPIO_ACTIVE_HIGH>; + vin-supply =3D <&vdd_3v3_bat>; + + ti,boost-ovp-microvolt =3D <24000000>; + ti,boost-freq-hz =3D <500000>; + + #address-cells =3D <1>; + #size-cells =3D <0>; + + backlight@0 { + compatible =3D "ti,lm3533-backlight"; + reg =3D <0>; + + default-brightness =3D <113>; + + led-max-microamp =3D <23400>; + led-sources =3D <0>; + }; + + backlight@1 { + compatible =3D "ti,lm3533-backlight"; + reg =3D <1>; + + default-brightness =3D <113>; + + led-max-microamp =3D <23400>; + led-sources =3D <1>; + }; + + led@2 { + compatible =3D "ti,lm3533-leds"; + reg =3D <2>; + + led-max-microamp =3D <23400>; + led-sources =3D <0>; + }; + + led@3 { + compatible =3D "ti,lm3533-leds"; + reg =3D <3>; + + led-max-microamp =3D <23400>; + led-sources =3D <1>; + }; + + led@4 { + compatible =3D "ti,lm3533-leds"; + reg =3D <4>; + + led-max-microamp =3D <23400>; + led-sources =3D <2>; + }; + + led@5 { + compatible =3D "ti,lm3533-leds"; + reg =3D <5>; + + led-max-microamp =3D <23400>; + led-sources =3D <3 4>; + }; + + light-sensor { + compatible =3D "ti,lm3533-als"; + + interrupt-parent =3D <&gpio>; + interrupts =3D <80 IRQ_TYPE_LEVEL_LOW>; + + ti,pwm-mode; + }; + }; + }; +... --=20 2.51.0 From nobody Mon May 25 06:41:57 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.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 4975630FC26 for ; Sun, 17 May 2026 07:43:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003819; cv=none; b=PFGJmtF5XYDrktNRJyXmFTe001Mq9wx2yj7iEx0y3pF0VUCntntWDe9XN7bCoovTZSpkID65PJYo0O3ZX35ukdUJpEX8xYLwMeBL5YjjR1zTD+q+lWYnzA/3WMHP4lcGqvrs0U/C4KjJRMX7eFhD2BMyvTYfxWBp4RpyF1TQ5H8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003819; c=relaxed/simple; bh=o7Qk9eTCH9YR9uaW2iDtZYtUUoVzV7Cxh7/+b3Ub5iA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KNhYU1imeHpWrN2V3kNRrhYh4IiDfk2Pf5izqciS96rwGqQsIV5b0o3muhWyD14aGWeBhBEv/TphAnJZ66Cq6nCgXsNX7U6k34FAdwAoBeZRiDSyWQ1ueT7/Gj0ebp7TuWJXG2B7N5cdQAkVpmYufIKwuFfx27C6PSP79H02BEs= 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=Vf6b1yY3; arc=none smtp.client-ip=209.85.221.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="Vf6b1yY3" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-44e1860558fso561094f8f.0 for ; Sun, 17 May 2026 00:43:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779003814; x=1779608614; 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=KRWlVOqS1iSVkHVqZF13gCOFGNUpfAMneUBSn8wSpl4=; b=Vf6b1yY3aKVHvrPGkLL9oENHbhaComqvJRdbFwHBT/mbMn6AXq7vDKLPOqfxM59WtQ NpaCGEAigaZ1k2FM0hF+N3/nDHTLXKZ496o9s1IbIIajUKC50WFFKBr6W3hoSYpgGYDB wWOD74TT4pCt0+ROdnEy/FcBbC1Vq/MMqp80tkcOD3RmxzaHer7tQCcBWfyM0TuCWPTn a+e6bT1JZoUmhrersf4kNJW2YuXYxKjspbaPm50KFU+HBZAdfoQZ6wUuBdz1lroJ4DH6 DtonhTwLJNA+43D2hiVHoC7hqyzHp/ZqHkhGVBR3yRBIm6K+4dqg21U+RxPcib0i/euC Vbcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779003814; x=1779608614; 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=KRWlVOqS1iSVkHVqZF13gCOFGNUpfAMneUBSn8wSpl4=; b=E21MPCELNj6lz+8AGXZPqAxc7fNfoFkBIA8ASz2D7TONlwgL/qWOOcTKoyQhrwL1bm Nxg9bfjEvlKxOkKrwXFXI4z3QR0XVeOSAxKp3JqHGgiutNAbCZOWvOKEzenrOikeT7UP zamnm2k9Ouei7S1zKL5iOzoFmmip4GyX5k28rep8E4XOa2LHtcbwhbW0BpOcMIR2SacU dYDnpa5tQRPExQvw8V2UmUuP4hU1QYfQkAMpBOQj40fFF8ZX0qoKTWslnT0ot2JQNJS1 naSSqTcsIa/SrEaheiOCN/OIyV1oH99v5iHiKvCXcW4ga1Pw2hb1/tnSdTNlcBOBJNQL 3crA== X-Forwarded-Encrypted: i=1; AFNElJ9W7tR8xPV1JGGusNTTOFqw/8zIgO4gEzrXf7IUIuQsgEpAWxFrZ8XwQOJbm2UUj7jTU8n90VUcwLzps7Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4R6L05iQeZxiAEWtHn4TpcD09/aMcwDwZiRW1pdES38ZxLxrf ruLTBGKXU4WLmEYlqamNkkI2mirtJ/1XM9PB8z3FoWYbCDDc2SAaLcZX X-Gm-Gg: Acq92OFeVf/1SBf2MKxabGKSqj51iHQzgAu4k9bzDxwTsqAcW61vBCBmqpQdjTXIqSn EPC+OwiAn1UoqCr4BcO/PwZj0zFce6o1Mq0K8DuyPgovEPOPFPQ4JW40HtGg9OcCO1F0EUOrilt xtQNDzlkn+Ly4DOpsicQuTkfoTNy35DrVpI645JHter5lELEwHVW1WppFOasVbL+OvwFK1Vl9B9 zmbX93P73nLEuepxObYCetDDLX55q825/9XqpDaRUS3wR3LT2bIQ8T06+9yauXOStFQIROry08b JC4JN3BqKbGpPsNOPkj5vcidDEEV6XBL5UpbLI1VAjBqnfvt+eS/bupF2r/ISklTiqZ9qecuGQp zZwUCYLxz0cEsnHLcLaI1UcGN5/ZIVPnADMCqKIhN5/C4EhEMzLnTZ9jzjSkp4CZLjeSq1CfoqS FKDa9qhMp+ONdM X-Received: by 2002:a05:6000:40cc:b0:43f:dd91:b022 with SMTP id ffacd0b85a97d-45e5c5ccb3amr15659081f8f.35.1779003813608; Sun, 17 May 2026 00:43:33 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe248dsm27512864f8f.30.2026.05.17.00.43.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 00:43:33 -0700 (PDT) From: Svyatoslav Ryhel To: Lee Jones , Daniel Thompson , Jingoo Han , Pavel Machek , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Helge Deller , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: [PATCH v1 2/6] mfd: lm3533: Convert to use OF bindings Date: Sun, 17 May 2026 10:43:02 +0300 Message-ID: <20260517074306.30937-3-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260517074306.30937-1-clamor95@gmail.com> References: <20260517074306.30937-1-clamor95@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" Since there are no users of this driver via platform data, remove the platform data support and switch to using Device Tree bindings. Additionally, optimize functions used only by platform data. Signed-off-by: Svyatoslav Ryhel --- drivers/iio/light/lm3533-als.c | 123 +++++-------- drivers/leds/leds-lm3533.c | 60 ++++--- drivers/mfd/lm3533-core.c | 257 +++++++++------------------- drivers/video/backlight/lm3533_bl.c | 52 ++++-- include/linux/mfd/lm3533.h | 51 +----- 5 files changed, 202 insertions(+), 341 deletions(-) diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c index 99f0b903018c..853abb96e13f 100644 --- a/drivers/iio/light/lm3533-als.c +++ b/drivers/iio/light/lm3533-als.c @@ -16,15 +16,18 @@ #include #include #include +#include #include +#include #include #include +#include =20 #include =20 =20 -#define LM3533_ALS_RESISTOR_MIN 1 -#define LM3533_ALS_RESISTOR_MAX 127 +#define LM3533_ALS_RESISTOR_MIN 1575 +#define LM3533_ALS_RESISTOR_MAX 200000 #define LM3533_ALS_CHANNEL_CURRENT_MAX 2 #define LM3533_ALS_THRESH_MAX 3 #define LM3533_ALS_ZONE_MAX 4 @@ -56,6 +59,9 @@ struct lm3533_als { =20 atomic_t zone; struct mutex thresh_mutex; + + bool pwm_mode; + u32 r_select; }; =20 =20 @@ -714,64 +720,6 @@ static const struct attribute_group lm3533_als_attribu= te_group =3D { .attrs =3D lm3533_als_attributes }; =20 -static int lm3533_als_set_input_mode(struct lm3533_als *als, bool pwm_mode) -{ - u8 mask =3D LM3533_ALS_INPUT_MODE_MASK; - u8 val; - int ret; - - if (pwm_mode) - val =3D mask; /* pwm input */ - else - val =3D 0; /* analog input */ - - ret =3D lm3533_update(als->lm3533, LM3533_REG_ALS_CONF, val, mask); - if (ret) { - dev_err(&als->pdev->dev, "failed to set input mode %d\n", - pwm_mode); - return ret; - } - - return 0; -} - -static int lm3533_als_set_resistor(struct lm3533_als *als, u8 val) -{ - int ret; - - if (val < LM3533_ALS_RESISTOR_MIN || val > LM3533_ALS_RESISTOR_MAX) { - dev_err(&als->pdev->dev, "invalid resistor value\n"); - return -EINVAL; - } - - ret =3D lm3533_write(als->lm3533, LM3533_REG_ALS_RESISTOR_SELECT, val); - if (ret) { - dev_err(&als->pdev->dev, "failed to set resistor\n"); - return ret; - } - - return 0; -} - -static int lm3533_als_setup(struct lm3533_als *als, - const struct lm3533_als_platform_data *pdata) -{ - int ret; - - ret =3D lm3533_als_set_input_mode(als, pdata->pwm_mode); - if (ret) - return ret; - - /* ALS input is always high impedance in PWM-mode. */ - if (!pdata->pwm_mode) { - ret =3D lm3533_als_set_resistor(als, pdata->r_select); - if (ret) - return ret; - } - - return 0; -} - static int lm3533_als_setup_irq(struct lm3533_als *als, void *dev) { u8 mask =3D LM3533_ALS_INT_ENABLE_MASK; @@ -784,7 +732,8 @@ static int lm3533_als_setup_irq(struct lm3533_als *als,= void *dev) return ret; } =20 - ret =3D request_threaded_irq(als->irq, NULL, lm3533_als_isr, + ret =3D devm_request_threaded_irq(&als->pdev->dev, als->irq, NULL, + lm3533_als_isr, IRQF_TRIGGER_LOW | IRQF_ONESHOT, dev_name(&als->pdev->dev), dev); if (ret) { @@ -828,7 +777,6 @@ static const struct iio_info lm3533_als_info =3D { =20 static int lm3533_als_probe(struct platform_device *pdev) { - const struct lm3533_als_platform_data *pdata; struct lm3533 *lm3533; struct lm3533_als *als; struct iio_dev *indio_dev; @@ -838,12 +786,6 @@ static int lm3533_als_probe(struct platform_device *pd= ev) if (!lm3533) return -EINVAL; =20 - pdata =3D dev_get_platdata(&pdev->dev); - if (!pdata) { - dev_err(&pdev->dev, "no platform data\n"); - return -EINVAL; - } - indio_dev =3D devm_iio_device_alloc(&pdev->dev, sizeof(*als)); if (!indio_dev) return -ENOMEM; @@ -852,31 +794,52 @@ static int lm3533_als_probe(struct platform_device *p= dev) indio_dev->channels =3D lm3533_als_channels; indio_dev->num_channels =3D ARRAY_SIZE(lm3533_als_channels); indio_dev->name =3D dev_name(&pdev->dev); - iio_device_set_parent(indio_dev, pdev->dev.parent); indio_dev->modes =3D INDIO_DIRECT_MODE; =20 als =3D iio_priv(indio_dev); als->lm3533 =3D lm3533; als->pdev =3D pdev; - als->irq =3D lm3533->irq; + als->irq =3D platform_get_irq_optional(pdev, 0); atomic_set(&als->zone, 0); mutex_init(&als->thresh_mutex); =20 platform_set_drvdata(pdev, indio_dev); =20 - if (als->irq) { + if (als->irq > 0) { ret =3D lm3533_als_setup_irq(als, indio_dev); if (ret) return ret; } =20 - ret =3D lm3533_als_setup(als, pdata); + device_property_read_u32(&pdev->dev, "ti,resistor-value-ohm", + &als->r_select); + + als->r_select =3D clamp(als->r_select, LM3533_ALS_RESISTOR_MIN, + LM3533_ALS_RESISTOR_MAX); + als->r_select =3D DIV_ROUND_UP(2 * MICRO, 10 * als->r_select); + + als->pwm_mode =3D device_property_read_bool(&pdev->dev, "ti,pwm-mode"); + + ret =3D lm3533_update(lm3533, LM3533_REG_ALS_CONF, als->pwm_mode ? + LM3533_ALS_INPUT_MODE_MASK : 0, + LM3533_ALS_INPUT_MODE_MASK); if (ret) - goto err_free_irq; + return dev_err_probe(&pdev->dev, ret, + "failed to set input mode %d\n", + als->pwm_mode); + + /* ALS input is always high impedance in PWM-mode. */ + if (!als->pwm_mode) { + ret =3D lm3533_write(lm3533, LM3533_REG_ALS_RESISTOR_SELECT, + (u8)als->r_select); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "failed to set resistor\n"); + } =20 ret =3D lm3533_als_enable(als); if (ret) - goto err_free_irq; + return ret; =20 ret =3D iio_device_register(indio_dev); if (ret) { @@ -888,9 +851,6 @@ static int lm3533_als_probe(struct platform_device *pde= v) =20 err_disable: lm3533_als_disable(als); -err_free_irq: - if (als->irq) - free_irq(als->irq, indio_dev); =20 return ret; } @@ -903,13 +863,18 @@ static void lm3533_als_remove(struct platform_device = *pdev) lm3533_als_set_int_mode(indio_dev, false); iio_device_unregister(indio_dev); lm3533_als_disable(als); - if (als->irq) - free_irq(als->irq, indio_dev); } =20 +static const struct of_device_id lm3533_als_match_table[] =3D { + { .compatible =3D "ti,lm3533-als" }, + { } +}; +MODULE_DEVICE_TABLE(of, lm3533_als_match_table); + static struct platform_driver lm3533_als_driver =3D { .driver =3D { .name =3D "lm3533-als", + .of_match_table =3D lm3533_als_match_table, }, .probe =3D lm3533_als_probe, .remove =3D lm3533_als_remove, diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c index 45795f2a1042..f6345bc1f443 100644 --- a/drivers/leds/leds-lm3533.c +++ b/drivers/leds/leds-lm3533.c @@ -10,8 +10,10 @@ #include #include #include +#include #include #include +#include #include =20 #include @@ -48,6 +50,9 @@ struct lm3533_led { =20 struct mutex mutex; unsigned long flags; + + u32 max_current; + u32 pwm; }; =20 =20 @@ -632,22 +637,20 @@ static const struct attribute_group *lm3533_led_attri= bute_groups[] =3D { NULL }; =20 -static int lm3533_led_setup(struct lm3533_led *led, - struct lm3533_led_platform_data *pdata) +static int lm3533_led_setup(struct lm3533_led *led) { int ret; =20 - ret =3D lm3533_ctrlbank_set_max_current(&led->cb, pdata->max_current); + ret =3D lm3533_ctrlbank_set_max_current(&led->cb, led->max_current); if (ret) return ret; =20 - return lm3533_ctrlbank_set_pwm(&led->cb, pdata->pwm); + return lm3533_ctrlbank_set_pwm(&led->cb, led->pwm); } =20 static int lm3533_led_probe(struct platform_device *pdev) { struct lm3533 *lm3533; - struct lm3533_led_platform_data *pdata; struct lm3533_led *led; int ret; =20 @@ -657,30 +660,30 @@ static int lm3533_led_probe(struct platform_device *p= dev) if (!lm3533) return -EINVAL; =20 - pdata =3D dev_get_platdata(&pdev->dev); - if (!pdata) { - dev_err(&pdev->dev, "no platform data\n"); - return -EINVAL; - } - - if (pdev->id < 0 || pdev->id >=3D LM3533_LVCTRLBANK_COUNT) { - dev_err(&pdev->dev, "illegal LED id %d\n", pdev->id); - return -EINVAL; - } + if (pdev->id < LM3533_LVCTRLBANK_MIN || pdev->id > LM3533_LVCTRLBANK_MAX) + return dev_err_probe(&pdev->dev, -EINVAL, + "illegal LED id %d\n", pdev->id); =20 led =3D devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL); if (!led) return -ENOMEM; =20 led->lm3533 =3D lm3533; - led->cdev.name =3D pdata->name; - led->cdev.default_trigger =3D pdata->default_trigger; led->cdev.brightness_set_blocking =3D lm3533_led_set; led->cdev.brightness_get =3D lm3533_led_get; led->cdev.blink_set =3D lm3533_led_blink_set; led->cdev.brightness =3D LED_OFF; led->cdev.groups =3D lm3533_led_attribute_groups; - led->id =3D pdev->id; + led->id =3D pdev->id - LM3533_LVCTRLBANK_MIN; + + led->cdev.name =3D devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s-%d", + pdev->name, led->id); + if (!led->cdev.name) + return -ENOMEM; + + led->cdev.default_trigger =3D "none"; + device_property_read_string(&pdev->dev, "linux,default-trigger", + &led->cdev.default_trigger); =20 mutex_init(&led->mutex); =20 @@ -694,15 +697,23 @@ static int lm3533_led_probe(struct platform_device *p= dev) =20 platform_set_drvdata(pdev, led); =20 - ret =3D led_classdev_register(pdev->dev.parent, &led->cdev); + ret =3D led_classdev_register(&pdev->dev, &led->cdev); if (ret) { - dev_err(&pdev->dev, "failed to register LED %d\n", pdev->id); + dev_err(&pdev->dev, "failed to register LED %d\n", led->id); return ret; } =20 led->cb.dev =3D led->cdev.dev; =20 - ret =3D lm3533_led_setup(led, pdata); + device_property_read_u32(&pdev->dev, "led-max-microamp", + &led->max_current); + led->max_current =3D clamp(led->max_current, LM3533_LED_MAX_CURRENT_MIN, + LM3533_LED_MAX_CURRENT_MAX); + + led->pwm =3D 0; + device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &led->pwm); + + ret =3D lm3533_led_setup(led); if (ret) goto err_deregister; =20 @@ -739,9 +750,16 @@ static void lm3533_led_shutdown(struct platform_device= *pdev) lm3533_led_set(&led->cdev, LED_OFF); /* disable blink */ } =20 +static const struct of_device_id lm3533_led_match_table[] =3D { + { .compatible =3D "ti,lm3533-leds" }, + { } +}; +MODULE_DEVICE_TABLE(of, lm3533_led_match_table); + static struct platform_driver lm3533_led_driver =3D { .driver =3D { .name =3D "lm3533-leds", + .of_match_table =3D lm3533_led_match_table, }, .probe =3D lm3533_led_probe, .remove =3D lm3533_led_remove, diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index 0a2409d00b2e..83ebd780f39d 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -14,19 +14,26 @@ #include #include #include +#include +#include #include #include #include #include +#include =20 #include =20 =20 #define LM3533_BOOST_OVP_MASK 0x06 #define LM3533_BOOST_OVP_SHIFT 1 +#define LM3533_BOOST_OVP_MIN 16000000 +#define LM3533_BOOST_OVP_MAX 40000000 =20 #define LM3533_BOOST_FREQ_MASK 0x01 #define LM3533_BOOST_FREQ_SHIFT 0 +#define LM3533_BOOST_FREQ_MIN 500000 +#define LM3533_BOOST_FREQ_MAX 1000000 =20 #define LM3533_BL_ID_MASK 1 #define LM3533_LED_ID_MASK 3 @@ -42,42 +49,14 @@ =20 #define LM3533_REG_MAX 0xb2 =20 - -static struct mfd_cell lm3533_als_devs[] =3D { - { - .name =3D "lm3533-als", - .id =3D -1, - }, -}; - -static struct mfd_cell lm3533_bl_devs[] =3D { - { - .name =3D "lm3533-backlight", - .id =3D 0, - }, - { - .name =3D "lm3533-backlight", - .id =3D 1, - }, -}; - -static struct mfd_cell lm3533_led_devs[] =3D { - { - .name =3D "lm3533-leds", - .id =3D 0, - }, - { - .name =3D "lm3533-leds", - .id =3D 1, - }, - { - .name =3D "lm3533-leds", - .id =3D 2, - }, - { - .name =3D "lm3533-leds", - .id =3D 3, - }, +static struct mfd_cell lm3533_child_devices[] =3D { + MFD_CELL_OF("lm3533-als", NULL, NULL, 0, 0, "ti,lm3533-als"), + MFD_CELL_OF_REG("lm3533-backlight", NULL, NULL, 0, 0, "ti,lm3533-backligh= t", 0), + MFD_CELL_OF_REG("lm3533-backlight", NULL, NULL, 0, 1, "ti,lm3533-backligh= t", 1), + MFD_CELL_OF_REG("lm3533-leds", NULL, NULL, 0, 0, "ti,lm3533-leds", 2), + MFD_CELL_OF_REG("lm3533-leds", NULL, NULL, 0, 1, "ti,lm3533-leds", 3), + MFD_CELL_OF_REG("lm3533-leds", NULL, NULL, 0, 2, "ti,lm3533-leds", 4), + MFD_CELL_OF_REG("lm3533-leds", NULL, NULL, 0, 3, "ti,lm3533-leds", 5), }; =20 int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val) @@ -132,35 +111,6 @@ int lm3533_update(struct lm3533 *lm3533, u8 reg, u8 va= l, u8 mask) } EXPORT_SYMBOL_GPL(lm3533_update); =20 -static int lm3533_set_boost_freq(struct lm3533 *lm3533, - enum lm3533_boost_freq freq) -{ - int ret; - - ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, - freq << LM3533_BOOST_FREQ_SHIFT, - LM3533_BOOST_FREQ_MASK); - if (ret) - dev_err(lm3533->dev, "failed to set boost frequency\n"); - - return ret; -} - - -static int lm3533_set_boost_ovp(struct lm3533 *lm3533, - enum lm3533_boost_ovp ovp) -{ - int ret; - - ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, - ovp << LM3533_BOOST_OVP_SHIFT, - LM3533_BOOST_OVP_MASK); - if (ret) - dev_err(lm3533->dev, "failed to set boost ovp\n"); - - return ret; -} - /* * HVLED output config -- output hvled controlled by backlight bl */ @@ -376,136 +326,45 @@ static struct attribute_group lm3533_attribute_group= =3D { .attrs =3D lm3533_attributes }; =20 -static int lm3533_device_als_init(struct lm3533 *lm3533) +static int lm3533_device_init(struct lm3533 *lm3533) { - struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); + struct device *dev =3D lm3533->dev; int ret; =20 - if (!pdata->als) - return 0; - - lm3533_als_devs[0].platform_data =3D pdata->als; - lm3533_als_devs[0].pdata_size =3D sizeof(*pdata->als); + lm3533_enable(lm3533); =20 - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_als_devs, 1, NULL, - 0, NULL); + ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, + lm3533->boost_freq << LM3533_BOOST_FREQ_SHIFT, + LM3533_BOOST_FREQ_MASK); if (ret) { - dev_err(lm3533->dev, "failed to add ALS device\n"); - return ret; - } - - lm3533->have_als =3D 1; - - return 0; -} - -static int lm3533_device_bl_init(struct lm3533 *lm3533) -{ - struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); - int i; - int ret; - - if (!pdata->backlights || pdata->num_backlights =3D=3D 0) - return 0; - - if (pdata->num_backlights > ARRAY_SIZE(lm3533_bl_devs)) - pdata->num_backlights =3D ARRAY_SIZE(lm3533_bl_devs); - - for (i =3D 0; i < pdata->num_backlights; ++i) { - lm3533_bl_devs[i].platform_data =3D &pdata->backlights[i]; - lm3533_bl_devs[i].pdata_size =3D sizeof(pdata->backlights[i]); + dev_err(dev, "failed to set boost frequency\n"); + goto err_disable; } =20 - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_bl_devs, - pdata->num_backlights, NULL, 0, NULL); + ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, + lm3533->boost_ovp << LM3533_BOOST_OVP_SHIFT, + LM3533_BOOST_OVP_MASK); if (ret) { - dev_err(lm3533->dev, "failed to add backlight devices\n"); - return ret; - } - - lm3533->have_backlights =3D 1; - - return 0; -} - -static int lm3533_device_led_init(struct lm3533 *lm3533) -{ - struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); - int i; - int ret; - - if (!pdata->leds || pdata->num_leds =3D=3D 0) - return 0; - - if (pdata->num_leds > ARRAY_SIZE(lm3533_led_devs)) - pdata->num_leds =3D ARRAY_SIZE(lm3533_led_devs); - - for (i =3D 0; i < pdata->num_leds; ++i) { - lm3533_led_devs[i].platform_data =3D &pdata->leds[i]; - lm3533_led_devs[i].pdata_size =3D sizeof(pdata->leds[i]); + dev_err(dev, "failed to set boost ovp\n"); + goto err_disable; } =20 - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_led_devs, - pdata->num_leds, NULL, 0, NULL); + ret =3D devm_mfd_add_devices(dev, 0, lm3533_child_devices, + ARRAY_SIZE(lm3533_child_devices), + NULL, 0, NULL); if (ret) { - dev_err(lm3533->dev, "failed to add LED devices\n"); - return ret; - } - - lm3533->have_leds =3D 1; - - return 0; -} - -static int lm3533_device_setup(struct lm3533 *lm3533, - struct lm3533_platform_data *pdata) -{ - int ret; - - ret =3D lm3533_set_boost_freq(lm3533, pdata->boost_freq); - if (ret) - return ret; - - return lm3533_set_boost_ovp(lm3533, pdata->boost_ovp); -} - -static int lm3533_device_init(struct lm3533 *lm3533) -{ - struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); - int ret; - - dev_dbg(lm3533->dev, "%s\n", __func__); - - if (!pdata) { - dev_err(lm3533->dev, "no platform data\n"); - return -EINVAL; + dev_err(dev, "failed to add MFD devices: %d\n", ret); + goto err_disable; } =20 - lm3533->hwen =3D devm_gpiod_get(lm3533->dev, NULL, GPIOD_OUT_LOW); - if (IS_ERR(lm3533->hwen)) - return dev_err_probe(lm3533->dev, PTR_ERR(lm3533->hwen), "failed to requ= est HWEN GPIO\n"); - gpiod_set_consumer_name(lm3533->hwen, "lm3533-hwen"); - - lm3533_enable(lm3533); - - ret =3D lm3533_device_setup(lm3533, pdata); - if (ret) + ret =3D sysfs_create_group(&dev->kobj, &lm3533_attribute_group); + if (ret) { + dev_err(dev, "failed to create sysfs attributes\n"); goto err_disable; - - lm3533_device_als_init(lm3533); - lm3533_device_bl_init(lm3533); - lm3533_device_led_init(lm3533); - - ret =3D sysfs_create_group(&lm3533->dev->kobj, &lm3533_attribute_group); - if (ret < 0) { - dev_err(lm3533->dev, "failed to create sysfs attributes\n"); - goto err_unregister; } =20 return 0; =20 -err_unregister: - mfd_remove_devices(lm3533->dev); err_disable: lm3533_disable(lm3533); =20 @@ -517,8 +376,6 @@ static void lm3533_device_exit(struct lm3533 *lm3533) dev_dbg(lm3533->dev, "%s\n", __func__); =20 sysfs_remove_group(&lm3533->dev->kobj, &lm3533_attribute_group); - - mfd_remove_devices(lm3533->dev); lm3533_disable(lm3533); } =20 @@ -589,7 +446,40 @@ static int lm3533_i2c_probe(struct i2c_client *i2c) return PTR_ERR(lm3533->regmap); =20 lm3533->dev =3D &i2c->dev; - lm3533->irq =3D i2c->irq; + + lm3533->hwen =3D devm_gpiod_get_optional(lm3533->dev, "enable", + GPIOD_OUT_LOW); + if (IS_ERR(lm3533->hwen)) + return dev_err_probe(lm3533->dev, PTR_ERR(lm3533->hwen), + "failed to get HWEN GPIO\n"); + + device_property_read_u32(lm3533->dev, "ti,boost-ovp-microvolt", + &lm3533->boost_ovp); + + lm3533->boost_ovp =3D clamp(lm3533->boost_ovp, LM3533_BOOST_OVP_MIN, + LM3533_BOOST_OVP_MAX); + lm3533->boost_ovp =3D lm3533->boost_ovp / (8 * MICRO) - 2; + + device_property_read_u32(lm3533->dev, "ti,boost-freq-hz", + &lm3533->boost_freq); + + lm3533->boost_freq =3D clamp(lm3533->boost_freq, LM3533_BOOST_FREQ_MIN, + LM3533_BOOST_FREQ_MAX); + lm3533->boost_freq =3D lm3533->boost_freq / (500 * KILO) - 1; + + device_for_each_child_node_scoped(lm3533->dev, child) { + if (!fwnode_device_is_available(child)) + continue; + + if (fwnode_device_is_compatible(child, "ti,lm3533-als")) + lm3533->have_als =3D true; + + if (fwnode_device_is_compatible(child, "ti,lm3533-backlight")) + lm3533->have_backlights =3D true; + + if (fwnode_device_is_compatible(child, "ti,lm3533-leds")) + lm3533->have_leds =3D true; + } =20 return lm3533_device_init(lm3533); } @@ -603,6 +493,12 @@ static void lm3533_i2c_remove(struct i2c_client *i2c) lm3533_device_exit(lm3533); } =20 +static const struct of_device_id lm3533_match_table[] =3D { + { .compatible =3D "ti,lm3533" }, + { } +}; +MODULE_DEVICE_TABLE(of, lm3533_match_table); + static const struct i2c_device_id lm3533_i2c_ids[] =3D { { "lm3533" }, { } @@ -612,6 +508,7 @@ MODULE_DEVICE_TABLE(i2c, lm3533_i2c_ids); static struct i2c_driver lm3533_i2c_driver =3D { .driver =3D { .name =3D "lm3533", + .of_match_table =3D lm3533_match_table, }, .id_table =3D lm3533_i2c_ids, .probe =3D lm3533_i2c_probe, diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index babfd3ceec86..42da652df58d 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -9,7 +9,9 @@ =20 #include #include +#include #include +#include #include #include =20 @@ -27,6 +29,9 @@ struct lm3533_bl { struct lm3533_ctrlbank cb; struct backlight_device *bd; int id; + + u32 max_current; + u32 pwm; }; =20 =20 @@ -246,25 +251,24 @@ static struct attribute_group lm3533_bl_attribute_gro= up =3D { .attrs =3D lm3533_bl_attributes }; =20 -static int lm3533_bl_setup(struct lm3533_bl *bl, - struct lm3533_bl_platform_data *pdata) +static int lm3533_bl_setup(struct lm3533_bl *bl) { int ret; =20 - ret =3D lm3533_ctrlbank_set_max_current(&bl->cb, pdata->max_current); + ret =3D lm3533_ctrlbank_set_max_current(&bl->cb, bl->max_current); if (ret) return ret; =20 - return lm3533_ctrlbank_set_pwm(&bl->cb, pdata->pwm); + return lm3533_ctrlbank_set_pwm(&bl->cb, bl->pwm); } =20 static int lm3533_bl_probe(struct platform_device *pdev) { struct lm3533 *lm3533; - struct lm3533_bl_platform_data *pdata; struct lm3533_bl *bl; struct backlight_device *bd; struct backlight_properties props; + char *name =3D NULL; int ret; =20 dev_dbg(&pdev->dev, "%s\n", __func__); @@ -273,12 +277,6 @@ static int lm3533_bl_probe(struct platform_device *pde= v) if (!lm3533) return -EINVAL; =20 - pdata =3D dev_get_platdata(&pdev->dev); - if (!pdata) { - dev_err(&pdev->dev, "no platform data\n"); - return -EINVAL; - } - if (pdev->id < 0 || pdev->id >=3D LM3533_HVCTRLBANK_COUNT) { dev_err(&pdev->dev, "illegal backlight id %d\n", pdev->id); return -EINVAL; @@ -295,13 +293,20 @@ static int lm3533_bl_probe(struct platform_device *pd= ev) bl->cb.id =3D lm3533_bl_get_ctrlbank_id(bl); bl->cb.dev =3D NULL; /* until registered */ =20 + name =3D devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s-%d", + pdev->name, pdev->id); + if (!name) + return -ENOMEM; + memset(&props, 0, sizeof(props)); props.type =3D BACKLIGHT_RAW; props.max_brightness =3D LM3533_BL_MAX_BRIGHTNESS; - props.brightness =3D pdata->default_brightness; - bd =3D devm_backlight_device_register(&pdev->dev, pdata->name, - pdev->dev.parent, bl, &lm3533_bl_ops, - &props); + props.brightness =3D LM3533_BL_MAX_BRIGHTNESS; + device_property_read_u32(&pdev->dev, "default-brightness", + &props.brightness); + + bd =3D devm_backlight_device_register(&pdev->dev, name, &pdev->dev, + bl, &lm3533_bl_ops, &props); if (IS_ERR(bd)) { dev_err(&pdev->dev, "failed to register backlight device\n"); return PTR_ERR(bd); @@ -320,7 +325,15 @@ static int lm3533_bl_probe(struct platform_device *pde= v) =20 backlight_update_status(bd); =20 - ret =3D lm3533_bl_setup(bl, pdata); + device_property_read_u32(&pdev->dev, "led-max-microamp", + &bl->max_current); + bl->max_current =3D clamp(bl->max_current, LM3533_LED_MAX_CURRENT_MIN, + LM3533_LED_MAX_CURRENT_MAX); + + bl->pwm =3D 0; + device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &bl->pwm); + + ret =3D lm3533_bl_setup(bl); if (ret) goto err_sysfs_remove; =20 @@ -381,10 +394,17 @@ static void lm3533_bl_shutdown(struct platform_device= *pdev) lm3533_ctrlbank_disable(&bl->cb); } =20 +static const struct of_device_id lm3533_bl_match_table[] =3D { + { .compatible =3D "ti,lm3533-backlight" }, + { } +}; +MODULE_DEVICE_TABLE(of, lm3533_bl_match_table); + static struct platform_driver lm3533_bl_driver =3D { .driver =3D { .name =3D "lm3533-backlight", .pm =3D &lm3533_bl_pm_ops, + .of_match_table =3D lm3533_bl_match_table, }, .probe =3D lm3533_bl_probe, .remove =3D lm3533_bl_remove, diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h index 69059a7a2ce5..3aa962d4c747 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -15,6 +15,9 @@ #define LM3533_ATTR_RW(_name) \ DEVICE_ATTR(_name, S_IRUGO | S_IWUSR , show_##_name, store_##_name) =20 +#define LM3533_LED_MAX_CURRENT_MIN 5000 +#define LM3533_LED_MAX_CURRENT_MAX 29800 + struct device; struct gpio_desc; struct regmap; @@ -25,7 +28,9 @@ struct lm3533 { struct regmap *regmap; =20 struct gpio_desc *hwen; - int irq; + + u32 boost_ovp; + u32 boost_freq; =20 unsigned have_als:1; unsigned have_backlights:1; @@ -38,50 +43,6 @@ struct lm3533_ctrlbank { int id; }; =20 -struct lm3533_als_platform_data { - unsigned pwm_mode:1; /* PWM input mode (default analog) */ - u8 r_select; /* 1 - 127 (ignored in PWM-mode) */ -}; - -struct lm3533_bl_platform_data { - char *name; - u16 max_current; /* 5000 - 29800 uA (800 uA step) */ - u8 default_brightness; /* 0 - 255 */ - u8 pwm; /* 0 - 0x3f */ -}; - -struct lm3533_led_platform_data { - char *name; - const char *default_trigger; - u16 max_current; /* 5000 - 29800 uA (800 uA step) */ - u8 pwm; /* 0 - 0x3f */ -}; - -enum lm3533_boost_freq { - LM3533_BOOST_FREQ_500KHZ, - LM3533_BOOST_FREQ_1000KHZ, -}; - -enum lm3533_boost_ovp { - LM3533_BOOST_OVP_16V, - LM3533_BOOST_OVP_24V, - LM3533_BOOST_OVP_32V, - LM3533_BOOST_OVP_40V, -}; - -struct lm3533_platform_data { - enum lm3533_boost_ovp boost_ovp; - enum lm3533_boost_freq boost_freq; - - struct lm3533_als_platform_data *als; - - struct lm3533_bl_platform_data *backlights; - int num_backlights; - - struct lm3533_led_platform_data *leds; - int num_leds; -}; - extern int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); extern int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); =20 --=20 2.51.0 From nobody Mon May 25 06:41:57 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 DA2AD313558 for ; Sun, 17 May 2026 07:43:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003819; cv=none; b=rstJLN0Z2DqCDw1upww4NQVRYPtum5wptqn3JbnBa3pAjl1RMUSo/yMGYTxwhjUePMh/42Ja7hBNRTq3M/zr6SjE1cMfu3Jf6UUnQyGlTb1stBUUZrUAC/qqudU5i6CnHnPhK3nlyVYzH9QcMptH4dkImgcwjUbaqVvW4YGKN/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003819; c=relaxed/simple; bh=oH4r5AK/iPEQl02poYMM4nYKVOSVc+BYgsBQehbqz44=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VVRIGJDbDILRNDq3S5GsQXez1a8S/TsT7Aiex1ihWMbhZlSKeNvrrLYczTNGBHenbBvYhBrdpDBEYr9cMdUrpIU7Ov6P+4nHkihsQSbwZwQHWGvZb9dB61BiMTmSNBri5odB8OaQqilbuqYDvZ237b/Kb7TImJ2CZQNAmT2hCmI= 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=PLMRetIP; arc=none smtp.client-ip=209.85.221.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="PLMRetIP" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-43fe608cb92so588560f8f.2 for ; Sun, 17 May 2026 00:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779003815; x=1779608615; 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=XCgjDXarYti7vTNUFmsGSYACwS96Ny5FHsWUIJ695K8=; b=PLMRetIP4UM4g8nu7qtTeUoNZnfGz3U40p0FB9Mw+JtAUo54isiMoEqn985F+GA8nW xJJIjVVQeNUXMCMKBd8xi87QGbmHgQFwz8oLGzAC2X1CtD8DRUu4YrMzIANQEDAZQcqB akNFYK1fxsT+FK9srY8Atjm/D/+uqR+/ZpkitcJvaeESTmErJSdNaYGLbjUCXzYPx8ra iAF+TJC8Ke+9455cRHV644vkFOVRForE/KUOphvgUlg17x4ZdCSmqT1D/QJLXLghwDz6 tJ5p2MmN/1Rg8+afj0k8p11Ikn5gJAJW/k7v47I6mGFS/eNWCQZVQH8hBiLLq3voDNfG UY4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779003815; x=1779608615; 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=XCgjDXarYti7vTNUFmsGSYACwS96Ny5FHsWUIJ695K8=; b=MVIXhNQRu/kO1si7ivtsNtSv3UFG1Dyi8jXvv/WQMKBX9mJUNFO5CRrD7e14f9VylD 6ivA8Uuc6PBU49efyuKAtAjJUeoAwGb6Mta8wDrAS+M4SdqU7lHwxBNbmWoL/2DtUcOs a6hd8VMTd7dbAfFsVzLvTBCG0a9xLMB3d9fhWkoQe0fbDdzulMxZ/4nSNdWnOzhxgyGP FFr59MTgJiSkLHUQSaaZKsYOHXevqBN3k75HskkYp3TJAPWBUlqgrRsnkeo+g2NRTBLI fhq9KtRqoH/4RysOiw1P2r775KTauJJ6hrmprTSsTJ93g1mpzXyCda5e3UbfSLHGgtOt onVg== X-Forwarded-Encrypted: i=1; AFNElJ/AFGeujTVZIHSvE4ko7r8TC+0ZH3Fl5MRGbzoGYnEsSPuBSmiBOoeywQDCAcaSXwkMA56PLjcRasKuo6k=@vger.kernel.org X-Gm-Message-State: AOJu0YzQ6WOC7znSeBoXxOwpq2ZjOw0FYget/gq4yEyxvyYdRz27R0DI 3yecH1LfG+NbdnSlcBpOTToDm/3T7km8iDhYzxhQbBlTw5C/CEfEd51F X-Gm-Gg: Acq92OFB+CYahUJqOqccELMgkgfMXAko816PoPZMlqqSY0aV10fRgo1/06M8kgZT4d5 kmOGUnIP2a3OUDY7VJ2r6qSYQbtQhAysJft6H5mIVDRGPm5xNNUgwJ8n9oiUEUcGcwljJNIUOmB E7ULiXZhaaYfFDdZyWbRb5FR2ksfWsQUhkqeZJ/3TbDt04Xs9w7i8cPno6VhnYzMPjuAQafs+Bl PWn1xXIKxEJevfpBL/4V/u4XbSKnf/iIuDnieOgnu3jEpXFprkX1JmP8z3436NdZ9u0t445OlZe HFFM5FFmJLc9cxjfj8aN0zxnk4YBRzvaWI/q4DvQj5cCuVZX5YCHZb6nJXPQ4PmH83F232SkiEF o51Z0UQHDilB6+wrCLE7x+7E/8w4SGQA1qjT17G+xYViDph04oG/5gxXMUwpi5cTQWicmpe7v/h +wh/yYRhff5qNr X-Received: by 2002:a05:6000:25c4:b0:43d:184:8aa2 with SMTP id ffacd0b85a97d-45e5c589d93mr16397649f8f.16.1779003815037; Sun, 17 May 2026 00:43:35 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe248dsm27512864f8f.30.2026.05.17.00.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 00:43:34 -0700 (PDT) From: Svyatoslav Ryhel To: Lee Jones , Daniel Thompson , Jingoo Han , Pavel Machek , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Helge Deller , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: [PATCH v1 3/6] mfd: lm3533: Add support for VIN power supply Date: Sun, 17 May 2026 10:43:03 +0300 Message-ID: <20260517074306.30937-4-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260517074306.30937-1-clamor95@gmail.com> References: <20260517074306.30937-1-clamor95@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" Add support for 2.7V-5.5V VIN power supply. Signed-off-by: Svyatoslav Ryhel --- drivers/mfd/lm3533-core.c | 22 ++++++++++++++++++++-- include/linux/mfd/lm3533.h | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index 83ebd780f39d..131eb1a1c8eb 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -173,14 +173,25 @@ static int lm3533_set_lvled_config(struct lm3533 *lm3= 533, u8 lvled, u8 led) return ret; } =20 -static void lm3533_enable(struct lm3533 *lm3533) +static int lm3533_enable(struct lm3533 *lm3533) { + int ret; + + ret =3D regulator_enable(lm3533->vin_supply); + if (ret) { + dev_err(lm3533->dev, "failed to enable vin power supply\n"); + return ret; + } + gpiod_set_value(lm3533->hwen, 1); + + return 0; } =20 static void lm3533_disable(struct lm3533 *lm3533) { gpiod_set_value(lm3533->hwen, 0); + regulator_disable(lm3533->vin_supply); } =20 enum lm3533_attribute_type { @@ -331,7 +342,9 @@ static int lm3533_device_init(struct lm3533 *lm3533) struct device *dev =3D lm3533->dev; int ret; =20 - lm3533_enable(lm3533); + ret =3D lm3533_enable(lm3533); + if (ret) + return ret; =20 ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, lm3533->boost_freq << LM3533_BOOST_FREQ_SHIFT, @@ -453,6 +466,11 @@ static int lm3533_i2c_probe(struct i2c_client *i2c) return dev_err_probe(lm3533->dev, PTR_ERR(lm3533->hwen), "failed to get HWEN GPIO\n"); =20 + lm3533->vin_supply =3D devm_regulator_get(lm3533->dev, "vin"); + if (IS_ERR(lm3533->vin_supply)) + return dev_err_probe(lm3533->dev, PTR_ERR(lm3533->vin_supply), + "failed to get vin-supply\n"); + device_property_read_u32(lm3533->dev, "ti,boost-ovp-microvolt", &lm3533->boost_ovp); =20 diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h index 3aa962d4c747..e355a3ac982e 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -28,6 +28,7 @@ struct lm3533 { struct regmap *regmap; =20 struct gpio_desc *hwen; + struct regulator *vin_supply; =20 u32 boost_ovp; u32 boost_freq; --=20 2.51.0 From nobody Mon May 25 06:41:57 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.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 421F2313E03 for ; Sun, 17 May 2026 07:43:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003822; cv=none; b=LYmTqndSFlalt/PUVeGXbFs5KG8YTgmVWRx3zq6hiy319kVdNZxMuULk0O5PxH6gLr/D0LDOL6HF7qeTKaU8SvBQQkxuwi5ZNeKhO3ows56c3Dm2oGwhAWS8yNsrkh4RmJ571DohexFPf9O4+lMOs7hVBw3bwSnycM/np0iL090= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003822; c=relaxed/simple; bh=SomMXQMUuqQ9puJg/elt7woziBoLt88xB52B85k+sEw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ez2oM0ZqGr5GVu3mFuaW2cLKCfcSn6qeU/ei0qZhNsIsEnSAaEpQOMf0wC8oR8JI2rp9FwndgYEdWwGq6BNsmhgdlXaZk1FMyW12iz+Ab89CGK9b0R1Yq5bBi1qbtEOEf3q+YOITWkDf8NtLLuFLrrWtSD2vMearB8zb5uhjk6g= 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=UoDyHsT4; arc=none smtp.client-ip=209.85.221.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="UoDyHsT4" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-44e1860558fso561109f8f.0 for ; Sun, 17 May 2026 00:43:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779003818; x=1779608618; 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=PKwCpCIE3pQrKMIlzgxzd9zVO2yq7zSfHES0U3paVng=; b=UoDyHsT4a7UV/Gb0gAlXcvRfHdo7Ew1to8uN5nhoK3wkNKvSpuXcN8ybuPKGgXJ5Gq F5FygrKjTfVoDpq0gMCEVUmzZLn0myik+tK05B1huvBePkSSaObfbuATBKElDZrJaCuV NzwPrDcB69NMYJ1VWPT457YAtcvRlfgRwhdzwcw1Nuq/DpcA2P526bSHLcfrwwaNhUgt QykMeA1sE9/zo/OeBe85N4uHmvc3evI0S/biiXAiQGSgsb7YVEnsILf3K+garNYvX1MY jw2tJgVpZQYHmrnNrRhADBjE7Kj9EsakvKDWiH/HDzf6Zymy4fT91NbNn2VEUVN3p8j0 5zyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779003818; x=1779608618; 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=PKwCpCIE3pQrKMIlzgxzd9zVO2yq7zSfHES0U3paVng=; b=GIp75nppshP80GHAi/UJbu32PFaVqLnDCFpBEyGuss1vB6HGjeCw2X/5WfVIgbJru9 gdoIhqVrz3DdrrgkWg+tJzpdxkyfYMUZRETLpX7t4FXjOEZHW8adjJoxEtyNMsZhZ9kS WBK2Lc2fnmazgs2Q1uynP2maqdLkIwYnuO1skW2DakY8Lq6IudoFrA2Umy1VEfYOEbZa hVM5bo4tII5JduVGEJHXugLCAk7ZhoXz7TpTZCOskFYqkocp/q7NbJPqDy+fsyXXXxKY 8D4UTeORtUzaQXmzcIUx4FjsroBlDltbG7XksUIRm07CYMEulU0OvGDo/jMFbsQU9BbY rZ7A== X-Forwarded-Encrypted: i=1; AFNElJ/NX/GTCXbGkyfsVWe2X8Jm+IT2O7okKMW8vwaIcENhPPBG19Ci2rRMyu4XDl7thrOeBbtZy7i3ndGKh2Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0RdWQGBl3HftUcTWKf8PsCGragAnVqnlNDBd4g1KbqO5S5qWI 58dTYSrdphkbPFY2RSxkDsjEV6/HDXRRtNz8nzYwtF0VMamOsV5xVpKl X-Gm-Gg: Acq92OHs/w7+68ySaINWPZ7T1+NVQY6GBqIAXJuWuTnG+gKyDuw/iWrPhtn4HZpywBC Ka8PtWlSA0+F/Oa5WuYvQKo7aQ6YuXAK7Qn12u+GJqlAqpzCRpXurjEMkqAL/29SO9FxxnfpyhY H3AT54xGS4Uz2lzsW0pvpyitKML7nDJzgP0bgs3mJZRs9xweObmW/EcASTBlUvoIGBjr/NA1wYZ QHaSDATkHnpO53/cH+hwCauRbWFA1yJyUsJLgkNOhcfR3oMY/wsGqS/WpH6Z37v4ZzRUEVcj+Re TVDAI7b9gLsVX4hNhFQU5yFl3sQexkqJaD2ea0ta5wP/EDmIAJmtJhVyCkvzLse5z49yDjxBajI Vb7kERPRnBkzq+gCYtxckpt16So57MHC/TOTX8ZVLIR24WDMj/acHLwIU43xqxMpvhUTICAU6zo P4QENQoJ45L4C8 X-Received: by 2002:a05:6000:2508:b0:454:9655:43af with SMTP id ffacd0b85a97d-45e5c30d598mr14636187f8f.0.1779003817436; Sun, 17 May 2026 00:43:37 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe248dsm27512864f8f.30.2026.05.17.00.43.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 00:43:36 -0700 (PDT) From: Svyatoslav Ryhel To: Lee Jones , Daniel Thompson , Jingoo Han , Pavel Machek , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Helge Deller , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: [PATCH v1 4/6] mfd: lm3533: set DMA mask Date: Sun, 17 May 2026 10:43:04 +0300 Message-ID: <20260517074306.30937-5-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260517074306.30937-1-clamor95@gmail.com> References: <20260517074306.30937-1-clamor95@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" Missing coherent_dma_mask assigning triggers the following warning in dmesg: [ 3.287872] platform lm3533-backlight.0: DMA mask not set Since this warning might be elevated to an error in the future, set coherent_dma_mask to zero because both the core and cells do not utilize DMA. Signed-off-by: Svyatoslav Ryhel --- drivers/mfd/lm3533-core.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index 131eb1a1c8eb..c7914afd564c 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -499,6 +499,10 @@ static int lm3533_i2c_probe(struct i2c_client *i2c) lm3533->have_leds =3D true; } =20 + /* Parent I2C controller uses DMA, LM3533 and child devices do not */ + i2c->dev.coherent_dma_mask =3D 0; + i2c->dev.dma_mask =3D &i2c->dev.coherent_dma_mask; + return lm3533_device_init(lm3533); } =20 --=20 2.51.0 From nobody Mon May 25 06:41:57 2026 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.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 DA957310785 for ; Sun, 17 May 2026 07:43:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003826; cv=none; b=Eve/0pwMiQkIWrGUMU1nBim8NAYhyM/ls+ml2pTRYEOIVIUrXN7Ebl9xnJGO7G7uLHUmtyHTJFJFt+MmuaYtMO59z8+7BKGWsTgUOJ5JEKFvBXbzWqFdo9fMKV3p7feR7WYhZMaE8QgzfEIZ5gnN+TZwz1f+HOW/WOmXz/zCN38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003826; c=relaxed/simple; bh=YDvzhtpKlF4YyG+3rcF4wl/f1z7vrexwv/RtY92FvxI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lOKwGX7sn3r1fDdE9g2/e3gljPDP/RhF4Dfy2bz6O2zb/gP1uGY/KFLWF3K0plSz3iCSb/E6t0LtE+fBrEcC9v0d5jWjhVLo70yv9h5Sy7h/mPRWlGYvJ0YuSHXbMFJYRIK6PUgbnBZ7l2rDJdCAgwT7BYeRg2l9vcLE2uWMNGo= 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=Vwer9Jlt; arc=none smtp.client-ip=209.85.221.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="Vwer9Jlt" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-452169ae568so690978f8f.3 for ; Sun, 17 May 2026 00:43:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779003819; x=1779608619; 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=0LzbpjsuKPCXdtxH83s9qoUUdpBAxIBv3nnvj0Qfzzw=; b=Vwer9JltXQOWgcvgTjf2dSCnv7RIw5v1yF4JR02LuTu6WcQbmJyNODS9iKnIXJYCq7 8cZ0Q+qKM5jgfaoWeCDGEsAk+7UnwWvJUfmvQkJMe4KCNR2B5unVLJ0gmbvLmLUWzSbj Weswr4xAkLH8DqLvjxPCU+EJMetfboFl0qvCFxB7dPIMR9RzrgVS7M7mArDWzcIiuNvN 0N4BOL3s8Lu93bIq1t835Q54RnbNIr1Bsrl3yMX7uJ7ZWAn8/nXUv1nkeVfzLZgbcLLd liLOUroMTrMbjVdV4mbge5R94uskFopQatOCMGn74eOs8MHi0wWlnMFon2Bg7xOIYB2g pGhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779003819; x=1779608619; 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=0LzbpjsuKPCXdtxH83s9qoUUdpBAxIBv3nnvj0Qfzzw=; b=Z/P4+zf14sMs6ZZ30OXKHo9RuF+p4hHQfzB3aFk5TD4hVs8ik+280liQwCE/+qY324 +/omngjGhNNXFZcKIwLKYTilJ321MfgpjtcS2DgmeXNQgIn8NRY2lNZUJDXOJ2FUdiV9 JJWJ+S3RMPRYzpl6Tzq1eQUOCbQs5rT7kuYKufa+jzLwwWlh18tHVY52sRFzUQRxBOnk 3Apw0PWivgCUnESf67GVtDSJozYdXo7VTv27e0XyKiermTTtPSj6S5e9pomaUCt/CgPP 2jpNV5/+RpoKomCHyfSulqlUojzS7WfBs11zwB/n7ghu8aWoS+e4pNPmbszqETBSq8yv cIWA== X-Forwarded-Encrypted: i=1; AFNElJ8f37Imp99Yh0ajnaiIaWgEpu+Io4ZiaOkbRScxtUbeG4AnDe7NKyVEKihAWqexHHHA718hVIUXLrTUwaM=@vger.kernel.org X-Gm-Message-State: AOJu0YwP7la59a3luLwwJOSOwP+mj3Ix71YuMCbicn2D9uK6+QZ6JY7I 98ZoFXtD1wANzKQM6A6L4Au56O90fVxADnM3oZJGBcCCK7yQSW3EJHH8 X-Gm-Gg: Acq92OEj0Ss0Q/qSh30gm7sJcT/Jga350BNB6vMrYp9u18bnGD8wVBOww1IIbt/WW9r S+MyfgHoFlIub5JnIAc2KqbVGwFzYJ31kUV7IQjkPOgSKwZGwfAv44sU09Jy9bs0cA3C1d0SMrN QG45ZYaYsm4xKfJKC6il6TvYAVm00qq5DJO2dkm18WtTRGkTYgZkhkwmFos2zyi4P1Rwp6RwgkX cvktD7m/Il+aS7SjVmTiUoPUFGzUyE5cTkDZv5xAyIxdFBA0CzPa8eZ9wjmC1py3smkhgddhIrn 1AieziLS9G0BbTucEN4+UCLy2lhn211YTf+IYBJYCXpO114uHOCyNeefA9TPHybs13Ik00KqlDg g/ATOSZ27GtHVPB5DKV9U0nRnqeaWaM9jb8zTL9oGfBr2srZ/bh1HfR8E/fy4U1KHmkyH7GyxOJ soYg8PqEnysQHC X-Received: by 2002:a05:6000:603:b0:43d:7c6c:a0dd with SMTP id ffacd0b85a97d-45e5c609a1dmr15044926f8f.35.1779003818881; Sun, 17 May 2026 00:43:38 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe248dsm27512864f8f.30.2026.05.17.00.43.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 00:43:38 -0700 (PDT) From: Svyatoslav Ryhel To: Lee Jones , Daniel Thompson , Jingoo Han , Pavel Machek , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Helge Deller , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: [PATCH v1 5/6] video: backlight: lm3533_bl: Set initial mapping mode from DT Date: Sun, 17 May 2026 10:43:05 +0300 Message-ID: <20260517074306.30937-6-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260517074306.30937-1-clamor95@gmail.com> References: <20260517074306.30937-1-clamor95@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" Add support to obtain the initial mapping mode from DT instead of leaving it unconfigured. Additionally, update the linear sysfs code, which uses a similar coding pattern. Signed-off-by: Svyatoslav Ryhel --- drivers/video/backlight/lm3533_bl.c | 32 ++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index 42da652df58d..be9114b7e0ad 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -22,6 +22,7 @@ #define LM3533_BL_MAX_BRIGHTNESS 255 =20 #define LM3533_REG_CTRLBANK_AB_BCONF 0x1a +#define CTRLBANK_AB_BCONF_MODE(n) BIT(2 * (n) + 1) =20 =20 struct lm3533_bl { @@ -32,6 +33,7 @@ struct lm3533_bl { =20 u32 max_current; u32 pwm; + bool linear; }; =20 =20 @@ -135,8 +137,9 @@ static ssize_t show_linear(struct device *dev, struct device_attribute *attr, char *buf) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); + int id =3D lm3533_bl_get_ctrlbank_id(bl); + u8 mask =3D CTRLBANK_AB_BCONF_MODE(id); u8 val; - u8 mask; int linear; int ret; =20 @@ -144,8 +147,6 @@ static ssize_t show_linear(struct device *dev, if (ret) return ret; =20 - mask =3D 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); - if (val & mask) linear =3D 1; else @@ -159,23 +160,16 @@ static ssize_t store_linear(struct device *dev, const char *buf, size_t len) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); + int id =3D lm3533_bl_get_ctrlbank_id(bl); unsigned long linear; - u8 mask; - u8 val; int ret; =20 if (kstrtoul(buf, 0, &linear)) return -EINVAL; =20 - mask =3D 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); - - if (linear) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, - mask); + ret =3D lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, + linear ? CTRLBANK_AB_BCONF_MODE(id) : 0, + CTRLBANK_AB_BCONF_MODE(id)); if (ret) return ret; =20 @@ -253,8 +247,15 @@ static struct attribute_group lm3533_bl_attribute_grou= p =3D { =20 static int lm3533_bl_setup(struct lm3533_bl *bl) { + int id =3D lm3533_bl_get_ctrlbank_id(bl); int ret; =20 + ret =3D lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, + bl->linear ? CTRLBANK_AB_BCONF_MODE(id) : 0, + CTRLBANK_AB_BCONF_MODE(id)); + if (ret) + return ret; + ret =3D lm3533_ctrlbank_set_max_current(&bl->cb, bl->max_current); if (ret) return ret; @@ -333,6 +334,9 @@ static int lm3533_bl_probe(struct platform_device *pdev) bl->pwm =3D 0; device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &bl->pwm); =20 + bl->linear =3D device_property_read_bool(&pdev->dev, + "ti,linear-mapping-mode"); + ret =3D lm3533_bl_setup(bl); if (ret) goto err_sysfs_remove; --=20 2.51.0 From nobody Mon May 25 06:41:57 2026 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 298A0313E34 for ; Sun, 17 May 2026 07:43:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003826; cv=none; b=i3VEkaqRMH3lKp30C8Hlx2hTL7VzkPQM4rUwbQbT8gg8LllaCDnFBOt3lV7W3AgHlf9CI+AqKfiVB7xyBGy1p5DU/vqBzaGm9EilZbY2Qc4IYOTVXjWwHvdcGpEHfmoRzIziC/BhU8ZC3pn0/QJv2ZAKZwXo9GsuOgkS7MrDug0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779003826; c=relaxed/simple; bh=txOclh6WzEZ2psojIZqT/u47okXxsKm65cDAQQqxUbU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V83AhSkSQ6hXts51xRkQ5VbFgoyekrvyWHmR4beG26kHNZ3fYyo8U6Ii0AJx1KfpJQe3SyFLn1P9aBDQK/qby+c5laZDzOt1XV1ifiJVhEsGNMiKXHOPsGTHCTSjXvdurmaTujYZ1L0R8QdlWLe4owtYCef+yBOS7NIs986qpqg= 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=Y0m7rJCl; arc=none smtp.client-ip=209.85.221.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="Y0m7rJCl" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-43d73422431so711140f8f.2 for ; Sun, 17 May 2026 00:43:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779003820; x=1779608620; 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=fIRirlk7+iVvv+aIkrP/TTxntKDqtRTgAMbNyHeeulc=; b=Y0m7rJCl3WVA+TclXfdJwwP0opYEszxaDLhFF1gewLciSbIslwjl/fgle3gZY8flZW rM/RUX+stF1OeJIvEECD9KFd9hTCkqFOLMC0cs0MVhm+4NymBz/+gby+O14NEQDauLiC bujCgC/Ik3T43kMC49yXr6xfInG7amndCbykpg/VSsnTx7F/bTVZuqCOrSAUNLpxFgXK vvgC7KDyKE6wF23INni8Wx2CaJBGzKWmYoDx29C4UBkIitljt1964NkZhrbdXPwk0XUU laYqHxKb4vsd2Nqygibm4x4l6UNq2tsS3uW1Qb2lZ1ycH7UFN413Rsgj7QOalasYewPY lYtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779003820; x=1779608620; 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=fIRirlk7+iVvv+aIkrP/TTxntKDqtRTgAMbNyHeeulc=; b=GhhZgn3fEBO9/p4xZRKbUlcZOQh7xaAN7rTz1KjS3TQ25YjnD4e16xXBENbXC7shrt XoJSJJDQxSPt3v3b1bbC96eu2YqbIt04CxjwICQOWV6CHkxZipkVPaMv28AifdNe5cOn vA4ij/psvAQnA/6Te8Zdy92YKTs1XF8Ek8IU8HilrQqRajsFpBv1cyo+oEqAifKeGWhQ JZNwNXHJbY/1wHvKt9zCDTydjxa3BGl9BybQwNC8OhhZIoPtkCQEsG0/zR1FyGBwBAne 5glJmqUt0xHHntus9LDQWXRVivt2wza5qEc1SVJCF+4LGSlcT9u5aBRKaDhKdvlX7HSc ywLg== X-Forwarded-Encrypted: i=1; AFNElJ/jh8OPdOxX8mrs5Uz6D4JfO0J/ym/mDOvpZ8+4PkjF5m/MwodeTVYv99KgKYMY66CrFCL8yUmVYx0W8SI=@vger.kernel.org X-Gm-Message-State: AOJu0YztMhfk+wcC0mR+VYa1MJXtH+NfPmWA+w7sTk/0DeK0L+Vijeqr hkixu89AylJgDCdUxwX/DfM/40xU/bdRLFcwG791YVc7BIVE4xaDSUjk X-Gm-Gg: Acq92OFVbAjFPdmK2TFlvdQn0uWl8J2HG7C72lrYmzi1zxyHJdlYSXq83Hrzsop8+2j 10Vlhm8fiE+TJgPEipaU0I1au8/CoVz6ztPd/A+R8Y6ve/BcxhycObTDWz3JXx2W+B3jLPDMr4k I0cATFxa/GS2mpE/8n4Ki1txAV/Y9PUwdnOrvSjWW+ixJyTzy67WmWpYE12MDGAbcbzQLInHQUw DA9s+5zTZ+K3s37n7etYqM9T6Zix3xeGwCwiCwNa6AoV3N7pNodkLKK27HKchryrGL4APTmKYKb lNUlMaJPZdrCRVNAxktkGzd1GRumZw49P7+JKdr7exzjVgkWLbizAhQYAHncWV6Z25i2+bPtUn4 D3WJHP6Itr4HPkD2OT/UMjMe+raJj1olT1k0islaLwPhjS8ggmQz5zpT88NAZwcB1fbryA6cJKJ EoYWxj9J4rcR/f X-Received: by 2002:a05:6000:22c5:b0:43d:7d24:b510 with SMTP id ffacd0b85a97d-45e5c5fd8demr15790172f8f.22.1779003820408; Sun, 17 May 2026 00:43:40 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45da0fe248dsm27512864f8f.30.2026.05.17.00.43.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 00:43:39 -0700 (PDT) From: Svyatoslav Ryhel To: Lee Jones , Daniel Thompson , Jingoo Han , Pavel Machek , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Cameron , David Lechner , =?UTF-8?q?Nuno=20S=C3=A1?= , Andy Shevchenko , Helge Deller , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-fbdev@vger.kernel.org Subject: [PATCH v1 6/6] video: leds: backlight: lm3533: Support getting LED sources from DT Date: Sun, 17 May 2026 10:43:06 +0300 Message-ID: <20260517074306.30937-7-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260517074306.30937-1-clamor95@gmail.com> References: <20260517074306.30937-1-clamor95@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" Add Control Bank to HVLED/LVLED muxing support based on the led-sources defined in the device tree. Signed-off-by: Svyatoslav Ryhel --- drivers/leds/leds-lm3533.c | 55 +++++++++++++++++++++++++++-- drivers/video/backlight/lm3533_bl.c | 39 +++++++++++++++++++- 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c index f6345bc1f443..c4eaf30880a1 100644 --- a/drivers/leds/leds-lm3533.c +++ b/drivers/leds/leds-lm3533.c @@ -7,6 +7,7 @@ * Author: Johan Hovold */ =20 +#include #include #include #include @@ -26,6 +27,12 @@ #define LM3533_ALS_CHANNEL_LV_MIN 1 #define LM3533_ALS_CHANNEL_LV_MAX 2 =20 +#define LM3533_REG_OUTPUT_CONF1 0x10 +#define OUTPUT_CONF1_MASK GENMASK(7, 2) +#define OUTPUT_CONF1_SHIFT 2 +#define LM3533_REG_OUTPUT_CONF2 0x11 +#define OUTPUT_CONF2_MASK GENMASK(3, 0) +#define OUTPUT_CONF2_SHIFT 6 #define LM3533_REG_CTRLBANK_BCONF_BASE 0x1b #define LM3533_REG_PATTERN_ENABLE 0x28 #define LM3533_REG_PATTERN_LOW_TIME_BASE 0x71 @@ -40,7 +47,7 @@ #define LM3533_REG_CTRLBANK_BCONF_ALS_CHANNEL_MASK 0x01 =20 #define LM3533_LED_FLAG_PATTERN_ENABLE 1 - +#define LM3533_MAX_LEDS 5 =20 struct lm3533_led { struct lm3533 *lm3533; @@ -53,6 +60,9 @@ struct lm3533_led { =20 u32 max_current; u32 pwm; + + u32 num_leds; + u32 leds[LM3533_MAX_LEDS]; }; =20 =20 @@ -639,7 +649,30 @@ static const struct attribute_group *lm3533_led_attrib= ute_groups[] =3D { =20 static int lm3533_led_setup(struct lm3533_led *led) { - int ret; + u32 output_cfg_shift =3D 0; + u32 output_cfg_val =3D 0; + int ret, i; + + if (led->num_leds) { + for (i =3D 0; i < led->num_leds; i++) { + output_cfg_shift =3D led->leds[i] * 2; + output_cfg_val |=3D led->id << output_cfg_shift; + } + + /* LVLED1, LVLED2 and LVLED3 */ + ret =3D lm3533_update(led->lm3533, LM3533_REG_OUTPUT_CONF1, + output_cfg_val << OUTPUT_CONF1_SHIFT, + OUTPUT_CONF1_MASK); + if (ret) + return ret; + + /* LVLED4 and LVLED5 */ + ret =3D lm3533_update(led->lm3533, LM3533_REG_OUTPUT_CONF1, + output_cfg_val >> OUTPUT_CONF2_SHIFT, + OUTPUT_CONF2_MASK); + if (ret) + return ret; + } =20 ret =3D lm3533_ctrlbank_set_max_current(&led->cb, led->max_current); if (ret) @@ -713,6 +746,24 @@ static int lm3533_led_probe(struct platform_device *pd= ev) led->pwm =3D 0; device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &led->pwm); =20 + led->num_leds =3D device_property_count_u32(&pdev->dev, "led-sources"); + + /* + * If led-sources property is not set then either this Control Bank uses + * its default LVLED or is not linked to any LVLED at all. + */ + if (led->num_leds <=3D 0 || led->num_leds > LM3533_MAX_LEDS) + led->num_leds =3D 0; + + if (led->num_leds > 0 && led->num_leds < LM3533_MAX_LEDS) { + ret =3D device_property_read_u32_array(&pdev->dev, "led-sources", + led->leds, led->num_leds); + if (ret) { + dev_err(&pdev->dev, "failed to get led-sources\n"); + goto err_deregister; + } + } + ret =3D lm3533_led_setup(led); if (ret) goto err_deregister; diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index be9114b7e0ad..2898cb229643 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -7,6 +7,7 @@ * Author: Johan Hovold */ =20 +#include #include #include #include @@ -21,9 +22,12 @@ #define LM3533_HVCTRLBANK_COUNT 2 #define LM3533_BL_MAX_BRIGHTNESS 255 =20 +#define LM3533_REG_OUTPUT_CONF1 0x10 +#define OUTPUT_CONF1_MASK GENMASK(1, 0) #define LM3533_REG_CTRLBANK_AB_BCONF 0x1a #define CTRLBANK_AB_BCONF_MODE(n) BIT(2 * (n) + 1) =20 +#define LM3533_MAX_LED_STRINGS 2 =20 struct lm3533_bl { struct lm3533 *lm3533; @@ -34,6 +38,9 @@ struct lm3533_bl { u32 max_current; u32 pwm; bool linear; + + u32 num_leds; + u32 led_strings[LM3533_MAX_LED_STRINGS]; }; =20 =20 @@ -248,7 +255,8 @@ static struct attribute_group lm3533_bl_attribute_group= =3D { static int lm3533_bl_setup(struct lm3533_bl *bl) { int id =3D lm3533_bl_get_ctrlbank_id(bl); - int ret; + u32 output_cfg_val =3D 0; + int ret, i; =20 ret =3D lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, bl->linear ? CTRLBANK_AB_BCONF_MODE(id) : 0, @@ -256,6 +264,16 @@ static int lm3533_bl_setup(struct lm3533_bl *bl) if (ret) return ret; =20 + if (bl->num_leds) { + for (i =3D 0; i < bl->num_leds; i++) + output_cfg_val |=3D id << bl->led_strings[i]; + + ret =3D lm3533_update(bl->lm3533, LM3533_REG_OUTPUT_CONF1, + output_cfg_val, OUTPUT_CONF1_MASK); + if (ret) + return ret; + } + ret =3D lm3533_ctrlbank_set_max_current(&bl->cb, bl->max_current); if (ret) return ret; @@ -337,6 +355,25 @@ static int lm3533_bl_probe(struct platform_device *pde= v) bl->linear =3D device_property_read_bool(&pdev->dev, "ti,linear-mapping-mode"); =20 + bl->num_leds =3D device_property_count_u32(&pdev->dev, "led-sources"); + + /* + * If led-sources property is not set then either this Control Bank uses + * its default HVLED or is not linked to any HVLED at all. + */ + if (bl->num_leds <=3D 0 || bl->num_leds > LM3533_MAX_LED_STRINGS) + bl->num_leds =3D 0; + + if (bl->num_leds > 0 && bl->num_leds < LM3533_MAX_LED_STRINGS) { + ret =3D device_property_read_u32_array(&pdev->dev, "led-sources", + bl->led_strings, + bl->num_leds); + if (ret) { + dev_err(&pdev->dev, "failed to get led-sources\n"); + goto err_sysfs_remove; + } + } + ret =3D lm3533_bl_setup(bl); if (ret) goto err_sysfs_remove; --=20 2.51.0