Hi Otavio, On 02/05/2014 00:02, Otavio Salvador wrote: > This adds support for the 7" WVGA produced by Future Eletronics and > make it dynamically detect if it is connected or not based on the > touchscreen controller. > > Signed-off-by: Otavio Salvador <ota...@ossystems.com.br> > --- > > Changes in v3: > - Drop LVDS related code (unused) > > Changes in v2: > - Drop LDB related code (unused) > > board/wandboard/wandboard.c | 147 > ++++++++++++++++++++++++++++++++++++-------- > include/configs/wandboard.h | 7 +++ > 2 files changed, 128 insertions(+), 26 deletions(-) > > diff --git a/board/wandboard/wandboard.c b/board/wandboard/wandboard.c > index f1951dc..311a442 100644 > --- a/board/wandboard/wandboard.c > +++ b/board/wandboard/wandboard.c > @@ -1,5 +1,6 @@ > /* > * Copyright (C) 2013 Freescale Semiconductor, Inc. > + * Copyright (C) 2014 O.S. Systems Software LTDA. > * > * Author: Fabio Estevam <fabio.este...@freescale.com> > * > @@ -15,18 +16,19 @@ > #include <asm/arch/sys_proto.h> > #include <asm/gpio.h> > #include <asm/imx-common/iomux-v3.h> > +#include <asm/imx-common/mxc_i2c.h> > #include <asm/imx-common/boot_mode.h> > +#include <asm/imx-common/video.h> > #include <asm/io.h> > #include <linux/sizes.h> > #include <common.h> > #include <fsl_esdhc.h> > -#include <ipu_pixfmt.h> > #include <mmc.h> > #include <miiphy.h> > #include <netdev.h> > -#include <linux/fb.h> > #include <phy.h> > #include <input.h> > +#include <i2c.h> > > DECLARE_GLOBAL_DATA_PTR; > > @@ -41,6 +43,10 @@ DECLARE_GLOBAL_DATA_PTR; > #define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ > PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS) > > +#define I2C_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ > + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ > + PAD_CTL_ODE | PAD_CTL_SRE_FAST) > + > #define USDHC1_CD_GPIO IMX_GPIO_NR(1, 2) > #define USDHC3_CD_GPIO IMX_GPIO_NR(3, 9) > #define ETH_PHY_RESET IMX_GPIO_NR(3, 29) > @@ -210,41 +216,124 @@ int board_phy_config(struct phy_device *phydev) > } > > #if defined(CONFIG_VIDEO_IPUV3) > -static struct fb_videomode const hdmi = { > - .name = "HDMI", > - .refresh = 60, > - .xres = 1024, > - .yres = 768, > - .pixclock = 15385, > - .left_margin = 220, > - .right_margin = 40, > - .upper_margin = 21, > - .lower_margin = 7, > - .hsync_len = 60, > - .vsync_len = 10, > - .sync = FB_SYNC_EXT, > - .vmode = FB_VMODE_NONINTERLACED > +struct i2c_pads_info i2c2_pad_info = { > + .scl = { > + .i2c_mode = MX6_PAD_KEY_COL3__I2C2_SCL > + | MUX_PAD_CTRL(I2C_PAD_CTRL), > + .gpio_mode = MX6_PAD_KEY_COL3__GPIO4_IO12 > + | MUX_PAD_CTRL(I2C_PAD_CTRL), > + .gp = IMX_GPIO_NR(4, 12) > + }, > + .sda = { > + .i2c_mode = MX6_PAD_KEY_ROW3__I2C2_SDA > + | MUX_PAD_CTRL(I2C_PAD_CTRL), > + .gpio_mode = MX6_PAD_KEY_ROW3__GPIO4_IO13 > + | MUX_PAD_CTRL(I2C_PAD_CTRL), > + .gp = IMX_GPIO_NR(4, 13) > + } > }; > > -int board_video_skip(void) > -{ > - int ret; > +static iomux_v3_cfg_t const fwadapt_7wvga_pads[] = { > + MX6_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK, > + MX6_PAD_DI0_PIN2__IPU1_DI0_PIN02, /* HSync */ > + MX6_PAD_DI0_PIN3__IPU1_DI0_PIN03, /* VSync */ > + MX6_PAD_DI0_PIN4__IPU1_DI0_PIN04 > + | MUX_PAD_CTRL(PAD_CTL_DSE_120ohm), /* Contrast */ > + MX6_PAD_DI0_PIN15__IPU1_DI0_PIN15, /* DISP0_DRDY */ > + > + MX6_PAD_DISP0_DAT0__IPU1_DISP0_DATA00, > + MX6_PAD_DISP0_DAT1__IPU1_DISP0_DATA01, > + MX6_PAD_DISP0_DAT2__IPU1_DISP0_DATA02, > + MX6_PAD_DISP0_DAT3__IPU1_DISP0_DATA03, > + MX6_PAD_DISP0_DAT4__IPU1_DISP0_DATA04, > + MX6_PAD_DISP0_DAT5__IPU1_DISP0_DATA05, > + MX6_PAD_DISP0_DAT6__IPU1_DISP0_DATA06, > + MX6_PAD_DISP0_DAT7__IPU1_DISP0_DATA07, > + MX6_PAD_DISP0_DAT8__IPU1_DISP0_DATA08, > + MX6_PAD_DISP0_DAT9__IPU1_DISP0_DATA09, > + MX6_PAD_DISP0_DAT10__IPU1_DISP0_DATA10, > + MX6_PAD_DISP0_DAT11__IPU1_DISP0_DATA11, > + MX6_PAD_DISP0_DAT12__IPU1_DISP0_DATA12, > + MX6_PAD_DISP0_DAT13__IPU1_DISP0_DATA13, > + MX6_PAD_DISP0_DAT14__IPU1_DISP0_DATA14, > + MX6_PAD_DISP0_DAT15__IPU1_DISP0_DATA15, > + MX6_PAD_DISP0_DAT16__IPU1_DISP0_DATA16, > + MX6_PAD_DISP0_DAT17__IPU1_DISP0_DATA17, > + > + MX6_PAD_SD4_DAT2__GPIO2_IO10 > + | MUX_PAD_CTRL(NO_PAD_CTRL), /* DISP0_BKLEN */ > + MX6_PAD_SD4_DAT3__GPIO2_IO11 > + | MUX_PAD_CTRL(NO_PAD_CTRL), /* DISP0_VDDEN */ > +}; > > - ret = ipuv3_fb_init(&hdmi, 0, IPU_PIX_FMT_RGB24); > +static void do_enable_hdmi(struct display_info_t const *dev) > +{ > + imx_enable_hdmi_phy(); > +} > > - if (ret) { > - printf("HDMI cannot be configured: %d\n", ret); > - return ret; > - } > +static int detect_i2c(struct display_info_t const *dev) > +{ > + return (0 == i2c_set_bus_num(dev->bus)) && > + (0 == i2c_probe(dev->addr)); > +} > > - imx_enable_hdmi_phy(); > +static void enable_fwadapt_7wvga(struct display_info_t const *dev) > +{ > + imx_iomux_v3_setup_multiple_pads( > + fwadapt_7wvga_pads, > + ARRAY_SIZE(fwadapt_7wvga_pads)); > > - return ret; > + gpio_direction_output(IMX_GPIO_NR(2, 10), 1); > + gpio_direction_output(IMX_GPIO_NR(2, 11), 1); > } > > +struct display_info_t const displays[] = {{ > + .bus = -1, > + .addr = 0, > + .pixfmt = IPU_PIX_FMT_RGB24, > + .detect = detect_hdmi, > + .enable = do_enable_hdmi, > + .mode = { > + .name = "HDMI", > + .refresh = 60, > + .xres = 1024, > + .yres = 768, > + .pixclock = 15385, > + .left_margin = 220, > + .right_margin = 40, > + .upper_margin = 21, > + .lower_margin = 7, > + .hsync_len = 60, > + .vsync_len = 10, > + .sync = FB_SYNC_EXT, > + .vmode = FB_VMODE_NONINTERLACED > +} }, { > + .bus = 1, > + .addr = 0x10, > + .pixfmt = IPU_PIX_FMT_RGB666, > + .detect = detect_i2c, > + .enable = enable_fwadapt_7wvga, > + .mode = { > + .name = "FWBADAPT-LCD-F07A-0102", > + .refresh = 60, > + .xres = 800, > + .yres = 480, > + .pixclock = 33260, > + .left_margin = 128, > + .right_margin = 128, > + .upper_margin = 22, > + .lower_margin = 22, > + .hsync_len = 1, > + .vsync_len = 1, > + .sync = 0, > + .vmode = FB_VMODE_NONINTERLACED > +} } }; > +size_t display_count = ARRAY_SIZE(displays); > + > static void setup_display(void) > { > struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; > + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; > int reg; > > enable_ipu_clock(); > @@ -254,6 +343,10 @@ static void setup_display(void) > reg |= (CHSCCDR_CLK_SEL_LDB_DI0 > << MXC_CCM_CHSCCDR_IPU1_DI0_CLK_SEL_OFFSET); > writel(reg, &mxc_ccm->chsccdr); > + > + /* Disable LCD backlight */ > + imx_iomux_v3_setup_pad(MX6_PAD_DI0_PIN4__GPIO4_IO20); > + gpio_direction_input(IMX_GPIO_NR(4, 20)); > } > #endif /* CONFIG_VIDEO_IPUV3 */ > > @@ -305,6 +398,8 @@ int board_init(void) > /* address of boot parameters */ > gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; > > + setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &i2c2_pad_info); > + > return 0; > } > > diff --git a/include/configs/wandboard.h b/include/configs/wandboard.h > index a49544f..6defc00 100644 > --- a/include/configs/wandboard.h > +++ b/include/configs/wandboard.h > @@ -58,6 +58,12 @@ > #define CONFIG_LOADADDR 0x12000000 > #define CONFIG_SYS_TEXT_BASE 0x17800000 > > +/* I2C Configs */ > +#define CONFIG_CMD_I2C > +#define CONFIG_SYS_I2C > +#define CONFIG_SYS_I2C_MXC > +#define CONFIG_SYS_I2C_SPEED 100000 > + > /* MMC Configuration */ > #define CONFIG_FSL_ESDHC > #define CONFIG_FSL_USDHC > @@ -116,6 +122,7 @@ > #define CONFIG_VIDEO_BMP_LOGO > #define CONFIG_IPUV3_CLK 260000000 > #define CONFIG_IMX_HDMI > +#define CONFIG_IMX_VIDEO_SKIP > > #if defined(CONFIG_MX6DL) || defined(CONFIG_MX6S) > #define CONFIG_DEFAULT_FDT_FILE "imx6dl-wandboard.dtb" >
Acked-by: Stefano Babic <sba...@denx.de> Put in my list for merging. Best regards, Stefano Babic -- ===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de ===================================================================== _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot