{
        struct max8907_rtc *rtc = data;
 
-       regmap_update_bits(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0x7f, 0);
+       regmap_write(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0);
 
        rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
 
                bcd2bin(regs[RTC_YEAR1]) - 1900;
        tm->tm_mon = bcd2bin(regs[RTC_MONTH] & 0x1f) - 1;
        tm->tm_mday = bcd2bin(regs[RTC_DATE] & 0x3f);
-       tm->tm_wday = (regs[RTC_WEEKDAY] & 0x07) - 1;
+       tm->tm_wday = (regs[RTC_WEEKDAY] & 0x07);
        if (regs[RTC_HOUR] & HOUR_12) {
                tm->tm_hour = bcd2bin(regs[RTC_HOUR] & 0x01f);
                if (tm->tm_hour == 12)
        regs[RTC_YEAR1] = bin2bcd(low);
        regs[RTC_MONTH] = bin2bcd(tm->tm_mon + 1);
        regs[RTC_DATE] = bin2bcd(tm->tm_mday);
-       regs[RTC_WEEKDAY] = tm->tm_wday + 1;
+       regs[RTC_WEEKDAY] = tm->tm_wday;
        regs[RTC_HOUR] = bin2bcd(tm->tm_hour);
        regs[RTC_MIN] = bin2bcd(tm->tm_min);
        regs[RTC_SEC] = bin2bcd(tm->tm_sec);
        tm_to_regs(&alrm->time, regs);
 
        /* Disable alarm while we update the target time */
-       ret = regmap_update_bits(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0x7f, 0);
+       ret = regmap_write(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0);
        if (ret < 0)
                return ret;
 
                return ret;
 
        if (alrm->enabled)
-               ret = regmap_update_bits(rtc->regmap, MAX8907_REG_ALARM0_CNTL,
-                                        0x7f, 0x7f);
+               ret = regmap_write(rtc->regmap, MAX8907_REG_ALARM0_CNTL, 0x77);
 
        return ret;
 }