[PATCH 2/2] ARM: mxs: add GPMI device for imx23/imx28
Huang Shijie
b32955 at freescale.com
Fri Apr 15 04:33:35 EDT 2011
hi:
> On Fri, Apr 15, 2011 at 04:01:48PM +0800, Huang Shijie wrote:
>> add the gpmi device for imx23 and imx28.
>>
>> Signed-off-by: Huang Shijie<b32955 at freescale.com>
>> ---
>> arch/arm/mach-mxs/clock-mx23.c | 1 +
>> arch/arm/mach-mxs/clock-mx28.c | 1 +
>> arch/arm/mach-mxs/devices-mx23.h | 4 +
>> arch/arm/mach-mxs/devices-mx28.h | 4 +
>> arch/arm/mach-mxs/devices/Kconfig | 3 +
>> arch/arm/mach-mxs/devices/Makefile | 1 +
>> arch/arm/mach-mxs/devices/platform-gpmi.c | 82 +++++++++++++++++++++++
>> arch/arm/mach-mxs/include/mach/devices-common.h | 6 ++
>> arch/arm/mach-mxs/mach-mx23evk.c | 28 ++++++++
>> arch/arm/mach-mxs/mach-mx28evk.c | 28 ++++++++
> Can you please split out the changes to arch/arm/mach-mxs/mach-* into
> one or two seperate changes?
>
ok, thanks.
>> 10 files changed, 158 insertions(+), 0 deletions(-)
>> create mode 100644 arch/arm/mach-mxs/devices/platform-gpmi.c
>>
>> diff --git a/arch/arm/mach-mxs/clock-mx23.c b/arch/arm/mach-mxs/clock-mx23.c
>> index d133c7f..81d54bf 100644
>> --- a/arch/arm/mach-mxs/clock-mx23.c
>> +++ b/arch/arm/mach-mxs/clock-mx23.c
>> @@ -454,6 +454,7 @@ static struct clk_lookup lookups[] = {
>> _REGISTER_CLOCK("mxs-pwm.3", NULL, pwm_clk)
>> _REGISTER_CLOCK("mxs-pwm.4", NULL, pwm_clk)
>> _REGISTER_CLOCK("imx23-fb", NULL, lcdif_clk)
>> + _REGISTER_CLOCK("imx23-gpmi-nfc", NULL, gpmi_clk)
>> };
>>
>> static int clk_misc_init(void)
>> diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c
>> index 5e489a2..9dbd2d5 100644
>> --- a/arch/arm/mach-mxs/clock-mx28.c
>> +++ b/arch/arm/mach-mxs/clock-mx28.c
>> @@ -609,6 +609,7 @@ static struct clk_lookup lookups[] = {
>> _REGISTER_CLOCK("duart", NULL, uart_clk)
>> _REGISTER_CLOCK("imx28-fec.0", NULL, fec_clk)
>> _REGISTER_CLOCK("imx28-fec.1", NULL, fec_clk)
>> + _REGISTER_CLOCK("imx28-gpmi-nfc", NULL, gpmi_clk)
>> _REGISTER_CLOCK("mxs-auart.0", NULL, uart_clk)
>> _REGISTER_CLOCK("mxs-auart.1", NULL, uart_clk)
>> _REGISTER_CLOCK("mxs-auart.2", NULL, uart_clk)
>> diff --git a/arch/arm/mach-mxs/devices-mx23.h b/arch/arm/mach-mxs/devices-mx23.h
>> index c7e14f4..03bd234 100644
>> --- a/arch/arm/mach-mxs/devices-mx23.h
>> +++ b/arch/arm/mach-mxs/devices-mx23.h
>> @@ -21,6 +21,10 @@ extern const struct mxs_auart_data mx23_auart_data[] __initconst;
>> #define mx23_add_auart0() mx23_add_auart(0)
>> #define mx23_add_auart1() mx23_add_auart(1)
>>
>> +extern const struct resource res_imx23[RES_SIZE] __initconst;
> This doesn't have a namespace, but see below.
>
>> +#define mx23_add_gpmi(pdata) \
>> + mxs_add_gpmi(pdata, res_imx23, RES_SIZE, GPMI_NFC_DRIVER_MX23)
> The less arguments mxs_add_gpmi takes the easier it's to call it. (I.e.
> the machine code to set the arguments and call the function is shorter
> when there are only two arguments to pass.) See platform-spi_imx.c for
> an example to pass a device id.
>
Ok. I will reduce the parameters to two.
>> +
>> #define mx23_add_mxs_pwm(id) mxs_add_mxs_pwm(MX23_PWM_BASE_ADDR, id)
>>
>> struct platform_device *__init mx23_add_mxsfb(
>> diff --git a/arch/arm/mach-mxs/devices-mx28.h b/arch/arm/mach-mxs/devices-mx28.h
>> index 9d08555..64458fd 100644
>> --- a/arch/arm/mach-mxs/devices-mx28.h
>> +++ b/arch/arm/mach-mxs/devices-mx28.h
>> @@ -34,6 +34,10 @@ extern const struct mxs_flexcan_data mx28_flexcan_data[] __initconst;
>> #define mx28_add_flexcan0(pdata) mx28_add_flexcan(0, pdata)
>> #define mx28_add_flexcan1(pdata) mx28_add_flexcan(1, pdata)
>>
>> +extern const struct resource res_imx28[RES_SIZE] __initconst;
>> +#define mx28_add_gpmi(pdata) \
>> + mxs_add_gpmi(pdata, res_imx28, RES_SIZE, GPMI_NFC_DRIVER_MX28)
>> +
> ditto
>> extern const struct mxs_i2c_data mx28_mxs_i2c_data[] __initconst;
>> #define mx28_add_mxs_i2c(id) mxs_add_mxs_i2c(&mx28_mxs_i2c_data[id])
>>
>> diff --git a/arch/arm/mach-mxs/devices/Kconfig b/arch/arm/mach-mxs/devices/Kconfig
>> index 1451ad0..e9a9a8b 100644
>> --- a/arch/arm/mach-mxs/devices/Kconfig
>> +++ b/arch/arm/mach-mxs/devices/Kconfig
>> @@ -12,6 +12,9 @@ config MXS_HAVE_PLATFORM_FLEXCAN
>> select HAVE_CAN_FLEXCAN if CAN
>> bool
>>
>> +config MXS_HAVE_PLATFORM_GPMI
>> + bool
>> +
>> config MXS_HAVE_PLATFORM_MXS_I2C
>> bool
>>
>> diff --git a/arch/arm/mach-mxs/devices/Makefile b/arch/arm/mach-mxs/devices/Makefile
>> index 0d9bea3..4f2f66c 100644
>> --- a/arch/arm/mach-mxs/devices/Makefile
>> +++ b/arch/arm/mach-mxs/devices/Makefile
>> @@ -3,6 +3,7 @@ obj-$(CONFIG_MXS_HAVE_PLATFORM_AUART) += platform-auart.o
>> obj-y += platform-dma.o
>> obj-$(CONFIG_MXS_HAVE_PLATFORM_FEC) += platform-fec.o
>> obj-$(CONFIG_MXS_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o
>> +obj-$(CONFIG_MXS_HAVE_PLATFORM_GPMI) += platform-gpmi.o
>> obj-$(CONFIG_MXS_HAVE_PLATFORM_MXS_I2C) += platform-mxs-i2c.o
>> obj-$(CONFIG_MXS_HAVE_PLATFORM_MXS_PWM) += platform-mxs-pwm.o
>> obj-$(CONFIG_MXS_HAVE_PLATFORM_MXSFB) += platform-mxsfb.o
>> diff --git a/arch/arm/mach-mxs/devices/platform-gpmi.c b/arch/arm/mach-mxs/devices/platform-gpmi.c
>> new file mode 100644
>> index 0000000..46f5e52
>> --- /dev/null
>> +++ b/arch/arm/mach-mxs/devices/platform-gpmi.c
>> @@ -0,0 +1,82 @@
>> +/*
>> + * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved.
>> + *
>> + * 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.,
>> + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>> + */
>> +#include<asm/sizes.h>
>> +#include<mach/mx23.h>
>> +#include<mach/mx28.h>
>> +#include<mach/devices-common.h>
>> +
>> +#define RES_MEM(soc, _id, _s, _n) \
>> + { \
>> + .start = soc ##_## _id, \
>> + .end = soc ##_## _id + (_s) - 1, \
>> + .name = (_n), \
>> + .flags = IORESOURCE_MEM, \
>> + }
>> +
>> +#define RES_IRQ(soc, _id, _n) \
>> + { \
>> + .start = soc ##_## _id, \
>> + .end = soc ##_## _id, \
>> + .name = (_n), \
>> + .flags = IORESOURCE_IRQ, \
>> + }
>> +
>> +#define RES_DMA(soc, _i_s, _i_e, _n) \
>> + { \
>> + .start = soc ##_## _i_s, \
>> + .end = soc ##_## _i_e, \
>> + .name = (_n), \
>> + .flags = IORESOURCE_DMA, \
>> + }
>> +
>> +#ifdef CONFIG_SOC_IMX23
>> +const struct resource res_imx23[RES_SIZE] __initconst = {
>> + /* GPMI */
>> + RES_MEM(MX23, GPMI_BASE_ADDR, SZ_8K, GPMI_NFC_GPMI_REGS_ADDR_RES_NAME),
>> + RES_IRQ(MX23, INT_GPMI_ATTENTION, GPMI_NFC_GPMI_INTERRUPT_RES_NAME),
>> + /* BCH */
>> + RES_MEM(MX23, BCH_BASE_ADDR, SZ_8K, GPMI_NFC_BCH_REGS_ADDR_RES_NAME),
>> + RES_IRQ(MX23, INT_BCH, GPMI_NFC_BCH_INTERRUPT_RES_NAME),
>> + /* DMA */
>> + RES_DMA(MX23, DMA_GPMI0, DMA_GPMI3, GPMI_NFC_DMA_CHANNELS_RES_NAME),
>> + RES_IRQ(MX23, INT_GPMI_DMA, GPMI_NFC_DMA_INTERRUPT_RES_NAME),
>> +};
>> +#endif
>> +
>> +#ifdef CONFIG_SOC_IMX28
>> +const struct resource res_imx28[RES_SIZE] __initconst = {
>> + /* GPMI */
>> + RES_MEM(MX28, GPMI_BASE_ADDR, SZ_8K, GPMI_NFC_GPMI_REGS_ADDR_RES_NAME),
>> + RES_IRQ(MX28, INT_GPMI, GPMI_NFC_GPMI_INTERRUPT_RES_NAME),
>> + /* BCH */
>> + RES_MEM(MX28, BCH_BASE_ADDR, SZ_8K, GPMI_NFC_BCH_REGS_ADDR_RES_NAME),
>> + RES_IRQ(MX28, INT_BCH, GPMI_NFC_BCH_INTERRUPT_RES_NAME),
>> + /* DMA */
>> + RES_DMA(MX28, DMA_GPMI0, DMA_GPMI7, GPMI_NFC_DMA_CHANNELS_RES_NAME),
>> + RES_IRQ(MX28, INT_GPMI_DMA, GPMI_NFC_DMA_INTERRUPT_RES_NAME),
>> +};
>> +#endif
> See how this is done in platform-spi_imx.c.
>
ok, thanks.
Best Regards
Huang Shijie
>> +
>> +struct platform_device *__init
>> +mxs_add_gpmi(const struct gpmi_nfc_platform_data *data,
>> + const struct resource *res, int res_size, const char *name)
>> +{
>> + return mxs_add_platform_device_dmamask(name, -1,
>> + res, res_size,
>> + data, sizeof(*data), DMA_BIT_MASK(32));
>> +}
> Best regards
> Uwe
>
More information about the linux-arm-kernel
mailing list