All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonas Karlman <jonas@kwiboo.se>
To: Chen-Yu Tsai <wens@csie.org>, Code Kipper <codekipper@gmail.com>
Cc: Linux-ALSA <alsa-devel@alsa-project.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	"Andrea Venturi (pers)" <be17068@iperbole.bo.it>,
	linux-sunxi <linux-sunxi@googlegroups.com>,
	Mark Brown <broonie@kernel.org>,
	"Maxime Ripard" <maxime.ripard@free-electrons.com>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [alsa-devel] [PATCH v3 1/9] ASoC: sun4i-i2s: Adjust regmap settings
Date: Sat, 22 Dec 2018 22:12:08 +0000	[thread overview]
Message-ID: <DB7PR03MB46813005FFDFC8609F67F111ACB90@DB7PR03MB4681.eurprd03.prod.outlook.com> (raw)
In-Reply-To: <CAGb2v66-JmONW9AYqoSmifrEj+nstREdsbkcy9ECwnJ47zxARA@mail.gmail.com>

On 2018-12-21 17:44, Chen-Yu Tsai wrote:
> On Fri, Dec 21, 2018 at 11:21 PM <codekipper@gmail.com> wrote:
>> From: Marcus Cooper <codekipper@gmail.com>
>>
>> Bypass the regmap cache when flushing the i2s FIFOs and modify the tables
>> to reflect this.
>>
>> Signed-off-by: Marcus Cooper <codekipper@gmail.com>
>> ---
>>  sound/soc/sunxi/sun4i-i2s.c | 29 +++++++++--------------------
>>  1 file changed, 9 insertions(+), 20 deletions(-)
>>
>> diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c
>> index d5ec1a20499d..64d073cb2aee 100644
>> --- a/sound/soc/sunxi/sun4i-i2s.c
>> +++ b/sound/soc/sunxi/sun4i-i2s.c
>> @@ -548,9 +548,11 @@ static int sun4i_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
>>  static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
>>  {
>>         /* Flush RX FIFO */
>> +       regcache_cache_bypass(i2s->regmap, true);
>>         regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_RX,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_RX);
>> +       regcache_cache_bypass(i2s->regmap, false);
> IIRC the flush cache bit is self-clearing. So you likely want to mark
> this register as volatile. If it is marked as volatile, then all access
> to that register bypasses the cache, so the regcache_cache_bypass calls
> are unneeded.

I helped test this together with Marcus and when I tested with this
register marked
as volatile audio started to stutter, still unclear why audio starts to
stutter.

Without this cache bypass the flush TX/RX bits gets cached and flush
happens unexpectedly
resulting in multi channel audio getting mapped to wrong speaker.
Other ASoC codecs and fsl_spdif.c seems to use similar cache bypass for
reset/flush.

