typedef struct _hal_tdm_capture_funcs hal_tdm_capture_funcs;
typedef struct _hal_tdm_voutput_funcs hal_tdm_voutput_funcs;
+typedef hal_tdm_error (*hal_tdm_master_drm_fd_handler)(hal_tdm_fd master_drm_fd, void *user_data);
+
struct _hal_tdm_backend_data {
hal_tdm_display *display; // handle
+ int has_drm_device;
+ struct {
+ hal_tdm_fd drm_fd;
+ int is_master;
+ hal_tdm_master_drm_fd_handler master_drm_fd_func;
+ void *user_data;
+ } drm_info;
+
int num_event_sources;
hal_tdm_event_source *event_sources[HAL_TDM_EVENT_SOURCE_MAX];
/* tdm_backend_data */
hal_tdm_display *hal_tdm_backend_get_display(hal_tdm_backend *backend, hal_tdm_error *error);
+int hal_tdm_backend_has_drm_device(hal_tdm_backend *backend, hal_tdm_error *error);
+hal_tdm_fd hal_tdm_backend_get_master_drm_fd(hal_tdm_backend *backend, hal_tdm_error *error);
+hal_tdm_error hal_tdm_backend_set_master_drm_fd(hal_tdm_backend *backend, hal_tdm_fd master_drm_fd);
hal_tdm_event_source **hal_tdm_backend_get_event_sources(hal_tdm_backend *backend, int *num_event_sources, hal_tdm_error *error);
/* tdm_display_funcs */
return display;
}
+EXTERN int
+hal_tdm_backend_has_drm_device(hal_tdm_backend *backend, hal_tdm_error *error)
+{
+ hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
+
+ if (!backend_data || g_hal_tdm_backend_data != backend) {
+ _E("no backend_data\n");
+ if (error)
+ *error = HAL_TDM_ERROR_OPERATION_FAILED;
+ return 0;
+ }
+
+ return backend_data->has_drm_device;
+}
+
+EXTERN hal_tdm_fd
+hal_tdm_backend_get_master_drm_fd(hal_tdm_backend *backend, hal_tdm_error *error)
+{
+ hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
+
+ if (!backend_data || g_hal_tdm_backend_data != backend) {
+ _E("no backend_data\n");
+ if (error)
+ *error = HAL_TDM_ERROR_OPERATION_FAILED;
+ return -1;
+ }
+
+ if (!backend_data->drm_info.is_master) {
+ _I("no master_drm_fd");
+ return -1;
+ }
+
+ _I("master_drm_fd is %d", backend_data->drm_info.drm_fd);
+
+ return backend_data->drm_info.drm_fd;
+}
+
+EXTERN hal_tdm_error
+hal_tdm_backend_set_master_drm_fd(hal_tdm_backend *backend, hal_tdm_fd master_drm_fd)
+{
+ hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
+ int ret;
+
+ if (!backend_data || g_hal_tdm_backend_data != backend) {
+ _E("no backend_data\n");
+ return HAL_TDM_ERROR_OPERATION_FAILED;
+ }
+
+ if (!backend_data->drm_info.master_drm_fd_func) {
+ _E("no backend_data->drm_info.auth_fd_func\n");
+ return HAL_TDM_ERROR_OPERATION_FAILED;
+ }
+
+ ret = backend_data->drm_info.master_drm_fd_func(master_drm_fd, backend_data->drm_info.user_data);
+ if (ret != HAL_TDM_ERROR_NONE) {
+ _E("backend_data->drm_info.master_drm_fd_func failed\n");
+ return ret;
+ }
+
+ return HAL_TDM_ERROR_NONE;
+}
+
EXTERN hal_tdm_event_source **
hal_tdm_backend_get_event_sources(hal_tdm_backend *backend, int *num_event_sources, hal_tdm_error *error)
{
hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
hal_tdm_event_source **event_source;
- if (!backend_data && g_hal_tdm_backend_data != backend_data) {
+ if (!backend_data || g_hal_tdm_backend_data != backend) {
_E("no backend_data\n");
if (error)
*error = HAL_TDM_ERROR_NO_MODULE;