public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH 0/2] Add Support for Himax HX8238D Display Panel
@ 2021-01-06 15:31 Gireesh.Hiremath at in.bosch.com
  2021-01-06 15:31 ` [PATCH 1/2] drivers: video: Add Support for Himax HX8238D Panel Gireesh.Hiremath at in.bosch.com
  2021-01-06 15:31 ` [PATCH 2/2] am335x, guardian: Enable panel driver Himax HX8238D Gireesh.Hiremath at in.bosch.com
  0 siblings, 2 replies; 5+ messages in thread
From: Gireesh.Hiremath at in.bosch.com @ 2021-01-06 15:31 UTC (permalink / raw)
  To: u-boot

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

Add diaplsy panel driver for Himax HX8238D with
* SPI based initialization for HX8238D
* Resolution: 320x240
* Color-Mode: RGB

Enable the HX8238D driver for am335x, guardian board
with related clocks, pinmux, config, interface and port

Gireesh Hiremath (1):
  am335x, guardian: Enable panel driver Himax HX8238D

Moses Christopher (1):
  drivers: video: Add Support for Himax HX8238D Panel

 arch/arm/dts/am335x-guardian-u-boot.dtsi |  15 ++
 arch/arm/dts/am335x-guardian.dts         |   8 +-
 arch/arm/mach-omap2/am33xx/Kconfig       |   2 +
 board/bosch/guardian/board.c             |  22 +++
 board/bosch/guardian/mux.c               |   3 +-
 configs/am335x_guardian_defconfig        |   7 +-
 drivers/video/Kconfig                    |  10 ++
 drivers/video/Makefile                   |   2 +
 drivers/video/hx8238d.c                  | 197 +++++++++++++++++++++++
 9 files changed, 262 insertions(+), 4 deletions(-)
 create mode 100644 drivers/video/hx8238d.c

-- 
2.20.1

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] drivers: video: Add Support for Himax HX8238D Panel
  2021-01-06 15:31 [PATCH 0/2] Add Support for Himax HX8238D Display Panel Gireesh.Hiremath at in.bosch.com
