---
 drivers/qmimodem/network-registration.c | 51 ++++++++++++++-------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/drivers/qmimodem/network-registration.c 
b/drivers/qmimodem/network-registration.c
index d0f4853..9bd88df 100644
--- a/drivers/qmimodem/network-registration.c
+++ b/drivers/qmimodem/network-registration.c
@@ -135,42 +135,32 @@ static bool extract_ss_info(struct qmi_result *result, 
int *status,
        return true;
 }
 
-static void ss_info_notify(struct qmi_result *result, void *user_data)
+static void handle_ss_info(struct qmi_result *result, void *user_data)
 {
-       struct ofono_netreg *netreg = user_data;
+       struct cb_data *cbd = user_data;
+       struct ofono_netreg *netreg = cbd->user;
        struct netreg_data *data = ofono_netreg_get_data(netreg);
+       ofono_netreg_status_cb_t cb = cbd->cb;
        int status, lac, cellid, tech;
 
        DBG("");
 
-       if (!extract_ss_info(result, &status, &lac, &cellid, &tech,
-                                                       &data->operator))
-               return;
-
-       ofono_netreg_status_notify(netreg, status, lac, cellid, tech);
-}
-
-static void get_ss_info_cb(struct qmi_result *result, void *user_data)
-{
-       struct cb_data *cbd = user_data;
-       ofono_netreg_status_cb_t cb = cbd->cb;
-       struct netreg_data *data = cbd->user;
-       int status, lac, cellid, tech;
+       if (cb && qmi_result_set_error(result, NULL))
+               goto error;
 
-       DBG("");
+       if (!extract_ss_info(result, &status, &lac,
+                               &cellid, &tech, &data->operator))
+               goto error;
 
-       if (qmi_result_set_error(result, NULL)) {
-               CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
-               return;
-       }
+       if (cb)
+               CALLBACK_WITH_SUCCESS(cb, status,
+                                       lac, cellid, tech, cbd->data);
+       else
+               ofono_netreg_status_notify(netreg, status, lac, cellid, tech);
 
-       if (!extract_ss_info(result, &status, &lac, &cellid, &tech,
-                                                       &data->operator)) {
+error:
+       if (cb)
                CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
-               return;
-       }
-
-       CALLBACK_WITH_SUCCESS(cb, status, lac, cellid, tech, cbd->data);
 }
 
 static void qmi_registration_status(struct ofono_netreg *netreg,
@@ -181,10 +171,10 @@ static void qmi_registration_status(struct ofono_netreg 
*netreg,
 
        DBG("");
 
-       cbd->user = data;
+       cbd->user = netreg;
 
        if (qmi_service_send(data->nas, QMI_NAS_GET_SS_INFO, NULL,
-                                       get_ss_info_cb, cbd, g_free) > 0)
+                                       handle_ss_info, cbd, g_free) > 0)
                return;
 
        CALLBACK_WITH_FAILURE(cb, -1, -1, -1, -1, cbd->data);
@@ -492,6 +482,7 @@ static void create_nas_cb(struct qmi_service *service, void 
*user_data)
        struct ofono_netreg *netreg = user_data;
        struct netreg_data *data = ofono_netreg_get_data(netreg);
        struct qmi_param *param;
+       struct cb_data *cbd;
        struct qmi_nas_param_event_signal_strength ss = { .report = 0x01,
                                .count = 5, .dbm[0] = -55, .dbm[1] = -65,
                                .dbm[2] = -75, .dbm[3] = -85, .dbm[4] = -95 };
@@ -509,8 +500,10 @@ static void create_nas_cb(struct qmi_service *service, 
void *user_data)
        qmi_service_register(data->nas, QMI_NAS_EVENT,
                                        event_notify, netreg, NULL);
 
+       cbd = cb_data_new(NULL, NULL);
+       cbd->user = netreg;
        qmi_service_register(data->nas, QMI_NAS_SS_INFO_IND,
-                                       ss_info_notify, netreg, NULL);
+                                       handle_ss_info, cbd, g_free);
 
        param = qmi_param_new();
        if (!param)
-- 
2.9.3

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

Reply via email to