完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform: RK3288
OS: Android 6.0 Kernel: 3.10.92 RK3288使用TSADC(Temperature-Sensor ADC)来测量CPU温度,支持两种模式: 用户自定义模式: 主动控制读取温度. 自动模式: 自动检测温度,达到阀值就自动报告. rk3288.dtsi中的device配置: tsadc: tsadc@ff280000 { compatible = "rockchip,tsadc"; reg = <0xff280000 0x100>; interrupts = #io-channel-cells = <1>; io-channel-ranges; clock-frequency = <10000>; clocks = <&clk_tsadc>, <&clk_gates7 2>; clock-names = "tsadc", "pclk_tsadc"; pinctrl-names = "default", "tsadc_int"; pinctrl-0 = <&tsadc_gpio>; pinctrl-1 = <&tsadc_int>; tsadc-ht-temp = <120>; //关机阀值 tsadc-ht-reset-cru = <1>; tsadc-ht-pull-gpio = <0>; status = "okay"; }; rockchip_tsadc.c: tsadc温度控制驱动文件. rockchip-hwmon.c: 基于hwmon(HW Monitor)的驱动实现,也就是说tsadc使用hwmon提供接口到userspace. rockchip_temp_probe -> rockchip-hwmon.c rockchip_hwmon_init -> rockchip_tsadc.c request_threaded_irq //申请一个中断线程,对应函数是rockchip_tsadc_auto_ht_interrupt() create_singlethread_workqueue //创建workqueue thread,对应函数是rockchip_tsadc_auto_ht_work of_property_read_u32 //读取dts中的tsadc-ht-temp, tsadc-ht-reset-cru,tsadc-ht-pull-gpio rockchip_tsadc_set_auto_temp //设置为自动温度探测模式,参数channel表示只针对此channel设置,rk3288 cpu对应是channel 1. rockchip_tsadc_auto_mode_set -> //设置中断和关机的温度, 分别对应的是80和120度 data->ops.read_sensor = rockchip_rk3288_tsadc_get_temp; //读取温度函数接口定义. INIT_DEFERRABLE_WORK(&data->work, tsadc_monitor); //温度变化时更新sysfs中的alarm node信息. sysfs_create_group //在tsadc device下创建sysfs,attr为rockchip_temp_group, 按照SENSOR_DEVICE_ATTR格式来定义,不过最终用的都是sysfs文件创建那一套. hwmon_device_register //hwmon device注册, 会在/sys/class/hwmon下看到. 当达到80°的时候,中断被触发: rockchip_tsadc_auto_ht_interrupt -> queue_work(dev->workqueue, &dev->auto_ht_irq_work) -> //给workqueue执行 rockchip_tsadc_auto_ht_work -> tsadc_readl //读取中断状态 pm_power_off //过温就执行关机 实际测试中断并没有被触发(注意TSADC_TEMP_INT_EN的值是0),不过修改关机温度(tsadc-ht-temp)确实会关机,是TSSHUT触发直接硬件关机了。rockchip_tsadc_set_cmpn_shut_vale()设置了关机的阀值,参数就是tsadc-ht-temp对应的值。 命令行读取cpu温度: root@rk3288:/ # cat sys/devices/ff280000.tsadc/temp1_input 54 或者 root@rk3288:/sys/class/hwmon/hwmon0/device # cat temp1_input 55 平台上一共有四路sensor读取内部温度, 0保留,1读取cpu,2读取gpu, 3未知。 有趣的是,文档说系统有三路sensor,但是寄存器却给出了4路配置,醉了... |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
1763 浏览 0 评论
2180 浏览 1 评论
1850 浏览 1 评论
3188 浏览 1 评论
4058 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 05:43 , Processed in 0.621569 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号