All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 1/2] wandboard: add Future Eletronics 7" WVGA LCD extension board
Date: Mon, 05 May 2014 15:11:58 +0200	[thread overview]
Message-ID: <53678E1E.1000404@denx.de> (raw)
In-Reply-To: <1398981752-22895-1-git-send-email-otavio@ossystems.com.br>

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 <otavio@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.estevam@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 <sbabic@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: sbabic at denx.de
=====================================================================

  parent reply	other threads:[~2014-05-05 13:11 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-01 22:02 [U-Boot] [PATCH v3 1/2] wandboard: add Future Eletronics 7" WVGA LCD extension board Otavio Salvador
2014-05-01 22:02 ` [U-Boot] [PATCH v3 2/2] wandboard: Pass video kernel arguments for HDMI and LCD Otavio Salvador
2014-05-09 13:22   ` Stefano Babic
2014-05-05 13:11 ` Stefano Babic [this message]
2014-05-09 13:22 ` [U-Boot] [PATCH v3 1/2] wandboard: add Future Eletronics 7" WVGA LCD extension board Stefano Babic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53678E1E.1000404@denx.de \
    --to=sbabic@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.