Hi, On 10/25/21 13:31, Andy Shevchenko wrote: > On Mon, Oct 25, 2021 at 12:42 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: >> >> The discrete.c code is not the only code which needs to lookup the >> acpi_device and device-name for the sensor for which the INT3472 >> ACPI-device is a GPIO/clk/regulator provider. >> >> The tps68470.c code also needs this functionality, so factor this >> out into a new get_sensor_adev_and_name() helper. > > ... > >> +int skl_int3472_get_sensor_adev_and_name(struct device *dev, >> + struct acpi_device **sensor_adev_ret, >> + const char **name_ret) >> +{ >> + struct acpi_device *adev = ACPI_COMPANION(dev); >> + struct acpi_device *sensor; >> + int ret = 0; >> + >> + sensor = acpi_dev_get_first_consumer_dev(adev); >> + if (!sensor) { >> + dev_err(dev, "INT3472 seems to have no dependents.\n"); >> + return -ENODEV; >> + } >> + >> + *name_ret = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT, >> + acpi_dev_name(sensor)); >> + if (!*name_ret) >> + ret = -ENOMEM; >> + >> + if (ret == 0 && sensor_adev_ret) >> + *sensor_adev_ret = sensor; >> + else >> + acpi_dev_put(sensor); >> + >> + return ret; > > The error path is twisted a bit including far staying ret=0 assignment. > > Can it be > > int ret; > ... > *name_ret = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT, > acpi_dev_name(sensor)); > if (!*name_ret) { > acpi_dev_put(sensor); > return -ENOMEM; > } > > if (sensor_adev_ret) > *sensor_adev_ret = sensor; > > return 0; > > ? That misses an acpi_dev_put(sensor) when sensor_adev_ret == NULL. Regards, Hans