/* Generated by ./xlat/gen.sh from ./xlat/v4l2_control_types.in; do not edit. */

#ifdef IN_MPERS

extern const struct xlat v4l2_control_types[];

#else

# if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
# endif
const struct xlat v4l2_control_types[] = {
#if defined(V4L2_CTRL_TYPE_INTEGER) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_INTEGER) && HAVE_DECL_V4L2_CTRL_TYPE_INTEGER)
  XLAT(V4L2_CTRL_TYPE_INTEGER),
#endif
#if defined(V4L2_CTRL_TYPE_BOOLEAN) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_BOOLEAN) && HAVE_DECL_V4L2_CTRL_TYPE_BOOLEAN)
  XLAT(V4L2_CTRL_TYPE_BOOLEAN),
#endif
#if defined(V4L2_CTRL_TYPE_MENU) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_MENU) && HAVE_DECL_V4L2_CTRL_TYPE_MENU)
  XLAT(V4L2_CTRL_TYPE_MENU),
#endif
#if defined(V4L2_CTRL_TYPE_INTEGER_MENU) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_INTEGER_MENU) && HAVE_DECL_V4L2_CTRL_TYPE_INTEGER_MENU)
  XLAT(V4L2_CTRL_TYPE_INTEGER_MENU),
#endif
#if defined(V4L2_CTRL_TYPE_BITMASK) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_BITMASK) && HAVE_DECL_V4L2_CTRL_TYPE_BITMASK)
  XLAT(V4L2_CTRL_TYPE_BITMASK),
#endif
#if defined(V4L2_CTRL_TYPE_BUTTON) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_BUTTON) && HAVE_DECL_V4L2_CTRL_TYPE_BUTTON)
  XLAT(V4L2_CTRL_TYPE_BUTTON),
#endif
#if defined(V4L2_CTRL_TYPE_INTEGER64) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_INTEGER64) && HAVE_DECL_V4L2_CTRL_TYPE_INTEGER64)
  XLAT(V4L2_CTRL_TYPE_INTEGER64),
#endif
#if defined(V4L2_CTRL_TYPE_STRING) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_STRING) && HAVE_DECL_V4L2_CTRL_TYPE_STRING)
  XLAT(V4L2_CTRL_TYPE_STRING),
#endif
#if defined(V4L2_CTRL_TYPE_CTRL_CLASS) || (defined(HAVE_DECL_V4L2_CTRL_TYPE_CTRL_CLASS) && HAVE_DECL_V4L2_CTRL_TYPE_CTRL_CLASS)
  XLAT(V4L2_CTRL_TYPE_CTRL_CLASS),
#endif
 XLAT_END
};

#endif /* !IN_MPERS */
