本文转载自:https://blog.csdn.net/kris_fei/article/details/55045936

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 = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
    #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路配置,醉了...

[RK3288][Android6.0] TS-ADC驱动流程小结【转】的更多相关文章

  1. [RK3288][Android6.0] 系统按键驱动流程分析【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77894406 Rockchip的按键驱动位于 kernel/drivers/input/ke ...

  2. [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...

  3. [RK3288][Android6.0] Display驱动初始化流程小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/52584903 Platform: RK3288OS: Android 6.0Kernel: ...

  4. [RK3288][Android6.0] U-boot 启动流程小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/52536093 Platform: RK3288OS: Android 6.0Version: ...

  5. [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...

  6. [RK3288][Android6.0] 音频调试方法小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/70053135 Platform: ROCKCHIPOS: Android 6.0Kernel ...

  7. [RK3288][Android6.0] 关于uboot中logo相关知识点小结【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/76256224 Platform: Rockchip OS: Android 6.0 Kern ...

  8. [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...

  9. [RK3288][Android6.0] 调试笔记 --- 测试I2C设备正常传输方法【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/71515020 Platform: RockchipOS: Android 6.0Kernel ...

随机推荐

  1. Struts2上传文件(1)

    使用Struts框架后, Struts2框架不会处理multipart/form-data的请求,它需要调用其他的上传文件框架来解析二进制数据.但是Struts在原有的上传解析器基础上做了很多的封装, ...

  2. matlab中双站异面直线法定位目标

    calc.m %% 参数信息初始化 [x1,y1,z1]=deal(); [x2,y2,z2]=deal(,,); m1=/; n1=/; p1=^(/)/; m2=; n2=-^(/)/; p2=^ ...

  3. jQuery插件-json2.js

    from:http://blog.csdn.net/gjb724332682/article/details/46682743 前言 json2.js是一个json插件,下载地址:https://gi ...

  4. Linux下权限掩码umask

    一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...

  5. Android OpenCV图像转换

    1.Mat存储到本地: public void saveMatData(Mat mat) { File fileDir = new File(Environment.getExternalStorag ...

  6. LeetCode Problem 35:Search Insert Position

    描述:Given a sorted array and a target value, return the index if the target is found. If not, return ...

  7. mysql 存储二进制数据

    晚上小研究了下MySQL存储于读取二进制数据的功能.关键步骤为以下三点: 最重要的一点:存储二进制数据的表的类型需要是blob类型(按长度不同分为tiny, media, long) 插入二进制数据时 ...

  8. 1060 最复杂的数(反素数玄学dfs)

    1060 最复杂的数 题目来源: Ural 1748 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中 ...

  9. thymeleaf模板引擎

    thymeleaf模板引擎 thymeleaf是现代化服务器端的Java模板引擎,不同于JSP和FreeMarker,Thymeleaf的语法更加接近HTML,并且也有不错的扩展性.详细资料可以浏览官 ...

  10. SpringBoot处理url中的参数的注解

    1.介绍几种如何处理url中的参数的注解 @PathVaribale  获取url中的数据 @RequestParam  获取请求参数的值 @GetMapping  组合注解,是 @RequestMa ...