diff options
| -rw-r--r-- | drivers/gpio/gpiolib-acpi.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c index d62eaaa75397..687476fb39e3 100644 --- a/drivers/gpio/gpiolib-acpi.c +++ b/drivers/gpio/gpiolib-acpi.c | |||
| @@ -377,8 +377,10 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address, | |||
| 377 | struct gpio_chip *chip = achip->chip; | 377 | struct gpio_chip *chip = achip->chip; |
| 378 | struct acpi_resource_gpio *agpio; | 378 | struct acpi_resource_gpio *agpio; |
| 379 | struct acpi_resource *ares; | 379 | struct acpi_resource *ares; |
| 380 | int pin_index = (int)address; | ||
| 380 | acpi_status status; | 381 | acpi_status status; |
| 381 | bool pull_up; | 382 | bool pull_up; |
| 383 | int length; | ||
| 382 | int i; | 384 | int i; |
| 383 | 385 | ||
| 384 | status = acpi_buffer_to_resource(achip->conn_info.connection, | 386 | status = acpi_buffer_to_resource(achip->conn_info.connection, |
| @@ -400,7 +402,8 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address, | |||
| 400 | return AE_BAD_PARAMETER; | 402 | return AE_BAD_PARAMETER; |
| 401 | } | 403 | } |
| 402 | 404 | ||
| 403 | for (i = 0; i < agpio->pin_table_length; i++) { | 405 | length = min(agpio->pin_table_length, (u16)(pin_index + bits)); |
| 406 | for (i = pin_index; i < length; ++i) { | ||
| 404 | unsigned pin = agpio->pin_table[i]; | 407 | unsigned pin = agpio->pin_table[i]; |
| 405 | struct acpi_gpio_connection *conn; | 408 | struct acpi_gpio_connection *conn; |
| 406 | struct gpio_desc *desc; | 409 | struct gpio_desc *desc; |
