Skip to content

Commit 71102bc

Browse files
committed
platform/x86: int3472: Add get_sensor_adev_and_name() helper
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. Reviewed-by: Andy Shevchenko <[email protected]> Signed-off-by: Hans de Goede <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent a2f9fbc commit 71102bc

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

drivers/platform/x86/intel/int3472/common.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,31 @@ int skl_int3472_fill_cldb(struct acpi_device *adev, struct int3472_cldb *cldb)
5252
kfree(obj);
5353
return ret;
5454
}
55+
56+
/* sensor_adev_ret may be NULL, name_ret must not be NULL */
57+
int skl_int3472_get_sensor_adev_and_name(struct device *dev,
58+
struct acpi_device **sensor_adev_ret,
59+
const char **name_ret)
60+
{
61+
struct acpi_device *adev = ACPI_COMPANION(dev);
62+
struct acpi_device *sensor;
63+
int ret = 0;
64+
65+
sensor = acpi_dev_get_first_consumer_dev(adev);
66+
if (!sensor) {
67+
dev_err(dev, "INT3472 seems to have no dependents.\n");
68+
return -ENODEV;
69+
}
70+
71+
*name_ret = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT,
72+
acpi_dev_name(sensor));
73+
if (!*name_ret)
74+
ret = -ENOMEM;
75+
76+
if (ret == 0 && sensor_adev_ret)
77+
*sensor_adev_ret = sensor;
78+
else
79+
acpi_dev_put(sensor);
80+
81+
return ret;
82+
}

drivers/platform/x86/intel/int3472/common.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ struct int3472_discrete_device {
108108
union acpi_object *skl_int3472_get_acpi_buffer(struct acpi_device *adev,
109109
char *id);
110110
int skl_int3472_fill_cldb(struct acpi_device *adev, struct int3472_cldb *cldb);
111+
int skl_int3472_get_sensor_adev_and_name(struct device *dev,
112+
struct acpi_device **sensor_adev_ret,
113+
const char **name_ret);
111114

112115
int skl_int3472_register_clock(struct int3472_discrete_device *int3472);
113116
void skl_int3472_unregister_clock(struct int3472_discrete_device *int3472);

drivers/platform/x86/intel/int3472/discrete.c

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -363,19 +363,10 @@ static int skl_int3472_discrete_probe(struct platform_device *pdev)
363363
int3472->dev = &pdev->dev;
364364
platform_set_drvdata(pdev, int3472);
365365

366-
int3472->sensor = acpi_dev_get_first_consumer_dev(adev);
367-
if (!int3472->sensor) {
368-
dev_err(&pdev->dev, "INT3472 seems to have no dependents.\n");
369-
return -ENODEV;
370-
}
371-
372-
int3472->sensor_name = devm_kasprintf(int3472->dev, GFP_KERNEL,
373-
I2C_DEV_NAME_FORMAT,
374-
acpi_dev_name(int3472->sensor));
375-
if (!int3472->sensor_name) {
376-
ret = -ENOMEM;
377-
goto err_put_sensor;
378-
}
366+
ret = skl_int3472_get_sensor_adev_and_name(&pdev->dev, &int3472->sensor,
367+
&int3472->sensor_name);
368+
if (ret)
369+
return ret;
379370

380371
/*
381372
* Initialising this list means we can call gpiod_remove_lookup_table()
@@ -390,11 +381,6 @@ static int skl_int3472_discrete_probe(struct platform_device *pdev)
390381
}
391382

392383
return 0;
393-
394-
err_put_sensor:
395-
acpi_dev_put(int3472->sensor);
396-
397-
return ret;
398384
}
399385

400386
static int skl_int3472_discrete_remove(struct platform_device *pdev)

0 commit comments

Comments
 (0)