diff options
author | Per-Daniel Olsson <per-daniel.olsson@stericsson.com> | 2012-02-10 20:10:44 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:04:28 +0200 |
commit | ec3fd76a1edd94995318f1c3118e4abe8e47aced (patch) | |
tree | 86bb7fd5a49465bf45cb562e993ff4b74c175567 /drivers/video/mcde | |
parent | fdd0c051aff401925d7e6a7118931245052d434a (diff) |
misc: clonedev: New device for cloning
A new device for content cloning between drifferent instances of comdev has
been added.
ST-Ericsson Linux next: NA
ST-Ericsson ID: 404691
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I8c96bede685fad46ebb51b0217c48164dcad6659
Signed-off-by: Per-Daniel Olsson <per-daniel.olsson@stericsson.com>
Conflicts:
drivers/video/mcde/display-av8100.c
Signed-off-by: Per-Daniel Olsson <per-daniel.olsson@stericsson.com>
Change-Id: I8c96bede685fad46ebb51b0217c48164dcad6659
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/49977
Reviewed-by: Robert FEKETE <robert.fekete@stericsson.com>
Diffstat (limited to 'drivers/video/mcde')
-rw-r--r-- | drivers/video/mcde/display-av8100.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/drivers/video/mcde/display-av8100.c b/drivers/video/mcde/display-av8100.c index b443f7f1760..70750998824 100644 --- a/drivers/video/mcde/display-av8100.c +++ b/drivers/video/mcde/display-av8100.c @@ -17,6 +17,8 @@ #include <linux/gpio.h> #include <linux/io.h> #include <linux/slab.h> +#include <linux/compdev.h> +#include <linux/clonedev.h> #include <video/mcde_fb.h> #include <video/mcde_display.h> @@ -199,6 +201,9 @@ static ssize_t store_disponoff(struct device *dev, bool enable = false; u8 cea = 0; u8 vesa_cea_nr = 0; +#ifdef CONFIG_COMPDEV + struct mcde_fb *mfb; +#endif dev_dbg(dev, "%s\n", __func__); @@ -211,7 +216,7 @@ static ssize_t store_disponoff(struct device *dev, vesa_cea_nr = (hex_to_bin(buf[4]) << 4) + hex_to_bin(buf[5]); dev_dbg(dev, "enable:%d cea:%d nr:%d\n", enable, cea, vesa_cea_nr); - if (enable && !mdev->enabled && mdev->fbi == NULL) { + if (enable && !mdev->fbi) { struct display_driver_data *driver_data = dev_get_drvdata(dev); u16 w = mdev->native_x_res; u16 h = mdev->native_y_res, vh; @@ -226,7 +231,40 @@ static ssize_t store_disponoff(struct device *dev, dev_warn(dev, "fb create failed\n"); else driver_data->fbdevname = dev_name(fbi->dev); - } else if (!enable && mdev->enabled) { + +#ifdef CONFIG_COMPDEV + /* TODO need another way for compdev to get actual size */ + mdev->native_x_res = w; + mdev->native_y_res = h; + + mfb = to_mcde_fb(fbi); + /* Create a compdev overlay for this display */ + if (compdev_create(mdev, mfb->ovlys[0], false) < 0) { + dev_warn(&mdev->dev, + "Failed to create compdev for display %s\n", + mdev->name); + } else { + dev_dbg(&mdev->dev, "compdev created for (%s)\n", + mdev->name); + } +#ifdef CONFIG_CLONEDEV + if (clonedev_create()) { + dev_warn(&mdev->dev, + "Failed to create clonedev for display %s\n", + mdev->name); + } else { + dev_dbg(&mdev->dev, "clonedev created for (%s)\n", + mdev->name); + } +#endif +#endif + } else if (!enable && mdev->fbi) { +#ifdef CONFIG_CLONEDEV + clonedev_destroy(); +#endif +#ifdef CONFIG_COMPDEV + compdev_destroy(mdev); +#endif mcde_fb_destroy(mdev); } |