diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-07-31 14:19:22 +0100 | 
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-07-31 14:19:22 +0100 | 
| commit | f13b1035ce8bbc27d4ce7c281cddd2718f2cf5b0 (patch) | |
| tree | 44419bd03c33e662302dd003f57d36e133144f91 /drivers/rtc | |
| parent | e910b63d009701ad4ebbeb089aba35707fa5d68e (diff) | |
| parent | 5da3e714e30d40145f4dd37d79de6bbbcb9e6137 (diff) | |
Merge branch 'shmobile' into devel
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-rx8581.c | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/drivers/rtc/rtc-rx8581.c b/drivers/rtc/rtc-rx8581.c index 9718aaaa821..600b890a3c1 100644 --- a/drivers/rtc/rtc-rx8581.c +++ b/drivers/rtc/rtc-rx8581.c @@ -168,7 +168,7 @@ static int rx8581_set_datetime(struct i2c_client *client, struct rtc_time *tm)  		return -EIO;  	} -	err = i2c_smbus_write_byte_data(client, RX8581_REG_FLAG, +	err = i2c_smbus_write_byte_data(client, RX8581_REG_CTRL,  		(data | RX8581_CTRL_STOP));  	if (err < 0) {  		dev_err(&client->dev, "Unable to write control register\n"); @@ -182,6 +182,20 @@ static int rx8581_set_datetime(struct i2c_client *client, struct rtc_time *tm)  		return -EIO;  	} +	/* get VLF and clear it */ +	data = i2c_smbus_read_byte_data(client, RX8581_REG_FLAG); +	if (data < 0) { +		dev_err(&client->dev, "Unable to read flag register\n"); +		return -EIO; +	} + +	err = i2c_smbus_write_byte_data(client, RX8581_REG_FLAG, +		(data & ~(RX8581_FLAG_VLF))); +	if (err != 0) { +		dev_err(&client->dev, "Unable to write flag register\n"); +		return -EIO; +	} +  	/* Restart the clock */  	data = i2c_smbus_read_byte_data(client, RX8581_REG_CTRL);  	if (data < 0) { @@ -189,8 +203,8 @@ static int rx8581_set_datetime(struct i2c_client *client, struct rtc_time *tm)  		return -EIO;  	} -	err = i2c_smbus_write_byte_data(client, RX8581_REG_FLAG, -		(data | ~(RX8581_CTRL_STOP))); +	err = i2c_smbus_write_byte_data(client, RX8581_REG_CTRL, +		(data & ~(RX8581_CTRL_STOP)));  	if (err != 0) {  		dev_err(&client->dev, "Unable to write control register\n");  		return -EIO; | 
