static int __init loki_touch_init(void)
{
	struct board_info bi;
	tegra_get_board_info(&bi);
	if (bi.board_id == BOARD_P2530 && bi.sku == BOARD_SKU_FOSTER)
		return 0;

	if (tegra_get_touch_panel_id() == TOUCHPANEL_THOR_WINTEK)
		rm31080a_loki_spi_board[0].platform_data =
					&rm31080ts_loki_data_t_1_95;
	else if (tegra_get_touch_panel_id() == TOUCHPANEL_LOKI_JDI5)
		rm31080a_loki_spi_board[0].platform_data =
					&rm31080ts_loki_data_jdi_5;
	/*
	** remove touch clock initialization for ffd fab a3, higher
	** Move clock from tegra clock to external xtal
	*/
	if (bi.board_id == BOARD_P2530 && bi.fab >= 0xa3) {
		rm31080ts_loki_data.name_of_clock = NULL;
		rm31080ts_loki_data.name_of_clock_con = NULL;
	} else
		tegra_clk_init_from_table(touch_clk_init_table);
	rm31080a_loki_spi_board[0].irq =
		gpio_to_irq(TOUCH_GPIO_IRQ_RAYDIUM_SPI);
	touch_init_raydium(TOUCH_GPIO_IRQ_RAYDIUM_SPI,
				TOUCH_GPIO_RST_RAYDIUM_SPI,
				&rm31080ts_loki_data,
				&rm31080a_loki_spi_board[0],
				ARRAY_SIZE(rm31080a_loki_spi_board));
	return 0;
}
static int __init ardbeg_touch_init(void)
{
	tegra_get_board_info(&board_info);

	if (tegra_get_touch_vendor_id() == MAXIM_TOUCH) {
		pr_info("%s init maxim touch\n", __func__);
#if defined(CONFIG_TOUCHSCREEN_MAXIM_STI) || \
	defined(CONFIG_TOUCHSCREEN_MAXIM_STI_MODULE)
		if (tegra_get_touch_panel_id() == TOUCHPANEL_TN7)
			maxim_sti_spi_board.platform_data = &maxim_sti_pdata_rd;
		(void)touch_init_maxim_sti(&maxim_sti_spi_board);
#endif
	} else if (tegra_get_touch_vendor_id() == RAYDIUM_TOUCH) {
		pr_info("%s init raydium touch\n", __func__);
		tegra_clk_init_from_table(touch_clk_init_table);
		if (board_info.board_id == BOARD_PM374) {
			rm31080a_norrin_spi_board[0].irq =
				gpio_to_irq(TOUCH_GPIO_IRQ_RAYDIUM_SPI);
			touch_init_raydium(TOUCH_GPIO_IRQ_RAYDIUM_SPI,
					TOUCH_GPIO_RST_RAYDIUM_SPI,
					&rm31080ts_norrin_data,
					&rm31080a_norrin_spi_board[0],
					ARRAY_SIZE(rm31080a_norrin_spi_board));
		} else if (board_info.board_id == BOARD_P1761) {
			rm31080a_ardbeg_spi_board[0].irq =
				gpio_to_irq(TOUCH_GPIO_IRQ_RAYDIUM_SPI);
			touch_init_raydium(TOUCH_GPIO_IRQ_RAYDIUM_SPI,
					TOUCH_GPIO_RST_RAYDIUM_SPI,
					&rm31080ts_tn8_data,
					&rm31080a_tn8_spi_board[0],
					ARRAY_SIZE(rm31080a_tn8_spi_board));
		} else {
			rm31080a_ardbeg_spi_board[0].irq =
				gpio_to_irq(TOUCH_GPIO_IRQ_RAYDIUM_SPI);
			touch_init_raydium(TOUCH_GPIO_IRQ_RAYDIUM_SPI,
					TOUCH_GPIO_RST_RAYDIUM_SPI,
					&rm31080ts_ardbeg_data,
					&rm31080a_ardbeg_spi_board[0],
					ARRAY_SIZE(rm31080a_ardbeg_spi_board));
		}
	}
	return 0;
}
static int __init roth_touch_init(void)
{
	struct board_info board_info;

	tegra_get_board_info(&board_info);
	if (board_info.board_id == BOARD_P2560) {
		int touch_id = tegra_get_touch_panel_id();
		if (touch_id == PANEL_TPK || touch_id == PANEL_WINTEK) {
			int err;
			err = gpio_request(TOUCH_GPIO_CLK, "touch-gpio-clk");
			if (err < 0)
				pr_err("%s: gpio_request failed %d\n",
					__func__, err);
			else {
				err = gpio_direction_output(TOUCH_GPIO_CLK, 0);
				if (err < 0)
					pr_err("%s: set output failed %d\n",
					__func__, err);
				gpio_free(TOUCH_GPIO_CLK);
			}
			tegra_pinmux_set_pullupdown(TOUCH_GPIO_CLK_PG,
							TEGRA_PUPD_NORMAL);
			tegra_pinmux_set_tristate(TOUCH_GPIO_CLK_PG,
							TEGRA_TRI_TRISTATE);
			rm31080ts_roth_data.name_of_clock = NULL;
			rm31080ts_roth_data.name_of_clock_con = NULL;
		} else
			tegra_clk_init_from_table(touch_clk_init_table);
	} else
		tegra_clk_init_from_table(touch_clk_init_table);
	rm31080a_roth_spi_board[0].irq =
		gpio_to_irq(TOUCH_GPIO_IRQ_RAYDIUM_SPI);
	touch_init_raydium(TOUCH_GPIO_IRQ_RAYDIUM_SPI,
				TOUCH_GPIO_RST_RAYDIUM_SPI,
				&rm31080ts_roth_data,
				&rm31080a_roth_spi_board[0],
				ARRAY_SIZE(rm31080a_roth_spi_board));
	return 0;
}