From nobody Thu Jun 18 22:06: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 3709E3CC7EC for ; Wed, 17 Jun 2026 08:00:44 +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=1781683251; cv=none; b=GPvq6lASSWKiLUcv3URJuwjOMMui0k1meVmYQmSGqdYAPLCVDzFJIWz2KcClSJ33ARPn52IYC4EgGagk4LC2TXnh4x1RtoSxsvZM9qiDiQXiQP48hSD5/ANc8dBEUeYOsYgZ3Li2EI4/Kykc8rl8iYVoZ8aoqWeZ/pp2jopHRKU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683251; c=relaxed/simple; bh=+FVn7I0SU+WvGF4zaZR2cSNhgCh5jRVwEclr5YXwXx0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kXe8HA7idv0SbAXa1cwCo08IZS9fi9XLUgwP/IHwuAe0kgAmBAMEYBh3ZhzU4qWEZP/fA5/5EM+tQn+UDWKJutceX0/Alb0/HlMSMyv+T+x2pNwLrIUE3ME/PPi5UcxnQfptEzTQFIP5Hu3sWLngtxtOvRJ3wj/MFoIpFNi2Uc8= 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=S2BCbfzs; 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="S2BCbfzs" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-bec4639953dso931161166b.1 for ; Wed, 17 Jun 2026 01:00:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683243; x=1782288043; 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=ii8B/Bl1uGr/K9YKOBOD4s3MlpIX4b4/6A+c69jOwh0=; b=S2BCbfzsnmbtPYcJh6ANAIRirdJLnTk3uxafgjhpXm1L3DJje8AHTHqP75lWu+01mj er46X3ScZi3EwZRnqB0rtug0SWmbcy6lIOtCu8F84z7egVtiSmYWmH9OLvJlCSQI6lWu 0qoCfa+1crJf9MAL77eqqMCgarERvEYdWQpryxa9wRdyvxE6joW+0BR6DoMlP6cFTYHc q2MXzQeRqFNa7/JEAIBB15NBm0OZAk+gGZ/sGAT8NWbyOurEE+sO6E4OGFM73Lh9q3di tNqOHDAVTmcVCHnmIxNZ2hkQ25vxiR29wful4AWLPW5rhmnXGIth9+WScEH+HqR7Ekgu fWVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683243; x=1782288043; 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=ii8B/Bl1uGr/K9YKOBOD4s3MlpIX4b4/6A+c69jOwh0=; b=DA8MWMW1Pb/YzH5n6xd+ew7jg0B9cqUWtmKGuJKVYs0voA7WCXSM3ga/7+qjAU9POu ItLuj6jL2ywFPyPB136Oy68BGTJRaD+c8j17qEipwbvc9LL+WqOKAqmSECBcR3kWaOUP WSc/7CGyw29T37WyINQEvttQ8ZutPcA23S5XPoTDUNhcGY8YDXKR0CVUX7/oritI8Fgm BQJZNJJ7LQOvJXNJEk5sBDpFEhm77t1KuvAAqLBxjowIeMWw/QrLX245NGkHD8LkH/l1 MtXpJECLjWHoUEp7s3PlmgRazPTXJD4KghqlyaPubAbqxzhftCMFqipoh3cqM94/U6md ZYww== X-Forwarded-Encrypted: i=1; AFNElJ9qVhjcuiHxl7XL8A+1prOC9usa6lLItB6LGRmD2lr+HNlYTnxNG9hRQAn16N7XvSurbu8g1WzAM3ckAgw=@vger.kernel.org X-Gm-Message-State: AOJu0YxMgFHYb3+RB9AA4j2+PJPC3ZK7J4ccDeUIyY40zX33JuLQlATY wpQMmt5ytxjID3PvuWfCxtSQnNEMPfvmfGdYH027hlkn1PWvPVecFCc2 X-Gm-Gg: Acq92OH3L/2STFPaWrW9/xhMKNFtorJ0fz7lIel9cDFvs0963qco0J04dASx/Ga7g5H pFp34iMqKBE5PKWnpdr00+5G9cbaU8vd3yhS+Gq0mCbLk9FqxW+EGXA29AkIdJ8OlYjXC1FRIym VvSICzI6SFtytN/J15RMDmOlI6ejwGC83Ytwka5AIckfhv/7CBox3CLvxiTKTgPff0E2HeFlq/g K87G2lZueSayA/iihP9VYyXB6BnpDjpyUFzLFOATeIOwKcMjbiWLXs0/6radpsoZDwwHTybd/4U 23u76T6Z9oyrj/xT6YxJXkkwGr24lsgMBDivsVWZvoV37nf9520M9DUwAF0m7P4UkM8dzggwHsD mv0ZSO3wG4zySovg0s3+1Gp2k9bSvOqjFFQN4OCFqkGv2daF1gb7DTnj4WBbPOfRET8dIem95rk M+hw== X-Received: by 2002:a17:907:3d51:b0:bdd:f2c9:80cc with SMTP id a640c23a62f3a-c05a56ffe3cmr186749566b.21.1781683242709; Wed, 17 Jun 2026 01:00:42 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:42 -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 v5 01/14] dt-bindings: leds: Document TI LM3533 LED controller Date: Wed, 17 Jun 2026 11:00:18 +0300 Message-ID: <20260617080031.99156-2-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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 Reviewed-by: Daniel Thompson (RISCstar) #for backlight Reviewed-by: Rob Herring (Arm) --- .../leds/backlight/ti,lm3533-backlight.yaml | 69 +++++++ .../bindings/leds/ti,lm3533-leds.yaml | 67 +++++++ .../devicetree/bindings/leds/ti,lm3533.yaml | 169 ++++++++++++++++++ 3 files changed, 305 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..a25846e9b375 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/backlight/ti,lm3533-backlight.= yaml @@ -0,0 +1,69 @@ +# 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 + default: 0 + + 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..d8dbefef3323 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/ti,lm3533-leds.yaml @@ -0,0 +1,67 @@ +# 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 + default: 0 + +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..bdc05a9f3d66 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/ti,lm3533.yaml @@ -0,0 +1,169 @@ +# 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-ohms: + description: + Internal configuration resistor 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-ohms property is ignored. + + required: + - compatible + + oneOf: + - required: + - ti,resistor-ohms + - 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.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 02CED3CD8B8 for ; Wed, 17 Jun 2026 08:00:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683256; cv=none; b=JG2nyaIwiHDrdlcCUD4af1f2QLv6PXkva5VzEdxEq3HAkHehcjbjrhD4ZaVAlxRvoTXme9IGzFcYzjNG+zE/G2pI/a6LHATU02trmwDdjqkL0lAQybZpK6WkhbrE/qF6j3LgV87WcwmcFC0lnxRd9JGr7+te26evaK3Y3c2yn3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683256; c=relaxed/simple; bh=3dlQhaWU0+ogJBEibj3wdPsu8COUPJ1d76Wgses9H4E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SryLkI9B3R4BvnyKWAbRg3F1103ngSSmkMb+34OrreUFI7gwRkHkXNOn29BSnj2GGfhL8HJcbf0a1xNcckVpHjF+ntIYMP/XfsuclAf2woV9YuTPpIh930sOa3Yr5hImJspP3Ij5fFBNliY/qbREzRV/ONp4IDU4zhFWbg5FECA= 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=b8FPnvrW; arc=none smtp.client-ip=209.85.208.42 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="b8FPnvrW" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-68acf0a15b3so8421348a12.1 for ; Wed, 17 Jun 2026 01:00:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683246; x=1782288046; 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=EpZj/sEudEK/8tF0s/E84EALNxqhyZDun9iGVWF6/AI=; b=b8FPnvrWJA5ufxM3QxD5VHTOkSBewp6uJCB+A7qCzyYxK54LSEME9FnD23MgQxBsgZ IKB1s8QaAJnoxGJ8pQheUAGokF8boL3njDWkEjlcl142g+TDdV0l/nOFPlfe7kFLcQaC NzJxDXmSTSy9xTB/9PUh3k8ENT9U8+ahh1SG5DS12SaQa2qfMKuJvXHYkERmLTeIMfw6 CJ0oyS5qmLLojo9hTKnkJ0hMtCJKBT+HW63mQg9auz9rcfcsb8keyiYVi+lthG7zT7xh aN9QWB1qmn/9WQnjewfkPe/HuL3whYWm6O9O19zIkRjoQIEfkIx6359j5VigepVcGE/9 Bnlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683246; x=1782288046; 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=EpZj/sEudEK/8tF0s/E84EALNxqhyZDun9iGVWF6/AI=; b=SFgQiNET+Fx915GVTmDiG7tvwjit9OjWH8GxPmXMKz4YbdVOfUzYyuaJkHCiHpu/lW xWlnhOgZe7OWKVBajRWJmHSCyxx8b6JGUGWVbL65Ct+laFxlgHI48UbvSrmrjaq2s6sV /i+b9uGRdl6ISQIDDucJn9Bh7Luuwi40iMVh/TEb2dV3yk8Vzuiwf5hL84kg4YyHLYiP ZvJO6cd2d+5FE+5mGDiHZ7tw/QYuBkwXUX7qgLE4CIRTf8CZ3Wl7bmMQcVwN9E/4dTT9 T+27MkNTzfZb8Hiuf0PZRRs42fnJYvSmmGbJH595LwROefaqfLjBvXqFk2uxSILEriVY +EcA== X-Forwarded-Encrypted: i=1; AFNElJ/CI0iAn2hExe/Dr3JZ52w9Brm8OG3yW0k2ioWFJrZTJgzgamWOnISFwvrNho2mbv/XvEvlKJrw89IBnxk=@vger.kernel.org X-Gm-Message-State: AOJu0Yyh6NLiFKyCTNU56F405tgz+oiNxjfHc/kY5WcysV4QCg7BVcYH I4VN6oApUEFXeXM41JWMzJJvzcNKlR67jNcWBUzr+jP3+qcAsQnHc4Jj X-Gm-Gg: Acq92OGIE9OpCzAxZ71avKdxCXT/E90Q7mYl4RYDBxirquFXG6jh+VO3XDDrj2+Af6M h68eldg86183f9Z+sQb0awm4Etk2ie5XVAjqtZkiIfJYnzo7wL3JNCcUNA/0DXfs6X12Gs33naS 0lc+Lbww5GQjvVHLgIRmQuamKtq4tVa8krk6VTCg9szf5NeLfLiQJ1scK7uq3PNY7zyDDBNKytf waFmh3jEz1FR+EqUK7+WH0MRSvFfZWg1NOU4UI9YUm3WEHhfecn+02D/bciIGpLbrlsX5q4xTvP o3q2PAze5uCOMqYW34sPeCVHhdIzg/uU6eYTDfmQGPrkXzGCQuz3xu2Eg8dNokvwv0qlNy3V9o5 dLMQYrpWcqKMeJQfRSvJuoySP5ZqdH0uTV27lRwiNgQjkx7sgUXo7A9cUo+d35nF4EzERdEsd+d +nLA== X-Received: by 2002:a17:907:1dd5:b0:bed:9a7:5ed1 with SMTP id a640c23a62f3a-c05a4916759mr118708566b.5.1781683244906; Wed, 17 Jun 2026 01:00:44 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:44 -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 v5 02/14] mfd: lm3533: Remove driver specific regmap wrappers Date: Wed, 17 Jun 2026 11:00:19 +0300 Message-ID: <20260617080031.99156-3-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" Remove driver-specific regmap wrappers in favor of using regmap helpers directly. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Andy Shevchenko --- drivers/iio/light/lm3533-als.c | 79 +++++++++++++---------------- drivers/leds/leds-lm3533.c | 62 ++++++++-------------- drivers/mfd/lm3533-core.c | 73 ++++---------------------- drivers/mfd/lm3533-ctrlbank.c | 28 +++++----- drivers/video/backlight/lm3533_bl.c | 37 +++++--------- include/linux/mfd/lm3533.h | 15 ++---- 6 files changed, 100 insertions(+), 194 deletions(-) diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c index 99f0b903018c..44b104c2d77f 100644 --- a/drivers/iio/light/lm3533-als.c +++ b/drivers/iio/light/lm3533-als.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include =20 @@ -64,7 +65,7 @@ static int lm3533_als_get_adc(struct iio_dev *indio_dev, = bool average, { struct lm3533_als *als =3D iio_priv(indio_dev); u8 reg; - u8 val; + u32 val; int ret; =20 if (average) @@ -72,7 +73,7 @@ static int lm3533_als_get_adc(struct iio_dev *indio_dev, = bool average, else reg =3D LM3533_REG_ALS_READ_ADC_RAW; =20 - ret =3D lm3533_read(als->lm3533, reg, &val); + ret =3D regmap_read(als->lm3533->regmap, reg, &val); if (ret) { dev_err(&indio_dev->dev, "failed to read adc\n"); return ret; @@ -86,10 +87,10 @@ static int lm3533_als_get_adc(struct iio_dev *indio_dev= , bool average, static int _lm3533_als_get_zone(struct iio_dev *indio_dev, u8 *zone) { struct lm3533_als *als =3D iio_priv(indio_dev); - u8 val; + u32 val; int ret; =20 - ret =3D lm3533_read(als->lm3533, LM3533_REG_ALS_ZONE_INFO, &val); + ret =3D regmap_read(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, &val); if (ret) { dev_err(&indio_dev->dev, "failed to read zone\n"); return ret; @@ -127,7 +128,7 @@ static inline u8 lm3533_als_get_target_reg(unsigned cha= nnel, unsigned zone) } =20 static int lm3533_als_get_target(struct iio_dev *indio_dev, unsigned chann= el, - unsigned zone, u8 *val) + unsigned zone, u32 *val) { struct lm3533_als *als =3D iio_priv(indio_dev); u8 reg; @@ -140,7 +141,7 @@ static int lm3533_als_get_target(struct iio_dev *indio_= dev, unsigned channel, return -EINVAL; =20 reg =3D lm3533_als_get_target_reg(channel, zone); - ret =3D lm3533_read(als->lm3533, reg, val); + ret =3D regmap_read(als->lm3533->regmap, reg, val); if (ret) dev_err(&indio_dev->dev, "failed to get target current\n"); =20 @@ -161,7 +162,7 @@ static int lm3533_als_set_target(struct iio_dev *indio_= dev, unsigned channel, return -EINVAL; =20 reg =3D lm3533_als_get_target_reg(channel, zone); - ret =3D lm3533_write(als->lm3533, reg, val); + ret =3D regmap_write(als->lm3533->regmap, reg, val); if (ret) dev_err(&indio_dev->dev, "failed to set target current\n"); =20 @@ -171,8 +172,8 @@ static int lm3533_als_set_target(struct iio_dev *indio_= dev, unsigned channel, static int lm3533_als_get_current(struct iio_dev *indio_dev, unsigned chan= nel, int *val) { + u32 target; u8 zone; - u8 target; int ret; =20 ret =3D lm3533_als_get_zone(indio_dev, &zone); @@ -271,16 +272,10 @@ static irqreturn_t lm3533_als_isr(int irq, void *dev_= id) static int lm3533_als_set_int_mode(struct iio_dev *indio_dev, int enable) { struct lm3533_als *als =3D iio_priv(indio_dev); - u8 mask =3D LM3533_ALS_INT_ENABLE_MASK; - u8 val; int ret; =20 - if (enable) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(als->lm3533, LM3533_REG_ALS_ZONE_INFO, val, mask); + ret =3D regmap_assign_bits(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, + LM3533_ALS_INT_ENABLE_MASK, enable); if (ret) { dev_err(&indio_dev->dev, "failed to set int mode %d\n", enable); @@ -293,17 +288,16 @@ static int lm3533_als_set_int_mode(struct iio_dev *in= dio_dev, int enable) static int lm3533_als_get_int_mode(struct iio_dev *indio_dev, int *enable) { struct lm3533_als *als =3D iio_priv(indio_dev); - u8 mask =3D LM3533_ALS_INT_ENABLE_MASK; - u8 val; int ret; =20 - ret =3D lm3533_read(als->lm3533, LM3533_REG_ALS_ZONE_INFO, &val); - if (ret) { + ret =3D regmap_test_bits(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, + LM3533_ALS_INT_ENABLE_MASK); + if (ret < 0) { dev_err(&indio_dev->dev, "failed to get int mode\n"); return ret; } =20 - *enable =3D !!(val & mask); + *enable =3D ret; =20 return 0; } @@ -316,7 +310,7 @@ static inline u8 lm3533_als_get_threshold_reg(unsigned = nr, bool raising) } =20 static int lm3533_als_get_threshold(struct iio_dev *indio_dev, unsigned nr, - bool raising, u8 *val) + bool raising, u32 *val) { struct lm3533_als *als =3D iio_priv(indio_dev); u8 reg; @@ -326,7 +320,7 @@ static int lm3533_als_get_threshold(struct iio_dev *ind= io_dev, unsigned nr, return -EINVAL; =20 reg =3D lm3533_als_get_threshold_reg(nr, raising); - ret =3D lm3533_read(als->lm3533, reg, val); + ret =3D regmap_read(als->lm3533->regmap, reg, val); if (ret) dev_err(&indio_dev->dev, "failed to get threshold\n"); =20 @@ -337,8 +331,8 @@ static int lm3533_als_set_threshold(struct iio_dev *ind= io_dev, unsigned nr, bool raising, u8 val) { struct lm3533_als *als =3D iio_priv(indio_dev); - u8 val2; u8 reg, reg2; + u32 val2; int ret; =20 if (nr > LM3533_ALS_THRESH_MAX) @@ -348,7 +342,7 @@ static int lm3533_als_set_threshold(struct iio_dev *ind= io_dev, unsigned nr, reg2 =3D lm3533_als_get_threshold_reg(nr, !raising); =20 mutex_lock(&als->thresh_mutex); - ret =3D lm3533_read(als->lm3533, reg2, &val2); + ret =3D regmap_read(als->lm3533->regmap, reg2, &val2); if (ret) { dev_err(&indio_dev->dev, "failed to get threshold\n"); goto out; @@ -363,7 +357,7 @@ static int lm3533_als_set_threshold(struct iio_dev *ind= io_dev, unsigned nr, goto out; } =20 - ret =3D lm3533_write(als->lm3533, reg, val); + ret =3D regmap_write(als->lm3533->regmap, reg, val); if (ret) { dev_err(&indio_dev->dev, "failed to set threshold\n"); goto out; @@ -375,11 +369,11 @@ static int lm3533_als_set_threshold(struct iio_dev *i= ndio_dev, unsigned nr, } =20 static int lm3533_als_get_hysteresis(struct iio_dev *indio_dev, unsigned n= r, - u8 *val) + u32 *val) { struct lm3533_als *als =3D iio_priv(indio_dev); - u8 falling; - u8 raising; + u32 falling; + u32 raising; int ret; =20 if (nr > LM3533_ALS_THRESH_MAX) @@ -503,7 +497,7 @@ static ssize_t show_als_attr(struct device *dev, { struct iio_dev *indio_dev =3D dev_to_iio_dev(dev); struct lm3533_als_attribute *als_attr =3D to_lm3533_als_attr(attr); - u8 val; + u32 val; int ret; =20 switch (als_attr->type) { @@ -716,16 +710,10 @@ static const struct attribute_group lm3533_als_attrib= ute_group =3D { =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; =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); + ret =3D regmap_assign_bits(als->lm3533->regmap, LM3533_REG_ALS_CONF, + LM3533_ALS_INPUT_MODE_MASK, pwm_mode); if (ret) { dev_err(&als->pdev->dev, "failed to set input mode %d\n", pwm_mode); @@ -744,7 +732,8 @@ static int lm3533_als_set_resistor(struct lm3533_als *a= ls, u8 val) return -EINVAL; } =20 - ret =3D lm3533_write(als->lm3533, LM3533_REG_ALS_RESISTOR_SELECT, val); + ret =3D regmap_write(als->lm3533->regmap, LM3533_REG_ALS_RESISTOR_SELECT, + val); if (ret) { dev_err(&als->pdev->dev, "failed to set resistor\n"); return ret; @@ -774,11 +763,11 @@ static int lm3533_als_setup(struct lm3533_als *als, =20 static int lm3533_als_setup_irq(struct lm3533_als *als, void *dev) { - u8 mask =3D LM3533_ALS_INT_ENABLE_MASK; int ret; =20 /* Make sure interrupts are disabled. */ - ret =3D lm3533_update(als->lm3533, LM3533_REG_ALS_ZONE_INFO, 0, mask); + ret =3D regmap_clear_bits(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, + LM3533_ALS_INT_ENABLE_MASK); if (ret) { dev_err(&als->pdev->dev, "failed to disable interrupts\n"); return ret; @@ -798,10 +787,10 @@ static int lm3533_als_setup_irq(struct lm3533_als *al= s, void *dev) =20 static int lm3533_als_enable(struct lm3533_als *als) { - u8 mask =3D LM3533_ALS_ENABLE_MASK; int ret; =20 - ret =3D lm3533_update(als->lm3533, LM3533_REG_ALS_CONF, mask, mask); + ret =3D regmap_set_bits(als->lm3533->regmap, LM3533_REG_ALS_CONF, + LM3533_ALS_ENABLE_MASK); if (ret) dev_err(&als->pdev->dev, "failed to enable ALS\n"); =20 @@ -810,10 +799,10 @@ static int lm3533_als_enable(struct lm3533_als *als) =20 static int lm3533_als_disable(struct lm3533_als *als) { - u8 mask =3D LM3533_ALS_ENABLE_MASK; int ret; =20 - ret =3D lm3533_update(als->lm3533, LM3533_REG_ALS_CONF, 0, mask); + ret =3D regmap_clear_bits(als->lm3533->regmap, LM3533_REG_ALS_CONF, + LM3533_ALS_ENABLE_MASK); if (ret) dev_err(&als->pdev->dev, "failed to disable ALS\n"); =20 diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c index 45795f2a1042..335c758071f3 100644 --- a/drivers/leds/leds-lm3533.c +++ b/drivers/leds/leds-lm3533.c @@ -12,6 +12,7 @@ #include #include #include +#include #include =20 #include @@ -80,7 +81,6 @@ static inline u8 lm3533_led_get_pattern_reg(struct lm3533= _led *led, static int lm3533_led_pattern_enable(struct lm3533_led *led, int enable) { u8 mask; - u8 val; int pattern; int state; int ret =3D 0; @@ -96,12 +96,8 @@ static int lm3533_led_pattern_enable(struct lm3533_led *= led, int enable) pattern =3D lm3533_led_get_pattern(led); mask =3D 1 << (2 * pattern); =20 - if (enable) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(led->lm3533, LM3533_REG_PATTERN_ENABLE, val, mask); + ret =3D regmap_assign_bits(led->lm3533->regmap, + LM3533_REG_PATTERN_ENABLE, mask, enable); if (ret) { dev_err(led->cdev.dev, "failed to enable pattern %d (%d)\n", pattern, enable); @@ -131,7 +127,7 @@ static int lm3533_led_set(struct led_classdev *cdev, static enum led_brightness lm3533_led_get(struct led_classdev *cdev) { struct lm3533_led *led =3D to_lm3533_led(cdev); - u8 val; + u32 val; int ret; =20 ret =3D lm3533_ctrlbank_get_brightness(&led->cb, &val); @@ -259,7 +255,7 @@ static u8 lm3533_led_delay_set(struct lm3533_led *led, = u8 base, dev_dbg(led->cdev.dev, "%s - %lu: %u (0x%02x)\n", __func__, *delay, t, val); reg =3D lm3533_led_get_pattern_reg(led, base); - ret =3D lm3533_write(led->lm3533, reg, val); + ret =3D regmap_write(led->lm3533->regmap, reg, val); if (ret) dev_err(led->cdev.dev, "failed to set delay (%02x)\n", reg); =20 @@ -337,10 +333,10 @@ static ssize_t show_risefalltime(struct device *dev, struct lm3533_led *led =3D to_lm3533_led(led_cdev); ssize_t ret; u8 reg; - u8 val; + u32 val; =20 reg =3D lm3533_led_get_pattern_reg(led, base); - ret =3D lm3533_read(led->lm3533, reg, &val); + ret =3D regmap_read(led->lm3533->regmap, reg, &val); if (ret) return ret; =20 @@ -375,7 +371,7 @@ static ssize_t store_risefalltime(struct device *dev, return -EINVAL; =20 reg =3D lm3533_led_get_pattern_reg(led, base); - ret =3D lm3533_write(led->lm3533, reg, val); + ret =3D regmap_write(led->lm3533->regmap, reg, val); if (ret) return ret; =20 @@ -405,11 +401,11 @@ static ssize_t show_als_channel(struct device *dev, struct lm3533_led *led =3D to_lm3533_led(led_cdev); unsigned channel; u8 reg; - u8 val; + u32 val; int ret; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - ret =3D lm3533_read(led->lm3533, reg, &val); + ret =3D regmap_read(led->lm3533->regmap, reg, &val); if (ret) return ret; =20 @@ -441,7 +437,7 @@ static ssize_t store_als_channel(struct device *dev, mask =3D LM3533_REG_CTRLBANK_BCONF_ALS_CHANNEL_MASK; val =3D channel - 1; =20 - ret =3D lm3533_update(led->lm3533, reg, val, mask); + ret =3D regmap_update_bits(led->lm3533->regmap, reg, mask, val); if (ret) return ret; =20 @@ -455,11 +451,11 @@ static ssize_t show_als_en(struct device *dev, struct lm3533_led *led =3D to_lm3533_led(led_cdev); bool enable; u8 reg; - u8 val; + u32 val; int ret; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - ret =3D lm3533_read(led->lm3533, reg, &val); + ret =3D regmap_read(led->lm3533->regmap, reg, &val); if (ret) return ret; =20 @@ -476,22 +472,15 @@ static ssize_t store_als_en(struct device *dev, struct lm3533_led *led =3D to_lm3533_led(led_cdev); unsigned enable; u8 reg; - u8 mask; - u8 val; int ret; =20 if (kstrtouint(buf, 0, &enable)) return -EINVAL; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - mask =3D LM3533_REG_CTRLBANK_BCONF_ALS_EN_MASK; =20 - if (enable) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(led->lm3533, reg, val, mask); + ret =3D regmap_assign_bits(led->lm3533->regmap, reg, + LM3533_REG_CTRLBANK_BCONF_ALS_EN_MASK, enable); if (ret) return ret; =20 @@ -504,12 +493,12 @@ static ssize_t show_linear(struct device *dev, struct led_classdev *led_cdev =3D dev_get_drvdata(dev); struct lm3533_led *led =3D to_lm3533_led(led_cdev); u8 reg; - u8 val; + u32 val; int linear; int ret; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - ret =3D lm3533_read(led->lm3533, reg, &val); + ret =3D regmap_read(led->lm3533->regmap, reg, &val); if (ret) return ret; =20 @@ -529,22 +518,15 @@ static ssize_t store_linear(struct device *dev, struct lm3533_led *led =3D to_lm3533_led(led_cdev); unsigned long linear; u8 reg; - u8 mask; - u8 val; int ret; =20 if (kstrtoul(buf, 0, &linear)) return -EINVAL; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - mask =3D LM3533_REG_CTRLBANK_BCONF_MAPPING_MASK; =20 - if (linear) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(led->lm3533, reg, val, mask); + ret =3D regmap_assign_bits(led->lm3533->regmap, reg, + LM3533_REG_CTRLBANK_BCONF_MAPPING_MASK, linear); if (ret) return ret; =20 @@ -557,7 +539,7 @@ static ssize_t show_pwm(struct device *dev, { struct led_classdev *led_cdev =3D dev_get_drvdata(dev); struct lm3533_led *led =3D to_lm3533_led(led_cdev); - u8 val; + u32 val; int ret; =20 ret =3D lm3533_ctrlbank_get_pwm(&led->cb, &val); @@ -573,10 +555,10 @@ static ssize_t store_pwm(struct device *dev, { struct led_classdev *led_cdev =3D dev_get_drvdata(dev); struct lm3533_led *led =3D to_lm3533_led(led_cdev); - u8 val; + u32 val; int ret; =20 - if (kstrtou8(buf, 0, &val)) + if (kstrtou32(buf, 0, &val)) return -EINVAL; =20 ret =3D lm3533_ctrlbank_set_pwm(&led->cb, val); diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index 0a2409d00b2e..f9bdc0a1d9be 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -80,66 +80,14 @@ static struct mfd_cell lm3533_led_devs[] =3D { }, }; =20 -int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val) -{ - int tmp; - int ret; - - ret =3D regmap_read(lm3533->regmap, reg, &tmp); - if (ret < 0) { - dev_err(lm3533->dev, "failed to read register %02x: %d\n", - reg, ret); - return ret; - } - - *val =3D tmp; - - dev_dbg(lm3533->dev, "read [%02x]: %02x\n", reg, *val); - - return ret; -} -EXPORT_SYMBOL_GPL(lm3533_read); - -int lm3533_write(struct lm3533 *lm3533, u8 reg, u8 val) -{ - int ret; - - dev_dbg(lm3533->dev, "write [%02x]: %02x\n", reg, val); - - ret =3D regmap_write(lm3533->regmap, reg, val); - if (ret < 0) { - dev_err(lm3533->dev, "failed to write register %02x: %d\n", - reg, ret); - } - - return ret; -} -EXPORT_SYMBOL_GPL(lm3533_write); - -int lm3533_update(struct lm3533 *lm3533, u8 reg, u8 val, u8 mask) -{ - int ret; - - dev_dbg(lm3533->dev, "update [%02x]: %02x/%02x\n", reg, val, mask); - - ret =3D regmap_update_bits(lm3533->regmap, reg, mask, val); - if (ret < 0) { - dev_err(lm3533->dev, "failed to update register %02x: %d\n", - reg, ret); - } - - return ret; -} -EXPORT_SYMBOL_GPL(lm3533_update); - static int lm3533_set_boost_freq(struct lm3533 *lm3533, enum lm3533_boost_freq freq) { int ret; =20 - ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, - freq << LM3533_BOOST_FREQ_SHIFT, - LM3533_BOOST_FREQ_MASK); + ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, + LM3533_BOOST_FREQ_MASK, + freq << LM3533_BOOST_FREQ_SHIFT); if (ret) dev_err(lm3533->dev, "failed to set boost frequency\n"); =20 @@ -152,9 +100,9 @@ static int lm3533_set_boost_ovp(struct lm3533 *lm3533, { int ret; =20 - ret =3D lm3533_update(lm3533, LM3533_REG_BOOST_PWM, - ovp << LM3533_BOOST_OVP_SHIFT, - LM3533_BOOST_OVP_MASK); + ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, + LM3533_BOOST_OVP_MASK, + ovp << LM3533_BOOST_OVP_SHIFT); if (ret) dev_err(lm3533->dev, "failed to set boost ovp\n"); =20 @@ -181,7 +129,8 @@ static int lm3533_set_hvled_config(struct lm3533 *lm353= 3, u8 hvled, u8 bl) mask =3D LM3533_BL_ID_MASK << shift; val =3D bl << shift; =20 - ret =3D lm3533_update(lm3533, LM3533_REG_OUTPUT_CONF1, val, mask); + ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_OUTPUT_CONF1, + mask, val); if (ret) dev_err(lm3533->dev, "failed to set hvled config\n"); =20 @@ -216,7 +165,7 @@ static int lm3533_set_lvled_config(struct lm3533 *lm353= 3, u8 lvled, u8 led) mask =3D LM3533_LED_ID_MASK << shift; val =3D led << shift; =20 - ret =3D lm3533_update(lm3533, reg, val, mask); + ret =3D regmap_update_bits(lm3533->regmap, reg, mask, val); if (ret) dev_err(lm3533->dev, "failed to set lvled config\n"); =20 @@ -258,7 +207,7 @@ static ssize_t show_output(struct device *dev, struct lm3533_device_attribute *lattr =3D to_lm3533_dev_attr(attr); int id =3D lattr->u.output.id; u8 reg; - u8 val; + u32 val; u8 mask; int shift; int ret; @@ -278,7 +227,7 @@ static ssize_t show_output(struct device *dev, mask =3D LM3533_LED_ID_MASK << shift; } =20 - ret =3D lm3533_read(lm3533, reg, &val); + ret =3D regmap_read(lm3533->regmap, reg, &val); if (ret) return ret; =20 diff --git a/drivers/mfd/lm3533-ctrlbank.c b/drivers/mfd/lm3533-ctrlbank.c index 2537dfade51c..c2b5fd38b81d 100644 --- a/drivers/mfd/lm3533-ctrlbank.c +++ b/drivers/mfd/lm3533-ctrlbank.c @@ -9,6 +9,7 @@ =20 #include #include +#include =20 #include =20 @@ -38,8 +39,8 @@ int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb) dev_dbg(cb->dev, "%s - %d\n", __func__, cb->id); =20 mask =3D 1 << cb->id; - ret =3D lm3533_update(cb->lm3533, LM3533_REG_CTRLBANK_ENABLE, - mask, mask); + ret =3D regmap_set_bits(cb->lm3533->regmap, LM3533_REG_CTRLBANK_ENABLE, + mask); if (ret) dev_err(cb->dev, "failed to enable ctrlbank %d\n", cb->id); =20 @@ -55,7 +56,8 @@ int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb) dev_dbg(cb->dev, "%s - %d\n", __func__, cb->id); =20 mask =3D 1 << cb->id; - ret =3D lm3533_update(cb->lm3533, LM3533_REG_CTRLBANK_ENABLE, 0, mask); + ret =3D regmap_clear_bits(cb->lm3533->regmap, LM3533_REG_CTRLBANK_ENABLE, + mask); if (ret) dev_err(cb->dev, "failed to disable ctrlbank %d\n", cb->id); =20 @@ -68,7 +70,7 @@ EXPORT_SYMBOL_GPL(lm3533_ctrlbank_disable); * * imax 5000 - 29800 uA (800 uA step) */ -int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, u16 imax) +int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, u32 imax) { u8 reg; u8 val; @@ -80,7 +82,7 @@ int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlban= k *cb, u16 imax) val =3D (imax - LM3533_MAX_CURRENT_MIN) / LM3533_MAX_CURRENT_STEP; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_MAX_CURRENT_BASE); - ret =3D lm3533_write(cb->lm3533, reg, val); + ret =3D regmap_write(cb->lm3533->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to set max current\n"); =20 @@ -88,13 +90,13 @@ int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlb= ank *cb, u16 imax) } EXPORT_SYMBOL_GPL(lm3533_ctrlbank_set_max_current); =20 -int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u8 val) +int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u32 val) { u8 reg; int ret; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_BRIGHTNESS_BASE); - ret =3D lm3533_write(cb->lm3533, reg, val); + ret =3D regmap_write(cb->lm3533->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to set brightness\n"); =20 @@ -102,13 +104,13 @@ int lm3533_ctrlbank_set_brightness(struct lm3533_ctrl= bank *cb, u8 val) } EXPORT_SYMBOL_GPL(lm3533_ctrlbank_set_brightness); =20 -int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u8 *val) +int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u32 *val) { u8 reg; int ret; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_BRIGHTNESS_BASE); - ret =3D lm3533_read(cb->lm3533, reg, val); + ret =3D regmap_read(cb->lm3533->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to get brightness\n"); =20 @@ -126,7 +128,7 @@ EXPORT_SYMBOL_GPL(lm3533_ctrlbank_get_brightness); * bit 1 - PWM-input enabled in Zone 0 * bit 0 - PWM-input enabled */ -int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u8 val) +int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u32 val) { u8 reg; int ret; @@ -135,7 +137,7 @@ int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb,= u8 val) return -EINVAL; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_PWM_BASE); - ret =3D lm3533_write(cb->lm3533, reg, val); + ret =3D regmap_write(cb->lm3533->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to set PWM mask\n"); =20 @@ -143,13 +145,13 @@ int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *c= b, u8 val) } EXPORT_SYMBOL_GPL(lm3533_ctrlbank_set_pwm); =20 -int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u8 *val) +int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u32 *val) { u8 reg; int ret; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_PWM_BASE); - ret =3D lm3533_read(cb->lm3533, reg, val); + ret =3D regmap_read(cb->lm3533->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to get PWM mask\n"); =20 diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index babfd3ceec86..cd21c64b6485 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -11,6 +11,7 @@ #include #include #include +#include #include =20 #include @@ -45,7 +46,7 @@ static int lm3533_bl_update_status(struct backlight_devic= e *bd) static int lm3533_bl_get_brightness(struct backlight_device *bd) { struct lm3533_bl *bl =3D bl_get_data(bd); - u8 val; + u32 val; int ret; =20 ret =3D lm3533_ctrlbank_get_brightness(&bl->cb, &val); @@ -82,12 +83,12 @@ static ssize_t show_als_en(struct device *dev, { struct lm3533_bl *bl =3D dev_get_drvdata(dev); int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); - u8 val; + u32 val; u8 mask; bool enable; int ret; =20 - ret =3D lm3533_read(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, &val); + ret =3D regmap_read(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &va= l); if (ret) return ret; =20 @@ -104,7 +105,6 @@ static ssize_t store_als_en(struct device *dev, struct lm3533_bl *bl =3D dev_get_drvdata(dev); int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); int enable; - u8 val; u8 mask; int ret; =20 @@ -113,13 +113,8 @@ static ssize_t store_als_en(struct device *dev, =20 mask =3D 1 << (2 * ctrlbank); =20 - if (enable) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, - mask); + ret =3D regmap_assign_bits(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCO= NF, + mask, enable); if (ret) return ret; =20 @@ -130,12 +125,12 @@ static ssize_t show_linear(struct device *dev, struct device_attribute *attr, char *buf) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); - u8 val; + u32 val; u8 mask; int linear; int ret; =20 - ret =3D lm3533_read(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, &val); + ret =3D regmap_read(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &va= l); if (ret) return ret; =20 @@ -156,7 +151,6 @@ static ssize_t store_linear(struct device *dev, struct lm3533_bl *bl =3D dev_get_drvdata(dev); unsigned long linear; u8 mask; - u8 val; int ret; =20 if (kstrtoul(buf, 0, &linear)) @@ -164,13 +158,8 @@ static ssize_t store_linear(struct device *dev, =20 mask =3D 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); =20 - if (linear) - val =3D mask; - else - val =3D 0; - - ret =3D lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, - mask); + ret =3D regmap_assign_bits(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCO= NF, + mask, linear); if (ret) return ret; =20 @@ -182,7 +171,7 @@ static ssize_t show_pwm(struct device *dev, char *buf) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); - u8 val; + u32 val; int ret; =20 ret =3D lm3533_ctrlbank_get_pwm(&bl->cb, &val); @@ -197,10 +186,10 @@ static ssize_t store_pwm(struct device *dev, const char *buf, size_t len) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); - u8 val; + u32 val; int ret; =20 - if (kstrtou8(buf, 0, &val)) + if (kstrtou32(buf, 0, &val)) return -EINVAL; =20 ret =3D lm3533_ctrlbank_set_pwm(&bl->cb, val); diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h index 69059a7a2ce5..3463b164d0c1 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -85,15 +85,10 @@ struct lm3533_platform_data { extern int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); extern int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); =20 -extern int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u8 v= al); -extern int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u8 *= val); -extern int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, - u16 imax); -extern int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u8 val); -extern int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u8 *val); - -extern int lm3533_read(struct lm3533 *lm3533, u8 reg, u8 *val); -extern int lm3533_write(struct lm3533 *lm3533, u8 reg, u8 val); -extern int lm3533_update(struct lm3533 *lm3533, u8 reg, u8 val, u8 mask); +extern int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u32 = val); +extern int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u32 = *val); +extern int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, u32= imax); +extern int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u32 val); +extern int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u32 *val); =20 #endif /* __LINUX_MFD_LM3533_H */ --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.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 829643C342D for ; Wed, 17 Jun 2026 08:00:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683256; cv=none; b=eK1XSUYg3Yzybocj5AweQ95LSVXkoLRWL6LMzDAuMThNX1yTXwrl1NLCshYUvCGYOU5im7THQ1zozGZi1uGmIskzxrpjWziXKhYMI/kQCQV63CM0meL1c51ZiO6/bDyOsmAMiRnK7zTC7uWqjgDdOAMzYSCcNAhXnl9tcBbyCrQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683256; c=relaxed/simple; bh=HAi2lFG9zciTmNwzjiMeaJhfR/QYxc38dcz+eeM5v3Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SuN3WCh/aQvrjtmPFMrC+MMEm/IhyeVTu8bsNIeUIY+yAbZpBiTegb1jVhhwHnUKJCZXU3qgMzk9y1rIkmTPYspIAI6H5RHJ+aCiK0PGXLOfsNFXxflDbYm5mOGWNlsZkNxKExCirLH6Rq3cn7WtGwkFVxgHXGYH/dxOFrQck5g= 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=OUdfElxr; arc=none smtp.client-ip=209.85.208.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="OUdfElxr" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-693c69b97e7so5978432a12.2 for ; Wed, 17 Jun 2026 01:00:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683248; x=1782288048; 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=unbaKaB/vtuL7mVbcw6i8cWTUClKXSp2jofrc/k4FUs=; b=OUdfElxrVRVvBJaKiqMN4D6jqwSn4vOV4hkds1oDsnPTwrGiG6i4lGtznIXXvn2bLl jQv5TalctKgzKPyUr7dVLp+49u8/U80PnsgOG0NmfmEKEut3WYdjXghOiYkcPNCHTJ9K HHZ2CJiIWsG3x/5FgON8LfF4Ph4nr46hMuF2+wyAG15e8qrj3EPuIPN+orwu9TYT90d/ v3BPRci/SlVEOH4IqhaIXLfTsLuAak5aOPDSZhrVsVdfB3uYgCQq2ojsWvMISRnPU8f8 J8J64VlIlmv13keHaqYDHJQvc4TKYgfGYjmbnzi+TtJ4mULpSTsXwAuuA5sEfZbxsooA xaew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683248; x=1782288048; 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=unbaKaB/vtuL7mVbcw6i8cWTUClKXSp2jofrc/k4FUs=; b=T8xL7nJNrzyZP69NNLAmwBmnLUev62gmr7AysWuMt2q3Vz7k0XOwS4m098pXGKPFdy TMMUW2hoixi+lWzxERTa/QyUVAET6jB1uR6IB966MOi4FLjau0SEKn24LKH6HYKKJebi XV13mBpBp+v18Uo6NI9GUwUr1i7C6AIuVTQ7Hp/4ZvhU0ktfx5Hkw0abPs8GjZ2t18mW bL1yVw18+22ltLCXwl/zl0AjbfFTIdtajwW62uv9TVcM1NdVSwcSd6JHb3SO1WRB7Anl Ftmb0iuR60uKfipQREv5Fp8XdsMOpEZpXjtN0Y3xj0P3wKrVi4QoYvWdpps80Mobw/s3 kqHA== X-Forwarded-Encrypted: i=1; AFNElJ/8dCkg56HYsvRj4jXJxK+v5V1ux6AkRbIJAopwassaOS/KGF4sOoGDQGdkCfogcpg9FPZj57lij8nu/U8=@vger.kernel.org X-Gm-Message-State: AOJu0YyKtVf2XCdFVBKsoD/I0xIcpjwAHdPNYyOIv6j/NVbwyMr+GTO8 wae+SqzgfNUFHo27AgtM4QladwfUnaVLwG9XIW642/iHqaXY+pvQqq/g X-Gm-Gg: Acq92OHp5DkbNRFBSTW4p+1iqba8CVoa4wKky9A41emKfmUorb9abWAgnslSUZ7kWzw vxsvlwpVt/zfR2ITBvIEJvpQ/xoEzGhdX3assXN5mDnvlQBumbJGsa8ZGFFP/bRzFXP5bdui8uD zpGkz7kqQNMhHGrIjeg4SxerQfHda9PE5n7cRE2WcJxeyLLI4JV0hMH/iRYnMOSm6DNC8NHDrcT HrKjrd2YrluiJ6OXGnDU3PqiDmLli0MQy4afpF2W14GmUOj/f0rO7hA3cFWYolTfS6BqX14JkXF +bP42bw9vXE1a4zbp8u41RUyIwOUcPgCdnw//tmOTFfYeoPwHOWYBmzX2Yh6X+Sgkw5oOC/wzld sFfecqW56lqthKY9QBpY9ERNbrUxKmg24YNe4wUU4CZ+FQK9kgw8dsOcsT99SnaN+iFbUBQZIo7 TCoA== X-Received: by 2002:a17:907:97c6:b0:bee:ac9b:9abc with SMTP id a640c23a62f3a-c05a6ed1a53mr193361766b.22.1781683246256; Wed, 17 Jun 2026 01:00:46 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:45 -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 v5 03/14] mfd: lm3533: Remove extern from shared functions in the header Date: Wed, 17 Jun 2026 11:00:20 +0300 Message-ID: <20260617080031.99156-4-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" Using 'extern' is not required, drop them. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Andy Shevchenko --- include/linux/mfd/lm3533.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h index 3463b164d0c1..c4c38876c09b 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -82,13 +82,13 @@ struct lm3533_platform_data { int num_leds; }; =20 -extern int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); -extern int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); - -extern int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u32 = val); -extern int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u32 = *val); -extern int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, u32= imax); -extern int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u32 val); -extern int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u32 *val); +int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); +int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); + +int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank *cb, u32 val); +int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlbank *cb, u32 *val); +int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlbank *cb, u32 imax); +int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb, u32 val); +int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb, u32 *val); =20 #endif /* __LINUX_MFD_LM3533_H */ --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.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 2E38D3CE4AC for ; Wed, 17 Jun 2026 08:00:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683257; cv=none; b=SvTs5sV/TXWDt5aNbpatuEXn7wk5WIYTRrp/Mb/JD3QQei4zFSRbeLIdzz6GkMpwldYO5M2giHBhkHUgGxnFhBLfVHyMqfI01RVm4/sgaFTaQSBiLUmY+1XvIxknbWPkL51OovZwqJ4jZvtu/kG8mmBHirrNcQ3rLYDSnj8ypr4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683257; c=relaxed/simple; bh=zmZT9rdPBXdwMc/a3mK/qB53o789AMJtGE5bHoaIOTk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NjUEwUYP81c/yd0ffX19uXh4P8WfHsxmD77zdsCNUIyMr4mYCmlUEKhzmG3TubwXiO+89YB9SxZzkxjGLJuFY4x5Dt4MBxDSmPzIv/2oFqXgDEGleJvhNRpTy4yJC7Yn++YbkgLKXtGQnADbDc2dWsTjpGdQdmJb27Azdop43Z4= 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=k73JCq/P; arc=none smtp.client-ip=209.85.218.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="k73JCq/P" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-beeba001887so706163566b.3 for ; Wed, 17 Jun 2026 01:00:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683248; x=1782288048; 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=G/vD2WvMhtlCmmXP2PV0yHsKcGyGVU7w8huaayICW7U=; b=k73JCq/Pbb7Ooxa181VvRp5cGmM8AeGPEisS2LAfhCfFKVMKhHQrdih/zYUb37qQ5M h5qevIuOQoktBwR+6LmR76IR2jU02+aS4Zxl5apL3wJwX2DJzDgFf9iTED2Ps/jkING7 EF8ODdzUpgPhOAhLgWIrtrCtYhPhvOyQlZNRKLS46EVai5cqU6Gxtb0/9hdHsclc79WT 7oAmBc1xvGA2wPaix0q6zsH7Nbf9dHd+Q5JSesWvQz3hpom6UChLP6xQtT4OU1WjoUPD Nns/eAPQ9JbGIJHtcwvpE8PuRvVnHqlZkZScXoA41+i1D5YcLPWtw1u2MiyguNdX6kSx c+Iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683248; x=1782288048; 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=G/vD2WvMhtlCmmXP2PV0yHsKcGyGVU7w8huaayICW7U=; b=CHlOrzD4jDjA0pSasmmVQSDS31YCxhtS5ZZ+S9fjpBi384aYZvJovDHuDziiSk6BXc r12v3+7ZPQFpXJLfI77xgFiXM2tEkriUrF0JIg0xlWhqeiCW4TB3ltx7B1WwujqYWfCN 6Q1jzShHfzCfxmOJ4VnOE3lVZbTo5p2VADMeLNLH9uyXFuL5MdiMN6b6yGebS05epIES yI0d0uw0e60xt8x+gjKJvi601PDYXVpAP94ZasUO0TLR20hwTK3WcwQJ8rZxqk4B3qPO 3iFlIFIyGUy3mKzmofk+htqJ8YU0YMNW/RnxkL8JtvdKOcQdI5tzXsrslWeIoYQAfECw KLew== X-Forwarded-Encrypted: i=1; AFNElJ8OImrGVeUu5eEWJskx9IyLDbnfe6s0IEKCjIMj28zRkAa59dbOV8etKQOJOPRPun6AHG//IwuIQfCJ6ps=@vger.kernel.org X-Gm-Message-State: AOJu0YzxoPm49pzGhoQGiWuyQOpDoUJyyc4b6P/+0TCrz9vpzfhECCMi WXD53gcQm+KyfSK8hQuQ8PqTcZxIS/j+jFPyl0OyLfIivgNHFuq1IkPO X-Gm-Gg: AfdE7clwmpwZt+PA+Rk66J7VfkyFWGxFK5gWpBxTTW4kruChTLHKWe1N4hfft05Z33Z +/bCLMma2HqkrvCD6356LYGYzg6feiWXhla6RrYmsSerSIkNxDt6pZislU8j6a4DVlUhXkyRwlD IndhafVRxxxSDBZY6VBzp2yFjLoOmQ1QuI5m0n84BaMe+qDCkmNCFknHG6heP1rOaWHm0MM/fMy pyEyKFofyCYdDXgEn6+jwuIh/svTnH5WV7l62vl57AKlxSleOqRb8JINQIhM29QU2kylb8XQT/S AdWqoV6uSo/K4dMfG26oBHP7dMZKhJl/ZAmC06wpjU0mip0bFxII02dlufT0M4eD7y1ngL4FaTz YI9gnA3c5vnbjvceijoOEg7XJ7D4jL4cah6kbws67UTR+Clg9QaMQlxoOcTpuC33fnAAQordeQF 5LXNZU/CpNYb01 X-Received: by 2002:a17:907:3e12:b0:bed:7ce4:20c3 with SMTP id a640c23a62f3a-c05a4c195ecmr194026366b.42.1781683247840; Wed, 17 Jun 2026 01:00:47 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:47 -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 v5 04/14] mfd: lm3533: Pass only regmap and light sensor presence to child devices Date: Wed, 17 Jun 2026 11:00:21 +0300 Message-ID: <20260617080031.99156-5-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" Instead of passing the entire lm3533 core data structure, only pass the regmap and the light sensor presence flag to child devices. Signed-off-by: Svyatoslav Ryhel --- drivers/iio/light/lm3533-als.c | 32 ++++++++++++++--------------- drivers/leds/leds-lm3533.c | 32 ++++++++++++++++------------- drivers/mfd/lm3533-ctrlbank.c | 14 ++++++------- drivers/video/backlight/lm3533_bl.c | 19 +++++++++-------- include/linux/mfd/lm3533.h | 2 +- 5 files changed, 53 insertions(+), 46 deletions(-) diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c index 44b104c2d77f..a9af8e2b965f 100644 --- a/drivers/iio/light/lm3533-als.c +++ b/drivers/iio/light/lm3533-als.c @@ -49,7 +49,7 @@ =20 =20 struct lm3533_als { - struct lm3533 *lm3533; + struct regmap *regmap; struct platform_device *pdev; =20 unsigned long flags; @@ -73,7 +73,7 @@ static int lm3533_als_get_adc(struct iio_dev *indio_dev, = bool average, else reg =3D LM3533_REG_ALS_READ_ADC_RAW; =20 - ret =3D regmap_read(als->lm3533->regmap, reg, &val); + ret =3D regmap_read(als->regmap, reg, &val); if (ret) { dev_err(&indio_dev->dev, "failed to read adc\n"); return ret; @@ -90,7 +90,7 @@ static int _lm3533_als_get_zone(struct iio_dev *indio_dev= , u8 *zone) u32 val; int ret; =20 - ret =3D regmap_read(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, &val); + ret =3D regmap_read(als->regmap, LM3533_REG_ALS_ZONE_INFO, &val); if (ret) { dev_err(&indio_dev->dev, "failed to read zone\n"); return ret; @@ -141,7 +141,7 @@ static int lm3533_als_get_target(struct iio_dev *indio_= dev, unsigned channel, return -EINVAL; =20 reg =3D lm3533_als_get_target_reg(channel, zone); - ret =3D regmap_read(als->lm3533->regmap, reg, val); + ret =3D regmap_read(als->regmap, reg, val); if (ret) dev_err(&indio_dev->dev, "failed to get target current\n"); =20 @@ -162,7 +162,7 @@ static int lm3533_als_set_target(struct iio_dev *indio_= dev, unsigned channel, return -EINVAL; =20 reg =3D lm3533_als_get_target_reg(channel, zone); - ret =3D regmap_write(als->lm3533->regmap, reg, val); + ret =3D regmap_write(als->regmap, reg, val); if (ret) dev_err(&indio_dev->dev, "failed to set target current\n"); =20 @@ -274,7 +274,7 @@ static int lm3533_als_set_int_mode(struct iio_dev *indi= o_dev, int enable) struct lm3533_als *als =3D iio_priv(indio_dev); int ret; =20 - ret =3D regmap_assign_bits(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, + ret =3D regmap_assign_bits(als->regmap, LM3533_REG_ALS_ZONE_INFO, LM3533_ALS_INT_ENABLE_MASK, enable); if (ret) { dev_err(&indio_dev->dev, "failed to set int mode %d\n", @@ -290,7 +290,7 @@ static int lm3533_als_get_int_mode(struct iio_dev *indi= o_dev, int *enable) struct lm3533_als *als =3D iio_priv(indio_dev); int ret; =20 - ret =3D regmap_test_bits(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, + ret =3D regmap_test_bits(als->regmap, LM3533_REG_ALS_ZONE_INFO, LM3533_ALS_INT_ENABLE_MASK); if (ret < 0) { dev_err(&indio_dev->dev, "failed to get int mode\n"); @@ -320,7 +320,7 @@ static int lm3533_als_get_threshold(struct iio_dev *ind= io_dev, unsigned nr, return -EINVAL; =20 reg =3D lm3533_als_get_threshold_reg(nr, raising); - ret =3D regmap_read(als->lm3533->regmap, reg, val); + ret =3D regmap_read(als->regmap, reg, val); if (ret) dev_err(&indio_dev->dev, "failed to get threshold\n"); =20 @@ -342,7 +342,7 @@ static int lm3533_als_set_threshold(struct iio_dev *ind= io_dev, unsigned nr, reg2 =3D lm3533_als_get_threshold_reg(nr, !raising); =20 mutex_lock(&als->thresh_mutex); - ret =3D regmap_read(als->lm3533->regmap, reg2, &val2); + ret =3D regmap_read(als->regmap, reg2, &val2); if (ret) { dev_err(&indio_dev->dev, "failed to get threshold\n"); goto out; @@ -357,7 +357,7 @@ static int lm3533_als_set_threshold(struct iio_dev *ind= io_dev, unsigned nr, goto out; } =20 - ret =3D regmap_write(als->lm3533->regmap, reg, val); + ret =3D regmap_write(als->regmap, reg, val); if (ret) { dev_err(&indio_dev->dev, "failed to set threshold\n"); goto out; @@ -712,7 +712,7 @@ static int lm3533_als_set_input_mode(struct lm3533_als = *als, bool pwm_mode) { int ret; =20 - ret =3D regmap_assign_bits(als->lm3533->regmap, LM3533_REG_ALS_CONF, + ret =3D regmap_assign_bits(als->regmap, LM3533_REG_ALS_CONF, LM3533_ALS_INPUT_MODE_MASK, pwm_mode); if (ret) { dev_err(&als->pdev->dev, "failed to set input mode %d\n", @@ -732,7 +732,7 @@ static int lm3533_als_set_resistor(struct lm3533_als *a= ls, u8 val) return -EINVAL; } =20 - ret =3D regmap_write(als->lm3533->regmap, LM3533_REG_ALS_RESISTOR_SELECT, + ret =3D regmap_write(als->regmap, LM3533_REG_ALS_RESISTOR_SELECT, val); if (ret) { dev_err(&als->pdev->dev, "failed to set resistor\n"); @@ -766,7 +766,7 @@ static int lm3533_als_setup_irq(struct lm3533_als *als,= void *dev) int ret; =20 /* Make sure interrupts are disabled. */ - ret =3D regmap_clear_bits(als->lm3533->regmap, LM3533_REG_ALS_ZONE_INFO, + ret =3D regmap_clear_bits(als->regmap, LM3533_REG_ALS_ZONE_INFO, LM3533_ALS_INT_ENABLE_MASK); if (ret) { dev_err(&als->pdev->dev, "failed to disable interrupts\n"); @@ -789,7 +789,7 @@ static int lm3533_als_enable(struct lm3533_als *als) { int ret; =20 - ret =3D regmap_set_bits(als->lm3533->regmap, LM3533_REG_ALS_CONF, + ret =3D regmap_set_bits(als->regmap, LM3533_REG_ALS_CONF, LM3533_ALS_ENABLE_MASK); if (ret) dev_err(&als->pdev->dev, "failed to enable ALS\n"); @@ -801,7 +801,7 @@ static int lm3533_als_disable(struct lm3533_als *als) { int ret; =20 - ret =3D regmap_clear_bits(als->lm3533->regmap, LM3533_REG_ALS_CONF, + ret =3D regmap_clear_bits(als->regmap, LM3533_REG_ALS_CONF, LM3533_ALS_ENABLE_MASK); if (ret) dev_err(&als->pdev->dev, "failed to disable ALS\n"); @@ -845,7 +845,7 @@ static int lm3533_als_probe(struct platform_device *pde= v) indio_dev->modes =3D INDIO_DIRECT_MODE; =20 als =3D iio_priv(indio_dev); - als->lm3533 =3D lm3533; + als->regmap =3D lm3533->regmap; als->pdev =3D pdev; als->irq =3D lm3533->irq; atomic_set(&als->zone, 0); diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c index 335c758071f3..0cb0585eb960 100644 --- a/drivers/leds/leds-lm3533.c +++ b/drivers/leds/leds-lm3533.c @@ -42,13 +42,15 @@ =20 =20 struct lm3533_led { - struct lm3533 *lm3533; + struct regmap *regmap; struct lm3533_ctrlbank cb; struct led_classdev cdev; int id; =20 struct mutex mutex; unsigned long flags; + + bool have_als; }; =20 =20 @@ -96,7 +98,7 @@ static int lm3533_led_pattern_enable(struct lm3533_led *l= ed, int enable) pattern =3D lm3533_led_get_pattern(led); mask =3D 1 << (2 * pattern); =20 - ret =3D regmap_assign_bits(led->lm3533->regmap, + ret =3D regmap_assign_bits(led->regmap, LM3533_REG_PATTERN_ENABLE, mask, enable); if (ret) { dev_err(led->cdev.dev, "failed to enable pattern %d (%d)\n", @@ -255,7 +257,7 @@ static u8 lm3533_led_delay_set(struct lm3533_led *led, = u8 base, dev_dbg(led->cdev.dev, "%s - %lu: %u (0x%02x)\n", __func__, *delay, t, val); reg =3D lm3533_led_get_pattern_reg(led, base); - ret =3D regmap_write(led->lm3533->regmap, reg, val); + ret =3D regmap_write(led->regmap, reg, val); if (ret) dev_err(led->cdev.dev, "failed to set delay (%02x)\n", reg); =20 @@ -336,7 +338,7 @@ static ssize_t show_risefalltime(struct device *dev, u32 val; =20 reg =3D lm3533_led_get_pattern_reg(led, base); - ret =3D regmap_read(led->lm3533->regmap, reg, &val); + ret =3D regmap_read(led->regmap, reg, &val); if (ret) return ret; =20 @@ -371,7 +373,7 @@ static ssize_t store_risefalltime(struct device *dev, return -EINVAL; =20 reg =3D lm3533_led_get_pattern_reg(led, base); - ret =3D regmap_write(led->lm3533->regmap, reg, val); + ret =3D regmap_write(led->regmap, reg, val); if (ret) return ret; =20 @@ -405,7 +407,7 @@ static ssize_t show_als_channel(struct device *dev, int ret; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - ret =3D regmap_read(led->lm3533->regmap, reg, &val); + ret =3D regmap_read(led->regmap, reg, &val); if (ret) return ret; =20 @@ -437,7 +439,7 @@ static ssize_t store_als_channel(struct device *dev, mask =3D LM3533_REG_CTRLBANK_BCONF_ALS_CHANNEL_MASK; val =3D channel - 1; =20 - ret =3D regmap_update_bits(led->lm3533->regmap, reg, mask, val); + ret =3D regmap_update_bits(led->regmap, reg, mask, val); if (ret) return ret; =20 @@ -455,7 +457,7 @@ static ssize_t show_als_en(struct device *dev, int ret; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - ret =3D regmap_read(led->lm3533->regmap, reg, &val); + ret =3D regmap_read(led->regmap, reg, &val); if (ret) return ret; =20 @@ -479,7 +481,7 @@ static ssize_t store_als_en(struct device *dev, =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); =20 - ret =3D regmap_assign_bits(led->lm3533->regmap, reg, + ret =3D regmap_assign_bits(led->regmap, reg, LM3533_REG_CTRLBANK_BCONF_ALS_EN_MASK, enable); if (ret) return ret; @@ -498,7 +500,7 @@ static ssize_t show_linear(struct device *dev, int ret; =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); - ret =3D regmap_read(led->lm3533->regmap, reg, &val); + ret =3D regmap_read(led->regmap, reg, &val); if (ret) return ret; =20 @@ -525,7 +527,7 @@ static ssize_t store_linear(struct device *dev, =20 reg =3D lm3533_led_get_lv_reg(led, LM3533_REG_CTRLBANK_BCONF_BASE); =20 - ret =3D regmap_assign_bits(led->lm3533->regmap, reg, + ret =3D regmap_assign_bits(led->regmap, reg, LM3533_REG_CTRLBANK_BCONF_MAPPING_MASK, linear); if (ret) return ret; @@ -597,7 +599,7 @@ static umode_t lm3533_led_attr_is_visible(struct kobjec= t *kobj, =20 if (attr =3D=3D &dev_attr_als_channel.attr || attr =3D=3D &dev_attr_als_en.attr) { - if (!led->lm3533->have_als) + if (!led->have_als) mode =3D 0; } =20 @@ -654,7 +656,9 @@ static int lm3533_led_probe(struct platform_device *pde= v) if (!led) return -ENOMEM; =20 - led->lm3533 =3D lm3533; + led->regmap =3D lm3533->regmap; + led->have_als =3D lm3533->have_als; + led->cdev.name =3D pdata->name; led->cdev.default_trigger =3D pdata->default_trigger; led->cdev.brightness_set_blocking =3D lm3533_led_set; @@ -670,7 +674,7 @@ static int lm3533_led_probe(struct platform_device *pde= v) * registration so use parent device (for error reporting) until * registered. */ - led->cb.lm3533 =3D lm3533; + led->cb.regmap =3D lm3533->regmap; led->cb.id =3D lm3533_led_get_ctrlbank_id(led); led->cb.dev =3D lm3533->dev; =20 diff --git a/drivers/mfd/lm3533-ctrlbank.c b/drivers/mfd/lm3533-ctrlbank.c index c2b5fd38b81d..91e13cfa3cf0 100644 --- a/drivers/mfd/lm3533-ctrlbank.c +++ b/drivers/mfd/lm3533-ctrlbank.c @@ -39,7 +39,7 @@ int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb) dev_dbg(cb->dev, "%s - %d\n", __func__, cb->id); =20 mask =3D 1 << cb->id; - ret =3D regmap_set_bits(cb->lm3533->regmap, LM3533_REG_CTRLBANK_ENABLE, + ret =3D regmap_set_bits(cb->regmap, LM3533_REG_CTRLBANK_ENABLE, mask); if (ret) dev_err(cb->dev, "failed to enable ctrlbank %d\n", cb->id); @@ -56,7 +56,7 @@ int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb) dev_dbg(cb->dev, "%s - %d\n", __func__, cb->id); =20 mask =3D 1 << cb->id; - ret =3D regmap_clear_bits(cb->lm3533->regmap, LM3533_REG_CTRLBANK_ENABLE, + ret =3D regmap_clear_bits(cb->regmap, LM3533_REG_CTRLBANK_ENABLE, mask); if (ret) dev_err(cb->dev, "failed to disable ctrlbank %d\n", cb->id); @@ -82,7 +82,7 @@ int lm3533_ctrlbank_set_max_current(struct lm3533_ctrlban= k *cb, u32 imax) val =3D (imax - LM3533_MAX_CURRENT_MIN) / LM3533_MAX_CURRENT_STEP; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_MAX_CURRENT_BASE); - ret =3D regmap_write(cb->lm3533->regmap, reg, val); + ret =3D regmap_write(cb->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to set max current\n"); =20 @@ -96,7 +96,7 @@ int lm3533_ctrlbank_set_brightness(struct lm3533_ctrlbank= *cb, u32 val) int ret; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_BRIGHTNESS_BASE); - ret =3D regmap_write(cb->lm3533->regmap, reg, val); + ret =3D regmap_write(cb->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to set brightness\n"); =20 @@ -110,7 +110,7 @@ int lm3533_ctrlbank_get_brightness(struct lm3533_ctrlba= nk *cb, u32 *val) int ret; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_BRIGHTNESS_BASE); - ret =3D regmap_read(cb->lm3533->regmap, reg, val); + ret =3D regmap_read(cb->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to get brightness\n"); =20 @@ -137,7 +137,7 @@ int lm3533_ctrlbank_set_pwm(struct lm3533_ctrlbank *cb,= u32 val) return -EINVAL; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_PWM_BASE); - ret =3D regmap_write(cb->lm3533->regmap, reg, val); + ret =3D regmap_write(cb->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to set PWM mask\n"); =20 @@ -151,7 +151,7 @@ int lm3533_ctrlbank_get_pwm(struct lm3533_ctrlbank *cb,= u32 *val) int ret; =20 reg =3D lm3533_ctrlbank_get_reg(cb, LM3533_REG_PWM_BASE); - ret =3D regmap_read(cb->lm3533->regmap, reg, val); + ret =3D regmap_read(cb->regmap, reg, val); if (ret) dev_err(cb->dev, "failed to get PWM mask\n"); =20 diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index cd21c64b6485..4d6f68033480 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -24,10 +24,12 @@ =20 =20 struct lm3533_bl { - struct lm3533 *lm3533; + struct regmap *regmap; struct lm3533_ctrlbank cb; struct backlight_device *bd; int id; + + bool have_als; }; =20 =20 @@ -88,7 +90,7 @@ static ssize_t show_als_en(struct device *dev, bool enable; int ret; =20 - ret =3D regmap_read(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &va= l); + ret =3D regmap_read(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &val); if (ret) return ret; =20 @@ -113,7 +115,7 @@ static ssize_t store_als_en(struct device *dev, =20 mask =3D 1 << (2 * ctrlbank); =20 - ret =3D regmap_assign_bits(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCO= NF, + ret =3D regmap_assign_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, mask, enable); if (ret) return ret; @@ -130,7 +132,7 @@ static ssize_t show_linear(struct device *dev, int linear; int ret; =20 - ret =3D regmap_read(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &va= l); + ret =3D regmap_read(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &val); if (ret) return ret; =20 @@ -158,7 +160,7 @@ static ssize_t store_linear(struct device *dev, =20 mask =3D 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); =20 - ret =3D regmap_assign_bits(bl->lm3533->regmap, LM3533_REG_CTRLBANK_AB_BCO= NF, + ret =3D regmap_assign_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, mask, linear); if (ret) return ret; @@ -223,7 +225,7 @@ static umode_t lm3533_bl_attr_is_visible(struct kobject= *kobj, =20 if (attr =3D=3D &dev_attr_als_channel.attr || attr =3D=3D &dev_attr_als_en.attr) { - if (!bl->lm3533->have_als) + if (!bl->have_als) mode =3D 0; } =20 @@ -277,10 +279,11 @@ static int lm3533_bl_probe(struct platform_device *pd= ev) if (!bl) return -ENOMEM; =20 - bl->lm3533 =3D lm3533; + bl->regmap =3D lm3533->regmap; + bl->have_als =3D lm3533->have_als; bl->id =3D pdev->id; =20 - bl->cb.lm3533 =3D lm3533; + bl->cb.regmap =3D lm3533->regmap; bl->cb.id =3D lm3533_bl_get_ctrlbank_id(bl); bl->cb.dev =3D NULL; /* until registered */ =20 diff --git a/include/linux/mfd/lm3533.h b/include/linux/mfd/lm3533.h index c4c38876c09b..74cfb52c3bd1 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -33,7 +33,7 @@ struct lm3533 { }; =20 struct lm3533_ctrlbank { - struct lm3533 *lm3533; + struct regmap *regmap; struct device *dev; int id; }; --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (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 A8DEF3CF1FA for ; Wed, 17 Jun 2026 08:00:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683259; cv=none; b=OJt/eHg2IbS6+gIRd/rBnzp4O5/asSpWM09lK0HJtkwAUCWp/2xbq7VjEVLyK09qZVcZLgP0ZLCzrpwu4+DHZdBPv1qpVqqYxRojiurjK85It20qqo54wK5ejtCdWTjjTHOT2vLeSg6+mMct/0kHY5AsIcO8Qego+g4iqH9MEZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683259; c=relaxed/simple; bh=EErEa+xTvRrMlTfCICTBeucwWtahnLN9Dg/ExT+D1y8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ShxOd/JLodNz0HcxtbnhnfdT0if3MGf2sAHhFmHBq2jPfvDE/qdkIOEddZtibkCPmOW9W+xrCY8sLCYLtw4HUBjlYaNKXg5rVgfyV9eBAAQ4ccF2O5QjtQV7zeDXdI0APf7RQezpvJxfmknx26ABKb4nKnvHSucX8G5MaxHro7s= 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=UQK9yjFt; arc=none smtp.client-ip=209.85.218.52 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="UQK9yjFt" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-bf046d4da1fso516389766b.3 for ; Wed, 17 Jun 2026 01:00:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683251; x=1782288051; 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=0zcYkBqsgtm7crDvyj+FVJGVI8rwwbt6ayEuo6Ql52s=; b=UQK9yjFt9W/l/gnodv7PROtIDTvHGJKgOXovy2Cy15yiDA6YO2lmeVtIL5lGz2h26j YkGPTwFA9NeYqU5TWWS/8iTmZ4WbCSWWTeEvYBAYRG2OPh7yuvtEJ7A7vLobt+LoDttI 6MQbCmriupTGKgkRvOkvCz2DF0K/SKHRCmaL1WjkKUj1kklGXeS6SQUys5S0/ZUS0Nou kbFpIHQsdMiV6qfUitY9/cBvIVLVRKnNWLr6mCjYa4sTDcjT7f8Rk8G+zhb1P0YlqbSD peIct/+llBU1722YeW+RecV7siZ25vV0kaV3nRWXrg8NQGC7wom+cow1IYLOhAPNNQ9V frLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683251; x=1782288051; 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=0zcYkBqsgtm7crDvyj+FVJGVI8rwwbt6ayEuo6Ql52s=; b=MP6+SH3MMPg8YdcmnRWGfUWkQZeXLYpBnibPzk/PUhAALS694ZYxr9mN/O4yeV5Uz0 6ibvxWRSc0Lln7jJM5Xb+6hKDE7mY2YBhu4RCDaawKFHKwVt4kptNalY1H4kh1ri5J4s eZZcJziMgLkNZlJ7QRqRtE9DatABHudw3wsj1uDNCP7CGDwyHNHKzS1m68TIP1dZXdBR qMffTtyAYTAQdkdsRLwIZfzmcG8GDq4fVAfMTIkNjsY6QZq4z1IpD9YfrWA+0UhHUtrJ GuUcDoaubxcVtdGaKabB2Q2Efdf9L1LMINTich+Ufj6alFYTjNE0jtBoc8TJQO34Dmo2 vzcA== X-Forwarded-Encrypted: i=1; AFNElJ90PdhEqRtG77gdDshWV2WDl0md8fnSvH3Msj82EMzC0PBwKhdGp+ZG89/Bmf5MvfYWYMuBNLPvCRCCYRw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9CH4ZzRG7Vjw0VDUn21bhfTILE7GKevW6BkhnVf/GXZUMHxVS qsSdCrIMkzaU28vWzTjvXkMyaD9AONWR88IIfqaCRKWKPtnDzXHtJPhy X-Gm-Gg: Acq92OGj4RlTo9MlK3LB9LpaoShJNHYBwunw86hi7ElT6eqApfNM5ddr17NAep5rrSA 5SumP4aCn+iGzVvo6cBQH0I+kDhr+r9aWTruNQ9XSvB4rkv9FSv2wGERCaIZcESTSqSeaWjIELT OC7USHRT7zphAO2BAmWwmIah1swD9+WCrT57l+lIeJZPvB03/oVFrWGcDycEtJtr5gsgil37NDu tIrHiKJLPhbUOy0F3zmRykLWCpb0OUrQttCIkcGcJvHPi7tYWG8n4Ivpv9vXABe0ZrQ2/2J4Y6g r31v5du3Cv7XvNsqSko1KuP02X7u4fAO7XnIRmrekVDg3/X+fNOyJ9Kr4ASimVvHUrycwt9iB6h tYfXL0bdjlja3svrP+Ea3zoy6KBJYWqlpCF/oaaD6zQ+73O6w0jFAAJqfze7gVeYxelXtHDWJna Js5w== X-Received: by 2002:a17:906:9fca:b0:c03:b8c6:cc27 with SMTP id a640c23a62f3a-c05a6bded8bmr163827566b.24.1781683249238; Wed, 17 Jun 2026 01:00:49 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:48 -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 v5 05/14] iio: light: lm3533-als: Remove redundant pdata helpers Date: Wed, 17 Jun 2026 11:00:22 +0300 Message-ID: <20260617080031.99156-6-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" The lm3533_als_set_input_mode() and lm3533_als_set_resistor() functions are used only in lm3533_als_setup(). Incorporate their code into lm3533_als_setup() directly to simplify driver readability. Signed-off-by: Svyatoslav Ryhel --- drivers/iio/light/lm3533-als.c | 56 ++++++++++------------------------ 1 file changed, 16 insertions(+), 40 deletions(-) diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c index a9af8e2b965f..69bac1b202f1 100644 --- a/drivers/iio/light/lm3533-als.c +++ b/drivers/iio/light/lm3533-als.c @@ -708,55 +708,31 @@ 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, + const struct lm3533_als_platform_data *pdata) { + struct device *dev =3D &als->pdev->dev; int ret; =20 ret =3D regmap_assign_bits(als->regmap, LM3533_REG_ALS_CONF, - LM3533_ALS_INPUT_MODE_MASK, pwm_mode); - if (ret) { - dev_err(&als->pdev->dev, "failed to set input mode %d\n", - pwm_mode); - return ret; - } - - return 0; -} + LM3533_ALS_INPUT_MODE_MASK, pdata->pwm_mode); + if (ret) + return dev_err_probe(dev, ret, "failed to set input mode %d\n", + pdata->pwm_mode); =20 -static int lm3533_als_set_resistor(struct lm3533_als *als, u8 val) -{ - int ret; + /* Bail out when in PWM-mode */ + if (pdata->pwm_mode) + return 0; =20 - if (val < LM3533_ALS_RESISTOR_MIN || val > LM3533_ALS_RESISTOR_MAX) { - dev_err(&als->pdev->dev, "invalid resistor value\n"); - return -EINVAL; - } + if (pdata->r_select < LM3533_ALS_RESISTOR_MIN || + pdata->r_select > LM3533_ALS_RESISTOR_MAX) + return dev_err_probe(dev, -EINVAL, + "invalid resistor value\n"); =20 ret =3D regmap_write(als->regmap, 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); + pdata->r_select); 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 dev_err_probe(dev, ret, "failed to set resistor\n"); =20 return 0; } --=20 2.53.0 From nobody Thu Jun 18 22:06: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 B413F3CCFCC for ; Wed, 17 Jun 2026 08:00:52 +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=1781683262; cv=none; b=mK63xPahXRL7JeHhtjcfFOGqC7vvkenGKgGIMvbA3QPeTNtvp3fzLgkpxW6FV4zMFD9wOLvlm2Db22p+hsI4aRdODAEe/JoSJwPIBM76lIEp8K25Xf3Oc7C7sdjOaVsLbK6iOsnfscmjOokRLJjqpK//X0Q8diohsHfYRw/BFKo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683262; c=relaxed/simple; bh=BwWYKnYatgp0/f3D570qVWCNy9eZh1sTktWSktle2dg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kv9Ad64VaEht40aKTIrLF9DPAs1luVO04xgniVX1JX1SUeDhgPYGKyikFH0HUUdUOfnCalO4f/skH4i+hNb5N+L+PVpKfkLiSeYVe0snKr33bQ7no1fzoTrXEn/R2bXlk4/alzBtlvbVGAVZAz9bq+4S3MQvtPvHA2ogn8baZwI= 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=q5FvIMP4; 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="q5FvIMP4" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-bf0170c80f7so929882666b.3 for ; Wed, 17 Jun 2026 01:00:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683251; x=1782288051; 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=j8y+i4Wk6Q8lVb7K/zxazYX8oolr+QPONOjz4+CZ6S0=; b=q5FvIMP48mll3yVpjAuWYJ3T/u8Cg5dIq6l67h4fvUg3PiilFeHS/nBCe7KHm8M2nM Uw6BTGaGfd8U7E+7yrdpvDibkoKmSW1uJaJbWTDZiicaqgBvJG6suX6gkT4ul/q1vY8a KwvRRXWHUAY3HgPapPfOu6PCw4Bo4quZLc1xxm8bLDfeabnMf+CYz3z/KqIMjp3lcU0m d0YAQhg5bS3P9346WFMu5yzpdSeMkQRrstkj+AlCbaAQBMgFuVRvanArFdAz0sFbAjkw Madl+Dx5oaB5m2CXiBeH64ew2UakvEOt9V0yJ43GlGY2wNHo1TlyN2Y+YE5emmm9bk6u wO+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683251; x=1782288051; 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=j8y+i4Wk6Q8lVb7K/zxazYX8oolr+QPONOjz4+CZ6S0=; b=Eb7ezAQX3EpQSi7bKACQmk3GGRUCejqcm5F66ZrdNdVjlVkTXhsg4eqATCWNuV3iS+ VQ8ni7/l+ov+ivV8N58qZPD+TckjBiIp774gOjbsLZix3X+NzhbmvEXu1Dg3gYhOHFlF sN/MyozSzHJjR+YdxzQvK9d2aff1WqKtCZ2JfzQwIQ1c7WgRuVcQVtyExryASmd7dFY+ ptTh+0YvWBkX2hp/LilfDjC9IxWl1HLLZiDH4gDe9xvASHqxZf3wUJwfJS/bq+oHh5NY W1uUFmGaVlNIMxQ7cmXL8ehkhrPnmctezvyPmm6UohxEETWshpemj0dDl7HnClLO0gW4 1ntA== X-Forwarded-Encrypted: i=1; AFNElJ9UFhUDWuon2YNyWlLtI3QvzoS21klAfJrW2LTajWpAhhAlXQCX064K4chadWiSnNS048vGliMc/sGi+74=@vger.kernel.org X-Gm-Message-State: AOJu0YwOpSk2B47b0Hxui0tIePNf9XxC5/HczM8sQLeSoNGJ9CwfwG3+ OzM9WF7StngCewSEFC27y9PhY3ODylnC7B1Pc0rM1uLnRqiXZeEF5XVR X-Gm-Gg: AfdE7ck0Pwmc56iZ/MuThxMmIpBZJ87AZBTqcuRDLOqlnwnU/n7kHEV2xRUfvM5ig7B FCFThfFNOYjwn92vO2AAD6/eJf6S5C+7RnnXObtvmeiAm/QvH6tYqJEZunB+6JUsU7UH6Gv1Ycx NJmN6dlBz07kRRH/dBBytgs8nVI7ao9FURSf39mOxkDvGrcJ3cLNQcMTe0vmDWf/OhzXWmHYp0e JjjgGBF9JGzcQ+xBFJKqxlQIyRMAe6+as/mQhBW7Q/YQfI8PCfz3PTBZJYWg+7+hZwb5jJq8I8x a0ljueM1TRZaRuTqppQuUD1NPBhzAfYJvNnTmydCMuGFsQvrpeAcwjMQRBEKJQxwritZ3dQxUKQ jBR3Xs0/wry/EYVEVsv0kgJaXvbxixXDCUxn2JTilsSooN8H9Hj2ujVEbN5ytNJ8nsmQ3akQiDm wzq+TIEHOsnqP2 X-Received: by 2002:a17:907:d02:b0:be2:d66:eb4d with SMTP id a640c23a62f3a-c05a7abd063mr208115166b.44.1781683250733; Wed, 17 Jun 2026 01:00:50 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00: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 v5 06/14] mfd: lm3533-core: Remove redundant pdata helpers Date: Wed, 17 Jun 2026 11:00:23 +0300 Message-ID: <20260617080031.99156-7-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" The lm3533_set_boost_freq() and lm3533_set_boost_ovp() functions are used only in lm3533_device_setup(), which in turn is only called by lm3533_device_init(). Incorporate their code directly into lm3533_device_init() to simplify driver readability. Signed-off-by: Svyatoslav Ryhel --- drivers/mfd/lm3533-core.c | 57 ++++++++++----------------------------- 1 file changed, 14 insertions(+), 43 deletions(-) diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index f9bdc0a1d9be..45e7f7481aa0 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -80,35 +80,6 @@ static struct mfd_cell lm3533_led_devs[] =3D { }, }; =20 -static int lm3533_set_boost_freq(struct lm3533 *lm3533, - enum lm3533_boost_freq freq) -{ - int ret; - - ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, - LM3533_BOOST_FREQ_MASK, - freq << LM3533_BOOST_FREQ_SHIFT); - 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 regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, - LM3533_BOOST_OVP_MASK, - ovp << LM3533_BOOST_OVP_SHIFT); - if (ret) - dev_err(lm3533->dev, "failed to set boost ovp\n"); - - return ret; -} - /* * HVLED output config -- output hvled controlled by backlight bl */ @@ -406,18 +377,6 @@ static int lm3533_device_led_init(struct lm3533 *lm353= 3) return 0; } =20 -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); @@ -437,9 +396,21 @@ static int lm3533_device_init(struct lm3533 *lm3533) =20 lm3533_enable(lm3533); =20 - ret =3D lm3533_device_setup(lm3533, pdata); - if (ret) + ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, + LM3533_BOOST_FREQ_MASK, + pdata->boost_freq << LM3533_BOOST_FREQ_SHIFT); + if (ret) { + dev_err(lm3533->dev, "failed to set boost frequency\n"); goto err_disable; + } + + ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, + LM3533_BOOST_OVP_MASK, + pdata->boost_ovp << LM3533_BOOST_OVP_SHIFT); + if (ret) { + dev_err(lm3533->dev, "failed to set boost ovp\n"); + goto err_disable; + } =20 lm3533_device_als_init(lm3533); lm3533_device_bl_init(lm3533); --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.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 C662C3D0918 for ; Wed, 17 Jun 2026 08:00:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683262; cv=none; b=avDiJajkzYkH55KxCnmfvdJ0ApZP79oFn8eNhRIDOaLyxziZO4G0i6hEo7HHdSvVzKjmMDD40qBgJ1zAkqrjpF5QJxnVdURcxS7/PfDLwmZ8XdKf52RaQt9OrEPWAOrk9pbp4npRv2/VdgH0sefTSlursvbnh5NnRs4bqK61EKg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683262; c=relaxed/simple; bh=TTELV8IpYd68DmqOR1f5rOCgz/ySoag1Ez1+u/elF8g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tWD1BBWN83QtkWCwJScF5wEzC3WE6B6D/fyFsvK/SAgL6C1MdBa31pLFagDmEnw1JX3vQDYSymz8IWq2rXpWcYB/fGCZxE8Qj4rFDAOQpplkZWg1syhVX12In+ShoU8PHyxEXDMAAmsO1b2T9WhmZ3KhS9YJWiHbn6gbuDBi95o= 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=LQ/iw4xP; arc=none smtp.client-ip=209.85.208.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="LQ/iw4xP" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-6957f9ca40fso307592a12.2 for ; Wed, 17 Jun 2026 01:00:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683252; x=1782288052; 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=XN/2fWo04yb49XoOXlEMtfv2zfwELjeaHNjw1feXliI=; b=LQ/iw4xPQsM6MpB8IebcysDbUOYAKgmbUbwpBtuFDwI+niiWcvKe3SGf60jNnAxBKT wm6reAgrEKK9arskZozrm7cr+ubbjGSktQAd0o7Bsn2Y0TL8yhJwYVAtUSg3knqStRf6 sytWKBe92DonLcFKr5+gbfQwQpwvWsN/7bb7lH98+VHcz70o8ooUTwNAHIwM7wJRLOtf c3YHCpGbXFxCEeMzxaJtDsDJln6QtE6nyI0l0mBSRTOTjR7H01XFTWIn6pAcgw3Bg6A7 tOTOZl5zL/wQjloFUn0EufhkP6X5Dv+TqCicfHPQf3i54QP7SCm8jMpfjAF03KTSt8nP lYkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683252; x=1782288052; 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=XN/2fWo04yb49XoOXlEMtfv2zfwELjeaHNjw1feXliI=; b=ecDm41AJkmVGiXmXnT10qut9NPqJKD5d6YN61kwMo6vTk5htdapjJxe9ndwKmtbd+R +hHW0haDwAquoxnz/P3+meYmgn+afOesol7cpY2tlwggSBekrpWNf9XCvcDecpUaeXGg IAmUly3GU/pEQ8lC9FsSpGG5jS191WkCMriWuylIKYBROyRFhmF1bWk3M6VdzNGTl0sM eFQXn0iIyLqsiJ1Ou+l9BbwWEwPijCh0NSd9nPrPJL49KcD0Id/ddneMnYB6WlmQlS7Y FidZ8HMDR+A82kHbhFR5oddwMxzVBKvvptKaV2+5ia1uGvU2QVOYyZ6wZOOmiqAk6Vch RZNg== X-Forwarded-Encrypted: i=1; AFNElJ8HuC8JegTtEErW0IhKO1aOCMUqZdelZeHUL0r3C/7LInwAyu3jbkV2PVFXLTt7aoJ+R+fXL3ky4Rq7x7o=@vger.kernel.org X-Gm-Message-State: AOJu0YwH1TiByRvfzmVvJ9zwO4UjO2YehuUdPj0DVvyjoMP+3AUQiMn7 hJTX3fe8HLYqent8vr2GRIjiIg8P2r1qef1VHKFt6QtljCQt30NDneW6 X-Gm-Gg: AfdE7cnwfvE/7S3Cn+bB6Nqe4byXDHDxcDUH6fUsLdP7c9Ktgj+hHn2XqHg5JTCtBEU vsMJA+PwwynjqHMzDb6qP/xUODuDHr0a7FGq0NEr4dVWemXcT0+VVxQZjuF9mhKSlnuw8GL3TTp ilYhh5L0fLEwyN56AbQ0lCUrbHz9URYDG+3IbUUBqbsXRJqJENZcH0AsAyjbQH79DSgH0l7CpDx imfUQUHi5FHpZ8w20KVHK/bVB4vkCMFye/LE1lLQ7G3X5T936E1Zvhnw47hRztl3guje9X4/OSe SnafCXbLzgw0DjQclbq51zlSJWwX1jGfoeqnEbROlXaySEg6QeuT+Qt4f6a1GzasbsSWUNI2t5O bZ3/JejAI4beW9FvKQ4hEelvIvWFYTAQhdm3R2kVu3a8LBn7WFa9NVExFNKVaJ00DmCaWZmE1Ef l6Tx+CFkRJBxkj X-Received: by 2002:a17:907:d78a:b0:bed:275:5e5b with SMTP id a640c23a62f3a-c05a77cb897mr178021366b.42.1781683252049; Wed, 17 Jun 2026 01:00:52 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:51 -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 v5 07/14] mfd: lm3533: Use dev_groups in struct device_driver Date: Wed, 17 Jun 2026 11:00:24 +0300 Message-ID: <20260617080031.99156-8-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" Instead of creating and removing the device sysfs attributes directly during probe and remove of the driver, respectively, use dev_groups in struct device_driver to point to the attribute definitions and let the core take care of creating and removing them. No intentional functional impact. Signed-off-by: Svyatoslav Ryhel --- drivers/mfd/lm3533-core.c | 16 ++++++---------- drivers/video/backlight/lm3533_bl.c | 22 ++++++++-------------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/drivers/mfd/lm3533-core.c b/drivers/mfd/lm3533-core.c index 45e7f7481aa0..b03a3ae96c10 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -296,6 +296,11 @@ static struct attribute_group lm3533_attribute_group = =3D { .attrs =3D lm3533_attributes }; =20 +static const struct attribute_group *lm3533_attribute_groups[] =3D { + &lm3533_attribute_group, + NULL, +}; + static int lm3533_device_als_init(struct lm3533 *lm3533) { struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); @@ -416,16 +421,8 @@ static int lm3533_device_init(struct lm3533 *lm3533) lm3533_device_bl_init(lm3533); lm3533_device_led_init(lm3533); =20 - 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; - } - return 0; =20 -err_unregister: - mfd_remove_devices(lm3533->dev); err_disable: lm3533_disable(lm3533); =20 @@ -436,8 +433,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); } @@ -532,6 +527,7 @@ MODULE_DEVICE_TABLE(i2c, lm3533_i2c_ids); static struct i2c_driver lm3533_i2c_driver =3D { .driver =3D { .name =3D "lm3533", + .dev_groups =3D lm3533_attribute_groups, }, .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 4d6f68033480..9ef171d3aaea 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -237,6 +237,11 @@ static struct attribute_group lm3533_bl_attribute_grou= p =3D { .attrs =3D lm3533_bl_attributes }; =20 +static const struct attribute_group *lm3533_bl_attribute_groups[] =3D { + &lm3533_bl_attribute_group, + NULL, +}; + static int lm3533_bl_setup(struct lm3533_bl *bl, struct lm3533_bl_platform_data *pdata) { @@ -304,28 +309,17 @@ static int lm3533_bl_probe(struct platform_device *pd= ev) =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); =20 ret =3D lm3533_bl_setup(bl, pdata); if (ret) - goto err_sysfs_remove; + return ret; =20 ret =3D lm3533_ctrlbank_enable(&bl->cb); if (ret) - goto err_sysfs_remove; + return ret; =20 return 0; - -err_sysfs_remove: - sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group); - - return ret; } =20 static void lm3533_bl_remove(struct platform_device *pdev) @@ -339,7 +333,6 @@ static void lm3533_bl_remove(struct platform_device *pd= ev) bd->props.brightness =3D 0; =20 lm3533_ctrlbank_disable(&bl->cb); - sysfs_remove_group(&bd->dev.kobj, &lm3533_bl_attribute_group); } =20 #ifdef CONFIG_PM_SLEEP @@ -377,6 +370,7 @@ static struct platform_driver lm3533_bl_driver =3D { .driver =3D { .name =3D "lm3533-backlight", .pm =3D &lm3533_bl_pm_ops, + .dev_groups =3D lm3533_bl_attribute_groups, }, .probe =3D lm3533_bl_probe, .remove =3D lm3533_bl_remove, --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (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 CDD0C3D1CD7 for ; Wed, 17 Jun 2026 08:00:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683268; cv=none; b=KoRBbozKqAlRBWCrShouPH/IecM+r9EGh0+muNVs1PasZeGUe2KUeXkIVaCsli/wy6YjLEhL5ANYMQyuyDcXFsZaZOd5QXj5jgi+l2Kdg+3cmuMxZrmkhvqCHZLRvKjPlxiii8nt73zHA/eKofetRjUSAvhAqVJE9u4PsCeamXY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683268; c=relaxed/simple; bh=oSYwJkFhZpnkK8Dp6UPsyNmxh0K/a0yCYhXdKCMJurg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dpkNyxxCrxEDXZgZzJvf35zk/X57rQ+ml71iOQ8O8ozrR+hnCNSKQXNfEfgN7xF5Z1JvxW6fEt9CGdBmBuYkFgucbAFZg6IAMk5XXzYTf2Cj6XU7wAKhc8kxU/N2kzPHDcM6EhNnUIqMOImiwxcCQIMwRKahcj7Us4a9aRc+xm0= 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=fMfzpdbu; arc=none smtp.client-ip=209.85.208.41 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="fMfzpdbu" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-69574a26071so433462a12.0 for ; Wed, 17 Jun 2026 01:00:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683255; x=1782288055; 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=63AMZsneedbXNZidjbhPhyt9D21WN1s2lsrVt9tmNB0=; b=fMfzpdbuYJUxuMw4Nt3q0eLbK9LtbM2TTRaWLRBAtinnNXzcfStY8ocxCBI1TRpMOJ cu6lSt3dYAXh+aiMvLXqpjjJZJn+zlSLGW/edQY6k3my/gexYVXPJmenn6dnJdsQ5PRz kn9JJQnNNTkymsrKXYCAW10xDrLj1ldoS5pnVjWqwspE6TFQ0mPvgq4ACvaKbkV9AlTe uH+MT+NEHvmTYLRuATr506KgPedCOf0dMaJu3XWQHVxCwpoOwg02iIYb5OKB30JrVlav Jim5YiCuYPcj3Or4k5V0af3MSgaOYgRXQL8y1JK+5sV4KSYWZmPudXGdvap+Dqq3WhNY UCtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683255; x=1782288055; 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=63AMZsneedbXNZidjbhPhyt9D21WN1s2lsrVt9tmNB0=; b=AMGqunPSpEY4OBl6Bhg7XBpxmmjLgvLOjfzhoQO0Q9PVjEts8Frt24rXWNlEXZAR8g 8vHPkSw+wVam5JfujgUR7rfweiYCUoDGhsGPbDtMiWW4HdrpE07dGbOkIXlADIlP9/X+ td3jDYo6V+9uIxktYXzgCFihpEvNLkgnzp1+gvuABGKanT7pEBgltspKg57glBOXYm0+ 0LGNMZnjrXguMcQPlATSLccKRsw0nCG+Im4rRN835pYKq697ETSVVvWv2ZauE03lPIE6 t8j538/ddTpzTchIuuly/Jo47v9fBVe2aC7sjloPHYrfu1lJrFQSZ7BKo+mSdM5kC2CG l/OQ== X-Forwarded-Encrypted: i=1; AFNElJ+xNx/KnOWNqRFx3ZabQfVfETv8C3E9hxOoMJ9t3QBdCpQhEmGGAy4kSSUbN/3xdM9uNf4CcxPuBD9xnnQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyqnrCbAMrWwP5H38jhR0pS725cDHEmMdXc/TYmZbx3z66fmxh8 guccdtpHb2+/9/F2qMw7exyM5RwmlfCSOmUquj9VbdD5r7R+ONGf/4aF X-Gm-Gg: AfdE7ckV0nmmE5uYl841VcV9WsIzLoz8gXG/FcKFXF5lVAHQs//Mszw+gSOz1IvJjfr u//9zmrF2No5TWdoCPjOBwznpQUmtRD1FSqaFsBvqAJcVwx32cSOw/Pf7tCz0We3mcAykGcExzq ckFHeTslCBYYWDSlqMjEdP6KUuaKi7aFOBNsJWs5efQX7D2cySTBeV9/CiD/X54jJcXSXx3NcJY nNoi6BXn5pX00CZOUjTqB7qDDJS2EV+z3MQTcvrLJI7u2A13iywDcP3J57IM3VY8tnvb7nd0TVe 6HZkwnlVkKz5pnEsLTYjPqLgKHYQfUVN2Ejw80ZkgE55+knxruQuW7H8uD8kYHrw/i0MvHvp+KI M/d2OSl9BP2rX90CQow4Vp7tJQ/d1mAwX/oQzb9cZH1Vq3slnRlZO8JnCZpWevyFMCdPgpHXjiU qEng== X-Received: by 2002:a17:907:843:b0:bee:f0d5:1c71 with SMTP id a640c23a62f3a-c05a502302bmr183789066b.42.1781683253696; Wed, 17 Jun 2026 01:00:53 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:53 -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 v5 08/14] mfd: lm3533: Convert to use OF bindings Date: Wed, 17 Jun 2026 11:00:25 +0300 Message-ID: <20260617080031.99156-9-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Daniel Thompson (RISCstar) #for backlight --- drivers/iio/light/lm3533-als.c | 67 +++++--- drivers/leds/leds-lm3533.c | 50 ++++-- drivers/mfd/lm3533-core.c | 236 ++++++++++++---------------- drivers/mfd/lm3533-ctrlbank.c | 5 - drivers/video/backlight/lm3533_bl.c | 55 +++++-- include/linux/mfd/lm3533.h | 52 +----- 6 files changed, 220 insertions(+), 245 deletions(-) diff --git a/drivers/iio/light/lm3533-als.c b/drivers/iio/light/lm3533-als.c index 69bac1b202f1..80f8fa700263 100644 --- a/drivers/iio/light/lm3533-als.c +++ b/drivers/iio/light/lm3533-als.c @@ -16,16 +16,19 @@ #include #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_OHMS 1575 +#define LM3533_ALS_RESISTOR_MAX_OHMS 200000 #define LM3533_ALS_CHANNEL_CURRENT_MAX 2 #define LM3533_ALS_THRESH_MAX 3 #define LM3533_ALS_ZONE_MAX 4 @@ -57,6 +60,9 @@ struct lm3533_als { =20 atomic_t zone; struct mutex thresh_mutex; + + u32 r_select; + bool pwm_mode; }; =20 =20 @@ -403,7 +409,7 @@ static ssize_t show_thresh_either_en(struct device *dev, int enable; int ret; =20 - if (als->irq) { + if (als->irq > 0) { ret =3D lm3533_als_get_int_mode(indio_dev, &enable); if (ret) return ret; @@ -425,7 +431,7 @@ static ssize_t store_thresh_either_en(struct device *de= v, u8 zone; int ret; =20 - if (!als->irq) + if (als->irq <=3D 0) return -EBUSY; =20 if (kstrtoul(buf, 0, &enable)) @@ -708,29 +714,38 @@ static const struct attribute_group lm3533_als_attrib= ute_group =3D { .attrs =3D lm3533_als_attributes }; =20 -static int lm3533_als_setup(struct lm3533_als *als, - const struct lm3533_als_platform_data *pdata) +static int lm3533_als_setup(struct lm3533_als *als) { struct device *dev =3D &als->pdev->dev; int ret; =20 + als->pwm_mode =3D device_property_read_bool(dev, "ti,pwm-mode"); + ret =3D regmap_assign_bits(als->regmap, LM3533_REG_ALS_CONF, - LM3533_ALS_INPUT_MODE_MASK, pdata->pwm_mode); + LM3533_ALS_INPUT_MODE_MASK, als->pwm_mode); if (ret) return dev_err_probe(dev, ret, "failed to set input mode %d\n", - pdata->pwm_mode); + als->pwm_mode); =20 /* Bail out when in PWM-mode */ - if (pdata->pwm_mode) + if (als->pwm_mode) return 0; =20 - if (pdata->r_select < LM3533_ALS_RESISTOR_MIN || - pdata->r_select > LM3533_ALS_RESISTOR_MAX) + ret =3D device_property_read_u32(dev, "ti,resistor-ohms", + &als->r_select); + if (ret) + return dev_err_probe(dev, ret, + "failed to ger resistor value\n"); + + if (als->r_select < LM3533_ALS_RESISTOR_MIN_OHMS || + als->r_select > LM3533_ALS_RESISTOR_MAX_OHMS) return dev_err_probe(dev, -EINVAL, "invalid resistor value\n"); =20 + als->r_select =3D DIV_ROUND_UP(2 * MICRO, 10 * als->r_select); + ret =3D regmap_write(als->regmap, LM3533_REG_ALS_RESISTOR_SELECT, - pdata->r_select); + als->r_select); if (ret) return dev_err_probe(dev, ret, "failed to set resistor\n"); =20 @@ -793,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; @@ -803,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; @@ -817,25 +825,27 @@ 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->regmap =3D lm3533->regmap; 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 @@ -854,7 +864,7 @@ static int lm3533_als_probe(struct platform_device *pde= v) err_disable: lm3533_als_disable(als); err_free_irq: - if (als->irq) + if (als->irq > 0) free_irq(als->irq, indio_dev); =20 return ret; @@ -868,13 +878,20 @@ 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) + if (als->irq > 0) 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 0cb0585eb960..ed810c23f30f 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 #include =20 @@ -50,6 +52,9 @@ struct lm3533_led { struct mutex mutex; unsigned long flags; =20 + u32 max_current; + u32 pwm; + bool have_als; }; =20 @@ -616,22 +621,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 @@ -641,12 +644,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; @@ -659,8 +656,6 @@ static int lm3533_led_probe(struct platform_device *pde= v) led->regmap =3D lm3533->regmap; led->have_als =3D lm3533->have_als; =20 - 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; @@ -668,6 +663,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 @@ -680,15 +684,22 @@ 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_MAX_CURRENT_MIN, + LM3533_MAX_CURRENT_MAX); + + device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &led->pwm); + + ret =3D lm3533_led_setup(led); if (ret) goto err_deregister; =20 @@ -725,9 +736,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 b03a3ae96c10..a5aa7da9668b 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 (16 * MICRO) +#define LM3533_BOOST_OVP_MAX (40 * MICRO) =20 #define LM3533_BOOST_FREQ_MASK 0x01 #define LM3533_BOOST_FREQ_SHIFT 0 +#define LM3533_BOOST_FREQ_MIN (500 * HZ_PER_KHZ) +#define LM3533_BOOST_FREQ_MAX (1000 * HZ_PER_KHZ) =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, - }, -}; - /* * HVLED output config -- output hvled controlled by backlight bl */ @@ -301,125 +271,91 @@ static const struct attribute_group *lm3533_attribut= e_groups[] =3D { NULL, }; =20 -static int lm3533_device_als_init(struct lm3533 *lm3533) -{ - struct lm3533_platform_data *pdata =3D dev_get_platdata(lm3533->dev); - int ret; - - 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; -} - -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]); - } - - 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; - } - - 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]); - } - - ret =3D mfd_add_devices(lm3533->dev, 0, lm3533_led_devs, - pdata->num_leds, 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_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_devices; + u32 count =3D 0, reg, nchilds; int ret; =20 - dev_dbg(lm3533->dev, "%s\n", __func__); + nchilds =3D device_get_child_node_count(dev); + if (!nchilds || nchilds > LM3533_CELLS_MAX) + return dev_err_probe(dev, -ENODEV, + "num of child nodes is not supported\n"); =20 - if (!pdata) { - dev_err(lm3533->dev, "no platform data\n"); - return -EINVAL; - } + lm3533_devices =3D devm_kcalloc(dev, nchilds, sizeof(*lm3533_devices), + GFP_KERNEL); + if (!lm3533_devices) + return -ENOMEM; =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"); + device_for_each_child_node_scoped(dev, child) { + if (count >=3D nchilds) + break; + + if (fwnode_device_is_compatible(child, "ti,lm3533-als")) { + lm3533_devices[count].name =3D "lm3533-als"; + lm3533_devices[count].of_compatible =3D "ti,lm3533-als"; + lm3533_devices[count].id =3D PLATFORM_DEVID_NONE; + + lm3533->have_als =3D true; + count++; + } else if (fwnode_device_is_compatible(child, "ti,lm3533-backlight")) { + ret =3D fwnode_property_read_u32(child, "reg", ®); + if (ret || reg >=3D LM3533_HVLED_ID_MAX) { + dev_err(dev, "invalid backlight node %pfw\n", child); + continue; + } + + lm3533_devices[count].name =3D "lm3533-backlight"; + lm3533_devices[count].of_compatible =3D "ti,lm3533-backlight"; + lm3533_devices[count].id =3D reg; + lm3533_devices[count].of_reg =3D reg; + lm3533_devices[count].use_of_reg =3D true; + + lm3533->have_backlights =3D true; + count++; + } else 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 node %pfw\n", child); + continue; + } + + lm3533_devices[count].name =3D "lm3533-leds"; + lm3533_devices[count].of_compatible =3D "ti,lm3533-leds"; + lm3533_devices[count].id =3D reg - LM3533_HVLED_ID_MAX; + lm3533_devices[count].of_reg =3D reg; + lm3533_devices[count].use_of_reg =3D true; + + lm3533->have_leds =3D true; + count++; + } + } =20 lm3533_enable(lm3533); =20 ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, LM3533_BOOST_FREQ_MASK, - pdata->boost_freq << LM3533_BOOST_FREQ_SHIFT); + lm3533->boost_freq << LM3533_BOOST_FREQ_SHIFT); if (ret) { - dev_err(lm3533->dev, "failed to set boost frequency\n"); + dev_err(dev, "failed to set boost frequency\n"); goto err_disable; } =20 ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, LM3533_BOOST_OVP_MASK, - pdata->boost_ovp << LM3533_BOOST_OVP_SHIFT); + lm3533->boost_ovp << LM3533_BOOST_OVP_SHIFT); if (ret) { - dev_err(lm3533->dev, "failed to set boost ovp\n"); + dev_err(dev, "failed to set boost ovp\n"); goto err_disable; } =20 - lm3533_device_als_init(lm3533); - lm3533_device_bl_init(lm3533); - lm3533_device_led_init(lm3533); + ret =3D mfd_add_devices(dev, 0, lm3533_devices, count, NULL, 0, NULL); + if (ret) { + dev_err(dev, "failed to add MFD devices: %d\n", ret); + goto err_disable; + } =20 return 0; =20 @@ -504,7 +440,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); } @@ -518,6 +473,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" }, { } @@ -528,6 +489,7 @@ static struct i2c_driver lm3533_i2c_driver =3D { .driver =3D { .name =3D "lm3533", .dev_groups =3D lm3533_attribute_groups, + .of_match_table =3D lm3533_match_table, }, .id_table =3D lm3533_i2c_ids, .probe =3D lm3533_i2c_probe, diff --git a/drivers/mfd/lm3533-ctrlbank.c b/drivers/mfd/lm3533-ctrlbank.c index 91e13cfa3cf0..3aab8ece4e8c 100644 --- a/drivers/mfd/lm3533-ctrlbank.c +++ b/drivers/mfd/lm3533-ctrlbank.c @@ -13,11 +13,6 @@ =20 #include =20 - -#define LM3533_MAX_CURRENT_MIN 5000 -#define LM3533_MAX_CURRENT_MAX 29800 -#define LM3533_MAX_CURRENT_STEP 800 - #define LM3533_PWM_MAX 0x3f =20 #define LM3533_REG_PWM_BASE 0x14 diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index 9ef171d3aaea..2c24647fc17a 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 #include @@ -29,6 +31,9 @@ struct lm3533_bl { struct backlight_device *bd; int id; =20 + u32 max_current; + u32 pwm; + bool have_als; }; =20 @@ -242,25 +247,25 @@ static const struct attribute_group *lm3533_bl_attrib= ute_groups[] =3D { NULL, }; =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; + u32 default_brightness =3D LM3533_BL_MAX_BRIGHTNESS; int ret; =20 dev_dbg(&pdev->dev, "%s\n", __func__); @@ -269,12 +274,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; @@ -292,13 +291,21 @@ 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; + + device_property_read_u32(&pdev->dev, "default-brightness", + &default_brightness); + 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 default_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); @@ -309,12 +316,19 @@ static int lm3533_bl_probe(struct platform_device *pd= ev) =20 platform_set_drvdata(pdev, bl); =20 - 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_MAX_CURRENT_MIN, + LM3533_MAX_CURRENT_MAX); =20 - ret =3D lm3533_bl_setup(bl, pdata); + device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &bl->pwm); + + ret =3D lm3533_bl_setup(bl); if (ret) return ret; =20 + backlight_update_status(bd); + ret =3D lm3533_ctrlbank_enable(&bl->cb); if (ret) return ret; @@ -366,11 +380,18 @@ 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, .dev_groups =3D lm3533_bl_attribute_groups, + .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 74cfb52c3bd1..5710e88da45d 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -15,6 +15,10 @@ #define LM3533_ATTR_RW(_name) \ DEVICE_ATTR(_name, S_IRUGO | S_IWUSR , show_##_name, store_##_name) =20 +#define LM3533_MAX_CURRENT_MIN 5000 +#define LM3533_MAX_CURRENT_MAX 29800 +#define LM3533_MAX_CURRENT_STEP 800 + struct device; struct gpio_desc; struct regmap; @@ -25,7 +29,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 +44,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; -}; - int lm3533_ctrlbank_enable(struct lm3533_ctrlbank *cb); int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb); =20 --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 BBC5A3D301D for ; Wed, 17 Jun 2026 08:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683267; cv=none; b=AwFbE/B2G004z6Y0fVQDH+ClZyEJhvoSn8xPuWzwPknvGD59mIRYi/KLmcu5c+/MVMtMYvKC8wuoTKz16oPdthgUIOxhXMWeCUseaHCnZsUXc4dJHyKZqlDymqZ6+C3Ah3r63M5RZHNZ6iijHV3HRxuIdrTfB6SFBXI/+M1sdcI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683267; c=relaxed/simple; bh=4WjmiWfFTCp+1bBNDrcHv5gGqTRg8YPvmqnJ/PwH9+s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H4OnzdIhccSlsfuEmm9kpf7JpLogHU0Zg55zd7ERcpN+AO9TivxtPf1lkKL0o1ZVkOE9fb7L6xf6DqQ1evMfwRObf195H2EzGV1HbjpIdk9PUUOPObiJK0p3VCj8btfGcp56tavrbjfGTtpd7zxp1YNqwTHeA/pUPTRJ9XZP/mU= 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=HVF+bSHq; arc=none smtp.client-ip=209.85.218.47 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="HVF+bSHq" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-bec4639953dso931201766b.1 for ; Wed, 17 Jun 2026 01:00:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683256; x=1782288056; 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=bDbkv4yENGcso8lbBuowMRR6EhhW3sM2nEWvZfEX0tI=; b=HVF+bSHqNdQvwqLcn9tqAERPwc90kPjvY1ZlbO9x4CEynUEdYqSkotKSHBTysqh1xa f0Nz9C1tt9TuXyQ0YZ13rtHlKkt2q23ZE22a0rO1zvJTB0ecXWc6xyp5tIu6Ju9YRBW3 4U+gjnfRkDhoYlipuhzNKy6NfC+UXWTaWKzhknJeV4Atb5dU8wHDWScavvsAzrZ05stY F/SwjhQ+AX4yLCqOeHfW+ml3x+Lq8gz5WrV1eHpVV7iWuK2yn+nSwW2HrRGoj3XNT4pF K0/ltZ+jBPHoG8OIpo3bYyIMmjVqezRifhdb5Q6pLRk74EOfwjw1NS4lmoogwi6+jkWS 88Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683256; x=1782288056; 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=bDbkv4yENGcso8lbBuowMRR6EhhW3sM2nEWvZfEX0tI=; b=hs1zH90opNnK0NUdBl9hWLKFsRpSBE3r62yeFkwPjc7ynpNwSC8oDcKaDGPsS5uuJK q+GIHiCFRQ8w3Z2wsXDjkobEmWxdE8UloT7SDSEq2Jrg9I9Lt9L0m12RBweZM++HSoTH 6LtimkaTwbh7skTwd/bi/pPWGb0zmCQc2Vk3dD5mWpk/2aQAkWqGJKiJsDfddg8W5kAI nnI5R9oACqdCt//NCTvfw33trQJhsDrVTbdTla0VDNeyorMz/AtZhX+nDs8l9eW0436Q Ep8hAl/h51UkDjhL2QTwF7MaCvjKYybrNv8xVY58Nd0z71IFiQzqHww34mcWaRTjG+B6 R9zA== X-Forwarded-Encrypted: i=1; AFNElJ9OONIT+L4yMg/GOEx3Awx/4C1wzGxXtK18O0+D0Ovq7teXDF74dpESqMgdaD7s3KhRS42U/6cSP4t1tm0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx69881iB5obbsHCvah0xDmXsZdKT1xFSJsoR1BHX9MqNd7S97O qNFegb5WrX8+neIOPWRsfYsjrcKrI9HBe2ul1Q85tZKh+RqnXBSGfEMS X-Gm-Gg: Acq92OH0g/iZsTMysUk2ucR9v5HL0lePv0gHVivBXiwdAfK7npD9Y7WVB1HG1DdHuAj 7ZxveureteY3ZQF15G7+wv6H+rfNQPeIqswUPSGB/1xXRTN4w8VWAP7nC/kngsTe2/HNQwc8nMn QSVW6yjq8s6BqS4UuRYsZR/12R8Gb8zbKvprj9TEa1X1arRhm6LMgLOPDMZ1m3lFALPB3RbFVcS NybcDP66Tzfvp017vIAciOBwiOp9fUvoII0xQgEYj826614b5mRvLisCA1VpI04m2vGkCscI3JX ToVS2GzHtdODRmotUsnEyxhv1dNyL+AwmkIaMMGuOe7VhgKCvbz9QW/zGh4zwJ1gfQC2oTOAUE4 zMM6VEDk45X+adAfgwLQDE/k0f4GTBHczwfpSomYKee8n1/lWkjBe79O4BbmZO36fzr67+FZCuY 2UVj/5YE0uIuk/ X-Received: by 2002:a17:907:94d6:b0:bec:b4e3:e930 with SMTP id a640c23a62f3a-c05a511f1ccmr158862466b.12.1781683255042; Wed, 17 Jun 2026 01:00:55 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00: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 v5 09/14] mfd: lm3533: Add support for VIN power supply Date: Wed, 17 Jun 2026 11:00:26 +0300 Message-ID: <20260617080031.99156-10-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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 a5aa7da9668b..4b5d94e9ed27 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -113,14 +114,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 { @@ -333,7 +345,9 @@ static int lm3533_device_init(struct lm3533 *lm3533) } } =20 - lm3533_enable(lm3533); + ret =3D lm3533_enable(lm3533); + if (ret) + return ret; =20 ret =3D regmap_update_bits(lm3533->regmap, LM3533_REG_BOOST_PWM, LM3533_BOOST_FREQ_MASK, @@ -447,6 +461,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 5710e88da45d..8f72dd41e8f0 100644 --- a/include/linux/mfd/lm3533.h +++ b/include/linux/mfd/lm3533.h @@ -22,6 +22,7 @@ struct device; struct gpio_desc; struct regmap; +struct regulator; =20 struct lm3533 { struct device *dev; @@ -29,6 +30,7 @@ struct lm3533 { struct regmap *regmap; =20 struct gpio_desc *hwen; + struct regulator *vin_supply; =20 u32 boost_ovp; u32 boost_freq; --=20 2.53.0 From nobody Thu Jun 18 22:06: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 D79083D34BA for ; Wed, 17 Jun 2026 08:00:58 +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=1781683268; cv=none; b=KR+xnidO2IFC/6e9eH0HdOP7Zb/MB/TpU0vr8fAOWaAQWewGlNi8spVvb00KQU2v+XkZybfJ9S2uN91xz5FOrUfXKZwHXbu8RXce1+Q67zcdy/nrQ4mNI2j3O8D93GK9tPzBCee8QnOItkZmnksNEVAQwGRJit8SB9RI+pKQf2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683268; c=relaxed/simple; bh=Gwi2SEZRxxZPvrxGh5xpiGuXapIPqlS3eMFp/EcaCRQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sO0PbN/6ZMXQmb+FNdBWX6BOdUrgFGdWNQ7ybluK8lNgZ7+vUfz0bcRjnZJotXk0h5l/KVdTJjuYIYcf2EYDprz1UxhnvKzOu3JcZVOAFA5uK9pU2Gsg0x1qVrhgnJd+Dh+QlasNhyeqUImXCunkeJy07azooD3+je6rXfuuL4M= 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=kIQvHTqP; 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="kIQvHTqP" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-c0115a3794bso687471866b.0 for ; Wed, 17 Jun 2026 01:00:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683257; x=1782288057; 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=BStSfLs2cVd2uwZhDXiQO2uYMri4qNRZ0wt5dxl+TLw=; b=kIQvHTqPC5VkRUDrpLCtRDZpUvjzaV9nTZdILVN2cxG1d6Oyz9pmvLEnPozk2o1wZo h474uWl/pxK41XGij4r2JYew0UA6KoyoxQyE/39flbfeBxwMwXhYAEAHsyC3c9bNRhP1 hRr3qJGbvH9zCnmKdb3R9hNRrpLxPW/VacDkgecOxXmZSBQ8kPoudHAR/EX9uG1CyiS6 NJk6FGJaTTV2K/HnXKVsolYx0wJUUfT8zwDCCs+ywLPBRJoikv2gWxnYjkov7uKaoG1/ hM5lhI8hzdqZfKo+c6549baqe6L7LV1jel4GgJ+pMV1Q2AF3z9JapDJG+5i7dDswNJkF cUyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683257; x=1782288057; 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=BStSfLs2cVd2uwZhDXiQO2uYMri4qNRZ0wt5dxl+TLw=; b=p1WKSn6dSd5HKED9QRR4o8yuqIzq5pnWLl8Yj2oKQC+NsNDLsKku8VKy/hzsbD8uRB Nyu6IaZ2MO/FfhTl1BjUqXkNDhwPj9TP1Lp2rwLlfRsJf1dhabve+CzfV7yTHjUXMCk6 5E0TwmNN5GMbDKWL8YQ+fpDGFEOsxmaGwXxFf5kUidNC+FX7Evzbx3HHqgVauvE5G+qw YwVUk9QULRQ61fcoDa4m0pO6z99TjEMalNk29cp39w40iuR86puSzol0fybNG4MzYsb5 a79aZz696+bYrl/aBDdV7C3VfSf9T1uITj9B595Th75JPv0q7u4BUoQ7THTljWT25E/W neBQ== X-Forwarded-Encrypted: i=1; AFNElJ9URa64iJOU9fEy78VGtcG8zaE3Wxw+A6NIh2b2JwXsgLl6T+xdQ0XCCc46RQTuKBsLC+u1qgrjj3xCH4o=@vger.kernel.org X-Gm-Message-State: AOJu0Ywm1C6f5Ky+b22pQGv0W9z5gpFrOlaAx/SPW9XQpL10Jyoc6xb+ +Oqj81DEHAIXp6QYKtdOPpH0W41HC0wYzTNQBEJGXeeDf2M5iJl4inMq X-Gm-Gg: AfdE7cmu7fOBR6tpUwWpoB0n1SB5DATfAHnGBuEvT/ZowedXGE/YzE+ZIqXFwjqnac6 eNyr3JktxJlLMO3ikjkWUGBwMI0SfMb6V5XfFzu8/4L10nfrTVgnfIxDUiW8G8FnWRyuXdCoCzg nR7aMiNvLqeFrxIF2jU0QY6+f7X3GtS5cV8Oln9tWrCwS/2GRw1UtuKQHD8NUEodskR1oHXpLhN YMFsqd1FZHX53U8zzrNf1Ndr4/KfQXFlb1RBJ40Sa8WxbEJnAGjEo1d9rVuEuESGUGb/BtoGcDh ILtmE7l6ey4vwdIsSYxg4WeIu3HblRIuFCpkzVQ4R4ezPiqdnpAxL4prbvwdTt5htL/bkw2gYfX psMfy4sLy8wbYudhixT5QHPU67CA7dloKKJCBk5EL9nJ8pPsdeZdzX4a/UdsH7ytetwk+eN0Tif tPHg== X-Received: by 2002:a17:907:928d:b0:bd5:405c:7964 with SMTP id a640c23a62f3a-c05a5219b56mr201079366b.48.1781683256443; Wed, 17 Jun 2026 01:00:56 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:56 -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 v5 10/14] mfd: lm3533: Set DMA mask Date: Wed, 17 Jun 2026 11:00:27 +0300 Message-ID: <20260617080031.99156-11-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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 4b5d94e9ed27..db8581d1b073 100644 --- a/drivers/mfd/lm3533-core.c +++ b/drivers/mfd/lm3533-core.c @@ -480,6 +480,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.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 005D03D4135 for ; Wed, 17 Jun 2026 08:00:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683272; cv=none; b=R4IJ52SIjzkeuWMy2OaQOcZJaxzFTUpReM2Mo7Dv/EKF+v/rZ13w4o9mfqKWzlC0xIhGp85ijIC36NVFxkayuK3BK2tcGI2zSoV9rXbGG1kCS3o8QOjPia/hlyU1p35BjsMWqXsFpfBy0OUPB7t/cp9luvKtzlAa08XhHiQe6Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683272; c=relaxed/simple; bh=KKu9vuzjNh2iqUZwT5xjE/o1dLesFPk+03y2gSGMhFU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bsMwUfxyZ5V36qNWdwJmCLkalaGJ3fYEVtSqSRLnN+d3Vvb6hXJs86kHIdaOS+TGVejZpme8U2p6oz0Vcyl83otydCAieT8n1/48c91RPmAPTpB04t1ja8mLgCZi/dGg5JPldaySUYW+QGfOw8RLt9ninuhxXQJQnLuFigOzT9o= 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=Seuj2uvl; arc=none smtp.client-ip=209.85.208.47 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="Seuj2uvl" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-6919f40a0c8so10133312a12.0 for ; Wed, 17 Jun 2026 01:00:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683258; x=1782288058; 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=2i1k8AoyDEf4+SEcMRPttiYCfUlkSwT7R4ZGBXCsSZk=; b=Seuj2uvl/9+wEOZEUExytld1ZS+46/FfLivxy3+PSQsYqdTMvu7F6JRigSUqqFDFAP Y7OVmlqKdgycRsE2yddzapgI+c5E/Pleyu5ALZJ/fQjqyLf3/T8cuLzI5FgmkK6wi1kG E/WIi+EDZfZHMhzOTYJCfhzlDYQELq3ly+gVdfr3xy0U5wlYY+lL38bpA72TAV13KwTV zcLq+AcHDslSWCp405e4eUG+FdrMkIXyoQORl7drXR6ao4R6Flp8EU4fEBGratJPYAbL cMzJCJIO9bGKDUISVufjCR17iW8CUViJadOQY0ePhKRqvoF4oMMK4uVLYpxzdoEe3/yR blag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683258; x=1782288058; 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=2i1k8AoyDEf4+SEcMRPttiYCfUlkSwT7R4ZGBXCsSZk=; b=a5ViCarnySztzVlkRAYkgv0pIGkmknSei5S0h0dPENT6bx4uFaUuH+phUh+sTPUuJy 5G3zWIbHmJNIJIQjWKlYX9x2UQ/OLuXlj+s0ocd1eEXpBrqybPrq8qhv9oSuWDewDJFp b5VxD9nAOYVlnt7UwwOuagyGyVUVmAwR2C8xRrSSeIiF7b0siPPdTP8FEOR9RzPgO5Jg 9TcP8dggntfDv71LbqH+3I6gLFHWe2b5QMJD134vDiWJvRBjjHEN+ppgfubeRB09KvtV jgqeEWLdGAjUlg4P/hfhJMmO414tpvsUux3VYsYAduK+EPCysQKvtosCvyP7ZpMhPCDF ZnYw== X-Forwarded-Encrypted: i=1; AFNElJ8xEh698F951yurPV9J6IrB8o9K5k9j8J6Sb7Bx7+5FYt8xzI7P5SILmyNlLCH2K5l3CU4Pgb0vPrcr3dE=@vger.kernel.org X-Gm-Message-State: AOJu0YybKqWlU9JLZeRtIRLmfTKFt5Zn4KxYB6OAvUbi8wi09Qua7F4s CnMeOiDjAdmj9lkxM/T1QSJGeW9Tkk9g7vsppIgs8PNjiziLYbFBhw0c X-Gm-Gg: Acq92OE1z+/ohz8qJ95dj7v9xQEg1rPc9xlH4H4SJmXWEfXRd1Xw11v7fGEHUlib0MX YSwjFfIbNin0rH3MnK2IyaN4+wSDtzjDgrfDhBLF8D7YQ2DgnIwLV7WCbyQXodY/hiU40i9TkAS nZ5xtRZ2ZctcPryRLhK4D3d0vJTIPQTO2xPLyEyc4XpC0+RdbiA1C6JH50hdMj6pL5CJDgenDdI 2HLn/l4KF1eFseqAuzy3b3C9iuVjUO/pZJqBH+xukZ9LIYoyT7DLfRbNsgAdCKccEK9Jm2XdihF tfqcA0g9ifGK60Tr+XvJ+GALZzsx6pctNjDtG4VjHXLSssYbsEpnCZWZziB3PhKJkM13/e+xMxR in9H+PyJ91EUpth7+oIiYtqv6Qtw8OHZ/xcjavSPnh3Zo8X1+6cloYQrK0ba4Igs5+N2kw04Xa9 lONg== X-Received: by 2002:a17:907:9305:b0:bfe:ed06:5a1f with SMTP id a640c23a62f3a-c05a83a199dmr195494666b.52.1781683257844; Wed, 17 Jun 2026 01:00:57 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00: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 v5 11/14] video: backlight: lm3533_bl: Improve logic of sysfs functions Date: Wed, 17 Jun 2026 11:00:28 +0300 Message-ID: <20260617080031.99156-12-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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" Simplify the sysfs logic of properties by switching to macros and proper regmap helpers. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Daniel Thompson (RISCstar) --- drivers/video/backlight/lm3533_bl.c | 62 ++++++++++------------------- 1 file changed, 22 insertions(+), 40 deletions(-) diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index 2c24647fc17a..9eb0db640948 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -23,6 +23,8 @@ #define LM3533_BL_MAX_BRIGHTNESS 255 =20 #define LM3533_REG_CTRLBANK_AB_BCONF 0x1a +#define CTRLBANK_AB_BCONF_ALS(n) BIT(2 * (n)) +#define CTRLBANK_AB_BCONF_MODE(n) BIT(2 * (n) + 1) =20 =20 struct lm3533_bl { @@ -85,88 +87,68 @@ static ssize_t show_als_channel(struct device *dev, return scnprintf(buf, PAGE_SIZE, "%u\n", channel); } =20 -static ssize_t show_als_en(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t show_als_en(struct device *dev, struct device_attribute *at= tr, + char *buf) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); - u32 val; - u8 mask; - bool enable; int ret; =20 - ret =3D regmap_read(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &val); - if (ret) + ret =3D regmap_test_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, + CTRLBANK_AB_BCONF_ALS(ctrlbank)); + if (ret < 0) return ret; =20 - mask =3D 1 << (2 * ctrlbank); - enable =3D val & mask; - - return scnprintf(buf, PAGE_SIZE, "%d\n", enable); + return scnprintf(buf, PAGE_SIZE, "%d\n", ret); } =20 -static ssize_t store_als_en(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) +static ssize_t store_als_en(struct device *dev, struct device_attribute *a= ttr, + const char *buf, size_t len) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); int enable; - u8 mask; int ret; =20 if (kstrtoint(buf, 0, &enable)) return -EINVAL; =20 - mask =3D 1 << (2 * ctrlbank); - ret =3D regmap_assign_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, - mask, enable); + CTRLBANK_AB_BCONF_ALS(ctrlbank), enable); if (ret) return ret; =20 return len; } =20 -static ssize_t show_linear(struct device *dev, - struct device_attribute *attr, char *buf) +static ssize_t show_linear(struct device *dev, struct device_attribute *at= tr, + char *buf) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); - u32 val; - u8 mask; - int linear; + int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); int ret; =20 - ret =3D regmap_read(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, &val); - if (ret) + ret =3D regmap_test_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, + CTRLBANK_AB_BCONF_MODE(ctrlbank)); + if (ret < 0) return ret; =20 - mask =3D 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); - - if (val & mask) - linear =3D 1; - else - linear =3D 0; - - return scnprintf(buf, PAGE_SIZE, "%x\n", linear); + return scnprintf(buf, PAGE_SIZE, "%x\n", ret); } =20 -static ssize_t store_linear(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t len) +static ssize_t store_linear(struct device *dev, struct device_attribute *a= ttr, + const char *buf, size_t len) { struct lm3533_bl *bl =3D dev_get_drvdata(dev); + int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); unsigned long linear; - u8 mask; int ret; =20 if (kstrtoul(buf, 0, &linear)) return -EINVAL; =20 - mask =3D 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); - ret =3D regmap_assign_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, - mask, linear); + CTRLBANK_AB_BCONF_MODE(ctrlbank), linear); if (ret) return ret; =20 --=20 2.53.0 From nobody Thu Jun 18 22:06: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 92ABB3CF96B for ; Wed, 17 Jun 2026 08:01:01 +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=1781683273; cv=none; b=Z0IcOLlnVk92cnFS2P8T+a3FBPxPzKdbUozYe4SBS7x64lSpREPb6Ve6muYn91DMXM2G7YuClnvRi+K9a+89Kzn2a1RKj0KazVtg68zl07eipO4Xjjqv25Gev0QWItpuTa0g+qEUwyM90lMRrAy/i0IX9pitUvY2VxTxtuPk4ko= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683273; c=relaxed/simple; bh=Ls0b0vD2wig6OC9g77u6/BGQVzYqGOsH2nEh1F6Jtno=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F4wiKAzTtFl2snLz0E5WaV84CO9FUt3F0oupZ7uAA7uxVudEuVqwvsHITXXJjMSOg5wdFh5Uy/42qCGcjX93z3fNUXPJyPA9eobLebqxpuGUimNQZKsMK9P9WwPhepiuettwB2qjliY+A9/OwKwq/tRjNhau/HkviRQRl0LRm+U= 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=j55C8Dpw; 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="j55C8Dpw" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-bdb3fd39045so794341466b.3 for ; Wed, 17 Jun 2026 01:01:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683260; x=1782288060; 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=iTLq06Trmxaj5LKPvLHLVj78rBrJr8ohTB02upYl/fw=; b=j55C8Dpw4JAjpowjX5MRGoQSu11jbYYeo6Zl4jngfa7KhsF/kDxBkNiNIbB3DDTU1M wPSA9RLVxsiaY1PpRPGEzt5DVTEr0KecZ+S72Qac0e98lOmV+U62TisaDvJRbgQ+0IQI S3hhEjGK+bz93ZR9xIXDP8vPetOaFqWE19npJqo3Fe8DWRDe3hu1+iVpCzJ8bePJETXB NNDicfx7oQGavFEabaO8h/fF9m0Mpj4JEsuMdYNFBJE9tptyGMwJs8V/s/6DOGGWm8Je PKkPTUxBYKuBCoLElUszqDDZMrSn7hpTKsL1EqbeB6vT7Fn/j9YW7Xm7B7uxqp5+fGJ9 JZHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683260; x=1782288060; 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=iTLq06Trmxaj5LKPvLHLVj78rBrJr8ohTB02upYl/fw=; b=aKcfqc3wcW5KCksLnCWMMmeox5bHRyVyS1XOj3T+BpPfQuunke/rEarPDjWr/0w5v8 2waSO6pXMTC43rd/Y0hJl0L2IXWXDuwHofW6kL20v8dSTaZZ0xyHyYbI78Sa7+VyZcwk yb3/bOxURwZb1gX5vu7YUIgN0hguNP17qaIKQXUREglLSCbAvSBvAur1wAHXvIHgPeQS nEx2NXeAj4w7tSUynFO2hj1oNntWckLs5wL7DMHtgLC8D/3AZvs3SzHaYZUtHUN2uN7s Hxmar9ZLDcVSBhbSbynH55Gm+5oIuOg0D6TZWhAqubACvkfK2JLXqRiefTorqlPmTpjX c6ng== X-Forwarded-Encrypted: i=1; AFNElJ+Ivjtp1UQPYuVmHeH5Vh+OgpKlefDQPO3OXvK17i0CqnJdMwKmkqBhVrweqUtHosvURyjXQIHgtVzWoJQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwtrosJ+DyCEIqcXbmyW61A3ObEXJFDMGWFwurnalyhURL7YBwu Lq6qDsd48TEIHrhxfRo/9Aa2m/KqWCO3Yxz2lvubMcBG9BvPK9N0hgR/ X-Gm-Gg: Acq92OEN2WzKtgDq2+Zxhvd2cj8Qa+lqTmXYB7mnwHrAaBqNv6Cg3Um77voACs7MkwB Z0OSd9pJ6EPbklNDLG3wfFENIL/priyHVy1twOL3tmqncSJGVM/dSiySY6LCadcAzDvGDaU9Bog 5h9KHpOTglUynzHeZW9Z+63Lu/gfHJ35uygLEW6W2okrhXaxNy+SifYNPVFyAnmmOE8OCPE3JZp jjqo6GAB/+evksqZVY6fKz5c+IWTaRpDg/EPb2pcrvbvDBL1QtydNelI0GzPFit7B4cmvfcLFfr OngHT6CD4xnPSA19ivHOugWw1sNRTJFe3Ujv7BFk6wmnbJ3CdnyblesPkgrD84m5CUWbE4yrjqw 7OlzqVQp55fCuEeMYSQPy2slIfq+sPMjrRzagSv9J7ZsvruU49tVlRL7710ismD4IITnMdiMTXu 6NCQ== X-Received: by 2002:a17:907:da4:b0:bf9:ad4f:4437 with SMTP id a640c23a62f3a-c05a6105803mr189014466b.3.1781683259392; Wed, 17 Jun 2026 01:00:59 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:00:58 -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 v5 12/14] video: backlight: lm3533_bl: Set initial mapping mode from DT Date: Wed, 17 Jun 2026 11:00:29 +0300 Message-ID: <20260617080031.99156-13-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Daniel Thompson (RISCstar) --- drivers/video/backlight/lm3533_bl.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index 9eb0db640948..d003d5802508 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -37,6 +37,7 @@ struct lm3533_bl { u32 pwm; =20 bool have_als; + bool linear; }; =20 =20 @@ -231,8 +232,14 @@ static const struct attribute_group *lm3533_bl_attribu= te_groups[] =3D { =20 static int lm3533_bl_setup(struct lm3533_bl *bl) { + int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); int ret; =20 + ret =3D regmap_assign_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, + CTRLBANK_AB_BCONF_MODE(ctrlbank), bl->linear); + if (ret) + return ret; + ret =3D lm3533_ctrlbank_set_max_current(&bl->cb, bl->max_current); if (ret) return ret; @@ -286,6 +293,9 @@ static int lm3533_bl_probe(struct platform_device *pdev) props.max_brightness =3D LM3533_BL_MAX_BRIGHTNESS; props.brightness =3D default_brightness; =20 + bl->linear =3D device_property_read_bool(&pdev->dev, + "ti,linear-mapping-mode"); + bd =3D devm_backlight_device_register(&pdev->dev, name, &pdev->dev, bl, &lm3533_bl_ops, &props); if (IS_ERR(bd)) { --=20 2.53.0 From nobody Thu Jun 18 22:06: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 552FE3D6CA6 for ; Wed, 17 Jun 2026 08:01:03 +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=1781683274; cv=none; b=I+fzuiCwmtigdUnsrTEB70aySpGC/oMz9hA2JSLcgWG1BZ4IW0u6bGQIF8AbI17YeWqadLwCg5BWsYRYVZqbfs8fbnhYfJZQ0JMelx5rGc5IteTBQLJrKhFiUMun7eQebbBJWmh8DYgRAWZ00dXb8btlpeJIDevQbzVoSHgnzIs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683274; c=relaxed/simple; bh=Q1JWkYH2GSDGMyhqdA0zssbSLknV+F95UIDG9qxluu8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mYJb2MJOeTk7HjT0P/+HuOsnfVqCQxzU7NDjFk8Ut3C8pNGM3mlmHVWQitP9JPH7o4Kvz2aXrSZfSjZieCuMgUGPrU7z0n4HnZzCPE2HfFL06/chjf7Rde1cC6m3ikunk8EgdPmwjBjqmlWrUkr+79AJvCsWBuwqzro8lQzuR/Q= 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=bIfIV5sb; 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="bIfIV5sb" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-bf1cdcfd6deso655468466b.3 for ; Wed, 17 Jun 2026 01:01:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683261; x=1782288061; 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=Bd9XYaCysxrts0G4Y5wJXzVAEaPGW9YIawHblvLTeko=; b=bIfIV5sbroPAw97RqiqgQ+MThuJpMEFyw3O3WLVQIPxPBnMkmGKvcckah2q+aG22su Hgmu89MMq7FKnF/RBTR/EIkxp3yzNf8cpiT9jadV2zJ0sQgWQzDcB0eR8A+PP4kvrBFD ehGD1ARdat+lrWTL2WY0pl0udfmrBZapVacR/nZaDbV6OQwC+UwJ5fr5t2akXDbiRGc5 oDxCtuaBRg4BNdGWlH/nuwZvWVqEs9safzkRibC7R1w3ntqa2i3iKlY0ToA6sdFxzk4/ xqGc2N1VWEERlHYnerLklN6fiGGXQoPT3JpgmYb4w6c4euT35PSjs8+wjBJ6tQ1yo88j 8Raw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683261; x=1782288061; 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=Bd9XYaCysxrts0G4Y5wJXzVAEaPGW9YIawHblvLTeko=; b=Ow7PZV8EAiH3j0qO5xen6rUxz7ll0KFa+Qe2fTGLDy3QNelA+jNnIRP5P1xHhx1e9O 2FeRgg0M5E9x3IYlkH10ExqgzC1t89cShTAyMornEdfp5nkyiIu8UvEfDXsitafJI0Ht v2AmEoVPNnDKf6lzAq1PcrvepLzhKEcRifSE38som+fhzcn4eK41a80i6FEek0HNtess 1ncFSZN+uS2JW3njIdTKrS8ssKGhXFaPiKN1reYL4USvr0r99BCo+U70/7GJzneUIGKp 37ITTWyKQMBNFTyQfH1VuIkaWP/DD/06QaJEkOMWFKWOuWhAAS2ThdjFZIiOVR543EIf hMEg== X-Forwarded-Encrypted: i=1; AFNElJ+UBMzoAfxXoJWHYduF00wN0vGfQrDI87GBMrN5WFGsi13ksYllQ8NdDPRE6e2+IZNRZDy3iz4rx0IQ05Y=@vger.kernel.org X-Gm-Message-State: AOJu0YztlX7onvQTN1m74Z2nVG1Z3yhKT3oZvRqaKr5ICIuT16PGrW8D p0Y/BlxJVoYPAJIDhb/8Bp2QOC1CkXcVLjZgafkHCHR4oBkvCYf20hMV X-Gm-Gg: Acq92OE/jK8tYyxHXBo4kDT5l1Z+Kc93eye6F3g5wp3ACx8Y9S/NOelyY6PvTKjSmJu xN9OYR83fO4A2FWwUPchW3qua07nLFRkjfbjzayf17TY9PLo3lAW0M8Kx1W3zEkQZUi0o4GPiwa weoiQu22VLvmwDdczoEhWBmlLYucb3I14XzYJkFeYI/0DDSGXGzETO0NtO+XnOlzbXkEvs8Iwqp Lzoyj0HhA7RlJZvqsiKk66nDcxA6Ky2S/UnrlEgMuI5dZPYUWxdlsbM/GWknz8Q+jJvTrf4/xri 1YO0H/9ixL5Xv94ouf9C/S+d+Yj6oIQEted2TWZH6nlcpRhaOOh9ApU0voZGe3g/5WIH9ghxN5B OpSqMMSYm/wQFXda7L9rcxKZl+RkR0yfzHblDg5UgC1n0635iWFzWSY7aXacKPuKNWE9PHSV6zi JOMw== X-Received: by 2002:a17:907:b03:b0:bee:875d:af12 with SMTP id a640c23a62f3a-c05a09bc11dmr128164966b.0.1781683260892; Wed, 17 Jun 2026 01:01:00 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.00.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:01:00 -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 v5 13/14] video: backlight: lm3533_bl: Implement backlight_scale property Date: Wed, 17 Jun 2026 11:00:30 +0300 Message-ID: <20260617080031.99156-14-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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 the device supports linear and non-linear modes, implement the backlight_scale property to describe this state. Signed-off-by: Svyatoslav Ryhel Reviewed-by: Daniel Thompson (RISCstar) --- drivers/video/backlight/lm3533_bl.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/video/backlight/lm3533_bl.c b/drivers/video/backlight/= lm3533_bl.c index d003d5802508..c99fc68cb669 100644 --- a/drivers/video/backlight/lm3533_bl.c +++ b/drivers/video/backlight/lm3533_bl.c @@ -142,6 +142,7 @@ static ssize_t store_linear(struct device *dev, struct = device_attribute *attr, { struct lm3533_bl *bl =3D dev_get_drvdata(dev); int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); + struct backlight_device *bd =3D bl->bd; unsigned long linear; int ret; =20 @@ -153,6 +154,9 @@ static ssize_t store_linear(struct device *dev, struct = device_attribute *attr, if (ret) return ret; =20 + bd->props.scale =3D linear ? BACKLIGHT_SCALE_LINEAR : + BACKLIGHT_SCALE_NON_LINEAR; + return len; } =20 @@ -295,6 +299,8 @@ static int lm3533_bl_probe(struct platform_device *pdev) =20 bl->linear =3D device_property_read_bool(&pdev->dev, "ti,linear-mapping-mode"); + props.scale =3D bl->linear ? BACKLIGHT_SCALE_LINEAR : + BACKLIGHT_SCALE_NON_LINEAR; =20 bd =3D devm_backlight_device_register(&pdev->dev, name, &pdev->dev, bl, &lm3533_bl_ops, &props); --=20 2.53.0 From nobody Thu Jun 18 22:06:05 2026 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (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 9793A3D7D95 for ; Wed, 17 Jun 2026 08:01:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683278; cv=none; b=KTpoD5jqzjm4HKvp/Fjbid5oLozEe09YMQHPzes+fh1nUMAutXnLWQ9K9LRi8G7hczVE5PLAuCYGU6wB2fFM90SxgCbZ/9VHKE53MpIZ5/eRQEYKHzgzI0d8fROZ2Dl4y5L93Lol4TbQQrNXCTK7ALpr5uOtC6uVK4aYQ2ydZow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781683278; c=relaxed/simple; bh=/uzMDa/Qq+h3z+mWxCj74u9KaQuuNkmAuhmbHq8QMFQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TqLhQ2z80u4TdhqwFPR2sPlKA2+y3R37j3Z8jixgTOib6TtYGE0Rfkda1WanW+8OILhaCUztnCk0PFqePGfMDg+u7o4tdqsw+zPU3wl+YZeroijBvTCrO9Bzt7sBCKpVwrsZrEepyC8iHSgMrp4NF9seSEQmragXP5LyaT53TL4= 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=MIhj4OO9; arc=none smtp.client-ip=209.85.208.52 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="MIhj4OO9" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-69531108f25so1774409a12.2 for ; Wed, 17 Jun 2026 01:01:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781683264; x=1782288064; 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=SSD+o5Il4q3N15GHNpu+Bn3w6lF4AaqNR4K4QWPriYo=; b=MIhj4OO9jXtutz0acSiwlbCRMKJXNqVi6GY9VagYQBArS2qx6eRRcBdhf9Y1ZpOUBr AzJYakjD6QnJmr4xBoXAKQGUbwcsNrYM4TTyvC5fxf3jMNbOobKv3Zsbr10iUYxf5zP+ TDtw6EW6ARF2sISKC5ksSPqakWRB8DH94Qc9Y8xjSZigmr1ewcoagdkxjrFSn8D9t3e1 qvKfCRGKo803MImW9Pom9hgrsvr+5wHuXtC8K1GlRuOD3CStmjmD8xd1EzOxR3j4bM0V jXNXlVg7xl/wqQEpV9Lj4yEgJKwpQOI4JryuEBsrv9YmjQw5QZZ+uEvaqyEFNBnVzRxD /vFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781683264; x=1782288064; 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=SSD+o5Il4q3N15GHNpu+Bn3w6lF4AaqNR4K4QWPriYo=; b=am7pwzPV+yL7upULD52PYssI3M279tyBODpsDF0XZu423fXN9TufBSGffCSjNDIf4R bR+/ZqQJNurIrJDu5SbeHzMs6Rw8glR68Is/WlNfSqncI2y9LCbi+NiFXgNOom8sJQlY 5iWsTdLmrnNycI6romkVFAxev7kzOxICB6/CJs8Ly8Z0iXjs25z/UygM8LmcYLlmA0+e 9IOU7DwORuvpOm9RV9lFDhE6BgizKnje/MWiN7YSwm+Lh+tGxZCmisIPYg9Rx8kszcgK ftX/7G0FDBNpqmx8xjH8yJIsVu96+AKR3cdo1stmsbZRZnbiaSleowxMlujgE8zRDIVa nakQ== X-Forwarded-Encrypted: i=1; AFNElJ+mvnQqVqyJGwioI+Aw47ZV0Po6MEEeD7/fAkGKw02YVD/5LIq7qd/cXTpvWzNeVGXegI2ylldTpiaP9Lk=@vger.kernel.org X-Gm-Message-State: AOJu0YxQqcdzGfqc2EZhO6eQ0zup2m6vmIJmEd6H5PC/ImMUjvq4ahwc +ZQOgA8XA+/2clCjoqK5rz6oHSrlcsRXlz0DwDFALKTzYe+rnGsjUxp2 X-Gm-Gg: AfdE7cnaxiVvAvO/DfFG5jXp6owrGyLkA67dngqOLf0eb0Q6KXwF7Gn8f6cGJ/AHn0h YEyCeCwIpB63/JTVhpZFb2Io5TFuMf3mqF0Wr6tFBte1oOLhfiDF8xJXMRSxMviq9qlz0YOcGp6 5kJqjBfl0YitjqT9VsZv7MfpzoJmfjFh3E0gCPPSP1615IXFyggYIcB9u95THOqT/nYTIR9aaGM IqbYSZaZr0gH4+uAqILfVhZGnaNpouwtrDWbRWqkmeL88I5bdNzD4Hh3h2U2Jn/ZMTwt987NtaA 23WkpIDf/q/hRmYfHecbvdhZtJUUW2G0/qrH/cMarQq4NaUR1Y74EBpO42ZfgkIcmNAlmXz/eo/ dCf3NR4VucwVjW5Yn+HZ4XfYaXIHsrULSgtk3CfNsuxcFUJPd+CjCZmP01jv9BRDZODwq5HPjlg e4PQ== X-Received: by 2002:a17:907:9452:b0:bee:bcf6:6a22 with SMTP id a640c23a62f3a-c05a511eb50mr157102166b.44.1781683262372; Wed, 17 Jun 2026 01:01:02 -0700 (PDT) Received: from xeon ([188.163.112.61]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-bfdb058fa59sm755339766b.0.2026.06.17.01.01.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Jun 2026 01:01:01 -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 v5 14/14] video: leds: backlight: lm3533: Support getting LED sources from DT Date: Wed, 17 Jun 2026 11:00:31 +0300 Message-ID: <20260617080031.99156-15-clamor95@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260617080031.99156-1-clamor95@gmail.com> References: <20260617080031.99156-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 | 60 +++++++++++++++++++++++++++++ drivers/video/backlight/lm3533_bl.c | 45 ++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c index ed810c23f30f..9e07953814fd 100644 --- a/drivers/leds/leds-lm3533.c +++ b/drivers/leds/leds-lm3533.c @@ -27,6 +27,11 @@ #define LM3533_ALS_CHANNEL_LV_MIN 1 #define LM3533_ALS_CHANNEL_LV_MAX 2 =20 +#define LM3533_REG_OUTPUT_CONF1 0x10 +#define OUTPUT_CONF1_SHIFT 2 +#define OUTPUT_LVLED_MASK 0x3 +#define LM3533_REG_OUTPUT_CONF2 0x11 +#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 @@ -55,6 +60,9 @@ struct lm3533_led { u32 max_current; u32 pwm; =20 + int num_leds; + u32 leds[LM3533_LVCTRLBANK_MAX]; + bool have_als; }; =20 @@ -623,8 +631,36 @@ static const struct attribute_group *lm3533_led_attrib= ute_groups[] =3D { =20 static int lm3533_led_setup(struct lm3533_led *led) { + u32 output_cfg_shift =3D 0; + u32 output_cfg_val =3D 0; + u32 output_cfg_mask =3D 0; int ret; =20 + if (led->num_leds) { + for (int i =3D 0; i < led->num_leds; i++) { + if (led->leds[i] >=3D LM3533_LVCTRLBANK_MAX) + continue; + + output_cfg_shift =3D led->leds[i] * 2; + output_cfg_val |=3D led->id << output_cfg_shift; + output_cfg_mask |=3D OUTPUT_LVLED_MASK << output_cfg_shift; + } + + /* LVLED1, LVLED2 and LVLED3 */ + ret =3D regmap_update_bits(led->regmap, LM3533_REG_OUTPUT_CONF1, + output_cfg_mask << OUTPUT_CONF1_SHIFT, + output_cfg_val << OUTPUT_CONF1_SHIFT); + if (ret) + return ret; + + /* LVLED4 and LVLED5 */ + ret =3D regmap_update_bits(led->regmap, LM3533_REG_OUTPUT_CONF2, + output_cfg_mask >> OUTPUT_CONF2_SHIFT, + output_cfg_val >> OUTPUT_CONF2_SHIFT); + if (ret) + return ret; + } + ret =3D lm3533_ctrlbank_set_max_current(&led->cb, led->max_current); if (ret) return ret; @@ -699,6 +735,30 @@ static int lm3533_led_probe(struct platform_device *pd= ev) =20 device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &led->pwm); =20 + /* + * 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. + */ + led->num_leds =3D device_property_count_u32(&pdev->dev, "led-sources"); + if (led->num_leds > LM3533_LVCTRLBANK_MAX) { + dev_err(&pdev->dev, "num of LED sources exceeds max %d: %d\n", + LM3533_LVCTRLBANK_MAX, led->num_leds); + ret =3D -EINVAL; + goto err_deregister; + } + + if (led->num_leds < 0) + led->num_leds =3D 0; + + if (led->num_leds > 0) { + 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 c99fc68cb669..b3e5b3042d34 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 @@ -22,6 +23,7 @@ #define LM3533_HVCTRLBANK_COUNT 2 #define LM3533_BL_MAX_BRIGHTNESS 255 =20 +#define LM3533_REG_OUTPUT_CONF1 0x10 #define LM3533_REG_CTRLBANK_AB_BCONF 0x1a #define CTRLBANK_AB_BCONF_ALS(n) BIT(2 * (n)) #define CTRLBANK_AB_BCONF_MODE(n) BIT(2 * (n) + 1) @@ -36,6 +38,9 @@ struct lm3533_bl { u32 max_current; u32 pwm; =20 + int num_leds; + u32 led_strings[LM3533_HVCTRLBANK_COUNT]; + bool have_als; bool linear; }; @@ -237,6 +242,8 @@ static const struct attribute_group *lm3533_bl_attribut= e_groups[] =3D { static int lm3533_bl_setup(struct lm3533_bl *bl) { int ctrlbank =3D lm3533_bl_get_ctrlbank_id(bl); + u32 output_cfg_val =3D 0; + u32 output_cfg_mask =3D 0; int ret; =20 ret =3D regmap_assign_bits(bl->regmap, LM3533_REG_CTRLBANK_AB_BCONF, @@ -244,6 +251,21 @@ static int lm3533_bl_setup(struct lm3533_bl *bl) if (ret) return ret; =20 + if (bl->num_leds) { + for (int i =3D 0; i < bl->num_leds; i++) { + if (bl->led_strings[i] >=3D LM3533_HVCTRLBANK_COUNT) + continue; + + output_cfg_val |=3D ctrlbank << bl->led_strings[i]; + output_cfg_mask |=3D BIT(bl->led_strings[i]); + } + + ret =3D regmap_update_bits(bl->regmap, LM3533_REG_OUTPUT_CONF1, + output_cfg_mask, output_cfg_val); + if (ret) + return ret; + } + ret =3D lm3533_ctrlbank_set_max_current(&bl->cb, bl->max_current); if (ret) return ret; @@ -321,6 +343,29 @@ static int lm3533_bl_probe(struct platform_device *pde= v) =20 device_property_read_u32(&pdev->dev, "ti,pwm-config-mask", &bl->pwm); =20 + /* + * 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. + */ + bl->num_leds =3D device_property_count_u32(&pdev->dev, "led-sources"); + if (bl->num_leds > LM3533_HVCTRLBANK_COUNT) { + dev_err(&pdev->dev, "num of LED sources %d exceeds max %d\n", + bl->num_leds, LM3533_HVCTRLBANK_COUNT); + return -EINVAL; + } + + if (bl->num_leds < 0) + bl->num_leds =3D 0; + + if (bl->num_leds > 0) { + ret =3D device_property_read_u32_array(&pdev->dev, "led-sources", + bl->led_strings, + bl->num_leds); + if (ret) + return dev_err_probe(&pdev->dev, ret, + "failed to get led-sources\n"); + } + ret =3D lm3533_bl_setup(bl); if (ret) return ret; --=20 2.53.0