[PATCH 3/9] ARM: Kirkwood: Convert dnskw to pinctrl

Jamie Lentin jm at lentin.co.uk
Fri Oct 26 05:42:53 EDT 2012


On Fri, 26 Oct 2012, Andrew Lunn wrote:

> On Thu, Oct 25, 2012 at 11:58:37PM +0100, Jamie Lentin wrote:
>> Thanks for doing all this. Some typos to fix, I've commented below
>> but I thought it might be easier to push a version for you to steal.
>> It's here:
>>
>> git://github.com/lentinj/linux.git v3.7-rc2-pinctrl
>> https://raw.github.com/lentinj/linux/v3.7-rc2-pinctrl/arch/arm/boot/dts/kirkwood-dnskw.dtsi
>
> Thanks. I will probably squash the three patches into my original, and
> add a Signed-off-by: if that is O.K. for you.
>

Sounds good.

>>
>> Tested on a DNS-320, not a DNS-325 yet.
>>
>> Similar to lsxl_init, the custom GPIO registrations fail:-
>>
>> dnskw: failed to configure power-off GPIO
>> dnskw: Failed to register dnskw:power:sata0
>> dnskw: Failed to register dnskw:power:sata1
>> dnskw: Failed to register dnskw:power:recover
>>
>> So I guess they will need a new home somewhere.
>
> I hope to look at this problem this weekend. Maybe a gpio regulator
> could be a solution, or loading the pinctrl stuff earlier. We will
> see.
>

I did look at using the gpio-regulator stuff a while back, and decided it 
wasn't quite the right shape. Although I can't remember why, and it might 
have changed since.

The power-off GPIO registration could happen in dnskw_power_off instead, 
or the attempt at a gpio-poweroff driver could be resurrected (I'd 
forgotten about it until now).

I could accept dnskw:power:recover is a weirdo configuration option that 
should be set in the bootloader / userland rather than the kernel 
supporting it. Although it would be nice if the kernel registered it's 
purpose. Maybe GPIO pins could be exported by adding sub-nodes to the GPIO 
chip, if that's not too hackish?

>> However most things (fan, buttons, SATA detect/power via sysfs,
>> power via sysfs) work. The key thing that doesn't is LEDs.
>> Registration looks reasonable:
>>
>> Registered led device: dns320:blue:power
>> kirkwood-pinctrl f1010000.pinctrl: request pin 43 (PIN43) for mvebu-gpio:43
>> Registered led device: dns320:blue:usb
>> kirkwood-pinctrl f1010000.pinctrl: request pin 28 (PIN28) for mvebu-gpio:28
>> Registered led device: dns320:orange:l_hdd
>> kirkwood-pinctrl f1010000.pinctrl: request pin 27 (PIN27) for mvebu-gpio:27
>> Registered led device: dns320:orange:r_hdd
>> kirkwood-pinctrl f1010000.pinctrl: request pin 35 (PIN35) for mvebu-gpio:35
>> Registered led device: dns320:orange:usb
>>
>> However setting brightness on/off does the following:
>> cat /sys/class/leds/dns320\:blue\:power/trigger
>>
>> dns320:blue:power - No effect, LED continues to blink as bootloader
>> configures it
>> dns320:orange:l_hdd - Works fine
>> dns320:orange:r_hdd - Works fine
>> dns320:orange:usb - Turns on, turning off locks NAS hard
>> dns320:blue:usb - Turns on, turning off locks NAS hard
>>
>> Any ideas?
> First thing that comes to mind, is it registering them for the correct
> GPIO controller. I think with the new setup, pinctrl and gpio are
> closely linked, so maybe, its modifying pins on the wrong controller.
> Bit of a long shot....
>

I did wonder that, but then why would turning the LEDs on work fine? I 
wonder if both pins are being toggled or something. I'll investigate 
further and report back. The two that cause the NAS to lock up are the 
only ones on &gpio1 though.

