Пример #1
0
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;
}
Пример #3
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);
}
Пример #6
0
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;
}
Пример #12
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;
}