[PATCH 6/8] ARM: pxa/colibri-pxa270: split module and base board code

Eric Miao eric.y.miao at gmail.com
Wed May 26 10:07:26 EDT 2010


On Sat, May 22, 2010 at 6:29 AM, Marek Vasut <marek.vasut at gmail.com> wrote:
> From: Daniel Mack <daniel at caiaq.de>
>
> Follow the idea of several MX31 based boards and split code that is
> related to the module from code that is baseboard specific. This makes
> adding new base board support easier, while avoiding code duplication.
>
> Signed-off-by: Daniel Mack <daniel at caiaq.de>
> Acked-by: Marek Vasut <marek.vasut at gmail.com>
> Cc: Marek Vasut <marek.vasut at gmail.com>
> Cc: Eric Miao <eric.y.miao at gmail.com>

Applied.

> ---
>  arch/arm/mach-pxa/Kconfig                    |    4 +
>  arch/arm/mach-pxa/Makefile                   |    3 +-
>  arch/arm/mach-pxa/colibri-pxa270-evalboard.c |  111 ++++++++++++++++++++++++++
>  arch/arm/mach-pxa/colibri-pxa270.c           |  107 +++++--------------------
>  arch/arm/mach-pxa/include/mach/colibri.h     |   14 +++
>  5 files changed, 151 insertions(+), 88 deletions(-)
>  create mode 100644 arch/arm/mach-pxa/colibri-pxa270-evalboard.c
>
> diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
> index 3b51741..819b44f 100644
> --- a/arch/arm/mach-pxa/Kconfig
> +++ b/arch/arm/mach-pxa/Kconfig
> @@ -238,6 +238,10 @@ config MACH_COLIBRI
>        bool "Toradex Colibri PXA270"
>        select PXA27x
>
> +config MACH_COLIBRI_PXA270_EVALBOARD
> +       bool "Toradex Colibri Evaluation Carrier Board support (PXA270)"
> +       depends on MACH_COLIBRI
> +
>  config MACH_COLIBRI300
>        bool "Toradex Colibri PXA300/310"
>        select PXA3xx
> diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
> index b8f1f4b..4751c9d 100644
> --- a/arch/arm/mach-pxa/Makefile
> +++ b/arch/arm/mach-pxa/Makefile
> @@ -58,7 +58,8 @@ obj-$(CONFIG_MACH_TRIZEPS4)   += trizeps4.o
>  obj-$(CONFIG_MACH_LOGICPD_PXA270)      += lpd270.o
>  obj-$(CONFIG_MACH_PCM027)              += pcm027.o
>  obj-$(CONFIG_MACH_PCM990_BASEBOARD)    += pcm990-baseboard.o
> -obj-$(CONFIG_MACH_COLIBRI)     += colibri-pxa270.o
> +obj-$(CONFIG_MACH_COLIBRI)                     += colibri-pxa270.o
> +obj-$(CONFIG_MACH_COLIBRI_PXA270_EVALBOARD)    += colibri-pxa270-evalboard.o
>  obj-$(CONFIG_MACH_COLIBRI300)  += colibri-pxa3xx.o colibri-pxa300.o
>  obj-$(CONFIG_MACH_COLIBRI320)  += colibri-pxa3xx.o colibri-pxa320.o
>  obj-$(CONFIG_MACH_VPAC270)     += vpac270.o
> diff --git a/arch/arm/mach-pxa/colibri-pxa270-evalboard.c b/arch/arm/mach-pxa/colibri-pxa270-evalboard.c
> new file mode 100644
> index 0000000..0f3b632
> --- /dev/null
> +++ b/arch/arm/mach-pxa/colibri-pxa270-evalboard.c
> @@ -0,0 +1,111 @@
> +/*
> + *  linux/arch/arm/mach-pxa/colibri-pxa270-evalboard.c
> + *
> + *  Support for Toradex PXA270 based Colibri Evaluation Carrier Board
> + *  Daniel Mack <daniel at caiaq.de>
> + *  Marek Vasut <marek.vasut at gmail.com>
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + */
> +
> +#include <linux/init.h>
> +#include <linux/kernel.h>
> +#include <linux/platform_device.h>
> +#include <linux/sysdev.h>
> +#include <linux/interrupt.h>
> +#include <linux/gpio.h>
> +#include <asm/mach-types.h>
> +#include <mach/hardware.h>
> +#include <asm/mach/arch.h>
> +
> +#include <mach/pxa27x.h>
> +#include <mach/colibri.h>
> +#include <mach/mmc.h>
> +#include <mach/ohci.h>
> +#include <mach/pxa27x-udc.h>
> +
> +#include "generic.h"
> +#include "devices.h"
> +
> +/******************************************************************************
> + * Pin configuration
> + ******************************************************************************/
> +static mfp_cfg_t colibri_pxa270_evalboard_pin_config[] __initdata = {
> +       /* MMC */
> +       GPIO32_MMC_CLK,
> +       GPIO92_MMC_DAT_0,
> +       GPIO109_MMC_DAT_1,
> +       GPIO110_MMC_DAT_2,
> +       GPIO111_MMC_DAT_3,
> +       GPIO112_MMC_CMD,
> +       GPIO0_GPIO,     /* SD detect */
> +
> +       /* FFUART */
> +       GPIO39_FFUART_TXD,
> +       GPIO34_FFUART_RXD,
> +
> +       /* UHC */
> +       GPIO88_USBH1_PWR,
> +       GPIO89_USBH1_PEN,
> +       GPIO119_USBH2_PWR,
> +       GPIO120_USBH2_PEN,
> +};
> +
> +/******************************************************************************
> + * SD/MMC card controller
> + ******************************************************************************/
> +#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
> +static struct pxamci_platform_data colibri_pxa270_mci_platform_data = {
> +       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
> +       .gpio_power             = -1,
> +       .gpio_card_detect       = GPIO0_COLIBRI_PXA270_SD_DETECT,
> +       .gpio_card_ro           = -1,
> +       .detect_delay_ms        = 200,
> +};
> +
> +static void __init colibri_pxa270_mmc_init(void)
> +{
> +       pxa_set_mci_info(&colibri_pxa270_mci_platform_data);
> +}
> +#else
> +static inline void colibri_pxa270_mmc_init(void) {}
> +#endif
> +
> +/******************************************************************************
> + * USB Host
> + ******************************************************************************/
> +#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
> +static int colibri_pxa270_ohci_init(struct device *dev)
> +{
> +       UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
> +       return 0;
> +}
> +
> +static struct pxaohci_platform_data colibri_pxa270_ohci_info = {
> +       .port_mode      = PMM_PERPORT_MODE,
> +       .flags          = ENABLE_PORT1 | ENABLE_PORT2 |
> +                         POWER_CONTROL_LOW | POWER_SENSE_LOW,
> +       .init           = colibri_pxa270_ohci_init,
> +};
> +
> +static void __init colibri_pxa270_uhc_init(void)
> +{
> +       pxa_set_ohci_info(&colibri_pxa270_ohci_info);
> +}
> +#else
> +static inline void colibri_pxa270_uhc_init(void) {}
> +#endif
> +
> +void __init colibri_pxa270_evalboard_init(void)
> +{
> +       pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_evalboard_pin_config));
> +       pxa_set_ffuart_info(NULL);
> +       pxa_set_btuart_info(NULL);
> +       pxa_set_stuart_info(NULL);
> +
> +       colibri_pxa270_mmc_init();
> +       colibri_pxa270_uhc_init();
> +}
> +
> diff --git a/arch/arm/mach-pxa/colibri-pxa270.c b/arch/arm/mach-pxa/colibri-pxa270.c
> index 6e0d623..c1b8880 100644
> --- a/arch/arm/mach-pxa/colibri-pxa270.c
> +++ b/arch/arm/mach-pxa/colibri-pxa270.c
> @@ -11,36 +11,26 @@
>  */
>
>  #include <linux/init.h>
> -#include <linux/kernel.h>
> -#include <linux/platform_device.h>
> -#include <linux/sysdev.h>
>  #include <linux/interrupt.h>
> -#include <linux/bitops.h>
> -#include <linux/ioport.h>
> -#include <linux/delay.h>
> +#include <linux/kernel.h>
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/partitions.h>
>  #include <linux/mtd/physmap.h>
> -#include <linux/gpio.h>
> +#include <linux/platform_device.h>
> +#include <linux/sysdev.h>
>  #include <linux/ucb1400.h>
> -#include <asm/mach-types.h>
> -#include <mach/hardware.h>
> -#include <asm/irq.h>
> -#include <asm/sizes.h>
> +
>  #include <asm/mach/arch.h>
> -#include <asm/mach/map.h>
> -#include <asm/mach/irq.h>
>  #include <asm/mach/flash.h>
> +#include <asm/mach-types.h>
> +#include <asm/sizes.h>
>
>  #include <mach/audio.h>
> -#include <mach/pxa27x.h>
>  #include <mach/colibri.h>
> -#include <mach/mmc.h>
> -#include <mach/ohci.h>
> -#include <mach/pxa27x-udc.h>
> +#include <mach/pxa27x.h>
>
> -#include "generic.h"
>  #include "devices.h"
> +#include "generic.h"
>
>  /******************************************************************************
>  * Pin configuration
> @@ -50,25 +40,6 @@ static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
>        GPIO78_nCS_2,   /* Ethernet CS */
>        GPIO114_GPIO,   /* Ethernet IRQ */
>
> -       /* MMC */
> -       GPIO32_MMC_CLK,
> -       GPIO92_MMC_DAT_0,
> -       GPIO109_MMC_DAT_1,
> -       GPIO110_MMC_DAT_2,
> -       GPIO111_MMC_DAT_3,
> -       GPIO112_MMC_CMD,
> -       GPIO0_GPIO,     /* SD detect */
> -
> -       /* FFUART */
> -       GPIO39_FFUART_TXD,
> -       GPIO34_FFUART_RXD,
> -
> -       /* UHC */
> -       GPIO88_USBH1_PWR,
> -       GPIO89_USBH1_PEN,
> -       GPIO119_USBH2_PWR,
> -       GPIO120_USBH2_PEN,
> -
>        /* AC97 */
>        GPIO28_AC97_BITCLK,
>        GPIO29_AC97_SDATA_IN_0,
> @@ -172,51 +143,6 @@ static inline void colibri_pxa270_eth_init(void) {}
>  #endif
>
>  /******************************************************************************
> - * SD/MMC card controller
> - ******************************************************************************/
> -#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
> -static struct pxamci_platform_data colibri_pxa270_mci_platform_data = {
> -       .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
> -       .gpio_power             = -1,
> -       .gpio_card_detect       = GPIO0_COLIBRI_PXA270_SD_DETECT,
> -       .gpio_card_ro           = -1,
> -       .detect_delay_ms        = 200,
> -};
> -
> -static void __init colibri_pxa270_mmc_init(void)
> -{
> -       pxa_set_mci_info(&colibri_pxa270_mci_platform_data);
> -}
> -#else
> -static inline void colibri_pxa270_mmc_init(void) {}
> -#endif
> -
> -/******************************************************************************
> - * USB Host
> - ******************************************************************************/
> -#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
> -static int colibri_pxa270_ohci_init(struct device *dev)
> -{
> -       UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
> -       return 0;
> -}
> -
> -static struct pxaohci_platform_data colibri_pxa270_ohci_info = {
> -       .port_mode      = PMM_PERPORT_MODE,
> -       .flags          = ENABLE_PORT1 | ENABLE_PORT2 |
> -                       POWER_CONTROL_LOW | POWER_SENSE_LOW,
> -       .init           = colibri_pxa270_ohci_init,
> -};
> -
> -static void __init colibri_pxa270_uhc_init(void)
> -{
> -       pxa_set_ohci_info(&colibri_pxa270_ohci_info);
> -}
> -#else
> -static inline void colibri_pxa270_uhc_init(void) {}
> -#endif
> -
> -/******************************************************************************
>  * Audio and Touchscreen
>  ******************************************************************************/
>  #if    defined(CONFIG_TOUCHSCREEN_UCB1400) || \
> @@ -246,18 +172,25 @@ static void __init colibri_pxa270_tsc_init(void)
>  static inline void colibri_pxa270_tsc_init(void) {}
>  #endif
>
> +static int colibri_pxa270_baseboard;
> +core_param(colibri_pxa270_baseboard, colibri_pxa270_baseboard, int, 0444);
> +
>  static void __init colibri_pxa270_init(void)
>  {
>        pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
> -       pxa_set_ffuart_info(NULL);
> -       pxa_set_btuart_info(NULL);
> -       pxa_set_stuart_info(NULL);
>
>        colibri_pxa270_nor_init();
>        colibri_pxa270_eth_init();
> -       colibri_pxa270_mmc_init();
> -       colibri_pxa270_uhc_init();
>        colibri_pxa270_tsc_init();
> +
> +       switch (colibri_pxa270_baseboard) {
> +       case COLIBRI_PXA270_EVALBOARD:
> +               colibri_pxa270_evalboard_init();
> +               break;
> +       default:
> +               printk(KERN_ERR "Illegal colibri_pxa270_baseboard type %d\n",
> +                               colibri_pxa270_baseboard);
> +       }
>  }
>
>  MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
> diff --git a/arch/arm/mach-pxa/include/mach/colibri.h b/arch/arm/mach-pxa/include/mach/colibri.h
> index 8579b10..6434f66 100644
> --- a/arch/arm/mach-pxa/include/mach/colibri.h
> +++ b/arch/arm/mach-pxa/include/mach/colibri.h
> @@ -5,6 +5,20 @@
>  #include <mach/mfp.h>
>
>  /*
> + * base board glue for PXA270 module
> + */
> +
> +enum {
> +       COLIBRI_PXA270_EVALBOARD = 0,
> +};
> +
> +#if defined(CONFIG_MACH_COLIBRI_PXA270_EVALBOARD)
> +extern void colibri_pxa270_evalboard_init(void);
> +#else
> +static inline void colibri_pxa270_evalboard_init(void) {}
> +#endif
> +
> +/*
>  * common settings for all modules
>  */
>
> --
> 1.7.0
>
>



More information about the linux-arm-kernel mailing list