1 /* 2 * Copyright (c) 2021-2024 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 9 #ifndef HPM_LVB_H 10 #define HPM_LVB_H 11 12 typedef struct { 13 __RW uint32_t CTRL; /* 0x0: control register */ 14 __R uint8_t RESERVED0[12]; /* 0x4 - 0xF: Reserved */ 15 __R uint32_t PHY_STAT; /* 0x10: LVDS TX PHY Status register */ 16 __RW uint32_t PHY_POW_CTRL[2]; /* 0x14 - 0x18: LVDS0 PHY power control register */ 17 struct { 18 __RW uint32_t CTL0; /* 0x1C: TX PHY Setting */ 19 __RW uint32_t CTL1; /* 0x20: TX_PHY Setting */ 20 } TX_PHY[10]; 21 } LVB_Type; 22 23 24 /* Bitfield definition for register: CTRL */ 25 /* 26 * SPLIT_CH_REVERSE (RW) 27 * 28 * Just for split mode, reverse two channel data 29 */ 30 #define LVB_CTRL_SPLIT_CH_REVERSE_MASK (0x8000000UL) 31 #define LVB_CTRL_SPLIT_CH_REVERSE_SHIFT (27U) 32 #define LVB_CTRL_SPLIT_CH_REVERSE_SET(x) (((uint32_t)(x) << LVB_CTRL_SPLIT_CH_REVERSE_SHIFT) & LVB_CTRL_SPLIT_CH_REVERSE_MASK) 33 #define LVB_CTRL_SPLIT_CH_REVERSE_GET(x) (((uint32_t)(x) & LVB_CTRL_SPLIT_CH_REVERSE_MASK) >> LVB_CTRL_SPLIT_CH_REVERSE_SHIFT) 34 35 /* 36 * SPLIT_CH_MODE (RW) 37 * 38 * Just for split mode 39 * 1: two channel pixel data are not aligned 40 * 0: two channel pixel data are aligned 41 */ 42 #define LVB_CTRL_SPLIT_CH_MODE_MASK (0x4000000UL) 43 #define LVB_CTRL_SPLIT_CH_MODE_SHIFT (26U) 44 #define LVB_CTRL_SPLIT_CH_MODE_SET(x) (((uint32_t)(x) << LVB_CTRL_SPLIT_CH_MODE_SHIFT) & LVB_CTRL_SPLIT_CH_MODE_MASK) 45 #define LVB_CTRL_SPLIT_CH_MODE_GET(x) (((uint32_t)(x) & LVB_CTRL_SPLIT_CH_MODE_MASK) >> LVB_CTRL_SPLIT_CH_MODE_SHIFT) 46 47 /* 48 * SPLIT_HSWHBP_WIDTH (RW) 49 * 50 * Just for split mode, the sum of HSW and HBP width is even 51 * 1: yes 52 * 0: no 53 */ 54 #define LVB_CTRL_SPLIT_HSWHBP_WIDTH_MASK (0x2000000UL) 55 #define LVB_CTRL_SPLIT_HSWHBP_WIDTH_SHIFT (25U) 56 #define LVB_CTRL_SPLIT_HSWHBP_WIDTH_SET(x) (((uint32_t)(x) << LVB_CTRL_SPLIT_HSWHBP_WIDTH_SHIFT) & LVB_CTRL_SPLIT_HSWHBP_WIDTH_MASK) 57 #define LVB_CTRL_SPLIT_HSWHBP_WIDTH_GET(x) (((uint32_t)(x) & LVB_CTRL_SPLIT_HSWHBP_WIDTH_MASK) >> LVB_CTRL_SPLIT_HSWHBP_WIDTH_SHIFT) 58 59 /* 60 * SPLIT_MODE_EN (RW) 61 * 62 * Split mode enable: 63 * 1: enable 64 * 0: disable 65 * Note: when using split mode, ch0/1 should be enabled, and should select same DI 66 */ 67 #define LVB_CTRL_SPLIT_MODE_EN_MASK (0x1000000UL) 68 #define LVB_CTRL_SPLIT_MODE_EN_SHIFT (24U) 69 #define LVB_CTRL_SPLIT_MODE_EN_SET(x) (((uint32_t)(x) << LVB_CTRL_SPLIT_MODE_EN_SHIFT) & LVB_CTRL_SPLIT_MODE_EN_MASK) 70 #define LVB_CTRL_SPLIT_MODE_EN_GET(x) (((uint32_t)(x) & LVB_CTRL_SPLIT_MODE_EN_MASK) >> LVB_CTRL_SPLIT_MODE_EN_SHIFT) 71 72 /* 73 * DI1_VSYNC_POLARITY (RW) 74 * 75 * DI 1 vsync polarity: 76 * 1: active low 77 * 0: active high 78 */ 79 #define LVB_CTRL_DI1_VSYNC_POLARITY_MASK (0x20000UL) 80 #define LVB_CTRL_DI1_VSYNC_POLARITY_SHIFT (17U) 81 #define LVB_CTRL_DI1_VSYNC_POLARITY_SET(x) (((uint32_t)(x) << LVB_CTRL_DI1_VSYNC_POLARITY_SHIFT) & LVB_CTRL_DI1_VSYNC_POLARITY_MASK) 82 #define LVB_CTRL_DI1_VSYNC_POLARITY_GET(x) (((uint32_t)(x) & LVB_CTRL_DI1_VSYNC_POLARITY_MASK) >> LVB_CTRL_DI1_VSYNC_POLARITY_SHIFT) 83 84 /* 85 * DI0_VSYNC_POLARITY (RW) 86 * 87 * DI 0 vsync polarity: 88 * 1: active low 89 * 0: active high 90 */ 91 #define LVB_CTRL_DI0_VSYNC_POLARITY_MASK (0x10000UL) 92 #define LVB_CTRL_DI0_VSYNC_POLARITY_SHIFT (16U) 93 #define LVB_CTRL_DI0_VSYNC_POLARITY_SET(x) (((uint32_t)(x) << LVB_CTRL_DI0_VSYNC_POLARITY_SHIFT) & LVB_CTRL_DI0_VSYNC_POLARITY_MASK) 94 #define LVB_CTRL_DI0_VSYNC_POLARITY_GET(x) (((uint32_t)(x) & LVB_CTRL_DI0_VSYNC_POLARITY_MASK) >> LVB_CTRL_DI0_VSYNC_POLARITY_SHIFT) 95 96 /* 97 * LVDS_TXCLK_SHIFT (RW) 98 * 99 * Shift the LVDS TX PHY clock in relation to the data. 100 * 000: txck is 7'b1100011 101 * 001: txck is 7‘b1110001 102 * 010: txck is 7‘b1111000 103 * 011: txck is 7‘b1000111 104 * 100: txck is 7‘b0001111 105 * 101: txck is 7‘b0011110 106 * 110: txck is 7‘b0111100 107 * 111: txck is 7‘b1100011 108 */ 109 #define LVB_CTRL_LVDS_TXCLK_SHIFT_MASK (0x700U) 110 #define LVB_CTRL_LVDS_TXCLK_SHIFT_SHIFT (8U) 111 #define LVB_CTRL_LVDS_TXCLK_SHIFT_SET(x) (((uint32_t)(x) << LVB_CTRL_LVDS_TXCLK_SHIFT_SHIFT) & LVB_CTRL_LVDS_TXCLK_SHIFT_MASK) 112 #define LVB_CTRL_LVDS_TXCLK_SHIFT_GET(x) (((uint32_t)(x) & LVB_CTRL_LVDS_TXCLK_SHIFT_MASK) >> LVB_CTRL_LVDS_TXCLK_SHIFT_SHIFT) 113 114 /* 115 * CH1_BIT_MAPPING (RW) 116 * 117 * Channel 1 data protocol: 118 * 1: JEIDA standard 119 * 0: SPWG standard 120 */ 121 #define LVB_CTRL_CH1_BIT_MAPPING_MASK (0x80U) 122 #define LVB_CTRL_CH1_BIT_MAPPING_SHIFT (7U) 123 #define LVB_CTRL_CH1_BIT_MAPPING_SET(x) (((uint32_t)(x) << LVB_CTRL_CH1_BIT_MAPPING_SHIFT) & LVB_CTRL_CH1_BIT_MAPPING_MASK) 124 #define LVB_CTRL_CH1_BIT_MAPPING_GET(x) (((uint32_t)(x) & LVB_CTRL_CH1_BIT_MAPPING_MASK) >> LVB_CTRL_CH1_BIT_MAPPING_SHIFT) 125 126 /* 127 * CH0_BIT_MAPPING (RW) 128 * 129 * Channel 0 data protocol: 130 * 1: JEIDA standard 131 * 0: SPWG standard 132 */ 133 #define LVB_CTRL_CH0_BIT_MAPPING_MASK (0x20U) 134 #define LVB_CTRL_CH0_BIT_MAPPING_SHIFT (5U) 135 #define LVB_CTRL_CH0_BIT_MAPPING_SET(x) (((uint32_t)(x) << LVB_CTRL_CH0_BIT_MAPPING_SHIFT) & LVB_CTRL_CH0_BIT_MAPPING_MASK) 136 #define LVB_CTRL_CH0_BIT_MAPPING_GET(x) (((uint32_t)(x) & LVB_CTRL_CH0_BIT_MAPPING_MASK) >> LVB_CTRL_CH0_BIT_MAPPING_SHIFT) 137 138 /* 139 * CH1_SEL (RW) 140 * 141 * Channel 1 select: 142 * 1: select DI 1 143 * 0: select DI 0 144 */ 145 #define LVB_CTRL_CH1_SEL_MASK (0x8U) 146 #define LVB_CTRL_CH1_SEL_SHIFT (3U) 147 #define LVB_CTRL_CH1_SEL_SET(x) (((uint32_t)(x) << LVB_CTRL_CH1_SEL_SHIFT) & LVB_CTRL_CH1_SEL_MASK) 148 #define LVB_CTRL_CH1_SEL_GET(x) (((uint32_t)(x) & LVB_CTRL_CH1_SEL_MASK) >> LVB_CTRL_CH1_SEL_SHIFT) 149 150 /* 151 * CH1_EN (RW) 152 * 153 * Channel 1 enable: 154 * 1: enable 155 * 0: disable 156 */ 157 #define LVB_CTRL_CH1_EN_MASK (0x4U) 158 #define LVB_CTRL_CH1_EN_SHIFT (2U) 159 #define LVB_CTRL_CH1_EN_SET(x) (((uint32_t)(x) << LVB_CTRL_CH1_EN_SHIFT) & LVB_CTRL_CH1_EN_MASK) 160 #define LVB_CTRL_CH1_EN_GET(x) (((uint32_t)(x) & LVB_CTRL_CH1_EN_MASK) >> LVB_CTRL_CH1_EN_SHIFT) 161 162 /* 163 * CH0_SEL (RW) 164 * 165 * Channel 0 select: 166 * 1: select DI 1 167 * 0: select DI 0 168 */ 169 #define LVB_CTRL_CH0_SEL_MASK (0x2U) 170 #define LVB_CTRL_CH0_SEL_SHIFT (1U) 171 #define LVB_CTRL_CH0_SEL_SET(x) (((uint32_t)(x) << LVB_CTRL_CH0_SEL_SHIFT) & LVB_CTRL_CH0_SEL_MASK) 172 #define LVB_CTRL_CH0_SEL_GET(x) (((uint32_t)(x) & LVB_CTRL_CH0_SEL_MASK) >> LVB_CTRL_CH0_SEL_SHIFT) 173 174 /* 175 * CH0_EN (RW) 176 * 177 * Channel 0 enable: 178 * 1: enable 179 * 0: disable 180 */ 181 #define LVB_CTRL_CH0_EN_MASK (0x1U) 182 #define LVB_CTRL_CH0_EN_SHIFT (0U) 183 #define LVB_CTRL_CH0_EN_SET(x) (((uint32_t)(x) << LVB_CTRL_CH0_EN_SHIFT) & LVB_CTRL_CH0_EN_MASK) 184 #define LVB_CTRL_CH0_EN_GET(x) (((uint32_t)(x) & LVB_CTRL_CH0_EN_MASK) >> LVB_CTRL_CH0_EN_SHIFT) 185 186 /* Bitfield definition for register: PHY_STAT */ 187 /* 188 * LVDS1_TX_PHY_PLL_LOCK (RO) 189 * 190 * LVDS1 TX PHY PLL Lock indication Signal, 1 means pll already locked 191 */ 192 #define LVB_PHY_STAT_LVDS1_TX_PHY_PLL_LOCK_MASK (0x2U) 193 #define LVB_PHY_STAT_LVDS1_TX_PHY_PLL_LOCK_SHIFT (1U) 194 #define LVB_PHY_STAT_LVDS1_TX_PHY_PLL_LOCK_GET(x) (((uint32_t)(x) & LVB_PHY_STAT_LVDS1_TX_PHY_PLL_LOCK_MASK) >> LVB_PHY_STAT_LVDS1_TX_PHY_PLL_LOCK_SHIFT) 195 196 /* 197 * LVDS0_TX_PHY_PLL_LOCK (RO) 198 * 199 * LVDS0 TX PHY PLL Lock indication Signal, 1 means pll already locked 200 */ 201 #define LVB_PHY_STAT_LVDS0_TX_PHY_PLL_LOCK_MASK (0x1U) 202 #define LVB_PHY_STAT_LVDS0_TX_PHY_PLL_LOCK_SHIFT (0U) 203 #define LVB_PHY_STAT_LVDS0_TX_PHY_PLL_LOCK_GET(x) (((uint32_t)(x) & LVB_PHY_STAT_LVDS0_TX_PHY_PLL_LOCK_MASK) >> LVB_PHY_STAT_LVDS0_TX_PHY_PLL_LOCK_SHIFT) 204 205 /* Bitfield definition for register array: PHY_POW_CTRL */ 206 /* 207 * PWON_PLL (RW) 208 * 209 * pll power on 210 */ 211 #define LVB_PHY_POW_CTRL_PWON_PLL_MASK (0x20U) 212 #define LVB_PHY_POW_CTRL_PWON_PLL_SHIFT (5U) 213 #define LVB_PHY_POW_CTRL_PWON_PLL_SET(x) (((uint32_t)(x) << LVB_PHY_POW_CTRL_PWON_PLL_SHIFT) & LVB_PHY_POW_CTRL_PWON_PLL_MASK) 214 #define LVB_PHY_POW_CTRL_PWON_PLL_GET(x) (((uint32_t)(x) & LVB_PHY_POW_CTRL_PWON_PLL_MASK) >> LVB_PHY_POW_CTRL_PWON_PLL_SHIFT) 215 216 /* 217 * TXCK_PD (RW) 218 * 219 * Power down control signal of channel txck 220 * 0: Normal operation 221 * 1: Power down channel 222 */ 223 #define LVB_PHY_POW_CTRL_TXCK_PD_MASK (0x10U) 224 #define LVB_PHY_POW_CTRL_TXCK_PD_SHIFT (4U) 225 #define LVB_PHY_POW_CTRL_TXCK_PD_SET(x) (((uint32_t)(x) << LVB_PHY_POW_CTRL_TXCK_PD_SHIFT) & LVB_PHY_POW_CTRL_TXCK_PD_MASK) 226 #define LVB_PHY_POW_CTRL_TXCK_PD_GET(x) (((uint32_t)(x) & LVB_PHY_POW_CTRL_TXCK_PD_MASK) >> LVB_PHY_POW_CTRL_TXCK_PD_SHIFT) 227 228 /* 229 * TX3_PD (RW) 230 * 231 * Power down control signal of channel tx3 232 * 0: Normal operation 233 * 1: Power down channel 234 */ 235 #define LVB_PHY_POW_CTRL_TX3_PD_MASK (0x8U) 236 #define LVB_PHY_POW_CTRL_TX3_PD_SHIFT (3U) 237 #define LVB_PHY_POW_CTRL_TX3_PD_SET(x) (((uint32_t)(x) << LVB_PHY_POW_CTRL_TX3_PD_SHIFT) & LVB_PHY_POW_CTRL_TX3_PD_MASK) 238 #define LVB_PHY_POW_CTRL_TX3_PD_GET(x) (((uint32_t)(x) & LVB_PHY_POW_CTRL_TX3_PD_MASK) >> LVB_PHY_POW_CTRL_TX3_PD_SHIFT) 239 240 /* 241 * TX2_PD (RW) 242 * 243 * Power down control signal of channel tx2 244 * 0: Normal operation 245 * 1: Power down channel 246 */ 247 #define LVB_PHY_POW_CTRL_TX2_PD_MASK (0x4U) 248 #define LVB_PHY_POW_CTRL_TX2_PD_SHIFT (2U) 249 #define LVB_PHY_POW_CTRL_TX2_PD_SET(x) (((uint32_t)(x) << LVB_PHY_POW_CTRL_TX2_PD_SHIFT) & LVB_PHY_POW_CTRL_TX2_PD_MASK) 250 #define LVB_PHY_POW_CTRL_TX2_PD_GET(x) (((uint32_t)(x) & LVB_PHY_POW_CTRL_TX2_PD_MASK) >> LVB_PHY_POW_CTRL_TX2_PD_SHIFT) 251 252 /* 253 * TX1_PD (RW) 254 * 255 * Power down control signal of channel tx1 256 * 0: Normal operation 257 * 1: Power down channel 258 */ 259 #define LVB_PHY_POW_CTRL_TX1_PD_MASK (0x2U) 260 #define LVB_PHY_POW_CTRL_TX1_PD_SHIFT (1U) 261 #define LVB_PHY_POW_CTRL_TX1_PD_SET(x) (((uint32_t)(x) << LVB_PHY_POW_CTRL_TX1_PD_SHIFT) & LVB_PHY_POW_CTRL_TX1_PD_MASK) 262 #define LVB_PHY_POW_CTRL_TX1_PD_GET(x) (((uint32_t)(x) & LVB_PHY_POW_CTRL_TX1_PD_MASK) >> LVB_PHY_POW_CTRL_TX1_PD_SHIFT) 263 264 /* 265 * TX0_PD (RW) 266 * 267 * Power down control signal of channel tx0 268 * 0: Normal operation 269 * 1: Power down channel 270 */ 271 #define LVB_PHY_POW_CTRL_TX0_PD_MASK (0x1U) 272 #define LVB_PHY_POW_CTRL_TX0_PD_SHIFT (0U) 273 #define LVB_PHY_POW_CTRL_TX0_PD_SET(x) (((uint32_t)(x) << LVB_PHY_POW_CTRL_TX0_PD_SHIFT) & LVB_PHY_POW_CTRL_TX0_PD_MASK) 274 #define LVB_PHY_POW_CTRL_TX0_PD_GET(x) (((uint32_t)(x) & LVB_PHY_POW_CTRL_TX0_PD_MASK) >> LVB_PHY_POW_CTRL_TX0_PD_SHIFT) 275 276 /* Bitfield definition for register of struct array TX_PHY: CTL0 */ 277 /* 278 * TX_IDLE (RW) 279 * 280 * Force the high-speed differential signal to common mode. 281 * This signal can be set during IP power up stage to prevent unexpected leakage current in TXP/TXN 282 * 0: Normal operation 283 * 1: Force TXPN /TXMN to common mode 284 */ 285 #define LVB_TX_PHY_CTL0_TX_IDLE_MASK (0x100000UL) 286 #define LVB_TX_PHY_CTL0_TX_IDLE_SHIFT (20U) 287 #define LVB_TX_PHY_CTL0_TX_IDLE_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_IDLE_SHIFT) & LVB_TX_PHY_CTL0_TX_IDLE_MASK) 288 #define LVB_TX_PHY_CTL0_TX_IDLE_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_IDLE_MASK) >> LVB_TX_PHY_CTL0_TX_IDLE_SHIFT) 289 290 /* 291 * TX_RTERM_EN (RW) 292 * 293 * Inner Terminal Resistance enable 294 * 0: Disable rterm 2000ohm 295 * 1: Enable rterm 100ohm 296 */ 297 #define LVB_TX_PHY_CTL0_TX_RTERM_EN_MASK (0x80000UL) 298 #define LVB_TX_PHY_CTL0_TX_RTERM_EN_SHIFT (19U) 299 #define LVB_TX_PHY_CTL0_TX_RTERM_EN_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_RTERM_EN_SHIFT) & LVB_TX_PHY_CTL0_TX_RTERM_EN_MASK) 300 #define LVB_TX_PHY_CTL0_TX_RTERM_EN_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_RTERM_EN_MASK) >> LVB_TX_PHY_CTL0_TX_RTERM_EN_SHIFT) 301 302 /* 303 * TX_BUS_WIDTH (RW) 304 * 305 * Parallel data bus width select: 306 * 000: 4-bit mode, txN_data[3:0] are valid, txN_data[11:4] can be arbitrary state. 307 * 001: 6-bit mode, txN_data[5:0] are valid, txN_data[11:6] can be arbitrary state. 308 * 010: 7-bit mode. txN_data[6:0] are valid, txN_data[11:7] can be arbitrary state. 309 * 011: 8-bit mode. txN_data[7:0] are valid, txN_data[11:8] can be arbitrary state. 310 * 100: 9-bit mode. txN_data[8:0] are valid, txN_data[11:9] can be arbitrary state. 311 * 101: 10-bit mode. txN_data[9:0] are valid, txN_data[11:10] can be arbitrary state. 312 * 110: 11-bit mode. txN_data[10:0] are valid, txN_data[11] can be arbitrary state. 313 * 111: 12-bit mode. txN_data[11:0] are valid 314 */ 315 #define LVB_TX_PHY_CTL0_TX_BUS_WIDTH_MASK (0x70000UL) 316 #define LVB_TX_PHY_CTL0_TX_BUS_WIDTH_SHIFT (16U) 317 #define LVB_TX_PHY_CTL0_TX_BUS_WIDTH_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_BUS_WIDTH_SHIFT) & LVB_TX_PHY_CTL0_TX_BUS_WIDTH_MASK) 318 #define LVB_TX_PHY_CTL0_TX_BUS_WIDTH_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_BUS_WIDTH_MASK) >> LVB_TX_PHY_CTL0_TX_BUS_WIDTH_SHIFT) 319 320 /* 321 * TX_PHASE_SEL (RW) 322 * 323 * data/clock lane output phase adjustment: 324 * 0000: 0 325 * 0001: data lane is 1/32, clock lane is 1/16 326 * 0010: data lane is 2/32, clock lane is 2/16 327 * 0011: data lane is 3/32, clock lane is 3/16 328 * 0100: data lane is 4/32, clock lane is 4/16 329 * 0101: data lane is 5/32, clock lane is 5/16 330 * 0110: data lane is 6/32, clock lane is 6/16 331 * 0111: data lane is 7/32, clock lane is 7/16 332 * 1000: data lane is 8/32, clock lane is 8/16 333 * 1001: data lane is 9/32, clock lane is 9/16 334 * 1010: data lane is 10/32, clock lane is 10/16 335 * 1011: data lane is 11/32, clock lane is 11/16 336 * 1100: data lane is 12/32, clock lane is 12/16 337 * 1101: data lane is 13/32, clock lane is 13/16 338 * 1110: data lane is 14/32, clock lane is 14/16 339 * 1111: data lane is 15/32, clock lane is 15/16 340 */ 341 #define LVB_TX_PHY_CTL0_TX_PHASE_SEL_MASK (0xF000U) 342 #define LVB_TX_PHY_CTL0_TX_PHASE_SEL_SHIFT (12U) 343 #define LVB_TX_PHY_CTL0_TX_PHASE_SEL_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_PHASE_SEL_SHIFT) & LVB_TX_PHY_CTL0_TX_PHASE_SEL_MASK) 344 #define LVB_TX_PHY_CTL0_TX_PHASE_SEL_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_PHASE_SEL_MASK) >> LVB_TX_PHY_CTL0_TX_PHASE_SEL_SHIFT) 345 346 /* 347 * TX_VCOM (RW) 348 * 349 * output Common Mode Voltage adjustment(Unit: V). 350 * 0000: 0.7 351 * 0001: 0.8 352 * 0010: 0.9 353 * 0011: 1.0 354 * 0100: 1.1 355 * 0101: 1.2 356 * 0110: 1.3 357 * 0111: 1.4 358 * 1000~1111: 1.5 359 */ 360 #define LVB_TX_PHY_CTL0_TX_VCOM_MASK (0xF00U) 361 #define LVB_TX_PHY_CTL0_TX_VCOM_SHIFT (8U) 362 #define LVB_TX_PHY_CTL0_TX_VCOM_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_VCOM_SHIFT) & LVB_TX_PHY_CTL0_TX_VCOM_MASK) 363 #define LVB_TX_PHY_CTL0_TX_VCOM_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_VCOM_MASK) >> LVB_TX_PHY_CTL0_TX_VCOM_SHIFT) 364 365 /* 366 * TX_AMP (RW) 367 * 368 * Output voltage Adjustment(Unit: mV). 369 * 0000 : 50 370 * 0001: 100 371 * 0010: 150 372 * 0011: 200 373 * 0100: 250 374 * 0101: 300 375 * 0110: 350 376 * 0111: 400 377 * 1000: 450 378 * 1001: 500 379 * 1010: 550 380 * 1011~1111: 600 381 */ 382 #define LVB_TX_PHY_CTL0_TX_AMP_MASK (0xF0U) 383 #define LVB_TX_PHY_CTL0_TX_AMP_SHIFT (4U) 384 #define LVB_TX_PHY_CTL0_TX_AMP_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_AMP_SHIFT) & LVB_TX_PHY_CTL0_TX_AMP_MASK) 385 #define LVB_TX_PHY_CTL0_TX_AMP_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_AMP_MASK) >> LVB_TX_PHY_CTL0_TX_AMP_SHIFT) 386 387 /* 388 * TX_SR (RW) 389 * 390 * output slew-rate trimming 391 * 00: slowest slew-rate; 392 * 11: fastest slew-rate 393 */ 394 #define LVB_TX_PHY_CTL0_TX_SR_MASK (0xCU) 395 #define LVB_TX_PHY_CTL0_TX_SR_SHIFT (2U) 396 #define LVB_TX_PHY_CTL0_TX_SR_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_SR_SHIFT) & LVB_TX_PHY_CTL0_TX_SR_MASK) 397 #define LVB_TX_PHY_CTL0_TX_SR_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_SR_MASK) >> LVB_TX_PHY_CTL0_TX_SR_SHIFT) 398 399 /* 400 * TX_DEEMP (RW) 401 * 402 * output de-emphasis level trimming(Unit: dB) 403 * 00: 0 404 * 01: 2.5 405 * 10: 6.0 406 * 11: 6.0 407 */ 408 #define LVB_TX_PHY_CTL0_TX_DEEMP_MASK (0x3U) 409 #define LVB_TX_PHY_CTL0_TX_DEEMP_SHIFT (0U) 410 #define LVB_TX_PHY_CTL0_TX_DEEMP_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL0_TX_DEEMP_SHIFT) & LVB_TX_PHY_CTL0_TX_DEEMP_MASK) 411 #define LVB_TX_PHY_CTL0_TX_DEEMP_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL0_TX_DEEMP_MASK) >> LVB_TX_PHY_CTL0_TX_DEEMP_SHIFT) 412 413 /* Bitfield definition for register of struct array TX_PHY: CTL1 */ 414 /* 415 * TX_CTL (RW) 416 * 417 */ 418 #define LVB_TX_PHY_CTL1_TX_CTL_MASK (0xFFFFFUL) 419 #define LVB_TX_PHY_CTL1_TX_CTL_SHIFT (0U) 420 #define LVB_TX_PHY_CTL1_TX_CTL_SET(x) (((uint32_t)(x) << LVB_TX_PHY_CTL1_TX_CTL_SHIFT) & LVB_TX_PHY_CTL1_TX_CTL_MASK) 421 #define LVB_TX_PHY_CTL1_TX_CTL_GET(x) (((uint32_t)(x) & LVB_TX_PHY_CTL1_TX_CTL_MASK) >> LVB_TX_PHY_CTL1_TX_CTL_SHIFT) 422 423 424 425 /* PHY_POW_CTRL register group index macro definition */ 426 #define LVB_PHY_POW_CTRL_LVDS0 (0UL) 427 #define LVB_PHY_POW_CTRL_LVDS1 (1UL) 428 429 /* TX_PHY register group index macro definition */ 430 #define LVB_TX_PHY_LVDS0_TX0 (0UL) 431 #define LVB_TX_PHY_LVDS0_TX1 (1UL) 432 #define LVB_TX_PHY_LVDS0_TX2 (1UL) 433 #define LVB_TX_PHY_LVDS0_TX3 (3UL) 434 #define LVB_TX_PHY_LVDS0_TXCK (4UL) 435 #define LVB_TX_PHY_LVDS1_TX0 (5UL) 436 #define LVB_TX_PHY_LVDS1_TX1 (6UL) 437 #define LVB_TX_PHY_LVDS1_TX2 (7UL) 438 #define LVB_TX_PHY_LVDS1_TX3 (8UL) 439 #define LVB_TX_PHY_LVDS1_TXCK (9UL) 440 441 442 #endif /* HPM_LVB_H */ 443