コード例 #1
0
static int __init kai_touch_init(void)
{
	int touch_id;

	tegra_gpio_enable(KAI_TS_ID1);
	tegra_gpio_enable(KAI_TS_ID2);

	gpio_request(KAI_TS_ID1, "touch-id1");
	gpio_direction_input(KAI_TS_ID1);

	gpio_request(KAI_TS_ID2, "touch-id2");
	gpio_direction_input(KAI_TS_ID2);

	touch_id = gpio_get_value(KAI_TS_ID1) << 1;
	touch_id |= gpio_get_value(KAI_TS_ID2);

	pr_info("touch-id %d\n", touch_id);

	/* Disable TS_ID GPIO to save power */
	gpio_direction_output(KAI_TS_ID1, 0);
	tegra_pinmux_set_pullupdown(KAI_TS_ID1_PG, TEGRA_PUPD_NORMAL);
	tegra_pinmux_set_tristate(KAI_TS_ID1_PG, TEGRA_TRI_TRISTATE);
	gpio_direction_output(KAI_TS_ID2, 0);
	tegra_pinmux_set_pullupdown(KAI_TS_ID2_PG, TEGRA_PUPD_NORMAL);
	tegra_pinmux_set_tristate(KAI_TS_ID2_PG, TEGRA_TRI_TRISTATE);

	switch (touch_id) {
	case 0:
		pr_info("Raydium PCB based touch init\n");
		tegra_clk_init_from_table(spi_clk_init_table);
		touch_init_raydium();
		break;
	case 1:
		pr_info("Raydium On-Board touch init\n");
		tegra_clk_init_from_table(spi_clk_init_table);
		tegra_clk_init_from_table(touch_clk_init_table);
		clk_enable(tegra_get_clock_by_name("clk_out_3"));

		touch_init_raydium();
		break;
	case 3:
		pr_info("Synaptics PCB based touch init\n");
		touch_init_synaptics_kai();
		break;
	default:
		pr_err("touch_id error, no touch %d\n", touch_id);
	}
	return 0;
}
コード例 #2
0
ファイル: board-kai.c プロジェクト: Shaky156/Tegra-Note-7
static int __init kai_touch_init(void)
{
	int touch_id;

	touch_id = gpio_request(KAI_TS_ID1, "touch-id1");
	if (touch_id < 0) {
		pr_err("%s: gpio_request failed %d\n",
			__func__, touch_id);
		return touch_id;
	}
	touch_id = gpio_direction_input(KAI_TS_ID1);
	if (touch_id < 0) {
		pr_err("%s: gpio_direction_input failed %d\n",
			__func__, touch_id);
		gpio_free(KAI_TS_ID1);
	}

	touch_id = gpio_request(KAI_TS_ID2, "touch-id2");
	if (touch_id < 0) {
		pr_err("%s: gpio_request failed %d\n",
			__func__, touch_id);
		return touch_id;
	}
	touch_id = gpio_direction_input(KAI_TS_ID2);
	if (touch_id < 0) {
		pr_err("%s: gpio_direction_input failed %d\n",
			__func__, touch_id);
		gpio_free(KAI_TS_ID2);
	}

	touch_id = gpio_get_value(KAI_TS_ID1) << 1;
	touch_id |= gpio_get_value(KAI_TS_ID2);

	pr_info("touch-id %d\n", touch_id);

	/* Disable TS_ID GPIO to save power */
	gpio_direction_output(KAI_TS_ID1, 0);
	tegra_pinmux_set_pullupdown(KAI_TS_ID1_PG, TEGRA_PUPD_NORMAL);
	tegra_pinmux_set_tristate(KAI_TS_ID1_PG, TEGRA_TRI_TRISTATE);
	gpio_direction_output(KAI_TS_ID2, 0);
	tegra_pinmux_set_pullupdown(KAI_TS_ID2_PG, TEGRA_PUPD_NORMAL);
	tegra_pinmux_set_tristate(KAI_TS_ID2_PG, TEGRA_TRI_TRISTATE);

	switch (touch_id) {
	case 0:
		pr_info("Raydium PCB based touch init\n");
		tegra_clk_init_from_table(spi_clk_init_table);
		rm31080a_kai_spi_board[0].platform_data =
			&rm31080ts_kai_007_data;
		rm31080a_kai_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_kai_007_data,
					&rm31080a_kai_spi_board[0],
					ARRAY_SIZE(rm31080a_kai_spi_board));
		break;
	case 1:
		pr_info("Raydium On-Board touch init\n");
		tegra_clk_init_from_table(spi_clk_init_table);
		tegra_clk_init_from_table(touch_clk_init_table);
		rm31080a_kai_spi_board[0].platform_data =
			&rm31080ts_kai_107_data;
		rm31080a_kai_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_kai_107_data,
					&rm31080a_kai_spi_board[0],
					ARRAY_SIZE(rm31080a_kai_spi_board));
		break;
	case 3:
		pr_info("Synaptics PCB based touch init\n");
		touch_init_synaptics_kai();
		break;
	default:
		pr_err("touch_id error, no touch %d\n", touch_id);
	}
	return 0;
}