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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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