diff --git a/drivers/sensor/amg88xx/amg88xx.c b/drivers/sensor/amg88xx/amg88xx.c index e20a5245371..5e5c0873821 100644 --- a/drivers/sensor/amg88xx/amg88xx.c +++ b/drivers/sensor/amg88xx/amg88xx.c @@ -29,7 +29,7 @@ static int amg88xx_sample_fetch(const struct device *dev, __ASSERT_NO_MSG(chan == SENSOR_CHAN_ALL || chan == SENSOR_CHAN_AMBIENT_TEMP); - if (i2c_burst_read(drv_data->i2c, config->i2c_address, + if (i2c_burst_read_dt(&config->i2c, AMG88XX_OUTPUT_BASE, (uint8_t *)drv_data->sample, sizeof(drv_data->sample))) { @@ -66,11 +66,10 @@ static int amg88xx_channel_get(const struct device *dev, static int amg88xx_init_device(const struct device *dev) { - struct amg88xx_data *drv_data = dev->data; const struct amg88xx_config *config = dev->config; uint8_t tmp; - if (i2c_reg_read_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_read_byte_dt(&config->i2c, AMG88XX_PCLT, &tmp)) { LOG_ERR("Failed to read Power mode"); return -EIO; @@ -78,8 +77,7 @@ static int amg88xx_init_device(const struct device *dev) LOG_DBG("Power mode 0x%02x", tmp); if (tmp != AMG88XX_PCLT_NORMAL_MODE) { - if (i2c_reg_write_byte(drv_data->i2c, - config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, AMG88XX_PCLT, AMG88XX_PCLT_NORMAL_MODE)) { return -EIO; @@ -87,14 +85,14 @@ static int amg88xx_init_device(const struct device *dev) k_busy_wait(AMG88XX_WAIT_MODE_CHANGE_US); } - if (i2c_reg_write_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, AMG88XX_RST, AMG88XX_RST_INITIAL_RST)) { return -EIO; } k_busy_wait(AMG88XX_WAIT_INITIAL_RESET_US); - if (i2c_reg_write_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, AMG88XX_FPSC, AMG88XX_FPSC_10FPS)) { return -EIO; } @@ -106,13 +104,10 @@ static int amg88xx_init_device(const struct device *dev) int amg88xx_init(const struct device *dev) { - struct amg88xx_data *drv_data = dev->data; const struct amg88xx_config *config = dev->config; - drv_data->i2c = device_get_binding(config->i2c_name); - if (drv_data->i2c == NULL) { - LOG_ERR("Failed to get pointer to %s device!", - config->i2c_name); + if (!device_is_ready(config->i2c.bus)) { + LOG_ERR("Bus device is not ready"); return -EINVAL; } @@ -144,8 +139,7 @@ static const struct sensor_driver_api amg88xx_driver_api = { }; static const struct amg88xx_config amg88xx_config = { - .i2c_name = DT_INST_BUS_LABEL(0), - .i2c_address = DT_INST_REG_ADDR(0), + .i2c = I2C_DT_SPEC_INST_GET(0), #ifdef CONFIG_AMG88XX_TRIGGER .gpio_name = DT_INST_GPIO_LABEL(0, int_gpios), .gpio_pin = DT_INST_GPIO_PIN(0, int_gpios), diff --git a/drivers/sensor/amg88xx/amg88xx.h b/drivers/sensor/amg88xx/amg88xx.h index 2f004784458..b5129e9d9a5 100644 --- a/drivers/sensor/amg88xx/amg88xx.h +++ b/drivers/sensor/amg88xx/amg88xx.h @@ -67,17 +67,15 @@ #define AMG88XX_WAIT_INITIAL_RESET_US 2000 struct amg88xx_config { - char *i2c_name; + const struct i2c_dt_spec i2c; #ifdef CONFIG_AMG88XX_TRIGGER char *gpio_name; uint8_t gpio_pin; gpio_dt_flags_t gpio_flags; #endif - uint8_t i2c_address; }; struct amg88xx_data { - const struct device *i2c; int16_t sample[64]; #ifdef CONFIG_AMG88XX_TRIGGER diff --git a/drivers/sensor/amg88xx/amg88xx_trigger.c b/drivers/sensor/amg88xx/amg88xx_trigger.c index 816726ca464..8c08c3e76f7 100644 --- a/drivers/sensor/amg88xx/amg88xx_trigger.c +++ b/drivers/sensor/amg88xx/amg88xx_trigger.c @@ -35,7 +35,6 @@ int amg88xx_attr_set(const struct device *dev, enum sensor_attribute attr, const struct sensor_value *val) { - struct amg88xx_data *drv_data = dev->data; const struct amg88xx_config *config = dev->config; int16_t int_level = (val->val1 * 1000000 + val->val2) / AMG88XX_TREG_LSB_SCALING; @@ -58,13 +57,13 @@ int amg88xx_attr_set(const struct device *dev, return -ENOTSUP; } - if (i2c_reg_write_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, intl_reg, (uint8_t)int_level)) { LOG_DBG("Failed to set INTxL attribute!"); return -EIO; } - if (i2c_reg_write_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, inth_reg, (uint8_t)(int_level >> 8))) { LOG_DBG("Failed to set INTxH attribute!"); return -EIO; @@ -94,7 +93,7 @@ static void amg88xx_thread_cb(const struct device *dev) const struct amg88xx_config *config = dev->config; uint8_t status; - if (i2c_reg_read_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_read_byte_dt(&config->i2c, AMG88XX_STAT, &status) < 0) { return; } @@ -136,7 +135,7 @@ int amg88xx_trigger_set(const struct device *dev, struct amg88xx_data *drv_data = dev->data; const struct amg88xx_config *config = dev->config; - if (i2c_reg_write_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, AMG88XX_INTC, AMG88XX_INTC_DISABLED)) { return -EIO; } @@ -153,7 +152,7 @@ int amg88xx_trigger_set(const struct device *dev, amg88xx_setup_int(drv_data, true); - if (i2c_reg_write_byte(drv_data->i2c, config->i2c_address, + if (i2c_reg_write_byte_dt(&config->i2c, AMG88XX_INTC, AMG88XX_INTC_ABS_MODE)) { return -EIO; }