On Fri, Sep 04, 2026 at 10:22:18AM +0200, Konrad Dybcio wrote:
> On 9/3/26 8:26 PM, David Heidelberg via B4 Relay wrote:
> > From: David Heidelberg <[email protected]>
> > 
> > Program the ASP RX and TX slot registers from the TDM masks passed by
> > the machine driver. Each set bit in a mask names a slot; codec channels
> > are assigned to those slots in order, ASPRX1 taking the first RX slot
> > and ASPTX1..TX8 the first eight TX slots, with a warning if the mask
> > names more slots than the device has channels.
> > 
> > Passing slots == 0 or an empty mask restores the hardware defaults,
> > ASPRX1 in slot 0 and ASPTX1..TX8 in slots 0..7.
> > 
> > This lets a machine driver with several amplifiers on one bus, such as
> > sdm845 with two CS35L36, put each amplifier on its own RX slot and keep
> > their TX slots from colliding.
> > 
> > Assisted-by: Claude:claude-4.6-opus
> > Signed-off-by: David Heidelberg <[email protected]>
> > ---
> 
> [...]
> 
> > +static int cs35l36_set_tdm_slot(struct snd_soc_dai *dai,
> > +                           unsigned int tx_mask, unsigned int rx_mask,
> > +                           int slots, int slot_width)
> > +{
> > +   struct cs35l36_private *cs35l36 =
> > +                   snd_soc_component_get_drvdata(dai->component);
> > +
> > +   /* Note: rx/tx is from point of view of the CPU end */
> > +   if (!slots || !rx_mask)
> > +           rx_mask = BIT(0);               /* ASPRX1 in slot 0 */
> > +
> > +   if (!slots || !tx_mask)
> > +           tx_mask = GENMASK(7, 0);        /* ASPTX1..8 in slots 0..7 */
> > +
> > +   cs35l36_mask_to_slots(cs35l36, rx_mask, CS35L36_ASP_RX1_SLOT, 1);
> 
> GPT says:
> 
> Findings
> 1. High: patch 5 makes the TDM RX slot compete with the codec’s Input Mux 
> control.  
> cs35l36_set_tdm_slot() programs CS35L36_ASP_RX1_SLOT with a
> six-bit TDM slot value in patch 5. That register’s bit 0 is
> already exposed as the Input Mux DAPM control:
> - sound/soc/codecs/cs35l36.c:588 defines the control from 
> CS35L36_ASP_RX1_SLOT, shift 0.
> - sound/soc/codecs/cs35l36.c:583-586 defines its values as RX1 and RX2.

This is a fair point, although I am inclined to say that using an
ALSA control for this is definitely not a good thing to do. I would
be tempted to say just remove the alsa control, now we have a
proper TDM callback. But probably also fine to ignore the control
for now. It only becomes a problem if user-space starts tweaking
the control and to some extent that is on the person changing the
control.

Thanks,
Charles

Reply via email to