Add missing ioctl used by N4 camera.

Change-Id: I9604881edc7e5266e5903fe8c655d51ccc4c5832
diff --git a/main/Android.mk b/main/Android.mk
index 08db43c..8ac1d80 100644
--- a/main/Android.mk
+++ b/main/Android.mk
@@ -46,6 +46,8 @@
 ANDROID_HARDWARE := ANDROID_HARDWARE_nexus_10
 else ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),grouper)
 ANDROID_HARDWARE := ANDROID_HARDWARE_nexus_7
+else ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),MAKO)
+ANDROID_HARDWARE := ANDROID_HARDWARE_nexus_4
 endif
 
 else
diff --git a/main/coregrind/m_syswrap/syswrap-linux.c b/main/coregrind/m_syswrap/syswrap-linux.c
index 7c4a790..8e2ec0f 100644
--- a/main/coregrind/m_syswrap/syswrap-linux.c
+++ b/main/coregrind/m_syswrap/syswrap-linux.c
@@ -4308,6 +4308,8 @@
    case 0x7231:
    case 0x4004e901: /* used by NFC */
       return;
+#  elif defined(ANDROID_HARDWARE_nexus_4)
+
 #  endif
 
    default:
@@ -5558,6 +5560,13 @@
    case VKI_EVIOCSSUSPENDBLOCK:
       break;
 
+   case VKI_MEDIA_IOC_DEVICE_INFO:
+      if (ARG3) {
+         PRE_MEM_WRITE("ioctl(MEDIA_IOC_DEVICE_INFO)", ARG3,
+                       sizeof(struct vki_media_device_info));
+      }
+      break;
+
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -5675,6 +5684,8 @@
 
 #  elif defined(ANDROID_HARDWARE_nexus_7)
 
+#  elif defined(ANDROID_HARDWARE_nexus_4)
+
 #  else /* no ANDROID_HARDWARE_anything defined */
 
 #   warning ""
@@ -5685,6 +5696,7 @@
 #   warning "   ANDROID_HARDWARE_nexus_s       Samsung Nexus S"
 #   warning "   ANDROID_HARDWARE_nexus_10      Samsung Nexus 10"
 #   warning "   ANDROID_HARDWARE_nexus_7       ASUS Nexus 7"
+#   warning "   ANDROID_HARDWARE_nexus_4       LG Nexus 4"
 #   warning "   ANDROID_HARDWARE_generic       Generic device (eg, Pandaboard)"
 #   warning "   ANDROID_HARDWARE_emulator      x86 or arm emulator"
 #   warning ""
@@ -6571,6 +6583,12 @@
       POST_MEM_WRITE( ARG3, sizeof(int) );
       break;
 
+   case VKI_MEDIA_IOC_DEVICE_INFO:
+      if (ARG3) {
+         POST_MEM_WRITE(ARG3, sizeof(struct vki_media_device_info));
+      }
+      break;
+
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
diff --git a/main/include/vki/vki-linux.h b/main/include/vki/vki-linux.h
index 8cefd8f..214a626 100644
--- a/main/include/vki/vki-linux.h
+++ b/main/include/vki/vki-linux.h
@@ -3011,6 +3011,23 @@
 #define VKI_UI_SET_SWBIT		_VKI_IOW(VKI_UINPUT_IOCTL_BASE, 109, int)
 #define VKI_UI_SET_PROPBIT		_VKI_IOW(VKI_UINPUT_IOCTL_BASE, 110, int)
 
+//----------------------------------------------------------------------
+// From include/linux/media.h
+//----------------------------------------------------------------------
+
+struct vki_media_device_info {
+    char driver[16];
+    char model[32];
+    char serial[40];
+    char bus_info[32];
+    __vki_u32 media_version;
+    __vki_u32 hw_revision;
+    __vki_u32 driver_version;
+    __vki_u32 reserved[31];
+};
+
+#define VKI_MEDIA_IOC_DEVICE_INFO _VKI_IOWR('|', 0x00, struct vki_media_device_info)
+
 #endif // __VKI_LINUX_H
 
 /*--------------------------------------------------------------------*/