linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv]
@ 2018-11-13 17:17 Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt Andy Shevchenko
                   ` (19 more replies)
  0 siblings, 20 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

At some point I have noticed too many users of struct rtc_time that
printing its content field by field.

In this series I introduce %ptR[dt][rv] specifier to make life a bit
easier.

There are still users of detailed output of the struct rtc_time, but we
can introduce an additional extension for them in the future if needed,
otherwise they might be converted to the proposed output format.

Some of the changes slightly modify the output. In those cases we are on
the safe side since they are pure debug. Nevertheless I tried to leave
numbers to be the same or quite close: in some cases year is printed +
1900, though month is left in the range [0,11] instead of [1,12].

I didn't compile everything there, though I did a basic smoke test on
some x86 hardware. So, I rely on kbuild test robot as well :-)

Most of the users currently are RTC drivers, thus the patch series is
assumed to go via RTC tree.

The patch series depends on earlier send clean up of lib/vsprintf [1].

[1]: https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1612716.html

Changelog v3:
- no one supported configuration option for new extension, so it's dropped
- amend documentation (Geert)
- optimize flags checking (Geert)
- drop patch against non-existing anymore drivers
  (due to massive architectures removal)
- rebase on top of recent linux-next

Changelog v2:
- split out lib/vsprintf changes to separate series
- build it optionally depending on introduced PRINTK_PEXT_TIMEDATE
- for now support only struct rtc_time
- make an additional letter for different time representations
- make above letter capital to reduce confusion on %ptr vs. %ptR
- drop kdb patch since it's a candidate for time64_t support

Andy Shevchenko (20):
  lib/vsprintf: Print time and date in human readable format via %pt
  rtc: Switch to use %ptR
  rtc: at91rm9200: Switch to use %ptR
  rtc: at91sam9: Switch to use %ptR
  rtc: m41t80: Switch to use %ptR
  rtc: m48t59: Switch to use %ptR
  rtc: mcp795: Switch to use %ptR
  rtc: pcf50633: Switch to use %ptR
  rtc: pic32: Switch to use %ptR
  rtc: pm8xxx: Switch to use %ptR
  rtc: puv3: Switch to use %ptR
  rtc: rk808: Switch to use %ptR
  rtc: rx6110: Switch to use %ptR
  rtc: rx8025: Switch to use %ptR
  rtc: s3c: Switch to use %ptR
  rtc: s5m: Switch to use %ptR
  rtc: tegra: Switch to use %ptR
  Input: hp_sdc_rtc - Switch to use %ptR
  mk68/mac: Switch to use %ptR
  PM: Switch to use %ptR

 Documentation/core-api/printk-formats.rst |  20 ++++
 arch/m68k/mac/misc.c                      |   8 +-
 drivers/base/power/trace.c                |   4 +-
 drivers/char/rtc.c                        |   7 +-
 drivers/input/misc/hp_sdc_rtc.c           |   8 +-
 drivers/rtc/hctosys.c                     |   8 +-
 drivers/rtc/interface.c                   |   8 +-
 drivers/rtc/rtc-at91rm9200.c              |  15 +--
 drivers/rtc/rtc-at91sam9.c                |  16 +--
 drivers/rtc/rtc-m41t80.c                  |   6 +-
 drivers/rtc/rtc-m48t59.c                  |   8 +-
 drivers/rtc/rtc-mcp795.c                  |  18 +--
 drivers/rtc/rtc-pcf50633.c                |   8 +-
 drivers/rtc/rtc-pic32.c                   |  18 +--
 drivers/rtc/rtc-pm8xxx.c                  |  16 +--
 drivers/rtc/rtc-proc.c                    |  36 +-----
 drivers/rtc/rtc-puv3.c                    |  18 +--
 drivers/rtc/rtc-rk808.c                   |  20 +---
 drivers/rtc/rtc-rx6110.c                  |  12 +-
 drivers/rtc/rtc-rx8025.c                  |  19 +--
 drivers/rtc/rtc-s3c.c                     |  20 +---
 drivers/rtc/rtc-s5m.c                     |  27 +----
 drivers/rtc/rtc-sysfs.c                   |  16 +--
 drivers/rtc/rtc-tegra.c                   |  30 +----
 lib/test_printf.c                         |   6 +
 lib/vsprintf.c                            | 140 ++++++++++++++++++++++
 26 files changed, 248 insertions(+), 264 deletions(-)

-- 
2.19.1


^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:35   ` Joe Perches
  2018-11-20 22:27   ` Alexandre Belloni
  2018-11-13 17:17 ` [PATCH v3 02/20] rtc: Switch to use %ptR Andy Shevchenko
                   ` (18 subsequent siblings)
  19 siblings, 2 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko, Bartlomiej Zolnierkiewicz, Dmitry Torokhov,
	Guan Xuetao, Ingo Molnar, Jason Wessel, Jonathan Corbet,
	Jonathan Hunter, Krzysztof Kozlowski, Rafael J. Wysocki,
	Thierry Reding

There are users which print time and date represented by content of
struct rtc_time in human readable format.

Instead of open coding that each time introduce %ptR[dt][rv] specifier.

Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jason Wessel <jason.wessel@windriver.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: Krzysztof Kozlowski <krzk@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 Documentation/core-api/printk-formats.rst |  20 ++++
 lib/test_printf.c                         |   6 +
 lib/vsprintf.c                            | 140 ++++++++++++++++++++++
 3 files changed, 166 insertions(+)

diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
index ff48b55040ef..8342a65eab0b 100644
--- a/Documentation/core-api/printk-formats.rst
+++ b/Documentation/core-api/printk-formats.rst
@@ -412,6 +412,26 @@ Examples::
 
 Passed by reference.
 
+Time and date (struct rtc_time)
+-------------------------------
+
+::
+
+	%ptR		YYYY-mm-dd HH:MM:SS
+	%ptRd		YYYY-mm-dd
+	%ptRt		HH:MM:SS
+	%ptR[dt][rv]
+
+For printing date and time as represented by struct rtc_time structure in
+human readable format.
+
+By default year will be incremented by 1900 and month by 1. Use %ptRr (raw)
+to suppress this behaviour. On the other hand when %ptRv is applied
+validation mechanism will be in use, i.e. numbers out of range will be
+replaced by ** or ****.
+
+Passed by reference.
+
 struct clk
 ----------
 
diff --git a/lib/test_printf.c b/lib/test_printf.c
index 53527ea822b5..97b7d14961d6 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
@@ -418,6 +418,11 @@ struct_va_format(void)
 {
 }
 
+static void __init
+struct_rtc_time(void)
+{
+}
+
 static void __init
 struct_clk(void)
 {
@@ -529,6 +534,7 @@ test_pointer(void)
 	uuid();
 	dentry();
 	struct_va_format();
+	struct_rtc_time();
 	struct_clk();
 	bitmap();
 	netdev_features();
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 37a54a6dd594..8455cbda8d6c 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -30,6 +30,7 @@
 #include <linux/ioport.h>
 #include <linux/dcache.h>
 #include <linux/cred.h>
+#include <linux/rtc.h>
 #include <linux/uuid.h>
 #include <linux/of.h>
 #include <net/addrconf.h>
@@ -822,6 +823,20 @@ static const struct printf_spec default_dec_spec = {
 	.precision = -1,
 };
 
+static const struct printf_spec default_dec02_spec = {
+	.base = 10,
+	.field_width = 2,
+	.precision = -1,
+	.flags = ZEROPAD,
+};
+
+static const struct printf_spec default_dec04_spec = {
+	.base = 10,
+	.field_width = 4,
+	.precision = -1,
+	.flags = ZEROPAD,
+};
+
 static noinline_for_stack
 char *resource_string(char *buf, char *end, struct resource *res,
 		      struct printf_spec spec, const char *fmt)
@@ -1549,6 +1564,127 @@ char *address_val(char *buf, char *end, const void *addr, const char *fmt)
 	return special_hex_number(buf, end, num, size);
 }
 
+static noinline_for_stack
+char *date_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r)
+{
+	int year = tm->tm_year + (r ? 0 : 1900);
+	int mon = tm->tm_mon + (r ? 0 : 1);
+
+	if (unlikely(v && (unsigned int)tm->tm_year > 200))
+		buf = string(buf, end, "****", default_str_spec);
+	else
+		buf = number(buf, end, year, default_dec04_spec);
+
+	if (buf < end)
+		*buf = '-';
+	buf++;
+
+	if (unlikely(v && (unsigned int)tm->tm_mon > 11))
+		buf = string(buf, end, "**", default_str_spec);
+	else
+		buf = number(buf, end, mon, default_dec02_spec);
+
+	if (buf < end)
+		*buf = '-';
+	buf++;
+
+	if (unlikely(v && (unsigned int)tm->tm_mday > 31))
+		buf = string(buf, end, "**", default_str_spec);
+	else
+		buf = number(buf, end, tm->tm_mday, default_dec02_spec);
+
+	return buf;
+}
+
+static noinline_for_stack
+char *time_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r)
+{
+	if (unlikely(v && (unsigned int)tm->tm_hour > 24))
+		buf = string(buf, end, "**", default_str_spec);
+	else
+		buf = number(buf, end, tm->tm_hour, default_dec02_spec);
+
+	if (buf < end)
+		*buf = ':';
+	buf++;
+
+	if (unlikely(v && (unsigned int)tm->tm_min > 59))
+		buf = string(buf, end, "**", default_str_spec);
+	else
+		buf = number(buf, end, tm->tm_min, default_dec02_spec);
+
+	if (buf < end)
+		*buf = ':';
+	buf++;
+
+	if (unlikely(v && (unsigned int)tm->tm_sec > 59))
+		buf = string(buf, end, "**", default_str_spec);
+	else
+		buf = number(buf, end, tm->tm_sec, default_dec02_spec);
+
+	return buf;
+}
+
+static noinline_for_stack
+char *rtc_str(char *buf, char *end, const struct rtc_time *tm, const char *fmt)
+{
+	bool have_t = true, have_d = true;
+	bool validate = false;
+	bool raw = false;
+	int count = 2;
+	bool found;
+
+	switch (fmt[count]) {
+	case 'd':
+		have_t = false;
+		count++;
+		break;
+	case 't':
+		have_d = false;
+		count++;
+		break;
+	}
+
+	found = true;
+	do {
+		switch (fmt[count++]) {
+		case 'r':
+			raw = true;
+			break;
+		case 'v':
+			validate = true;
+			break;
+		default:
+			found = false;
+			break;
+		}
+	} while (found);
+
+	if (have_d)
+		buf = date_str(buf, end, tm, validate, raw);
+	if (have_d && have_t) {
+		if (buf < end)
+			*buf = ' ';
+		buf++;
+	}
+	if (have_t)
+		buf = time_str(buf, end, tm, validate, raw);
+
+	return buf;
+}
+
+static noinline_for_stack
+char *timeanddate(char *buf, char *end, void *ptr, struct printf_spec spec,
+		  const char *fmt)
+{
+	switch (fmt[1]) {
+	case 'R':
+		return rtc_str(buf, end, (const struct rtc_time *)ptr, fmt);
+	default:
+		return ptr_to_id(buf, end, ptr, spec);
+	}
+}
+
 static noinline_for_stack
 char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
 	    const char *fmt)
@@ -1828,6 +1964,8 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
  * - 'd[234]' For a dentry name (optionally 2-4 last components)
  * - 'D[234]' Same as 'd' but for a struct file
  * - 'g' For block_device name (gendisk + partition number)
+ * - 't[R][dt][rv]' For time and date as represented:
+ *      R    struct rtc_time
  * - 'C' For a clock, it prints the name (Common Clock Framework) or address
  *       (legacy clock framework) of the clock
  * - 'Cn' For a clock, it prints the name (Common Clock Framework) or address
@@ -1952,6 +2090,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
 		return address_val(buf, end, ptr, fmt);
 	case 'd':
 		return dentry_name(buf, end, ptr, spec, fmt);
+	case 't':
+		return timeanddate(buf, end, ptr, spec, fmt);
 	case 'C':
 		return clock(buf, end, ptr, spec, fmt);
 	case 'D':
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 02/20] rtc: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 03/20] rtc: at91rm9200: " Andy Shevchenko
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: Arnd Bergmann <arnd@arndb.de>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/char/rtc.c      |  7 +++----
 drivers/rtc/hctosys.c   |  8 ++------
 drivers/rtc/interface.c |  8 ++------
 drivers/rtc/rtc-proc.c  | 36 +++++-------------------------------
 drivers/rtc/rtc-sysfs.c | 16 ++++++----------
 5 files changed, 18 insertions(+), 57 deletions(-)

diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c
index 4948c8bda6b1..0cde96822a87 100644
--- a/drivers/char/rtc.c
+++ b/drivers/char/rtc.c
@@ -1125,11 +1125,10 @@ static int rtc_proc_show(struct seq_file *seq, void *v)
 	 * time or for Universal Standard Time (GMT). Probably local though.
 	 */
 	seq_printf(seq,
-		   "rtc_time\t: %02d:%02d:%02d\n"
-		   "rtc_date\t: %04d-%02d-%02d\n"
+		   "rtc_time\t: %ptRt\n"
+		   "rtc_date\t: %ptRd\n"
 		   "rtc_epoch\t: %04lu\n",
-		   tm.tm_hour, tm.tm_min, tm.tm_sec,
-		   tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch);
+		   &tm, &tm, epoch);
 
 	get_rtc_alm_time(&tm);
 
diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c
index b9ec4a16db1f..ff2092a0d38c 100644
--- a/drivers/rtc/hctosys.c
+++ b/drivers/rtc/hctosys.c
@@ -58,12 +58,8 @@ static int __init rtc_hctosys(void)
 
 	err = do_settimeofday64(&tv64);
 
-	dev_info(rtc->dev.parent,
-		"setting system clock to "
-		"%d-%02d-%02d %02d:%02d:%02d UTC (%lld)\n",
-		tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
-		tm.tm_hour, tm.tm_min, tm.tm_sec,
-		(long long) tv64.tv_sec);
+	dev_info(rtc->dev.parent, "setting system clock to %ptR UTC (%lld)\n",
+		 &tm, (long long)tv64.tv_sec);
 
 err_read:
 	rtc_class_close(rtc);
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index 612a83d3ddcc..e8d77b1eaeb2 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -368,12 +368,8 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
 	err = rtc_valid_tm(&alarm->time);
 
 done:
-	if (err) {
-		dev_warn(&rtc->dev, "invalid alarm value: %d-%d-%d %d:%d:%d\n",
-			alarm->time.tm_year + 1900, alarm->time.tm_mon + 1,
-			alarm->time.tm_mday, alarm->time.tm_hour, alarm->time.tm_min,
-			alarm->time.tm_sec);
-	}
+	if (err)
+		dev_warn(&rtc->dev, "invalid alarm value: %ptR\n", &alarm->time);
 
 	return err;
 }
diff --git a/drivers/rtc/rtc-proc.c b/drivers/rtc/rtc-proc.c
index a9dd9218fae2..98091ecb84ff 100644
--- a/drivers/rtc/rtc-proc.c
+++ b/drivers/rtc/rtc-proc.c
@@ -50,41 +50,15 @@ static int rtc_proc_show(struct seq_file *seq, void *offset)
 	err = rtc_read_time(rtc, &tm);
 	if (err == 0) {
 		seq_printf(seq,
-			"rtc_time\t: %02d:%02d:%02d\n"
-			"rtc_date\t: %04d-%02d-%02d\n",
-			tm.tm_hour, tm.tm_min, tm.tm_sec,
-			tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
+				"rtc_time\t: %ptRt\n"
+				"rtc_date\t: %ptRd\n",
+				&tm, &tm);
 	}
 
 	err = rtc_read_alarm(rtc, &alrm);
 	if (err == 0) {
-		seq_printf(seq, "alrm_time\t: ");
-		if ((unsigned int)alrm.time.tm_hour <= 24)
-			seq_printf(seq, "%02d:", alrm.time.tm_hour);
-		else
-			seq_printf(seq, "**:");
-		if ((unsigned int)alrm.time.tm_min <= 59)
-			seq_printf(seq, "%02d:", alrm.time.tm_min);
-		else
-			seq_printf(seq, "**:");
-		if ((unsigned int)alrm.time.tm_sec <= 59)
-			seq_printf(seq, "%02d\n", alrm.time.tm_sec);
-		else
-			seq_printf(seq, "**\n");
-
-		seq_printf(seq, "alrm_date\t: ");
-		if ((unsigned int)alrm.time.tm_year <= 200)
-			seq_printf(seq, "%04d-", alrm.time.tm_year + 1900);
-		else
-			seq_printf(seq, "****-");
-		if ((unsigned int)alrm.time.tm_mon <= 11)
-			seq_printf(seq, "%02d-", alrm.time.tm_mon + 1);
-		else
-			seq_printf(seq, "**-");
-		if (alrm.time.tm_mday && (unsigned int)alrm.time.tm_mday <= 31)
-			seq_printf(seq, "%02d\n", alrm.time.tm_mday);
-		else
-			seq_printf(seq, "**\n");
+		seq_printf(seq, "alrm_time\t: %ptRtv\n", &alrm.time);
+		seq_printf(seq, "alrm_date\t: %ptRdv\n", &alrm.time);
 		seq_printf(seq, "alarm_IRQ\t: %s\n",
 				alrm.enabled ? "yes" : "no");
 		seq_printf(seq, "alrm_pending\t: %s\n",
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c
index 9746c32eee2e..a8f22ee726bb 100644
--- a/drivers/rtc/rtc-sysfs.c
+++ b/drivers/rtc/rtc-sysfs.c
@@ -39,12 +39,10 @@ date_show(struct device *dev, struct device_attribute *attr, char *buf)
 	struct rtc_time tm;
 
 	retval = rtc_read_time(to_rtc_device(dev), &tm);
-	if (retval == 0) {
-		retval = sprintf(buf, "%04d-%02d-%02d\n",
-			tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
-	}
+	if (retval)
+		return retval;
 
-	return retval;
+	return sprintf(buf, "%ptRd\n", &tm);
 }
 static DEVICE_ATTR_RO(date);
 
@@ -55,12 +53,10 @@ time_show(struct device *dev, struct device_attribute *attr, char *buf)
 	struct rtc_time tm;
 
 	retval = rtc_read_time(to_rtc_device(dev), &tm);
-	if (retval == 0) {
-		retval = sprintf(buf, "%02d:%02d:%02d\n",
-			tm.tm_hour, tm.tm_min, tm.tm_sec);
-	}
+	if (retval)
+		return retval;
 
-	return retval;
+	return sprintf(buf, "%ptRt\n", &tm);
 }
 static DEVICE_ATTR_RO(time);
 
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 03/20] rtc: at91rm9200: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 02/20] rtc: Switch to use %ptR Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 04/20] rtc: at91sam9: " Andy Shevchenko
                   ` (16 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-at91rm9200.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c
index caa71d04e989..862b993c3142 100644
--- a/drivers/rtc/rtc-at91rm9200.c
+++ b/drivers/rtc/rtc-at91rm9200.c
@@ -147,9 +147,7 @@ static int at91_rtc_readtime(struct device *dev, struct rtc_time *tm)
 	tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year);
 	tm->tm_year = tm->tm_year - 1900;
 
