diff options
Diffstat (limited to 'drivers/rtc/rtc-rv3028.c')
-rw-r--r-- | drivers/rtc/rtc-rv3028.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/rtc/rtc-rv3028.c b/drivers/rtc/rtc-rv3028.c index 979407a51c7a..0c48d980d06a 100644 --- a/drivers/rtc/rtc-rv3028.c +++ b/drivers/rtc/rtc-rv3028.c @@ -265,8 +265,7 @@ static irqreturn_t rv3028_handle_irq(int irq, void *dev_id) return IRQ_NONE; } - if (status & RV3028_STATUS_PORF) - dev_warn(&rv3028->rtc->dev, "Voltage low, data loss detected.\n"); + status &= ~RV3028_STATUS_PORF; if (status & RV3028_STATUS_TF) { status |= RV3028_STATUS_TF; @@ -311,10 +310,8 @@ static int rv3028_get_time(struct device *dev, struct rtc_time *tm) if (ret < 0) return ret; - if (status & RV3028_STATUS_PORF) { - dev_warn(dev, "Voltage low, data is invalid.\n"); + if (status & RV3028_STATUS_PORF) return -EINVAL; - } ret = regmap_bulk_read(rv3028->regmap, RV3028_SEC, date, sizeof(date)); if (ret) @@ -770,9 +767,12 @@ static int rv3028_clkout_register_clk(struct rv3028_data *rv3028, } #endif -static struct rtc_class_ops rv3028_rtc_ops = { +static const struct rtc_class_ops rv3028_rtc_ops = { .read_time = rv3028_get_time, .set_time = rv3028_set_time, + .read_alarm = rv3028_get_alarm, + .set_alarm = rv3028_set_alarm, + .alarm_irq_enable = rv3028_alarm_irq_enable, .read_offset = rv3028_read_offset, .set_offset = rv3028_set_offset, .ioctl = rv3028_ioctl, @@ -823,9 +823,6 @@ static int rv3028_probe(struct i2c_client *client) if (ret < 0) return ret; - if (status & RV3028_STATUS_PORF) - dev_warn(&client->dev, "Voltage low, data loss detected.\n"); - if (status & RV3028_STATUS_AF) dev_warn(&client->dev, "An alarm may have been missed.\n"); @@ -841,12 +838,10 @@ static int rv3028_probe(struct i2c_client *client) if (ret) { dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n"); client->irq = 0; - } else { - rv3028_rtc_ops.read_alarm = rv3028_get_alarm; - rv3028_rtc_ops.set_alarm = rv3028_set_alarm; - rv3028_rtc_ops.alarm_irq_enable = rv3028_alarm_irq_enable; } } + if (!client->irq) + clear_bit(RTC_FEATURE_ALARM, rv3028->rtc->features); ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL1, RV3028_CTRL1_WADA, RV3028_CTRL1_WADA); @@ -903,7 +898,7 @@ static int rv3028_probe(struct i2c_client *client) return 0; } -static const struct of_device_id rv3028_of_match[] = { +static const __maybe_unused struct of_device_id rv3028_of_match[] = { { .compatible = "microcrystal,rv3028", }, { } }; |