From: Davide Bonfanti <davide.bonfa...@bticino.it>

Signed-off-by: Davide Bonfanti <davide.bonfa...@bticino.it>
Signed-off-by: Raffaele Racalcati <raffaele.recalc...@bticino.it>
---
 drivers/video/davincifb.c |   22 ++++++++++++++++++++++
 include/video/davincifb.h |   11 +++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/drivers/video/davincifb.c b/drivers/video/davincifb.c
index dabee4d..2a7b2c9 100644
--- a/drivers/video/davincifb.c
+++ b/drivers/video/davincifb.c
@@ -904,6 +904,19 @@ static int davincifb_pan_display(struct fb_var_screeninfo 
*var,
  */
 static int davincifb_blank(int blank_mode, struct fb_info *info)
 {
+       if (blank_mode == 4) {
+               dm->output_device_config(0);
+               dm->ops->davincifb_power(&dm->osd0->info, 0);
+               dm->ops->davincifb_power(&dm->osd1->info, 0);
+               dm->ops->davincifb_power(&dm->vid0->info, 0);
+               dm->ops->davincifb_power(&dm->vid1->info, 0);
+       } else if (!blank_mode) {
+               dm->output_device_config(1);
+               dm->ops->davincifb_power(&dm->osd0->info, 1);
+               dm->ops->davincifb_power(&dm->osd1->info, 1);
+               dm->ops->davincifb_power(&dm->vid0->info, 1);
+               dm->ops->davincifb_power(&dm->vid1->info, 1);
+       }
        return 0;
 }
 
@@ -1416,6 +1429,10 @@ static int davincifb_remove(struct platform_device *pdev)
 
        /* Turn OFF the output device */
        dm->output_device_config(0);
+       dm->ops->davincifb_power(&dm->osd0->info, 0);
+       dm->ops->davincifb_power(&dm->osd1->info, 0);
+       dm->ops->davincifb_power(&dm->vid0->info, 0);
+       dm->ops->davincifb_power(&dm->vid1->info, 0);
 
        if (dm->mmio_base)
                iounmap((void *)dm->mmio_base);
@@ -1445,6 +1462,7 @@ static int davincifb_probe(struct platform_device *pdev)
        }
 
        pdata = pdev->dev.platform_data;
+       dm->ops = pdata->ops;
        /* map the regions */
        dm->mmio_base =
            (unsigned long)ioremap(dm->mmio_base_phys, dm->mmio_size);
@@ -1676,6 +1694,10 @@ static int davincifb_probe(struct platform_device *pdev)
 
        /* Turn ON the output device */
        dm->output_device_config(1);
+       dm->ops->davincifb_power(&dm->osd0->info, 1);
+       dm->ops->davincifb_power(&dm->osd1->info, 1);
+       dm->ops->davincifb_power(&dm->vid0->info, 1);
+       dm->ops->davincifb_power(&dm->vid1->info, 1);
 
        return (0);
 
diff --git a/include/video/davincifb.h b/include/video/davincifb.h
index 7e4f216..c3ecdd8 100644
--- a/include/video/davincifb.h
+++ b/include/video/davincifb.h
@@ -439,6 +439,17 @@ struct zoom_params
 };
 #define FBIO_SETZOOM           _IOW('F', 0x24, struct zoom_params)
 
+/*
+ * davincifb operations
+ *
+ * This functions are used in order to manage external hw that is platform
+ * dependent according to what is done on the framebuffer (turn LCD on/off,
+ * manage backlight, ...)
+ */
+
+struct davincifb_ops {
+       int (*davincifb_power)(struct fb_info *info, int on);
+};
 
 struct davincifb_platform_data {
        u32 xres;
-- 
1.7.0.4

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to