Add rotation and mirroring ops to writeback panel driver. Use these ops to
get/set wb info.

Signed-off-by: Archit Taneja <[email protected]>
---
 drivers/video/omap2/dss/writeback.c |   79 +++++++++++++++++++++++++++++++++++
 1 files changed, 79 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/writeback.c 
b/drivers/video/omap2/dss/writeback.c
index 82d601c..215958e 100644
--- a/drivers/video/omap2/dss/writeback.c
+++ b/drivers/video/omap2/dss/writeback.c
@@ -287,9 +287,83 @@ static int writeback_panel_resume(struct omap_dss_device 
*dssdev)
        return 0;
 }
 
+static int writeback_panel_rotate(struct omap_dss_device *dssdev, u8 rotate)
+{
+       int r;
+       struct omap_dss_writeback *wb = dssdev->wbdev;
+       struct omap_dss_writeback_info info;
+
+       wb->get_wb_info(wb, &info);
+
+       info.rotation = rotate;
+
+       r = wb->set_wb_info(wb, &info);
+       if (r) {
+               dev_err(&dssdev->dev, "failed to set rotation %d\n", rotate);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static u8 writeback_panel_get_rotate(struct omap_dss_device *dssdev)
+{
+       struct omap_dss_writeback *wb = dssdev->wbdev;
+       struct omap_dss_writeback_info info;
+
+       wb->get_wb_info(wb, &info);
+
+       return info.rotation;
+}
+
+static int writeback_panel_mirror(struct omap_dss_device *dssdev, bool mirror)
+{
+       int r;
+       struct omap_dss_writeback *wb = dssdev->wbdev;
+       struct omap_dss_writeback_info info;
+
+       wb->get_wb_info(wb, &info);
+
+       info.mirror = mirror;
+
+       r = wb->set_wb_info(wb, &info);
+       if (r) {
+               dev_err(&dssdev->dev, "failed to set mirror %d\n", mirror);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static bool writeback_panel_get_mirror(struct omap_dss_device *dssdev)
+{
+       struct omap_dss_writeback *wb = dssdev->wbdev;
+       struct omap_dss_writeback_info info;
+
+       wb->get_wb_info(wb, &info);
+
+       return info.mirror;
+}
+
 static void writeback_panel_set_timings(struct omap_dss_device *dssdev,
                struct omap_video_timings *timings)
 {
+       int r;
+       struct omap_dss_writeback *wb = dssdev->wbdev;
+       struct omap_dss_writeback_info info;
+
+       wb->get_wb_info(wb, &info);
+
+       info.buf_width = timings->x_res;
+       info.buf_height = timings->y_res;
+
+       r = wb->set_wb_info(wb, &info);
+       if (r) {
+               dev_err(&dssdev->dev, "failed to set timings %d, %d\n",
+                       timings->x_res, timings->y_res);
+               return;
+       }
+
        dssdev->panel.timings.x_res = timings->x_res;
        dssdev->panel.timings.y_res = timings->y_res;
 }
@@ -315,6 +389,11 @@ static struct omap_dss_driver writeback_panel_driver = {
        .suspend = writeback_panel_suspend,
        .resume = writeback_panel_resume,
 
+       .set_rotate = writeback_panel_rotate,
+       .get_rotate = writeback_panel_get_rotate,
+       .set_mirror = writeback_panel_mirror,
+       .get_mirror = writeback_panel_get_mirror,
+
        .set_timings = writeback_panel_set_timings,
        .get_timings = writeback_panel_get_timings,
        .check_timings = writeback_panel_check_timings,
-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to