All of lore.kernel.org
 help / color / mirror / Atom feed
From: <Gireesh.Hiremath@in.bosch.com>
To: <u-boot@lists.denx.de>, <Gireesh.Hiremath@in.bosch.com>,
	<trini@konsulko.com>
Cc: <sjoerd.simons@collabora.co.uk>,
	<VinayKumar.Shettar@in.bosch.com>,
	<Govindaraji.Sivanantham@in.bosch.com>
Subject: [PATCH v3 16/19] am335x, guardian: Enable panel driver Himax HX8238D
Date: Fri, 28 May 2021 09:30:27 +0000	[thread overview]
Message-ID: <20210528093030.1483-17-Gireesh.Hiremath@in.bosch.com> (raw)
In-Reply-To: <20210528093030.1483-1-Gireesh.Hiremath@in.bosch.com>

From: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>

- Enable lcd controller
- Display splash screen

Signed-off-by: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>
---
 arch/arm/dts/am335x-guardian-u-boot.dtsi | 11 +++
 arch/arm/dts/am335x-guardian.dts         |  8 ++-
 arch/arm/mach-omap2/am33xx/Kconfig       |  2 +
 board/bosch/guardian/board.c             | 87 +++++++++++++++++++++++-
 board/bosch/guardian/mux.c               |  3 +-
 include/configs/am335x_guardian.h        | 11 +++
 6 files changed, 119 insertions(+), 3 deletions(-)

diff --git a/arch/arm/dts/am335x-guardian-u-boot.dtsi b/arch/arm/dts/am335x-guardian-u-boot.dtsi
index 986f58e664..a1a7913de8 100644
--- a/arch/arm/dts/am335x-guardian-u-boot.dtsi
+++ b/arch/arm/dts/am335x-guardian-u-boot.dtsi
@@ -42,6 +42,17 @@
 	u-boot,dm-pre-reloc;
 };
 
+&spi0 {
+	lcd0: display@0 {
+		compatible = "himax,hx8238d";
+		pinctrl-names = "default";
+		pinctrl-0 = <&lcd0_pins>;
+		reg = <0>;
+		label = "lcd";
+		spi-max-frequency = <100000>;
+	};
+};
+
 &uart0 {
 	u-boot,dm-pre-reloc;
 };
diff --git a/arch/arm/dts/am335x-guardian.dts b/arch/arm/dts/am335x-guardian.dts
index 207246b4e0..69bee45848 100644
--- a/arch/arm/dts/am335x-guardian.dts
+++ b/arch/arm/dts/am335x-guardian.dts
@@ -87,7 +87,7 @@
 			ac-bias           = <255>;
 			ac-bias-intrpt    = <0>;
 			dma-burst-sz      = <16>;
-			bpp               = <24>;
+			bpp               = <16>;
 			bus-width         = <16>;
 			fdd               = <0x80>;
 			sync-edge         = <0>;
@@ -247,6 +247,12 @@
 &lcdc {
 	blue-and-red-wiring = "crossed";
 	status = "okay";
+
+	port {
+		lcdc_0: endpoint@0 {
+			remote-endpoint = <0>;
+		};
+	};
 };
 
 &mmc1 {
diff --git a/arch/arm/mach-omap2/am33xx/Kconfig b/arch/arm/mach-omap2/am33xx/Kconfig
index 11e54cd293..65f43944fe 100644
--- a/arch/arm/mach-omap2/am33xx/Kconfig
+++ b/arch/arm/mach-omap2/am33xx/Kconfig
@@ -95,6 +95,8 @@ config TARGET_AM335X_GUARDIAN
 	select DM_SERIAL
 	select DM_GPIO
 	select DM_USB
+	select DM_VIDEO
+	select DM_PANEL_HX8238D
 
 config TARGET_AM335X_SL50
 	bool "Support am335x_sl50"
diff --git a/board/bosch/guardian/board.c b/board/bosch/guardian/board.c
index 6e6221ca60..03740c08b9 100644
--- a/board/bosch/guardian/board.c
+++ b/board/bosch/guardian/board.c
@@ -25,12 +25,16 @@
 #include <asm/arch/gpio.h>
 #include <asm/arch/hardware.h>
 #include <asm/arch/mem-guardian.h>
-#include <asm/arch/mmc_host_def.h>
 #include <asm/arch/omap.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/emif.h>
 #include <asm/gpio.h>
 #include <asm/io.h>
+#include <jffs2/load_kernel.h>
+#include <mtd.h>
+#include <nand.h>
+#include <video.h>
+#include <video_console.h>
 #include "board.h"
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -249,13 +253,94 @@ void lcdbacklight_en(void)
 			   brightness != 0 ? 0x0A : 0x02, 0xFF);
 }
 
+#if IS_ENABLED(CONFIG_AM335X_LCD)
+static void splash_screen(void)
+{
+	struct udevice *video_dev;
+	struct udevice *console_dev;
+	struct video_priv *vid_priv;
+	struct mtd_info *mtd;
+	size_t len;
+	int ret;
+
+	struct mtd_device *mtd_dev;
+	struct part_info  *part;
+	u8 pnum;
+
+	ret = uclass_get_device(UCLASS_VIDEO, 0, &video_dev);
+	if (ret != 0) {
+		debug("video device not found\n");
+		goto exit;
+	}
+
+	vid_priv = dev_get_uclass_priv(video_dev);
+	mtdparts_init();
+
+	if (find_dev_and_part(SPLASH_SCREEN_NAND_PART, &mtd_dev, &pnum, &part))	{
+		debug("Could not find nand partition\n");
+		goto splash_screen_text;
+	}
+
+	mtd = get_nand_dev_by_index(mtd_dev->id->num);
+	if (!mtd) {
+		debug("MTD partition is not valid\n");
+		goto splash_screen_text;
+	}
+
+	len = SPLASH_SCREEN_BMP_FILE_SIZE;
+	ret = nand_read_skip_bad(mtd, part->offset, &len, NULL,
+				 SPLASH_SCREEN_BMP_FILE_SIZE,
+				 (u_char *)SPLASH_SCREEN_BMP_LOAD_ADDR);
+	if (ret != 0) {
+		debug("Reading NAND partition failed\n");
+		goto splash_screen_text;
+	}
+
+	ret = video_bmp_display(video_dev, SPLASH_SCREEN_BMP_LOAD_ADDR, 0, 0, false);
+	if (ret != 0) {
+		debug("No valid bmp image found!!\n");
+		goto splash_screen_text;
+	} else {
+		goto exit;
+	}
+
+splash_screen_text:
+	vid_priv->colour_fg = CONSOLE_COLOR_RED;
+	vid_priv->colour_bg = CONSOLE_COLOR_BLACK;
+
+	if (!uclass_first_device_err(UCLASS_VIDEO_CONSOLE, &console_dev)) {
+		debug("Found console\n");
+		vidconsole_position_cursor(console_dev, 17, 7);
+		vidconsole_put_string(console_dev, SPLASH_SCREEN_TEXT);
+	} else {
+		debug("No console device found\n");
+	}
+
+exit:
+	return;
+}
+#endif /* CONFIG_AM335X_LCD */
+
 int board_late_init(void)
 {
+	int ret;
+	struct udevice *cdev;
+
 #ifdef CONFIG_LED_GPIO
 	led_default_state();
 #endif
 	set_bootmode_env();
+
+	ret = uclass_get_device(UCLASS_PANEL, 0, &cdev);
+	if (ret) {
+		debug("video panel not found: %d\n", ret);
+		return ret;
+	}
+
 	lcdbacklight_en();
+	if (IS_ENABLED(CONFIG_AM335X_LCD))
+		splash_screen();
+
 	return 0;
 }
 #endif /* CONFIG_BOARD_LATE_INIT */
