1*6f1067cfSThomas Richard /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*6f1067cfSThomas Richard /* 3*6f1067cfSThomas Richard * Congatec Board Controller driver definitions 4*6f1067cfSThomas Richard * 5*6f1067cfSThomas Richard * Copyright (C) 2024 Bootlin 6*6f1067cfSThomas Richard * Author: Thomas Richard <[email protected]> 7*6f1067cfSThomas Richard */ 8*6f1067cfSThomas Richard 9*6f1067cfSThomas Richard #ifndef _LINUX_MFD_CGBC_H_ 10*6f1067cfSThomas Richard 11*6f1067cfSThomas Richard /** 12*6f1067cfSThomas Richard * struct cgbc_version - Board Controller device version structure 13*6f1067cfSThomas Richard * @feature: Board Controller feature number 14*6f1067cfSThomas Richard * @major: Board Controller major revision 15*6f1067cfSThomas Richard * @minor: Board Controller minor revision 16*6f1067cfSThomas Richard */ 17*6f1067cfSThomas Richard struct cgbc_version { 18*6f1067cfSThomas Richard unsigned char feature; 19*6f1067cfSThomas Richard unsigned char major; 20*6f1067cfSThomas Richard unsigned char minor; 21*6f1067cfSThomas Richard }; 22*6f1067cfSThomas Richard 23*6f1067cfSThomas Richard /** 24*6f1067cfSThomas Richard * struct cgbc_device_data - Internal representation of the Board Controller device 25*6f1067cfSThomas Richard * @io_session: Pointer to the session IO memory 26*6f1067cfSThomas Richard * @io_cmd: Pointer to the command IO memory 27*6f1067cfSThomas Richard * @session: Session id returned by the Board Controller 28*6f1067cfSThomas Richard * @dev: Pointer to kernel device structure 29*6f1067cfSThomas Richard * @cgbc_version: Board Controller version structure 30*6f1067cfSThomas Richard * @mutex: Board Controller mutex 31*6f1067cfSThomas Richard */ 32*6f1067cfSThomas Richard struct cgbc_device_data { 33*6f1067cfSThomas Richard void __iomem *io_session; 34*6f1067cfSThomas Richard void __iomem *io_cmd; 35*6f1067cfSThomas Richard u8 session; 36*6f1067cfSThomas Richard struct device *dev; 37*6f1067cfSThomas Richard struct cgbc_version version; 38*6f1067cfSThomas Richard struct mutex lock; 39*6f1067cfSThomas Richard }; 40*6f1067cfSThomas Richard 41*6f1067cfSThomas Richard int cgbc_command(struct cgbc_device_data *cgbc, void *cmd, unsigned int cmd_size, 42*6f1067cfSThomas Richard void *data, unsigned int data_size, u8 *status); 43*6f1067cfSThomas Richard 44*6f1067cfSThomas Richard #endif /*_LINUX_MFD_CGBC_H_*/ 45