Hello Stefano,

added Anatolij to cc for the rotate logo question ...

Am 08.05.2015 13:19, schrieb Stefano Babic:
Hi Heiko,

On 12/04/2015 10:24, Heiko Schocher wrote:
add support for imx6dl based aristainetos2 board

U-Boot 2015.04-rc5-00066-g60f6ed4 (Apr 10 2015 - 08:46:27)

CPU:   Freescale i.MX6DL rev1.1 at 792 MHz
Reset cause: WDOG
Board: aristaitenos2
        Watchdog enabled
I2C:   ready
DRAM:  1 GiB
NAND:  1024 MiB
MMC:   FSL_SDHC: 0
SF: Detected N25Q128A with page size 256 Bytes, erase size 64 KiB, total 16 MiB
Display: lg4573 (480x800)
In:    serial
Out:   serial
Err:   serial
Net:   FEC [PRIME]
Hit any key to stop autoboot:  0
=>

Signed-off-by: Heiko Schocher <h...@denx.de>
---

  arch/arm/Kconfig                      |   5 +
  board/aristainetos2/Kconfig           |  12 +
  board/aristainetos2/MAINTAINERS       |   6 +
  board/aristainetos2/Makefile          |  12 +
  board/aristainetos2/aristainetos2.c   | 917 ++++++++++++++++++++++++++++++++++
  board/aristainetos2/aristainetos2.cfg |  34 ++
  board/aristainetos2/axi.cfg           |  22 +
  board/aristainetos2/clocks.cfg        |  24 +
  board/aristainetos2/ddr-setup.cfg     |  59 +++
  board/aristainetos2/nt5cc256m16cp.cfg |  60 +++
  configs/aristainetos2_defconfig       |   3 +
  include/configs/aristainetos2.h       | 351 +++++++++++++
  12 files changed, 1505 insertions(+)
  create mode 100644 board/aristainetos2/Kconfig
  create mode 100644 board/aristainetos2/MAINTAINERS
  create mode 100644 board/aristainetos2/Makefile
  create mode 100644 board/aristainetos2/aristainetos2.c
  create mode 100644 board/aristainetos2/aristainetos2.cfg
  create mode 100644 board/aristainetos2/axi.cfg
  create mode 100644 board/aristainetos2/clocks.cfg
  create mode 100644 board/aristainetos2/ddr-setup.cfg
  create mode 100644 board/aristainetos2/nt5cc256m16cp.cfg
  create mode 100644 configs/aristainetos2_defconfig
  create mode 100644 include/configs/aristainetos2.h

[...]
diff --git a/board/aristainetos2/aristainetos2.c 
b/board/aristainetos2/aristainetos2.c
new file mode 100644
index 0000000..98e1bc7
--- /dev/null
+++ b/board/aristainetos2/aristainetos2.c
@@ -0,0 +1,917 @@
[...]
+struct i2c_pads_info i2c_pad_info4 = {
+       .scl = {
+               .i2c_mode = MX6_PAD_GPIO_7__I2C4_SCL | PC,
+               .gpio_mode = MX6_PAD_GPIO_7__GPIO1_IO07 | PC,
+               .gp = IMX_GPIO_NR(1, 7)
+       },
+       .sda = {
+               .i2c_mode = MX6_PAD_GPIO_8__I2C4_SDA | PC,
+               .gpio_mode = MX6_PAD_GPIO_8__GPIO1_IO08 | PC,
+               .gp = IMX_GPIO_NR(1, 8)
+       }
+};
+
+static int lgdisplay;

It looks like strange to pass a parameter via a global variable. No
other way ?

Hmm.. yes, I can check the "panel" environmentvariable ... changed.

