Hi Peter, On Sun, Feb 24, 2008 at 10:24:11PM -0800, Peter Ma wrote: > I apologize for contacting you directly. I believe you are the > maintainer of the Linux input drivers. > If there is a forum I ought to be checking, please point me in that > direction. > > The UCB1400 touchscreen driver (input/touchscreen/ucb1400_ts.c) > currently uses an interrupt autoprobe to self-discover its interrupt. > The probe_irq_on/off functions indicate interrupts using a 32-bit field. > I am using a SoC (Atmel AVR32), in which the available external > interrupts are enumerated starting from 64, which cannot be represented > in a 32-bit field. Thus interrupt autoprobing always fails. > > I believe the solution is to somehow pass a IRQ down from the driver > instantiation, and modify ucb1400_ts_probe() to check for the IRQ number > before attempting to autoprobe. > > In a couple of board setups I have seen (e.g. > arch/arm/mach-pca/cm-x270.c), ucb1400_ts is instantiated as a > "platform_device", eventhough the driver is written as a regular > "device". Normally, something board-specific like an IRQ assignment is > passed in platform_device->resource, but I do not see how ucb1400_ts > device would be able to fetch that. > > I see there is a device.platform_data, and I see a platform_device.dev. > I attempted to pass a pointer through > platform_device->dev.platform_data, but it did not appear to make it > through to device.platform_data down in the driver. > > Is there a correct method for passing information (like IRQ assignment) > into a "device" driver, like ucb1400_ts? > > I am quite new to linux drivers, so any guidance you can provide would > be greatly appreciated. > I apologize for not responding earlier, I was not able to spend much time on the kernel for the last several months.. I believe your issue is fixed by the following patch from Vernon Snauder. -- Dmitry From: Vernon Sauder <vernoninhand@xxxxxxxxx> Input: ucb1400_ts - IRQ probe fix The UCB1400 driver IRQ probe code fails to find an interrupt if all the interrupts in the range 0-31 are nonprobe-able. This patch removes the check of the return value so interrupts above 31 can be detected. Tested on InHand Fingertip4 PXA270 board. Signed-off-by: Vernon Sauder <vsauder@xxxxxxxxxx> Acked-by: Nicolas Pitre <nico@xxxxxxxxxxx> Signed-off-by: Dmitry Torokhov <dtor@xxxxxxx> --- drivers/input/touchscreen/ucb1400_ts.c | 4 ---- 1 file changed, 4 deletions(-) Index: work/drivers/input/touchscreen/ucb1400_ts.c =================================================================== --- work.orig/drivers/input/touchscreen/ucb1400_ts.c +++ work/drivers/input/touchscreen/ucb1400_ts.c @@ -427,10 +427,6 @@ static int ucb1400_detect_irq(struct ucb unsigned long mask, timeout; mask = probe_irq_on(); - if (!mask) { - probe_irq_off(mask); - return -EBUSY; - } /* Enable the ADC interrupt. */ ucb1400_reg_write(ucb, UCB_IE_RIS, UCB_IE_ADC); -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html