Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4473b9b authored by Eric Cooper's avatar Eric Cooper Committed by Alexandre Belloni
Browse files

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: default avatarEric Cooper <ecc@cmu.edu>
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
parent 60d34552
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -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 {
			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);