Merge branch 'akpm' (patches from Andrew)
[linux-2.6-microblaze.git] / drivers / rtc / rtc-hym8563.c
index 0751cae..90e602e 100644 (file)
@@ -220,24 +220,6 @@ static int hym8563_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
        u8 buf[4];
        int ret;
 
-       /*
-        * The alarm has no seconds so deal with it
-        */
-       if (alm_tm->tm_sec) {
-               alm_tm->tm_sec = 0;
-               alm_tm->tm_min++;
-               if (alm_tm->tm_min >= 60) {
-                       alm_tm->tm_min = 0;
-                       alm_tm->tm_hour++;
-                       if (alm_tm->tm_hour >= 24) {
-                               alm_tm->tm_hour = 0;
-                               alm_tm->tm_mday++;
-                               if (alm_tm->tm_mday > 31)
-                                       alm_tm->tm_mday = 0;
-                       }
-               }
-       }
-
        ret = i2c_smbus_read_byte_data(client, HYM8563_CTL2);
        if (ret < 0)
                return ret;
@@ -523,6 +505,10 @@ static int hym8563_probe(struct i2c_client *client,
        if (!hym8563)
                return -ENOMEM;
 
+       hym8563->rtc = devm_rtc_allocate_device(&client->dev);
+       if (IS_ERR(hym8563->rtc))
+               return PTR_ERR(hym8563->rtc);
+
        hym8563->client = client;
        i2c_set_clientdata(client, hym8563);
 
@@ -557,19 +543,15 @@ static int hym8563_probe(struct i2c_client *client,
        dev_dbg(&client->dev, "rtc information is %s\n",
                (ret & HYM8563_SEC_VL) ? "invalid" : "valid");
 
-       hym8563->rtc = devm_rtc_device_register(&client->dev, client->name,
-                                               &hym8563_rtc_ops, THIS_MODULE);
-       if (IS_ERR(hym8563->rtc))
-               return PTR_ERR(hym8563->rtc);
-
-       /* the hym8563 alarm only supports a minute accuracy */
-       hym8563->rtc->uie_unsupported = 1;
+       hym8563->rtc->ops = &hym8563_rtc_ops;
+       set_bit(RTC_FEATURE_ALARM_RES_MINUTE, hym8563->rtc->features);
+       clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, hym8563->rtc->features);
 
 #ifdef CONFIG_COMMON_CLK
        hym8563_clkout_register_clk(hym8563);
 #endif
 
-       return 0;
+       return devm_rtc_register_device(hym8563->rtc);
 }
 
 static const struct i2c_device_id hym8563_id[] = {