-	dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__,
-		1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "%s(): %ptR\n", __func__, tm);
 
 	return 0;
 }
@@ -161,9 +159,7 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)
 {
 	unsigned long cr;
 
-	dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__,
-		1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "%s(): %ptR\n", __func__, tm);
 
 	wait_for_completion(&at91_rtc_upd_rdy);
 
@@ -209,8 +205,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	alrm->enabled = (at91_rtc_read_imr() & AT91_RTC_ALARM)
 			? 1 : 0;
 
-	dev_dbg(dev, "%s(): %02d-%02d %02d:%02d:%02d %sabled\n", __func__,
-		tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec,
+	dev_dbg(dev, "%s(): %ptR %sabled\n", __func__, tm,
 		alrm->enabled ? "en" : "dis");
 
 	return 0;
@@ -247,9 +242,7 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
 		at91_rtc_write_ier(AT91_RTC_ALARM);
 	}
 
-	dev_dbg(dev, "%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __func__,
-		tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour,
-		tm.tm_min, tm.tm_sec);
+	dev_dbg(dev, "%s(): %ptR\n", __func__, &tm);
 
 	return 0;
 }
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 04/20] rtc: at91sam9: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (2 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 03/20] rtc: at91rm9200: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 05/20] rtc: m41t80: " Andy Shevchenko
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-at91sam9.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index ee71e647fd43..1d31c0ae6334 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -124,9 +124,7 @@ static int at91_rtc_readtime(struct device *dev, struct rtc_time *tm)
 
 	rtc_time_to_tm(offset + secs, tm);
 
-	dev_dbg(dev, "%s: %4d-%02d-%02d %02d:%02d:%02d\n", "readtime",
-		1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "%s: %ptR\n", __func__, tm);
 
 	return 0;
 }
@@ -141,9 +139,7 @@ static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)
 	u32 offset, alarm, mr;
 	unsigned long secs;
 
-	dev_dbg(dev, "%s: %4d-%02d-%02d %02d:%02d:%02d\n", "settime",
-		1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "%s: %ptR\n", __func__, tm);
 
 	err = rtc_tm_to_time(tm, &secs);
 	if (err != 0)
@@ -199,9 +195,7 @@ static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	if (alarm != ALARM_DISABLED && offset != 0) {
 		rtc_time_to_tm(offset + alarm, tm);
 
-		dev_dbg(dev, "%s: %4d-%02d-%02d %02d:%02d:%02d\n", "readalarm",
-			1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-			tm->tm_hour, tm->tm_min, tm->tm_sec);
+		dev_dbg(dev, "%s: %ptR\n", __func__, tm);
 
 		if (rtt_readl(rtc, MR) & AT91_RTT_ALMIEN)
 			alrm->enabled = 1;
@@ -242,9 +236,7 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	if (alrm->enabled)
 		rtt_writel(rtc, MR, mr | AT91_RTT_ALMIEN);
 
-	dev_dbg(dev, "%s: %4d-%02d-%02d %02d:%02d:%02d\n", "setalarm",
-		tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour,
-		tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "%s: %ptR\n", __func__, tm);
 
 	return 0;
 }
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 05/20] rtc: m41t80: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (3 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 04/20] rtc: at91sam9: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 06/20] rtc: m48t59: " Andy Shevchenko
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-m41t80.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
index a3fb235fea0d..5735ffaad7b8 100644
--- a/drivers/rtc/rtc-m41t80.c
+++ b/drivers/rtc/rtc-m41t80.c
@@ -939,11 +939,7 @@ static int m41t80_probe(struct i2c_client *client,
 		if (m41t80_data->features & M41T80_FEATURE_HT) {
 			m41t80_rtc_read_time(&client->dev, &tm);
 			dev_info(&client->dev, "HT bit was set!\n");
-			dev_info(&client->dev,
-				 "Power Down at %04i-%02i-%02i %02i:%02i:%02i\n",
-				 tm.tm_year + 1900,
-				 tm.tm_mon + 1, tm.tm_mday, tm.tm_hour,
-				 tm.tm_min, tm.tm_sec);
+			dev_info(&client->dev, "Power Down at %ptR\n", &tm);
 		}
 		rc = i2c_smbus_write_byte_data(client, M41T80_REG_ALARM_HOUR,
 					       rc & ~M41T80_ALHOUR_HT);
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 06/20] rtc: m48t59: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (4 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 05/20] rtc: m41t80: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 07/20] rtc: mcp795: " Andy Shevchenko
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-m48t59.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c
index ac9ca1042889..3c8ad1cdfd7c 100644
--- a/drivers/rtc/rtc-m48t59.c
+++ b/drivers/rtc/rtc-m48t59.c
@@ -99,9 +99,7 @@ static int m48t59_rtc_read_time(struct device *dev, struct rtc_time *tm)
 	M48T59_CLEAR_BITS(M48T59_CNTL_READ, M48T59_CNTL);
 	spin_unlock_irqrestore(&m48t59->lock, flags);
 
-	dev_dbg(dev, "RTC read time %04d-%02d-%02d %02d/%02d/%02d\n",
-		tm->tm_year + 1900, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "RTC read time %ptR\n", tm);
 	return 0;
 }
 
@@ -188,9 +186,7 @@ static int m48t59_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	M48T59_CLEAR_BITS(M48T59_CNTL_READ, M48T59_CNTL);
 	spin_unlock_irqrestore(&m48t59->lock, flags);
 
-	dev_dbg(dev, "RTC read alarm time %04d-%02d-%02d %02d/%02d/%02d\n",
-		tm->tm_year + 1900, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "RTC read alarm time %ptR\n", tm);
 	return rtc_valid_tm(tm);
 }
 
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 07/20] rtc: mcp795: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (5 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 06/20] rtc: m48t59: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 08/20] rtc: pcf50633: " Andy Shevchenko
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-mcp795.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/rtc/rtc-mcp795.c b/drivers/rtc/rtc-mcp795.c
index 00e11c1b2186..f22a945a3794 100644
--- a/drivers/rtc/rtc-mcp795.c
+++ b/drivers/rtc/rtc-mcp795.c
@@ -233,9 +233,7 @@ static int mcp795_set_time(struct device *dev, struct rtc_time *tim)
 	if (ret)
 		return ret;
 
-	dev_dbg(dev, "Set mcp795: %04d-%02d-%02d(%d) %02d:%02d:%02d\n",
-			tim->tm_year + 1900, tim->tm_mon, tim->tm_mday,
-			tim->tm_wday, tim->tm_hour, tim->tm_min, tim->tm_sec);
+	dev_dbg(dev, "Set mcp795: %ptR\n", tim);
 
 	return 0;
 }
@@ -258,9 +256,7 @@ static int mcp795_read_time(struct device *dev, struct rtc_time *tim)
 	tim->tm_mon	= bcd2bin(data[5] & 0x1F) - 1;
 	tim->tm_year	= bcd2bin(data[6]) + 100; /* Assume we are in 20xx */
 
-	dev_dbg(dev, "Read from mcp795: %04d-%02d-%02d(%d) %02d:%02d:%02d\n",
-			tim->tm_year + 1900, tim->tm_mon, tim->tm_mday,
-			tim->tm_wday, tim->tm_hour, tim->tm_min, tim->tm_sec);
+	dev_dbg(dev, "Read from mcp795: %ptR\n", tim);
 
 	return 0;
 }
@@ -319,9 +315,8 @@ static int mcp795_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
 			return ret;
 		dev_dbg(dev, "Alarm IRQ armed\n");
 	}
-	dev_dbg(dev, "Set alarm: %02d-%02d(%d) %02d:%02d:%02d\n",
-			alm->time.tm_mon, alm->time.tm_mday, alm->time.tm_wday,
-			alm->time.tm_hour, alm->time.tm_min, alm->time.tm_sec);
+	dev_dbg(dev, "Set alarm: %ptRdr(%d) %ptRt\n",
+		&alm->time, alm->time.tm_wday, &alm->time);
 	return 0;
 }
 
@@ -345,9 +340,8 @@ static int mcp795_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
 	alm->time.tm_isdst	= -1;
 	alm->time.tm_yday	= -1;
 
-	dev_dbg(dev, "Read alarm: %02d-%02d(%d) %02d:%02d:%02d\n",
-			alm->time.tm_mon, alm->time.tm_mday, alm->time.tm_wday,
-			alm->time.tm_hour, alm->time.tm_min, alm->time.tm_sec);
+	dev_dbg(dev, "Read alarm: %ptRdr(%d) %ptRt\n",
+		&alm->time, alm->time.tm_wday, &alm->time);
 	return 0;
 }
 
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 08/20] rtc: pcf50633: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (6 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 07/20] rtc: mcp795: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 09/20] rtc: pic32: " Andy Shevchenko
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-pcf50633.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/rtc/rtc-pcf50633.c b/drivers/rtc/rtc-pcf50633.c
index ef72b0c389d7..0eb05b1d0b94 100644
--- a/drivers/rtc/rtc-pcf50633.c
+++ b/drivers/rtc/rtc-pcf50633.c
@@ -131,9 +131,7 @@ static int pcf50633_rtc_read_time(struct device *dev, struct rtc_time *tm)
 
 	pcf2rtc_time(tm, &pcf_tm);
 
-	dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
-		tm->tm_mday, tm->tm_mon, tm->tm_year,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "RTC_TIME: %ptRr\n", tm);
 
 	return 0;
 }
@@ -146,9 +144,7 @@ static int pcf50633_rtc_set_time(struct device *dev, struct rtc_time *tm)
 
 	rtc = dev_get_drvdata(dev);
 
-	dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
-		tm->tm_mday, tm->tm_mon, tm->tm_year,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "RTC_TIME: %ptRr\n", tm);
 
 	rtc2pcf_time(&pcf_tm, tm);
 
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 09/20] rtc: pic32: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (7 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 08/20] rtc: pcf50633: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 10/20] rtc: pm8xxx: " Andy Shevchenko
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-pic32.c | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/drivers/rtc/rtc-pic32.c b/drivers/rtc/rtc-pic32.c
index 3c08eab4f1a8..d7ef0a6f8931 100644
--- a/drivers/rtc/rtc-pic32.c
+++ b/drivers/rtc/rtc-pic32.c
@@ -170,9 +170,7 @@ static int pic32_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
 
 	rtc_tm->tm_year += 100;
 
-	dev_dbg(dev, "read time %04d.%02d.%02d %02d:%02d:%02d\n",
-		1900 + rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday,
-		rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec);
+	dev_dbg(dev, "read time %ptR\n", rtc_tm);
 
 	clk_disable(pdata->clk);
 	return 0;
@@ -184,9 +182,7 @@ static int pic32_rtc_settime(struct device *dev, struct rtc_time *tm)
 	void __iomem *base = pdata->reg_base;
 	int year = tm->tm_year - 100;
 
-	dev_dbg(dev, "set time %04d.%02d.%02d %02d:%02d:%02d\n",
-		1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "set time %ptR\n", tm);
 
 	if (year < 0 || year >= 100) {
 		dev_err(dev, "rtc only supports 100 years\n");
@@ -224,10 +220,7 @@ static int pic32_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm)
 
 	alrm->enabled = (alm_en & PIC32_RTCALRM_ALRMEN) ? 1 : 0;
 
-	dev_dbg(dev, "getalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n",
-		alm_en,
-		1900 + alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday,
-		alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec);
+	dev_dbg(dev, "getalarm: %d, %ptR\n", alm_en, alm_tm);
 
 	alm_tm->tm_sec = bcd2bin(alm_tm->tm_sec);
 	alm_tm->tm_min = bcd2bin(alm_tm->tm_min);
@@ -247,10 +240,7 @@ static int pic32_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	void __iomem *base = pdata->reg_base;
 
 	clk_enable(pdata->clk);
