1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
/*
* Copyright © 2012 Intel Corporation
*
* Permission to use, copy, modify, distribute, and sell this software and
* its documentation for any purpose is hereby granted without fee, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of the copyright holders not be used in
* advertising or publicity pertaining to distribution of the software
* without specific, written prior permission. The copyright holders make
* no representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
* CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Author: Tiago Vignatti
*/
#include <stdio.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
#include "libbacklight.h"
static void
set_backlight(int fd, drmModeResPtr res, struct pci_device * dev, int blight)
{
drmModeConnectorPtr connector;
int i;
long max_brightness, brightness, actual_brightness;
struct backlight *backlight;
for (i = 0; i < res->count_connectors; i++) {
connector = drmModeGetConnector(fd, res->connectors[i]);
if (!connector)
continue;
if (connector->connection == DRM_MODE_DISCONNECTED)
continue;
backlight = backlight_init(dev,
0,
connector->connector_type,
connector->connector_type_id);
drmModeFreeConnector(connector);
}
if (!backlight) {
printf("backlight adjust failed\n");
return;
}
max_brightness = backlight_get_max_brightness(backlight);
printf("Max backlight: %ld\n", max_brightness);
brightness = backlight_get_brightness(backlight);
printf("Cached backlight: %ld\n", brightness);
actual_brightness = backlight_get_actual_brightness(backlight);
printf("Hardware backlight: %ld\n", actual_brightness);
backlight_set_brightness(backlight, blight);
printf("Setting brightness to: %d\n", blight);
backlight_destroy(backlight);
}
int
main(int argc, char **argv)
{
int fd, blight;
drmModeResPtr res;
const char *module_name = "i915";
struct pci_id_match dev_match = {
PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
(0x03 << 16), 0xff000, 0 };
struct pci_device_iterator * iter;
struct pci_device * dev;
if (argc < 2) {
printf("Please add a brightness value\n");
return 1;
}
blight = atoi(argv[1]);
fd = drmOpen(module_name, NULL);
if (fd < 0) {
printf("Failed to open the card fd (%d)\n",fd);
return 1;
}
res = drmModeGetResources(fd);
if (res == 0) {
printf("Failed to get resources from card\n");
drmClose(fd);
return 1;
}
pci_system_init();
iter = pci_id_match_iterator_create(&dev_match);
while ((dev = pci_device_next(iter)) != NULL)
set_backlight(fd, res, dev, blight);
return 0;
}
|