Other Parts Discussed in Thread: DA8XX, DS90CF363B
I need to get a Data Image 640 - 480 TFT 18-bit Data Image LCD to work the an am335x with Linux 3.12.
So, I need some assistance in making this happen. Unfortunately, I am a novice LCD person so I aplogize for my lack of knowledge.
1) The exact LCD spec is not available to share yet. But it is compatible with Data Images standard FG050720DSSWDG01 I googled and found a company that posted the timing/spec's for the FG050720DSSWDG01 at http://www.hy-line.de/fileadmin/hy-line/computer/csv/datasheets/FG050720DSSWDG01.pdf.
2) We are going through a DS90CF363B LVDS transmitter beween the AM335x to minimize the connections between our board and are LCD assembly. The other end is a DS90CF366B LVDS receiver.
3) I followed the instructions in the Port guide
Here is the device tree setup.
lcd_pins_default: lcd_pins_default {
pinctrl-single,pins = <
0x38 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad14.lcd_data17, NOTE On EVM DTS = 20 gpmc_ad8.lcd_data16 */
0x3C (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* gpmc_ad15.lcd_data16, NOTE on EVM DTS = 24 gpmc_ad9.lcd_data17 */
0xa0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data0.lcd_data0, */
0xa4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data1.lcd_data1, */
0xa8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data2.lcd_data2, */
0xac (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data3.lcd_data3, */
0xb0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data4.lcd_data4, */
0xb4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data5.lcd_data5, */
0xb8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data6.lcd_data6, */
0xbc (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data7.lcd_data7, */
0xc0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data8.lcd_data8, */
0xc4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data9.lcd_data9, */
0xc8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data10.lcd_data10, */
0xcc (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data11.lcd_data11, */
0xd0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data12.lcd_data12, */
0xd4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data13.lcd_data13, */
0xd8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data14.lcd_data14, */
0xdc (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_data15.lcd_data15, */
0xe0 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_vsync.lcd_vsync, */
0xe4 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_hsync.lcd_hsync, */
0xe8 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_pclk.lcd_pclk, */
0xec (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* lcd_ac_bias_en.lcd_ac_bias_en, */
0x28 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc.ad10.gpio0.26 */
>;
};
lcd_pins_sleep: lcd_pins_sleep {
pinctrl-single,pins = <
0x38 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad8.lcd_data16 NOTE On EVM DTS = 20 gpmc_ad8.lcd_data16*/
0x3C (PIN_INPUT_PULLDOWN | MUX_MODE7) /* gpmc_ad9.lcd_data17 NOTE on EVM DTS = 24 gpmc_ad9.lcd_data17*/
0xa0 (PULL_DISABLE | MUX_MODE7) /* lcd_data0.lcd_data0 */
0xa4 (PULL_DISABLE | MUX_MODE7) /* lcd_data1.lcd_data1 */
0xa8 (PULL_DISABLE | MUX_MODE7) /* lcd_data2.lcd_data2 */
0xac (PULL_DISABLE | MUX_MODE7) /* lcd_data3.lcd_data3 */
0xb0 (PULL_DISABLE | MUX_MODE7) /* lcd_data4.lcd_data4 */
0xb4 (PULL_DISABLE | MUX_MODE7) /* lcd_data5.lcd_data5 */
0xb8 (PULL_DISABLE | MUX_MODE7) /* lcd_data6.lcd_data6 */
0xbc (PULL_DISABLE | MUX_MODE7) /* lcd_data7.lcd_data7 */
0xc0 (PULL_DISABLE | MUX_MODE7) /* lcd_data8.lcd_data8 */
0xc4 (PULL_DISABLE | MUX_MODE7) /* lcd_data9.lcd_data9 */
0xc8 (PULL_DISABLE | MUX_MODE7) /* lcd_data10.lcd_data10 */
0xcc (PULL_DISABLE | MUX_MODE7) /* lcd_data11.lcd_data11 */
0xd0 (PULL_DISABLE | MUX_MODE7) /* lcd_data12.lcd_data12 */
0xd4 (PULL_DISABLE | MUX_MODE7) /* lcd_data13.lcd_data13 */
0xd8 (PULL_DISABLE | MUX_MODE7) /* lcd_data14.lcd_data14 */
0xdc (PULL_DISABLE | MUX_MODE7) /* lcd_data15.lcd_data15 */
0xe0 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
0xe4 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* lcd_hsync.lcd_hsync */
0xe8 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* lcd_pclk.lcd_pclk */
0xec (PIN_INPUT_PULLDOWN | MUX_MODE7) /* lcd_ac_bias_en.lcd_ac_bias_en */
0x28 (PIN_OUTPUT_PULLUP | MUX_MODE7) /* gpmc.ad10.gpio0.26 */
>;
lcdc: lcdc@0x4830e000 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&lcd_pins_default>;
pinctrl-1 = <&lcd_pins_sleep>;
status = "okay";
display-timings {
640x480p62 {
clock-frequency = <23000000 25000000 30000000>;
hactive = <640>;
vactive = <480>;
hfront-porch = <1 16 116>;
hback-porch = <1 114 139>;
hsync-len = <5 30 133>;
vback-porch = <30 32 34>;
vfront-porch = <1 10 45>;
vsync-len = <1 3 5>;
hsync-active = <1>;
vsync-active = <1>;
pixelclk-active = <1>;
};
};
4) We have configured the kernel to use fbdev. Therefore the following .config options are set
- CONFIG_FB_DA8XX
- CONFIG_FB_DA8XX_TDA99x
5) The backlight hasn't been configured hardware wise yet so the backlight is kept ON and not adjusted yet.
6) When I boot up the board, the LCD does appear to be trying to display the standard logo. However, we are getting flicker and 3 images of the logo.
To me it looks like we have a scanning/sync issue.
7) The documentation for the LCD says to use either SYNC mode or DE mode.
I am not sure how to configure that either via the .config or via a device tree.
Therefore I am not sure whether DE is being enabled or not. (NOTE: DE on the LCD is connected to lcd_ac_bias_en.lcd_ac_bias_en from the am335x LCD controller).
8) So, the question is there anything else I need to consider? Do I need to create a specific LCD driver for this part or will the am335x LCD controller be sufficient?
Anyway, further insight or suggestion would be greatly appreciated.
Peter M.