Re: [RFC PATCH 02/06] input/rmi4: Core files
flat view
From: Benjamin Tissoires <hidden>
Date: 2012-11-26 18:41:28
Also in:
lkml
Hi Christopher, On Sat, Nov 17, 2012 at 4:58 AM, Christopher Heiny [off-list ref] 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 <redacted> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: Linus Walleij <redacted> Cc: Naveen Kumar Gaddipati <redacted> Cc: Joeri de Gram <redacted> --- 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]
quoted hunk ↗ jump to hunk
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]
quoted hunk ↗ jump to hunk
+/* 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 :) Cheers, Benjamin
quoted hunk ↗ jump to hunk
+ retval = sscanf(product_id, pattern[i], &board, &rev); + if (retval) + break; + } + /* save board and rev data in the rmi_driver_data */ + drvdata->board = board; + drvdata->rev = rev; + dev_dbg(dev, "Rmi_driver getProdID, set board: %d rev: %d\n", + drvdata->board, drvdata->rev); +} +
[snipped]