linux 核心模組之間通訊:EXPORT_SYMBOL
阿新 • • 發佈:2018-12-22
--- a/drivers/input/misc/audio_wakeup.c +++ b/drivers/input/misc/audio_wakeup.c @@ -13,6 +13,8 @@ struct audio_wakeup_data { struct input_dev *input; }; + + static struct audio_wakeup_data *data; static ssize_t func_show(struct device *dev, @@ -37,6 +39,14 @@ static ssize_t func_store(struct device *dev, return count; } +void report_system_wakeup(void) +{ + input_report_rel(data->input, REL_MISC, 1); + input_sync(data->input); + printk(KERN_INFO "Wakeup_system\n"); + +} + static DEVICE_ATTR(func, 0644, func_show, func_store); @@ -105,5 +115,6 @@ static void __exit audio_wakeup_exit(void) printk("%s\n", __func__); } +EXPORT_SYMBOL(report_system_wakeup); module_init(audio_wakeup_init); module_exit(audio_wakeup_exit);
--- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -34,6 +34,8 @@ #include <linux/pinctrl/consumer.h> #include <linux/syscore_ops.h> +extern void report_system_wakeup(void); + struct gpio_button_data { const struct gpio_keys_button *button; struct input_dev *input; @@ -375,13 +377,17 @@ static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id) BUG_ON(irq != bdata->irq); if (bdata->button->wakeup) + { pm_stay_awake(bdata->input->dev.parent); + report_system_wakeup(); + } if (bdata->timer_debounce) mod_timer(&bdata->timer, jiffies + msecs_to_jiffies(bdata->timer_debounce)); else schedule_work(&bdata->work); + return IRQ_HANDLED; }
例項如上,功能:宣告在audio_wake.c裡面的函式可以在gpio_keys.c裡面使用。