From 3615873feebe2d86f38e45acafb0265ea7246916 Mon Sep 17 00:00:00 2001 From: Derek Kozel Date: Mon, 30 Apr 2018 15:04:35 +0100 Subject: uhd: Added LMX2592 driver --- host/lib/ic_reg_maps/CMakeLists.txt | 5 + host/lib/ic_reg_maps/gen_lmx2592_regs.py | 352 +++++++++++++++++++++++++++++++ 2 files changed, 357 insertions(+) create mode 100755 host/lib/ic_reg_maps/gen_lmx2592_regs.py (limited to 'host/lib/ic_reg_maps') diff --git a/host/lib/ic_reg_maps/CMakeLists.txt b/host/lib/ic_reg_maps/CMakeLists.txt index c917f9627..de0e0660e 100644 --- a/host/lib/ic_reg_maps/CMakeLists.txt +++ b/host/lib/ic_reg_maps/CMakeLists.txt @@ -122,6 +122,11 @@ LIBUHD_PYTHON_GEN_SOURCE( ${CMAKE_CURRENT_BINARY_DIR}/adf5356_regs.hpp ) +LIBUHD_PYTHON_GEN_SOURCE( + ${CMAKE_CURRENT_SOURCE_DIR}/gen_lmx2592_regs.py + ${CMAKE_CURRENT_BINARY_DIR}/lmx2592_regs.hpp +) + LIBUHD_PYTHON_GEN_SOURCE( ${CMAKE_CURRENT_SOURCE_DIR}/gen_lmk04828_regs.py ${CMAKE_CURRENT_BINARY_DIR}/lmk04828_regs.hpp diff --git a/host/lib/ic_reg_maps/gen_lmx2592_regs.py b/host/lib/ic_reg_maps/gen_lmx2592_regs.py new file mode 100755 index 000000000..c39665ee9 --- /dev/null +++ b/host/lib/ic_reg_maps/gen_lmx2592_regs.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python +# +# Copyright 2017 Ettus Research, A National Instruments Company +# +# SPDX-License-Identifier: GPL-3.0 +# + +######################################################################## +# Template for raw text data describing registers +# name addr[bit range inclusive] default optional enums +######################################################################## +REGS_TMPL="""\ +######################################################################## +## address 0 +######################################################################## +powerdown 0[0] 0 +reset 0[1] 0 +muxout_sel 0[2] 1 readback, lock_detect +fcal_enable 0[3] 1 +acal_enable 0[4] 1 +fcal_lpfd_adj 0[5:6] 0 unused, 20mhz, 10mhz, 5mhz +fcal_hpfd_adf 0[7:8] 0 unused, 100mhz, 150mhz, 200mhz +reg0_reserved0 0[9:12] 0x1 +ld_enable 0[13] 1 +reg0_reserved1 0[14:15] 0x0 +######################################################################## +## address 1 +######################################################################## +cal_clk_div 1[0:2] 3 +reg1_reserved0 1[3:15] 0x101 +######################################################################## +## address 2 +######################################################################## +reg2_reserved0 2[0:15] 0x500 +######################################################################## +## address 4 +######################################################################## +reg4_reserved0 4[0:7] 0x43 +acal_cmp_delay 4[8:15] 25 +######################################################################## +## address 7 +######################################################################## +reg7_reserved0 7[0:15] 0x28b2 +######################################################################## +## address 8 +######################################################################## +reg8_reserved0 8[0:9] 0x84 +vco_capctrl_ovr 8[10] 0 +reg8_reserved1 8[11:12] 0x2 +vco_idac_ovr 8[13] 0 +reg8_reserved2 8[14:15] 0x0 +######################################################################## +## address 9 +######################################################################## +reg9_reserved0 9[0:8] 0x102 +ref_enable 9[9] 1 +reg9_reserved1 9[10] 0x0 +osc_doubler 9[11] 0 +reg9_reserved2 9[12:15] 0x0 +######################################################################## +## address 10 +######################################################################## +reg10_reserved0 10[0:6] 0x58 +mult 10[7:11] 1 +reg10_reserved1 10[12:15] 0x1 +######################################################################## +## address 11 +######################################################################## +reg11_reserved0 11[0:3] 0x8 +pll_r 11[4:11] 1 +reg11_reserved1 11[12:15] 0x0 +######################################################################## +## address 12 +######################################################################## +pll_r_pre 12[0:11] 1 +reg12_reserved0 12[12:15] 0x7 +######################################################################## +## address 13 +######################################################################## +reg13_reserved0 13[0:7] 0x0 +pdf_ctl 13[8:9] 0 dual_pdf=0, single_pfd=3 +reg13_reserved1 13[10:13] 0x0 +cp_enable 13[14] 1 +reg13_reserved2 13[15] 0x0 +######################################################################## +## address 14 +######################################################################## +cp_icoarse 14[0:1] 1 multiply_by_1, multiply_by_2, multiply_by_1_5, multiply_by_2_5 +cp_iup 14[2:6] 3 +cp_idn 14[7:11] 3 +reg14_reserved0 14[12:15] 0x0 +######################################################################## +## address 19 +######################################################################## +reg19_reserved0 19[0:2] 0x5 +vco_idac 19[3:11] 300 +reg19_reserved1 19[12:15] 0x0 +######################################################################## +## address 20 +######################################################################## +acal_vco_idac_strt 20[0:8] 300 +reg20_reserved0 20[9:15] 0x0 +######################################################################## +## address 22 +######################################################################## +vco_capctrl 22[0:7] 0 +reg22_reserved0 22[8:15] 0x23 +######################################################################## +## address 23 +######################################################################## +reg23_reserved0 23[0:9] 0x42 +vco_sel_force 23[10] 0 +vco_sel 23[11:13] 1 +fcal_vco_sel_strt 23[14] 0 +reg23_reserved1 23[15] 0x1 +######################################################################## +## address 24 +######################################################################## +reg24_reserved0 24[0:15] 0x509 +######################################################################## +## address 25 +######################################################################## +reg25_reserved0 25[0:15] 0x0 +######################################################################## +## address 28 +######################################################################## +reg28_reserved0 28[0:15] 0x2924 +######################################################################## +## address 29 +######################################################################## +reg29_reserved0 29[0:15] 0x84 +######################################################################## +## address 30 +######################################################################## +vco_doubler_en 30[0] 0 +reg30_reserved0 30[1:9] 0x1a +mash_ditherer 30[10] 0 +reg30_reserved1 30[11:15] 0x0 +######################################################################## +## address 31 +######################################################################## +reg31_reserved0 31[0:6] 0x1 +chdiv_dist_pd 31[7] 0 +reg31_reserved1 31[8] 0x0 +vco_dista_pd 31[9] 0 +vco_distb_pd 31[10] 1 +reg31_reserved2 31[11:15] 0x0 +######################################################################## +## address 32 +######################################################################## +reg32_reserved0 32[0:15] 0x210a +######################################################################## +## address 33 +######################################################################## +reg33_reserved0 33[0:15] 0x2a0a +######################################################################## +## address 34 +######################################################################## +reg34_reserved0 34[0:4] 0xa +chdiv_en 34[5] 1 +reg34_reserved1 34[6:15] 0x30f +######################################################################## +## address 35 +######################################################################## +reg35_reserved0 35[0] 0x1 +chdiv_seg1_en 35[1] 0 +chdiv_seg1 35[2] 1 divide_by_2, divide_by_3 +reg35_reserved1 35[3:6] 0x3 +chdiv_seg2_en 35[7] 0 +chdiv_seg3_en 35[8] 0 +chdiv_seg2 35[9:12] 1 powerdown=0, divide_by_2=1, divide_by_4=2, divide_by_6=4, divide_by_8=8 +reg35_reserved2 35[13:15] 0x0 +######################################################################## +## address 36 +######################################################################## +chdiv_seg3 36[0:3] 1 powerdown=0, divide_by_2=1, divide_by_4=2, divide_by_6=4, divide_by_8=8 +chdiv_seg_sel 36[4:6] 1 powerdown=0, div_seg_1=1, div_seg_1_and_2=2, div_seg_1_2_and_3=4 +reg36_reserved0 36[7:9] 0x0 +chdiv_dista_en 36[10] 1 +chdiv_distb_en 36[11] 0 +reg36_reserved1 36[12:15] 0x0 +######################################################################## +## address 37 +######################################################################## +reg37_reserved0 37[0:11] 0x0 +pll_n_pre 37[12] 0 divide_by_2, divide_by_4 +reg37_reserved1 37[13:15] 0x2 +######################################################################## +## address 38 +######################################################################## +reg38_reserved0 38[0] 0x0 +pll_n 38[1:12] 27 +reg38_reserved1 38[13:15] 0x0 +######################################################################## +## address 39 +######################################################################## +reg39_reserved0 39[0:7] 0x4 +pfd_dly 39[8:13] 2 4_clk_delay=1, 6_clk_delay=2, 8_clk_delay=4, 12_clk_delay=8, 16_clk_delay=16 +reg39_reserved1 39[14:15] 0x4 +######################################################################## +## address 40 +######################################################################## +pll_den_msb 40[0:15] 1000 +######################################################################## +## address 41 +######################################################################## +pll_den_lsb 41[0:15] 1000 +######################################################################## +## address 42 +######################################################################## +mash_seed_msb 42[0:15] 0 +######################################################################## +## address 43 +######################################################################## +mash_seed_lsb 43[0:15] 0 +######################################################################## +## address 44 +######################################################################## +pll_num_msb 44[0:15] 0 +######################################################################## +## address 45 +######################################################################## +pll_num_lsb 45[0:15] 0 +######################################################################## +## address 46 +######################################################################## +mash_order 46[0:2] 3 int_mode, first, second, third, fourth +reg46_reserved0 46[3:5] 0x4 +outa_pd 46[6] 0 +outb_pd 46[7] 1 +outa_power 46[8:13] 15 +reg46_reserved1 46[14:15] 0x0 +######################################################################## +## address 47 +######################################################################## +outb_power 47[0:5] 0 +reg47_reserved0 47[6:10] 0x3 +outa_mux 47[11:12] 0 divider=0, vco=1 +reg47_reserved1 47[13:15] 0x0 +######################################################################## +## address 48 +######################################################################## +outb_mux 48[0:1] 0 divider=0, vco=1 +reg48_reserved0 48[2:15] 0xff +######################################################################## +## address 59 +######################################################################## +reg59_reserved0 59[0:4] 0x0 +muxout_hdrv 59[5] 0 +reg59_reserved1 59[6:15] 0x0 +######################################################################## +## address 61 +######################################################################## +ld_type 61[0] 1 cal_status, vtune_detect +reg61_reserved0 61[1:15] 0x0 +######################################################################## +## address 62 +######################################################################## +reg62_reserved0 62[0:15] 0x0 +######################################################################## +## address 64 +######################################################################## +fjump_size 64[0:3] 15 +reg64_reserved0 64[4] 0x1 +ajump_size 64[5:7] 3 +fcal_fast 64[8] 0 +acal_fast 64[9] 0 +reg64_reserved1 64[10:15] 0x0 +""" + +######################################################################## +# Template for methods in the body of the struct +######################################################################## +BODY_TMPL="""\ +enum addr_t{ + ADDR_R0 = 0, + ADDR_R1 = 1, + ADDR_R2 = 2, + ADDR_R4 = 4, + ADDR_R7 = 7, + ADDR_R8 = 8, + ADDR_R9 = 9, + ADDR_R10 = 10, + ADDR_R11 = 11, + ADDR_R12 = 12, + ADDR_R13 = 13, + ADDR_R14 = 14, + ADDR_R19 = 19, + ADDR_R20 = 20, + ADDR_R22 = 22, + ADDR_R23 = 23, + ADDR_R24 = 24, + ADDR_R25 = 25, + ADDR_R28 = 28, + ADDR_R29 = 29, + ADDR_R30 = 30, + ADDR_R31 = 31, + ADDR_R32 = 32, + ADDR_R33 = 33, + ADDR_R34 = 34, + ADDR_R35 = 35, + ADDR_R36 = 36, + ADDR_R37 = 37, + ADDR_R38 = 38, + ADDR_R39 = 39, + ADDR_R40 = 40, + ADDR_R41 = 41, + ADDR_R42 = 42, + ADDR_R43 = 43, + ADDR_R44 = 44, + ADDR_R45 = 45, + ADDR_R46 = 46, + ADDR_R47 = 47, + ADDR_R48 = 48, + ADDR_R59 = 59, + ADDR_R61 = 61, + ADDR_R62 = 62, + ADDR_R64 = 64 +}; + +uint16_t get_reg(uint8_t addr){ + uint16_t reg = 0; + switch(addr){ + % for addr in [0,1,2,4,7,8,9,10,11,12,13,14,19,20,22,23,24,25,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,59,61,62,64]: + case ${addr}: + % for reg in filter(lambda r: r.get_addr() == addr, regs): + reg |= (uint16_t(${reg.get_name()}) & ${reg.get_mask()}) << ${reg.get_shift()}; + % endfor + break; + % endfor + } + return reg; +} + +std::set get_all_addrs() +{ + std::set addrs; + % for reg in regs: + // Hopefully, compilers will optimize out this mess... + addrs.insert(${reg.get_addr()}); + % endfor + return addrs; +} +""" + +if __name__ == '__main__': + import common; common.generate( + name='lmx2592_regs', + regs_tmpl=REGS_TMPL, + body_tmpl=BODY_TMPL, + file=__file__, + ) -- cgit v1.2.3