IMX6ULL elcd linux driver , how to stop the same frame transferring

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX6ULL elcd linux driver , how to stop the same frame transferring

949 Views
alven
Contributor I

We are using imx6ull processor and msxfb.c as our linux driver, it takes DOTCLK mode to display.  However , for the same view, the driver will continually send the same data to the screen.

My question is that is that possible to optimise it , making it only output the different screen data to lower the CPU load ?

*enable the dotclk mode and RUN bit*/
//writel(CTRL_DOTCLK_MODE | CTRL_RUN, host->base + LCDC_CTRL + REG_SET);

/*disable the dotclk mode*/
//writel(CTRL_DOTCLK_MODE, host->base + LCDC_CTRL + REG_CLR);

And could we just use the current buffer register in the linux driver ? and clearing the DOTCLK mode bit will stop the transferring ?

 

Labels (1)
0 Kudos
Reply
3 Replies

938 Views
igorpadykov
NXP Employee
NXP Employee

Hi Alven

 

>My question is that is that possible to optimise it , making it only output the
>different screen data to lower the CPU load ?

I am afraid it is not supported in hardware, sorry. For stop data transferring one can
look at sect.34.4.8.1 Code Example  i.MX 6ULL Applications Processor Reference Manual

 

Best regards
igor

0 Kudos
Reply

923 Views
alven
Contributor I

alven_0-1619138276973.jpeg

For the data transferring stop, could we just set the DOTCLK_MODE to 0?

thanks igor.

0 Kudos
Reply

929 Views
alven
Contributor I

HI igor,

we only use the current buffer register in 8080NPU mode in freertos, it could only out put what we wanted.

however , could we do the same thing in linux driver ? and its in DOTCLK mode.  I guess this interface is for screen output in mxsfb.c in linux driver.  Is that possible to make some optimization as well ?

static int mxsfb_pan_display(struct fb_var_screeninfo *var,
struct fb_info *fb_info)
{
int ret = 0;
struct mxsfb_info *host = fb_info->par;
unsigned offset;

if (host->cur_blank != FB_BLANK_UNBLANK) {
dev_dbg(fb_info->device, "can't do pan display when fb "
"is blank\n");
return -EINVAL;
}

if (var->xoffset > 0) {
dev_dbg(fb_info->device, "x panning not supported\n");
return -EINVAL;
}

if ((var->yoffset + var->yres > var->yres_virtual)) {
dev_err(fb_info->device, "y panning exceeds\n");
return -EINVAL;
}

init_completion(&host->flip_complete);

offset = fb_info->fix.line_length * var->yoffset;

/* update on next VSYNC */
writel(fb_info->fix.smem_start + offset,
host->base + host->devdata->cur_buf);

writel(CTRL1_CUR_FRAME_DONE_IRQ_EN,
host->base + LCDC_CTRL1 + REG_SET);

/*enable the dotclk mode and RUN bit*/
//writel(CTRL_DOTCLK_MODE | CTRL_RUN, host->base + LCDC_CTRL + REG_SET);

/*disable the dotclk mode*/
//writel(CTRL_DOTCLK_MODE, host->base + LCDC_CTRL + REG_CLR);

ret = wait_for_completion_timeout(&host->flip_complete, HZ / 2);
if (!ret) {
dev_err(fb_info->device,
"mxs wait for pan flip timeout\n");
return -ETIMEDOUT;
}

return 0;
}

thanks.

 

 

Tags (1)
0 Kudos
Reply