|
|
@ -360,7 +360,7 @@ static int is_fvco_valid(uint32_t fvco_z) |
|
|
|
/* check if the resulting fosc is valid */ |
|
|
|
/* check if the resulting fosc is valid */ |
|
|
|
if (fvco_z/1000 < E4K_FVCO_MIN_KHZ || |
|
|
|
if (fvco_z/1000 < E4K_FVCO_MIN_KHZ || |
|
|
|
fvco_z/1000 > E4K_FVCO_MAX_KHZ) { |
|
|
|
fvco_z/1000 > E4K_FVCO_MAX_KHZ) { |
|
|
|
fprintf(stderr, "Fvco %u invalid\n", fvco_z); |
|
|
|
fprintf(stderr, "[E4K] Fvco %u invalid\n", fvco_z); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -370,7 +370,7 @@ static int is_fvco_valid(uint32_t fvco_z) |
|
|
|
static int is_fosc_valid(uint32_t fosc) |
|
|
|
static int is_fosc_valid(uint32_t fosc) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (fosc < MHZ(16) || fosc > MHZ(30)) { |
|
|
|
if (fosc < MHZ(16) || fosc > MHZ(30)) { |
|
|
|
fprintf(stderr, "Fosc %u invalid\n", fosc); |
|
|
|
fprintf(stderr, "[E4K] Fosc %u invalid\n", fosc); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -380,7 +380,7 @@ static int is_fosc_valid(uint32_t fosc) |
|
|
|
static int is_z_valid(uint32_t z) |
|
|
|
static int is_z_valid(uint32_t z) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (z > 255) { |
|
|
|
if (z > 255) { |
|
|
|
fprintf(stderr, "Z %u invalid\n", z); |
|
|
|
fprintf(stderr, "[E4K] Z %u invalid\n", z); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -487,7 +487,7 @@ uint32_t e4k_compute_pll_params(struct e4k_pll_params *oscp, uint32_t fosc, uint |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//fprintf(stderr, "Fint=%u, R=%u\n", intended_flo, r);
|
|
|
|
//fprintf(stderr, "[E4K] Fint=%u, R=%u\n", intended_flo, r);
|
|
|
|
|
|
|
|
|
|
|
|
/* flo(max) = 1700MHz, R(max) = 48, we need 64bit! */ |
|
|
|
/* flo(max) = 1700MHz, R(max) = 48, we need 64bit! */ |
|
|
|
intended_fvco = (uint64_t)intended_flo * r; |
|
|
|
intended_fvco = (uint64_t)intended_flo * r; |
|
|
@ -573,7 +573,7 @@ int e4k_tune_freq(struct e4k_state *e4k, uint32_t freq) |
|
|
|
/* check PLL lock */ |
|
|
|
/* check PLL lock */ |
|
|
|
rc = e4k_reg_read(e4k, E4K_REG_SYNTH1); |
|
|
|
rc = e4k_reg_read(e4k, E4K_REG_SYNTH1); |
|
|
|
if (!(rc & 0x01)) { |
|
|
|
if (!(rc & 0x01)) { |
|
|
|
fprintf(stderr, "[E4K] PLL not locked!\n"); |
|
|
|
fprintf(stderr, "[E4K] PLL not locked for %u Hz!\n", freq); |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -717,7 +717,7 @@ static int find_stage_gain(uint8_t stage, int8_t val) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*! \brief Set the gain of one of the IF gain stages
|
|
|
|
/*! \brief Set the gain of one of the IF gain stages
|
|
|
|
* \param[e4k] handle to the tuner chip |
|
|
|
* \param [e4k] handle to the tuner chip |
|
|
|
* \param [stage] numbere of the stage (1..6) |
|
|
|
* \param [stage] numbere of the stage (1..6) |
|
|
|
* \param [value] gain value in dBm |
|
|
|
* \param [value] gain value in dBm |
|
|
|
* \returns 0 on success, negative in case of error |
|
|
|
* \returns 0 on success, negative in case of error |
|
|
@ -796,7 +796,7 @@ int e4k_manual_dc_offset(struct e4k_state *e4k, int8_t iofs, int8_t irange, int8 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/*! \brief Perform a DC offset calibration right now
|
|
|
|
/*! \brief Perform a DC offset calibration right now
|
|
|
|
* \param[e4k] handle to the tuner chip |
|
|
|
* \param [e4k] handle to the tuner chip |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
int e4k_dc_offset_calibrate(struct e4k_state *e4k) |
|
|
|
int e4k_dc_offset_calibrate(struct e4k_state *e4k) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -862,7 +862,7 @@ int e4k_dc_offset_gen_table(struct e4k_state *e4k) |
|
|
|
range_i = range & 0x3; |
|
|
|
range_i = range & 0x3; |
|
|
|
range_q = (range >> 4) & 0x3; |
|
|
|
range_q = (range >> 4) & 0x3; |
|
|
|
|
|
|
|
|
|
|
|
fprintf(stderr, "Table %u I=%u/%u, Q=%u/%u\n", |
|
|
|
fprintf(stderr, "[E4K] Table %u I=%u/%u, Q=%u/%u\n", |
|
|
|
i, range_i, offs_i, range_q, offs_q); |
|
|
|
i, range_i, offs_i, range_q, offs_q); |
|
|
|
|
|
|
|
|
|
|
|
/* write into the table */ |
|
|
|
/* write into the table */ |
|
|
|