Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 269460
b: refs/heads/master
c: d3654d7
h: refs/heads/master
v: v3
  • Loading branch information
Dmitry Torokhov committed Aug 27, 2011
1 parent fc1343c commit 28f46ca
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 377dc5538c43052d2ee9bc89577cb07fe18f2520
refs/heads/master: d3654d7ef3adad0083525cfb6fe27be62cb83d0d
46 changes: 38 additions & 8 deletions trunk/drivers/input/touchscreen/tsc2007.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,12 +237,40 @@ static irqreturn_t tsc2007_hard_irq(int irq, void *handle)
return IRQ_HANDLED;
}

static void tsc2007_free_irq(struct tsc2007 *ts)
static void tsc2007_stop(struct tsc2007 *ts)
{
ts->stopped = true;
mb();
wake_up(&ts->wait);
free_irq(ts->irq, ts);

disable_irq(ts->irq);
}

static int tsc2007_open(struct input_dev *input_dev)
{
struct tsc2007 *ts = input_get_drvdata(input_dev);
int err;

ts->stopped = false;
mb();

enable_irq(ts->irq);

/* Prepare for touch readings - power down ADC and enable PENIRQ */
err = tsc2007_xfer(ts, PWRDOWN);
if (err < 0) {
tsc2007_stop(ts);
return err;
}

return 0;
}

static void tsc2007_close(struct input_dev *input_dev)
{
struct tsc2007 *ts = input_get_drvdata(input_dev);

tsc2007_stop(ts);
}

static int __devinit tsc2007_probe(struct i2c_client *client,
Expand Down Expand Up @@ -289,6 +317,11 @@ static int __devinit tsc2007_probe(struct i2c_client *client,
input_dev->phys = ts->phys;
input_dev->id.bustype = BUS_I2C;

input_dev->open = tsc2007_open;
input_dev->close = tsc2007_close;

input_set_drvdata(input_dev, ts);

input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);

Expand All @@ -307,10 +340,7 @@ static int __devinit tsc2007_probe(struct i2c_client *client,
goto err_free_mem;
}

/* Prepare for touch readings - power down ADC and enable PENIRQ */
err = tsc2007_xfer(ts, PWRDOWN);
if (err < 0)
goto err_free_irq;
tsc2007_stop(ts);

err = input_register_device(input_dev);
if (err)
Expand All @@ -321,7 +351,7 @@ static int __devinit tsc2007_probe(struct i2c_client *client,
return 0;

err_free_irq:
tsc2007_free_irq(ts);
free_irq(ts->irq, ts);
if (pdata->exit_platform_hw)
pdata->exit_platform_hw();
err_free_mem:
Expand All @@ -335,7 +365,7 @@ static int __devexit tsc2007_remove(struct i2c_client *client)
struct tsc2007 *ts = i2c_get_clientdata(client);
struct tsc2007_platform_data *pdata = client->dev.platform_data;

tsc2007_free_irq(ts);
free_irq(ts->irq, ts);

if (pdata->exit_platform_hw)
pdata->exit_platform_hw();
Expand Down

0 comments on commit 28f46ca

Please sign in to comment.