Skip to content
  • Stephen Warren's avatar
    rtc: max8907: weekday encoding fixes · 75ea799d
    Stephen Warren authored
    
    
    The current MAX8907 driver has two issues related to weekday value
    handling:
    
    1)
    
    The HW WEEKDAY register has range 0..6 rather than 1..7 as documented.
    Note that I validated the actual HW range by observing the HW register
    roll from 6->0 rather than 6->7->1 as would otherwise be expected.
    
    This matches Linux's tm_wday range of 0..6.
    
    When the CMOS RAM content is lost, the date returned from the device is
    2007-01-01 00:00:00, which is a Monday.  The WEEKDAY register reads 1 in
    this case.  This matches the numbering in Linux's tm_wday field.
    
    Hence we should write Linux's tm_wday value to the register without
    modifying it.  Hence, remove the +1/-1 calculations for WEEKDAY/tm_wday.
    
    2)
    
    There's no need to make alarms match on the WEEKDAY register, since the
    other fields together uniquely define the alarm date/time.  Ignoring the
    WEEKDAY value in the match isolates the driver from any incorrect value in
    the current time copy of the WEEKDAY register.
    
    Each change individually, or both together, solves an issue that I
    observed; "hwclock -r" would time out waiting for its alarm to fire if the
    CMOS RAM content had been lost, and hence the WEEKDAY register value
    mismatched what the driver expected it to be.  "hwclock -w" would solve
    this by over-writing the HW default WEEKDAY register value with what the
    driver expected.
    
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    75ea799d