diff options
Diffstat (limited to 'drivers/gpu/mali/mali400ko/x11/mali_drm')
-rw-r--r-- | drivers/gpu/mali/mali400ko/x11/mali_drm/mali/Makefile | 21 | ||||
-rw-r--r-- | drivers/gpu/mali/mali400ko/x11/mali_drm/mali/mali_drv.c | 58 |
2 files changed, 69 insertions, 10 deletions
diff --git a/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/Makefile b/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/Makefile index 0f3ace966df..bed5d51cc58 100644 --- a/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/Makefile +++ b/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/Makefile @@ -12,6 +12,21 @@ # Makefile for the Mali drm device driver. This driver provides support for the # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. -obj-y += mali_drm.o -mali_drm-objs := mali_drv.o -EXTRA_CFLAGS += -I$(KBUILD_EXTMOD) -I$(KBUILD_EXTMOD)/include -I$(KBUILD_EXTMOD)/../drm/include/ +# If KERNELRELEASE is defined, we've been invoked from the # kernel build system and can use its language. +ifneq ($(KERNELRELEASE),) + obj-m := mali_drm.o + mali_drm-objs := mali_drv.o + EXTRA_CFLAGS += -I$(KBUILD_EXTMOD) -I$(KBUILD_EXTMOD)/include -I$(KBUILD_EXTMOD)/../drm/include/ + +# Otherwise we were called directly from the command # line; invoke the kernel build system. +else + + KERNELDIR ?= /lib/modules/$(shell uname -r)/build + PWD := $(shell pwd) + +default: + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules +all: + $(MAKE) -C $(KERNELDIR) M=$(PWD) modules + +endif diff --git a/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/mali_drv.c b/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/mali_drv.c index 571ab04e1e2..0d982e38d45 100644 --- a/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/mali_drv.c +++ b/drivers/gpu/mali/mali400ko/x11/mali_drm/mali/mali_drv.c @@ -18,6 +18,7 @@ #include "mali_drv.h" static struct platform_device *dev0; +static struct platform_device *dev1; void mali_drm_preclose(struct drm_device *dev, struct drm_file *file_priv) { @@ -60,6 +61,7 @@ static const struct file_operations mali_driver_fops = static struct drm_driver driver = { + .driver_features = DRIVER_USE_PLATFORM_DEVICE, .load = mali_drm_load, .unload = mali_drm_unload, .context_dtor = NULL, @@ -69,6 +71,8 @@ static struct drm_driver driver = .lastclose = mali_drm_lastclose, .suspend = mali_drm_suspend, .resume = mali_drm_resume, + .get_map_ofs = drm_core_get_map_ofs, + .get_reg_ofs = drm_core_get_reg_ofs, .ioctls = NULL, .fops = &mali_driver_fops, .name = DRIVER_NAME, @@ -79,23 +83,60 @@ static struct drm_driver driver = .patchlevel = DRIVER_PATCHLEVEL, }; -static struct platform_driver platform_drm_driver; +static struct drm_driver driver1 = +{ + .driver_features = DRIVER_USE_PLATFORM_DEVICE, + .load = mali_drm_load, + .unload = mali_drm_unload, + .context_dtor = NULL, + .reclaim_buffers = NULL, + .reclaim_buffers_idlelocked = NULL, + .preclose = mali_drm_preclose, + .lastclose = mali_drm_lastclose, + .suspend = mali_drm_suspend, + .resume = mali_drm_resume, + .get_map_ofs = drm_core_get_map_ofs, + .get_reg_ofs = drm_core_get_reg_ofs, + .ioctls = NULL, + .fops = { + .owner = THIS_MODULE, + .open = drm_open, + .release = drm_release, + .unlocked_ioctl = drm_ioctl, + .mmap = drm_mmap, + .poll = drm_poll, + .fasync = drm_fasync, + }, + .name = DRIVER_NAME, + .desc = DRIVER_DESC, + .date = DRIVER_DATE, + .major = DRIVER_MAJOR, + .minor = DRIVER_MINOR, + .patchlevel = DRIVER_PATCHLEVEL, +}; int mali_drm_init(struct platform_device *dev) { printk(KERN_INFO "Mali DRM initialize, driver name: %s, version %d.%d\n", DRIVER_NAME, DRIVER_MAJOR, DRIVER_MINOR); if (dev == dev0) { driver.num_ioctls = 0; - return drm_platform_init(&driver, dev0); + driver.platform_device = dev; + return drm_init(&driver); + } else if (dev == dev1) { + driver1.num_ioctls = 0; + driver1.platform_device = dev; + return drm_init(&driver1); } return 0; - } void mali_drm_exit(struct platform_device *dev) { - if (dev0 == dev) - drm_platform_exit(&driver, dev); + if (driver.platform_device == dev) { + drm_exit(&driver); + } else if (driver1.platform_device == dev) { + drm_exit(&driver1); + } } static int __devinit mali_platform_drm_probe(struct platform_device *dev) @@ -120,6 +161,7 @@ static int mali_platform_drm_resume(struct platform_device *dev) return 0; } + static struct platform_driver platform_drm_driver = { .probe = mali_platform_drm_probe, .remove = __devexit_p(mali_platform_drm_remove), @@ -134,13 +176,15 @@ static struct platform_driver platform_drm_driver = { static int __init mali_platform_drm_init(void) { dev0 = platform_device_register_simple("mali_drm", 0, NULL, 0); - return platform_driver_register(&platform_drm_driver); + dev1 = platform_device_register_simple("mali_drm", 1, NULL, 0); + return platform_driver_register( &platform_drm_driver ); } static void __exit mali_platform_drm_exit(void) { - platform_driver_unregister(&platform_drm_driver); + platform_driver_unregister( &platform_drm_driver ); platform_device_unregister(dev0); + platform_device_unregister(dev1); } #ifdef MODULE |