diff --git a/ini.c b/ini.c index 80a15fb..844ee6c 100644 --- a/ini.c +++ b/ini.c @@ -603,6 +603,230 @@ static int parse_fem1_band2_prms_128x(char *l, struct wl12xx_ini *p) return 1; } +static int parse_fem2_band2_prms(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl1271_ini_fem_params_2 *gp = + &(p->ini1271.dyn_radio_params_2[2].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM2_TXBiPReferencePDvoltage_2_4G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM2_TxBiPReferencePower_2_4G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM2_TxBiPOffsetdB_2_4G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_2_4G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_2_4G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_2_4G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM2_DegradedLowToNormalThr_2_4G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM2_NormalToDegradedHighThr_2_4G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM2_TxPerChannelPowerLimits_2_4G_11b", l, val, + &gp->tx_per_chan_pwr_limits_11b); + + COMPARE_N_ADD("FEM2_TxPerChannelPowerLimits_2_4G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM2_TxPDVsRateOffsets_2_4G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM2_TxIbiasTable_2_4G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM2_RxFemInsertionLoss_2_4G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + +static int parse_fem2_band2_prms_128x(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl128x_ini_fem_params_2 *gp = + &(p->ini128x.dyn_radio_params_2[2].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM2_TxBiPReferencePDvoltage_2_4G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM2_TxBiPReferencePower_2_4G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM2_TxBiPOffsetdB_2_4G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_2_4G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_2_4G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_2_4G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM2_DegradedLowToNormalThr_2_4G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM2_NormalToDegradedHighThr_2_4G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM2_TxPerChannelPowerLimits_2_4G_11b", l, val, + &gp->tx_per_chan_pwr_limits_11b); + + COMPARE_N_ADD("FEM2_TxPerChannelPowerLimits_2_4G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM2_TxPDVsRateOffsets_2_4G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM2_TxPDVsChannelOffsets_2_4G", l, val, + &gp->tx_pd_vs_chan_offsets); + + COMPARE_N_ADD("FEM2_TxPDVsTemperature_2_4G", l, val, + &gp->tx_pd_vs_temperature); + + COMPARE_N_ADD("FEM2_TxIbiasTable_2_4G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM2_RxFemInsertionLoss_2_4G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + +static int parse_fem3_band2_prms(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl1271_ini_fem_params_2 *gp = + &(p->ini1271.dyn_radio_params_2[3].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM3_TXBiPReferencePDvoltage_2_4G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM3_TxBiPReferencePower_2_4G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM3_TxBiPOffsetdB_2_4G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_2_4G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_2_4G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_2_4G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM3_DegradedLowToNormalThr_2_4G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM3_NormalToDegradedHighThr_2_4G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM3_TxPerChannelPowerLimits_2_4G_11b", l, val, + &gp->tx_per_chan_pwr_limits_11b); + + COMPARE_N_ADD("FEM3_TxPerChannelPowerLimits_2_4G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM3_TxPDVsRateOffsets_2_4G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM3_TxIbiasTable_2_4G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM3_RxFemInsertionLoss_2_4G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + +static int parse_fem3_band2_prms_128x(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl128x_ini_fem_params_2 *gp = + &(p->ini128x.dyn_radio_params_2[3].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM3_TxBiPReferencePDvoltage_2_4G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM3_TxBiPReferencePower_2_4G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM3_TxBiPOffsetdB_2_4G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_2_4G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_2_4G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_2_4G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM3_DegradedLowToNormalThr_2_4G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM3_NormalToDegradedHighThr_2_4G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM3_TxPerChannelPowerLimits_2_4G_11b", l, val, + &gp->tx_per_chan_pwr_limits_11b); + + COMPARE_N_ADD("FEM3_TxPerChannelPowerLimits_2_4G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM3_TxPDVsRateOffsets_2_4G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM3_TxPDVsChannelOffsets_2_4G", l, val, + &gp->tx_pd_vs_chan_offsets); + + COMPARE_N_ADD("FEM3_TxPDVsTemperature_2_4G", l, val, + &gp->tx_pd_vs_temperature); + + COMPARE_N_ADD("FEM3_TxIbiasTable_2_4G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM3_RxFemInsertionLoss_2_4G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + static int parse_fem0_band5_prms(char *l, struct wl12xx_ini *p) { char *name, *val; @@ -815,6 +1039,218 @@ static int parse_fem1_band5_prms_128x(char *l, struct wl12xx_ini *p) return 1; } +static int parse_fem2_band5_prms(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl1271_ini_fem_params_5 *gp = + &(p->ini1271.dyn_radio_params_5[2].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM2_TXBiPReferencePDvoltage_5G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM2_TxBiPReferencePower_5G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM2_TxBiPOffsetdB_5G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_5G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_5G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_5G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM2_DegradedLowToNormalThr_5G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM2_NormalToDegradedHighThr_5G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM2_TxPerChannelPowerLimits_5G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM2_TxPDVsRateOffsets_5G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM2_TxIbiasTable_5G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM2_RxFemInsertionLoss_5G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + +static int parse_fem2_band5_prms_128x(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl128x_ini_fem_params_5 *gp = + &(p->ini128x.dyn_radio_params_5[2].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM2_TxBiPReferencePDvoltage_5G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM2_TxBiPReferencePower_5G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM2_TxBiPOffsetdB_5G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_5G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_5G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM2_TxPerRatePowerLimits_5G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM2_DegradedLowToNormalThr_5G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM2_NormalToDegradedHighThr_5G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM2_TxPerChannelPowerLimits_5G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM2_TxPDVsRateOffsets_5G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM2_TxPDVsChannelOffsets_5G", l, val, + &gp->tx_pd_vs_chan_offsets); + + COMPARE_N_ADD("FEM2_TxPDVsTemperature_5G", l, val, + &gp->tx_pd_vs_temperature); + + COMPARE_N_ADD("FEM2_TxIbiasTable_5G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM2_RxFemInsertionLoss_5G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + +static int parse_fem3_band5_prms(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl1271_ini_fem_params_5 *gp = + &(p->ini1271.dyn_radio_params_5[3].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM3_TXBiPReferencePDvoltage_5G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM3_TxBiPReferencePower_5G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM3_TxBiPOffsetdB_5G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_5G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_5G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_5G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM3_DegradedLowToNormalThr_5G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM3_NormalToDegradedHighThr_5G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM3_TxPerChannelPowerLimits_5G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM3_TxPDVsRateOffsets_5G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM3_TxIbiasTable_5G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM3_RxFemInsertionLoss_5G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + +static int parse_fem3_band5_prms_128x(char *l, struct wl12xx_ini *p) +{ + char *name, *val; + struct wl128x_ini_fem_params_5 *gp = + &(p->ini128x.dyn_radio_params_5[3].params); + + if (split_line(l, &name, &val)) + return 1; + + COMPARE_N_ADD2("FEM3_TxBiPReferencePDvoltage_5G", l, val, + &gp->tx_bip_ref_pd_voltage); + + COMPARE_N_ADD("FEM3_TxBiPReferencePower_5G", l, val, + &gp->tx_bip_ref_power); + + COMPARE_N_ADD("FEM3_TxBiPOffsetdB_5G", l, val, + &gp->tx_bip_ref_offset); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_5G_Normal", l, val, + &gp->tx_per_rate_pwr_limits_normal); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_5G_Degraded", l, val, + &gp->tx_per_rate_pwr_limits_degraded); + + COMPARE_N_ADD("FEM3_TxPerRatePowerLimits_5G_Extreme", l, val, + &gp->tx_per_rate_pwr_limits_extreme); + + COMPARE_N_ADD("FEM3_DegradedLowToNormalThr_5G", l, val, + &gp->degraded_low_to_normal_thr); + + COMPARE_N_ADD("FEM3_NormalToDegradedHighThr_5G", l, val, + &gp->normal_to_degraded_high_thr); + + COMPARE_N_ADD("FEM3_TxPerChannelPowerLimits_5G_OFDM", l, val, + &gp->tx_per_chan_pwr_limits_ofdm); + + COMPARE_N_ADD("FEM3_TxPDVsRateOffsets_5G", l, val, + &gp->tx_pd_vs_rate_offsets); + + COMPARE_N_ADD("FEM3_TxPDVsChannelOffsets_5G", l, val, + &gp->tx_pd_vs_chan_offsets); + + COMPARE_N_ADD("FEM3_TxPDVsTemperature_5G", l, val, + &gp->tx_pd_vs_temperature); + + COMPARE_N_ADD("FEM3_TxIbiasTable_5G", l, val, + &gp->tx_ibias); + + COMPARE_N_ADD("FEM3_RxFemInsertionLoss_5G", l, val, + &gp->rx_fem_insertion_loss); + + fprintf(stderr, "Unable to parse: (%s)\n", l); + + return 1; +} + static int parse_fem_prms_128x(char *l, struct wl12xx_ini *p) { char *name, *val; @@ -872,7 +1308,7 @@ static int find_section(const char *l, enum wl1271_ini_section *st, int *cntr, } if (strncmp("FEM0_TXBiPReferencePDvoltage_2_4G", l, 33) == 0 || - strncmp("FEM0_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { + strncmp("FEM0_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { *st = FEM0_BAND2_PRMS; cmn->fem0_bands++; if (arch == WL128X_ARCH) @@ -884,7 +1320,7 @@ static int find_section(const char *l, enum wl1271_ini_section *st, int *cntr, } if (strncmp("FEM1_TXBiPReferencePDvoltage_2_4G", l, 33) == 0 || - strncmp("FEM1_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { + strncmp("FEM1_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { *st = FEM1_BAND2_PRMS; cmn->fem1_bands++; if (arch == WL128X_ARCH) @@ -895,9 +1331,32 @@ static int find_section(const char *l, enum wl1271_ini_section *st, int *cntr, return 0; } + if (strncmp("FEM2_TXBiPReferencePDvoltage_2_4G", l, 33) == 0 || + strncmp("FEM2_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { + *st = FEM2_BAND2_PRMS; + cmn->fem2_bands++; + if (arch == WL128X_ARCH) + *cntr = 15; + else + *cntr = 13; + + return 0; + } + + if (strncmp("FEM3_TXBiPReferencePDvoltage_2_4G", l, 33) == 0 || + strncmp("FEM3_TxBiPReferencePDvoltage_2_4G", l, 33) == 0) { + *st = FEM3_BAND2_PRMS; + cmn->fem3_bands++; + if (arch == WL128X_ARCH) + *cntr = 15; + else + *cntr = 13; + + return 0; + } if (strncmp("FEM0_TXBiPReferencePDvoltage_5G", l, 31) == 0 || - strncmp("FEM0_TxBiPReferencePDvoltage_5G", l, 31) == 0) { + strncmp("FEM0_TxBiPReferencePDvoltage_5G", l, 31) == 0) { *st = FEM0_BAND5_PRMS; cmn->fem0_bands++; if (arch == WL128X_ARCH) @@ -907,8 +1366,9 @@ static int find_section(const char *l, enum wl1271_ini_section *st, int *cntr, return 0; } + if (strncmp("FEM1_TXBiPReferencePDvoltage_5G", l, 31) == 0 || - strncmp("FEM1_TxBiPReferencePDvoltage_5G", l, 31) == 0) { + strncmp("FEM1_TxBiPReferencePDvoltage_5G", l, 31) == 0) { *st = FEM1_BAND5_PRMS; cmn->fem1_bands++; if (arch == WL128X_ARCH) @@ -919,6 +1379,30 @@ static int find_section(const char *l, enum wl1271_ini_section *st, int *cntr, return 0; } + if (strncmp("FEM2_TXBiPReferencePDvoltage_5G", l, 31) == 0 || + strncmp("FEM2_TxBiPReferencePDvoltage_5G", l, 31) == 0) { + *st = FEM2_BAND5_PRMS; + cmn->fem2_bands++; + if (arch == WL128X_ARCH) + *cntr = 14; + else + *cntr = 12; + + return 0; + } + + if (strncmp("FEM3_TXBiPReferencePDvoltage_5G", l, 31) == 0 || + strncmp("FEM3_TxBiPReferencePDvoltage_5G", l, 31) == 0) { + *st = FEM3_BAND5_PRMS; + cmn->fem3_bands++; + if (arch == WL128X_ARCH) + *cntr = 14; + else + *cntr = 12; + + return 0; + } + return 1; } @@ -955,12 +1439,24 @@ static int ini_parse_line(char *l, struct wl12xx_common *cmn) case FEM1_BAND2_PRMS: /* FEM1 band 2.4GHz parameters */ cntr--; return cmn->parse_ops->prs_fem1_band2_prms(l, &cmn->ini); + case FEM2_BAND2_PRMS: /* FEM2 band 2.4GHz parameters */ + cntr--; + return cmn->parse_ops->prs_fem2_band2_prms(l, &cmn->ini); + case FEM3_BAND2_PRMS: /* FEM3 band 2.4GHz parameters */ + cntr--; + return cmn->parse_ops->prs_fem3_band2_prms(l, &cmn->ini); case FEM0_BAND5_PRMS: /* FEM0 band 5GHz parameters */ cntr--; return cmn->parse_ops->prs_fem0_band5_prms(l, &cmn->ini); case FEM1_BAND5_PRMS: /* FEM1 band 5GHz parameters */ cntr--; return cmn->parse_ops->prs_fem1_band5_prms(l, &cmn->ini); + case FEM2_BAND5_PRMS: /* FEM2 band 5GHz parameters */ + cntr--; + return cmn->parse_ops->prs_fem2_band5_prms(l, &cmn->ini); + case FEM3_BAND5_PRMS: /* FEM3 band 5GHz parameters */ + cntr--; + return cmn->parse_ops->prs_fem3_band5_prms(l, &cmn->ini); case UKNOWN_SECTION: /* added because of compilation warning. handeled in find_section() */ break; @@ -1071,8 +1567,12 @@ static struct wl12xx_parse_ops wl1271_parse_ops = { .prs_band5_prms = parse_band5_prms, .prs_fem0_band2_prms = parse_fem0_band2_prms, .prs_fem1_band2_prms = parse_fem1_band2_prms, + .prs_fem2_band2_prms = parse_fem2_band2_prms, + .prs_fem3_band2_prms = parse_fem3_band2_prms, .prs_fem0_band5_prms = parse_fem0_band5_prms, .prs_fem1_band5_prms = parse_fem1_band5_prms, + .prs_fem2_band5_prms = parse_fem2_band5_prms, + .prs_fem3_band5_prms = parse_fem3_band5_prms, .is_dual_mode = is_dual_mode, }; @@ -1082,8 +1582,12 @@ static struct wl12xx_parse_ops wl128x_parse_ops = { .prs_band5_prms = parse_band5_prms_128x, .prs_fem0_band2_prms = parse_fem0_band2_prms_128x, .prs_fem1_band2_prms = parse_fem1_band2_prms_128x, + .prs_fem2_band2_prms = parse_fem2_band2_prms_128x, + .prs_fem3_band2_prms = parse_fem3_band2_prms_128x, .prs_fem0_band5_prms = parse_fem0_band5_prms_128x, .prs_fem1_band5_prms = parse_fem1_band5_prms_128x, + .prs_fem2_band5_prms = parse_fem2_band5_prms_128x, + .prs_fem3_band5_prms = parse_fem3_band5_prms_128x, .is_dual_mode = is_dual_mode_128x, }; @@ -1157,6 +1661,8 @@ int read_ini(const char *filename, struct wl12xx_common *cmn) cmn->auto_fem = 0; cmn->fem0_bands = 0; cmn->fem1_bands = 0; + cmn->fem2_bands = 0; + cmn->fem3_bands = 0; f = fopen(filename, "r"); if (f == NULL) { diff --git a/ini.h b/ini.h index 56ccde4..27f95a1 100644 --- a/ini.h +++ b/ini.h @@ -187,15 +187,18 @@ struct wl128x_ini_fem_params_5 { /* NVS data structure */ #define WL1271_INI_NVS_SECTION_SIZE 468 -#define WL1271_INI_FEM_MODULE_COUNT 2 -#define WL1271_INI_LEGACY_NVS_FILE_SIZE 800 +/* We have four FEM module types: 0-RFMD, 1-TQS, 2-SKW, 3-TQS_HP */ +#define WL1271_INI_FEM_MODULE_COUNT 4 -#define WL12XX_NVS_FEM_MODULE_COUNT 2 +#define WL1271_INI_LEGACY_NVS_FILE_SIZE 800 /* - * Map ini FEM type 1 to NVS entry 1, the rest to entry 0 - - * this is in preperation for future new FEM types + * In NVS we only store two FEM module entries - + * FEM modules 0,2,3 are stored in entry 0 + * FEM module 1 is stored in entry 1 */ +#define WL12XX_NVS_FEM_MODULE_COUNT 2 + #define WL12XX_FEM_TO_NVS_ENTRY(ini_fem_module) \ ((ini_fem_module) == 1 ? 1 : 0) @@ -289,8 +292,12 @@ enum wl1271_ini_section { BAND5_PRMS, FEM0_BAND2_PRMS, FEM1_BAND2_PRMS, + FEM2_BAND2_PRMS, + FEM3_BAND2_PRMS, FEM0_BAND5_PRMS, - FEM1_BAND5_PRMS + FEM1_BAND5_PRMS, + FEM2_BAND5_PRMS, + FEM3_BAND5_PRMS }; enum wl12xx_arch { @@ -313,6 +320,8 @@ struct wl12xx_common { unsigned char auto_fem; unsigned int fem0_bands; unsigned int fem1_bands; + unsigned int fem2_bands; + unsigned int fem3_bands; struct wl12xx_parse_ops *parse_ops; struct wl12xx_nvs_ops *nvs_ops; struct wl12xx_ini ini; @@ -327,8 +336,12 @@ struct wl12xx_parse_ops { int (*prs_band5_prms)(char *l, struct wl12xx_ini *p); int (*prs_fem0_band2_prms)(char *l, struct wl12xx_ini *p); int (*prs_fem1_band2_prms)(char *l, struct wl12xx_ini *p); + int (*prs_fem2_band2_prms)(char *l, struct wl12xx_ini *p); + int (*prs_fem3_band2_prms)(char *l, struct wl12xx_ini *p); int (*prs_fem0_band5_prms)(char *l, struct wl12xx_ini *p); int (*prs_fem1_band5_prms)(char *l, struct wl12xx_ini *p); + int (*prs_fem2_band5_prms)(char *l, struct wl12xx_ini *p); + int (*prs_fem3_band5_prms)(char *l, struct wl12xx_ini *p); int (*is_dual_mode)(struct wl12xx_ini *p); }; diff --git a/nvs.c b/nvs.c index 34b656d..849f0b5 100644 --- a/nvs.c +++ b/nvs.c @@ -1135,9 +1135,9 @@ int get_fem_nr(int autodetect, int manuf, int *femcnt, int *femi) } else { *femcnt = 1; - if(manuf >= WL1271_INI_FEM_MODULE_COUNT) { + if(manuf >= WL12XX_NVS_FEM_MODULE_COUNT) { fprintf(stderr, "FEM index out of bounds (%d > %d)\n", manuf, - WL1271_INI_FEM_MODULE_COUNT); + WL12XX_NVS_FEM_MODULE_COUNT); return 1; }