RE: [PATCH v1 03/11] dt-bindings: pwm: rockchip: add rockchip,rk3128-pwm

Biju Das
2022-09-30T06:13:58Z

Hi Thierry Reding,

> Subject: Re: [PATCH v1 03/11] dt-bindings: pwm: rockchip: add
> rockchip,rk3128-pwm
>
> On Tue, Sep 13, 2022 at 04:38:32PM +0200, Johan Jonker wrote:
> >
> >
> > On 9/12/22 18:21, Rob Herring wrote:
> > > On Sat, Sep 10, 2022 at 09:48:04PM +0200, Johan Jonker wrote:
> > >> Reduced CC.
> > >>
> > >> Hi Rob,
> > >>
> > >
> > > Seemed like a simple enough warning to fix...
> >
> > Some examples for comment.
> > Let us know what would be the better solution?
> >
> >
> ======================================================================
> > =====
> >
> > option1:
> >
> > combpwm0: combpwm0 {
> > compatible = "rockchip,rv1108-combpwm";
> > interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > #address-cells = <2>;
> > #size-cells = <2>;
> >
> > pwm0: pwm@20040000 {
> > compatible = "rockchip,rv1108-pwm";
> > reg = <0x20040000 0x10>;
> > };
> >
> > pwm1: pwm@20040010 {
> > compatible = "rockchip,rv1108-pwm";
> > reg = <0x20040010 0x10>;
> > };
> >
> > pwm2: pwm@20040020 {
> > compatible = "rockchip,rv1108-pwm";
> > reg = <0x20040020 0x10>;
> > };
> >
> > pwm3: pwm@20040030 {
> > compatible = "rockchip,rv1108-pwm";
> > reg = <0x20040030 0x10>;
> > };
> > };
> >
> > PRO:
> > - Existing driver might still work.
> > CON:
> > - New compatible needed to service the combined interrupts.
> > - Driver change needed.
> >
> >
> ======================================================================
> > =====
> > option 2:
> >
> > combpwm0: pwm@10280000 {
> > compatible = "rockchip,rv1108-pwm";
> > reg = <0x10280000 0x40>;
> > interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> > #address-cells = <1>;
> > #size-cells = <0>;
> >
> > pwm4: pwm-4@0 {
> > reg = <0x0>;
> > };
> >
> > pwm5: pwm-5@10 {
> > reg = <0x10>;
> > };
> >
> > pwm6: pwm-6@20 {
> > reg = <0x20>;
> > };
> >
> > pwm7: pwm-7@30 {
> > reg = <0x30>;
> > };
> > };
> >
> > CON:
> > - Driver change needed.
> > - Not compatible with current drivers.
> >
> >
> ======================================================================
> > =====
> >
> > Current situation:
> >
> > pwm0: pwm@20040000 {
> > compatible = "rockchip,rv1108-pwm", "rockchip,rk3288-pwm";
> > reg = <0x20040000 0x10>;
> > interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > };
> >
> > pwm1: pwm@20040010 {
> > compatible = "rockchip,rv1108-pwm", "rockchip,rk3288-pwm";
> > reg = <0x20040010 0x10>;
> > interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > };
> >
> > pwm2: pwm@20040020 {
> > compatible = "rockchip,rv1108-pwm", "rockchip,rk3288-pwm";
> > reg = <0x20040020 0x10>;
> > interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > };
> >
> > pwm3: pwm@20040030 {
> > compatible = "rockchip,rv1108-pwm", "rockchip,rk3288-pwm";
> > reg = <0x20040030 0x10>;
> > interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > };
> >
> > CON:
> > - The property "interrupts 39" can only be claimed ones by one probe
> function at the time.
> > - Has a fall-back string for rk3288, but unknown identical behavior
> for interrupts ???
>
> To be honest, all three descriptions look wrong to me. From the above
> it looks like this is simply one PWM controller with four channels, so
> it should really be described as such, i.e.:
>
> pwm@20040030 {
> compatible = "rockchip,rv1108-pwm";
> reg = <0x20040030 0x40>;
> interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> };

Sorry to jump in.

Renesas GPT has also similar case where we have large PWM IP block
having 8 pwm channels. Each channel has it's Own pinctrl, unique registers, interrupts
for each channel. But there are 4 sharable external trigger input pins for all the channels.

If it is a single block like this, how will you associate pinctrl
with each channel?

At board level if you specify <pin4 enabled>, without pwm channel
specific information how will you configure channel4?

Maybe something like this will help. Is it acceptable?

pwm@20040030 {
compatible = "rockchip,rv1108-pwm";
reg = <0x20040030 0x40>;
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;

pwm4: pwm-4@0 {
reg = <0x0>;
};

pwm5: pwm-5@10 {
reg = <0x10>;
};

pwm6: pwm-6@20 {
reg = <0x20>;
};

pwm7: pwm-7@30 {
reg = <0x30>;
};
};

Cheers,
Biju