linux-device-driver - i.MX6 PMIC 中 RTC 备用电池的稳压器配置
问题描述
我正在将 phycore i.MX6 som 从 phytec 的开发套件切换到自己的开发板。som 和 devkit 的用户手册都可以在phytec 的页面上找到。现在我想配置 rtc 以在重启和关机期间保持时间。
电池(在我的情况下是超级电容器)连接到phycore i.MX6 som(第 10 页)的 VDD_BAT 引脚。内部PMIC是通过 i2c 总线连接的 da9062,该总线在som dtsi文件中配置为 rtc1。
imx6qdl-phytec-phycore-som.dtsi:
...
aliases {
rtc1 = &da9062_rtc;
};
...
&i2c3 {
pmic@58 {
da9062_rtc: rtc {
compatible = "dlg,da9062-rtc";
};
};
};
这个文件我根本没碰过。
接下来,我告诉内核从 rtc1 而不是 rtc0 获取他的 hwclock 和 systime 时间:
CONFIG_RTC_HCTOSYS_DEVICE="rtc1"
CONFIG_RTC_SYSTOHC_DEVICE="rtc1"
据我所知,驱动程序正在正确加载:
dmesg | grep rtc
[ 2.489836] da9063-rtc da9062-rtc: rtc core: registered da9063-rtc as rtc1
[ 2.499713] snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-rtc-lp as rtc2
[ 3.260348] da9063-rtc da9062-rtc: setting system clock to 2000-01-01 02:37:55 UTC (946694275)
和
cat /sys/class/rtc/rtc1/name
da9063-rtc da9062-rtc
现在,我可以通过 date 设置时间并将其传输到 hwclock 通过
hwclock --systohc
.
重新启动系统后,hwclock 设置为之前设置的日期,这很好。切断电源后,时钟复位。
我测量了大约 220mV 的超级电容器的电压。da9062的数据表告诉我,该芯片确实有一个需要配置的电池稳压器(表 127:BBAT_CONT (0x0C5))。
据我了解内核/rtc 子系统,rtc 的驱动程序应该负责为电池充电或提供用户空间接口,这样我就可以自己做。但我在这个话题上找不到任何东西。
我正在使用 yocto 为我的主板构建内核/映像。
我是否缺少某些东西,或者我是否需要自己修补驱动程序才能为超级电容充电?也许设备树中有一个选项可以设置电容的充电电压和电流?
我感谢任何想法和建议,谢谢。
解决方案
显然,驱动程序不支持开箱即用的电池/超级电容充电,并且它具有对 i2c 设备地址的独占访问权限,这会阻止用户空间应用程序访问设备。
我对这个问题的解决方案是在驱动程序接管之前设置这些值:由于这个 i2c 总线已经在我的裸机设备树中配置,我可以在启动内核之前访问它(假设裸机是在 menuconfig 中启用的 i2c 子系统编译的) . 在这里,我可以运行一个脚本来设置 BBAT 和 PD 寄存器以启用超级电容充电。
不过,更简洁的解决方案是扩展驱动程序并为此功能提供用户空间界面。
我没有研究的另一个可能的解决方案是检查驱动程序是否可以编译为模块,这样我就可以卸载模块,设置寄存器并再次加载它。
推荐阅读
- typescript - 泛型不能内外混用?
- javascript - 使用 PokeAPI 获取数据。无法弄清楚为什么 span 元素没有更新
- amazon-web-services - 如何允许 Lambda 写入 EFS?
- ssl - Google Cloud Loud Balancer SSL 握手失败
- r - 我怎样才能在闪亮时向左对齐?
- asp.net-core - 401 redirect_uri_mismatch 与 .net 核心 Web 应用程序?
- html - 使div中的图像从右向左循环滑动
- sql - 根据优先级加入和获取列
- python - 将位置和名称作为参数传递给 reportlab.platypus 中的 SimpleDocTemplate
- kotlin - 密封类扩展了其他密封类