aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Schrock <steve.schrock@getcruise.com>2024-02-21 22:17:21 +0000
committerDenis Kenzior <denkenz@gmail.com>2024-02-21 16:22:08 -0600
commitae0392353d8f15a1d20578ec1a9b60d6d7123770 (patch)
tree6217937bcc182a68dcef1082399231b2323dd228
parent1efef179f0880893f38af975b7ce4da602f9ff05 (diff)
downloadofono-ae0392353d8f15a1d20578ec1a9b60d6d7123770.tar.gz
qmimodem: Use l_timeout and l_idle for discovery
-rw-r--r--drivers/qmimodem/qmi.c42
1 files changed, 29 insertions, 13 deletions
diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c
index d2d4eefaa..6880dc450 100644
--- a/drivers/qmimodem/qmi.c
+++ b/drivers/qmimodem/qmi.c
@@ -1101,17 +1101,19 @@ struct discover_data {
void *user_data;
qmi_destroy_func_t destroy;
uint16_t tid;
- guint timeout;
+ struct l_timeout *timeout;
+ struct l_idle *idle;
};
-static void discover_data_free(gpointer user_data)
+static void discover_data_free(void *user_data)
{
struct discover_data *data = user_data;
- if (data->timeout) {
- g_source_remove(data->timeout);
- data->timeout = 0;
- }
+ if (data->timeout)
+ l_timeout_remove(data->timeout);
+
+ if (data->idle)
+ l_idle_remove(data->idle);
if (data->destroy)
data->destroy(data->user_data);
@@ -1253,17 +1255,33 @@ static struct qmi_request *find_control_request(struct qmi_device *device,
return req;
}
-static gboolean discover_reply(gpointer user_data)
+
+static void discover_reply_idle(struct l_idle *idle, void *user_data)
+{
+ struct discover_data *data = user_data;
+ struct qmi_device *device = data->device;
+
+ l_idle_remove(data->idle);
+ data->idle = NULL;
+
+ if (data->func)
+ data->func(data->user_data);
+
+ __qmi_device_discovery_complete(device, &data->super);
+}
+
+static void discover_reply_timeout(struct l_timeout *timeout, void *user_data)
{
struct discover_data *data = user_data;
struct qmi_device *device = data->device;
struct qmi_request *req;
+ l_timeout_remove(data->timeout);
+ data->timeout = NULL;
+
/* remove request from queues */
req = find_control_request(device, data->tid);
- data->timeout = 0;
-
if (data->func)
data->func(data->user_data);
@@ -1271,8 +1289,6 @@ static gboolean discover_reply(gpointer user_data)
if (req)
__request_free(req);
-
- return FALSE;
}
bool qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func,
@@ -1295,7 +1311,7 @@ bool qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func,
data->destroy = destroy;
if (device->version_list) {
- data->timeout = g_timeout_add_seconds(0, discover_reply, data);
+ data->idle = l_idle_create(discover_reply_idle, data, NULL);
__qmi_device_discovery_started(device, &data->super);
return true;
}
@@ -1305,7 +1321,7 @@ bool qmi_device_discover(struct qmi_device *device, qmi_discover_func_t func,
NULL, 0, discover_callback, data);
data->tid = __request_submit(device, req);
- data->timeout = g_timeout_add_seconds(5, discover_reply, data);
+ data->timeout = l_timeout_create(5, discover_reply_timeout, data, NULL);
__qmi_device_discovery_started(device, &data->super);