版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。
之前移植LCD的時候,一切正常,但是當嘗試把log輸出到lcd的時候,總是會出現10分鐘黑屏,無論如何都喚不醒
通過打log,最終定位到s3c_fb_blank這個函數。
static int s3c_fb_blank(int blank_mode, struct fb_info *info)
{
struct s3c_fb_win *win = info->par;
struct s3c_fb *sfb = win->parent;
unsigned int index = win->index;
u32 wincon;
printk("lj:s3c_fb_blank:blank mode:%d\n",blank_mode);
dev_dbg(sfb->dev, "blank mode %d\n", blank_mode);
pm_runtime_get_sync(sfb->dev);
wincon = readl(sfb->regs + sfb->variant.wincon + (index * 4));
switch (blank_mode) {
case FB_BLANK_POWERDOWN:
wincon &= ~WINCONx_ENWIN;
sfb->enabled &= ~(1 << index);
/* fall through to FB_BLANK_NORMAL */
case FB_BLANK_NORMAL:
/* disable the DMA and display 0x0 (black) */
shadow_protect_win(win, 1);
dump_stack();
writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia disable the black screen
sfb->regs + sfb->variant.winmap + (index * 4));
shadow_protect_win(win, 0);
break;
case FB_BLANK_UNBLANK:
writel(0x0, sfb->regs + sfb->variant.winmap + (index * 4));
wincon |= WINCONx_ENWIN;
sfb->enabled |= (1 << index);
case FB_BLANK_VSYNC_SUSPEND:
case FB_BLANK_HSYNC_SUSPEND:
default:
pm_runtime_put_sync(sfb->dev);
return 1;
}
shadow_protect_win(win, 1);
writel(wincon, sfb->regs + sfb->variant.wincon + (index * 4));
shadow_protect_win(win, 0);
/* Check the enabled state to see if we need to be running the
* main LCD interface, as if there are no active windows then
* it is highly likely that we also do not need to output
* anything.
*/
/* We could do something like the following code, but the current
* system of using framebuffer events means that we cannot make
* the distinction between just window 0 being inactive and all
* the windows being down.
*
* s3c_fb_enable(sfb, sfb->enabled ? 1 : 0);
*/
/* we're stuck with this until we can do something about overriding
* the power control using the blanking event for a single fb.
if (index == sfb->pdata->default_win) {
s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
pm_runtime_put_sync(sfb->dev);
return 0;
}
問題就出在
writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia disable the black screen
sfb->regs + sfb->variant.winmap + (index * 4));
發現執行到這裡,LCD就黑屏了。
查資料手冊發現:

這個寄存器的意思是,當MAPCOLEN_F使能的時候,他會把LCD顯示成MAPCOLOR設定成顔色,關閉LCD的DMA功能,然後Framebuffer就不能重新整理LCD了。
這也許就是FB_BLANK_NORMAL,這個的功能吧,把LCD一直刷成某個顔色。
參考http://blog.csdn.net/zanget/article/details/6569743這個 大俠的部落格,
加入dump_stack
case FB_BLANK_NORMAL:
/* disable the DMA and display 0x0 (black) */
dump_stack();
writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia disable the black screen
sfb->regs + sfb->variant.winmap + (index * 4));
break;
log:
<7>[ 61.285759] lj:s3c_fb_blank:blank mode:1
<7>[ 61.285772] lj:shadow_protect_win:1
<7>[ 61.285816] [<80013120>] (unwind_backtrace+0x0/0xec) from [<801af0b8>] (s3c_fb_blank+0x84/0x180)
<7>[ 61.285835] [<801af0b8>] (s3c_fb_blank+0x84/0x180) from [<801a2bcc>] (fb_blank+0x3c/0x68)
<7>[ 61.285852] [<801a2bcc>] (fb_blank+0x3c/0x68) from [<801a9690>] (fbcon_blank+0x118/0x260)
<7>[ 61.285875] [<801a9690>] (fbcon_blank+0x118/0x260) from [<801c7594>] (do_blank_screen+0x1b8/0x258)
<7>[ 61.285892] [<801c7594>] (do_blank_screen+0x1b8/0x258) from [<801c884c>] (console_callback+0xe4/0x114)
<7>[ 61.285909] [<801c884c>] (console_callback+0xe4/0x114) from [<8002e12c>] (process_one_work+0x1e8/0x318)
<7>[ 61.285927] [<8002e12c>] (process_one_work+0x1e8/0x318) from [<800301c0>] (worker_thread+0x1b4/0x2b4)
<7>[ 61.285947] [<800301c0>] (worker_thread+0x1b4/0x2b4) from [<80033438>] (kthread+0x88/0x94)
<7>[ 61.285969] [<80033438>] (kthread+0x88/0x94) from [<8000ec20>] (kernel_thread_exit+0x0/0x8)
<7>[ 61.285979] lj:shadow_protect_win:0
<7>[ 61.285984] lj:shadow_protect_win:1
<7>[ 61.285990] lj:shadow_protect_win:0
<7>[ 61.285995] lj:shadow_protect_win:1
<7>[ 61.286001] lj:s3c_fb_set_par
<7>[ 61.286005] lj:shadow_protect_win:0
找到了調用關系
console_callback--->do_blank_screen--->fb_blank--->s3c_fb_blank.
按照http://blog.csdn.net/zanget/article/details/6569743修改方法
将vt.c 179行
static int blankinterval = 10*60;
修改為
static int blankinterval = 0;
這樣就不會出現黑屏的現象了。
本文轉自張昺華-sky部落格園部落格,原文連結:http://www.cnblogs.com/sky-heaven/p/7650478.html,如需轉載請自行聯系原作者