On Tue, 2014-09-23 at 17:32 +0200, Rafael J. Wysocki wrote: > On Tuesday, September 23, 2014 01:27:28 PM Mika Westerberg wrote: > > On Tue, Sep 23, 2014 at 10:35:54AM +0800, Lv Zheng wrote: > > > From: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx> > > > > > > Fix code when the operation region callback is for an gpio, which > > > is not at index 0 and for partial pins in a GPIO definition. > > > For example: > > > Name (GMOD, ResourceTemplate () > > > { > > > //3 Outputs that define the Power mode of the device > > > GpioIo (Exclusive, PullDown, , , , "\\_SB.GPI2") {10, 11, 12} > > > }) > > > } > > > > > > If opregion callback calls is for: > > > - Set pin 10, then address = 0 and bit length = 1 > > > - Set pin 11, then address = 1 and bit length = 1 > > > - Set for both pin 11 and pin 12, then address = 1, bit length = 2 > > > > > > This change requires updated ACPICA gpio operation handler code to > > > send the pin index and bit length. > > > > > > Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx> > > > Acked-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx> > > > > Adding the GPIO maintainers since we need their ACK to get this merged > > through ACPI tree. > > Actually, it would be good to say that the ACPICA change mentioned in the > changelog above is made by patch [1/2] in this series. > > Linus, Alexandre, please let us know if you need the whole series to be > resent for context. This is quite urgent, as we need that fixed in 3.18, > because there are systems out there where it doesn't work already. > > Mika, Srinivas, I suppose that we need this in -stable? Which one if so? > Yes both ACPICA patch (1/2 in this series) and this patch should be a target for stable. Thanks, Srinivas > > > --- > > > drivers/gpio/gpiolib-acpi.c | 5 ++++- > > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c > > > index d62eaaa..687476f 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, > > > struct gpio_chip *chip = achip->chip; > > > struct acpi_resource_gpio *agpio; > > > struct acpi_resource *ares; > > > + int pin_index = (int)address; > > > acpi_status status; > > > bool pull_up; > > > + int length; > > > int i; > > > > > > 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; > > > } > > > > > > - 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]; > > > struct acpi_gpio_connection *conn; > > > struct gpio_desc *desc; > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html