static int vi_bypass_probe(struct platform_device *pdev)
{
	struct vi_bypass_camera *vi_bypass_cam;
	int err;

	vi_bypass_cam = devm_kzalloc(&pdev->dev,
				     sizeof(struct vi_bypass_camera),
				     GFP_KERNEL);
	if (!vi_bypass_cam) {
		dev_err(&pdev->dev, "couldn't allocate cam\n");
		return -ENOMEM;
	}

	/* Init VI_BYPASS ops */
	pdev->id = 0;
	platform_set_drvdata(pdev, vi_bypass_cam);
	strlcpy(vi_bypass_cam->cam.card, VI_BYPASS_CAM_CARD_NAME,
		sizeof(vi_bypass_cam->cam.card));
	vi_bypass_cam->cam.version = VI_BYPASS_CAM_VERSION;
	vi_bypass_cam->cam.ops = &vi_bypass_ops;

	err = tegra_camera_init(pdev, &vi_bypass_cam->cam);
	if (err)
		return err;

	return 0;
}
static void __init tegra_cardhu_init(void)
{
	tegra_thermal_init(&thermal_data,
				throttle_list,
				ARRAY_SIZE(throttle_list));
	tegra_clk_init_from_table(cardhu_clk_init_table);
	cardhu_pinmux_init();
	cardhu_i2c_init();
	cardhu_spi_init();
	cardhu_usb_init();
#ifdef CONFIG_TEGRA_EDP_LIMITS
	cardhu_edp_init();
#endif
	cardhu_uart_init();
	tegra_camera_init();
	platform_add_devices(cardhu_devices, ARRAY_SIZE(cardhu_devices));
	tegra_ram_console_debug_init();
	tegra_io_dpd_init();
	cardhu_sdhci_init();
	cardhu_regulator_init();
	cardhu_dtv_init();
	cardhu_suspend_init();
	cardhu_touch_init();
	cardhu_modem_init();
	cardhu_kbc_init();
	cardhu_scroll_init();
	cardhu_keys_init();
	cardhu_panel_init();
	cardhu_pmon_init();
	cardhu_sensors_init();
	cardhu_setup_bluesleep();
	cardhu_sata_init();
	//audio_wired_jack_init();
	cardhu_pins_state_init();
	cardhu_emc_init();
	tegra_release_bootloader_fb();
	cardhu_pci_init();
#ifdef CONFIG_TEGRA_WDT_RECOVERY
	tegra_wdt_recovery_init();
#endif
	tegra_serial_debug_init(TEGRA_UARTD_BASE, INT_WDT_CPU, NULL, -1, -1);
}