#include "display_adapter.h"
typedef struct acpi_ns_device_info {
device_node *node;
acpi_handle acpi_device;
} display_device_info;
extern "C" {
TODO: ACPI Spec 5 Appendix B: Implement:
_BCL Brightness control levels
_BCM Brightness control method
_BQC Brightness Query Current Level
_DCS Get current hardware status
_DDC Return the EDID for this device
_DGS Query desired hardware active \ inactive state
_DSS Set hardware active \ inactive state
Brightness notifications
*/
static status_t
display_open(void *_cookie, const char* path, int flags, void** cookie)
{
display_device_info *device = (display_device_info *)_cookie;
*cookie = device;
return B_OK;
}
static status_t
display_read(void *_cookie, off_t position, void *buf, size_t* num_bytes)
{
return B_ERROR;
}
static status_t
display_write(void* cookie, off_t position, const void* buffer,
size_t* num_bytes)
{
*num_bytes = 0;
return B_ERROR;
}
static status_t
display_control(void* cookie, uint32 op, void* arg, size_t len)
{
return B_ERROR;
}
static status_t
display_close(void* cookie)
{
return B_OK;
}
static status_t
display_free(void* cookie)
{
display_device_info *device = (display_device_info *)cookie;
return B_OK;
}
static status_t
display_init(void *_cookie, void **cookie)
{
device_node *node = (device_node *)_cookie;
display_device_info *device =
(display_device_info *)calloc(1, sizeof(*device));
if (device == NULL)
return B_NO_MEMORY;
device->node = node;
const char *path;
if (gDeviceManager->get_attr_string(node, ACPI_DEVICE_PATH_ITEM, &path,
false) != B_OK
|| gAcpi->get_handle(NULL, path, &device->acpi_device) != B_OK) {
dprintf("%s: failed to get acpi node.\n", __func__);
free(device);
return B_ERROR;
}
*cookie = device;
return B_OK;
}
static void
display_uninit(void *_cookie)
{
display_device_info *device = (display_device_info *)_cookie;
free(device);
}
}
device_module_info display_device_module = {
{
DISPLAY_DEVICE_MODULE_NAME,
0,
NULL
},
display_init,
display_uninit,
NULL,
display_open,
display_close,
display_free,
display_read,
display_write,
NULL,
display_control,
NULL,
NULL
};