Skip to content

Commit

Permalink
Input: tca6416-keypad - always expect proper IRQ number in i2c client
Browse files Browse the repository at this point in the history
[ Upstream commit 687fe7d ]

Remove option having i2c client contain raw gpio number instead of proper
IRQ number. There are no users of this facility in mainline and it will
allow cleaning up the driver code with regard to wakeup handling, etc.

Link: https://lore.kernel.org/r/20230724053024.352054-1-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Stable-dep-of: cc141c3 ("Input: tca6416-keypad - fix interrupt enable disbalance")
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
dtor authored and gregkh committed Sep 19, 2023
1 parent d7add20 commit a734550
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 18 deletions.
27 changes: 10 additions & 17 deletions drivers/input/keyboard/tca6416-keypad.c
Expand Up @@ -148,7 +148,7 @@ static int tca6416_keys_open(struct input_dev *dev)
if (chip->use_polling)
schedule_delayed_work(&chip->dwork, msecs_to_jiffies(100));
else
enable_irq(chip->irqnum);
enable_irq(chip->client->irq);

return 0;
}
Expand All @@ -160,7 +160,7 @@ static void tca6416_keys_close(struct input_dev *dev)
if (chip->use_polling)
cancel_delayed_work_sync(&chip->dwork);
else
disable_irq(chip->irqnum);
disable_irq(chip->client->irq);
}

static int tca6416_setup_registers(struct tca6416_keypad_chip *chip)
Expand Down Expand Up @@ -266,20 +266,15 @@ static int tca6416_keypad_probe(struct i2c_client *client,
goto fail1;

if (!chip->use_polling) {
if (pdata->irq_is_gpio)
chip->irqnum = gpio_to_irq(client->irq);
else
chip->irqnum = client->irq;

error = request_threaded_irq(chip->irqnum, NULL,
error = request_threaded_irq(client->irq, NULL,
tca6416_keys_isr,
IRQF_TRIGGER_FALLING |
IRQF_ONESHOT | IRQF_NO_AUTOEN,
"tca6416-keypad", chip);
if (error) {
dev_dbg(&client->dev,
"Unable to claim irq %d; error %d\n",
chip->irqnum, error);
client->irq, error);
goto fail1;
}
}
Expand All @@ -298,8 +293,8 @@ static int tca6416_keypad_probe(struct i2c_client *client,

fail2:
if (!chip->use_polling) {
free_irq(chip->irqnum, chip);
enable_irq(chip->irqnum);
free_irq(client->irq, chip);
enable_irq(client->irq);
}
fail1:
input_free_device(input);
Expand All @@ -312,8 +307,8 @@ static void tca6416_keypad_remove(struct i2c_client *client)
struct tca6416_keypad_chip *chip = i2c_get_clientdata(client);

if (!chip->use_polling) {
free_irq(chip->irqnum, chip);
enable_irq(chip->irqnum);
free_irq(client->irq, chip);
enable_irq(client->irq);
}

input_unregister_device(chip->input);
Expand All @@ -324,21 +319,19 @@ static void tca6416_keypad_remove(struct i2c_client *client)
static int tca6416_keypad_suspend(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct tca6416_keypad_chip *chip = i2c_get_clientdata(client);

if (device_may_wakeup(dev))
enable_irq_wake(chip->irqnum);
enable_irq_wake(client->irq);

return 0;
}

static int tca6416_keypad_resume(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct tca6416_keypad_chip *chip = i2c_get_clientdata(client);

if (device_may_wakeup(dev))
disable_irq_wake(chip->irqnum);
disable_irq_wake(client->irq);

return 0;
}
Expand Down
1 change: 0 additions & 1 deletion include/linux/tca6416_keypad.h
Expand Up @@ -25,7 +25,6 @@ struct tca6416_keys_platform_data {
unsigned int rep:1; /* enable input subsystem auto repeat */
uint16_t pinmask;
uint16_t invert;
int irq_is_gpio;
int use_polling; /* use polling if Interrupt is not connected*/
};
#endif

0 comments on commit a734550

Please sign in to comment.