mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
[ARM] 3534/1: add spi support to lubbock platform
Patch from David Brownell This adds the platform device for SSP/SPI controller, and declares the ads7846 device hooked up to it. Not all Lubbock boards appear to populate the connector needed to use this instead of the ucb1400 chip, but it can always be used as a temperature sensor. In short, this is probably most useful as an example of how to provide the configuration data used by the pxa2xx_spi driver. (Last tested against a slightly earlier version of that driver.) Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
ebc67da65f
commit
9df5db80a7
1 changed files with 84 additions and 0 deletions
|
@ -22,6 +22,10 @@
|
|||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
#include <asm/arch/pxa2xx_spi.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -196,6 +200,78 @@ static struct resource smc91x_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
/* ADS7846 is connected through SSP ... and if your board has J5 populated,
|
||||
* you can select it to replace the ucb1400 by switching the touchscreen cable
|
||||
* (to J5) and poking board registers (as done below). Else it's only useful
|
||||
* for the temperature sensors.
|
||||
*/
|
||||
static struct resource pxa_ssp_resources[] = {
|
||||
[0] = {
|
||||
.start = __PREG(SSCR0_P(1)),
|
||||
.end = __PREG(SSCR0_P(1)) + 0x14,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_SSP,
|
||||
.end = IRQ_SSP,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxa2xx_spi_master pxa_ssp_master_info = {
|
||||
.ssp_type = PXA25x_SSP,
|
||||
.clock_enable = CKEN3_SSP,
|
||||
.num_chipselect = 0,
|
||||
};
|
||||
|
||||
static struct platform_device pxa_ssp = {
|
||||
.name = "pxa2xx-spi",
|
||||
.id = 1,
|
||||
.resource = pxa_ssp_resources,
|
||||
.num_resources = ARRAY_SIZE(pxa_ssp_resources),
|
||||
.dev = {
|
||||
.platform_data = &pxa_ssp_master_info,
|
||||
},
|
||||
};
|
||||
|
||||
static int lubbock_ads7846_pendown_state(void)
|
||||
{
|
||||
/* TS_BUSY is bit 8 in LUB_MISC_RD, but pendown is irq-only */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct ads7846_platform_data ads_info = {
|
||||
.model = 7846,
|
||||
.vref_delay_usecs = 100, /* internal, no cap */
|
||||
.get_pendown_state = lubbock_ads7846_pendown_state,
|
||||
// .x_plate_ohms = 500, /* GUESS! */
|
||||
// .y_plate_ohms = 500, /* GUESS! */
|
||||
};
|
||||
|
||||
static void ads7846_cs(u32 command)
|
||||
{
|
||||
static const unsigned TS_nCS = 1 << 11;
|
||||
lubbock_set_misc_wr(TS_nCS, (command == PXA2XX_CS_ASSERT) ? 0 : TS_nCS);
|
||||
}
|
||||
|
||||
static struct pxa2xx_spi_chip ads_hw = {
|
||||
.tx_threshold = 1,
|
||||
.rx_threshold = 2,
|
||||
.cs_control = ads7846_cs,
|
||||
};
|
||||
|
||||
static struct spi_board_info spi_board_info[] __initdata = { {
|
||||
.modalias = "ads7846",
|
||||
.platform_data = &ads_info,
|
||||
.controller_data = &ads_hw,
|
||||
.irq = LUBBOCK_BB_IRQ,
|
||||
.max_speed_hz = 120000 /* max sample rate at 3V */
|
||||
* 26 /* command + data + overhead */,
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = -1,
|
||||
|
@ -272,6 +348,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
&smc91x_device,
|
||||
&lubbock_flash_device[0],
|
||||
&lubbock_flash_device[1],
|
||||
&pxa_ssp,
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info sharp_lm8v31 __initdata = {
|
||||
|
@ -400,6 +477,8 @@ static void __init lubbock_init(void)
|
|||
lubbock_flash_data[flashboot^1].name = "application-flash";
|
||||
lubbock_flash_data[flashboot].name = "boot-rom";
|
||||
(void) platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
|
||||
}
|
||||
|
||||
static struct map_desc lubbock_io_desc[] __initdata = {
|
||||
|
@ -416,6 +495,11 @@ static void __init lubbock_map_io(void)
|
|||
pxa_map_io();
|
||||
iotable_init(lubbock_io_desc, ARRAY_SIZE(lubbock_io_desc));
|
||||
|
||||
/* SSP data pins */
|
||||
pxa_gpio_mode(GPIO23_SCLK_MD);
|
||||
pxa_gpio_mode(GPIO25_STXD_MD);
|
||||
pxa_gpio_mode(GPIO26_SRXD_MD);
|
||||
|
||||
/* This enables the BTUART */
|
||||
pxa_gpio_mode(GPIO42_BTRXD_MD);
|
||||
pxa_gpio_mode(GPIO43_BTTXD_MD);
|
||||
|
|
Loading…
Reference in a new issue