diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-18 12:10:45 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-18 12:10:45 -0800 |
commit | c38dec71664dadb15094151f53886abb69f8f9e6 (patch) | |
tree | afd6aaa893cd4d7d740679826c7f0c252764e4c8 /drivers/rtc/rtc-efi.c | |
parent | d43fb9f3c5dff281dd72bea5cd2e91386fdc33a8 (diff) | |
parent | 079062b28fb4c58e30d024fdf974e00de53158fd (diff) |
Merge tag 'rtc-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux
Pull RTC updates from Alexandre Belloni:
"Core:
- fix module reference count in rtc-proc
- Replace simple_strtoul by kstrtoul
New driver:
- Epson RX8010SJ
Subsystem wide cleanups:
- use %ph for short hex dumps
- constify *_chip_ops structures
Drivers:
- abx80x: Microcrystal rv1805 support, alarm support
- cmos: prevent kernel warning on IRQ flags mismatch
- s5m: various cleanups
- rv8803: rx8900 compatibility, small error path fix
- sunxi: various cleanups
- lpc32xx: remove irq > NR_IRQS check from probe()
- imxdi: fix spelling mistake in warning message
- ds1685: don't try to micromanage sysfs output size
- da9063: avoid writing undefined data to rtc
- gemini: Remove unnecessary platform_set_drvdata()
- efi: add efi_procfs in efi_rtc_ops
- pcf8523: refuse to write dates later than 2099"
* tag 'rtc-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (24 commits)
rtc: cmos: prevent kernel warning on IRQ flags mismatch
rtc: rtc-ds2404: constify ds2404_chip_ops structures
rtc: s5m: Make register configuration per S2MPS device to remove exceptions
rtc: s5m: Add separate field for storing auto-cleared mask in register config
rtc: s5m: Cleanup by removing useless 'rtc' prefix from fields
rtc: Replace simple_strtoul by kstrtoul
rtc: abx80x: add alarm support
rtc: abx80x: Add Microcrystal rv1805 support
rtc: v3020: constify v3020_chip_ops structures
rtc: rv8803: Extend compatibility with the rx8900
rtc: rv8803: fix handling return value of i2c_smbus_read_byte_data
rtc: Add Epson RX8010SJ RTC driver
rtc: lpc32xx: remove irq > NR_IRQS check from probe()
rtc: imxdi: fix spelling mistake in warning message
rtc: ds1685: don't try to micromanage sysfs output size
rtc: use %ph for short hex dumps
rtc: da9063: avoid writing undefined data to rtc
rtc: sunxi: use of_device_get_match_data
rtc: sunxi: constify the data_year_param structure
rtc: sunxi: fix signedness issues
...
Diffstat (limited to 'drivers/rtc/rtc-efi.c')
-rw-r--r-- | drivers/rtc/rtc-efi.c | 66 |
1 files changed, 62 insertions, 4 deletions
diff --git a/drivers/rtc/rtc-efi.c b/drivers/rtc/rtc-efi.c index 3806961b4348..96d38609d803 100644 --- a/drivers/rtc/rtc-efi.c +++ b/drivers/rtc/rtc-efi.c @@ -191,11 +191,69 @@ static int efi_set_time(struct device *dev, struct rtc_time *tm) return status == EFI_SUCCESS ? 0 : -EINVAL; } +static int efi_procfs(struct device *dev, struct seq_file *seq) +{ + efi_time_t eft, alm; + efi_time_cap_t cap; + efi_bool_t enabled, pending; + + memset(&eft, 0, sizeof(eft)); + memset(&alm, 0, sizeof(alm)); + memset(&cap, 0, sizeof(cap)); + + efi.get_time(&eft, &cap); + efi.get_wakeup_time(&enabled, &pending, &alm); + + seq_printf(seq, + "Time\t\t: %u:%u:%u.%09u\n" + "Date\t\t: %u-%u-%u\n" + "Daylight\t: %u\n", + eft.hour, eft.minute, eft.second, eft.nanosecond, + eft.year, eft.month, eft.day, + eft.daylight); + + if (eft.timezone == EFI_UNSPECIFIED_TIMEZONE) + seq_puts(seq, "Timezone\t: unspecified\n"); + else + /* XXX fixme: convert to string? */ + seq_printf(seq, "Timezone\t: %u\n", eft.timezone); + + seq_printf(seq, + "Alarm Time\t: %u:%u:%u.%09u\n" + "Alarm Date\t: %u-%u-%u\n" + "Alarm Daylight\t: %u\n" + "Enabled\t\t: %s\n" + "Pending\t\t: %s\n", + alm.hour, alm.minute, alm.second, alm.nanosecond, + alm.year, alm.month, alm.day, + alm.daylight, + enabled == 1 ? "yes" : "no", + pending == 1 ? "yes" : "no"); + + if (eft.timezone == EFI_UNSPECIFIED_TIMEZONE) + seq_puts(seq, "Timezone\t: unspecified\n"); + else + /* XXX fixme: convert to string? */ + seq_printf(seq, "Timezone\t: %u\n", alm.timezone); + + /* + * now prints the capabilities + */ + seq_printf(seq, + "Resolution\t: %u\n" + "Accuracy\t: %u\n" + "SetstoZero\t: %u\n", + cap.resolution, cap.accuracy, cap.sets_to_zero); + + return 0; +} + static const struct rtc_class_ops efi_rtc_ops = { - .read_time = efi_read_time, - .set_time = efi_set_time, - .read_alarm = efi_read_alarm, - .set_alarm = efi_set_alarm, + .read_time = efi_read_time, + .set_time = efi_set_time, + .read_alarm = efi_read_alarm, + .set_alarm = efi_set_alarm, + .proc = efi_procfs, }; static int __init efi_rtc_probe(struct platform_device *dev) |