转自:http://blog.csdn.net/liujia2100/article/details/9009063

版权声明:本文为博主原创文章,未经博主允许不得转载。

之前移植LCD的时候,一切正常,但是当尝试把log输出到lcd的时候,总是会出现10分钟黑屏,无论如何都唤不醒
通过打log,最终定位到s3c_fb_blank这个函数。

  1. static int s3c_fb_blank(int blank_mode, struct fb_info *info)
  2. {
  3. struct s3c_fb_win *win = info->par;
  4. struct s3c_fb *sfb = win->parent;
  5. unsigned int index = win->index;
  6. u32 wincon;
  7. printk("lj:s3c_fb_blank:blank mode:%d\n",blank_mode);
  8. dev_dbg(sfb->dev, "blank mode %d\n", blank_mode);
  9. pm_runtime_get_sync(sfb->dev);
  10. wincon = readl(sfb->regs + sfb->variant.wincon + (index * 4));
  11. switch (blank_mode) {
  12. case FB_BLANK_POWERDOWN:
  13. wincon &= ~WINCONx_ENWIN;
  14. sfb->enabled &= ~(1 << index);
  15. /* fall through to FB_BLANK_NORMAL */
  16. case FB_BLANK_NORMAL:
  17. /* disable the DMA and display 0x0 (black) */
  18. shadow_protect_win(win, 1);
  19. dump_stack();
  20. writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia  disable the black screen
  21. sfb->regs + sfb->variant.winmap + (index * 4));
  22. shadow_protect_win(win, 0);
  23. break;
  24. case FB_BLANK_UNBLANK:
  25. shadow_protect_win(win, 1);
  26. writel(0x0, sfb->regs + sfb->variant.winmap + (index * 4));
  27. shadow_protect_win(win, 0);
  28. wincon |= WINCONx_ENWIN;
  29. sfb->enabled |= (1 << index);
  30. break;
  31. case FB_BLANK_VSYNC_SUSPEND:
  32. case FB_BLANK_HSYNC_SUSPEND:
  33. default:
  34. pm_runtime_put_sync(sfb->dev);
  35. return 1;
  36. }
  37. shadow_protect_win(win, 1);
  38. writel(wincon, sfb->regs + sfb->variant.wincon + (index * 4));
  39. shadow_protect_win(win, 0);
  40. /* Check the enabled state to see if we need to be running the
  41. * main LCD interface, as if there are no active windows then
  42. * it is highly likely that we also do not need to output
  43. * anything.
  44. */
  45. /* We could do something like the following code, but the current
  46. * system of using framebuffer events means that we cannot make
  47. * the distinction between just window 0 being inactive and all
  48. * the windows being down.
  49. *
  50. * s3c_fb_enable(sfb, sfb->enabled ? 1 : 0);
  51. */
  52. /* we're stuck with this until we can do something about overriding
  53. * the power control using the blanking event for a single fb.
  54. */
  55. if (index == sfb->pdata->default_win) {
  56. shadow_protect_win(win, 1);
  57. s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
  58. shadow_protect_win(win, 0);
  59. }
  60. pm_runtime_put_sync(sfb->dev);
  61. return 0;
  62. }

问题就出在
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

  1. case FB_BLANK_NORMAL:
  2. /* disable the DMA and display 0x0 (black) */
  3. shadow_protect_win(win, 1);
  4. dump_stack();
  5. writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia  disable the black screen
  6. sfb->regs + sfb->variant.winmap + (index * 4));
  7. shadow_protect_win(win, 0);
  8. break;

log:

  1. <7>[   61.285759] lj:s3c_fb_blank:blank mode:1
  2. <7>[   61.285772] lj:shadow_protect_win:1
  3. <7>[   61.285816] [<80013120>] (unwind_backtrace+0x0/0xec) from [<801af0b8>] (s3c_fb_blank+0x84/0x180)
  4. <7>[   61.285835] [<801af0b8>] (s3c_fb_blank+0x84/0x180) from [<801a2bcc>] (fb_blank+0x3c/0x68)
  5. <7>[   61.285852] [<801a2bcc>] (fb_blank+0x3c/0x68) from [<801a9690>] (fbcon_blank+0x118/0x260)
  6. <7>[   61.285875] [<801a9690>] (fbcon_blank+0x118/0x260) from [<801c7594>] (do_blank_screen+0x1b8/0x258)
  7. <7>[   61.285892] [<801c7594>] (do_blank_screen+0x1b8/0x258) from [<801c884c>] (console_callback+0xe4/0x114)
  8. <7>[   61.285909] [<801c884c>] (console_callback+0xe4/0x114) from [<8002e12c>] (process_one_work+0x1e8/0x318)
  9. <7>[   61.285927] [<8002e12c>] (process_one_work+0x1e8/0x318) from [<800301c0>] (worker_thread+0x1b4/0x2b4)
  10. <7>[   61.285947] [<800301c0>] (worker_thread+0x1b4/0x2b4) from [<80033438>] (kthread+0x88/0x94)
  11. <7>[   61.285969] [<80033438>] (kthread+0x88/0x94) from [<8000ec20>] (kernel_thread_exit+0x0/0x8)
  12. <7>[   61.285979] lj:shadow_protect_win:0
  13. <7>[   61.285984] lj:shadow_protect_win:1
  14. <7>[   61.285990] lj:shadow_protect_win:0
  15. <7>[   61.285995] lj:shadow_protect_win:1
  16. <7>[   61.286001] lj:s3c_fb_set_par
  17. <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;
