xref: /haiku/src/add-ons/kernel/drivers/display/display.cpp (revision 21258e2674226d6aa732321b6f8494841895af5f)
1 #include "display_adapter.h"
2 
3 
4 typedef struct acpi_ns_device_info {
5 	device_node *node;
6 	acpi_handle acpi_device;
7 } display_device_info;
8 
9 
10 extern "C" {
11 
12 
13 /*
14 
15 TODO: ACPI Spec 5 Appendix B: Implement:
16 _BCL Brightness control levels
17 _BCM Brightness control method
18 _BQC Brightness Query Current Level
19 _DCS Get current hardware status
20 _DDC Return the EDID for this device
21 _DGS Query desired hardware active \ inactive state
22 _DSS Set hardware active \ inactive state
23 
24 Brightness notifications
25 
26 */
27 
28 
29 static status_t
30 display_open(void *_cookie, const char* path, int flags, void** cookie)
31 {
32 	display_device_info *device = (display_device_info *)_cookie;
33 	*cookie = device;
34 	return B_OK;
35 }
36 
37 
38 static status_t
39 display_read(void *_cookie, off_t position, void *buf, size_t* num_bytes)
40 {
41 	return B_ERROR;
42 }
43 
44 
45 static status_t
46 display_write(void* cookie, off_t position, const void* buffer,
47 	size_t* num_bytes)
48 {
49 	*num_bytes = 0;
50 	return B_ERROR;
51 }
52 
53 
54 static status_t
55 display_control(void* cookie, uint32 op, void* arg, size_t len)
56 {
57 	return B_ERROR;
58 }
59 
60 
61 static status_t
62 display_close(void* cookie)
63 {
64 	return B_OK;
65 }
66 
67 
68 static status_t
69 display_free(void* cookie)
70 {
71 	display_device_info *device = (display_device_info *)cookie;
72 	return B_OK;
73 }
74 
75 
76 //	#pragma mark - device module API
77 
78 
79 static status_t
80 display_init(void *_cookie, void **cookie)
81 {
82 	device_node *node = (device_node *)_cookie;
83 
84 	display_device_info *device =
85 		(display_device_info *)calloc(1, sizeof(*device));
86 
87 	if (device == NULL)
88 		return B_NO_MEMORY;
89 
90 	device->node = node;
91 
92 	const char *path;
93 	if (gDeviceManager->get_attr_string(node, ACPI_DEVICE_PATH_ITEM, &path,
94 			false) != B_OK
95 		|| gAcpi->get_handle(NULL, path, &device->acpi_device) != B_OK) {
96 		dprintf("%s: failed to get acpi node.\n", __func__);
97 		free(device);
98 		return B_ERROR;
99 	}
100 
101 	*cookie = device;
102 	return B_OK;
103 }
104 
105 
106 static void
107 display_uninit(void *_cookie)
108 {
109 	display_device_info *device = (display_device_info *)_cookie;
110 	free(device);
111 }
112 
113 } //extern c
114 
115 device_module_info display_device_module = {
116 	{
117 		DISPLAY_DEVICE_MODULE_NAME,
118 		0,
119 		NULL
120 	},
121 
122 	display_init,
123 	display_uninit,
124 	NULL,
125 
126 	display_open,
127 	display_close,
128 	display_free,
129 	display_read,
130 	display_write,
131 	NULL,
132 	display_control,
133 
134 	NULL,
135 	NULL
136 };
137 
138 
139 
140 
141