Other Parts Discussed in Thread: TLV320AIC3106
Hi Processor Team,
My customer is using the AM3352 and is running into issues programming the DISMOD in the McASP. From the customer:
We have an application where we're talking to a ulaw codec. As such, when the McASP transmitter is not actively transmitting something, I need the line pulled high because "zero" in ulaw is actually 0xFF.
According to the TRM, there are a few bits that can alter the behaviour, namely DISMOD:
Serializer pin drive mode bit.
Drive on pin when in inactive TDM slot of transmit mode or when serializer is inactive.
This field only applies if the pin is configured as a McASP pin (PFUNC = 0).
0h = Drive on pin is 3-state.
1h = Reserved.
2h = Drive on pin is logic low.
3h = Drive on pin is logic high.
I've tried changing this line in the kernel driver davinci-mcasp.c
from:
mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
DISMOD_LOW, DISMOD_MASK);
to:
mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
DISMOD_HIGH, DISMOD_MASK);
And I can see the bit change in the register with this print:
printk("[customer] %s: %p=%08x\n", __func__,
mcasp->base + DAVINCI_MCASP_XRSRCTL_REG(i),
__raw_readl((void *)(mcasp->base +
DAVINCI_MCASP_XRSRCTL_REG(i))));
from:
[ 62.521870] [customer] mcasp_common_hw_param: fa03818c=00000019
to:
[ 63.190781] [customer] mcasp_common_hw_param: fa03818c=0000001d
suggesting that the change has been applied, but the behaviour on the line doesn't actually change.
The pin is actually being driven low all the time because I can't pull it up with a resistor even when I've set the serialiser to tri-state:
[ 53.521545] [customer] mcasp_common_hw_param: fa03818c=00000011
Can anyone at TI confirm that this features does, in fact, work?
Please let me know if there are any questions.
Regards,
~John