mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 22:25:03 +00:00
rtc ds1307: ds_1340 change init
For DS140, clear the oscillator fault flag as needed. Signed-off-by: Frederic RODO <f.rodo@til-technologies.fr> [ And remove some "sparse" warnings. ] Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
75b6102257
commit
fcd8db002f
1 changed files with 20 additions and 7 deletions
|
@ -256,7 +256,7 @@ ds1307_nvram_read(struct kobject *kobj, struct bin_attribute *attr,
|
||||||
struct i2c_msg msg[2];
|
struct i2c_msg msg[2];
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
client = to_i2c_client(container_of(kobj, struct device, kobj));
|
client = kobj_to_i2c_client(kobj);
|
||||||
ds1307 = i2c_get_clientdata(client);
|
ds1307 = i2c_get_clientdata(client);
|
||||||
|
|
||||||
if (unlikely(off >= NVRAM_SIZE))
|
if (unlikely(off >= NVRAM_SIZE))
|
||||||
|
@ -294,7 +294,7 @@ ds1307_nvram_write(struct kobject *kobj, struct bin_attribute *attr,
|
||||||
u8 buffer[NVRAM_SIZE + 1];
|
u8 buffer[NVRAM_SIZE + 1];
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
client = to_i2c_client(container_of(kobj, struct device, kobj));
|
client = kobj_to_i2c_client(kobj);
|
||||||
|
|
||||||
if (unlikely(off >= NVRAM_SIZE))
|
if (unlikely(off >= NVRAM_SIZE))
|
||||||
return -EFBIG;
|
return -EFBIG;
|
||||||
|
@ -412,11 +412,6 @@ static int __devinit ds1307_probe(struct i2c_client *client)
|
||||||
*/
|
*/
|
||||||
tmp = ds1307->regs[DS1307_REG_SECS];
|
tmp = ds1307->regs[DS1307_REG_SECS];
|
||||||
switch (ds1307->type) {
|
switch (ds1307->type) {
|
||||||
case ds_1340:
|
|
||||||
/* FIXME read register with DS1340_BIT_OSF, use that to
|
|
||||||
* trigger the "set time" warning (*after* restarting the
|
|
||||||
* oscillator!) instead of this weaker ds1307/m41t00 test.
|
|
||||||
*/
|
|
||||||
case ds_1307:
|
case ds_1307:
|
||||||
case m41t00:
|
case m41t00:
|
||||||
/* clock halted? turn it on, so clock can tick. */
|
/* clock halted? turn it on, so clock can tick. */
|
||||||
|
@ -440,6 +435,24 @@ static int __devinit ds1307_probe(struct i2c_client *client)
|
||||||
goto read_rtc;
|
goto read_rtc;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ds_1340:
|
||||||
|
/* clock halted? turn it on, so clock can tick. */
|
||||||
|
if (tmp & DS1340_BIT_nEOSC)
|
||||||
|
i2c_smbus_write_byte_data(client, DS1307_REG_SECS, 0);
|
||||||
|
|
||||||
|
tmp = i2c_smbus_read_byte_data(client, DS1340_REG_FLAG);
|
||||||
|
if (tmp < 0) {
|
||||||
|
pr_debug("read error %d\n", tmp);
|
||||||
|
err = -EIO;
|
||||||
|
goto exit_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* oscillator fault? clear flag, and warn */
|
||||||
|
if (tmp & DS1340_BIT_OSF) {
|
||||||
|
i2c_smbus_write_byte_data(client, DS1340_REG_FLAG, 0);
|
||||||
|
dev_warn(&client->dev, "SET TIME!\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ds_1337:
|
case ds_1337:
|
||||||
case ds_1339:
|
case ds_1339:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue