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> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Link: https://lore.kernel.org/r/20220121172431.6876-5-sbinding@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
87e59b36e5
commit
e612af7ace
@ -2324,6 +2324,46 @@ struct acpi_spi_lookup {
|
|||||||
int index;
|
int 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,
|
static void acpi_spi_parse_apple_properties(struct acpi_device *dev,
|
||||||
struct acpi_spi_lookup *lookup)
|
struct acpi_spi_lookup *lookup)
|
||||||
{
|
{
|
||||||
|
@ -764,6 +764,7 @@ extern void spi_unregister_controller(struct spi_controller *ctlr);
|
|||||||
extern struct spi_device *acpi_spi_device_alloc(struct spi_controller *ctlr,
|
extern struct spi_device *acpi_spi_device_alloc(struct spi_controller *ctlr,
|
||||||
struct acpi_device *adev,
|
struct acpi_device *adev,
|
||||||
int index);
|
int index);
|
||||||
|
int acpi_spi_count_resources(struct acpi_device *adev);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user