1*677dec6eSriastradh /* $NetBSD: bus.h,v 1.3 2021/12/18 23:45:40 riastradh Exp $ */ 2d350ecf5Sriastradh 3*677dec6eSriastradh /* SPDX-License-Identifier: MIT */ 4d350ecf5Sriastradh #ifndef __NVKM_I2C_BUS_H__ 5d350ecf5Sriastradh #define __NVKM_I2C_BUS_H__ 6d350ecf5Sriastradh #include "pad.h" 7d350ecf5Sriastradh 8d350ecf5Sriastradh struct nvkm_i2c_bus_func { 9d350ecf5Sriastradh void (*init)(struct nvkm_i2c_bus *); 10d350ecf5Sriastradh void (*drive_scl)(struct nvkm_i2c_bus *, int state); 11d350ecf5Sriastradh void (*drive_sda)(struct nvkm_i2c_bus *, int state); 12d350ecf5Sriastradh int (*sense_scl)(struct nvkm_i2c_bus *); 13d350ecf5Sriastradh int (*sense_sda)(struct nvkm_i2c_bus *); 14d350ecf5Sriastradh int (*xfer)(struct nvkm_i2c_bus *, struct i2c_msg *, int num); 15d350ecf5Sriastradh }; 16d350ecf5Sriastradh 17d350ecf5Sriastradh int nvkm_i2c_bus_ctor(const struct nvkm_i2c_bus_func *, struct nvkm_i2c_pad *, 18d350ecf5Sriastradh int id, struct nvkm_i2c_bus *); 19d350ecf5Sriastradh int nvkm_i2c_bus_new_(const struct nvkm_i2c_bus_func *, struct nvkm_i2c_pad *, 20d350ecf5Sriastradh int id, struct nvkm_i2c_bus **); 21d350ecf5Sriastradh void nvkm_i2c_bus_del(struct nvkm_i2c_bus **); 22d350ecf5Sriastradh void nvkm_i2c_bus_init(struct nvkm_i2c_bus *); 23*677dec6eSriastradh void nvkm_i2c_bus_fini(struct nvkm_i2c_bus *); 24d350ecf5Sriastradh 25d350ecf5Sriastradh int nvkm_i2c_bit_xfer(struct nvkm_i2c_bus *, struct i2c_msg *, int); 26d350ecf5Sriastradh 27d350ecf5Sriastradh int nv04_i2c_bus_new(struct nvkm_i2c_pad *, int, u8, u8, 28d350ecf5Sriastradh struct nvkm_i2c_bus **); 29d350ecf5Sriastradh 30d350ecf5Sriastradh int nv4e_i2c_bus_new(struct nvkm_i2c_pad *, int, u8, struct nvkm_i2c_bus **); 31d350ecf5Sriastradh int nv50_i2c_bus_new(struct nvkm_i2c_pad *, int, u8, struct nvkm_i2c_bus **); 32d350ecf5Sriastradh int gf119_i2c_bus_new(struct nvkm_i2c_pad *, int, u8, struct nvkm_i2c_bus **); 33d350ecf5Sriastradh 34d350ecf5Sriastradh #define BUS_MSG(b,l,f,a...) do { \ 35d350ecf5Sriastradh struct nvkm_i2c_bus *_bus = (b); \ 36d350ecf5Sriastradh nvkm_##l(&_bus->pad->i2c->subdev, "bus %04x: "f"\n", _bus->id, ##a); \ 37d350ecf5Sriastradh } while(0) 38d350ecf5Sriastradh #define BUS_ERR(b,f,a...) BUS_MSG((b), error, f, ##a) 39d350ecf5Sriastradh #define BUS_DBG(b,f,a...) BUS_MSG((b), debug, f, ##a) 40d350ecf5Sriastradh #define BUS_TRACE(b,f,a...) BUS_MSG((b), trace, f, ##a) 41d350ecf5Sriastradh #endif 42