DDC readout working

Hi,

I was wondering if EDID readout would work on a 400MHz I2C so did a
little experiment:

root@beagleboard:/usr/sbin# decode-edid
decode-edid: using bus 3 (autodetected)
decode-edid: decode-edid version 1.1
parse-edid: parse-edid version 1.4.1
parse-edid: EDID checksum passed.

        # EDID version 1 revision 3
Section "Monitor"
        # Block type: 2:0 3:fd
        # Block type: 2:0 3:fc
        Identifier "AU5131 "
        VendorName "IVM"
        ModelName "AU5131 "
        # Block type: 2:0 3:fd
        HorizSync 24-80
        VertRefresh 50-85
        # Max dot clock (video bandwidth) 160 MHz
        # Block type: 2:0 3:fc
        # Block type: 2:0 3:ff
        # DPMS capabilities: Active off:yes Suspend:yes Standby:yes

        Mode "1600x1200" # vfreq 60.000Hz, hfreq 75.000kHz
                DotClock 162.000000
                HTimings 1600 1664 1856 2160
                VTimings 1200 1201 1204 1250
                Flags "+HSync" "+VSync"
        EndMode
        # Block type: 2:0 3:fd
        # Block type: 2:0 3:fc
        # Block type: 2:0 3:ff
EndSection
root@beagleboard:/usr/sbin#

It works :slight_smile:

Good one. You can even do this in u-boot using i2c commands:

u-boot

The trouble is with the way it is implemented in the kernel:

drivers/video/omap/lcd_omap3beagle.c

#define LCD_XRES 1600
#define LCD_YRES 1200
#define LCD_PIXCLOCK 65000 /* in kHz */

[..]

struct lcd_panel omap3beagle_panel = {
        .name = "omap3beagle",
        .config = OMAP_LCDC_PANEL_TFT,

        .bpp = 24,
        .data_lines = 24,
        .x_res = LCD_XRES,
        .y_res = LCD_YRES,
        .hsw = 3, /* hsync_len (4) - 1 */
        .hfp = 3, /* right_margin (4) - 1 */
        .hbp = 39, /* left_margin (40) - 1 */
        .vsw = 1, /* vsync_len (2) - 1 */
        .vfp = 2, /* lower_margin */
        .vbp = 7, /* upper_margin (8) - 1 */

        .pixel_clock = LCD_PIXCLOCK,

        .init = omap3beagle_panel_init,
        .cleanup = omap3beagle_panel_cleanup,
        .enable = omap3beagle_panel_enable,
        .disable = omap3beagle_panel_disable,
        .get_caps = omap3beagle_panel_get_caps,
};

We could use the fb_ddc driver:

int beagleboard_probe_i2c_connector(struct fb_info *info, u8
**out_edid)
{
        struct beagleboardfb_par *par = info->par;
        u8 *edid = NULL;

        DPRINTK("beagleboard DVI: Probe DDC\n);

  edid = fb_ddc_read(&omap3-i2c.3);

        *out_edid = edid;

        return (edid) ? 0 : 1;
}

That still doesn't get us far since omapfb only know about LCDs :frowning:

regards,

Koen