Re: [PATCH 2/2] gpio / ACPI: Use pin index and bit length

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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?

> > ---
> >  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

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
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




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux