135d460fbSPrzemyslaw Marczak /*
235d460fbSPrzemyslaw Marczak * Copyright (C) 2015 Samsung Electronics
335d460fbSPrzemyslaw Marczak * Przemyslaw Marczak <p.marczak@samsung.com>
435d460fbSPrzemyslaw Marczak *
535d460fbSPrzemyslaw Marczak * SPDX-License-Identifier: GPL-2.0+
635d460fbSPrzemyslaw Marczak */
735d460fbSPrzemyslaw Marczak
835d460fbSPrzemyslaw Marczak #include <common.h>
935d460fbSPrzemyslaw Marczak #include <fdtdec.h>
1035d460fbSPrzemyslaw Marczak #include <errno.h>
1135d460fbSPrzemyslaw Marczak #include <dm.h>
1235d460fbSPrzemyslaw Marczak #include <i2c.h>
1335d460fbSPrzemyslaw Marczak #include <power/pmic.h>
1435d460fbSPrzemyslaw Marczak #include <power/s2mps11.h>
1535d460fbSPrzemyslaw Marczak
1635d460fbSPrzemyslaw Marczak DECLARE_GLOBAL_DATA_PTR;
1735d460fbSPrzemyslaw Marczak
s2mps11_reg_count(struct udevice * dev)1835d460fbSPrzemyslaw Marczak static int s2mps11_reg_count(struct udevice *dev)
1935d460fbSPrzemyslaw Marczak {
2035d460fbSPrzemyslaw Marczak return S2MPS11_REG_COUNT;
2135d460fbSPrzemyslaw Marczak }
2235d460fbSPrzemyslaw Marczak
s2mps11_write(struct udevice * dev,uint reg,const uint8_t * buff,int len)2335d460fbSPrzemyslaw Marczak static int s2mps11_write(struct udevice *dev, uint reg, const uint8_t *buff,
2435d460fbSPrzemyslaw Marczak int len)
2535d460fbSPrzemyslaw Marczak {
2635d460fbSPrzemyslaw Marczak int ret;
2735d460fbSPrzemyslaw Marczak
2835d460fbSPrzemyslaw Marczak ret = dm_i2c_write(dev, reg, buff, len);
2935d460fbSPrzemyslaw Marczak if (ret)
30*90aa625cSMasahiro Yamada pr_err("write error to device: %p register: %#x!", dev, reg);
3135d460fbSPrzemyslaw Marczak
3235d460fbSPrzemyslaw Marczak return ret;
3335d460fbSPrzemyslaw Marczak }
3435d460fbSPrzemyslaw Marczak
s2mps11_read(struct udevice * dev,uint reg,uint8_t * buff,int len)3535d460fbSPrzemyslaw Marczak static int s2mps11_read(struct udevice *dev, uint reg, uint8_t *buff, int len)
3635d460fbSPrzemyslaw Marczak {
3735d460fbSPrzemyslaw Marczak int ret;
3835d460fbSPrzemyslaw Marczak
3935d460fbSPrzemyslaw Marczak ret = dm_i2c_read(dev, reg, buff, len);
4035d460fbSPrzemyslaw Marczak if (ret)
41*90aa625cSMasahiro Yamada pr_err("read error from device: %p register: %#x!", dev, reg);
4235d460fbSPrzemyslaw Marczak
4335d460fbSPrzemyslaw Marczak return ret;
4435d460fbSPrzemyslaw Marczak }
4535d460fbSPrzemyslaw Marczak
4635d460fbSPrzemyslaw Marczak static struct dm_pmic_ops s2mps11_ops = {
4735d460fbSPrzemyslaw Marczak .reg_count = s2mps11_reg_count,
4835d460fbSPrzemyslaw Marczak .read = s2mps11_read,
4935d460fbSPrzemyslaw Marczak .write = s2mps11_write,
5035d460fbSPrzemyslaw Marczak };
5135d460fbSPrzemyslaw Marczak
5235d460fbSPrzemyslaw Marczak static const struct udevice_id s2mps11_ids[] = {
5335d460fbSPrzemyslaw Marczak { .compatible = "samsung,s2mps11-pmic" },
5435d460fbSPrzemyslaw Marczak { }
5535d460fbSPrzemyslaw Marczak };
5635d460fbSPrzemyslaw Marczak
5735d460fbSPrzemyslaw Marczak U_BOOT_DRIVER(pmic_s2mps11) = {
5835d460fbSPrzemyslaw Marczak .name = "s2mps11_pmic",
5935d460fbSPrzemyslaw Marczak .id = UCLASS_PMIC,
6035d460fbSPrzemyslaw Marczak .of_match = s2mps11_ids,
6135d460fbSPrzemyslaw Marczak .ops = &s2mps11_ops,
6235d460fbSPrzemyslaw Marczak };
63