#define        RTC_CMD_READ    0x81            /* Read command */
 #define        RTC_CMD_WRITE   0x80            /* Write command */
 
+#define        RTC_CMD_WRITE_ENABLE    0x00            /* Write enable */
+#define        RTC_CMD_WRITE_DISABLE   0x80            /* Write disable */
+
 #define RTC_ADDR_RAM0  0x20            /* Address of RAM0 */
 #define RTC_ADDR_TCR   0x08            /* Address of trickle charge register */
+#define        RTC_ADDR_CTRL   0x07            /* Address of control register */
 #define        RTC_ADDR_YEAR   0x06            /* Address of year register */
 #define        RTC_ADDR_DAY    0x05            /* Address of day of week register */
 #define        RTC_ADDR_MON    0x04            /* Address of month register */
 
 static int ds1302_rtc_set_time(struct device *dev, struct rtc_time *tm)
 {
+       ds1302_writebyte(RTC_ADDR_CTRL, RTC_CMD_WRITE_ENABLE);
        /* Stop RTC */
        ds1302_writebyte(RTC_ADDR_SEC, ds1302_readbyte(RTC_ADDR_SEC) | 0x80);
 
        /* Start RTC */
        ds1302_writebyte(RTC_ADDR_SEC, ds1302_readbyte(RTC_ADDR_SEC) & ~0x80);
 
+       ds1302_writebyte(RTC_ADDR_CTRL, RTC_CMD_WRITE_DISABLE);
+
        return 0;
 }