@ 2021-01-06 15:31 ` Gireesh.Hiremath at in.bosch.com
  2021-02-22 18:45   ` Anatolij Gustschin
  2021-01-06 15:31 ` [PATCH 2/2] am335x, guardian: Enable panel driver Himax HX8238D Gireesh.Hiremath at in.bosch.com
  1 sibling, 1 reply; 5+ messages in thread
From: Gireesh.Hiremath at in.bosch.com @ 2021-01-06 15:31 UTC (permalink / raw)
  To: u-boot

From: Moses Christopher <BollavarapuMoses.Christopher@in.bosch.com>

* SPI based initialization for HX8238D
* Resolution: 320x240
* Color-Mode: RGB

* Initial Work is done by Sjoerd Simons
  https://gitlab.apertis.org/packaging/u-boot/-/blob\
  /5f259720e3e64965d50da89a841ad6eb256a47df/debian/patches\
  /apertis/powertools/0005-video-Add-Himax-HX8238-D-driver.patch

* Tested on Bosch Guardian Board

Cc: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Signed-off-by: Moses Christopher <BollavarapuMoses.Christopher@in.bosch.com>
---
 drivers/video/Kconfig   |  10 ++
 drivers/video/Makefile  |   1 +
 drivers/video/hx8238d.c | 197 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 208 insertions(+)
 create mode 100644 drivers/video/hx8238d.c

diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 998271b9b6..60cc0f65e2 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -160,6 +160,16 @@ config CONSOLE_TRUETYPE
 	  With this option you can adjust the text size and use a variety of
 	  fonts. Note that this is noticeably slower than with normal console.
 
+config DM_PANEL_HX8238D
+	bool "Enable Himax HX-8238D LCD driver"
+	depends on DM_VIDEO
+	help
+	  Support for HX-8238D LCD Panel
+	  The  HX8238-D is a single chip controller and driver LSI that
+	  integrates the power circuit.
+	  It can drive a maximum 960x240 dot graphics on a-TFT panel
+	  displays in 16M colors with dithering.
+
 config CONSOLE_TRUETYPE_SIZE
 	int "TrueType font size"
 	depends on CONSOLE_TRUETYPE
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 67a492a2d6..e670d8f862 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -70,6 +70,7 @@ obj-$(CONFIG_VIDEO_SIMPLE) += simplefb.o
 obj-$(CONFIG_VIDEO_TEGRA20) += tegra.o
 obj-$(CONFIG_VIDEO_VCXK) += bus_vcxk.o
 obj-$(CONFIG_VIDEO_VESA) += vesa.o
+obj-$(CONFIG_PANEL_HX8238D) += hx8238d.o
 
 obj-y += bridge/
 obj-y += sunxi/
diff --git a/drivers/video/hx8238d.c b/drivers/video/hx8238d.c
new file mode 100644
index 0000000000..f7e7753a53
--- /dev/null
+++ b/drivers/video/hx8238d.c
@@ -0,0 +1,197 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copied from simple-panel
+ * Copyright (c) 2016 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ * Copyright (c) 2018 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
+ * Modified by Moses Christopher <BollavarapuMoses.Christopher@in.bosch.com>
+ *
+ * Panel Initialization for HX8238D panel from Himax
+ * Resolution: 320x240
+ * Color-Mode: RGB
+ *
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <panel.h>
+#include <spi.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* Register Address */
+#define HX8238D_OUTPUT_CTRL_ADDR        0x01
+#define HX8238D_LCD_AC_CTRL_ADDR        0x02
+#define HX8238D_POWER_CTRL_1_ADDR       0x03
+#define HX8238D_DATA_CLR_CTRL_ADDR      0X04
+#define HX8238D_FUNCTION_CTRL_ADDR      0x05
+#define HX8238D_LED_CTRL_ADDR           0x08
+#define HX8238D_CONT_BRIGHT_CTRL_ADDR   0x0A
+#define HX8238D_FRAME_CYCLE_CTRL_ADDR   0x0B
+#define HX8238D_POWER_CTRL_2_ADDR       0x0D
+#define HX8238D_POWER_CTRL_3_ADDR       0x0E
+#define HX8238D_GATE_SCAN_POS_ADDR      0x0F
+#define HX8238D_HORIZONTAL_PORCH_ADDR   0x16
+#define HX8238D_VERTICAL_PORCH_ADDR     0x17
+#define HX8238D_POWER_CTRL_4_ADDR       0x1E
+#define HX8238D_GAMMA_CTRL_1_ADDR       0x30
+#define HX8238D_GAMMA_CTRL_2_ADDR       0x31
+#define HX8238D_GAMMA_CTRL_3_ADDR       0x32
+#define HX8238D_GAMMA_CTRL_4_ADDR       0x33
+#define HX8238D_GAMMA_CTRL_5_ADDR       0x34
+#define HX8238D_GAMMA_CTRL_6_ADDR       0x35
+#define HX8238D_GAMMA_CTRL_7_ADDR       0x36
+#define HX8238D_GAMMA_CTRL_8_ADDR       0x37
+#define HX8238D_GAMMA_CTRL_9_ADDR       0x3A
+#define HX8238D_GAMMA_CTRL_10_ADDR      0x3B
+
+/* Register Data */
+#define HX8238D_OUTPUT_CTRL             0x6300
+#define HX8238D_LCD_AC_CTRL             0x0200
+#define HX8238D_POWER_CTRL_1            0x6564
+#define HX8238D_DATA_CLR_CTRL           0x04C7
+#define HX8238D_FUNCTION_CTRL           0xA884
+#define HX8238D_LED_CTRL                0x00CE
+#define HX8238D_CONT_BRIGHT_CTRL        0x4008
+#define HX8238D_FRAME_CYCLE_CTRL        0xD400
+#define HX8238D_POWER_CTRL_2            0x3229
+#define HX8238D_POWER_CTRL_3            0x1200
+#define HX8238D_GATE_SCAN_POS           0x0000
+#define HX8238D_HORIZONTAL_PORCH        0x9F80
+#define HX8238D_VERTICAL_PORCH          0x3F02
+#define HX8238D_POWER_CTRL_4            0x005C
+
+/* Gamma Control */
+#define HX8238D_GAMMA_CTRL_1            0x0103
+#define HX8238D_GAMMA_CTRL_2            0x0407
+#define HX8238D_GAMMA_CTRL_3            0x0705
+#define HX8238D_GAMMA_CTRL_4            0x0002
+#define HX8238D_GAMMA_CTRL_5            0x0505
+#define HX8238D_GAMMA_CTRL_6            0x0303
+#define HX8238D_GAMMA_CTRL_7            0x0707
+#define HX8238D_GAMMA_CTRL_8            0x0100
+#define HX8238D_GAMMA_CTRL_9            0x1F00
+#define HX8238D_GAMMA_CTRL_10           0x000F
+
+/* Primary SPI register identification, 011100 */
+/* Select register, RS=0, RS=0 */
+/* Write  register, RS=1, RW=0 */
+#define HX8238D_PRIMARY_SELECT_REG 0x70
+#define HX8238D_PRIMARY_WRITE_REG  (HX8238D_PRIMARY_SELECT_REG | (0x1 << 1))
+
+#define HX8238D_REG_BIT_LEN        24
+
+struct hx8238d_priv {
+	struct spi_slave *spi;
+};
+
+static int hx8238d_ofdata_to_platdata(struct udevice *dev)
+{
+	struct hx8238d_priv *priv = dev_get_priv(dev);
+
+	priv->spi = dev_get_parent_priv(dev);
+
+	return 0;
+}
+
+/* data[0] => REGISTER ADDRESS */
+/* data[1] => REGISTER VALUE   */
+struct hx8238d_command {
+	u16 data[2];
+};
+
+static struct hx8238d_command hx8238d_init_commands[] = {
+	{ .data = { HX8238D_OUTPUT_CTRL_ADDR,      HX8238D_OUTPUT_CTRL } },
+	{ .data = { HX8238D_LCD_AC_CTRL_ADDR,      HX8238D_LCD_AC_CTRL } },
+	{ .data = { HX8238D_POWER_CTRL_1_ADDR,     HX8238D_POWER_CTRL_1 } },
+	{ .data = { HX8238D_DATA_CLR_CTRL_ADDR,    HX8238D_DATA_CLR_CTRL } },
+	{ .data = { HX8238D_FUNCTION_CTRL_ADDR,    HX8238D_FUNCTION_CTRL } },
+	{ .data = { HX8238D_LED_CTRL_ADDR,         HX8238D_LED_CTRL } },
+	{ .data = { HX8238D_CONT_BRIGHT_CTRL_ADDR, HX8238D_CONT_BRIGHT_CTRL } },
+	{ .data = { HX8238D_FRAME_CYCLE_CTRL_ADDR, HX8238D_FRAME_CYCLE_CTRL } },
+	{ .data = { HX8238D_POWER_CTRL_2_ADDR,     HX8238D_POWER_CTRL_2 } },
+	{ .data = { HX8238D_POWER_CTRL_3_ADDR,     HX8238D_POWER_CTRL_3 } },
+	{ .data = { HX8238D_GATE_SCAN_POS_ADDR,    HX8238D_GATE_SCAN_POS } },
+	{ .data = { HX8238D_HORIZONTAL_PORCH_ADDR, HX8238D_HORIZONTAL_PORCH } },
+	{ .data = { HX8238D_VERTICAL_PORCH_ADDR,   HX8238D_VERTICAL_PORCH } },
+	{ .data = { HX8238D_POWER_CTRL_4_ADDR,     HX8238D_POWER_CTRL_4 } },
+	{ .data = { HX8238D_GAMMA_CTRL_1_ADDR,     HX8238D_GAMMA_CTRL_1 } },
+	{ .data = { HX8238D_GAMMA_CTRL_2_ADDR,     HX8238D_GAMMA_CTRL_2 } },
+	{ .data = { HX8238D_GAMMA_CTRL_3_ADDR,     HX8238D_GAMMA_CTRL_3 } },
+	{ .data = { HX8238D_GAMMA_CTRL_4_ADDR,     HX8238D_GAMMA_CTRL_4 } },
+	{ .data = { HX8238D_GAMMA_CTRL_5_ADDR,     HX8238D_GAMMA_CTRL_5 } },
+	{ .data = { HX8238D_GAMMA_CTRL_6_ADDR,     HX8238D_GAMMA_CTRL_6 } },
+	{ .data = { HX8238D_GAMMA_CTRL_7_ADDR,     HX8238D_GAMMA_CTRL_7 } },
+	{ .data = { HX8238D_GAMMA_CTRL_8_ADDR,     HX8238D_GAMMA_CTRL_8 } },
+	{ .data = { HX8238D_GAMMA_CTRL_9_ADDR,     HX8238D_GAMMA_CTRL_9 } },
+	{ .data = { HX8238D_GAMMA_CTRL_10_ADDR,    HX8238D_GAMMA_CTRL_10 } },
+};
+
+/*
+ * Generate Primary Register Buffer for Register Select and Register Write
+ * First 6 MSB bits of Primary Register is represented with 011100
+ *
+ */
+static void hx8238d_generate_reg_buffers(struct hx8238d_command command,
+					 u8 *sr_buf, uint8_t *wr_buf)
+{
+	struct hx8238d_command cmd = command;
+
+	sr_buf[0] = HX8238D_PRIMARY_SELECT_REG;
+	sr_buf[1] = (cmd.data[0] >> 8) & 0xff;
+	sr_buf[2] = (cmd.data[0]) & 0xff;
+
+	wr_buf[0] = HX8238D_PRIMARY_WRITE_REG;
+	wr_buf[1] = (cmd.data[1] >> 8) & 0xff;
+	wr_buf[2] = (cmd.data[1]) & 0xff;
+}
+
+static int hx8238d_probe(struct udevice *dev)
+{
+	struct hx8238d_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	ret = spi_claim_bus(priv->spi);
+	if (ret) {
+		debug("Failed to claim bus: %d\n", ret);
+		return ret;
+	}
+
+	for (int i = 0; i < ARRAY_SIZE(hx8238d_init_commands); i++) {
+		u8 sr_buf[3], wr_buf[3];
+		const struct hx8238d_command cmd = hx8238d_init_commands[i];
+
+		hx8238d_generate_reg_buffers(cmd, sr_buf, wr_buf);
+		ret = spi_xfer(priv->spi, HX8238D_REG_BIT_LEN, sr_buf, NULL,
+			       SPI_XFER_BEGIN | SPI_XFER_END);
+		if (ret) {
+			debug("Failed to select register %d\n", ret);
+			goto free;
+		}
+
+		ret = spi_xfer(priv->spi, HX8238D_REG_BIT_LEN, wr_buf, NULL,
+			       SPI_XFER_BEGIN | SPI_XFER_END);
+		if (ret) {
+			debug("Failed to write value %d\n", ret);
+			goto free;
+		}
+	}
+
+free:
+	spi_release_bus(priv->spi);
+	return ret;
+}
+
+static const struct udevice_id hx8238d_ids[] = {
+	{ .compatible = "himax,hx8238d" },
+	{ }
+};
+
+U_BOOT_DRIVER(hx8238d) = {
+	.name = "hx8238d",
+	.id = UCLASS_PANEL,
+	.of_match = hx8238d_ids,
+	.ofdata_to_platdata = hx8238d_ofdata_to_platdata,
+	.probe = hx8238d_probe,
+	.priv_auto_alloc_size = sizeof(struct hx8238d_priv),
+};
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] am335x, guardian: Enable panel driver Himax HX8238D
  2021-01-06 15:31 [PATCH 0/2] Add Support for Himax HX8238D Display Panel Gireesh.Hiremath at in.bosch.com
  2021-01-06 15:31 ` [PATCH 1/2] drivers: video: Add Support for Himax HX8238D Panel Gireesh.Hiremath at in.bosch.com
