From mboxrd@z Thu Jan 1 00:00:00 1970 From: Magnus Damm Date: Mon, 21 Jan 2008 10:24:01 +0000 Subject: [PATCH] sh: add spi header and r2d platform data Message-Id: <20080121102401.28997.63940.sendpatchset@clockwork.opensource.se> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-sh@vger.kernel.org sh: add spi header and r2d platform data This patch adds the header file asm/spi.h and board specific code for the r2d board. The header file contains a structure that should be used to describe a single spi bus. The board specific code for r2d is updated with such a structure for the new spi_sh_sci driver. The structure contains a chip select callback plus information about the R9701 rtc chip which is attached to the spi bus. Signed-off-by: Magnus Damm --- arch/sh/boards/renesas/rts7751r2d/setup.c | 42 +++++++++++++++++++++++++++++ include/asm-sh/spi.h | 17 +++++++++++ 2 files changed, 59 insertions(+) --- 0001/arch/sh/boards/renesas/rts7751r2d/setup.c +++ work/arch/sh/boards/renesas/rts7751r2d/setup.c 2008-01-21 10:51:17.000000000 +0900 @@ -16,9 +16,12 @@ #include #include #include +#include +#include #include #include #include +#include static struct resource cf_ide_resources[] = { [0] = { @@ -53,6 +56,44 @@ static struct platform_device cf_ide_dev }, }; +static void r2d_chip_select(struct sh_spi_info *spi, int cs, int state) +{ + BUG_ON(cs != 0); /* Single Epson RTC-9701JE attached on CS0 */ + ctrl_outw(state = BITBANG_CS_ACTIVE ? 1 : 0, PA_RTCCE); +} + +static struct resource spi_sh_sci_resources[] = { + { + .start = 0xffe00000, + .end = 0xffe0001f, + .flags = IORESOURCE_MEM, + }, +}; + +static struct spi_board_info spi_board_info[] = { + { + .modalias = "rtc-r9701", + .max_speed_hz = 1000000, + }, +}; + +static struct sh_spi_info spi_info = { + .num_chipselect = 1, + .chip_select = r2d_chip_select, + .board_info = spi_board_info, + .board_size = ARRAY_SIZE(spi_board_info), +}; + +static struct platform_device spi_sh_sci_device = { + .name = "spi_sh_sci", + .id = -1, + .num_resources = ARRAY_SIZE(spi_sh_sci_resources), + .resource = spi_sh_sci_resources, + .dev = { + .platform_data = &spi_info, + }, +}; + static struct resource heartbeat_resources[] = { [0] = { .start = PA_OUTPORT, @@ -176,6 +217,7 @@ static struct platform_device *rts7751r2 #endif &cf_ide_device, &heartbeat_device, + &spi_sh_sci_device, }; static int __init rts7751r2d_devices_setup(void) --- /dev/null +++ work/include/asm-sh/spi.h 2008-01-21 10:51:18.000000000 +0900 @@ -0,0 +1,17 @@ +#ifndef __ASM_SPI_H__ +#define __ASM_SPI_H__ + +struct sh_spi_info; +struct spi_board_info; + +struct sh_spi_info { + int bus_num; + int num_chipselect; + + struct spi_board_info *board_info; + unsigned long board_size; + + void (*chip_select)(struct sh_spi_info *spi, int cs, int state); +}; + +#endif /* __ASM_SPI_H__ */