Lines Matching +full:s2mpg10 +full:- +full:pmic
1 // SPDX-License-Identifier: GPL-2.0-only
12 #include <linux/firmware/samsung/exynos-acpm-protocol.h>
15 #include <linux/mfd/samsung/s2mpg10.h>
23 #include "sec-core.h"
97 regmap_reg_range(0x00, 0xf6), /* All PMIC registers */
137 .name = "pmic",
243 const struct acpm_handle *acpm = ctx->shared->acpm; in sec_pmic_acpm_bus_write()
244 const struct acpm_pmic_ops *pmic_ops = &acpm->ops.pmic_ops; in sec_pmic_acpm_bus_write()
245 size_t val_count = count - BITS_TO_BYTES(ACPM_ADDR_BITS); in sec_pmic_acpm_bus_write()
251 return -EINVAL; in sec_pmic_acpm_bus_write()
255 return pmic_ops->bulk_write(acpm, ctx->shared->acpm_chan_id, ctx->type, reg, in sec_pmic_acpm_bus_write()
256 ctx->shared->speedy_channel, val_count, vals); in sec_pmic_acpm_bus_write()
263 const struct acpm_handle *acpm = ctx->shared->acpm; in sec_pmic_acpm_bus_read()
264 const struct acpm_pmic_ops *pmic_ops = &acpm->ops.pmic_ops; in sec_pmic_acpm_bus_read()
270 return -EINVAL; in sec_pmic_acpm_bus_read()
274 return pmic_ops->bulk_read(acpm, ctx->shared->acpm_chan_id, ctx->type, reg, in sec_pmic_acpm_bus_read()
275 ctx->shared->speedy_channel, val_size, val_buf); in sec_pmic_acpm_bus_read()
282 const struct acpm_handle *acpm = ctx->shared->acpm; in sec_pmic_acpm_bus_reg_update_bits()
283 const struct acpm_pmic_ops *pmic_ops = &acpm->ops.pmic_ops; in sec_pmic_acpm_bus_reg_update_bits()
285 return pmic_ops->update_reg(acpm, ctx->shared->acpm_chan_id, ctx->type, reg & 0xff, in sec_pmic_acpm_bus_reg_update_bits()
286 ctx->shared->speedy_channel, val, mask); in sec_pmic_acpm_bus_reg_update_bits()
307 return ERR_PTR(-ENOMEM); in sec_pmic_acpm_regmap_init()
309 ctx->shared = shared_ctx; in sec_pmic_acpm_regmap_init()
310 ctx->type = type; in sec_pmic_acpm_regmap_init()
314 return dev_err_cast_probe(dev, regmap, "regmap init (%s) failed\n", cfg->name); in sec_pmic_acpm_regmap_init()
322 cfg->name); in sec_pmic_acpm_regmap_init()
339 struct device *dev = &pdev->dev; in sec_pmic_acpm_probe()
344 return dev_err_probe(dev, -ENODEV, "unsupported device type\n"); in sec_pmic_acpm_probe()
346 acpm = devm_acpm_get_by_node(dev, dev->parent->of_node); in sec_pmic_acpm_probe()
356 return -ENOMEM; in sec_pmic_acpm_probe()
358 shared_ctx->acpm = acpm; in sec_pmic_acpm_probe()
359 shared_ctx->acpm_chan_id = pdata->acpm_chan_id; in sec_pmic_acpm_probe()
360 shared_ctx->speedy_channel = pdata->speedy_channel; in sec_pmic_acpm_probe()
363 pdata->regmap_cfg_common, false); in sec_pmic_acpm_probe()
373 pdata->regmap_cfg_pmic, false); in sec_pmic_acpm_probe()
378 pdata->regmap_cfg_rtc, true); in sec_pmic_acpm_probe()
383 pdata->regmap_cfg_meter, true); in sec_pmic_acpm_probe()
387 ret = sec_pmic_probe(dev, pdata->device_type, irq, regmap_pmic, NULL); in sec_pmic_acpm_probe()
391 if (device_property_read_bool(dev, "wakeup-source")) in sec_pmic_acpm_probe()
394 /* Unmask PMIC interrupt from 'common' block, now that everything is in place. */ in sec_pmic_acpm_probe()
398 return dev_err_probe(dev, ret, "failed to unmask PMIC interrupt\n"); in sec_pmic_acpm_probe()
410 sec_pmic_shutdown(&pdev->dev); in sec_pmic_acpm_shutdown()
414 .device_type = S2MPG10,
424 { .compatible = "samsung,s2mpg10-pmic", .data = &s2mpg10_data, },
431 .name = "sec-pmic-acpm",