da9063
static int da9063_clear_fault_log(struct da9063 *da9063)
ret = regmap_read(da9063->regmap, DA9063_REG_FAULT_LOG, &fault_log);
dev_err(da9063->dev, "Cannot read FAULT_LOG.\n");
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
dev_dbg(da9063->dev,
ret = regmap_write(da9063->regmap,
dev_err(da9063->dev,
int da9063_device_init(struct da9063 *da9063, unsigned int irq)
ret = da9063_clear_fault_log(da9063);
dev_err(da9063->dev, "Cannot clear fault log\n");
da9063->flags = 0;
da9063->irq_base = -1;
da9063->chip_irq = irq;
ret = da9063_irq_init(da9063);
dev_err(da9063->dev, "Cannot initialize interrupts.\n");
da9063->irq_base = regmap_irq_chip_get_base(da9063->regmap_irq);
ret = devm_mfd_add_devices(da9063->dev, PLATFORM_DEVID_NONE,
NULL, da9063->irq_base, NULL);
dev_err(da9063->dev, "Failed to add child devices\n");
if (da9063->type == PMIC_TYPE_DA9063) {
ret = devm_mfd_add_devices(da9063->dev, PLATFORM_DEVID_NONE,
NULL, da9063->irq_base, NULL);
dev_err(da9063->dev, "Failed to add child devices\n");
static int da9063_get_device_type(struct i2c_client *i2c, struct da9063 *da9063)
dev_err(da9063->dev,
dev_info(da9063->dev,
da9063->variant_code =
struct da9063 *da9063;
da9063 = devm_kzalloc(&i2c->dev, sizeof(struct da9063), GFP_KERNEL);
if (da9063 == NULL)
i2c_set_clientdata(i2c, da9063);
da9063->dev = &i2c->dev;
da9063->chip_irq = i2c->irq;
da9063->type = id->driver_data;
ret = da9063_get_device_type(i2c, da9063);
switch (da9063->type) {
switch (da9063->variant_code) {
dev_err(da9063->dev,
switch (da9063->variant_code) {
dev_err(da9063->dev,
dev_err(da9063->dev, "Chip type not supported\n");
da9063->regmap = devm_regmap_init_i2c(i2c, &da9063_regmap_config);
if (IS_ERR(da9063->regmap)) {
ret = PTR_ERR(da9063->regmap);
dev_err(da9063->dev, "Failed to allocate register map: %d\n",
ret = regmap_clear_bits(da9063->regmap, DA9063_REG_CONFIG_J,
dev_err(da9063->dev, "Failed to set Two-Wire Bus Mode.\n");
return da9063_device_init(da9063, i2c->irq);
int da9063_irq_init(struct da9063 *da9063)
if (!da9063->chip_irq) {
dev_err(da9063->dev, "No IRQ configured\n");
if (da9063->type == PMIC_TYPE_DA9063)
ret = devm_regmap_add_irq_chip(da9063->dev, da9063->regmap,
da9063->chip_irq,
da9063->irq_base, irq_chip, &da9063->regmap_irq);
dev_err(da9063->dev, "Failed to reguest IRQ %d: %d\n",
da9063->chip_irq, ret);
da9063->regmap, regl->info->sleep);
da9063->regmap, regl->info->suspend_sleep);
da9063->regmap, regl->info->vmon);
config.regmap = da9063->regmap;
struct da9063 *hw;
struct da9063 *hw = regulators->regulator[0].hw;
struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent);
if (da9063->type == PMIC_TYPE_DA9063L)
struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent);
if (model->type == da9063->type)
da9063->type);
ret = regmap_read(da9063->regmap, DA9063_REG_CONFIG_H, &val);
regl->hw = da9063;
da9063->regmap, regl->info->mode);
da9063->regmap, regl->info->suspend);
struct da9063 *chip = dev_get_drvdata(pdev->dev.parent);
ret = da9063_wdt_update_timeout(da9063, wdd->timeout);
dev_err(da9063->dev, "Watchdog failed to start (err = %d)\n",
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
ret = da9063_wdt_disable_timer(da9063);
dev_alert(da9063->dev, "Watchdog failed to stop (err = %d)\n",
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
ret = regmap_write(da9063->regmap, DA9063_REG_CONTROL_F,
dev_alert(da9063->dev, "Failed to ping the watchdog (err = %d)\n",
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
ret = da9063_wdt_update_timeout(da9063, timeout);
dev_err(da9063->dev, "Failed to set watchdog timeout (err = %d)\n",
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
struct i2c_client *client = to_i2c_client(da9063->dev);
dev_alert(da9063->dev, "Failed to shutdown (err = %d)\n",
struct da9063 *da9063;
da9063 = dev_get_drvdata(dev->parent);
if (!da9063)
da9063->use_sw_pm = device_property_present(dev, "dlg,use-sw-pm");
watchdog_set_drvdata(wdd, da9063);
timeout = da9063_wdt_read_timeout(da9063);
da9063_wdt_update_timeout(da9063, wdd->timeout);
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
if (!da9063->use_sw_pm)
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
if (!da9063->use_sw_pm)
static unsigned int da9063_wdt_read_timeout(struct da9063 *da9063)
regmap_read(da9063->regmap, DA9063_REG_CONTROL_D, &val);
static int da9063_wdt_disable_timer(struct da9063 *da9063)
return regmap_update_bits(da9063->regmap, DA9063_REG_CONTROL_D,
da9063_wdt_update_timeout(struct da9063 *da9063, unsigned int timeout)
ret = da9063_wdt_disable_timer(da9063);
return regmap_update_bits(da9063->regmap, DA9063_REG_CONTROL_D,
struct da9063 *da9063 = watchdog_get_drvdata(wdd);
int da9063_device_init(struct da9063 *da9063, unsigned int irq);
int da9063_irq_init(struct da9063 *da9063);