Module Name: src
Committed By: macallan
Date: Thu Jul 23 07:21:45 UTC 2009
Modified Files:
src/sys/dev/pci: radeonfb.c
Log Message:
quick hack to allow brightness control via PMF
To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/dev/pci/radeonfb.c
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.33 src/sys/dev/pci/radeonfb.c:1.34
--- src/sys/dev/pci/radeonfb.c:1.33 Tue May 12 08:23:01 2009
+++ src/sys/dev/pci/radeonfb.c Thu Jul 23 07:21:45 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: radeonfb.c,v 1.33 2009/05/12 08:23:01 cegger Exp $ */
+/* $NetBSD: radeonfb.c,v 1.34 2009/07/23 07:21:45 macallan Exp $ */
/*-
* Copyright (c) 2006 Itronix Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.33 2009/05/12 08:23:01 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.34 2009/07/23 07:21:45 macallan Exp $");
#define RADEONFB_DEFAULT_DEPTH 32
@@ -169,6 +169,9 @@
static int radeonfb_set_backlight(struct radeonfb_display *, int);
static void radeonfb_lvds_callout(void *);
+static void radeonfb_brightness_up(device_t);
+static void radeonfb_brightness_down(device_t);
+
static struct videomode *radeonfb_best_refresh(struct videomode *,
struct videomode *);
static void radeonfb_pickres(struct radeonfb_display *, uint16_t *,
@@ -431,7 +434,7 @@
const char *mptr;
bus_size_t bsz;
pcireg_t screg;
- int i, j, fg, bg, ul;
+ int i, j, fg, bg, ul, flags;
uint32_t v;
sc->sc_id = pa->pa_id;
@@ -529,6 +532,14 @@
goto error;
}
+ if (pci_mapreg_info(sc->sc_pc, sc->sc_pt, PCI_MAPREG_ROM,
+ PCI_MAPREG_TYPE_ROM, &sc->sc_romaddr, &sc->sc_romsz, &flags) != 0)
+ {
+ aprint_error("%s: unable to find ROM!\n", XNAME(sc));
+ goto error;
+ }
+ sc->sc_romt = sc->sc_memt;
+
/* scratch register test... */
if (radeonfb_scratch_test(sc, RADEON_BIOS_0_SCRATCH, 0x55555555) ||
radeonfb_scratch_test(sc, RADEON_BIOS_0_SCRATCH, 0xaaaaaaaa)) {
@@ -810,7 +821,9 @@
dp->rd_vd.init_screen = radeonfb_init_screen;
- dp->rd_console = 1;
+ dp->rd_console = 0;
+ prop_dictionary_get_bool(device_properties(&sc->sc_dev),
+ "is_console", &dp->rd_console);
dp->rd_vscreen.scr_flags |= VCONS_SCREEN_IS_STATIC;
@@ -892,6 +905,11 @@
radeonfb_lvds_callout, dp);
}
+ pmf_event_register(dev, PMFE_DISPLAY_BRIGHTNESS_UP,
+ radeonfb_brightness_up, TRUE);
+ pmf_event_register(dev, PMFE_DISPLAY_BRIGHTNESS_DOWN,
+ radeonfb_brightness_down, TRUE);
+
config_found_ia(dev, "drm", aux, radeonfb_drm_print);
return;
@@ -982,7 +1000,7 @@
if ((dp->rd_wsmode == WSDISPLAYIO_MODE_EMUL) &&
(dp->rd_vd.active)) {
radeonfb_engine_init(dp);
- radeonfb_modeswitch(dp);
+ //radeonfb_modeswitch(dp);
vcons_redraw_screen(dp->rd_vd.active);
}
}
@@ -1069,7 +1087,6 @@
/* XXX: note that we don't allow mapping of registers right now */
/* XXX: this means that the XFree86 radeon driver won't work */
-
if ((offset >= 0) && (offset < (dp->rd_virty * dp->rd_stride))) {
pa = bus_space_mmap(sc->sc_memt,
sc->sc_memaddr + dp->rd_offset + offset, 0,
@@ -1100,6 +1117,12 @@
BUS_SPACE_MAP_LINEAR);
}
+ if ((offset >= sc->sc_romaddr) &&
+ (offset < sc->sc_romaddr + sc->sc_romsz)) {
+ return bus_space_mmap(sc->sc_memt, offset, 0, prot,
+ BUS_SPACE_MAP_LINEAR);
+ }
+
#ifdef PCI_MAGIC_IO_RANGE
/* allow mapping of IO space */
if ((offset >= PCI_MAGIC_IO_RANGE) &&
@@ -3505,3 +3528,29 @@
splx(s);
}
+
+static void
+radeonfb_brightness_up(device_t dev)
+{
+ struct radeonfb_softc *sc = device_private(dev);
+ int level;
+
+ /* we assume the main display is the first one - need a better way */
+ if (sc->sc_ndisplays < 1) return;
+ level = radeonfb_get_backlight(&sc->sc_displays[0]);
+ level = min(RADEONFB_BACKLIGHT_MAX, level + 5);
+ radeonfb_set_backlight(&sc->sc_displays[0], level);
+}
+
+static void
+radeonfb_brightness_down(device_t dev)
+{
+ struct radeonfb_softc *sc = device_private(dev);
+ int level;
+
+ /* we assume the main display is the first one - need a better way */
+ if (sc->sc_ndisplays < 1) return;
+ level = radeonfb_get_backlight(&sc->sc_displays[0]);
+ level = max(0, level - 5);
+ radeonfb_set_backlight(&sc->sc_displays[0], level);
+}