|
@@ -227,6 +227,7 @@ static int m41t80_get_datetime(struct i2c_client *client,
|
|
|
/* Sets the given date and time to the real time clock. */
|
|
|
static int m41t80_set_datetime(struct i2c_client *client, struct rtc_time *tm)
|
|
|
{
|
|
|
+ struct m41t80_data *clientdata = i2c_get_clientdata(client);
|
|
|
unsigned char buf[8];
|
|
|
int err, flags;
|
|
|
|
|
@@ -242,6 +243,17 @@ static int m41t80_set_datetime(struct i2c_client *client, struct rtc_time *tm)
|
|
|
buf[M41T80_REG_YEAR] = bin2bcd(tm->tm_year - 100);
|
|
|
buf[M41T80_REG_WDAY] = tm->tm_wday;
|
|
|
|
|
|
+ /* If the square wave output is controlled in the weekday register */
|
|
|
+ if (clientdata->features & M41T80_FEATURE_SQ_ALT) {
|
|
|
+ int val;
|
|
|
+
|
|
|
+ val = i2c_smbus_read_byte_data(client, M41T80_REG_WDAY);
|
|
|
+ if (val < 0)
|
|
|
+ return val;
|
|
|
+
|
|
|
+ buf[M41T80_REG_WDAY] |= (val & 0xf0);
|
|
|
+ }
|
|
|
+
|
|
|
err = i2c_smbus_write_i2c_block_data(client, M41T80_REG_SSEC,
|
|
|
sizeof(buf), buf);
|
|
|
if (err < 0) {
|