mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
hwmon: (aht10) Add support for dht20
Add support for dht20 temperature and humidity sensor from Aosong. Modify aht10 driver to handle different init command for dht20 sensor by adding init_cmd entry in the driver data. dht20 sensor is compatible with aht10 hwmon driver with this change. Tested on TI am62x SK board with dht20 sensor connected at i2c-2 port. Signed-off-by: Akhilesh Patil <akhilesh@ee.iitb.ac.in> Link: https://lore.kernel.org/r/2025112-94320-906858@bhairav-test.ee.iitb.ac.in Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
committed by
Guenter Roeck
parent
2ea255d35b
commit
3eaf1b6315
@@ -20,6 +20,14 @@ Supported chips:
|
||||
|
||||
English: http://www.aosong.com/userfiles/files/media/Data%20Sheet%20AHT20.pdf
|
||||
|
||||
* Aosong DHT20
|
||||
|
||||
Prefix: 'dht20'
|
||||
|
||||
Addresses scanned: None
|
||||
|
||||
Datasheet: https://www.digikey.co.nz/en/htmldatasheets/production/9184855/0/0/1/101020932
|
||||
|
||||
Author: Johannes Cornelis Draaijer <jcdra1@gmail.com>
|
||||
|
||||
|
||||
@@ -33,7 +41,7 @@ The address of this i2c device may only be 0x38
|
||||
Special Features
|
||||
----------------
|
||||
|
||||
AHT20 has additional CRC8 support which is sent as the last byte of the sensor
|
||||
AHT20, DHT20 has additional CRC8 support which is sent as the last byte of the sensor
|
||||
values.
|
||||
|
||||
Usage Notes
|
||||
|
||||
@@ -245,12 +245,12 @@ config SENSORS_ADT7475
|
||||
will be called adt7475.
|
||||
|
||||
config SENSORS_AHT10
|
||||
tristate "Aosong AHT10, AHT20"
|
||||
tristate "Aosong AHT10, AHT20, DHT20"
|
||||
depends on I2C
|
||||
select CRC8
|
||||
help
|
||||
If you say yes here, you get support for the Aosong AHT10 and AHT20
|
||||
temperature and humidity sensors
|
||||
If you say yes here, you get support for the Aosong AHT10, AHT20 and
|
||||
DHT20 temperature and humidity sensors
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called aht10.
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
#define AHT10_CMD_MEAS 0b10101100
|
||||
#define AHT10_CMD_RST 0b10111010
|
||||
|
||||
#define DHT20_CMD_INIT 0x71
|
||||
|
||||
/*
|
||||
* Flags in the answer byte/command
|
||||
*/
|
||||
@@ -48,11 +50,12 @@
|
||||
|
||||
#define AHT10_MAX_POLL_INTERVAL_LEN 30
|
||||
|
||||
enum aht10_variant { aht10, aht20 };
|
||||
enum aht10_variant { aht10, aht20, dht20};
|
||||
|
||||
static const struct i2c_device_id aht10_id[] = {
|
||||
{ "aht10", aht10 },
|
||||
{ "aht20", aht20 },
|
||||
{ "dht20", dht20 },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, aht10_id);
|
||||
@@ -75,6 +78,7 @@ MODULE_DEVICE_TABLE(i2c, aht10_id);
|
||||
* AHT10/AHT20
|
||||
* @crc8: crc8 support flag
|
||||
* @meas_size: measurements data size
|
||||
* @init_cmd: Initialization command
|
||||
*/
|
||||
|
||||
struct aht10_data {
|
||||
@@ -85,6 +89,7 @@ struct aht10_data {
|
||||
int humidity;
|
||||
bool crc8;
|
||||
unsigned int meas_size;
|
||||
u8 init_cmd;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -94,13 +99,13 @@ struct aht10_data {
|
||||
*/
|
||||
static int aht10_init(struct aht10_data *data)
|
||||
{
|
||||
const u8 cmd_init[] = {AHT10_CMD_INIT, AHT10_CAL_ENABLED | AHT10_MODE_CYC,
|
||||
const u8 cmd_init[] = {data->init_cmd, AHT10_CAL_ENABLED | AHT10_MODE_CYC,
|
||||
0x00};
|
||||
int res;
|
||||
u8 status;
|
||||
struct i2c_client *client = data->client;
|
||||
|
||||
res = i2c_master_send(client, cmd_init, 3);
|
||||
res = i2c_master_send(client, cmd_init, sizeof(cmd_init));
|
||||
if (res < 0)
|
||||
return res;
|
||||
|
||||
@@ -336,9 +341,17 @@ static int aht10_probe(struct i2c_client *client)
|
||||
data->meas_size = AHT20_MEAS_SIZE;
|
||||
data->crc8 = true;
|
||||
crc8_populate_msb(crc8_table, AHT20_CRC8_POLY);
|
||||
data->init_cmd = AHT10_CMD_INIT;
|
||||
break;
|
||||
case dht20:
|
||||
data->meas_size = AHT20_MEAS_SIZE;
|
||||
data->crc8 = true;
|
||||
crc8_populate_msb(crc8_table, AHT20_CRC8_POLY);
|
||||
data->init_cmd = DHT20_CMD_INIT;
|
||||
break;
|
||||
default:
|
||||
data->meas_size = AHT10_MEAS_SIZE;
|
||||
data->init_cmd = AHT10_CMD_INIT;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user