xref: /linux/drivers/dpll/zl3073x/regs.h (revision 8be4d31cb8aaeea27bde4b7ddb26e28a89062ebf)
12df8e64eSIvan Vecera /* SPDX-License-Identifier: GPL-2.0-only */
22df8e64eSIvan Vecera 
32df8e64eSIvan Vecera #ifndef _ZL3073X_REGS_H
42df8e64eSIvan Vecera #define _ZL3073X_REGS_H
52df8e64eSIvan Vecera 
62df8e64eSIvan Vecera #include <linux/bitfield.h>
72df8e64eSIvan Vecera #include <linux/bits.h>
82df8e64eSIvan Vecera 
92df8e64eSIvan Vecera /*
102df8e64eSIvan Vecera  * Register address structure:
112df8e64eSIvan Vecera  * ===========================
122df8e64eSIvan Vecera  *  25        19 18  16 15     7 6           0
132df8e64eSIvan Vecera  * +------------------------------------------+
142df8e64eSIvan Vecera  * | max_offset | size |  page  | page_offset |
152df8e64eSIvan Vecera  * +------------------------------------------+
162df8e64eSIvan Vecera  *
172df8e64eSIvan Vecera  * page_offset ... <0x00..0x7F>
182df8e64eSIvan Vecera  * page .......... HW page number
192df8e64eSIvan Vecera  * size .......... register byte size (1, 2, 4 or 6)
202df8e64eSIvan Vecera  * max_offset .... maximal offset for indexed registers
212df8e64eSIvan Vecera  *                 (for non-indexed regs max_offset == page_offset)
222df8e64eSIvan Vecera  */
232df8e64eSIvan Vecera 
242df8e64eSIvan Vecera #define ZL_REG_OFFSET_MASK	GENMASK(6, 0)
252df8e64eSIvan Vecera #define ZL_REG_PAGE_MASK	GENMASK(15, 7)
262df8e64eSIvan Vecera #define ZL_REG_SIZE_MASK	GENMASK(18, 16)
272df8e64eSIvan Vecera #define ZL_REG_MAX_OFFSET_MASK	GENMASK(25, 19)
282df8e64eSIvan Vecera #define ZL_REG_ADDR_MASK	GENMASK(15, 0)
292df8e64eSIvan Vecera 
302df8e64eSIvan Vecera #define ZL_REG_OFFSET(_reg)	FIELD_GET(ZL_REG_OFFSET_MASK, _reg)
312df8e64eSIvan Vecera #define ZL_REG_PAGE(_reg)	FIELD_GET(ZL_REG_PAGE_MASK, _reg)
322df8e64eSIvan Vecera #define ZL_REG_MAX_OFFSET(_reg)	FIELD_GET(ZL_REG_MAX_OFFSET_MASK, _reg)
332df8e64eSIvan Vecera #define ZL_REG_SIZE(_reg)	FIELD_GET(ZL_REG_SIZE_MASK, _reg)
342df8e64eSIvan Vecera #define ZL_REG_ADDR(_reg)	FIELD_GET(ZL_REG_ADDR_MASK, _reg)
352df8e64eSIvan Vecera 
362df8e64eSIvan Vecera /**
372df8e64eSIvan Vecera  * ZL_REG_IDX - define indexed register
382df8e64eSIvan Vecera  * @_idx: index of register to access
392df8e64eSIvan Vecera  * @_page: register page
402df8e64eSIvan Vecera  * @_offset: register offset in page
412df8e64eSIvan Vecera  * @_size: register byte size (1, 2, 4 or 6)
422df8e64eSIvan Vecera  * @_items: number of register indices
432df8e64eSIvan Vecera  * @_stride: stride between items in bytes
442df8e64eSIvan Vecera  *
452df8e64eSIvan Vecera  * All parameters except @_idx should be constant.
462df8e64eSIvan Vecera  */
472df8e64eSIvan Vecera #define ZL_REG_IDX(_idx, _page, _offset, _size, _items, _stride)	\
482df8e64eSIvan Vecera 	(FIELD_PREP(ZL_REG_OFFSET_MASK,					\
492df8e64eSIvan Vecera 		    (_offset) + (_idx) * (_stride))		|	\
502df8e64eSIvan Vecera 	 FIELD_PREP_CONST(ZL_REG_PAGE_MASK, _page)		|	\
512df8e64eSIvan Vecera 	 FIELD_PREP_CONST(ZL_REG_SIZE_MASK, _size)		|	\
522df8e64eSIvan Vecera 	 FIELD_PREP_CONST(ZL_REG_MAX_OFFSET_MASK,			\
532df8e64eSIvan Vecera 			  (_offset) + ((_items) - 1) * (_stride)))
542df8e64eSIvan Vecera 
552df8e64eSIvan Vecera /**
562df8e64eSIvan Vecera  * ZL_REG - define simple (non-indexed) register
572df8e64eSIvan Vecera  * @_page: register page
582df8e64eSIvan Vecera  * @_offset: register offset in page
592df8e64eSIvan Vecera  * @_size: register byte size (1, 2, 4 or 6)
602df8e64eSIvan Vecera  *
612df8e64eSIvan Vecera  * All parameters should be constant.
622df8e64eSIvan Vecera  */
632df8e64eSIvan Vecera #define ZL_REG(_page, _offset, _size)					\
642df8e64eSIvan Vecera 	ZL_REG_IDX(0, _page, _offset, _size, 1, 0)
652df8e64eSIvan Vecera 
662df8e64eSIvan Vecera /**************************
672df8e64eSIvan Vecera  * Register Page 0, General
682df8e64eSIvan Vecera  **************************/
692df8e64eSIvan Vecera 
702df8e64eSIvan Vecera #define ZL_REG_ID				ZL_REG(0, 0x01, 2)
712df8e64eSIvan Vecera #define ZL_REG_REVISION				ZL_REG(0, 0x03, 2)
722df8e64eSIvan Vecera #define ZL_REG_FW_VER				ZL_REG(0, 0x05, 2)
732df8e64eSIvan Vecera #define ZL_REG_CUSTOM_CONFIG_VER		ZL_REG(0, 0x07, 4)
742df8e64eSIvan Vecera 
7575a71eccSIvan Vecera /*************************
7675a71eccSIvan Vecera  * Register Page 2, Status
7775a71eccSIvan Vecera  *************************/
7875a71eccSIvan Vecera 
7975a71eccSIvan Vecera #define ZL_REG_REF_MON_STATUS(_idx)					\
8075a71eccSIvan Vecera 	ZL_REG_IDX(_idx, 2, 0x02, 1, ZL3073X_NUM_REFS, 1)
8175a71eccSIvan Vecera #define ZL_REF_MON_STATUS_OK			0 /* all bits zeroed */
8275a71eccSIvan Vecera 
8375a71eccSIvan Vecera #define ZL_REG_DPLL_MON_STATUS(_idx)					\
8475a71eccSIvan Vecera 	ZL_REG_IDX(_idx, 2, 0x10, 1, ZL3073X_MAX_CHANNELS, 1)
8575a71eccSIvan Vecera #define ZL_DPLL_MON_STATUS_STATE		GENMASK(1, 0)
8675a71eccSIvan Vecera #define ZL_DPLL_MON_STATUS_STATE_ACQUIRING	0
8775a71eccSIvan Vecera #define ZL_DPLL_MON_STATUS_STATE_LOCK		1
8875a71eccSIvan Vecera #define ZL_DPLL_MON_STATUS_STATE_HOLDOVER	2
8975a71eccSIvan Vecera #define ZL_DPLL_MON_STATUS_HO_READY		BIT(2)
9075a71eccSIvan Vecera 
9175a71eccSIvan Vecera #define ZL_REG_DPLL_REFSEL_STATUS(_idx)					\
9275a71eccSIvan Vecera 	ZL_REG_IDX(_idx, 2, 0x30, 1, ZL3073X_MAX_CHANNELS, 1)
9375a71eccSIvan Vecera #define ZL_DPLL_REFSEL_STATUS_REFSEL		GENMASK(3, 0)
9475a71eccSIvan Vecera #define ZL_DPLL_REFSEL_STATUS_STATE		GENMASK(6, 4)
9575a71eccSIvan Vecera #define ZL_DPLL_REFSEL_STATUS_STATE_LOCK	4
9675a71eccSIvan Vecera 
97*904c99eaSIvan Vecera #define ZL_REG_REF_FREQ(_idx)						\
98*904c99eaSIvan Vecera 	ZL_REG_IDX(_idx, 2, 0x44, 4, ZL3073X_NUM_REFS, 4)
99*904c99eaSIvan Vecera 
10086ed4cd5SIvan Vecera /**********************
10186ed4cd5SIvan Vecera  * Register Page 4, Ref
10286ed4cd5SIvan Vecera  **********************/
10386ed4cd5SIvan Vecera 
10486ed4cd5SIvan Vecera #define ZL_REG_REF_PHASE_ERR_READ_RQST		ZL_REG(4, 0x0f, 1)
10586ed4cd5SIvan Vecera #define ZL_REF_PHASE_ERR_READ_RQST_RD		BIT(0)
10686ed4cd5SIvan Vecera 
107*904c99eaSIvan Vecera #define ZL_REG_REF_FREQ_MEAS_CTRL		ZL_REG(4, 0x1c, 1)
108*904c99eaSIvan Vecera #define ZL_REF_FREQ_MEAS_CTRL			GENMASK(1, 0)
109*904c99eaSIvan Vecera #define ZL_REF_FREQ_MEAS_CTRL_REF_FREQ		1
110*904c99eaSIvan Vecera #define ZL_REF_FREQ_MEAS_CTRL_REF_FREQ_OFF	2
111*904c99eaSIvan Vecera #define ZL_REF_FREQ_MEAS_CTRL_DPLL_FREQ_OFF	3
112*904c99eaSIvan Vecera 
113*904c99eaSIvan Vecera #define ZL_REG_REF_FREQ_MEAS_MASK_3_0		ZL_REG(4, 0x1d, 1)
114*904c99eaSIvan Vecera #define ZL_REF_FREQ_MEAS_MASK_3_0(_ref)		BIT(_ref)
115*904c99eaSIvan Vecera 
116*904c99eaSIvan Vecera #define ZL_REG_REF_FREQ_MEAS_MASK_4		ZL_REG(4, 0x1e, 1)
117*904c99eaSIvan Vecera #define ZL_REF_FREQ_MEAS_MASK_4(_ref)		BIT((_ref) - 8)
118*904c99eaSIvan Vecera 
119*904c99eaSIvan Vecera #define ZL_REG_DPLL_MEAS_REF_FREQ_CTRL		ZL_REG(4, 0x1f, 1)
120*904c99eaSIvan Vecera #define ZL_DPLL_MEAS_REF_FREQ_CTRL_EN		BIT(0)
121*904c99eaSIvan Vecera #define ZL_DPLL_MEAS_REF_FREQ_CTRL_IDX		GENMASK(6, 4)
122*904c99eaSIvan Vecera 
123b7dbde2bSIvan Vecera #define ZL_REG_REF_PHASE(_idx)						\
124b7dbde2bSIvan Vecera 	ZL_REG_IDX(_idx, 4, 0x20, 6, ZL3073X_NUM_REFS, 6)
125b7dbde2bSIvan Vecera 
12675a71eccSIvan Vecera /***********************
12775a71eccSIvan Vecera  * Register Page 5, DPLL
12875a71eccSIvan Vecera  ***********************/
12975a71eccSIvan Vecera 
13075a71eccSIvan Vecera #define ZL_REG_DPLL_MODE_REFSEL(_idx)					\
13175a71eccSIvan Vecera 	ZL_REG_IDX(_idx, 5, 0x04, 1, ZL3073X_MAX_CHANNELS, 4)
13275a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_MODE		GENMASK(2, 0)
13375a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_MODE_FREERUN	0
13475a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_MODE_HOLDOVER	1
13575a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_MODE_REFLOCK	2
13675a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_MODE_AUTO		3
13775a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_MODE_NCO		4
13875a71eccSIvan Vecera #define ZL_DPLL_MODE_REFSEL_REF			GENMASK(7, 4)
13975a71eccSIvan Vecera 
14086ed4cd5SIvan Vecera #define ZL_REG_DPLL_MEAS_CTRL			ZL_REG(5, 0x50, 1)
14186ed4cd5SIvan Vecera #define ZL_DPLL_MEAS_CTRL_EN			BIT(0)
14286ed4cd5SIvan Vecera #define ZL_DPLL_MEAS_CTRL_AVG_FACTOR		GENMASK(7, 4)
14386ed4cd5SIvan Vecera 
144b7dbde2bSIvan Vecera #define ZL_REG_DPLL_MEAS_IDX			ZL_REG(5, 0x51, 1)
145b7dbde2bSIvan Vecera #define ZL_DPLL_MEAS_IDX			GENMASK(2, 0)
146b7dbde2bSIvan Vecera 
14786ed4cd5SIvan Vecera #define ZL_REG_DPLL_PHASE_ERR_READ_MASK		ZL_REG(5, 0x54, 1)
14886ed4cd5SIvan Vecera 
14986ed4cd5SIvan Vecera #define ZL_REG_DPLL_PHASE_ERR_DATA(_idx)				\
15086ed4cd5SIvan Vecera 	ZL_REG_IDX(_idx, 5, 0x55, 6, ZL3073X_MAX_CHANNELS, 6)
15186ed4cd5SIvan Vecera 
152b7d907d1SIvan Vecera /***********************************
153b7d907d1SIvan Vecera  * Register Page 9, Synth and Output
154b7d907d1SIvan Vecera  ***********************************/
155b7d907d1SIvan Vecera 
156b7d907d1SIvan Vecera #define ZL_REG_SYNTH_CTRL(_idx)						\
157b7d907d1SIvan Vecera 	ZL_REG_IDX(_idx, 9, 0x00, 1, ZL3073X_NUM_SYNTHS, 1)
158b7d907d1SIvan Vecera #define ZL_SYNTH_CTRL_EN			BIT(0)
159b7d907d1SIvan Vecera #define ZL_SYNTH_CTRL_DPLL_SEL			GENMASK(6, 4)
160b7d907d1SIvan Vecera 
16175a71eccSIvan Vecera #define ZL_REG_SYNTH_PHASE_SHIFT_CTRL		ZL_REG(9, 0x1e, 1)
16275a71eccSIvan Vecera #define ZL_REG_SYNTH_PHASE_SHIFT_MASK		ZL_REG(9, 0x1f, 1)
16375a71eccSIvan Vecera #define ZL_REG_SYNTH_PHASE_SHIFT_INTVL		ZL_REG(9, 0x20, 1)
16475a71eccSIvan Vecera #define ZL_REG_SYNTH_PHASE_SHIFT_DATA		ZL_REG(9, 0x21, 2)
16575a71eccSIvan Vecera 
166b7d907d1SIvan Vecera #define ZL_REG_OUTPUT_CTRL(_idx)					\
167b7d907d1SIvan Vecera 	ZL_REG_IDX(_idx, 9, 0x28, 1, ZL3073X_NUM_OUTS, 1)
168b7d907d1SIvan Vecera #define ZL_OUTPUT_CTRL_EN			BIT(0)
169b7d907d1SIvan Vecera #define ZL_OUTPUT_CTRL_SYNTH_SEL		GENMASK(6, 4)
170b7d907d1SIvan Vecera 
171b7d907d1SIvan Vecera /*******************************
172b7d907d1SIvan Vecera  * Register Page 10, Ref Mailbox
173b7d907d1SIvan Vecera  *******************************/
174b7d907d1SIvan Vecera 
175b7d907d1SIvan Vecera #define ZL_REG_REF_MB_MASK			ZL_REG(10, 0x02, 2)
176b7d907d1SIvan Vecera 
177b7d907d1SIvan Vecera #define ZL_REG_REF_MB_SEM			ZL_REG(10, 0x04, 1)
178b7d907d1SIvan Vecera #define ZL_REF_MB_SEM_WR			BIT(0)
179b7d907d1SIvan Vecera #define ZL_REF_MB_SEM_RD			BIT(1)
180b7d907d1SIvan Vecera 
181ce26d7caSIvan Vecera #define ZL_REG_REF_FREQ_BASE			ZL_REG(10, 0x05, 2)
182ce26d7caSIvan Vecera #define ZL_REG_REF_FREQ_MULT			ZL_REG(10, 0x07, 2)
183ce26d7caSIvan Vecera #define ZL_REG_REF_RATIO_M			ZL_REG(10, 0x09, 2)
184ce26d7caSIvan Vecera #define ZL_REG_REF_RATIO_N			ZL_REG(10, 0x0b, 2)
185ce26d7caSIvan Vecera 
186b7d907d1SIvan Vecera #define ZL_REG_REF_CONFIG			ZL_REG(10, 0x0d, 1)
187b7d907d1SIvan Vecera #define ZL_REF_CONFIG_ENABLE			BIT(0)
188b7d907d1SIvan Vecera #define ZL_REF_CONFIG_DIFF_EN			BIT(2)
189b7d907d1SIvan Vecera 
1906287262fSIvan Vecera #define ZL_REG_REF_PHASE_OFFSET_COMP		ZL_REG(10, 0x28, 6)
1916287262fSIvan Vecera 
192634ca2cbSIvan Vecera #define ZL_REG_REF_SYNC_CTRL			ZL_REG(10, 0x2e, 1)
193634ca2cbSIvan Vecera #define ZL_REF_SYNC_CTRL_MODE			GENMASK(2, 0)
194634ca2cbSIvan Vecera #define ZL_REF_SYNC_CTRL_MODE_REFSYNC_PAIR_OFF	0
195634ca2cbSIvan Vecera #define ZL_REF_SYNC_CTRL_MODE_50_50_ESYNC_25_75	2
196634ca2cbSIvan Vecera 
197634ca2cbSIvan Vecera #define ZL_REG_REF_ESYNC_DIV			ZL_REG(10, 0x30, 4)
198634ca2cbSIvan Vecera #define ZL_REF_ESYNC_DIV_1HZ			0
199634ca2cbSIvan Vecera 
20075a71eccSIvan Vecera /********************************
20175a71eccSIvan Vecera  * Register Page 12, DPLL Mailbox
20275a71eccSIvan Vecera  ********************************/
20375a71eccSIvan Vecera 
20475a71eccSIvan Vecera #define ZL_REG_DPLL_MB_MASK			ZL_REG(12, 0x02, 2)
20575a71eccSIvan Vecera 
20675a71eccSIvan Vecera #define ZL_REG_DPLL_MB_SEM			ZL_REG(12, 0x04, 1)
20775a71eccSIvan Vecera #define ZL_DPLL_MB_SEM_WR			BIT(0)
20875a71eccSIvan Vecera #define ZL_DPLL_MB_SEM_RD			BIT(1)
20975a71eccSIvan Vecera 
21075a71eccSIvan Vecera #define ZL_REG_DPLL_REF_PRIO(_idx)					\
21175a71eccSIvan Vecera 	ZL_REG_IDX(_idx, 12, 0x52, 1, ZL3073X_NUM_REFS / 2, 1)
21275a71eccSIvan Vecera #define ZL_DPLL_REF_PRIO_REF_P			GENMASK(3, 0)
21375a71eccSIvan Vecera #define ZL_DPLL_REF_PRIO_REF_N			GENMASK(7, 4)
21475a71eccSIvan Vecera #define ZL_DPLL_REF_PRIO_MAX			14
21575a71eccSIvan Vecera #define ZL_DPLL_REF_PRIO_NONE			15
21675a71eccSIvan Vecera 
217b7d907d1SIvan Vecera /*********************************
218b7d907d1SIvan Vecera  * Register Page 13, Synth Mailbox
219b7d907d1SIvan Vecera  *********************************/
220b7d907d1SIvan Vecera 
221b7d907d1SIvan Vecera #define ZL_REG_SYNTH_MB_MASK			ZL_REG(13, 0x02, 2)
222b7d907d1SIvan Vecera 
223b7d907d1SIvan Vecera #define ZL_REG_SYNTH_MB_SEM			ZL_REG(13, 0x04, 1)
224b7d907d1SIvan Vecera #define ZL_SYNTH_MB_SEM_WR			BIT(0)
225b7d907d1SIvan Vecera #define ZL_SYNTH_MB_SEM_RD			BIT(1)
226b7d907d1SIvan Vecera 
227b7d907d1SIvan Vecera #define ZL_REG_SYNTH_FREQ_BASE			ZL_REG(13, 0x06, 2)
228b7d907d1SIvan Vecera #define ZL_REG_SYNTH_FREQ_MULT			ZL_REG(13, 0x08, 4)
229b7d907d1SIvan Vecera #define ZL_REG_SYNTH_FREQ_M			ZL_REG(13, 0x0c, 2)
230b7d907d1SIvan Vecera #define ZL_REG_SYNTH_FREQ_N			ZL_REG(13, 0x0e, 2)
231b7d907d1SIvan Vecera 
232b7d907d1SIvan Vecera /**********************************
233b7d907d1SIvan Vecera  * Register Page 14, Output Mailbox
234b7d907d1SIvan Vecera  **********************************/
235b7d907d1SIvan Vecera #define ZL_REG_OUTPUT_MB_MASK			ZL_REG(14, 0x02, 2)
236b7d907d1SIvan Vecera 
237b7d907d1SIvan Vecera #define ZL_REG_OUTPUT_MB_SEM			ZL_REG(14, 0x04, 1)
238b7d907d1SIvan Vecera #define ZL_OUTPUT_MB_SEM_WR			BIT(0)
239b7d907d1SIvan Vecera #define ZL_OUTPUT_MB_SEM_RD			BIT(1)
240b7d907d1SIvan Vecera 
241b7d907d1SIvan Vecera #define ZL_REG_OUTPUT_MODE			ZL_REG(14, 0x05, 1)
242634ca2cbSIvan Vecera #define ZL_OUTPUT_MODE_CLOCK_TYPE		GENMASK(2, 0)
243634ca2cbSIvan Vecera #define ZL_OUTPUT_MODE_CLOCK_TYPE_NORMAL	0
244634ca2cbSIvan Vecera #define ZL_OUTPUT_MODE_CLOCK_TYPE_ESYNC		1
245b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT		GENMASK(7, 4)
246b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_DISABLED	0
247b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_LVDS	1
248b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_DIFF	2
249b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_LOWVCM	3
250b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2		4
251b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_1P		5
252b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_1N		6
253b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_INV	7
254b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_NDIV	12
255b7d907d1SIvan Vecera #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_NDIV_INV	15
256b7d907d1SIvan Vecera 
257ce26d7caSIvan Vecera #define ZL_REG_OUTPUT_DIV			ZL_REG(14, 0x0c, 4)
258ce26d7caSIvan Vecera #define ZL_REG_OUTPUT_WIDTH			ZL_REG(14, 0x10, 4)
259ce26d7caSIvan Vecera #define ZL_REG_OUTPUT_ESYNC_PERIOD		ZL_REG(14, 0x14, 4)
260ce26d7caSIvan Vecera #define ZL_REG_OUTPUT_ESYNC_WIDTH		ZL_REG(14, 0x18, 4)
2616287262fSIvan Vecera #define ZL_REG_OUTPUT_PHASE_COMP		ZL_REG(14, 0x20, 4)
262ce26d7caSIvan Vecera 
2632df8e64eSIvan Vecera #endif /* _ZL3073X_REGS_H */
264