Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a32daf1 authored by Manuel Lauss's avatar Manuel Lauss Committed by Ralf Baechle
Browse files

MIPS: Alchemy: Touchscreen support on DB1100



Wire up the ADS7846 touchscreen controller on the DB1100.

Signed-off-by: default avatarManuel Lauss <manuel.lauss@googlemail.com>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2879/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent e734ae13
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
@@ -28,6 +28,9 @@
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/spi/spi.h>
#include <linux/spi/spi_gpio.h>
#include <linux/spi/ads7846.h>
#include <asm/mach-au1x00/au1000.h>
#include <asm/mach-au1x00/au1000_dma.h>
#include <asm/mach-au1x00/au1100_mmc.h>
@@ -424,6 +427,43 @@ static struct platform_device db1000_irda_dev = {
	.num_resources	= ARRAY_SIZE(au1000_irda_res),
};

/******************************************************************************/

static struct ads7846_platform_data db1100_touch_pd = {
	.model		= 7846,
	.vref_mv	= 3300,
	.gpio_pendown	= 21,
};

static struct spi_gpio_platform_data db1100_spictl_pd = {
	.sck		= 209,
	.mosi		= 208,
	.miso		= 207,
	.num_chipselect = 1,
};

static struct spi_board_info db1100_spi_info[] __initdata = {
	[0] = {
		.modalias	 = "ads7846",
		.max_speed_hz	 = 3250000,
		.bus_num	 = 0,
		.chip_select	 = 0,
		.mode		 = 0,
		.irq		 = AU1100_GPIO21_INT,
		.platform_data	 = &db1100_touch_pd,
		.controller_data = (void *)210,	/* for spi_gpio: CS# GPIO210 */
	},
};

static struct platform_device db1100_spi_dev = {
	.name		= "spi_gpio",
	.id		= 0,
	.dev		= {
		.platform_data	= &db1100_spictl_pd,
	},
};


static struct platform_device *db1x00_devs[] = {
	&db1x00_codec_dev,
	&alchemy_ac97c_dma_dev,
@@ -440,12 +480,14 @@ static struct platform_device *db1100_devs[] = {
	&db1100_mmc0_dev,
	&db1100_mmc1_dev,
	&db1000_irda_dev,
	&db1100_spi_dev,
};

static int __init db1000_dev_init(void)
{
	int board = BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI));
	int c0, c1, d0, d1, s0, s1;
	unsigned long pfc;

	if (board == BCSR_WHOAMI_DB1500) {
		c0 = AU1500_GPIO2_INT;
@@ -464,6 +506,20 @@ static int __init db1000_dev_init(void)

		gpio_direction_input(19);	/* sd0 cd# */
		gpio_direction_input(20);	/* sd1 cd# */
		gpio_direction_input(21);	/* touch pendown# */
		gpio_direction_input(207);	/* SPI MISO */
		gpio_direction_output(208, 0);	/* SPI MOSI */
		gpio_direction_output(209, 1);	/* SPI SCK */
		gpio_direction_output(210, 1);	/* SPI CS# */

		/* spi_gpio on SSI0 pins */
		pfc = __raw_readl((void __iomem *)SYS_PINFUNC);
		pfc |= (1 << 0);	/* SSI0 pins as GPIOs */
		__raw_writel(pfc, (void __iomem *)SYS_PINFUNC);
		wmb();

		spi_register_board_info(db1100_spi_info,
					ARRAY_SIZE(db1100_spi_info));

		platform_add_devices(db1100_devs, ARRAY_SIZE(db1100_devs));
	} else if (board == BCSR_WHOAMI_DB1000) {