1/*
2 * BK Id: SCCS/s.m48t35.h 1.8 10/16/01 15:58:42 trini
3 */
4/*
5 *  Registers for the SGS-Thomson M48T35 Timekeeper RAM chip
6 *  and
7 *  Registers for the SGS-Thomson M48T37 Timekeeper RAM chip
8 *  The 37 is the 35 plus alarm and century thus the offsets
9 *  are shifted by the extra registers.
10 */
11
12#ifndef __PPC_M48T35_H
13#define __PPC_M48T35_H
14
15/* RTC offsets */
16#define M48T35_RTC_FLAGS	(-8)	/* the negative regs are really T37 only */
17#define M48T35_RTC_CENTURY	(-7)
18#define M48T35_RTC_AL_SEC	(-6)
19#define M48T35_RTC_AL_MIN	(-5)
20#define M48T35_RTC_AL_HRS	(-4)
21#define M48T35_RTC_AL_DOM	(-3)
22#define M48T35_RTC_INTERRUPT	(-2)
23#define M48T35_RTC_WATCHDOG	(-1)
24#define M48T35_RTC_CONTROL	0	/* T35 starts here */
25#define M48T35_RTC_SECONDS	1
26#define M48T35_RTC_MINUTES	2
27#define M48T35_RTC_HOURS	3
28#define M48T35_RTC_DAY		4
29#define M48T35_RTC_DOM		5
30#define M48T35_RTC_MONTH	6
31#define M48T35_RTC_YEAR		7
32
33/* this way help us know which bits go with which regs */
34#define M48T35_RTC_FLAGS_BL           0x10
35#define M48T35_RTC_FLAGS_AF           0x40
36#define M48T35_RTC_FLAGS_WDF          0x80
37
38#define M48T35_RTC_INTERRUPT_AFE       0x80
39#define M48T35_RTC_INTERRUPT_ABE       0x20
40#define M48T35_RTC_INTERRUPT_ALL       (M48T35_RTC_INTERRUPT_AFE|M48T35_RTC_INTERRUPT_ABE)
41
42#define M48T35_RTC_WATCHDOG_RB         0x03
43#define M48T35_RTC_WATCHDOG_BMB        0x7c
44#define M48T35_RTC_WATCHDOG_WDS        0x80
45#define M48T35_RTC_WATCHDOG_ALL        (M48T35_RTC_WATCHDOG_RB|M48T35_RTC_WATCHDOG_BMB|M48T35_RTC_W
46
47#define M48T35_RTC_CONTROL_WRITE       0x80
48#define M48T35_RTC_CONTROL_READ        0x40
49#define M48T35_RTC_CONTROL_CAL_SIGN    0x20
50#define M48T35_RTC_CONTROL_CAL_VALUE   0x1f
51#define M48T35_RTC_CONTROL_LOCKED      (M48T35_RTC_WRITE|M48T35_RTC_READ)
52#define M48T35_RTC_CONTROL_CALIBRATION (M48T35_RTC_CONTROL_CAL_SIGN|M48T35_RTC_CONTROL_CAL_VALUE)
53
54#define M48T35_RTC_SECONDS_SEC_1       0x0f
55#define M48T35_RTC_SECONDS_SEC_10      0x70
56#define M48T35_RTC_SECONDS_ST          0x80
57#define M48T35_RTC_SECONDS_SEC_ALL     (M48T35_RTC_SECONDS_SEC_1|M48T35_RTC_SECONDS_SEC_10)
58
59#define M48T35_RTC_MINUTES_MIN_1       0x0f
60#define M48T35_RTC_MINUTES_MIN_10      0x70
61#define M48T35_RTC_MINUTES_MIN_ALL     (M48T35_RTC_MINUTES_MIN_1|M48T35_RTC_MINUTES_MIN_10)
62
63#define M48T35_RTC_HOURS_HRS_1         0x0f
64#define M48T35_RTC_HOURS_HRS_10        0x30
65#define M48T35_RTC_HOURS_HRS_ALL       (M48T35_RTC_HOURS_HRS_1|M48T35_RTC_HOURS_HRS_10)
66
67#define M48T35_RTC_DAY_DAY_1           0x03
68#define M48T35_RTC_DAY_FT              0x40
69
70#define M48T35_RTC_ALARM_OFF           0x00
71#define M48T35_RTC_WATCHDOG_OFF        0x00
72
73
74/* legacy */
75#define M48T35_RTC_SET      0x80
76#define M48T35_RTC_STOPPED  0x80
77#define M48T35_RTC_READ     0x40
78
79
80/* read/write conversions */
81#ifndef BCD_TO_BIN
82#define BCD_TO_BIN(x)   ((x)=((x)&15) + ((x)>>4)*10)
83#endif
84
85#ifndef BIN_TO_BCD
86#define BIN_TO_BCD(x)   ((x)=(((x)/10)<<4) + (x)%10)
87#endif
88
89#endif
90