|
@@ -377,8 +377,10 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,
|
|
struct gpio_chip *chip = achip->chip;
|
|
struct gpio_chip *chip = achip->chip;
|
|
struct acpi_resource_gpio *agpio;
|
|
struct acpi_resource_gpio *agpio;
|
|
struct acpi_resource *ares;
|
|
struct acpi_resource *ares;
|
|
|
|
+ int pin_index = (int)address;
|
|
acpi_status status;
|
|
acpi_status status;
|
|
bool pull_up;
|
|
bool pull_up;
|
|
|
|
+ int length;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
status = acpi_buffer_to_resource(achip->conn_info.connection,
|
|
status = acpi_buffer_to_resource(achip->conn_info.connection,
|
|
@@ -400,7 +402,8 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address,
|
|
return AE_BAD_PARAMETER;
|
|
return AE_BAD_PARAMETER;
|
|
}
|
|
}
|
|
|
|
|
|
- for (i = 0; i < agpio->pin_table_length; i++) {
|
|
|
|
|
|
+ length = min(agpio->pin_table_length, (u16)(pin_index + bits));
|
|
|
|
+ for (i = pin_index; i < length; ++i) {
|
|
unsigned pin = agpio->pin_table[i];
|
|
unsigned pin = agpio->pin_table[i];
|
|
struct acpi_gpio_connection *conn;
|
|
struct acpi_gpio_connection *conn;
|
|
struct gpio_desc *desc;
|
|
struct gpio_desc *desc;
|