Module Name: src Committed By: macallan Date: Wed Nov 5 19:39:17 UTC 2014
Modified Files: src/sys/dev/pci: radeonfb.c radeonfbvar.h Log Message: - unmap registers in WSDISPLAYIO_MODE_MAPPED only if a drm attached - don't try to touch backlight registers when they're not mapped To generate a diff of this commit: cvs rdiff -u -r1.87 -r1.88 src/sys/dev/pci/radeonfb.c cvs rdiff -u -r1.19 -r1.20 src/sys/dev/pci/radeonfbvar.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/dev/pci/radeonfb.c diff -u src/sys/dev/pci/radeonfb.c:1.87 src/sys/dev/pci/radeonfb.c:1.88 --- src/sys/dev/pci/radeonfb.c:1.87 Tue Oct 21 09:07:07 2014 +++ src/sys/dev/pci/radeonfb.c Wed Nov 5 19:39:17 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: radeonfb.c,v 1.87 2014/10/21 09:07:07 macallan Exp $ */ +/* $NetBSD: radeonfb.c,v 1.88 2014/11/05 19:39:17 macallan Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.87 2014/10/21 09:07:07 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.88 2014/11/05 19:39:17 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1001,7 +1001,14 @@ radeonfb_attach(device_t parent, device_ pmf_event_register(dev, PMFE_DISPLAY_BRIGHTNESS_DOWN, radeonfb_brightness_down, TRUE); - config_found_ia(dev, "drm", aux, radeonfb_drm_print); + /* + * if we attach a DRM we need to unmap registers in + * WSDISPLAYIO_MODE_MAPPED, since this keeps us from doing things like + * screen blanking we only do it if needed + */ + sc->sc_needs_unmap = + (config_found_ia(dev, "drm", aux, radeonfb_drm_print) != 0); + DPRINTF(("needs_unmap: %d\n", sc->sc_needs_unmap)); PRINTREG(RADEON_CRTC_EXT_CNTL); PRINTREG(RADEON_CRTC_GEN_CNTL); @@ -1048,6 +1055,9 @@ radeonfb_map(struct radeonfb_softc *sc) static void radeonfb_unmap(struct radeonfb_softc *sc) { + if (!sc->sc_needs_unmap) + return; + if (sc->sc_mapped) { bus_space_unmap(sc->sc_regt, sc->sc_regh, sc->sc_regsz); bus_space_unmap(sc->sc_memt, sc->sc_memh, sc->sc_memsz); @@ -1119,6 +1129,8 @@ radeonfb_ioctl(void *v, void *vs, case WSDISPLAYIO_SVIDEO: radeonfb_blank(dp, (*(unsigned int *)d == WSDISPLAYIO_VIDEO_OFF)); + radeonfb_switch_backlight(dp, + (*(unsigned int *)d == WSDISPLAYIO_VIDEO_ON)); return 0; case WSDISPLAYIO_GETCMAP: @@ -4093,10 +4105,13 @@ radeonfb_switch_backlight(struct radeonf static int radeonfb_set_backlight(struct radeonfb_display *dp, int level) { - struct radeonfb_softc *sc; + struct radeonfb_softc *sc = dp->rd_softc;; int rlevel, s; uint32_t lvds; + if(!sc->sc_mapped) + return 0; + s = spltty(); dp->rd_bl_level = level; @@ -4108,11 +4123,9 @@ radeonfb_set_backlight(struct radeonfb_d else if (level >= RADEONFB_BACKLIGHT_MAX) level = RADEONFB_BACKLIGHT_MAX; - sc = dp->rd_softc; - /* On some chips, we should negate the backlight level. */ if (dp->rd_softc->sc_flags & RFB_INV_BLIGHT) { - rlevel = RADEONFB_BACKLIGHT_MAX - level; + rlevel = RADEONFB_BACKLIGHT_MAX - level; } else rlevel = level; Index: src/sys/dev/pci/radeonfbvar.h diff -u src/sys/dev/pci/radeonfbvar.h:1.19 src/sys/dev/pci/radeonfbvar.h:1.20 --- src/sys/dev/pci/radeonfbvar.h:1.19 Wed Jan 22 07:57:33 2014 +++ src/sys/dev/pci/radeonfbvar.h Wed Nov 5 19:39:17 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: radeonfbvar.h,v 1.19 2014/01/22 07:57:33 macallan Exp $ */ +/* $NetBSD: radeonfbvar.h,v 1.20 2014/11/05 19:39:17 macallan Exp $ */ /*- * Copyright (c) 2006 Itronix Inc. @@ -231,6 +231,7 @@ struct radeonfb_softc { bus_size_t sc_iosz; bus_addr_t sc_ioaddr; + int sc_needs_unmap; int sc_mapped; /* size of a single display */