DSS2: add sysfs entry for seting the rotate type
authorImre Deak <imre.deak@nokia.com>
Mon, 20 Apr 2009 12:55:33 +0000 (14:55 +0200)
committerGrazvydas Ignotas <notasas@gmail.com>
Fri, 1 May 2009 16:45:10 +0000 (19:45 +0300)
This can help in utilizing VRAM memory better. Since with VRFB rotation
we waste a lot of physical memory due to the VRFB HW design, provide the
possibility to turn it off and free the extra memory for the use by other
planes for example.

drivers/video/omap2/omapfb/omapfb-sysfs.c

index 2c88718..4e3da42 100644 (file)
@@ -43,6 +43,46 @@ static ssize_t show_rotate_type(struct device *dev,
        return snprintf(buf, PAGE_SIZE, "%d\n", ofbi->rotation_type);
 }
 
+static ssize_t store_rotate_type(struct device *dev,
+               struct device_attribute *attr,
+               const char *buf, size_t count)
+{
+       struct fb_info *fbi = dev_get_drvdata(dev);
+       struct omapfb_info *ofbi = FB2OFB(fbi);
+       struct omapfb2_device *fbdev = ofbi->fbdev;
+       enum omap_dss_rotation_type rot_type;
+       int r;
+
+       rot_type = simple_strtoul(buf, NULL, 0);
+
+       if (rot_type != OMAP_DSS_ROT_DMA && rot_type != OMAP_DSS_ROT_VRFB)
+               return -EINVAL;
+
+       omapfb_lock(fbdev);
+
+       r = 0;
+       if (rot_type == ofbi->rotation_type)
+               goto out;
+
+       r = -EBUSY;
+       if (ofbi->region.size)
+               goto out;
+
+       ofbi->rotation_type = rot_type;
+
+       /*
+        * Since the VRAM for this FB is not allocated at the moment we don't need to
+        * do any further parameter checking at this point.
+        */
+
+       r = count;
+out:
+       omapfb_unlock(fbdev);
+
+       return r;
+}
+
+
 static ssize_t show_mirror(struct device *dev,
                struct device_attribute *attr, char *buf)
 {
@@ -327,7 +367,7 @@ static ssize_t show_virt(struct device *dev,
 }
 
 static struct device_attribute omapfb_attrs[] = {
-       __ATTR(rotate_type, S_IRUGO, show_rotate_type, NULL),
+       __ATTR(rotate_type, S_IRUGO | S_IWUSR, show_rotate_type, store_rotate_type),
        __ATTR(mirror, S_IRUGO | S_IWUSR, show_mirror, store_mirror),
        __ATTR(size, S_IRUGO | S_IWUSR, show_size, store_size),
        __ATTR(overlays, S_IRUGO | S_IWUSR, show_overlays, store_overlays),