Unify functions reading ACPI property integer values into a single macro, and call that macro to generate the functions for each bit depth. Also use size_t for the counter instead of int. Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> --- drivers/acpi/property.c | 79 +++++++++++------------------------------ 1 file changed, 20 insertions(+), 59 deletions(-) diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c index a8e8a214a524f..8449479e18442 100644 --- a/drivers/acpi/property.c +++ b/drivers/acpi/property.c @@ -910,67 +910,28 @@ static int acpi_data_prop_read_single(const struct acpi_device_data *data, return ret; } -static int acpi_copy_property_array_u8(const union acpi_object *items, u8 *val, - size_t nval) -{ - int i; - - for (i = 0; i < nval; i++) { - if (items[i].type != ACPI_TYPE_INTEGER) - return -EPROTO; - if (items[i].integer.value > U8_MAX) - return -EOVERFLOW; - - val[i] = items[i].integer.value; - } - return 0; -} - -static int acpi_copy_property_array_u16(const union acpi_object *items, - u16 *val, size_t nval) -{ - int i; - - for (i = 0; i < nval; i++) { - if (items[i].type != ACPI_TYPE_INTEGER) - return -EPROTO; - if (items[i].integer.value > U16_MAX) - return -EOVERFLOW; - - val[i] = items[i].integer.value; - } - return 0; -} - -static int acpi_copy_property_array_u32(const union acpi_object *items, - u32 *val, size_t nval) -{ - int i; - - for (i = 0; i < nval; i++) { - if (items[i].type != ACPI_TYPE_INTEGER) - return -EPROTO; - if (items[i].integer.value > U32_MAX) - return -EOVERFLOW; - - val[i] = items[i].integer.value; +#define DECLARE_ACPI_PROPERTY_COPY(bits) \ + static int \ + acpi_copy_property_array_u##bits(const union acpi_object *items, \ + u##bits *val, size_t nval) \ + { \ + size_t i; \ + \ + for (i = 0; i < nval; i++) { \ + if (items[i].type != ACPI_TYPE_INTEGER) \ + return -EPROTO; \ + if (items[i].integer.value > U##bits##_MAX) \ + return -EOVERFLOW; \ + \ + val[i] = items[i].integer.value; \ + } \ + return 0; \ } - return 0; -} -static int acpi_copy_property_array_u64(const union acpi_object *items, - u64 *val, size_t nval) -{ - int i; - - for (i = 0; i < nval; i++) { - if (items[i].type != ACPI_TYPE_INTEGER) - return -EPROTO; - - val[i] = items[i].integer.value; - } - return 0; -} +DECLARE_ACPI_PROPERTY_COPY(8) +DECLARE_ACPI_PROPERTY_COPY(16) +DECLARE_ACPI_PROPERTY_COPY(32) +DECLARE_ACPI_PROPERTY_COPY(64) static int acpi_copy_property_array_string(const union acpi_object *items, char **val, size_t nval) -- 2.30.2