-	dev_dbg(dev, "setalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n",
-		alrm->enabled,
-		1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "setalarm: %d, %ptR\n", alrm->enabled, tm);
 
 	writel(0x00, base + PIC32_ALRMTIME);
 	writel(0x00, base + PIC32_ALRMDATE);
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 10/20] rtc: pm8xxx: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (8 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 09/20] rtc: pic32: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 11/20] rtc: puv3: " Andy Shevchenko
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-pm8xxx.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
index 29358a045925..1074e3dbfc1d 100644
--- a/drivers/rtc/rtc-pm8xxx.c
+++ b/drivers/rtc/rtc-pm8xxx.c
@@ -217,9 +217,7 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
 
 	rtc_time_to_tm(secs, tm);
 
-	dev_dbg(dev, "secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n",
-		secs, tm->tm_hour, tm->tm_min, tm->tm_sec,
-		tm->tm_mday, tm->tm_mon, tm->tm_year);
+	dev_dbg(dev, "secs = %lu, h:m:s == %ptRt, y-m-d = %ptRdr\n", secs, tm, tm);
 
 	return 0;
 }
@@ -264,10 +262,8 @@ static int pm8xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
 		goto rtc_rw_fail;
 	}
 
-	dev_dbg(dev, "Alarm Set for h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n",
-		alarm->time.tm_hour, alarm->time.tm_min,
-		alarm->time.tm_sec, alarm->time.tm_mday,
-		alarm->time.tm_mon, alarm->time.tm_year);
+	dev_dbg(dev, "Alarm Set for h:m:s=%ptRt, y-m-d=%ptRdr\n",
+		&alarm->time, &alarm->time);
 rtc_rw_fail:
 	spin_unlock_irqrestore(&rtc_dd->ctrl_reg_lock, irq_flags);
 	return rc;
@@ -298,10 +294,8 @@ static int pm8xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
 		return rc;
 	}
 
-	dev_dbg(dev, "Alarm set for - h:r:s=%d:%d:%d, d/m/y=%d/%d/%d\n",
-		alarm->time.tm_hour, alarm->time.tm_min,
-		alarm->time.tm_sec, alarm->time.tm_mday,
-		alarm->time.tm_mon, alarm->time.tm_year);
+	dev_dbg(dev, "Alarm set for - h:m:s=%ptRt, y-m-d=%ptRdr\n",
+		&alarm->time, &alarm->time);
 
 	return 0;
 }
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 11/20] rtc: puv3: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (9 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 10/20] rtc: pm8xxx: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 12/20] rtc: rk808: " Andy Shevchenko
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko, Guan Xuetao

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-puv3.c | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/drivers/rtc/rtc-puv3.c b/drivers/rtc/rtc-puv3.c
index 9e83be32ff43..f77ef282f013 100644
--- a/drivers/rtc/rtc-puv3.c
+++ b/drivers/rtc/rtc-puv3.c
@@ -90,9 +90,7 @@ static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
 {
 	rtc_time_to_tm(readl(RTC_RCNR), rtc_tm);
 
-	dev_dbg(dev, "read time %02x.%02x.%02x %02x/%02x/%02x\n",
-		 rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday,
-		 rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec);
+	dev_dbg(dev, "read time %ptRr\n", rtc_tm);
 
 	return 0;
 }
@@ -101,9 +99,7 @@ static int puv3_rtc_settime(struct device *dev, struct rtc_time *tm)
 {
 	unsigned long rtc_count = 0;
 
-	dev_dbg(dev, "set time %02d.%02d.%02d %02d/%02d/%02d\n",
-		 tm->tm_year, tm->tm_mon, tm->tm_mday,
-		 tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "set time %ptRr\n", tm);
 
 	rtc_tm_to_time(tm, &rtc_count);
 	writel(rtc_count, RTC_RCNR);
@@ -119,10 +115,7 @@ static int puv3_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm)
 
 	alrm->enabled = readl(RTC_RTSR) & RTC_RTSR_ALE;
 
-	dev_dbg(dev, "read alarm %02x %02x.%02x.%02x %02x/%02x/%02x\n",
-		 alrm->enabled,
-		 alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday,
-		 alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec);
+	dev_dbg(dev, "read alarm: %d, %ptRr\n", alrm->enabled, alm_tm);
 
 	return 0;
 }
@@ -132,10 +125,7 @@ static int puv3_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	struct rtc_time *tm = &alrm->time;
 	unsigned long rtcalarm_count = 0;
 
-	dev_dbg(dev, "puv3_rtc_setalarm: %d, %02x/%02x/%02x %02x.%02x.%02x\n",
-		 alrm->enabled,
-		 tm->tm_mday & 0xff, tm->tm_mon & 0xff, tm->tm_year & 0xff,
-		 tm->tm_hour & 0xff, tm->tm_min & 0xff, tm->tm_sec);
+	dev_dbg(dev, "set alarm: %d, %ptRr\n", alrm->enabled, tm);
 
 	rtc_tm_to_time(tm, &rtcalarm_count);
 	writel(rtcalarm_count, RTC_RTAR);
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 12/20] rtc: rk808: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (10 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 11/20] rtc: puv3: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 13/20] rtc: rx6110: " Andy Shevchenko
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-rk808.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/drivers/rtc/rtc-rk808.c b/drivers/rtc/rtc-rk808.c
index b2f9e45e0298..1fb864d4ef83 100644
--- a/drivers/rtc/rtc-rk808.c
+++ b/drivers/rtc/rtc-rk808.c
@@ -138,9 +138,7 @@ static int rk808_rtc_readtime(struct device *dev, struct rtc_time *tm)
 	tm->tm_year = (bcd2bin(rtc_data[5] & YEARS_REG_MSK)) + 100;
 	tm->tm_wday = bcd2bin(rtc_data[6] & WEEKS_REG_MSK);
 	rockchip_to_gregorian(tm);
-	dev_dbg(dev, "RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n",
-		1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
-		tm->tm_wday, tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "RTC date/time %ptRd(%d) %ptRt\n", tm, tm->tm_wday, tm);
 
 	return ret;
 }
@@ -153,9 +151,7 @@ static int rk808_rtc_set_time(struct device *dev, struct rtc_time *tm)
 	u8 rtc_data[NUM_TIME_REGS];
 	int ret;
 
-	dev_dbg(dev, "set RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n",
-		1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
-		tm->tm_wday, tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "set RTC date/time %ptRd(%d) %ptRt\n", tm, tm->tm_wday, tm);
 	gregorian_to_rockchip(tm);
 	rtc_data[0] = bin2bcd(tm->tm_sec);
 	rtc_data[1] = bin2bcd(tm->tm_min);
@@ -216,10 +212,8 @@ static int rk808_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
 		return ret;
 	}
 
-	dev_dbg(dev, "alrm read RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n",
-		1900 + alrm->time.tm_year, alrm->time.tm_mon + 1,
-		alrm->time.tm_mday, alrm->time.tm_wday, alrm->time.tm_hour,
-		alrm->time.tm_min, alrm->time.tm_sec);
+	dev_dbg(dev, "alrm read RTC date/time %ptRd(%d) %ptRt\n",
+		&alrm->time, alrm->time.tm_wday, &alrm->time);
 
 	alrm->enabled = (int_reg & BIT_RTC_INTERRUPTS_REG_IT_ALARM_M) ? 1 : 0;
 
@@ -261,10 +255,8 @@ static int rk808_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
 		dev_err(dev, "Failed to stop alarm: %d\n", ret);
 		return ret;
 	}
