From: Imre Deak Date: Mon, 20 Apr 2009 12:55:33 +0000 (+0200) Subject: DSS2: add sysfs entry for seting the rotate type X-Git-Tag: Release-2010-05/1~2^2~98 X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=commitdiff_plain;h=692f1b97c597b3f2885c88328c7c990466984aad DSS2: add sysfs entry for seting the rotate type 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. --- diff --git a/drivers/video/omap2/omapfb/omapfb-sysfs.c b/drivers/video/omap2/omapfb/omapfb-sysfs.c index 2c887186152f..4e3da42a7bc8 100644 --- a/drivers/video/omap2/omapfb/omapfb-sysfs.c +++ b/drivers/video/omap2/omapfb/omapfb-sysfs.c @@ -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),