[Letux-kernel] problem with pinctrl-single, bits and control_devconf0

H. Nikolaus Schaller hns at goldelico.com
Sun Sep 18 15:52:31 CEST 2016


Hi,
I am trying to set up a special McBSP1 CLKR on OMAP3, but I don't understand
the logic of the offsets and masks behind pinctrl-single,bits.

I have modified the example given in the bindings document

	http://lxr.free-electrons.com/source/Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt?v=3.8#L110

to:

/ {
	/* pinmux for devconf0 */
	control_devconf0: pinmux at 48002274 {
		compatible = "pinctrl-single";
		reg = <0x48002274 4>;   /* Single register */
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-single,bit-per-mux;
		pinctrl-single,register-width = <32>;
		pinctrl-single,function-mask = <0x5F>;
	};
};

&control_devconf0 {
	pinctrl-names = "default";
	pinctrl-0 = <&mcbsp1_defconf0>;

	mcbsp1_defconf0: pinmux_mcbsp1_defconf0 {
		/*                   offset bits mask */
		pinctrl-single,bits = <0x00 0x08 0x08>;	/* set MCBSP1_CLKR_MASK */
	};
};

This looks reasonable to me to set bit 0x08 of the DEVCONF0 register which is within the set of the bits "enabled" for modification by the mask 0x5F.

All I get from this is a reject:

[    1.808258] pinctrl-single 48002274.pinmux: Invalid submask 0x8 for pinmux_mcbsp1_defconf0 at 0x0

So what is wrong?

I have added some printk to drivers/pinctrl/pinctrl-single.c to understand what
the bits, offsets and masks are thought to do.

[    1.807220] pinctrl-single: fmask=0000005f fshift=0 fmax=0000005f
[    1.807464] pinctrl-single: pcs->fmask = 0000005f
[    1.807495] pinctrl-single: mask = 00000008 bit_pos = 3 pin_num_from_lsb = 0 mask_pos = 000002f8 val_pos = 00000008 submask = 00000008
[    1.807495] pinctrl-single:  -> mask = 00000000
[    1.807525] pinctrl-single 48002274.pinmux: Invalid submask 0x8 for pinmux_mcbsp1_defconf0 at 0x0

What I don't understand at all is why the mask 0x5f gives a mask_pos = 000002f8.
Of course then the mask can never be the same as the submask.

Or is the example in the bindings document wrong?

BR and thanks,
Nikolaus



More information about the Letux-kernel mailing list