All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	davinci-linux-open-source@linux.davincidsp.com,
	Sekhar Nori <nsekhar@ti.com>,
	linux-input@vger.kernel.org
Subject: Re: [PATCH 3/3] input: remove obsolete tnetv107x drivers
Date: Fri, 28 Mar 2014 01:36:10 -0700	[thread overview]
Message-ID: <20140328083610.GK22093@core.coreip.homeip.net> (raw)
In-Reply-To: <1395154561-1199121-4-git-send-email-arnd@arndb.de>

On Tue, Mar 18, 2014 at 03:56:01PM +0100, Arnd Bergmann wrote:
> The tnetv107x platform is getting removed, so the touchscreen
> and keypad drivers for this platform will no longer be needed
> either.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> Acked-by: Sekhar Nori <nsekhar@ti.com>
> Acked-by: Kevin Hilman <khilman@linaro.org>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: linux-input@vger.kernel.org

Applied, thank you.

> ---
>  drivers/input/keyboard/Kconfig            |  10 -
>  drivers/input/keyboard/Makefile           |   1 -
>  drivers/input/keyboard/tnetv107x-keypad.c | 329 -------------------------
>  drivers/input/touchscreen/Kconfig         |   9 -
>  drivers/input/touchscreen/Makefile        |   1 -
>  drivers/input/touchscreen/tnetv107x-ts.c  | 384 ------------------------------
>  6 files changed, 734 deletions(-)
>  delete mode 100644 drivers/input/keyboard/tnetv107x-keypad.c
>  delete mode 100644 drivers/input/touchscreen/tnetv107x-ts.c
> 
> diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
> index a673c9f..935dcaf 100644
> --- a/drivers/input/keyboard/Kconfig
> +++ b/drivers/input/keyboard/Kconfig
> @@ -595,16 +595,6 @@ config KEYBOARD_TC3589X
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called tc3589x-keypad.
>  
> -config KEYBOARD_TNETV107X
> -	tristate "TI TNETV107X keypad support"
> -	depends on ARCH_DAVINCI_TNETV107X
> -	select INPUT_MATRIXKMAP
> -	help
> -	  Say Y here if you want to use the TNETV107X keypad.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called tnetv107x-keypad.
> -
>  config KEYBOARD_TWL4030
>  	tristate "TI TWL4030/TWL5030/TPS659x0 keypad support"
>  	depends on TWL4030_CORE
> diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
> index a699b61..81014d9 100644
> --- a/drivers/input/keyboard/Makefile
> +++ b/drivers/input/keyboard/Makefile
> @@ -53,7 +53,6 @@ obj-$(CONFIG_KEYBOARD_STOWAWAY)		+= stowaway.o
>  obj-$(CONFIG_KEYBOARD_SUNKBD)		+= sunkbd.o
>  obj-$(CONFIG_KEYBOARD_TC3589X)		+= tc3589x-keypad.o
>  obj-$(CONFIG_KEYBOARD_TEGRA)		+= tegra-kbc.o
> -obj-$(CONFIG_KEYBOARD_TNETV107X)	+= tnetv107x-keypad.o
>  obj-$(CONFIG_KEYBOARD_TWL4030)		+= twl4030_keypad.o
>  obj-$(CONFIG_KEYBOARD_XTKBD)		+= xtkbd.o
>  obj-$(CONFIG_KEYBOARD_W90P910)		+= w90p910_keypad.o
> diff --git a/drivers/input/keyboard/tnetv107x-keypad.c b/drivers/input/keyboard/tnetv107x-keypad.c
> deleted file mode 100644
> index 086511c..0000000
> --- a/drivers/input/keyboard/tnetv107x-keypad.c
> +++ /dev/null
> @@ -1,329 +0,0 @@
> -/*
> - * Texas Instruments TNETV107X Keypad Driver
> - *
> - * Copyright (C) 2010 Texas Instruments
> - *
> - * 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 version 2.
> - *
> - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> - * kind, whether express or implied; without even the implied warranty
> - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#include <linux/kernel.h>
> -#include <linux/err.h>
> -#include <linux/errno.h>
> -#include <linux/input.h>
> -#include <linux/platform_device.h>
> -#include <linux/interrupt.h>
> -#include <linux/slab.h>
> -#include <linux/delay.h>
> -#include <linux/io.h>
> -#include <linux/clk.h>
> -#include <linux/input/matrix_keypad.h>
> -#include <linux/module.h>
> -
> -#define BITS(x)			(BIT(x) - 1)
> -
> -#define KEYPAD_ROWS		9
> -#define KEYPAD_COLS		9
> -
> -#define DEBOUNCE_MIN		0x400ul
> -#define DEBOUNCE_MAX		0x3ffffffful
> -
> -struct keypad_regs {
> -	u32	rev;
> -	u32	mode;
> -	u32	mask;
> -	u32	pol;
> -	u32	dclock;
> -	u32	rclock;
> -	u32	stable_cnt;
> -	u32	in_en;
> -	u32	out;
> -	u32	out_en;
> -	u32	in;
> -	u32	lock;
> -	u32	pres[3];
> -};
> -
> -#define keypad_read(kp, reg)		__raw_readl(&(kp)->regs->reg)
> -#define keypad_write(kp, reg, val)	__raw_writel(val, &(kp)->regs->reg)
> -
> -struct keypad_data {
> -	struct input_dev		*input_dev;
> -	struct resource			*res;
> -	struct keypad_regs __iomem	*regs;
> -	struct clk			*clk;
> -	struct device			*dev;
> -	spinlock_t			lock;
> -	int				irq_press;
> -	int				irq_release;
> -	int				rows, cols, row_shift;
> -	int				debounce_ms, active_low;
> -	u32				prev_keys[3];
> -	unsigned short			keycodes[];
> -};
> -
> -static irqreturn_t keypad_irq(int irq, void *data)
> -{
> -	struct keypad_data *kp = data;
> -	int i, bit, val, row, col, code;
> -	unsigned long flags;
> -	u32 curr_keys[3];
> -	u32 change;
> -
> -	spin_lock_irqsave(&kp->lock, flags);
> -
> -	memset(curr_keys, 0, sizeof(curr_keys));
> -	if (irq == kp->irq_press)
> -		for (i = 0; i < 3; i++)
> -			curr_keys[i] = keypad_read(kp, pres[i]);
> -
> -	for (i = 0; i < 3; i++) {
> -		change = curr_keys[i] ^ kp->prev_keys[i];
> -
> -		while (change) {
> -			bit     = fls(change) - 1;
> -			change ^= BIT(bit);
> -			val     = curr_keys[i] & BIT(bit);
> -			bit    += i * 32;
> -			row     = bit / KEYPAD_COLS;
> -			col     = bit % KEYPAD_COLS;
> -
> -			code = MATRIX_SCAN_CODE(row, col, kp->row_shift);
> -			input_event(kp->input_dev, EV_MSC, MSC_SCAN, code);
> -			input_report_key(kp->input_dev, kp->keycodes[code],
> -					 val);
> -		}
> -	}
> -	input_sync(kp->input_dev);
> -	memcpy(kp->prev_keys, curr_keys, sizeof(curr_keys));
> -
> -	if (irq == kp->irq_press)
> -		keypad_write(kp, lock, 0); /* Allow hardware updates */
> -
> -	spin_unlock_irqrestore(&kp->lock, flags);
> -
> -	return IRQ_HANDLED;
> -}
> -
> -static int keypad_start(struct input_dev *dev)
> -{
> -	struct keypad_data *kp = input_get_drvdata(dev);
> -	unsigned long mask, debounce, clk_rate_khz;
> -	unsigned long flags;
> -
> -	clk_enable(kp->clk);
> -	clk_rate_khz = clk_get_rate(kp->clk) / 1000;
> -
> -	spin_lock_irqsave(&kp->lock, flags);
> -
> -	/* Initialize device registers */
> -	keypad_write(kp, mode, 0);
> -
> -	mask  = BITS(kp->rows) << KEYPAD_COLS;
> -	mask |= BITS(kp->cols);
> -	keypad_write(kp, mask, ~mask);
> -
> -	keypad_write(kp, pol, kp->active_low ? 0 : 0x3ffff);
> -	keypad_write(kp, stable_cnt, 3);
> -
> -	debounce = kp->debounce_ms * clk_rate_khz;
> -	debounce = clamp(debounce, DEBOUNCE_MIN, DEBOUNCE_MAX);
> -	keypad_write(kp, dclock, debounce);
> -	keypad_write(kp, rclock, 4 * debounce);
> -
> -	keypad_write(kp, in_en, 1);
> -
> -	spin_unlock_irqrestore(&kp->lock, flags);
> -
> -	return 0;
> -}
> -
> -static void keypad_stop(struct input_dev *dev)
> -{
> -	struct keypad_data *kp = input_get_drvdata(dev);
> -
> -	synchronize_irq(kp->irq_press);
> -	synchronize_irq(kp->irq_release);
> -	clk_disable(kp->clk);
> -}
> -
> -static int keypad_probe(struct platform_device *pdev)
> -{
> -	const struct matrix_keypad_platform_data *pdata;
> -	const struct matrix_keymap_data *keymap_data;
> -	struct device *dev = &pdev->dev;
> -	struct keypad_data *kp;
> -	int error = 0, sz, row_shift;
> -	u32 rev = 0;
> -
> -	pdata = dev_get_platdata(&pdev->dev);
> -	if (!pdata) {
> -		dev_err(dev, "cannot find device data\n");
> -		return -EINVAL;
> -	}
> -
> -	keymap_data = pdata->keymap_data;
> -	if (!keymap_data) {
> -		dev_err(dev, "cannot find keymap data\n");
> -		return -EINVAL;
> -	}
> -
> -	row_shift = get_count_order(pdata->num_col_gpios);
> -	sz  = offsetof(struct keypad_data, keycodes);
> -	sz += (pdata->num_row_gpios << row_shift) * sizeof(kp->keycodes[0]);
> -	kp = kzalloc(sz, GFP_KERNEL);
> -	if (!kp) {
> -		dev_err(dev, "cannot allocate device info\n");
> -		return -ENOMEM;
> -	}
> -
> -	kp->dev  = dev;
> -	kp->rows = pdata->num_row_gpios;
> -	kp->cols = pdata->num_col_gpios;
> -	kp->row_shift = row_shift;
> -	platform_set_drvdata(pdev, kp);
> -	spin_lock_init(&kp->lock);
> -
> -	kp->irq_press   = platform_get_irq_byname(pdev, "press");
> -	kp->irq_release = platform_get_irq_byname(pdev, "release");
> -	if (kp->irq_press < 0 || kp->irq_release < 0) {
> -		dev_err(dev, "cannot determine device interrupts\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	kp->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	if (!kp->res) {
> -		dev_err(dev, "cannot determine register area\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	if (!request_mem_region(kp->res->start, resource_size(kp->res),
> -				pdev->name)) {
> -		dev_err(dev, "cannot claim register memory\n");
> -		kp->res = NULL;
> -		error = -EINVAL;
> -		goto error_res;
> -	}
> -
> -	kp->regs = ioremap(kp->res->start, resource_size(kp->res));
> -	if (!kp->regs) {
> -		dev_err(dev, "cannot map register memory\n");
> -		error = -ENOMEM;
> -		goto error_map;
> -	}
> -
> -	kp->clk = clk_get(dev, NULL);
> -	if (IS_ERR(kp->clk)) {
> -		dev_err(dev, "cannot claim device clock\n");
> -		error = PTR_ERR(kp->clk);
> -		goto error_clk;
> -	}
> -
> -	error = request_threaded_irq(kp->irq_press, NULL, keypad_irq,
> -				     IRQF_ONESHOT, dev_name(dev), kp);
> -	if (error < 0) {
> -		dev_err(kp->dev, "Could not allocate keypad press key irq\n");
> -		goto error_irq_press;
> -	}
> -
> -	error = request_threaded_irq(kp->irq_release, NULL, keypad_irq,
> -				     IRQF_ONESHOT, dev_name(dev), kp);
> -	if (error < 0) {
> -		dev_err(kp->dev, "Could not allocate keypad release key irq\n");
> -		goto error_irq_release;
> -	}
> -
> -	kp->input_dev = input_allocate_device();
> -	if (!kp->input_dev) {
> -		dev_err(dev, "cannot allocate input device\n");
> -		error = -ENOMEM;
> -		goto error_input;
> -	}
> -
> -	kp->input_dev->name	  = pdev->name;
> -	kp->input_dev->dev.parent = &pdev->dev;
> -	kp->input_dev->open	  = keypad_start;
> -	kp->input_dev->close	  = keypad_stop;
> -
> -	clk_enable(kp->clk);
> -	rev = keypad_read(kp, rev);
> -	kp->input_dev->id.bustype = BUS_HOST;
> -	kp->input_dev->id.product = ((rev >>  8) & 0x07);
> -	kp->input_dev->id.version = ((rev >> 16) & 0xfff);
> -	clk_disable(kp->clk);
> -
> -	error = matrix_keypad_build_keymap(keymap_data, NULL,
> -					   kp->rows, kp->cols,
> -					   kp->keycodes, kp->input_dev);
> -	if (error) {
> -		dev_err(dev, "Failed to build keymap\n");
> -		goto error_reg;
> -	}
> -
> -	if (!pdata->no_autorepeat)
> -		kp->input_dev->evbit[0] |= BIT_MASK(EV_REP);
> -	input_set_capability(kp->input_dev, EV_MSC, MSC_SCAN);
> -
> -	input_set_drvdata(kp->input_dev, kp);
> -
> -	error = input_register_device(kp->input_dev);
> -	if (error < 0) {
> -		dev_err(dev, "Could not register input device\n");
> -		goto error_reg;
> -	}
> -
> -	return 0;
> -
> -
> -error_reg:
> -	input_free_device(kp->input_dev);
> -error_input:
> -	free_irq(kp->irq_release, kp);
> -error_irq_release:
> -	free_irq(kp->irq_press, kp);
> -error_irq_press:
> -	clk_put(kp->clk);
> -error_clk:
> -	iounmap(kp->regs);
> -error_map:
> -	release_mem_region(kp->res->start, resource_size(kp->res));
> -error_res:
> -	kfree(kp);
> -	return error;
> -}
> -
> -static int keypad_remove(struct platform_device *pdev)
> -{
> -	struct keypad_data *kp = platform_get_drvdata(pdev);
> -
> -	free_irq(kp->irq_press, kp);
> -	free_irq(kp->irq_release, kp);
> -	input_unregister_device(kp->input_dev);
> -	clk_put(kp->clk);
> -	iounmap(kp->regs);
> -	release_mem_region(kp->res->start, resource_size(kp->res));
> -	kfree(kp);
> -
> -	return 0;
> -}
> -
> -static struct platform_driver keypad_driver = {
> -	.probe		= keypad_probe,
> -	.remove		= keypad_remove,
> -	.driver.name	= "tnetv107x-keypad",
> -	.driver.owner	= THIS_MODULE,
> -};
> -module_platform_driver(keypad_driver);
> -
> -MODULE_AUTHOR("Cyril Chemparathy");
> -MODULE_DESCRIPTION("TNETV107X Keypad Driver");
> -MODULE_ALIAS("platform:tnetv107x-keypad");
> -MODULE_LICENSE("GPL");
> diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
> index 07e9e82..68edc9d 100644
> --- a/drivers/input/touchscreen/Kconfig
> +++ b/drivers/input/touchscreen/Kconfig
> @@ -514,15 +514,6 @@ config TOUCHSCREEN_MIGOR
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called migor_ts.
>  
> -config TOUCHSCREEN_TNETV107X
> -	tristate "TI TNETV107X touchscreen support"
> -	depends on ARCH_DAVINCI_TNETV107X
> -	help
> -	  Say Y here if you want to use the TNETV107X touchscreen.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called tnetv107x-ts.
> -
>  config TOUCHSCREEN_TOUCHRIGHT
>  	tristate "Touchright serial touchscreen"
>  	select SERIO
> diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
> index 62801f2..4bc954b 100644
> --- a/drivers/input/touchscreen/Makefile
> +++ b/drivers/input/touchscreen/Makefile
> @@ -56,7 +56,6 @@ obj-$(CONFIG_TOUCHSCREEN_ST1232)	+= st1232.o
>  obj-$(CONFIG_TOUCHSCREEN_STMPE)		+= stmpe-ts.o
>  obj-$(CONFIG_TOUCHSCREEN_SUR40)		+= sur40.o
>  obj-$(CONFIG_TOUCHSCREEN_TI_AM335X_TSC)	+= ti_am335x_tsc.o
> -obj-$(CONFIG_TOUCHSCREEN_TNETV107X)	+= tnetv107x-ts.o
>  obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213)	+= touchit213.o
>  obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)	+= touchright.o
>  obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)	+= touchwin.o
> diff --git a/drivers/input/touchscreen/tnetv107x-ts.c b/drivers/input/touchscreen/tnetv107x-ts.c
> deleted file mode 100644
> index c47827a..0000000
> --- a/drivers/input/touchscreen/tnetv107x-ts.c
> +++ /dev/null
> @@ -1,384 +0,0 @@
> -/*
> - * Texas Instruments TNETV107X Touchscreen Driver
> - *
> - * Copyright (C) 2010 Texas Instruments
> - *
> - * 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 version 2.
> - *
> - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> - * kind, whether express or implied; without even the implied warranty
> - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#include <linux/module.h>
> -#include <linux/kernel.h>
> -#include <linux/err.h>
> -#include <linux/errno.h>
> -#include <linux/input.h>
> -#include <linux/platform_device.h>
> -#include <linux/interrupt.h>
> -#include <linux/slab.h>
> -#include <linux/delay.h>
> -#include <linux/ctype.h>
> -#include <linux/io.h>
> -#include <linux/clk.h>
> -
> -#include <mach/tnetv107x.h>
> -
> -#define TSC_PENUP_POLL		(HZ / 5)
> -#define IDLE_TIMEOUT		100 /* msec */
> -
> -/*
> - * The first and last samples of a touch interval are usually garbage and need
> - * to be filtered out with these devices.  The following definitions control
> - * the number of samples skipped.
> - */
> -#define TSC_HEAD_SKIP		1
> -#define TSC_TAIL_SKIP		1
> -#define TSC_SKIP		(TSC_HEAD_SKIP + TSC_TAIL_SKIP + 1)
> -#define TSC_SAMPLES		(TSC_SKIP + 1)
> -
> -/* Register Offsets */
> -struct tsc_regs {
> -	u32	rev;
> -	u32	tscm;
> -	u32	bwcm;
> -	u32	swc;
> -	u32	adcchnl;
> -	u32	adcdata;
> -	u32	chval[4];
> -};
> -
> -/* TSC Mode Configuration Register (tscm) bits */
> -#define WMODE		BIT(0)
> -#define TSKIND		BIT(1)
> -#define ZMEASURE_EN	BIT(2)
> -#define IDLE		BIT(3)
> -#define TSC_EN		BIT(4)
> -#define STOP		BIT(5)
> -#define ONE_SHOT	BIT(6)
> -#define SINGLE		BIT(7)
> -#define AVG		BIT(8)
> -#define AVGNUM(x)	(((x) & 0x03) <<  9)
> -#define PVSTC(x)	(((x) & 0x07) << 11)
> -#define PON		BIT(14)
> -#define PONBG		BIT(15)
> -#define AFERST		BIT(16)
> -
> -/* ADC DATA Capture Register bits */
> -#define DATA_VALID	BIT(16)
> -
> -/* Register Access Macros */
> -#define tsc_read(ts, reg)		__raw_readl(&(ts)->regs->reg)
> -#define tsc_write(ts, reg, val)		__raw_writel(val, &(ts)->regs->reg);
> -#define tsc_set_bits(ts, reg, val)	\
> -	tsc_write(ts, reg, tsc_read(ts, reg) | (val))
> -#define tsc_clr_bits(ts, reg, val)	\
> -	tsc_write(ts, reg, tsc_read(ts, reg) & ~(val))
> -
> -struct sample {
> -	int x, y, p;
> -};
> -
> -struct tsc_data {
> -	struct input_dev		*input_dev;
> -	struct resource			*res;
> -	struct tsc_regs __iomem		*regs;
> -	struct timer_list		timer;
> -	spinlock_t			lock;
> -	struct clk			*clk;
> -	struct device			*dev;
> -	int				sample_count;
> -	struct sample			samples[TSC_SAMPLES];
> -	int				tsc_irq;
> -};
> -
> -static int tsc_read_sample(struct tsc_data *ts, struct sample* sample)
> -{
> -	int	x, y, z1, z2, t, p = 0;
> -	u32	val;
> -
> -	val = tsc_read(ts, chval[0]);
> -	if (val & DATA_VALID)
> -		x = val & 0xffff;
> -	else
> -		return -EINVAL;
> -
> -	y  = tsc_read(ts, chval[1]) & 0xffff;
> -	z1 = tsc_read(ts, chval[2]) & 0xffff;
> -	z2 = tsc_read(ts, chval[3]) & 0xffff;
> -
> -	if (z1) {
> -		t = ((600 * x) * (z2 - z1));
> -		p = t / (u32) (z1 << 12);
> -		if (p < 0)
> -			p = 0;
> -	}
> -
> -	sample->x  = x;
> -	sample->y  = y;
> -	sample->p  = p;
> -
> -	return 0;
> -}
> -
> -static void tsc_poll(unsigned long data)
> -{
> -	struct tsc_data *ts = (struct tsc_data *)data;
> -	unsigned long flags;
> -	int i, val, x, y, p;
> -
> -	spin_lock_irqsave(&ts->lock, flags);
> -
> -	if (ts->sample_count >= TSC_SKIP) {
> -		input_report_abs(ts->input_dev, ABS_PRESSURE, 0);
> -		input_report_key(ts->input_dev, BTN_TOUCH, 0);
> -		input_sync(ts->input_dev);
> -	} else if (ts->sample_count > 0) {
> -		/*
> -		 * A touch event lasted less than our skip count.  Salvage and
> -		 * report anyway.
> -		 */
> -		for (i = 0, val = 0; i < ts->sample_count; i++)
> -			val += ts->samples[i].x;
> -		x = val / ts->sample_count;
> -
> -		for (i = 0, val = 0; i < ts->sample_count; i++)
> -			val += ts->samples[i].y;
> -		y = val / ts->sample_count;
> -
> -		for (i = 0, val = 0; i < ts->sample_count; i++)
> -			val += ts->samples[i].p;
> -		p = val / ts->sample_count;
> -
> -		input_report_abs(ts->input_dev, ABS_X, x);
> -		input_report_abs(ts->input_dev, ABS_Y, y);
> -		input_report_abs(ts->input_dev, ABS_PRESSURE, p);
> -		input_report_key(ts->input_dev, BTN_TOUCH, 1);
> -		input_sync(ts->input_dev);
> -	}
> -
> -	ts->sample_count = 0;
> -
> -	spin_unlock_irqrestore(&ts->lock, flags);
> -}
> -
> -static irqreturn_t tsc_irq(int irq, void *dev_id)
> -{
> -	struct tsc_data *ts = (struct tsc_data *)dev_id;
> -	struct sample *sample;
> -	int index;
> -
> -	spin_lock(&ts->lock);
> -
> -	index = ts->sample_count % TSC_SAMPLES;
> -	sample = &ts->samples[index];
> -	if (tsc_read_sample(ts, sample) < 0)
> -		goto out;
> -
> -	if (++ts->sample_count >= TSC_SKIP) {
> -		index = (ts->sample_count - TSC_TAIL_SKIP - 1) % TSC_SAMPLES;
> -		sample = &ts->samples[index];
> -
> -		input_report_abs(ts->input_dev, ABS_X, sample->x);
> -		input_report_abs(ts->input_dev, ABS_Y, sample->y);
> -		input_report_abs(ts->input_dev, ABS_PRESSURE, sample->p);
> -		if (ts->sample_count == TSC_SKIP)
> -			input_report_key(ts->input_dev, BTN_TOUCH, 1);
> -		input_sync(ts->input_dev);
> -	}
> -	mod_timer(&ts->timer, jiffies + TSC_PENUP_POLL);
> -out:
> -	spin_unlock(&ts->lock);
> -	return IRQ_HANDLED;
> -}
> -
> -static int tsc_start(struct input_dev *dev)
> -{
> -	struct tsc_data *ts = input_get_drvdata(dev);
> -	unsigned long timeout = jiffies + msecs_to_jiffies(IDLE_TIMEOUT);
> -	u32 val;
> -
> -	clk_enable(ts->clk);
> -
> -	/* Go to idle mode, before any initialization */
> -	while (time_after(timeout, jiffies)) {
> -		if (tsc_read(ts, tscm) & IDLE)
> -			break;
> -	}
> -
> -	if (time_before(timeout, jiffies)) {
> -		dev_warn(ts->dev, "timeout waiting for idle\n");
> -		clk_disable(ts->clk);
> -		return -EIO;
> -	}
> -
> -	/* Configure TSC Control register*/
> -	val = (PONBG | PON | PVSTC(4) | ONE_SHOT | ZMEASURE_EN);
> -	tsc_write(ts, tscm, val);
> -
> -	/* Bring TSC out of reset: Clear AFE reset bit */
> -	val &= ~(AFERST);
> -	tsc_write(ts, tscm, val);
> -
> -	/* Configure all pins for hardware control*/
> -	tsc_write(ts, bwcm, 0);
> -
> -	/* Finally enable the TSC */
> -	tsc_set_bits(ts, tscm, TSC_EN);
> -
> -	return 0;
> -}
> -
> -static void tsc_stop(struct input_dev *dev)
> -{
> -	struct tsc_data *ts = input_get_drvdata(dev);
> -
> -	tsc_clr_bits(ts, tscm, TSC_EN);
> -	synchronize_irq(ts->tsc_irq);
> -	del_timer_sync(&ts->timer);
> -	clk_disable(ts->clk);
> -}
> -
> -static int tsc_probe(struct platform_device *pdev)
> -{
> -	struct device *dev = &pdev->dev;
> -	struct tsc_data *ts;
> -	int error = 0;
> -	u32 rev = 0;
> -
> -	ts = kzalloc(sizeof(struct tsc_data), GFP_KERNEL);
> -	if (!ts) {
> -		dev_err(dev, "cannot allocate device info\n");
> -		return -ENOMEM;
> -	}
> -
> -	ts->dev = dev;
> -	spin_lock_init(&ts->lock);
> -	setup_timer(&ts->timer, tsc_poll, (unsigned long)ts);
> -	platform_set_drvdata(pdev, ts);
> -
> -	ts->tsc_irq = platform_get_irq(pdev, 0);
> -	if (ts->tsc_irq < 0) {
> -		dev_err(dev, "cannot determine device interrupt\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	ts->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	if (!ts->res) {
> -		dev_err(dev, "cannot determine register area\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	if (!request_mem_region(ts->res->start, resource_size(ts->res),
> -				pdev->name)) {
> -		dev_err(dev, "cannot claim register memory\n");
> -		ts->res = NULL;
> -		error = -EINVAL;
> -		goto error_res;
> -	}
> -
> -	ts->regs = ioremap(ts->res->start, resource_size(ts->res));
> -	if (!ts->regs) {
> -		dev_err(dev, "cannot map register memory\n");
> -		error = -ENOMEM;
> -		goto error_map;
> -	}
> -
> -	ts->clk = clk_get(dev, NULL);
> -	if (IS_ERR(ts->clk)) {
> -		dev_err(dev, "cannot claim device clock\n");
> -		error = PTR_ERR(ts->clk);
> -		goto error_clk;
> -	}
> -
> -	error = request_threaded_irq(ts->tsc_irq, NULL, tsc_irq, IRQF_ONESHOT,
> -				     dev_name(dev), ts);
> -	if (error < 0) {
> -		dev_err(ts->dev, "Could not allocate ts irq\n");
> -		goto error_irq;
> -	}
> -
> -	ts->input_dev = input_allocate_device();
> -	if (!ts->input_dev) {
> -		dev_err(dev, "cannot allocate input device\n");
> -		error = -ENOMEM;
> -		goto error_input;
> -	}
> -	input_set_drvdata(ts->input_dev, ts);
> -
> -	ts->input_dev->name       = pdev->name;
> -	ts->input_dev->id.bustype = BUS_HOST;
> -	ts->input_dev->dev.parent = &pdev->dev;
> -	ts->input_dev->open	  = tsc_start;
> -	ts->input_dev->close	  = tsc_stop;
> -
> -	clk_enable(ts->clk);
> -	rev = tsc_read(ts, rev);
> -	ts->input_dev->id.product = ((rev >>  8) & 0x07);
> -	ts->input_dev->id.version = ((rev >> 16) & 0xfff);
> -	clk_disable(ts->clk);
> -
> -	__set_bit(EV_KEY,    ts->input_dev->evbit);
> -	__set_bit(EV_ABS,    ts->input_dev->evbit);
> -	__set_bit(BTN_TOUCH, ts->input_dev->keybit);
> -
> -	input_set_abs_params(ts->input_dev, ABS_X, 0, 0xffff, 5, 0);
> -	input_set_abs_params(ts->input_dev, ABS_Y, 0, 0xffff, 5, 0);
> -	input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 4095, 128, 0);
> -
> -	error = input_register_device(ts->input_dev);
> -	if (error < 0) {
> -		dev_err(dev, "failed input device registration\n");
> -		goto error_reg;
> -	}
> -
> -	return 0;
> -
> -error_reg:
> -	input_free_device(ts->input_dev);
> -error_input:
> -	free_irq(ts->tsc_irq, ts);
> -error_irq:
> -	clk_put(ts->clk);
> -error_clk:
> -	iounmap(ts->regs);
> -error_map:
> -	release_mem_region(ts->res->start, resource_size(ts->res));
> -error_res:
> -	kfree(ts);
> -
> -	return error;
> -}
> -
> -static int tsc_remove(struct platform_device *pdev)
> -{
> -	struct tsc_data *ts = platform_get_drvdata(pdev);
> -
> -	input_unregister_device(ts->input_dev);
> -	free_irq(ts->tsc_irq, ts);
> -	clk_put(ts->clk);
> -	iounmap(ts->regs);
> -	release_mem_region(ts->res->start, resource_size(ts->res));
> -	kfree(ts);
> -
> -	return 0;
> -}
> -
> -static struct platform_driver tsc_driver = {
> -	.probe		= tsc_probe,
> -	.remove		= tsc_remove,
> -	.driver.name	= "tnetv107x-ts",
> -	.driver.owner	= THIS_MODULE,
> -};
> -module_platform_driver(tsc_driver);
> -
> -MODULE_AUTHOR("Cyril Chemparathy");
> -MODULE_DESCRIPTION("TNETV107X Touchscreen Driver");
> -MODULE_ALIAS("platform:tnetv107x-ts");
> -MODULE_LICENSE("GPL");
> -- 
> 1.8.3.2
> 