@ 2021-01-06 15:31 ` Gireesh.Hiremath at in.bosch.com
  2021-01-17 10:49   ` Lokesh Vutla
  1 sibling, 1 reply; 5+ messages in thread
From: Gireesh.Hiremath at in.bosch.com @ 2021-01-06 15:31 UTC (permalink / raw)
  To: u-boot

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

Enable lcd controller related clocks, pinmux, config,
interface and port

Signed-off-by: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>
---
 arch/arm/dts/am335x-guardian-u-boot.dtsi | 15 +++++++++++++++
 arch/arm/dts/am335x-guardian.dts         |  8 +++++++-
 arch/arm/mach-omap2/am33xx/Kconfig       |  2 ++
 board/bosch/guardian/board.c             | 22 ++++++++++++++++++++++
 board/bosch/guardian/mux.c               |  3 ++-
 configs/am335x_guardian_defconfig        |  7 +++++--
 drivers/video/Makefile                   |  1 +
 7 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/arch/arm/dts/am335x-guardian-u-boot.dtsi b/arch/arm/dts/am335x-guardian-u-boot.dtsi
index 705ef335bf..2c355e583c 100644
--- a/arch/arm/dts/am335x-guardian-u-boot.dtsi
+++ b/arch/arm/dts/am335x-guardian-u-boot.dtsi
@@ -18,6 +18,10 @@
 	u-boot,dm-pre-reloc;
 };
 
