pandora: add tv layer selection helper
authornotaz <notasas@gmail.com>
Mon, 23 Sep 2013 21:46:25 +0000 (00:46 +0300)
committernotaz <notasas@gmail.com>
Mon, 23 Sep 2013 21:46:25 +0000 (00:46 +0300)
pandora/plat.c
plat.h

index 26ec297..fbb670c 100644 (file)
@@ -204,6 +204,41 @@ static int gamma_set(int val, int black_level)
        return do_system(buf);
 }
 
+/* For now, this only switches tv-out to appropriate fb.
+ * Maybe this could control actual layers too? */
+static int switch_layer(int which, int enable)
+{
+       static int was_ovl_enabled = -1;
+       int tv_enabled = 0;
+       char buf[128];
+       int ret;
+
+       if (which != 1)
+               return -1;
+       if (enable == was_ovl_enabled)
+               return 0;
+
+       was_ovl_enabled = -1;
+
+       tv_enabled = read_int_from_file(
+                  "/sys/devices/platform/omapdss/display1/enabled");
+       if (tv_enabled < 0)
+               return -1;
+
+       if (!tv_enabled) {
+               // tv-out not enabled
+               return 0;
+       }
+
+       snprintf(buf, sizeof(buf), "%s/op_tvout.sh -l %d",
+                pnd_script_base, enable);
+       ret = do_system(buf);
+       if (ret == 0)
+               was_ovl_enabled = enable;
+
+       return ret;
+}
+
 struct plat_target plat_target = {
        cpu_clock_get,
        cpu_clock_set,
@@ -211,6 +246,7 @@ struct plat_target plat_target = {
        hwfilter_set,
        lcdrate_set,
        gamma_set,
+       .switch_layer = switch_layer,
 };
 
 int plat_target_init(void)
diff --git a/plat.h b/plat.h
index 78dedf3..ad26595 100644 (file)
--- a/plat.h
+++ b/plat.h
@@ -16,6 +16,7 @@ struct plat_target {
        int (*lcdrate_set)(int is_pal);
        int (*gamma_set)(int val, int black_level);
        int (*step_volume)(int *volume, int diff);
+       int (*switch_layer)(int which, int enable);
        const char **vout_methods;
        int vout_method;
        int vout_fullscreen;
@@ -83,6 +84,14 @@ static __inline int plat_target_step_volume(int *volume, int diff)
        return -1;
 }
 
+/* switch device graphics layers/overlays */
+static __inline int plat_target_switch_layer(int which, int enable)
+{
+       if (plat_target.switch_layer)
+               return plat_target.switch_layer(which, enable);
+       return -1;
+}
+
 /* menu: enter (switch bpp, etc), begin/end drawing */
 void plat_video_menu_enter(int is_rom_loaded);
 void plat_video_menu_begin(void);