#include <acpi/acpi.h>
 #include "accommon.h"
 #include "acnamesp.h"
+#include "acinterp.h"
 #include "acpredef.h"
 
 #define _COMPONENT          ACPI_NAMESPACE
        union acpi_operand_object *return_object = *return_object_ptr;
        union acpi_operand_object *new_object;
        acpi_size length;
+       acpi_status status;
 
        /*
         * At this point, we know that the type of the returned object was not
 
        case ACPI_TYPE_INTEGER:
 
-               /* Does the method/object legally return a string? */
+               /* 1) Does the method/object legally return a buffer? */
+
+               if (expected_btypes & ACPI_RTYPE_BUFFER) {
+                       /*
+                        * Convert the Integer to a packed-byte buffer. _MAT needs
+                        * this sometimes, if a read has been performed on a Field
+                        * object that is less than or equal to the global integer
+                        * size (32 or 64 bits).
+                        */
+                       status =
+                           acpi_ex_convert_to_buffer(return_object,
+                                                     &new_object);
+                       if (ACPI_FAILURE(status)) {
+                               return (status);
+                       }
+               }
+
+               /* 2) Does the method/object legally return a string? */
 
-               if (expected_btypes & ACPI_RTYPE_STRING) {
+               else if (expected_btypes & ACPI_RTYPE_STRING) {
                        /*
                         * The only supported Integer-to-String conversion is to convert
                         * an integer of value 0 to a NULL string. The last element of