From patchwork Mon Jun 24 22:27:24 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 2773821 Return-Path: X-Original-To: patchwork-linux-fbdev@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 5B84DC0AB1 for ; Mon, 24 Jun 2013 22:29:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6D22220228 for ; Mon, 24 Jun 2013 22:29:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6EAEF20214 for ; Mon, 24 Jun 2013 22:29:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751049Ab3FXW2O (ORCPT ); Mon, 24 Jun 2013 18:28:14 -0400 Received: from mail-ea0-f179.google.com ([209.85.215.179]:63187 "EHLO mail-ea0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751136Ab3FXW2M (ORCPT ); Mon, 24 Jun 2013 18:28:12 -0400 Received: by mail-ea0-f179.google.com with SMTP id b15so6295968eae.38 for ; Mon, 24 Jun 2013 15:28:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=0cOAk+hM0adnaOQV5gQzQ5WWNSaF8EA0YKVmOzQeNwg=; b=q9GPmOsw/hojMSqxRSK5GydgQvSie3N4NMYS3c1XjsjtPOanUdM0Wd15Niz2KpDZDn zQkI1BBPDOVtOaoz6JC8qmcpqAkuAbOsuEcNb7wdSnQxd5/YgWbrwZiuTSNBiGgVaeWt tUK3JKZ4SEMzQtNgOfdzbUJxq9jrmfMLa2WgBIVk+dGuTWW4+62EO6iiuLxh4eeeSJVi 1ASmTBJw7SJt0EzLvn9PqH73XfF+4xTg11S3Y4Xi6Vr6NCTfbC3gaiUeLzzCGxHfBF5q RSkjrOjoOWQKQvjETkvn/i8qJdV8DGx/yQnWN/5n+x8fZKEGQPUlm6Ka7D/ftlVf32E7 FmRw== X-Received: by 10.15.82.132 with SMTP id a4mr26958988eez.107.1372112890987; Mon, 24 Jun 2013 15:28:10 -0700 (PDT) Received: from localhost.localdomain (stgt-5f718d2d.pool.mediaWays.net. [95.113.141.45]) by mx.google.com with ESMTPSA id b7sm31487934eef.16.2013.06.24.15.28.09 for (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 24 Jun 2013 15:28:10 -0700 (PDT) From: David Herrmann To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, Dave Airlie , linux-fbdev@vger.kernel.org, Stephen Warren , Olof Johansson , David Herrmann Subject: [RFC 1/6] fbdev: simplefb: add init through platform_data Date: Tue, 25 Jun 2013 00:27:24 +0200 Message-Id: <1372112849-670-2-git-send-email-dh.herrmann@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1372112849-670-1-git-send-email-dh.herrmann@gmail.com> References: <1372112849-670-1-git-send-email-dh.herrmann@gmail.com> Sender: linux-fbdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, 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 If we create proper platform-devices in x86 boot-code, we can use simplefb for VBE or EFI framebuffers, too. However, there is normally no OF support so we introduce a platform_data object so x86 boot-code can pass the paramaters via plain old platform-data. This also removes the OF dependency as it is not needed. The headers provide proper dummies for the case OF is disabled. Furthermore, we move the FORMAT-definitions to the common platform header so initialization code can use it to transform "struct screen_info" to the right format-name. Signed-off-by: David Herrmann --- drivers/video/Kconfig | 5 ++-- drivers/video/simplefb.c | 45 +++++++++++++++++++++++++--------- include/linux/platform_data/simplefb.h | 40 ++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 include/linux/platform_data/simplefb.h diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 2e937bd..22586ee 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig @@ -2455,7 +2455,7 @@ config FB_HYPERV config FB_SIMPLE bool "Simple framebuffer support" - depends on (FB = y) && OF + depends on (FB = y) select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT @@ -2467,8 +2467,7 @@ config FB_SIMPLE pre-allocated frame buffer surface. Configuration re: surface address, size, and format must be provided - through device tree, or potentially plain old platform data in the - future. + through device tree, or plain old platform data. source "drivers/video/omap/Kconfig" source "drivers/video/omap2/Kconfig" diff --git a/drivers/video/simplefb.c b/drivers/video/simplefb.c index e2e9e3e..35e36c5 100644 --- a/drivers/video/simplefb.c +++ b/drivers/video/simplefb.c @@ -24,6 +24,7 @@ #include #include #include +#include #include static struct fb_fix_screeninfo simplefb_fix = { @@ -73,17 +74,8 @@ static struct fb_ops simplefb_ops = { .fb_imageblit = cfb_imageblit, }; -struct simplefb_format { - const char *name; - u32 bits_per_pixel; - struct fb_bitfield red; - struct fb_bitfield green; - struct fb_bitfield blue; - struct fb_bitfield transp; -}; - static struct simplefb_format simplefb_formats[] = { - { "r5g6b5", 16, {11, 5}, {5, 6}, {0, 5}, {0, 0} }, + SIMPLEFB_FORMATS }; struct simplefb_params { @@ -139,6 +131,32 @@ static int simplefb_parse_dt(struct platform_device *pdev, return 0; } +static int simplefb_parse_pd(struct platform_device *pdev, + struct simplefb_params *params) +{ + struct simplefb_platform_data *pd = pdev->dev.platform_data; + int i; + + params->width = pd->width; + params->height = pd->height; + params->stride = pd->stride; + + for (i = 0; i < ARRAY_SIZE(simplefb_formats); i++) { + if (strcmp(pd->format, simplefb_formats[i].name)) + continue; + + params->format = &simplefb_formats[i]; + break; + } + + if (!params->format) { + dev_err(&pdev->dev, "Invalid format value\n"); + return -EINVAL; + } + + return 0; +} + static int simplefb_probe(struct platform_device *pdev) { int ret; @@ -149,7 +167,12 @@ static int simplefb_probe(struct platform_device *pdev) if (fb_get_options("simplefb", NULL)) return -ENODEV; - ret = simplefb_parse_dt(pdev, ¶ms); + ret = -ENODEV; + if (pdev->dev.platform_data) + ret = simplefb_parse_pd(pdev, ¶ms); + else if (pdev->dev.of_node) + ret = simplefb_parse_dt(pdev, ¶ms); + if (ret) return ret; diff --git a/include/linux/platform_data/simplefb.h b/include/linux/platform_data/simplefb.h new file mode 100644 index 0000000..a18353d --- /dev/null +++ b/include/linux/platform_data/simplefb.h @@ -0,0 +1,40 @@ +/* + * simplefb.h - Simple Framebuffer Device + * + * Copyright (C) 2013 David Herrmann + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#ifndef __PLATFORM_DATA_SIMPLEFB_H__ +#define __PLATFORM_DATA_SIMPLEFB_H__ + +#include +#include +#include + +#define SIMPLEFB_FORMATS \ + { "r5g6b5", 16, {11, 5}, {5, 6}, {0, 5}, {0, 0}, DRM_FORMAT_RGB565 } + +struct simplefb_format { + const char *name; + u32 bits_per_pixel; + struct fb_bitfield red; + struct fb_bitfield green; + struct fb_bitfield blue; + struct fb_bitfield transp; + u32 fourcc; +}; + +/* the framebuffer size and location is available as IORESOURCE_MEM */ +struct simplefb_platform_data { + u32 width; + u32 height; + u32 stride; + char format[64]; +}; + +#endif /* __PLATFORM_DATA_SIMPLEFB_H__ */