priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM;
priv->dev = &i2c->dev; /* bootloader will on, driver only reconfigure enable to all output high */
priv->enable_flag = DSVALL_ENABLE;
regmap = devm_regmap_init_i2c(i2c, &rt4801_regmap_config); if (IS_ERR(regmap)) {
dev_err(&i2c->dev, "Failed to init regmap\n"); return PTR_ERR(regmap);
}
for (i = 0; i < DSV_OUT_MAX; i++) {
priv->enable_gpios[i] = devm_gpiod_get_index_optional(&i2c->dev, "enable",
i,
GPIOD_OUT_HIGH); if (IS_ERR(priv->enable_gpios[i])) {
dev_err(&i2c->dev, "Failed to get gpios\n"); return PTR_ERR(priv->enable_gpios[i]);
}
}
for (i = 0; i < DSV_OUT_MAX; i++) { conststruct regulator_desc *desc = rt4801_regulator_descs + i; struct regulator_config config = { .dev = &i2c->dev, .driver_data = priv,
.regmap = regmap, }; struct regulator_dev *rdev; unsignedint val; int ret;
/* initialize volt_sel variable */
ret = regmap_read(regmap, desc->vsel_reg, &val); if (ret) return ret;
priv->volt_sel[i] = val & desc->vsel_mask;
rdev = devm_regulator_register(&i2c->dev, desc, &config); if (IS_ERR(rdev)) {
dev_err(&i2c->dev, "Failed to register [%d] regulator\n", i); return PTR_ERR(rdev);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.