查看原理图
TMP75AIDR和RK3568采用I2C通信,使用I2C5。
根据TMP75AIDR芯片手册知道I2C地址是由A0 A1 A2决定的。
此原理图芯片I2C地址是0x48。
内核支持
内核中已经有该芯片的驱动支持,使用的是hwmon子系统实现的驱动。
驱动源码位置:kernel/drivers/hwmon/lm75.c
源码文件中定义了支持的设备:
staticconststructof_device_idlm75_of_match[] = { { .compatible = "adi,adt75", .data = (void *)adt75 }, { .compatible = "dallas,ds1775", .data = (void *)ds1775 }, { .compatible = "dallas,ds75", .data = (void *)ds75 }, { .compatible = "dallas,ds7505", .data = (void *)ds7505 }, { .compatible = "gmt,g751", .data = (void *)g751 }, { .compatible = "national,lm75", .data = (void *)lm75 }, { .compatible = "national,lm75a", .data = (void *)lm75a }, { .compatible = "national,lm75b", .data = (void *)lm75b }, { .compatible = "maxim,max6625", .data = (void *)max6625 }, { .compatible = "maxim,max6626", .data = (void *)max6626 }, { .compatible = "maxim,mcp980x", .data = (void *)mcp980x }, { .compatible = "st,stds75", .data = (void *)stds75 }, { .compatible = "microchip,tcn75", .data = (void *)tcn75 }, { .compatible = "ti,tmp100", .data = (void *)tmp100 }, { .compatible = "ti,tmp101", .data = (void *)tmp101 }, { .compatible = "ti,tmp105", .data = (void *)tmp105 }, { .compatible = "ti,tmp112", .data = (void *)tmp112 }, { .compatible = "ti,tmp175", .data = (void *)tmp175 }, { .compatible = "ti,tmp275", .data = (void *)tmp275 }, { .compatible = "ti,tmp75", .data = (void *)tmp75 }, { .compatible = "ti,tmp75c", .data = (void *)tmp75c }, { },};
驱动通过I2C子系统注册:
staticstructi2c_driverlm75_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = "lm75", .of_match_table = of_match_ptr(lm75_of_match), .pm = LM75_DEV_PM_OPS, }, .probe = lm75_probe, .id_table = lm75_ids, .detect = lm75_detect, .address_list = normal_i2c,};module_i2c_driver(lm75_driver);
驱动提供的功能:
配置内核使能支持TMP75AIDR
Device Drivers ---> <*> Hardware Monitoring support ---> <*> National Semiconductor LM75 and compatibles
内核配置项,确保其值等于y:
CONFIG_SENSORS_LM75=y
配置选项定义文件:kernel/drivers/hwmon/Kconfig
编写设备树节点
&i2c5 { … … tmp75aidr: tmp75@48 { compatible = " ti,tmp75"; reg = <0x48>; status = "okay"; };};
编写配置好设备树节点,重新编译内核。
用户空间访问