Messages in this thread | | | Date | Mon, 26 Nov 2012 14:54:23 -0800 | From | Christopher Heiny <> | Subject | Re: [RFC PATCH 02/06] input/rmi4: Core files |
| |
On 11/26/2012 10:41 AM, Benjamin Tissoires wrote: > Hi Christopher, > > On Sat, Nov 17, 2012 at 4:58 AM, Christopher Heiny <cheiny@synaptics.com> wrote: >> rmi_bus.c implements the basic functionality of the RMI bus. This file is >> greatly simplified compared to the previous patch - we've switched from >> "do it yourself" device/driver binding to using device_type to distinguish >> between the two kinds of devices on the bus (sensor devices and function >> specific devices) and using the standard bus implementation to manage devices >> and drivers. >> >> >> rmi_driver.c is a driver for the general functionality of the RMI sensor as a >> whole, managing those behaviors (including IRQ handling) that are not specific >> to any RMI4 function. It has some unavoidable dependencies on F01 behavior, >> though we have worked to minimize those as far as possible. >> >> >> The header file rmi_driver.h provides definitions that are shared among >> the modules of the RMI implementation, but not thought to be necessary >> outside it. >> >> >> Greg KH - Linus Walleij recommended that we seek your input on these core >> files, particularly the bus implementation. >> >> >> Signed-off-by: Christopher Heiny <cheiny@synaptics.com> >> >> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> >> Cc: Linus Walleij <linus.walleij@stericsson.com> >> Cc: Naveen Kumar Gaddipati <naveen.gaddipati@stericsson.com> >> Cc: Joeri de Gram <j.de.gram@gmail.com> >> >> --- >> >> drivers/input/rmi4/rmi_bus.c | 248 ++++++ >> drivers/input/rmi4/rmi_driver.c | 1663 +++++++++++++++++++++++++++++++++++++++ >> drivers/input/rmi4/rmi_driver.h | 139 ++++ >> include/uapi/linux/input.h | 1 + >> 4 files changed, 2051 insertions(+), 0 deletions(-) >> > [snipped] >> diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c >> new file mode 100644 >> index 0000000..05a73ae >> --- /dev/null >> +++ b/drivers/input/rmi4/rmi_driver.c > [snipped] >> +/* extract product ID */ >> +void get_prod_id(struct rmi_device *rmi_dev, struct rmi_driver_data *drvdata) >> +{ >> + struct device *dev = &rmi_dev->dev; >> + int retval; >> + int board = 0, rev = 0; >> + int i; >> + static const char * const pattern[] = { >> + "tm%4d-%d", "s%4d-%d", "s%4d-ver%1d"}; >> + u8 product_id[RMI_PRODUCT_ID_LENGTH+1]; >> + >> + retval = rmi_read_block(rmi_dev, >> + drvdata->f01_container->fd.query_base_addr+ >> + sizeof(struct f01_basic_queries), >> + product_id, RMI_PRODUCT_ID_LENGTH); >> + if (retval < 0) { >> + dev_err(dev, "Failed to read product id, code=%d!", retval); >> + return; >> + } >> + product_id[RMI_PRODUCT_ID_LENGTH] = '\0'; >> + >> + for (i = 0; i < sizeof(product_id); i++) >> + product_id[i] = tolower(product_id[i]); >> + >> + for (i = 0; i < sizeof(pattern); i++) { > > This should be ARRAY_SIZE(pattern). > It gave me a wonderful kernel oops :)
Yep, that's a bug! Oddly enough, it runs without barfing on my systems (though who knows what horrible things are happening under the hood). Thanks for letting us know.
Chris
> > Cheers, > Benjamin
[snip]
| |