diff --git a/board/bosch/guardian/mux.c b/board/bosch/guardian/mux.c
index 9c81f29f9f..12c3eb666f 100644
--- a/board/bosch/guardian/mux.c
+++ b/board/bosch/guardian/mux.c
@@ -28,8 +28,9 @@ static struct module_pin_mux i2c0_pin_mux[] = {
 
 static struct module_pin_mux guardian_interfaces_pin_mux[] = {
 	{OFFSET(mcasp0_ahclkx), (MODE(7) | PULLDOWN_EN)},
+	{OFFSET(mii1_txen),     (MODE(7) | PULLDOWN_EN)},
 	{OFFSET(mcasp0_aclkx),  (MODE(7) | PULLUP_EN)},
-	{OFFSET(mii1_txd0),     (MODE(7) | PULLUP_EN)},
+	{OFFSET(mdio_clk),      (MODE(7) | PULLUP_EN)},
 	{OFFSET(uart1_rxd),     (MODE(7) | RXACTIVE | PULLUDDIS)},
 	{OFFSET(uart1_txd),     (MODE(7) | PULLUDDIS)},
 	{OFFSET(mii1_crs),      (MODE(7) | PULLDOWN_EN)},
diff --git a/include/configs/am335x_guardian.h b/include/configs/am335x_guardian.h
index 08a9ac950c..ef73446466 100644
--- a/include/configs/am335x_guardian.h
+++ b/include/configs/am335x_guardian.h
@@ -86,6 +86,17 @@
 
 #endif /* ! CONFIG_SPL_BUILD */
 
+#define CONFIG_BMP_16BPP
+#define SPLASH_SCREEN_NAND_PART "nand0,10"
+#define SPLASH_SCREEN_BMP_FILE_SIZE 0x26000
+#define SPLASH_SCREEN_BMP_LOAD_ADDR 0x82000000
+#define SPLASH_SCREEN_TEXT "U-Boot"
+
+/* BGR 16Bit Color Definitions */
+#define CONSOLE_COLOR_BLACK 0x0000
+#define CONSOLE_COLOR_WHITE 0xFFFF
+#define CONSOLE_COLOR_RED 0x001F
+
 /* NS16550 Configuration */
 #define CONFIG_SYS_NS16550_COM1		0x44e09000	/* UART0 */
 #define CONFIG_SYS_NS16550_COM2		0x48022000	/* UART1 */
-- 
2.20.1


  parent reply	other threads:[~2021-05-28  9:34 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-28  9:30 [PATCH v3 00/19] am335x, guardian: update board specific changes Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 01/19] configs: am335x_guardian: Enable clock driver Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 02/19] am335x, guardian: mem: Add board dependent mem values Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 03/19] configs: am335x_guardian: add ubi fastmap support Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 04/19] am335x, guardian: set tftp_load_addr in environment Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 05/19] configs: am335x_guardian: add memtest configs Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 06/19] am335x, guardian: add memtest address range Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 07/19] am335x, guardian: Update pinmux configuration Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 08/19] am335x, guardian: set environment variable autoload to no Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 09/19] am335x, guardian: code cleanup and boot optimization Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 10/19] configs: am335x_guardian: set boot delay Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 11/19] configs: am335x_guardian: disable spl command Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 12/19] am335x, guardian: update swi logic Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 13/19] am335x, guardian: Enable backlight Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 14/19] configs: am335x_guardian: Enable display config Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 15/19] drivers: video: hx8238 fix build bug Gireesh.Hiremath
2021-05-28  9:30 ` Gireesh.Hiremath [this message]
2021-05-28  9:30 ` [PATCH v3 17/19] am335x, guardian: software update available status is stored in AM3352 RTC scracth register Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 18/19] configs: am335x_guardian: Enable bootcount nvmem support Gireesh.Hiremath
2021-05-28  9:30 ` [PATCH v3 19/19] configs: am335x_guardian: add register maps support Gireesh.Hiremath
2021-06-07 11:27 ` [PATCH v3 00/19] am335x, guardian: update board specific changes Lokesh Vutla

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=20210528093030.1483-17-Gireesh.Hiremath@in.bosch.com \
    --to=gireesh.hiremath@in.bosch.com \
    --cc=Govindaraji.Sivanantham@in.bosch.com \
    --cc=VinayKumar.Shettar@in.bosch.com \
    --cc=sjoerd.simons@collabora.co.uk \
    --cc=trini@konsulko.com \
    --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.