mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-21 22:19:22 -05:00
mfd: adp5585: Only add devices given in FW
Not all devices (features) of the adp5585 device are mandatory to be used in all platforms. Hence, check what's given in FW and dynamically create the mfd_cell array to be given to devm_mfd_add_devices(). Signed-off-by: Nuno Sá <nuno.sa@analog.com> Link: https://lore.kernel.org/r/20250701-dev-adp5589-fw-v7-2-b1fcfe9e9826@analog.com Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
@@ -17,7 +17,13 @@
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
static const struct mfd_cell adp5585_devs[] = {
|
||||
enum {
|
||||
ADP5585_DEV_GPIO,
|
||||
ADP5585_DEV_PWM,
|
||||
ADP5585_DEV_MAX
|
||||
};
|
||||
|
||||
static const struct mfd_cell adp5585_devs[ADP5585_DEV_MAX] = {
|
||||
{ .name = "adp5585-gpio", },
|
||||
{ .name = "adp5585-pwm", },
|
||||
};
|
||||
@@ -110,6 +116,27 @@ static const struct regmap_config adp5585_regmap_configs[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static int adp5585_add_devices(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (device_property_present(dev, "#pwm-cells")) {
|
||||
ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO,
|
||||
&adp5585_devs[ADP5585_DEV_PWM], 1, NULL, 0, NULL);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Failed to add PWM device\n");
|
||||
}
|
||||
|
||||
if (device_property_present(dev, "#gpio-cells")) {
|
||||
ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO,
|
||||
&adp5585_devs[ADP5585_DEV_GPIO], 1, NULL, 0, NULL);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Failed to add GPIO device\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adp5585_i2c_probe(struct i2c_client *i2c)
|
||||
{
|
||||
const struct regmap_config *regmap_config;
|
||||
@@ -138,14 +165,7 @@ static int adp5585_i2c_probe(struct i2c_client *i2c)
|
||||
return dev_err_probe(&i2c->dev, -ENODEV,
|
||||
"Invalid device ID 0x%02x\n", id);
|
||||
|
||||
ret = devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO,
|
||||
adp5585_devs, ARRAY_SIZE(adp5585_devs),
|
||||
NULL, 0, NULL);
|
||||
if (ret)
|
||||
return dev_err_probe(&i2c->dev, ret,
|
||||
"Failed to add child devices\n");
|
||||
|
||||
return 0;
|
||||
return adp5585_add_devices(&i2c->dev);
|
||||
}
|
||||
|
||||
static int adp5585_suspend(struct device *dev)
|
||||
|
||||
Reference in New Issue
Block a user