Commit Graph

30 Commits

Author SHA1 Message Date
jmcneill 4b8daa06de Wow, this is clearly wrong (found in esa_set_params):
if (p->channels < 1 && p->channels > 2)
		return EINVAL;
Change the 'and' to an 'or' so the check actually does something.
2005-10-29 17:44:34 +00:00
thorpej d36c43c511 Use ANSI function decls and static. 2005-06-28 00:28:41 +00:00
kent 93293b9ec7 ansify and KNF 2005-01-15 15:19:51 +00:00
kent 23b5d91433 merge kent-audio1 branch, which introduces audio filter pipeline to the MI
audio framework


Summary of changes:

* struct audio_params
  - remove sw_code, factor, factor_denom, hw_sample_rate,
hw_encoding ,hw_precision, and hw_channels.  Conversion information
is conveyed by stream_filter_list_t.
  - change the type of sample_rate: u_long -> u_int
  - add `validbits,' which represents the valid data size in
precision bits.  It is required in order to distinguish 24/32bit
from 24/24bit or 32/32bit.

* audio_hw_if
 - add two parameters to set_params()
	stream_filter_list_t *pfil, stream_filter_list *rfil
   A HW driver should set filter recipes for requested formats
 - constify audio_params parameters of trigger_output() and
trigger_input().  They represent audio formats for the hardware.
 - make open() and close() optional
 - add int (AUMODE_PLAY or AUMODE_RECORD) and audio_params_t parameters
 to round_blocksize()

* sw_code is replaced with stream_filter_t.
  stream_filer_t converts audio data in an input buffer and writes
into another output buffer unlike sw_code, which converts data in
single buffer.
  converters in dev/auconv.c, dev/mulaw.c, dev/aurateconv.c,
dev/tc/bba.c, dev/ic/msm6258.c, and arch/arm/iomd/vidcaudio.c are
reimplemented as stream_filter_t

* MI audio
 - audiosetinfo() builds filter pipelines from stream_filter_list_t
filled by audio_hw_if::set_params()
 - audiosetinfo() returns with EINVAL if mmapped and set_params()
requests filters
 - audio_write(), audio_pint(), and audio_rint() invoke a filter
pipeline.
 - ioctl() for FIONREAD, AUDIO_WSEEK, AUDIO_GETIOFFS,
AUDIO_GETOOFFS, and audio_prinfo::{seek,samples} for
AUDIO_GETINFO handle values for a buffer nearest to userland.

* add `struct device *' parameter to ac97_attach()

* all of audio HW drivers follow audio_hw_if and ac97 changes
2005-01-10 22:01:36 +00:00
yamt 18f717bb90 constify audio_hw_if, midi_hw_if, and radio_hw_if. 2004-10-29 12:57:15 +00:00
kent 54cf6460d6 ac97_host_if::reset() returns non-zero value if codec reset fails, and
ac97 is not attached in that case.

PR: kern/26973
2004-09-22 12:20:24 +00:00
scw 64daaf41f0 - Don't hardcode buffer size and block size in esa_round_buffersize() and
esa_round_blocksize().
 - Fix esa_trigger_output() and esa_trigger_input() to initialise the
   channel's buffer/block size using the supplied parameters.
 - While here, simplify esa_intr().

This gets kphone working on my esa(4)-equipped laptop.
2004-07-21 07:36:18 +00:00
itojun 6123043789 pass string length (= boundary info) to pci_devinfo so that we do not run over
the end of memory region
2004-04-23 21:13:05 +00:00
christos 125ccd91b1 Fix uninitialized variable warnings 2003-10-25 18:29:12 +00:00
lukem 365cbd9428 add missing __KERNEL_RCSID() 2003-07-14 15:47:00 +00:00
thorpej b193480908 Add extensible malloc types, adapted from FreeBSD. This turns
malloc types into a structure, a pointer to which is passed around,
instead of an int constant.  Allow the limit to be adjusted when the
malloc type is defined, or with a function call, as suggested by
Jonathan Stone.
2003-02-01 06:23:35 +00:00
thorpej 7ec10e2d99 Use aprint_*(). 2003-01-31 00:07:39 +00:00
tsutsui 238efe4697 Replace magic numbers for power management control with PCI_PMCSR* macros.
XXX Should we use pci_get_powerstate() and pci_set_powerstate() in pci.c?
2002-12-23 02:58:36 +00:00
thorpej 9b2c2ec24d Add trailing ; to CFATTACH_DECL. 2002-10-02 16:50:59 +00:00
thorpej 387fc6dc87 Use CFATTACH_DECL(). 2002-09-30 20:37:04 +00:00
thorpej f818766afe Declare all cfattach structures const. 2002-09-27 20:31:45 +00:00
itojun 514ea24105 audit bitmask test mistake (s/&&/&/). from openbsd 2002-08-08 15:08:55 +00:00
jmcneill 419bcc2917 Fix the mixer controls to work a bit better. 2002-06-02 18:33:06 +00:00
jmcneill 2000b295ed Fix suspend/resume. Previously, suspending/resuming while playback was active
would either:

 1. Cause the machine to stop responding, or
 2. Cause the currently playing voices to stop output.

With this change, voices are stopped on suspend, and continue from where they
left off on resume.
2002-03-24 14:17:35 +00:00
jmcneill 9bcb29f652 Add multiple voice support to the ESS Allegro-1 / Maestro-3 family of
audio accelerators.

Mixing is done in hardware by the ASSP, but is limited to 4 simultaneous
channels due to the restricted "minisrc" image that we are currently
working with.

Due to limitations in the audio subsystem, I'm currently attaching multiple
'audio' devices to 'esa', one for each voice. Because of this hack, the
default ESA_NUM_VOICES is 1.
2002-03-16 14:34:00 +00:00
jmcneill 023d9c6eb8 Correctly enable/disable the low-pass filter, depending on the sample rate.
This fixes timing issues when playing back at 48kHz (noticable using
pkgsrc/graphics/mplayer and DivX ;-) streams).
2002-03-10 14:57:31 +00:00
joda b57f5ccbca in esa_resume, call esa_codec_reset; makes it much more happy after a
suspend on my O500 (snatched from FreeBSD)
2002-02-26 11:05:05 +00:00
pooka 7eb7ad4b7e free memory allocated for suspend save area in detach 2002-01-23 11:27:59 +00:00
pooka 09dfdacac8 Use standard PCI power management definitions from pcireg.h instead
of homegrown ones.

suggested by Soren
2002-01-14 19:24:39 +00:00
jmcneill e52f30dc7a Every card I've seen has had their channels swapped with respect
to the mixer. Ie:
 $ mixerctl -w outputs.master=0,191
Would result in the _right_ speaker being turned off.

So, we will swap the left and right mixer channels to compensate
for this.
2002-01-13 15:07:28 +00:00
jmcneill 4d4665161a Use malloc's M_ZERO flag instead of malloc/memset. 2002-01-13 14:44:15 +00:00
pooka 284103af4a Add support for the driver to work after suspend/resume. Does nothing
fancy, works for the basic output case, but does not support programs
which use playback while going into suspend.

Sketched after code found in FreeBSD and Linux drivers.
2002-01-13 10:06:51 +00:00
jmcneill 311329a369 Integrate recording support into the driver. Not very heavily tested yet. 2002-01-07 07:33:09 +00:00
augustss f0b744e0cf Note that Don Kim wrote the original Linux driver. 2002-01-06 16:58:23 +00:00
jmcneill 244caf0f16 Import driver for the ESS Allegro-1 / Maestro-3 based PCI Audio Accelerators. 2002-01-06 16:06:14 +00:00