Merge tag 'drm-misc-next-2017-04-07' of git://anongit.freedesktop.org/git/drm-misc into drm-next
Last drm-misc-next pull req for 4.12 Core changes: - fb_helper checkpatch cleanup and simplified _add_one_connector() (Thierry) - drm_ioctl and drm_sysfs improved/gained documentation (Daniel) - [ABI] Repurpose reserved field in drm_event_vblank for crtc_id (Ander) - Plumb acquire ctx through legacy paths to avoid lock_all and legacy_backoff (Daniel) - Add connector_atomic_check to check conn constraints on modeset (Maarten) - Add drm_of_find_panel_or_bridge to remove boilerplate in drivers (Rob) Driver changes: - meson moved to drm-misc (Neil) - Added support for Amlogic GX SoCs in dw-hdmi (Neil) - Rockchip unbind actually cleans up the things bind initializes (Jeffy) - A couple misc fixes in virtio, dw-hdmi NOTE: this also includes a backmerge of drm-next as well rc5 (we needed vmwgfx as well as the new synopsys media formats) * tag 'drm-misc-next-2017-04-07' of git://anongit.freedesktop.org/git/drm-misc: (77 commits) Revert "drm: Don't allow interruptions when opening debugfs/crc" drm: Only take cursor locks when the cursor plane exists drm/vmwgfx: Fix fbdev emulation using legacy functions drm/rockchip: Shutdown all crtcs when unbinding drm drm/rockchip: Reorder drm bind/unbind sequence drm/rockchip: analogix_dp: Disable clock when unbinding drm/rockchip: vop: Unprepare clocks when unbinding drm/rockchip: vop: Enable pm domain before vop_initial drm/rockchip: cdn-dp: Don't unregister audio dev when unbinding drm/rockchip: cdn-dp: Don't try to release firmware when not loaded drm: bridge: analogix: Destroy connector & encoder when unbinding drm: bridge: analogix: Disable clock when unbinding drm: bridge: analogix: Unregister dp aux when unbinding drm: bridge: analogix: Detach panel when unbinding analogix dp drm: Don't allow interruptions when opening debugfs/crc drm/virtio: don't leak bo on drm_gem_object_init failure drm: bridge: dw-hdmi: fix input format/encoding from plat_data drm: omap: use common OF graph helpers drm: convert drivers to use drm_of_find_panel_or_bridge drm: convert drivers to use of_graph_get_remote_node ...
此提交包含在:
@@ -661,7 +661,7 @@ static int mtk_dpi_probe(struct platform_device *pdev)
|
||||
struct device *dev = &pdev->dev;
|
||||
struct mtk_dpi *dpi;
|
||||
struct resource *mem;
|
||||
struct device_node *ep, *bridge_node = NULL;
|
||||
struct device_node *bridge_node;
|
||||
int comp_id;
|
||||
int ret;
|
||||
|
||||
@@ -706,15 +706,9 @@ static int mtk_dpi_probe(struct platform_device *pdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ep = of_graph_get_next_endpoint(dev->of_node, NULL);
|
||||
if (ep) {
|
||||
bridge_node = of_graph_get_remote_port_parent(ep);
|
||||
of_node_put(ep);
|
||||
}
|
||||
if (!bridge_node) {
|
||||
dev_err(dev, "Failed to find bridge node\n");
|
||||
bridge_node = of_graph_get_remote_node(dev->of_node, 0, 0);
|
||||
if (!bridge_node)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dev_info(dev, "Found bridge node: %s\n", bridge_node->full_name);
|
||||
|
||||
|
@@ -16,12 +16,12 @@
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/component.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/phy/phy.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <video/mipi_display.h>
|
||||
@@ -1097,7 +1097,6 @@ static int mtk_dsi_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct mtk_dsi *dsi;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *remote_node, *endpoint;
|
||||
struct resource *regs;
|
||||
int irq_num;
|
||||
int comp_id;
|
||||
@@ -1110,22 +1109,10 @@ static int mtk_dsi_probe(struct platform_device *pdev)
|
||||
dsi->host.ops = &mtk_dsi_ops;
|
||||
dsi->host.dev = dev;
|
||||
|
||||
endpoint = of_graph_get_next_endpoint(dev->of_node, NULL);
|
||||
if (endpoint) {
|
||||
remote_node = of_graph_get_remote_port_parent(endpoint);
|
||||
if (!remote_node) {
|
||||
dev_err(dev, "No panel connected\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dsi->bridge = of_drm_find_bridge(remote_node);
|
||||
dsi->panel = of_drm_find_panel(remote_node);
|
||||
of_node_put(remote_node);
|
||||
if (!dsi->bridge && !dsi->panel) {
|
||||
dev_info(dev, "Waiting for bridge or panel driver\n");
|
||||
return -EPROBE_DEFER;
|
||||
}
|
||||
}
|
||||
ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0,
|
||||
&dsi->panel, &dsi->bridge);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dsi->engine_clk = devm_clk_get(dev, "engine");
|
||||
if (IS_ERR(dsi->engine_clk)) {
|
||||
|
@@ -1434,7 +1434,7 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct device_node *np = dev->of_node;
|
||||
struct device_node *cec_np, *port, *ep, *remote, *i2c_np;
|
||||
struct device_node *cec_np, *remote, *i2c_np;
|
||||
struct platform_device *cec_pdev;
|
||||
struct regmap *regmap;
|
||||
struct resource *mem;
|
||||
@@ -1486,29 +1486,9 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
|
||||
if (IS_ERR(hdmi->regs))
|
||||
return PTR_ERR(hdmi->regs);
|
||||
|
||||
port = of_graph_get_port_by_id(np, 1);
|
||||
if (!port) {
|
||||
dev_err(dev, "Missing output port node\n");
|
||||
remote = of_graph_get_remote_node(np, 1, 0);
|
||||
if (!remote)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ep = of_get_child_by_name(port, "endpoint");
|
||||
if (!ep) {
|
||||
dev_err(dev, "Missing endpoint node in port %s\n",
|
||||
port->full_name);
|
||||
of_node_put(port);
|
||||
return -EINVAL;
|
||||
}
|
||||
of_node_put(port);
|
||||
|
||||
remote = of_graph_get_remote_port_parent(ep);
|
||||
if (!remote) {
|
||||
dev_err(dev, "Missing connector/bridge node for endpoint %s\n",
|
||||
ep->full_name);
|
||||
of_node_put(ep);
|
||||
return -EINVAL;
|
||||
}
|
||||
of_node_put(ep);
|
||||
|
||||
if (!of_device_is_compatible(remote, "hdmi-connector")) {
|
||||
hdmi->next_bridge = of_drm_find_bridge(remote);
|
||||
|
新增問題並參考
封鎖使用者