Merge tag 'v6.2-rc3' into next
[platform/kernel/linux-starfive.git] / drivers / input / touchscreen / raydium_i2c_ts.c
index 3d9c575..49a06d3 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/interrupt.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/pm_wakeirq.h>
 #include <linux/regulator/consumer.h>
 #include <linux/slab.h>
 #include <asm/unaligned.h>
@@ -134,8 +135,6 @@ struct raydium_data {
        u8 pkg_size;
 
        enum raydium_boot_mode boot_mode;
-
-       bool wake_irq_enabled;
 };
 
 /*
@@ -1066,8 +1065,7 @@ static void raydium_i2c_power_off(void *_data)
        }
 }
 
-static int raydium_i2c_probe(struct i2c_client *client,
-                            const struct i2c_device_id *id)
+static int raydium_i2c_probe(struct i2c_client *client)
 {
        union i2c_smbus_data dummy;
        struct raydium_data *ts;
@@ -1199,7 +1197,7 @@ static int raydium_i2c_probe(struct i2c_client *client,
        return 0;
 }
 
-static void __maybe_unused raydium_enter_sleep(struct i2c_client *client)
+static void raydium_enter_sleep(struct i2c_client *client)
 {
        static const u8 sleep_cmd[] = { 0x5A, 0xff, 0x00, 0x0f };
        int error;
@@ -1211,7 +1209,7 @@ static void __maybe_unused raydium_enter_sleep(struct i2c_client *client)
                        "sleep command failed: %d\n", error);
 }
 
-static int __maybe_unused raydium_i2c_suspend(struct device *dev)
+static int raydium_i2c_suspend(struct device *dev)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct raydium_data *ts = i2c_get_clientdata(client);
@@ -1224,8 +1222,6 @@ static int __maybe_unused raydium_i2c_suspend(struct device *dev)
 
        if (device_may_wakeup(dev)) {
                raydium_enter_sleep(client);
-
-               ts->wake_irq_enabled = (enable_irq_wake(client->irq) == 0);
        } else {
                raydium_i2c_power_off(ts);
        }
@@ -1233,14 +1229,12 @@ static int __maybe_unused raydium_i2c_suspend(struct device *dev)
        return 0;
 }
 
-static int __maybe_unused raydium_i2c_resume(struct device *dev)
+static int raydium_i2c_resume(struct device *dev)
 {
        struct i2c_client *client = to_i2c_client(dev);
        struct raydium_data *ts = i2c_get_clientdata(client);
 
        if (device_may_wakeup(dev)) {
-               if (ts->wake_irq_enabled)
-                       disable_irq_wake(client->irq);
                raydium_i2c_sw_reset(client);
        } else {
                raydium_i2c_power_on(ts);
@@ -1252,8 +1246,8 @@ static int __maybe_unused raydium_i2c_resume(struct device *dev)
        return 0;
 }
 
-static SIMPLE_DEV_PM_OPS(raydium_i2c_pm_ops,
-                        raydium_i2c_suspend, raydium_i2c_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(raydium_i2c_pm_ops,
+                               raydium_i2c_suspend, raydium_i2c_resume);
 
 static const struct i2c_device_id raydium_i2c_id[] = {
        { "raydium_i2c", 0 },
@@ -1279,11 +1273,11 @@ MODULE_DEVICE_TABLE(of, raydium_of_match);
 #endif
 
 static struct i2c_driver raydium_i2c_driver = {
-       .probe = raydium_i2c_probe,
+       .probe_new = raydium_i2c_probe,
        .id_table = raydium_i2c_id,
        .driver = {
                .name = "raydium_ts",
-               .pm = &raydium_i2c_pm_ops,
+               .pm = pm_sleep_ptr(&raydium_i2c_pm_ops),
                .acpi_match_table = ACPI_PTR(raydium_acpi_id),
                .of_match_table = of_match_ptr(raydium_of_match),
        },