From patchwork Tue Oct 2 09:33:47 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomasz Figa X-Patchwork-Id: 1536581 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 4674CDF238 for ; Tue, 2 Oct 2012 09:34:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753466Ab2JBJeA (ORCPT ); Tue, 2 Oct 2012 05:34:00 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:16527 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753112Ab2JBJd7 (ORCPT ); Tue, 2 Oct 2012 05:33:59 -0400 Received: from epcpsbgm1.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MB9003ROEKKBEK0@mailout4.samsung.com>; Tue, 02 Oct 2012 18:33:58 +0900 (KST) X-AuditID: cbfee61a-b7f726d000000ec7-45-506ab50594a8 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id B0.C8.03783.505BA605; Tue, 02 Oct 2012 18:33:58 +0900 (KST) Received: from mcdsrvbld02.digital.local ([106.116.37.23]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MB9000EFEKEH450@mmp1.samsung.com>; Tue, 02 Oct 2012 18:33:57 +0900 (KST) From: Tomasz Figa To: linux-input@vger.kernel.org Cc: linux-samsung-soc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org, kyungmin.park@samsung.com, m.szyprowski@samsung.com, t.figa@samsung.com, jy0922.shim@samsung.com, tomasz.figa@gmail.com Subject: [PATCH] input: touchscreen: mms114: Add device tree bindings Date: Tue, 02 Oct 2012 11:33:47 +0200 Message-id: <1349170427-1625-1-git-send-email-t.figa@samsung.com> X-Mailer: git-send-email 1.7.10 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrHJMWRmVeSWpSXmKPExsVy+t9jAV22rVkBBhNNLW5++sZqMeP8PiYH Jo/Pm+QCGKO4bFJSczLLUov07RK4Mq5unMFUcFWh4viNj2wNjFeluhg5OSQETCR6j85lh7DF JC7cW8/WxcjFISSwiFHiwpLTUE4Xk8SkO7OZQarYBNQkPjc8AkpwcIgIyEvcOmIKUsMscJxR YvqkO0wgNcICrhKnn58Ds1kEVCXOnDjCCGLzCjhK/Nw1jw1im7zE0/t9bBMYuRcwMqxiFE0t SC4oTkrPNdQrTswtLs1L10vOz93ECPblM6kdjCsbLA4xCnAwKvHw7jyZGSDEmlhWXJl7iFGC g1lJhPfc3KwAId6UxMqq1KL8+KLSnNTiQ4zSHCxK4rzNHikBQgLpiSWp2ampBalFMFkmDk6p BsaNOzemMOv9ttq7mv9Qvceti6Uf5t2LbbdN2GNZ+lxLf/aCBIUFDazK11u/fI+cxfjvx8Z8 03WGLZ8vcWmwzGxYd9hO+FUii0OBXdarp8Z+i3dYll7neO+tIzs34nDGO+5LPod5njius3qZ xsihM/XQoVtL7q/eLLVCSoD/hFhy/wqbvM8TJ25SYinOSDTUYi4qTgQA516a5+EBAAA= Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org This patch adds device tree bindings for mms114 touchscreen. Signed-off-by: Tomasz Figa --- .../bindings/input/touchscreen/mms114.txt | 34 ++++++++++++++ drivers/input/touchscreen/mms114.c | 52 +++++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/input/touchscreen/mms114.txt diff --git a/Documentation/devicetree/bindings/input/touchscreen/mms114.txt b/Documentation/devicetree/bindings/input/touchscreen/mms114.txt new file mode 100644 index 0000000..f89d382 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/mms114.txt @@ -0,0 +1,34 @@ +* MELFAS MMS114 touchscreen controller + +Required properties: +- compatible: must be "melfas,mms114" +- reg: I2C address of the chip +- interrupts: interrupt to which the chip is connected +- x-size: horizontal resolution of touchscreen +- y-size: vertical resolution of touchscreen + +Optional properties: +- contact-threshold: +- moving-threshold: +- x-invert: invert X axis +- y-invert: invert Y axis + +Example: + + i2c@00000000 { + /* ... */ + + touchscreen@48 { + compatible = "melfas,mms114"; + reg = <0x48>; + interrupts = <39 0>; + x-size = <720>; + y-size = <1280>; + contact-threshold = <10>; + moving-threshold = <10>; + x-invert; + y-invert; + }; + + /* ... */ + }; diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c index 49c44bb..fb66f7a 100644 --- a/drivers/input/touchscreen/mms114.c +++ b/drivers/input/touchscreen/mms114.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -360,14 +361,55 @@ static void mms114_input_close(struct input_dev *dev) mms114_stop(data); } +static struct mms114_platform_data *mms114_parse_dt(struct device *dev) +{ + struct mms114_platform_data *pdata; + struct device_node *np = dev->of_node; + + if (!np) + return NULL; + + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) { + dev_err(dev, "failed to allocate platform data\n"); + return NULL; + } + + if (of_property_read_u32(np, "x-size", &pdata->x_size)) { + dev_err(dev, "failed to get x-size property\n"); + return NULL; + }; + + if (of_property_read_u32(np, "y-size", &pdata->y_size)) { + dev_err(dev, "failed to get y-size property\n"); + return NULL; + }; + + of_property_read_u32(np, "contact-threshold", + &pdata->contact_threshold); + of_property_read_u32(np, "moving-threshold", + &pdata->moving_threshold); + + if (of_find_property(np, "x-invert", NULL)) + pdata->x_invert = true; + if (of_find_property(np, "y-invert", NULL)) + pdata->y_invert = true; + + return pdata; +} + static int __devinit mms114_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct mms114_data *data; struct input_dev *input_dev; + struct mms114_platform_data *pdata = client->dev.platform_data; int error; - if (!client->dev.platform_data) { + if (!pdata) + pdata = mms114_parse_dt(&client->dev); + + if (!pdata) { dev_err(&client->dev, "Need platform data\n"); return -EINVAL; } @@ -389,7 +431,7 @@ static int __devinit mms114_probe(struct i2c_client *client, data->client = client; data->input_dev = input_dev; - data->pdata = client->dev.platform_data; + data->pdata = pdata; input_dev->name = "MELPAS MMS114 Touchscreen"; input_dev->id.bustype = BUS_I2C; @@ -525,11 +567,17 @@ static const struct i2c_device_id mms114_id[] = { }; MODULE_DEVICE_TABLE(i2c, mms114_id); +static struct of_device_id __devinitdata mms114_dt_match[] = { + { .compatible = "melfas,mms114" }, + { } +}; + static struct i2c_driver mms114_driver = { .driver = { .name = "mms114", .owner = THIS_MODULE, .pm = &mms114_pm_ops, + .of_match_table = mms114_dt_match, }, .probe = mms114_probe, .remove = __devexit_p(mms114_remove),