1*8bc9c9e2SClément Léger // SPDX-License-Identifier: BSD-2-Clause 2*8bc9c9e2SClément Léger /* 3*8bc9c9e2SClément Léger * Copyright 2023 Microchip 4*8bc9c9e2SClément Léger */ 5*8bc9c9e2SClément Léger 6*8bc9c9e2SClément Léger #include <drivers/i2c.h> 7*8bc9c9e2SClément Léger #include <kernel/dt.h> 8*8bc9c9e2SClément Léger #include <kernel/dt_driver.h> 9*8bc9c9e2SClément Léger #include <libfdt.h> 10*8bc9c9e2SClément Léger #include <malloc.h> 11*8bc9c9e2SClément Léger #include <tee_api_defines_extensions.h> 12*8bc9c9e2SClément Léger #include <tee_api_types.h> 13*8bc9c9e2SClément Léger #include <trace.h> 14*8bc9c9e2SClément Léger #include <types_ext.h> 15*8bc9c9e2SClément Léger 16*8bc9c9e2SClément Léger struct i2c_dev *i2c_create_dev(struct i2c_ctrl *i2c_ctrl, const void *fdt, 17*8bc9c9e2SClément Léger int node) 18*8bc9c9e2SClément Léger { 19*8bc9c9e2SClément Léger struct i2c_dev *i2c_dev = NULL; 20*8bc9c9e2SClément Léger paddr_t addr = _fdt_reg_base_address(fdt, node); 21*8bc9c9e2SClément Léger 22*8bc9c9e2SClément Léger if (addr == DT_INFO_INVALID_REG) 23*8bc9c9e2SClément Léger return NULL; 24*8bc9c9e2SClément Léger 25*8bc9c9e2SClément Léger i2c_dev = calloc(1, sizeof(struct i2c_dev)); 26*8bc9c9e2SClément Léger if (!i2c_dev) 27*8bc9c9e2SClément Léger return NULL; 28*8bc9c9e2SClément Léger 29*8bc9c9e2SClément Léger i2c_dev->addr = addr; 30*8bc9c9e2SClément Léger i2c_dev->ctrl = i2c_ctrl; 31*8bc9c9e2SClément Léger 32*8bc9c9e2SClément Léger return i2c_dev; 33*8bc9c9e2SClément Léger } 34