Re: [PATCH v2 1/1] Input: atmel_mxt_ts - Get IRQ edge/level flags on DT booting
From: Doug Anderson <dianders@chromium.org>
Date: 2014-08-08 20:58:41
Also in:
linux-input, linux-samsung-soc, lkml
Hi, On Fri, Aug 8, 2014 at 11:29 AM, Javier Martinez Canillas [off-list ref] wrote:
Hello, On 08/08/2014 06:38 PM, Javier Martinez Canillas wrote:quoted
It seems as if the first call to exynos_irq_set_type() that is made by OF is a no-op while the second call is the one that actually setups the hw correctly. Does this make any sense? Maybe is related to the pin not being muxed in the correct function when the "interrupts" property is parsed by OF?So after a conversation with Tomasz Figa over IRC the problem was after all that the pin was reconfigured. The IRQ trigger type resulted to be just a red herring and not a direct cause. The pinctrl-eyxnos driver does the IRQ pinmux setup in the .irq_set_type function handler. So what happened was that OF parsed the "interrupts" property and called exynos_irq_set_type() which did the pinmux setup. But after that, due a DTS pinctrl configuration the pin function was changed as a GPIO input and that happened before the atmel driver was probed. So when the driver called request_threaded_irq(), the correct flags were used but the pin was not configured as an IRQ anymore so IRQ were not fired. Setting a trigger type just had the side effect of calling exynos_irq_set_type() which again setup the pin as an IRQ. To fix the issue a variation of patch [0] will be posted that moves the IRQ pinmux setup from .irq_set_type to the .irq_request_resources function handler. That way the pin will be setup as IRQ regardless of the the trigger type [1] when someone calls request_[threaded]_irq(). Only the mentioned patch fixes the issue but Tomasz said that even a call to gpio_direction_{input,output} can change the pin configuration so he will post another patch that will add a bit mask to samsung_pin_bank to prevent any pinmux reconfiguration.
Would just making a device tree change fix this? AKA for the pin, do: samsung,pin-function = <0xf>; I have some vague recollection that I set interrupts to pin-function "0" by default for some reason (assuming they would go to 0xf when interrupts were enabled). ...but I can't for the life of me remember if it was a good reason or just seemed like the right thing to do. -Doug