Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 295251
b: refs/heads/master
c: 40ce972
h: refs/heads/master
i:
  295249: 6ce8825
  295247: 18fe842
v: v3
  • Loading branch information
David Anders authored and Linus Torvalds committed Mar 23, 2012
1 parent 48c0a2b commit 0ecc664
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b24a7267709bb0adb694364572478f919e9c7390
refs/heads/master: 40ce972d59fcfd4979e5de04456122447b40c1cf
37 changes: 24 additions & 13 deletions trunk/drivers/rtc/rtc-ds1307.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@



/* We can't determine type by probing, but if we expect pre-Linux code
/*
* We can't determine type by probing, but if we expect pre-Linux code
* to have set the chip up as a clock (turning on the oscillator and
* setting the date and time), Linux can ignore the non-clock features.
* That's a natural job for a factory or repair bench.
Expand All @@ -37,7 +38,7 @@ enum ds_type {
mcp7941x,
rx_8025,
last_ds_type /* always last */
// rs5c372 too? different address...
/* rs5c372 too? different address... */
};


Expand All @@ -59,7 +60,8 @@ enum ds_type {
# define DS1337_BIT_CENTURY 0x80 /* in REG_MONTH */
#define DS1307_REG_YEAR 0x06 /* 00-99 */

/* Other registers (control, status, alarms, trickle charge, NVRAM, etc)
/*
* Other registers (control, status, alarms, trickle charge, NVRAM, etc)
* start at 7, and they differ a LOT. Only control and status matter for
* basic RTC date and time functionality; be careful using them.
*/
Expand Down Expand Up @@ -366,6 +368,11 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)
| DS1340_BIT_CENTURY;
break;
case mcp7941x:
/*
* these bits were cleared when preparing the date/time
* values and need to be set again before writing the
* buffer out to the device.
*/
buf[DS1307_REG_SECS] |= MCP7941X_BIT_ST;
buf[DS1307_REG_WDAY] |= MCP7941X_BIT_VBATEN;
break;
Expand Down Expand Up @@ -411,7 +418,8 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)
ds1307->regs[6], ds1307->regs[7],
ds1307->regs[8]);

/* report alarm time (ALARM1); assume 24 hour and day-of-month modes,
/*
* report alarm time (ALARM1); assume 24 hour and day-of-month modes,
* and that all four fields are checked matches
*/
t->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f);
Expand Down Expand Up @@ -439,7 +447,7 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)

static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)
{
struct i2c_client *client = to_i2c_client(dev);
struct i2c_client *client = to_i2c_client(dev);
struct ds1307 *ds1307 = i2c_get_clientdata(client);
unsigned char *buf = ds1307->regs;
u8 control, status;
Expand Down Expand Up @@ -602,8 +610,6 @@ static struct bin_attribute nvram = {

/*----------------------------------------------------------------------*/

static struct i2c_driver ds1307_driver;

static int __devinit ds1307_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
Expand All @@ -624,7 +630,8 @@ static int __devinit ds1307_probe(struct i2c_client *client,
&& !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_I2C_BLOCK))
return -EIO;

if (!(ds1307 = kzalloc(sizeof(struct ds1307), GFP_KERNEL)))
ds1307 = kzalloc(sizeof(struct ds1307), GFP_KERNEL);
if (!ds1307)
return -ENOMEM;

i2c_set_clientdata(client, ds1307);
Expand Down Expand Up @@ -659,7 +666,8 @@ static int __devinit ds1307_probe(struct i2c_client *client,
if (ds1307->regs[0] & DS1337_BIT_nEOSC)
ds1307->regs[0] &= ~DS1337_BIT_nEOSC;

/* Using IRQ? Disable the square wave and both alarms.
/*
* Using IRQ? Disable the square wave and both alarms.
* For some variants, be sure alarms can trigger when we're
* running on Vbackup (BBSQI/BBSQW)
*/
Expand Down Expand Up @@ -765,7 +773,8 @@ static int __devinit ds1307_probe(struct i2c_client *client,
goto exit_free;
}

/* minimal sanity checking; some chips (like DS1340) don't
/*
* minimal sanity checking; some chips (like DS1340) don't
* specify the extra bits as must-be-zero, but there are
* still a few values that are clearly out-of-range.
*/
Expand Down Expand Up @@ -837,7 +846,8 @@ static int __devinit ds1307_probe(struct i2c_client *client,
switch (ds1307->type) {
case ds_1340:
case m41t00:
/* NOTE: ignores century bits; fix before deploying
/*
* NOTE: ignores century bits; fix before deploying
* systems that will run through year 2100.
*/
break;
Expand All @@ -847,7 +857,8 @@ static int __devinit ds1307_probe(struct i2c_client *client,
if (!(tmp & DS1307_BIT_12HR))
break;

/* Be sure we're in 24 hour mode. Multi-master systems
/*
* Be sure we're in 24 hour mode. Multi-master systems
* take note...
*/
tmp = bcd2bin(tmp & 0x1f);
Expand Down Expand Up @@ -902,7 +913,7 @@ static int __devinit ds1307_probe(struct i2c_client *client,

static int __devexit ds1307_remove(struct i2c_client *client)
{
struct ds1307 *ds1307 = i2c_get_clientdata(client);
struct ds1307 *ds1307 = i2c_get_clientdata(client);

if (test_and_clear_bit(HAS_ALARM, &ds1307->flags)) {
free_irq(client->irq, client);
Expand Down

0 comments on commit 0ecc664

Please sign in to comment.