-- 
Dmitry

WARNING: multiple messages have this Message-ID (diff)
From: dmitry.torokhov@gmail.com (Dmitry Torokhov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/3] input: remove obsolete tnetv107x drivers
Date: Fri, 28 Mar 2014 01:36:10 -0700	[thread overview]
Message-ID: <20140328083610.GK22093@core.coreip.homeip.net> (raw)
In-Reply-To: <1395154561-1199121-4-git-send-email-arnd@arndb.de>

On Tue, Mar 18, 2014 at 03:56:01PM +0100, Arnd Bergmann wrote:
> The tnetv107x platform is getting removed, so the touchscreen
> and keypad drivers for this platform will no longer be needed
> either.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> Acked-by: Sekhar Nori <nsekhar@ti.com>
> Acked-by: Kevin Hilman <khilman@linaro.org>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: linux-input at vger.kernel.org

Applied, thank you.

> ---
>  drivers/input/keyboard/Kconfig            |  10 -
>  drivers/input/keyboard/Makefile           |   1 -
>  drivers/input/keyboard/tnetv107x-keypad.c | 329 -------------------------
>  drivers/input/touchscreen/Kconfig         |   9 -
>  drivers/input/touchscreen/Makefile        |   1 -
>  drivers/input/touchscreen/tnetv107x-ts.c  | 384 ------------------------------
>  6 files changed, 734 deletions(-)
>  delete mode 100644 drivers/input/keyboard/tnetv107x-keypad.c
>  delete mode 100644 drivers/input/touchscreen/tnetv107x-ts.c
> 
> diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
> index a673c9f..935dcaf 100644
> --- a/drivers/input/keyboard/Kconfig
> +++ b/drivers/input/keyboard/Kconfig
> @@ -595,16 +595,6 @@ config KEYBOARD_TC3589X
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called tc3589x-keypad.
>  
> -config KEYBOARD_TNETV107X
> -	tristate "TI TNETV107X keypad support"
> -	depends on ARCH_DAVINCI_TNETV107X
> -	select INPUT_MATRIXKMAP
> -	help
> -	  Say Y here if you want to use the TNETV107X keypad.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called tnetv107x-keypad.
> -
>  config KEYBOARD_TWL4030
>  	tristate "TI TWL4030/TWL5030/TPS659x0 keypad support"
>  	depends on TWL4030_CORE
> diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
> index a699b61..81014d9 100644
> --- a/drivers/input/keyboard/Makefile
> +++ b/drivers/input/keyboard/Makefile
> @@ -53,7 +53,6 @@ obj-$(CONFIG_KEYBOARD_STOWAWAY)		+= stowaway.o
>  obj-$(CONFIG_KEYBOARD_SUNKBD)		+= sunkbd.o
>  obj-$(CONFIG_KEYBOARD_TC3589X)		+= tc3589x-keypad.o
>  obj-$(CONFIG_KEYBOARD_TEGRA)		+= tegra-kbc.o
> -obj-$(CONFIG_KEYBOARD_TNETV107X)	+= tnetv107x-keypad.o
>  obj-$(CONFIG_KEYBOARD_TWL4030)		+= twl4030_keypad.o
>  obj-$(CONFIG_KEYBOARD_XTKBD)		+= xtkbd.o
>  obj-$(CONFIG_KEYBOARD_W90P910)		+= w90p910_keypad.o
> diff --git a/drivers/input/keyboard/tnetv107x-keypad.c b/drivers/input/keyboard/tnetv107x-keypad.c
> deleted file mode 100644
> index 086511c..0000000
> --- a/drivers/input/keyboard/tnetv107x-keypad.c
> +++ /dev/null
> @@ -1,329 +0,0 @@
> -/*
> - * Texas Instruments TNETV107X Keypad Driver
> - *
> - * Copyright (C) 2010 Texas Instruments
> - *
> - * 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 version 2.
> - *
> - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> - * kind, whether express or implied; without even the implied warranty
> - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#include <linux/kernel.h>
> -#include <linux/err.h>
> -#include <linux/errno.h>
> -#include <linux/input.h>
> -#include <linux/platform_device.h>
> -#include <linux/interrupt.h>
> -#include <linux/slab.h>
> -#include <linux/delay.h>
> -#include <linux/io.h>
> -#include <linux/clk.h>
> -#include <linux/input/matrix_keypad.h>
> -#include <linux/module.h>
> -
> -#define BITS(x)			(BIT(x) - 1)
> -
> -#define KEYPAD_ROWS		9
> -#define KEYPAD_COLS		9
> -
> -#define DEBOUNCE_MIN		0x400ul
> -#define DEBOUNCE_MAX		0x3ffffffful
> -
> -struct keypad_regs {
> -	u32	rev;
> -	u32	mode;
> -	u32	mask;
> -	u32	pol;
> -	u32	dclock;
> -	u32	rclock;
> -	u32	stable_cnt;
> -	u32	in_en;
> -	u32	out;
> -	u32	out_en;
> -	u32	in;
> -	u32	lock;
> -	u32	pres[3];
> -};
> -
> -#define keypad_read(kp, reg)		__raw_readl(&(kp)->regs->reg)
> -#define keypad_write(kp, reg, val)	__raw_writel(val, &(kp)->regs->reg)
> -
> -struct keypad_data {
> -	struct input_dev		*input_dev;
> -	struct resource			*res;
> -	struct keypad_regs __iomem	*regs;
> -	struct clk			*clk;
> -	struct device			*dev;
> -	spinlock_t			lock;
> -	int				irq_press;
> -	int				irq_release;
> -	int				rows, cols, row_shift;
> -	int				debounce_ms, active_low;
> -	u32				prev_keys[3];
> -	unsigned short			keycodes[];
> -};
> -
> -static irqreturn_t keypad_irq(int irq, void *data)
> -{
> -	struct keypad_data *kp = data;
> -	int i, bit, val, row, col, code;
> -	unsigned long flags;
> -	u32 curr_keys[3];
> -	u32 change;
> -
> -	spin_lock_irqsave(&kp->lock, flags);
> -
> -	memset(curr_keys, 0, sizeof(curr_keys));
> -	if (irq == kp->irq_press)
> -		for (i = 0; i < 3; i++)
> -			curr_keys[i] = keypad_read(kp, pres[i]);
> -
> -	for (i = 0; i < 3; i++) {
> -		change = curr_keys[i] ^ kp->prev_keys[i];
> -
> -		while (change) {
> -			bit     = fls(change) - 1;
> -			change ^= BIT(bit);
> -			val     = curr_keys[i] & BIT(bit);
> -			bit    += i * 32;
> -			row     = bit / KEYPAD_COLS;
> -			col     = bit % KEYPAD_COLS;
> -
> -			code = MATRIX_SCAN_CODE(row, col, kp->row_shift);
> -			input_event(kp->input_dev, EV_MSC, MSC_SCAN, code);
> -			input_report_key(kp->input_dev, kp->keycodes[code],
> -					 val);
> -		}
> -	}
> -	input_sync(kp->input_dev);
> -	memcpy(kp->prev_keys, curr_keys, sizeof(curr_keys));
> -
> -	if (irq == kp->irq_press)
> -		keypad_write(kp, lock, 0); /* Allow hardware updates */
> -
> -	spin_unlock_irqrestore(&kp->lock, flags);
> -
> -	return IRQ_HANDLED;
> -}
> -
> -static int keypad_start(struct input_dev *dev)
> -{
> -	struct keypad_data *kp = input_get_drvdata(dev);
> -	unsigned long mask, debounce, clk_rate_khz;
> -	unsigned long flags;
> -
> -	clk_enable(kp->clk);
> -	clk_rate_khz = clk_get_rate(kp->clk) / 1000;
> -
> -	spin_lock_irqsave(&kp->lock, flags);
> -
> -	/* Initialize device registers */
> -	keypad_write(kp, mode, 0);
> -
> -	mask  = BITS(kp->rows) << KEYPAD_COLS;
> -	mask |= BITS(kp->cols);
> -	keypad_write(kp, mask, ~mask);
> -
> -	keypad_write(kp, pol, kp->active_low ? 0 : 0x3ffff);
> -	keypad_write(kp, stable_cnt, 3);
> -
> -	debounce = kp->debounce_ms * clk_rate_khz;
> -	debounce = clamp(debounce, DEBOUNCE_MIN, DEBOUNCE_MAX);
> -	keypad_write(kp, dclock, debounce);
> -	keypad_write(kp, rclock, 4 * debounce);
> -
> -	keypad_write(kp, in_en, 1);
> -
> -	spin_unlock_irqrestore(&kp->lock, flags);
> -
> -	return 0;
> -}
> -
> -static void keypad_stop(struct input_dev *dev)
> -{
> -	struct keypad_data *kp = input_get_drvdata(dev);
> -
> -	synchronize_irq(kp->irq_press);
> -	synchronize_irq(kp->irq_release);
> -	clk_disable(kp->clk);
> -}
> -
> -static int keypad_probe(struct platform_device *pdev)
> -{
> -	const struct matrix_keypad_platform_data *pdata;
> -	const struct matrix_keymap_data *keymap_data;
> -	struct device *dev = &pdev->dev;
> -	struct keypad_data *kp;
> -	int error = 0, sz, row_shift;
> -	u32 rev = 0;
> -
> -	pdata = dev_get_platdata(&pdev->dev);
> -	if (!pdata) {
> -		dev_err(dev, "cannot find device data\n");
> -		return -EINVAL;
> -	}
> -
> -	keymap_data = pdata->keymap_data;
> -	if (!keymap_data) {
> -		dev_err(dev, "cannot find keymap data\n");
> -		return -EINVAL;
> -	}
> -
> -	row_shift = get_count_order(pdata->num_col_gpios);
> -	sz  = offsetof(struct keypad_data, keycodes);
> -	sz += (pdata->num_row_gpios << row_shift) * sizeof(kp->keycodes[0]);
> -	kp = kzalloc(sz, GFP_KERNEL);
> -	if (!kp) {
> -		dev_err(dev, "cannot allocate device info\n");
> -		return -ENOMEM;
> -	}
> -
> -	kp->dev  = dev;
> -	kp->rows = pdata->num_row_gpios;
> -	kp->cols = pdata->num_col_gpios;
> -	kp->row_shift = row_shift;
> -	platform_set_drvdata(pdev, kp);
> -	spin_lock_init(&kp->lock);
> -
> -	kp->irq_press   = platform_get_irq_byname(pdev, "press");
> -	kp->irq_release = platform_get_irq_byname(pdev, "release");
> -	if (kp->irq_press < 0 || kp->irq_release < 0) {
> -		dev_err(dev, "cannot determine device interrupts\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	kp->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	if (!kp->res) {
> -		dev_err(dev, "cannot determine register area\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	if (!request_mem_region(kp->res->start, resource_size(kp->res),
> -				pdev->name)) {
> -		dev_err(dev, "cannot claim register memory\n");
> -		kp->res = NULL;
> -		error = -EINVAL;
> -		goto error_res;
> -	}
> -
> -	kp->regs = ioremap(kp->res->start, resource_size(kp->res));
> -	if (!kp->regs) {
> -		dev_err(dev, "cannot map register memory\n");
> -		error = -ENOMEM;
> -		goto error_map;
> -	}
> -
> -	kp->clk = clk_get(dev, NULL);
> -	if (IS_ERR(kp->clk)) {
> -		dev_err(dev, "cannot claim device clock\n");
> -		error = PTR_ERR(kp->clk);
> -		goto error_clk;
> -	}
> -
> -	error = request_threaded_irq(kp->irq_press, NULL, keypad_irq,
> -				     IRQF_ONESHOT, dev_name(dev), kp);
> -	if (error < 0) {
> -		dev_err(kp->dev, "Could not allocate keypad press key irq\n");
> -		goto error_irq_press;
> -	}
> -
> -	error = request_threaded_irq(kp->irq_release, NULL, keypad_irq,
> -				     IRQF_ONESHOT, dev_name(dev), kp);
> -	if (error < 0) {
> -		dev_err(kp->dev, "Could not allocate keypad release key irq\n");
> -		goto error_irq_release;
> -	}
> -
> -	kp->input_dev = input_allocate_device();
> -	if (!kp->input_dev) {
> -		dev_err(dev, "cannot allocate input device\n");
> -		error = -ENOMEM;
> -		goto error_input;
> -	}
> -
> -	kp->input_dev->name	  = pdev->name;
> -	kp->input_dev->dev.parent = &pdev->dev;
> -	kp->input_dev->open	  = keypad_start;
> -	kp->input_dev->close	  = keypad_stop;
> -
> -	clk_enable(kp->clk);
> -	rev = keypad_read(kp, rev);
> -	kp->input_dev->id.bustype = BUS_HOST;
> -	kp->input_dev->id.product = ((rev >>  8) & 0x07);
> -	kp->input_dev->id.version = ((rev >> 16) & 0xfff);
> -	clk_disable(kp->clk);
> -
> -	error = matrix_keypad_build_keymap(keymap_data, NULL,
> -					   kp->rows, kp->cols,
> -					   kp->keycodes, kp->input_dev);
> -	if (error) {
> -		dev_err(dev, "Failed to build keymap\n");
> -		goto error_reg;
> -	}
> -
> -	if (!pdata->no_autorepeat)
> -		kp->input_dev->evbit[0] |= BIT_MASK(EV_REP);
> -	input_set_capability(kp->input_dev, EV_MSC, MSC_SCAN);
> -
> -	input_set_drvdata(kp->input_dev, kp);
> -
> -	error = input_register_device(kp->input_dev);
> -	if (error < 0) {
> -		dev_err(dev, "Could not register input device\n");
> -		goto error_reg;
> -	}
> -
> -	return 0;
> -
> -
> -error_reg:
> -	input_free_device(kp->input_dev);
> -error_input:
> -	free_irq(kp->irq_release, kp);
> -error_irq_release:
> -	free_irq(kp->irq_press, kp);
> -error_irq_press:
> -	clk_put(kp->clk);
> -error_clk:
> -	iounmap(kp->regs);
> -error_map:
> -	release_mem_region(kp->res->start, resource_size(kp->res));
> -error_res:
> -	kfree(kp);
> -	return error;
> -}
> -
> -static int keypad_remove(struct platform_device *pdev)
> -{
> -	struct keypad_data *kp = platform_get_drvdata(pdev);
> -
> -	free_irq(kp->irq_press, kp);
> -	free_irq(kp->irq_release, kp);
> -	input_unregister_device(kp->input_dev);
> -	clk_put(kp->clk);
> -	iounmap(kp->regs);
> -	release_mem_region(kp->res->start, resource_size(kp->res));
> -	kfree(kp);
> -
> -	return 0;
> -}
> -
> -static struct platform_driver keypad_driver = {
> -	.probe		= keypad_probe,
> -	.remove		= keypad_remove,
> -	.driver.name	= "tnetv107x-keypad",
> -	.driver.owner	= THIS_MODULE,
> -};
> -module_platform_driver(keypad_driver);
> -
> -MODULE_AUTHOR("Cyril Chemparathy");
> -MODULE_DESCRIPTION("TNETV107X Keypad Driver");
> -MODULE_ALIAS("platform:tnetv107x-keypad");
> -MODULE_LICENSE("GPL");
> diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
> index 07e9e82..68edc9d 100644
> --- a/drivers/input/touchscreen/Kconfig
> +++ b/drivers/input/touchscreen/Kconfig
> @@ -514,15 +514,6 @@ config TOUCHSCREEN_MIGOR
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called migor_ts.
>  
> -config TOUCHSCREEN_TNETV107X
> -	tristate "TI TNETV107X touchscreen support"
> -	depends on ARCH_DAVINCI_TNETV107X
> -	help
> -	  Say Y here if you want to use the TNETV107X touchscreen.
> -
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called tnetv107x-ts.
> -
>  config TOUCHSCREEN_TOUCHRIGHT
>  	tristate "Touchright serial touchscreen"
>  	select SERIO
> diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
> index 62801f2..4bc954b 100644
> --- a/drivers/input/touchscreen/Makefile
> +++ b/drivers/input/touchscreen/Makefile
> @@ -56,7 +56,6 @@ obj-$(CONFIG_TOUCHSCREEN_ST1232)	+= st1232.o
>  obj-$(CONFIG_TOUCHSCREEN_STMPE)		+= stmpe-ts.o
>  obj-$(CONFIG_TOUCHSCREEN_SUR40)		+= sur40.o
>  obj-$(CONFIG_TOUCHSCREEN_TI_AM335X_TSC)	+= ti_am335x_tsc.o
> -obj-$(CONFIG_TOUCHSCREEN_TNETV107X)	+= tnetv107x-ts.o
>  obj-$(CONFIG_TOUCHSCREEN_TOUCHIT213)	+= touchit213.o
>  obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT)	+= touchright.o
>  obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN)	+= touchwin.o
> diff --git a/drivers/input/touchscreen/tnetv107x-ts.c b/drivers/input/touchscreen/tnetv107x-ts.c
> deleted file mode 100644
> index c47827a..0000000
> --- a/drivers/input/touchscreen/tnetv107x-ts.c
> +++ /dev/null
> @@ -1,384 +0,0 @@
> -/*
> - * Texas Instruments TNETV107X Touchscreen Driver
> - *
> - * Copyright (C) 2010 Texas Instruments
> - *
> - * 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 version 2.
> - *
> - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> - * kind, whether express or implied; without even the implied warranty
> - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - */
> -
> -#include <linux/module.h>
> -#include <linux/kernel.h>
> -#include <linux/err.h>
> -#include <linux/errno.h>
> -#include <linux/input.h>
> -#include <linux/platform_device.h>
> -#include <linux/interrupt.h>
> -#include <linux/slab.h>
> -#include <linux/delay.h>
> -#include <linux/ctype.h>
> -#include <linux/io.h>
> -#include <linux/clk.h>
> -
> -#include <mach/tnetv107x.h>
> -
> -#define TSC_PENUP_POLL		(HZ / 5)
> -#define IDLE_TIMEOUT		100 /* msec */
> -
> -/*
> - * The first and last samples of a touch interval are usually garbage and need
> - * to be filtered out with these devices.  The following definitions control
> - * the number of samples skipped.
> - */
> -#define TSC_HEAD_SKIP		1
> -#define TSC_TAIL_SKIP		1
> -#define TSC_SKIP		(TSC_HEAD_SKIP + TSC_TAIL_SKIP + 1)
> -#define TSC_SAMPLES		(TSC_SKIP + 1)
> -
> -/* Register Offsets */
> -struct tsc_regs {
> -	u32	rev;
> -	u32	tscm;
> -	u32	bwcm;
> -	u32	swc;
> -	u32	adcchnl;
> -	u32	adcdata;
> -	u32	chval[4];
> -};
> -
> -/* TSC Mode Configuration Register (tscm) bits */
> -#define WMODE		BIT(0)
> -#define TSKIND		BIT(1)
> -#define ZMEASURE_EN	BIT(2)
> -#define IDLE		BIT(3)
> -#define TSC_EN		BIT(4)
> -#define STOP		BIT(5)
> -#define ONE_SHOT	BIT(6)
> -#define SINGLE		BIT(7)
> -#define AVG		BIT(8)
> -#define AVGNUM(x)	(((x) & 0x03) <<  9)
> -#define PVSTC(x)	(((x) & 0x07) << 11)
> -#define PON		BIT(14)
> -#define PONBG		BIT(15)
> -#define AFERST		BIT(16)
> -
> -/* ADC DATA Capture Register bits */
> -#define DATA_VALID	BIT(16)
> -
> -/* Register Access Macros */
> -#define tsc_read(ts, reg)		__raw_readl(&(ts)->regs->reg)
> -#define tsc_write(ts, reg, val)		__raw_writel(val, &(ts)->regs->reg);
> -#define tsc_set_bits(ts, reg, val)	\
> -	tsc_write(ts, reg, tsc_read(ts, reg) | (val))
> -#define tsc_clr_bits(ts, reg, val)	\
> -	tsc_write(ts, reg, tsc_read(ts, reg) & ~(val))
> -
> -struct sample {
> -	int x, y, p;
> -};
> -
> -struct tsc_data {
> -	struct input_dev		*input_dev;
> -	struct resource			*res;
> -	struct tsc_regs __iomem		*regs;
> -	struct timer_list		timer;
> -	spinlock_t			lock;
> -	struct clk			*clk;
> -	struct device			*dev;
> -	int				sample_count;
> -	struct sample			samples[TSC_SAMPLES];
> -	int				tsc_irq;
> -};
> -
> -static int tsc_read_sample(struct tsc_data *ts, struct sample* sample)
> -{
> -	int	x, y, z1, z2, t, p = 0;
> -	u32	val;
> -
> -	val = tsc_read(ts, chval[0]);
> -	if (val & DATA_VALID)
> -		x = val & 0xffff;
> -	else
> -		return -EINVAL;
> -
> -	y  = tsc_read(ts, chval[1]) & 0xffff;
> -	z1 = tsc_read(ts, chval[2]) & 0xffff;
> -	z2 = tsc_read(ts, chval[3]) & 0xffff;
> -
> -	if (z1) {
> -		t = ((600 * x) * (z2 - z1));
> -		p = t / (u32) (z1 << 12);
> -		if (p < 0)
> -			p = 0;
> -	}
> -
> -	sample->x  = x;
> -	sample->y  = y;
> -	sample->p  = p;
> -
> -	return 0;
> -}
> -
> -static void tsc_poll(unsigned long data)
> -{
> -	struct tsc_data *ts = (struct tsc_data *)data;
> -	unsigned long flags;
> -	int i, val, x, y, p;
> -
> -	spin_lock_irqsave(&ts->lock, flags);
> -
> -	if (ts->sample_count >= TSC_SKIP) {
> -		input_report_abs(ts->input_dev, ABS_PRESSURE, 0);
> -		input_report_key(ts->input_dev, BTN_TOUCH, 0);
> -		input_sync(ts->input_dev);
> -	} else if (ts->sample_count > 0) {
> -		/*
> -		 * A touch event lasted less than our skip count.  Salvage and
> -		 * report anyway.
> -		 */
> -		for (i = 0, val = 0; i < ts->sample_count; i++)
> -			val += ts->samples[i].x;
> -		x = val / ts->sample_count;
> -
> -		for (i = 0, val = 0; i < ts->sample_count; i++)
> -			val += ts->samples[i].y;
> -		y = val / ts->sample_count;
> -
> -		for (i = 0, val = 0; i < ts->sample_count; i++)
> -			val += ts->samples[i].p;
> -		p = val / ts->sample_count;
> -
> -		input_report_abs(ts->input_dev, ABS_X, x);
> -		input_report_abs(ts->input_dev, ABS_Y, y);
> -		input_report_abs(ts->input_dev, ABS_PRESSURE, p);
> -		input_report_key(ts->input_dev, BTN_TOUCH, 1);
> -		input_sync(ts->input_dev);
> -	}
> -
> -	ts->sample_count = 0;
> -
> -	spin_unlock_irqrestore(&ts->lock, flags);
> -}
> -
> -static irqreturn_t tsc_irq(int irq, void *dev_id)
> -{
> -	struct tsc_data *ts = (struct tsc_data *)dev_id;
> -	struct sample *sample;
> -	int index;
> -
> -	spin_lock(&ts->lock);
> -
> -	index = ts->sample_count % TSC_SAMPLES;
> -	sample = &ts->samples[index];
> -	if (tsc_read_sample(ts, sample) < 0)
> -		goto out;
> -
> -	if (++ts->sample_count >= TSC_SKIP) {
> -		index = (ts->sample_count - TSC_TAIL_SKIP - 1) % TSC_SAMPLES;
> -		sample = &ts->samples[index];
> -
> -		input_report_abs(ts->input_dev, ABS_X, sample->x);
> -		input_report_abs(ts->input_dev, ABS_Y, sample->y);
> -		input_report_abs(ts->input_dev, ABS_PRESSURE, sample->p);
> -		if (ts->sample_count == TSC_SKIP)
> -			input_report_key(ts->input_dev, BTN_TOUCH, 1);
> -		input_sync(ts->input_dev);
> -	}
> -	mod_timer(&ts->timer, jiffies + TSC_PENUP_POLL);
> -out:
> -	spin_unlock(&ts->lock);
> -	return IRQ_HANDLED;
> -}
> -
> -static int tsc_start(struct input_dev *dev)
> -{
> -	struct tsc_data *ts = input_get_drvdata(dev);
> -	unsigned long timeout = jiffies + msecs_to_jiffies(IDLE_TIMEOUT);
> -	u32 val;
> -
> -	clk_enable(ts->clk);
> -
> -	/* Go to idle mode, before any initialization */
> -	while (time_after(timeout, jiffies)) {
> -		if (tsc_read(ts, tscm) & IDLE)
> -			break;
> -	}
> -
> -	if (time_before(timeout, jiffies)) {
> -		dev_warn(ts->dev, "timeout waiting for idle\n");
> -		clk_disable(ts->clk);
> -		return -EIO;
> -	}
> -
> -	/* Configure TSC Control register*/
> -	val = (PONBG | PON | PVSTC(4) | ONE_SHOT | ZMEASURE_EN);
> -	tsc_write(ts, tscm, val);
> -
> -	/* Bring TSC out of reset: Clear AFE reset bit */
> -	val &= ~(AFERST);
> -	tsc_write(ts, tscm, val);
> -
> -	/* Configure all pins for hardware control*/
> -	tsc_write(ts, bwcm, 0);
> -
> -	/* Finally enable the TSC */
> -	tsc_set_bits(ts, tscm, TSC_EN);
> -
> -	return 0;
> -}
> -
> -static void tsc_stop(struct input_dev *dev)
> -{
> -	struct tsc_data *ts = input_get_drvdata(dev);
> -
> -	tsc_clr_bits(ts, tscm, TSC_EN);
> -	synchronize_irq(ts->tsc_irq);
> -	del_timer_sync(&ts->timer);
> -	clk_disable(ts->clk);
> -}
> -
> -static int tsc_probe(struct platform_device *pdev)
> -{
> -	struct device *dev = &pdev->dev;
> -	struct tsc_data *ts;
> -	int error = 0;
> -	u32 rev = 0;
> -
> -	ts = kzalloc(sizeof(struct tsc_data), GFP_KERNEL);
> -	if (!ts) {
> -		dev_err(dev, "cannot allocate device info\n");
> -		return -ENOMEM;
> -	}
> -
> -	ts->dev = dev;
> -	spin_lock_init(&ts->lock);
> -	setup_timer(&ts->timer, tsc_poll, (unsigned long)ts);
> -	platform_set_drvdata(pdev, ts);
> -
> -	ts->tsc_irq = platform_get_irq(pdev, 0);
> -	if (ts->tsc_irq < 0) {
> -		dev_err(dev, "cannot determine device interrupt\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	ts->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	if (!ts->res) {
> -		dev_err(dev, "cannot determine register area\n");
> -		error = -ENODEV;
> -		goto error_res;
> -	}
> -
> -	if (!request_mem_region(ts->res->start, resource_size(ts->res),
> -				pdev->name)) {
> -		dev_err(dev, "cannot claim register memory\n");
> -		ts->res = NULL;
> -		error = -EINVAL;
> -		goto error_res;
> -	}
> -
> -	ts->regs = ioremap(ts->res->start, resource_size(ts->res));
> -	if (!ts->regs) {
> -		dev_err(dev, "cannot map register memory\n");
> -		error = -ENOMEM;
> -		goto error_map;
> -	}
> -
> -	ts->clk = clk_get(dev, NULL);
> -	if (IS_ERR(ts->clk)) {
> -		dev_err(dev, "cannot claim device clock\n");
> -		error = PTR_ERR(ts->clk);
> -		goto error_clk;
> -	}
> -
> -	error = request_threaded_irq(ts->tsc_irq, NULL, tsc_irq, IRQF_ONESHOT,
> -				     dev_name(dev), ts);
> -	if (error < 0) {
> -		dev_err(ts->dev, "Could not allocate ts irq\n");
> -		goto error_irq;
> -	}
> -
> -	ts->input_dev = input_allocate_device();
> -	if (!ts->input_dev) {
> -		dev_err(dev, "cannot allocate input device\n");
> -		error = -ENOMEM;
> -		goto error_input;
> -	}
> -	input_set_drvdata(ts->input_dev, ts);
> -
> -	ts->input_dev->name       = pdev->name;
> -	ts->input_dev->id.bustype = BUS_HOST;
> -	ts->input_dev->dev.parent = &pdev->dev;
> -	ts->input_dev->open	  = tsc_start;
> -	ts->input_dev->close	  = tsc_stop;
> -
> -	clk_enable(ts->clk);
> -	rev = tsc_read(ts, rev);
> -	ts->input_dev->id.product = ((rev >>  8) & 0x07);
> -	ts->input_dev->id.version = ((rev >> 16) & 0xfff);
> -	clk_disable(ts->clk);
> -
> -	__set_bit(EV_KEY,    ts->input_dev->evbit);
> -	__set_bit(EV_ABS,    ts->input_dev->evbit);
> -	__set_bit(BTN_TOUCH, ts->input_dev->keybit);
> -
> -	input_set_abs_params(ts->input_dev, ABS_X, 0, 0xffff, 5, 0);
> -	input_set_abs_params(ts->input_dev, ABS_Y, 0, 0xffff, 5, 0);
> -	input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 4095, 128, 0);
> -
> -	error = input_register_device(ts->input_dev);
> -	if (error < 0) {
> -		dev_err(dev, "failed input device registration\n");
> -		goto error_reg;
> -	}
> -
> -	return 0;
> -
> -error_reg:
> -	input_free_device(ts->input_dev);
> -error_input:
> -	free_irq(ts->tsc_irq, ts);
> -error_irq:
> -	clk_put(ts->clk);
> -error_clk:
> -	iounmap(ts->regs);
> -error_map:
> -	release_mem_region(ts->res->start, resource_size(ts->res));
> -error_res:
> -	kfree(ts);
> -
> -	return error;
> -}
> -
> -static int tsc_remove(struct platform_device *pdev)
> -{
> -	struct tsc_data *ts = platform_get_drvdata(pdev);
> -
> -	input_unregister_device(ts->input_dev);
> -	free_irq(ts->tsc_irq, ts);
> -	clk_put(ts->clk);
> -	iounmap(ts->regs);
> -	release_mem_region(ts->res->start, resource_size(ts->res));
> -	kfree(ts);
> -
> -	return 0;
> -}
> -
> -static struct platform_driver tsc_driver = {
> -	.probe		= tsc_probe,
> -	.remove		= tsc_remove,
> -	.driver.name	= "tnetv107x-ts",
> -	.driver.owner	= THIS_MODULE,
> -};
> -module_platform_driver(tsc_driver);
> -
> -MODULE_AUTHOR("Cyril Chemparathy");
> -MODULE_DESCRIPTION("TNETV107X Touchscreen Driver");
> -MODULE_ALIAS("platform:tnetv107x-ts");
> -MODULE_LICENSE("GPL");
> -- 
> 1.8.3.2
> 

