diff --git a/patch/u-boot/u-boot-sunxi/pinebook-add-rare-panel-support.patch b/patch/u-boot/u-boot-sunxi/pinebook-add-rare-panel-support.patch new file mode 100644 index 0000000000..98d896e7a6 --- /dev/null +++ b/patch/u-boot/u-boot-sunxi/pinebook-add-rare-panel-support.patch @@ -0,0 +1,136 @@ +$NetBSD$ + +--- a/drivers/video/bridge/anx6345.c ++++ b/drivers/video/bridge/anx6345.c +@@ -3,6 +3,8 @@ + * Copyright (C) 2017 Vasily Khoruzhick + */ + ++#define DEBUG ++ + #include + #include + #include +@@ -248,13 +250,77 @@ static int anx6345_read_dpcd(struct udev + return 0; + } + ++static u8 pinebook14_edid[] = { ++ /* Header */ ++ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, ++ /* ID Manufacturer Name */ ++ 0x09, 0xe5, ++ /* ID Product Code */ ++ 0x37, 0x00, ++ /* 32-bit serial No. */ ++ 0x00, 0x00, 0x00, 0x00, ++ /* Week of manufacture */ ++ 0x01, ++ /* Year of manufacture */ ++ 0x16, ++ /* EDID Structure Ver. */ ++ 0x01, ++ /* EDID revision # */ ++ 0x04, ++ /* Video input definition */ ++ 0x80, ++ /* Max H image size */ ++ 0x1f, ++ /* Max V image size */ ++ 0x11, ++ /* Display Gamma */ ++ 0x78, ++ /* Feature support */ ++ 0x0a, ++ /* Color bits */ ++ 0xb0, 0x90, 0x97, 0x58, 0x54, 0x92, 0x26, 0x1d, 0x50, 0x54, ++ /* Established timings */ ++ 0x00, 0x00, 0x00, ++ /* Standard timings */ ++ 0x01, 0x01, ++ 0x01, 0x01, ++ 0x01, 0x01, ++ 0x01, 0x01, ++ 0x01, 0x01, ++ 0x01, 0x01, ++ 0x01, 0x01, ++ 0x01, 0x01, ++ /* Detailed timing/monitor descriptor #1 */ ++ 0x3e, 0x1c, 0x56, 0xa0, 0x50, 0x00, 0x16, 0x30, ++ 0x30, 0x20, 0x36, 0x00, 0x35, 0xad, 0x10, 0x00, ++ 0x00, 0x1a, ++ /* Detailed timing/monitor descriptor #2 */ ++ 0x3e, 0x1c, 0x56, 0xa0, 0x50, 0x00, 0x16, 0x30, ++ 0x30, 0x20, 0x36, 0x00, 0x35, 0xad, 0x10, 0x00, ++ 0x00, 0x1a, ++ /* Detailed timing/monitor descriptor #3 */ ++ 0x00, 0x00, 0x00, 0xfe, 0x00, 0x42, 0x4f, 0x45, ++ 0x20, 0x48, 0x46, 0x0a, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, ++ /* Detailed timing/monitor descriptor #4 */ ++ 0x00, 0x00, 0x00, 0xfe, 0x00, 0x48, 0x42, 0x31, ++ 0x34, 0x30, 0x57, 0x58, 0x31, 0x2d, 0x35, 0x30, ++ 0x31, 0x0a, ++ /* Extension flag */ ++ 0x00, ++ /* Checksum */ ++ 0x81 ++}; ++ + static int anx6345_read_edid(struct udevice *dev, u8 *buf, int size) + { +- struct anx6345_priv *priv = dev_get_priv(dev); +- + if (size > EDID_SIZE) + size = EDID_SIZE; +- memcpy(buf, priv->edid, size); ++ ++ if (anx6345_read_aux_i2c(dev, 0x50, 0x0, size, buf) != 0) { ++ debug("%s: EDID read failed, using static EDID\n", __func__); ++ memcpy(buf, pinebook14_edid, size); ++ } + + return size; + } +@@ -268,7 +334,7 @@ static int anx6345_attach(struct udevice + static int anx6345_enable(struct udevice *dev) + { + u8 chipid, colordepth, lanes, data_rate, c; +- int ret, i, bpp; ++ int ret, i; + struct display_timing timing; + struct anx6345_priv *priv = dev_get_priv(dev); + +@@ -336,27 +402,19 @@ static int anx6345_enable(struct udevice + anx6345_write_r0(dev, ANX9804_HDCP_CONTROL_0_REG, 0x00); + anx6345_write_r0(dev, 0xa7, 0x00); + +- anx6345_read_aux_i2c(dev, 0x50, 0x0, EDID_SIZE, priv->edid); +- if (edid_get_timing(priv->edid, EDID_SIZE, &timing, &bpp) != 0) { +- debug("Failed to parse EDID\n"); +- return -EIO; +- } +- debug("%s: panel found: %dx%d, bpp %d\n", __func__, +- timing.hactive.typ, timing.vactive.typ, bpp); +- if (bpp == 6) +- colordepth = 0x00; /* 6 bit */ +- else +- colordepth = 0x10; /* 8 bit */ ++ /* XXXJDM hard-coded for HB140WX1-501 14" TFT-LCD */ ++ colordepth = 0x00; /* 6 bit */ ++ + anx6345_write_r1(dev, ANX9804_VID_CTRL2_REG, colordepth); + + if (anx6345_read_dpcd(dev, DP_MAX_LINK_RATE, &data_rate)) { + debug("%s: Failed to DP_MAX_LINK_RATE\n", __func__); +- return -EIO; ++ data_rate = 10; + } + debug("%s: data_rate: %d\n", __func__, (int)data_rate); + if (anx6345_read_dpcd(dev, DP_MAX_LANE_COUNT, &lanes)) { + debug("%s: Failed to read DP_MAX_LANE_COUNT\n", __func__); +- return -EIO; ++ lanes = 1; + } + lanes &= DP_MAX_LANE_COUNT_MASK; + debug("%s: lanes: %d\n", __func__, (int)lanes);