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