We are developing on a tegra k1 board similar to the nvidia shieldtablet lte board and we are trying to setup a standard m.2 ngff wwan card in the m.2 interface but the board files for ardbeg are setup for icera gpio/power/usb when initializing m.2. How can we properly setup the m.2 baseband xusb port assignment for a standard m.2 wwan over usb lane?
Right now we constantly receive the following error with unediited board-ardbeg.c
We have tried both HSIC and UMTI lane_owner=0 and lane_owner=2
<6>[03-01 09:03:18.395] usb 1-1: Sierra USB modem converter now attached to ttyUSB0
<6>[03-01 09:03:18.395] sierra 1-1:1.2: Sierra USB modem converter detected
<6>[03-01 09:03:18.395] usb 1-1: APM supported, enabling autosuspend.
<7>[03-01 09:03:18.395] cpu-tegra: force EDP limit 1428000 kHz
<6>[03-01 09:03:18.395] usb 1-1: Sierra USB modem converter now attached to ttyUSB1
<6>[03-01 09:03:18.395] sierra 1-1:1.3: Sierra USB modem converter detected
<6>[03-01 09:03:18.395] usb 1-1: APM supported, enabling autosuspend.
<6>[03-01 09:03:18.395] usb 1-1: Sierra USB modem converter now attached to ttyUSB2
<6>[03-01 09:03:18.395] GobiNet 1-1:1.8 eth0: register 'GobiNet' at usb-tegra-ehci.2-1, GobiNet Ethernet Device, 1e:b1:bd:b3:29:a8
<4>[03-01 09:03:18.395] USB Speed : USB 2.0
<7>[03-01 09:03:18.395] usb 1-1: usbfs: USBDEVFS_CONTROL failed cmd UsbService host rqt 128 rq 6 len 256 ret -71
<7>[03-01 09:03:18.395] usb 1-1: usbfs: USBDEVFS_CONTROL failed cmd UsbService host rqt 128 rq 6 len 256 ret -71
<7>[03-01 09:03:18.395] usb 1-1: usbfs: USBDEVFS_CONTROL failed cmd UsbService host rqt 128 rq 6 len 256 ret -71
board-ardbeg.c baseband init:
/* GPIO usage for Bruce modem */
static struct gpio modem_gpios[] = {
{MODEM_EN, GPIOF_OUT_INIT_HIGH, "MODEM EN"},
{MDM_RST, GPIOF_OUT_INIT_HIGH, "MODEM RESET"},
{MDM_SAR0, GPIOF_OUT_INIT_LOW, "MODEM SAR0"},
};
static struct tegra_usb_platform_data tegra_ehci2_hsic_baseband_pdata = {
.port_otg = false,
.has_hostpc = true,
.unaligned_dma_buf_supported = false,
.phy_intf = TEGRA_USB_PHY_INTF_HSIC,
.op_mode = TEGRA_USB_OPMODE_HOST,
.u_data.host = {
.vbus_gpio = -1,
.hot_plug = false,
.remote_wakeup_supported = true,
.power_off_on_suspend = true,
},
};
static int baseband_init(void)
{
int ret;
ret = gpio_request_array(modem_gpios, ARRAY_SIZE(modem_gpios));
if (ret) {
pr_warn("%s:gpio request failed\n", __func__);
return ret;
}
/* enable pull-down for MDM_COLD_BOOT */
tegra_pinmux_set_pullupdown(TEGRA_PINGROUP_ULPI_DATA4,
TEGRA_PUPD_PULL_DOWN);
/* Release modem reset to start boot */
gpio_set_value(MDM_RST, 1);
/* export GPIO for user space access through sysfs */
gpio_export(MDM_RST, false);
gpio_export(MDM_SAR0, false);
return 0;
}
static const struct tegra_modem_operations baseband_operations = {
.init = baseband_init,
};
static struct tegra_usb_modem_power_platform_data baseband_pdata = {
.ops = &baseband_operations,
.regulator_name = "vdd_wwan_mdm",
.wake_gpio = -1,
.boot_gpio = MDM_COLDBOOT,
.boot_irq_flags = IRQF_TRIGGER_RISING |
IRQF_TRIGGER_FALLING |
IRQF_ONESHOT,
.autosuspend_delay = 1000,
.short_autosuspend_delay = 1000,
.tegra_ehci_device = &tegra_ehci2_device,
.tegra_ehci_pdata = &tegra_ehci2_hsic_baseband_pdata,
};
static struct platform_device icera_bruce_device = {
.name = "tegra_usb_modem_power",
.id = -1,
.dev = {
.platform_data = &baseband_pdata,
},
};
static void ardbeg_modem_init(void)
{
int modem_id = tegra_get_modem_id();
pr_info("%s: modem_id = %d\n", __func__, modem_id);
tegra_set_wake_source(42, INT_USB2);
platform_device_register(&icera_bruce_device);
}