+&lcdc {
+	u-boot,dm-pre-reloc;
+};
+
 &mmc1 {
 	u-boot,dm-pre-reloc;
 };
@@ -35,6 +39,17 @@
 	u-boot,dm-pre-reloc;
 };
 
+&spi0 {
+	lcd0: display at 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 7e70a96d25..93ee2e6c09 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 at 0 {
+			remote-endpoint = <0>;
+		};
+	};
 };
 
 &mmc1 {
diff --git a/arch/arm/mach-omap2/am33xx/Kconfig b/arch/arm/mach-omap2/am33xx/Kconfig
index 9a98e8a0a9..204975092a 100644
--- a/arch/arm/mach-omap2/am33xx/Kconfig
+++ b/arch/arm/mach-omap2/am33xx/Kconfig
@@ -94,6 +94,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 8b3c82cafd..f3e616d21c 100644
--- a/board/bosch/guardian/board.c
+++ b/board/bosch/guardian/board.c
@@ -79,6 +79,18 @@ void am33xx_spl_board_init(void)
 	int mpu_vdd;
 	int usb_cur_lim;
 
+	struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER;
+
+	/*enable lcd controller related clocks*/
+	u32 *const clk_domains[] = { 0 };
+
+	u32 *const clk_modules_xre1specific[] = {
+		&cmper->lcdclkctrl,
+		&cmper->lcdcclkstctrl,
+		0
+	};
+	do_enable_clocks(clk_domains, clk_modules_xre1specific, 1);
+
 	/* Get the frequency */
 	dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev);
 
