代码拉取完成,页面将自动刷新
/*
* input_button.c
*
* Created on: 2018年6月27日
* Author: anqi
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/sched.h>
#include <linux/pm.h>
#include <linux/bitops.h>
#include <asm/gpio.h>
#include <asm/io.h>
#include <asm/arch/regs-gpio.h>
MODULE_LICENSE("Dual BSD/GPL");
typedef struct
{
int irq;
char *name;
unsigned long pin;
unsigned long key_val;
}btn_dev_t;
#define GPF0
static btn_dev_t key_desc[2] =
{
{IRQ_ENT0, "s2", S3C2410_GPF0, BTN_0},
{IRQ_ENT2, "s3", S3C2410_GPF2, BTN_0},
};
static irqreturn_t gpio_keys_isr(int irq, void *dev_id)
{
int pinval;
struct platform_device *pdev = dev_id;
struct input_dev *input = platform_get_drvdata(pdev);
for(int i = 0; i < 2; i++)
{
/*读gpio电平*/
pinval = s3c2410_gpio_getpin(key_desc[i]->pin);
if(pinval)
{
input_event(input, EV_KEY, key_desc[i].key_val, 1);
}
else
{
input_event(input, EV_KEY, key_desc[i].key_val, 0);
}
input_sync(input);
}
return IRQ_HANDLED;
}
int btn_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct input_dev *input;
input = input_allocate_device();
if (!input)
{
return -ENOMEM;
}
platform_set_drvdata(pdev, input);//放input到drvdata里
//1.input->evbit[0] = BIT_MASK(EV_KEY);
//
input->name = "btn_input";
set_bit(EV_KEY, input->evbit); //支持key事件
input_set_capability(input, EV_KEY, BTN_0);
input_set_capability(input, EV_KEY, BTN_1);
// input->open = gpio_keys_open;
// input->close = gpio_keys_close;
//
// input->id.bustype = BUS_HOST;
// input->id.vendor = 0x0001;
// input->id.product = 0x0001;
// input->id.version = 0x0100;
for(int i = 0; i < 2; i++)
{
request_irq(key_desc[i].irq, gpio_keys_isr, IRQF_TRIGGER_LOW, key_desc[i].name,
pdev);
}
input_register_device(input);
return 0;
}
int btn_remove(struct platform_device *pdev)
{
for(int i = 0; i < 2; i++)
{
free_irq(key_desc[i].irq, pdev);
}
return 0;
}
struct platform_driver btn_drv =
{
.probe = btn_probe,
.remove = btn_remove,
.driver = {
.name = "btn_input",
.owner = THIS_MODULE,
},
};
static int __init btnInput_init(void)
{
return platform_driver_register(&btn_drv);
}
static void __exit btnInput_exit(void)
{
platform_driver_unregister(&btn_drv);
}
module_init(btnInput_init);
module_exit(btnInput_exit);
MODULE_AUTHOR("qian.gao");
MODULE_DESCRIPTION("btn input test");
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。