| 1 | |
| 2 | * Copyright Torsten Duwe <[email protected]> 1993
|
| 3 | * derived from Data Sheet, Copyright Motorola 1984 (!).
|
| 4 | * It was written to be part of the Linux operating system.
|
| 5 |
|
| 6 | |
| 7 | * in terms of the GNU Library General Public License, Version 2 or later,
|
| 8 | * at your option.
|
| 9 |
|
| 10 |
|
| 11 | #ifndef _MC146818RTC_H
|
| 12 | #define _MC146818RTC_H
|
| 13 |
|
| 14 | #include <asm/io.h>
|
| 15 | #include <linux/rtc.h>
|
| 16 | #include <asm/mc146818rtc.h>
|
| 17 | #include <linux/bcd.h>
|
| 18 | #include <linux/delay.h>
|
| 19 | #include <linux/pm-trace.h>
|
| 20 |
|
| 21 | #ifdef __KERNEL__
|
| 22 | #include <linux/spinlock.h>
|
| 23 | extern spinlock_t rtc_lock;
|
| 24 |
|
| 25 | |
| 26 | * than 24 hours in the future; or dates that include a century code.
|
| 27 | * This platform_data structure can pass this information to the driver.
|
| 28 | *
|
| 29 | * Also, some platforms need suspend()/resume() hooks to kick in special
|
| 30 | * handling of wake alarms, e.g. activating ACPI BIOS hooks or setting up
|
| 31 | * a separate wakeup alarm used by some almost-clone chips.
|
| 32 |
|
| 33 | struct cmos_rtc_board_info {
|
| 34 | void (*wake_on)(struct device *dev);
|
| 35 | void (*wake_off)(struct device *dev);
|
| 36 |
|
| 37 | u32 flags;
|
| 38 | #define CMOS_RTC_FLAGS_NOFREQ (1 << 0)
|
| 39 | int address_space;
|
| 40 |
|
| 41 | u8 rtc_day_alarm;
|
| 42 | u8 rtc_mon_alarm;
|
| 43 | u8 rtc_century;
|
| 44 | };
|
| 45 | #endif
|
| 46 |
|
| 47 | |
| 48 | * register summary
|
| 49 | *********************************************************************
|
| 50 | #define RTC_SECONDS 0
|
| 51 | #define RTC_SECONDS_ALARM 1
|
| 52 | #define RTC_MINUTES 2
|
| 53 | #define RTC_MINUTES_ALARM 3
|
| 54 | #define RTC_HOURS 4
|
| 55 | #define RTC_HOURS_ALARM 5
|
| 56 |
|
| 57 | # define RTC_ALARM_DONT_CARE 0xC0
|
| 58 |
|
| 59 | #define RTC_DAY_OF_WEEK 6
|
| 60 | #define RTC_DAY_OF_MONTH 7
|
| 61 | #define RTC_MONTH 8
|
| 62 | #define RTC_YEAR 9
|
| 63 |
|
| 64 | |
| 65 |
|
| 66 | #define RTC_REG_A 10
|
| 67 | #define RTC_REG_B 11
|
| 68 | #define RTC_REG_C 12
|
| 69 | #define RTC_REG_D 13
|
| 70 |
|
| 71 | |
| 72 | * register details
|
| 73 | *********************************************************************
|
| 74 | #define RTC_FREQ_SELECT RTC_REG_A
|
| 75 |
|
| 76 | |
| 77 | * reset after update (may take 1.984ms @ 32768Hz RefClock) is complete,
|
| 78 | * totalling to a max high interval of 2.228 ms.
|
| 79 |
|
| 80 | # define RTC_UIP 0x80
|
| 81 | # define RTC_DIV_CTL 0x70
|
| 82 |
|
| 83 | # define RTC_REF_CLCK_4MHZ 0x00
|
| 84 | # define RTC_REF_CLCK_1MHZ 0x10
|
| 85 | # define RTC_REF_CLCK_32KHZ 0x20
|
| 86 |
|
| 87 | # define RTC_DIV_RESET1 0x60
|
| 88 | # define RTC_DIV_RESET2 0x70
|
| 89 |
|
| 90 | # define RTC_AMD_BANK_SELECT 0x10
|
| 91 |
|
| 92 | # define RTC_RATE_SELECT 0x0F
|
| 93 |
|
| 94 |
|
| 95 | #define RTC_CONTROL RTC_REG_B
|
| 96 | # define RTC_SET 0x80
|
| 97 | # define RTC_PIE 0x40
|
| 98 | # define RTC_AIE 0x20
|
| 99 | # define RTC_UIE 0x10
|
| 100 | # define RTC_SQWE 0x08
|
| 101 | # define RTC_DM_BINARY 0x04
|
| 102 | # define RTC_24H 0x02
|
| 103 | # define RTC_DST_EN 0x01
|
| 104 |
|
| 105 |
|
| 106 | #define RTC_INTR_FLAGS RTC_REG_C
|
| 107 |
|
| 108 | # define RTC_IRQF 0x80
|
| 109 | # define RTC_PF 0x40
|
| 110 | # define RTC_AF 0x20
|
| 111 | # define RTC_UF 0x10
|
| 112 |
|
| 113 |
|
| 114 | #define RTC_VALID RTC_REG_D
|
| 115 | # define RTC_VRT 0x80
|
| 116 |
|
| 117 |
|
| 118 | #ifndef ARCH_RTC_LOCATION
|
| 119 |
|
| 120 | #define RTC_IO_EXTENT 0x8
|
| 121 | #define RTC_IO_EXTENT_USED 0x2
|
| 122 | #define RTC_IOMAPPED 1
|
| 123 |
|
| 124 | #else
|
| 125 | #define RTC_IO_EXTENT_USED RTC_IO_EXTENT
|
| 126 | #endif
|
| 127 |
|
| 128 | bool mc146818_does_rtc_work(void);
|
| 129 | int mc146818_get_time(struct rtc_time *time, int timeout);
|
| 130 | int mc146818_set_time(struct rtc_time *time);
|
| 131 |
|
| 132 | bool mc146818_avoid_UIP(void (*callback)(unsigned char seconds, void *param),
|
| 133 | int timeout,
|
| 134 | void *param);
|
| 135 |
|
| 136 | #endif
|