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.