예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
파일: savagefb-i2c.c 프로젝트: 274914765/C
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;
}