View | Details | Raw Unified | Return to bug 207912 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/arm/allwinner/a10_hdmi.c (-12 / +17 lines)
Lines 203-208 struct a10hdmi_softc { Link Here
203
203
204
	uint8_t			edid[EDID_LENGTH];
204
	uint8_t			edid[EDID_LENGTH];
205
205
206
	int			has_hdmi;
206
	int			has_audio;
207
	int			has_audio;
207
};
208
};
208
209
Lines 371-397 a10hdmi_ddc_read(struct a10hdmi_softc *sc, int block, uint8_t *edid) Link Here
371
	return (0);
372
	return (0);
372
}
373
}
373
374
374
static int
375
static void
375
a10hdmi_detect_audio(struct a10hdmi_softc *sc)
376
a10hdmi_detect_hdmi(struct a10hdmi_softc *sc, int *phdmi, int *paudio)
376
{
377
{
377
	struct edid_info ei;
378
	struct edid_info ei;
378
	uint8_t edid[EDID_LENGTH];
379
	uint8_t edid[EDID_LENGTH];
379
	int block;
380
	int block;
380
381
382
	*phdmi = *paudio = 0;
383
381
	if (edid_parse(sc->edid, &ei) != 0)
384
	if (edid_parse(sc->edid, &ei) != 0)
382
		return (0);
385
		return;
383
386
384
	/* Scan through extension blocks, looking for a CEA-861 block. */
387
	/* Scan through extension blocks, looking for a CEA-861 block. */
385
	for (block = 1; block <= ei.edid_ext_block_count; block++) {
388
	for (block = 1; block <= ei.edid_ext_block_count; block++) {
386
		if (a10hdmi_ddc_read(sc, block, edid) != 0)
389
		if (a10hdmi_ddc_read(sc, block, edid) != 0)
387
			break;
390
			return;
388
391
389
		if (edid[EXT_TAG] == CEA_TAG_ID)
392
		if (edid[EXT_TAG] == CEA_TAG_ID) {
390
			return ((edid[CEA_DTD] & DTD_BASIC_AUDIO) != 0);
393
			*phdmi = 1;
394
			*paudio = ((edid[CEA_DTD] & DTD_BASIC_AUDIO) != 0);
395
			return;
396
		}
391
	}
397
	}
392
393
	/* No CEA-861 block found */
394
	return (0);
395
}
398
}
396
399
397
static int
400
static int
Lines 426-434 a10hdmi_get_edid(device_t dev, uint8_t **edid, uint32_t *edid_len) Link Here
426
	}
429
	}
427
430
428
	if (error == 0)
431
	if (error == 0)
429
		sc->has_audio = a10hdmi_detect_audio(sc);
432
		a10hdmi_detect_hdmi(sc, &sc->has_hdmi, &sc->has_audio);
430
	else
433
	else
431
		sc->has_audio = 0;
434
		sc->has_hdmi = sc->has_audio = 0;
432
435
433
	return (error);
436
	return (error);
434
}
437
}
Lines 515-521 a10hdmi_set_videomode(device_t dev, const struct videomode *mode) Link Here
515
	    PLLCTRL0_VCO_S);
518
	    PLLCTRL0_VCO_S);
516
519
517
	/* Setup display settings */
520
	/* Setup display settings */
518
	val = VID_CTRL_HDMI_MODE;
521
	val = 0;
522
	if (sc->has_hdmi)
523
		val |= VID_CTRL_HDMI_MODE;
519
	if (mode->flags & VID_INTERLACE)
524
	if (mode->flags & VID_INTERLACE)
520
		val |= VID_CTRL_INTERLACE;
525
		val |= VID_CTRL_INTERLACE;
521
	if (mode->flags & VID_DBLSCAN)
526
	if (mode->flags & VID_DBLSCAN)

Return to bug 207912