From patchwork Wed Aug 21 14:22:03 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hajda X-Patchwork-Id: 2847840 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.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 60F91BF546 for ; Wed, 21 Aug 2013 15:41:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 03277205C0 for ; Wed, 21 Aug 2013 15:41:44 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 25FFB205BF for ; Wed, 21 Aug 2013 15:41:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 64E8AE711A for ; Wed, 21 Aug 2013 08:41:43 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F0ABE798B for ; Wed, 21 Aug 2013 07:32:49 -0700 (PDT) Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout2.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MRV00KYPX9PZ9B0@mailout2.w1.samsung.com> for dri-devel@lists.freedesktop.org; Wed, 21 Aug 2013 15:22:46 +0100 (BST) X-AuditID: cbfec7f5-b7f5f6d00000105f-f4-5214cd36581c Received: from eusync3.samsung.com ( [203.254.199.213]) by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id AC.E1.04191.63DC4125; Wed, 21 Aug 2013 15:22:46 +0100 (BST) Received: from AMDC1061.digital.local ([106.116.147.88]) by eusync3.samsung.com (Oracle Communications Messaging Server 7u4-23.01 (7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTPA id <0MRV000E9X9AFC10@eusync3.samsung.com>; Wed, 21 Aug 2013 15:22:46 +0100 (BST) From: Andrzej Hajda To: dri-devel@lists.freedesktop.org (open list:DRM DRIVERS FOR E...) Subject: [PATCH 3/3] drm/exynos: fimd: move platform data parsing to separate function Date: Wed, 21 Aug 2013 16:22:03 +0200 Message-id: <1377094923-6919-4-git-send-email-a.hajda@samsung.com> X-Mailer: git-send-email 1.8.1.2 In-reply-to: <1377094923-6919-1-git-send-email-a.hajda@samsung.com> References: <1377094923-6919-1-git-send-email-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrLJMWRmVeSWpSXmKPExsVy+t/xq7pmZ0WCDNb+F7K4te4cq0XvuZNM Fle+vmezmHR/AovFi3sXWSzONr1ht5hxfh+TxeE37awWMya/ZLNYP+M1iwOXx/ZvD1g97ncf Z/Lo27KK0ePzJrkAligum5TUnMyy1CJ9uwSujKcftzEVrFSuWPLDtoHxp0wXIweHhICJxOSl ul2MnECmmMSFe+vZuhi5OIQEljJKfJ7fwQjh9DFJLOk8xQJSxSagKfF38002EFtEwEVi++Vt 7CBFzAJPmSSOfdnOCJIQFoiQaH7wih3EZhFQlTj05R8TyDZeASeJ5a0CENsUJH5ePsEGEuYU cJY4Oi8GJCwEVDFj+RH2CYy8CxgZVjGKppYmFxQnpeca6RUn5haX5qXrJefnbmKEBNnXHYxL j1kdYhTgYFTi4b2wUyRIiDWxrLgy9xCjBAezkghv4UmgEG9KYmVValF+fFFpTmrxIUYmDk6p BkbzC02ll+Ydlg5kc3954OLfrSeYT9s7GdbJbbcK299vEqknf4ydm0nFaF+8tmxw3oYtMX+a ol+uKFi6+a3YG8bTVpUvLzOLLd797OKHWfO4eBsvfC1uSbyWLHxmiqLcwrO/o3gkzr2e/G+P oHSVaZDK1odrdy662Z2eWLC5/sx7iRcXD4WWzdJUYinOSDTUYi4qTgQAUyE1OhACAAA= X-Mailman-Approved-At: Wed, 21 Aug 2013 08:30:55 -0700 Cc: "moderated list:ARM/S5P EXYNOS AR..." , Seung-Woo Kim , Andrzej Hajda , Kyungmin Park , s.nawrocki@samsung.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, 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 The patch moves platfrom_data and device tree parsing to separate function. Signed-off-by: Andrzej Hajda Signed-off-by: Kyungmin Park --- drivers/gpu/drm/exynos/exynos_drm_fimd.c | 63 ++++++++++++++++---------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 6afcaf1..130dea5 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -122,7 +122,7 @@ struct fimd_context { wait_queue_head_t wait_vsync_queue; atomic_t wait_vsync_event; - struct exynos_drm_panel_info *panel; + struct exynos_drm_panel_info panel; struct fimd_driver_data *driver_data; }; @@ -164,7 +164,7 @@ static void *fimd_get_panel(struct device *dev) { struct fimd_context *ctx = get_fimd_context(dev); - return ctx->panel; + return &ctx->panel; } static int fimd_check_mode(struct device *dev, struct drm_display_mode *mode) @@ -244,7 +244,7 @@ static void fimd_apply(struct device *subdrv_dev) static void fimd_commit(struct device *dev) { struct fimd_context *ctx = get_fimd_context(dev); - struct exynos_drm_panel_info *panel = ctx->panel; + struct exynos_drm_panel_info *panel = &ctx->panel; struct videomode *vm = &panel->vm; struct fimd_driver_data *driver_data; u32 val; @@ -755,7 +755,7 @@ static void fimd_subdrv_remove(struct drm_device *drm_dev, struct device *dev) static int fimd_configure_clocks(struct fimd_context *ctx, struct device *dev) { - struct videomode *vm = &ctx->panel->vm; + struct videomode *vm = &ctx->panel.vm; unsigned long clk; ctx->bus_clk = devm_clk_get(dev, "fimd"); @@ -892,24 +892,13 @@ static int fimd_activate(struct fimd_context *ctx, bool enable) return 0; } -static int fimd_probe(struct platform_device *pdev) +static int fimd_get_platform_data(struct fimd_context *ctx, struct device *dev) { - struct device *dev = &pdev->dev; - struct fimd_context *ctx; - struct exynos_drm_subdrv *subdrv; - struct exynos_drm_fimd_pdata *pdata; - struct exynos_drm_panel_info *panel; - struct resource *res; - int win; - int ret = -EINVAL; - if (dev->of_node) { struct videomode *vm; - pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); - if (!pdata) - return -ENOMEM; + int ret; - vm = &pdata->panel.vm; + vm = &ctx->panel.vm; ret = of_get_videomode(dev->of_node, vm, OF_USE_NATIVE_MODE); if (ret) { DRM_ERROR("failed: of_get_videomode() : %d\n", ret); @@ -917,31 +906,45 @@ static int fimd_probe(struct platform_device *pdev) } if (vm->flags & DISPLAY_FLAGS_VSYNC_LOW) - pdata->vidcon1 |= VIDCON1_INV_VSYNC; + ctx->vidcon1 |= VIDCON1_INV_VSYNC; if (vm->flags & DISPLAY_FLAGS_HSYNC_LOW) - pdata->vidcon1 |= VIDCON1_INV_HSYNC; + ctx->vidcon1 |= VIDCON1_INV_HSYNC; if (vm->flags & DISPLAY_FLAGS_DE_LOW) - pdata->vidcon1 |= VIDCON1_INV_VDEN; + ctx->vidcon1 |= VIDCON1_INV_VDEN; if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE) - pdata->vidcon1 |= VIDCON1_INV_VCLK; + ctx->vidcon1 |= VIDCON1_INV_VCLK; } else { - pdata = dev->platform_data; + struct exynos_drm_fimd_pdata *pdata = dev->platform_data; if (!pdata) { DRM_ERROR("no platform data specified\n"); return -EINVAL; } + ctx->vidcon0 = pdata->vidcon0; + ctx->vidcon1 = pdata->vidcon1; + ctx->default_win = pdata->default_win; + ctx->panel = pdata->panel; } - panel = &pdata->panel; - if (!panel) { - dev_err(dev, "panel is null.\n"); - return -EINVAL; - } + return 0; +} + +static int fimd_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct fimd_context *ctx; + struct exynos_drm_subdrv *subdrv; + struct resource *res; + int win; + int ret = -EINVAL; ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); if (!ctx) return -ENOMEM; + ret = fimd_get_platform_data(ctx, dev); + if (ret) + return ret; + ret = fimd_configure_clocks(ctx, dev); if (ret) return ret; @@ -968,10 +971,6 @@ static int fimd_probe(struct platform_device *pdev) } ctx->driver_data = drm_fimd_get_driver_data(pdev); - ctx->vidcon0 = pdata->vidcon0; - ctx->vidcon1 = pdata->vidcon1; - ctx->default_win = pdata->default_win; - ctx->panel = panel; DRM_INIT_WAITQUEUE(&ctx->wait_vsync_queue); atomic_set(&ctx->wait_vsync_event, 0);