summaryrefslogtreecommitdiffstats
path: root/drivers/staging/imx-drm/imx-drm.h
diff options
context:
space:
mode:
authorPhilipp Zabel2014-03-05 10:20:52 +0100
committerRussell King2014-03-07 17:17:48 +0100
commit655b43ccb7937325db287ab1e4e1ac4ec3f233fe (patch)
treead4f5520ef097facf4d933c69855030948815263 /drivers/staging/imx-drm/imx-drm.h
parentMerge branch 'topic/of-graph' of git://git.pengutronix.de/git/pza/linux into ... (diff)
downloadkernel-qcow2-linux-655b43ccb7937325db287ab1e4e1ac4ec3f233fe.tar.gz
kernel-qcow2-linux-655b43ccb7937325db287ab1e4e1ac4ec3f233fe.tar.xz
kernel-qcow2-linux-655b43ccb7937325db287ab1e4e1ac4ec3f233fe.zip
staging: imx-drm-core: Use OF graph to find components and connections between encoder and crtcs
This patch adds support to find the involved components connected to the IPU display interface ports using the OF graph bindings documented in Documentation/devicetree/bindings/media/video-interfaces.txt. It makes use of the of_graph (formerly v4l2_of) parsing helpers and thus depends on the patch that moves those out to drivers/of. Each display interface needs to have an associated port node in the device tree. We can associate this node with the crtc platform device and use it to find the crtc corresponding to a given port node instead of using a combination of parent device node and id number, as before. Explicitly converting the void* cookie to the port device tree node allows to get rid of the ipu_id and di_id fields. The multiplexer setting on i.MX6 now can be obtained from the port id (reg property) in the device tree. The imx-drm node now needs a ports property that contains phandles to each of the IPU display interface port nodes. From there, all attached encoders are scanned and enabled encoders are added to a waiting list. The bind order makes sure that once all components are probed, crtcs are bound before encoders, so that imx_drm_encoder_parse_of can be called from the encoder bind callbacks. For parsing the OF graph, temporary copies of the V4L2 OF graph helpers are used, that can be removed again once those are available at a generic place. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/staging/imx-drm/imx-drm.h')
-rw-r--r--drivers/staging/imx-drm/imx-drm.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/staging/imx-drm/imx-drm.h b/drivers/staging/imx-drm/imx-drm.h
index aa2102866689..a24d46ad3dce 100644
--- a/drivers/staging/imx-drm/imx-drm.h
+++ b/drivers/staging/imx-drm/imx-drm.h
@@ -30,7 +30,7 @@ struct imx_drm_crtc_helper_funcs {
int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
struct imx_drm_crtc **new_crtc,
const struct imx_drm_crtc_helper_funcs *imx_helper_funcs,
- void *cookie, int id);
+ struct device_node *port);
int imx_drm_remove_crtc(struct imx_drm_crtc *);
int imx_drm_init_drm(struct platform_device *pdev,
int preferred_bpp);
@@ -49,7 +49,8 @@ int imx_drm_panel_format_pins(struct drm_encoder *encoder,
int imx_drm_panel_format(struct drm_encoder *encoder,
u32 interface_pix_fmt);
-int imx_drm_encoder_get_mux_id(struct drm_encoder *encoder);
+int imx_drm_encoder_get_mux_id(struct device_node *node,
+ struct drm_encoder *encoder);
int imx_drm_encoder_parse_of(struct drm_device *drm,
struct drm_encoder *encoder, struct device_node *np);