All of lore.kernel.org
 help / color / mirror / Atom feed
From: Harry Wei <jiaweiwei.xiyou@gmail.com>
To: wanlong.gao@gmail.com
Cc: khali@linux-fr.org, broonie@opensource.wolfsonmicro.com,
	rpurdie@linux.intel.com, w.sang@pengutronix.de,
	dmitry.torokhov@gmail.com, linux-kernel@vger.kernel.org,
	linux-input@vger.kernel.org
Subject: Re: [PATCH V2] Add the support of the touchscreen keypad of tsc2007 .
Date: Thu, 31 Mar 2011 09:36:02 +0800	[thread overview]
Message-ID: <20110331013600.GA3163@gmail.com> (raw)
In-Reply-To: <1301219192-5293-1-git-send-email-wanlong.gao@gmail.com>

On Sun, Mar 27, 2011 at 05:46:32PM +0800, wanlong.gao@gmail.com wrote:
> From: Wanlong Gao <wanlong.gao@gmail.com>
> 
> Many touchscreens support touch-keypad .
> Open the definition of the TOUCHSCREEN_TSC2007_WITH_KEYPAD, you can
> open the support of the touchscreen's keypad .
> We can add the support of the touchscreen keypad in the driver.
> In this patch , add the ts_key_pos array to determine the position
> of the key's X. And the ts_key_sensitivity can use to detemine the
> key's sensitivity. You can modify the ts_key_pos array for you own
> touchscreen keys . And modify the ts_key_sensitivity for you own
> key's sensitivity .
> If you want to modify the ts_key_map, change the position of the
> keys ,too.
> 
> Signed-off-by: Wanlong Gao <wanlong.gao@gmail.com>
Reviewed-by: Harry Wei <harryxiyou@gmail.com>
> ---
>  drivers/input/touchscreen/tsc2007.c |   48 +++++++++++++++++++++++++++++++++++
>  1 files changed, 48 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c
> index 80467f2..8f70fca 100644
> --- a/drivers/input/touchscreen/tsc2007.c
> +++ b/drivers/input/touchscreen/tsc2007.c
> @@ -83,6 +83,51 @@ struct tsc2007 {
>  	void			(*clear_penirq)(void);
>  };
>  
> +/*
> +#define	TOUCHSCREEN_TSC2007_WITH_KEYPAD
> +*/
> +#ifndef	TOUCHSCREEN_TSC2007_WITH_KEYPAD
> +static void ts_key_set_capacity(struct input_dev *input) {};
> +static void ts_key_up(struct input_dev *input) {};
> +static void ts_key_event(struct input_dev *input, u16 x, u16 y) {};
> +#else
> +static int ts_key_pos[] = {700, 1650, 2550, 3500};
> +static int ts_key_map[] = {KEY_MENU, KEY_HOME, KEY_BACK, KEY_SEARCH};
> +/* you can modify this value to change the touch_key's sensitivity */
> +static int ts_key_sensitivity = 50;
> +
> +static void ts_key_set_capacity(struct input_dev *input)
> +{
> +	int i;
> +	for (i = 0; i < ARRAY_SIZE(ts_key_map); i++) {
> +		input_set_capability(input, EV_KEY, ts_key_map[i]);
> +	}
You only have one statement after 'for-recycle', so it should program
like following.
for (i = 0; i < ARRAY_SIZE(ts_key_map); i++)
	input_set_capability(input, EV_KEY, ts_key_map[i]);
> +}
> +
> +/* you must have an input_sync() followed this func . */
> +static void ts_key_up(struct input_dev *input)
> +{
> +	int i;
> +	for (i = 0; i < ARRAY_SIZE(ts_key_map); i++) {
> +		input_report_key(input, ts_key_map[i], 0);
> +	}
for (i = 0; i < ARRAY_SIZE(ts_key_map); i++)
	input_report_key(input, ts_key_map[i], 0);
> +}
> +
> +static void ts_key_event(struct input_dev *input, u16 x, u16 y)
> +{
> +	int i;
> +	if (y > MAX_12BIT) {
> +		for (i = 0; i < ARRAY_SIZE(ts_key_pos); i++) {
> +			if ((x > (ts_key_pos[i] - ts_key_sensitivity)) &&
> +				(x < (ts_key_pos[i] + ts_key_sensitivity))) {
> +				input_report_key(input, ts_key_map[i], 1);
> +				input_sync(input);
> +			}
> +		}
> +	}
> +}
> +#endif
> +
>  static inline int tsc2007_xfer(struct tsc2007 *tsc, u8 cmd)
>  {
>  	s32 data;
> @@ -149,6 +194,7 @@ static void tsc2007_send_up_event(struct tsc2007 *tsc)
>  
>  	input_report_key(input, BTN_TOUCH, 0);
>  	input_report_abs(input, ABS_PRESSURE, 0);
> +	ts_key_up(input);
>  	input_sync(input);
>  }
>  
> @@ -201,6 +247,7 @@ static void tsc2007_work(struct work_struct *work)
>  		if (!ts->pendown) {
>  			dev_dbg(&ts->client->dev, "DOWN\n");
>  
> +			ts_key_event(input, tc.x, tc.y);
>  			input_report_key(input, BTN_TOUCH, 1);
>  			ts->pendown = true;
>  		}
> @@ -308,6 +355,7 @@ static int __devinit tsc2007_probe(struct i2c_client *client,
>  	input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
>  	input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
>  	input_set_abs_params(input_dev, ABS_PRESSURE, 0, MAX_12BIT, 0, 0);
> +	ts_key_set_capacity(input_dev);
>  
>  	if (pdata->init_platform_hw)
>  		pdata->init_platform_hw();
> -- 
> 1.7.3
> 

  reply	other threads:[~2011-03-31  1:36 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-27  9:46 [PATCH V2] Add the support of the touchscreen keypad of tsc2007 wanlong.gao
2011-03-31  1:36 ` Harry Wei [this message]
2011-03-31  5:33 ` Dmitry Torokhov
2011-03-31  8:49   ` Richard Purdie
2011-03-31 12:21     ` Re: [PATCH V2] Add the support of the touchscreen keypad oftsc2007 wanlong.gao
2011-03-31 12:08   ` Re: [PATCH V2] Add the support of the touchscreen keypad of tsc2007 wanlong.gao

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=20110331013600.GA3163@gmail.com \
    --to=jiaweiwei.xiyou@gmail.com \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=khali@linux-fr.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rpurdie@linux.intel.com \
    --cc=w.sang@pengutronix.de \
    --cc=wanlong.gao@gmail.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.