Module Name: src
Committed By: jdc
Date: Mon Oct 31 08:28:46 UTC 2011
Modified Files:
src/sys/arch/sparc64/dev: ffb.c ffb_mainbus.c ffbvar.h
Log Message:
Add support for the WSDISPLAYIO_GET_EDID ioctl (requires passing a device_t
to ffb_attach).
To generate a diff of this commit:
cvs rdiff -u -r1.47 -r1.48 src/sys/arch/sparc64/dev/ffb.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/sparc64/dev/ffb_mainbus.c \
src/sys/arch/sparc64/dev/ffbvar.h
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/sparc64/dev/ffb.c
diff -u src/sys/arch/sparc64/dev/ffb.c:1.47 src/sys/arch/sparc64/dev/ffb.c:1.48
--- src/sys/arch/sparc64/dev/ffb.c:1.47 Sun Oct 23 06:06:24 2011
+++ src/sys/arch/sparc64/dev/ffb.c Mon Oct 31 08:28:46 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: ffb.c,v 1.47 2011/10/23 06:06:24 jdc Exp $ */
+/* $NetBSD: ffb.c,v 1.48 2011/10/31 08:28:46 jdc Exp $ */
/* $OpenBSD: creator.c,v 1.20 2002/07/30 19:48:15 jason Exp $ */
/*
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffb.c,v 1.47 2011/10/23 06:06:24 jdc Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffb.c,v 1.48 2011/10/31 08:28:46 jdc Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -57,6 +57,8 @@ __KERNEL_RCSID(0, "$NetBSD: ffb.c,v 1.47
#include <dev/wsfont/wsfont.h>
#include <dev/wscons/wsdisplay_vconsvar.h>
+#include <prop/proplib.h>
+
#include <dev/i2c/i2cvar.h>
#include <dev/i2c/i2c_bitbang.h>
#include <dev/i2c/ddcvar.h>
@@ -188,8 +190,9 @@ int ffb_set_vmode(struct ffb_softc *, st
void
-ffb_attach(struct ffb_softc *sc)
+ffb_attach(device_t self)
{
+ struct ffb_softc *sc = device_private(self);
struct wsemuldisplaydev_attach_args waa;
struct rasops_info *ri;
long defattr;
@@ -200,6 +203,7 @@ ffb_attach(struct ffb_softc *sc)
u_int blank = WSDISPLAYIO_VIDEO_ON;
char buf[6+1];
int i, try_edid;
+ prop_data_t data;
printf(":");
@@ -307,6 +311,10 @@ ffb_attach(struct ffb_softc *sc)
if (ffb_debug)
edid_print(&sc->sc_edid_info);
+ data = prop_data_create_data(sc->sc_edid_data, EDID_DATA_LEN);
+ prop_dictionary_set(device_properties(self), "EDID", data);
+ prop_object_release(data);
+
if (try_edid)
for (i = 0; i < sc->sc_edid_info.edid_nmodes; i++) {
if (ffb_set_vmode(sc,
@@ -493,6 +501,11 @@ ffb_ioctl(void *v, void *vs, u_long cmd,
case WSDISPLAYIO_GCURSOR:
case WSDISPLAYIO_SCURSOR:
return EIO; /* not supported yet */
+ break;
+ case WSDISPLAYIO_GET_EDID: {
+ struct wsdisplayio_edid_info *d = data;
+ return wsdisplayio_get_edid(sc->sc_dev, d);
+ }
default:
return EPASSTHROUGH;
}
Index: src/sys/arch/sparc64/dev/ffb_mainbus.c
diff -u src/sys/arch/sparc64/dev/ffb_mainbus.c:1.11 src/sys/arch/sparc64/dev/ffb_mainbus.c:1.12
--- src/sys/arch/sparc64/dev/ffb_mainbus.c:1.11 Fri Jul 1 18:48:36 2011
+++ src/sys/arch/sparc64/dev/ffb_mainbus.c Mon Oct 31 08:28:46 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: ffb_mainbus.c,v 1.11 2011/07/01 18:48:36 dyoung Exp $ */
+/* $NetBSD: ffb_mainbus.c,v 1.12 2011/10/31 08:28:46 jdc Exp $ */
/* $OpenBSD: creator_mainbus.c,v 1.4 2002/07/26 16:39:04 jason Exp $ */
/*
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffb_mainbus.c,v 1.11 2011/07/01 18:48:36 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffb_mainbus.c,v 1.12 2011/10/31 08:28:46 jdc Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -114,7 +114,7 @@ ffb_mainbus_attach(device_t parent, devi
if (strcmp(ma->ma_name, "SUNW,afb") == 0)
sc->sc_type = FFB_AFB;
- ffb_attach(sc);
+ ffb_attach(self);
return;
Index: src/sys/arch/sparc64/dev/ffbvar.h
diff -u src/sys/arch/sparc64/dev/ffbvar.h:1.11 src/sys/arch/sparc64/dev/ffbvar.h:1.12
--- src/sys/arch/sparc64/dev/ffbvar.h:1.11 Fri Jun 3 03:20:39 2011
+++ src/sys/arch/sparc64/dev/ffbvar.h Mon Oct 31 08:28:46 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: ffbvar.h,v 1.11 2011/06/03 03:20:39 christos Exp $ */
+/* $NetBSD: ffbvar.h,v 1.12 2011/10/31 08:28:46 jdc Exp $ */
/* $OpenBSD: creatorvar.h,v 1.6 2002/07/30 19:48:15 jason Exp $ */
/*
@@ -86,4 +86,4 @@ struct ffb_softc {
#define FBC_READ(sc,r) \
bus_space_read_4((sc)->sc_bt, (sc)->sc_fbc_h, (r))
-void ffb_attach(struct ffb_softc *);
+void ffb_attach(device_t);