1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright 2013-2016 Freescale Semiconductor Inc.
4  * Copyright 2016-2018 NXP
5  */
6 
7 #ifndef __FSL_DPRTC_H
8 #define __FSL_DPRTC_H
9 
10 /* Data Path Real Time Counter API
11  * Contains initialization APIs and runtime control APIs for RTC
12  */
13 
14 struct fsl_mc_io;
15 
16 /**
17  * Number of irq's
18  */
19 #define DPRTC_MAX_IRQ_NUM			1
20 #define DPRTC_IRQ_INDEX				0
21 
22 /**
23  * Interrupt event masks:
24  */
25 
26 /**
27  * Interrupt event mask indicating alarm event had occurred
28  */
29 #define DPRTC_EVENT_ALARM			0x40000000
30 /**
31  * Interrupt event mask indicating periodic pulse event had occurred
32  */
33 #define DPRTC_EVENT_PPS				0x08000000
34 
35 int dprtc_open(struct fsl_mc_io *mc_io,
36 	       u32 cmd_flags,
37 	       int dprtc_id,
38 	       u16 *token);
39 
40 int dprtc_close(struct fsl_mc_io *mc_io,
41 		u32 cmd_flags,
42 		u16 token);
43 
44 /**
45  * struct dprtc_cfg - Structure representing DPRTC configuration
46  * @options:	place holder
47  */
48 struct dprtc_cfg {
49 	u32 options;
50 };
51 
52 int dprtc_create(struct fsl_mc_io *mc_io,
53 		 u16 dprc_token,
54 		 u32 cmd_flags,
55 		 const struct dprtc_cfg *cfg,
56 		 u32 *obj_id);
57 
58 int dprtc_destroy(struct fsl_mc_io *mc_io,
59 		  u16 dprc_token,
60 		  u32 cmd_flags,
61 		  u32 object_id);
62 
63 int dprtc_enable(struct fsl_mc_io *mc_io,
64 		 u32 cmd_flags,
65 		 u16 token);
66 
67 int dprtc_disable(struct fsl_mc_io *mc_io,
68 		  u32 cmd_flags,
69 		  u16 token);
70 
71 int dprtc_is_enabled(struct fsl_mc_io *mc_io,
72 		     u32 cmd_flags,
73 		     u16 token,
74 		     int *en);
75 
76 int dprtc_reset(struct fsl_mc_io *mc_io,
77 		u32 cmd_flags,
78 		u16 token);
79 
80 int dprtc_set_clock_offset(struct fsl_mc_io *mc_io,
81 			   u32 cmd_flags,
82 			   u16 token,
83 			   int64_t offset);
84 
85 int dprtc_set_freq_compensation(struct fsl_mc_io *mc_io,
86 				u32 cmd_flags,
87 				u16 token,
88 				u32 freq_compensation);
89 
90 int dprtc_get_freq_compensation(struct fsl_mc_io *mc_io,
91 				u32 cmd_flags,
92 				u16 token,
93 				u32 *freq_compensation);
94 
95 int dprtc_get_time(struct fsl_mc_io *mc_io,
96 		   u32 cmd_flags,
97 		   u16 token,
98 		   uint64_t *time);
99 
100 int dprtc_set_time(struct fsl_mc_io *mc_io,
101 		   u32 cmd_flags,
102 		   u16 token,
103 		   uint64_t time);
104 
105 int dprtc_set_alarm(struct fsl_mc_io *mc_io,
106 		    u32 cmd_flags,
107 		    u16 token,
108 		    uint64_t time);
109 
110 int dprtc_set_irq_enable(struct fsl_mc_io *mc_io,
111 			 u32 cmd_flags,
112 			 u16 token,
113 			 u8 irq_index,
114 			 u8 en);
115 
116 int dprtc_get_irq_enable(struct fsl_mc_io *mc_io,
117 			 u32 cmd_flags,
118 			 u16 token,
119 			 u8 irq_index,
120 			 u8 *en);
121 
122 int dprtc_set_irq_mask(struct fsl_mc_io *mc_io,
123 		       u32 cmd_flags,
124 		       u16 token,
125 		       u8 irq_index,
126 		       u32 mask);
127 
128 int dprtc_get_irq_mask(struct fsl_mc_io *mc_io,
129 		       u32 cmd_flags,
130 		       u16 token,
131 		       u8 irq_index,
132 		       u32 *mask);
133 
134 int dprtc_get_irq_status(struct fsl_mc_io *mc_io,
135 			 u32 cmd_flags,
136 			 u16 token,
137 			 u8 irq_index,
138 			 u32 *status);
139 
140 int dprtc_clear_irq_status(struct fsl_mc_io *mc_io,
141 			   u32 cmd_flags,
142 			   u16 token,
143 			   u8 irq_index,
144 			   u32 status);
145 
146 /**
147  * struct dprtc_attr - Structure representing DPRTC attributes
148  * @id:		DPRTC object ID
149  */
150 struct dprtc_attr {
151 	int id;
152 };
153 
154 int dprtc_get_attributes(struct fsl_mc_io *mc_io,
155 			 u32 cmd_flags,
156 			 u16 token,
157 			 struct dprtc_attr *attr);
158 
159 int dprtc_get_api_version(struct fsl_mc_io *mc_io,
160 			  u32 cmd_flags,
161 			  u16 *major_ver,
162 			  u16 *minor_ver);
163 
164 #endif /* __FSL_DPRTC_H */
165