霍尔器件

霍尔器件是一个磁感应器件,在手机等平台上主要用于例如滑盖手机、翻盖手机等场合,用于控制屏幕的亮、灭。

那么如果来写driver呢,这里主要调用input_report_switch来上报事件,当然也可以上报其它键值,上层根据键值来做不同的处理。

首先是input设备的注册,注册同其它input设备没有什么不同,这里主要看input设备的setting:
input_set_capability(input_dev, EV_SW, SW_LID);

当然也可以调用__set_bit去setting。

然后是中断的注册:

err = request_irq(irq, hall_irq_handler,
                IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "hall", input_dev);
if (err) {
        printk("failed to request IRQ\n");
        goto failed_request_irq;
}

这里使用上升沿和下降沿来触发中断。

最后是中断处理函数:
static irqreturn_t hall_irq_handler(int irq, void *dev_id)
{
        struct input_dev *input_dev = (struct input_dev *)dev_id;
        int state;

        state = gpio_get_value(hall_irq_pin);

        input_report_switch(input_dev, SW_LID, !state);
        input_sync(input_dev);

        return IRQ_HANDLED;
}
input_report_switch用来上报一个开关事件,只有两个状态1、0,靠近霍尔器件是要上报1,远离霍尔器件是上报0。从这里也可以看出,靠近时gpio状态是低电平,远离时是高电平。

剩下的事情就交由上层去处理吧。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值