Re: 1199:6832 Sierra Wireless, Inc. MC8780 not working with NetworkManager 0.8.3.998 / ModemManager 0.4



> >> >  From a cursory reading of the bug reports you cited it seems like some
> >> > sierra modems crash when ModemManager sends CFUN=1 to them.
> >> >
> >> > Can you help verify if this is indeed the case with yours as well?
> >> >
> >
> > So it really seems that not only Wavecom modems get a whole software
> > restart (including USB stack) when they get AT+CFUN=1. The thing is, is
> > removing the power-up command a solution for *all* Sierra modems or are
> > there any Sierra modems that really need the power-up command? If so,
> > we'll probably need to disable the power-up only for specific models,
> > like the one reported in the bug; or the other way around, enable it
> > only for only some specific models.
> 
> >From reading the cited bug reports and from general "instict" I would think
> that probably some of them need CFUN=1 and others crash when they get it
> so the best thing to do is enable it selectively. (We can start from this
> USBID and expand).
> 
> Unfortunately I don't have the device myself, so I can't test.
> 
> 
> > Wasn't that patch already applied to Ubuntu's MM? According to the logs
> > in https://bugs.launchpad.net/ubuntu/+source/modemmanager/+bug/459052
> > that was written by Alexander Sack long ago, and possibly applied in
> > Ubuntu... (comment #7?)
> 
> It was probably applied to ubuntu once but somehow it got dropped (I think
> during the karmic -> lucid transition if I read well).
> 
> In the current version (natty) there is no such patch from what I could see.
> 
> In any case, a distro-local patch is really a bad idea for solving this type
> of problems, especially when you have such a friendly and responsive
> upstream like in this case.
> 
> Unfortunately I don't have any modemmanager experience or time to
> implement the quirk "the right way", so if someone can start from
> the previous attached patch and fix the problem correctly, it would be
> great :)
> 

Attached a patch which should do AT+CFUN=1 only if product ID is not
0x6832. Can you guys test it?

Cheers!

-- 
Aleksander
>From a91835798a7d7a5fffddb905e71b45178ef05ebf Mon Sep 17 00:00:00 2001
From: Aleksander Morgado <aleksander lanedo com>
Date: Fri, 20 May 2011 11:46:32 +0200
Subject: [PATCH] sierra: avoid sending power-up command to MC8780

Fixes LP#459052

Based on a patch developed by Alexander Sack
---
 plugins/mm-modem-sierra-gsm.c |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/plugins/mm-modem-sierra-gsm.c b/plugins/mm-modem-sierra-gsm.c
index d4636d7..163263d 100644
--- a/plugins/mm-modem-sierra-gsm.c
+++ b/plugins/mm-modem-sierra-gsm.c
@@ -609,6 +609,44 @@ simple_connect (MMModemSimple *simple,
 /*****************************************************************************/
 
 static void
+set_property (GObject *object,
+              guint prop_id,
+              const GValue *value,
+              GParamSpec *pspec)
+{
+    /* Do nothing... see set_property() in parent, which also does nothing */
+}
+
+static void
+get_property (GObject *object,
+              guint prop_id,
+              GValue *value,
+              GParamSpec *pspec)
+{
+    switch (prop_id) {
+    case MM_GENERIC_GSM_PROP_POWER_UP_CMD: {
+        guint16 product_id = 0;
+
+        g_object_get (object,
+                      MM_MODEM_HW_PID, &product_id,
+                      NULL);
+
+        /* Some Sierra modems do a full software reset (including
+         * USB stack) with AT+CFUN=1, so try to avoid that.
+         *   - MC8780 (0x6832)
+         * */
+        if (product_id == 0x6832)
+            g_value_set_string (value, "");
+        else
+            g_value_set_string (value, "+CFUN=1");
+        break;
+    }
+    default:
+        break;
+    }
+}
+
+static void
 modem_init (MMModem *modem_class)
 {
     modem_class->grab_port = grab_port;
@@ -646,6 +684,9 @@ mm_modem_sierra_gsm_class_init (MMModemSierraGsmClass *klass)
     mm_modem_sierra_gsm_parent_class = g_type_class_peek_parent (klass);
     g_type_class_add_private (object_class, sizeof (MMModemSierraGsmPrivate));
 
+    object_class->get_property = get_property;
+    object_class->set_property = set_property;
+
     object_class->dispose = dispose;
     gsm_class->do_enable_power_up_done = real_do_enable_power_up_done;
     gsm_class->set_allowed_mode = set_allowed_mode;
-- 
1.7.4.1



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]