-	dev_dbg(dev, "alrm set RTC date/time %4d-%02d-%02d(%d) %02d:%02d:%02d\n",
-		1900 + alrm->time.tm_year, alrm->time.tm_mon + 1,
-		alrm->time.tm_mday, alrm->time.tm_wday, alrm->time.tm_hour,
-		alrm->time.tm_min, alrm->time.tm_sec);
+	dev_dbg(dev, "alrm set RTC date/time %ptRd(%d) %ptRt\n",
+		&alrm->time, alrm->time.tm_wday, &alrm->time);
 
 	gregorian_to_rockchip(&alrm->time);
 	alrm_data[0] = bin2bcd(alrm->time.tm_sec);
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 13/20] rtc: rx6110: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (11 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 12/20] rtc: rk808: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 14/20] rtc: rx8025: " Andy Shevchenko
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-rx6110.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/rtc/rtc-rx6110.c b/drivers/rtc/rtc-rx6110.c
index 8e322d884cc2..5899ca368d59 100644
--- a/drivers/rtc/rtc-rx6110.c
+++ b/drivers/rtc/rtc-rx6110.c
@@ -114,9 +114,7 @@ struct rx6110_data {
  */
 static int rx6110_rtc_tm_to_data(struct rtc_time *tm, u8 *data)
 {
-	pr_debug("%s: date %ds %dm %dh %dmd %dm %dy\n", __func__,
-		 tm->tm_sec, tm->tm_min, tm->tm_hour,
-		 tm->tm_mday, tm->tm_mon, tm->tm_year);
+	pr_debug("%s: date %ptRr\n", __func__, tm);
 
 	/*
 	 * The year in the RTC is a value between 0 and 99.
@@ -154,9 +152,7 @@ static int rx6110_data_to_rtc_tm(u8 *data, struct rtc_time *tm)
 	tm->tm_mon = bcd2bin(data[RTC_MONTH] & 0x1f) - 1;
 	tm->tm_year = bcd2bin(data[RTC_YEAR]) + 100;
 
-	pr_debug("%s: date %ds %dm %dh %dmd %dm %dy\n", __func__,
-		 tm->tm_sec, tm->tm_min, tm->tm_hour,
-		 tm->tm_mday, tm->tm_mon, tm->tm_year);
+	pr_debug("%s: date %ptRr\n", __func__, tm);
 
 	/*
 	 * The year in the RTC is a value between 0 and 99.
@@ -248,9 +244,7 @@ static int rx6110_get_time(struct device *dev, struct rtc_time *tm)
 	if (ret)
 		return ret;
 
-	dev_dbg(dev, "%s: date %ds %dm %dh %dmd %dm %dy\n", __func__,
-		tm->tm_sec, tm->tm_min, tm->tm_hour,
-		tm->tm_mday, tm->tm_mon, tm->tm_year);
+	dev_dbg(dev, "%s: date %ptRr\n", __func__, tm);
 
 	return 0;
 }
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 14/20] rtc: rx8025: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (12 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 13/20] rtc: rx6110: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 15/20] rtc: s3c: " Andy Shevchenko
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-rx8025.c | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)

diff --git a/drivers/rtc/rtc-rx8025.c b/drivers/rtc/rtc-rx8025.c
index 41127adf5765..41de38acc570 100644
--- a/drivers/rtc/rtc-rx8025.c
+++ b/drivers/rtc/rtc-rx8025.c
@@ -193,10 +193,7 @@ static int rx8025_get_time(struct device *dev, struct rtc_time *dt)
 	if (err)
 		return err;
 
-	dev_dbg(dev, "%s: read 0x%02x 0x%02x "
-		"0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", __func__,
-		date[0], date[1], date[2], date[3], date[4],
-		date[5], date[6]);
+	dev_dbg(dev, "%s: read %7ph\n", __func__, date);
 
 	dt->tm_sec = bcd2bin(date[RX8025_REG_SEC] & 0x7f);
 	dt->tm_min = bcd2bin(date[RX8025_REG_MIN] & 0x7f);
@@ -210,9 +207,7 @@ static int rx8025_get_time(struct device *dev, struct rtc_time *dt)
 	dt->tm_mon = bcd2bin(date[RX8025_REG_MONTH] & 0x1f) - 1;
 	dt->tm_year = bcd2bin(date[RX8025_REG_YEAR]) + 100;
 
-	dev_dbg(dev, "%s: date %ds %dm %dh %dmd %dm %dy\n", __func__,
-		dt->tm_sec, dt->tm_min, dt->tm_hour,
-		dt->tm_mday, dt->tm_mon, dt->tm_year);
+	dev_dbg(dev, "%s: date %ptRr\n", __func__, dt);
 
 	return 0;
 }
@@ -243,10 +238,7 @@ static int rx8025_set_time(struct device *dev, struct rtc_time *dt)
 	date[RX8025_REG_MONTH] = bin2bcd(dt->tm_mon + 1);
 	date[RX8025_REG_YEAR] = bin2bcd(dt->tm_year - 100);
 
-	dev_dbg(dev,
-		"%s: write 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
-		__func__,
-		date[0], date[1], date[2], date[3], date[4], date[5], date[6]);
+	dev_dbg(dev, "%s: write %7ph\n", __func__, date);
 
 	ret = rx8025_write_regs(rx8025->client, RX8025_REG_SEC, 7, date);
 	if (ret < 0)
@@ -319,10 +311,7 @@ static int rx8025_read_alarm(struct device *dev, struct rtc_wkalrm *t)
 		t->time.tm_hour = bcd2bin(ald[1] & 0x1f) % 12
 			+ (ald[1] & 0x20 ? 12 : 0);
 
-	dev_dbg(dev, "%s: date: %ds %dm %dh %dmd %dm %dy\n",
-		__func__,
-		t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
-		t->time.tm_mday, t->time.tm_mon, t->time.tm_year);
+	dev_dbg(dev, "%s: date: %ptRr\n", __func__, t);
 	t->enabled = !!(rx8025->ctrl1 & RX8025_BIT_CTRL1_DALE);
 	t->pending = (ctrl2 & RX8025_BIT_CTRL2_DAFG) && t->enabled;
 
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 15/20] rtc: s3c: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (13 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 14/20] rtc: rx8025: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 16/20] rtc: s5m: " Andy Shevchenko
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-s3c.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index 75c8c5033e08..a11f431fcddd 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -225,13 +225,9 @@ static int s3c_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
 	s3c_rtc_disable_clk(info);
 
 	rtc_tm->tm_year += 100;
-
-	dev_dbg(dev, "read time %04d.%02d.%02d %02d:%02d:%02d\n",
-		1900 + rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday,
-		rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec);
-
 	rtc_tm->tm_mon -= 1;
 
+	dev_dbg(dev, "read time %ptR\n", rtc_tm);
 	return 0;
 }
 
@@ -241,9 +237,7 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
 	int year = tm->tm_year - 100;
 	int ret;
 
-	dev_dbg(dev, "set time %04d.%02d.%02d %02d:%02d:%02d\n",
-		1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "set time %ptR\n", tm);
 
 	/* we get around y2k by simply not supporting it */
 
@@ -292,10 +286,7 @@ static int s3c_rtc_getalarm(struct device *dev, struct rtc_wkalrm *alrm)
 
 	alrm->enabled = (alm_en & S3C2410_RTCALM_ALMEN) ? 1 : 0;
 
-	dev_dbg(dev, "read alarm %d, %04d.%02d.%02d %02d:%02d:%02d\n",
-		alm_en,
-		1900 + alm_tm->tm_year, alm_tm->tm_mon, alm_tm->tm_mday,
-		alm_tm->tm_hour, alm_tm->tm_min, alm_tm->tm_sec);
+	dev_dbg(dev, "read alarm %d, %ptR\n", alm_en, alm_tm);
 
 	/* decode the alarm enable field */
 	if (alm_en & S3C2410_RTCALM_SECEN)
@@ -329,10 +320,7 @@ static int s3c_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
 	int ret;
 	int year = tm->tm_year - 100;
 
-	dev_dbg(dev, "s3c_rtc_setalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n",
-		alrm->enabled,
-		1900 + tm->tm_year, tm->tm_mon + 1, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec);
+	dev_dbg(dev, "s3c_rtc_setalarm: %d, %ptR\n", alrm->enabled, tm);
 
 	ret = s3c_rtc_enable_clk(info);
 	if (ret)
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 16/20] rtc: s5m: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (14 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 15/20] rtc: s3c: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 17/20] rtc: tegra: " Andy Shevchenko
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko, Bartlomiej Zolnierkiewicz

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-s5m.c | 27 ++++++---------------------
 1 file changed, 6 insertions(+), 21 deletions(-)

diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c
index 6495f84f7428..c7f1bf823ea0 100644
--- a/drivers/rtc/rtc-s5m.c
+++ b/drivers/rtc/rtc-s5m.c
@@ -406,9 +406,7 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
 		return -EINVAL;
 	}
 
-	dev_dbg(dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__,
-		1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_wday);
+	dev_dbg(dev, "%s: %ptR(%d)\n", __func__, tm, tm->tm_wday);
 
 	return 0;
 }
@@ -436,9 +434,7 @@ static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm)
 	if (ret < 0)
 		return ret;
 
-	dev_dbg(dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__,
-		1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday,
-		tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_wday);
+	dev_dbg(dev, "%s: %ptR(%d)\n", __func__, tm, tm->tm_wday);
 
 	ret = regmap_raw_write(info->regmap, info->regs->time, data,
 			info->regs->regs_count);
@@ -490,11 +486,7 @@ static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 		return -EINVAL;
 	}
 
-	dev_dbg(dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__,
-		1900 + alrm->time.tm_year, 1 + alrm->time.tm_mon,
-		alrm->time.tm_mday, alrm->time.tm_hour,
-		alrm->time.tm_min, alrm->time.tm_sec,
-		alrm->time.tm_wday);
+	dev_dbg(dev, "%s: %ptR(%d)\n", __func__, &alrm->time, alrm->time.tm_wday);
 
 	ret = s5m_check_peding_alarm_interrupt(info, alrm);
 
@@ -513,9 +505,7 @@ static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info)
 		return ret;
 
 	s5m8767_data_to_tm(data, &tm, info->rtc_24hr_mode);
-	dev_dbg(info->dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__,
-		1900 + tm.tm_year, 1 + tm.tm_mon, tm.tm_mday,
-		tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_wday);
+	dev_dbg(info->dev, "%s: %ptR(%d)\n", __func__, &tm, tm.tm_wday);
 
 	switch (info->device_type) {
 	case S5M8763X:
@@ -558,9 +548,7 @@ static int s5m_rtc_start_alarm(struct s5m_rtc_info *info)
 		return ret;
 
 	s5m8767_data_to_tm(data, &tm, info->rtc_24hr_mode);
-	dev_dbg(info->dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__,
-		1900 + tm.tm_year, 1 + tm.tm_mon, tm.tm_mday,
-		tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_wday);
+	dev_dbg(info->dev, "%s: %ptR(%d)\n", __func__, &tm, tm.tm_wday);
 
 	switch (info->device_type) {
 	case S5M8763X:
@@ -620,10 +608,7 @@ static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 		return -EINVAL;
 	}
 
-	dev_dbg(dev, "%s: %d/%d/%d %d:%d:%d(%d)\n", __func__,
-		1900 + alrm->time.tm_year, 1 + alrm->time.tm_mon,
-		alrm->time.tm_mday, alrm->time.tm_hour, alrm->time.tm_min,
-		alrm->time.tm_sec, alrm->time.tm_wday);
+	dev_dbg(dev, "%s: %ptR(%d)\n", __func__, &alrm->time, alrm->time.tm_wday);
 
 	ret = s5m_rtc_stop_alarm(info);
 	if (ret < 0)
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 17/20] rtc: tegra: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (15 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 16/20] rtc: s5m: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 18/20] Input: hp_sdc_rtc - " Andy Shevchenko
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko, Thierry Reding, Jonathan Hunter

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/rtc/rtc-tegra.c | 30 +++---------------------------
 1 file changed, 3 insertions(+), 27 deletions(-)

diff --git a/drivers/rtc/rtc-tegra.c b/drivers/rtc/rtc-tegra.c
index c9e77a83cd1b..c6b0a99aa3a9 100644
--- a/drivers/rtc/rtc-tegra.c
+++ b/drivers/rtc/rtc-tegra.c
@@ -125,15 +125,7 @@ static int tegra_rtc_read_time(struct device *dev, struct rtc_time *tm)
 
 	rtc_time_to_tm(sec, tm);
 
-	dev_vdbg(dev, "time read as %lu. %d/%d/%d %d:%02u:%02u\n",
-		sec,
-		tm->tm_mon + 1,
-		tm->tm_mday,
-		tm->tm_year + 1900,
-		tm->tm_hour,
-		tm->tm_min,
-		tm->tm_sec
-	);
+	dev_vdbg(dev, "time read as %lu. %ptR\n", sec, tm);
 
 	return 0;
 }
@@ -147,15 +139,7 @@ static int tegra_rtc_set_time(struct device *dev, struct rtc_time *tm)
 	/* convert tm to seconds. */
 	rtc_tm_to_time(tm, &sec);
 
-	dev_vdbg(dev, "time set to %lu. %d/%d/%d %d:%02u:%02u\n",
-		sec,
-		tm->tm_mon+1,
-		tm->tm_mday,
-		tm->tm_year+1900,
-		tm->tm_hour,
-		tm->tm_min,
-		tm->tm_sec
-	);
+	dev_vdbg(dev, "time set to %lu. %ptR\n", sec, tm);
 
 	/* seconds only written if wait succeeded. */
 	ret = tegra_rtc_wait_while_busy(dev);
