[RK3399][Android7.1] TSADC驱动流程小结(With thermal core)

Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83
Board: Firefly-RK3399

背景:
和RK3288一样,RK3399上有两路TSADC通道分别用于监测CPU和GPU的温度。
不同的是RK3399结合kernel thermal core框架来管控,而RK3288直接是写了一个独立驱动控制硬件。
RK3288平台可参考: [RK3288][Android6.0] TS-ADC驱动流程小结


TSADC两种模式:
1.用户自定义模式。 所以信号都通过是user写到寄存器中控制。
2.自动模式。 控制器自动查询TSADC输出,如果温度过高就会产生中断,如果再高就会发信号给CRU模块复位整个芯片或者通过gpio通知PMU做处理。


TSADC控制器特性:
1. 支持用户自定义和自动模式
2. 支持两路通道
3. 系统复位的温度点可被配置
4. 可设置范围:~40-125°, 精度是5°
5. ADC精度10bit,采样率50kb/s
6. 温度探测和周期值可配置


控制器配置:
rk3399.dtsi:

tsadc: tsadc@ff260000 {
    compatible = "rockchip,rk3399-tsadc"; //设备名,和驱动匹配
    reg = <0x0 0xff260000 0x0 0x100>;
    interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH 0>;
    rockchip,grf = <&grf>;
    clocks = <&cru SCLK_TSADC>, <&cru PCLK_TSADC>;
    clock-names = "tsadc", "apb_pclk";
    assigned-clocks = <&cru SCLK_TSADC>;
    assigned-clock-rates = <750000>;
    resets = <&cru SRST_TSADC>;//reset对应的cru
    reset-names = "tsadc-apb";
    pinctrl-names = "init", "default", "sleep";
    pinctrl-0 = <&otp_gpio>;
    pinctrl-1 = <&otp_out>;
    pinctrl-2 = <&otp_gpio>;
    #thermal-sensor-cells = <1>;
    rockchip,hw-tshut-temp = <95000>;  //设置的关机温度
    status = "disabled";
};

另一部分配置是在rk3399-firefly-core.c中:

&tsadc {
    /* tshut mode 0:CRU 1:GPIO */
    rockchip,hw-tshut-mode = <1>;  //关机模式,设置为通过gpio方式
    /* tshut polarity 0:LOW 1:HIGH */
    rockchip,hw-tshut-polarity = <1>;  //对应关机极性
    status = "okay";
};

除了tsadc之外,我们也需要了解thermal zone的配置:

thermal_zones: thermal-zones {
    soc_thermal: soc-thermal {  
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值