1*35d460fbSPrzemyslaw Marczak /* 2*35d460fbSPrzemyslaw Marczak * Copyright (C) 2015 Samsung Electronics 3*35d460fbSPrzemyslaw Marczak * Przemyslaw Marczak <p.marczak@samsung.com> 4*35d460fbSPrzemyslaw Marczak * 5*35d460fbSPrzemyslaw Marczak * SPDX-License-Identifier: GPL-2.0+ 6*35d460fbSPrzemyslaw Marczak */ 7*35d460fbSPrzemyslaw Marczak 8*35d460fbSPrzemyslaw Marczak #include <common.h> 9*35d460fbSPrzemyslaw Marczak #include <fdtdec.h> 10*35d460fbSPrzemyslaw Marczak #include <errno.h> 11*35d460fbSPrzemyslaw Marczak #include <dm.h> 12*35d460fbSPrzemyslaw Marczak #include <i2c.h> 13*35d460fbSPrzemyslaw Marczak #include <power/pmic.h> 14*35d460fbSPrzemyslaw Marczak #include <power/s2mps11.h> 15*35d460fbSPrzemyslaw Marczak 16*35d460fbSPrzemyslaw Marczak DECLARE_GLOBAL_DATA_PTR; 17*35d460fbSPrzemyslaw Marczak 18*35d460fbSPrzemyslaw Marczak static int s2mps11_reg_count(struct udevice *dev) 19*35d460fbSPrzemyslaw Marczak { 20*35d460fbSPrzemyslaw Marczak return S2MPS11_REG_COUNT; 21*35d460fbSPrzemyslaw Marczak } 22*35d460fbSPrzemyslaw Marczak 23*35d460fbSPrzemyslaw Marczak static int s2mps11_write(struct udevice *dev, uint reg, const uint8_t *buff, 24*35d460fbSPrzemyslaw Marczak int len) 25*35d460fbSPrzemyslaw Marczak { 26*35d460fbSPrzemyslaw Marczak int ret; 27*35d460fbSPrzemyslaw Marczak 28*35d460fbSPrzemyslaw Marczak ret = dm_i2c_write(dev, reg, buff, len); 29*35d460fbSPrzemyslaw Marczak if (ret) 30*35d460fbSPrzemyslaw Marczak error("write error to device: %p register: %#x!", dev, reg); 31*35d460fbSPrzemyslaw Marczak 32*35d460fbSPrzemyslaw Marczak return ret; 33*35d460fbSPrzemyslaw Marczak } 34*35d460fbSPrzemyslaw Marczak 35*35d460fbSPrzemyslaw Marczak static int s2mps11_read(struct udevice *dev, uint reg, uint8_t *buff, int len) 36*35d460fbSPrzemyslaw Marczak { 37*35d460fbSPrzemyslaw Marczak int ret; 38*35d460fbSPrzemyslaw Marczak 39*35d460fbSPrzemyslaw Marczak ret = dm_i2c_read(dev, reg, buff, len); 40*35d460fbSPrzemyslaw Marczak if (ret) 41*35d460fbSPrzemyslaw Marczak error("read error from device: %p register: %#x!", dev, reg); 42*35d460fbSPrzemyslaw Marczak 43*35d460fbSPrzemyslaw Marczak return ret; 44*35d460fbSPrzemyslaw Marczak } 45*35d460fbSPrzemyslaw Marczak 46*35d460fbSPrzemyslaw Marczak static struct dm_pmic_ops s2mps11_ops = { 47*35d460fbSPrzemyslaw Marczak .reg_count = s2mps11_reg_count, 48*35d460fbSPrzemyslaw Marczak .read = s2mps11_read, 49*35d460fbSPrzemyslaw Marczak .write = s2mps11_write, 50*35d460fbSPrzemyslaw Marczak }; 51*35d460fbSPrzemyslaw Marczak 52*35d460fbSPrzemyslaw Marczak static const struct udevice_id s2mps11_ids[] = { 53*35d460fbSPrzemyslaw Marczak { .compatible = "samsung,s2mps11-pmic" }, 54*35d460fbSPrzemyslaw Marczak { } 55*35d460fbSPrzemyslaw Marczak }; 56*35d460fbSPrzemyslaw Marczak 57*35d460fbSPrzemyslaw Marczak U_BOOT_DRIVER(pmic_s2mps11) = { 58*35d460fbSPrzemyslaw Marczak .name = "s2mps11_pmic", 59*35d460fbSPrzemyslaw Marczak .id = UCLASS_PMIC, 60*35d460fbSPrzemyslaw Marczak .of_match = s2mps11_ids, 61*35d460fbSPrzemyslaw Marczak .ops = &s2mps11_ops, 62*35d460fbSPrzemyslaw Marczak }; 63