lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 22 Oct 2014 08:33:29 +0000
From:	Peter Rosin <peda@...ntia.se>
To:	Bo Shen <voice.shen@...el.com>
CC:	"'alsa-devel@...a-project.org'" <alsa-devel@...a-project.org>,
	"Takashi Iwai" <tiwai@...e.de>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	Liam Girdwood <lgirdwood@...il.com>,
	"Mark Brown" <broonie@...nel.org>
Subject: RE: [alsa-devel] [PATCH] ASoC: atmel_ssc_dai: Track playback and
 capture CMR dividers separately.

Hi!

> >> 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 try to reproduce it (using the code your pasted directly) on atmel
> sama5d3xek with wm8904 code, don't meet this error.
> 
> I also go through the OSS code, I still don't find this is related with
> atmel_ssc_set_dai_sysclk.
> 
> So, am I missing something or something else?

The sama5d3xek/wm9804 combo, as implemented in the kernel, has the
ssc dai in slave mode, and therefore don't need to fiddle with any
ssc dai dividers (atmel_9804.c :atmel_asoc_wm9804_hw_params() only
sets things in the wm9804 codec dai driver and leaves the ssc dai to itself). 

Instead, try the above code on your code with the ssc dai in master mode
that you pointed at previously.

https://github.com/Android4SAM/linux-at91/commit/33db8ebd3e75632c482dda271340f4d2adcfd320

If that happens to not hit -EBUSY (which it might not, since the wm9804 codec
will only allow stereo, so the SNDCTL_DSP_CHANNELS ioctl might not need
to make any change for any ssc divider) add code to also set a non-default
sample rate, e.g.:

speed = 22050;
if (ioctl(fd, SNDCTL_DSP_SPEED, &speed) == -1) {
	perror("SNDCTL_DSP_SPEED");
	return 1;
}

Cheers,
Peter

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