diff --git a/main/Android.mk b/main/Android.mk
index 3f91b19..744b6ed 100644
--- a/main/Android.mk
+++ b/main/Android.mk
@@ -14,8 +14,6 @@
 
 LOCAL_PATH:= $(call my-dir)
 
-ANDROID_HARDWARE := ANDROID_HARDWARE_generic
-
 ifneq ($(filter arm x86,$(TARGET_ARCH)),)
 
 common_cflags := \
@@ -28,7 +26,8 @@
 	-DVGPV_$(TARGET_ARCH)_linux_android=1 \
 	-DVG_PLATFORM=\"$(TARGET_ARCH)-linux\" \
 	-DVG_LIBDIR=\"/system/lib/valgrind\" \
-	-DANDROID_SYMBOLS_DIR=\"/data/local/symbols\"
+	-DANDROID_SYMBOLS_DIR=\"/data/local/symbols\" \
+	-DANDROID_HARDWARE_nexus_s
 
 common_includes := \
 	external/valgrind/main \
@@ -40,20 +39,10 @@
 
 ifeq ($(TARGET_ARCH),arm)
 tool_ldflags := -static -Wl,--build-id=none,-Ttext=0x38000000 -nodefaultlibs -nostartfiles -u _start -e_start
-
-# ioctl/syscall wrappers are device dependent
-ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),manta)
-ANDROID_HARDWARE := ANDROID_HARDWARE_nexus_10
-else ifeq ($(TARGET_BOOTLOADER_BOARD_NAME),grouper)
-ANDROID_HARDWARE := ANDROID_HARDWARE_nexus_7
-endif
-
 else
 tool_ldflags := -static -Wl,-Ttext=0x38000000 -nodefaultlibs -nostartfiles -u _start -e_start
 endif
 
-common_cflags += -D$(ANDROID_HARDWARE)
-
 preload_ldflags := -nodefaultlibs -Wl,-z,interpose,-z,initfirst
 # Remove this when the all toolchains are GCC 4.4
 ifeq ($(TARGET_ARCH),arm)
diff --git a/main/VEX/priv/guest_arm_toIR.c b/main/VEX/priv/guest_arm_toIR.c
index 3da677e..220c50f 100644
--- a/main/VEX/priv/guest_arm_toIR.c
+++ b/main/VEX/priv/guest_arm_toIR.c
@@ -18802,30 +18802,6 @@
       }
    }
 
-   /* ------------------- (T1) SMMLA{R} ------------------ */
-   if (INSN0(15,7) == BITS9(1,1,1,1,1,0,1,1,0)
-       && INSN0(6,4) == BITS3(1,0,1)
-       && INSN1(7,5) == BITS3(0,0,0)) {
-      UInt bitR = INSN1(4,4);
-      UInt rA = INSN1(15,12);
-      UInt rD = INSN1(11,8);
-      UInt rM = INSN1(3,0);
-      UInt rN = INSN0(3,0);
-      if (!isBadRegT(rD) && !isBadRegT(rN) && !isBadRegT(rM) && (rA != 13)) {
-         IRExpr* res
-         = unop(Iop_64HIto32,
-                binop(Iop_Add64,
-                      binop(Iop_Add64,
-                            binop(Iop_32HLto64, getIRegT(rA), mkU32(0)),
-                            binop(Iop_MullS32, getIRegT(rN), getIRegT(rM))),
-                      mkU64(bitR ? 0x80000000ULL : 0ULL)));
-         putIRegT(rD, res, condT);
-         DIP("smmla%s r%u, r%u, r%u, r%u\n",
-             bitR ? "r" : "", rD, rN, rM, rA);
-         goto decode_success;
-      }
-   }
-
    /* ----------------------------------------------------------- */
    /* -- VFP (CP 10, CP 11) instructions (in Thumb mode)       -- */
    /* ----------------------------------------------------------- */
