int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8 **out_edid) { u8 *edid; edid = fb_ddc_read(&rinfo->i2c[conn-1].adapter); if (out_edid) *out_edid = edid; if (!edid) { pr_debug("radeonfb: I2C (port %d) ... not found\n", conn); return MT_NONE; } if (edid[0x14] & 0x80) { /* Fix detection using BIOS tables */ if (rinfo->is_mobility /*&& conn == ddc_dvi*/ && (INREG(LVDS_GEN_CNTL) & LVDS_ON)) { pr_debug("radeonfb: I2C (port %d) ... found LVDS panel\n", conn); return MT_LCD; } else { pr_debug("radeonfb: I2C (port %d) ... found TMDS panel\n", conn); return MT_DFP; } } pr_debug("radeonfb: I2C (port %d) ... found CRT display\n", conn); return MT_CRT; }
int i810_probe_i2c_connector(struct fb_info *info, u8 **out_edid, int conn) { struct i810fb_par *par = info->par; u8 *edid = NULL; DPRINTK("i810-i2c: Probe DDC%i Bus\n", conn+1); if (conn < par->ddc_num) { edid = fb_ddc_read(&par->chan[conn].adapter); } else { const u8 *e = fb_firmware_edid(info->device); if (e != NULL) { DPRINTK("i810-i2c: Getting EDID from BIOS\n"); edid = kmemdup(e, EDID_LENGTH, GFP_KERNEL); } } *out_edid = edid; return (edid) ? 0 : 1; }
int savagefb_probe_i2c_connector(struct fb_info *info, u8 **out_edid) { struct savagefb_par *par = info->par; u8 *edid; if (par->chan.par) edid = fb_ddc_read(&par->chan.adapter); else edid = NULL; if (!edid) { /* try to get from firmware */ const u8 *e = fb_firmware_edid(info->device); if (e) edid = kmemdup(e, EDID_LENGTH, GFP_KERNEL); } *out_edid = edid; return (edid) ? 0 : 1; }