@@ -235,10 +247,20 @@ err:
 
 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;
+	}
+
 	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/configs/am335x_guardian_defconfig b/configs/am335x_guardian_defconfig
index d412311cec..b7170cd79e 100644
--- a/configs/am335x_guardian_defconfig
+++ b/configs/am335x_guardian_defconfig
@@ -50,8 +50,6 @@ CONFIG_CMD_MTD=y
 CONFIG_CMD_NAND=y
 CONFIG_CMD_USB=y
 # CONFIG_CMD_SETEXPR is not set
-CONFIG_BOOTP_DNS2=y
-# CONFIG_CMD_LED is not set
 CONFIG_CMD_EXT4_WRITE=y
 CONFIG_CMD_MTDPARTS=y
 CONFIG_MTDPARTS_DEFAULT="mtdparts=nand.0:256k(SPL),256k(SPL.backup1),256k(SPL.backup2),256k(SPL.backup3),1m(u-boot),1m(u-boot.backup1),1m(u-boot-2),1m(u-boot-2.backup1),256k(u-boot-env),256k(u-boot-env.backup1),256k(splash-screen),-(UBI)"
@@ -86,6 +84,10 @@ CONFIG_PHY=y
 CONFIG_NOP_PHY=y
 CONFIG_PINCTRL=y
 CONFIG_PINCTRL_SINGLE=y
+# CONFIG_RAM_ROCKCHIP_DEBUG is not set
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_OMAP3_SPI=y
 CONFIG_USB=y
 CONFIG_DM_USB_GADGET=y
 CONFIG_SPL_DM_USB_GADGET=y
@@ -98,6 +100,7 @@ CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments"
 CONFIG_USB_GADGET_VENDOR_NUM=0x0451
 CONFIG_USB_GADGET_PRODUCT_NUM=0xd022
 CONFIG_USB_ETHER=y
+CONFIG_AM335X_LCD=y
 CONFIG_SPL_WDT=y
 # CONFIG_SPL_USE_TINY_PRINTF is not set
 CONFIG_SPL_OF_LIBFDT=y
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index e670d8f862..b13c8c7296 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_DM_VIDEO) += video-uclass.o vidconsole-uclass.o
 obj-$(CONFIG_DM_VIDEO) += video_bmp.o
 obj-$(CONFIG_PANEL) += panel-uclass.o
 obj-$(CONFIG_SIMPLE_PANEL) += simple_panel.o
