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