diff --git a/main/coregrind/m_syswrap/syswrap-linux.c b/main/coregrind/m_syswrap/syswrap-linux.c
index 526ff0c..2f1155f 100644
--- a/main/coregrind/m_syswrap/syswrap-linux.c
+++ b/main/coregrind/m_syswrap/syswrap-linux.c
@@ -4295,18 +4295,6 @@
                     unsigned int, fd, unsigned int, request);
       return;
 
-#  if defined(ANDROID_HARDWARE_nexus_10)
-   /* undocumented ioctl ids noted on the device */
-   case 0x4d07:
-   case 0x6101:
-      return;
-#  elif defined(ANDROID_HARDWARE_nexus_7)
-   /* undocumented ioctl ids noted on the device */
-   case 0x4e04:
-   case 0x7231:
-      return;
-#  endif
-
    default:
       PRINT("sys_ioctl ( %ld, 0x%lx, 0x%lx )",ARG1,ARG2,ARG3);
       PRE_REG_READ3(long, "ioctl",
@@ -4314,18 +4302,6 @@
       break;
    }
 
-
-#  if defined(ANDROID_HARDWARE_nexus_10)
-
-   /* undocumented ioctl ids noted on the device */
-   if (ARG2 >= 0xc0108000 && ARG2 <= 0xc1e8820b && ARG3 != 0) {
-       int size = (ARG2 >> 16) & 0x3fff;
-       PRE_MEM_WRITE("ioctl(GL_UNDOCUMENTED)", (Addr)ARG3,  size);
-       return;
-   }
-
-#  endif
-
    // We now handle those that do look at ARG3 (and unknown ones fall into
    // this category).  Nb: some of these may well belong in the
    // doesn't-use-ARG3 switch above.
@@ -5529,7 +5505,6 @@
            PRE_FIELD_WRITE("ioctl(BINDER_VERSION)", bv->protocol_version);
        }
        break;
-
 #  endif /* defined(VGPV_*_linux_android) */
 
    case VKI_HCIINQUIRY:
@@ -5552,9 +5527,6 @@
    case VKI_KVM_RUN:
       break;
 
-   case VKI_EVIOCSSUSPENDBLOCK:
-      break;
-
    default:
       /* EVIOC* are variable length and return size written on success */
       switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -5662,16 +5634,6 @@
    /* END generic/emulator specific ioctls */
 
 
-#  elif defined(ANDROID_HARDWARE_nexus_10)
-
-   /* undocumented ioctl ids noted on the device */
-   if (ARG2 >= 0xc0108000 && ARG2 <= 0xc1e8820b && ARG3 != 0) {
-      int size = (ARG2 >> 16) & 0x3fff;
-      POST_MEM_WRITE(ARG3, size);
-   }
-
-#  elif defined(ANDROID_HARDWARE_nexus_7)
-
 #  else /* no ANDROID_HARDWARE_anything defined */
 
 #   warning ""
@@ -5680,8 +5642,6 @@
 #   warning "building for.  Currently known values are"
 #   warning ""
 #   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_generic       Generic device (eg, Pandaboard)"
 #   warning "   ANDROID_HARDWARE_emulator      x86 or arm emulator"
 #   warning ""
@@ -6564,10 +6524,6 @@
    case VKI_KVM_S390_INITIAL_RESET:
       break;
 
-   case VKI_EVIOCSSUSPENDBLOCK:
-      POST_MEM_WRITE( ARG3, sizeof(int) );
-      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..c18195e 100644
--- a/main/include/vki/vki-linux.h
+++ b/main/include/vki/vki-linux.h
@@ -2813,8 +2813,6 @@
 
 #define VKI_EVIOCGBIT(ev,len)	_VKI_IOC(_VKI_IOC_READ, 'E', 0x20 + ev, len)	/* get event bits */
 
-#define VKI_EVIOCSSUSPENDBLOCK	_VKI_IOW('E', 0x91, int)	/* set suspend block enable */
-
 /*
  * Event types
  */
