Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd792f8f authored by Mark Brown's avatar Mark Brown Committed by Lee Jones
Browse files

mfd: mc13xxx: Move SPI erratum workaround into SPI I/O function



Move the workaround for double sending AUDIO_CODEC and AUDIO_DAC writes
into the SPI core, aiding refactoring to eliminate the ASoC custom I/O
functions and avoiding the extra writes for I2C.

Signed-off-by: default avatarMark Brown <broonie@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent c29c2d4e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -94,10 +94,15 @@ static int mc13xxx_spi_write(void *context, const void *data, size_t count)
{
	struct device *dev = context;
	struct spi_device *spi = to_spi_device(dev);
	const char *reg = data;

	if (count != 4)
		return -ENOTSUPP;

	/* include errata fix for spi audio problems */
	if (*reg == MC13783_AUDIO_CODEC || *reg == MC13783_AUDIO_DAC)
		spi_write(spi, data, count);

	return spi_write(spi, data, count);
}

+7 −0
Original line number Diff line number Diff line
@@ -41,6 +41,13 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx,
		unsigned int mode, unsigned int channel,
		u8 ato, bool atox, unsigned int *sample);

#define MC13783_AUDIO_RX0	36
#define MC13783_AUDIO_RX1	37
#define MC13783_AUDIO_TX	38
#define MC13783_SSI_NETWORK	39
#define MC13783_AUDIO_CODEC	40
#define MC13783_AUDIO_DAC	41

#define MC13XXX_IRQ_ADCDONE	0
#define MC13XXX_IRQ_ADCBISDONE	1
#define MC13XXX_IRQ_TS		2
+0 −4
Original line number Diff line number Diff line
@@ -125,10 +125,6 @@ static int mc13783_write(struct snd_soc_codec *codec,

	ret = mc13xxx_reg_write(priv->mc13xxx, reg, value);

	/* include errata fix for spi audio problems */
	if (reg == MC13783_AUDIO_CODEC || reg == MC13783_AUDIO_DAC)
		ret = mc13xxx_reg_write(priv->mc13xxx, reg, value);

	mc13xxx_unlock(priv->mc13xxx);

	return ret;