lkml.org 
[lkml]   [2018]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 160/310] rtc: m41t80: fix SQW dividers override when setting a date
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Gary Bisson <gary.bisson@boundarydevices.com>


    [ Upstream commit 0f546b058b86ea2f661cc7a6e931cee5a29959ef ]

    This patch is only relevant for RTC with the SQ_ALT feature which
    means the clock output frequency divider is stored in the weekday
    register.

    Current implementation discards the previous dividers value and clear
    them as soon as the time is set.

    Signed-off-by: Gary Bisson <gary.bisson@boundarydevices.com>
    Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/rtc/rtc-m41t80.c | 12 ++++++++++++
    1 file changed, 12 insertions(+)

    --- a/drivers/rtc/rtc-m41t80.c
    +++ b/drivers/rtc/rtc-m41t80.c
    @@ -168,6 +168,7 @@ static int m41t80_get_datetime(struct i2
    /* 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;

    @@ -183,6 +184,17 @@ static int m41t80_set_datetime(struct i2
    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) {

    \
     
     \ /
      Last update: 2018-04-11 21:46    [W:4.078 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site