Linux设备驱动 -- TMP75AIDR驱动移植

张开发
2026/4/12 17:26:09 15 分钟阅读

分享文章

Linux设备驱动 -- TMP75AIDR驱动移植
查看原理图TMP75AIDR和RK3568采用I2C通信使用I2C5。根据TMP75AIDR芯片手册知道I2C地址是由A0 A1 A2决定的。此原理图芯片I2C地址是0x48。内核支持内核中已经有该芯片的驱动支持使用的是hwmon子系统实现的驱动。驱动源码位置kernel/drivers/hwmon/lm75.c源码文件中定义了支持的设备staticconststructof_device_idlm75_of_match[]{{.compatibleadi,adt75,.data(void*)adt75},{.compatibledallas,ds1775,.data(void*)ds1775},{.compatibledallas,ds75,.data(void*)ds75},{.compatibledallas,ds7505,.data(void*)ds7505},{.compatiblegmt,g751,.data(void*)g751},{.compatiblenational,lm75,.data(void*)lm75},{.compatiblenational,lm75a,.data(void*)lm75a},{.compatiblenational,lm75b,.data(void*)lm75b},{.compatiblemaxim,max6625,.data(void*)max6625},{.compatiblemaxim,max6626,.data(void*)max6626},{.compatiblemaxim,mcp980x,.data(void*)mcp980x},{.compatiblest,stds75,.data(void*)stds75},{.compatiblemicrochip,tcn75,.data(void*)tcn75},{.compatibleti,tmp100,.data(void*)tmp100},{.compatibleti,tmp101,.data(void*)tmp101},{.compatibleti,tmp105,.data(void*)tmp105},{.compatibleti,tmp112,.data(void*)tmp112},{.compatibleti,tmp175,.data(void*)tmp175},{.compatibleti,tmp275,.data(void*)tmp275},{.compatibleti,tmp75,.data(void*)tmp75},{.compatibleti,tmp75c,.data(void*)tmp75c},{},};驱动通过I2C子系统注册staticstructi2c_driverlm75_driver{.classI2C_CLASS_HWMON,.driver{.namelm75,.of_match_tableof_match_ptr(lm75_of_match),.pmLM75_DEV_PM_OPS,},.probelm75_probe,.id_tablelm75_ids,.detectlm75_detect,.address_listnormal_i2c,};module_i2c_driver(lm75_driver);驱动提供的功能温度读取支持9-12位分辨率温度上限设置温度滞后设置通过hwmon子系统暴露到用户空间支持设备树自动探测配置内核使能支持TMP75AIDRDevice Drivers---*Hardware Monitoring support---*National Semiconductor LM75 and compatibles内核配置项确保其值等于yCONFIG_SENSORS_LM75y配置选项定义文件kernel/drivers/hwmon/Kconfig编写设备树节点i2c5{… … tmp75aidr:tmp7548{compatible ti,tmp75;reg0x48;statusokay;};};compatible属性值必须为ti,tmp75reg属性设备的i2c地址根据原理图得知其值是0x48。status值必须是okay表示已启用。编写配置好设备树节点重新编译内核。用户空间访问驱动加载后会在sysfs中生成相应节点可直接通过如下方式读取温度rootM3:~# ls /sys/class/hwmon/hwmon0/device of_node subsystem temp1_max uevent name power temp1_input temp1_max_hyst update_interval# 查看hwmon设备ls/sys/class/hwmon/# 读取温度值cat/sys/class/hwmon/hwmon0/temp1_input temp1_input temp1_max_hyst update_interval# 查看hwmon设备ls/sys/class/hwmon/# 读取温度值cat/sys/class/hwmon/hwmon0/temp1_input

更多文章