+
+static struct {
+ const char *name;
+ enum v4l2_field field;
+} fields[] = {
+ { "any", V4L2_FIELD_ANY },
+ { "none", V4L2_FIELD_NONE },
+ { "top", V4L2_FIELD_TOP },
+ { "bottom", V4L2_FIELD_BOTTOM },
+ { "interlaced", V4L2_FIELD_INTERLACED },
+ { "seq-tb", V4L2_FIELD_SEQ_TB },
+ { "seq-bt", V4L2_FIELD_SEQ_BT },
+ { "alternate", V4L2_FIELD_ALTERNATE },
+ { "interlaced-tb", V4L2_FIELD_INTERLACED_TB },
+ { "interlaced-bt", V4L2_FIELD_INTERLACED_BT },
+};
+
+const char *v4l2_subdev_field_to_string(enum v4l2_field field)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(fields); ++i) {
+ if (fields[i].field == field)
+ return fields[i].name;
+ }
+
+ return "unknown";
+}
+
+enum v4l2_field v4l2_subdev_string_to_field(const char *string,
+ unsigned int length)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(fields); ++i) {
+ if (strncmp(fields[i].name, string, length) == 0)
+ break;
+ }
+
+ if (i == ARRAY_SIZE(fields))
+ return (enum v4l2_field)-1;
+
+ return fields[i].field;
+}