ARM: imx: dynamically register spi_imx devices (imx27)
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This commit is contained in:
parent
63ddc5b016
commit
7536cf992f
7 changed files with 17 additions and 48 deletions
|
@ -92,6 +92,7 @@ config MACH_PCM038
|
||||||
bool "Phytec phyCORE-i.MX27 CPU module (pcm038)"
|
bool "Phytec phyCORE-i.MX27 CPU module (pcm038)"
|
||||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||||
|
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||||
select MXC_ULPI if USB_ULPI
|
select MXC_ULPI if USB_ULPI
|
||||||
help
|
help
|
||||||
Include support for phyCORE-i.MX27 (aka pcm038) platform. This
|
Include support for phyCORE-i.MX27 (aka pcm038) platform. This
|
||||||
|
@ -134,6 +135,7 @@ choice
|
||||||
config MACH_EUKREA_MBIMX27_BASEBOARD
|
config MACH_EUKREA_MBIMX27_BASEBOARD
|
||||||
prompt "Eukrea MBIMX27 development board"
|
prompt "Eukrea MBIMX27 development board"
|
||||||
bool
|
bool
|
||||||
|
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||||
help
|
help
|
||||||
This adds board specific devices that can be found on Eukrea's
|
This adds board specific devices that can be found on Eukrea's
|
||||||
MBIMX27 evaluation board.
|
MBIMX27 evaluation board.
|
||||||
|
@ -156,6 +158,7 @@ config MACH_PCA100
|
||||||
bool "Phytec phyCARD-s (pca100)"
|
bool "Phytec phyCARD-s (pca100)"
|
||||||
select IMX_HAVE_PLATFORM_IMX_I2C
|
select IMX_HAVE_PLATFORM_IMX_I2C
|
||||||
select IMX_HAVE_PLATFORM_MXC_NAND
|
select IMX_HAVE_PLATFORM_MXC_NAND
|
||||||
|
select IMX_HAVE_PLATFORM_SPI_IMX
|
||||||
select MXC_ULPI if USB_ULPI
|
select MXC_ULPI if USB_ULPI
|
||||||
help
|
help
|
||||||
Include support for phyCARD-s (aka pca100) platform. This
|
Include support for phyCARD-s (aka pca100) platform. This
|
||||||
|
|
|
@ -16,3 +16,10 @@
|
||||||
|
|
||||||
#define imx27_add_mxc_nand(pdata) \
|
#define imx27_add_mxc_nand(pdata) \
|
||||||
imx_add_mxc_nand_v1(MX27_NFC_BASE_ADDR, MX27_INT_NANDFC, pdata)
|
imx_add_mxc_nand_v1(MX27_NFC_BASE_ADDR, MX27_INT_NANDFC, pdata)
|
||||||
|
|
||||||
|
#define imx27_add_spi_imx0(pdata) \
|
||||||
|
imx_add_spi_imx(0, MX27_CSPI1_BASE_ADDR, SZ_4K, MX27_INT_CSPI1, pdata)
|
||||||
|
#define imx27_add_spi_imx1(pdata) \
|
||||||
|
imx_add_spi_imx(1, MX27_CSPI2_BASE_ADDR, SZ_4K, MX27_INT_CSPI2, pdata)
|
||||||
|
#define imx27_add_spi_imx2(pdata) \
|
||||||
|
imx_add_spi_imx(2, MX27_CSPI3_BASE_ADDR, SZ_4K, MX27_INT_CSPI3, pdata)
|
||||||
|
|
|
@ -218,39 +218,6 @@ int __init imx1_register_gpios(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
|
#if defined(CONFIG_MACH_MX21) || defined(CONFIG_MACH_MX27)
|
||||||
/*
|
|
||||||
* SPI master controller
|
|
||||||
*
|
|
||||||
* - i.MX1: 2 channel (slighly different register setting)
|
|
||||||
* - i.MX21: 2 channel
|
|
||||||
* - i.MX27: 3 channel
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_MACH_MX27
|
|
||||||
#define DEFINE_IMX_SPI_DEVICE(n, baseaddr, irq) \
|
|
||||||
static struct resource mxc_spi_resources ## n[] = { \
|
|
||||||
{ \
|
|
||||||
.start = baseaddr, \
|
|
||||||
.end = baseaddr + SZ_4K - 1, \
|
|
||||||
.flags = IORESOURCE_MEM, \
|
|
||||||
}, { \
|
|
||||||
.start = irq, \
|
|
||||||
.end = irq, \
|
|
||||||
.flags = IORESOURCE_IRQ, \
|
|
||||||
}, \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
struct platform_device mxc_spi_device ## n = { \
|
|
||||||
.name = "spi_imx", \
|
|
||||||
.id = n, \
|
|
||||||
.num_resources = ARRAY_SIZE(mxc_spi_resources ## n), \
|
|
||||||
.resource = mxc_spi_resources ## n, \
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_IMX_SPI_DEVICE(0, MX2x_CSPI1_BASE_ADDR, MX2x_INT_CSPI1);
|
|
||||||
DEFINE_IMX_SPI_DEVICE(1, MX2x_CSPI2_BASE_ADDR, MX2x_INT_CSPI2);
|
|
||||||
DEFINE_IMX_SPI_DEVICE(2, MX27_CSPI3_BASE_ADDR, MX27_INT_CSPI3);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* General Purpose Timer
|
* General Purpose Timer
|
||||||
* - i.MX21: 3 timers
|
* - i.MX21: 3 timers
|
||||||
|
|
|
@ -34,11 +34,6 @@ extern struct platform_device mxc_otg_udc_device;
|
||||||
extern struct platform_device mxc_otg_host;
|
extern struct platform_device mxc_otg_host;
|
||||||
extern struct platform_device mxc_usbh1;
|
extern struct platform_device mxc_usbh1;
|
||||||
extern struct platform_device mxc_usbh2;
|
extern struct platform_device mxc_usbh2;
|
||||||
#ifdef CONFIG_MACH_MX27
|
|
||||||
extern struct platform_device mxc_spi_device0;
|
|
||||||
extern struct platform_device mxc_spi_device1;
|
|
||||||
extern struct platform_device mxc_spi_device2;
|
|
||||||
#endif
|
|
||||||
extern struct platform_device mx21_usbhc_device;
|
extern struct platform_device mx21_usbhc_device;
|
||||||
extern struct platform_device imx_ssi_device0;
|
extern struct platform_device imx_ssi_device0;
|
||||||
extern struct platform_device imx_ssi_device1;
|
extern struct platform_device imx_ssi_device1;
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <mach/mmc.h>
|
#include <mach/mmc.h>
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
|
|
||||||
|
#include "devices-imx27.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
|
||||||
static int eukrea_mbimx27_pins[] = {
|
static int eukrea_mbimx27_pins[] = {
|
||||||
|
@ -201,7 +202,7 @@ static struct spi_board_info eukrea_mbimx27_spi_board_info[] __initdata = {
|
||||||
|
|
||||||
static int eukrea_mbimx27_spi_cs[] = {GPIO_PORTD | 28};
|
static int eukrea_mbimx27_spi_cs[] = {GPIO_PORTD | 28};
|
||||||
|
|
||||||
static struct spi_imx_master eukrea_mbimx27_spi_0_data = {
|
static const struct spi_imx_master eukrea_mbimx27_spi0_data __initconst = {
|
||||||
.chipselect = eukrea_mbimx27_spi_cs,
|
.chipselect = eukrea_mbimx27_spi_cs,
|
||||||
.num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs),
|
.num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs),
|
||||||
};
|
};
|
||||||
|
@ -233,7 +234,7 @@ void __init eukrea_mbimx27_baseboard_init(void)
|
||||||
/* SPI and ADS7846 Touchscreen controler init */
|
/* SPI and ADS7846 Touchscreen controler init */
|
||||||
mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
|
mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
|
||||||
mxc_gpio_mode(GPIO_PORTD | 25 | GPIO_GPIO | GPIO_IN);
|
mxc_gpio_mode(GPIO_PORTD | 25 | GPIO_GPIO | GPIO_IN);
|
||||||
mxc_register_device(&mxc_spi_device0, &eukrea_mbimx27_spi_0_data);
|
imx27_add_spi_imx0(&eukrea_mbimx27_spi0_data);
|
||||||
spi_register_board_info(eukrea_mbimx27_spi_board_info,
|
spi_register_board_info(eukrea_mbimx27_spi_board_info,
|
||||||
ARRAY_SIZE(eukrea_mbimx27_spi_board_info));
|
ARRAY_SIZE(eukrea_mbimx27_spi_board_info));
|
||||||
ads7846_dev_init();
|
ads7846_dev_init();
|
||||||
|
|
|
@ -37,9 +37,6 @@
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/iomux-mx27.h>
|
#include <mach/iomux-mx27.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
|
|
||||||
#include <mach/spi.h>
|
|
||||||
#endif
|
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
#include <mach/audmux.h>
|
#include <mach/audmux.h>
|
||||||
#include <mach/ssi.h>
|
#include <mach/ssi.h>
|
||||||
|
@ -192,7 +189,7 @@ static struct spi_board_info pca100_spi_board_info[] __initdata = {
|
||||||
|
|
||||||
static int pca100_spi_cs[] = {GPIO_PORTD + 28, GPIO_PORTD + 27};
|
static int pca100_spi_cs[] = {GPIO_PORTD + 28, GPIO_PORTD + 27};
|
||||||
|
|
||||||
static struct spi_imx_master pca100_spi_0_data = {
|
static const struct spi_imx_master pca100_spi0_data __initconst = {
|
||||||
.chipselect = pca100_spi_cs,
|
.chipselect = pca100_spi_cs,
|
||||||
.num_chipselect = ARRAY_SIZE(pca100_spi_cs),
|
.num_chipselect = ARRAY_SIZE(pca100_spi_cs),
|
||||||
};
|
};
|
||||||
|
@ -347,7 +344,7 @@ static void __init pca100_init(void)
|
||||||
#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
|
#if defined(CONFIG_SPI_IMX) || defined(CONFIG_SPI_IMX_MODULE)
|
||||||
spi_register_board_info(pca100_spi_board_info,
|
spi_register_board_info(pca100_spi_board_info,
|
||||||
ARRAY_SIZE(pca100_spi_board_info));
|
ARRAY_SIZE(pca100_spi_board_info));
|
||||||
mxc_register_device(&mxc_spi_device0, &pca100_spi_0_data);
|
imx27_add_spi_imx0(&pca100_spi_0_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gpio_request(OTG_PHY_CS_GPIO, "usb-otg-cs");
|
gpio_request(OTG_PHY_CS_GPIO, "usb-otg-cs");
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include <mach/iomux-mx27.h>
|
#include <mach/iomux-mx27.h>
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
#include <mach/mxc_nand.h>
|
#include <mach/mxc_nand.h>
|
||||||
#include <mach/spi.h>
|
|
||||||
#include <mach/mxc_ehci.h>
|
#include <mach/mxc_ehci.h>
|
||||||
#include <mach/ulpi.h>
|
#include <mach/ulpi.h>
|
||||||
|
|
||||||
|
@ -216,7 +215,7 @@ static struct i2c_board_info pcm038_i2c_devices[] = {
|
||||||
|
|
||||||
static int pcm038_spi_cs[] = {GPIO_PORTD + 28};
|
static int pcm038_spi_cs[] = {GPIO_PORTD + 28};
|
||||||
|
|
||||||
static struct spi_imx_master pcm038_spi_0_data = {
|
static const struct spi_imx_master pcm038_spi0_data __initconst = {
|
||||||
.chipselect = pcm038_spi_cs,
|
.chipselect = pcm038_spi_cs,
|
||||||
.num_chipselect = ARRAY_SIZE(pcm038_spi_cs),
|
.num_chipselect = ARRAY_SIZE(pcm038_spi_cs),
|
||||||
};
|
};
|
||||||
|
@ -327,7 +326,7 @@ static void __init pcm038_init(void)
|
||||||
/* MC13783 IRQ */
|
/* MC13783 IRQ */
|
||||||
mxc_gpio_mode(GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN);
|
mxc_gpio_mode(GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN);
|
||||||
|
|
||||||
mxc_register_device(&mxc_spi_device0, &pcm038_spi_0_data);
|
imx27_add_spi_imx0(&pcm038_spi0_data);
|
||||||
spi_register_board_info(pcm038_spi_board_info,
|
spi_register_board_info(pcm038_spi_board_info,
|
||||||
ARRAY_SIZE(pcm038_spi_board_info));
|
ARRAY_SIZE(pcm038_spi_board_info));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue