打印
[i.MX]

imx53 LCD+TV_OUT ,green screen on TV(已解决)

[复制链接]
3685|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 FSL_TICS_imx 于 2014-9-12 16:43 编辑

如题,Androidr10.3.4
bsp :  IMX53smd
双屏显示,LCD正常,TV_OUT 显示为绿色 屏幕。
求解决。
uboot 参数:
setenv bootargs 'console=ttymxc0 init=/init androidboot.console=ttymxc0  video=mxcdi0fb:RGB666,G121X1 ldb=di0 di0_primary  video=mxcdi1fb:YUV444,TV-PAL tve bpp'

相关帖子

沙发
FSL_TICS_Rita| | 2014-8-22 17:35 | 只看该作者
楼主你好,请问你可以截个屏看一下TV_OUT 显示是什么情况吗?

使用特权

评论回复
板凳
FSL_TICS_Rita| | 2014-8-22 17:35 | 只看该作者
是除了颜色不对,其他显示都是OK吗?

使用特权

评论回复
地板
xyh12344|  楼主 | 2014-8-26 10:13 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-22 17:35
是除了颜色不对,其他显示都是OK吗?

是的,,只有颜色不对,其他的全部正常

使用特权

评论回复
5
xyh12344|  楼主 | 2014-8-26 10:16 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-22 17:35
楼主你好,请问你可以截个屏看一下TV_OUT 显示是什么情况吗?

tve work on  green screen.

lcd work correctly

使用特权

评论回复
6
FSL_TICS_Rita| | 2014-8-26 16:12 | 只看该作者
楼主你好,这个我们需要帮你确认一下~~还不知道是什么原因~~

使用特权

评论回复
7
FSL_TICS_Rita| | 2014-8-27 15:17 | 只看该作者
楼主你好,这里有可能是你tve驱动的问题,请你寄存器TVE_COM_CONF_REG是如何设置的,TV_OUT_MODE选择的是哪个?

使用特权

评论回复
8
xyh12344|  楼主 | 2014-8-28 09:26 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-27 15:17
楼主你好,这里有可能是你tve驱动的问题,请你寄存器TVE_COM_CONF_REG是如何设置的,TV_OUT_MODE选择的是哪 ...

这个,我没设置啊,都是默认的,,,

使用特权

评论回复
9
FSL_TICS_Rita| | 2014-8-28 09:30 | 只看该作者
xyh12344 发表于 2014-8-28 09:26
这个,我没设置啊,都是默认的,,,

你好,我是回答你SR的那个人,我们的CRM系统有些问题,现在附件看不了,昨天我也给你发邮件了,你把附件再发给我一份,我看一下。由于我们中国这边没有i.mx53SMD这块板子,所以也没有办法帮你调试的。只能帮你分析原因了,希望您能够理解。

使用特权

评论回复
10
xyh12344|  楼主 | 2014-8-28 10:11 | 只看该作者
本帖最后由 xyh12344 于 2014-8-28 10:12 编辑
FSL_TICS_Rita 发表于 2014-8-28 09:30
你好,我是回答你SR的那个人,我们的CRM系统有些问题,现在附件看不了,昨天我也给你发邮件了,你把附件 ...

好的,

static int tve_update_detect_status(void)
{
int old_detect = tve.detect;
u32 stat_lm, stat_sm, stat;
u32 int_ctl;
u32 cd_cont_reg;
u32 timeout = 40;
unsigned long lock_flags;
char event_string[16];
char *envp[] = { event_string, NULL };
#ifdef CONFIG_MACH_MX53_KSW
tve.detect = 3;
tve.output_mode = YPBPR;
return tve.detect;
#else
spin_lock_irqsave(&tve_lock, lock_flags);
if (!enabled) {
  pr_warning("Warning: update tve status while it disabled!\n");
  tve.detect = 0;
  goto done;
}
int_ctl = __raw_readl(tve.base + tve_regs->tve_int_cont_reg);
cd_cont_reg = __raw_readl(tve.base + tve_regs->tve_cd_cont_reg);
if ((cd_cont_reg & 0x1) == 0) {
  pr_warning("Warning: pls enable TVE CD first!\n");
  goto done;
}
stat = __raw_readl(tve.base + tve_regs->tve_stat_reg);
while (((stat & CD_MON_END_INT) == 0) && (timeout > 0)) {
  spin_unlock_irqrestore(&tve_lock, lock_flags);
  msleep(2);
  spin_lock_irqsave(&tve_lock, lock_flags);
  timeout -= 2;
  if (!enabled) {
   pr_warning("Warning: update tve status while it disabled!\n");
   tve.detect = 0;
   goto done;
  } else
   stat = __raw_readl(tve.base + tve_regs->tve_stat_reg);
}
if (((stat & CD_MON_END_INT) == 0) && (timeout <= 0)) {
  pr_warning("Warning: get detect result without CD_MON_END_INT!\n");
  goto done;
}
stat = stat >> tve_reg_fields->cd_ch_stat_offset;
stat_lm = stat & (CD_CH_0_LM_ST | CD_CH_1_LM_ST | CD_CH_2_LM_ST);
if ((stat_lm == (CD_CH_0_LM_ST | CD_CH_1_LM_ST | CD_CH_2_LM_ST)) &&
  ((stat & (CD_CH_0_SM_ST | CD_CH_1_SM_ST | CD_CH_2_SM_ST)) == 0)
  ) {
   tve.detect = 3;
   tve.output_mode = YPBPR;
} else if ((stat_lm == (CD_CH_0_LM_ST | CD_CH_1_LM_ST)) &&
  ((stat & (CD_CH_0_SM_ST | CD_CH_1_SM_ST)) == 0)) {
   tve.detect = 4;
   tve.output_mode = SVIDEO;
} else if (stat_lm == CD_CH_0_LM_ST) {
  stat_sm = stat & CD_CH_0_SM_ST;
  if (stat_sm != 0) {
   /* headset */
   tve.detect = 2;
   tve.output_mode = TV_OFF;
  } else {
   tve.detect = 1;
   tve.output_mode = CVBS0;
  }
} else if (stat_lm == CD_CH_2_LM_ST) {
  stat_sm = stat & CD_CH_2_SM_ST;
  if (stat_sm != 0) {
   /* headset */
   tve.detect = 2;
   tve.output_mode = TV_OFF;
  } else {
   tve.detect = 1;
   tve.output_mode = CVBS2;
  }
} else {
  /* none */
  tve.detect = 0;
  tve.output_mode = TV_OFF;
}
tve_set_tvout_mode(tve.output_mode);
/* clear interrupt */
__raw_writel(CD_MON_END_INT | CD_LM_INT | CD_SM_INT,
   tve.base + tve_regs->tve_stat_reg);
__raw_writel(int_ctl | CD_SM_INT | CD_LM_INT,
   tve.base + tve_regs->tve_int_cont_reg);
done:
spin_unlock_irqrestore(&tve_lock, lock_flags);
if (old_detect != tve.detect) {
  sysfs_notify(&tve.pdev->dev.kobj, NULL, "headphone");
  if (tve.detect == 1)
   sprintf(event_string, "EVENT=CVBS0");
  else if (tve.detect == 3)
   sprintf(event_string, "EVENT=YPBPR");
  else if (tve.detect == 4)
   sprintf(event_string, "EVENT=SVIDEO");
  else
   sprintf(event_string, "EVENT=NONE");
  kobject_uevent_env(&tve.pdev->dev.kobj, KOBJ_CHANGE, envp);
}
dev_dbg(&tve.pdev->dev, "detect = %d mode = %d\n",
   tve.detect, tve.output_mode);
return tve.detect;
#endif
}

使用以上代码,TVOUT会显示黑白屏幕,

static int tve_update_detect_status(void)
{
int old_detect = tve.detect;
u32 stat_lm, stat_sm, stat;
u32 int_ctl;
u32 cd_cont_reg;
u32 timeout = 40;
unsigned long lock_flags;
char event_string[16];
char *envp[] = { event_string, NULL };

spin_lock_irqsave(&tve_lock, lock_flags);
if (!enabled) {
  pr_warning("Warning: update tve status while it disabled!\n");
  tve.detect = 0;
  goto done;
}
int_ctl = __raw_readl(tve.base + tve_regs->tve_int_cont_reg);
cd_cont_reg = __raw_readl(tve.base + tve_regs->tve_cd_cont_reg);
if ((cd_cont_reg & 0x1) == 0) {
  pr_warning("Warning: pls enable TVE CD first!\n");
  goto done;
}
stat = __raw_readl(tve.base + tve_regs->tve_stat_reg);
while (((stat & CD_MON_END_INT) == 0) && (timeout > 0)) {
  spin_unlock_irqrestore(&tve_lock, lock_flags);
  msleep(2);
  spin_lock_irqsave(&tve_lock, lock_flags);
  timeout -= 2;
  if (!enabled) {
   pr_warning("Warning: update tve status while it disabled!\n");
   tve.detect = 0;
   goto done;
  } else
   stat = __raw_readl(tve.base + tve_regs->tve_stat_reg);
}
if (((stat & CD_MON_END_INT) == 0) && (timeout <= 0)) {
  pr_warning("Warning: get detect result without CD_MON_END_INT!\n");
  goto done;
}
stat = stat >> tve_reg_fields->cd_ch_stat_offset;
stat_lm = stat & (CD_CH_0_LM_ST | CD_CH_1_LM_ST | CD_CH_2_LM_ST);
if ((stat_lm == (CD_CH_0_LM_ST | CD_CH_1_LM_ST | CD_CH_2_LM_ST)) &&
  ((stat & (CD_CH_0_SM_ST | CD_CH_1_SM_ST | CD_CH_2_SM_ST)) == 0)
  ) {
   tve.detect = 3;
   tve.output_mode = YPBPR;
} else if ((stat_lm == (CD_CH_0_LM_ST | CD_CH_1_LM_ST)) &&
  ((stat & (CD_CH_0_SM_ST | CD_CH_1_SM_ST)) == 0)) {
   tve.detect = 4;
   tve.output_mode = SVIDEO;
} else if (stat_lm == CD_CH_0_LM_ST) {
  stat_sm = stat & CD_CH_0_SM_ST;
  if (stat_sm != 0) {
   /* headset */
   tve.detect = 2;
   tve.output_mode = TV_OFF;
  } else {
   tve.detect = 1;
   tve.output_mode = CVBS0;
  }
} else if (stat_lm == CD_CH_2_LM_ST) {
  stat_sm = stat & CD_CH_2_SM_ST;
  if (stat_sm != 0) {
   /* headset */
   tve.detect = 2;
   tve.output_mode = TV_OFF;
  } else {
   tve.detect = 1;
   tve.output_mode = CVBS2;
  }
} else {
  /* none */
  tve.detect = 0;
  tve.output_mode = TV_OFF;
}
tve_set_tvout_mode(tve.output_mode);
/* clear interrupt */
__raw_writel(CD_MON_END_INT | CD_LM_INT | CD_SM_INT,
   tve.base + tve_regs->tve_stat_reg);
__raw_writel(int_ctl | CD_SM_INT | CD_LM_INT,
   tve.base + tve_regs->tve_int_cont_reg);
done:
spin_unlock_irqrestore(&tve_lock, lock_flags);
if (old_detect != tve.detect) {
  sysfs_notify(&tve.pdev->dev.kobj, NULL, "headphone");
  if (tve.detect == 1)
   sprintf(event_string, "EVENT=CVBS0");
  else if (tve.detect == 3)
   sprintf(event_string, "EVENT=YPBPR");
  else if (tve.detect == 4)
   sprintf(event_string, "EVENT=SVIDEO");
  else
   sprintf(event_string, "EVENT=NONE");
  kobject_uevent_env(&tve.pdev->dev.kobj, KOBJ_CHANGE, envp);
}
dev_dbg(&tve.pdev->dev, "detect = %d mode = %d\n",
   tve.detect, tve.output_mode);
return tve.detect;

}
使用以上代码,会显示绿屏幕,green screen.

这个函数的代码,在 tve.c中。

我很困惑,,,

使用特权

评论回复
11
xyh12344|  楼主 | 2014-8-28 10:14 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-28 09:30
你好,我是回答你SR的那个人,我们的CRM系统有些问题,现在附件看不了,昨天我也给你发邮件了,你把附件 ...

那你可以将问题反馈到飞思卡尔总部么,毕竟,我的项目很急。。

使用特权

评论回复
12
FSL_TICS_Rita| | 2014-8-28 10:25 | 只看该作者
楼主你好,请问你这里使用AV线如何连接到板子上的?请问你可以把线接到板子这部分能拍个照片发给我吗?

使用特权

评论回复
13
FSL_TICS_Rita| | 2014-8-28 10:25 | 只看该作者
我不是很明白你是怎么连接的。

使用特权

评论回复
14
FSL_TICS_Rita| | 2014-8-28 10:30 | 只看该作者
xyh12344 发表于 2014-8-28 10:14
那你可以将问题反馈到飞思卡尔总部么,毕竟,我的项目很急。。

我们这边就是技术支持中心的。正在帮您看

使用特权

评论回复
15
FSL_TICS_Rita| | 2014-8-28 10:44 | 只看该作者
楼主你好,请问你这里使用AV线如何连接到板子上的?请问你可以把线接到板子这部分能拍个照片发给我吗?

使用特权

评论回复
16
xyh12344|  楼主 | 2014-8-28 10:50 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-28 10:44
楼主你好,请问你这里使用AV线如何连接到板子上的?请问你可以把线接到板子这部分能拍个照片发给我吗? ...



其中,AV 线一端连接着TV_av ,另一端连接到TVE 的cvbs中

使用特权

评论回复
17
xyh12344|  楼主 | 2014-8-28 10:51 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-28 10:30
我们这边就是技术支持中心的。正在帮您看

好的,谢谢。

使用特权

评论回复
18
xyh12344|  楼主 | 2014-8-28 10:54 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-28 10:44
楼主你好,请问你这里使用AV线如何连接到板子上的?请问你可以把线接到板子这部分能拍个照片发给我吗? ...

Dan, 你加我的工作QQ吧,这样交流顺畅一些, QQ:1954388803

使用特权

评论回复
19
FSL_TICS_Rita| | 2014-8-28 11:09 | 只看该作者
我看了你发的照片,这个板子是你们自己做的么? 不是我们的SMD开发板呀。

使用特权

评论回复
20
xyh12344|  楼主 | 2014-8-28 13:26 | 只看该作者
FSL_TICS_Rita 发表于 2014-8-28 11:09
我看了你发的照片,这个板子是你们自己做的么? 不是我们的SMD开发板呀。

这个是我们单位开发的母板,核心板是你们公司的Imx53smd,,,其实都是一样的,,只是,做个模板把核心的所有的功能引脚都引出来,便于拓展和开发,这个AV线,连接的线就是核心板CVBS0接口。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

31

帖子

1

粉丝