@@ -232,15 +216,7 @@ static int tegra_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
 	/* if successfully written and alarm is enabled ... */
 	if (sec) {
 		tegra_rtc_alarm_irq_enable(dev, 1);
-
-		dev_vdbg(dev, "alarm set as %lu. %d/%d/%d %d:%02u:%02u\n",
-			sec,
-			alarm->time.tm_mon+1,
-			alarm->time.tm_mday,
-			alarm->time.tm_year+1900,
-			alarm->time.tm_hour,
-			alarm->time.tm_min,
-			alarm->time.tm_sec);
+		dev_vdbg(dev, "alarm set as %lu. %ptR\n", sec, &alarm->time);
 	} else {
 		/* disable alarm if 0 or write error. */
 		dev_vdbg(dev, "alarm disabled\n");
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 18/20] Input: hp_sdc_rtc - Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (16 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 17/20] rtc: tegra: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 18:07   ` Dmitry Torokhov
  2018-11-13 17:17 ` [PATCH v3 19/20] mk68/mac: " Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 20/20] PM: " Andy Shevchenko
  19 siblings, 1 reply; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko, Dmitry Torokhov

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/input/misc/hp_sdc_rtc.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/input/misc/hp_sdc_rtc.c b/drivers/input/misc/hp_sdc_rtc.c
index 47eb8ca729fe..abca895a6156 100644
--- a/drivers/input/misc/hp_sdc_rtc.c
+++ b/drivers/input/misc/hp_sdc_rtc.c
@@ -441,12 +441,10 @@ static int hp_sdc_rtc_proc_show(struct seq_file *m, void *v)
 		seq_puts(m, "BBRTC\t\t: READ FAILED!\n");
 	} else {
 		seq_printf(m,
-			     "rtc_time\t: %02d:%02d:%02d\n"
-			     "rtc_date\t: %04d-%02d-%02d\n"
+			     "rtc_time\t: %ptRt\n"
+			     "rtc_date\t: %ptRd\n"
 			     "rtc_epoch\t: %04lu\n",
-			     tm.tm_hour, tm.tm_min, tm.tm_sec,
-			     tm.tm_year + 1900, tm.tm_mon + 1, 
-			     tm.tm_mday, epoch);
+			     &tm, &tm, epoch);
 	}
 
 	if (hp_sdc_rtc_read_rt(&tv)) {
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 19/20] mk68/mac: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (17 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 18/20] Input: hp_sdc_rtc - " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  2018-11-13 17:17 ` [PATCH v3 20/20] PM: " Andy Shevchenko
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 arch/m68k/mac/misc.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/arch/m68k/mac/misc.c b/arch/m68k/mac/misc.c
index ebb3b6d169ea..71c4735a31ee 100644
--- a/arch/m68k/mac/misc.c
+++ b/arch/m68k/mac/misc.c
@@ -605,13 +605,9 @@ int mac_hwclk(int op, struct rtc_time *t)
 		unmktime(now, 0,
 			 &t->tm_year, &t->tm_mon, &t->tm_mday,
 			 &t->tm_hour, &t->tm_min, &t->tm_sec);
