On Thu, Jul 18, 2019 at 07:03:54PM +0200, Alexander Steffen wrote: > Only tpm_tis has a faster way to access multiple bytes at once, every other > driver will just fall back to read_bytes/write_bytes. Therefore, move this > common code out of tpm_tis_spi into tpm_tis_core, so that it is > automatically used when low-level drivers do not implement the specialized > methods. > > Signed-off-by: Alexander Steffen <Alexander.Steffen@xxxxxxxxxxxx> > --- > drivers/char/tpm/tpm_tis_core.h | 41 ++++++++++++++++++++++++++++++--- > drivers/char/tpm/tpm_tis_spi.c | 41 --------------------------------- > 2 files changed, 38 insertions(+), 44 deletions(-) > > diff --git a/drivers/char/tpm/tpm_tis_core.h b/drivers/char/tpm/tpm_tis_core.h > index 7337819f5d7b..2c6557b29a1d 100644 > --- a/drivers/char/tpm/tpm_tis_core.h > +++ b/drivers/char/tpm/tpm_tis_core.h > @@ -122,13 +122,37 @@ static inline int tpm_tis_read8(struct tpm_tis_data *data, u32 addr, u8 *result) > static inline int tpm_tis_read16(struct tpm_tis_data *data, u32 addr, > u16 *result) > { > - return data->phy_ops->read16(data, addr, result); > + if (data->phy_ops->read16) { > + return data->phy_ops->read16(data, addr, result); > + } else { > + __le16 result_le; > + int rc; > + > + rc = data->phy_ops->read_bytes(data, addr, sizeof(u16), > + (u8 *)&result_le); > + if (!rc) > + *result = le16_to_cpu(result_le); > + > + return rc; > + } Looks great. I prefer to have variable declarations in the beginning of function for most of the time. Other than that looks legit. /Jarkko