static int __init smb347_init(void) { project_id = grouper_get_project_id(); pcba_ver = grouper_query_pcba_revision(); u32 project_info = grouper_get_project_id(); if (project_info == GROUPER_PROJECT_NAKASI_3G) gpio_dock_in = TEGRA_GPIO_PO5; else gpio_dock_in = TEGRA_GPIO_PU4; SMB_NOTICE("project_id=%x, pcba_ver=%d, dock_in_gpio=%d\n", project_id, pcba_ver, gpio_dock_in); return i2c_add_driver(&smb347_i2c_driver); }
int __init grouper_sensors_init(void) { int err; grouper_camera_init(); #ifdef CONFIG_VIDEO_OV2710 i2c_register_board_info(2, grouper_i2c2_board_info, ARRAY_SIZE(grouper_i2c2_board_info)); #endif /* Front Camera mi1040 + */ pr_info("mi1040 i2c_register_board_info"); i2c_register_board_info(2, front_sensor_i2c2_board_info, ARRAY_SIZE(front_sensor_i2c2_board_info)); err = grouper_nct1008_init(); if (err) printk("[Error] Thermal: Configure GPIO_PCC2 as an irq fail!"); i2c_register_board_info(4, grouper_i2c4_nct1008_board_info, ARRAY_SIZE(grouper_i2c4_nct1008_board_info)); mpuirq_init(); i2c_register_board_info(2, cardhu_i2c1_board_info_al3010, ARRAY_SIZE(cardhu_i2c1_board_info_al3010)); if (GROUPER_PROJECT_BACH == grouper_get_project_id()) { i2c_register_board_info(2, cap1106_i2c1_board_info, ARRAY_SIZE(cap1106_i2c1_board_info)); } return 0; }
static int grouper_panel_disable(void) { // gpio_set_value(grouper_lvds_lr, 0); // mdelay(200); // gpio_set_value(grouper_lvds_shutdown, 0); // gpio_set_value(grouper_lvds_rst, 0); //gpio_set_value(grouper_lvds_stdby, 0); // gpio_set_value(grouper_lvds_avdd_en, 0); mdelay(5); if (grouper_lvds_reg) { regulator_disable(grouper_lvds_reg); regulator_put(grouper_lvds_reg); grouper_lvds_reg = NULL; } if( grouper_get_project_id() == GROUPER_PROJECT_BACH) { gpio_direction_output(TEGRA_GPIO_PV6, 0); } if (grouper_lvds_vdd_panel) { regulator_disable(grouper_lvds_vdd_panel); regulator_put(grouper_lvds_vdd_panel); grouper_lvds_vdd_panel = NULL; } return 0; }
static void grouper_nfc_init(void) { u32 project_info = grouper_get_project_id(); if (project_info == GROUPER_PROJECT_NAKASI) { tegra_gpio_enable(TEGRA_GPIO_PX0); tegra_gpio_enable(TEGRA_GPIO_PS7); tegra_gpio_enable(TEGRA_GPIO_PR3); } else if (project_info == GROUPER_PROJECT_NAKASI_3G) { tegra_gpio_enable(TEGRA_GPIO_PS7); tegra_gpio_enable(TEGRA_GPIO_PP0); tegra_gpio_enable(TEGRA_GPIO_PP3); } }
static void __init grouper_pinmux_audio_init(void) { u32 project_info = grouper_get_project_id(); if (project_info != GROUPER_PROJECT_NAKASI_3G) { // TEGRA_GPIO_PW3 is needed by SIM detection. tegra_gpio_enable(TEGRA_GPIO_CDC_IRQ); gpio_request(TEGRA_GPIO_CDC_IRQ, "rt5640"); gpio_direction_input(TEGRA_GPIO_CDC_IRQ); } tegra_gpio_enable(TEGRA_GPIO_HP_DET); tegra_gpio_enable(TEGRA_GPIO_INT_MIC_EN); tegra_gpio_enable(TEGRA_GPIO_EXT_MIC_EN); }
static int grouper_panel_enable(void) { if (grouper_lvds_vdd_panel == NULL) { grouper_lvds_vdd_panel = regulator_get(NULL, "vdd_lcd_panel"); if (WARN_ON(IS_ERR(grouper_lvds_vdd_panel))) pr_err("%s: couldn't get regulator vdd_lcd_panel: %ld\n", __func__, PTR_ERR(grouper_lvds_vdd_panel)); else regulator_enable(grouper_lvds_vdd_panel); } if( grouper_get_project_id() == GROUPER_PROJECT_BACH ) { gpio_direction_output(TEGRA_GPIO_PV6, 1); } return 0; }
static void grouper_modem_init(void) { u32 project_info = grouper_get_project_id(); printk(KERN_INFO"%s\n",__func__); if (project_info == GROUPER_PROJECT_NAKASI_3G) { tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.bb_rst); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.bb_on); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.bb_vbat); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.ipc_bb_rst_ind); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.bb_vbus); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.bb_sw_sel); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.sim_card_det); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.ipc_bb_wake); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.ipc_ap_wake); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.ipc_hsic_active); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.ipc_hsic_sus_req); tegra_gpio_enable( tegra_baseband_power_data.modem.xmm.ipc_bb_force_crash); tegra_baseband_power_data.hsic_register = &tegra_usb_hsic_host_register; tegra_baseband_power_data.hsic_unregister = &tegra_usb_hsic_host_unregister; tegra_baseband_power_data.utmip_register = &tegra_usb_utmip_host_register; tegra_baseband_power_data.utmip_unregister = &tegra_usb_utmip_host_unregister; platform_device_register(&tegra_baseband_power_device); } }
static void __init grouper_gpio_init_configure(void) { int len; int i; struct gpio_init_pin_info *pins_info; u32 project_info = grouper_get_project_id(); if (project_info == GROUPER_PROJECT_NAKASI_3G) { len = ARRAY_SIZE(init_gpio_mode_grouper3g); pins_info = init_gpio_mode_grouper3g; } else { len = ARRAY_SIZE(init_gpio_mode_grouper_common); pins_info = init_gpio_mode_grouper_common; } for (i = 0; i < len; ++i) { tegra_gpio_init_configure(pins_info->gpio_nr, pins_info->is_input, pins_info->value); pins_info++; } }
static void grouper_i2c_init(void) { struct board_info board_info; u32 project_info = grouper_get_project_id(); tegra_get_board_info(&board_info); tegra_i2c_device1.dev.platform_data = &grouper_i2c1_platform_data; tegra_i2c_device2.dev.platform_data = &grouper_i2c2_platform_data; tegra_i2c_device3.dev.platform_data = &grouper_i2c3_platform_data; tegra_i2c_device4.dev.platform_data = &grouper_i2c4_platform_data; tegra_i2c_device5.dev.platform_data = &grouper_i2c5_platform_data; platform_device_register(&tegra_i2c_device5); platform_device_register(&tegra_i2c_device4); platform_device_register(&tegra_i2c_device3); platform_device_register(&tegra_i2c_device2); platform_device_register(&tegra_i2c_device1); i2c_register_board_info(4, grouper_i2c4_smb347_board_info, ARRAY_SIZE(grouper_i2c4_smb347_board_info)); i2c_register_board_info(4, &rt5640_board_info, 1); i2c_register_board_info(4, cardhu_i2c4_bq27541_board_info, ARRAY_SIZE(cardhu_i2c4_bq27541_board_info)); i2c_register_board_info(4, grouper_i2c4_max17048_board_info, ARRAY_SIZE(grouper_i2c4_max17048_board_info)); if (project_info == GROUPER_PROJECT_NAKASI_3G) { nfc_pdata.irq_gpio = TEGRA_GPIO_PS7; nfc_pdata.ven_gpio = TEGRA_GPIO_PP0; nfc_pdata.firm_gpio = TEGRA_GPIO_PP3; grouper_nfc_board_info[0].addr = (0x2A); grouper_nfc_board_info[0].irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PS7); } i2c_register_board_info(2, grouper_nfc_board_info, 1); }
static void grouper_usb_init(void) { u32 project_info = grouper_get_project_id(); unsigned int pcb_id_version = grouper_query_pcba_revision(); tegra_usb_phy_init(tegra_usb_phy_pdata, ARRAY_SIZE(tegra_usb_phy_pdata)); tegra_otg_device.dev.platform_data = &tegra_otg_pdata; platform_device_register(&tegra_otg_device); if (project_info == GROUPER_PROJECT_NAKASI_3G) { printk(KERN_INFO"%s : pcb_id_version = %d \n", __func__, pcb_id_version); /* for baseband devices do not switch off phy during suspend */ tegra_ehci_uhsic_pdata.power_down_on_bus_suspend = 0; tegra_ehci_pdata[1].power_down_on_bus_suspend = 0; uhsic_phy_config.postsuspend = grouper_usb_hsic_postsupend; uhsic_phy_config.preresume = grouper_usb_hsic_preresume; uhsic_phy_config.usb_phy_ready = grouper_usb_hsic_phy_ready; uhsic_phy_config.post_phy_off = grouper_usb_hsic_phy_off; tegra_ehci2_device.dev.platform_data = &tegra_ehci_uhsic_pdata; /* baseband registration happens in baseband-xmm-power */ switch (pcb_id_version) { case TILAPIA_PCBA_SR1: case TILAPIA_PCBA_SR2: case TILAPIA_PCBA_SR3: uhsic_phy_config.enable_gpio = TEGRA_GPIO_PR7; break; default: uhsic_phy_config.enable_gpio = TEGRA_GPIO_PU4; } } else { tegra_ehci2_device.dev.platform_data = &tegra_ehci_pdata[1]; platform_device_register(&tegra_ehci2_device); } }
int __init grouper_pinmux_init(void) { struct board_info board_info; u32 project_info = grouper_get_project_id(); tegra_get_board_info(&board_info); BUG_ON(board_info.board_id != BOARD_E1565); grouper_gpio_init_configure(); tegra_pinmux_config_table(grouper_pinmux_common, ARRAY_SIZE(grouper_pinmux_common)); tegra_drive_pinmux_config_table(grouper_drive_pinmux, ARRAY_SIZE(grouper_drive_pinmux)); if (project_info == GROUPER_PROJECT_NAKASI_3G) { tegra_pinmux_config_table(pinmux_grouper3g, ARRAY_SIZE(pinmux_grouper3g)); } tegra_pinmux_config_table(unused_pins_lowpower, ARRAY_SIZE(unused_pins_lowpower)); grouper_pinmux_audio_init(); return 0; }
int __init grouper_panel_init(void) { int err; struct resource __maybe_unused *res; struct board_info board_info; tegra_get_board_info(&board_info); #if defined(CONFIG_TEGRA_NVMAP) grouper_carveouts[1].base = tegra_carveout_start; grouper_carveouts[1].size = tegra_carveout_size; #endif /* gpio_request(grouper_lvds_avdd_en, "lvds_avdd_en"); gpio_direction_output(grouper_lvds_avdd_en, 1); tegra_gpio_enable(grouper_lvds_avdd_en); //gpio_request(grouper_lvds_stdby, "lvds_stdby"); //gpio_direction_output(grouper_lvds_stdby, 1); //tegra_gpio_enable(grouper_lvds_stdby); gpio_request(grouper_lvds_rst, "lvds_rst"); gpio_direction_output(grouper_lvds_rst, 1); tegra_gpio_enable(grouper_lvds_rst); if (board_info.fab == BOARD_FAB_A00) { gpio_request(grouper_lvds_rs_a00, "lvds_rs"); gpio_direction_output(grouper_lvds_rs_a00, 0); tegra_gpio_enable(grouper_lvds_rs_a00); } else { gpio_request(grouper_lvds_rs, "lvds_rs"); gpio_direction_output(grouper_lvds_rs, 0); tegra_gpio_enable(grouper_lvds_rs); } gpio_request(grouper_lvds_lr, "lvds_lr"); gpio_direction_output(grouper_lvds_lr, 1); tegra_gpio_enable(grouper_lvds_lr); */ /* gpio_request(grouper_lvds_shutdown, "lvds_shutdown"); gpio_direction_output(grouper_lvds_shutdown, 1); tegra_gpio_enable(grouper_lvds_shutdown); */ if( grouper_get_project_id() == GROUPER_PROJECT_BACH) { grouper_disp1_out.parent_clk = "pll_d_out0"; grouper_disp1_out.modes->pclk = 81750000; grouper_disp1_out.modes->h_sync_width= 64; grouper_disp1_out.modes->h_back_porch= 128; grouper_disp1_out.modes->h_front_porch = 64; printk("Bach: Set LCD pclk as %d Hz\n", grouper_disp1_out.modes->pclk); gpio_request(TEGRA_GPIO_PV6, "gpio_v6"); tegra_gpio_enable(TEGRA_GPIO_PV6); } tegra_gpio_enable(grouper_hdmi_hpd); gpio_request(grouper_hdmi_hpd, "hdmi_hpd"); gpio_direction_input(grouper_hdmi_hpd); #ifdef CONFIG_HAS_EARLYSUSPEND grouper_panel_early_suspender.suspend = grouper_panel_early_suspend; grouper_panel_early_suspender.resume = grouper_panel_late_resume; grouper_panel_early_suspender.level = EARLY_SUSPEND_LEVEL_DISABLE_FB; register_early_suspend(&grouper_panel_early_suspender); #endif #ifdef CONFIG_TEGRA_GRHOST err = nvhost_device_register(&tegra_grhost_device); if (err) return err; #endif err = platform_add_devices(grouper_gfx_devices, ARRAY_SIZE(grouper_gfx_devices)); #if defined(CONFIG_TEGRA_GRHOST) && defined(CONFIG_TEGRA_DC) res = nvhost_get_resource_byname(&grouper_disp1_device, IORESOURCE_MEM, "fbmem"); res->start = tegra_fb_start; res->end = tegra_fb_start + tegra_fb_size - 1; #endif /* Copy the bootloader fb to the fb. */ // tegra_move_framebuffer(tegra_fb_start, tegra_bootloader_fb_start, // min(tegra_fb_size, tegra_bootloader_fb_size)); #if defined(CONFIG_TEGRA_GRHOST) && defined(CONFIG_TEGRA_DC) if (!err) err = nvhost_device_register(&grouper_disp1_device); res = nvhost_get_resource_byname(&grouper_disp2_device, IORESOURCE_MEM, "fbmem"); res->start = tegra_fb2_start; res->end = tegra_fb2_start + tegra_fb2_size - 1; if (!err) err = nvhost_device_register(&grouper_disp2_device); #endif #if defined(CONFIG_TEGRA_GRHOST) && defined(CONFIG_TEGRA_NVAVP) if (!err) err = nvhost_device_register(&nvavp_device); #endif return err; }