도와주세요!!
글 수 15,339
2006.06.27 12:05:18 (*.141.98.17)
6661
안녕하세요..
>Q.1>
>
>헌데, LCD_SYNC (FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VER_HIGH_ACT)
>
>이 부분은 어디에 DEFINE이 되어 있는 건지여?
>
>또한, DEFINE인 된대로라면,
>
>HSYNC/VSYNC이 ACTIVE HIGH일 때만, 사용할 수 있는 건지여?
아래의 내용은 drivers/video/pxafb.c 에서 발췌한 내용입니다.
714 #if defined (CONFIG_PXA_CERF_PDA)
715 new_regs.lccr0 = fbi->lccr0;
716 new_regs.lccr1 =
717 LCCR1_DisWdth(var->xres) +
718 LCCR1_HorSnchWdth(var->hsync_len) +
719 LCCR1_BegLnDel(var->left_margin) +
720 LCCR1_EndLnDel(var->right_margin);
721
722 new_regs.lccr2 =
723 LCCR2_DisHght(var->yres) +
724 LCCR2_VrtSnchWdth(var->vsync_len) +
725 LCCR2_BegFrmDel(var->upper_margin) +
726 LCCR2_EndFrmDel(var->lower_margin);
727
728 new_regs.lccr3 = fbi->lccr3
729 |
730 (var->sync & FB_SYNC_HOR_HIGH_ACT ? LCCR3_HorSnchH : LCCR3_HorSnchL) |
731 (var->sync & FB_SYNC_VERT_HIGH_ACT ? LCCR3_VrtSnchH : LCCR3_VrtSnchL);
732 #elif defined (CONFIG_FB_PXA_QVGA)
733 new_regs.lccr0 = fbi->lccr0;
734 new_regs.lccr1 =
735 LCCR1_DisWdth(var->xres) +
736 LCCR1_HorSnchWdth(var->hsync_len) +
737 LCCR1_BegLnDel(var->left_margin) +
738 LCCR1_EndLnDel(var->right_margin);
739 new_regs.lccr2 =
740 LCCR2_DisHght(var->yres) +
741 LCCR2_VrtSnchWdth(var->vsync_len) +
742 LCCR2_BegFrmDel(var->upper_margin) +
743 LCCR2_EndFrmDel(var->lower_margin);
744 new_regs.lccr3 = fbi->lccr3;
745 #else
746 // FIXME using hardcoded values for now
747 new_regs.lccr0 = fbi->lccr0;
748
749 new_regs.lccr1 =
750 LCCR1_DisWdth(var->xres) +
751 LCCR1_HorSnchWdth(var->hsync_len) +
752 LCCR1_BegLnDel(var->left_margin) +
753 LCCR1_EndLnDel(var->right_margin);
754
755 new_regs.lccr2 =
756 LCCR2_DisHght(var->yres) +
757 LCCR2_VrtSnchWdth(var->vsync_len) +
758 LCCR2_BegFrmDel(var->upper_margin) +
759 LCCR2_EndFrmDel(var->lower_margin);
760
761 new_regs.lccr3 = fbi->lccr3;
762 #endif
에서 보시면 CONFIG_PXA_CERF_PDA 에서만 사용되고 있습니다. 일반적으로는 사용되고 있지않습니다.
>Q.2>
>
>LCCR3 에서 HORIZONTAL 과 VERTICAL SYNC의 극성을 설정하는데,
>
>LCD_SYNC 부분은 설정할 필요가 있는건가여?
==>> 현재 저희 보드에서는 LCD_SYNC 부분을 설정할 필요가 없을것 같습니다.
>Q.3>
>
>수평의 관련 레지스터의 설정되는 값은 DCLK 수이고,
>수직 관련 레지스터의 설정값은 PERIOD의 수가 맞는지요?
>
>ex>
>LCD_HOR_SYNC_WIDTH_PULSE 2 => 2 CLOCK
>LCD_BEGIN~L
>LCD_END~L
>
>LCD_VERTI_SYNC_WIDTH_PULSE 3 => 3 주기
>LCD_BEGIN~F
>LCD_END~F
위의 drivers/video/pxafb.c 내용 중
749 new_regs.lccr1 =
750 LCCR1_DisWdth(var->xres) +
751 LCCR1_HorSnchWdth(var->hsync_len) +
752 LCCR1_BegLnDel(var->left_margin) +
753 LCCR1_EndLnDel(var->right_margin);
754
755 new_regs.lccr2 =
756 LCCR2_DisHght(var->yres) +
757 LCCR2_VrtSnchWdth(var->vsync_len) +
758 LCCR2_BegFrmDel(var->upper_margin) +
759 LCCR2_EndFrmDel(var->lower_margin);
부분이 있습니다.
여기서 LCCR1, LCC2를 보면 Hsync Period 와 Vsync Period 를 설정합니다.
즉 Hsync Period = xres + hsync_len + left_margin + right_margin
Vsync Period = yres + vsync_len + left_margin + right_margin
입니다.
ex) Hsync Period (800) = 640 + hsync_len + 24 + 40
hsync_len = 96
커널의 Documentation/fb/framebuffer.txt 에 있는 그림을 참고하세요..
TFT LCD에 따라 다르며, 데이타쉬트에 있는 설정값과 일치하지 않을 수 있습니다.
따라서, vsync_len, hsync_len, left_margin, right_margin은 사용자가 최적의 화질 상태를 나타내기 위해서
임의적으로 값을 조절해야 합니다. 이 작업에서 무지 삽질을 많이 합니다.
그럼 수고하세요..
>Q.1>
>
>헌데, LCD_SYNC (FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VER_HIGH_ACT)
>
>이 부분은 어디에 DEFINE이 되어 있는 건지여?
>
>또한, DEFINE인 된대로라면,
>
>HSYNC/VSYNC이 ACTIVE HIGH일 때만, 사용할 수 있는 건지여?
아래의 내용은 drivers/video/pxafb.c 에서 발췌한 내용입니다.
714 #if defined (CONFIG_PXA_CERF_PDA)
715 new_regs.lccr0 = fbi->lccr0;
716 new_regs.lccr1 =
717 LCCR1_DisWdth(var->xres) +
718 LCCR1_HorSnchWdth(var->hsync_len) +
719 LCCR1_BegLnDel(var->left_margin) +
720 LCCR1_EndLnDel(var->right_margin);
721
722 new_regs.lccr2 =
723 LCCR2_DisHght(var->yres) +
724 LCCR2_VrtSnchWdth(var->vsync_len) +
725 LCCR2_BegFrmDel(var->upper_margin) +
726 LCCR2_EndFrmDel(var->lower_margin);
727
728 new_regs.lccr3 = fbi->lccr3
729 |
730 (var->sync & FB_SYNC_HOR_HIGH_ACT ? LCCR3_HorSnchH : LCCR3_HorSnchL) |
731 (var->sync & FB_SYNC_VERT_HIGH_ACT ? LCCR3_VrtSnchH : LCCR3_VrtSnchL);
732 #elif defined (CONFIG_FB_PXA_QVGA)
733 new_regs.lccr0 = fbi->lccr0;
734 new_regs.lccr1 =
735 LCCR1_DisWdth(var->xres) +
736 LCCR1_HorSnchWdth(var->hsync_len) +
737 LCCR1_BegLnDel(var->left_margin) +
738 LCCR1_EndLnDel(var->right_margin);
739 new_regs.lccr2 =
740 LCCR2_DisHght(var->yres) +
741 LCCR2_VrtSnchWdth(var->vsync_len) +
742 LCCR2_BegFrmDel(var->upper_margin) +
743 LCCR2_EndFrmDel(var->lower_margin);
744 new_regs.lccr3 = fbi->lccr3;
745 #else
746 // FIXME using hardcoded values for now
747 new_regs.lccr0 = fbi->lccr0;
748
749 new_regs.lccr1 =
750 LCCR1_DisWdth(var->xres) +
751 LCCR1_HorSnchWdth(var->hsync_len) +
752 LCCR1_BegLnDel(var->left_margin) +
753 LCCR1_EndLnDel(var->right_margin);
754
755 new_regs.lccr2 =
756 LCCR2_DisHght(var->yres) +
757 LCCR2_VrtSnchWdth(var->vsync_len) +
758 LCCR2_BegFrmDel(var->upper_margin) +
759 LCCR2_EndFrmDel(var->lower_margin);
760
761 new_regs.lccr3 = fbi->lccr3;
762 #endif
에서 보시면 CONFIG_PXA_CERF_PDA 에서만 사용되고 있습니다. 일반적으로는 사용되고 있지않습니다.
>Q.2>
>
>LCCR3 에서 HORIZONTAL 과 VERTICAL SYNC의 극성을 설정하는데,
>
>LCD_SYNC 부분은 설정할 필요가 있는건가여?
==>> 현재 저희 보드에서는 LCD_SYNC 부분을 설정할 필요가 없을것 같습니다.
>Q.3>
>
>수평의 관련 레지스터의 설정되는 값은 DCLK 수이고,
>수직 관련 레지스터의 설정값은 PERIOD의 수가 맞는지요?
>
>ex>
>LCD_HOR_SYNC_WIDTH_PULSE 2 => 2 CLOCK
>LCD_BEGIN~L
>LCD_END~L
>
>LCD_VERTI_SYNC_WIDTH_PULSE 3 => 3 주기
>LCD_BEGIN~F
>LCD_END~F
위의 drivers/video/pxafb.c 내용 중
749 new_regs.lccr1 =
750 LCCR1_DisWdth(var->xres) +
751 LCCR1_HorSnchWdth(var->hsync_len) +
752 LCCR1_BegLnDel(var->left_margin) +
753 LCCR1_EndLnDel(var->right_margin);
754
755 new_regs.lccr2 =
756 LCCR2_DisHght(var->yres) +
757 LCCR2_VrtSnchWdth(var->vsync_len) +
758 LCCR2_BegFrmDel(var->upper_margin) +
759 LCCR2_EndFrmDel(var->lower_margin);
부분이 있습니다.
여기서 LCCR1, LCC2를 보면 Hsync Period 와 Vsync Period 를 설정합니다.
즉 Hsync Period = xres + hsync_len + left_margin + right_margin
Vsync Period = yres + vsync_len + left_margin + right_margin
입니다.
ex) Hsync Period (800) = 640 + hsync_len + 24 + 40
hsync_len = 96
커널의 Documentation/fb/framebuffer.txt 에 있는 그림을 참고하세요..
TFT LCD에 따라 다르며, 데이타쉬트에 있는 설정값과 일치하지 않을 수 있습니다.
따라서, vsync_len, hsync_len, left_margin, right_margin은 사용자가 최적의 화질 상태를 나타내기 위해서
임의적으로 값을 조절해야 합니다. 이 작업에서 무지 삽질을 많이 합니다.
그럼 수고하세요..