nouveau/mode: split out create_ranged_atom
PATCH 1/2 nouveau/mode: split out create_ranged_atom
From: Dave Airlie <[email protected]>
This is preperation for the backlight support code.
Signed-off-by Dave Airlie <[email protected]>
--- src/drmmode_display.c | 54 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 20 deletions(-)
src/drmmode_display.c +34 -20
@@ -767,6 +767,33 @@ drmmode_property_ignore(drmModePropertyPtr prop) }static void +nouveau_create_ranged_atom (xf86OutputPtr output,Atom *atom, +const char *name,INT32 min,INT32 max, +uint64_t value,Bool immutable) +{ +int err; +INT32 atom_range[2 ]; + + atom_range[0 ] = min; + atom_range[1 ] = max; + + *atom =MakeAtom (name,strlen (name), TRUE); + err =RRConfigureOutputProperty (output->randr_output, *atom, + FALSE, TRUE, immutable, +2 , atom_range); +if (err !=0 ) { +xf86DrvMsg (output->scrn->scrnIndex,X_ERROR , +"RRConfigureOutputProperty error, %d\n" , err); + } + err =RRChangeOutputProperty (output->randr_output, *atom, +XA_INTEGER ,32 , PropModeReplace,1 , &value, FALSE, TRUE); +if (err !=0 ) { +xf86DrvMsg (output->scrn->scrnIndex,X_ERROR , +"RRChangeOutputProperty error, %d\n" , err); + } +} + +static void drmmode_output_create_resources (xf86OutputPtr output) {drmmode_output_private_ptr drmmode_output = output->driver_private;
@@ -800,30 +827,17 @@ drmmode_output_create_resources(xf86OutputPtr output) value = drmmode_output->mode_output->prop_values[p->index];if (drmmode_prop->flags &DRM_MODE_PROP_RANGE ) { -INT32 range[2 ]; - p->num_atoms =1 ; p->atoms =calloc (p->num_atoms,sizeof (Atom));if (!p->atoms)continue ; - p->atoms[0 ] =MakeAtom (drmmode_prop->name,strlen (drmmode_prop->name), TRUE); - range[0 ] = drmmode_prop->values[0 ]; - range[1 ] = drmmode_prop->values[1 ]; - err =RRConfigureOutputProperty (output->randr_output, p->atoms[0 ], - FALSE, TRUE, - drmmode_prop->flags &DRM_MODE_PROP_IMMUTABLE ? TRUE : FALSE, -2 , range); -if (err !=0 ) { -xf86DrvMsg (output->scrn->scrnIndex,X_ERROR , -"RRConfigureOutputProperty error, %d\n" , err); - } - err =RRChangeOutputProperty (output->randr_output, p->atoms[0 ], -XA_INTEGER ,32 , PropModeReplace,1 , - &value, FALSE, FALSE); -if (err !=0 ) { -xf86DrvMsg (output->scrn->scrnIndex,X_ERROR , -"RRChangeOutputProperty error, %d\n" , err); - } + +nouveau_create_ranged_atom (output, &p->atoms[0 ], + drmmode_prop->name, + drmmode_prop->values[0 ], + drmmode_prop->values[1 ], + value, + drmmode_prop->flags &DRM_MODE_PROP_IMMUTABLE ? TRUE : FALSE); }else if (drmmode_prop->flags &DRM_MODE_PROP_ENUM ) { p->num_atoms = drmmode_prop->count_enums +1 ; p->atoms =calloc (p->num_atoms,sizeof (Atom));
Signature · 1 line
1.8.2.1
A message that is not in the archive (sent off-list or not yet received): 1370482501-14023-1-git-send-email-airlied-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
PATCH 2/2 nouveau: add libbacklight and randr property support.
From: Dave Airlie <[email protected]>
This adds support to detect libbacklight and use it to provide the standard randr backlight properties, for desktops environments to use.
untested as of yet.
Signed-off-by Dave Airlie <[email protected]>
--- configure.ac | 3 +++ src/Makefile.am | 4 ++-- src/drmmode_display.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-)
configure.ac +3 -0
@@ -81,6 +81,9 @@ sdkdir=$(pkg-config --variable=sdkdir xorg-server) # Checks for libraries. PKG_CHECK_MODULES([PCIACCESS], [pciaccess >= 0.10]) +PKG_CHECK_MODULES(LIBBACKLIGHT, [libbacklight], LIBBACKLIGHT="yes"; AC_DEFINE(HAVE_LIBBACKLIGHT, 1, [libbacklight available]), [LIBBACKLIGHT=no]) +AM_CONDITIONAL(LIBBACKLIGHT, [ test "$LIBBACKLIGHT" = "yes" ]) + PKG_CHECK_MODULES(LIBUDEV, [libudev], [LIBUDEV=yes], [LIBUDEV=no]) if test "x$LIBUDEV" = xyes; then AC_DEFINE(HAVE_LIBUDEV, 1, [libudev support])
src/Makefile.am +2 -2
@@ -23,10 +23,10 @@ # -avoid-version prevents gratuitous .0.0.0 version numbers on the end # _ladir passes a dummy rpath to libtool so the thing will actually link # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc. -AM_CFLAGS = @XORG_CFLAGS@ @LIBUDEV_CFLAGS@ @LIBDRM_NOUVEAU_CFLAGS@ +AM_CFLAGS = @XORG_CFLAGS@ @LIBUDEV_CFLAGS@ @LIBDRM_NOUVEAU_CFLAGS@ @LIBBACKLIGHT_CFLAGS@ nouveau_drv_la_LTLIBRARIES = nouveau_drv.la nouveau_drv_la_LDFLAGS = -module -avoid-version @LIBDRM_NOUVEAU_LIBS@ \ - @LIBUDEV_LIBS@ + @LIBUDEV_LIBS@ @LIBBACKLIGHT_LIBS@ nouveau_drv_ladir = @moduledir@/drivers nouveau_drv_la_SOURCES = \
src/drmmode_display.c +40 -0
@@ -42,6 +42,10 @@#include "libudev.h" #endif +#ifdef HAVE_LIBBACKLIGHT +#include "libbacklight.h" +#endif +static Bool drmmode_xf86crtc_resize (ScrnInfoPtr scrn,int width,int height); typedef struct { int fd;
@@ -82,6 +86,11 @@ typedef struct {drmModePropertyBlobPtr edid_blob;int num_props;drmmode_prop_ptr props; +#ifdef HAVE_LIBBACKLIGHT +struct backlight *backlight; +int backlight_active_level; +int backlight_max; +#endif } drmmode_output_private_rec, *drmmode_output_private_ptr; typedef struct {
@@ -99,6 +108,13 @@ typedef struct {Bool dispatch_me; } drmmode_flipevtcarrier_rec, *drmmode_flipevtcarrier_ptr; +#ifdef HAVE_LIBBACKLIGHT +#define BACKLIGHT_NAME "Backlight" +#define BACKLIGHT_DEPRECATED_NAME "BACKLIGHT" + +static Atom backlight_atom, backlight_deprecated_atom; +#endif +static void drmmode_output_dpms (xf86OutputPtr output,int mode); static drmmode_ptr
@@ -717,6 +733,9 @@ drmmode_output_destroy(xf86OutputPtr output)drmModeFreeProperty (drmmode_output->props[i].mode_prop);free (drmmode_output->props[i].atoms); } +#ifdef HAVE_LIBBACKLIGHT +backlight_destroy (drmmode_output->backlight); +#endif drmModeFreeConnector (drmmode_output->mode_output);free (drmmode_output); output->driver_private =NULL ;
@@ -868,6 +887,27 @@ drmmode_output_create_resources(xf86OutputPtr output) } } } + +#ifdef HAVE_LIBBACKLIGHT + { +NVPtr pNv =NVPTR (output->scrn); +struct pci_device *dev = pNv->PciInfo; + + drmmode_output->backlight =backlight_init (dev,0 , mode_output->connector_type, + mode_output->connector_type_id); + +if (drmmode_output->backlight) { + drmmode_output->backlight_max =backlight_get_max_brightness (drmmode_output->backlight); + drmmode_output->backlight_active_level =backlight_get_brightness (drmmode_output->backlight); +nouveau_create_ranged_atom (output, &backlight_atom, +BACKLIGHT_NAME ,0 , drmmode_output->backlight_max, + drmmode_output->backlight_active_level, FALSE); +nouveau_create_ranged_atom (output, &backlight_deprecated_atom, +BACKLIGHT_DEPRECATED_NAME ,0 , drmmode_output->backlight_max, + drmmode_output->backlight_active_level, FALSE); + } + } +#endif } static Bool
Signature · 1 line
1.8.2.1