VAR-SOM-AM33 Linux SDK 7 LCD porting

From Variscite Wiki
LCD Porting

Introduction

Variscite's VAR-DVK-AM33 LCD signals are configured by default as 16bit. To alter board to support 24bit LCD: remove resistor net RN109 and install RN108. This will disable the GPMC signals from the external header. The pin-muxing is also configured by default to 16bit. Use the below pin-mux examples to modify from 16bit to 24bit LCD configuration.

16bit LCD Pin-muxing

Modify ~/ti-sdk-am335x-evm-07.00.00.00/board-support/linux-3.12.10-ti2013.12.01/arch/arm/boot/dts/am335x-som.dts

               lcd_pins_default: lcd_pins_default {
                        pinctrl-single,pins = <
                                0xa0 0x00       /* lcd_data0.lcd_data0, OUTPUT | MODE0 */
                                0xa4 0x00       /* lcd_data1.lcd_data1, OUTPUT | MODE0 */
                                0xa8 0x00       /* lcd_data2.lcd_data2, OUTPUT | MODE0 */
                                0xac 0x00       /* lcd_data3.lcd_data3, OUTPUT | MODE0 */
                                0xb0 0x00       /* lcd_data4.lcd_data4, OUTPUT | MODE0 */
                                0xb4 0x00       /* lcd_data5.lcd_data5, OUTPUT | MODE0 */
                                0xb8 0x00       /* lcd_data6.lcd_data6, OUTPUT | MODE0 */
                                0xbc 0x00       /* lcd_data7.lcd_data7, OUTPUT | MODE0 */
                                0xc0 0x00       /* lcd_data8.lcd_data8, OUTPUT | MODE0 */
                                0xc4 0x00       /* lcd_data9.lcd_data9, OUTPUT | MODE0 */
                                0xc8 0x00       /* lcd_data10.lcd_data10, OUTPUT | MODE0 */
                                0xcc 0x00       /* lcd_data11.lcd_data11, OUTPUT | MODE0 */
                                0xd0 0x00       /* lcd_data12.lcd_data12, OUTPUT | MODE0 */
                                0xd4 0x00       /* lcd_data13.lcd_data13, OUTPUT | MODE0 */
                                0xd8 0x00       /* lcd_data14.lcd_data14, OUTPUT | MODE0 */
                                0xdc 0x00       /* lcd_data15.lcd_data15, OUTPUT | MODE0 */
                                0xe0 0x00       /* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
                                0xe4 0x00       /* lcd_hsync.lcd_hsync, OUTPUT | MODE0 */
                                0xe8 0x00       /* lcd_pclk.lcd_pclk, OUTPUT | MODE0 */
                                0xec 0x00       /* lcd_ac_bias_en.lcd_ac_bias_en, OUTPUT | MODE0 */
                        >;
                };


24bit LCD Pin-muxing

Modify ~/ti-sdk-am335x-evm-07.00.00.00/board-support/linux-3.12.10-ti2013.12.01/arch/arm/boot/dts/am335x-som.dts

               lcd_pins_default: lcd_pins_default {
                        pinctrl-single,pins = <
 				0x20 0x01	/* gpmc_ad8.lcd_data16, OUTPUT | MODE1 */
				0x24 0x01	/* gpmc_ad9.lcd_data17, OUTPUT | MODE1 */
				0x28 0x01	/* gpmc_ad10.lcd_data18, OUTPUT | MODE1 */
				0x2c 0x01	/* gpmc_ad11.lcd_data19, OUTPUT | MODE1 */
				0x30 0x01	/* gpmc_ad12.lcd_data20, OUTPUT | MODE1 */
				0x34 0x01	/* gpmc_ad13.lcd_data21, OUTPUT | MODE1 */
				0x38 0x01	/* gpmc_ad14.lcd_data22, OUTPUT | MODE1 */
				0x3c 0x01	/* gpmc_ad15.lcd_data23, OUTPUT | MODE1 */
                                0xa0 0x00       /* lcd_data0.lcd_data0, OUTPUT | MODE0 */
                                0xa4 0x00       /* lcd_data1.lcd_data1, OUTPUT | MODE0 */
                                0xa8 0x00       /* lcd_data2.lcd_data2, OUTPUT | MODE0 */
                                0xac 0x00       /* lcd_data3.lcd_data3, OUTPUT | MODE0 */
                                0xb0 0x00       /* lcd_data4.lcd_data4, OUTPUT | MODE0 */
                                0xb4 0x00       /* lcd_data5.lcd_data5, OUTPUT | MODE0 */
                                0xb8 0x00       /* lcd_data6.lcd_data6, OUTPUT | MODE0 */
                                0xbc 0x00       /* lcd_data7.lcd_data7, OUTPUT | MODE0 */
                                0xc0 0x00       /* lcd_data8.lcd_data8, OUTPUT | MODE0 */
                                0xc4 0x00       /* lcd_data9.lcd_data9, OUTPUT | MODE0 */
                                0xc8 0x00       /* lcd_data10.lcd_data10, OUTPUT | MODE0 */
                                0xcc 0x00       /* lcd_data11.lcd_data11, OUTPUT | MODE0 */
                                0xd0 0x00       /* lcd_data12.lcd_data12, OUTPUT | MODE0 */
                                0xd4 0x00       /* lcd_data13.lcd_data13, OUTPUT | MODE0 */
                                0xd8 0x00       /* lcd_data14.lcd_data14, OUTPUT | MODE0 */
                                0xdc 0x00       /* lcd_data15.lcd_data15, OUTPUT | MODE0 */
                                0xe0 0x00       /* lcd_vsync.lcd_vsync, OUTPUT | MODE0 */
                                0xe4 0x00       /* lcd_hsync.lcd_hsync, OUTPUT | MODE0 */
                                0xe8 0x00       /* lcd_pclk.lcd_pclk, OUTPUT | MODE0 */
                                0xec 0x00       /* lcd_ac_bias_en.lcd_ac_bias_en, OUTPUT | MODE0 */
                        >;
                };


Modify LCD timings

Modify ~/ti-sdk-am335x-evm-07.00.00.00/board-support/linux-3.12.10-ti2013.12.01/arch/arm/boot/dts/am335x-som.dts

                lcdc: lcdc@0x4830e000 {
                        pinctrl-names = "default", "sleep";
                        pinctrl-0 = <&lcd_pins_default>;
                        pinctrl-1 = <&lcd_pins_sleep>;
                        status = "okay";
                        display-timings {
                                800x480p62 {
                                        clock-frequency = <30000000>; // LCD pixel clock
                                        hactive = <800>; // LCD horizontal pixel count
                                        vactive = <480>; // LCD vertical pixel count
                                        hfront-porch = <39>; // LCD HSYNC front porch length (in pixels)
                                        hback-porch = <39>; // LCD HSYNC back porch length (in pixels)
                                        hsync-len = <47>; // LCD HSYNC length (in pixels)
                                        vback-porch = <29>; // LCD VSYNC synch length (in pixels)
                                        vfront-porch = <13>;// LCD VSYNC synch length (in HSYNCs)
                                        vsync-len = <2>;// LCD VSYNC length (in HSYNCs)
                                        hsync-active = <1>; // HSYNC active high(1) or low (0)
                                        vsync-active = <1>;// VSYNC active high(1) or low (0)
                                };
                        };
                };