I'm trying to transition existing code written under SDK v6.0 to the new Processor SDK v1.0.
I have as custom board cloning the original beaglebone with an Ortus resistive touch LCD.
These are the changes that I made to the original code to get the framebuffer device and the LCD panel to work correctly.
Changes to board-am335xevm.c
static struct lcd_ctrl_config lcd_cfg_16 = { &disp_panel_16, .ac_bias = 255, .ac_bias_intrpt = 0, .dma_burst_sz = 16, .bpp = 16, .fdd = 0x80, .tft_alt_mode = 0, .stn_565_mode = 0, .mono_8bit_mode = 0, .invert_line_clock = 1, .invert_frm_clock = 1, .sync_edge = 0, .sync_ctrl = 1, .raster_order = 0, }; struct da8xx_lcdc_platform_data Ortus_COM35T3M09XTC_pdata = { .manu_name = "Ortustech", .controller_data = &lcd_cfg_16, .type = "Ortus_COM35T3M09XTC", }; /* Custom board based on Beaglebone Rev A3 and after*/ static struct evm_dev_cfg beaglebone_dev_cfg[] = { {am335x_rtc_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {clkout2_enable, DEV_ON_BASEBOARD, PROFILE_NONE}, {tps65217_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {lcdc_16_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {mfd_tscadc_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {mmc1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {mmc0_no_cd_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {NULL, 0, 0}, };
Addition to video driver da8xx-fb.c
static struct da8xx_panel known_lcd_panels[] = { ... /* Ortustech COM35T3M09XTC */ [3] = { .name = "Ortus_COM35T3M09XTC", .width = 240, .height = 320, .hfp = 44, .hbp = 1, .hsw = 2, .vfp = 3, .vbp = 1, .vsw = 2, .pxl_clk = 5600000, .invert_pxl_clk = 0, }, ... };
Addition to modedb.c
/* 240x320 @ 60 Hz, 5.6 kHz hsync, 3:4 aspect ratio */ { NULL, 60, 240, 320, 56000, 44, 2, 3, 2, 1, 48, 1, 0, FB_VMODE_DOUBLE },
I am having no success getting the fb0 device to create itself in the new DRM .dts framework.
I've added the following to the am335x-bone-common.dtsi file:
panel { compatible = "ti,tilcdc,panel"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&lcd_pins_default>; panel-info { ac-bias = <255>; ac-bias-intrpt = <0>; dma-burst-sz = <16>; bpp = <16>; fdd = <0x80>; sync-edge = <0>; sync-ctrl = <1>; raster-order = <0>; fifo-th = <0>; }; display-timings { 240x320p60 { hactive = <240>; vactive = <320>; hback-porch = <1>; hfront-porch = <44>; hsync-len = <2>; vback-porch = <1>; vfront-porch = <3>; vsync-len = <2>; clock-frequency = <5600000>; hsync-active = <0>; vsync-active = <0>; }; }; tscadc { compatible = "ti-tscadc-dt"; ti,hwmods = "adc_tsc"; tsc-wires = <4>; tsc-x-plate-resistance = <200>; tsc-steps = <5>; adc-channels = <4>; }; lcd_pins_default: lcd_pins_default { pinctrl-single,pins = < 0x20 0x01 /* gpmc_ad8.lcd_data16, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x24 0x01 /* gpmc_ad9.lcd_data17, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x28 0x01 /* gpmc_ad10.lcd_data18, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x2c 0x01 /* gpmc_ad11.lcd_data19, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x30 0x01 /* gpmc_ad12.lcd_data20, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x34 0x01 /* gpmc_ad13.lcd_data21, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x38 0x01 /* gpmc_ad14.lcd_data22, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0x3c 0x01 /* gpmc_ad15.lcd_data23, OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT */ 0xa0 0x08 /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xa4 0x08 /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xa8 0x08 /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xac 0x08 /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xb0 0x08 /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xb4 0x08 /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xb8 0x08 /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xbc 0x08 /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xc0 0x08 /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xc4 0x08 /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xc8 0x08 /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xcc 0x08 /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xd0 0x08 /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xd4 0x08 /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xd8 0x08 /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xdc 0x08 /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */ 0xe0 0x00 /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */ 0xe4 0x00 /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */ 0xe8 0x00 /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */ 0xec 0x00 /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */ >; };
However, during kernel startup, I see
[1.582480] [drm] Initialized drm 1.1.0 20060810
but I see no other acknowledgement of the LCD device.
When I start executing my processes I immediately see
INIT: version 2.88 booting
Error opening /dev/fb0: No such file or directory.
I'm looking for advice in changes to the .dts file and/or the singlecore-omap2plus-defconfig file to get my framebuffer recognized.
Any suggestions or help would be appreciated.
David