ACPI / property: Allow holes in reference properties
authorMika Westerberg <mika.westerberg@linux.intel.com>
Thu, 29 Sep 2016 13:39:41 +0000 (16:39 +0300)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 11 Oct 2016 20:44:00 +0000 (22:44 +0200)
commitb60e4ea4a400bde8a4811f94b84a9bb65f81b677
treec280735891b88f947481dab0df0e4607ff253d48
parent20a875e2e86e73d13ec256781a7d55a7885868ec
ACPI / property: Allow holes in reference properties

DT allows holes or empty phandles for references. This is used for example
in SPI subsystem where some chip selects are native and others are regular
GPIOs. In ACPI _DSD we currently do not support this but instead the
preceding reference consumes all following integer arguments.

For example we would like to support something like the below ASL fragment
for SPI:

  Package () {
      "cs-gpios",
      Package () {
          ^GPIO, 19, 0, 0, // GPIO CS0
          0,               // Native CS
          ^GPIO, 20, 0, 0, // GPIO CS1
      }
  }

The zero in the middle means "no entry" or NULL reference. To support this
we change acpi_data_get_property_reference() to take firmware node and
num_args as argument and rename it to __acpi_node_get_property_reference().
The function returns -ENOENT if the given index resolves to "no entry"
reference and -ENODATA when there are no more entries in the property.

We then add static inline wrapper acpi_node_get_property_reference() that
passes MAX_ACPI_REFERENCE_ARGS as num_args to support the existing
behaviour which some drivers have been relying on.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/property.c
include/linux/acpi.h