drivers: counter: maxim_ds3231: use i2c_dt_spec
Simplify implementation by using i2c_dt_spec. Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
This commit is contained in:
parent
aa431f636e
commit
85d0ef6e55
1 changed files with 16 additions and 26 deletions
|
@ -71,14 +71,12 @@ struct gpios {
|
||||||
struct ds3231_config {
|
struct ds3231_config {
|
||||||
/* Common structure first because generic API expects this here. */
|
/* Common structure first because generic API expects this here. */
|
||||||
struct counter_config_info generic;
|
struct counter_config_info generic;
|
||||||
const char *bus_name;
|
struct i2c_dt_spec bus;
|
||||||
struct gpios isw_gpios;
|
struct gpios isw_gpios;
|
||||||
uint16_t addr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ds3231_data {
|
struct ds3231_data {
|
||||||
const struct device *ds3231;
|
const struct device *ds3231;
|
||||||
const struct device *i2c;
|
|
||||||
const struct device *isw;
|
const struct device *isw;
|
||||||
struct register_map registers;
|
struct register_map registers;
|
||||||
|
|
||||||
|
@ -159,7 +157,7 @@ static int sc_ctrl(const struct device *dev,
|
||||||
offsetof(struct register_map, ctrl),
|
offsetof(struct register_map, ctrl),
|
||||||
ctrl,
|
ctrl,
|
||||||
};
|
};
|
||||||
rc = i2c_write(data->i2c, buf, sizeof(buf), cfg->addr);
|
rc = i2c_write_dt(&cfg->bus, buf, sizeof(buf));
|
||||||
if (rc >= 0) {
|
if (rc >= 0) {
|
||||||
rp->ctrl = ctrl;
|
rp->ctrl = ctrl;
|
||||||
rc = 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);
|
uint8_t addr = offsetof(struct register_map, ctrl_stat);
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = i2c_write_read(data->i2c, cfg->addr,
|
rc = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), &rp->ctrl_stat,
|
||||||
&addr, sizeof(addr),
|
sizeof(rp->ctrl_stat));
|
||||||
&rp->ctrl_stat, sizeof(rp->ctrl_stat));
|
|
||||||
if (rc >= 0) {
|
if (rc >= 0) {
|
||||||
uint8_t stat = rp->ctrl_stat & ~clear;
|
uint8_t stat = rp->ctrl_stat & ~clear;
|
||||||
|
|
||||||
|
@ -217,7 +214,7 @@ static inline int rsc_stat(const struct device *dev,
|
||||||
addr,
|
addr,
|
||||||
stat | (ign & ~(set | clear)),
|
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) {
|
if (rc >= 0) {
|
||||||
rc = rp->ctrl_stat;
|
rc = rp->ctrl_stat;
|
||||||
|
@ -455,9 +452,8 @@ static int update_registers(const struct device *dev)
|
||||||
uint8_t addr = 0;
|
uint8_t addr = 0;
|
||||||
|
|
||||||
data->syncclock_base = maxim_ds3231_read_syncclock(dev);
|
data->syncclock_base = maxim_ds3231_read_syncclock(dev);
|
||||||
rc = i2c_write_read(data->i2c, cfg->addr,
|
rc = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), &data->registers,
|
||||||
&addr, sizeof(addr),
|
sizeof(data->registers));
|
||||||
&data->registers, sizeof(data->registers));
|
|
||||||
syncclock = maxim_ds3231_read_syncclock(dev);
|
syncclock = maxim_ds3231_read_syncclock(dev);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -493,9 +489,7 @@ int maxim_ds3231_get_alarm(const struct device *dev,
|
||||||
/* Update alarm structure */
|
/* Update alarm structure */
|
||||||
uint8_t *rbp = &data->registers.sec + addr;
|
uint8_t *rbp = &data->registers.sec + addr;
|
||||||
|
|
||||||
rv = i2c_write_read(data->i2c, cfg->addr,
|
rv = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr), rbp, len);
|
||||||
&addr, sizeof(addr),
|
|
||||||
rbp, len);
|
|
||||||
|
|
||||||
if (rv < 0) {
|
if (rv < 0) {
|
||||||
LOG_DBG("get_config at %02x failed: %d\n", addr, rv);
|
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));
|
rc = rsc_stat(dev, 0U, (MAXIM_DS3231_ALARM1 << id));
|
||||||
if (rc >= 0) {
|
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)
|
if ((rc >= 0)
|
||||||
&& (cp->handler != NULL)) {
|
&& (cp->handler != NULL)) {
|
||||||
|
@ -754,9 +748,8 @@ static int read_time(const struct device *dev,
|
||||||
const struct ds3231_config *cfg = dev->config;
|
const struct ds3231_config *cfg = dev->config;
|
||||||
uint8_t addr = 0;
|
uint8_t addr = 0;
|
||||||
|
|
||||||
int rc = i2c_write_read(data->i2c, cfg->addr,
|
int rc = i2c_write_read_dt(&cfg->bus, &addr, sizeof(addr),
|
||||||
&addr, sizeof(addr),
|
&data->registers, 7);
|
||||||
&data->registers, 7);
|
|
||||||
|
|
||||||
if (rc >= 0) {
|
if (rc >= 0) {
|
||||||
*time = decode_rtc(data);
|
*time = decode_rtc(data);
|
||||||
|
@ -922,7 +915,7 @@ static void sync_finish_write(const struct device *dev)
|
||||||
*bp++ = val;
|
*bp++ = val;
|
||||||
|
|
||||||
uint32_t syncclock = maxim_ds3231_read_syncclock(dev);
|
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) {
|
if (rc >= 0) {
|
||||||
data->syncpoint.rtc.tv_sec = when;
|
data->syncpoint.rtc.tv_sec = when;
|
||||||
|
@ -1119,20 +1112,18 @@ static int ds3231_init(const struct device *dev)
|
||||||
{
|
{
|
||||||
struct ds3231_data *data = dev->data;
|
struct ds3231_data *data = dev->data;
|
||||||
const struct ds3231_config *cfg = dev->config;
|
const struct ds3231_config *cfg = dev->config;
|
||||||
const struct device *i2c = device_get_binding(cfg->bus_name);
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Initialize and take the lock */
|
/* Initialize and take the lock */
|
||||||
k_sem_init(&data->lock, 0, 1);
|
k_sem_init(&data->lock, 0, 1);
|
||||||
|
|
||||||
data->ds3231 = dev;
|
data->ds3231 = dev;
|
||||||
if (i2c == NULL) {
|
if (!device_is_ready(cfg->bus.bus)) {
|
||||||
LOG_WRN("Failed to get I2C %s", cfg->bus_name);
|
LOG_ERR("I2C device not ready");
|
||||||
rc = -EINVAL;
|
rc = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
data->i2c = i2c;
|
|
||||||
rc = update_registers(dev);
|
rc = update_registers(dev);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
LOG_WRN("Failed to fetch registers: %d", rc);
|
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,
|
.flags = COUNTER_CONFIG_INFO_COUNT_UP,
|
||||||
.channels = 2,
|
.channels = 2,
|
||||||
},
|
},
|
||||||
.bus_name = DT_INST_BUS_LABEL(0),
|
.bus = I2C_DT_SPEC_INST_GET(0),
|
||||||
/* Driver does not currently use 32k GPIO. */
|
/* Driver does not currently use 32k GPIO. */
|
||||||
#if DT_INST_NODE_HAS_PROP(0, isw_gpios)
|
#if DT_INST_NODE_HAS_PROP(0, isw_gpios)
|
||||||
.isw_gpios = {
|
.isw_gpios = {
|
||||||
|
@ -1308,7 +1299,6 @@ static const struct ds3231_config ds3231_0_config = {
|
||||||
DT_INST_GPIO_FLAGS(0, isw_gpios),
|
DT_INST_GPIO_FLAGS(0, isw_gpios),
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
.addr = DT_INST_REG_ADDR(0),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ds3231_data ds3231_0_data;
|
static struct ds3231_data ds3231_0_data;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue