RE: [PATCH v1 1/2] dt-bindings: backlight: Add MPS MP3309C

From: Flavio Suligoi
Date: Tue Aug 29 2023 - 10:19:40 EST


Hi Krzysztof,

Thanks for your quick replay and corrections!
Just some questions about some of your remarks:

> > @@ -0,0 +1,202 @@
> > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) %YAML 1.2
> > +---
>
> > +
> > + reg:
> > + maxItems: 1
> > +
> > + mps,dimming-mode:
> > + description: The dimming mode (PWM or analog by I2C commands).
> > + $ref: '/schemas/types.yaml#/definitions/string'
>
> Drop quotes, you should see warnings for this.
>
> It does not look like you tested the bindings, at least after quick look. Please
> run `make dt_binding_check` (see
> Documentation/devicetree/bindings/writing-schema.rst for instructions).
> Maybe you need to update your dtschema and yamllint.
>
> > + enum:
> > + - pwm
> > + - analog-i2c
>
> Why do you think this is a property of a board? Is PWM signal optional?
> If so, its presence would define it. Otherwise it seems you want to control the
> driver.
>

The MP3309C device always need a I2C bus to rd/wr its internal registers.
But the brightness can be controlled in one of the following ways (mutually exclusive,
but mandatory):
- a PWM input signal
or
- a I2C command
So, the driver needs a property to select the dimming mode used; this property is mandatory.
This is the reason of the existence of the ' mps,dimming-mode' property.
PWM signal is not optional, it is required if and only if the 'pwm' dimming mode is used.
If the 'analog-i2c' dimming mode is used, instead, the PWM signal must not be used.
So the property 'mps,dimming-mode' controls how the MP3309C is used.
I can add more details about this in the description section.
...

> > +
> > + mps,overvoltage-protection-13v:
> > + description: overvoltage protection set to 13.5V.
> > + type: boolean
> > + mps,overvoltage-protection-24v:
> > + description: overvoltage protection set to 24V.
> > + type: boolean
> > + mps,overvoltage-protection-35v:
> > + description: overvoltage protection set to 35.5V.
> > + type: boolean
>
> Nope for these three. Use -microvolt suffix for one property.

Ok

>
> > +
> > + mps,reset-gpios:
> > + description: optional GPIO to reset an external device (LCD panel, FPGA,
> > + etc.) when the backlight is switched on.
> > + maxItems: 1
>
> No, you should not add here GPIOs for other devices.

Do you mean that I have to remove this property or that I have to move it somewhere else?
I added this feature because sometimes, in embedded boards, you need a pulse signal to
use after the backlight probing, for example to reset another device in sync with the backlight
probe.
Do you think I have to remove this feature from the driver?

...

> > +allOf:
> > + - $ref: common.yaml#
> > + - if:
> > + properties:
> > + mps,dimming-mode:
> > + contains:
> > + enum:
> > + - pwm
> > + then:
> > + required:
> > + - pwms
>
> So this proves the point - mps,dimming-mode looks redundant and not
> hardware related.

See my previous comment.

>
> > + not:
> > + required:
> > + - enable-gpios
> > +
> > + - if:
> > + properties:
> > + mps,dimming-mode:
> > + contains:
> > + enum:
> > + - analog-i2c
> > + then:
> > + required:
> > + - enable-gpios
> > + not:
> > + required:
> > + - pwms
> > +
> > +required:
> > + - compatible
> > + - reg
> > + - mps,dimming-mode
> > + - max-brightness
> > + - default-brightness
> > +
> > +additionalProperties: false
>
> Instead:
> unevaluatedProperties: false
>

Ok

> > +
> > +examples:
> > + - |
> > + #include <dt-bindings/gpio/gpio.h>
> > + i2c3 {
>
> i2c
>
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + clock-frequency = <100000>;
>
> Drop
>
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&pinctrl_i2c3>;
> > + status = "okay";
>
> Drop all except of cells.

Ok

>
> > +
> > + /* Backlight with PWM control */
> > + backlight_pwm: backlight@17 {
> > + compatible = "mps,mp3309c-backlight";
> > + reg = <0x17>;
> > + mps,dimming-mode = "pwm";
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&pinctrl_fpga_reset>;
> > + pwms = <&pwm1 0 3333333 0>; /* 300 Hz --> (1/f) * 1*10^9 */
> > + max-brightness = <100>;
> > + default-brightness = <80>;
> > + mps,switch-on-delay-ms = <800>;
> > + mps,switch-off-delay-ms = <10>;
> > + mps,overvoltage-protection-24v;
> > +
> > + /*
> > + * Enable an FPGA reset pulse when MIPI data are stable,
> > + * before switch on the backlight
> > + */
> > + mps,reset-gpios = <&gpio4 20 GPIO_ACTIVE_HIGH>;
>
> Nope, nope. FPGA reset pin is not related to this device.

See my previous comment/question about this feature.

>
> > + mps,reset-on-delay-ms = <100>;
> > + mps,reset-on-length-ms = <10>;
> > + };
> > + };
> > +
> > + - |
> > + #include <dt-bindings/gpio/gpio.h>
> > + /* Backlight with analog control via I2C bus */
> > + i2c3 {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + clock-frequency = <100000>;
> > + pinctrl-names = "default";
> > + pinctrl-0 = <&pinctrl_i2c3>;
> > + status = "okay";
>
> Drop entire example. It differs by one property - missing pwms.

Ok

>
>
> Best regards,
> Krzysztof

Thanks and best regards,
Flavio