Hi!
Hi Peter,
On 10/21/2014 09:05 PM, Peter Rosin wrote:
I did some further tests, and the following program fails without the patch:
With the patch, it is OK?
Yes.
#include <sys/ioctl.h> #include <unistd.h> #include <fcntl.h> #include <sys/soundcard.h>
int main(void) { int fd; int format; int channels;
if ((fd = open("/dev/dsp", O_WRONLY, 0)) == -1) { perror("open"); return 1; } format = AFMT_S16_LE; if (ioctl(fd, SNDCTL_DSP_SETFMT, &format) == -1) { perror("SNDCTL_DSP_SETFMT"); return 1; } channels = 2; if (ioctl(fd, SNDCTL_DSP_CHANNELS, &channels) == -1) { perror("SNDCTL_DSP_CHANNELS"); return 1; } return 0; }
Output: SNDCTL_DSP_CHANNELS: Device or resource busy
This return from codec or from atmel_ssc_dai?
This -EBUSY definitely comes from atmel_ssc_set_dai_sysclk, when my card-driver tries to set ATMEL_SSC_CMR_DIV. With the patch, it works. (the codec is spdif-transmitter, since the i2c interface of the actual tfa9879 codec is not directly reachable from the linux cpu, but that has nothing to do with this issue).
(I admin to having edited the above code slightly in this mail, so I
s/admin/admit/
might have introduced some silly bug, but you get what I mean, just open the device and request some parameters, and boom: -EBUSY)
Cheers, Peter