2025年7月24日 星期四

Enable GNSS_NMEA for FN920C04/FN990A28 PCIE

based on:fn920c04-pcie-on-x86

vim drivers/bus/mhi/host/pci_generic.c
static const struct mhi_channel_config mhi_telit_fn920c04_channels[] = {
        MHI_CHANNEL_CONFIG_UL(0, "GNSS", 32, 1),
        MHI_CHANNEL_CONFIG_DL(1, "GNSS", 32, 1),
        MHI_CHANNEL_CONFIG_UL_SBL(2, "SAHARA", 32, 0),
        MHI_CHANNEL_CONFIG_DL_SBL(3, "SAHARA", 32, 0),
        MHI_CHANNEL_CONFIG_UL(4, "DIAG", 64, 1),
        MHI_CHANNEL_CONFIG_DL(5, "DIAG", 64, 1),
        MHI_CHANNEL_CONFIG_UL(14, "QMI", 32, 0),
        MHI_CHANNEL_CONFIG_DL(15, "QMI", 32, 0),
        
        MHI_CHANNEL_CONFIG_UL(30, "DUN3", 32, 0),
        MHI_CHANNEL_CONFIG_DL(31, "DUN3", 32, 0),
        
        MHI_CHANNEL_CONFIG_UL(32, "DUN", 32, 0),
        MHI_CHANNEL_CONFIG_DL(33, "DUN", 32, 0),
        MHI_CHANNEL_CONFIG_UL_FP(34, "FIREHOSE", 32, 0),
        MHI_CHANNEL_CONFIG_DL_FP(35, "FIREHOSE", 32, 0),
        MHI_CHANNEL_CONFIG_UL(92, "DUN2", 32, 1),
        MHI_CHANNEL_CONFIG_DL(93, "DUN2", 32, 1),
        
        MHI_CHANNEL_CONFIG_UL(94, "DUN4", 32, 1),
        MHI_CHANNEL_CONFIG_DL(95, "DUN4", 32, 1),
        
        MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0", 128, 2),
        MHI_CHANNEL_CONFIG_HW_DL(101, "IP_HW0", 128, 3),
};


vim drivers/net/wwan/mhi_wwan_ctrl.c
static const struct mhi_device_id mhi_wwan_ctrl_match_table[] = {
        { .chan = "DUN", .driver_data = WWAN_PORT_AT },
        { .chan = "DUN2", .driver_data = WWAN_PORT_AT },
        
        { .chan = "DUN3", .driver_data = WWAN_PORT_AT },
        { .chan = "DUN4", .driver_data = WWAN_PORT_AT },
        
        { .chan = "MBIM", .driver_data = WWAN_PORT_MBIM },
        { .chan = "QMI", .driver_data = WWAN_PORT_QMI },
        { .chan = "DIAG", .driver_data = WWAN_PORT_QCDM },
        { .chan = "FIREHOSE", .driver_data = WWAN_PORT_FIREHOSE },
        {},
};
MODULE_DEVICE_TABLE(mhi, mhi_wwan_ctrl_match_table);

plugins/telit/mm-plugin-telit.c (not test)
mm_plugin_create (void)
{
    static const gchar *subsystems[] = { "tty", "net", "usbmisc", "wwan", NULL };
    /* Vendors: Telit */
    static const guint16 vendor_ids[] = { 0x1bc7, 0 };
    static const mm_uint16_pair subsystem_vendor_ids[] = {
        { 0x17cb, 0x1c5d }, /* FN990 */ //for PCIE, chatgpt said. But FN990A28 PCIE: 0x17cb, 0x0308 via lspci
        { 0, 0 }
    };
    ...
    ...
}

minicom -D /dev/wwan0at1
AT$GPSNMUN=1,1,1,1,1,1,1
AT$GPSP=1

minicom -D /dev/wwan0at3
$GPSNMUN: $GPGSA,A,1,,,,,,,,,,,,,,,,*32
$GPSNMUN: $GPVTG,,T,,M,,N,,K,N*2C
$GPSNMUN: $GPRMC,,V,,,,,,,,,,N,V*29
$GPSNMUN: $GPGGA,,,,,,0,,,,,,,,*66
$GPSNMUN: $GPGLL,,,,,,V,N*64
...
...

FN990
static const struct mhi_channel_config mhi_telit_fn990_channels[] = {
        MHI_CHANNEL_CONFIG_UL_SBL(2, "SAHARA", 32, 0),
        MHI_CHANNEL_CONFIG_DL_SBL(3, "SAHARA", 32, 0),
        MHI_CHANNEL_CONFIG_UL(4, "DIAG", 64, 1),
        MHI_CHANNEL_CONFIG_DL(5, "DIAG", 64, 1),
        MHI_CHANNEL_CONFIG_UL(12, "MBIM", 32, 0),
        MHI_CHANNEL_CONFIG_DL(13, "MBIM", 32, 0),
        MHI_CHANNEL_CONFIG_UL(30, "DUN3", 32, 0),
        MHI_CHANNEL_CONFIG_DL(31, "DUN3", 32, 0),
        MHI_CHANNEL_CONFIG_UL(32, "DUN", 32, 0),
        MHI_CHANNEL_CONFIG_DL(33, "DUN", 32, 0),
        MHI_CHANNEL_CONFIG_UL(92, "DUN2", 32, 1),
        MHI_CHANNEL_CONFIG_DL(93, "DUN2", 32, 1),
        MHI_CHANNEL_CONFIG_UL(94, "DUN4", 32, 1),
        MHI_CHANNEL_CONFIG_DL(95, "DUN4", 32, 1),
        MHI_CHANNEL_CONFIG_HW_UL(100, "IP_HW0_MBIM", 128, 2),
        MHI_CHANNEL_CONFIG_HW_DL(101, "IP_HW0_MBIM", 128, 3),
};

沒有留言:

張貼留言