Skip to content

Commit

Permalink
Input: lm8323 - convert to threaded IRQ
Browse files Browse the repository at this point in the history
There's no need for that workqueue anymore. Get rid of it and move to
threaded IRQs instead.

Signed-off-by: Felipe Balbi <balbi@ti.com>
Tested-by: Leigh Brown <leigh@solinno.co.uk>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
  • Loading branch information
Felipe Balbi authored and Dmitry Torokhov committed Jun 21, 2011
1 parent fef95fa commit 61cf381
Showing 1 changed file with 4 additions and 19 deletions.
23 changes: 4 additions & 19 deletions drivers/input/keyboard/lm8323.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,6 @@ struct lm8323_chip {
/* device lock */
struct mutex lock;
struct i2c_client *client;
struct work_struct work;
struct input_dev *idev;
bool kp_enabled;
bool pm_suspend;
Expand All @@ -162,7 +161,6 @@ struct lm8323_chip {

#define client_to_lm8323(c) container_of(c, struct lm8323_chip, client)
#define dev_to_lm8323(d) container_of(d, struct lm8323_chip, client->dev)
#define work_to_lm8323(w) container_of(w, struct lm8323_chip, work)
#define cdev_to_pwm(c) container_of(c, struct lm8323_pwm, cdev)
#define work_to_pwm(w) container_of(w, struct lm8323_pwm, work)

Expand Down Expand Up @@ -375,9 +373,9 @@ static void pwm_done(struct lm8323_pwm *pwm)
* Bottom half: handle the interrupt by posting key events, or dealing with
* errors appropriately.
*/
static void lm8323_work(struct work_struct *work)
static irqreturn_t lm8323_irq(int irq, void *_lm)
{
struct lm8323_chip *lm = work_to_lm8323(work);
struct lm8323_chip *lm = _lm;
u8 ints;
int i;

Expand Down Expand Up @@ -409,16 +407,6 @@ static void lm8323_work(struct work_struct *work)
}

mutex_unlock(&lm->lock);
}

/*
* We cannot use I2C in interrupt context, so we just schedule work.
*/
static irqreturn_t lm8323_irq(int irq, void *data)
{
struct lm8323_chip *lm = data;

schedule_work(&lm->work);

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -675,7 +663,6 @@ static int __devinit lm8323_probe(struct i2c_client *client,
lm->client = client;
lm->idev = idev;
mutex_init(&lm->lock);
INIT_WORK(&lm->work, lm8323_work);

lm->size_x = pdata->size_x;
lm->size_y = pdata->size_y;
Expand Down Expand Up @@ -746,9 +733,8 @@ static int __devinit lm8323_probe(struct i2c_client *client,
goto fail3;
}

err = request_irq(client->irq, lm8323_irq,
IRQF_TRIGGER_FALLING | IRQF_DISABLED,
"lm8323", lm);
err = request_threaded_irq(client->irq, NULL, lm8323_irq,
IRQF_TRIGGER_FALLING, "lm8323", lm);
if (err) {
dev_err(&client->dev, "could not get IRQ %d\n", client->irq);
goto fail4;
Expand Down Expand Up @@ -783,7 +769,6 @@ static int __devexit lm8323_remove(struct i2c_client *client)

disable_irq_wake(client->irq);
free_irq(client->irq, lm);
cancel_work_sync(&lm->work);

input_unregister_device(lm->idev);

Expand Down

0 comments on commit 61cf381

Please sign in to comment.