* [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