Skip to content
Permalink
Browse files
spi: Add API to count spi acpi resources
Some ACPI nodes may have more than one Spi Resource.
To be able to handle these case, its necessary to have
a way of counting these resources.

Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com>
  • Loading branch information
Stefan Binding authored and intel-lab-lkp committed Jan 20, 2022
1 parent eb9efac commit 684295c62acdefb3fab20a0e7633793ba748c6d7
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
@@ -2325,6 +2325,46 @@ struct acpi_spi_lookup {
int irq_index;
};

static int acpi_spi_count(struct acpi_resource *ares, void *data)
{
struct acpi_resource_spi_serialbus *sb;
int *count = data;

if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
return 1;

sb = &ares->data.spi_serial_bus;
if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_SPI)
return 1;

*count = *count + 1;

return 1;
}

/**
* acpi_spi_count_resources - Count the number of SpiSerialBus resources
* @adev: ACPI device
*
* Returns the number of SpiSerialBus resources in the ACPI-device's
* resource-list; or a negative error code.
*/
int acpi_spi_count_resources(struct acpi_device *adev)
{
LIST_HEAD(r);
int count = 0;
int ret;

ret = acpi_dev_get_resources(adev, &r, acpi_spi_count, &count);
if (ret < 0)
return ret;

acpi_dev_free_resource_list(&r);

return count;
}
EXPORT_SYMBOL_GPL(acpi_spi_count_resources);

static void acpi_spi_parse_apple_properties(struct acpi_device *dev,
struct acpi_spi_lookup *lookup)
{
@@ -764,13 +764,19 @@ extern void spi_unregister_controller(struct spi_controller *ctlr);
extern struct spi_device *acpi_spi_device_alloc(struct spi_controller *ctlr,
struct acpi_device *adev,
int index, int irq_index);
int acpi_spi_count_resources(struct acpi_device *adev);
#else
static inline struct spi_device *acpi_spi_device_alloc(struct spi_controller *ctlr,
struct acpi_device *adev,
int index, int irq_index);
{
return ERR_PTR(-EOPNOTSUPP);
}

int acpi_spi_count_resources(struct acpi_device *adev)
{
return -EOPNOTSUPP;
}
#endif

/*

0 comments on commit 684295c

Please sign in to comment.