build/patch/kernel/sunxi-next/board-a64-r40-v3-10-24-drm-sun4i-tcon-Generalize-engine-search-algorithm.patch
Igor Pečovnik 1a12994e79
Moving sunxi-next to 4.17.y (#1049)
* [Early WIP] Update sunxi-next to kernel 4.17
* Switch Allwinner 32 and 64bit to U-boot 2018.05
* Adjust patched for 4.17.y / sunxi-next
- adjust both configurations
- removing FAT support from u-boot (breaks if you try to save)

Tested those boards:
Cubietruck: wlan fails http://ix.io/1fYS USB OK, HDMI yes
Bananapi R40: http://ix.io/1fZm USB OK, HDMI yes
Lime A64: USB no, HDMI no, wireless buggy, eMMC yes
Orangepi prime H5: OK http://ix.io/1fZJ DVFS no
Orangepi2e: DVFS OK, HDMI OK, net OK, wifi OK, eMMC ok,  http://ix.io/1fZT

* Kernel config update, enabling HDMI on CT+
* Trying to fix A64 HDMI but failed. Fixed M64 ethernet instead
* Update orangepioneplus.wip
* Update orangepioneplus.wip
* Fix H6 build process
* Add regulator bits for Orangepizero+, thanks to @5kft
* add H5 support for optional 1.3v regulator and 1.3GHz operation
This patch adds two optional overlays that can be used to:

1) enable the 1.1v/1.3v regulator on boards that provide the necessary compatible H/W support
2) modify the default CPU clock operating table to add new 1.2GHz and 1.3GHz clocks

Note that the generated regulator overlay will only support boards whose 1.1v/1.3v regulator
is controlled by GPIO PL6.
* updates for the NanoPi NEO Plus2
This change introduces a patch that provides two changes for the NanoPi NEO Plus2:
* Configure the "cpu0" to use the "vdd_cpux" regulator; this enables the ability to use higher CPU clocks
* Correct the configurations of the on-board power and status LEDs
* Adjust nightly building and few boards config cleanup
2018-07-17 15:53:30 +02:00

52 lines
1.8 KiB
Diff

diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
index 08747fc3ee71..264bcc43da11 100644
--- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
+++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
@@ -791,12 +791,14 @@ static int sun4i_tcon_init_regmap(struct device *dev,
*/
static struct sunxi_engine *
sun4i_tcon_find_engine_traverse(struct sun4i_drv *drv,
- struct device_node *node)
+ struct device_node *node,
+ u32 port_id)
{
struct device_node *port, *ep, *remote;
struct sunxi_engine *engine = ERR_PTR(-EINVAL);
+ u32 reg = 0;
- port = of_graph_get_port_by_id(node, 0);
+ port = of_graph_get_port_by_id(node, port_id);
if (!port)
return ERR_PTR(-EINVAL);
@@ -826,8 +828,20 @@ sun4i_tcon_find_engine_traverse(struct sun4i_drv *drv,
if (remote == engine->node)
goto out_put_remote;
+ /*
+ * According to device tree binding input ports have even id
+ * number and output ports have odd id. Since component with
+ * more than one input and one output (TCON TOP) exits, correct
+ * remote input id has to be calculated by subtracting 1 from
+ * remote output id. If this for some reason can't be done, 0
+ * is used as input port id.
+ */
+ port = of_graph_get_remote_port(ep);
+ if (!of_property_read_u32(port, "reg", &reg) && reg > 0)
+ reg -= 1;
+
/* keep looking through upstream ports */
- engine = sun4i_tcon_find_engine_traverse(drv, remote);
+ engine = sun4i_tcon_find_engine_traverse(drv, remote, reg);
out_put_remote:
of_node_put(remote);
@@ -950,7 +964,7 @@ static struct sunxi_engine *sun4i_tcon_find_engine(struct sun4i_drv *drv,
/* Fallback to old method by traversing input endpoints */
of_node_put(port);
- return sun4i_tcon_find_engine_traverse(drv, node);
+ return sun4i_tcon_find_engine_traverse(drv, node, 0);
}
static int sun4i_tcon_bind(struct device *dev, struct device *master,