diff options
author | Eddie James <eajames@linux.ibm.com> | 2023-06-12 22:56:56 +0300 |
---|---|---|
committer | Joel Stanley <joel@jms.id.au> | 2023-08-11 07:02:14 +0300 |
commit | 53e89e3e4490d6630a68e61a3cb478e7a7f2ce8b (patch) | |
tree | 64e412ebe986e4abe62f9e0c5ebdb72b08035bbc /drivers/fsi/fsi-master-i2cr.h | |
parent | 4362fd857d72739c47a92ca447aec25aca7c3c3d (diff) | |
download | linux-53e89e3e4490d6630a68e61a3cb478e7a7f2ce8b.tar.xz |
fsi: Add IBM I2C Responder virtual FSI master
The I2C Responder (I2CR) is an I2C device that translates I2C commands
to CFAM or SCOM operations, effectively implementing an FSI master and
bus.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
Link: https://lore.kernel.org/r/20230612195657.245125-14-eajames@linux.ibm.com
Signed-off-by: Joel Stanley <joel@jms.id.au>
Diffstat (limited to 'drivers/fsi/fsi-master-i2cr.h')
-rw-r--r-- | drivers/fsi/fsi-master-i2cr.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/fsi/fsi-master-i2cr.h b/drivers/fsi/fsi-master-i2cr.h new file mode 100644 index 000000000000..96636bf28cac --- /dev/null +++ b/drivers/fsi/fsi-master-i2cr.h @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* Copyright (C) IBM Corporation 2023 */ + +#ifndef DRIVERS_FSI_MASTER_I2CR_H +#define DRIVERS_FSI_MASTER_I2CR_H + +#include <linux/i2c.h> +#include <linux/mutex.h> + +#include "fsi-master.h" + +struct i2c_client; + +struct fsi_master_i2cr { + struct fsi_master master; + struct mutex lock; /* protect HW access */ + struct i2c_client *client; +}; + +#define to_fsi_master_i2cr(m) container_of(m, struct fsi_master_i2cr, master) + +int fsi_master_i2cr_read(struct fsi_master_i2cr *i2cr, u32 addr, u64 *data); +int fsi_master_i2cr_write(struct fsi_master_i2cr *i2cr, u32 addr, u64 data); + +static inline bool is_fsi_master_i2cr(struct fsi_master *master) +{ + if (master->dev.parent && master->dev.parent->type == &i2c_client_type) + return true; + + return false; +} + +#endif /* DRIVERS_FSI_MASTER_I2CR_H */ |