rtc: m41t80: enable wakealarm when "wakeup-source" is specified
Don't require an IRQ if the wakeup-source device-tree property is present. Signed-off-by: Eric Cooper <ecc@cmu.edu> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
This commit is contained in:
parent
60d3455211
commit
d4473b9b77
@ -927,6 +927,7 @@ static int m41t80_probe(struct i2c_client *client,
|
||||
struct rtc_device *rtc = NULL;
|
||||
struct rtc_time tm;
|
||||
struct m41t80_data *m41t80_data = NULL;
|
||||
bool wakeup_source = false;
|
||||
|
||||
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK |
|
||||
I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||
@ -947,6 +948,10 @@ static int m41t80_probe(struct i2c_client *client,
|
||||
m41t80_data->features = id->driver_data;
|
||||
i2c_set_clientdata(client, m41t80_data);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
wakeup_source = of_property_read_bool(client->dev.of_node,
|
||||
"wakeup-source");
|
||||
#endif
|
||||
if (client->irq > 0) {
|
||||
rc = devm_request_threaded_irq(&client->dev, client->irq,
|
||||
NULL, m41t80_handle_irq,
|
||||
@ -955,14 +960,16 @@ static int m41t80_probe(struct i2c_client *client,
|
||||
if (rc) {
|
||||
dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
|
||||
client->irq = 0;
|
||||
} else {
|
||||
m41t80_rtc_ops.read_alarm = m41t80_read_alarm;
|
||||
m41t80_rtc_ops.set_alarm = m41t80_set_alarm;
|
||||
m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable;
|
||||
/* Enable the wakealarm */
|
||||
device_init_wakeup(&client->dev, true);
|
||||
wakeup_source = false;
|
||||
}
|
||||
}
|
||||
if (client->irq > 0 || wakeup_source) {
|
||||
m41t80_rtc_ops.read_alarm = m41t80_read_alarm;
|
||||
m41t80_rtc_ops.set_alarm = m41t80_set_alarm;
|
||||
m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable;
|
||||
/* Enable the wakealarm */
|
||||
device_init_wakeup(&client->dev, true);
|
||||
}
|
||||
|
||||
rtc = devm_rtc_device_register(&client->dev, client->name,
|
||||
&m41t80_rtc_ops, THIS_MODULE);
|
||||
@ -970,6 +977,10 @@ static int m41t80_probe(struct i2c_client *client,
|
||||
return PTR_ERR(rtc);
|
||||
|
||||
m41t80_data->rtc = rtc;
|
||||
if (client->irq <= 0) {
|
||||
/* We cannot support UIE mode if we do not have an IRQ line */
|
||||
rtc->uie_unsupported = 1;
|
||||
}
|
||||
|
||||
/* Make sure HT (Halt Update) bit is cleared */
|
||||
rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_HOUR);
|
||||
|
Loading…
Reference in New Issue
Block a user