+obj-$(CONFIG_DM_PANEL_HX8238D) += hx8238d.o
 endif
 
 obj-${CONFIG_EXYNOS_FB} += exynos/
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] am335x, guardian: Enable panel driver Himax HX8238D
  2021-01-06 15:31 ` [PATCH 2/2] am335x, guardian: Enable panel driver Himax HX8238D Gireesh.Hiremath at in.bosch.com
@ 2021-01-17 10:49   ` Lokesh Vutla
  0 siblings, 0 replies; 5+ messages in thread
From: Lokesh Vutla @ 2021-01-17 10:49 UTC (permalink / raw)
  To: u-boot



On 06/01/21 9:01 pm, Gireesh.Hiremath at in.bosch.com wrote:
> From: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>
> 
> Enable lcd controller related clocks, pinmux, config,
> interface and port
> 
> Signed-off-by: Gireesh Hiremath <Gireesh.Hiremath@in.bosch.com>
> ---
>  arch/arm/dts/am335x-guardian-u-boot.dtsi | 15 +++++++++++++++
>  arch/arm/dts/am335x-guardian.dts         |  8 +++++++-
>  arch/arm/mach-omap2/am33xx/Kconfig       |  2 ++
>  board/bosch/guardian/board.c             | 22 ++++++++++++++++++++++
>  board/bosch/guardian/mux.c               |  3 ++-
>  configs/am335x_guardian_defconfig        |  7 +++++--
>  drivers/video/Makefile                   |  1 +
>  7 files changed, 54 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/dts/am335x-guardian-u-boot.dtsi b/arch/arm/dts/am335x-guardian-u-boot.dtsi
> index 705ef335bf..2c355e583c 100644
> --- a/arch/arm/dts/am335x-guardian-u-boot.dtsi
> +++ b/arch/arm/dts/am335x-guardian-u-boot.dtsi
> @@ -18,6 +18,10 @@
>  	u-boot,dm-pre-reloc;
>  };
>  
> +&lcdc {
> +	u-boot,dm-pre-reloc;
> +};
> +
>  &mmc1 {
>  	u-boot,dm-pre-reloc;
>  };
> @@ -35,6 +39,17 @@
>  	u-boot,dm-pre-reloc;
>  };
>  
> +&spi0 {
> +	lcd0: display at 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 7e70a96d25..93ee2e6c09 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 at 0 {
> +			remote-endpoint = <0>;
> +		};
> +	};
>  };
>  
>  &mmc1 {
> diff --git a/arch/arm/mach-omap2/am33xx/Kconfig b/arch/arm/mach-omap2/am33xx/Kconfig
> index 9a98e8a0a9..204975092a 100644
> --- a/arch/arm/mach-omap2/am33xx/Kconfig
> +++ b/arch/arm/mach-omap2/am33xx/Kconfig
> @@ -94,6 +94,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 8b3c82cafd..f3e616d21c 100644
> --- a/board/bosch/guardian/board.c
> +++ b/board/bosch/guardian/board.c
> @@ -79,6 +79,18 @@ void am33xx_spl_board_init(void)
>  	int mpu_vdd;
>  	int usb_cur_lim;
>  
> +	struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER;
> +
> +	/*enable lcd controller related clocks*/
> +	u32 *const clk_domains[] = { 0 };
> +
> +	u32 *const clk_modules_xre1specific[] = {
> +		&cmper->lcdclkctrl,
> +		&cmper->lcdcclkstctrl,
> +		0
> +	};
> +	do_enable_clocks(clk_domains, clk_modules_xre1specific, 1);

I am worried this is going to effect other platforms. Recently CLK support is
introduced for am33 platforms. Can you use that and get clocks info from DT.

Thanks and regards,
Lokesh

> +
>  	/* Get the frequency */
>  	dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev);
>  
> @@ -235,10 +247,20 @@ err:
>  
>  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;
> +	}
> +
>  	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/configs/am335x_guardian_defconfig b/configs/am335x_guardian_defconfig
> index d412311cec..b7170cd79e 100644
> --- a/configs/am335x_guardian_defconfig
> +++ b/configs/am335x_guardian_defconfig
> @@ -50,8 +50,6 @@ CONFIG_CMD_MTD=y
>  CONFIG_CMD_NAND=y
>  CONFIG_CMD_USB=y
>  # CONFIG_CMD_SETEXPR is not set
> -CONFIG_BOOTP_DNS2=y
> -# CONFIG_CMD_LED is not set
>  CONFIG_CMD_EXT4_WRITE=y
>  CONFIG_CMD_MTDPARTS=y
>  CONFIG_MTDPARTS_DEFAULT="mtdparts=nand.0:256k(SPL),256k(SPL.backup1),256k(SPL.backup2),256k(SPL.backup3),1m(u-boot),1m(u-boot.backup1),1m(u-boot-2),1m(u-boot-2.backup1),256k(u-boot-env),256k(u-boot-env.backup1),256k(splash-screen),-(UBI)"
> @@ -86,6 +84,10 @@ CONFIG_PHY=y
>  CONFIG_NOP_PHY=y
>  CONFIG_PINCTRL=y
>  CONFIG_PINCTRL_SINGLE=y
> +# CONFIG_RAM_ROCKCHIP_DEBUG is not set
> +CONFIG_SPI=y
> +CONFIG_DM_SPI=y
> +CONFIG_OMAP3_SPI=y
>  CONFIG_USB=y
>  CONFIG_DM_USB_GADGET=y
>  CONFIG_SPL_DM_USB_GADGET=y
> @@ -98,6 +100,7 @@ CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments"
>  CONFIG_USB_GADGET_VENDOR_NUM=0x0451
>  CONFIG_USB_GADGET_PRODUCT_NUM=0xd022
>  CONFIG_USB_ETHER=y
> +CONFIG_AM335X_LCD=y
>  CONFIG_SPL_WDT=y
>  # CONFIG_SPL_USE_TINY_PRINTF is not set
>  CONFIG_SPL_OF_LIBFDT=y
> diff --git a/drivers/video/Makefile b/drivers/video/Makefile
> index e670d8f862..b13c8c7296 100644
> --- a/drivers/video/Makefile
> +++ b/drivers/video/Makefile
> @@ -16,6 +16,7 @@ obj-$(CONFIG_DM_VIDEO) += video-uclass.o vidconsole-uclass.o
>  obj-$(CONFIG_DM_VIDEO) += video_bmp.o
>  obj-$(CONFIG_PANEL) += panel-uclass.o
>  obj-$(CONFIG_SIMPLE_PANEL) += simple_panel.o
> +obj-$(CONFIG_DM_PANEL_HX8238D) += hx8238d.o
>  endif
>  
>  obj-${CONFIG_EXYNOS_FB} += exynos/
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] drivers: video: Add Support for Himax HX8238D Panel
  2021-01-06 15:31 ` [PATCH 1/2] drivers: video: Add Support for Himax HX8238D Panel Gireesh.Hiremath at in.bosch.com
@ 2021-02-22 18:45   ` Anatolij Gustschin
  0 siblings, 0 replies; 5+ messages in thread
