diff options
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 376e8d46..dd6131ac 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -1225,7 +1225,8 @@ unlock_required_subscriber_ready_state_ready (MbimDevice *device, } /* Initialized but locked? */ - if (ready_state == MBIM_SUBSCRIBER_READY_STATE_DEVICE_LOCKED) { + if (ready_state == MBIM_SUBSCRIBER_READY_STATE_DEVICE_LOCKED || + ready_state == MBIM_SUBSCRIBER_READY_STATE_INITIALIZED) { MbimMessage *message; /* Query which lock is to unlock */ @@ -1240,13 +1241,6 @@ unlock_required_subscriber_ready_state_ready (MbimDevice *device, goto out; } - /* Initialized! */ - if (ready_state == MBIM_SUBSCRIBER_READY_STATE_INITIALIZED) { - g_task_return_boolean (task, TRUE); - g_object_unref (task); - goto out; - } - g_assert_not_reached (); out: @@ -2662,6 +2656,11 @@ modem_3gpp_load_enabled_facility_locks (MMIfaceModem3gpp *self, /*****************************************************************************/ /* Facility locks disabling (3GPP interface) */ +typedef struct _DisableFacilityLockContext DisableFacilityLockContext; +struct _DisableFacilityLockContext { + MbimPinType pin_type; +}; + static gboolean modem_3gpp_disable_facility_lock_finish (MMIfaceModem3gpp *self, GAsyncResult *res, @@ -2675,12 +2674,15 @@ disable_facility_lock_ready (MbimDevice *device, GAsyncResult *res, GTask *task) { + DisableFacilityLockContext *ctx; MbimMessage *response = NULL; guint32 remaining_attempts; MbimPinState pin_state; MbimPinType pin_type; GError *error = NULL; + ctx = g_task_get_task_data (task); + response = mbim_device_command_finish (device, res, &error); if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, @@ -2692,7 +2694,8 @@ disable_facility_lock_ready (MbimDevice *device, &remaining_attempts, &error)) { g_task_return_error (task, error); - } else if (pin_state == MBIM_PIN_STATE_LOCKED) { + } else if (pin_type == ctx->pin_type && + pin_state == MBIM_PIN_STATE_LOCKED) { g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, @@ -2715,6 +2718,7 @@ modem_3gpp_disable_facility_lock (MMIfaceModem3gpp *self, GAsyncReadyCallback callback, gpointer user_data) { + DisableFacilityLockContext *ctx; MbimMessage *message; MbimPinType pin_type; MbimDevice *device; @@ -2737,6 +2741,10 @@ modem_3gpp_disable_facility_lock (MMIfaceModem3gpp *self, mm_obj_dbg (self, "Trying to disable %s lock using key: %s", mbim_pin_type_get_string (pin_type), key); + ctx = g_new0 (DisableFacilityLockContext, 1); + ctx->pin_type = pin_type; + g_task_set_task_data (task, ctx, g_free); + message = mbim_message_pin_set_new (pin_type, MBIM_PIN_OPERATION_DISABLE, key, |