From patchwork Fri Feb 6 12:53:10 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roger Quadros X-Patchwork-Id: 5791651 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id CA57CBF440 for ; Fri, 6 Feb 2015 12:53:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DE1E720155 for ; Fri, 6 Feb 2015 12:53:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BF1BA20154 for ; Fri, 6 Feb 2015 12:53:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754317AbbBFMxY (ORCPT ); Fri, 6 Feb 2015 07:53:24 -0500 Received: from comal.ext.ti.com ([198.47.26.152]:35413 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751429AbbBFMxX (ORCPT ); Fri, 6 Feb 2015 07:53:23 -0500 Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by comal.ext.ti.com (8.13.7/8.13.7) with ESMTP id t16CrEG4023213; Fri, 6 Feb 2015 06:53:14 -0600 Received: from DFLE73.ent.ti.com (dfle73.ent.ti.com [128.247.5.110]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id t16CrDld029612; Fri, 6 Feb 2015 06:53:13 -0600 Received: from dlep32.itg.ti.com (157.170.170.100) by DFLE73.ent.ti.com (128.247.5.110) with Microsoft SMTP Server id 14.3.224.2; Fri, 6 Feb 2015 06:53:13 -0600 Received: from rockdesk.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep32.itg.ti.com (8.14.3/8.13.8) with ESMTP id t16CrAcY001942; Fri, 6 Feb 2015 06:53:10 -0600 From: Roger Quadros To: , CC: , , , , , Roger Quadros Subject: [PATCH] Input: pixcir_i2c_ts - Add RESET gpio Date: Fri, 6 Feb 2015 14:53:10 +0200 Message-ID: <1423227190-10943-1-git-send-email-rogerq@ti.com> X-Mailer: git-send-email 2.1.0 MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The controller has a RESET pin which is usually controlled over a GPIO line. If such a GPIO is provided, perform a RESET during probe. Signed-off-by: Roger Quadros --- .../bindings/input/touchscreen/pixcir_i2c_ts.txt | 3 ++ drivers/input/touchscreen/pixcir_i2c_ts.c | 37 ++++++++++++++++++++-- include/linux/input/pixcir_ts.h | 1 + 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt index 6e55109..8eb240a 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt +++ b/Documentation/devicetree/bindings/input/touchscreen/pixcir_i2c_ts.txt @@ -8,6 +8,9 @@ Required properties: - touchscreen-size-x: horizontal resolution of touchscreen (in pixels) - touchscreen-size-y: vertical resolution of touchscreen (in pixels) +Optional properties: +- reset-gpio: GPIO connected to the RESET line of the chip + Example: i2c@00000000 { diff --git a/drivers/input/touchscreen/pixcir_i2c_ts.c b/drivers/input/touchscreen/pixcir_i2c_ts.c index 4fb5537..610ce0b 100644 --- a/drivers/input/touchscreen/pixcir_i2c_ts.c +++ b/drivers/input/touchscreen/pixcir_i2c_ts.c @@ -51,6 +51,19 @@ struct pixcir_report_data { struct pixcir_touch touches[PIXCIR_MAX_SLOTS]; }; +static void pixcir_reset(struct pixcir_i2c_ts_data *tsdata) +{ + const struct pixcir_ts_platform_data *pdata = tsdata->pdata; + + if (gpio_is_valid(pdata->gpio_reset)) { + gpio_set_value(pdata->gpio_reset, 1); + ndelay(80); + gpio_set_value(pdata->gpio_reset, 0); + /* wait as controller might not immediately respond */ + msleep(100); + } +} + static void pixcir_ts_parse(struct pixcir_i2c_ts_data *tsdata, struct pixcir_report_data *report) { @@ -428,7 +441,8 @@ static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev) pdata->chip = *(const struct pixcir_i2c_chip_data *)match->data; pdata->gpio_attb = of_get_named_gpio(np, "attb-gpio", 0); - /* gpio_attb validity is checked in probe */ + pdata->gpio_reset = of_get_named_gpio(np, "reset-gpio", 0); + /* gpio validity is checked in probe */ if (of_property_read_u32(np, "touchscreen-size-x", &pdata->x_max)) { dev_err(dev, "Failed to get touchscreen-size-x property\n"); @@ -442,8 +456,9 @@ static struct pixcir_ts_platform_data *pixcir_parse_dt(struct device *dev) } pdata->y_max -= 1; - dev_dbg(dev, "%s: x %d, y %d, gpio %d\n", __func__, - pdata->x_max + 1, pdata->y_max + 1, pdata->gpio_attb); + dev_dbg(dev, "%s: x %d, y %d, ATTB gpio %d, RESET gpio %d\n", __func__, + pdata->x_max + 1, pdata->y_max + 1, pdata->gpio_attb, + pdata->gpio_reset); return pdata; } @@ -481,6 +496,10 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client, return -EINVAL; } + /* RESET gpio is optional */ + if (!gpio_is_valid(pdata->gpio_reset)) + dev_info(dev, "Invalid gpio_reset in pdata\n"); + if (!pdata->chip.max_fingers) { dev_err(dev, "Invalid max_fingers in pdata\n"); return -EINVAL; @@ -530,6 +549,16 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client, input_set_drvdata(input, tsdata); + if (gpio_is_valid(pdata->gpio_reset)) { + error = devm_gpio_request_one(dev, pdata->gpio_reset, + GPIOF_OUT_INIT_LOW, + "pixcir_i2c_reset"); + if (error) { + dev_err(dev, "Failed to request RESET gpio\n"); + return error; + } + } + error = devm_gpio_request_one(dev, pdata->gpio_attb, GPIOF_DIR_IN, "pixcir_i2c_attb"); if (error) { @@ -545,6 +574,8 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client, return error; } + pixcir_reset(tsdata); + /* Always be in IDLE mode to save power, device supports auto wake */ error = pixcir_set_power_mode(tsdata, PIXCIR_POWER_IDLE); if (error) { diff --git a/include/linux/input/pixcir_ts.h b/include/linux/input/pixcir_ts.h index 7bae83b..9e91fd3 100644 --- a/include/linux/input/pixcir_ts.h +++ b/include/linux/input/pixcir_ts.h @@ -58,6 +58,7 @@ struct pixcir_ts_platform_data { int x_max; int y_max; int gpio_attb; /* GPIO connected to ATTB line */ + int gpio_reset; /* GPIO connected to RESET line */ struct pixcir_i2c_chip_data chip; };