pfuze_chip
struct pfuze_chip *pfuze100 = rdev_get_drvdata(rdev);
static int pfuze_parse_regulators_dt(struct pfuze_chip *chip)
struct pfuze_chip *syspm_pfuze_chip = data->cb_data;
static int pfuze_power_off_prepare_init(struct pfuze_chip *pfuze_chip)
if (pfuze_chip->chip_id != PFUZE100) {
dev_warn(pfuze_chip->dev, "Requested pm_power_off_prepare handler for not supported chip\n");
err = devm_register_sys_off_handler(pfuze_chip->dev,
pfuze_chip);
dev_err(pfuze_chip->dev, "failed to register sys-off handler: %d\n",
static int pfuze_identify(struct pfuze_chip *pfuze_chip)
ret = regmap_read(pfuze_chip->regmap, PFUZE100_DEVICEID, &value);
if (((value & 0x0f) == 0x8) && (pfuze_chip->chip_id == PFUZE100)) {
dev_info(pfuze_chip->dev, "Assuming misprogrammed ID=0x8");
} else if ((value & 0x0f) != pfuze_chip->chip_id &&
(value & 0xf0) >> 4 != pfuze_chip->chip_id &&
(value != pfuze_chip->chip_id)) {
dev_warn(pfuze_chip->dev, "Illegal ID: %x\n", value);
ret = regmap_read(pfuze_chip->regmap, PFUZE100_REVID, &value);
dev_info(pfuze_chip->dev,
ret = regmap_read(pfuze_chip->regmap, PFUZE100_FABID, &value);
dev_info(pfuze_chip->dev, "FAB: %x, FIN: %x\n",
struct pfuze_chip *pfuze_chip;
pfuze_chip = devm_kzalloc(&client->dev, sizeof(*pfuze_chip),
if (!pfuze_chip)
pfuze_chip->chip_id = (int)(long)match->data;
pfuze_chip->chip_id = id->driver_data;
i2c_set_clientdata(client, pfuze_chip);
pfuze_chip->dev = &client->dev;
pfuze_chip->regmap = devm_regmap_init_i2c(client, &pfuze_regmap_config);
if (IS_ERR(pfuze_chip->regmap)) {
ret = PTR_ERR(pfuze_chip->regmap);
ret = pfuze_identify(pfuze_chip);
switch (pfuze_chip->chip_id) {
pfuze_chip->pfuze_regulators = pfuze3001_regulators;
pfuze_chip->pfuze_regulators = pfuze3000_regulators;
pfuze_chip->pfuze_regulators = pfuze200_regulators;
pfuze_chip->pfuze_regulators = pfuze100_regulators;
(pfuze_chip->chip_id == PFUZE100) ? "100" :
(((pfuze_chip->chip_id == PFUZE200) ? "200" :
((pfuze_chip->chip_id == PFUZE3000) ? "3000" : "3001"))));
memcpy(pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators,
ret = pfuze_parse_regulators_dt(pfuze_chip);
desc = &pfuze_chip->regulator_descs[i].desc;
ret = regmap_read(pfuze_chip->regmap,
if (pfuze_chip->chip_id == PFUZE3000 ||
pfuze_chip->chip_id == PFUZE3001) {
if (pfuze_chip->flags & PFUZE_FLAG_DISABLE_SW) {
if (pfuze_chip->chip_id == PFUZE100 ||
pfuze_chip->chip_id == PFUZE200) {
if (pfuze_chip->regulator_descs[i].sw_reg) {
config.driver_data = pfuze_chip;
pfuze_chip->regulators[i] =
if (IS_ERR(pfuze_chip->regulators[i])) {
pfuze_chip->pfuze_regulators[i].desc.name);
return PTR_ERR(pfuze_chip->regulators[i]);
return pfuze_power_off_prepare_init(pfuze_chip);