From patchwork Sat Oct 31 00:41:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Welling X-Patchwork-Id: 7530251 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 E70E9BEEA4 for ; Sat, 31 Oct 2015 00:43:07 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0D52F205DD for ; Sat, 31 Oct 2015 00:43:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F3BEB20445 for ; Sat, 31 Oct 2015 00:43:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932077AbbJaAmt (ORCPT ); Fri, 30 Oct 2015 20:42:49 -0400 Received: from mail-ig0-f176.google.com ([209.85.213.176]:37981 "EHLO mail-ig0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753962AbbJaAlz (ORCPT ); Fri, 30 Oct 2015 20:41:55 -0400 Received: by igbdj2 with SMTP id dj2so22060899igb.1; Fri, 30 Oct 2015 17:41:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=XZ5U7gGmTqbPoZJhkyUAHrOHl+uKe+QOSUbXMFXb0x4=; b=UYWQSzjJAMpuv8pTKzvofGf7r3bEPe8XPAC1R3LtDHVLBZdqBoHDnlFMmSObX/WP/M IGkOY73RnVMX5ocn5jx9Ou0qIk3H1yglJN+3omAn2maO8jNJAkvjAQz0KThYzfe21r+9 hD9c2LY0qdhlzOV0ylnRYf/MS7CUU0Aa73AuKJPMRWk4mLEzWnBX4XBrBnaMLcNRHSBU xu9uxV9KdoZLJnNgnhKKSMxICok1uuSqpomrNnkIrDbBnMjxTIyTz1PdVbiwGljxVy43 Ft+AE8NJeNVXgx+h5CLKD/zbYFGnqwUbTsRqi635hgsWNEuL3eiydU4ypKwpuh74OZif Urcg== X-Received: by 10.50.60.40 with SMTP id e8mr1073740igr.85.1446252114372; Fri, 30 Oct 2015 17:41:54 -0700 (PDT) Received: from deathstar.hitronhub.home (173-22-240-187.client.mchsi.com. [173.22.240.187]) by smtp.gmail.com with ESMTPSA id f128sm3656173ioe.13.2015.10.30.17.41.53 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 30 Oct 2015 17:41:53 -0700 (PDT) From: Michael Welling To: Dmitry Torokhov , kbuild test robot , kbuild-all@01.org, Tony Lindgren , Pavel Machek , Felipe Balbi , Sebastian Reichel , Roger Quadros , Arnd Bergmann , Mark Brown , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-input@vger.kernel.org Cc: Michael Welling Subject: [PATCH 3/4] Input: tsc2004 - Add support for tsc2004 Date: Fri, 30 Oct 2015 19:41:25 -0500 Message-Id: <1446252086-24334-4-git-send-email-mwelling@ieee.org> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1446252086-24334-1-git-send-email-mwelling@ieee.org> References: <1446252086-24334-1-git-send-email-mwelling@ieee.org> Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,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 Adds support for the i2c based tsc2004. Signed-off-by: Michael Welling --- drivers/input/touchscreen/Kconfig | 13 ++++++ drivers/input/touchscreen/Makefile | 1 + drivers/input/touchscreen/tsc2004.c | 86 +++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 drivers/input/touchscreen/tsc2004.c diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index 6a5878b..ae33da7 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -942,6 +942,19 @@ config TOUCHSCREEN_TSC_SERIO config TOUCHSCREEN_TSC200X_CORE tristate +config TOUCHSCREEN_TSC2004 + tristate "TSC2004 based touchscreens" + depends on I2C + select REGMAP_I2C + select TOUCHSCREEN_TSC200X_CORE + help + Say Y here if you have a TSC2004 based touchscreen. + + If unsure, say N. + + To compile this driver as a module, choose M here: the + module will be called tsc2004. + config TOUCHSCREEN_TSC2005 tristate "TSC2005 based touchscreens" depends on SPI_MASTER diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 03179f2..cbaa6ab 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -70,6 +70,7 @@ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o obj-$(CONFIG_TOUCHSCREEN_TSC_SERIO) += tsc40.o obj-$(CONFIG_TOUCHSCREEN_TSC200X_CORE) += tsc200x-core.o +obj-$(CONFIG_TOUCHSCREEN_TSC2004) += tsc2004.o obj-$(CONFIG_TOUCHSCREEN_TSC2005) += tsc2005.o obj-$(CONFIG_TOUCHSCREEN_TSC2007) += tsc2007.o obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o diff --git a/drivers/input/touchscreen/tsc2004.c b/drivers/input/touchscreen/tsc2004.c new file mode 100644 index 0000000..d2f7a6b --- /dev/null +++ b/drivers/input/touchscreen/tsc2004.c @@ -0,0 +1,86 @@ +/* + * TSC2004 touchscreen driver + * + * Copyright (C) 2015 QWERTY Embedded Design + * Copyright (C) 2015 EMAC Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include "tsc200x-core.h" + +static int tsc2004_cmd(struct device *dev, u8 cmd) +{ + u8 tx = TSC200X_CMD | TSC200X_CMD_12BIT | cmd; + s32 data; + struct i2c_client *i2c = to_i2c_client(dev); + + data = i2c_smbus_write_byte(i2c, tx); + if (data < 0) { + dev_err(dev, "%s: failed, command: %x i2c error: %d\n", + __func__, cmd, data); + return data; + } + + return 0; +} + +static int tsc2004_probe(struct i2c_client *i2c, + const struct i2c_device_id *id) + +{ + return tsc200x_probe(&i2c->dev, i2c->irq, BUS_I2C, + devm_regmap_init_i2c(i2c, &tsc200x_regmap_config), + &tsc2004_cmd); +} + +static int tsc2004_remove(struct i2c_client *i2c) +{ + return tsc200x_remove(&i2c->dev); +} + +static const struct i2c_device_id tsc2004_idtable[] = { + { "tsc2004", 0 }, + { } +}; + +MODULE_DEVICE_TABLE(i2c, tsc2004_idtable); + +#ifdef CONFIG_OF +static const struct of_device_id tsc2004_of_match[] = { + { .compatible = "ti,tsc2004" }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, tsc2004_of_match); +#endif + +static struct i2c_driver tsc2004_driver = { + .driver = { + .name = "tsc2004", + .of_match_table = of_match_ptr(tsc2004_of_match), + .pm = &tsc200x_pm_ops, + }, + .id_table = tsc2004_idtable, + .probe = tsc2004_probe, + .remove = tsc2004_remove, +}; + +module_i2c_driver(tsc2004_driver); + +MODULE_AUTHOR("Michael Welling "); +MODULE_DESCRIPTION("TSC2004 Touchscreen Driver"); +MODULE_LICENSE("GPL");