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_device *rtc = NULL;
|
||||||
struct rtc_time tm;
|
struct rtc_time tm;
|
||||||
struct m41t80_data *m41t80_data = NULL;
|
struct m41t80_data *m41t80_data = NULL;
|
||||||
|
bool wakeup_source = false;
|
||||||
|
|
||||||
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK |
|
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK |
|
||||||
I2C_FUNC_SMBUS_BYTE_DATA)) {
|
I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||||
@ -947,6 +948,10 @@ static int m41t80_probe(struct i2c_client *client,
|
|||||||
m41t80_data->features = id->driver_data;
|
m41t80_data->features = id->driver_data;
|
||||||
i2c_set_clientdata(client, m41t80_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) {
|
if (client->irq > 0) {
|
||||||
rc = devm_request_threaded_irq(&client->dev, client->irq,
|
rc = devm_request_threaded_irq(&client->dev, client->irq,
|
||||||
NULL, m41t80_handle_irq,
|
NULL, m41t80_handle_irq,
|
||||||
@ -955,14 +960,16 @@ static int m41t80_probe(struct i2c_client *client,
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
|
dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
|
||||||
client->irq = 0;
|
client->irq = 0;
|
||||||
} else {
|
wakeup_source = false;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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,
|
rtc = devm_rtc_device_register(&client->dev, client->name,
|
||||||
&m41t80_rtc_ops, THIS_MODULE);
|
&m41t80_rtc_ops, THIS_MODULE);
|
||||||
@ -970,6 +977,10 @@ static int m41t80_probe(struct i2c_client *client,
|
|||||||
return PTR_ERR(rtc);
|
return PTR_ERR(rtc);
|
||||||
|
|
||||||
m41t80_data->rtc = 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 */
|
/* Make sure HT (Halt Update) bit is cleared */
|
||||||
rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_HOUR);
|
rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_HOUR);
|
||||||
|
Loading…
Reference in New Issue
Block a user