Handled dual mode technology preference "umts,gsm" and
"lte,umts" for xmm7modem.
---
 drivers/xmm7modem/radio-settings.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/drivers/xmm7modem/radio-settings.c 
b/drivers/xmm7modem/radio-settings.c
index f1eb1aa..c7c2ce0 100644
--- a/drivers/xmm7modem/radio-settings.c
+++ b/drivers/xmm7modem/radio-settings.c
@@ -84,10 +84,10 @@ static void xact_query_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
                mode = OFONO_RADIO_ACCESS_MODE_LTE;
                break;
        case 3:
-               mode = OFONO_RADIO_ACCESS_MODE_UMTS;
+               mode = OFONO_RADIO_ACCESS_MODE_UMTS|OFONO_RADIO_ACCESS_MODE_GSM;
                break;
        case 4:
-               mode = OFONO_RADIO_ACCESS_MODE_LTE;
+               mode = OFONO_RADIO_ACCESS_MODE_LTE|OFONO_RADIO_ACCESS_MODE_UMTS;
                break;
        case 5:
                mode = OFONO_RADIO_ACCESS_MODE_LTE;
@@ -158,7 +158,16 @@ static void xmm_set_rat_mode(struct ofono_radio_settings 
*rs,
                break;
        }
 
-       if (value == 6)
+       if (mode ==
+               (OFONO_RADIO_ACCESS_MODE_UMTS|OFONO_RADIO_ACCESS_MODE_GSM)) {
+               value = 3;
+               preferred = 1;
+       }
+
+       if (mode == (OFONO_RADIO_ACCESS_MODE_LTE|OFONO_RADIO_ACCESS_MODE_UMTS))
+               value = 4;
+
+       if (value == 6 || value == 3 || value == 4)
                snprintf(buf, sizeof(buf), "AT+XACT=%u,%u", value, preferred);
        else
                snprintf(buf, sizeof(buf), "AT+XACT=%u", value);
-- 
1.9.1

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to