From 94d92b86be2dcb3b18ee28af00ca6151b29e3b82 Mon Sep 17 00:00:00 2001 From: Nuno Sa Date: Wed, 29 May 2024 16:55:41 +0200 Subject: [PATCH 1/3] plugins: adrv9002: update profiles Update profiles for API 68.13.7. Signed-off-by: Nuno Sa (cherry picked from commit fdb2f8321f09990863971fac42cabc3becd8f780) --- ....json => lte_10_lvds_nco_api_68_13_7.json} | 2 +- ...eam => lte_10_lvds_nco_api_68_13_7.stream} | Bin 32768 -> 32768 bytes ...10_1.json => lte_20_lvds_api_68_13_7.json} | 2 +- ....stream => lte_20_lvds_api_68_13_7.stream} | Bin 32768 -> 32768 bytes ...10_1.json => lte_40_lvds_api_68_13_7.json} | 2 +- ....stream => lte_40_lvds_api_68_13_7.stream} | Bin 32768 -> 32768 bytes ..._10_1.json => lte_5_cmos_api_68_13_7.json} | 2 +- ...1.stream => lte_5_cmos_api_68_13_7.stream} | Bin 32768 -> 32768 bytes 8 files changed, 4 insertions(+), 4 deletions(-) rename filters/adrv9002/{lte_10_lvds_nco_api_68_10_1.json => lte_10_lvds_nco_api_68_13_7.json} (97%) rename filters/adrv9002/{lte_40_lvds_api_68_10_1.stream => lte_10_lvds_nco_api_68_13_7.stream} (79%) rename filters/adrv9002/{lte_20_lvds_api_68_10_1.json => lte_20_lvds_api_68_13_7.json} (97%) rename filters/adrv9002/{lte_10_lvds_nco_api_68_10_1.stream => lte_20_lvds_api_68_13_7.stream} (79%) rename filters/adrv9002/{lte_40_lvds_api_68_10_1.json => lte_40_lvds_api_68_13_7.json} (97%) rename filters/adrv9002/{lte_5_cmos_api_68_10_1.stream => lte_40_lvds_api_68_13_7.stream} (79%) rename filters/adrv9002/{lte_5_cmos_api_68_10_1.json => lte_5_cmos_api_68_13_7.json} (97%) rename filters/adrv9002/{lte_20_lvds_api_68_10_1.stream => lte_5_cmos_api_68_13_7.stream} (79%) diff --git a/filters/adrv9002/lte_10_lvds_nco_api_68_10_1.json b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.json similarity index 97% rename from filters/adrv9002/lte_10_lvds_nco_api_68_10_1.json rename to filters/adrv9002/lte_10_lvds_nco_api_68_13_7.json index a5a761107..732795999 100644 --- a/filters/adrv9002/lte_10_lvds_nco_api_68_10_1.json +++ b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.json @@ -1182,7 +1182,7 @@ "mcsMode": 0, "mcsInterfaceType": 0, "adcTypeMonitor": 1, - "pllLockTime_us": 750, + "pllLockTime_us": 380, "pllPhaseSyncWait_us": 0, "pllModulus": { "modulus": [ 8388593, 8388593, 8388593, 8388593, 8388593 ], diff --git a/filters/adrv9002/lte_40_lvds_api_68_10_1.stream b/filters/adrv9002/lte_10_lvds_nco_api_68_13_7.stream similarity index 79% rename from filters/adrv9002/lte_40_lvds_api_68_10_1.stream rename to filters/adrv9002/lte_10_lvds_nco_api_68_13_7.stream index a1bfa376f0ac86243a4106307f998dad90b93498..79bfb3e61f18ed4aabe203a91fd832e25ff46094 100644 GIT binary patch delta 1903 zcmeIxK}eHf9LMqJ-TV4ZHyUdgBq+Y&ioAq}A`e1Chj=s_BH@eGc1s*mK*`b364<0&r@K7X?U=S$T_i-=ev2Gn4{QW%7>#M@g-`_NC zrfG9_b_mfR_}HDR&iz|jZ?W;wJ6~LhYPx1*RL$tdEc!5yBUr)-EMpkgFoHESaSM~U zZTSh)+;=d8ySRdTn8O1s;7=^!k*Yb2G6$jYM~dfqA1GI=uW!d{Z}~Diuu(mAIen~F zs~f3I-wWGxtk~hNDno6$urCUsEHF#VGE=eJ#PN#wC02xJ({;U5SJjH$5Qp_=OG4ol zw>Vnnm1VKOb&+Y)6{S-bYU)b=UHR*u^*?OVZnV#}|94>x{Zm+X>R|fVHw5{_lTv55$v+(aMB)fqs!3MR@8NTO!R!KiTe;yQNWHum5y`fv~Zcz^+HZqke~ z?7@jB2S0}hj-rWSjAH~7IE`tHV;-|uuq{rGRo7p|8tEX(H+_8H0-Pwhue%I8tl j8A=ytW@Y&)^pZpZ9W)gZtm_ zZ`A6H_cQ8Tg*&FI8Dc4HBTuz~?x#UQR>2)A$? zchJNywqG&Meisv1!xZje2KOht^~iSO`rs3gxQ<&y>#0gPE_pq|}Ua8+-mfL;n%D|Ek$}+V=El^dbDo%6ax5x?6)~M?XLQ$5eWvc4*h~pLR zt%$1A5Wnijtlq)L@^OoU&s|o|(d-CEKK^(8dH7HLc~tL@pZ*l+Ns%g1dD$N~{VCIf zGW}`N^*ntkP(|4vH~lGbuOzB&`cpq<^^Vm0Gji4+kG6l9dcD}+65Hm}c~!nS-oP4m z;4$`~w?Q*}*n@t&kE1w@0UX7kZ5RXW$894RVjs0NF~UBM(>SMUv9m?O{v(ZXZq(3E zuJ%v{wwu81;V>Fb9)eLcF@@eGc1s*mK*`b364<0&r@K7X?U=S$T_i-=ev2Gn4{QW%7>#M@g-`_NC zrfG9_b_mfR_}HDR&iz|jZ?W;wJ6~LhYPx1*RL$tdEc!5yBUr)-EMpkgFoHESaSM~U zZTSh)+;=d8ySRdTn8O1s;7=^!k*Yb2G6$jYM~dfqA1GI=uW!d{Z}~Diuu(mAIen~F zs~f3I-wWGxtk~hNDno6$urCUsEHF#VGE=eJ#PN#wC02xJ({;U5SJjH$5Qp_=OG4ol zw>Vnnm1VKOb&+Y)6{S-bYU)b=UHR*u^*?OVZnV#}|94>x{Zm+X>R|fVHw5{_lTv55$v+(aMB)fqs!3MR@8NTO!R!KiTe;yQNWHum5y`fv~Zcz^+HZqke~ z?7@jB2S0}hj-rWSjAH~7IE`tHV;-|uuq{rGRo7p|8tEX(H+_8H0-Pwhue%I8tl j8A=ytW@Y&)^pZpZ9W)gZtm_ zZ`A6H_cQ8Tg*&FI8Dc4HBTuz~?x#UQR>2)A$? zchJNywqG&Meisv1!xZje2KOht^~iSO`rs3gxQ<&y>#0gPE_pq|}Ua8+-mfL;n%D|Ek$}+V=El^dbDo%6ax5x?6)~M?XLQ$5eWvc4*h~pLR zt%$1A5Wnijtlq)L@^OoU&s|o|(d-CEKK^(8dH7HLc~tL@pZ*l+Ns%g1dD$N~{VCIf zGW}`N^*ntkP(|4vH~lGbuOzB&`cpq<^^Vm0Gji4+kG6l9dcD}+65Hm}c~!nS-oP4m z;4$`~w?Q*}*n@t&kE1w@0UX7kZ5RXW$894RVjs0NF~UBM(>SMUv9m?O{v(ZXZq(3E zuJ%v{wwu81;V>Fb9)eLcF@@eGc1s*mK*`b364<0&r@K7X?U=S$T_i-=ev2Gn4{QW%7>#M@g-`_NC zrfG9_b_mfR_}HDR&iz|jZ?W;wJ6~LhYPx1*RL$tdEc!5yBUr)-EMpkgFoHESaSM~U zZTSh)+;=d8ySRdTn8O1s;7=^!k*Yb2G6$jYM~dfqA1GI=uW!d{Z}~Diuu(mAIen~F zs~f3I-wWGxtk~hNDno6$urCUsEHF#VGE=eJ#PN#wC02xJ({;U5SJjH$5Qp_=OG4ol zw>Vnnm1VKOb&+Y)6{S-bYU)b=UHR*u^*?OVZnV#}|94>x{Zm+X>R|fVHw5{_lTv55$v+(aMB)fqs!3MR@8NTO!R!KiTe;yQNWHum5y`fv~Zcz^+HZqke~ z?7@jB2S0}hj-rWSjAH~7IE`tHV;-|uuq{rGRo7p|8tEX(H+_8H0-Pwhue%I8tl j8A=ytW@Y&)^pZpZ9W)gZtm_ zZ`A6H_cQ8Tg*&FI8Dc4HBTuz~?x#UQR>2)A$? zchJNywqG&Meisv1!xZje2KOht^~iSO`rs3gxQ<&y>#0gPE_pq|}Ua8+-mfL;n%D|Ek$}+V=El^dbDo%6ax5x?6)~M?XLQ$5eWvc4*h~pLR zt%$1A5Wnijtlq)L@^OoU&s|o|(d-CEKK^(8dH7HLc~tL@pZ*l+Ns%g1dD$N~{VCIf zGW}`N^*ntkP(|4vH~lGbuOzB&`cpq<^^Vm0Gji4+kG6l9dcD}+65Hm}c~!nS-oP4m z;4$`~w?Q*}*n@t&kE1w@0UX7kZ5RXW$894RVjs0NF~UBM(>SMUv9m?O{v(ZXZq(3E zuJ%v{wwu81;V>Fb9)eLcF@@eGc1s*mK*`b364<0&r@K7X?U=S$T_i-=ev2Gn4{QW%7>#M@g-`_NC zrfG9_b_mfR_}HDR&iz|jZ?W;wJ6~LhYPx1*RL$tdEc!5yBUr)-EMpkgFoHESaSM~U zZTSh)+;=d8ySRdTn8O1s;7=^!k*Yb2G6$jYM~dfqA1GI=uW!d{Z}~Diuu(mAIen~F zs~f3I-wWGxtk~hNDno6$urCUsEHF#VGE=eJ#PN#wC02xJ({;U5SJjH$5Qp_=OG4ol zw>Vnnm1VKOb&+Y)6{S-bYU)b=UHR*u^*?OVZnV#}|94>x{Zm+X>R|fVHw5{_lTv55$v+(aMB)fqs!3MR@8NTO!R!KiTe;yQNWHum5y`fv~Zcz^+HZqke~ z?7@jB2S0}hj-rWSjAH~7IE`tHV;-|uuq{rGRo7p|8tEX(H+_8H0-Pwhue%I8tl j8A=ytW@Y&)^pZpZ9W)gZtm_ zZ`A6H_cQ8Tg*&FI8Dc4HBTuz~?x#UQR>2)A$? zchJNywqG&Meisv1!xZje2KOht^~iSO`rs3gxQ<&y>#0gPE_pq|}Ua8+-mfL;n%D|Ek$}+V=El^dbDo%6ax5x?6)~M?XLQ$5eWvc4*h~pLR zt%$1A5Wnijtlq)L@^OoU&s|o|(d-CEKK^(8dH7HLc~tL@pZ*l+Ns%g1dD$N~{VCIf zGW}`N^*ntkP(|4vH~lGbuOzB&`cpq<^^Vm0Gji4+kG6l9dcD}+65Hm}c~!nS-oP4m z;4$`~w?Q*}*n@t&kE1w@0UX7kZ5RXW$894RVjs0NF~UBM(>SMUv9m?O{v(ZXZq(3E zuJ%v{wwu81;V>Fb9)eLcF@ Date: Thu, 30 May 2024 10:13:42 +0200 Subject: [PATCH 2/3] iio_widget: add iio_widget_update_value() Add an API to only update the gui value of a specific widget. This is useful when we have to do the actual attribute reading before we need to update the GUI. In the next patch, we'll introduce an user of this API. Signed-off-by: Nuno Sa (cherry picked from commit 4ceed02c6fc73b93d030e77d4087fc946ff1c029) --- iio_widget.c | 12 ++++++++++++ iio_widget.h | 1 + 2 files changed, 13 insertions(+) diff --git a/iio_widget.c b/iio_widget.c index 5739dc5a5..9f805f380 100644 --- a/iio_widget.c +++ b/iio_widget.c @@ -495,6 +495,18 @@ static gboolean iio_widget_signal_unblock(gpointer arg) return FALSE; } +void iio_widget_update_value(struct iio_widget *widget, const char *ensm, size_t len) +{ + guint sig = 0; + + if (widget->sig_handler_data) + sig = g_signal_handlers_block_matched(G_OBJECT(widget->widget), G_SIGNAL_MATCH_DATA, + 0, 0, NULL, NULL, widget->sig_handler_data); + widget->update_value(widget, ensm, len); + + if (sig) + g_timeout_add(1, (GSourceFunc)iio_widget_signal_unblock, widget); +} /* * The point of these is that when we update a widget, we can receive a different value from the * iio dev from the one in the GUI (eg: a failed call to widget->save() or an autonomous update). diff --git a/iio_widget.h b/iio_widget.h index 987195b01..e0cc8d3c0 100644 --- a/iio_widget.h +++ b/iio_widget.h @@ -44,6 +44,7 @@ void iio_make_widget_update_signal_based(struct iio_widget *widget, GCallback ha void iio_update_widgets(struct iio_widget *widgets, unsigned int num_widgets); void iio_update_widgets_block_signals_by_data(struct iio_widget *widgets, unsigned int num_widgets); void iio_widget_update(struct iio_widget *widget); +void iio_widget_update_value(struct iio_widget *widget, const char *ensm, size_t len); void iio_update_widgets_of_device(struct iio_widget *widgets, unsigned int num_widgets, struct iio_device *dev); void iio_widget_update_block_signals_by_data(struct iio_widget *widget); From 6885d74e8f2c0461282e93d59df5fb6a72bd8ade Mon Sep 17 00:00:00 2001 From: Nuno Sa Date: Thu, 30 May 2024 10:18:00 +0200 Subject: [PATCH 3/3] plugins: adrv9002: constrain RSSI reads With the changes in the device driver API, reading the RSSI on a channel that's not enabled will trow an error. Hence, instead of flooding the device with error's (and the kernel log), don't read the RSSI for channels that are not enabled. With the above, as we always need to read the ensm widget, make use iio_widget_update_value() to update it in case port enable is set to pin (and hence avoiding another call into the device). Signed-off-by: Nuno Sa (cherry picked from commit 54efaadbb04e300eeffc9c58bc00d18c26eda611) --- plugins/adrv9002.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/plugins/adrv9002.c b/plugins/adrv9002.c index c66c2a353..1000c9237 100644 --- a/plugins/adrv9002.c +++ b/plugins/adrv9002.c @@ -489,7 +489,7 @@ static void update_label(const struct adrv9002_gtklabel *label) gtk_label_set_text(label->labels, attr_val); } -static void update_special_widgets(struct adrv9002_common *chann) +static void update_special_widgets(struct adrv9002_common *chann, const char *ensm, size_t len) { char *gain_ctl = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT(chann->gain_ctrl.widget)); @@ -499,8 +499,8 @@ static void update_special_widgets(struct adrv9002_common *chann) if (gain_ctl && strcmp(gain_ctl, "spi")) iio_widget_update_block_signals_by_data(&chann->gain); - if (port_en && strcmp(port_en, "spi")) - iio_widget_update_block_signals_by_data(&chann->ensm); + if (port_en && strcmp(port_en, "spi") && ensm) + iio_widget_update_value(&chann->ensm, ensm, len); g_free(gain_ctl); g_free(port_en); @@ -513,13 +513,25 @@ static void update_special_rx_widgets(struct adrv9002_rx *rx, const int n_widget for (i = 0; i < n_widgets; i++) { char *digital_gain = gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT(rx[i].digital_gain_ctl.widget)); + char ensm[32] = {0}; if (!rx[i].rx.enabled) goto nex_widget; - update_label(&rx[i].rssi); + /* + * There was a change in the driver API where an error is returned if we try to read + * the RSSI level if the channel is not enabled. Hence, make sure we only update it + * if the channel is enabled. + */ + if (iio_channel_attr_read(rx[i].rx.ensm.chn, rx[i].rx.ensm.attr_name, ensm, + sizeof(ensm)) > 0 && !strcmp(ensm, "rf_enabled")) + update_label(&rx[i].rssi); update_label(&rx[i].decimated_power); - update_special_widgets(&rx[i].rx); + /* + * Pass in ensm as we already got it and so no need for another possible + * remote call into the device. + */ + update_special_widgets(&rx[i].rx, ensm, sizeof(ensm)); if (digital_gain && strstr(digital_gain, "automatic")) iio_widget_update_block_signals_by_data(&rx[i].intf_gain); @@ -536,7 +548,7 @@ static void update_special_tx_widgets(struct adrv9002_common *tx, const int n_wi if (!tx[i].enabled) continue; - update_special_widgets(&tx[i]); + update_special_widgets(&tx[i], NULL, 0); } }