iio: acpi: Add iio_get_acpi_device_name_and_data() helper function

A few drivers duplicate the code to retrieve ACPI device instance name.
Some of them want an associated driver data as well.

In order of deduplication introduce the common helper functions.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://patch.msgid.link/20241024191200.229894-6-andriy.shevchenko@linux.intel.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
Andy Shevchenko 2024-10-24 22:04:54 +03:00 committed by Jonathan Cameron
parent d411e5b5aa
commit dc60de4eb0
2 changed files with 47 additions and 1 deletions

View File

@ -2,7 +2,8 @@
/* IIO ACPI helper functions */
#include <linux/acpi.h>
#include <linux/dev_printk.h>
#include <linux/device.h>
#include <linux/export.h>
#include <linux/iio/iio.h>
#include <linux/sprintf.h>
@ -87,3 +88,38 @@ bool iio_read_acpi_mount_matrix(struct device *dev,
return ret;
}
EXPORT_SYMBOL_GPL(iio_read_acpi_mount_matrix);
/**
* iio_get_acpi_device_name_and_data() - Return ACPI device instance name and driver data
* @dev: Device structure
* @data: Optional pointer to return driver data
*
* When device was enumerated by ACPI ID matching, the user might
* want to set description for the physical chip. In such cases
* the ACPI device instance name might be used. This call may be
* performed to retrieve this information.
*
* NOTE: This helper function exists only for backward compatibility,
* do not use in a new code!
*
* Returns: ACPI device instance name or %NULL.
*/
const char *iio_get_acpi_device_name_and_data(struct device *dev, const void **data)
{
const struct acpi_device_id *id;
acpi_handle handle;
handle = ACPI_HANDLE(dev);
if (!handle)
return NULL;
id = acpi_match_device(dev->driver->acpi_match_table, dev);
if (!id)
return NULL;
if (data)
*data = (const void *)id->driver_data;
return dev_name(dev);
}
EXPORT_SYMBOL_GPL(iio_get_acpi_device_name_and_data);

View File

@ -831,6 +831,7 @@ int iio_device_resume_triggering(struct iio_dev *indio_dev);
bool iio_read_acpi_mount_matrix(struct device *dev,
struct iio_mount_matrix *orientation,
char *acpi_method);
const char *iio_get_acpi_device_name_and_data(struct device *dev, const void **data);
#else
static inline bool iio_read_acpi_mount_matrix(struct device *dev,
struct iio_mount_matrix *orientation,
@ -838,7 +839,16 @@ static inline bool iio_read_acpi_mount_matrix(struct device *dev,
{
return false;
}
static inline const char *
iio_get_acpi_device_name_and_data(struct device *dev, const void **data)
{
return NULL;
}
#endif
static inline const char *iio_get_acpi_device_name(struct device *dev)
{
return iio_get_acpi_device_name_and_data(dev, NULL);
}
/**
* iio_get_current_scan_type - Get the current scan type for a channel