]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Input: tca6416-keypad - always expect proper IRQ number in i2c client
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 24 Jul 2023 05:30:18 +0000 (22:30 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 Sep 2023 10:27:59 +0000 (12:27 +0200)
[ Upstream commit 687fe7dfb736b03ab820d172ea5dbfc1ec447135 ]

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: cc141c35af87 ("Input: tca6416-keypad - fix interrupt enable disbalance")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/input/keyboard/tca6416-keypad.c
include/linux/tca6416_keypad.h

index afcdfbb002ff34d1d3d9f11c2c6ba85bab439d36..b48adec8fe2e7ccb6a930c405f79670342478416 100644 (file)
@@ -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;
 }
@@ -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)
@@ -266,12 +266,7 @@ 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,
@@ -279,7 +274,7 @@ static int tca6416_keypad_probe(struct i2c_client *client,
                if (error) {
                        dev_dbg(&client->dev,
                                "Unable to claim irq %d; error %d\n",
-                               chip->irqnum, error);
+                               client->irq, error);
                        goto fail1;
                }
        }
@@ -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);
@@ -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);
@@ -324,10 +319,9 @@ 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;
 }
@@ -335,10 +329,9 @@ static int tca6416_keypad_suspend(struct device *dev)
 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;
 }
index b0d36a9934ccd403bd586954694fdb67311e833f..5cf6f6f82aa700a794564dc420b1cf1348d56e5f 100644 (file)
@@ -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