quectel: new ID_MM_QUECTEL_FIREHOSE udev tag

To identify which devices support the firehose update protocol.
This commit is contained in:
Aleksander Morgado
2022-01-18 10:50:20 +01:00
parent 22e38199a9
commit bb256b0cec
2 changed files with 23 additions and 19 deletions

View File

@@ -1,9 +1,10 @@
# do not edit this file, it will be overwritten on update # do not edit this file, it will be overwritten on update
ACTION!="add|change|move|bind", GOTO="mm_quectel_port_types_end" ACTION!="add|change|move|bind", GOTO="mm_quectel_end"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2c7c", GOTO="mm_quectel_port_types" SUBSYSTEMS=="usb", ATTRS{idVendor}=="2c7c", GOTO="mm_quectel_usb"
GOTO="mm_quectel_port_types_end" SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1eac", GOTO="mm_quectel_pci"
GOTO="mm_quectel_end"
LABEL="mm_quectel_port_types" LABEL="mm_quectel_usb"
SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInterfaceNumber}" SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInterfaceNumber}"
@@ -67,4 +68,16 @@ ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0800", ENV{.MM_USBIFNUM}=="01", SUBS
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0800", ENV{.MM_USBIFNUM}=="02", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1" ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0800", ENV{.MM_USBIFNUM}=="02", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_PRIMARY}="1"
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0800", ENV{.MM_USBIFNUM}=="03", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1" ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0800", ENV{.MM_USBIFNUM}=="03", SUBSYSTEM=="tty", ENV{ID_MM_PORT_TYPE_AT_SECONDARY}="1"
LABEL="mm_quectel_port_types_end" # Quectel EM05-G and EM05-CE with firehose support
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="030a", ENV{ID_MM_QUECTEL_FIREHOSE}="1"
ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0127", ENV{ID_MM_QUECTEL_FIREHOSE}="1"
GOTO="mm_quectel_end"
LABEL="mm_quectel_pci"
# Quectel EM120 and EM160 with firehose support
ATTRS{vendor}=="0x1eac", ATTRS{device}=="0x1001", ENV{ID_MM_QUECTEL_FIREHOSE}="1"
ATTRS{vendor}=="0x1eac", ATTRS{device}=="0x1002", ENV{ID_MM_QUECTEL_FIREHOSE}="1"
LABEL="mm_quectel_end"

View File

@@ -148,19 +148,10 @@ mm_shared_quectel_firmware_load_update_settings_finish (MMIfaceModemFirmware *s
} }
static gboolean static gboolean
quectel_is_firehose_supported (MMBaseModem *modem) quectel_is_firehose_supported (MMBaseModem *modem,
MMPort *port)
{ {
guint16 vid = mm_base_modem_get_vendor_id (modem); return mm_kernel_device_get_global_property_as_boolean (mm_port_peek_kernel_device (port), "ID_MM_QUECTEL_FIREHOSE");
guint16 pid = mm_base_modem_get_product_id (modem);
/* EM120 and EM160 */
if (vid == 0x1eac && (pid == 0x1001 || pid == 0x1002))
return TRUE;
/* EM05-G and EM05-CE */
if (vid == 0x2c7c && (pid == 0x030a || pid == 0x0127))
return TRUE;
return FALSE;
} }
static void static void
@@ -245,7 +236,7 @@ mm_shared_quectel_firmware_load_update_settings (MMIfaceModemFirmware *self,
at_port = mm_base_modem_peek_best_at_port (MM_BASE_MODEM (self), NULL); at_port = mm_base_modem_peek_best_at_port (MM_BASE_MODEM (self), NULL);
if (at_port) { if (at_port) {
if (quectel_is_firehose_supported (MM_BASE_MODEM (self))) { if (quectel_is_firehose_supported (MM_BASE_MODEM (self), MM_PORT (at_port))) {
/* Firehose modems */ /* Firehose modems */
update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE); update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE);
g_task_set_task_data (task, update_settings, g_object_unref); g_task_set_task_data (task, update_settings, g_object_unref);
@@ -274,7 +265,7 @@ mm_shared_quectel_firmware_load_update_settings (MMIfaceModemFirmware *self,
g_autoptr(MbimMessage) message = NULL; g_autoptr(MbimMessage) message = NULL;
/* Set update method */ /* Set update method */
if (quectel_is_firehose_supported (MM_BASE_MODEM (self))) if (quectel_is_firehose_supported (MM_BASE_MODEM (self), MM_PORT (mbim)))
update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE); update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_FIREHOSE);
else else
update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE); update_settings = mm_firmware_update_settings_new (MM_MODEM_FIRMWARE_UPDATE_METHOD_NONE);