20 #include <linux/kernel.h>
21 #include <linux/module.h>
23 #include <linux/i2c.h>
24 #include <linux/rtc.h>
27 #include <linux/slab.h>
30 #define DS1374_REG_TOD0 0x00
31 #define DS1374_REG_TOD1 0x01
32 #define DS1374_REG_TOD2 0x02
33 #define DS1374_REG_TOD3 0x03
34 #define DS1374_REG_WDALM0 0x04
35 #define DS1374_REG_WDALM1 0x05
36 #define DS1374_REG_WDALM2 0x06
37 #define DS1374_REG_CR 0x07
38 #define DS1374_REG_CR_AIE 0x01
39 #define DS1374_REG_CR_WDALM 0x20
40 #define DS1374_REG_CR_WACE 0x40
41 #define DS1374_REG_SR 0x08
42 #define DS1374_REG_SR_OSF 0x80
43 #define DS1374_REG_SR_AF 0x01
44 #define DS1374_REG_TCR 0x09
86 for (i = nbytes - 1, *time = 0; i >= 0; i--)
87 *time = (*time << 8) | buf[
i];
92 static int ds1374_write_rtc(
struct i2c_client *client,
u32 time,
103 for (i = 0; i <
nbytes; i++) {
104 buf[
i] = time & 0xff;
111 static int ds1374_check_rtc_status(
struct i2c_client *client)
122 "oscillator discontinuity flagged, "
123 "time unreliable\n");
157 static int ds1374_set_time(
struct device *dev,
struct rtc_time *time)
178 if (client->
irq <= 0)
211 struct ds1374 *ds1374 = i2c_get_clientdata(client);
213 unsigned long new_alarm, itime;
217 if (client->
irq <= 0)
220 ret = ds1374_read_time(dev, &now);
271 struct ds1374 *ds1374 = i2c_get_clientdata(client);
280 struct ds1374 *ds1374 =
container_of(work,
struct ds1374, work);
291 stat &= ~DS1374_REG_SR_AF;
311 static int ds1374_alarm_irq_enable(
struct device *dev,
unsigned int enabled)
314 struct ds1374 *ds1374 = i2c_get_clientdata(client);
337 .read_time = ds1374_read_time,
338 .set_time = ds1374_set_time,
339 .read_alarm = ds1374_read_alarm,
340 .set_alarm = ds1374_set_alarm,
341 .alarm_irq_enable = ds1374_alarm_irq_enable,
344 static int ds1374_probe(
struct i2c_client *client,
347 struct ds1374 *ds1374;
350 ds1374 = kzalloc(
sizeof(
struct ds1374),
GFP_KERNEL);
355 i2c_set_clientdata(client, ds1374);
360 ret = ds1374_check_rtc_status(client);
364 if (client->
irq > 0) {
368 dev_err(&client->
dev,
"unable to request IRQ\n");
377 if (IS_ERR(ds1374->
rtc)) {
378 ret = PTR_ERR(ds1374->
rtc);
379 dev_err(&client->
dev,
"unable to register the class device\n");
396 struct ds1374 *ds1374 = i2c_get_clientdata(client);
398 if (client->
irq > 0) {
413 static int ds1374_suspend(
struct device *dev)
417 if (client->
irq >= 0 && device_may_wakeup(&client->
dev))
418 enable_irq_wake(client->
irq);
422 static int ds1374_resume(
struct device *dev)
426 if (client->
irq >= 0 && device_may_wakeup(&client->
dev))
427 disable_irq_wake(client->
irq);
433 #define DS1374_PM (&ds1374_pm)
435 #define DS1374_PM NULL
440 .name =
"rtc-ds1374",
444 .probe = ds1374_probe,
446 .id_table = ds1374_id,