* [PATCH v2 1/4] mfd: cros_ec: Add helper for event notifier.
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber, Gwendal Grignou
From: Gwendal Grignou <gwendal@chromium.org>
Add cros_ec_get_event() entry point to retrieve event within functions
called by the notifier.
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
Changelog:
* Added the ack by Lee Jones
drivers/platform/chrome/cros_ec_proto.c | 20 ++++++++++++++++++++
include/linux/mfd/cros_ec.h | 10 ++++++++++
2 files changed, 30 insertions(+)
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index ed5dee7..7428c2b 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -494,3 +494,23 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev)
return get_keyboard_state_event(ec_dev);
}
EXPORT_SYMBOL(cros_ec_get_next_event);
+
+u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev)
+{
+ u32 host_event;
+
+ BUG_ON(!ec_dev->mkbp_event_supported);
+
+ if (ec_dev->event_data.event_type != EC_MKBP_EVENT_HOST_EVENT)
+ return 0;
+
+ if (ec_dev->event_size != sizeof(host_event)) {
+ dev_warn(ec_dev->dev, "Invalid host event size\n");
+ return 0;
+ }
+
+ host_event = get_unaligned_le32(&ec_dev->event_data.data.host_event);
+
+ return host_event;
+}
+EXPORT_SYMBOL(cros_ec_get_host_event);
diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
index b3d04de..be2c4eb 100644
--- a/include/linux/mfd/cros_ec.h
+++ b/include/linux/mfd/cros_ec.h
@@ -299,6 +299,16 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev);
*/
int cros_ec_get_next_event(struct cros_ec_device *ec_dev);
+/**
+ * cros_ec_get_host_event - Return a mask of event set by the EC.
+ *
+ * When MKBP is supported, when the EC raises an interrupt,
+ * We collect the events raised and call the functions in the ec notifier.
+ *
+ * This function is a helper to know which events are raised.
+ */
+u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev);
+
/* sysfs stuff */
extern struct attribute_group cros_ec_attr_group;
extern struct attribute_group cros_ec_lightbar_attr_group;
--
2.9.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [rtc-linux] [PATCH v2 1/4] mfd: cros_ec: Add helper for event notifier.
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber, Gwendal Grignou
From: Gwendal Grignou <gwendal@chromium.org>
Add cros_ec_get_event() entry point to retrieve event within functions
called by the notifier.
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
Changelog:
* Added the ack by Lee Jones
drivers/platform/chrome/cros_ec_proto.c | 20 ++++++++++++++++++++
include/linux/mfd/cros_ec.h | 10 ++++++++++
2 files changed, 30 insertions(+)
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index ed5dee7..7428c2b 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -494,3 +494,23 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev)
return get_keyboard_state_event(ec_dev);
}
EXPORT_SYMBOL(cros_ec_get_next_event);
+
+u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev)
+{
+ u32 host_event;
+
+ BUG_ON(!ec_dev->mkbp_event_supported);
+
+ if (ec_dev->event_data.event_type != EC_MKBP_EVENT_HOST_EVENT)
+ return 0;
+
+ if (ec_dev->event_size != sizeof(host_event)) {
+ dev_warn(ec_dev->dev, "Invalid host event size\n");
+ return 0;
+ }
+
+ host_event = get_unaligned_le32(&ec_dev->event_data.data.host_event);
+
+ return host_event;
+}
+EXPORT_SYMBOL(cros_ec_get_host_event);
diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
index b3d04de..be2c4eb 100644
--- a/include/linux/mfd/cros_ec.h
+++ b/include/linux/mfd/cros_ec.h
@@ -299,6 +299,16 @@ int cros_ec_query_all(struct cros_ec_device *ec_dev);
*/
int cros_ec_get_next_event(struct cros_ec_device *ec_dev);
+/**
+ * cros_ec_get_host_event - Return a mask of event set by the EC.
+ *
+ * When MKBP is supported, when the EC raises an interrupt,
+ * We collect the events raised and call the functions in the ec notifier.
+ *
+ * This function is a helper to know which events are raised.
+ */
+u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev);
+
/* sysfs stuff */
extern struct attribute_group cros_ec_attr_group;
extern struct attribute_group cros_ec_lightbar_attr_group;
--
2.9.3
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2 2/4] mfd: cros_ec: Introduce RTC commands and events definitions.
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
-1 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber
From: Stephen Barber <smbarber@chromium.org>
The EC can function as a simple RT, this patch adds the RTC related
definitions needed by the rtc-cros-ec driver.
Signed-off-by: Stephen Barber <smbarber@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
Changelog:
* Added the ack by Lee Jones
include/linux/mfd/cros_ec_commands.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
index 80d401d..73f7a62 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -286,6 +286,9 @@ enum host_event_code {
/* Hang detect logic detected a hang and warm rebooted the AP */
EC_HOST_EVENT_HANG_REBOOT = 21,
+ /* EC RTC event occurred */
+ EC_HOST_EVENT_RTC = 26,
+
/*
* The high bit of the event mask is not used as a host event code. If
* it reads back as set, then the entire event mask should be
@@ -790,6 +793,8 @@ enum ec_feature_code {
EC_FEATURE_USB_MUX = 23,
/* Motion Sensor code has an internal software FIFO */
EC_FEATURE_MOTION_SENSE_FIFO = 24,
+ /* EC has RTC feature that can be controlled by host commands */
+ EC_FEATURE_RTC = 27,
};
#define EC_FEATURE_MASK_0(event_code) (1UL << (event_code % 32))
@@ -1682,6 +1687,9 @@ struct ec_response_rtc {
#define EC_CMD_RTC_SET_VALUE 0x46
#define EC_CMD_RTC_SET_ALARM 0x47
+/* Pass as param to SET_ALARM to clear the current alarm */
+#define EC_RTC_ALARM_CLEAR 0
+
/*****************************************************************************/
/* Port80 log access */
--
2.9.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [rtc-linux] [PATCH v2 2/4] mfd: cros_ec: Introduce RTC commands and events definitions.
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber
From: Stephen Barber <smbarber@chromium.org>
The EC can function as a simple RT, this patch adds the RTC related
definitions needed by the rtc-cros-ec driver.
Signed-off-by: Stephen Barber <smbarber@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Lee Jones <lee.jones@linaro.org>
---
Changelog:
* Added the ack by Lee Jones
include/linux/mfd/cros_ec_commands.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h
index 80d401d..73f7a62 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/mfd/cros_ec_commands.h
@@ -286,6 +286,9 @@ enum host_event_code {
/* Hang detect logic detected a hang and warm rebooted the AP */
EC_HOST_EVENT_HANG_REBOOT = 21,
+ /* EC RTC event occurred */
+ EC_HOST_EVENT_RTC = 26,
+
/*
* The high bit of the event mask is not used as a host event code. If
* it reads back as set, then the entire event mask should be
@@ -790,6 +793,8 @@ enum ec_feature_code {
EC_FEATURE_USB_MUX = 23,
/* Motion Sensor code has an internal software FIFO */
EC_FEATURE_MOTION_SENSE_FIFO = 24,
+ /* EC has RTC feature that can be controlled by host commands */
+ EC_FEATURE_RTC = 27,
};
#define EC_FEATURE_MASK_0(event_code) (1UL << (event_code % 32))
@@ -1682,6 +1687,9 @@ struct ec_response_rtc {
#define EC_CMD_RTC_SET_VALUE 0x46
#define EC_CMD_RTC_SET_ALARM 0x47
+/* Pass as param to SET_ALARM to clear the current alarm */
+#define EC_RTC_ALARM_CLEAR 0
+
/*****************************************************************************/
/* Port80 log access */
--
2.9.3
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
-1 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber
From: Stephen Barber <smbarber@chromium.org>
On platforms with a Chrome OS EC, the EC can function as a simple RTC.
Add a basic driver with this functionality.
Signed-off-by: Stephen Barber <smbarber@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
---
Changelog
* Moved RTC_DRV_CROS_EC after "Platform RTC drivers" (Alexandre Belloni)
* Remove check for invalid date/time as is not useful (Alexandre Belloni)
drivers/rtc/Kconfig | 10 ++
drivers/rtc/Makefile | 1 +
drivers/rtc/rtc-cros-ec.c | 413 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 424 insertions(+)
create mode 100644 drivers/rtc/rtc-cros-ec.c
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index c93c5a8..59ab3d6 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -1204,6 +1204,16 @@ config RTC_DRV_ZYNQMP
If you say yes here you get support for the RTC controller found on
Xilinx Zynq Ultrascale+ MPSoC.
+config RTC_DRV_CROS_EC
+ tristate "Chrome OS EC RTC driver"
+ depends on MFD_CROS_EC
+ help
+ If you say yes here you will get support for the
+ Chrome OS Embedded Controller's RTC.
+
+ This driver can also be built as a module. If so, the module
+ will be called rtc-cros-ec.
+
comment "on-CPU RTC drivers"
config RTC_DRV_ASM9260
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index f13ab1c..dd753e6 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -40,6 +40,7 @@ obj-$(CONFIG_RTC_DRV_BQ32K) += rtc-bq32k.o
obj-$(CONFIG_RTC_DRV_BQ4802) += rtc-bq4802.o
obj-$(CONFIG_RTC_DRV_CMOS) += rtc-cmos.o
obj-$(CONFIG_RTC_DRV_COH901331) += rtc-coh901331.o
+obj-$(CONFIG_RTC_DRV_CROS_EC) += rtc-cros-ec.o
obj-$(CONFIG_RTC_DRV_DA9052) += rtc-da9052.o
obj-$(CONFIG_RTC_DRV_DA9055) += rtc-da9055.o
obj-$(CONFIG_RTC_DRV_DA9063) += rtc-da9063.o
diff --git a/drivers/rtc/rtc-cros-ec.c b/drivers/rtc/rtc-cros-ec.c
new file mode 100644
index 0000000..f0ea689
--- /dev/null
+++ b/drivers/rtc/rtc-cros-ec.c
@@ -0,0 +1,413 @@
+/*
+ * RTC driver for Chrome OS Embedded Controller
+ *
+ * Copyright (c) 2017, Google, Inc
+ *
+ * Author: Stephen Barber <smbarber@chromium.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/mfd/cros_ec.h>
+#include <linux/mfd/cros_ec_commands.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/rtc.h>
+#include <linux/slab.h>
+
+#define DRV_NAME "cros-ec-rtc"
+
+/**
+ * struct cros_ec_rtc - Driver data for EC RTC
+ *
+ * @cros_ec: Pointer to EC device
+ * @rtc: Pointer to RTC device
+ * @notifier: Notifier info for responding to EC events
+ * @saved_alarm: Alarm to restore when interrupts are reenabled
+ */
+struct cros_ec_rtc {
+ struct cros_ec_device *cros_ec;
+ struct rtc_device *rtc;
+ struct notifier_block notifier;
+ u32 saved_alarm;
+};
+
+static int cros_ec_rtc_get(struct cros_ec_device *cros_ec, u32 command,
+ u32 *response)
+{
+ int ret;
+ struct {
+ struct cros_ec_command msg;
+ struct ec_response_rtc data;
+ } __packed msg;
+
+ memset(&msg, 0, sizeof(msg));
+ msg.msg.command = command;
+ msg.msg.insize = sizeof(msg.data);
+
+ ret = cros_ec_cmd_xfer_status(cros_ec, &msg.msg);
+ if (ret < 0) {
+ dev_err(cros_ec->dev,
+ "error getting %s from EC: %d\n",
+ command == EC_CMD_RTC_GET_VALUE ? "time" : "alarm",
+ ret);
+ return ret;
+ }
+
+ *response = msg.data.time;
+
+ return 0;
+}
+
+static int cros_ec_rtc_set(struct cros_ec_device *cros_ec, u32 command,
+ u32 param)
+{
+ int ret = 0;
+ struct {
+ struct cros_ec_command msg;
+ struct ec_response_rtc data;
+ } __packed msg;
+
+ memset(&msg, 0, sizeof(msg));
+ msg.msg.command = command;
+ msg.msg.outsize = sizeof(msg.data);
+ msg.data.time = param;
+
+ ret = cros_ec_cmd_xfer_status(cros_ec, &msg.msg);
+ if (ret < 0) {
+ dev_err(cros_ec->dev, "error setting %s on EC: %d\n",
+ command == EC_CMD_RTC_SET_VALUE ? "time" : "alarm",
+ ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+/* Read the current time from the EC. */
+static int cros_ec_rtc_read_time(struct device *dev, struct rtc_time *tm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ u32 time;
+
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, &time);
+ if (ret) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ rtc_time64_to_tm(time, tm);
+
+ return 0;
+}
+
+/* Set the current EC time. */
+static int cros_ec_rtc_set_time(struct device *dev, struct rtc_time *tm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ time64_t time;
+
+ time = rtc_tm_to_time64(tm);
+ if (time < 0 || time > U32_MAX)
+ return -EINVAL;
+
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_VALUE, (u32)time);
+ if (ret < 0) {
+ dev_err(dev, "error setting time: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+/* Read alarm time from RTC. */
+static int cros_ec_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ u32 current_time, alarm_offset;
+
+ /*
+ * The EC host command for getting the alarm is relative (i.e. 5
+ * seconds from now) whereas rtc_wkalrm is absolute. Get the current
+ * RTC time first so we can calculate the relative time.
+ */
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, ¤t_time);
+ if (ret < 0) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_ALARM, &alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error getting alarm: %d\n", ret);
+ return ret;
+ }
+
+ rtc_time64_to_tm(current_time + alarm_offset, &alrm->time);
+
+ return 0;
+}
+
+/* Set the EC's RTC alarm. */
+static int cros_ec_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ time64_t alarm_time;
+ u32 current_time, alarm_offset;
+
+ /*
+ * The EC host command for setting the alarm is relative
+ * (i.e. 5 seconds from now) whereas rtc_wkalrm is absolute.
+ * Get the current RTC time first so we can calculate the
+ * relative time.
+ */
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, ¤t_time);
+ if (ret < 0) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ alarm_time = rtc_tm_to_time64(&alrm->time);
+
+ if (alarm_time < 0 || alarm_time > U32_MAX)
+ return -EINVAL;
+
+ if (!alrm->enabled) {
+ /*
+ * If the alarm is being disabled, send an alarm
+ * clear command.
+ */
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ cros_ec_rtc->saved_alarm = (u32)alarm_time;
+ } else {
+ /* Don't set an alarm in the past. */
+ if ((u32)alarm_time < current_time)
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ else
+ alarm_offset = (u32)alarm_time - current_time;
+ }
+
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM, alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error setting alarm: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int cros_ec_rtc_alarm_irq_enable(struct device *dev,
+ unsigned int enabled)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ u32 current_time, alarm_offset, alarm_value;
+
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, ¤t_time);
+ if (ret < 0) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ if (enabled) {
+ /* Restore saved alarm if it's still in the future. */
+ if (cros_ec_rtc->saved_alarm < current_time)
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ else
+ alarm_offset = cros_ec_rtc->saved_alarm - current_time;
+
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM,
+ alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error restoring alarm: %d\n", ret);
+ return ret;
+ }
+ } else {
+ /* Disable alarm, saving the old alarm value. */
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_ALARM,
+ &alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error saving alarm: %d\n", ret);
+ return ret;
+ }
+
+ alarm_value = current_time + alarm_offset;
+
+ /*
+ * If the current EC alarm is already past, we don't want
+ * to set an alarm when we go through the alarm irq enable
+ * path.
+ */
+ if (alarm_value < current_time)
+ cros_ec_rtc->saved_alarm = EC_RTC_ALARM_CLEAR;
+ else
+ cros_ec_rtc->saved_alarm = alarm_value;
+
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM,
+ alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error disabling alarm: %d\n", ret);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int cros_ec_rtc_event(struct notifier_block *nb,
+ unsigned long queued_during_suspend,
+ void *_notify)
+{
+ struct cros_ec_rtc *cros_ec_rtc;
+ struct rtc_device *rtc;
+ struct cros_ec_device *cros_ec;
+ u32 host_event;
+
+ cros_ec_rtc = container_of(nb, struct cros_ec_rtc, notifier);
+ rtc = cros_ec_rtc->rtc;
+ cros_ec = cros_ec_rtc->cros_ec;
+
+ host_event = cros_ec_get_host_event(cros_ec);
+ if (host_event & EC_HOST_EVENT_MASK(EC_HOST_EVENT_RTC)) {
+ rtc_update_irq(rtc, 1, RTC_IRQF | RTC_AF);
+ return NOTIFY_OK;
+ } else {
+ return NOTIFY_DONE;
+ }
+}
+
+static const struct rtc_class_ops cros_ec_rtc_ops = {
+ .read_time = cros_ec_rtc_read_time,
+ .set_time = cros_ec_rtc_set_time,
+ .read_alarm = cros_ec_rtc_read_alarm,
+ .set_alarm = cros_ec_rtc_set_alarm,
+ .alarm_irq_enable = cros_ec_rtc_alarm_irq_enable,
+};
+
+#ifdef CONFIG_PM_SLEEP
+static int cros_ec_rtc_suspend(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
+
+ if (device_may_wakeup(dev))
+ enable_irq_wake(cros_ec_rtc->cros_ec->irq);
+
+ return 0;
+}
+
+static int cros_ec_rtc_resume(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
+
+ if (device_may_wakeup(dev))
+ disable_irq_wake(cros_ec_rtc->cros_ec->irq);
+
+ return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(cros_ec_rtc_pm_ops, cros_ec_rtc_suspend,
+ cros_ec_rtc_resume);
+
+static int cros_ec_rtc_probe(struct platform_device *pdev)
+{
+ struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent);
+ struct cros_ec_device *cros_ec = ec_dev->ec_dev;
+ struct cros_ec_rtc *cros_ec_rtc;
+ struct rtc_time tm;
+ int ret;
+
+ cros_ec_rtc = devm_kzalloc(&pdev->dev, sizeof(*cros_ec_rtc),
+ GFP_KERNEL);
+ if (!cros_ec_rtc)
+ return -ENOMEM;
+
+ platform_set_drvdata(pdev, cros_ec_rtc);
+ cros_ec_rtc->cros_ec = cros_ec;
+
+ /* Get initial time */
+ ret = cros_ec_rtc_read_time(&pdev->dev, &tm);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to read RTC time\n");
+ return ret;
+ }
+
+ ret = device_init_wakeup(&pdev->dev, 1);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to initialize wakeup\n");
+ return ret;
+ }
+
+ cros_ec_rtc->rtc = devm_rtc_device_register(&pdev->dev, DRV_NAME,
+ &cros_ec_rtc_ops,
+ THIS_MODULE);
+ if (IS_ERR(cros_ec_rtc->rtc)) {
+ ret = PTR_ERR(cros_ec_rtc->rtc);
+ dev_err(&pdev->dev, "failed to register rtc device\n");
+ return ret;
+ }
+
+ /* Get RTC events from the EC. */
+ cros_ec_rtc->notifier.notifier_call = cros_ec_rtc_event;
+ ret = blocking_notifier_chain_register(&cros_ec->event_notifier,
+ &cros_ec_rtc->notifier);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to register notifier\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static int cros_ec_rtc_remove(struct platform_device *pdev)
+{
+ struct cros_ec_rtc *cros_ec_rtc = platform_get_drvdata(pdev);
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ ret = blocking_notifier_chain_unregister(
+ &cros_ec_rtc->cros_ec->event_notifier,
+ &cros_ec_rtc->notifier);
+ if (ret) {
+ dev_err(dev, "failed to unregister notifier\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static struct platform_driver cros_ec_rtc_driver = {
+ .probe = cros_ec_rtc_probe,
+ .remove = cros_ec_rtc_remove,
+ .driver = {
+ .name = DRV_NAME,
+ .pm = &cros_ec_rtc_pm_ops,
+ },
+};
+
+module_platform_driver(cros_ec_rtc_driver);
+
+MODULE_DESCRIPTION("RTC driver for Chrome OS ECs");
+MODULE_AUTHOR("Stephen Barber <smbarber@chromium.org>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
--
2.9.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [rtc-linux] [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber
From: Stephen Barber <smbarber@chromium.org>
On platforms with a Chrome OS EC, the EC can function as a simple RTC.
Add a basic driver with this functionality.
Signed-off-by: Stephen Barber <smbarber@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
---
Changelog
* Moved RTC_DRV_CROS_EC after "Platform RTC drivers" (Alexandre Belloni)
* Remove check for invalid date/time as is not useful (Alexandre Belloni)
drivers/rtc/Kconfig | 10 ++
drivers/rtc/Makefile | 1 +
drivers/rtc/rtc-cros-ec.c | 413 ++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 424 insertions(+)
create mode 100644 drivers/rtc/rtc-cros-ec.c
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index c93c5a8..59ab3d6 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -1204,6 +1204,16 @@ config RTC_DRV_ZYNQMP
If you say yes here you get support for the RTC controller found on
Xilinx Zynq Ultrascale+ MPSoC.
+config RTC_DRV_CROS_EC
+ tristate "Chrome OS EC RTC driver"
+ depends on MFD_CROS_EC
+ help
+ If you say yes here you will get support for the
+ Chrome OS Embedded Controller's RTC.
+
+ This driver can also be built as a module. If so, the module
+ will be called rtc-cros-ec.
+
comment "on-CPU RTC drivers"
config RTC_DRV_ASM9260
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index f13ab1c..dd753e6 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -40,6 +40,7 @@ obj-$(CONFIG_RTC_DRV_BQ32K) += rtc-bq32k.o
obj-$(CONFIG_RTC_DRV_BQ4802) += rtc-bq4802.o
obj-$(CONFIG_RTC_DRV_CMOS) += rtc-cmos.o
obj-$(CONFIG_RTC_DRV_COH901331) += rtc-coh901331.o
+obj-$(CONFIG_RTC_DRV_CROS_EC) += rtc-cros-ec.o
obj-$(CONFIG_RTC_DRV_DA9052) += rtc-da9052.o
obj-$(CONFIG_RTC_DRV_DA9055) += rtc-da9055.o
obj-$(CONFIG_RTC_DRV_DA9063) += rtc-da9063.o
diff --git a/drivers/rtc/rtc-cros-ec.c b/drivers/rtc/rtc-cros-ec.c
new file mode 100644
index 0000000..f0ea689
--- /dev/null
+++ b/drivers/rtc/rtc-cros-ec.c
@@ -0,0 +1,413 @@
+/*
+ * RTC driver for Chrome OS Embedded Controller
+ *
+ * Copyright (c) 2017, Google, Inc
+ *
+ * Author: Stephen Barber <smbarber@chromium.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/mfd/cros_ec.h>
+#include <linux/mfd/cros_ec_commands.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/rtc.h>
+#include <linux/slab.h>
+
+#define DRV_NAME "cros-ec-rtc"
+
+/**
+ * struct cros_ec_rtc - Driver data for EC RTC
+ *
+ * @cros_ec: Pointer to EC device
+ * @rtc: Pointer to RTC device
+ * @notifier: Notifier info for responding to EC events
+ * @saved_alarm: Alarm to restore when interrupts are reenabled
+ */
+struct cros_ec_rtc {
+ struct cros_ec_device *cros_ec;
+ struct rtc_device *rtc;
+ struct notifier_block notifier;
+ u32 saved_alarm;
+};
+
+static int cros_ec_rtc_get(struct cros_ec_device *cros_ec, u32 command,
+ u32 *response)
+{
+ int ret;
+ struct {
+ struct cros_ec_command msg;
+ struct ec_response_rtc data;
+ } __packed msg;
+
+ memset(&msg, 0, sizeof(msg));
+ msg.msg.command = command;
+ msg.msg.insize = sizeof(msg.data);
+
+ ret = cros_ec_cmd_xfer_status(cros_ec, &msg.msg);
+ if (ret < 0) {
+ dev_err(cros_ec->dev,
+ "error getting %s from EC: %d\n",
+ command == EC_CMD_RTC_GET_VALUE ? "time" : "alarm",
+ ret);
+ return ret;
+ }
+
+ *response = msg.data.time;
+
+ return 0;
+}
+
+static int cros_ec_rtc_set(struct cros_ec_device *cros_ec, u32 command,
+ u32 param)
+{
+ int ret = 0;
+ struct {
+ struct cros_ec_command msg;
+ struct ec_response_rtc data;
+ } __packed msg;
+
+ memset(&msg, 0, sizeof(msg));
+ msg.msg.command = command;
+ msg.msg.outsize = sizeof(msg.data);
+ msg.data.time = param;
+
+ ret = cros_ec_cmd_xfer_status(cros_ec, &msg.msg);
+ if (ret < 0) {
+ dev_err(cros_ec->dev, "error setting %s on EC: %d\n",
+ command == EC_CMD_RTC_SET_VALUE ? "time" : "alarm",
+ ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+/* Read the current time from the EC. */
+static int cros_ec_rtc_read_time(struct device *dev, struct rtc_time *tm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ u32 time;
+
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, &time);
+ if (ret) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ rtc_time64_to_tm(time, tm);
+
+ return 0;
+}
+
+/* Set the current EC time. */
+static int cros_ec_rtc_set_time(struct device *dev, struct rtc_time *tm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ time64_t time;
+
+ time = rtc_tm_to_time64(tm);
+ if (time < 0 || time > U32_MAX)
+ return -EINVAL;
+
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_VALUE, (u32)time);
+ if (ret < 0) {
+ dev_err(dev, "error setting time: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+/* Read alarm time from RTC. */
+static int cros_ec_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ u32 current_time, alarm_offset;
+
+ /*
+ * The EC host command for getting the alarm is relative (i.e. 5
+ * seconds from now) whereas rtc_wkalrm is absolute. Get the current
+ * RTC time first so we can calculate the relative time.
+ */
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, ¤t_time);
+ if (ret < 0) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_ALARM, &alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error getting alarm: %d\n", ret);
+ return ret;
+ }
+
+ rtc_time64_to_tm(current_time + alarm_offset, &alrm->time);
+
+ return 0;
+}
+
+/* Set the EC's RTC alarm. */
+static int cros_ec_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ time64_t alarm_time;
+ u32 current_time, alarm_offset;
+
+ /*
+ * The EC host command for setting the alarm is relative
+ * (i.e. 5 seconds from now) whereas rtc_wkalrm is absolute.
+ * Get the current RTC time first so we can calculate the
+ * relative time.
+ */
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, ¤t_time);
+ if (ret < 0) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ alarm_time = rtc_tm_to_time64(&alrm->time);
+
+ if (alarm_time < 0 || alarm_time > U32_MAX)
+ return -EINVAL;
+
+ if (!alrm->enabled) {
+ /*
+ * If the alarm is being disabled, send an alarm
+ * clear command.
+ */
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ cros_ec_rtc->saved_alarm = (u32)alarm_time;
+ } else {
+ /* Don't set an alarm in the past. */
+ if ((u32)alarm_time < current_time)
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ else
+ alarm_offset = (u32)alarm_time - current_time;
+ }
+
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM, alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error setting alarm: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int cros_ec_rtc_alarm_irq_enable(struct device *dev,
+ unsigned int enabled)
+{
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(dev);
+ struct cros_ec_device *cros_ec = cros_ec_rtc->cros_ec;
+ int ret;
+ u32 current_time, alarm_offset, alarm_value;
+
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_VALUE, ¤t_time);
+ if (ret < 0) {
+ dev_err(dev, "error getting time: %d\n", ret);
+ return ret;
+ }
+
+ if (enabled) {
+ /* Restore saved alarm if it's still in the future. */
+ if (cros_ec_rtc->saved_alarm < current_time)
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ else
+ alarm_offset = cros_ec_rtc->saved_alarm - current_time;
+
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM,
+ alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error restoring alarm: %d\n", ret);
+ return ret;
+ }
+ } else {
+ /* Disable alarm, saving the old alarm value. */
+ ret = cros_ec_rtc_get(cros_ec, EC_CMD_RTC_GET_ALARM,
+ &alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error saving alarm: %d\n", ret);
+ return ret;
+ }
+
+ alarm_value = current_time + alarm_offset;
+
+ /*
+ * If the current EC alarm is already past, we don't want
+ * to set an alarm when we go through the alarm irq enable
+ * path.
+ */
+ if (alarm_value < current_time)
+ cros_ec_rtc->saved_alarm = EC_RTC_ALARM_CLEAR;
+ else
+ cros_ec_rtc->saved_alarm = alarm_value;
+
+ alarm_offset = EC_RTC_ALARM_CLEAR;
+ ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM,
+ alarm_offset);
+ if (ret < 0) {
+ dev_err(dev, "error disabling alarm: %d\n", ret);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int cros_ec_rtc_event(struct notifier_block *nb,
+ unsigned long queued_during_suspend,
+ void *_notify)
+{
+ struct cros_ec_rtc *cros_ec_rtc;
+ struct rtc_device *rtc;
+ struct cros_ec_device *cros_ec;
+ u32 host_event;
+
+ cros_ec_rtc = container_of(nb, struct cros_ec_rtc, notifier);
+ rtc = cros_ec_rtc->rtc;
+ cros_ec = cros_ec_rtc->cros_ec;
+
+ host_event = cros_ec_get_host_event(cros_ec);
+ if (host_event & EC_HOST_EVENT_MASK(EC_HOST_EVENT_RTC)) {
+ rtc_update_irq(rtc, 1, RTC_IRQF | RTC_AF);
+ return NOTIFY_OK;
+ } else {
+ return NOTIFY_DONE;
+ }
+}
+
+static const struct rtc_class_ops cros_ec_rtc_ops = {
+ .read_time = cros_ec_rtc_read_time,
+ .set_time = cros_ec_rtc_set_time,
+ .read_alarm = cros_ec_rtc_read_alarm,
+ .set_alarm = cros_ec_rtc_set_alarm,
+ .alarm_irq_enable = cros_ec_rtc_alarm_irq_enable,
+};
+
+#ifdef CONFIG_PM_SLEEP
+static int cros_ec_rtc_suspend(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
+
+ if (device_may_wakeup(dev))
+ enable_irq_wake(cros_ec_rtc->cros_ec->irq);
+
+ return 0;
+}
+
+static int cros_ec_rtc_resume(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
+
+ if (device_may_wakeup(dev))
+ disable_irq_wake(cros_ec_rtc->cros_ec->irq);
+
+ return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(cros_ec_rtc_pm_ops, cros_ec_rtc_suspend,
+ cros_ec_rtc_resume);
+
+static int cros_ec_rtc_probe(struct platform_device *pdev)
+{
+ struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent);
+ struct cros_ec_device *cros_ec = ec_dev->ec_dev;
+ struct cros_ec_rtc *cros_ec_rtc;
+ struct rtc_time tm;
+ int ret;
+
+ cros_ec_rtc = devm_kzalloc(&pdev->dev, sizeof(*cros_ec_rtc),
+ GFP_KERNEL);
+ if (!cros_ec_rtc)
+ return -ENOMEM;
+
+ platform_set_drvdata(pdev, cros_ec_rtc);
+ cros_ec_rtc->cros_ec = cros_ec;
+
+ /* Get initial time */
+ ret = cros_ec_rtc_read_time(&pdev->dev, &tm);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to read RTC time\n");
+ return ret;
+ }
+
+ ret = device_init_wakeup(&pdev->dev, 1);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to initialize wakeup\n");
+ return ret;
+ }
+
+ cros_ec_rtc->rtc = devm_rtc_device_register(&pdev->dev, DRV_NAME,
+ &cros_ec_rtc_ops,
+ THIS_MODULE);
+ if (IS_ERR(cros_ec_rtc->rtc)) {
+ ret = PTR_ERR(cros_ec_rtc->rtc);
+ dev_err(&pdev->dev, "failed to register rtc device\n");
+ return ret;
+ }
+
+ /* Get RTC events from the EC. */
+ cros_ec_rtc->notifier.notifier_call = cros_ec_rtc_event;
+ ret = blocking_notifier_chain_register(&cros_ec->event_notifier,
+ &cros_ec_rtc->notifier);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to register notifier\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static int cros_ec_rtc_remove(struct platform_device *pdev)
+{
+ struct cros_ec_rtc *cros_ec_rtc = platform_get_drvdata(pdev);
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ ret = blocking_notifier_chain_unregister(
+ &cros_ec_rtc->cros_ec->event_notifier,
+ &cros_ec_rtc->notifier);
+ if (ret) {
+ dev_err(dev, "failed to unregister notifier\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static struct platform_driver cros_ec_rtc_driver = {
+ .probe = cros_ec_rtc_probe,
+ .remove = cros_ec_rtc_remove,
+ .driver = {
+ .name = DRV_NAME,
+ .pm = &cros_ec_rtc_pm_ops,
+ },
+};
+
+module_platform_driver(cros_ec_rtc_driver);
+
+MODULE_DESCRIPTION("RTC driver for Chrome OS ECs");
+MODULE_AUTHOR("Stephen Barber <smbarber@chromium.org>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
--
2.9.3
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
-1 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber
From: Stephen Barber <smbarber@chromium.org>
If the EC supports RTC host commands, expose an RTC device.
Signed-off-by: Stephen Barber <smbarber@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
---
drivers/platform/chrome/cros_ec_dev.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c
index 47268ec..ebe029d 100644
--- a/drivers/platform/chrome/cros_ec_dev.c
+++ b/drivers/platform/chrome/cros_ec_dev.c
@@ -383,6 +383,24 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
kfree(msg);
}
+static const struct mfd_cell cros_ec_rtc_devs[] = {
+ {
+ .name = "cros-ec-rtc",
+ .id = -1,
+ },
+};
+
+static void cros_ec_rtc_register(struct cros_ec_dev *ec)
+{
+ int ret;
+
+ ret = mfd_add_devices(ec->dev, 0, cros_ec_rtc_devs,
+ ARRAY_SIZE(cros_ec_rtc_devs),
+ NULL, 0, NULL);
+ if (ret)
+ dev_err(ec->dev, "failed to add cros-ec-rtc device: %d\n", ret);
+}
+
static int ec_device_probe(struct platform_device *pdev)
{
int retval = -ENOMEM;
@@ -441,6 +459,10 @@ static int ec_device_probe(struct platform_device *pdev)
if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
cros_ec_sensors_register(ec);
+ /* check whether this EC instance has RTC host command support */
+ if (cros_ec_check_features(ec, EC_FEATURE_RTC))
+ cros_ec_rtc_register(ec);
+
return 0;
dev_reg_failed:
--
2.9.3
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [rtc-linux] [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
@ 2017-01-19 12:30 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-01-19 12:30 UTC (permalink / raw)
To: linux-kernel, rtc-linux
Cc: Olof Johansson, Lee Jones, Alessandro Zummo, Alexandre Belloni,
Stephen Barber
From: Stephen Barber <smbarber@chromium.org>
If the EC supports RTC host commands, expose an RTC device.
Signed-off-by: Stephen Barber <smbarber@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
---
drivers/platform/chrome/cros_ec_dev.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c
index 47268ec..ebe029d 100644
--- a/drivers/platform/chrome/cros_ec_dev.c
+++ b/drivers/platform/chrome/cros_ec_dev.c
@@ -383,6 +383,24 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
kfree(msg);
}
+static const struct mfd_cell cros_ec_rtc_devs[] = {
+ {
+ .name = "cros-ec-rtc",
+ .id = -1,
+ },
+};
+
+static void cros_ec_rtc_register(struct cros_ec_dev *ec)
+{
+ int ret;
+
+ ret = mfd_add_devices(ec->dev, 0, cros_ec_rtc_devs,
+ ARRAY_SIZE(cros_ec_rtc_devs),
+ NULL, 0, NULL);
+ if (ret)
+ dev_err(ec->dev, "failed to add cros-ec-rtc device: %d\n", ret);
+}
+
static int ec_device_probe(struct platform_device *pdev)
{
int retval = -ENOMEM;
@@ -441,6 +459,10 @@ static int ec_device_probe(struct platform_device *pdev)
if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
cros_ec_sensors_register(ec);
+ /* check whether this EC instance has RTC host command support */
+ if (cros_ec_check_features(ec, EC_FEATURE_RTC))
+ cros_ec_rtc_register(ec);
+
return 0;
dev_reg_failed:
--
2.9.3
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-01-22 23:32 ` Alexandre Belloni
-1 siblings, 0 replies; 24+ messages in thread
From: Alexandre Belloni @ 2017-01-22 23:32 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: linux-kernel, rtc-linux, Olof Johansson, Lee Jones,
Alessandro Zummo, Stephen Barber
On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
> From: Stephen Barber <smbarber@chromium.org>
>
> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
> Add a basic driver with this functionality.
>
> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Lee, this can go through the mfd tree. Hopefully, nobody will add a new
driver nearby ;)
--
Alexandre Belloni, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
@ 2017-01-22 23:32 ` Alexandre Belloni
0 siblings, 0 replies; 24+ messages in thread
From: Alexandre Belloni @ 2017-01-22 23:32 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: linux-kernel, rtc-linux, Olof Johansson, Lee Jones,
Alessandro Zummo, Stephen Barber
On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
> From: Stephen Barber <smbarber@chromium.org>
>
> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
> Add a basic driver with this functionality.
>
> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Lee, this can go through the mfd tree. Hopefully, nobody will add a new
driver nearby ;)
--
Alexandre Belloni, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-01-23 12:14 ` Lee Jones
-1 siblings, 0 replies; 24+ messages in thread
From: Lee Jones @ 2017-01-23 12:14 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: linux-kernel, rtc-linux, Olof Johansson, Alessandro Zummo,
Alexandre Belloni, Stephen Barber
On Thu, 19 Jan 2017, Enric Balletbo i Serra wrote:
> From: Stephen Barber <smbarber@chromium.org>
>
> If the EC supports RTC host commands, expose an RTC device.
>
> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> ---
> drivers/platform/chrome/cros_ec_dev.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
This still needs an Ack.
> diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c
> index 47268ec..ebe029d 100644
> --- a/drivers/platform/chrome/cros_ec_dev.c
> +++ b/drivers/platform/chrome/cros_ec_dev.c
> @@ -383,6 +383,24 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
> kfree(msg);
> }
>
> +static const struct mfd_cell cros_ec_rtc_devs[] = {
> + {
> + .name = "cros-ec-rtc",
> + .id = -1,
> + },
> +};
> +
> +static void cros_ec_rtc_register(struct cros_ec_dev *ec)
> +{
> + int ret;
> +
> + ret = mfd_add_devices(ec->dev, 0, cros_ec_rtc_devs,
> + ARRAY_SIZE(cros_ec_rtc_devs),
> + NULL, 0, NULL);
> + if (ret)
> + dev_err(ec->dev, "failed to add cros-ec-rtc device: %d\n", ret);
> +}
> +
> static int ec_device_probe(struct platform_device *pdev)
> {
> int retval = -ENOMEM;
> @@ -441,6 +459,10 @@ static int ec_device_probe(struct platform_device *pdev)
> if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
> cros_ec_sensors_register(ec);
>
> + /* check whether this EC instance has RTC host command support */
> + if (cros_ec_check_features(ec, EC_FEATURE_RTC))
> + cros_ec_rtc_register(ec);
> +
> return 0;
>
> dev_reg_failed:
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
@ 2017-01-23 12:14 ` Lee Jones
0 siblings, 0 replies; 24+ messages in thread
From: Lee Jones @ 2017-01-23 12:14 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: linux-kernel, rtc-linux, Olof Johansson, Alessandro Zummo,
Alexandre Belloni, Stephen Barber
On Thu, 19 Jan 2017, Enric Balletbo i Serra wrote:
> From: Stephen Barber <smbarber@chromium.org>
>=20
> If the EC supports RTC host commands, expose an RTC device.
>=20
> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> ---
> drivers/platform/chrome/cros_ec_dev.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
This still needs an Ack.
> diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chr=
ome/cros_ec_dev.c
> index 47268ec..ebe029d 100644
> --- a/drivers/platform/chrome/cros_ec_dev.c
> +++ b/drivers/platform/chrome/cros_ec_dev.c
> @@ -383,6 +383,24 @@ static void cros_ec_sensors_register(struct cros_ec_=
dev *ec)
> kfree(msg);
> }
> =20
> +static const struct mfd_cell cros_ec_rtc_devs[] =3D {
> + {
> + .name =3D "cros-ec-rtc",
> + .id =3D -1,
> + },
> +};
> +
> +static void cros_ec_rtc_register(struct cros_ec_dev *ec)
> +{
> + int ret;
> +
> + ret =3D mfd_add_devices(ec->dev, 0, cros_ec_rtc_devs,
> + ARRAY_SIZE(cros_ec_rtc_devs),
> + NULL, 0, NULL);
> + if (ret)
> + dev_err(ec->dev, "failed to add cros-ec-rtc device: %d\n", ret);
> +}
> +
> static int ec_device_probe(struct platform_device *pdev)
> {
> int retval =3D -ENOMEM;
> @@ -441,6 +459,10 @@ static int ec_device_probe(struct platform_device *p=
dev)
> if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
> cros_ec_sensors_register(ec);
> =20
> + /* check whether this EC instance has RTC host command support */
> + if (cros_ec_check_features(ec, EC_FEATURE_RTC))
> + cros_ec_rtc_register(ec);
> +
> return 0;
> =20
> dev_reg_failed:
--=20
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org =E2=94=82 Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--=20
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---=20
You received this message because you are subscribed to the Google Groups "=
rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
2017-01-22 23:32 ` [rtc-linux] " Alexandre Belloni
@ 2017-01-23 12:14 ` Lee Jones
-1 siblings, 0 replies; 24+ messages in thread
From: Lee Jones @ 2017-01-23 12:14 UTC (permalink / raw)
To: Alexandre Belloni
Cc: Enric Balletbo i Serra, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Stephen Barber
On Mon, 23 Jan 2017, Alexandre Belloni wrote:
> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
> > From: Stephen Barber <smbarber@chromium.org>
> >
> > On platforms with a Chrome OS EC, the EC can function as a simple RTC.
> > Add a basic driver with this functionality.
> >
> > Signed-off-by: Stephen Barber <smbarber@chromium.org>
> > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>
> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
>
> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
> driver nearby ;)
Yes, I can take the set, once all of the Acks are obtained.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
@ 2017-01-23 12:14 ` Lee Jones
0 siblings, 0 replies; 24+ messages in thread
From: Lee Jones @ 2017-01-23 12:14 UTC (permalink / raw)
To: Alexandre Belloni
Cc: Enric Balletbo i Serra, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Stephen Barber
On Mon, 23 Jan 2017, Alexandre Belloni wrote:
> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
> > From: Stephen Barber <smbarber@chromium.org>
> >=20
> > On platforms with a Chrome OS EC, the EC can function as a simple RTC.
> > Add a basic driver with this functionality.
> >=20
> > Signed-off-by: Stephen Barber <smbarber@chromium.org>
> > Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>=20
> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
>=20
> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
> driver nearby ;)
Yes, I can take the set, once all of the Acks are obtained.
--=20
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org =E2=94=82 Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--=20
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---=20
You received this message because you are subscribed to the Google Groups "=
rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
2017-01-23 12:14 ` [rtc-linux] " Lee Jones
@ 2017-01-23 15:45 ` Enric Balletbo Serra
-1 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo Serra @ 2017-01-23 15:45 UTC (permalink / raw)
To: Lee Jones
Cc: Enric Balletbo i Serra, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Alexandre Belloni, Stephen Barber,
Benson Leung
Guess I forget to add one of the platform/chrome maintainers, as only
his ack is pending for this series, cc'ing Benson Leung
Thanks,
Enric
2017-01-23 13:14 GMT+01:00 Lee Jones <lee.jones@linaro.org>:
> On Thu, 19 Jan 2017, Enric Balletbo i Serra wrote:
>
>> From: Stephen Barber <smbarber@chromium.org>
>>
>> If the EC supports RTC host commands, expose an RTC device.
>>
>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>> ---
>> drivers/platform/chrome/cros_ec_dev.c | 22 ++++++++++++++++++++++
>> 1 file changed, 22 insertions(+)
>
> This still needs an Ack.
>
>> diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/chrome/cros_ec_dev.c
>> index 47268ec..ebe029d 100644
>> --- a/drivers/platform/chrome/cros_ec_dev.c
>> +++ b/drivers/platform/chrome/cros_ec_dev.c
>> @@ -383,6 +383,24 @@ static void cros_ec_sensors_register(struct cros_ec_dev *ec)
>> kfree(msg);
>> }
>>
>> +static const struct mfd_cell cros_ec_rtc_devs[] = {
>> + {
>> + .name = "cros-ec-rtc",
>> + .id = -1,
>> + },
>> +};
>> +
>> +static void cros_ec_rtc_register(struct cros_ec_dev *ec)
>> +{
>> + int ret;
>> +
>> + ret = mfd_add_devices(ec->dev, 0, cros_ec_rtc_devs,
>> + ARRAY_SIZE(cros_ec_rtc_devs),
>> + NULL, 0, NULL);
>> + if (ret)
>> + dev_err(ec->dev, "failed to add cros-ec-rtc device: %d\n", ret);
>> +}
>> +
>> static int ec_device_probe(struct platform_device *pdev)
>> {
>> int retval = -ENOMEM;
>> @@ -441,6 +459,10 @@ static int ec_device_probe(struct platform_device *pdev)
>> if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
>> cros_ec_sensors_register(ec);
>>
>> + /* check whether this EC instance has RTC host command support */
>> + if (cros_ec_check_features(ec, EC_FEATURE_RTC))
>> + cros_ec_rtc_register(ec);
>> +
>> return 0;
>>
>> dev_reg_failed:
>
> --
> Lee Jones
> Linaro STMicroelectronics Landing Team Lead
> Linaro.org │ Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
@ 2017-01-23 15:45 ` Enric Balletbo Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo Serra @ 2017-01-23 15:45 UTC (permalink / raw)
To: Lee Jones
Cc: Enric Balletbo i Serra, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Alexandre Belloni, Stephen Barber,
Benson Leung
Guess I forget to add one of the platform/chrome maintainers, as only
his ack is pending for this series, cc'ing Benson Leung
Thanks,
Enric
2017-01-23 13:14 GMT+01:00 Lee Jones <lee.jones@linaro.org>:
> On Thu, 19 Jan 2017, Enric Balletbo i Serra wrote:
>
>> From: Stephen Barber <smbarber@chromium.org>
>>
>> If the EC supports RTC host commands, expose an RTC device.
>>
>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>> ---
>> drivers/platform/chrome/cros_ec_dev.c | 22 ++++++++++++++++++++++
>> 1 file changed, 22 insertions(+)
>
> This still needs an Ack.
>
>> diff --git a/drivers/platform/chrome/cros_ec_dev.c b/drivers/platform/ch=
rome/cros_ec_dev.c
>> index 47268ec..ebe029d 100644
>> --- a/drivers/platform/chrome/cros_ec_dev.c
>> +++ b/drivers/platform/chrome/cros_ec_dev.c
>> @@ -383,6 +383,24 @@ static void cros_ec_sensors_register(struct cros_ec=
_dev *ec)
>> kfree(msg);
>> }
>>
>> +static const struct mfd_cell cros_ec_rtc_devs[] =3D {
>> + {
>> + .name =3D "cros-ec-rtc",
>> + .id =3D -1,
>> + },
>> +};
>> +
>> +static void cros_ec_rtc_register(struct cros_ec_dev *ec)
>> +{
>> + int ret;
>> +
>> + ret =3D mfd_add_devices(ec->dev, 0, cros_ec_rtc_devs,
>> + ARRAY_SIZE(cros_ec_rtc_devs),
>> + NULL, 0, NULL);
>> + if (ret)
>> + dev_err(ec->dev, "failed to add cros-ec-rtc device: %d\n",=
ret);
>> +}
>> +
>> static int ec_device_probe(struct platform_device *pdev)
>> {
>> int retval =3D -ENOMEM;
>> @@ -441,6 +459,10 @@ static int ec_device_probe(struct platform_device *=
pdev)
>> if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE))
>> cros_ec_sensors_register(ec);
>>
>> + /* check whether this EC instance has RTC host command support */
>> + if (cros_ec_check_features(ec, EC_FEATURE_RTC))
>> + cros_ec_rtc_register(ec);
>> +
>> return 0;
>>
>> dev_reg_failed:
>
> --
> Lee Jones
> Linaro STMicroelectronics Landing Team Lead
> Linaro.org =E2=94=82 Open source software for ARM SoCs
> Follow Linaro: Facebook | Twitter | Blog
--=20
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---=20
You received this message because you are subscribed to the Google Groups "=
rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-01-28 1:11 ` Benson Leung
-1 siblings, 0 replies; 24+ messages in thread
From: Benson Leung @ 2017-01-28 1:11 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: linux-kernel, rtc-linux, Olof Johansson, Lee Jones,
Alessandro Zummo, Alexandre Belloni, Stephen Barber, bleung
[-- Attachment #1: Type: text/plain, Size: 582 bytes --]
Hi Enric,
On Thu, Jan 19, 2017 at 01:30:32PM +0100, Enric Balletbo i Serra wrote:
> From: Stephen Barber <smbarber@chromium.org>
>
> If the EC supports RTC host commands, expose an RTC device.
>
> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Benson Leung <bleung@chromium.org>
Sorry for the delay on this Enric. This looks good to go.
--
Benson Leung
Senior Software Engineer
Chrome OS Kernel
Google Inc.
bleung@google.com
Chromium OS Project
bleung@chromium.org
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice
@ 2017-01-28 1:11 ` Benson Leung
0 siblings, 0 replies; 24+ messages in thread
From: Benson Leung @ 2017-01-28 1:11 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: linux-kernel, rtc-linux, Olof Johansson, Lee Jones,
Alessandro Zummo, Alexandre Belloni, Stephen Barber, bleung
[-- Attachment #1: Type: text/plain, Size: 1075 bytes --]
Hi Enric,
On Thu, Jan 19, 2017 at 01:30:32PM +0100, Enric Balletbo i Serra wrote:
> From: Stephen Barber <smbarber@chromium.org>
>
> If the EC supports RTC host commands, expose an RTC device.
>
> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Benson Leung <bleung@chromium.org>
Sorry for the delay on this Enric. This looks good to go.
--
Benson Leung
Senior Software Engineer
Chrome OS Kernel
Google Inc.
bleung@google.com
Chromium OS Project
bleung@chromium.org
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
2017-01-23 12:14 ` [rtc-linux] " Lee Jones
@ 2017-02-14 8:55 ` Enric Balletbo i Serra
-1 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-02-14 8:55 UTC (permalink / raw)
To: Lee Jones, Alexandre Belloni
Cc: linux-kernel, rtc-linux, Olof Johansson, Alessandro Zummo,
Stephen Barber
Hi Lee,
On 23/01/17 13:14, Lee Jones wrote:
> On Mon, 23 Jan 2017, Alexandre Belloni wrote:
>
>> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
>>> From: Stephen Barber <smbarber@chromium.org>
>>>
>>> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
>>> Add a basic driver with this functionality.
>>>
>>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
>>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>>
>> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
>>
>> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
>> driver nearby ;)
>
> Yes, I can take the set, once all of the Acks are obtained.
>
Now that the patch series have all the acks, this will finally go through the mfd tree?
I suppose is too late for the upcoming merge window ... so just want to make sure which tree I should monitor to not forget it :)
Thanks,
Enric
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
@ 2017-02-14 8:55 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-02-14 8:55 UTC (permalink / raw)
To: Lee Jones, Alexandre Belloni
Cc: linux-kernel, rtc-linux, Olof Johansson, Alessandro Zummo,
Stephen Barber
Hi Lee,
On 23/01/17 13:14, Lee Jones wrote:
> On Mon, 23 Jan 2017, Alexandre Belloni wrote:
>
>> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
>>> From: Stephen Barber <smbarber@chromium.org>
>>>
>>> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
>>> Add a basic driver with this functionality.
>>>
>>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
>>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>>
>> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
>>
>> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
>> driver nearby ;)
>
> Yes, I can take the set, once all of the Acks are obtained.
>
Now that the patch series have all the acks, this will finally go through the mfd tree?
I suppose is too late for the upcoming merge window ... so just want to make sure which tree I should monitor to not forget it :)
Thanks,
Enric
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
2017-02-14 8:55 ` [rtc-linux] " Enric Balletbo i Serra
@ 2017-02-14 15:26 ` Lee Jones
-1 siblings, 0 replies; 24+ messages in thread
From: Lee Jones @ 2017-02-14 15:26 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: Alexandre Belloni, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Stephen Barber
On Tue, 14 Feb 2017, Enric Balletbo i Serra wrote:
> Hi Lee,
>
> On 23/01/17 13:14, Lee Jones wrote:
> > On Mon, 23 Jan 2017, Alexandre Belloni wrote:
> >
> >> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
> >>> From: Stephen Barber <smbarber@chromium.org>
> >>>
> >>> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
> >>> Add a basic driver with this functionality.
> >>>
> >>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> >>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> >>
> >> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> >>
> >> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
> >> driver nearby ;)
> >
> > Yes, I can take the set, once all of the Acks are obtained.
> >
>
> Now that the patch series have all the acks, this will finally go through the mfd tree?
>
> I suppose is too late for the upcoming merge window ... so just want to make sure which tree I should monitor to not forget it :)
You need to submit it, complete with all the Acks you received.
Yes, it's too late for this cycle.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
@ 2017-02-14 15:26 ` Lee Jones
0 siblings, 0 replies; 24+ messages in thread
From: Lee Jones @ 2017-02-14 15:26 UTC (permalink / raw)
To: Enric Balletbo i Serra
Cc: Alexandre Belloni, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Stephen Barber
On Tue, 14 Feb 2017, Enric Balletbo i Serra wrote:
> Hi Lee,
>=20
> On 23/01/17 13:14, Lee Jones wrote:
> > On Mon, 23 Jan 2017, Alexandre Belloni wrote:
> >=20
> >> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
> >>> From: Stephen Barber <smbarber@chromium.org>
> >>>
> >>> On platforms with a Chrome OS EC, the EC can function as a simple RTC=
.
> >>> Add a basic driver with this functionality.
> >>>
> >>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
> >>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
> >>
> >> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> >>
> >> Lee, this can go through the mfd tree. Hopefully, nobody will add a ne=
w
> >> driver nearby ;)
> >=20
> > Yes, I can take the set, once all of the Acks are obtained.
> >=20
>=20
> Now that the patch series have all the acks, this will finally go through=
the mfd tree?
>=20
> I suppose is too late for the upcoming merge window ... so just want to m=
ake sure which tree I should monitor to not forget it :)
You need to submit it, complete with all the Acks you received.
Yes, it's too late for this cycle.
--=20
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org =E2=94=82 Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--=20
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---=20
You received this message because you are subscribed to the Google Groups "=
rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
2017-02-14 15:26 ` [rtc-linux] " Lee Jones
@ 2017-02-14 22:18 ` Enric Balletbo i Serra
-1 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-02-14 22:18 UTC (permalink / raw)
To: Lee Jones
Cc: Alexandre Belloni, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Stephen Barber
On 14/02/17 16:26, Lee Jones wrote:
> On Tue, 14 Feb 2017, Enric Balletbo i Serra wrote:
>
>> Hi Lee,
>>
>> On 23/01/17 13:14, Lee Jones wrote:
>>> On Mon, 23 Jan 2017, Alexandre Belloni wrote:
>>>
>>>> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
>>>>> From: Stephen Barber <smbarber@chromium.org>
>>>>>
>>>>> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
>>>>> Add a basic driver with this functionality.
>>>>>
>>>>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
>>>>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>>>>
>>>> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
>>>>
>>>> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
>>>> driver nearby ;)
>>>
>>> Yes, I can take the set, once all of the Acks are obtained.
>>>
>>
>> Now that the patch series have all the acks, this will finally go through the mfd tree?
>>
>> I suppose is too late for the upcoming merge window ... so just want to make sure which tree I should monitor to not forget it :)
>
> You need to submit it, complete with all the Acks you received.
>
> Yes, it's too late for this cycle.
>
Ok, thanks Lee, just submitted v3 with all the acks
Cheers,
Enric
^ permalink raw reply [flat|nested] 24+ messages in thread
* [rtc-linux] Re: [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver.
@ 2017-02-14 22:18 ` Enric Balletbo i Serra
0 siblings, 0 replies; 24+ messages in thread
From: Enric Balletbo i Serra @ 2017-02-14 22:18 UTC (permalink / raw)
To: Lee Jones
Cc: Alexandre Belloni, linux-kernel, rtc-linux, Olof Johansson,
Alessandro Zummo, Stephen Barber
On 14/02/17 16:26, Lee Jones wrote:
> On Tue, 14 Feb 2017, Enric Balletbo i Serra wrote:
>
>> Hi Lee,
>>
>> On 23/01/17 13:14, Lee Jones wrote:
>>> On Mon, 23 Jan 2017, Alexandre Belloni wrote:
>>>
>>>> On 19/01/2017 at 13:30:31 +0100, Enric Balletbo i Serra wrote :
>>>>> From: Stephen Barber <smbarber@chromium.org>
>>>>>
>>>>> On platforms with a Chrome OS EC, the EC can function as a simple RTC.
>>>>> Add a basic driver with this functionality.
>>>>>
>>>>> Signed-off-by: Stephen Barber <smbarber@chromium.org>
>>>>> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
>>>>
>>>> Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
>>>>
>>>> Lee, this can go through the mfd tree. Hopefully, nobody will add a new
>>>> driver nearby ;)
>>>
>>> Yes, I can take the set, once all of the Acks are obtained.
>>>
>>
>> Now that the patch series have all the acks, this will finally go through the mfd tree?
>>
>> I suppose is too late for the upcoming merge window ... so just want to make sure which tree I should monitor to not forget it :)
>
> You need to submit it, complete with all the Acks you received.
>
> Yes, it's too late for this cycle.
>
Ok, thanks Lee, just submitted v3 with all the acks
Cheers,
Enric
--
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
---
You received this message because you are subscribed to the Google Groups "rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2017-02-14 22:18 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-19 12:30 [PATCH v2 1/4] mfd: cros_ec: Add helper for event notifier Enric Balletbo i Serra
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
2017-01-19 12:30 ` [PATCH v2 2/4] mfd: cros_ec: Introduce RTC commands and events definitions Enric Balletbo i Serra
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
2017-01-19 12:30 ` [PATCH v2 3/4] rtc: cros-ec: add cros-ec-rtc driver Enric Balletbo i Serra
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
2017-01-22 23:32 ` Alexandre Belloni
2017-01-22 23:32 ` [rtc-linux] " Alexandre Belloni
2017-01-23 12:14 ` Lee Jones
2017-01-23 12:14 ` [rtc-linux] " Lee Jones
2017-02-14 8:55 ` Enric Balletbo i Serra
2017-02-14 8:55 ` [rtc-linux] " Enric Balletbo i Serra
2017-02-14 15:26 ` Lee Jones
2017-02-14 15:26 ` [rtc-linux] " Lee Jones
2017-02-14 22:18 ` Enric Balletbo i Serra
2017-02-14 22:18 ` [rtc-linux] " Enric Balletbo i Serra
2017-01-19 12:30 ` [PATCH v2 4/4] mfd: cros_ec: add RTC as mfd subdevice Enric Balletbo i Serra
2017-01-19 12:30 ` [rtc-linux] " Enric Balletbo i Serra
2017-01-23 12:14 ` Lee Jones
2017-01-23 12:14 ` [rtc-linux] " Lee Jones
2017-01-23 15:45 ` Enric Balletbo Serra
2017-01-23 15:45 ` [rtc-linux] " Enric Balletbo Serra
2017-01-28 1:11 ` Benson Leung
2017-01-28 1:11 ` [rtc-linux] " Benson Leung
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.