mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 20:32:04 +09:00
fix bug in open and close fb1
This commit is contained in:
@@ -13,9 +13,9 @@
|
||||
#if defined(CONFIG_MACH_RK29SDK)
|
||||
#define OUT_FACE OUT_D888_P666
|
||||
#elif defined(CONFIG_MACH_RK29_AIGO)
|
||||
#define OUT_FACE OUT_D888_P666 //OUT_P888
|
||||
#define OUT_FACE OUT_D888_P666 //OUT_P888
|
||||
#endif
|
||||
#define OUT_CLK 65000000
|
||||
#define OUT_CLK 58500000 // 65000000
|
||||
#define LCDC_ACLK 312000000 //29 lcdc axi DMA Ƶ<><C6B5>
|
||||
|
||||
/* Timing */
|
||||
|
||||
@@ -1533,11 +1533,11 @@ static int fb1_set_par(struct fb_info *info)
|
||||
smem_len = fix->line_length * yvir + cblen + crlen;
|
||||
map_size = PAGE_ALIGN(smem_len);
|
||||
|
||||
fix->smem_start = y_addr;
|
||||
// fix->smem_start = y_addr;
|
||||
fix->smem_len = smem_len;
|
||||
fix->mmio_start = uv_addr;
|
||||
// fix->mmio_start = uv_addr;
|
||||
|
||||
par->addr_seted = ((-1==(int)y_addr) || (0==(int)y_addr) || (win0_en==0)) ? 0 : 1;
|
||||
// par->addr_seted = ((-1==(int)y_addr) || (0==(int)y_addr) || (win0_en==0)) ? 0 : 1;
|
||||
fbprintk("buffer alloced by user fix->smem_start = %8x, fix->smem_len = %8x, fix->mmio_start = %8x \n", (u32)fix->smem_start, (u32)fix->smem_len, (u32)fix->mmio_start);
|
||||
|
||||
par->format = format;
|
||||
@@ -1554,8 +1554,9 @@ static int fb1_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
struct win0_par *par = info->par;
|
||||
// enable win0 after the win0 addr is seted
|
||||
par->par_seted = 1;
|
||||
|
||||
win0_pan(info);
|
||||
par->par_seted = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1592,7 +1593,8 @@ int fb1_release(struct fb_info *info, int user)
|
||||
par->refcount--;
|
||||
inf->video_mode = 0;
|
||||
par->par_seted = 0;
|
||||
|
||||
par->addr_seted = 0;
|
||||
win0_blank(FB_BLANK_POWERDOWN, info);
|
||||
win1_blank(FB_BLANK_POWERDOWN, info);
|
||||
// wait for lcdc stop access memory
|
||||
msleep(50);
|
||||
@@ -1612,6 +1614,7 @@ static int fb1_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct rk29fb_inf *inf = dev_get_drvdata(info->device);
|
||||
struct win0_par *par = info->par;
|
||||
struct fb_fix_screeninfo *fix0 = &info->fix;
|
||||
void __user *argp = (void __user *)arg;
|
||||
|
||||
fbprintk(">>>>>> %s : %s \n", __FILE__, __FUNCTION__);
|
||||
@@ -1645,12 +1648,15 @@ static int fb1_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
|
||||
|
||||
yuv_phy[0] += par->y_offset;
|
||||
yuv_phy[1] += par->c_offset;
|
||||
fix0->smem_start = yuv_phy[0];
|
||||
fix0->mmio_start = yuv_phy[1];
|
||||
|
||||
LcdWrReg(inf, WIN0_YRGB_MST, yuv_phy[0]);
|
||||
LcdWrReg(inf, WIN0_CBR_MST, yuv_phy[1]);
|
||||
LcdWrReg(inf, REG_CFG_DONE, 0x01);
|
||||
// enable win0 after the win0 par is seted
|
||||
LcdMskReg(inf, SYS_CONFIG, m_W0_ENABLE, v_W0_ENABLE(par->par_seted && par->addr_seted));
|
||||
par->addr_seted = 1;
|
||||
LcdWrReg(inf, REG_CFG_DONE, 0x01);
|
||||
if(par->par_seted) {
|
||||
unsigned long flags;
|
||||
if (par->mirror.c_offset) {
|
||||
@@ -1661,7 +1667,6 @@ static int fb1_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
|
||||
}
|
||||
|
||||
local_irq_save(flags);
|
||||
LcdMskReg(inf, SYS_CONFIG, m_W0_ENABLE, v_W0_ENABLE(par->par_seted));
|
||||
par->mirror.y_offset = yuv_phy[0];
|
||||
par->mirror.c_offset = yuv_phy[1];
|
||||
local_irq_restore(flags);
|
||||
|
||||
Reference in New Issue
Block a user