mfd: mc13xxx-spi: make SPI buffers DMA-safe
PATCH 1/1 mfd: mc13xxx-spi: make SPI buffers DMA-safe
Signed-off-by Marcus Folkesson <[email protected]>
--- drivers/mfd/mc13xxx-spi.c | 14 +++++++------- drivers/mfd/mc13xxx.h | 4 ++++ 2 files changed, 11 insertions(+), 7 deletions(-)
drivers/mfd/mc13xxx-spi.c +7 -7
@@ -63,14 +63,13 @@ static const struct regmap_config mc13xxx_regmap_spi_config = {static int mc13xxx_spi_read (void *context,const void *reg,size_t reg_size,void *val,size_t val_size) { -unsigned char w[4 ] = { *((unsigned char *) reg),0 ,0 ,0 }; -unsigned char r[4 ];unsigned char *p = val;struct device *dev = context;struct spi_device *spi =to_spi_device (dev); +struct mc13xxx *mc13xxx =dev_get_drvdata (dev);struct spi_transfer t = { - .tx_buf = w, - .rx_buf = r, + .tx_buf = mc13xxx->wbuf, + .rx_buf = mc13xxx->rbuf, .len =4 , };
@@ -80,11 +79,12 @@ static int mc13xxx_spi_read(void *context, const void *reg, size_t reg_size,if (val_size !=3 || reg_size !=1 )return -ENOTSUPP ; + mc13xxx->wbuf[0 ] = *(unsigned char *)reg;spi_message_init (&m);spi_message_add_tail (&t, &m); ret =spi_sync (spi, &m); -memcpy (p, &r[1 ],3 ); +memcpy (p, &mc13xxx->rbuf[1 ],3 );return ret; }
@@ -100,9 +100,9 @@ static int mc13xxx_spi_write(void *context, const void *data, size_t count)/* include errata fix for spi audio problems */ if (*reg ==MC13783_AUDIO_CODEC || *reg ==MC13783_AUDIO_DAC ) -spi_write (spi, data, count); +spi_write_then_read (spi, data, count,NULL ,0 ); -return spi_write (spi, data, count); +return spi_write_then_read (spi, data, count,NULL ,0 ); }/*
drivers/mfd/mc13xxx.h +4 -0
@@ -44,6 +44,10 @@ struct mc13xxx {int flags;int adcflags; +#ifdef CONFIG_MFD_MC13XXX_SPI +unsigned char wbuf[4 ]____cacheline_aligned ; +unsigned char rbuf[4 ]; +#endif };int mc13xxx_common_init (struct device *dev);
Signature · 1 line
2.11.0.rc2