diff options
author | Franko Fang <fangxiaozhi@huawei.com> | 2013-04-03 13:14:14 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-04-09 18:41:15 +0200 |
commit | 01400024cdf6faea50faa6ba170dc37876fa5d5f (patch) | |
tree | 01203826d31ff70b7c12540226b4f744752a5d48 | |
parent | d56a87a3bde4f504f828c050b905f20425c4c665 (diff) | |
download | ModemManager-01400024cdf6faea50faa6ba170dc37876fa5d5f.tar.gz |
huawei: add port type rules for modems
-rw-r--r-- | plugins/huawei/77-mm-huawei_net_port_types.rules | 6 | ||||
-rw-r--r-- | plugins/huawei/mm-plugin-huawei.c | 33 |
2 files changed, 30 insertions, 9 deletions
diff --git a/plugins/huawei/77-mm-huawei_net_port_types.rules b/plugins/huawei/77-mm-huawei_net_port_types.rules index 0a60510d5..db0edceb2 100644 --- a/plugins/huawei/77-mm-huawei_net_port_types.rules +++ b/plugins/huawei/77-mm-huawei_net_port_types.rules @@ -3,6 +3,12 @@ ACTION!="add|change", GOTO="mm_huawei_port_types_end" ENV{ID_VENDOR_ID}!="12d1", GOTO="mm_huawei_port_types_end" +# Mark the modem and at port flags for ModemManager +SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="01", ENV{ID_MM_HUAWEI_MODEM_PORT}="1" +SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="01", ATTRS{bInterfaceProtocol}=="02", ENV{ID_MM_HUAWEI_AT_PORT}="1" +SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="02", ATTRS{bInterfaceProtocol}=="01", ENV{ID_MM_HUAWEI_MODEM_PORT}="1" +SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="ff", ATTRS{bInterfaceSubClass}=="02", ATTRS{bInterfaceProtocol}=="02", ENV{ID_MM_HUAWEI_AT_PORT}="1" + # Only the standard ECM or NCM port can support dial-up with AT NDISDUP through AT port SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="02", ATTRS{bInterfaceSubClass}=="06",ATTRS{bInterfaceProtocol}=="00", ENV{ID_MM_HUAWEI_NDISDUP_SUPPORTED}="1" SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="02", ATTRS{bInterfaceSubClass}=="0d",ATTRS{bInterfaceProtocol}=="00", ENV{ID_MM_HUAWEI_NDISDUP_SUPPORTED}="1" diff --git a/plugins/huawei/mm-plugin-huawei.c b/plugins/huawei/mm-plugin-huawei.c index e6ebafb4f..4ab0d3b65 100644 --- a/plugins/huawei/mm-plugin-huawei.c +++ b/plugins/huawei/mm-plugin-huawei.c @@ -465,16 +465,31 @@ grab_port (MMPlugin *self, MMPortProbe *probe, GError **error) { - gchar *str; MMAtPortFlag pflags; - - pflags = (MMAtPortFlag) GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (probe), TAG_AT_PORT_FLAGS)); - str = mm_at_port_flag_build_string_from_mask (pflags); - mm_dbg ("(%s/%s) Port will have AT flags '%s'", - mm_port_probe_get_port_subsys (probe), - mm_port_probe_get_port_name (probe), - str); - g_free (str); + GUdevDevice *port; + + port = mm_port_probe_peek_port (probe); + if (g_udev_device_get_property_as_boolean (port, "ID_MM_HUAWEI_AT_PORT")) { + mm_dbg ("(%s/%s)' Port flagged as primary", + mm_port_probe_get_port_subsys (probe), + mm_port_probe_get_port_name (probe)); + pflags = MM_AT_PORT_FLAG_PRIMARY; + } else if (g_udev_device_get_property_as_boolean (port, "ID_MM_HUAWEI_MODEM_PORT")) { + mm_dbg ("(%s/%s) Port flagged as PPP", + mm_port_probe_get_port_subsys (probe), + mm_port_probe_get_port_name (probe)); + pflags = MM_AT_PORT_FLAG_PPP; + } else { + gchar *str; + + pflags = (MMAtPortFlag) GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (probe), TAG_AT_PORT_FLAGS)); + str = mm_at_port_flag_build_string_from_mask (pflags); + mm_dbg ("(%s/%s) Port will have AT flags '%s'", + mm_port_probe_get_port_subsys (probe), + mm_port_probe_get_port_name (probe), + str); + g_free (str); + } return mm_base_modem_grab_port (modem, mm_port_probe_get_port_subsys (probe), |