i2c: acpi: Introduce i2c_acpi_get_i2c_resource() helper
Besides current two users one more is coming. Definitely makes sense to introduce a helper. No functional change intended. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> Acked-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
Родитель
5f59d6a110
Коммит
0d5102fe85
|
@ -45,6 +45,33 @@ struct i2c_acpi_lookup {
|
||||||
u32 min_speed;
|
u32 min_speed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i2c_acpi_get_i2c_resource - Gets I2cSerialBus resource if type matches
|
||||||
|
* @ares: ACPI resource
|
||||||
|
* @i2c: Pointer to I2cSerialBus resource will be returned here
|
||||||
|
*
|
||||||
|
* Checks if the given ACPI resource is of type I2cSerialBus.
|
||||||
|
* In this case, returns a pointer to it to the caller.
|
||||||
|
*
|
||||||
|
* Returns true if resource type is of I2cSerialBus, otherwise false.
|
||||||
|
*/
|
||||||
|
bool i2c_acpi_get_i2c_resource(struct acpi_resource *ares,
|
||||||
|
struct acpi_resource_i2c_serialbus **i2c)
|
||||||
|
{
|
||||||
|
struct acpi_resource_i2c_serialbus *sb;
|
||||||
|
|
||||||
|
if (ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
sb = &ares->data.i2c_serial_bus;
|
||||||
|
if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*i2c = sb;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(i2c_acpi_get_i2c_resource);
|
||||||
|
|
||||||
static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data)
|
static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data)
|
||||||
{
|
{
|
||||||
struct i2c_acpi_lookup *lookup = data;
|
struct i2c_acpi_lookup *lookup = data;
|
||||||
|
@ -52,11 +79,7 @@ static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data)
|
||||||
struct acpi_resource_i2c_serialbus *sb;
|
struct acpi_resource_i2c_serialbus *sb;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
|
||||||
if (info->addr || ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
|
if (info->addr || !i2c_acpi_get_i2c_resource(ares, &sb))
|
||||||
return 1;
|
|
||||||
|
|
||||||
sb = &ares->data.i2c_serial_bus;
|
|
||||||
if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C)
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (lookup->index != -1 && lookup->n++ != lookup->index)
|
if (lookup->index != -1 && lookup->n++ != lookup->index)
|
||||||
|
@ -534,13 +557,7 @@ i2c_acpi_space_handler(u32 function, acpi_physical_address command,
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!value64 || ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS) {
|
if (!value64 || !i2c_acpi_get_i2c_resource(ares, &sb)) {
|
||||||
ret = AE_BAD_PARAMETER;
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
sb = &ares->data.i2c_serial_bus;
|
|
||||||
if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C) {
|
|
||||||
ret = AE_BAD_PARAMETER;
|
ret = AE_BAD_PARAMETER;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1054,6 +1054,17 @@ static inline int acpi_dev_gpio_irq_get(struct acpi_device *adev, int index)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_ACPI) && IS_ENABLED(CONFIG_I2C)
|
||||||
|
bool i2c_acpi_get_i2c_resource(struct acpi_resource *ares,
|
||||||
|
struct acpi_resource_i2c_serialbus **i2c);
|
||||||
|
#else
|
||||||
|
static inline bool i2c_acpi_get_i2c_resource(struct acpi_resource *ares,
|
||||||
|
struct acpi_resource_i2c_serialbus **i2c)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Device properties */
|
/* Device properties */
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
|
|
Загрузка…
Ссылка в новой задаче