Re: [PATCH 08/13] drivers/spi: add driver for the Multichannel SPI controller found in TI SoCs
From: Jean-Christophe PLAGNIOL-VILLARD <hidden>
Date: 2012-08-20 14:58:27
On 16:20 Mon 20 Aug , Jan Luebbe wrote:
quoted hunk ↗ jump to hunk
Also create devices for OMAP3. Signed-off-by: Jan Luebbe <jlu@pengutronix.de> --- arch/arm/mach-omap/Makefile | 2 +- arch/arm/mach-omap/devices-mcspi.c | 23 ++ arch/arm/mach-omap/include/mach/mcspi.h | 11 + drivers/spi/Kconfig | 6 + drivers/spi/Makefile | 1 + drivers/spi/omap3_spi.c | 403 +++++++++++++++++++++++++++++++ drivers/spi/omap3_spi.h | 100 ++++++++ 7 files changed, 545 insertions(+), 1 deletion(-) create mode 100644 arch/arm/mach-omap/devices-mcspi.c create mode 100644 arch/arm/mach-omap/include/mach/mcspi.h create mode 100644 drivers/spi/omap3_spi.c create mode 100644 drivers/spi/omap3_spi.hdiff --git a/arch/arm/mach-omap/Makefile b/arch/arm/mach-omap/Makefile index 87078ae..33c7872 100644 --- a/arch/arm/mach-omap/Makefile +++ b/arch/arm/mach-omap/Makefile@@ -21,7 +21,7 @@ # obj-$(CONFIG_ARCH_OMAP) += syslib.o obj-$(CONFIG_OMAP_CLOCK_SOURCE_S32K) += s32k_clksource.o -obj-$(CONFIG_ARCH_OMAP3) += omap3_core.o omap3_generic.o auxcr.o +obj-$(CONFIG_ARCH_OMAP3) += omap3_core.o omap3_generic.o auxcr.o devices-mcspi.o obj-$(CONFIG_ARCH_OMAP4) += omap4_generic.o omap4_clock.o obj-$(CONFIG_OMAP3_CLOCK_CONFIG) += omap3_clock.o obj-$(CONFIG_OMAP_GPMC) += gpmc.o devices-gpmc-nand.odiff --git a/arch/arm/mach-omap/devices-mcspi.c b/arch/arm/mach-omap/devices-mcspi.c new file mode 100644 index 0000000..b1fd540 --- /dev/null +++ b/arch/arm/mach-omap/devices-mcspi.c@@ -0,0 +1,23 @@ +#include <common.h> +#include <console.h> +#include <init.h> +#include <driver.h> +#include <clock.h> +#include <io.h> +#include <sizes.h> + +#include <mach/mcspi.h> + +int mcspi_devices_init() +{ + add_generic_device("omap3_spi", 1, NULL, OMAP3_MCSPI1_BASE, SZ_4K, + IORESOURCE_MEM, NULL); + add_generic_device("omap3_spi", 2, NULL, OMAP3_MCSPI2_BASE, SZ_4K, + IORESOURCE_MEM, NULL); + add_generic_device("omap3_spi", 3, NULL, OMAP3_MCSPI3_BASE, SZ_4K, + IORESOURCE_MEM, NULL); + add_generic_device("omap3_spi", 4, NULL, OMAP3_MCSPI4_BASE, SZ_4K, + IORESOURCE_MEM, NULL);
why do you register all of them?? you need to register only what the board need
quoted hunk ↗ jump to hunk
+ + return 0; +}diff --git a/arch/arm/mach-omap/include/mach/mcspi.h b/arch/arm/mach-omap/include/mach/mcspi.h new file mode 100644 index 0000000..40ee622 --- /dev/null +++ b/arch/arm/mach-omap/include/mach/mcspi.h@@ -0,0 +1,11 @@ +#ifndef __OMAP_MCSPI_H +#define __OMAP_MCSPI_H + +#define OMAP3_MCSPI1_BASE 0x48098000 +#define OMAP3_MCSPI2_BASE 0x4809A000 +#define OMAP3_MCSPI3_BASE 0x480B8000 +#define OMAP3_MCSPI4_BASE 0x480BA000 + +int mcspi_devices_init(void); + +#endif /* __OMAP_MCSPI_H */diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 609bafd..e36ceb0 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig@@ -34,4 +34,10 @@ config DRIVER_SPI_ATMEL depends on ARCH_AT91 depends on SPI + +config DRIVER_SPI_OMAP3 + bool "OMAP3 McSPI Master driver" + depends on ARCH_OMAP3 + depends on SPI + endmenudiff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 101652f..b53061e 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile@@ -2,3 +2,4 @@ obj-$(CONFIG_SPI) += spi.o obj-$(CONFIG_DRIVER_SPI_IMX) += imx_spi.o obj-$(CONFIG_DRIVER_SPI_ALTERA) += altera_spi.o obj-$(CONFIG_DRIVER_SPI_ATMEL) += atmel_spi.o +obj-$(CONFIG_DRIVER_SPI_OMAP3) += omap3_spi.odiff --git a/drivers/spi/omap3_spi.c b/drivers/spi/omap3_spi.c new file mode 100644 index 0000000..eadb78d --- /dev/null +++ b/drivers/spi/omap3_spi.c@@ -0,0 +1,403 @@ +/* + * Copyright (C) 2012 Jan Luebbe <j.luebbe@pengutronix.de> + * + * Copyright (C) 2010 Dirk Behme <dirk.behme@googlemail.com> + * + * Driver for McSPI controller on OMAP3. Based on davinci_spi.c + * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ + * + * Copyright (C) 2007 Atmel Corporation + * + * Parts taken from linux/drivers/spi/omap2_mcspi.c + * Copyright (C) 2005, 2006 Nokia Corporation + * + * Modified by Ruslan Araslanov <ruslan.araslanov@vitecmm.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ + +#include <common.h> +#include <init.h> +#include <driver.h> +#include <errno.h> +#include <spi/spi.h> +#include <malloc.h> +#include <io.h> +#include "omap3_spi.h" + +#define WORD_LEN 8 +#define SPI_WAIT_TIMEOUT 30000000 + +#define SPI_XFER_BEGIN 0x01 /* Assert CS before transfer */ +#define SPI_XFER_END 0x02 /* Deassert CS after transfer */ + +static void spi_reset(struct spi_master *master) +{ + struct omap3_spi_master *omap3_master = container_of(master, struct omap3_spi_master, master); + struct mcspi __iomem *regs = omap3_master->regs;
please no struct register please be in sync with the kernel Best Regards, J. _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox