static void loki_modem_init(void) { int modem_id = tegra_get_modem_id(); struct board_info board_info; int usb_port_owner_info = tegra_get_usb_port_owner_info(); tegra_get_board_info(&board_info); pr_info("%s: modem_id = %d\n", __func__, modem_id); switch (modem_id) { case TEGRA_BB_BRUCE: if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) platform_device_register(&icera_bruce_device); break; case TEGRA_BB_HSIC_HUB: /* HSIC hub */ if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) { tegra_ehci2_device.dev.platform_data = &tegra_ehci2_hsic_smsc_hub_pdata; platform_device_register(&tegra_ehci2_device); } break; default: return; } }
static void loki_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); int modem_id = tegra_get_modem_id(); /* Device cable is detected through PMU Interrupt */ tegra_udc_pdata.support_pmu_vbus = true; tegra_udc_pdata.vbus_extcon_dev_name = "palmas-extcon"; tegra_ehci1_utmi_pdata.support_pmu_vbus = true; tegra_ehci1_utmi_pdata.vbus_extcon_dev_name = "palmas-extcon"; if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; } if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) { if (!modem_id) { tegra_ehci2_device.dev.platform_data = &tegra_ehci2_utmi_pdata; platform_device_register(&tegra_ehci2_device); } } if (!(usb_port_owner_info & UTMI3_PORT_OWNER_XUSB)) { tegra_ehci3_device.dev.platform_data = &tegra_ehci3_utmi_pdata; platform_device_register(&tegra_ehci3_device); } }
static void loki_xusb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); xusb_pdata.lane_owner = (u8) tegra_get_lane_owner_info(); if (board_info.board_id == BOARD_PM359 || board_info.board_id == BOARD_PM358 || board_info.board_id == BOARD_PM363) { /* Laguna */ if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0 | TEGRA_XUSB_SS_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_SS_P1); /* FIXME Add for UTMIP2 when have odmdata assigend */ } else { /* Loki */ if (board_info.board_id == BOARD_E1781) { pr_info("Shield ERS-S. 0x%x\n", board_info.board_id); /* Shield ERS-S */ if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~( TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_SS_P0 | TEGRA_XUSB_USB2_P2 | TEGRA_XUSB_SS_P1); } else if (board_info.board_id == BOARD_P2530 && board_info.sku == BOARD_SKU_FOSTER) { if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_SS_P0); if (!(usb_port_owner_info & UTMI3_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P2 | TEGRA_XUSB_SS_P1); } else { pr_info("Shield ERS 0x%x\n", board_info.board_id); /* Shield ERS */ if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0 | TEGRA_XUSB_SS_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_USB2_P2 | TEGRA_XUSB_SS_P1); } /* FIXME Add for UTMIP2 when have odmdata assigend */ } }
static void ardbeg_xusb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); xusb_pdata.lane_owner = (u8) tegra_get_lane_owner_info(); if (board_info.board_id == BOARD_PM359 || board_info.board_id == BOARD_PM358 || board_info.board_id == BOARD_PM374 || board_info.board_id == BOARD_PM370 || board_info.board_id == BOARD_PM363) { if (board_info.board_id == BOARD_PM374 || board_info.board_id == BOARD_PM370) pr_info("Norrin. 0x%x\n", board_info.board_id); else pr_info("Laguna. 0x%x\n", board_info.board_id); if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0 | TEGRA_XUSB_SS_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_SS_P1 | TEGRA_XUSB_USB2_P2); /* FIXME Add for UTMIP2 when have odmdata assigend */ } else { /* Ardbeg */ if (board_info.board_id == BOARD_E1781) { pr_info("Shield ERS-S. 0x%x\n", board_info.board_id); /* Shield ERS-S */ if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~( TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_SS_P0 | TEGRA_XUSB_USB2_P2 | TEGRA_XUSB_SS_P1); } else { pr_info("Shield ERS 0x%x\n", board_info.board_id); /* Shield ERS */ if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P0 | TEGRA_XUSB_SS_P0); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_USB2_P2 | TEGRA_XUSB_SS_P1); } /* FIXME Add for UTMIP2 when have odmdata assigend */ } if (usb_port_owner_info & HSIC1_PORT_OWNER_XUSB) xusb_pdata.portmap |= TEGRA_XUSB_HSIC_P0; if (usb_port_owner_info & HSIC2_PORT_OWNER_XUSB) xusb_pdata.portmap |= TEGRA_XUSB_HSIC_P1; }
static void dalmore_xusb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~TEGRA_XUSB_USB2_P0; if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) xusb_pdata.portmap &= ~(TEGRA_XUSB_USB2_P1 | TEGRA_XUSB_SS_P0); }
static void dalmore_xusb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); if (usb_port_owner_info & UTMI2_PORT_OWNER_XUSB) { tegra_xusb_init(&xusb_bdata); tegra_xusb_register(); } }
static void macallan_modem_init(void) { int modem_id = tegra_get_modem_id(); int usb_port_owner_info = tegra_get_usb_port_owner_info(); switch (modem_id) { case TEGRA_BB_NEMO: /* on board i500 HSIC */ if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) platform_device_register(&icera_nemo_device); break; } }
static void pluto_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; } }
static void macallan_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); /* Set USB wake sources for macallan */ tegra_set_usb_wake_source(); if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; } }
static void pluto_modem_init(void) { int modem_id = tegra_get_modem_id(); struct board_info board_info; int usb_port_owner_info = tegra_get_usb_port_owner_info(); tegra_get_board_info(&board_info); pr_info("%s: modem_id = %d\n", __func__, modem_id); switch (modem_id) { case TEGRA_BB_I500: /* on board i500 HSIC */ if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) { platform_device_register(&icera_baseband_device); } break; case TEGRA_BB_I500SWD: /* i500 SWD HSIC */ if (!(usb_port_owner_info & HSIC2_PORT_OWNER_XUSB)) { platform_device_register(&icera_baseband2_device); } break; #ifdef CONFIG_TEGRA_BB_OEM1 case TEGRA_BB_OEM1: /* OEM1 HSIC */ if ((board_info.board_id == BOARD_E1575) || ((board_info.board_id == BOARD_E1580) && (board_info.fab >= BOARD_FAB_A03))) { tegra_pinmux_set_tristate(TEGRA_PINGROUP_GPIO_X1_AUD, TEGRA_TRI_NORMAL); bb_gpio_oem1.oem1.pwron = BB_OEM1_GPIO_ON_V; } if (!(usb_port_owner_info & HSIC2_PORT_OWNER_XUSB)) { tegra_hsic_pdata.ops = &oem1_hsic_pops; tegra_ehci3_device.dev.platform_data = &tegra_hsic_pdata; platform_device_register(&tegra_bb_oem1); } break; #endif case TEGRA_BB_HSIC_HUB: /* i500 SWD HSIC */ if (!(usb_port_owner_info & HSIC2_PORT_OWNER_XUSB)) { tegra_ehci3_device.dev.platform_data = &tegra_ehci3_hsic_smsc_hub_pdata; platform_device_register(&tegra_ehci3_device); } break; default: return; } }
static void tegratab_modem_init(void) { int modem_id = tegra_get_modem_id(); int usb_port_owner_info = tegra_get_usb_port_owner_info(); switch (modem_id) { case TEGRA_BB_NEMO: /* on board i500 HSIC */ if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) { if ((tegra_get_chipid() == TEGRA_CHIPID_TEGRA11) && (tegra_revision == TEGRA_REVISION_A02)) tegra_ehci2_hsic_baseband_pdata \ .unaligned_dma_buf_supported = true; platform_device_register(&icera_nemo_device); } break; } }
static void loki_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); int modem_id = tegra_get_modem_id(); int rc = 0; /* Device cable is detected through PMU Interrupt */ tegra_udc_pdata.support_pmu_vbus = true; tegra_udc_pdata.vbus_extcon_dev_name = "palmas-extcon"; tegra_ehci1_utmi_pdata.support_pmu_vbus = true; tegra_ehci1_utmi_pdata.vbus_extcon_dev_name = "palmas-extcon"; if (board_info.board_id == BOARD_P2530 && board_info.sku == BOARD_SKU_FOSTER && board_info.fab >= 0xC0) { rc = gpio_request(TEGRA_GPIO_PK5, "r8152_rst"); if (rc) pr_warn("RTL8152 gpio request failed:%d\n", rc); rc = gpio_direction_output(TEGRA_GPIO_PK5, 0); if (rc) pr_warn("RTL8152 gpio direction failed:%d\n", rc); rc = gpio_direction_output(TEGRA_GPIO_PK5, 1); if (rc) pr_warn("RTL8152 gpio direction failed:%d\n", rc); } /* Enable Y-Cable support */ tegra_ehci1_utmi_pdata.u_data.host.support_y_cable = true; if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; } if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) { if (!modem_id) { tegra_ehci2_device.dev.platform_data = &tegra_ehci2_utmi_pdata; platform_device_register(&tegra_ehci2_device); } } if (!(usb_port_owner_info & UTMI3_PORT_OWNER_XUSB)) { tegra_ehci3_device.dev.platform_data = &tegra_ehci3_utmi_pdata; platform_device_register(&tegra_ehci3_device); } }
static void pluto_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); struct tegra_xusb_platform_data *xusb_pdata; if ((usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { xusb_pdata = tegra_xusb_init(&xusb_bdata); tegra_otg_pdata.is_xhci = true; tegra_otg_pdata.xhci_device = &tegra_xhci_device; tegra_otg_pdata.xhci_pdata = xusb_pdata; } else { tegra_otg_pdata.is_xhci = false; } tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; }
static void tegratab_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); /* Set USB wake sources for tegratab */ tegra_set_usb_wake_source(); if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA11 && tegra_revision == TEGRA_REVISION_A02) { tegra_ehci1_utmi_pdata \ .unaligned_dma_buf_supported = true; tegra_udc_pdata.unaligned_dma_buf_supported = true; } tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; } }
static int __init dalmore_fixed_regulator_init(void) { struct board_info board_info; u8 power_config; int ret; int usb_port_owner_info; if (!machine_is_dalmore()) return 0; /* * XUSB hardware controls VBUS directly. * XHCI driver will not use regulator_enable()/regulator_disable() to * control VBUS. Furthermore, XUSB hardware requires GPIO_PK6 to be * disabled. Thus, register usb3_vbus fixed regulator only when XUSB * doesn't own UTMI2. */ usb_port_owner_info = tegra_get_usb_port_owner_info(); if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) { ret = platform_device_register(ADD_FIXED_REG(usb3_vbus)); if (ret) return ret; } power_config = get_power_config(); tegra_get_board_info(&board_info); /* Fab05 and power-type2 have the same fixed regs */ if (board_info.fab == BOARD_FAB_A05 || power_config & POWER_CONFIG2) platform_add_devices(fixed_reg_devs_dalmore_config2, ARRAY_SIZE(fixed_reg_devs_dalmore_config2)); if (board_info.board_id == BOARD_E1611 || board_info.board_id == BOARD_P2454) return platform_add_devices(fixed_reg_devs_e1611_a00, ARRAY_SIZE(fixed_reg_devs_e1611_a00)); else return platform_add_devices(fixed_reg_devs_e1612_a00, ARRAY_SIZE(fixed_reg_devs_e1612_a00)); }
static void ardbeg_modem_init(void) { int modem_id = tegra_get_modem_id(); struct board_info board_info; struct board_info pmu_board_info; int usb_port_owner_info = tegra_get_usb_port_owner_info(); tegra_get_board_info(&board_info); tegra_get_pmu_board_info(&pmu_board_info); pr_info("%s: modem_id = %d\n", __func__, modem_id); switch (modem_id) { case TEGRA_BB_BRUCE: if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) { /* Set specific USB wake source for Ardbeg */ if (board_info.board_id == BOARD_E1780) tegra_set_wake_source(42, INT_USB2); if (pmu_board_info.board_id == BOARD_E1736 || pmu_board_info.board_id == BOARD_E1769 || pmu_board_info.board_id == BOARD_E1936) baseband_pdata.regulator_name = NULL; platform_device_register(&icera_bruce_device); } break; case TEGRA_BB_HSIC_HUB: /* HSIC hub */ if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) { tegra_ehci2_device.dev.platform_data = &tegra_ehci2_hsic_smsc_hub_pdata; /* Set specific USB wake source for Ardbeg */ if (board_info.board_id == BOARD_E1780) tegra_set_wake_source(42, INT_USB2); platform_device_register(&tegra_ehci2_device); } else xusb_pdata.pretend_connect_0 = true; break; default: return; } }
static void pluto_xusb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); if (usb_port_owner_info & UTMI1_PORT_OWNER_XUSB) { u32 usb_calib0 = tegra_fuse_readl(FUSE_SKU_USB_CALIB_0); /* * read from usb_calib0 and pass to driver * set HS_CURR_LEVEL = usb_calib0[5:0] * set TERM_RANGE_ADJ = usb_calib0[10:7] * set HS_IREF_CAP = usb_calib0[14:13] * set HS_SQUELCH_LEVEL = usb_calib0[12:11] */ xusb_padctl_data.hs_curr_level = (usb_calib0 >> 0) & 0x3f; xusb_padctl_data.hs_iref_cap = (usb_calib0 >> 13) & 0x3; xusb_padctl_data.hs_term_range_adj = (usb_calib0 >> 7) & 0xf; xusb_padctl_data.hs_squelch_level = (usb_calib0 >> 11) & 0x3; tegra_xhci_device.dev.platform_data = &xusb_padctl_data; platform_device_register(&tegra_xhci_device); }
static void dalmore_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); /* Set USB wake sources for dalmore */ tegra_set_usb_wake_source(); if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { tegra_otg_pdata.is_xhci = false; tegra_udc_pdata.u_data.dev.is_xhci = false; } else { tegra_otg_pdata.is_xhci = true; tegra_udc_pdata.u_data.dev.is_xhci = true; } tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) { tegra_ehci3_device.dev.platform_data = &tegra_ehci3_utmi_pdata; platform_device_register(&tegra_ehci3_device); } }
static void ardbeg_usb_init(void) { int usb_port_owner_info = tegra_get_usb_port_owner_info(); int modem_id = tegra_get_modem_id(); struct board_info bi; tegra_get_pmu_board_info(&bi); if (board_info.sku == 1100 || board_info.board_id == BOARD_P1761 || board_info.board_id == BOARD_E1784) tegra_ehci1_utmi_pdata.u_data.host.turn_off_vbus_on_lp0 = true; if (board_info.board_id == BOARD_PM359 || board_info.board_id == BOARD_PM358 || board_info.board_id == BOARD_PM370 || board_info.board_id == BOARD_PM374 || board_info.board_id == BOARD_PM363) { /* Laguna */ /* Host cable is detected through AMS PMU Interrupt */ tegra_udc_pdata.id_det_type = TEGRA_USB_PMU_ID; tegra_ehci1_utmi_pdata.id_det_type = TEGRA_USB_PMU_ID; tegra_ehci1_utmi_pdata.id_extcon_dev_name = "as3722-extcon"; } else { /* Ardbeg and TN8 */ /* Need these settings for HS USB EMI on T124 */ tegra_udc_pdata.u_cfg.utmi.xcvr_hsslew_lsb = 0x3; tegra_udc_pdata.u_cfg.utmi.xcvr_hsslew_msb = 0xf; tegra_ehci1_utmi_pdata.u_cfg.utmi.xcvr_hsslew_lsb = 0x3; tegra_ehci1_utmi_pdata.u_cfg.utmi.xcvr_hsslew_msb = 0xf; tegra_ehci2_utmi_pdata.u_cfg.utmi.xcvr_hsslew_lsb = 0x3; tegra_ehci2_utmi_pdata.u_cfg.utmi.xcvr_hsslew_msb = 0xf; tegra_ehci3_utmi_pdata.u_cfg.utmi.xcvr_hsslew_lsb = 0x3; tegra_ehci3_utmi_pdata.u_cfg.utmi.xcvr_hsslew_msb = 0xf; /* * TN8 supports vbus changing and it can handle * vbus voltages larger then 5V. Enable this. */ if (board_info.board_id == BOARD_P1761 || board_info.board_id == BOARD_E1784 || board_info.board_id == BOARD_E1780) { /* * Set the maximum voltage that can be supplied * over USB vbus that the board supports if we use * a quick charge 2 wall charger. */ tegra_udc_pdata.qc2_voltage = TEGRA_USB_QC2_12V; tegra_udc_pdata.u_data.dev.qc2_current_limit_ma = 1300; /* charger needs to be set to 3A - h/w will do 2A */ tegra_udc_pdata.u_data.dev.dcp_current_limit_ma = 3000; } switch (bi.board_id) { case BOARD_E1733: /* Host cable is detected through PMU Interrupt */ tegra_udc_pdata.id_det_type = TEGRA_USB_PMU_ID; tegra_ehci1_utmi_pdata.id_det_type = TEGRA_USB_PMU_ID; tegra_ehci1_utmi_pdata.id_extcon_dev_name = "as3722-extcon"; break; case BOARD_E1736: case BOARD_E1769: case BOARD_E1735: case BOARD_E1936: case BOARD_P1761: /* Device cable is detected through PMU Interrupt */ tegra_udc_pdata.support_pmu_vbus = true; tegra_udc_pdata.vbus_extcon_dev_name = "palmas-extcon"; tegra_ehci1_utmi_pdata.support_pmu_vbus = true; tegra_ehci1_utmi_pdata.vbus_extcon_dev_name = "palmas-extcon"; /* Host cable is detected through PMU Interrupt */ tegra_udc_pdata.id_det_type = TEGRA_USB_PMU_ID; tegra_ehci1_utmi_pdata.id_det_type = TEGRA_USB_PMU_ID; tegra_ehci1_utmi_pdata.id_extcon_dev_name = "palmas-extcon"; } /* Enable Y-Cable support */ if (bi.board_id == BOARD_P1761) tegra_ehci1_utmi_pdata.u_data.host.support_y_cable = true; } if (!(usb_port_owner_info & UTMI1_PORT_OWNER_XUSB)) { tegra_otg_pdata.is_xhci = false; tegra_udc_pdata.u_data.dev.is_xhci = false; } else { tegra_otg_pdata.is_xhci = true; tegra_udc_pdata.u_data.dev.is_xhci = true; } tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); /* Setup the udc platform data */ tegra_udc_device.dev.platform_data = &tegra_udc_pdata; if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) { if (!modem_id) { if ((bi.board_id != BOARD_P1761) && (bi.board_id != BOARD_E1922) && (bi.board_id != BOARD_E1784)) { tegra_ehci2_device.dev.platform_data = &tegra_ehci2_utmi_pdata; platform_device_register(&tegra_ehci2_device); } } } if (!(usb_port_owner_info & UTMI2_PORT_OWNER_XUSB)) { if ((bi.board_id != BOARD_P1761) && (bi.board_id != BOARD_E1922) && (bi.board_id != BOARD_E1784)) { tegra_ehci3_device.dev.platform_data = &tegra_ehci3_utmi_pdata; platform_device_register(&tegra_ehci3_device); } } }
static void pluto_modem_init(void) { int modem_id = tegra_get_modem_id(); struct board_info board_info; int usb_port_owner_info = tegra_get_usb_port_owner_info(); tegra_get_board_info(&board_info); pr_info("%s: modem_id = %d\n", __func__, modem_id); switch (modem_id) { case TEGRA_BB_I500: /* on board i500 HSIC */ if (!(usb_port_owner_info & HSIC1_PORT_OWNER_XUSB)) { platform_device_register(&icera_baseband_device); } break; case TEGRA_BB_I500SWD: /* i500 SWD HSIC */ if (!(usb_port_owner_info & HSIC2_PORT_OWNER_XUSB)) { platform_device_register(&icera_baseband2_device); } break; case TEGRA_BB_OEM1: /* OEM1 HSIC */ if ((board_info.board_id == BOARD_E1575) || ((board_info.board_id == BOARD_E1580) && (board_info.fab >= BOARD_FAB_A03))) { tegra_pinmux_set_tristate(TEGRA_PINGROUP_GPIO_X1_AUD, TEGRA_TRI_NORMAL); bb_gpio_oem1.oem1.pwron = BB_OEM1_GPIO_ON_V; } if (!(usb_port_owner_info & HSIC2_PORT_OWNER_XUSB)) { tegra_hsic_pdata.ops = &oem1_hsic_pops; tegra_ehci3_device.dev.platform_data = &tegra_hsic_pdata; platform_device_register(&tegra_bb_oem1); } break; case TEGRA_BB_OEM2: /* XMM6260/XMM6360 HSIC */ /* fix wrong wiring in Pluto A02 */ if ((board_info.board_id == BOARD_E1580) && (board_info.fab == BOARD_FAB_A02)) { pr_info( "%s: Pluto A02: replace MDM2_PWR_ON with MDM2_PWR_ON_FOR_PLUTO_A02\n", __func__); if (tegra_baseband_xmm_power_data.modem.xmm.bb_on != MDM2_PWR_ON) pr_err( "%s: expected MDM2_PWR_ON default gpio for XMM bb_on\n", __func__); tegra_baseband_xmm_power_data.modem.xmm.bb_on = MDM2_PWR_ON_FOR_PLUTO_A02; } /* baseband-power.ko will register ehci3 device */ tegra_hsic_pdata.ops = &oem2_plat_ops; tegra_hsic_pdata.u_data.host.remote_wakeup_supported = false; tegra_hsic_pdata.u_data.host.power_off_on_suspend = false; tegra_ehci3_device.dev.platform_data = &tegra_hsic_pdata; tegra_baseband_xmm_power_data.hsic_register = &tegra_usb_hsic_host_register; tegra_baseband_xmm_power_data.hsic_unregister = &tegra_usb_hsic_host_unregister; tegra_baseband_xmm_power_data.ehci_device = &tegra_ehci3_device; platform_device_register(&tegra_baseband_xmm_power_device); platform_device_register(&tegra_baseband_xmm_power2_device); /* override audio settings - use 8kHz */ pluto_audio_pdata.i2s_param[BASEBAND].audio_port_id = 2; pluto_audio_pdata.i2s_param[BASEBAND].is_i2s_master = 1; pluto_audio_pdata.i2s_param[BASEBAND].i2s_mode = TEGRA_DAIFMT_I2S; pluto_audio_pdata.i2s_param[BASEBAND].sample_size = 16; pluto_audio_pdata.i2s_param[BASEBAND].rate = 8000; pluto_audio_pdata.i2s_param[BASEBAND].channels = 2; break; case TEGRA_BB_HSIC_HUB: /* HSIC hub */ if (!(usb_port_owner_info & HSIC2_PORT_OWNER_XUSB)) { tegra_ehci3_device.dev.platform_data = &tegra_ehci3_hsic_smsc_hub_pdata; platform_device_register(&tegra_ehci3_device); } break; default: return; } }