summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorPer-Daniel Olsson <per-daniel.olsson@stericsson.com>2012-02-10 20:10:44 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:04:28 +0200
commitec3fd76a1edd94995318f1c3118e4abe8e47aced (patch)
tree86bb7fd5a49465bf45cb562e993ff4b74c175567 /drivers/video
parentfdd0c051aff401925d7e6a7118931245052d434a (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')
-rw-r--r--drivers/video/mcde/display-av8100.c42
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);
}