diff options
Diffstat (limited to 'recipes/ti/ti-dmai/beagle/0002-DMAI-Auto-detect-V4L2-display-device-node-to-open.patch')
-rw-r--r-- | recipes/ti/ti-dmai/beagle/0002-DMAI-Auto-detect-V4L2-display-device-node-to-open.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/recipes/ti/ti-dmai/beagle/0002-DMAI-Auto-detect-V4L2-display-device-node-to-open.patch b/recipes/ti/ti-dmai/beagle/0002-DMAI-Auto-detect-V4L2-display-device-node-to-open.patch new file mode 100644 index 0000000000..77882f4a25 --- /dev/null +++ b/recipes/ti/ti-dmai/beagle/0002-DMAI-Auto-detect-V4L2-display-device-node-to-open.patch @@ -0,0 +1,109 @@ +From 39d909ea1040b86968adf0d62475955bd07f96a8 Mon Sep 17 00:00:00 2001 +From: Joel A Fernandes <agnel.joel@gmail.com> +Date: Tue, 21 Jun 2011 15:33:14 -0500 +Subject: [PATCH 2/4] DMAI: Auto-detect V4L2 display device node to open. + +Changes in display device node names in the kernel break DMAI. +This autodetects the device node name to avoid such breakages in the future. + +Signed-off-by: Joel A Fernandes <agnel.joel@gmail.com> +--- + linux/Display.c | 2 +- + linux/omap3530/Display_v4l2.c | 40 ++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 41 insertions(+), 1 deletions(-) + +diff --git a/packages/ti/sdo/dmai/linux/Display.c b/packages/ti/sdo/dmai/linux/Display.c +index bf0db2e..578ab8a 100644 +--- a/packages/ti/sdo/dmai/linux/Display.c ++++ b/packages/ti/sdo/dmai/linux/Display.c +@@ -197,7 +197,7 @@ const Display_Attrs Display_Attrs_O3530_VID_DEFAULT = { + Display_Std_V4L2, + VideoStd_VGA, + Display_Output_LCD, +- "/dev/video1", ++ "", // V4L2 device nodes are auto detected + 0, + ColorSpace_UYVY, + -1, +diff --git a/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c b/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c +index 8cd891c..61f15bb 100644 +--- a/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c ++++ b/packages/ti/sdo/dmai/linux/omap3530/Display_v4l2.c +@@ -35,6 +35,7 @@ + #include <string.h> + #include <unistd.h> + #include <fcntl.h> ++#include <dirent.h> + #include <sys/ioctl.h> + #include <sys/mman.h> + #include <errno.h> +@@ -55,6 +56,7 @@ + #include "priv/_SysFs.h" + + #define MODULE_NAME "Display" ++#define V4LVOUT_DIR "/sys/devices/platform/omap_vout/video4linux" + + /****************************************************************************** + * cleanup +@@ -134,6 +136,7 @@ Display_Handle Display_v4l2_create(BufTab_Handle hBufTab, Display_Attrs *attrs) + #if defined(V4L2_CID_ROTATE) + struct v4l2_control control; + #endif ++ char displayDevName[20]; + assert(attrs); + + /* Allocate space for state object */ +@@ -152,6 +155,13 @@ Display_Handle Display_v4l2_create(BufTab_Handle hBufTab, Display_Attrs *attrs) + } + hDisplay->userAlloc = TRUE; + ++ /* Get video capture device */ ++ if(Display_v4l2_getdevice(displayDevName) < 0) { ++ Dmai_err0("Failed to get V4L2 display device node.\n"); ++ return NULL; ++ } ++ attrs->displayDevice = displayDevName; ++ + /* Open video capture device */ + hDisplay->fd = open(attrs->displayDevice, O_RDWR, 0); + +@@ -319,6 +329,36 @@ Int Display_v4l2_delete(Display_Handle hDisplay) + } + + /****************************************************************************** ++ * Display_v4l2_getdevice ++ ******************************************************************************/ ++Int Display_v4l2_getdevice(char displayDevice[20]) ++{ ++ DIR *dp; ++ struct dirent *ep; ++ dp = opendir (V4LVOUT_DIR); ++ displayDevice[0] = '\0'; ++ strcat(displayDevice, "/dev/"); ++ if (dp != NULL) { ++ while(ep = readdir (dp)) { ++ if(ep->d_name[0] == '.') continue; ++ Dmai_dbg1("V4L Video node found: '%s'\n", ep->d_name); ++ if(strlen(ep->d_name) > 19 - strlen(displayDevice)) { ++ ep = NULL; ++ break; ++ } ++ strcat(displayDevice, ep->d_name); ++ closedir (dp); ++ break; ++ } ++ } ++ if(!dp || !ep) { ++ Dmai_err0("Could not open the directory\n"); ++ return -1; ++ } ++ return 0; ++} ++ ++/****************************************************************************** + * Display_v4l2_get + ******************************************************************************/ + Int Display_v4l2_get(Display_Handle hDisplay, Buffer_Handle *hBufPtr) +-- +1.7.0.4 + |