通过内核notifier chain异步通知TP切换充电模式

通过内核notifier chain异步通知TP切换充电模式

 

机制:

Linux Kernel Notifier Chain

 

头文件:

#include <linux/notifier.h>

 

步骤:

  1. 在事件发生地:

定义一个struct blocking_notifier_head变量

BLOCKING_NOTIFIER_HEAD(cable_state_notifier_list);

 

  1. 在事件接收地:
  1. 定义一个struct notifier_block变量

struct notifier_block cable_state_notif;

  1. 定义一个回调函数

static int cable_state_notifier_callback(struct notifier_block *self,

                                unsigned long cable_state, void *data)

{

    fts_set_charger_mode(cable_state);

    return 0;

}

  1. 将回调函数赋值给cable_state_notif的notifier_call指针

cable_state_notif.notifier_call = cable_state_notifier_callback;

  1. 将notifier_block注册到blocking_notifier_head

估计就是个链表头插入结点的动作

blocking_notifier_chain_register(&cable_state_notifier_list, & cable_state_notif);

 

  1. 在事件发生地

找一个合适的地方,在事件发生时调用函数

blocking_notifier_call_chain(&cable_state_notifier_list, cable_state, NULL);

这个估计是遍历cable_state_notifier_list,调用每个结点的callback函数

后面两个作为函数的实参

 

  1. 在事件接收地:

执行cable_state_notif.notifier_call,也就是cable_state_notifier_callback

 

过程就是这么个过程,原理各位自行研习就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值