mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
drivers/ds1307: adapt to new i2c API
This commit is contained in:
parent
df52d6b1b8
commit
1362289daf
@ -56,24 +56,18 @@ int ds1307_init(ds1307_t *dev, const ds1307_params_t *params)
|
||||
dev->i2c = params->i2c;
|
||||
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_init_master(dev->i2c, params->clk);
|
||||
if (res < 0) {
|
||||
i2c_release(dev->i2c);
|
||||
DEBUG("ds1307: Error initializing I2C: %i\n", res);
|
||||
return -1;
|
||||
}
|
||||
/* normalize hour format */
|
||||
res = i2c_read_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_HOUR, &hour);
|
||||
if (res <= 0) { /* should be 1 if device is connected */
|
||||
res = i2c_read_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_HOUR, &hour, 0);
|
||||
if (res != 0) { /* should be 0 if device is connected */
|
||||
i2c_release(dev->i2c);
|
||||
DEBUG("ds1307: Error reading HOUR register on init: %i\n", res);
|
||||
return -1;
|
||||
}
|
||||
res = i2c_write_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_HOUR,
|
||||
_convert_12_to_24(hour));
|
||||
_convert_12_to_24(hour), 0);
|
||||
i2c_release(dev->i2c);
|
||||
|
||||
if (res <= 0) {
|
||||
if (res != 0) {
|
||||
DEBUG("ds1307: Error writing HOUR register on init: %i\n", res);
|
||||
return -1;
|
||||
}
|
||||
@ -101,13 +95,13 @@ int ds1307_set_time(const ds1307_t *dev, const struct tm *time)
|
||||
regs[DS1307_REG_YEAR] = bcd_from_byte(time->tm_year + DS1307_YEAR_OFFSET);
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_write_regs(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SEC, regs,
|
||||
sizeof(regs));
|
||||
sizeof(regs), 0);
|
||||
DEBUG("ds1307: wrote bytes %02x %02x %02x %02x %02x %02x %02x to device (result: %i)\n",
|
||||
regs[DS1307_REG_SEC], regs[DS1307_REG_MIN], regs[DS1307_REG_HOUR],
|
||||
regs[DS1307_REG_DOW], regs[DS1307_REG_DOM], regs[DS1307_REG_MON],
|
||||
regs[DS1307_REG_YEAR], res);
|
||||
i2c_release(dev->i2c);
|
||||
return (res < 0) ? -1 : 0;
|
||||
return (res != 0) ? -1 : 0;
|
||||
}
|
||||
|
||||
int ds1307_get_time(const ds1307_t *dev, struct tm *time)
|
||||
@ -117,13 +111,13 @@ int ds1307_get_time(const ds1307_t *dev, struct tm *time)
|
||||
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_read_regs(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SEC, regs,
|
||||
sizeof(regs));
|
||||
sizeof(regs), 0);
|
||||
DEBUG("ds1307: read bytes %02x %02x %02x %02x %02x %02x %02x from device (result: %i)\n",
|
||||
regs[DS1307_REG_SEC], regs[DS1307_REG_MIN], regs[DS1307_REG_HOUR],
|
||||
regs[DS1307_REG_DOW], regs[DS1307_REG_DOM], regs[DS1307_REG_MON],
|
||||
regs[DS1307_REG_YEAR], res);
|
||||
i2c_release(dev->i2c);
|
||||
if (res < 0) {
|
||||
if (res != 0) {
|
||||
return -1;
|
||||
}
|
||||
time->tm_sec = bcd_to_byte(regs[DS1307_REG_SEC] & DS1307_REG_SEC_MASK);
|
||||
@ -145,16 +139,16 @@ int ds1307_halt(const ds1307_t *dev)
|
||||
uint8_t sec;
|
||||
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_read_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SEC, &sec);
|
||||
if (res < 0) {
|
||||
res = i2c_read_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SEC, &sec, 0);
|
||||
if (res != 0) {
|
||||
i2c_release(dev->i2c);
|
||||
DEBUG("ds1307: Error reading SEC register on halt: %i\n", res);
|
||||
return -1;
|
||||
}
|
||||
sec |= DS1307_REG_SEC_CH;
|
||||
res = i2c_write_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SEC, sec);
|
||||
res = i2c_write_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SEC, sec, 0);
|
||||
i2c_release(dev->i2c);
|
||||
return (res < 0) ? -1 : 0;
|
||||
return (res != 0) ? -1 : 0;
|
||||
}
|
||||
|
||||
int ds1307_set_sqw_mode(const ds1307_t *dev, ds1307_sqw_mode_t mode)
|
||||
@ -163,7 +157,7 @@ int ds1307_set_sqw_mode(const ds1307_t *dev, ds1307_sqw_mode_t mode)
|
||||
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_write_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SQW_CTL,
|
||||
(uint8_t)mode);
|
||||
(uint8_t)mode, 0);
|
||||
i2c_release(dev->i2c);
|
||||
return res;
|
||||
}
|
||||
@ -174,7 +168,8 @@ int ds1307_get_sqw_mode(const ds1307_t *dev)
|
||||
int res;
|
||||
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_read_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SQW_CTL, &mode);
|
||||
res = i2c_read_reg(dev->i2c, DS1307_I2C_ADDRESS, DS1307_REG_SQW_CTL,
|
||||
&mode, 0);
|
||||
i2c_release(dev->i2c);
|
||||
return (res < 0) ? res : (int)mode;
|
||||
}
|
||||
@ -190,9 +185,9 @@ static int _nvram_read(struct nvram *nvram, uint8_t *dst, uint32_t src,
|
||||
}
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_read_regs(dev->i2c, DS1307_I2C_ADDRESS,
|
||||
DS1307_REG_RAM_FIRST + src, dst, size);
|
||||
DS1307_REG_RAM_FIRST + src, dst, size, 0);
|
||||
i2c_release(dev->i2c);
|
||||
return res;
|
||||
return (res == 0) ? (int)size : -1;
|
||||
}
|
||||
|
||||
static int _nvram_write(struct nvram *nvram, const uint8_t *src, uint32_t dst,
|
||||
@ -206,9 +201,9 @@ static int _nvram_write(struct nvram *nvram, const uint8_t *src, uint32_t dst,
|
||||
}
|
||||
i2c_acquire(dev->i2c);
|
||||
res = i2c_write_regs(dev->i2c, DS1307_I2C_ADDRESS,
|
||||
DS1307_REG_RAM_FIRST + dst, src, size);
|
||||
DS1307_REG_RAM_FIRST + dst, src, size, 0);
|
||||
i2c_release(dev->i2c);
|
||||
return res;
|
||||
return (res == 0) ? (int)size : -1;
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
Loading…
Reference in New Issue
Block a user