udev: Handle Linktop data card
authorAmit Mendapara <mendapara.amit@gmail.com>
Thu, 10 Feb 2011 05:15:39 +0000 (10:45 +0530)
committerDenis Kenzior <denkenz@gmail.com>
Mon, 14 Feb 2011 19:48:09 +0000 (13:48 -0600)
plugins/udev.c

index ce1efe6..84478d7 100644 (file)
@@ -552,6 +552,36 @@ static void add_nokiacdma(struct ofono_modem *modem,
        ofono_modem_register(modem);
 }
 
+static void add_linktop(struct ofono_modem *modem,
+                                       struct udev_device *udev_device)
+{
+       const char *devnode, *intfnum;
+       struct udev_device *parent;
+       int registered;
+
+       DBG("modem %p", modem);
+
+       registered = ofono_modem_get_integer(modem, "Registered");
+       if (registered != 0)
+               return;
+
+       parent = udev_device_get_parent(udev_device);
+       intfnum = udev_device_get_sysattr_value(parent, "bInterfaceNumber");
+
+       DBG("intfnum %s", intfnum);
+
+       if (g_strcmp0(intfnum, "01") == 0) {
+               devnode = udev_device_get_devnode(udev_device);
+               ofono_modem_set_string(modem, "Modem", devnode);
+       } else if (g_strcmp0(intfnum, "03") == 0) {
+               devnode = udev_device_get_devnode(udev_device);
+               ofono_modem_set_string(modem, "Control", devnode);
+
+               ofono_modem_set_integer(modem, "Registered", 1);
+               ofono_modem_register(modem);
+       }
+}
+
 static void add_modem(struct udev_device *udev_device)
 {
        struct ofono_modem *modem;
@@ -646,6 +676,8 @@ done:
                add_tc65(modem, udev_device);
        else if (g_strcmp0(driver, "nokiacdma") == 0)
                add_nokiacdma(modem, udev_device);
+        else if (g_strcmp0(driver, "linktop") == 0)
+               add_linktop(modem, udev_device);
 }
 
 static gboolean devpath_remove(gpointer key, gpointer value, gpointer user_data)