// SPDX-License-Identifier: GPL-2.0-only /* * Core driver for TPS61050/61052 boost converters, used for while LED * driving, audio power amplification, white LED flash, and generic * boost conversion. Additionally it provides a 1-bit GPIO pin (out or in) * and a flash synchronization pin to synchronize flash events when used as * flashgun. * * Copyright (C) 2011 ST-Ericsson SA * Written on behalf of Linaro for ST-Ericsson * * Author: Linus Walleij <linus.walleij@linaro.org>
*/
staticint tps6105x_startup(struct tps6105x *tps6105x)
{ int ret; unsignedint regval;
ret = regmap_read(tps6105x->regmap, TPS6105X_REG_0, ®val); if (ret) return ret; switch (regval >> TPS6105X_REG0_MODE_SHIFT) { case TPS6105X_REG0_MODE_SHUTDOWN:
dev_info(&tps6105x->client->dev, "TPS6105x found in SHUTDOWN mode\n"); break; case TPS6105X_REG0_MODE_TORCH:
dev_info(&tps6105x->client->dev, "TPS6105x found in TORCH mode\n"); break; case TPS6105X_REG0_MODE_TORCH_FLASH:
dev_info(&tps6105x->client->dev, "TPS6105x found in FLASH mode\n"); break; case TPS6105X_REG0_MODE_VOLTAGE:
dev_info(&tps6105x->client->dev, "TPS6105x found in VOLTAGE mode\n"); break; default: break;
}
return ret;
}
/* * MFD cells - we always have a GPIO cell and we have one cell * which is selected operation mode.
*/ staticstruct mfd_cell tps6105x_gpio_cell = {
.name = "tps6105x-gpio",
};
pdata = dev_get_platdata(&client->dev); if (!pdata)
pdata = tps6105x_parse_dt(&client->dev); if (IS_ERR(pdata)) {
dev_err(&client->dev, "No platform data or DT found"); return PTR_ERR(pdata);
}
tps6105x = devm_kmalloc(&client->dev, sizeof(*tps6105x), GFP_KERNEL); if (!tps6105x) return -ENOMEM;
tps6105x->regmap = devm_regmap_init_i2c(client, &tps6105x_regmap_config); if (IS_ERR(tps6105x->regmap)) return PTR_ERR(tps6105x->regmap);
ret = tps6105x_startup(tps6105x); if (ret) {
dev_err(&client->dev, "chip initialization failed\n"); return ret;
}
ret = tps6105x_add_device(tps6105x, &tps6105x_gpio_cell); if (ret) return ret;
switch (pdata->mode) { case TPS6105X_MODE_SHUTDOWN:
dev_info(&client->dev, "present, not used for anything, only GPIO\n"); break; case TPS6105X_MODE_TORCH:
ret = tps6105x_add_device(tps6105x, &tps6105x_leds_cell); break; case TPS6105X_MODE_TORCH_FLASH:
ret = tps6105x_add_device(tps6105x, &tps6105x_flash_cell); break; case TPS6105X_MODE_VOLTAGE:
ret = tps6105x_add_device(tps6105x, &tps6105x_regulator_cell); break; default:
dev_warn(&client->dev, "invalid mode: %d\n", pdata->mode); break;
}
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.