+
+int dram_init(void)
+{
+       gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
+
+       return 0;
+}
[...]
+int board_phy_config(struct phy_device *phydev)
+{
+#if defined(CONFIG_PHY_MICREL_KSZ9031)

Is there another possibly phy chip ? If not, can we get rid of the #ifdef ?

No other phy ... removed.

+       /* control data pad skew - devaddr = 0x02, register = 0x04 */
+       ksz9031_phy_extended_write(phydev, 0x02,
+                                  MII_KSZ9031_EXT_RGMII_CTRL_SIG_SKEW,
+                                  MII_KSZ9031_MOD_DATA_NO_POST_INC, 0x0000);
+       /* rx data pad skew - devaddr = 0x02, register = 0x05 */
+       ksz9031_phy_extended_write(phydev, 0x02,
+                                  MII_KSZ9031_EXT_RGMII_RX_DATA_SKEW,
+                                  MII_KSZ9031_MOD_DATA_NO_POST_INC, 0x0000);
+       /* tx data pad skew - devaddr = 0x02, register = 0x06 */
+       ksz9031_phy_extended_write(phydev, 0x02,
+                                  MII_KSZ9031_EXT_RGMII_TX_DATA_SKEW,
+                                  MII_KSZ9031_MOD_DATA_NO_POST_INC, 0x0000);
+       /* gtx and rx clock pad skew - devaddr = 0x02, register = 0x08 */
+       ksz9031_phy_extended_write(phydev, 0x02,
+                                  MII_KSZ9031_EXT_RGMII_CLOCK_SKEW,
+                                  MII_KSZ9031_MOD_DATA_NO_POST_INC, 0x03FF);
+#endif /* CONFIG_PHY_MICREL_KSZ9031 */
[...]
+/*
+ * Rotate the BMP_LOGO (only)
+ * Will only work, if the logo is square, as
+ * BMP_LOGO_HEIGHT and BMP_LOGO_WIDTH are defines, not variables
+ */
+void rotate_logo(int rotations)
+{
+       unsigned char out_logo[BMP_LOGO_WIDTH * BMP_LOGO_HEIGHT];
+       unsigned char *in_logo;
+       int   i, j;
+
+       if (BMP_LOGO_WIDTH != BMP_LOGO_HEIGHT)
+               return;
+
+       in_logo = bmp_logo_bitmap;
+
+       /* one 90 degree rotation */
+       if (rotations == 1  ||  rotations == 2  ||  rotations == 3)
+               rotate_logo_one(out_logo, in_logo);
+
+       /* second 90 degree rotation */
+       if (rotations == 2  ||  rotations == 3)
+               rotate_logo_one(in_logo, out_logo);
+
+       /* third 90 degree rotation */
+       if (rotations == 3)
+               rotate_logo_one(out_logo, in_logo);
+
+       /* copy result back to original array */
+       if (rotations == 1  ||  rotations == 3)
+               for (i = 0; i < BMP_LOGO_WIDTH; i++)
+                       for (j = 0; j < BMP_LOGO_HEIGHT; j++)
+                               in_logo[i * BMP_LOGO_WIDTH + j] =
+                               out_logo[i * BMP_LOGO_WIDTH + j];
+}
+#endif

Should we put this code in a more common location ? As candidate I see
common/lcd_console_rotation.c or drivers/video/cfb_console.c

I am unsure, as the logo must be a square ... added Anatolij to
Cc ... @Anatolij: What do you think, has such a function a chance
(and if yes, where is the best place for it?)

+
+static void enable_display_power(void)
+{
+       imx_iomux_v3_setup_multiple_pads(backlight_pads,
+                                        ARRAY_SIZE(backlight_pads));
+
+       /* backlight enable */
+       gpio_direction_output(IMX_GPIO_NR(6, 31), 1);
+       /* LCD power enable */
+       gpio_direction_output(IMX_GPIO_NR(6, 15), 1);
+
+       /* enable backlight PWM 1 */
+       if (pwm_init(0, 0, 0))
+               goto error;
+       /* duty cycle 500ns, period: 3000ns */
+       if (pwm_config(0, 50000, 300000))
+               goto error;
+       if (pwm_enable(0))
+               goto error;
+       return;
+
+error:
+       puts("error init pwm for backlight\n");
+       return;
+}
[...]
+static void enable_spi(struct display_info_t const *dev)
+{

Names are just a little confusing. There is a setup_spi and enable_spi,
and it takes a bit to understand that enable_spi is only for display.
You could rename enable_spi with a name related to video/display.

enable_spi_display ?

+       struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR;
+       struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
+       int reg;
+       s32 timeout = 100000;
+
+#if defined(CONFIG_VIDEO_BMP_LOGO)
+       rotate_logo(3);  /* portrait display in landscape mode */
+#endif
+
+       lgdisplay = 1;
+       ipu_set_ldb_clock(28341000);

Where is coming from this value ? Can you add a comment for it ?

This is coming from the displays parameters, IIRC I got them from
the customer ... I try to get this info and add some more info into
a comment.

+
+       reg = readl(&ccm->cs2cdr);
+
+       /* select pll 5 clock */
+       reg &= ~(MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK
+               | MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK);
+       writel(reg, &ccm->cs2cdr);
+
[...]
+#endif                         /* __ARISTAINETOS2_CONFIG_H */


Best regards,
Stefano Babic

Thanks for your review!

bye,
Heiko
--
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to