firmware: export a device id containing the carrier info

In order to support different per-carrier upgrade paths in fwupd.
diff --git a/src/mm-iface-modem-firmware.c b/src/mm-iface-modem-firmware.c
index 5cbe874..1775a1c 100644
--- a/src/mm-iface-modem-firmware.c
+++ b/src/mm-iface-modem-firmware.c
@@ -311,6 +311,7 @@
     GPtrArray   *ids;
     MMPort      *primary = NULL;
     const gchar *subsystem;
+    const gchar *aux;
 
     vid = mm_base_modem_get_vendor_id (self);
     pid = mm_base_modem_get_product_id (self);
@@ -334,7 +335,17 @@
         return FALSE;
     }
 
+    /* carrier = g_ascii_strup (mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self)), -1);     */
+    aux = mm_iface_modem_get_carrier_config (MM_IFACE_MODEM (self));
+
     ids = g_ptr_array_new_with_free_func ((GDestroyNotify)g_free);
+    if (aux) {
+        gchar *carrier;
+
+        carrier = g_ascii_strup (aux, -1);
+        g_ptr_array_add (ids, g_strdup_printf ("USB\\VID_%04X&PID_%04X&REV_%04X&CARRIER_%s", vid, pid, rid, carrier));
+        g_free (carrier);
+    }
     g_ptr_array_add (ids, g_strdup_printf ("USB\\VID_%04X&PID_%04X&REV_%04X", vid, pid, rid));
     g_ptr_array_add (ids, g_strdup_printf ("USB\\VID_%04X&PID_%04X", vid, pid));
     g_ptr_array_add (ids, g_strdup_printf ("USB\\VID_%04X", vid));
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index 9befbdd..292923d 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -5452,6 +5452,24 @@
     return revision;
 }
 
+const gchar *
+mm_iface_modem_get_carrier_config (MMIfaceModem *self)
+{
+    const gchar *carrier_config = NULL;
+    MmGdbusModem *skeleton;
+
+    g_object_get (self,
+                  MM_IFACE_MODEM_DBUS_SKELETON, &skeleton,
+                  NULL);
+
+    if (skeleton) {
+        carrier_config = mm_gdbus_modem_get_carrier_configuration (skeleton);
+        g_object_unref (skeleton);
+    }
+
+    return carrier_config;
+}
+
 /*****************************************************************************/
 
 static void
diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h
index cb7a75e..82236dd 100644
--- a/src/mm-iface-modem.h
+++ b/src/mm-iface-modem.h
@@ -400,8 +400,9 @@
 gboolean mm_iface_modem_is_4g_only (MMIfaceModem *self);
 
 /* Helpers to query properties */
-const gchar *mm_iface_modem_get_model    (MMIfaceModem *self);
-const gchar *mm_iface_modem_get_revision (MMIfaceModem *self);
+const gchar *mm_iface_modem_get_model          (MMIfaceModem *self);
+const gchar *mm_iface_modem_get_revision       (MMIfaceModem *self);
+const gchar *mm_iface_modem_get_carrier_config (MMIfaceModem *self);
 
 /* Initialize Modem interface (async) */
 void     mm_iface_modem_initialize        (MMIfaceModem *self,