MT8168中断流程
内核通知链的使用说明:
注册:
int srcu_notifier_chain_register(struct srcu_notifier_head *nh, struct notifier_block *n);
void srcu_init_notifier_head(struct srcu_notifier_head *nh);
通知:
int srcu_notifier_call_chain(struct srcu_notifier_head *nh, unsigned long val, void *v)
示例:
int charger_dev_event(struct notifier_block *nb, unsigned long event, void *v){... ...}
struct srcu_notifier_head evt_nh;
struct notifier_block chg1_nb;
chg1_nb.notifier_call = charger_psy_event;
srcu_init_notifier_head(&evt_nh);
srcu_notifier_chain_register(&evt_nh, &chg1_nb);
---------------------------------------------------------------------------------------------------------------------
线程定时器:
C Code
1 |
static enum alarmtimer_restart mtk_charger_alarm_timer_func(struct alarm *alarm, ktime_t now) if (info->is_suspend == false) { return ALARMTIMER_NORESTART; /* If the timer was already set, cancel it */ get_monotonic_boottime(&time_now); ktime = ktime_set(info->endtime.tv_sec, info->endtime.tv_nsec); chr_err("%s: alarm timer start:%d, %ld %ld\n", __func__, ret, #ifdef CONFIG_PM |
充电中断流程:
C Code
1 |
/kernel-4.14/drivers/misc/mediatek/pmic/mt6390/v1/pmic_chr_type_det_v2.c /kernel-4.19/drivers/power/supply/mt6357-charger-type.c ->propval.intval = chg_type; |
C Code
1 |
mtk_charger.c static int charger_routine_thread(void *arg) ->if (!mtk_chg_check_vbus(info)) //检查充电器vbus电压 ->charging = false; ->if (mt_get_charger_type() == CHARGER_UNKNOWN) //如果是拔出充电器状态,那么直接return; ->return; ->mtk_battery_notify_check(info); ->mtk_battery_notify_VCharger_check(info); //检查充电器电压 ->mtk_battery_notify_VBatTemp_check(info); //检查电池温度 ->int charger_dev_event(struct notifier_block *nb, unsigned long event, void *v) //?? |
如果温度过高:
/kernel-4.14/drivers/misc/mediatek/thermal/common/coolers/mtk_cooler_bcct_v1.c
chrlmt_set_limit_handler //INIT_WORK(&bcct_chrlmt_work, chrlmt_set_limit_handler);
charger_manager_set_charging_current_limit(pthermal_consumer, 0, ((chrlmt_bat_chr_curr_limit != -1) ?chrlmt_bat_chr_curr_limit * 1000 : -1));
pdata->thermal_charging_current_limit = charging_current;
linear_chg_select_charging_current_limit
chr_err("force:%d thermal:%d setting:%d type:%d usb_unlimited:%d usbif:%d usbsm:%d\n",
MT8168中断流程相关推荐
- QN902X在KEIL中使用定时器中断流程记录
仅以此篇,记录蓝牙BLE(QN902x)开发过程中,使用ke_timer_set ((p_ke_timer_set)(_ke_timer_set))的流程: 首先,我们要使用这个函数,必须先了解它能干 ...
- 【3分钟秒懂】示例讲解MCU中断流程 基于NXP MPC574xG
目录 1. 简述 2. 中断配置流程 3. 中断发生时的代码调用流程 1. 简述 MPC574xG的中断向量寄存器(IVPR)提供了下面12个个中断类型, 本文主要介绍IVOR4 ,因为所有的时钟,外 ...
- Linux中断流程分析
裸机中断: 1.中断流入口 2.事先注册中断处理程序 3.根据中断源编号,调取处理程序 irq_svc:1.等到产生中断源的编号(每一个中断号都有一个描述结构) 2. 转载于:https://www. ...
- 7.21.05 中断流程控制语句
// 1. break //break语句用于do-while while for语句时,可以是程序终止循环,而执行循环体后的语句. //一般和一条判断语句一起使用,条件判断为真得时候,跳出循环. / ...
- [答疑]-中断流程举例:在TEE侧时产生了FIQ,回到REE后为啥又产生了IRQ
快速链接: .
- [答疑]-中断流程举例:在REE(SCR.FIQ=1)侧时产生了FIQ,跳转到EL3后做了哪些事情?
快速链接: .
- 中断处理过程示意图_PCIe中断方法和系统与流程
本发明实施例涉及通信技术领域,尤其涉及一种PCIe中断方法和系统. 背景技术: PCIe(Peripheral Component Interconnect Express,高速外围组件互联)是最新的 ...
- PicoBlaze中断
PicoBlaze中断 我们知道,PicoBlaze微控制器只提供一个中断输入口,如果设计中需要多个中断,可以在FPGA中用逻辑实现.图12-4 所示为一个简单的中断连接图,当有中断发生时,触发器的2 ...
- [gic]-linux和optee的中断处理流程举例(gicv3举例)
★★★ 友情链接 : 个人博客导读首页-点击此处 ★★★ 环境配置: 在linux/optee双系统环境下, linux系统的SCR.IRQ=0.SCR.FIQ=1, optee系统的SCR.IRQ= ...
最新文章
- oracle12c不能进入到http://localhost:1158/em的解决办法
- [云炬创业基础笔记]第七张创业资源测试12
- SQL Server 表变量和临时表的区别
- 【重版】朴素贝叶斯与拣鱼的故事
- 求数组中k个数的所有组合
- .Net学习(二):vb.net总结之似曾相识
- scala 辅助构造函数_Scala辅助构造函数的深入介绍
- java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...
- 呼吸灯 裸机 S3C2416
- grpc(5):使用grpc+consul 开发服务调用
- Visual Studio Code编辑器的实用插件和工作中实用的技巧
- 安卓蓝牙键盘按键映射_安卓手游键盘映射工具(凤凰系统键盘映射) v2.0 最新版...
- 大学生爱情兵法-洪亚非-听课笔记
- Excel的FIND函数及其用法
- f2fs系列之一:实战f2fs 下载、编译和挂载 [转载系列]
- Java 类详解 9章
- 目标检测——小目标检测问题
- Uva 1616 Caravan Robbers (商队抢劫者)
- Meta再放大招!VR新模型登CVPR Oral:像人一样「读」懂语音
- 为什么英语学习得不到我们想要的效果?