Add an OpenBSD-specific implementation of backlight control that uses the
appropriate wscons ioctls. ok matthieu@
This commit is contained in:
parent
da8e23aecc
commit
d890a3469b
@ -53,6 +53,11 @@
|
|||||||
|
|
||||||
#include "intel_glamor.h"
|
#include "intel_glamor.h"
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
#include <dev/wscons/wsconsio.h>
|
||||||
|
#include "xf86Priv.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define KNOWN_MODE_FLAGS ((1<<14)-1)
|
#define KNOWN_MODE_FLAGS ((1<<14)-1)
|
||||||
|
|
||||||
struct intel_mode {
|
struct intel_mode {
|
||||||
@ -127,6 +132,69 @@ intel_output_dpms(xf86OutputPtr output, int mode);
|
|||||||
static void
|
static void
|
||||||
intel_output_dpms_backlight(xf86OutputPtr output, int oldmode, int mode);
|
intel_output_dpms_backlight(xf86OutputPtr output, int oldmode, int mode);
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
crtc_id(struct intel_crtc *crtc)
|
||||||
|
{
|
||||||
|
return crtc->mode_crtc->crtc_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __OpenBSD__
|
||||||
|
|
||||||
|
static void
|
||||||
|
intel_output_backlight_set(xf86OutputPtr output, int level)
|
||||||
|
{
|
||||||
|
struct intel_output *intel_output = output->driver_private;
|
||||||
|
struct wsdisplay_param param;
|
||||||
|
|
||||||
|
if (level > intel_output->backlight_max)
|
||||||
|
level = intel_output->backlight_max;
|
||||||
|
if (! intel_output->backlight_iface || level < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
param.param = WSDISPLAYIO_PARAM_BRIGHTNESS;
|
||||||
|
param.curval = level;
|
||||||
|
if (ioctl(xf86Info.consoleFd, WSDISPLAYIO_SETPARAM, ¶m) == -1) {
|
||||||
|
xf86DrvMsg(output->scrn->scrnIndex, X_ERROR,
|
||||||
|
"Failed to set backlight level: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
intel_output_backlight_get(xf86OutputPtr output)
|
||||||
|
{
|
||||||
|
struct wsdisplay_param param;
|
||||||
|
|
||||||
|
param.param = WSDISPLAYIO_PARAM_BRIGHTNESS;
|
||||||
|
if (ioctl(xf86Info.consoleFd, WSDISPLAYIO_GETPARAM, ¶m) == -1) {
|
||||||
|
xf86DrvMsg(output->scrn->scrnIndex, X_ERROR,
|
||||||
|
"Failed to get backlight level: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return param.curval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
intel_output_backlight_init(xf86OutputPtr output)
|
||||||
|
{
|
||||||
|
struct intel_output *intel_output = output->driver_private;
|
||||||
|
struct wsdisplay_param param;
|
||||||
|
|
||||||
|
param.param = WSDISPLAYIO_PARAM_BRIGHTNESS;
|
||||||
|
if (ioctl(xf86Info.consoleFd, WSDISPLAYIO_GETPARAM, ¶m) == -1) {
|
||||||
|
intel_output->backlight_iface = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
intel_output->backlight_iface = "wscons";
|
||||||
|
intel_output->backlight_max = param.max;
|
||||||
|
intel_output->backlight_active_level = param.curval;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#define BACKLIGHT_CLASS "/sys/class/backlight"
|
#define BACKLIGHT_CLASS "/sys/class/backlight"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -155,12 +223,6 @@ static const char *backlight_interfaces[] = {
|
|||||||
/* Enough for 10 digits of backlight + '\n' + '\0' */
|
/* Enough for 10 digits of backlight + '\n' + '\0' */
|
||||||
#define BACKLIGHT_VALUE_LEN 12
|
#define BACKLIGHT_VALUE_LEN 12
|
||||||
|
|
||||||
static inline int
|
|
||||||
crtc_id(struct intel_crtc *crtc)
|
|
||||||
{
|
|
||||||
return crtc->mode_crtc->crtc_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
intel_output_backlight_set(xf86OutputPtr output, int level)
|
intel_output_backlight_set(xf86OutputPtr output, int level)
|
||||||
{
|
{
|
||||||
@ -297,6 +359,7 @@ intel_output_backlight_init(xf86OutputPtr output)
|
|||||||
intel_output->backlight_iface = NULL;
|
intel_output->backlight_iface = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
mode_from_kmode(ScrnInfoPtr scrn,
|
mode_from_kmode(ScrnInfoPtr scrn,
|
||||||
|
Loading…
Reference in New Issue
Block a user