summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/atmodem/devinfo.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/atmodem/devinfo.c b/drivers/atmodem/devinfo.c
index 4c802f1a..8845da08 100644
--- a/drivers/atmodem/devinfo.c
+++ b/drivers/atmodem/devinfo.c
@@ -35,6 +35,8 @@
#include "atmodem.h"
+static const char *gcap_prefix[] = { "+GCAP:", NULL };
+
static void attr_cb(gboolean ok, GAtResult *result, gpointer user_data)
{
struct cb_data *cbd = user_data;
@@ -122,22 +124,22 @@ static void at_query_serial(struct ofono_devinfo *info,
CALLBACK_WITH_FAILURE(cb, NULL, data);
}
-static gboolean at_devinfo_register(gpointer user_data)
+static void capability_cb(gboolean ok, GAtResult *result, gpointer user_data)
{
struct ofono_devinfo *info = user_data;
ofono_devinfo_register(info);
-
- return FALSE;
}
static int at_devinfo_probe(struct ofono_devinfo *info, unsigned int vendor,
void *data)
{
- GAtChat *chat = data;
+ GAtChat *chat = g_at_chat_clone(data);
+
+ ofono_devinfo_set_data(info, chat);
- ofono_devinfo_set_data(info, g_at_chat_clone(chat));
- g_idle_add(at_devinfo_register, info);
+ g_at_chat_send(chat, "AT+GCAP", gcap_prefix,
+ capability_cb, info, NULL);
return 0;
}
@@ -146,18 +148,19 @@ static void at_devinfo_remove(struct ofono_devinfo *info)
{
GAtChat *chat = ofono_devinfo_get_data(info);
- g_at_chat_unref(chat);
ofono_devinfo_set_data(info, NULL);
+
+ g_at_chat_unref(chat);
}
static struct ofono_devinfo_driver driver = {
- .name = "atmodem",
- .probe = at_devinfo_probe,
- .remove = at_devinfo_remove,
- .query_manufacturer = at_query_manufacturer,
- .query_model = at_query_model,
- .query_revision = at_query_revision,
- .query_serial = at_query_serial
+ .name = "atmodem",
+ .probe = at_devinfo_probe,
+ .remove = at_devinfo_remove,
+ .query_manufacturer = at_query_manufacturer,
+ .query_model = at_query_model,
+ .query_revision = at_query_revision,
+ .query_serial = at_query_serial,
};
void at_devinfo_init(void)