Module Name: src Committed By: jmcneill Date: Sun Nov 9 14:30:55 UTC 2014
Modified Files: src/sys/arch/arm/allwinner: awin_debe.c awin_fb.c awin_hdmi.c awin_tcon.c awin_var.h files.awin Log Message: If we can't determine the preferred display mode for some reason, fallback to 640x480. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/allwinner/awin_debe.c \ src/sys/arch/arm/allwinner/awin_fb.c \ src/sys/arch/arm/allwinner/awin_tcon.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/allwinner/awin_hdmi.c cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/allwinner/awin_var.h cvs rdiff -u -r1.22 -r1.23 src/sys/arch/arm/allwinner/files.awin Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/allwinner/awin_debe.c diff -u src/sys/arch/arm/allwinner/awin_debe.c:1.1 src/sys/arch/arm/allwinner/awin_debe.c:1.2 --- src/sys/arch/arm/allwinner/awin_debe.c:1.1 Sun Nov 9 14:10:54 2014 +++ src/sys/arch/arm/allwinner/awin_debe.c Sun Nov 9 14:30:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_debe.c,v 1.1 2014/11/09 14:10:54 jmcneill Exp $ */ +/* $NetBSD: awin_debe.c,v 1.2 2014/11/09 14:30:55 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -33,7 +33,7 @@ #include "genfb.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_debe.c,v 1.1 2014/11/09 14:10:54 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_debe.c,v 1.2 2014/11/09 14:30:55 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -74,7 +74,7 @@ static void awin_debe_attach(device_t, d static int awin_debe_alloc_videomem(struct awin_debe_softc *); static void awin_debe_setup_fbdev(struct awin_debe_softc *, - struct videomode *); + const struct videomode *); CFATTACH_DECL_NEW(awin_debe, sizeof(struct awin_debe_softc), awin_debe_match, awin_debe_attach, NULL, NULL); @@ -202,9 +202,9 @@ free: } static void -awin_debe_setup_fbdev(struct awin_debe_softc *sc, struct videomode *mode) +awin_debe_setup_fbdev(struct awin_debe_softc *sc, const struct videomode *mode) { - if (sc->sc_fbdev == NULL) { + if (mode && sc->sc_fbdev == NULL) { struct awinfb_attach_args afb = { .afb_fb = sc->sc_dmap, .afb_width = mode->hdisplay, @@ -218,14 +218,14 @@ awin_debe_setup_fbdev(struct awin_debe_s &afb, NULL); } #if NGENFB > 0 - else { + else if (sc->sc_fbdev != NULL) { awin_fb_set_videomode(sc->sc_fbdev, mode); } #endif } void -awin_debe_set_videomode(struct videomode *mode) +awin_debe_set_videomode(const struct videomode *mode) { struct awin_debe_softc *sc; device_t dev; Index: src/sys/arch/arm/allwinner/awin_fb.c diff -u src/sys/arch/arm/allwinner/awin_fb.c:1.1 src/sys/arch/arm/allwinner/awin_fb.c:1.2 --- src/sys/arch/arm/allwinner/awin_fb.c:1.1 Sun Nov 9 14:10:54 2014 +++ src/sys/arch/arm/allwinner/awin_fb.c Sun Nov 9 14:30:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_fb.c,v 1.1 2014/11/09 14:10:54 jmcneill Exp $ */ +/* $NetBSD: awin_fb.c,v 1.2 2014/11/09 14:30:55 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_fb.c,v 1.1 2014/11/09 14:10:54 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_fb.c,v 1.2 2014/11/09 14:30:55 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -180,7 +180,7 @@ awin_fb_ddb_trap_callback(int where) } void -awin_fb_set_videomode(device_t dev, struct videomode *mode) +awin_fb_set_videomode(device_t dev, const struct videomode *mode) { struct awin_fb_softc *sc = device_private(dev); Index: src/sys/arch/arm/allwinner/awin_tcon.c diff -u src/sys/arch/arm/allwinner/awin_tcon.c:1.1 src/sys/arch/arm/allwinner/awin_tcon.c:1.2 --- src/sys/arch/arm/allwinner/awin_tcon.c:1.1 Sun Nov 9 14:10:54 2014 +++ src/sys/arch/arm/allwinner/awin_tcon.c Sun Nov 9 14:30:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_tcon.c,v 1.1 2014/11/09 14:10:54 jmcneill Exp $ */ +/* $NetBSD: awin_tcon.c,v 1.2 2014/11/09 14:30:55 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_tcon.c,v 1.1 2014/11/09 14:10:54 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_tcon.c,v 1.2 2014/11/09 14:30:55 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -60,7 +60,8 @@ struct awin_tcon_softc { static int awin_tcon_match(device_t, cfdata_t, void *); static void awin_tcon_attach(device_t, device_t, void *); -static void awin_tcon_set_pll(struct awin_tcon_softc *, struct videomode *); +static void awin_tcon_set_pll(struct awin_tcon_softc *, + const struct videomode *); CFATTACH_DECL_NEW(awin_tcon, sizeof(struct awin_tcon_softc), awin_tcon_match, awin_tcon_attach, NULL, NULL); @@ -133,7 +134,7 @@ awin_tcon_attach(device_t parent, device } static void -awin_tcon_set_pll(struct awin_tcon_softc *sc, struct videomode *mode) +awin_tcon_set_pll(struct awin_tcon_softc *sc, const struct videomode *mode) { unsigned int n, m, freq; unsigned int m1 = ~0, n1 = ~0; @@ -168,7 +169,7 @@ awin_tcon_set_pll(struct awin_tcon_softc } void -awin_tcon_set_videomode(struct videomode *mode) +awin_tcon_set_videomode(const struct videomode *mode) { struct awin_tcon_softc *sc; device_t dev; Index: src/sys/arch/arm/allwinner/awin_hdmi.c diff -u src/sys/arch/arm/allwinner/awin_hdmi.c:1.3 src/sys/arch/arm/allwinner/awin_hdmi.c:1.4 --- src/sys/arch/arm/allwinner/awin_hdmi.c:1.3 Sun Nov 9 14:10:54 2014 +++ src/sys/arch/arm/allwinner/awin_hdmi.c Sun Nov 9 14:30:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_hdmi.c,v 1.3 2014/11/09 14:10:54 jmcneill Exp $ */ +/* $NetBSD: awin_hdmi.c,v 1.4 2014/11/09 14:30:55 jmcneill Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -33,7 +33,7 @@ #define AWIN_HDMI_PLL 3 /* PLL7 or PLL3 */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_hdmi.c,v 1.3 2014/11/09 14:10:54 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_hdmi.c,v 1.4 2014/11/09 14:30:55 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -93,9 +93,9 @@ static int awin_hdmi_i2c_reset(struct aw static void awin_hdmi_enable(struct awin_hdmi_softc *); static void awin_hdmi_read_edid(struct awin_hdmi_softc *); static void awin_hdmi_set_videomode(struct awin_hdmi_softc *, - struct videomode *); + const struct videomode *); static void awin_hdmi_set_audiomode(struct awin_hdmi_softc *, - struct videomode *); + const struct videomode *); static void awin_hdmi_hpd(struct awin_hdmi_softc *); static void awin_hdmi_thread(void *); #if 0 @@ -459,6 +459,7 @@ awin_hdmi_enable(struct awin_hdmi_softc static void awin_hdmi_read_edid(struct awin_hdmi_softc *sc) { + const struct videomode *mode; char edid[128]; struct edid_info ei; int retry = 4; @@ -477,18 +478,22 @@ awin_hdmi_read_edid(struct awin_hdmi_sof edid_print(&ei); #endif - awin_debe_set_videomode(ei.edid_preferred_mode); - awin_tcon_set_videomode(ei.edid_preferred_mode); + mode = ei.edid_preferred_mode; + if (mode == NULL) + mode = pick_mode_by_ref(640, 480, 60); - if (ei.edid_preferred_mode != NULL) { + awin_debe_set_videomode(mode); + awin_tcon_set_videomode(mode); + + if (mode != NULL) { delay(10000); - awin_hdmi_set_videomode(sc, ei.edid_preferred_mode); - awin_hdmi_set_audiomode(sc, ei.edid_preferred_mode); + awin_hdmi_set_videomode(sc, mode); + awin_hdmi_set_audiomode(sc, mode); } } static void -awin_hdmi_set_videomode(struct awin_hdmi_softc *sc, struct videomode *mode) +awin_hdmi_set_videomode(struct awin_hdmi_softc *sc, const struct videomode *mode) { uint32_t val; const u_int dblscan_p = !!(mode->flags & VID_DBLSCAN); @@ -617,7 +622,7 @@ awin_hdmi_set_videomode(struct awin_hdmi } static void -awin_hdmi_set_audiomode(struct awin_hdmi_softc *sc, struct videomode *mode) +awin_hdmi_set_audiomode(struct awin_hdmi_softc *sc, const struct videomode *mode) { /* TODO */ HDMI_WRITE(sc, AWIN_HDMI_AUD_CTRL_REG, 0); Index: src/sys/arch/arm/allwinner/awin_var.h diff -u src/sys/arch/arm/allwinner/awin_var.h:1.20 src/sys/arch/arm/allwinner/awin_var.h:1.21 --- src/sys/arch/arm/allwinner/awin_var.h:1.20 Sun Nov 9 14:10:54 2014 +++ src/sys/arch/arm/allwinner/awin_var.h Sun Nov 9 14:30:55 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_var.h,v 1.20 2014/11/09 14:10:54 jmcneill Exp $ */ +/* $NetBSD: awin_var.h,v 1.21 2014/11/09 14:30:55 jmcneill Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. * All rights reserved. @@ -125,9 +125,9 @@ void awin_dma_halt(void *); struct videomode; unsigned int awin_tcon_get_clk_div(void); -void awin_tcon_set_videomode(struct videomode *); -void awin_debe_set_videomode(struct videomode *); -void awin_fb_set_videomode(device_t, struct videomode *); +void awin_tcon_set_videomode(const struct videomode *); +void awin_debe_set_videomode(const struct videomode *); +void awin_fb_set_videomode(device_t, const struct videomode *); void awin_fb_ddb_trap_callback(int); void awin_wdog_reset(void); Index: src/sys/arch/arm/allwinner/files.awin diff -u src/sys/arch/arm/allwinner/files.awin:1.22 src/sys/arch/arm/allwinner/files.awin:1.23 --- src/sys/arch/arm/allwinner/files.awin:1.22 Sun Nov 9 14:10:54 2014 +++ src/sys/arch/arm/allwinner/files.awin Sun Nov 9 14:30:55 2014 @@ -1,4 +1,4 @@ -# $NetBSD: files.awin,v 1.22 2014/11/09 14:10:54 jmcneill Exp $ +# $NetBSD: files.awin,v 1.23 2014/11/09 14:30:55 jmcneill Exp $ # # Configuration info for Allwinner ARM Peripherals # @@ -135,7 +135,7 @@ attach awinac at awinio with awin_ac file arch/arm/allwinner/awin_ac.c awin_ac # A10/A20/A31 HDMI -device awinhdmi: edid, ddc_read_edid +device awinhdmi: edid, ddc_read_edid, videomode attach awinhdmi at awinio with awin_hdmi file arch/arm/allwinner/awin_hdmi.c awin_hdmi