Skip to content

Commit

Permalink
media: dvb-frontends\stid135: Change LLR calculation.
Browse files Browse the repository at this point in the history
  • Loading branch information
crazycat69 committed Sep 11, 2023
1 parent 07553ef commit 0a3fbba
Showing 1 changed file with 48 additions and 44 deletions.
92 changes: 48 additions & 44 deletions drivers/media/dvb-frontends/stid135/stid135_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -11604,43 +11604,55 @@ fe_lla_error_t get_current_llr(fe_stid135_handle_t handle,enum fe_stid135_demod
s32 fld_value[2];
struct fe_stid135_internal_param *pParams;
pParams = (struct fe_stid135_internal_param *) handle;
// Bit rate = Mclk * tsfifo_bitrate / 16384

ChipGetField(pParams->handle_demod, FLD_FC8CODEW_DVBSX_HWARE_TSBITRATE1_TSFIFO_BITRATE(demod_path), &(fld_value[0]));
ChipGetField(pParams->handle_demod, FLD_FC8CODEW_DVBSX_HWARE_TSBITRATE0_TSFIFO_BITRATE(demod_path), &(fld_value[1]));

raw_bit_rate = ((fld_value[0]) << 8) + (fld_value[1]);
FE_STiD135_GetMclkFreq(pParams, (u32*)&(fld_value[0]));
raw_bit_rate = (s32)(((fld_value[0])/16384)) * raw_bit_rate;
printk("\nBit rate = %d Mbits/s\n", raw_bit_rate/1000000);
// LLR = TS bitrate * 1 / PR
if(pParams->demod_results[demod_path-1].modcode != 0) {
if(pParams->demod_results[demod_path-1].standard == FE_SAT_DVBS2_STANDARD) {
if(pParams->demod_results[demod_path-1].modcode <= 131)
*current_llr = (raw_bit_rate / 100) * dvbs2_modcode_for_llr_x100[pParams->demod_results[demod_path-1].modcode];
}
if(pParams->demod_results[demod_path-1].standard == FE_SAT_DVBS1_STANDARD) {
if(pParams->demod_results[demod_path-1].puncture_rate <= 8)
*current_llr = (raw_bit_rate / 100) * dvbs1_modcode_for_llr_x100[pParams->demod_results[demod_path-1].puncture_rate];
}
if(*current_llr != 0)
printk("Current LLR = %d MLLR/s\n", *current_llr/1000000);
else
printk("LLR unknown\n");


if((*current_llr/1000)<80000)
fe_stid135_set_maxllr_rate(handle,demod_path,90);
else if(((*current_llr/1000)>80000)&&((*current_llr/1000)<113000))
fe_stid135_set_maxllr_rate(handle,demod_path,129);
else if(((*current_llr/1000)>113000)&&((*current_llr/1000)<162000))
fe_stid135_set_maxllr_rate(handle,demod_path,180);
else
fe_stid135_set_maxllr_rate(handle,demod_path,250);
//printk("Symbol rate = %d\n", pParams->demod_results[demod_path-1].symbol_rate);
*current_llr = pParams->demod_results[demod_path-1].symbol_rate;
switch(pParams->demod_results[demod_path-1].modulation)
{
case FE_SAT_MOD_QPSK:
*current_llr *= 2;
break;
case FE_SAT_MOD_8PSK:
case FE_SAT_MOD_8PSK_L:
*current_llr *= 3;
break;
case FE_SAT_MOD_16APSK:
case FE_SAT_MOD_16APSK_L:
*current_llr *= 4;
break;
case FE_SAT_MOD_32APSK:
case FE_SAT_MOD_32APSK_L:
*current_llr *= 5;
break;
case FE_SAT_MOD_64APSK:
case FE_SAT_MOD_64APSK_L:
*current_llr *= 6;
break;
case FE_SAT_MOD_128APSK:
*current_llr *= 7;
break;
case FE_SAT_MOD_256APSK:
case FE_SAT_MOD_256APSK_L:
*current_llr *= 8;
break;
case FE_SAT_MOD_1024APSK:
*current_llr *= 10;
break;
}


if(*current_llr != 0)
printk("Current LLR = %d MLLR/s\n", *current_llr/1000000);
else
printk("LLR unknown\n");

} else printk("LLR cannot be computed because dummy PLF!!\n");
if((*current_llr/1000)<90000)
fe_stid135_set_maxllr_rate(handle,demod_path,90);
else if(((*current_llr/1000)>=90000)&&((*current_llr/1000)<129000))
fe_stid135_set_maxllr_rate(handle,demod_path,129);
else if(((*current_llr/1000)>=129000)&&((*current_llr/1000)<180000))
fe_stid135_set_maxllr_rate(handle,demod_path,180);
else
fe_stid135_set_maxllr_rate(handle,demod_path,250);

ChipGetField(pParams->handle_demod, FLD_FC8CODEW_DVBSX_DEMOD_HDEBITCFG0_SDEMAP_MAXLLRRATE(demod_path), &max_llr_allowed);

Expand All @@ -11651,25 +11663,17 @@ fe_lla_error_t get_current_llr(fe_stid135_handle_t handle,enum fe_stid135_demod
break;
case 1:
printk("Max LLR allowed = 180 MLLR/s\n");
if(*current_llr > 162000000)
if(*current_llr > 180000000)
printk("Careful! LLR may reach max allowed LLR!\n");
break;
case 2:
FE_STiD135_GetMclkFreq(handle, (u32*)&(fld_value[0])) ;

printk("Max LLR allowed = %d MLLR/s\n", fld_value[0]);

FE_STiD135_GetMclkFreq(handle, (u32*)&(fld_value[0])) ;

printk("Max LLR allowed = %d MLLR/s\n", fld_value[0]/1000000);
if(*current_llr >fld_value[0]/10*9)
printk("Careful! LLR may reach max allowed LLR!\n");

break;
case 3:
printk("Max LLR allowed = 90 MLLR/s\n");
if(*current_llr > 81000000 )
printk("Careful! LLR may reach max allowed LLR!\n");

break;
default:
printk("Unknown max LLR\n");
Expand Down

0 comments on commit 0a3fbba

Please sign in to comment.