[PATCH 3/3] ARM: pxa168: Add board support for gplugD

Eric Miao eric.y.miao at gmail.com
Mon Jun 20 01:55:35 EDT 2011


On Mon, May 2, 2011 at 2:00 PM, Tanmay Upadhyay
<tanmay.upadhyay at einfochips.com> wrote:
> Tested UART console, Ethernet & I2C interfaces
>
> Signed-off-by: Tanmay Upadhyay <tanmay.upadhyay at einfochips.com>
> ---
>  arch/arm/mach-mmp/Kconfig                   |    7 +
>  arch/arm/mach-mmp/Makefile                  |    1 +
>  arch/arm/mach-mmp/gplugd.c                  |  189 +++++++++++++++++++++++++++
>  arch/arm/mach-mmp/include/mach/mfp-gplugd.h |   52 ++++++++

I'm good to the patch. Yet if the definitions in mfp-gplugd.h is not that
gplugd _specific_, please move them into mfp-pxa168.c so other pxa168
platforms can benefit, if they are indeed gplugd specific, just incorporate
the differences into gplugd.c when defining those pins.


>  4 files changed, 249 insertions(+), 0 deletions(-)
>  create mode 100644 arch/arm/mach-mmp/gplugd.c
>  create mode 100644 arch/arm/mach-mmp/include/mach/mfp-gplugd.h
>
> diff --git a/arch/arm/mach-mmp/Kconfig b/arch/arm/mach-mmp/Kconfig
> index 67793a6..56ef5f6 100644
> --- a/arch/arm/mach-mmp/Kconfig
> +++ b/arch/arm/mach-mmp/Kconfig
> @@ -77,6 +77,13 @@ config MACH_TETON_BGA
>          Say 'Y' here if you want to support the Marvell PXA168-based
>          Teton BGA Development Board.
>
> +config MACH_SHEEVAD
> +       bool "Marvell's PXA168 GuruPlug Display (gplugD) Board"
> +       select CPU_PXA168
> +       help
> +         Say 'Y' here if you want to support the Marvell PXA168-based
> +         GuruPlug Display (gplugD) Board
> +
>  endmenu
>
>  config CPU_PXA168
> diff --git a/arch/arm/mach-mmp/Makefile b/arch/arm/mach-mmp/Makefile
> index 5c68382..b0ac942 100644
> --- a/arch/arm/mach-mmp/Makefile
> +++ b/arch/arm/mach-mmp/Makefile
> @@ -19,3 +19,4 @@ obj-$(CONFIG_MACH_BROWNSTONE) += brownstone.o
>  obj-$(CONFIG_MACH_FLINT)       += flint.o
>  obj-$(CONFIG_MACH_MARVELL_JASPER) += jasper.o
>  obj-$(CONFIG_MACH_TETON_BGA)   += teton_bga.o
> +obj-$(CONFIG_MACH_SHEEVAD)     += gplugd.o
> diff --git a/arch/arm/mach-mmp/gplugd.c b/arch/arm/mach-mmp/gplugd.c
> new file mode 100644
> index 0000000..c070c24
> --- /dev/null
> +++ b/arch/arm/mach-mmp/gplugd.c
> @@ -0,0 +1,189 @@
> +/*
> + *  linux/arch/arm/mach-mmp/gplugd.c
> + *
> + *  Support for the Marvell PXA168-based GuruPlug Display (gplugD) Platform.
> + *
> + *  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
> + *  publishhed by the Free Software Foundation.
> + */
> +
> +#include <linux/init.h>
> +
> +#include <asm/mach/arch.h>
> +#include <asm/mach-types.h>
> +
> +#include <mach/gpio.h>
> +#include <mach/pxa168.h>
> +#include <mach/mfp-pxa168.h>
> +#include <mach/mfp-gplugd.h>
> +
> +#include "common.h"
> +
> +static unsigned long gplugd_pin_config[] __initdata = {
> +       /* UART3 */
> +       GPIO8_UART3_SOUT,
> +       GPIO9_UART3_SIN,
> +       GPI1O_UART3_CTS,
> +       GPI11_UART3_RTS,
> +
> +       /* MMC2 */
> +       GPIO28_MMC2_CMD,
> +       GPIO29_MMC2_CLK,
> +       GPIO30_MMC2_DAT0,
> +       GPIO31_MMC2_DAT1,
> +       GPIO32_MMC2_DAT2,
> +       GPIO33_MMC2_DAT3,
> +
> +       /* LCD & HDMI clock selection GPIO: 0: 74.176MHz, 1: 74.25 MHz */
> +       GPIO35_GPIO,
> +       GPIO36_GPIO, /* CEC Interrupt */
> +
> +       /* MMC1 */
> +       GPIO43_MMC1_CLK,
> +       GPIO49_MMC1_CMD,
> +       GPIO41_MMC1_DAT0,
> +       GPIO40_MMC1_DAT1,
> +       GPIO52_MMC1_DAT2,
> +       GPIO51_MMC1_DAT3,
> +       GPIO53_MMC1_CD,
> +
> +       /* LCD */
> +       GPIO56_LCD_FCLK_RD,
> +       GPIO57_LCD_LCLK_A0,
> +       GPIO58_LCD_PCLK_WR,
> +       GPIO59_LCD_DENA_BIAS,
> +       GPIO60_LCD_DD0,
> +       GPIO61_LCD_DD1,
> +       GPIO62_LCD_DD2,
> +       GPIO63_LCD_DD3,
> +       GPIO64_LCD_DD4,
> +       GPIO65_LCD_DD5,
> +       GPIO66_LCD_DD6,
> +       GPIO67_LCD_DD7,
> +       GPIO68_LCD_DD8,
> +       GPIO69_LCD_DD9,
> +       GPIO70_LCD_DD10,
> +       GPIO71_LCD_DD11,
> +       GPIO72_LCD_DD12,
> +       GPIO73_LCD_DD13,
> +       GPIO74_LCD_DD14,
> +       GPIO75_LCD_DD15,
> +       GPIO76_LCD_DD16,
> +       GPIO77_LCD_DD17,
> +       GPIO78_LCD_DD18,
> +       GPIO79_LCD_DD19,
> +       GPIO80_LCD_DD20,
> +       GPIO81_LCD_DD21,
> +       GPIO82_LCD_DD22,
> +       GPIO83_LCD_DD23,
> +
> +       /* GPIO */
> +       GPIO84_GPIO,
> +       GPIO85_GPIO,
> +
> +       /* Fast-Ethernet*/
> +       GPIO86_TX_CLK,
> +       GPIO87_TX_EN,
> +       GPIO88_TX_DQ3,
> +       GPIO89_TX_DQ2,
> +       GPIO90_TX_DQ1,
> +       GPIO91_TX_DQ0,
> +       GPIO92_MII_CRS,
> +       GPIO93_MII_COL,
> +       GPIO94_RX_CLK,
> +       GPIO95_RX_ER,
> +       GPIO96_RX_DQ3,
> +       GPIO97_RX_DQ2,
> +       GPIO98_RX_DQ1,
> +       GPIO99_RX_DQ0,
> +       GPIO100_MII_MDC,
> +       GPIO101_MII_MDIO,
> +       GPIO103_RX_DV,
> +       GPIO104_GPIO,     /* Reset PHY */
> +
> +       /* RTC interrupt */
> +       GPIO102_GPIO,
> +
> +       /* I2C */
> +       GPIO105_CI2C_SDA,
> +       GPIO106_CI2C_SCL,
> +
> +       /* Select JTAG */
> +       GPIO109_GPIO,
> +
> +       /* I2S */
> +       GPIO114_I2S_FRM,
> +       GPIO115_I2S_BCLK,
> +       GPIO116_I2S_TXD
> +};
> +
> +static struct i2c_board_info gplugd_i2c_board_info[] = {
> +       {
> +               .type = "isl1208",
> +               .addr = 0x6F,
> +       }
> +};
> +
> +/* Bring PHY out of reset by setting GPIO 104 */
> +static int gplugd_eth_init(void)
> +{
> +       if (unlikely(gpio_request(104, "ETH_RESET_N"))) {
> +               printk(KERN_ERR "Can't get hold of GPIO 104 to bring Ethernet "
> +                               "PHY out of reset\n");
> +               return -EIO;
> +       }
> +
> +       gpio_direction_output(104, 1);
> +       gpio_free(104);
> +       return 0;
> +}
> +
> +struct pxa168_eth_platform_data gplugd_eth_platform_data = {
> +       .port_number = 0,
> +       .phy_addr    = 0,
> +       .speed       = 0, /* Autonagotiation */
> +       .init        = gplugd_eth_init,
> +};
> +
> +static void __init select_disp_freq(void)
> +{
> +       /* set GPIO 35 & clear GPIO 85 to set LCD External Clock to 74.25 MHz */
> +       if (unlikely(gpio_request(35, "DISP_FREQ_SEL"))) {
> +               printk(KERN_ERR "Can't get hold of GPIO 35 to select display "
> +                               "frequency\n");
> +       } else {
> +               gpio_direction_output(35, 1);
> +               gpio_free(104);
> +       }
> +
> +       if (unlikely(gpio_request(85, "DISP_FREQ_SEL_2"))) {
> +               printk(KERN_ERR "Can't get hold of GPIO 85 to select display "
> +                               "frequency\n");
> +       } else {
> +               gpio_direction_output(85, 0);
> +               gpio_free(104);
> +       }
> +}
> +
> +static void __init gplugd_init(void)
> +{
> +       mfp_config(ARRAY_AND_SIZE(gplugd_pin_config));
> +
> +       select_disp_freq();
> +
> +       /* on-chip devices */
> +       pxa168_add_uart(3);
> +       pxa168_add_ssp(0);
> +       pxa168_add_twsi(0, NULL, ARRAY_AND_SIZE(gplugd_i2c_board_info));
> +
> +       pxa168_add_eth(&gplugd_eth_platform_data);
> +}
> +
> +MACHINE_START(SHEEVAD, "PXA168-based GuruPlug Display (gplugD) Platform")
> +       .map_io         = mmp_map_io,
> +       .nr_irqs        = IRQ_BOARD_START,
> +       .init_irq       = pxa168_init_irq,
> +       .timer          = &pxa168_timer,
> +       .init_machine   = gplugd_init,
> +MACHINE_END
> diff --git a/arch/arm/mach-mmp/include/mach/mfp-gplugd.h b/arch/arm/mach-mmp/include/mach/mfp-gplugd.h
> new file mode 100644
> index 0000000..b8cf38d
> --- /dev/null
> +++ b/arch/arm/mach-mmp/include/mach/mfp-gplugd.h
> @@ -0,0 +1,52 @@
> +/*
> + * linux/arch/arm/mach-mmp/include/mach/mfp-gplugd.h
> + *
> + *   MFP definitions used in gplugD
> + *
> + * 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.
> + */
> +
> +#ifndef __MACH_MFP_GPLUGD_H
> +#define __MACH_MFP_GPLUGD_H
> +
> +#include <plat/mfp.h>
> +#include <mach/mfp.h>
> +
> +/* UART3 */
> +#define GPIO8_UART3_SOUT       MFP_CFG(GPIO8, AF2)
> +#define GPIO9_UART3_SIN        MFP_CFG(GPIO9, AF2)
> +#define GPI1O_UART3_CTS        MFP_CFG(GPIO10, AF2)
> +#define GPI11_UART3_RTS        MFP_CFG(GPIO11, AF2)
> +
> +/* MMC2 */
> +#define        GPIO28_MMC2_CMD         MFP_CFG_DRV(GPIO28, AF6, FAST)
> +#define        GPIO29_MMC2_CLK         MFP_CFG_DRV(GPIO29, AF6, FAST)
> +#define        GPIO30_MMC2_DAT0        MFP_CFG_DRV(GPIO30, AF6, FAST)
> +#define        GPIO31_MMC2_DAT1        MFP_CFG_DRV(GPIO31, AF6, FAST)
> +#define        GPIO32_MMC2_DAT2        MFP_CFG_DRV(GPIO32, AF6, FAST)
> +#define        GPIO33_MMC2_DAT3        MFP_CFG_DRV(GPIO33, AF6, FAST)
> +
> +/* I2S */
> +#undef GPIO114_I2S_FRM
> +#undef GPIO115_I2S_BCLK
> +
> +#define GPIO114_I2S_FRM                MFP_CFG_DRV(GPIO114, AF1, FAST)
> +#define GPIO115_I2S_BCLK        MFP_CFG_DRV(GPIO115, AF1, FAST)
> +#define GPIO116_I2S_TXD         MFP_CFG_DRV(GPIO116, AF1, FAST)
> +
> +/* MMC4 */
> +#define GPIO125_MMC4_DAT3       MFP_CFG_DRV(GPIO125, AF7, FAST)
> +#define GPIO126_MMC4_DAT2       MFP_CFG_DRV(GPIO126, AF7, FAST)
> +#define GPIO127_MMC4_DAT1       MFP_CFG_DRV(GPIO127, AF7, FAST)
> +#define GPIO0_2_MMC4_DAT0       MFP_CFG_DRV(GPIO0_2, AF7, FAST)
> +#define GPIO1_2_MMC4_CMD        MFP_CFG_DRV(GPIO1_2, AF7, FAST)
> +#define GPIO2_2_MMC4_CLK        MFP_CFG_DRV(GPIO2_2, AF7, FAST)
> +
> +/* OTG GPIO */
> +#define GPIO_USB_OTG_PEN        18
> +#define GPIO_USB_OIDIR          20
> +
> +/* Other GPIOs are 35, 84, 85 */
> +#endif /* __MACH_MFP_GPLUGD_H */
> --
> 1.7.0.4
>
>



More information about the linux-arm-kernel mailing list