hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/media/rc/gpio-ir-recv.c
....@@ -107,6 +107,8 @@
107107 rcdev->map_name = RC_MAP_EMPTY;
108108
109109 gpio_dev->rcdev = rcdev;
110
+ if (of_property_read_bool(np, "wakeup-source"))
111
+ device_init_wakeup(dev, true);
110112
111113 rc = devm_rc_register_device(dev, rcdev);
112114 if (rc < 0) {
....@@ -128,6 +130,23 @@
128130 return devm_request_irq(dev, gpio_dev->irq, gpio_ir_recv_irq,
129131 IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
130132 "gpio-ir-recv-irq", gpio_dev);
133
+}
134
+
135
+static int gpio_ir_recv_remove(struct platform_device *pdev)
136
+{
137
+ struct gpio_rc_dev *gpio_dev = platform_get_drvdata(pdev);
138
+ struct device *pmdev = gpio_dev->pmdev;
139
+
140
+ if (pmdev) {
141
+ pm_runtime_get_sync(pmdev);
142
+ cpu_latency_qos_remove_request(&gpio_dev->qos);
143
+
144
+ pm_runtime_disable(pmdev);
145
+ pm_runtime_put_noidle(pmdev);
146
+ pm_runtime_set_suspended(pmdev);
147
+ }
148
+
149
+ return 0;
131150 }
132151
133152 #ifdef CONFIG_PM
....@@ -189,6 +208,7 @@
189208
190209 static struct platform_driver gpio_ir_recv_driver = {
191210 .probe = gpio_ir_recv_probe,
211
+ .remove = gpio_ir_recv_remove,
192212 .driver = {
193213 .name = KBUILD_MODNAME,
194214 .of_match_table = of_match_ptr(gpio_ir_recv_of_match),