summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-broadband-modem.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index 93c772d23..eb9ed9fd4 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -1553,7 +1553,8 @@ modem_load_supported_modes (MMIfaceModem *self,
typedef struct {
MMBroadbandModem *self;
GSimpleAsyncResult *result;
- MMSerialPort *port;
+ MMSerialPort *at_port;
+ MMSerialPort *qcdm_port;
} SignalQualityContext;
static void
@@ -1562,8 +1563,10 @@ signal_quality_context_complete_and_free (SignalQualityContext *ctx)
g_simple_async_result_complete_in_idle (ctx->result);
g_object_unref (ctx->result);
g_object_unref (ctx->self);
- if (ctx->port)
- g_object_unref (ctx->port);
+ if (ctx->at_port)
+ g_object_unref (ctx->at_port);
+ if (ctx->qcdm_port)
+ g_object_unref (ctx->qcdm_port);
g_free (ctx);
}
@@ -1643,7 +1646,7 @@ signal_quality_csq (SignalQualityContext *ctx)
{
mm_base_modem_at_sequence_full (
MM_BASE_MODEM (ctx->self),
- MM_AT_SERIAL_PORT (ctx->port),
+ MM_AT_SERIAL_PORT (ctx->at_port),
signal_quality_csq_sequence,
NULL, /* response_processor_context */
NULL, /* response_processor_context_free */
@@ -1692,7 +1695,7 @@ signal_quality_cind_ready (MMBroadbandModem *self,
indicators = mm_3gpp_parse_cind_read_response (result, &error);
if (!indicators) {
mm_dbg ("(%s) Could not parse CIND signal quality results: %s",
- mm_port_get_device (MM_PORT (ctx->port)),
+ mm_port_get_device (MM_PORT (ctx->at_port)),
error->message);
g_clear_error (&error);
goto try_csq;
@@ -1701,7 +1704,7 @@ signal_quality_cind_ready (MMBroadbandModem *self,
if (indicators->len < self->priv->modem_cind_indicator_signal_quality) {
mm_dbg ("(%s) Could not parse CIND signal quality results; signal "
"index (%u) outside received range (0-%u)",
- mm_port_get_device (MM_PORT (ctx->port)),
+ mm_port_get_device (MM_PORT (ctx->at_port)),
self->priv->modem_cind_indicator_signal_quality,
indicators->len);
} else {
@@ -1736,7 +1739,7 @@ static void
signal_quality_cind (SignalQualityContext *ctx)
{
mm_base_modem_at_command_full (MM_BASE_MODEM (ctx->self),
- MM_AT_SERIAL_PORT (ctx->port),
+ MM_AT_SERIAL_PORT (ctx->at_port),
"+CIND?",
3,
FALSE,
@@ -1826,7 +1829,7 @@ signal_quality_qcdm (SignalQualityContext *ctx)
pilot_sets->len = qcdm_cmd_pilot_sets_new ((char *) pilot_sets->data, 25);
g_assert (pilot_sets->len);
- mm_qcdm_serial_port_queue_command (MM_QCDM_SERIAL_PORT (ctx->port),
+ mm_qcdm_serial_port_queue_command (MM_QCDM_SERIAL_PORT (ctx->qcdm_port),
pilot_sets,
3,
NULL,
@@ -1856,9 +1859,15 @@ modem_load_signal_quality (MMIfaceModem *self,
user_data,
modem_load_signal_quality);
- /* Check whether we can get a non-connected AT port */
- ctx->port = (MMSerialPort *)mm_base_modem_get_best_at_port (MM_BASE_MODEM (self), &error);
- if (ctx->port) {
+ /* Prefer QCDM signal quality checks for CDMA-only modems that have a QCDM port */
+ ctx->qcdm_port = (MMSerialPort *)mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
+ if (mm_iface_modem_is_cdma_only (self) && ctx->qcdm_port) {
+ signal_quality_qcdm (ctx);
+ return;
+ }
+
+ ctx->at_port = (MMSerialPort *)mm_base_modem_get_best_at_port (MM_BASE_MODEM (self), &error);
+ if (ctx->at_port) {
if (MM_BROADBAND_MODEM (self)->priv->modem_cind_supported)
signal_quality_cind (ctx);
else
@@ -1866,14 +1875,6 @@ modem_load_signal_quality (MMIfaceModem *self,
return;
}
- /* If no best AT port available (all connected), try with QCDM ports */
- ctx->port = (MMSerialPort *)mm_base_modem_get_port_qcdm (MM_BASE_MODEM (self));
- if (ctx->port) {
- g_error_free (error);
- signal_quality_qcdm (ctx);
- return;
- }
-
/* Return the error we got when getting best AT port */
g_simple_async_result_take_error (ctx->result, error);
signal_quality_context_complete_and_free (ctx);