From: Anatolij Gustschin @ 2021-02-22 18:45 UTC (permalink / raw)
  To: u-boot

On Wed, 6 Jan 2021 15:31:35 +0000
Gireesh.Hiremath at in.bosch.com Gireesh.Hiremath at in.bosch.com wrote:
...
> * Tested on Bosch Guardian Board
> 
> Cc: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
> Signed-off-by: Moses Christopher <BollavarapuMoses.Christopher@in.bosch.com>
> ---
>  drivers/video/Kconfig   |  10 ++
>  drivers/video/Makefile  |   1 +
>  drivers/video/hx8238d.c | 197 ++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 208 insertions(+)
>  create mode 100644 drivers/video/hx8238d.c

Applied to u-boot-video/master, thanks!

--
Anatolij

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-02-22 18:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-06 15:31 [PATCH 0/2] Add Support for Himax HX8238D Display Panel Gireesh.Hiremath at in.bosch.com
2021-01-06 15:31 ` [PATCH 1/2] drivers: video: Add Support for Himax HX8238D Panel Gireesh.Hiremath at in.bosch.com
2021-02-22 18:45   ` Anatolij Gustschin
2021-01-06 15:31 ` [PATCH 2/2] am335x, guardian: Enable panel driver Himax HX8238D Gireesh.Hiremath at in.bosch.com
2021-01-17 10:49   ` Lokesh Vutla

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox