}
 }
 
-static struct rtc_class_ops rx8010_rtc_ops = {
+static const struct rtc_class_ops rx8010_rtc_ops_default = {
        .read_time = rx8010_get_time,
        .set_time = rx8010_set_time,
        .ioctl = rx8010_ioctl,
 };
 
+static const struct rtc_class_ops rx8010_rtc_ops_alarm = {
+       .read_time = rx8010_get_time,
+       .set_time = rx8010_set_time,
+       .ioctl = rx8010_ioctl,
+       .read_alarm = rx8010_read_alarm,
+       .set_alarm = rx8010_set_alarm,
+       .alarm_irq_enable = rx8010_alarm_irq_enable,
+};
+
 static int rx8010_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
 {
        struct i2c_adapter *adapter = client->adapter;
+       const struct rtc_class_ops *rtc_ops;
        struct rx8010_data *rx8010;
        int err = 0;
 
 
                if (err) {
                        dev_err(&client->dev, "unable to request IRQ\n");
-                       client->irq = 0;
-               } else {
-                       rx8010_rtc_ops.read_alarm = rx8010_read_alarm;
-                       rx8010_rtc_ops.set_alarm = rx8010_set_alarm;
-                       rx8010_rtc_ops.alarm_irq_enable = rx8010_alarm_irq_enable;
+                       return err;
                }
+
+               rtc_ops = &rx8010_rtc_ops_alarm;
+       } else {
+               rtc_ops = &rx8010_rtc_ops_default;
        }
 
        rx8010->rtc = devm_rtc_device_register(&client->dev, client->name,
-               &rx8010_rtc_ops, THIS_MODULE);
+                                              rtc_ops, THIS_MODULE);
 
        if (IS_ERR(rx8010->rtc)) {
                dev_err(&client->dev, "unable to register the class device\n");