xref: /openbmc/u-boot/include/spmi/spmi.h (revision 04868b407b624c414805c9e9a79195eeb3a14829)
1*04868b40SMateusz Kulikowski #ifndef _SPMI_SPMI_H
2*04868b40SMateusz Kulikowski #define _SPMI_SPMI_H
3*04868b40SMateusz Kulikowski 
4*04868b40SMateusz Kulikowski /**
5*04868b40SMateusz Kulikowski  * struct dm_spmi_ops - SPMI device I/O interface
6*04868b40SMateusz Kulikowski  *
7*04868b40SMateusz Kulikowski  * Should be implemented by UCLASS_SPMI device drivers. The standard
8*04868b40SMateusz Kulikowski  * device operations provides the I/O interface for it's childs.
9*04868b40SMateusz Kulikowski  *
10*04868b40SMateusz Kulikowski  * @read:      read register 'reg' of slave 'usid' and peripheral 'pid'
11*04868b40SMateusz Kulikowski  * @write:     write register 'reg' of slave 'usid' and peripheral 'pid'
12*04868b40SMateusz Kulikowski  *
13*04868b40SMateusz Kulikowski  * Each register is 8-bit, both read and write can return negative values
14*04868b40SMateusz Kulikowski  * on error.
15*04868b40SMateusz Kulikowski  */
16*04868b40SMateusz Kulikowski struct dm_spmi_ops {
17*04868b40SMateusz Kulikowski 	int (*read)(struct udevice *dev, int usid, int pid, int reg);
18*04868b40SMateusz Kulikowski 	int (*write)(struct udevice *dev, int usid, int pid, int reg,
19*04868b40SMateusz Kulikowski 		     uint8_t value);
20*04868b40SMateusz Kulikowski };
21*04868b40SMateusz Kulikowski 
22*04868b40SMateusz Kulikowski /**
23*04868b40SMateusz Kulikowski  * spmi_reg_read() - read a register from specific slave/peripheral
24*04868b40SMateusz Kulikowski  *
25*04868b40SMateusz Kulikowski  * @dev:	SPMI bus to read
26*04868b40SMateusz Kulikowski  * @usid	SlaveID
27*04868b40SMateusz Kulikowski  * @pid		Peripheral ID
28*04868b40SMateusz Kulikowski  * @reg:	Register to read
29*04868b40SMateusz Kulikowski  * @return value read on success or negative value of errno.
30*04868b40SMateusz Kulikowski  */
31*04868b40SMateusz Kulikowski int spmi_reg_read(struct udevice *dev, int usid, int pid, int reg);
32*04868b40SMateusz Kulikowski 
33*04868b40SMateusz Kulikowski /**
34*04868b40SMateusz Kulikowski  * spmi_reg_write() - write a register of specific slave/peripheral
35*04868b40SMateusz Kulikowski  *
36*04868b40SMateusz Kulikowski  * @dev:	SPMI bus to write
37*04868b40SMateusz Kulikowski  * @usid	SlaveID
38*04868b40SMateusz Kulikowski  * @pid		Peripheral ID
39*04868b40SMateusz Kulikowski  * @reg:	Register to write
40*04868b40SMateusz Kulikowski  * @value:	Value to write
41*04868b40SMateusz Kulikowski  * @return 0 on success or negative value of errno.
42*04868b40SMateusz Kulikowski  */
43*04868b40SMateusz Kulikowski int spmi_reg_write(struct udevice *dev, int usid, int pid, int reg,
44*04868b40SMateusz Kulikowski 		   uint8_t value);
45*04868b40SMateusz Kulikowski 
46*04868b40SMateusz Kulikowski #endif
47