>>> 	ocp at f1000000 {
>>> +		pinctrl: pinctrl at 10000 {
>>> +			compatible = "marvell,88f6281-pinctrl";
>>> +			reg = <0x10000 0x20>;
>>> +
>>> +			pinctrl-0 = < &pmx_uart1 &pmx_sata1
>>
>> Need a &pmx_sata0 too (see below).
>
> I just turned the existing MPP setup into pinctrl. Things like SATA,
> SPI pins, etc, i left alone if they were not configured in the old C
> code. I've no problems adding them here.
>
>>
>>> +				      &pmx_gpio_24 &pmx_gpio_25
>>> +				      &pmx_led_power &pmx_led_power
>>
>> Shouldn't be repeated, I'm guessing.
>>
>>> +				      &pmx_led_red_right_hdd
>>> +				      &pmx_led_red_left_hdd
>>> +				      &pmx_led_red_usb_325
>>> +				      &pmx_gpio_30 &pmx_gpio_31
>>> +				      &pmx_gpio_32 &pmx_gpio_33
>>> +				      &pmx_button_power
>>> +				      &pmx_led_red_usb_320
>>> +				      &pmx_power_off &pmx_power_back_on
>>> +				      &pmx_power_sata0 &pmx_power_sata1
>>> +				      &pmx_present_sata0 &pmx_present_sata1
>>> +				      &pmx_led_white_usb &pmx_fan_tacho
>>> +				      &pmx_fan_high_speed &pmx_fan_low_speed
>>> +				      &pmx_button_unmount &pmx_button_reset
>>> +				      &pmx_temp_alarm >;
>>> +			pinctrl-names = "default";
>>> +
>>> +			pmx_uart1: pmx-uart1 {
>>> +				marvell,pins = "mpp13", "mpp14";
>>> +				marvell,function = "uart1";
>>> +			};
>>> +			pmx_sata1: pmx-sata1 {
>>> +				marvell,pins = "mpp4", "mpp20", "mpp22";
>>
>> mpp4 is for the NAND. I'm guessing mpp22 should be mpp21, but this
>> should have the "sata0" function.
>
>        MPP_MODE(4,
>                MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1)),
>                MPP_VAR_FUNCTION(0x1, "nand", "io6",     V(1, 1, 1, 1, 1)),
>                MPP_VAR_FUNCTION(0x2, "uart0", "rxd",    V(1, 1, 1, 1, 1)),
>                MPP_VAR_FUNCTION(0x5, "sata1", "act",    V(0, 0, 1, 1, 1)),
>                MPP_VAR_FUNCTION(0xb, "lcd", "hsync",    V(0, 0, 0, 0, 1)),
>                MPP_VAR_FUNCTION(0xd, "ptp", "clk",      V(1, 1, 1, 1, 0))),
>
> 4 can be both NAND and SATA. It looks like NAND has to use pins
> mpp0-mpp5,mpp18-mmp19, they are not available anywhere else. SATA1 is
> duplicated, so we have to be careful to get the right pins.
>

The sata0 and sata1 activity leds are definitely MPP20 and MPP21---I've 
set them up as GPIO leds before successfully.

> Maybe boot the old kernel and look these lines:
>
> [   16.187814] initial MPP regs: 01112222 43303311 55550000 00000000 00000000 00000000 00000000
> [   16.187833]   final MPP regs: 01552222 03303311 55550000 00000000 00000000 00000000 00000000
>
> The first line is how uboot setup the MPP pins. The second is after
> the init function was called.

initial MPP regs: 01111111 03303311 00551100 00000000 00000000 00000000 00000000
   final MPP regs: 01111111 03303311 00551100 00000000 00000000 00000000 00000000

Although the initial MPP regs is also set by a recompiled u-boot with 
~identical MPP setup code.

>
>    Andrew
>

-- 
Jamie Lentin



More information about the linux-arm-kernel mailing list