udevng: add SIMCom SIM7600 modem support

The SIMCom SIM7100 and SIM7600 modem use the same vendor and product id
but require different drivers (sim7100 vs gobi).
This commit is contained in:
Stefan Herbrechtsmeier 2019-05-08 14:01:12 +00:00 committed by Denis Kenzior
parent 9b1dae2e62
commit c3b7756907
1 changed files with 50 additions and 22 deletions

View File

@ -1241,9 +1241,11 @@ static gboolean setup_xmm7xxx(struct modem_info *modem)
return TRUE; return TRUE;
} }
static gboolean setup_sim7100(struct modem_info *modem) static gboolean setup_sim7x00(struct modem_info *modem)
{ {
const char *at = NULL, *ppp = NULL, *gps = NULL, *diag = NULL, *audio = NULL; const char *audio = NULL, *diag = NULL, *gps = NULL;
const char *mdm = NULL, *net = NULL, *ppp = NULL;
const char *qmi = NULL;
GSList *list; GSList *list;
DBG("%s", modem->syspath); DBG("%s", modem->syspath);
@ -1251,10 +1253,12 @@ static gboolean setup_sim7100(struct modem_info *modem)
for (list = modem->devices; list; list = list->next) { for (list = modem->devices; list; list = list->next) {
struct device_info *info = list->data; struct device_info *info = list->data;
DBG("%s %s", info->devnode, info->number); DBG("%s %s %s %s %s %s", info->devnode, info->interface,
info->number, info->label,
info->sysattr, info->subsystem);
/* /*
* Serial port layout: * SIM7100 serial port layout:
* 0: QCDM/DIAG * 0: QCDM/DIAG
* 1: NMEA * 1: NMEA
* 2: AT * 2: AT
@ -1263,29 +1267,52 @@ static gboolean setup_sim7100(struct modem_info *modem)
* *
* -- https://www.spinics.net/lists/linux-usb/msg135728.html * -- https://www.spinics.net/lists/linux-usb/msg135728.html
*/ */
if (g_strcmp0(info->number, "00") == 0) if (g_strcmp0(info->subsystem, "usbmisc") == 0) /* cdc-wdm */
diag = info->devnode; qmi = info->devnode; /* SIM7600 */
else if (g_strcmp0(info->number, "01") == 0) else if (g_strcmp0(info->subsystem, "net") == 0) /* wwan */
gps = info->devnode; net = info->devnode; /* SIM7600 */
else if (g_strcmp0(info->number, "02") == 0) else if (g_strcmp0(info->subsystem, "tty") == 0) {
at = info->devnode; if (g_strcmp0(info->interface, "255/255/255") == 0) {
else if (g_strcmp0(info->number, "03") == 0) if (g_strcmp0(info->number, "00") == 0)
ppp = info->devnode; diag = info->devnode; /* SIM7x00 */
else if (g_strcmp0(info->number, "04") == 0) } else if (g_strcmp0(info->interface, "255/0/0") == 0) {
audio = info->devnode; if (g_strcmp0(info->number, "01") == 0)
gps = info->devnode; /* SIM7x00 */
else if (g_strcmp0(info->number, "02") == 0)
mdm = info->devnode; /* SIM7x00 */
else if (g_strcmp0(info->number, "03") == 0)
ppp = info->devnode; /* SIM7100 */
else if (g_strcmp0(info->number, "04") == 0)
audio = info->devnode; /* SIM7100 */
}
}
} }
if (at == NULL) if (mdm == NULL)
return FALSE; return FALSE;
DBG("at=%s ppp=%s gps=%s diag=%s, audio=%s", at, ppp, gps, diag, audio); if (qmi != NULL && net != NULL) {
DBG("qmi=%s net=%s mdm=%s gps=%s diag=%s",
qmi, net, mdm, gps, diag);
ofono_modem_set_driver(modem->modem, "gobi");
ofono_modem_set_string(modem->modem, "Device", qmi);
ofono_modem_set_string(modem->modem, "Modem", mdm);
ofono_modem_set_string(modem->modem, "NetworkInterface", net);
} else {
DBG("at=%s ppp=%s gps=%s diag=%s, audio=%s",
mdm, ppp, gps, diag, audio);
ofono_modem_set_driver(modem->modem, "sim7100");
ofono_modem_set_string(modem->modem, "AT", mdm);
ofono_modem_set_string(modem->modem, "PPP", ppp);
ofono_modem_set_string(modem->modem, "Audio", audio);
}
ofono_modem_set_string(modem->modem, "AT", at);
ofono_modem_set_string(modem->modem, "PPP", ppp);
ofono_modem_set_string(modem->modem, "GPS", gps); ofono_modem_set_string(modem->modem, "GPS", gps);
ofono_modem_set_string(modem->modem, "Diag", diag); ofono_modem_set_string(modem->modem, "Diag", diag);
ofono_modem_set_string(modem->modem, "Audio", audio);
return TRUE; return TRUE;
} }
@ -1309,7 +1336,7 @@ static struct {
{ "telit", setup_telit, "device/interface" }, { "telit", setup_telit, "device/interface" },
{ "telitqmi", setup_telitqmi }, { "telitqmi", setup_telitqmi },
{ "simcom", setup_simcom }, { "simcom", setup_simcom },
{ "sim7100", setup_sim7100 }, { "sim7x00", setup_sim7x00 },
{ "zte", setup_zte }, { "zte", setup_zte },
{ "icera", setup_icera }, { "icera", setup_icera },
{ "samsung", setup_samsung }, { "samsung", setup_samsung },
@ -1682,7 +1709,8 @@ static struct {
{ "novatel", "option", "1410" }, { "novatel", "option", "1410" },
{ "zte", "option", "19d2" }, { "zte", "option", "19d2" },
{ "simcom", "option", "05c6", "9000" }, { "simcom", "option", "05c6", "9000" },
{ "sim7100", "option", "1e0e", "9001" }, { "sim7x00", "option", "1e0e", "9001" },
{ "sim7x00", "qmi_wwan", "1e0e", "9001" },
{ "telit", "usbserial", "1bc7" }, { "telit", "usbserial", "1bc7" },
{ "telit", "option", "1bc7" }, { "telit", "option", "1bc7" },
{ "telit", "cdc_acm", "1bc7", "0021" }, { "telit", "cdc_acm", "1bc7", "0021" },