xref: /rk3399_rockchip-uboot/drivers/power/pmic/s2mps11.c (revision 90aa625c9a9e1fb7a2f001fd8e50099bacaf92b8)
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