update output when udev event occured 37/70737/2
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 20 May 2016 08:43:25 +0000 (17:43 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Mon, 23 May 2016 00:29:08 +0000 (09:29 +0900)
Change-Id: I7a85d3d9ad52f9914d68a66cf4b5537b349db7dc
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/tdm.c
src/tdm_display.c
src/tdm_private.h

index f073d21..a3d0137 100644 (file)
--- a/src/tdm.c
+++ b/src/tdm.c
@@ -402,8 +402,8 @@ failed_update:
        return ret;
 }
 
-static tdm_error
-_tdm_display_update_output(tdm_private_display *private_display,
+INTERN tdm_error
+tdm_display_update_output(tdm_private_display *private_display,
                            tdm_output *output_backend, int pipe)
 {
        tdm_func_output *func_output = &private_display->func_output;
@@ -436,10 +436,12 @@ _tdm_display_update_output(tdm_private_display *private_display,
                LIST_INITHEAD(&private_output->change_handler_list_main);
                LIST_INITHEAD(&private_output->change_handler_list_sub);
 
-               if (func_output->output_set_status_handler)
+               if (func_output->output_set_status_handler) {
                        func_output->output_set_status_handler(private_output->output_backend,
                                                               tdm_output_cb_status,
                                                               private_output);
+                       private_output->regist_change_cb = 1;
+               }
 
        } else
                _tdm_display_destroy_caps_output(&private_output->caps);
@@ -625,7 +627,7 @@ _tdm_display_update_internal(tdm_private_display *private_display,
                goto failed_update;
 
        for (i = 0; i < output_count; i++) {
-               ret = _tdm_display_update_output(private_display, outputs[i], i);
+               ret = tdm_display_update_output(private_display, outputs[i], i);
                if (ret != TDM_ERROR_NONE)
                        goto failed_update;
        }
index b61bed5..0148871 100644 (file)
@@ -488,6 +488,21 @@ tdm_output_get_conn_status(tdm_output *output, tdm_output_conn_status *status)
        return ret;
 }
 
+static void
+_tdm_output_update(tdm_output *output_backend, void *user_data)
+{
+       tdm_private_display *private_display;
+       tdm_private_output *private_output = user_data;
+       tdm_error ret;
+
+       TDM_RETURN_IF_FAIL(private_output);
+
+       private_display = private_output->private_display;
+
+       ret = tdm_display_update_output(private_display, output_backend, private_output->pipe);
+       TDM_RETURN_IF_FAIL(ret == TDM_ERROR_NONE);
+}
+
 INTERN void
 tdm_output_cb_status(tdm_output *output_backend, tdm_output_conn_status status,
                      void *user_data)
@@ -505,6 +520,8 @@ tdm_output_cb_status(tdm_output *output_backend, tdm_output_conn_status status,
                tdm_thread_cb_output_status output_status;
                tdm_error ret;
 
+               _tdm_output_update(output_backend, user_data);
+
                output_status.base.type = TDM_THREAD_CB_OUTPUT_STATUS;
                output_status.base.length = sizeof output_status;
                output_status.output_stamp = private_output->stamp;
@@ -523,6 +540,9 @@ tdm_output_cb_status(tdm_output *output_backend, tdm_output_conn_status status,
                return;
        }
 
+       if (!tdm_thread_is_running())
+               _tdm_output_update(output_backend, user_data);
+
        value.u32 = status;
        tdm_output_call_change_handler_internal(private_output,
                                                &private_output->change_handler_list_main,
index 65ce287..a4a88f5 100644 (file)
@@ -513,6 +513,10 @@ _tdm_display_unlock(tdm_display *dpy, const char *func);
 #define tdm_display_lock(dpy)   _tdm_display_lock(dpy, __FUNCTION__)
 #define tdm_display_unlock(dpy)   _tdm_display_unlock(dpy, __FUNCTION__)
 
+tdm_error
+tdm_display_update_output(tdm_private_display *private_display,
+                          tdm_output *output_backend, int pipe);
+
 #ifdef __cplusplus
 }
 #endif