@@ -279,8 +279,11 @@ omapfb.test=<y|n>
- Draw test pattern to framebuffer whenever framebuffer settings change.
You need to have OMAPFB debug support enabled in kernel config.
-omapfb.vrfb=<y|n>
- - Use VRFB rotation for all framebuffers.
+omapfb.rotation_type= 0|1|2
+ - Select rotation type on hardware
+ 0 - Default: Use Optimal rotation style for the silicon
+ 1 - Force use VRFB rotation for all framebuffers if available
+ 2 - Use DSS to rotate all framebuffers
omapfb.rotate=<angle>
- Default rotation applied to all framebuffers.
b/arch/arm/plat-omap/include/plat/cpu.h
@@ -444,6 +444,7 @@ extern u32 omap3_features;
#define OMAP3_HAS_NEON BIT(3)
#define OMAP3_HAS_ISP BIT(4)
#define OMAP3_HAS_192MHZ_CLK BIT(5)
+#define OMAP3_HAS_VRFB BIT(6)
#define OMAP3_HAS_FEATURE(feat,flag) \
static inline unsigned int omap3_has_ ##feat(void) \
@@ -457,5 +458,6 @@ OMAP3_HAS_FEATURE(iva, IVA)
OMAP3_HAS_FEATURE(neon, NEON)
OMAP3_HAS_FEATURE(isp, ISP)
OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
+OMAP3_HAS_FEATURE(vrfb, VRFB)
#endif
b/drivers/video/omap2/omapfb/omapfb-main.c
@@ -33,6 +33,7 @@
#include <plat/display.h>
#include <plat/vram.h>
#include <plat/vrfb.h>
+#include <plat/cpu.h>
#include "omapfb.h"
@@ -43,7 +44,7 @@
static char *def_mode;
static char *def_vram;
-static int def_vrfb;
+static int def_rotate_type;
static int def_rotate;
static int def_mirror;
@@ -1872,8 +1873,14 @@ static int omapfb_create_framebuffers(struct
omapfb2_device *fbdev)
ofbi->id = i;
/* assign these early, so that fb alloc can use them */
- ofbi->rotation_type = def_vrfb ? OMAP_DSS_ROT_VRFB :
- OMAP_DSS_ROT_DMA;
+
+ /* Unless forced to use otherwise, use vrfb */
+ if (omap3_has_vrfb())
+ ofbi->rotation_type = (def_rot_style == 2) ?
+ OMAP_DSS_ROT_DMA : OMAP_DSS_ROT_VRFB;
+ else
+ ofbi->rotation_type = OMAP_DSS_ROT_DMA;
+
ofbi->mirror = def_mirror;