-		pr_debug("%s: read %04d-%02d-%-2d %02d:%02d:%02d\n",
-		         __func__, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
-		         t->tm_hour, t->tm_min, t->tm_sec);
+		pr_debug("%s: read %ptR\n", __func__, t);
 	} else { /* write */
-		pr_debug("%s: tried to write %04d-%02d-%-2d %02d:%02d:%02d\n",
-		         __func__, t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
-		         t->tm_hour, t->tm_min, t->tm_sec);
+		pr_debug("%s: tried to write %ptR\n", __func__, t);
 
 		switch (macintosh_config->adb_type) {
 		case MAC_ADB_IOP:
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PATCH v3 20/20] PM: Switch to use %ptR
  2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
                   ` (18 preceding siblings ...)
  2018-11-13 17:17 ` [PATCH v3 19/20] mk68/mac: " Andy Shevchenko
@ 2018-11-13 17:17 ` Andy Shevchenko
  19 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 17:17 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven
  Cc: Andy Shevchenko, linux-pm

Use %ptR instead of open coded variant to print content of
struct rtc_time in human readable format.

Cc: linux-pm@vger.kernel.org
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/base/power/trace.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/base/power/trace.c b/drivers/base/power/trace.c
index 1cda505d6a85..b11f47a1e819 100644
--- a/drivers/base/power/trace.c
+++ b/drivers/base/power/trace.c
@@ -118,9 +118,7 @@ static unsigned int read_magic_time(void)
 	unsigned int val;
 
 	mc146818_get_time(&time);
-	pr_info("RTC time: %2d:%02d:%02d, date: %02d/%02d/%02d\n",
-		time.tm_hour, time.tm_min, time.tm_sec,
-		time.tm_mon + 1, time.tm_mday, time.tm_year % 100);
+	pr_info("RTC time: %ptRt, date: %ptRd\n", &time, &time);
 	val = time.tm_year;				/* 100 years */
 	if (val > 100)
 		val -= 100;
-- 
2.19.1


^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt
  2018-11-13 17:17 ` [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt Andy Shevchenko
@ 2018-11-13 17:35   ` Joe Perches
  2018-11-13 18:11     ` Andy Shevchenko
  2018-11-20 22:27   ` Alexandre Belloni
  1 sibling, 1 reply; 26+ messages in thread
From: Joe Perches @ 2018-11-13 17:35 UTC (permalink / raw)
  To: Andy Shevchenko, Rasmus Villemoes, Greg Kroah-Hartman,
	linux-kernel, Alessandro Zummo, Alexandre Belloni, linux-rtc,
	Arnd Bergmann, Mark Salyzyn, Geert Uytterhoeven
  Cc: Bartlomiej Zolnierkiewicz, Dmitry Torokhov, Guan Xuetao,
	Ingo Molnar, Jason Wessel, Jonathan Corbet, Jonathan Hunter,
	Krzysztof Kozlowski, Rafael J. Wysocki, Thierry Reding

On Tue, 2018-11-13 at 19:17 +0200, Andy Shevchenko wrote:
> There are users which print time and date represented by content of
> struct rtc_time in human readable format.
> 
> Instead of open coding that each time introduce %ptR[dt][rv] specifier.
> 
> Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig.

This bit should be removed as it's not true anymore.



^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v3 18/20] Input: hp_sdc_rtc - Switch to use %ptR
  2018-11-13 17:17 ` [PATCH v3 18/20] Input: hp_sdc_rtc - " Andy Shevchenko
@ 2018-11-13 18:07   ` Dmitry Torokhov
  0 siblings, 0 replies; 26+ messages in thread
From: Dmitry Torokhov @ 2018-11-13 18:07 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, Alexandre Belloni, linux-rtc, Arnd Bergmann,
	Joe Perches, Mark Salyzyn, Geert Uytterhoeven

On Tue, Nov 13, 2018 at 07:17:27PM +0200, Andy Shevchenko wrote:
> Use %ptR instead of open coded variant to print content of
> struct rtc_time in human readable format.
> 
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Please feel free to merge with the rest of the series.

> ---
>  drivers/input/misc/hp_sdc_rtc.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/input/misc/hp_sdc_rtc.c b/drivers/input/misc/hp_sdc_rtc.c
> index 47eb8ca729fe..abca895a6156 100644
> --- a/drivers/input/misc/hp_sdc_rtc.c
> +++ b/drivers/input/misc/hp_sdc_rtc.c
> @@ -441,12 +441,10 @@ static int hp_sdc_rtc_proc_show(struct seq_file *m, void *v)
>  		seq_puts(m, "BBRTC\t\t: READ FAILED!\n");
>  	} else {
>  		seq_printf(m,
> -			     "rtc_time\t: %02d:%02d:%02d\n"
> -			     "rtc_date\t: %04d-%02d-%02d\n"
> +			     "rtc_time\t: %ptRt\n"
> +			     "rtc_date\t: %ptRd\n"
>  			     "rtc_epoch\t: %04lu\n",
> -			     tm.tm_hour, tm.tm_min, tm.tm_sec,
> -			     tm.tm_year + 1900, tm.tm_mon + 1, 
> -			     tm.tm_mday, epoch);
> +			     &tm, &tm, epoch);
>  	}
>  
>  	if (hp_sdc_rtc_read_rt(&tv)) {
> -- 
> 2.19.1
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt
  2018-11-13 17:35   ` Joe Perches
@ 2018-11-13 18:11     ` Andy Shevchenko
  0 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-13 18:11 UTC (permalink / raw)
  To: Joe Perches
  Cc: Andy Shevchenko, Rasmus Villemoes, Greg Kroah-Hartman,
	Linux Kernel Mailing List, Alessandro Zummo, Alexandre Belloni,
	open list:REAL TIME CLOCK (RTC) SUBSYSTEM, Arnd Bergmann,
	Mark Salyzyn, Geert Uytterhoeven, Bartlomiej Zolnierkiewicz,
	Dmitry Torokhov, Guan Xuetao, Ingo Molnar, Jason Wessel,
	Jonathan Corbet, Jon Hunter, Krzysztof Kozlowski,
	Rafael J. Wysocki, Thierry Reding

On Tue, Nov 13, 2018 at 7:37 PM Joe Perches <joe@perches.com> wrote:
>
> On Tue, 2018-11-13 at 19:17 +0200, Andy Shevchenko wrote:
> > There are users which print time and date represented by content of
> > struct rtc_time in human readable format.
> >
> > Instead of open coding that each time introduce %ptR[dt][rv] specifier.
> >
> > Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig.
>
> This bit should be removed as it's not true anymore.

Oops, right.

-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt
  2018-11-13 17:17 ` [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt Andy Shevchenko
  2018-11-13 17:35   ` Joe Perches
@ 2018-11-20 22:27   ` Alexandre Belloni
  2018-11-28 18:16     ` Andy Shevchenko
  1 sibling, 1 reply; 26+ messages in thread
From: Alexandre Belloni @ 2018-11-20 22:27 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, linux-rtc, Arnd Bergmann, Joe Perches,
	Mark Salyzyn, Geert Uytterhoeven, Bartlomiej Zolnierkiewicz,
	Dmitry Torokhov, Guan Xuetao, Ingo Molnar, Jason Wessel,
	Jonathan Corbet, Jonathan Hunter, Krzysztof Kozlowski,
	Rafael J. Wysocki, Thierry Reding

Hello,

(Please update my email address).

On 13/11/2018 19:17:10+0200, Andy Shevchenko wrote:
> There are users which print time and date represented by content of
> struct rtc_time in human readable format.
> 
> Instead of open coding that each time introduce %ptR[dt][rv] specifier.
> 
> Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig.
> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Jason Wessel <jason.wessel@windriver.com>
> Cc: Jonathan Corbet <corbet@lwn.net>
> Cc: Jonathan Hunter <jonathanh@nvidia.com>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  Documentation/core-api/printk-formats.rst |  20 ++++
>  lib/test_printf.c                         |   6 +
>  lib/vsprintf.c                            | 140 ++++++++++++++++++++++
>  3 files changed, 166 insertions(+)
> 
> diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
> index ff48b55040ef..8342a65eab0b 100644
> --- a/Documentation/core-api/printk-formats.rst
> +++ b/Documentation/core-api/printk-formats.rst
> @@ -412,6 +412,26 @@ Examples::
>  
>  Passed by reference.
>  
> +Time and date (struct rtc_time)
> +-------------------------------
> +
> +::
> +
> +	%ptR		YYYY-mm-dd HH:MM:SS
> +	%ptRd		YYYY-mm-dd
> +	%ptRt		HH:MM:SS
> +	%ptR[dt][rv]
> +
> +For printing date and time as represented by struct rtc_time structure in
> +human readable format.
> +
> +By default year will be incremented by 1900 and month by 1. Use %ptRr (raw)
> +to suppress this behaviour. On the other hand when %ptRv is applied
> +validation mechanism will be in use, i.e. numbers out of range will be
> +replaced by ** or ****.
> +
> +Passed by reference.
> +
>  struct clk
>  ----------
>  
> diff --git a/lib/test_printf.c b/lib/test_printf.c
> index 53527ea822b5..97b7d14961d6 100644
> --- a/lib/test_printf.c
> +++ b/lib/test_printf.c
> @@ -418,6 +418,11 @@ struct_va_format(void)
>  {
>  }
>  
> +static void __init
> +struct_rtc_time(void)
> +{
> +}
> +
>  static void __init
>  struct_clk(void)
>  {
> @@ -529,6 +534,7 @@ test_pointer(void)
>  	uuid();
>  	dentry();
>  	struct_va_format();
> +	struct_rtc_time();
>  	struct_clk();
>  	bitmap();
>  	netdev_features();
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index 37a54a6dd594..8455cbda8d6c 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -30,6 +30,7 @@
>  #include <linux/ioport.h>
>  #include <linux/dcache.h>
>  #include <linux/cred.h>
> +#include <linux/rtc.h>
>  #include <linux/uuid.h>
>  #include <linux/of.h>
>  #include <net/addrconf.h>
> @@ -822,6 +823,20 @@ static const struct printf_spec default_dec_spec = {
>  	.precision = -1,
>  };
>  
> +static const struct printf_spec default_dec02_spec = {
> +	.base = 10,
> +	.field_width = 2,
> +	.precision = -1,
> +	.flags = ZEROPAD,
> +};
> +
> +static const struct printf_spec default_dec04_spec = {
> +	.base = 10,
> +	.field_width = 4,
> +	.precision = -1,
> +	.flags = ZEROPAD,
> +};
> +
>  static noinline_for_stack
>  char *resource_string(char *buf, char *end, struct resource *res,
>  		      struct printf_spec spec, const char *fmt)
> @@ -1549,6 +1564,127 @@ char *address_val(char *buf, char *end, const void *addr, const char *fmt)
>  	return special_hex_number(buf, end, num, size);
>  }
>  
> +static noinline_for_stack
> +char *date_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r)
> +{
> +	int year = tm->tm_year + (r ? 0 : 1900);
> +	int mon = tm->tm_mon + (r ? 0 : 1);
> +
> +	if (unlikely(v && (unsigned int)tm->tm_year > 200))
> +		buf = string(buf, end, "****", default_str_spec);

I think you should drop the validation option. This is only used in a
deprecated ABI and is mostly wrong as many RTCs will still be valid
after 2100.

> +	else
> +		buf = number(buf, end, year, default_dec04_spec);
> +
> +	if (buf < end)
> +		*buf = '-';
> +	buf++;
> +
> +	if (unlikely(v && (unsigned int)tm->tm_mon > 11))
> +		buf = string(buf, end, "**", default_str_spec);
> +	else
> +		buf = number(buf, end, mon, default_dec02_spec);
> +
> +	if (buf < end)
> +		*buf = '-';
> +	buf++;
> +
> +	if (unlikely(v && (unsigned int)tm->tm_mday > 31))
> +		buf = string(buf, end, "**", default_str_spec);

Same here, this doesn't protect February, April, June, September and
November. There is one RTC that think that 31st of November is valid.

> +	else
> +		buf = number(buf, end, tm->tm_mday, default_dec02_spec);
> +
> +	return buf;
> +}
> +
> +static noinline_for_stack
> +char *time_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r)
> +{
> +	if (unlikely(v && (unsigned int)tm->tm_hour > 24))
> +		buf = string(buf, end, "**", default_str_spec);
> +	else
> +		buf = number(buf, end, tm->tm_hour, default_dec02_spec);
> +
> +	if (buf < end)
> +		*buf = ':';
> +	buf++;
> +
> +	if (unlikely(v && (unsigned int)tm->tm_min > 59))
> +		buf = string(buf, end, "**", default_str_spec);
> +	else
> +		buf = number(buf, end, tm->tm_min, default_dec02_spec);
> +
> +	if (buf < end)
> +		*buf = ':';
> +	buf++;
> +
> +	if (unlikely(v && (unsigned int)tm->tm_sec > 59))
> +		buf = string(buf, end, "**", default_str_spec);

Some RTCs will consider 60 valid. So, really, instead of fixing all of
those, I'd just get rid of the validation option.

> +	else
> +		buf = number(buf, end, tm->tm_sec, default_dec02_spec);
> +
> +	return buf;
> +}
> +
> +static noinline_for_stack
> +char *rtc_str(char *buf, char *end, const struct rtc_time *tm, const char *fmt)
> +{
> +	bool have_t = true, have_d = true;
> +	bool validate = false;
> +	bool raw = false;
> +	int count = 2;
> +	bool found;
> +
> +	switch (fmt[count]) {
> +	case 'd':
> +		have_t = false;
> +		count++;
> +		break;
> +	case 't':
> +		have_d = false;
> +		count++;
> +		break;
> +	}
> +
> +	found = true;
> +	do {
> +		switch (fmt[count++]) {
> +		case 'r':
> +			raw = true;
> +			break;
> +		case 'v':
> +			validate = true;
> +			break;
> +		default:
> +			found = false;
> +			break;
> +		}
> +	} while (found);
> +
> +	if (have_d)
> +		buf = date_str(buf, end, tm, validate, raw);
> +	if (have_d && have_t) {
> +		if (buf < end)
> +			*buf = ' ';

I'd go for ISO 8601 and use a 'T' here.

> +		buf++;
> +	}
> +	if (have_t)
> +		buf = time_str(buf, end, tm, validate, raw);
> +
> +	return buf;
> +}
> +
> +static noinline_for_stack
> +char *timeanddate(char *buf, char *end, void *ptr, struct printf_spec spec,
> +		  const char *fmt)
> +{
> +	switch (fmt[1]) {
> +	case 'R':
> +		return rtc_str(buf, end, (const struct rtc_time *)ptr, fmt);
> +	default:
> +		return ptr_to_id(buf, end, ptr, spec);
> +	}
> +}
> +
>  static noinline_for_stack
>  char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
>  	    const char *fmt)
> @@ -1828,6 +1964,8 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
>   * - 'd[234]' For a dentry name (optionally 2-4 last components)
>   * - 'D[234]' Same as 'd' but for a struct file
>   * - 'g' For block_device name (gendisk + partition number)
> + * - 't[R][dt][rv]' For time and date as represented:
> + *      R    struct rtc_time
>   * - 'C' For a clock, it prints the name (Common Clock Framework) or address
>   *       (legacy clock framework) of the clock
>   * - 'Cn' For a clock, it prints the name (Common Clock Framework) or address
> @@ -1952,6 +2090,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
>  		return address_val(buf, end, ptr, fmt);
>  	case 'd':
>  		return dentry_name(buf, end, ptr, spec, fmt);
> +	case 't':
> +		return timeanddate(buf, end, ptr, spec, fmt);
>  	case 'C':
>  		return clock(buf, end, ptr, spec, fmt);
>  	case 'D':
> -- 
> 2.19.1
> 

-- 
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt
  2018-11-20 22:27   ` Alexandre Belloni
@ 2018-11-28 18:16     ` Andy Shevchenko
  0 siblings, 0 replies; 26+ messages in thread
From: Andy Shevchenko @ 2018-11-28 18:16 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: Rasmus Villemoes, Greg Kroah-Hartman, linux-kernel,
	Alessandro Zummo, linux-rtc, Arnd Bergmann, Joe Perches,
	Mark Salyzyn, Geert Uytterhoeven, Bartlomiej Zolnierkiewicz,
	Dmitry Torokhov, Guan Xuetao, Ingo Molnar, Jason Wessel,
	Jonathan Corbet, Jonathan Hunter, Krzysztof Kozlowski,
	Rafael J. Wysocki, Thierry Reding

On Tue, Nov 20, 2018 at 11:27:57PM +0100, Alexandre Belloni wrote:
> Hello,
> 
> (Please update my email address).

I will follow all recommendations.
New version coming soon...

Thanks for review!

> 
> On 13/11/2018 19:17:10+0200, Andy Shevchenko wrote:
> > There are users which print time and date represented by content of
> > struct rtc_time in human readable format.
> > 
> > Instead of open coding that each time introduce %ptR[dt][rv] specifier.
> > 
> > Note, users have to select PRINTK_PEXT_TIMEDATE option in a Kconfig.
> > 
> > Cc: Arnd Bergmann <arnd@arndb.de>
> > Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
> > Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> > Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
> > Cc: Ingo Molnar <mingo@kernel.org>
> > Cc: Jason Wessel <jason.wessel@windriver.com>
> > Cc: Jonathan Corbet <corbet@lwn.net>
> > Cc: Jonathan Hunter <jonathanh@nvidia.com>
> > Cc: Krzysztof Kozlowski <krzk@kernel.org>
> > Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
> > Cc: Thierry Reding <thierry.reding@gmail.com>
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >  Documentation/core-api/printk-formats.rst |  20 ++++
> >  lib/test_printf.c                         |   6 +
> >  lib/vsprintf.c                            | 140 ++++++++++++++++++++++
> >  3 files changed, 166 insertions(+)
> > 
> > diff --git a/Documentation/core-api/printk-formats.rst b/Documentation/core-api/printk-formats.rst
> > index ff48b55040ef..8342a65eab0b 100644
> > --- a/Documentation/core-api/printk-formats.rst
> > +++ b/Documentation/core-api/printk-formats.rst
> > @@ -412,6 +412,26 @@ Examples::
> >  
> >  Passed by reference.
> >  
> > +Time and date (struct rtc_time)
> > +-------------------------------
> > +
> > +::
> > +
> > +	%ptR		YYYY-mm-dd HH:MM:SS
> > +	%ptRd		YYYY-mm-dd
> > +	%ptRt		HH:MM:SS
> > +	%ptR[dt][rv]
> > +
> > +For printing date and time as represented by struct rtc_time structure in
> > +human readable format.
> > +
> > +By default year will be incremented by 1900 and month by 1. Use %ptRr (raw)
> > +to suppress this behaviour. On the other hand when %ptRv is applied
> > +validation mechanism will be in use, i.e. numbers out of range will be
> > +replaced by ** or ****.
> > +
> > +Passed by reference.
> > +
> >  struct clk
> >  ----------
> >  
> > diff --git a/lib/test_printf.c b/lib/test_printf.c
> > index 53527ea822b5..97b7d14961d6 100644
> > --- a/lib/test_printf.c
> > +++ b/lib/test_printf.c
> > @@ -418,6 +418,11 @@ struct_va_format(void)
> >  {
> >  }
> >  
> > +static void __init
> > +struct_rtc_time(void)
> > +{
> > +}
> > +
> >  static void __init
> >  struct_clk(void)
> >  {
> > @@ -529,6 +534,7 @@ test_pointer(void)
> >  	uuid();
> >  	dentry();
> >  	struct_va_format();
> > +	struct_rtc_time();
> >  	struct_clk();
> >  	bitmap();
> >  	netdev_features();
> > diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> > index 37a54a6dd594..8455cbda8d6c 100644
> > --- a/lib/vsprintf.c
> > +++ b/lib/vsprintf.c
> > @@ -30,6 +30,7 @@
> >  #include <linux/ioport.h>
> >  #include <linux/dcache.h>
> >  #include <linux/cred.h>
> > +#include <linux/rtc.h>
> >  #include <linux/uuid.h>
> >  #include <linux/of.h>
> >  #include <net/addrconf.h>
> > @@ -822,6 +823,20 @@ static const struct printf_spec default_dec_spec = {
> >  	.precision = -1,
> >  };
> >  
> > +static const struct printf_spec default_dec02_spec = {
> > +	.base = 10,
> > +	.field_width = 2,
> > +	.precision = -1,
> > +	.flags = ZEROPAD,
> > +};
> > +
> > +static const struct printf_spec default_dec04_spec = {
> > +	.base = 10,
> > +	.field_width = 4,
> > +	.precision = -1,
> > +	.flags = ZEROPAD,
> > +};
> > +
> >  static noinline_for_stack
> >  char *resource_string(char *buf, char *end, struct resource *res,
> >  		      struct printf_spec spec, const char *fmt)
> > @@ -1549,6 +1564,127 @@ char *address_val(char *buf, char *end, const void *addr, const char *fmt)
> >  	return special_hex_number(buf, end, num, size);
> >  }
> >  
> > +static noinline_for_stack
> > +char *date_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r)
> > +{
> > +	int year = tm->tm_year + (r ? 0 : 1900);
> > +	int mon = tm->tm_mon + (r ? 0 : 1);
> > +
> > +	if (unlikely(v && (unsigned int)tm->tm_year > 200))
> > +		buf = string(buf, end, "****", default_str_spec);
> 
> I think you should drop the validation option. This is only used in a
> deprecated ABI and is mostly wrong as many RTCs will still be valid
> after 2100.
> 
> > +	else
> > +		buf = number(buf, end, year, default_dec04_spec);
> > +
> > +	if (buf < end)
> > +		*buf = '-';
> > +	buf++;
> > +
> > +	if (unlikely(v && (unsigned int)tm->tm_mon > 11))
> > +		buf = string(buf, end, "**", default_str_spec);
> > +	else
> > +		buf = number(buf, end, mon, default_dec02_spec);
> > +
> > +	if (buf < end)
> > +		*buf = '-';
> > +	buf++;
> > +
> > +	if (unlikely(v && (unsigned int)tm->tm_mday > 31))
> > +		buf = string(buf, end, "**", default_str_spec);
> 
> Same here, this doesn't protect February, April, June, September and
> November. There is one RTC that think that 31st of November is valid.
> 
> > +	else
> > +		buf = number(buf, end, tm->tm_mday, default_dec02_spec);
> > +
> > +	return buf;
> > +}
> > +
> > +static noinline_for_stack
> > +char *time_str(char *buf, char *end, const struct rtc_time *tm, bool v, bool r)
> > +{
> > +	if (unlikely(v && (unsigned int)tm->tm_hour > 24))
> > +		buf = string(buf, end, "**", default_str_spec);
> > +	else
> > +		buf = number(buf, end, tm->tm_hour, default_dec02_spec);
> > +
> > +	if (buf < end)
> > +		*buf = ':';
> > +	buf++;
> > +
> > +	if (unlikely(v && (unsigned int)tm->tm_min > 59))
> > +		buf = string(buf, end, "**", default_str_spec);
> > +	else
> > +		buf = number(buf, end, tm->tm_min, default_dec02_spec);
> > +
> > +	if (buf < end)
> > +		*buf = ':';
> > +	buf++;
> > +
> > +	if (unlikely(v && (unsigned int)tm->tm_sec > 59))
> > +		buf = string(buf, end, "**", default_str_spec);
> 
> Some RTCs will consider 60 valid. So, really, instead of fixing all of
> those, I'd just get rid of the validation option.
> 
> > +	else
> > +		buf = number(buf, end, tm->tm_sec, default_dec02_spec);
> > +
> > +	return buf;
> > +}
> > +
> > +static noinline_for_stack
> > +char *rtc_str(char *buf, char *end, const struct rtc_time *tm, const char *fmt)
> > +{
> > +	bool have_t = true, have_d = true;
> > +	bool validate = false;
> > +	bool raw = false;
> > +	int count = 2;
> > +	bool found;
> > +
> > +	switch (fmt[count]) {
> > +	case 'd':
> > +		have_t = false;
> > +		count++;
> > +		break;
> > +	case 't':
> > +		have_d = false;
> > +		count++;
> > +		break;
> > +	}
> > +
> > +	found = true;
> > +	do {
> > +		switch (fmt[count++]) {
> > +		case 'r':
> > +			raw = true;
> > +			break;
> > +		case 'v':
> > +			validate = true;
> > +			break;
> > +		default:
> > +			found = false;
> > +			break;
> > +		}
> > +	} while (found);
> > +
> > +	if (have_d)
> > +		buf = date_str(buf, end, tm, validate, raw);
> > +	if (have_d && have_t) {
> > +		if (buf < end)
> > +			*buf = ' ';
> 
> I'd go for ISO 8601 and use a 'T' here.
> 
> > +		buf++;
> > +	}
> > +	if (have_t)
> > +		buf = time_str(buf, end, tm, validate, raw);
> > +
> > +	return buf;
> > +}
> > +
> > +static noinline_for_stack
> > +char *timeanddate(char *buf, char *end, void *ptr, struct printf_spec spec,
> > +		  const char *fmt)
> > +{
> > +	switch (fmt[1]) {
> > +	case 'R':
> > +		return rtc_str(buf, end, (const struct rtc_time *)ptr, fmt);
> > +	default:
> > +		return ptr_to_id(buf, end, ptr, spec);
> > +	}
> > +}
> > +
> >  static noinline_for_stack
> >  char *clock(char *buf, char *end, struct clk *clk, struct printf_spec spec,
> >  	    const char *fmt)
> > @@ -1828,6 +1964,8 @@ char *device_node_string(char *buf, char *end, struct device_node *dn,
> >   * - 'd[234]' For a dentry name (optionally 2-4 last components)
> >   * - 'D[234]' Same as 'd' but for a struct file
> >   * - 'g' For block_device name (gendisk + partition number)
> > + * - 't[R][dt][rv]' For time and date as represented:
> > + *      R    struct rtc_time
> >   * - 'C' For a clock, it prints the name (Common Clock Framework) or address
> >   *       (legacy clock framework) of the clock
> >   * - 'Cn' For a clock, it prints the name (Common Clock Framework) or address
> > @@ -1952,6 +2090,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
> >  		return address_val(buf, end, ptr, fmt);
> >  	case 'd':
> >  		return dentry_name(buf, end, ptr, spec, fmt);
> > +	case 't':
> > +		return timeanddate(buf, end, ptr, spec, fmt);
> >  	case 'C':
> >  		return clock(buf, end, ptr, spec, fmt);
> >  	case 'D':
> > -- 
> > 2.19.1
> > 
> 
> -- 
> Alexandre Belloni, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2018-11-28 18:16 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-13 17:17 [PATCH v3 00/20] lib, rtc: Print rtc_time via %ptR[dt][rv] Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 01/20] lib/vsprintf: Print time and date in human readable format via %pt Andy Shevchenko
2018-11-13 17:35   ` Joe Perches
2018-11-13 18:11     ` Andy Shevchenko
2018-11-20 22:27   ` Alexandre Belloni
2018-11-28 18:16     ` Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 02/20] rtc: Switch to use %ptR Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 03/20] rtc: at91rm9200: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 04/20] rtc: at91sam9: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 05/20] rtc: m41t80: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 06/20] rtc: m48t59: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 07/20] rtc: mcp795: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 08/20] rtc: pcf50633: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 09/20] rtc: pic32: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 10/20] rtc: pm8xxx: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 11/20] rtc: puv3: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 12/20] rtc: rk808: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 13/20] rtc: rx6110: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 14/20] rtc: rx8025: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 15/20] rtc: s3c: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 16/20] rtc: s5m: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 17/20] rtc: tegra: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 18/20] Input: hp_sdc_rtc - " Andy Shevchenko
2018-11-13 18:07   ` Dmitry Torokhov
2018-11-13 17:17 ` [PATCH v3 19/20] mk68/mac: " Andy Shevchenko
2018-11-13 17:17 ` [PATCH v3 20/20] PM: " Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).