diff --git a/drivers/counter/maxim_ds3231.c b/drivers/counter/maxim_ds3231.c index 038d6ad6265..b13892e5c42 100644 --- a/drivers/counter/maxim_ds3231.c +++ b/drivers/counter/maxim_ds3231.c @@ -71,14 +71,12 @@ struct gpios { struct ds3231_config { /* Common structure first because generic API expects this here. */ struct counter_config_info generic; - const char *bus_name; + struct i2c_dt_spec bus; struct gpios isw_gpios; - uint16_t addr; }; struct ds3231_data { const struct device *ds3231; - const struct device *i2c; const struct device *isw; struct register_map registers; @@ -159,7 +157,7 @@ static int sc_ctrl(const struct device *dev, offsetof(struct register_map, ctrl), ctrl, }; - rc = i2c_write(data->i2c, buf, sizeof(buf), cfg->addr); + rc = i2c_write_dt(&cfg->bus, buf, sizeof(buf)); if (rc >= 0) { rp->ctrl = ctrl; rc = ctrl; @@ -206,9 +204,8 @@ static inline int rsc_stat(const struct device *dev, uint8_t addr = offsetof(struct register_map, ctrl_stat); int rc; - rc = i2c_write_read(data->i2c, cfg->addr, - &addr, sizeof(addr), - &rp->ctrl_stat, sizeof(rp->ctrl_stat)); + rc = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), &rp->ctrl_stat, + sizeof(rp->ctrl_stat)); if (rc >= 0) { uint8_t stat = rp->ctrl_stat & ~clear; @@ -217,7 +214,7 @@ static inline int rsc_stat(const struct device *dev, addr, stat | (ign & ~(set | clear)), }; - rc = i2c_write(data->i2c, buf, sizeof(buf), cfg->addr); + rc = i2c_write_dt(&cfg->bus, buf, sizeof(buf)); } if (rc >= 0) { rc = rp->ctrl_stat; @@ -455,9 +452,8 @@ static int update_registers(const struct device *dev) uint8_t addr = 0; data->syncclock_base = maxim_ds3231_read_syncclock(dev); - rc = i2c_write_read(data->i2c, cfg->addr, - &addr, sizeof(addr), - &data->registers, sizeof(data->registers)); + rc = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), &data->registers, + sizeof(data->registers)); syncclock = maxim_ds3231_read_syncclock(dev); if (rc < 0) { return rc; @@ -493,9 +489,7 @@ int maxim_ds3231_get_alarm(const struct device *dev, /* Update alarm structure */ uint8_t *rbp = &data->registers.sec + addr; - rv = i2c_write_read(data->i2c, cfg->addr, - &addr, sizeof(addr), - rbp, len); + rv = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), rbp, len); if (rv < 0) { LOG_DBG("get_config at %02x failed: %d\n", addr, rv); @@ -584,7 +578,7 @@ static int set_alarm(const struct device *dev, */ rc = rsc_stat(dev, 0U, (MAXIM_DS3231_ALARM1 << id)); if (rc >= 0) { - rc = i2c_write(data->i2c, buf, len + 1, cfg->addr); + rc = i2c_write_dt(&cfg->bus, buf, len + 1); } if ((rc >= 0) && (cp->handler != NULL)) { @@ -754,9 +748,8 @@ static int read_time(const struct device *dev, const struct ds3231_config *cfg = dev->config; uint8_t addr = 0; - int rc = i2c_write_read(data->i2c, cfg->addr, - &addr, sizeof(addr), - &data->registers, 7); + int rc = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), + &data->registers, 7); if (rc >= 0) { *time = decode_rtc(data); @@ -922,7 +915,7 @@ static void sync_finish_write(const struct device *dev) *bp++ = val; uint32_t syncclock = maxim_ds3231_read_syncclock(dev); - int rc = i2c_write(data->i2c, buf, bp - buf, cfg->addr); + int rc = i2c_write_dt(&cfg->bus, buf, bp - buf); if (rc >= 0) { data->syncpoint.rtc.tv_sec = when; @@ -1119,20 +1112,18 @@ static int ds3231_init(const struct device *dev) { struct ds3231_data *data = dev->data; const struct ds3231_config *cfg = dev->config; - const struct device *i2c = device_get_binding(cfg->bus_name); int rc; /* Initialize and take the lock */ k_sem_init(&data->lock, 0, 1); data->ds3231 = dev; - if (i2c == NULL) { - LOG_WRN("Failed to get I2C %s", cfg->bus_name); - rc = -EINVAL; + if (!device_is_ready(cfg->bus.bus)) { + LOG_ERR("I2C device not ready"); + rc = -ENODEV; goto out; } - data->i2c = i2c; rc = update_registers(dev); if (rc < 0) { LOG_WRN("Failed to fetch registers: %d", rc); @@ -1299,7 +1290,7 @@ static const struct ds3231_config ds3231_0_config = { .flags = COUNTER_CONFIG_INFO_COUNT_UP, .channels = 2, }, - .bus_name = DT_INST_BUS_LABEL(0), + .bus = I2C_DT_SPEC_INST_GET(0), /* Driver does not currently use 32k GPIO. */ #if DT_INST_NODE_HAS_PROP(0, isw_gpios) .isw_gpios = { @@ -1308,7 +1299,6 @@ static const struct ds3231_config ds3231_0_config = { DT_INST_GPIO_FLAGS(0, isw_gpios), }, #endif - .addr = DT_INST_REG_ADDR(0), }; static struct ds3231_data ds3231_0_data;