diff options
author | Marius B. Kotsbak <marius@kotsbak.com> | 2012-09-03 18:26:59 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-03 18:33:44 +0200 |
commit | 9c2a6320a82aa301b2415227741a8bff5a33ea1b (patch) | |
tree | 68a44c04805103fc50dfcf9a2baa6f26168a8673 /plugins | |
parent | d99169022eefe658e405051ef58c1af6c653faee (diff) |
sierra: add support for new !SELRAT values in newer Sierra LTE modems
AT!SELRAT=?
!SELRAT: Index, Name
00, Automatic
01, UMTS 3G Only
02, GSM 2G Only
03, Automatic
04, Automatic
05, GSM and UMTS Only
06, LTE Only
07, GSM, UMTS, LTE
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/sierra/mm-broadband-modem-sierra.c | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/plugins/sierra/mm-broadband-modem-sierra.c b/plugins/sierra/mm-broadband-modem-sierra.c index 69f8293a..49c2e22b 100644 --- a/plugins/sierra/mm-broadband-modem-sierra.c +++ b/plugins/sierra/mm-broadband-modem-sierra.c @@ -184,7 +184,7 @@ selrat_query_ready (MMBaseModem *self, if (mm_get_uint_from_match_info (match_info, 1, &mode) && mode >= 0 && - mode <= 4) { + mode <= 7) { switch (mode) { case 0: result.allowed = MM_MODEM_MODE_ANY; @@ -199,12 +199,36 @@ selrat_query_ready (MMBaseModem *self, result.preferred = MM_MODEM_MODE_NONE; break; case 3: - result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); - result.preferred = MM_MODEM_MODE_3G; + /* in Sierra LTE devices, mode 3 is automatic, including LTE, no preference */ + if (mm_iface_modem_is_3gpp_lte (MM_IFACE_MODEM (self))) { + result.allowed = MM_MODEM_MODE_ANY; + result.preferred = MM_MODEM_MODE_NONE; + } else { + result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + result.preferred = MM_MODEM_MODE_3G; + } break; case 4: + /* in Sierra LTE devices, mode 4 is automatic, including LTE, no preference */ + if (mm_iface_modem_is_3gpp_lte (MM_IFACE_MODEM (self))) { + result.allowed = MM_MODEM_MODE_ANY; + result.preferred = MM_MODEM_MODE_NONE; + } else { + result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); + result.preferred = MM_MODEM_MODE_2G; + } + break; + case 5: result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G); - result.preferred = MM_MODEM_MODE_2G; + result.preferred = MM_MODEM_MODE_NONE; + break; + case 6: + result.allowed = MM_MODEM_MODE_4G; + result.preferred = MM_MODEM_MODE_NONE; + break; + case 7: + result.allowed = (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G); + result.preferred = MM_MODEM_MODE_NONE; break; default: g_assert_not_reached (); @@ -346,13 +370,22 @@ set_allowed_modes (MMIfaceModem *self, else if (allowed == MM_MODEM_MODE_2G) idx = 2; else if (allowed == (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G)) { - if (preferred == MM_MODEM_MODE_3G) + /* in Sierra LTE devices, modes 3 and 4 are automatic, including LTE, no preference */ + if (mm_iface_modem_is_3gpp_lte (self)) { + if (preferred == MM_MODEM_MODE_NONE) + idx = 5; /* GSM and UMTS Only */ + } + else if (preferred == MM_MODEM_MODE_3G) idx = 3; else if (preferred == MM_MODEM_MODE_2G) idx = 4; else if (preferred == MM_MODEM_MODE_NONE) idx = 0; - } else if (allowed == MM_MODEM_MODE_ANY) + } else if (allowed == MM_MODEM_MODE_4G) + idx = 6; + else if (allowed == (MM_MODEM_MODE_2G | MM_MODEM_MODE_3G | MM_MODEM_MODE_4G)) + idx = 7; + else if (allowed == MM_MODEM_MODE_ANY) idx = 0; if (idx < 0) { |