这样就不会出现黑屏的现象了。

LCD 每隔10分钟 自动熄灭 --打开Framebuffer console的时候【转】的更多相关文章

  1. Linux下LCD 10分钟自动关屏的问题总结

    Linux下的LCD驱动默认10分钟后会自动关闭屏幕,我们可以修改一下代码让其不自动关屏 在有一个 drivers/char/vt.c 文件其中有一个变量(blankinterval)可以设置它来修改 ...

  2. 每隔10秒自动更新svn 定时更新svn 脚本

    任务: */1 * * * * /opt/adobe/fms/webroot/api/svn.sh 这个命令的问题:只更新了版本号,没有更新实际内容,但是直接运行上面shell脚本能更新. 解决:需要 ...

  3. DB2输出每隔10分钟的数据

    一.输出1-100的数据 此处参考 https://bbs.csdn.net/topics/390516027 with t(id) as ( as id from sysibm.sysdummy1 ...

  4. xxl-job踩坑记录——执行器,执行10分钟自动失败

    问题描述 上一篇Docker 部署xxl-job 报错:xxl-rpc remoting error(connect timed out), for url : xxxxxx - 这行代码没Bug - ...

  5. 解决win10隔几分钟自动黑屏睡眠的方法

    来源:win10总是很快自动休眠怎么解决? - 风格不空格的回答 - 知乎 https://www.zhihu.com/question/39263412/answer/87430653 1.运行注册 ...

  6. 用ab每隔30分钟并发一次休息10分钟

    linux脚本监控程序运行情况(重启程序)主要有两种情况:一种是一个可执行文件:如shell脚本文件:另一种是使用python打开的多个程序.第一种:它的进程名字由路径名字和程序名字组成,比如:我有个 ...

  7. 10分钟uniapp实现即时通讯,腾讯云IM的正确打开方式get

    官方的demo基本上覆盖了所有功能点 今天在使用uniapp开发即时通讯IM的时候遇到了瓶颈,便在uniapp的插件市场搜寻一波看看有没有成熟的轮子借鉴,终于发现了这个宝藏插件--"智密 - ...

  8. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  9. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...

随机推荐

  1. getline读取整行文本// isprint

    getline——读取整行文本 这个函数接受两个参数:一个输入流对象和一个string对象.getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符.和输入操作符不一样 ...

  2. 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)

    调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)

  3. BZOJ3167/BZOJ4824 HEOI2013SAO/CQOI2017老C的键盘(树形dp)

    前者是后者各方面的强化版. 容易想到设f[i][j]表示i子树中第j小的是i的方案数(即只考虑相对关系).比较麻烦的在于转移.考虑逐个合并子树.容易想到枚举根原来的排名和子树根原来的排名,算一发组合数 ...

  4. css边框以及其他常用样式

    1. 边框是1像素,实体的,红色的. <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  5. hadoop 把mapreduce任务从本地提交到hadoop集群上运行

    MapReduce任务有三种运行方式: 1.windows(linux)本地调试运行,需要本地hadoop环境支持 2.本地编译成jar包,手动发送到hadoop集群上用hadoop jar或者yar ...

  6. bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  7. BZOJ5340 & 洛谷4564 & LOJ2552:[CTSC2018]假面——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5340 https://www.luogu.org/problemnew/show/P4564 ht ...

  8. HDU1561:The more, The Better——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允 ...

  9. 斜率优化第一题! HDU3507 | 单调队列优化DP

    放一手原题 题解: 第一次写(抄)斜率优化,心里还是有点小激动的.讲一下怎么实现的! 首先我们可以考虑一个朴素的dp:DP[i]表示前i个数字的最少花费,显然我们有一个转移方程 DP[i]=min{D ...

  10. nodejs路径处理方法和绝对路径

    1. 路径处理方法 __dirname 表示当前文件所在的目录的绝对路径__filename 表示当前文件的绝对路径module.filename ==== __filename 等价process. ...