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; }
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; }