>
> However, looking at the code, the write would seem to be ignored if the
> regmap is in the cache_only state. We only set this when the bus clock
> is disabled. Under such a condition, bypassing the cache and forcing a
> write would be unwise, as the system either drops the write, or stalls
> altogether.
>
>>         /* Clear RX counter */
>>         regmap_write(i2s->regmap, SUN4I_I2S_RX_CNT_REG, 0);
>> @@ -569,9 +571,11 @@ static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
>>  static void sun4i_i2s_start_playback(struct sun4i_i2s *i2s)
>>  {
>>         /* Flush TX FIFO */
>> +       regcache_cache_bypass(i2s->regmap, true);
>>         regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_TX,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_TX);
>> +       regcache_cache_bypass(i2s->regmap, false);
>>
>>         /* Clear TX counter */
>>         regmap_write(i2s->regmap, SUN4I_I2S_TX_CNT_REG, 0);
>> @@ -703,13 +707,7 @@ static const struct snd_soc_component_driver sun4i_i2s_component = {
>>
>>  static bool sun4i_i2s_rd_reg(struct device *dev, unsigned int reg)
>>  {
>> -       switch (reg) {
>> -       case SUN4I_I2S_FIFO_TX_REG:
>> -               return false;
>> -
>> -       default:
>> -               return true;
>> -       }
>> +       return true;
> I don't understand why this is relevant. Do you need to read back from the TX
> FIFO?

This change was inspired by c66234cfedfc "ASoC: rockchip: i2s: fix
playback after runtime resume" [1]
On resume a cached sample would be written to FIFO_TX_REG unless it is
marked volatile,
the rockchip commit indicated that read is needed for volatile regs.

[1]
https://github.com/torvalds/linux/commit/c66234cfedfc3e6e3b62563a5f2c1562be09a35d

>
> If so, just drop the call-back altogether. If no callback is provided and no
> rd_table is provided either, it defaults to all registers under max_register
> (if max_register < 0) are readable.
>
> However this seems like it deserves to be a separate patch (where you explain
> in the commit log why it's needed).
>
> Regards
> ChenYu
>
>>  }
>>
>>  static bool sun4i_i2s_wr_reg(struct device *dev, unsigned int reg)
>> @@ -728,6 +726,8 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>  {
>>         switch (reg) {
>>         case SUN4I_I2S_FIFO_RX_REG:
>> +       case SUN4I_I2S_FIFO_TX_REG:
>> +       case SUN4I_I2S_FIFO_STA_REG:
>>         case SUN4I_I2S_INT_STA_REG:
>>         case SUN4I_I2S_RX_CNT_REG:
>>         case SUN4I_I2S_TX_CNT_REG:
>> @@ -738,23 +738,12 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>         }
>>  }
>>
>> -static bool sun8i_i2s_rd_reg(struct device *dev, unsigned int reg)
>> -{
>> -       switch (reg) {
>> -       case SUN8I_I2S_FIFO_TX_REG:
>> -               return false;
>> -
>> -       default:
>> -               return true;
>> -       }
>> -}
>> -
>>  static bool sun8i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>  {
>>         if (reg == SUN8I_I2S_INT_STA_REG)
>>                 return true;
>>         if (reg == SUN8I_I2S_FIFO_TX_REG)
>> -               return false;
>> +               return true;
>>
>>         return sun4i_i2s_volatile_reg(dev, reg);
>>  }
>> @@ -809,7 +798,7 @@ static const struct regmap_config sun8i_i2s_regmap_config = {
>>         .reg_defaults   = sun8i_i2s_reg_defaults,
>>         .num_reg_defaults       = ARRAY_SIZE(sun8i_i2s_reg_defaults),
>>         .writeable_reg  = sun4i_i2s_wr_reg,
>> -       .readable_reg   = sun8i_i2s_rd_reg,
>> +       .readable_reg   = sun4i_i2s_rd_reg,
>>         .volatile_reg   = sun8i_i2s_volatile_reg,
>>  };
>>
>> --
>> 2.20.1
>>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
>

WARNING: multiple messages have this Message-ID (diff)
From: Jonas Karlman <jonas@kwiboo.se>
To: Chen-Yu Tsai <wens@csie.org>, Code Kipper <codekipper@gmail.com>
Cc: Linux-ALSA <alsa-devel@alsa-project.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	"Andrea Venturi (pers)" <be17068@iperbole.bo.it>,
	linux-sunxi <linux-sunxi@googlegroups.com>,
	Mark Brown <broonie@kernel.org>,
	Maxime Ripard <maxime.ripard@free-electrons.com>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v3 1/9] ASoC: sun4i-i2s: Adjust regmap settings
Date: Sat, 22 Dec 2018 22:12:08 +0000	[thread overview]
Message-ID: <DB7PR03MB46813005FFDFC8609F67F111ACB90@DB7PR03MB4681.eurprd03.prod.outlook.com> (raw)
In-Reply-To: <CAGb2v66-JmONW9AYqoSmifrEj+nstREdsbkcy9ECwnJ47zxARA@mail.gmail.com>

On 2018-12-21 17:44, Chen-Yu Tsai wrote:
> On Fri, Dec 21, 2018 at 11:21 PM <codekipper@gmail.com> wrote:
>> From: Marcus Cooper <codekipper@gmail.com>
>>
>> Bypass the regmap cache when flushing the i2s FIFOs and modify the tables
>> to reflect this.
>>
>> Signed-off-by: Marcus Cooper <codekipper@gmail.com>
>> ---
>>  sound/soc/sunxi/sun4i-i2s.c | 29 +++++++++--------------------
>>  1 file changed, 9 insertions(+), 20 deletions(-)
>>
>> diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c
>> index d5ec1a20499d..64d073cb2aee 100644
>> --- a/sound/soc/sunxi/sun4i-i2s.c
>> +++ b/sound/soc/sunxi/sun4i-i2s.c
>> @@ -548,9 +548,11 @@ static int sun4i_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
>>  static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
>>  {
>>         /* Flush RX FIFO */
>> +       regcache_cache_bypass(i2s->regmap, true);
>>         regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_RX,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_RX);
>> +       regcache_cache_bypass(i2s->regmap, false);
> IIRC the flush cache bit is self-clearing. So you likely want to mark
> this register as volatile. If it is marked as volatile, then all access
> to that register bypasses the cache, so the regcache_cache_bypass calls
> are unneeded.

I helped test this together with Marcus and when I tested with this
register marked
as volatile audio started to stutter, still unclear why audio starts to
stutter.

Without this cache bypass the flush TX/RX bits gets cached and flush
happens unexpectedly
resulting in multi channel audio getting mapped to wrong speaker.
Other ASoC codecs and fsl_spdif.c seems to use similar cache bypass for
reset/flush.

>
> However, looking at the code, the write would seem to be ignored if the
> regmap is in the cache_only state. We only set this when the bus clock
> is disabled. Under such a condition, bypassing the cache and forcing a
> write would be unwise, as the system either drops the write, or stalls
> altogether.
>
>>         /* Clear RX counter */
>>         regmap_write(i2s->regmap, SUN4I_I2S_RX_CNT_REG, 0);
>> @@ -569,9 +571,11 @@ static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
>>  static void sun4i_i2s_start_playback(struct sun4i_i2s *i2s)
>>  {
>>         /* Flush TX FIFO */
>> +       regcache_cache_bypass(i2s->regmap, true);
>>         regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_TX,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_TX);
>> +       regcache_cache_bypass(i2s->regmap, false);
>>
>>         /* Clear TX counter */
>>         regmap_write(i2s->regmap, SUN4I_I2S_TX_CNT_REG, 0);
>> @@ -703,13 +707,7 @@ static const struct snd_soc_component_driver sun4i_i2s_component = {
>>
>>  static bool sun4i_i2s_rd_reg(struct device *dev, unsigned int reg)
>>  {
>> -       switch (reg) {
>> -       case SUN4I_I2S_FIFO_TX_REG:
>> -               return false;
>> -
>> -       default:
>> -               return true;
>> -       }
>> +       return true;
> I don't understand why this is relevant. Do you need to read back from the TX
> FIFO?

This change was inspired by c66234cfedfc "ASoC: rockchip: i2s: fix
playback after runtime resume" [1]
On resume a cached sample would be written to FIFO_TX_REG unless it is
marked volatile,
the rockchip commit indicated that read is needed for volatile regs.

[1]
https://github.com/torvalds/linux/commit/c66234cfedfc3e6e3b62563a5f2c1562be09a35d

>
> If so, just drop the call-back altogether. If no callback is provided and no
> rd_table is provided either, it defaults to all registers under max_register
> (if max_register < 0) are readable.
>
> However this seems like it deserves to be a separate patch (where you explain
> in the commit log why it's needed).
>
> Regards
> ChenYu
>
>>  }
>>
>>  static bool sun4i_i2s_wr_reg(struct device *dev, unsigned int reg)
>> @@ -728,6 +726,8 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>  {
>>         switch (reg) {
>>         case SUN4I_I2S_FIFO_RX_REG:
>> +       case SUN4I_I2S_FIFO_TX_REG:
>> +       case SUN4I_I2S_FIFO_STA_REG:
>>         case SUN4I_I2S_INT_STA_REG:
>>         case SUN4I_I2S_RX_CNT_REG:
>>         case SUN4I_I2S_TX_CNT_REG:
>> @@ -738,23 +738,12 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>         }
>>  }
>>
>> -static bool sun8i_i2s_rd_reg(struct device *dev, unsigned int reg)
>> -{
>> -       switch (reg) {
>> -       case SUN8I_I2S_FIFO_TX_REG:
>> -               return false;
>> -
>> -       default:
>> -               return true;
>> -       }
>> -}
>> -
>>  static bool sun8i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>  {
>>         if (reg == SUN8I_I2S_INT_STA_REG)
>>                 return true;
>>         if (reg == SUN8I_I2S_FIFO_TX_REG)
>> -               return false;
>> +               return true;
>>
>>         return sun4i_i2s_volatile_reg(dev, reg);
>>  }
>> @@ -809,7 +798,7 @@ static const struct regmap_config sun8i_i2s_regmap_config = {
>>         .reg_defaults   = sun8i_i2s_reg_defaults,
>>         .num_reg_defaults       = ARRAY_SIZE(sun8i_i2s_reg_defaults),
>>         .writeable_reg  = sun4i_i2s_wr_reg,
>> -       .readable_reg   = sun8i_i2s_rd_reg,
>> +       .readable_reg   = sun4i_i2s_rd_reg,
>>         .volatile_reg   = sun8i_i2s_volatile_reg,
>>  };
>>
>> --
>> 2.20.1
>>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
>

WARNING: multiple messages have this Message-ID (diff)
From: Jonas Karlman <jonas@kwiboo.se>
To: Chen-Yu Tsai <wens@csie.org>, Code Kipper <codekipper@gmail.com>
Cc: Linux-ALSA <alsa-devel@alsa-project.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	"Andrea Venturi \(pers\)" <be17068@iperbole.bo.it>,
	linux-sunxi <linux-sunxi@googlegroups.com>,
	Mark Brown <broonie@kernel.org>,
	Maxime Ripard <maxime.ripard@free-electrons.com>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [alsa-devel] [PATCH v3 1/9] ASoC: sun4i-i2s: Adjust regmap settings
Date: Sat, 22 Dec 2018 22:12:08 +0000	[thread overview]
Message-ID: <DB7PR03MB46813005FFDFC8609F67F111ACB90@DB7PR03MB4681.eurprd03.prod.outlook.com> (raw)
In-Reply-To: <CAGb2v66-JmONW9AYqoSmifrEj+nstREdsbkcy9ECwnJ47zxARA@mail.gmail.com>

On 2018-12-21 17:44, Chen-Yu Tsai wrote:
> On Fri, Dec 21, 2018 at 11:21 PM <codekipper@gmail.com> wrote:
>> From: Marcus Cooper <codekipper@gmail.com>
>>
>> Bypass the regmap cache when flushing the i2s FIFOs and modify the tables
>> to reflect this.
>>
>> Signed-off-by: Marcus Cooper <codekipper@gmail.com>
>> ---
>>  sound/soc/sunxi/sun4i-i2s.c | 29 +++++++++--------------------
>>  1 file changed, 9 insertions(+), 20 deletions(-)
>>
>> diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c
>> index d5ec1a20499d..64d073cb2aee 100644
>> --- a/sound/soc/sunxi/sun4i-i2s.c
>> +++ b/sound/soc/sunxi/sun4i-i2s.c
>> @@ -548,9 +548,11 @@ static int sun4i_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
>>  static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
>>  {
>>         /* Flush RX FIFO */
>> +       regcache_cache_bypass(i2s->regmap, true);
>>         regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_RX,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_RX);
>> +       regcache_cache_bypass(i2s->regmap, false);
> IIRC the flush cache bit is self-clearing. So you likely want to mark
> this register as volatile. If it is marked as volatile, then all access
> to that register bypasses the cache, so the regcache_cache_bypass calls
> are unneeded.

I helped test this together with Marcus and when I tested with this
register marked
as volatile audio started to stutter, still unclear why audio starts to
stutter.

Without this cache bypass the flush TX/RX bits gets cached and flush
happens unexpectedly
resulting in multi channel audio getting mapped to wrong speaker.
Other ASoC codecs and fsl_spdif.c seems to use similar cache bypass for
reset/flush.

>
> However, looking at the code, the write would seem to be ignored if the
> regmap is in the cache_only state. We only set this when the bus clock
> is disabled. Under such a condition, bypassing the cache and forcing a
> write would be unwise, as the system either drops the write, or stalls
> altogether.
>
>>         /* Clear RX counter */
>>         regmap_write(i2s->regmap, SUN4I_I2S_RX_CNT_REG, 0);
>> @@ -569,9 +571,11 @@ static void sun4i_i2s_start_capture(struct sun4i_i2s *i2s)
>>  static void sun4i_i2s_start_playback(struct sun4i_i2s *i2s)
>>  {
>>         /* Flush TX FIFO */
>> +       regcache_cache_bypass(i2s->regmap, true);
>>         regmap_update_bits(i2s->regmap, SUN4I_I2S_FIFO_CTRL_REG,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_TX,
>>                            SUN4I_I2S_FIFO_CTRL_FLUSH_TX);
>> +       regcache_cache_bypass(i2s->regmap, false);
>>
>>         /* Clear TX counter */
>>         regmap_write(i2s->regmap, SUN4I_I2S_TX_CNT_REG, 0);
>> @@ -703,13 +707,7 @@ static const struct snd_soc_component_driver sun4i_i2s_component = {
>>
>>  static bool sun4i_i2s_rd_reg(struct device *dev, unsigned int reg)
>>  {
>> -       switch (reg) {
>> -       case SUN4I_I2S_FIFO_TX_REG:
>> -               return false;
>> -
>> -       default:
>> -               return true;
>> -       }
>> +       return true;
> I don't understand why this is relevant. Do you need to read back from the TX
> FIFO?

This change was inspired by c66234cfedfc "ASoC: rockchip: i2s: fix
playback after runtime resume" [1]
On resume a cached sample would be written to FIFO_TX_REG unless it is
marked volatile,
the rockchip commit indicated that read is needed for volatile regs.

[1]
https://github.com/torvalds/linux/commit/c66234cfedfc3e6e3b62563a5f2c1562be09a35d

>
> If so, just drop the call-back altogether. If no callback is provided and no
> rd_table is provided either, it defaults to all registers under max_register
> (if max_register < 0) are readable.
>
> However this seems like it deserves to be a separate patch (where you explain
> in the commit log why it's needed).
>
> Regards
> ChenYu
>
>>  }
>>
>>  static bool sun4i_i2s_wr_reg(struct device *dev, unsigned int reg)
>> @@ -728,6 +726,8 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>  {
>>         switch (reg) {
>>         case SUN4I_I2S_FIFO_RX_REG:
>> +       case SUN4I_I2S_FIFO_TX_REG:
>> +       case SUN4I_I2S_FIFO_STA_REG:
>>         case SUN4I_I2S_INT_STA_REG:
>>         case SUN4I_I2S_RX_CNT_REG:
>>         case SUN4I_I2S_TX_CNT_REG:
>> @@ -738,23 +738,12 @@ static bool sun4i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>         }
>>  }
>>
>> -static bool sun8i_i2s_rd_reg(struct device *dev, unsigned int reg)
>> -{
>> -       switch (reg) {
>> -       case SUN8I_I2S_FIFO_TX_REG:
>> -               return false;
>> -
>> -       default:
>> -               return true;
>> -       }
>> -}
>> -
>>  static bool sun8i_i2s_volatile_reg(struct device *dev, unsigned int reg)
>>  {
>>         if (reg == SUN8I_I2S_INT_STA_REG)
>>                 return true;
>>         if (reg == SUN8I_I2S_FIFO_TX_REG)
>> -               return false;
>> +               return true;
>>
>>         return sun4i_i2s_volatile_reg(dev, reg);
>>  }
>> @@ -809,7 +798,7 @@ static const struct regmap_config sun8i_i2s_regmap_config = {
>>         .reg_defaults   = sun8i_i2s_reg_defaults,
>>         .num_reg_defaults       = ARRAY_SIZE(sun8i_i2s_reg_defaults),
>>         .writeable_reg  = sun4i_i2s_wr_reg,
>> -       .readable_reg   = sun8i_i2s_rd_reg,
>> +       .readable_reg   = sun4i_i2s_rd_reg,
>>         .volatile_reg   = sun8i_i2s_volatile_reg,
>>  };
>>
>> --
>> 2.20.1
>>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2018-12-22 22:12 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-21 15:21 [PATCH v3 0/9] ASoC: sun4i-i2s: Updates to the driver codekipper
2018-12-21 15:21 ` codekipper
2018-12-21 15:21 ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 15:21 ` [PATCH v3 1/9] ASoC: sun4i-i2s: Adjust regmap settings codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 16:44   ` Chen-Yu Tsai
2018-12-21 16:44     ` Chen-Yu Tsai
2018-12-21 16:44     ` Chen-Yu Tsai
2018-12-22 22:12     ` Jonas Karlman [this message]
2018-12-22 22:12       ` [alsa-devel] " Jonas Karlman
2018-12-22 22:12       ` Jonas Karlman
2018-12-23  3:16       ` [alsa-devel] " Chen-Yu Tsai
2018-12-23  3:16         ` Chen-Yu Tsai
2018-12-23  3:16         ` Chen-Yu Tsai
2019-01-09 18:49         ` Mark Brown
2019-01-09 18:49           ` Mark Brown
2019-01-09 18:49           ` Mark Brown
2019-01-09 18:46     ` Mark Brown
2019-01-09 18:46       ` Mark Brown
2019-01-09 18:46       ` Mark Brown
2018-12-21 15:21 ` [PATCH v3 2/9] ASoC: sun4i-i2s: Add regmap field to sign extend sample codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 17:06   ` Chen-Yu Tsai
2018-12-21 17:06     ` Chen-Yu Tsai
2018-12-21 17:06     ` Chen-Yu Tsai
2018-12-21 15:21 ` [PATCH v3 3/9] ASoc: sun4i-i2s: Add 20, 24 and 32 bit support codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 16:48   ` Chen-Yu Tsai
2018-12-21 16:48     ` Chen-Yu Tsai
2018-12-21 16:48     ` Chen-Yu Tsai
2018-12-21 17:15     ` Chen-Yu Tsai
2018-12-21 17:15       ` Chen-Yu Tsai
2018-12-21 17:15       ` Chen-Yu Tsai
2018-12-21 15:21 ` [PATCH v3 4/9] ASoC: sun4i-i2s: Fix offset mask codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 16:54   ` Chen-Yu Tsai
2018-12-21 16:54     ` Chen-Yu Tsai
2018-12-21 16:54     ` Chen-Yu Tsai
2019-01-09 18:50     ` Mark Brown
2019-01-09 18:50       ` Mark Brown
2019-01-09 18:50       ` Mark Brown
2018-12-21 15:21 ` [PATCH v3 5/9] ASoC: sun4i-i2s: Correct divider calculations codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 15:21 ` [PATCH v3 6/9] ASoC: sun4i-i2s: Add multi-lane functionality codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 15:21 ` [PATCH v3 7/9] ASoC: sun4i-i2s: Do not divide clocks when slave codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 15:21 ` [PATCH v3 8/9] ASoC: sun4i-i2s: Add set_tdm_slot functionality codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w
2018-12-21 15:21 ` [PATCH v3 9/9] ASoC: sun4i-i2s: Add multichannel functionality codekipper
2018-12-21 15:21   ` codekipper
2018-12-21 15:21   ` codekipper-Re5JQEeQqe8AvxtiuMwx3w

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DB7PR03MB46813005FFDFC8609F67F111ACB90@DB7PR03MB4681.eurprd03.prod.outlook.com \
    --to=jonas@kwiboo.se \
    --cc=alsa-devel@alsa-project.org \
    --cc=be17068@iperbole.bo.it \
    --cc=broonie@kernel.org \
    --cc=codekipper@gmail.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=maxime.ripard@free-electrons.com \
    --cc=wens@csie.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.