From nobody Mon Jun 8 15:38:05 2026 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.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 97A00288530 for ; Thu, 28 May 2026 13:51:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976314; cv=none; b=Ig/8zEhphGqnVcRj/TvxMC59c8x3Jv7YoYYOLgBGdZZJRkJi+rhtGuadBnQguoNwOY0Ty55qSyvkIe6hhHaroV3XMEk8yBO7rGkt6XkqZrnxJyUXXfdGS8lT1HozP/8YiHamHq9bsEb9b5fyou1soFeVPVm/v7I5fWmK1zO9ctc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976314; c=relaxed/simple; bh=GA+IIuWYfRXXOtj9iSw7oDNtvgfpuldlCTzJrIzeZ+M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ARTQtCaA6g0fCdAzUsH/6dtmpNJ5HH3y/Z/Fk8L3uF9zUMNnOZuUANGTT6eM2DHIdsd9W/BLCzq1rASzC0K/05PDpSL770JXM22rhDPXdv0eFKLZphwg5WedJIbpTLUWXNKMndI4JXvwtlbRojxlrZkRmJMJiOqkdFbiu9QaWqQ= 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=qIxvoQ2Q; arc=none smtp.client-ip=209.85.218.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="qIxvoQ2Q" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-bd85ebb368fso1906667966b.1 for ; Thu, 28 May 2026 06:51:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779976310; x=1780581110; 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=KmPOuK700qqRNmbjQc6WKiJMNWP2mD2DZ4U/tFzy/So=; b=qIxvoQ2QHv+ijfLPxO4vakaujjGSIglmuenQgoN6fCGMNgbMfbUJ2QQuN6vF99RL1e m8ICOrkNxi2t5bj3e6fTVRZIPGbzOBl0uEyftISgIgUKIBNjjght1ovIpWOACYlLnfC8 JtbPAXAgyrdU4ZHyhexF35Jto/+k738sOyuwzTCsRL4wTJBzqkWJD7ahtY/6Ghm8j0pW IfHOKisPAZbduwdvO4hZxvhgcV/8CcxlbgXYQLBUz8g0VJRziOpFONtSisSpVZXBcnqv eGe6gpT9NgSPBOJOKl+rvDuuKU5xEqhTlO/3g8GquctckCrtldnI1hzBJGfOIcf9vTjp WwlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779976310; x=1780581110; 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=KmPOuK700qqRNmbjQc6WKiJMNWP2mD2DZ4U/tFzy/So=; b=ZkSNYwljEDQrWw2Sz7q0qALj6Z9dtmGQJAztYlgIaOaOzXg8qw5pkLufWtl8MrYMBp fQuk770i9awnsS9tKblGJJUg+PDfOjU78ZUEWxPTkDpAL8iFNI9LXm6G2Mfi5uyLLIYy xLHZn5kp3uJlXEBWkrlw8a9drqH7bMmVnYpkGPjdEcyKnOz/XVUrgJV35D9WeEw0Q4+f HSg93O4WN+oZd97HHd2qNx0YfhU27LfWaBZprmJIYk3nsq6tIvoz21l+DIQd3WH1Rxpj 2LDECXF4sJSzy/GwgG25GmPh7HbszY7S0LX6XXUQvyxO6DmvUisSwruulGIRzJuflSGi QUXA== X-Forwarded-Encrypted: i=1; AFNElJ/8IawqO2Vkyg7ugbzx67LbUa4s2IRGAhCoLCUmqIdmKpuw25esb4J4l76sU0X9J2v8ms/2Thu8WkYOAT0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw673XdgpchWtIpB7Hk+pFFh3FPXC2XodA7JzMZLexvLVgYirCC 7pj2ZkyqlQWLaFMcwknDMy28qWuxniQ1USrhT6JaaULI+gsr+DvNrX6C X-Gm-Gg: Acq92OEZuea3CTGJRC5jeYEf80wZHJFWGhBA7skp1HnCjupNzF+KmMGqg8i4wRKNJF3 jEiBWQKt27ylh/gtcl6kaV9j+Wi+RyhjJLKSWWn5K7h/hyJUgel5MPHdQZRwQmn+278u6/FKBu9 Fhltg0uX+MYmP9177PBoZ9IzHT7VYXa+9jjE4rRHUN5Dq0Zfor7xFHi4D5GyUSo9vsJY2TztP1k XJZiQRtPSJy+Gn9koRwcI5+qX4mDO8q08h1S3eTqcqG6z+KPyw1lY31Ydq12cFACQ2qjFfsH9YR s7p9ML8nfRRVJFbk5+TWKw3gZZVZDcvqMkEMvLkjTi3T+ljc4UsskqHHkOW0tyNKtYzh27Ex9DS YqAwJoAiNQlb9gCynjJEKkBkKWNxdLo5wGj9tnXrD1HGk5aodiIcTdDBBVkbpEdm7OnR/3J8Zdh NwnMufk9vk5oyik41xtsqjfZk= X-Received: by 2002:a17:906:4fce:b0:bd4:e62e:d399 with SMTP id a640c23a62f3a-bdd25ceb7d0mr1763813766b.26.1779976309569; Thu, 28 May 2026 06:51:49 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bddc65da3bbsm723636566b.52.2026.05.28.06.51.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 06:51:49 -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: Johan Hovold , 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 v2 1/6] dt-bindings: leds: Document TI LM3533 LED controller Date: Thu, 28 May 2026 16:51:18 +0300 Message-ID: <20260528135123.103745-2-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528135123.103745-1-clamor95@gmail.com> References: <20260528135123.103745-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 Reviewed-by: Jonathan Cameron #for light sensor --- .../leds/backlight/ti,lm3533-backlight.yaml | 68 +++++++ .../bindings/leds/ti,lm3533-leds.yaml | 66 +++++++ .../devicetree/bindings/leds/ti,lm3533.yaml | 170 ++++++++++++++++++ 3 files changed, 304 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..a321926de62e --- /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: 4 + + 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..6e12e12be08e --- /dev/null +++ b/Documentation/devicetree/bindings/leds/ti,lm3533.yaml @@ -0,0 +1,170 @@ +# 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 + interface for an external light sensor. + + 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 light sensor is in + Analog Sensor mode and PWM mode is disabled. The expectation is + the input is a current from the external analog light sensor and + this is used to convert it to a voltage within the target range. + minimum: 1575 + maximum: 200000 + + ti,pwm-mode: + type: boolean + description: + Switch for mode in which light sensor interface is running. If + this property is set then the light sensor interface is running + in PWM mode, internal resistor value is set to high-impedance (0) + and ti,resistor-ohm property is ignored. + + required: + - compatible + + oneOf: + - 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 + - '#address-cells' + - '#size-cells' + +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 1>; + }; + + led@2 { + compatible =3D "ti,lm3533-leds"; + reg =3D <2>; + + led-max-microamp =3D <23400>; + led-sources =3D <0 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 Jun 8 15:38:05 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 4456129B781 for ; Thu, 28 May 2026 13:51:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976317; cv=none; b=MuBZmJJaKSGXitYgV8RcQwAGT0EsedAR3FKznL1j/t2H837fcZESKtcvXYh9zEMt5OD/5R+z19jlP5w8O0a4Ppa30eWfEIO+HZ1IWeLKBRNmlaXtCb/ZTNV7k0KyK6kTHJeKg2aQPEOTfmLaTMI49JEjsJ2H3zdKKeAnsyAS8lY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976317; c=relaxed/simple; bh=5OhNC/kbplsD1X2aegFmQQ7aD51PsPM6lNni4i9qWVk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a1FfOiOtuzzr1FELPvRHcdI8H11MAcM7qSFriiKBX6Kbrdc2rocxUscCkxXp+sheURD+pYxWzkZISkR3DabsFRq3mRJFj3ALz58BSX9D9w1TJhxRpjxbsx2S39YHNXxF8NMM/Ub7DBqLlBZaa1RQHeFBa6Dzj+q0oOhZV5mWOqU= 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=g53ZQpr9; arc=none smtp.client-ip=209.85.218.54 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="g53ZQpr9" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-bcda7765d64so2426955566b.1 for ; Thu, 28 May 2026 06:51:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779976312; x=1780581112; 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=oKXHs3r1H9c6LJCg5cUveP/Cb9DNoAoEPAPb/YZH6ho=; b=g53ZQpr9FiW6sN6XrpCl15fGQaSpzwUWV01dEcjbi2F19u3rtctD3tGg38y49SC4Wa Ttrvae/jDvbTbcyNIyyMiG2UYZ4gekPvBcQ0YcbpBPwgKAGQRTN5SyAyZ9Uv56vsKGqE t3zHR8m/+NtghNkLSG0zuQD9fUzjpZ5H63Y3hOrF35uJCII/hXRCTR5pLJ041kzpSCgD NY9T5iXeXUsvsrr4exorzX/V5/k5+awWJ1FIPfzYB1E6D6kb/xskPIH3A1zxI9/JqbnD dDmd3qFZXmCC5SLOEB4pVPRgN+PSRvB/a/PaOza2PmOErOltDVmxrLZygfQbo9F45NRp dPKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779976312; x=1780581112; 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=oKXHs3r1H9c6LJCg5cUveP/Cb9DNoAoEPAPb/YZH6ho=; b=Yu80hfO2dwgfM6QiMTqEFC+oUF3lKwAQ8AodpnmGmAEcLYnRDk1bBGQmvBVm3nwoMk UxDkpuISeuoRa0aiK9mKN7AYMuIo9nd0HcZHkGL/NA5q0OQfTsGG/Mx2eeAd2+FnRAQA ql1RafTHksvu8cmsFMuS2OpXYyoerJ6UVRrktrVmc07CMvYQ3uKOhxaGt8wGMHNMofcR /KdCM6uQDGaUCHmLrhlJHfZoix3XavV/OgNHH0Ccg4+BzIsrXF64iD5UVbBe/T9JXSkW uV9SVewt2mE4nEN8RJNpU5VuOIpxYw/QyYq4bcEFzyPbivcb57vII4R+zfdHwkNalRsE 4skA== X-Forwarded-Encrypted: i=1; AFNElJ9UURKMgiN/t2XpYpW+WEyHSwXDMn/CUJR/J91ip5/RGXBhh2y2IOCsaSYlsgQQ2JAszM/hsEH0A7S3rvc=@vger.kernel.org X-Gm-Message-State: AOJu0Yxn38ygV7sZCnXNJ73ystf78FPRWtT+WcKBcgwS8T3MFZ6GcSYn 2YCSLL8MM/ok5jyKxYuEtzZ4kDqsKwvF+Ruz7dtPXzDmYM4iO8O3ENvj X-Gm-Gg: Acq92OFZiG3ksPaxPyiv7NopBoNTj0V4jMxcLT7CcTRTO+AauwUT+gdWXB1Gz5GVQYA 3I6QeU+BGEtSbUboiurNpfo0+1EbnOkqov9cs5u7OF9sUu3UdPFUObY8xv9EP5P53TNueI17+Tj 9CQrn4JRUeGoQG70cHHAh2tg8PKcjQ/KYn5hd7WFsIoK2F7zWV980YvcyjZXJy4pLTibt74+1wB 7JciJadd7ptDr3A740GJbbdv32EJMfNL8RXZBlG0WkQpqHhdmxc/fw/WJh3I7xNehzKS5XUJLu9 OngW3Roc0AMSZSG5v/G7Zfvfug/Gz7lM6R59uXRmKXsHoKU+VXlS9aDtF2xRE8LRfoJcMtBAbIW LYkAQxla9a2mpU/MIPUeKl8fsVTk5gGB3lLY3tQE92ytmr23OdonU5oNIYWIX+J40f1GHRXbmY9 Ia14vnVsLgNuJcMFylhON6M+o= X-Received: by 2002:a17:907:7b9d:b0:be3:96e0:95cf with SMTP id a640c23a62f3a-be87c9224c9mr104309166b.31.1779976311419; Thu, 28 May 2026 06:51:51 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bddc65da3bbsm723636566b.52.2026.05.28.06.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 06:51:50 -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: Johan Hovold , 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 v2 2/6] mfd: lm3533: Convert to use OF bindings Date: Thu, 28 May 2026 16:51:19 +0300 Message-ID: <20260528135123.103745-3-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528135123.103745-1-clamor95@gmail.com> References: <20260528135123.103745-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 | 95 ++++------ drivers/leds/leds-lm3533.c | 51 ++++-- drivers/mfd/lm3533-core.c | 268 ++++++++++------------------ drivers/video/backlight/lm3533_bl.c | 52 ++++-- include/linux/mfd/lm3533.h | 51 +----- 5 files changed, 212 insertions(+), 305 deletions(-) diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c index 99f0b903018c..cbd337b73bd9 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,59 +720,33 @@ static const struct attribute_group lm3533_als_attrib= ute_group =3D { .attrs =3D lm3533_als_attributes }; =20 -static int lm3533_als_set_input_mode(struct lm3533_als *als, bool pwm_mode) +static int lm3533_als_setup(struct lm3533_als *als) { - u8 mask =3D LM3533_ALS_INPUT_MODE_MASK; - u8 val; + struct device *dev =3D &als->pdev.dev; int ret; =20 - 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; - } + device_property_read_u32(dev, "ti,resistor-value-ohm", + &als->r_select); =20 - return 0; -} + 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); =20 -static int lm3533_als_setup(struct lm3533_als *als, - const struct lm3533_als_platform_data *pdata) -{ - int ret; + als->pwm_mode =3D device_property_read_bool(dev, "ti,pwm-mode"); =20 - ret =3D lm3533_als_set_input_mode(als, pdata->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) - return ret; + return dev_err_probe(dev, ret, "failed to set input mode %d\n", + als->pwm_mode); =20 /* ALS input is always high impedance in PWM-mode. */ - if (!pdata->pwm_mode) { - ret =3D lm3533_als_set_resistor(als, pdata->r_select); + if (!als->pwm_mode) { + ret =3D lm3533_write(lm3533, LM3533_REG_ALS_RESISTOR_SELECT, + (u8)als->r_select); if (ret) - return ret; + return dev_err_probe(dev, ret, "failed to set resistor\n"); } =20 return 0; @@ -828,7 +808,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 +817,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,25 +825,28 @@ 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); + + if (als->irq =3D=3D -EPROBE_DEFER) + return -EPROBE_DEFER; + 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); + ret =3D lm3533_als_setup(als); if (ret) goto err_free_irq; =20 @@ -907,9 +883,16 @@ static void lm3533_als_remove(struct platform_device *= pdev) 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..d707d43d5526 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, (u8)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,12 +660,6 @@ static int lm3533_led_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; - } - if (pdev->id < 0 || pdev->id >=3D LM3533_LVCTRLBANK_COUNT) { dev_err(&pdev->dev, "illegal LED id %d\n", pdev->id); return -EINVAL; @@ -673,8 +670,6 @@ static int lm3533_led_probe(struct platform_device *pde= v) 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; @@ -682,6 +677,15 @@ static int lm3533_led_probe(struct platform_device *pd= ev) led->cdev.groups =3D lm3533_led_attribute_groups; led->id =3D pdev->id; =20 + 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); + mutex_init(&led->mutex); =20 /* The class framework makes a callback to get brightness during @@ -694,15 +698,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 +751,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..8495e9119871 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 @@ -35,6 +42,7 @@ =20 #define LM3533_HVLED_ID_MAX 2 #define LM3533_LVLED_ID_MAX 5 +#define LM3533_CELLS_MAX 7 =20 #define LM3533_REG_OUTPUT_CONF1 0x10 #define LM3533_REG_OUTPUT_CONF2 0x11 @@ -42,44 +50,6 @@ =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, - }, -}; - int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val) { int tmp; @@ -132,35 +102,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,135 +317,93 @@ 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; + struct mfd_cell lm3533_cells[LM3533_CELLS_MAX]; + u32 count =3D 0, reg; 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); - - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_als_devs, 1, NULL, - 0, NULL); - if (ret) { - dev_err(lm3533->dev, "failed to add ALS device\n"); - return ret; - } - - lm3533->have_als =3D 1; - - return 0; -} + lm3533_enable(lm3533); =20 -static int lm3533_device_bl_init(struct lm3533 *lm3533) -{ - struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); - int i; - int ret; + device_for_each_child_node_scoped(lm3533->dev, child) { + if (!fwnode_device_is_available(child)) + continue; =20 - if (!pdata->backlights || pdata->num_backlights =3D=3D 0) - return 0; + if (count >=3D LM3533_CELLS_MAX) + break; =20 - if (pdata->num_backlights > ARRAY_SIZE(lm3533_bl_devs)) - pdata->num_backlights =3D ARRAY_SIZE(lm3533_bl_devs); + if (fwnode_device_is_compatible(child, "ti,lm3533-als")) { + lm3533_cells[count].name =3D "lm3533-als"; + lm3533_cells[count].id =3D PLATFORM_DEVID_NONE; + lm3533_cells[count].of_compatible =3D "ti,lm3533-als"; =20 - 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]); - } + lm3533->have_als =3D true; + } =20 - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_bl_devs, - pdata->num_backlights, NULL, 0, NULL); - if (ret) { - dev_err(lm3533->dev, "failed to add backlight devices\n"); - return ret; - } + if (fwnode_device_is_compatible(child, "ti,lm3533-backlight")) { + ret =3D fwnode_property_read_u32(child, "reg", ®); + if (ret || reg > LM3533_HVLED_ID_MAX) { + dev_err(dev, "invalid backlight reg %d\n", reg); + continue; + } =20 - lm3533->have_backlights =3D 1; + lm3533_cells[count].name =3D "lm3533-backlight"; + lm3533_cells[count].id =3D reg; + lm3533_cells[count].of_compatible =3D "ti,lm3533-backlight"; =20 - return 0; -} + lm3533->have_backlights =3D true; + } =20 -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 (fwnode_device_is_compatible(child, "ti,lm3533-leds")) { + ret =3D fwnode_property_read_u32(child, "reg", ®); + if (ret || reg < LM3533_HVLED_ID_MAX || + reg > LM3533_LVLED_ID_MAX) { + dev_err(dev, "invalid LED reg %d\n", reg); + continue; + } =20 - if (!pdata->leds || pdata->num_leds =3D=3D 0) - return 0; + lm3533_cells[count].name =3D "lm3533-leds"; + lm3533_cells[count].id =3D reg - LM3533_HVLED_ID_MAX; + lm3533_cells[count].of_compatible =3D "ti,lm3533-leds"; =20 - if (pdata->num_leds > ARRAY_SIZE(lm3533_led_devs)) - pdata->num_leds =3D ARRAY_SIZE(lm3533_led_devs); + lm3533->have_leds =3D true; + } =20 - 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]); + count++; } =20 - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_led_devs, - pdata->num_leds, 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 LED devices\n"); - return ret; + dev_err(dev, "failed to set boost frequency\n"); + goto err_disable; } =20 - 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; + ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, + lm3533->boost_ovp << LM3533_BOOST_OVP_SHIFT, + LM3533_BOOST_OVP_MASK); + if (ret) { + dev_err(dev, "failed to set boost ovp\n"); + 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 mfd_add_devices(dev, 0, lm3533_cells, count, NULL, 0, NULL); + if (ret) { + dev_err(dev, "failed to add MFD devices: %d\n", ret); goto err_disable; + } =20 - 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; + ret =3D sysfs_create_group(&dev->kobj, &lm3533_attribute_group); + if (ret) { + dev_err(dev, "failed to create sysfs attributes\n"); + goto err_remove_devices; } =20 return 0; =20 -err_unregister: +err_remove_devices: mfd_remove_devices(lm3533->dev); err_disable: lm3533_disable(lm3533); @@ -517,8 +416,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 +486,26 @@ 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; =20 return lm3533_device_init(lm3533); } @@ -600,9 +516,16 @@ static void lm3533_i2c_remove(struct i2c_client *i2c) =20 dev_dbg(&i2c->dev, "%s\n", __func__); =20 + mfd_remove_devices(lm3533->dev); 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 +535,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 Jun 8 15:38:05 2026 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (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 026C82C21D0 for ; Thu, 28 May 2026 13:51:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976317; cv=none; b=Kg8KPJog3ASMA9f67ocm/CZhyfi6UjJdGg1s+fGDafNURrnPmisgSeJkLCjC4CyeMCCqG3LSw4JcDb1kW1r7hUj4GMUQ7DC+Z9r0ekkwhtRI74yNM5joefLPs1bWhtX69pBaRQiNJNQwVsCdRE0vknlsNihqdC692rv8n/vy0Kg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976317; c=relaxed/simple; bh=GVDB20doAR1K3eUlSf2alRlQ5pVPpRgTdHeEwbkCl1w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pcEFUEft5Uq1p5AXjT5c8K3gQaUao5t2/bXyJvt3d1+XVaYOzX9QC0HDGUOqwlPBJrhJvzFCT5CtMlRp2M50rVTgmKd6YD6sgoc9n++qZ8qadrdws6WE3FHmNFPuvUdGETTXU9245815x9NP/FdvjS+mamQFLIJqf/2whw+CoXU= 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=WM0NCWkf; arc=none smtp.client-ip=209.85.218.44 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="WM0NCWkf" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-bd21ffaca79so2343260266b.0 for ; Thu, 28 May 2026 06:51:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779976313; x=1780581113; 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=8RF2xk6t5S9a3BXZ1svw/IWrQWbafQA9obLcpKPhSUU=; b=WM0NCWkfxxhAP1fs+Vo6mRLqj6NIobz/HNMMMFa+sRnSMxYkv/45NnT4Smn4bmOIVK KO+Qpf4eTYFykEuHrLoKOpIqvv11vwJBmKUnX77F9J9UC2x8b+ulhQLf3xdCsy6GMHke T1qZTr8x40LTNP3rixwb5g9MQzcMwrrBc1XRv/8DCe57fPbgTH0r+lz48UnUKGNDjknB /lNNdYQ3Z1/XyKGFvL8Ms2xg88uTaKaN9pyFuk01JIELKWVVmWgPQkwcHXPRbuxqNPeM Ls3k5okZp2MAEviLQbi+G1VIeL9umYlji8BxGasjL94HP5QCOl1qMVIPNzliRQkOZqAE wB8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779976313; x=1780581113; 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=8RF2xk6t5S9a3BXZ1svw/IWrQWbafQA9obLcpKPhSUU=; b=Zp6D69MQWVzTM1a1iinjhz0O38D959Rb03EsaAdm98gGfzj8pnWnGYjyramlpfo6hv hLPpPgnq5imTfULokqjM08kXOlKwTFPxPtLMErFgljedkwG+OwtYawb/dScbwfNMzGqv CT8sp2zONzoEPmnmD09uTAiGlAE4uIkSLUsrBczw1PWLsNcF7m5uZVVsa70Maqx3uKP4 6M5yEITg4VWlw13BlxyO4isUldWgehUXCK4NZF7QtglELt3DLayBzYUDlG596ZU+nLGz L9j/OOUuyOjcFUqgllrEKpCVI8za/VmQLVsx7ajs7+FlCGX5v9f83Al8yDe3UllPTM+d +2fg== X-Forwarded-Encrypted: i=1; AFNElJ8QT1EMyIpOl15UoHWhPbbnIBh/1Mb+33GZVxkeh3a+T3XUFN9912vjj2CumpeGv8GRTPvxsVCXbh/24EU=@vger.kernel.org X-Gm-Message-State: AOJu0YxXmxAmEvZx3ZvqL03xjRJNCmDsZyD5pNyCNUh5f7LNdz4oq39U puIBZbD0kBTlNw/BxG5aaF3yFRJ+Izkpa0XmHo0QK1QVJHQLMc2jmdmF X-Gm-Gg: Acq92OEKJCPxf8TbxquaslcAtReLzPVfnuCG6a8BdnHOZP8PENAmP09z6AkbcxBTHTN rT0RGBQRGVFAwM6WxtFLN2EZU6JcQ0C08JJ03JqUcf9c0kIUj/O1EV9oTf9FlXFzxJ5LM09P8b4 THkXYiTwVEMkXQc1X1i+WpZJveYTU6c1I9gg5XrcpjT7VFMQJuVqXW82kJkTm3TdqI+K02V1xzO 5VGmvVNy2b2i7LjwKmmE/SRnSXwWAXoU/z9X91z8T4cr3gZFGKP+cb97oGP6gVw+cMrwl9CvDnS YgwRUXudO82e8K4avtjV+5FW9atXf23ToOfXlNJj75H5cocMysjoGa3RJthpVxzYOxXUeJ67Cax MngK6fxyCdSV1YArfKl91aKQQ2/QvBidM1dzGgSA4zZTRSPwrr0wJBID450QHUKt/QkqCvMV+WO 5zZd0XHd2CSUxZRS0mixlvGg+OHcOvC3uccA== X-Received: by 2002:a17:907:1b06:b0:bd5:b27:c02e with SMTP id a640c23a62f3a-be86d71c01amr114017466b.6.1779976313029; Thu, 28 May 2026 06:51:53 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bddc65da3bbsm723636566b.52.2026.05.28.06.51.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 06:51:52 -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: Johan Hovold , 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 v2 3/6] mfd: lm3533: Add support for VIN power supply Date: Thu, 28 May 2026 16:51:20 +0300 Message-ID: <20260528135123.103745-4-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528135123.103745-1-clamor95@gmail.com> References: <20260528135123.103745-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 | 23 +++++++++++++++++++++-- include/linux/mfd/lm3533.h | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index 8495e9119871..519f8c16a3f3 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -164,14 +165,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 { @@ -324,7 +336,9 @@ static int lm3533_device_init(struct lm3533 *lm3533) u32 count =3D 0, reg; int ret; =20 - lm3533_enable(lm3533); + ret =3D lm3533_enable(lm3533); + if (ret) + return ret; =20 device_for_each_child_node_scoped(lm3533->dev, child) { if (!fwnode_device_is_available(child)) @@ -493,6 +507,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..d751773fc92d 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -21,6 +21,7 @@ struct device; struct gpio_desc; struct regmap; +struct regulator; =20 struct lm3533 { struct device *dev; @@ -28,6 +29,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 Jun 8 15:38:05 2026 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.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 A3496286419 for ; Thu, 28 May 2026 13:51:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976320; cv=none; b=O+SA3qPjFN0YtEq/6Difq7Tl7tJ+LVftPf/PTbNrQ7x3D28ub4iga99IRfldAjYGozuMs+GSMlU3ce45qRNNkqKqxpRiT1KPWouC+dwIRHlv3pDaA8Hx1HiZtJIuFyqskUhBZIg4PRBlqMja0LQ51tPeGydq61Ldx/CJk5eFXRI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976320; c=relaxed/simple; bh=bNI9riTSmou7+zW+mF5Zb+cHzMSVVsaXDh2lYEatQQc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TTNXEJenIgbcTLKrVm8bB6NmZUa9aRSgA9w8zUZ/3gRWWjj5F41ULtqKxom+M36wMJFbSiA2/Z9ixSMjI+T6INW6+2AG0md17zj+ImlwOazzLwimBTbnFMDqDdsdYsG7wlTzMoeGoGm2i78xsXBi5PisvLKJcLauAu8CdYiBRBY= 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=agxcVUNo; arc=none smtp.client-ip=209.85.208.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="agxcVUNo" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-68707d88626so3857048a12.0 for ; Thu, 28 May 2026 06:51:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779976315; x=1780581115; 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=HqOemnD04LJjQnMzwMBgcGs6gZ1ngsn7g7S9Cna4sh0=; b=agxcVUNoXS0667varjCB/l8usoQRDYzC5dLGzKK+J++F3MLdH3t2wtlPsD1C/TbHAS /TCGKcXiNLUpQ+PR3hLQWgNmdtg098ZwoLI8VirthUFh5rPC+ztBSb83CAAwQcGvCf8/ 8jN7h4DoCd+jFMZ+lW9nWWro5/JbxgIOIlwGLU4qnPxLImT8MAq2CjTfpataX7fY110e FSO9WoKoWIiREo2/cbGbsE+NyVm1WYGmpAtjAj248lpbZVVCQUnyGMJSveeygShEgMeq 7HtaQp7DiV7npQcVm7t+VGq7SxCa6XGp28tuZIxVv+onrZmVS01hxNb8inIuNLxDBVsF 24lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779976315; x=1780581115; 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=HqOemnD04LJjQnMzwMBgcGs6gZ1ngsn7g7S9Cna4sh0=; b=F1y9bMUJ62Ow/cLE9UVWQprT12YfOjDKbC8PMHMniJyQ+by0ZqHUwDfmU9EsqlVW9h wP7ogoh+ipDqdVUa+eqXATP9zF4TqEDj2MZqfAl0p4T2kret6NyHpT2rn3EHowjUVYvQ cAwh8XBZ7xlmEzPdgHKCqXqfYVPx4IksDn3DAILSo429/RjdS3CeBPLHqlcjHdEiuZL/ UeeUPjL5mHBf2b7uvUnPVP5G+6q+mB4oSSYxNNr5JCPF6JMf7XFHAD0MQkc9nyc/ngBt mBhiD2O+z3a8VEn00o/w6SRFkUq8aj3wsy3BuXOhO8j5peKSxKby/Zk+VcIZa4OnJggn CALQ== X-Forwarded-Encrypted: i=1; AFNElJ+Wbw35USja26FNR7QqxJtHYPGY1uWauErjjm09liR0m3J80mSAVlLLY5Ny9Jmy5H9Yqf6E8vS3hs0FPPM=@vger.kernel.org X-Gm-Message-State: AOJu0YxZ0uViE8xWZyRLKs2WcRdBdwU3naKEXiLo/0hr088ktSms1fUn DNFapSkHOjIQ0LoRAMh9dsc6H51xxyU4X406j2SC7GBhqCH2xDrusicp X-Gm-Gg: Acq92OHjXZ9MHRPNaCU5zmrxkeF4WW640YHJGhTxpIlfu2XJHtf+yPoKn+unMKduQBk rKcqXCE05xQMTIOTNmHHylPJKl8RI9ZL9MQ13O2U9XvRMT+Z/6v78NiS9OfJNtpEJ5RCshinNWb 2WmSMpLw/T4t9woS+etuDzd6J4GOlmS0VIwA5/fF20jYx0OzzmiBKJADkGJxV3te7dsqyElC2qi 4NjmIVALiXVtXXxuduOlHskuXwAtx/iEN28XPPV5PgjQ5OQxpV0llyqXX2R/uuk6a0KYNz3x1+P knxzaeu6/AuvX/VcATBd2jC89/lh51/27KMO6GE+p0aq2miR3rcL/nd8IxQ6R+oxAocGeN5Npb9 L0gTMcPJ2X6dkZxfjxZZkBuyvVv8h1btCo6cXjY6FtwUoE1h1Tsn6l8Fh88RIk8xhvqJ9EBZFIL U/Q3lyCBbyKm515rNQBuEC2GI= X-Received: by 2002:a17:907:2665:b0:bd1:d549:decc with SMTP id a640c23a62f3a-bdd23af346bmr1376086666b.20.1779976314604; Thu, 28 May 2026 06:51:54 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bddc65da3bbsm723636566b.52.2026.05.28.06.51.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 06:51:54 -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: Johan Hovold , 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 v2 4/6] mfd: lm3533: Set DMA mask Date: Thu, 28 May 2026 16:51:21 +0300 Message-ID: <20260528135123.103745-5-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528135123.103745-1-clamor95@gmail.com> References: <20260528135123.103745-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 519f8c16a3f3..3cfdebf5fb52 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -526,6 +526,10 @@ static int lm3533_i2c_probe(struct i2c_client *i2c) LM3533_BOOST_FREQ_MAX); lm3533->boost_freq =3D lm3533->boost_freq / (500 * KILO) - 1; =20 + /* LM3533 and child devices do not use DMA */ + 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 Jun 8 15:38:05 2026 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (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 5BE972DAFB0 for ; Thu, 28 May 2026 13:51:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976320; cv=none; b=ta1HDSWft3kCT/CITsYyMfH7vQJW3J3c0tzIxRqP1wquvWMpXmVGY1xwCSW769BLkfQ785l2mtgKYbAsSf9hH0kDaCVPiWNgakNjJKRK0cdSzqUBd3fsh1+tkNUNz9fJKCi5tDcsIeIR41FLPnNKFFXTWk0FHOZKkedQnSyFUFY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976320; c=relaxed/simple; bh=n4yCPkvyfwqM7MzsAswDO+ebUjuf2G8Zgx9N9HA2HFk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q9IYutL+RoxSOwblKm+X8QssA3+QpkOhGqo7RLa2hqFwnBzl72Q5QEemljCgXOwJ2iDmG31Mw2Bcn4xEnjO01gtWMe0wGkHC7orzmB/9oD78avDNQEHfOU2zIfGy2Ruoi+8tLHokhqI7d+LrYVW1DFj8mzZ72lYHL5Rof1YfX2U= 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=q4UmiESg; arc=none smtp.client-ip=209.85.218.51 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="q4UmiESg" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-bdf8add254dso553006966b.1 for ; Thu, 28 May 2026 06:51:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779976317; x=1780581117; 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=dDQ/tiPuyfzwfBV4n9YbMw4Pd30yVycLBAunY89akC8=; b=q4UmiESgp8svPMTZCw8HuaCUQIkERmwTnmGJfziX6gsQq1xa0xo36IS1q87MS/Qn6a z7vkYuuvp1ti+RgxqZaR7vYWQ3FYtzgOp2RXlHdPfSgH6cwxcAdL+RUhpMuszmBjJyRU mAHe/ShSSkDmkXUHyLVm2Uz7PIa6GxxepQFwDC/q+Z+AJt7Rp5kjmia1/sMh/gssrL/v QpBI2A/nIHSRbUanpWLlVtmt1cOXkvlIfF7GOr472KI2ZOVoWFuZ3DsPf2+/0hazT2PL MeX//YMqVOxtmwHyIvkr91Rtv2wrK9tPQm8U9FIGXPo7gVZOZ2LrpehMMoWfkcH0Gz0Z izwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779976317; x=1780581117; 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=dDQ/tiPuyfzwfBV4n9YbMw4Pd30yVycLBAunY89akC8=; b=q9RR1vN/4VX3oPh+BWVpS3XlYj5acktWck5c+YCTHajErTDB9OZ1kSaptBK6xUkNBY ohxtXWF+1xyRoCmx2mmN0wLc+WWC4CMOCNTdoROuzGjREzz2rLkkOQSZ3Kp2Pz/bNYvQ ZQMvKuBPBCOWY7H0MHm+UvLu0ML/ibPW47NxQuiZn6uNPM7JEL5uRVNeL8Y49rtGaYPg LZRxdG4GwQi1KzRz+mJ0dxbxB46DeqA1go/YZYRiHnJb+h9kY66ekbdy6C4C8MGR327I d5QBmxmMxsbMgT3XZQZCzciwpntRGneCD9EqPBRfAC86ZWb+V4Jz4cw4VctIn19SXkIn Mocg== X-Forwarded-Encrypted: i=1; AFNElJ/UftzNJGaSKg5zjN21gIIPkuqyEq+HXt3lUZN3OGSzNc9qhcNj/DdauTBRQWqweOosA3JA3YT/eWTALJI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw00GEsdTGOS7n9Ewx+fMRcfITtRw0m2wTU7pp+pEW8spdSst2Y BjxMrn90BmbHdvhymuFoDxLDlY9eOYlR8rWwgdK1/noArsOxDnUNrRmD X-Gm-Gg: Acq92OGo36OONUEzH8vDcvxQn3TM5iwBd6X0QnnoN3lSGzHO7tHuY3RDQR+DV4vFEH0 e/xJYHjl2Jmq1Xve6L0IolqXLI7VGZulCvLbEYdQjQoV/GXQYllzM4ePmAb+t/T7gGUZgsDiNn6 V0gvmqXC6AojmKjdHgUAnGsfDkeVYXlq8ic4MItv7up2AfgHdiNd4+AofbIyxToi1C8eMOuGZjg APUY5oeKcDnHG/4YeVI7/yImt/o9aPLtu46/I/8hdjUOBMUL/FPiC6BLmkB3XO1mL7ZaDMQQgVa Ya0XCKsdZROZsg3jhYqnlY1sL1V9E9mUxUo8wGVX6PDblt3Ws8GDdFfGj0XW48X5kbGxlpj6umn EAj76/S3r6vnqDglaVtlNotWna8n8Wn+MMHbh9d+xfjsetzVwf+mUUstcOUvX08KagAvlGS+oah vyUrlchuT/7KnIeK5px4e7h9zL1uDX6l4wvw== X-Received: by 2002:a17:906:f049:b0:bdc:8c6b:4842 with SMTP id a640c23a62f3a-bdd25cecf04mr1579914166b.30.1779976316385; Thu, 28 May 2026 06:51:56 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bddc65da3bbsm723636566b.52.2026.05.28.06.51.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 06:51:55 -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: Johan Hovold , 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 v2 5/6] video: backlight: lm3533_bl: Set initial mapping mode from DT Date: Thu, 28 May 2026 16:51:22 +0300 Message-ID: <20260528135123.103745-6-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528135123.103745-1-clamor95@gmail.com> References: <20260528135123.103745-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 | 50 ++++++++++++++++------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index 42da652df58d..c03d0d1667e4 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; @@ -317,14 +318,6 @@ static int lm3533_bl_probe(struct platform_device *pde= v) =20 platform_set_drvdata(pdev, bl); =20 - ret =3D sysfs_create_group(&bd->dev.kobj, &lm3533_bl_attribute_group); - if (ret < 0) { - dev_err(&pdev->dev, "failed to create sysfs attributes\n"); - return ret; - } - - backlight_update_status(bd); - 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, @@ -333,9 +326,20 @@ static int lm3533_bl_probe(struct platform_device *pde= v) 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; + return ret; + + ret =3D sysfs_create_group(&bd->dev.kobj, &lm3533_bl_attribute_group); + if (ret < 0) { + dev_err(&pdev->dev, "failed to create sysfs attributes\n"); + return ret; + } + + backlight_update_status(bd); =20 ret =3D lm3533_ctrlbank_enable(&bl->cb); if (ret) --=20 2.51.0 From nobody Mon Jun 8 15:38:05 2026 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.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 091BE2DCF67 for ; Thu, 28 May 2026 13:51:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976322; cv=none; b=Ivj1GLj1DwRK0+mLUulgI4caN3Lv5jSjXUglZGGQoewtAFnHBrT4x4dIdwFIGKPCNXdJQf+WMhVnK0Aqc9AC1tr1VerduKYJXSLXFX3ZXOV6a4h9LSdaoKWIxtmxyjJQQlQM0Joh1k7iJ/XKH8rjHIqH/Ex/1NL5Omu81KChI1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779976322; c=relaxed/simple; bh=QatHeIZOOO1MdlnFTcSf0Fa5jOzUlZQ5UPjhnZSfOVI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hng6kNXfL8sRtUksqID64+TC+9+EwO8tf9OvQ8r4rB/tEaT8j0AIpwO7K3fAXdwqvjWlWBAo/gAOaRWbPY8GBIsR6zoaj+khsRmHCndaf4D2IsM7weD099JhIGlZ4pL2azFEI4zFKkoFAZc5T587jSiZk1DOpYF/jjterVwfZ7s= 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=YTEZwRiQ; arc=none smtp.client-ip=209.85.218.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="YTEZwRiQ" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-bd8d0e4e341so1843385066b.0 for ; Thu, 28 May 2026 06:51:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779976318; x=1780581118; 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=/VF1wrmilBUlbim8sdlHkjNWy4s/JRLxuueYjCB0tac=; b=YTEZwRiQSM9RP0l8GbmMpvJHYJfGRPiE/uk9AxfaotULej8GbWy2mUZdQqbKiHQPUj L5tQXpsJ4VRfmAASbW8CMZsDV9qXknAFnTZlNXzp930ebb/oWrU4BDDzcs9Ewwugm6Fp QYtaARp3BcqRafSK3X9HNJwS5IZu/WkHxCuRSg3u6NnQPL5gMSjue1zhZn21Ge1Sosef pHnSvm9DX0oZjMnRN0YX+BRPcipEIH9W8dNZAviakS4PEnmuXd//Gt6R2Uc8VSthOU/X FqvwwQNVc/sDvhcDfhD4yO6gpGmI62BrBVmK5XUQrg5Y+Iv38viIoGhUbNLE360FTTnz c0tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779976318; x=1780581118; 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=/VF1wrmilBUlbim8sdlHkjNWy4s/JRLxuueYjCB0tac=; b=kdoeZrMShHHXaX677QBuouc6i7oKybgrAju+9QT1pIeeYjyoHZ7Boez/+wOU/Rx+Au pdGBb61IlIYaB/wr1WQonujDH3Z1v/DavGqOqF1+c3GXJHbkZ0I/xj6jKOdG+AMZDIc9 AOApGTyPP9YfIEZBJIOJ9MrrR+X7EOVFVWSK+k57jvgGllKCogyqBFvydjlbld4OmC8f nle2b5Wu3yhNyQjAmAaPsX/W2KAazfi19ckkB5yzLgPfYuXaJRdlohneqtJqY3PY3FTl dQODT/Eac0/pbweWwUjB82U0/oZB5+JfyCLO1Ydk/FCuaZRRM//115XgMektSx38SYoV 9gtA== X-Forwarded-Encrypted: i=1; AFNElJ+3meMfbci8IBf73xdHlSmpK3MsznhA98TanTrbU7FUJpFaXynFDuV9bBNkPDuTunu3zBLTKPG0Zcw4bDw=@vger.kernel.org X-Gm-Message-State: AOJu0YxNCv61aeTUkkqn6mtjtflbB4UMN0G8Q+h59Cg1cMNZxHESfIZm nZ2ripXVqFBtzLezT5F7yi22k4M+USrtgrQ61miFai/lSOwx/Al/gaur X-Gm-Gg: Acq92OF34AKPSSCTzZzXrRt5bQ6TVpkExJ+BP5vCQ1vuEINcfZjDNicfU8ztQ9FymhJ 8tlkOX2Bc+j8WMP3mcugYCR7tYnWkRJ6LMKkEK4vS5FexF/81jk0HqLPO+u+lPPl8JuKBYIs5P3 2WS1vyAElwfTVsGlJ1gyT6vm9oL+AD+5BkpIrQ60sl6c36l0RvQBJtuyP7JwP4wRrujP0Eklnc1 MyhKTThLb/+kLAEe2kvyKnQB6hjwVZfRQma2liDg3Eri2Ak1rJ8gLgoUuhkkEaS59cKBV6ZssfG V0X/lDa/MzSkDOI/e4QL2LP6HLFu/rC9oqiw/QIeCV0bupdFqR5XLaRAZGk0w3jN8pExsGt2Ytd JmvxAdi7dXYIwWxGmJ5npueGtwf+ncflEkfC/tRKA4wNbRAAd5BgfWbwve4FuXI4gA+a3uQTfOp Owt1kyVib+VP3lidRay03vUk8= X-Received: by 2002:a17:907:d10:b0:bd1:4da0:b0d5 with SMTP id a640c23a62f3a-bdd2360369fmr1692341766b.17.1779976318068; Thu, 28 May 2026 06:51:58 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bddc65da3bbsm723636566b.52.2026.05.28.06.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 06:51:57 -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: Johan Hovold , 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 v2 6/6] video: leds: backlight: lm3533: Support getting LED sources from DT Date: Thu, 28 May 2026 16:51:23 +0300 Message-ID: <20260528135123.103745-7-clamor95@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528135123.103745-1-clamor95@gmail.com> References: <20260528135123.103745-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 | 37 ++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c index d707d43d5526..07390bba9a48 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 @@ -53,6 +60,9 @@ struct lm3533_led { =20 u32 max_current; u32 pwm; + + int num_leds; + u32 leds[LM3533_LVCTRLBANK_MAX]; }; =20 =20 @@ -639,7 +649,33 @@ 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++) { + if (led->leds[i] > LM3533_LVCTRLBANK_MAX) + continue; + + 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_CONF2, + 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) @@ -714,6 +750,23 @@ 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 > 0 && led->num_leds <=3D LM3533_LVCTRLBANK_MAX) { + 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; + } + } else { + led->num_leds =3D 0; + } + 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 c03d0d1667e4..82b46a531dd2 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,6 +22,8 @@ #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 @@ -34,6 +37,9 @@ struct lm3533_bl { u32 max_current; u32 pwm; bool linear; + + u32 num_leds; + u32 led_strings[LM3533_HVCTRLBANK_COUNT]; }; =20 =20 @@ -248,7 +254,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 +263,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; @@ -329,6 +346,24 @@ 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 > 0 && bl->num_leds <=3D LM3533_HVCTRLBANK_COUNT) { + 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; + } + } else { + bl->num_leds =3D 0; + } + ret =3D lm3533_bl_setup(bl); if (ret) return ret; --=20 2.51.0