* [PATCH] v2: support Wavecom Q2403/Q2686 modems @ 2012-05-29 2:14 pablo 2012-05-29 2:14 ` [PATCH] drivers: add support for " pablo 2012-05-29 2:14 ` [PATCH] wavecom: " pablo 0 siblings, 2 replies; 5+ messages in thread From: pablo @ 2012-05-29 2:14 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 807 bytes --] From: Pablo Neira Ayuso <pablo@gnumonks.org> Hi! This is the second version of the patch to support Wavecom Q2403/Q2686 modems. I've tried to address all comments from Denis Kenzior. I've splitted the patch in two, one per directory directory as you suggested. Please, let me know if you find any issue with this patch. Thank you! Pablo Neira Ayuso (2): wavecom: add support for Wavecom Q2403/Q2686 modems wavecom: add support for Wavecom Q2403/Q2686 modems drivers/atmodem/sim.c | 3 +- drivers/atmodem/sms.c | 27 +++++++++++++--- drivers/atmodem/vendor.h | 1 + plugins/udev.c | 15 +++++++++ plugins/wavecom.c | 77 ++++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 111 insertions(+), 12 deletions(-) -- 1.7.10 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] drivers: add support for Wavecom Q2403/Q2686 modems 2012-05-29 2:14 [PATCH] v2: support Wavecom Q2403/Q2686 modems pablo @ 2012-05-29 2:14 ` pablo 2012-05-30 5:05 ` Denis Kenzior 2012-05-29 2:14 ` [PATCH] wavecom: " pablo 1 sibling, 1 reply; 5+ messages in thread From: pablo @ 2012-05-29 2:14 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 3197 bytes --] From: Pablo Neira Ayuso <pablo@gnumonks.org> This patch adds a couple of quirks to support Q2403/Q2686. The existing wavecom driver in tree slightly differs from these modems. Thus, it doesn't work work with them. We (the osmocom team) use these Wavecom Q2403/Q2686 modems in our testbed. --- drivers/atmodem/sim.c | 3 ++- drivers/atmodem/sms.c | 27 ++++++++++++++++++++++----- drivers/atmodem/vendor.h | 1 + 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c index 971b0ea..79db63d 100644 --- a/drivers/atmodem/sim.c +++ b/drivers/atmodem/sim.c @@ -926,7 +926,8 @@ static void at_cpin_cb(gboolean ok, GAtResult *result, gpointer user_data) return; } - if (sd->vendor == OFONO_VENDOR_WAVECOM) { + if (sd->vendor == OFONO_VENDOR_WAVECOM || + sd->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) { /* +CPIN: <pin> */ pin_required = final + 7; } else { diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c index f2dc257..62933f8 100644 --- a/drivers/atmodem/sms.c +++ b/drivers/atmodem/sms.c @@ -985,8 +985,11 @@ static gboolean set_cpms(gpointer user_data) const char *incoming = storages[data->incoming]; char buf[128]; - snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"", - store, store, incoming); + if (data->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) + snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\"", store); + else + snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"", + store, store, incoming); g_at_chat_send(data->chat, buf, cpms_prefix, at_cpms_set_cb, sms, NULL); @@ -1038,7 +1041,7 @@ static void at_cpms_query_cb(gboolean ok, GAtResult *result, gboolean supported = FALSE; if (ok) { - int mem = 0; + int mem = 0, mem_max; GAtResultIter iter; const char *store; gboolean me_supported[3]; @@ -1054,7 +1057,20 @@ static void at_cpms_query_cb(gboolean ok, GAtResult *result, if (!g_at_result_iter_next(&iter, "+CPMS:")) goto out; - for (mem = 0; mem < 3; mem++) { + if (data->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) { + /* skip initial `(' */ + if (!g_at_result_iter_open_list(&iter)) + goto out; + + /* + * Wavecom Q2 replies: +CPMS: (("SM","BM","SR"),("SM")) + * This reply is broken according to 3GPP TS 07.05. + */ + mem_max = 2; + } else + mem_max = 3; + + for (mem = 0; mem < mem_max; mem++) { if (!g_at_result_iter_open_list(&iter)) goto out; @@ -1071,7 +1087,8 @@ static void at_cpms_query_cb(gboolean ok, GAtResult *result, goto out; } - if (!sm_supported[2] && !me_supported[2] && !mt_supported[2]) + if (data->vendor != OFONO_VENDOR_WAVECOM_Q2XXX && + !sm_supported[2] && !me_supported[2] && !mt_supported[2]) goto out; if (sm_supported[0] && sm_supported[1]) { diff --git a/drivers/atmodem/vendor.h b/drivers/atmodem/vendor.h index 25c09f6..80aed3e 100644 --- a/drivers/atmodem/vendor.h +++ b/drivers/atmodem/vendor.h @@ -40,4 +40,5 @@ enum ofono_vendor { OFONO_VENDOR_SAMSUNG, OFONO_VENDOR_SIMCOM, OFONO_VENDOR_ICERA, + OFONO_VENDOR_WAVECOM_Q2XXX, }; -- 1.7.10 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] drivers: add support for Wavecom Q2403/Q2686 modems 2012-05-29 2:14 ` [PATCH] drivers: add support for " pablo @ 2012-05-30 5:05 ` Denis Kenzior 0 siblings, 0 replies; 5+ messages in thread From: Denis Kenzior @ 2012-05-30 5:05 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 3892 bytes --] Hi Pablo, On 05/28/2012 09:14 PM, pablo(a)gnumonks.org wrote: > From: Pablo Neira Ayuso<pablo@gnumonks.org> > > This patch adds a couple of quirks to support Q2403/Q2686. > > The existing wavecom driver in tree slightly differs from these > modems. Thus, it doesn't work work with them. We (the osmocom > team) use these Wavecom Q2403/Q2686 modems in our testbed. > --- > drivers/atmodem/sim.c | 3 ++- > drivers/atmodem/sms.c | 27 ++++++++++++++++++++++----- > drivers/atmodem/vendor.h | 1 + > 3 files changed, 25 insertions(+), 6 deletions(-) > Actually we prefer each atom driver change to be in a separate patch, but I fixed this up for you. > diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c > index 971b0ea..79db63d 100644 > --- a/drivers/atmodem/sim.c > +++ b/drivers/atmodem/sim.c > @@ -926,7 +926,8 @@ static void at_cpin_cb(gboolean ok, GAtResult *result, gpointer user_data) > return; > } > > - if (sd->vendor == OFONO_VENDOR_WAVECOM) { > + if (sd->vendor == OFONO_VENDOR_WAVECOM || > + sd->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) { Please do not use spaces for indentation, our coding style guidelines can be found in doc/coding-style.txt and explain this quite thoroughly. I went ahead and fixed this up for you. > /* +CPIN:<pin> */ > pin_required = final + 7; > } else { > diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c > index f2dc257..62933f8 100644 > --- a/drivers/atmodem/sms.c > +++ b/drivers/atmodem/sms.c > @@ -985,8 +985,11 @@ static gboolean set_cpms(gpointer user_data) > const char *incoming = storages[data->incoming]; > char buf[128]; > > - snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"", > - store, store, incoming); > + if (data->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) > + snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\"", store); > + else > + snprintf(buf, sizeof(buf), "AT+CPMS=\"%s\",\"%s\",\"%s\"", > + store, store, incoming); > > g_at_chat_send(data->chat, buf, cpms_prefix, > at_cpms_set_cb, sms, NULL); > @@ -1038,7 +1041,7 @@ static void at_cpms_query_cb(gboolean ok, GAtResult *result, > gboolean supported = FALSE; > > if (ok) { > - int mem = 0; > + int mem = 0, mem_max; > GAtResultIter iter; > const char *store; > gboolean me_supported[3]; > @@ -1054,7 +1057,20 @@ static void at_cpms_query_cb(gboolean ok, GAtResult *result, > if (!g_at_result_iter_next(&iter, "+CPMS:")) > goto out; > > - for (mem = 0; mem< 3; mem++) { > + if (data->vendor == OFONO_VENDOR_WAVECOM_Q2XXX) { > + /* skip initial `(' */ > + if (!g_at_result_iter_open_list(&iter)) > + goto out; > + > + /* > + * Wavecom Q2 replies: +CPMS: (("SM","BM","SR"),("SM")) > + * This reply is broken according to 3GPP TS 07.05. > + */ > + mem_max = 2; > + } else > + mem_max = 3; > + > + for (mem = 0; mem< mem_max; mem++) { > if (!g_at_result_iter_open_list(&iter)) > goto out; > > @@ -1071,7 +1087,8 @@ static void at_cpms_query_cb(gboolean ok, GAtResult *result, > goto out; > } > > - if (!sm_supported[2]&& !me_supported[2]&& !mt_supported[2]) > + if (data->vendor != OFONO_VENDOR_WAVECOM_Q2XXX&& > + !sm_supported[2]&& !me_supported[2]&& !mt_supported[2]) Same as above. > goto out; > > if (sm_supported[0]&& sm_supported[1]) { > diff --git a/drivers/atmodem/vendor.h b/drivers/atmodem/vendor.h > index 25c09f6..80aed3e 100644 > --- a/drivers/atmodem/vendor.h > +++ b/drivers/atmodem/vendor.h > @@ -40,4 +40,5 @@ enum ofono_vendor { > OFONO_VENDOR_SAMSUNG, > OFONO_VENDOR_SIMCOM, > OFONO_VENDOR_ICERA, > + OFONO_VENDOR_WAVECOM_Q2XXX, > }; I broke up the patch into 3 and amended the aforementioned areas. These have been pushed, thanks. Regards, -Denis ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] wavecom: add support for Wavecom Q2403/Q2686 modems 2012-05-29 2:14 [PATCH] v2: support Wavecom Q2403/Q2686 modems pablo 2012-05-29 2:14 ` [PATCH] drivers: add support for " pablo @ 2012-05-29 2:14 ` pablo 2012-05-30 5:15 ` Denis Kenzior 1 sibling, 1 reply; 5+ messages in thread From: pablo @ 2012-05-29 2:14 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 5943 bytes --] From: Pablo Neira Ayuso <pablo@gnumonks.org> This patch extends the existing wavecom plugin to include the new wavecom 2xxx plugin. --- plugins/udev.c | 15 ++++++++++++ plugins/wavecom.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 86 insertions(+), 6 deletions(-) diff --git a/plugins/udev.c b/plugins/udev.c index 8cb87a5..6e3205e 100644 --- a/plugins/udev.c +++ b/plugins/udev.c @@ -167,6 +167,19 @@ static void add_calypso(struct ofono_modem *modem, ofono_modem_register(modem); } +static void add_wavecom_q2xxx(struct ofono_modem *modem, + struct udev_device *udev_device) +{ + const char *devnode; + + DBG("modem %p", modem); + + devnode = udev_device_get_devnode(udev_device); + ofono_modem_set_string(modem, "Device", devnode); + + ofono_modem_register(modem); +} + static void add_tc65(struct ofono_modem *modem, struct udev_device *udev_device) { @@ -286,6 +299,8 @@ done: add_nokiacdma(modem, udev_device); else if (g_strcmp0(driver, "sim900") == 0) add_sim900(modem, udev_device); + else if (g_strcmp0(driver, "wavecom_q2xxx") == 0) + add_wavecom_q2xxx(modem, udev_device); } static gboolean devpath_remove(gpointer key, gpointer value, gpointer user_data) diff --git a/plugins/wavecom.c b/plugins/wavecom.c index 5d30f39..c8bd55b 100644 --- a/plugins/wavecom.c +++ b/plugins/wavecom.c @@ -66,7 +66,7 @@ static void wavecom_debug(const char *str, void *user_data) ofono_info("%s%s", prefix, str); } -static int wavecom_enable(struct ofono_modem *modem) +static int wavecom_generic_enable(struct ofono_modem *modem, int vendor) { GAtChat *chat; GIOChannel *channel; @@ -104,6 +104,8 @@ static int wavecom_enable(struct ofono_modem *modem) syntax = g_at_syntax_new_gsm_permissive(); chat = g_at_chat_new(channel, syntax); + if (vendor == OFONO_VENDOR_WAVECOM_Q2XXX) + g_at_chat_add_terminator(chat, "+CPIN: READY", -1, TRUE); g_at_syntax_unref(syntax); g_io_channel_unref(channel); @@ -118,6 +120,16 @@ static int wavecom_enable(struct ofono_modem *modem) return 0; } +static int wavecom_enable(struct ofono_modem *modem) +{ + return wavecom_generic_enable(modem, OFONO_VENDOR_WAVECOM); +} + +static int wavecom_q2xxx_enable(struct ofono_modem *modem) +{ + return wavecom_generic_enable(modem, OFONO_VENDOR_WAVECOM_Q2XXX); +} + static int wavecom_disable(struct ofono_modem *modem) { GAtChat *chat = ofono_modem_get_data(modem); @@ -131,18 +143,32 @@ static int wavecom_disable(struct ofono_modem *modem) return 0; } -static void wavecom_pre_sim(struct ofono_modem *modem) +static void wavecom_generic_pre_sim(struct ofono_modem *modem, int vendor) { GAtChat *chat = ofono_modem_get_data(modem); + struct ofono_sim *sim; DBG("%p", modem); ofono_devinfo_create(modem, 0, "atmodem", chat); - ofono_sim_create(modem, OFONO_VENDOR_WAVECOM, "atmodem", chat); + sim = ofono_sim_create(modem, vendor, "atmodem", chat); + if (vendor == OFONO_VENDOR_WAVECOM_Q2XXX) + ofono_sim_inserted_notify(sim, TRUE); + ofono_voicecall_create(modem, 0, "atmodem", chat); } -static void wavecom_post_sim(struct ofono_modem *modem) +static void wavecom_pre_sim(struct ofono_modem *modem) +{ + wavecom_generic_pre_sim(modem, OFONO_VENDOR_WAVECOM); +} + +static void wavecom_q2xxx_pre_sim(struct ofono_modem *modem) +{ + wavecom_generic_pre_sim(modem, OFONO_VENDOR_WAVECOM_Q2XXX); +} + +static void wavecom_generic_post_sim(struct ofono_modem *modem, int vendor) { GAtChat *chat = ofono_modem_get_data(modem); struct ofono_message_waiting *mw; @@ -155,7 +181,8 @@ static void wavecom_post_sim(struct ofono_modem *modem) ofono_netreg_create(modem, 0, "atmodem", chat); ofono_call_meter_create(modem, 0, "atmodem", chat); ofono_call_barring_create(modem, 0, "atmodem", chat); - ofono_sms_create(modem, 0, "atmodem", chat); + /* We have to specify the vendor to support AT+CPMS=? reply in Q2xxx */ + ofono_sms_create(modem, vendor, "atmodem", chat); ofono_phonebook_create(modem, 0, "atmodem", chat); mw = ofono_message_waiting_create(modem); @@ -163,6 +190,16 @@ static void wavecom_post_sim(struct ofono_modem *modem) ofono_message_waiting_register(mw); } +static void wavecom_post_sim(struct ofono_modem *modem) +{ + wavecom_generic_post_sim(modem, OFONO_VENDOR_WAVECOM); +} + +static void wavecom_q2xxx_post_sim(struct ofono_modem *modem) +{ + wavecom_generic_post_sim(modem, OFONO_VENDOR_WAVECOM_Q2XXX); +} + static struct ofono_modem_driver wavecom_driver = { .name = "wavecom", .probe = wavecom_probe, @@ -173,15 +210,43 @@ static struct ofono_modem_driver wavecom_driver = { .post_sim = wavecom_post_sim, }; +static struct ofono_modem_driver wavecom_q2xxx_driver = { + .name = "wavecom_q2xxx", + .probe = wavecom_probe, + .remove = wavecom_remove, + .enable = wavecom_q2xxx_enable, + .disable = wavecom_disable, + .pre_sim = wavecom_q2xxx_pre_sim, + .post_sim = wavecom_q2xxx_post_sim, +}; + static int wavecom_init(void) { - return ofono_modem_driver_register(&wavecom_driver); + int ret; + + ret = ofono_modem_driver_register(&wavecom_driver); + if (ret < 0) + goto err; + + ret = ofono_modem_driver_register(&wavecom_q2xxx_driver); + if (ret < 0) + goto err_wavecom; + + return ret; + +err_wavecom: + ofono_modem_driver_unregister(&wavecom_driver); +err: + return ret; } static void wavecom_exit(void) { ofono_modem_driver_unregister(&wavecom_driver); + ofono_modem_driver_unregister(&wavecom_q2xxx_driver); } OFONO_PLUGIN_DEFINE(wavecom, "Wavecom driver", VERSION, OFONO_PLUGIN_PRIORITY_DEFAULT, wavecom_init, wavecom_exit) +OFONO_PLUGIN_DEFINE(wavecom_q2xxx, "Wavecom Q2XXX driver", VERSION, + OFONO_PLUGIN_PRIORITY_DEFAULT, wavecom_init, wavecom_exit) -- 1.7.10 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] wavecom: add support for Wavecom Q2403/Q2686 modems 2012-05-29 2:14 ` [PATCH] wavecom: " pablo @ 2012-05-30 5:15 ` Denis Kenzior 0 siblings, 0 replies; 5+ messages in thread From: Denis Kenzior @ 2012-05-30 5:15 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 7309 bytes --] Hi Pablo, On 05/28/2012 09:14 PM, pablo(a)gnumonks.org wrote: > From: Pablo Neira Ayuso<pablo@gnumonks.org> > > This patch extends the existing wavecom plugin to include the new > wavecom 2xxx plugin. > --- > plugins/udev.c | 15 ++++++++++++ > plugins/wavecom.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- > 2 files changed, 86 insertions(+), 6 deletions(-) > Please break this patch into two, one for adding the udev logic and one for wavecom stuff... > diff --git a/plugins/udev.c b/plugins/udev.c > index 8cb87a5..6e3205e 100644 > --- a/plugins/udev.c > +++ b/plugins/udev.c > @@ -167,6 +167,19 @@ static void add_calypso(struct ofono_modem *modem, > ofono_modem_register(modem); > } > > +static void add_wavecom_q2xxx(struct ofono_modem *modem, > + struct udev_device *udev_device) please rename this into add_wavecom. > +{ > + const char *devnode; > + > + DBG("modem %p", modem); > + > + devnode = udev_device_get_devnode(udev_device); > + ofono_modem_set_string(modem, "Device", devnode); Since this is a serial device, you can easily do something like this in your rules file: ENV{OFONO_WAVECOM_MODEL}="Q2XXX" This setting can then be forwarded to the modem driver by using ofono_modem_set_string(modem, "Model" (or Quirk, or whatever), ...); There is no need to create a separate driver for the wavecom. See add_ifx() for an example of this. > + > + ofono_modem_register(modem); > +} > + > static void add_tc65(struct ofono_modem *modem, > struct udev_device *udev_device) > { > @@ -286,6 +299,8 @@ done: > add_nokiacdma(modem, udev_device); > else if (g_strcmp0(driver, "sim900") == 0) > add_sim900(modem, udev_device); > + else if (g_strcmp0(driver, "wavecom_q2xxx") == 0) > + add_wavecom_q2xxx(modem, udev_device); > } > > static gboolean devpath_remove(gpointer key, gpointer value, gpointer user_data) > diff --git a/plugins/wavecom.c b/plugins/wavecom.c > index 5d30f39..c8bd55b 100644 > --- a/plugins/wavecom.c > +++ b/plugins/wavecom.c > @@ -66,7 +66,7 @@ static void wavecom_debug(const char *str, void *user_data) > ofono_info("%s%s", prefix, str); > } > > -static int wavecom_enable(struct ofono_modem *modem) > +static int wavecom_generic_enable(struct ofono_modem *modem, int vendor) > { > GAtChat *chat; > GIOChannel *channel; > @@ -104,6 +104,8 @@ static int wavecom_enable(struct ofono_modem *modem) > syntax = g_at_syntax_new_gsm_permissive(); > > chat = g_at_chat_new(channel, syntax); > + if (vendor == OFONO_VENDOR_WAVECOM_Q2XXX) > + g_at_chat_add_terminator(chat, "+CPIN: READY", -1, TRUE); Please do this inside drivers/atmodem/sim.c? In at_sim_probe() specifically. > g_at_syntax_unref(syntax); > g_io_channel_unref(channel); > > @@ -118,6 +120,16 @@ static int wavecom_enable(struct ofono_modem *modem) > return 0; > } > > +static int wavecom_enable(struct ofono_modem *modem) > +{ > + return wavecom_generic_enable(modem, OFONO_VENDOR_WAVECOM); > +} > + > +static int wavecom_q2xxx_enable(struct ofono_modem *modem) > +{ > + return wavecom_generic_enable(modem, OFONO_VENDOR_WAVECOM_Q2XXX); > +} > + > static int wavecom_disable(struct ofono_modem *modem) > { > GAtChat *chat = ofono_modem_get_data(modem); > @@ -131,18 +143,32 @@ static int wavecom_disable(struct ofono_modem *modem) > return 0; > } > > -static void wavecom_pre_sim(struct ofono_modem *modem) > +static void wavecom_generic_pre_sim(struct ofono_modem *modem, int vendor) > { > GAtChat *chat = ofono_modem_get_data(modem); > + struct ofono_sim *sim; > > DBG("%p", modem); > > ofono_devinfo_create(modem, 0, "atmodem", chat); > - ofono_sim_create(modem, OFONO_VENDOR_WAVECOM, "atmodem", chat); > + sim = ofono_sim_create(modem, vendor, "atmodem", chat); > + if (vendor == OFONO_VENDOR_WAVECOM_Q2XXX) > + ofono_sim_inserted_notify(sim, TRUE); > + Do something like: vendor = 0; if ofono_modem_get_string(modem, "Model") equals "Q2XXX": vendor = OFONO_VENDOR_WAVECOM_Q2XXX; ofono_sim_create(...); > ofono_voicecall_create(modem, 0, "atmodem", chat); > } > > -static void wavecom_post_sim(struct ofono_modem *modem) > +static void wavecom_pre_sim(struct ofono_modem *modem) > +{ > + wavecom_generic_pre_sim(modem, OFONO_VENDOR_WAVECOM); > +} > + > +static void wavecom_q2xxx_pre_sim(struct ofono_modem *modem) > +{ > + wavecom_generic_pre_sim(modem, OFONO_VENDOR_WAVECOM_Q2XXX); > +} > + > +static void wavecom_generic_post_sim(struct ofono_modem *modem, int vendor) > { > GAtChat *chat = ofono_modem_get_data(modem); > struct ofono_message_waiting *mw; > @@ -155,7 +181,8 @@ static void wavecom_post_sim(struct ofono_modem *modem) > ofono_netreg_create(modem, 0, "atmodem", chat); > ofono_call_meter_create(modem, 0, "atmodem", chat); > ofono_call_barring_create(modem, 0, "atmodem", chat); > - ofono_sms_create(modem, 0, "atmodem", chat); > + /* We have to specify the vendor to support AT+CPMS=? reply in Q2xxx */ > + ofono_sms_create(modem, vendor, "atmodem", chat); > ofono_phonebook_create(modem, 0, "atmodem", chat); > > mw = ofono_message_waiting_create(modem); > @@ -163,6 +190,16 @@ static void wavecom_post_sim(struct ofono_modem *modem) > ofono_message_waiting_register(mw); > } > > +static void wavecom_post_sim(struct ofono_modem *modem) > +{ > + wavecom_generic_post_sim(modem, OFONO_VENDOR_WAVECOM); > +} > + > +static void wavecom_q2xxx_post_sim(struct ofono_modem *modem) > +{ > + wavecom_generic_post_sim(modem, OFONO_VENDOR_WAVECOM_Q2XXX); > +} > + > static struct ofono_modem_driver wavecom_driver = { > .name = "wavecom", > .probe = wavecom_probe, > @@ -173,15 +210,43 @@ static struct ofono_modem_driver wavecom_driver = { > .post_sim = wavecom_post_sim, > }; > > +static struct ofono_modem_driver wavecom_q2xxx_driver = { > + .name = "wavecom_q2xxx", > + .probe = wavecom_probe, > + .remove = wavecom_remove, > + .enable = wavecom_q2xxx_enable, > + .disable = wavecom_disable, > + .pre_sim = wavecom_q2xxx_pre_sim, > + .post_sim = wavecom_q2xxx_post_sim, > +}; > + > static int wavecom_init(void) > { > - return ofono_modem_driver_register(&wavecom_driver); > + int ret; > + > + ret = ofono_modem_driver_register(&wavecom_driver); > + if (ret< 0) > + goto err; > + > + ret = ofono_modem_driver_register(&wavecom_q2xxx_driver); > + if (ret< 0) > + goto err_wavecom; > + > + return ret; > + > +err_wavecom: > + ofono_modem_driver_unregister(&wavecom_driver); > +err: > + return ret; > } > > static void wavecom_exit(void) > { > ofono_modem_driver_unregister(&wavecom_driver); > + ofono_modem_driver_unregister(&wavecom_q2xxx_driver); > } > > OFONO_PLUGIN_DEFINE(wavecom, "Wavecom driver", VERSION, > OFONO_PLUGIN_PRIORITY_DEFAULT, wavecom_init, wavecom_exit) > +OFONO_PLUGIN_DEFINE(wavecom_q2xxx, "Wavecom Q2XXX driver", VERSION, > + OFONO_PLUGIN_PRIORITY_DEFAULT, wavecom_init, wavecom_exit) The rest of this is really unnecessary, there is no need to register multiple modem drivers or any other fancy stuff ;) Regards, -Denis ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-05-30 5:15 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-05-29 2:14 [PATCH] v2: support Wavecom Q2403/Q2686 modems pablo 2012-05-29 2:14 ` [PATCH] drivers: add support for " pablo 2012-05-30 5:05 ` Denis Kenzior 2012-05-29 2:14 ` [PATCH] wavecom: " pablo 2012-05-30 5:15 ` Denis Kenzior
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.