From patchwork Thu Sep 11 12:57:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inki Dae X-Patchwork-Id: 4886061 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B078C9F32F for ; Thu, 11 Sep 2014 12:57:50 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7D1852025B for ; Thu, 11 Sep 2014 12:57:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1BD2E200D0 for ; Thu, 11 Sep 2014 12:57:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751013AbaIKM5q (ORCPT ); Thu, 11 Sep 2014 08:57:46 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:23208 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751991AbaIKM5d (ORCPT ); Thu, 11 Sep 2014 08:57:33 -0400 Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NBQ002MMMNVT310@mailout2.samsung.com> for linux-samsung-soc@vger.kernel.org; Thu, 11 Sep 2014 21:57:31 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.114]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 00.64.02948.B3C91145; Thu, 11 Sep 2014 21:57:31 +0900 (KST) X-AuditID: cbfee68d-f79c46d000000b84-d8-54119c3b7674 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 7F.94.04943.B3C91145; Thu, 11 Sep 2014 21:57:31 +0900 (KST) Received: from daeinki-desktop.10.32.193.11 ([10.252.83.67]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NBQ004GMMNVHP80@mmp1.samsung.com>; Thu, 11 Sep 2014 21:57:31 +0900 (KST) From: Inki Dae To: dri-devel@lists.freedesktop.org Cc: airlied@linux.ie, linux-samsung-soc@vger.kernel.org, Inki Dae Subject: [PATCH v2] drm/exynos: update to use component match support Date: Thu, 11 Sep 2014 21:57:30 +0900 Message-id: <1410440250-5209-1-git-send-email-inki.dae@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1409573992-19721-1-git-send-email-inki.dae@samsung.com> References: <1409573992-19721-1-git-send-email-inki.dae@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrKLMWRmVeSWpSXmKPExsWyRsSkSNd6jmCIwc+9Jha9504yWVz5+p7N YtL9CSwWM87vY3Jg8dj+7QGrx/3u40wefVtWMXp83iQXwBLFZZOSmpNZllqkb5fAlXF17m2W ghdyFbv+3mBvYOyU7GLk5JAQMJE4cuAGM4QtJnHh3nq2LkYuDiGBpYwSN/5+Yupi5AAr2ns5 HyK+iFHi9Ie5jBBON5PEgcnHWEC62QRUJSauuM8GYosIKEv8nbiKEcRmFoiSWH54KTuILSzg KvFo8mZGkKEsQPUXvyuBhHkFnCXm/T/DDLFLQWLOJBuQMCdQ9Y9XrawgtpCAi8T1y/uYQdZK CPxnk7h4aT/YKhYBAYlvkw+xQPTKSmw6APWLpMTBFTdYJjAKL2BkWMUomlqQXFCclF5kqFec mFtcmpeul5yfu4kRGLqn/z3r3cF4+4D1IUYBDkYlHt4KFsEQIdbEsuLK3EOMpkAbJjJLiSbn AyMkryTe0NjMyMLUxNTYyNzSTEmcV1HqZ7CQQHpiSWp2ampBalF8UWlOavEhRiYOTqkGxmXe sRO9/lv/0vJJ07h0tsc5v2X/iylzUv8kb2T1+TTtkQRj+ApBuSenzIN3bd7O/Oyd7P3VDTWH iuNaf6uV9Wx7yL2Q9YXOghdK+w+fD9RTXerFsdx6j0o55yzh/qXmzLWnwyalRs+dXmekJ1ap +rtA4OKEXTI8f+Ka/jmEP+MP2HM9gkfQV4mlOCPRUIu5qDgRAO5a9YdYAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnkeLIzCtJLcpLzFFi42I5/e+xgK71HMEQg+1tuha9504yWVz5+p7N YtL9CSwWM87vY3Jg8dj+7QGrx/3u40wefVtWMXp83iQXwBLVwGiTkZqYklqkkJqXnJ+SmZdu q+QdHO8cb2pmYKhraGlhrqSQl5ibaqvk4hOg65aZA7RTSaEsMacUKBSQWFyspG+HaUJoiJuu BUxjhK5vSBBcj5EBGkhYw5hxde5tloIXchW7/t5gb2DslOxi5OCQEDCR2Hs5v4uRE8gUk7hw bz1bFyMXh5DAIkaJ0x/mMkI43UwSByYfYwGpYhNQlZi44j4biC0ioCzxd+IqRhCbWSBKYvnh pewgtrCAq8SjyZsZQRawANVf/K4EEuYVcJaY9/8MM8ReBYk5k2xAwpxA1T9etbKC2EICLhLX L+9jnsDIu4CRYRWjaGpBckFxUnquoV5xYm5xaV66XnJ+7iZGcGQ8k9rBuLLB4hCjAAejEg9v BYtgiBBrYllxZe4hRgkOZiUR3hvTgUK8KYmVValF+fFFpTmpxYcYTYFumsgsJZqcD4zavJJ4 Q2MTMyNLI3NDCyNjcyVx3gOt1oFCAumJJanZqakFqUUwfUwcnFINjF2/a4xC8x54GgUmqllr cYu91dvvKCYhduPojkcibs2XHhybuO/7VaGfzuf/PTlYP0O159LTqT6L7+9LPqL01WTxtO8q K9gvCz0+v+hG+R8TA6PA6b9OHDkyW2NfUmxdl45y25Ip1pZZK+ZfXmWb6zH9bnJZ+5YG4eW7 VieI3/h0lPXVsxCbjmdKLMUZiYZazEXFiQCFfVnwogIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, 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 Update Exynos's DRM driver to use component match support rater than add_components. Changelog v2: - release devices and drivers if failed. - change compare_of to compare_dev. Signed-off-by: Inki Dae Tested-by: Andrzej Hajda --- drivers/gpu/drm/exynos/exynos_drm_drv.c | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 5aae95c..3f6ec96 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -486,21 +486,20 @@ void exynos_drm_component_del(struct device *dev, mutex_unlock(&drm_component_lock); } -static int compare_of(struct device *dev, void *data) +static int compare_dev(struct device *dev, void *data) { return dev == (struct device *)data; } -static int exynos_drm_add_components(struct device *dev, struct master *m) +static struct component_match *exynos_drm_match_add(struct device *dev) { + struct component_match *match = NULL; struct component_dev *cdev; unsigned int attach_cnt = 0; mutex_lock(&drm_component_lock); list_for_each_entry(cdev, &drm_component_list, list) { - int ret; - /* * Add components to master only in case that crtc and * encoder/connector device objects exist. @@ -515,16 +514,10 @@ static int exynos_drm_add_components(struct device *dev, struct master *m) /* * fimd and dpi modules have same device object so add * only crtc device object in this case. - * - * TODO. if dpi module follows driver-model driver then - * below codes can be removed. */ if (cdev->crtc_dev == cdev->conn_dev) { - ret = component_master_add_child(m, compare_of, - cdev->crtc_dev); - if (ret < 0) - return ret; - + component_match_add(dev, &match, compare_dev, + cdev->crtc_dev); goto out_lock; } @@ -534,11 +527,8 @@ static int exynos_drm_add_components(struct device *dev, struct master *m) * connector/encoder need pipe number of crtc when they * are created. */ - ret = component_master_add_child(m, compare_of, cdev->crtc_dev); - ret |= component_master_add_child(m, compare_of, - cdev->conn_dev); - if (ret < 0) - return ret; + component_match_add(dev, &match, compare_dev, cdev->crtc_dev); + component_match_add(dev, &match, compare_dev, cdev->conn_dev); out_lock: mutex_lock(&drm_component_lock); @@ -546,7 +536,7 @@ out_lock: mutex_unlock(&drm_component_lock); - return attach_cnt ? 0 : -ENODEV; + return attach_cnt ? match : ERR_PTR(-EPROBE_DEFER); } static int exynos_drm_bind(struct device *dev) @@ -560,13 +550,13 @@ static void exynos_drm_unbind(struct device *dev) } static const struct component_master_ops exynos_drm_ops = { - .add_components = exynos_drm_add_components, .bind = exynos_drm_bind, .unbind = exynos_drm_unbind, }; static int exynos_drm_platform_probe(struct platform_device *pdev) { + struct component_match *match; int ret; pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); @@ -633,13 +623,23 @@ static int exynos_drm_platform_probe(struct platform_device *pdev) goto err_unregister_ipp_drv; #endif - ret = component_master_add(&pdev->dev, &exynos_drm_ops); + match = exynos_drm_match_add(&pdev->dev); + if (IS_ERR(match)) { + ret = PTR_ERR(match); + goto err_unregister_resources; + } + + ret = component_master_add_with_match(&pdev->dev, &exynos_drm_ops, + match); if (ret < 0) - DRM_DEBUG_KMS("re-tried by last sub driver probed later.\n"); + goto err_unregister_resources; - return 0; + return ret; + +err_unregister_resources: #ifdef CONFIG_DRM_EXYNOS_IPP + exynos_platform_device_ipp_unregister(); err_unregister_ipp_drv: platform_driver_unregister(&ipp_driver); err_unregister_gsc_drv: