Re: Inverted PWM output on iMX6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

On Thu, Mar 05, 2020 at 01:22:32PM +0000, Paul Barker wrote:
> I recently ran into an issue using the pwm-fan driver with an inverted
> PWM output on iMX6.
> 
> The fan is defined in the device tree as follows:
> 
> 	fan0: pwm-fan {
> 		compatible = "pwm-fan";
> 		pwms = <&pwm2 0 25000 PWM_POLARITY_INVERTED>;
> 		...
> 	}
> 
> In pwm_imx27_probe() the support for a third `flags` argument in a pwm
> reference is enabled:
> 
> 	imx->chip.of_xlate = of_pwm_xlate_with_flags;
> 	imx->chip.of_pwm_n_cells = 3;
> 
> However, the flag is ignored and the output is not inverted.
> 
> By adding some prints I saw that when of_pwm_xlate_with_flags() is
> called, args->args_count is 2 instead of 3.
> 
> Looking at the definition of the pwm device itself in imx6qdl.dtsi I
> can see that the number of cells in a pwm reference is set to 2 not 3:
> 
> 	pwm2: pwm@2084000 {
> 		#pwm-cells = <2>;
> 		...
> 	};
> 
> That seems to be preventing a third argument from being passed.
> 
> I can change `#pwm-cells` to <3> and then everything works for my
> device but I'm not sure that is the correct solution for everyone. That
> would require all pwm references on iMX6 devices to use 3 cells. The
> code in of_pwm_xlate_with_flags() seems to be built to handle either 2
> or 3 argument cells but I can't see any way to allow this choice in the
> device tree.
> 
> If the solution is to set `#pwm-cells` to <3> I'm happy to send a patch
> which does this and updates all pwm references in device trees which
> include `imx6dql.dtsi`. Before I do that I'd like to know that it's the
> correct approach though.
> 
> For context I've confirmed this is the case in Linux 5.4 and that the
> relevant files haven't changed between that release and 5.6.0-rc4.

I think changing that is fine. However you'd have to care that all
in-tree users that rely on #pwm-cells = <2> are fixed accordingly.

I'd do: add #pwm-cells = <3> in the cpu.dtsi and then adapt all
machine.dts to add #pwm-cells = <2> until there are no more changes to
the generated files compared to the current state.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux