xref: /optee_os/core/drivers/i2c/i2c.c (revision 9e3c57c88b0cdd41de57107725621c8c0857a838)
18bc9c9e2SClément Léger // SPDX-License-Identifier: BSD-2-Clause
28bc9c9e2SClément Léger /*
38bc9c9e2SClément Léger  * Copyright 2023 Microchip
48bc9c9e2SClément Léger  */
58bc9c9e2SClément Léger 
68bc9c9e2SClément Léger #include <drivers/i2c.h>
78bc9c9e2SClément Léger #include <kernel/dt.h>
88bc9c9e2SClément Léger #include <libfdt.h>
98bc9c9e2SClément Léger #include <malloc.h>
108bc9c9e2SClément Léger #include <tee_api_defines_extensions.h>
118bc9c9e2SClément Léger #include <tee_api_types.h>
128bc9c9e2SClément Léger #include <trace.h>
138bc9c9e2SClément Léger #include <types_ext.h>
148bc9c9e2SClément Léger 
i2c_create_dev(struct i2c_ctrl * i2c_ctrl,const void * fdt,int node)158bc9c9e2SClément Léger struct i2c_dev *i2c_create_dev(struct i2c_ctrl *i2c_ctrl, const void *fdt,
168bc9c9e2SClément Léger 			       int node)
178bc9c9e2SClément Léger {
188bc9c9e2SClément Léger 	struct i2c_dev *i2c_dev = NULL;
19*11e45789SEtienne Carriere 	paddr_t addr = fdt_reg_base_address(fdt, node);
208bc9c9e2SClément Léger 
218bc9c9e2SClément Léger 	if (addr == DT_INFO_INVALID_REG)
228bc9c9e2SClément Léger 		return NULL;
238bc9c9e2SClément Léger 
248bc9c9e2SClément Léger 	i2c_dev = calloc(1, sizeof(struct i2c_dev));
258bc9c9e2SClément Léger 	if (!i2c_dev)
268bc9c9e2SClément Léger 		return NULL;
278bc9c9e2SClément Léger 
288bc9c9e2SClément Léger 	i2c_dev->addr = addr;
298bc9c9e2SClément Léger 	i2c_dev->ctrl = i2c_ctrl;
308bc9c9e2SClément Léger 
318bc9c9e2SClément Léger 	return i2c_dev;
328bc9c9e2SClément Léger }
33