From 1ed0b9997c22f1f1933db24ed7dd83c6a578f232 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 14 Feb 2012 15:23:59 +0100 Subject: [PATCH] atmodem: Fix handling of IFX signal strength indication --- drivers/atmodem/network-registration.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/atmodem/network-registration.c b/drivers/atmodem/network-registration.c index 7890fb1b..d098d373 100644 --- a/drivers/atmodem/network-registration.c +++ b/drivers/atmodem/network-registration.c @@ -692,12 +692,18 @@ static void ifx_xciev_notify(GAtResult *result, gpointer user_data) if (!g_at_result_iter_next_number(&iter, &ind)) return; - if (ind == 0) + /* + * Radio signal strength indicators are defined for 0-7, + * but in some cases XCIEV just returns CSQ 0-31,99 values. + */ + if (ind == 0 || ind == 99) strength = -1; else if (ind == 7) strength = 100; - else + else if (ind < 7) strength = (ind * 15); + else if (ind > 7) + strength = (ind * 100) / 31; DBG("ind %d strength %d", ind, strength);