[PATCH v3] input: MXC: add mxc-keypad driver to support the Keypad Port present in the mxc application processors family.
From: Alberto Panizzo <hidden>
Date: 2010-01-27 17:42:33
Also in:
linux-input
Hi, On mer, 2010-01-27 at 18:03 +0100, Lothar Wa?mann wrote:
Hi, Alberto Panizzo writes:quoted
On mer, 2010-01-27 at 15:52 +0100, Lothar Wa?mann wrote:quoted
Hi, Alberto Panizzo writes:quoted
On mer, 2010-01-27 at 13:18 +0100, Lothar Wa?mann wrote:quoted
Hi, Alberto Panizzo writes:quoted
quoted
quoted
+ irq = platform_get_irq(pdev, 0); + if (irq < 0) { + dev_err(&pdev->dev, "failed to get keypad irq\n"); + return -ENXIO; + }This should be -ENODEV.Lot of reference keyboard driver use -ENXIO.. May should be better: return irq ?Yes, of course. If a function returns an error code that should be promoted to the caller instead of inventing a new error code. Lothar Wa?mannBut, errno.h say: #define ENXIO 6 // Device not configured #define ENODEV 19 // Operation not supported by deviceWhat errno.h file is that? I have: ./include/asm-generic/errno-base.h:#define ENXIO 6 /* No such device or address */ ./include/asm-generic/errno-base.h:#define ENODEV 19 /* No such device */ AFAIK ENXIO is used when actual I/O has been attempted. But in this case the driver is still being configured and did not do any I/O yet. Lothar Wa?mannThe errno.h that I propose is a googled one and the kernel-one do not explain well.. Not for fighting, I wont understand. In drivers/base/platform.c: /** * platform_get_irq - get an IRQ for a device * @dev: platform device * @num: IRQ number index */ int platform_get_irq(struct platform_device *dev, unsigned int num) { struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num); return r ? r->start : -ENXIO; } If there isn't the irq resource asked platform_get_irq return ENXIO.The POSIX spec says: |[ENXIO] | No such device or address. Input or output on a special file |refers to a device that does not exist, or makes a request beyond the |capabilities of the device. It may also occur when, for example, a |tape drive is not on-line.
And I am not doing any I/O, while I am requesting something that is beyond the capability defined in platform_data. While |[ENODEV] | No such device. An attempt was made to apply an inappropriate function |to a device; for example, trying to read a write-only device such as a printer. And: -the device is present (registered in the driver model) -I am not trying to apply an inappropriate function.. Maybe the problem have to be attacked form another point of view: Platform resources are parameters of the driver, the absence of IRQ and IO mem would be considered as wrong parameters so the error should be EINVAL.
http://www.opengroup.org/onlinepubs/000095399/functions/xsh_chap02_03.html
Bookmarked!!!! :)