1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #ifndef _ZL3073X_REGS_H 4 #define _ZL3073X_REGS_H 5 6 #include <linux/bitfield.h> 7 #include <linux/bits.h> 8 9 /* 10 * Register address structure: 11 * =========================== 12 * 25 19 18 16 15 7 6 0 13 * +------------------------------------------+ 14 * | max_offset | size | page | page_offset | 15 * +------------------------------------------+ 16 * 17 * page_offset ... <0x00..0x7F> 18 * page .......... HW page number 19 * size .......... register byte size (1, 2, 4 or 6) 20 * max_offset .... maximal offset for indexed registers 21 * (for non-indexed regs max_offset == page_offset) 22 */ 23 24 #define ZL_REG_OFFSET_MASK GENMASK(6, 0) 25 #define ZL_REG_PAGE_MASK GENMASK(15, 7) 26 #define ZL_REG_SIZE_MASK GENMASK(18, 16) 27 #define ZL_REG_MAX_OFFSET_MASK GENMASK(25, 19) 28 #define ZL_REG_ADDR_MASK GENMASK(15, 0) 29 30 #define ZL_REG_OFFSET(_reg) FIELD_GET(ZL_REG_OFFSET_MASK, _reg) 31 #define ZL_REG_PAGE(_reg) FIELD_GET(ZL_REG_PAGE_MASK, _reg) 32 #define ZL_REG_MAX_OFFSET(_reg) FIELD_GET(ZL_REG_MAX_OFFSET_MASK, _reg) 33 #define ZL_REG_SIZE(_reg) FIELD_GET(ZL_REG_SIZE_MASK, _reg) 34 #define ZL_REG_ADDR(_reg) FIELD_GET(ZL_REG_ADDR_MASK, _reg) 35 36 /** 37 * ZL_REG_IDX - define indexed register 38 * @_idx: index of register to access 39 * @_page: register page 40 * @_offset: register offset in page 41 * @_size: register byte size (1, 2, 4 or 6) 42 * @_items: number of register indices 43 * @_stride: stride between items in bytes 44 * 45 * All parameters except @_idx should be constant. 46 */ 47 #define ZL_REG_IDX(_idx, _page, _offset, _size, _items, _stride) \ 48 (FIELD_PREP(ZL_REG_OFFSET_MASK, \ 49 (_offset) + (_idx) * (_stride)) | \ 50 FIELD_PREP_CONST(ZL_REG_PAGE_MASK, _page) | \ 51 FIELD_PREP_CONST(ZL_REG_SIZE_MASK, _size) | \ 52 FIELD_PREP_CONST(ZL_REG_MAX_OFFSET_MASK, \ 53 (_offset) + ((_items) - 1) * (_stride))) 54 55 /** 56 * ZL_REG - define simple (non-indexed) register 57 * @_page: register page 58 * @_offset: register offset in page 59 * @_size: register byte size (1, 2, 4 or 6) 60 * 61 * All parameters should be constant. 62 */ 63 #define ZL_REG(_page, _offset, _size) \ 64 ZL_REG_IDX(0, _page, _offset, _size, 1, 0) 65 66 /************************** 67 * Register Page 0, General 68 **************************/ 69 70 #define ZL_REG_ID ZL_REG(0, 0x01, 2) 71 #define ZL_REG_REVISION ZL_REG(0, 0x03, 2) 72 #define ZL_REG_FW_VER ZL_REG(0, 0x05, 2) 73 #define ZL_REG_CUSTOM_CONFIG_VER ZL_REG(0, 0x07, 4) 74 75 /************************* 76 * Register Page 2, Status 77 *************************/ 78 79 #define ZL_REG_REF_MON_STATUS(_idx) \ 80 ZL_REG_IDX(_idx, 2, 0x02, 1, ZL3073X_NUM_REFS, 1) 81 #define ZL_REF_MON_STATUS_OK 0 /* all bits zeroed */ 82 83 #define ZL_REG_DPLL_MON_STATUS(_idx) \ 84 ZL_REG_IDX(_idx, 2, 0x10, 1, ZL3073X_MAX_CHANNELS, 1) 85 #define ZL_DPLL_MON_STATUS_STATE GENMASK(1, 0) 86 #define ZL_DPLL_MON_STATUS_STATE_ACQUIRING 0 87 #define ZL_DPLL_MON_STATUS_STATE_LOCK 1 88 #define ZL_DPLL_MON_STATUS_STATE_HOLDOVER 2 89 #define ZL_DPLL_MON_STATUS_HO_READY BIT(2) 90 91 #define ZL_REG_DPLL_REFSEL_STATUS(_idx) \ 92 ZL_REG_IDX(_idx, 2, 0x30, 1, ZL3073X_MAX_CHANNELS, 1) 93 #define ZL_DPLL_REFSEL_STATUS_REFSEL GENMASK(3, 0) 94 #define ZL_DPLL_REFSEL_STATUS_STATE GENMASK(6, 4) 95 #define ZL_DPLL_REFSEL_STATUS_STATE_LOCK 4 96 97 #define ZL_REG_REF_FREQ(_idx) \ 98 ZL_REG_IDX(_idx, 2, 0x44, 4, ZL3073X_NUM_REFS, 4) 99 100 /********************** 101 * Register Page 4, Ref 102 **********************/ 103 104 #define ZL_REG_REF_PHASE_ERR_READ_RQST ZL_REG(4, 0x0f, 1) 105 #define ZL_REF_PHASE_ERR_READ_RQST_RD BIT(0) 106 107 #define ZL_REG_REF_FREQ_MEAS_CTRL ZL_REG(4, 0x1c, 1) 108 #define ZL_REF_FREQ_MEAS_CTRL GENMASK(1, 0) 109 #define ZL_REF_FREQ_MEAS_CTRL_REF_FREQ 1 110 #define ZL_REF_FREQ_MEAS_CTRL_REF_FREQ_OFF 2 111 #define ZL_REF_FREQ_MEAS_CTRL_DPLL_FREQ_OFF 3 112 113 #define ZL_REG_REF_FREQ_MEAS_MASK_3_0 ZL_REG(4, 0x1d, 1) 114 #define ZL_REF_FREQ_MEAS_MASK_3_0(_ref) BIT(_ref) 115 116 #define ZL_REG_REF_FREQ_MEAS_MASK_4 ZL_REG(4, 0x1e, 1) 117 #define ZL_REF_FREQ_MEAS_MASK_4(_ref) BIT((_ref) - 8) 118 119 #define ZL_REG_DPLL_MEAS_REF_FREQ_CTRL ZL_REG(4, 0x1f, 1) 120 #define ZL_DPLL_MEAS_REF_FREQ_CTRL_EN BIT(0) 121 #define ZL_DPLL_MEAS_REF_FREQ_CTRL_IDX GENMASK(6, 4) 122 123 #define ZL_REG_REF_PHASE(_idx) \ 124 ZL_REG_IDX(_idx, 4, 0x20, 6, ZL3073X_NUM_REFS, 6) 125 126 /*********************** 127 * Register Page 5, DPLL 128 ***********************/ 129 130 #define ZL_REG_DPLL_MODE_REFSEL(_idx) \ 131 ZL_REG_IDX(_idx, 5, 0x04, 1, ZL3073X_MAX_CHANNELS, 4) 132 #define ZL_DPLL_MODE_REFSEL_MODE GENMASK(2, 0) 133 #define ZL_DPLL_MODE_REFSEL_MODE_FREERUN 0 134 #define ZL_DPLL_MODE_REFSEL_MODE_HOLDOVER 1 135 #define ZL_DPLL_MODE_REFSEL_MODE_REFLOCK 2 136 #define ZL_DPLL_MODE_REFSEL_MODE_AUTO 3 137 #define ZL_DPLL_MODE_REFSEL_MODE_NCO 4 138 #define ZL_DPLL_MODE_REFSEL_REF GENMASK(7, 4) 139 140 #define ZL_REG_DPLL_MEAS_CTRL ZL_REG(5, 0x50, 1) 141 #define ZL_DPLL_MEAS_CTRL_EN BIT(0) 142 #define ZL_DPLL_MEAS_CTRL_AVG_FACTOR GENMASK(7, 4) 143 144 #define ZL_REG_DPLL_MEAS_IDX ZL_REG(5, 0x51, 1) 145 #define ZL_DPLL_MEAS_IDX GENMASK(2, 0) 146 147 #define ZL_REG_DPLL_PHASE_ERR_READ_MASK ZL_REG(5, 0x54, 1) 148 149 #define ZL_REG_DPLL_PHASE_ERR_DATA(_idx) \ 150 ZL_REG_IDX(_idx, 5, 0x55, 6, ZL3073X_MAX_CHANNELS, 6) 151 152 /*********************************** 153 * Register Page 9, Synth and Output 154 ***********************************/ 155 156 #define ZL_REG_SYNTH_CTRL(_idx) \ 157 ZL_REG_IDX(_idx, 9, 0x00, 1, ZL3073X_NUM_SYNTHS, 1) 158 #define ZL_SYNTH_CTRL_EN BIT(0) 159 #define ZL_SYNTH_CTRL_DPLL_SEL GENMASK(6, 4) 160 161 #define ZL_REG_SYNTH_PHASE_SHIFT_CTRL ZL_REG(9, 0x1e, 1) 162 #define ZL_REG_SYNTH_PHASE_SHIFT_MASK ZL_REG(9, 0x1f, 1) 163 #define ZL_REG_SYNTH_PHASE_SHIFT_INTVL ZL_REG(9, 0x20, 1) 164 #define ZL_REG_SYNTH_PHASE_SHIFT_DATA ZL_REG(9, 0x21, 2) 165 166 #define ZL_REG_OUTPUT_CTRL(_idx) \ 167 ZL_REG_IDX(_idx, 9, 0x28, 1, ZL3073X_NUM_OUTS, 1) 168 #define ZL_OUTPUT_CTRL_EN BIT(0) 169 #define ZL_OUTPUT_CTRL_SYNTH_SEL GENMASK(6, 4) 170 171 /******************************* 172 * Register Page 10, Ref Mailbox 173 *******************************/ 174 175 #define ZL_REG_REF_MB_MASK ZL_REG(10, 0x02, 2) 176 177 #define ZL_REG_REF_MB_SEM ZL_REG(10, 0x04, 1) 178 #define ZL_REF_MB_SEM_WR BIT(0) 179 #define ZL_REF_MB_SEM_RD BIT(1) 180 181 #define ZL_REG_REF_FREQ_BASE ZL_REG(10, 0x05, 2) 182 #define ZL_REG_REF_FREQ_MULT ZL_REG(10, 0x07, 2) 183 #define ZL_REG_REF_RATIO_M ZL_REG(10, 0x09, 2) 184 #define ZL_REG_REF_RATIO_N ZL_REG(10, 0x0b, 2) 185 186 #define ZL_REG_REF_CONFIG ZL_REG(10, 0x0d, 1) 187 #define ZL_REF_CONFIG_ENABLE BIT(0) 188 #define ZL_REF_CONFIG_DIFF_EN BIT(2) 189 190 #define ZL_REG_REF_PHASE_OFFSET_COMP ZL_REG(10, 0x28, 6) 191 192 #define ZL_REG_REF_SYNC_CTRL ZL_REG(10, 0x2e, 1) 193 #define ZL_REF_SYNC_CTRL_MODE GENMASK(2, 0) 194 #define ZL_REF_SYNC_CTRL_MODE_REFSYNC_PAIR_OFF 0 195 #define ZL_REF_SYNC_CTRL_MODE_50_50_ESYNC_25_75 2 196 197 #define ZL_REG_REF_ESYNC_DIV ZL_REG(10, 0x30, 4) 198 #define ZL_REF_ESYNC_DIV_1HZ 0 199 200 /******************************** 201 * Register Page 12, DPLL Mailbox 202 ********************************/ 203 204 #define ZL_REG_DPLL_MB_MASK ZL_REG(12, 0x02, 2) 205 206 #define ZL_REG_DPLL_MB_SEM ZL_REG(12, 0x04, 1) 207 #define ZL_DPLL_MB_SEM_WR BIT(0) 208 #define ZL_DPLL_MB_SEM_RD BIT(1) 209 210 #define ZL_REG_DPLL_REF_PRIO(_idx) \ 211 ZL_REG_IDX(_idx, 12, 0x52, 1, ZL3073X_NUM_REFS / 2, 1) 212 #define ZL_DPLL_REF_PRIO_REF_P GENMASK(3, 0) 213 #define ZL_DPLL_REF_PRIO_REF_N GENMASK(7, 4) 214 #define ZL_DPLL_REF_PRIO_MAX 14 215 #define ZL_DPLL_REF_PRIO_NONE 15 216 217 /********************************* 218 * Register Page 13, Synth Mailbox 219 *********************************/ 220 221 #define ZL_REG_SYNTH_MB_MASK ZL_REG(13, 0x02, 2) 222 223 #define ZL_REG_SYNTH_MB_SEM ZL_REG(13, 0x04, 1) 224 #define ZL_SYNTH_MB_SEM_WR BIT(0) 225 #define ZL_SYNTH_MB_SEM_RD BIT(1) 226 227 #define ZL_REG_SYNTH_FREQ_BASE ZL_REG(13, 0x06, 2) 228 #define ZL_REG_SYNTH_FREQ_MULT ZL_REG(13, 0x08, 4) 229 #define ZL_REG_SYNTH_FREQ_M ZL_REG(13, 0x0c, 2) 230 #define ZL_REG_SYNTH_FREQ_N ZL_REG(13, 0x0e, 2) 231 232 /********************************** 233 * Register Page 14, Output Mailbox 234 **********************************/ 235 #define ZL_REG_OUTPUT_MB_MASK ZL_REG(14, 0x02, 2) 236 237 #define ZL_REG_OUTPUT_MB_SEM ZL_REG(14, 0x04, 1) 238 #define ZL_OUTPUT_MB_SEM_WR BIT(0) 239 #define ZL_OUTPUT_MB_SEM_RD BIT(1) 240 241 #define ZL_REG_OUTPUT_MODE ZL_REG(14, 0x05, 1) 242 #define ZL_OUTPUT_MODE_CLOCK_TYPE GENMASK(2, 0) 243 #define ZL_OUTPUT_MODE_CLOCK_TYPE_NORMAL 0 244 #define ZL_OUTPUT_MODE_CLOCK_TYPE_ESYNC 1 245 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT GENMASK(7, 4) 246 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_DISABLED 0 247 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_LVDS 1 248 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_DIFF 2 249 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_LOWVCM 3 250 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2 4 251 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_1P 5 252 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_1N 6 253 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_INV 7 254 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_NDIV 12 255 #define ZL_OUTPUT_MODE_SIGNAL_FORMAT_2_NDIV_INV 15 256 257 #define ZL_REG_OUTPUT_DIV ZL_REG(14, 0x0c, 4) 258 #define ZL_REG_OUTPUT_WIDTH ZL_REG(14, 0x10, 4) 259 #define ZL_REG_OUTPUT_ESYNC_PERIOD ZL_REG(14, 0x14, 4) 260 #define ZL_REG_OUTPUT_ESYNC_WIDTH ZL_REG(14, 0x18, 4) 261 #define ZL_REG_OUTPUT_PHASE_COMP ZL_REG(14, 0x20, 4) 262 263 #endif /* _ZL3073X_REGS_H */ 264