vrfb
struct vrfb vrfb_context[MAC_VRFB_CTXS];
if (rg->vrfb.vaddr[0]) {
iounmap(rg->vrfb.vaddr[0]);
rg->vrfb.vaddr[0] = NULL;
omap_vrfb_release_ctx(&rg->vrfb);
memset(&rg->vrfb, 0, sizeof rg->vrfb);
r = omap_vrfb_request_ctx(&rg->vrfb);
const struct vrfb *vrfb = &ofbi->region->vrfb;
offset = vrfb->yoffset;
offset = vrfb->yoffset * OMAP_VRFB_LINE_LEN + vrfb->xoffset;
offset = vrfb->xoffset * OMAP_VRFB_LINE_LEN;
offset *= vrfb->bytespp;
return ofbi->region->vrfb.paddr[rot]
return ofbi->region->vrfb.paddr[0];
return ofbi->region->vrfb.vaddr[0];
module_param_named(vrfb, def_vrfb, bool, 0);
struct vrfb *vrfb = &rg->vrfb;
if (yuv_mode != vrfb->yuv_mode)
else if (bytespp != vrfb->bytespp)
else if (vrfb->xres != var->xres_virtual ||
vrfb->yres != var->yres_virtual)
if (vrfb->vaddr[0] && reconf) {
iounmap(vrfb->vaddr[0]);
vrfb->vaddr[0] = NULL;
if (vrfb->vaddr[0])
omap_vrfb_setup(&rg->vrfb, rg->paddr,
r = omap_vrfb_map_angle(vrfb, var->yres_virtual, 0);
fbi->screen_base = ofbi->region->vrfb.vaddr[0];
fix->smem_start = ofbi->region->vrfb.paddr[0];
struct vrfb vrfb;
void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
u8 ctx = vrfb->context;
vrfb->xres = width;
vrfb->yres = height;
vrfb->xoffset = vrfb_width - width;
vrfb->yoffset = vrfb_height - height;
vrfb->bytespp = bytespp;
vrfb->yuv_mode = yuv_mode;
int omap_vrfb_map_angle(struct vrfb *vrfb, u16 height, u8 rot)
unsigned long size = height * OMAP_VRFB_LINE_LEN * vrfb->bytespp;
vrfb->vaddr[rot] = ioremap_wc(vrfb->paddr[rot], size);
if (!vrfb->vaddr[rot]) {
vrfb->vaddr[rot]);
void omap_vrfb_release_ctx(struct vrfb *vrfb)
int ctx = vrfb->context;
if (vrfb->paddr[rot]) {
release_mem_region(vrfb->paddr[rot], OMAP_VRFB_SIZE);
vrfb->paddr[rot] = 0;
vrfb->context = 0xff;
int omap_vrfb_request_ctx(struct vrfb *vrfb)
memset(vrfb, 0, sizeof(*vrfb));
vrfb->context = ctx;
omap_vrfb_release_ctx(vrfb);
vrfb->paddr[rot] = paddr;
DBG("VRFB %d/%d: %lx\n", ctx, rot*90, vrfb->paddr[rot]);
extern int omap_vrfb_request_ctx(struct vrfb *vrfb);
extern void omap_vrfb_release_ctx(struct vrfb *vrfb);
extern void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
extern int omap_vrfb_map_angle(struct vrfb *vrfb, u16 height, u8 rot);
static inline int omap_vrfb_request_ctx(struct vrfb *vrfb) { return 0; }
static inline void omap_vrfb_release_ctx(struct vrfb *vrfb) {}
static inline void omap_vrfb_setup(struct vrfb *vrfb, unsigned long paddr,
static inline int omap_vrfb_map_angle(struct vrfb *vrfb, u16 height, u8 rot)