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
 

Reply via email to