summaryrefslogtreecommitdiff
path: root/drivers/qmimodem
diff options
context:
space:
mode:
authorJonas Bonn <jonas@southpole.se>2018-04-03 16:50:54 +0200
committerDenis Kenzior <denkenz@gmail.com>2018-04-04 09:56:22 -0500
commit76471964e20959c4ce0de88262605e30d1e758e6 (patch)
tree42a081f73b382d71bdce5a93cc9a41742872d14f /drivers/qmimodem
parent81180147cfa44444e5fec4585ae15a33c501b0bf (diff)
downloadofono-76471964e20959c4ce0de88262605e30d1e758e6.tar.gz
qmi: assume version_list is up to date
The way things are currently coded, the gobi plugin calls qmi_device_discover and does nothing else until it succeeds. As such, we can safely assume that the version_list is set up when we go to create a service.
Diffstat (limited to 'drivers/qmimodem')
-rw-r--r--drivers/qmimodem/qmi.c56
1 files changed, 19 insertions, 37 deletions
diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c
index b6a116dd..c2131130 100644
--- a/drivers/qmimodem/qmi.c
+++ b/drivers/qmimodem/qmi.c
@@ -1989,43 +1989,22 @@ done:
__qmi_device_discovery_complete(data->device, &data->super);
}
-static void service_create_discover(uint8_t count,
- const struct qmi_version *list, void *user_data)
-{
- struct service_create_data *data = user_data;
- struct qmi_device *device = data->device;
- struct qmi_request *req;
- unsigned char client_req[] = { 0x01, 0x01, 0x00, data->type };
- unsigned int i;
-
- __debug_device(device, "service create [type=%d]", data->type);
-
- for (i = 0; i < count; i++) {
- if (list[i].type == data->type) {
- data->major = list[i].major;
- data->minor = list[i].minor;
- break;
- }
- }
-
- req = __request_alloc(QMI_SERVICE_CONTROL, 0x00,
- QMI_CTL_GET_CLIENT_ID,
- client_req, sizeof(client_req),
- service_create_callback, data);
-
- __request_submit(device, req);
-}
-
static bool service_create(struct qmi_device *device, bool shared,
uint8_t type, qmi_create_func_t func,
void *user_data, qmi_destroy_func_t destroy)
{
struct service_create_data *data;
+ unsigned char client_req[] = { 0x01, 0x01, 0x00, type };
+ struct qmi_request *req;
+ int i;
data = g_try_new0(struct service_create_data, 1);
if (!data)
return false;
+ if (!device->version_list)
+ return false;
+
data->super.destroy = service_create_data_free;
data->device = device;
data->shared = shared;
@@ -2034,20 +2013,23 @@ static bool service_create(struct qmi_device *device, bool shared,
data->user_data = user_data;
data->destroy = destroy;
- if (device->version_list) {
- service_create_discover(device->version_count,
- device->version_list, data);
- goto done;
- }
+ __debug_device(device, "service create [type=%d]", type);
- if (qmi_device_discover(device, service_create_discover, data, NULL))
- goto done;
+ for (i = 0; i < device->version_count; i++) {
+ if (device->version_list[i].type == data->type) {
+ data->major = device->version_list[i].major;
+ data->minor = device->version_list[i].minor;
+ break;
+ }
+ }
- g_free(data);
+ req = __request_alloc(QMI_SERVICE_CONTROL, 0x00,
+ QMI_CTL_GET_CLIENT_ID,
+ client_req, sizeof(client_req),
+ service_create_callback, data);
- return false;
+ __request_submit(device, req);
-done:
data->timeout = g_timeout_add_seconds(8, service_create_reply, data);
__qmi_device_discovery_started(device, &data->super);