-- 
Dmitry

  reply	other threads:[~2014-03-28  8:36 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-18 14:55 [PATCH 0/3] Remove obsolete tnetv107x drivers Arnd Bergmann
2014-03-18 14:55 ` Arnd Bergmann
2014-03-18 14:55 ` [PATCH 1/3] spi: remove obsolete spi-ti-ssp driver Arnd Bergmann
2014-03-18 14:55   ` Arnd Bergmann
2014-03-18 14:55   ` Arnd Bergmann
2014-03-18 17:33   ` Mark Brown
2014-03-18 17:33     ` Mark Brown
2014-03-18 17:33     ` Mark Brown
2014-03-18 14:56 ` [PATCH 2/3] mfd: remove obsolete ti-ssp driver Arnd Bergmann
2014-03-18 14:56   ` Arnd Bergmann
2014-03-18 20:29   ` Lee Jones
2014-03-18 20:29     ` Lee Jones
2014-03-18 14:56 ` [PATCH 3/3] input: remove obsolete tnetv107x drivers Arnd Bergmann
2014-03-18 14:56   ` Arnd Bergmann
2014-03-28  8:36   ` Dmitry Torokhov [this message]
2014-03-28  8:36     ` Dmitry Torokhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140328083610.GK22093@core.coreip.homeip.net \
    --to=dmitry.torokhov@gmail.com \
    --cc=arnd@arndb.de \
    --cc=davinci-linux-open-source@linux.davincidsp.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nsekhar@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.