From patchwork Sat Jan 31 16:33:00 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Heiko_St=C3=BCbner?= X-Patchwork-Id: 5755031 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 198F8BF6C3 for ; Sat, 31 Jan 2015 16:28:18 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 284A8202C8 for ; Sat, 31 Jan 2015 16:28:17 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id E1D0F20160 for ; Sat, 31 Jan 2015 16:28:15 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 215996E254; Sat, 31 Jan 2015 08:28:13 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from gloria.sntech.de (gloria.sntech.de [95.129.55.99]) by gabe.freedesktop.org (Postfix) with ESMTP id 339BD6E24B for ; Sat, 31 Jan 2015 08:28:07 -0800 (PST) Received: from ip923444a8.dynamic.kabel-deutschland.de ([146.52.68.168] helo=diego.lan) by gloria.sntech.de with esmtpsa (TLS1.1:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from ) id 1YHatx-0004s9-1W; Sat, 31 Jan 2015 17:28:05 +0100 From: Heiko Stuebner To: airlied@linux.ie, mark.yao@rock-chips.com Subject: [PATCH 07/11] drm/rockchip: attach rgb bridge to encoders needing it Date: Sat, 31 Jan 2015 17:33:00 +0100 Message-Id: <1422721984-27782-8-git-send-email-heiko@sntech.de> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1422721984-27782-1-git-send-email-heiko@sntech.de> References: <1422721984-27782-1-git-send-email-heiko@sntech.de> Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, robh+dt@kernel.org, galak@codeaurora.org, linux-arm-kernel@lists.infradead.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On SoCs like the rk3288 the lvds controller needs to be configured even for just providing rgb data to an attached encoder. As internals of the rockchip drm driver should not leak into the implementation of generic i2c encoders etc, go through the list of encoders and attach any necessary rgb bridges when building the drm device in the load callback. Signed-off-by: Heiko Stuebner --- .../devicetree/bindings/video/rockchip-vop.txt | 16 +++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 32 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/Documentation/devicetree/bindings/video/rockchip-vop.txt b/Documentation/devicetree/bindings/video/rockchip-vop.txt index d15351f..b7762ed 100644 --- a/Documentation/devicetree/bindings/video/rockchip-vop.txt +++ b/Documentation/devicetree/bindings/video/rockchip-vop.txt @@ -32,6 +32,11 @@ Required properties: - port: A port node with endpoint definitions as defined in Documentation/devicetree/bindings/media/video-interfaces.txt. +Optional properties in encoder nodes: +- rockchip,rgb-bridge: if a separate controller is regulating access + to the rgb output interface it should be referenced + in the encoder node. + Example: SoC specific DT entry: vopb: vopb@ff930000 { @@ -56,3 +61,14 @@ SoC specific DT entry: }; }; }; + +Additional entries when a rgb-bridge is used: + + lvds: lvds@ff96c000 { + ... + }; + + external-encoder { + ... + rockchip,rgb-bridge = <&lvds>; + }; diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 30da781..86a3e61 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -130,6 +130,7 @@ static int rockchip_drm_load(struct drm_device *drm_dev, unsigned long flags) struct dma_iommu_mapping *mapping; struct device *dev = drm_dev->dev; struct drm_connector *connector; + struct drm_encoder *encoder; int ret; private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL); @@ -173,6 +174,37 @@ static int rockchip_drm_load(struct drm_device *drm_dev, unsigned long flags) goto err_detach_device; /* + * Attach rgb bridge to encoders needing it. + */ + list_for_each_entry(encoder, &drm_dev->mode_config.encoder_list, head) { + struct device_node *rgb_node; + + if (!encoder->of_node) + continue; + + rgb_node = of_parse_phandle(encoder->of_node, + "rockchip,rgb-bridge", 0); + if (rgb_node) { + struct drm_bridge *bridge; + + bridge = of_drm_find_bridge(rgb_node); + of_node_put(rgb_node); + if (!bridge) { + ret = -EPROBE_DEFER; + goto err_unbind; + } + + encoder->bridge = bridge; + bridge->encoder = encoder; + ret = drm_bridge_attach(encoder->dev, bridge); + if (ret) { + DRM_ERROR("Failed to attach bridge to drm\n"); + goto err_unbind; + } + } + } + + /* * All components are now added, we can publish the connector sysfs * entries to userspace. This will generate hotplug events and so * userspace will expect to be able to access DRM at this point.