From patchwork Fri Jul 6 14:01:00 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 1166151 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id 7B17A3FE80 for ; Fri, 6 Jul 2012 14:06:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 562389EF01 for ; Fri, 6 Jul 2012 07:06:43 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by gabe.freedesktop.org (Postfix) with ESMTP id 74FBD9EF0E for ; Fri, 6 Jul 2012 07:01:16 -0700 (PDT) Received: from mailbox.adnet.avionic-design.de (mailbox.avionic-design.de [109.75.18.3]) by mrelayeu.kundenserver.de (node=mreu2) with ESMTP (Nemesis) id 0Lapqe-1S7AQd2GEK-00kHyZ; Fri, 06 Jul 2012 16:01:15 +0200 Received: from localhost (localhost [127.0.0.1]) by mailbox.adnet.avionic-design.de (Postfix) with ESMTP id 1F23A2A28089; Fri, 6 Jul 2012 16:01:15 +0200 (CEST) X-Virus-Scanned: amavisd-new at avionic-design.de Received: from mailbox.adnet.avionic-design.de ([127.0.0.1]) by localhost (add-virt-zarafa.adnet.avionic-design.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jKvPBca7-XmX; Fri, 6 Jul 2012 16:01:08 +0200 (CEST) Received: from localhost (avionic-0098.adnet.avionic-design.de [172.20.31.233]) (Authenticated sender: thierry.reding) by mailbox.adnet.avionic-design.de (Postfix) with ESMTPA id 457EC2A282E4; Fri, 6 Jul 2012 16:01:02 +0200 (CEST) From: Thierry Reding To: dri-devel@lists.freedesktop.org Subject: [RFC 2/2] drm: Add SoC skeleton driver Date: Fri, 6 Jul 2012 16:01:00 +0200 Message-Id: <1341583260-26459-3-git-send-email-thierry.reding@avionic-design.de> X-Mailer: git-send-email 1.7.11.1 In-Reply-To: <1341583260-26459-1-git-send-email-thierry.reding@avionic-design.de> References: <1341583260-26459-1-git-send-email-thierry.reding@avionic-design.de> X-Provags-ID: V02:K0:QH4jZaUsa3MfKJbxyAduTEBLvRJ3ZX1cfIFGi53xGb0 wmaUBtgqCU96QbaEOVDx1J3Ec6upckPQKaYpQvBvQtNVKN47t/ swA//bOLUn6psBHNBy8HDuvHhuJGPNnWL1S8KdGZTmY9/LkFRi R6febZS/4HMRzK4/hGmAJAvG4yzMKwUlun2ph8VMh+TMdDYbrQ 325M2gK8UzahGR/7Nt2B3iQAxIT60M1dKYziwgP31Ewf3n7dlm HtgEmVwR930VN5PDpdHVcQqdmSU0bHtVrABzTZf8WB1s1nk0M3 YAaabIdmCqtax02NiOw1JDIhKt0ecGBaJyY9dEz74WCZxtCwhC 3l72lhZ1ZaSqUsuKA07wzvl0wKga/Rs107i/3E/+t6TIymqNc1 /mW1S4ERaRI2FGUcqXtW2wNyE5y0HLK6IpakZuYvvv+o7ZxrXL H9oZ0 Cc: Rob Clark 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 This is a skeleton driver for the DRM/SoC framework. Signed-off-by: Thierry Reding --- drivers/gpu/drm/Kconfig | 2 + drivers/gpu/drm/Makefile | 1 + drivers/gpu/drm/soc/Kconfig | 13 ++++ drivers/gpu/drm/soc/Makefile | 6 ++ drivers/gpu/drm/soc/soc-drv.c | 166 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 188 insertions(+) create mode 100644 drivers/gpu/drm/soc/Kconfig create mode 100644 drivers/gpu/drm/soc/Makefile create mode 100644 drivers/gpu/drm/soc/soc-drv.c diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 529dede..a23b436 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -196,3 +196,5 @@ source "drivers/gpu/drm/ast/Kconfig" source "drivers/gpu/drm/mgag200/Kconfig" source "drivers/gpu/drm/cirrus/Kconfig" + +source "drivers/gpu/drm/soc/Kconfig" diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 4731cbc..b7dde4e 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -47,4 +47,5 @@ obj-$(CONFIG_DRM_EXYNOS) +=exynos/ obj-$(CONFIG_DRM_GMA500) += gma500/ obj-$(CONFIG_DRM_UDL) += udl/ obj-$(CONFIG_DRM_AST) += ast/ +obj-$(CONFIG_DRM_SOC_TEST) += soc/ obj-y += i2c/ diff --git a/drivers/gpu/drm/soc/Kconfig b/drivers/gpu/drm/soc/Kconfig new file mode 100644 index 0000000..c983bfe --- /dev/null +++ b/drivers/gpu/drm/soc/Kconfig @@ -0,0 +1,13 @@ +config DRM_SOC_TEST + tristate "SoC DRM" + depends on DRM + select DRM_SOC + +if DRM_SOC_TEST + +config DRM_SOC_TEST_DEBUG + bool "SoC DRM debug support" + help + Say Y here to enable debugging support. + +endif diff --git a/drivers/gpu/drm/soc/Makefile b/drivers/gpu/drm/soc/Makefile new file mode 100644 index 0000000..c42f540 --- /dev/null +++ b/drivers/gpu/drm/soc/Makefile @@ -0,0 +1,6 @@ +ccflags-y := -Iinclude/drm +ccflags-$(CONFIG_DRM_SOC_TEST_DEBUG) += -DDEBUG + +soc-drm-y := soc-drv.o + +obj-$(CONFIG_DRM_SOC_TEST) += soc-drm.o diff --git a/drivers/gpu/drm/soc/soc-drv.c b/drivers/gpu/drm/soc/soc-drv.c new file mode 100644 index 0000000..90b1705 --- /dev/null +++ b/drivers/gpu/drm/soc/soc-drv.c @@ -0,0 +1,166 @@ +#include + +#include +#include + +static int soc_drm_load(struct drm_device *dev, unsigned long flags) +{ + int ret = 0; + + pr_debug("> %s(dev=%p, flags=%#lx)\n", __func__, dev, flags); + + drm_mode_config_init(dev); + + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} + +static int soc_drm_unload(struct drm_device *dev) +{ + int ret = 0; + + pr_debug("> %s(dev=%p)\n", __func__, dev); + + drm_mode_config_cleanup(dev); + + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} + +static int soc_drm_open(struct drm_device *dev, struct drm_file *file) +{ + int ret = 0; + pr_debug("> %s(dev=%p, file=%p)\n", __func__, dev, file); + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} + +static void soc_drm_preclose(struct drm_device *dev, struct drm_file *file) +{ + pr_debug("> %s(dev=%p, file=%p)\n", __func__, dev, file); + pr_debug("< %s()\n", __func__); +} + +static void soc_drm_postclose(struct drm_device *dev, struct drm_file *file) +{ + pr_debug("> %s(dev=%p, file=%p)\n", __func__, dev, file); + pr_debug("< %s()\n", __func__); +} + +static void soc_drm_lastclose(struct drm_device *dev) +{ + pr_debug("> %s(dev=%p)\n", __func__, dev); + pr_debug("< %s()\n", __func__); +} + +static int drm_soc_open(struct inode *inode, struct file *filp) +{ + int ret = 0; + pr_debug("> %s(inode=%p, filp=%p)\n", __func__, inode, filp); + ret = drm_open(inode, filp); + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} + +static int drm_soc_mmap(struct file *filp, struct vm_area_struct *vma) +{ + int ret = 0; + pr_debug("> %s(filp=%p, vma=%p)\n", __func__, filp, vma); + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} + +static unsigned int drm_soc_poll(struct file *filp, + struct poll_table_struct *wait) +{ + unsigned int ret = 0; + pr_debug("> %s(filp=%p, wait=%p)\n", __func__, filp, wait); + ret = drm_poll(filp, wait); + pr_debug("< %s() = %u\n", __func__, ret); + return ret; +} + +static ssize_t drm_soc_read(struct file *filp, char __user *buffer, + size_t count, loff_t *offset) +{ + ssize_t ret = 0; + pr_debug("> %s(filp=%p, buffer=%p, count=%zu, offset=%p)\n", __func__, + filp, buffer, count, offset); + ret = drm_read(filp, buffer, count, offset); + pr_debug("< %s() = %zd\n", __func__, ret); + return ret; +} + +static long drm_soc_ioctl(struct file *filp, unsigned int cmd, + unsigned long arg) +{ + long ret = 0; + pr_debug("> %s(filp=%p, cmd=%#x, arg=%#lx)\n", __func__, filp, cmd, + arg); + ret = drm_ioctl(filp, cmd, arg); + pr_debug("< %s() = %ld\n", __func__, ret); + return ret; +} + +static int drm_soc_release(struct inode *inode, struct file *filp) +{ + int ret = 0; + pr_debug("> %s(inode=%p, file=%p)\n", __func__, inode, filp); + ret = drm_release(inode, filp); + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} + +static const struct file_operations soc_drm_fops = { + .owner = THIS_MODULE, + .open = drm_soc_open, + .mmap = drm_soc_mmap, + .poll = drm_soc_poll, + .read = drm_soc_read, + .unlocked_ioctl = drm_soc_ioctl, + .release = drm_soc_release, +}; + +static struct drm_driver soc_drm = { + .driver_features = DRIVER_MODESET | DRIVER_GEM, + .load = soc_drm_load, + .unload = soc_drm_unload, + .open = soc_drm_open, + .preclose = soc_drm_preclose, + .lastclose = soc_drm_lastclose, + .postclose = soc_drm_postclose, + .fops = &soc_drm_fops, + .name = "soc-drm", + .desc = "SoC DRM driver", + .date = "20120706", + .major = 0, + .minor = 0, + .patchlevel = 0, +}; + +static int __init soc_drm_init(void) +{ + int ret = 0; + + pr_debug("> %s()\n", __func__); + + ret = drm_soc_init(&soc_drm, "soc"); + + pr_debug("< %s() = %d\n", __func__, ret); + return ret; +} +module_init(soc_drm_init); + +static void __exit soc_drm_exit(void) +{ + pr_debug("> %s()\n", __func__); + + drm_soc_exit(&soc_drm); + + pr_debug("< %s()\n", __func__); +} +module_exit(soc_drm_exit); + +MODULE_AUTHOR("Thierry Reding "); +MODULE_DESCRIPTION("SoC DRM driver"); +MODULE_LICENSE("GPL");