summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-04-20 12:37:24 -0600
committerSimon Glass <sjg@chromium.org>2015-05-05 20:58:39 -0600
commitdd18e5d8441e12e4ed084dfe7400112851b807f8 (patch)
tree5da479ed00917a6f39fcef4a6d67f556f23a6de8 /arch
parentdbeda5b2255089889788e0dd3478680feec86139 (diff)
downloadu-boot-imx-dd18e5d8441e12e4ed084dfe7400112851b807f8.zip
u-boot-imx-dd18e5d8441e12e4ed084dfe7400112851b807f8.tar.gz
u-boot-imx-dd18e5d8441e12e4ed084dfe7400112851b807f8.tar.bz2
dm: rtc: sandbox: Add an emulated I2C RTC device
Add a sandbox I2C emulation device which emulates a real-time clock. The clock works off an offset from the current system time, and supports setting and getting the clock, as well as access to byte-width regisers in the RTC. It does not support changing the system time. This device can be used for testing the 'date' command on sandbox, as well as the RTC uclass. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/sandbox/include/asm/rtc.h28
-rw-r--r--arch/sandbox/include/asm/test.h21
2 files changed, 49 insertions, 0 deletions
diff --git a/arch/sandbox/include/asm/rtc.h b/arch/sandbox/include/asm/rtc.h
new file mode 100644
index 0000000..5ed4584
--- /dev/null
+++ b/arch/sandbox/include/asm/rtc.h
@@ -0,0 +1,28 @@
+/*
+ * Simulate an I2C real time clock
+ *
+ * Copyright (c) 2015 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef __asm_rtc_h
+#define __asm_rtc_h
+
+/* Register numbers in the sandbox RTC */
+enum {
+ REG_SEC = 5,
+ REG_MIN,
+ REG_HOUR,
+ REG_MDAY,
+ REG_MON,
+ REG_YEAR,
+ REG_WDAY,
+
+ REG_RESET = 0x20,
+
+ REG_COUNT = 0x80,
+};
+
+#endif
diff --git a/arch/sandbox/include/asm/test.h b/arch/sandbox/include/asm/test.h
index 06e7301..91a5c79 100644
--- a/arch/sandbox/include/asm/test.h
+++ b/arch/sandbox/include/asm/test.h
@@ -46,4 +46,25 @@ void sandbox_i2c_eeprom_set_offset_len(struct udevice *dev, int offset_len);
*/
void sandbox_timer_add_offset(unsigned long offset);
+/**
+ * sandbox_i2c_rtc_set_offset() - set the time offset from system/base time
+ *
+ * @dev: RTC device to adjust
+ * @use_system_time: true to use system time, false to use @base_time
+ * @offset: RTC offset from current system/base time (-1 for no
+ * change)
+ * @return old value of RTC offset
+ */
+long sandbox_i2c_rtc_set_offset(struct udevice *dev, bool use_system_time,
+ int offset);
+
+/**
+ * sandbox_i2c_rtc_get_set_base_time() - get and set the base time
+ *
+ * @dev: RTC device to adjust
+ * @base_time: New base system time (set to -1 for no change)
+ * @return old base time
+ */
+long sandbox_i2c_rtc_get_set_base_time(struct udevice *dev, long base_time);
+
#endif