Hi sylwester, On 03/01/2012 07:44 AM, Sylwester Nawrocki wrote: > Hi Sungchun, > > On 02/15/2012 07:02 AM, Sungchun Kang wrote: > > Since the EXYNOS5 SoCs have various multimedia IPs such as Gscaler, > > FIMC-LITE, and MIXER, and so on. > > Additionally, media controller interface is needed to configure > > connection between them and to control each IPs. > > > > This patch adds support media device for EXYNOS5 SoCs. > > Actually, there are three media devices such as below diagram which > > are using media control framework. > > Since they are not belong to one hardware block, we need to manage > it > > for connecting with each devices. > > > > Follwing is detailed list of them: > > > > * Gscaler: general scaler > > Support memory to memory interface > > Support output interface from memory to display device(LCD, TV) > > Support capture interface from device(FIMC-LITE, FIMD) to memory > > > > * MIPI-CSIS > > Support interconnection(subdev interface) between devices > > Is there any difference in s5p/exynos4 and exynos5 MIPI-CSIS devices ? > I suspect there isn't and the existing MIPI-CSIS driver can be used > for > exynos5 too. > It is same hardware, and driver is almost identical. But I copied from s5p-fimc directory to exynos directory, because we use media controller framework in each other hardware. - reference from my first mail Surely, you are author of mipi-csis driver in s5p-fimc directory and I re-used most of your code. So, I will not submit mipi-csis driver. > > > > * FIMC-LITE > > Support capture interface from device(Sensor, MIPI-CSIS) to memory > > Support interconnection(subdev interface) between devices > > This device is also present on exynos4212/4412 SoCs. Can you tell > what's difference between FIMC-LITE on Exynos4 and Exynos5 ? > Either we need separate FIMC-LITE drivers or we need a shared one. I'd > like to clarify this first. > > > * MIXER > > Support output interface from memory to device(HDMI) > > Support interconnection(subdev interface) between devices > > > > * FIMD > > Support framebuffer interface > > Support subdev interface to display frames sent from Gscaler > > What about Exynos DRM driver ? Do you have any plans to integrate the > V4L2 and the DRM driver ? IMHO DRM is more appropriate for some tasks > on display side, like 2D operations, multiple outputs, windows, > blending, etc. > I don't know about DRM, can you explain to me about it, or let me know mail-thread? > > * Rotator > > Support memory to memory interface > > > > * m2m-scaler > > Support only memory to memory interface > > > > * And so on... > > > > 1) media 0 > > LCD Output path consists of Gscaler and FIMD(display controller). > > +----------------+ +------+ > > | Gscaler-output | --> | FIMD | --> LCD > > +----------------+ +------+ > > > > HDMI Output path consists of Gscaler, Mixer and HDMI. > > +----------------+ +-------+ +------+ > > | Gscaler-output | --> | MIXER | --> | HDMI | --> TV > > +----------------+ +-------+ +------+ > > > > +--------+ +-----------+ +-----------+ +-----------------+ > > > > 2) media 1 > > Camera Capture path consists of MIPI-CSIS, FIMC-LITE and Gscaler > > +--------+ +-----------+ +-----------------+ > > | Sensor | --> | FIMC-LITE | --> | Gscaler-capture | > > +--------+ +-----------+ +-----------------+ > > > > +--------+ +-----------+ +-----------+ +----------------- > + > > | Sensor | --> | MIPI-CSIS | --> | FIMC-LITE | --> | Gscaler- > capture | > > +--------+ +-----------+ +-----------+ +----------------- > + > > > > Signed-off-by: Sungchun Kang<sungchun.kang@xxxxxxxxxxx> > > --- > > drivers/media/video/exynos/mdev/Kconfig | 8 ++ > > drivers/media/video/exynos/mdev/Makefile | 2 + > > drivers/media/video/exynos/mdev/exynos-mdev.c | 115 > ++++++++++++++++++ > > include/media/exynos_mc.h | 160 > +++++++++++++++++++++++++ > > 4 files changed, 285 insertions(+), 0 deletions(-) > > create mode 100644 drivers/media/video/exynos/mdev/Kconfig > > create mode 100644 drivers/media/video/exynos/mdev/Makefile > > create mode 100644 drivers/media/video/exynos/mdev/exynos-mdev.c > > create mode 100644 include/media/exynos_mc.h > > > > diff --git a/drivers/media/video/exynos/mdev/Kconfig > > b/drivers/media/video/exynos/mdev/Kconfig > > new file mode 100644 > > index 0000000..15134b0 > > --- /dev/null > > +++ b/drivers/media/video/exynos/mdev/Kconfig > > @@ -0,0 +1,8 @@ > > +config EXYNOS_MEDIA_DEVICE > > + bool > > + depends on MEDIA_EXYNOS > > + select MEDIA_CONTROLLER > > + select VIDEO_V4L2_SUBDEV_API > > + default y > > + help > > + This is a v4l2 driver for exynos media device. > > diff --git a/drivers/media/video/exynos/mdev/Makefile > > b/drivers/media/video/exynos/mdev/Makefile > > new file mode 100644 > > index 0000000..175a4bc > > --- /dev/null > > +++ b/drivers/media/video/exynos/mdev/Makefile > > @@ -0,0 +1,2 @@ > > +mdev-objs := exynos-mdev.o > > +obj-$(CONFIG_EXYNOS_MEDIA_DEVICE) += mdev.o > > diff --git a/drivers/media/video/exynos/mdev/exynos-mdev.c > > b/drivers/media/video/exynos/mdev/exynos-mdev.c > > new file mode 100644 > > index 0000000..a76e7c3 > > --- /dev/null > > +++ b/drivers/media/video/exynos/mdev/exynos-mdev.c > > @@ -0,0 +1,115 @@ > > +/* drviers/media/video/exynos/mdev/exynos-mdev.c > > + * > > + * Copyright (c) 2011 Samsung Electronics Co., Ltd. > > + * http://www.samsung.com > > + * > > + * EXYNOS5 SoC series media device driver > > + * > > + * This program is free software; you can redistribute it and/or > > +modify > > + * it under the terms of the GNU General Public License version 2 > as > > + * published by the Free Software Foundation. > > +*/ > > + > > +#include<linux/bug.h> > > +#include<linux/device.h> > > +#include<linux/errno.h> > > +#include<linux/i2c.h> > > +#include<linux/kernel.h> > > +#include<linux/list.h> > > +#include<linux/module.h> > > +#include<linux/platform_device.h> > > +#include<linux/pm_runtime.h> > > +#include<linux/types.h> > > +#include<linux/slab.h> > > +#include<linux/version.h> > > +#include<media/v4l2-ctrls.h> > > +#include<media/media-device.h> > > +#include<media/exynos_mc.h> > > + > > +static int __devinit mdev_probe(struct platform_device *pdev) { > > + struct v4l2_device *v4l2_dev; > > + struct exynos_md *mdev; > > + int ret; > > + > > + mdev = kzalloc(sizeof(struct exynos_md), GFP_KERNEL); > > + if (!mdev) > > + return -ENOMEM; > > + > > + mdev->id = pdev->id; > > + mdev->pdev = pdev; > > + spin_lock_init(&mdev->slock); > > + > > + snprintf(mdev->media_dev.model, sizeof(mdev->media_dev.model), > "%s%d", > > + dev_name(&pdev->dev), mdev->id); > > + > > + mdev->media_dev.dev =&pdev->dev; > > + > > + v4l2_dev =&mdev->v4l2_dev; > > + v4l2_dev->mdev =&mdev->media_dev; > > + snprintf(v4l2_dev->name, sizeof(v4l2_dev->name), "%s", > > + dev_name(&pdev->dev)); > > + > > + ret = v4l2_device_register(&pdev->dev,&mdev->v4l2_dev); > > + if (ret< 0) { > > + v4l2_err(v4l2_dev, "Failed to register v4l2_device: %d\n", > ret); > > + goto err_v4l2_reg; > > + } > > + ret = media_device_register(&mdev->media_dev); > > + if (ret< 0) { > > + v4l2_err(v4l2_dev, "Failed to register media device: %d\n", > ret); > > + goto err_mdev_reg; > > + } > > At this point you have registered a media device which isn't > functional, i.e. it doesn't have all expected entities. What is the > rationale behind such decision ? If you look at the s5p-fimc driver, > it ensures all entities and their drivers are present and then > registers a media device itself. > The data describing which entities are present in the system is > contained in the media device's platform_data. This is also helpful > for instantiation from the device tree, the media entities would be > described by child nodes of an aggregate node - which would bound to > the platform device driver registering a media device. > In exynos5, there are 3 media devices.(media0~2) First, media devices is probed according to "Makefile". And the last probed driver called v4l2_device_register_subdev_nodes using late_initcall. I know this is not great method. But in order to use mc, I think this is out of our control. > At this point exynos5 drivers are incompatible with s5p-fimc driver, > effectively preventing the modules reuse. > In exynos5, the fimc hardware is removed. > > + > > + platform_set_drvdata(pdev, mdev); > > + v4l2_info(v4l2_dev, "Media%d[0x%08x] was registered > successfully\n", > > + mdev->id, (unsigned int)mdev); > > + return 0; > > + > > +err_mdev_reg: > > + v4l2_device_unregister(&mdev->v4l2_dev); > > +err_v4l2_reg: > > + kfree(mdev); > > + return ret; > > +} > > + > > +static int __devexit mdev_remove(struct platform_device *pdev) { > > + struct exynos_md *mdev = platform_get_drvdata(pdev); > > + > > + if (!mdev) > > + return 0; > > + media_device_unregister(&mdev->media_dev); > > + v4l2_device_unregister(&mdev->v4l2_dev); > > + kfree(mdev); > > + return 0; > > +} > > + > > +static struct platform_driver mdev_driver = { > > + .probe = mdev_probe, > > + .remove = __devexit_p(mdev_remove), > > + .driver = { > > + .name = MDEV_MODULE_NAME, > > + .owner = THIS_MODULE, > > + } > > +}; > > + > > +int __init mdev_init(void) > > +{ > > + int ret = platform_driver_register(&mdev_driver); > > + if (ret) > > + err("platform_driver_register failed: %d\n", ret); > > + return ret; > > +} > > + > > +void __exit mdev_exit(void) > > +{ > > + platform_driver_unregister(&mdev_driver); > > +} > > + > > +module_init(mdev_init); > > +module_exit(mdev_exit); > > + > > +MODULE_AUTHOR("Hyunwoong Kim<khw0178.kim@xxxxxxxxxxx>"); > > +MODULE_DESCRIPTION("EXYNOS5 SoC series media device driver"); > > +MODULE_LICENSE("GPL"); > <snip> > > --- > > Thanks, > Sylwester -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html