video: rockchip: rk fb: add disp mode for VR
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / rkfb_sysfs.c
index 2554aa3702328ab9befe066cc24b48a9a5da875a..d40d98a1fa8571882eab7ac45cb5e2afc6b7c834 100644 (file)
@@ -411,12 +411,14 @@ static ssize_t set_dump_buffer(struct device *dev,
                        u16 xact, yact;
                        int data_format;
                        u32 dsp_addr;
+                       int ymirror;
 
                        mutex_unlock(&dev_drv->front_lock);
 
                        if (dev_drv->ops->get_dspbuf_info)
                                dev_drv->ops->get_dspbuf_info(dev_drv, &xact,
-                                               &yact, &data_format, &dsp_addr);
+                                               &yact, &data_format, &dsp_addr,
+                                               &ymirror);
 
                        dump_win(NULL, NULL, dsp_addr, xact, yact, data_format,
                                 0, 0, 0, is_bmp, false);
@@ -686,7 +688,7 @@ static ssize_t show_overlay(struct device *dev,
        struct fb_info *fbi = dev_get_drvdata(dev);
        struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
        struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
-       int ovl;
+       int ovl = 0;
 
        if (dev_drv->ops->ovl_mgr)
                ovl = dev_drv->ops->ovl_mgr(dev_drv, 0, 0);
@@ -725,7 +727,7 @@ static ssize_t show_fps(struct device *dev,
        struct fb_info *fbi = dev_get_drvdata(dev);
        struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
        struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
-       int fps;
+       int fps = 0;
 
        if (dev_drv->ops->fps_mgr)
                fps = dev_drv->ops->fps_mgr(dev_drv, 0, 0);
@@ -956,7 +958,7 @@ static ssize_t set_dsp_cabc(struct device *dev, struct device_attribute *attr,
        struct fb_info *fbi = dev_get_drvdata(dev);
        struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
        struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
-       int space_max, ret, mode = 0, calc = 0, up = 0, down = 0, global = 0;
+       int space_max, ret = 0, mode = 0, calc = 0, up = 0, down = 0, global = 0;
        const char *start = buf;
 
        space_max = 10; /*max space number 10*/
@@ -1003,7 +1005,7 @@ static ssize_t show_dsp_bcsh(struct device *dev,
        struct fb_info *fbi = dev_get_drvdata(dev);
        struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
        struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
-       int brightness, contrast, sat_con, sin_hue, cos_hue;
+       int brightness = 0, contrast = 0, sat_con = 0, sin_hue = 0, cos_hue = 0;
 
        if (dev_drv->ops->get_dsp_bcsh_bcs) {
                brightness = dev_drv->ops->get_dsp_bcsh_bcs(dev_drv,
@@ -1192,6 +1194,52 @@ static ssize_t show_lcdc_id(struct device *dev,
        return snprintf(buf, PAGE_SIZE, "%d\n", dev_drv->id);
 }
 
+static ssize_t show_dsp_mode(struct device *dev,
+                           struct device_attribute *attr,
+                           char *buf)
+{
+       struct fb_info *fbi = dev_get_drvdata(dev);
+       struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
+       struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
+
+       return snprintf(buf, PAGE_SIZE, "%d\n", dev_drv->dsp_mode);
+}
+
+static ssize_t show_win_property(struct device *dev,
+                           struct device_attribute *attr,
+                           char *buf)
+{
+       struct fb_info *fbi = dev_get_drvdata(dev);
+       struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
+       struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
+       int win_id = 0;
+
+       win_id = dev_drv->ops->fb_get_win_id(dev_drv, fbi->fix.id);
+       return snprintf(buf, PAGE_SIZE,
+                       "feature: %d, max_input_x: %d, max_input_y: %d\n",
+                       dev_drv->win[win_id]->property.feature,
+                       dev_drv->win[win_id]->property.max_input_x,
+                       dev_drv->win[win_id]->property.max_input_y);
+}
+
+static ssize_t set_car_reverse(struct device *dev,
+                              struct device_attribute *attr,
+                              const char *buf, size_t count)
+{
+       struct fb_info *fbi = dev_get_drvdata(dev);
+       struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
+       struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
+       u32 status;
+       int ret;
+
+       ret = kstrtou32(buf, 0, &status);
+       if (ret)
+               return ret;
+       rk_fb_set_car_reverse_status(dev_drv, status);
+
+       return count;
+}
+
 static struct device_attribute rkfb_attrs[] = {
        __ATTR(phys_addr, S_IRUGO, show_phys, NULL),
        __ATTR(virt_addr, S_IRUGO, show_virt, NULL),
@@ -1211,6 +1259,9 @@ static struct device_attribute rkfb_attrs[] = {
        __ATTR(bcsh, S_IRUGO | S_IWUSR, show_dsp_bcsh, set_dsp_bcsh),
        __ATTR(scale, S_IRUGO | S_IWUSR, show_scale, set_scale),
        __ATTR(lcdcid, S_IRUGO, show_lcdc_id, NULL),
+       __ATTR(win_property, S_IRUGO, show_win_property, NULL),
+       __ATTR(car_reverse, S_IWUSR, NULL, set_car_reverse),
+       __ATTR(dsp_mode, S_IRUGO, show_dsp_mode, NULL),
 };
 
 int rkfb_create_sysfs(struct fb_info *fbi)