Commit Graph

268 Commits

Author SHA1 Message Date
Clemens Ladisch 345c03ef0f sound: oxygen: reset DMA when stream is closed
When a PCM stream is closed, flush the corresponding DMA channel.
Otherwise, the DMA controller would continue to output the last sample
which would result in a DC offset on the output.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-05-25 11:49:30 +02:00
Clemens Ladisch 873591db59 sound: oxygen: enable headphone output on Claro cards
On the HT-Omega Claro (halo) sound cards, the headphone amplifier must
be enabled explicitly by setting a GPIO bit.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-03-09 09:45:11 +01:00
Clemens Ladisch 82af308f65 sound: oxygen: zero-initialize model data
Model drivers assume that model_data is zeroed, so we better use
kzalloc() (like we did before when it was allocated together with the
card structure).

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-27 17:32:21 +01:00
Clemens Ladisch 930738de60 sound: virtuoso: add Xonar Essence STX support
Add support for the Asus Xonar Essence STX sound card.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-26 09:39:08 +01:00
Clemens Ladisch eacbb9dba6 sound: virtuoso: increase minimum volume to -60 dB
Use -60 dB as the minimum value of the master volume mixer control.
While the DACs would support ranges down to about -120 dB, such
attenuations are not useful in practice.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-20 11:14:25 +01:00
Clemens Ladisch d91b424d6d sound: oxygen: handle AK5385 ADC on Claro halo cards
The HT-Omega Claro halo's ADC is an AK5385 instead of a WM8785, so we
should handle the ADC parameters as we do with the X-Meridian.

Using the code for the wrong ADC does not seem to have any audible
effects, and the Windows driver does it, but it is nonetheless a good
idea to run the AK5385 with an oversampling ratio that is not outside
the documented limits.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-20 11:14:09 +01:00
Clemens Ladisch 1275d6f608 sound: oxygen: automatically restore overwritten EEPROM
If the EEPROM was partially overwritten (which seems to happen before the OS is
booted), restore its entire contents by deducing it from the remaining
information.

This does not have any effect on the Linux driver, which works even with
incomplete information in the EEPROM, but it makes other drivers work again.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-19 10:22:26 +01:00
Clemens Ladisch 30459d7b18 sound: oxygen: handle cards with broken EEPROM
Under as yet unknown circumstances, the first word of the sound card's
EEPROM gets overwritten.  When this has happened, we cannot rely on the
subsystem IDs that the kernel reads from the PCI configuration
registers.  Instead, we read the IDs directly from the EEPROM and do the
ID matching manually.

Because the model-specific driver cannot determine the model before
calling oxygen_pci_probe(), that function now gets a get_model()
callback as parameter.  The customizing of the model structure, which
was formerly done by the probe() callback, also has moved into
get_model().

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-19 10:22:25 +01:00
Clemens Ladisch a69bb3c3fe sound: oxygen: use static driver name
When allocating resources, use a fixed name instead of reading it from
the model structure.  This allows us to allocate the resources before
the actual model is known.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-19 10:22:24 +01:00
Clemens Ladisch 6ed9115709 sound: oxygen: allocate model_data dynamically
Allocate the model-specific data dynamically instead of including it in
the memory block of the card structure.  This will allow us to determine
the actual model after the card creation.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-19 10:22:23 +01:00
Clemens Ladisch bb71858853 sound: oxygen: make the owner module a parameter of the probe function
Move the owner field out of the oxygen_model structure and make it
a parameter of oxygen_pci_probe(), because the actual owner module does
not depend on the card model.  Furthermore, moving it out of the model
structure allows us to create the card structure before the actual model
is known.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-19 10:22:22 +01:00
Takashi Iwai a5e0e970c0 Merge branch 'topic/snd_card_new-err' into topic/oxygen 2009-02-19 10:22:14 +01:00
Clemens Ladisch 6ce6c473a7 sound: virtuoso: revert "do not overwrite EEPROM on Xonar D2/D2X"
This reverts commit 7e86c0e685 ("do not
overwrite EEPROM on Xonar D2/D2X") because it did not actually help with
the problem.

More user reports show that the overwriting of the EEPROM is not
triggered by using this driver but by installing Linux, and that the
installation of any other operating system (even one without any CMI8788
driver) has the same effect.  In other words, the presence of this
driver does not have any effect on the occurrence of the error.  (So
far, the available evidence seems to point to a BIOS bug.)

Furthermore, it turns out that the EEPROM chip is protected against
stray write commands by the command format and by requiring a separate
write-enable command, so the error scenario in the previous commit (that
SPI writes can be misinterpreted as an EEPROM write command) is not even
theoretically possible.

The mixer control that was removed as a consequence of the previous
commit can only be partially emulated in userspace, which also means it
cannot be seen be the in-kernel OSS API emulation, so it is better to
revert that change.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-02-19 10:15:39 +01:00
Clemens Ladisch 45bf810113 sound: virtuoso: add newline
Add a missing newline.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-01-19 14:07:36 +01:00
Clemens Ladisch 22c733788b sound: virtuoso: enable UART on Xonar HDAV1.3
This hardware has a better chance of working correctly if we don't
forget to enable it.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-01-19 14:07:21 +01:00
Clemens Ladisch 7e86c0e685 sound: virtuoso: do not overwrite EEPROM on Xonar D2/D2X
On the Asus Xonar D2 and D2X models, the SPI chip select signal for the
fourth DAC shares its pin with the serial clock for the EEPROM that
contains the PCI subdevice ID values.  It appears that when DAC
registers are written and some other unknown conditions occur (probably
noise on the EEPROM's chip select line), the EEPROM gets overwritten
with garbage, which makes it impossible to properly detect the card
later.

Therefore, we better avoid DAC register writes and make sure that the
driver works with the DAC's registers' default values.  Consequently,
the sample format is now I2S instead of left-justified (no user-visible
change), and the DAC's volume/mute registers cannot be used anymore
(volume changes are now done by the software volume plugin).

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-01-15 10:30:20 +01:00
Takashi Iwai e58de7baf7 ALSA: Convert to snd_card_create() in sound/pci/*
Convert from snd_card_new() to the new snd_card_create() function
in sound/pci/*.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-01-12 15:20:55 +01:00
Clemens Ladisch de04b102bf ALSA: oxygen: add Claro halo support
Add support for the HT-Omega Claro halo (XT).

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-11-28 14:49:54 +01:00
Clemens Ladisch cdad5b8db9 ALSA: oxygen: wait for ACK when resetting UART
After sending a reset command to the UART, wait some time for the ACK to
be generated (and to be read and dropped by the interrupt handler)
before sending the next command.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-24 15:25:28 +02:00
Clemens Ladisch 7407a2e4b9 ALSA: virtuoso: add Xonar HDAV1.3 support
Add support for the Asus Xonar HDAV1.3 and the Xonar HDAV1.3 Deluxe.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:12:11 +02:00
Clemens Ladisch 79c50e23d4 ALSA: oxygen: rename first PCM device
Rename the first PCM device from "Analog" to "Multichannel" because it
can be used for HDMI output on the Xonar HDAV.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:07:53 +02:00
Clemens Ladisch c871c4a83a ALSA: virtuoso: rename AC97 callback function
Rename the callback function that switches between line and mic inputs
on the Xonar D1 because it is also usable on other models.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:07:20 +02:00
Clemens Ladisch 70c27d345e ALSA: virtuoso: make number of PCM1796 DACs configurable
Do not use a hardcoded number when iterating over the PCM1796 DACs to
allow for cards with a different number of analog output channels.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:06:38 +02:00
Clemens Ladisch 4f50d2fd00 ALSA: virtuoso: allow I2C-connected PCM1796
Add support for PCM1796 chips that are connected with an I2C bus instead
of SPI.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:06:04 +02:00
Clemens Ladisch c2bc4ff58d ALSA: oxygen: add self-documenting functions
Introduce some trivial functions to better document the relationships of
the various model callbacks.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:05:29 +02:00
Clemens Ladisch 397b1dcc44 ALSA: oxygen: add UART I/O functions
Add functions to allow model drivers to communicate with external chips
by doing I/O with the not-used-for-MIDI UART.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:04:43 +02:00
Clemens Ladisch dbbbd67444 ALSA: oxygen: configure MIDI via device_config
To enable the MIDI port, model drivers must now set flags in
device_config, not only in misc_flags.  This allows model drivers to
enable the UART without creating an ALSA MIDI device.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:03:42 +02:00
Clemens Ladisch d76596b1ee ALSA: oxygen: rename pcm_dev_cfg
Rename the pcm_dev_cfg field to device_config because there will be
additional flags that do not describe PCM devices.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:02:08 +02:00
Clemens Ladisch c3f00739c5 ALSA: virtuoso: create common functions for GPIO bit switch controls
Factor out the common code of the mixer callbacks that handle controls
that just switch a single GPIO bit.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:01:11 +02:00
Clemens Ladisch fe10662c3c ALSA: virtuoso: handle D2X/DX dynamically
The Xonar D2X and DX are very similar to the D2 and D1, respectively, so
we can handle the differences dynamically instead of using a separate
model structure for each one.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 09:00:30 +02:00
Clemens Ladisch 4bd0c3a690 ALSA: oxygen: handle X-Meridian dynamically
Handle the differences between the X-Meridian and the other models in
the probe callback instead of using a second model structure.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 08:59:18 +02:00
Clemens Ladisch 2f1b0ec715 ALSA: oxygen: remove X-Meridian magic number
Introduce symbols that indicate the two models handled by the snd-oxygen
driver, instead of using a magic number.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 08:57:24 +02:00
Clemens Ladisch 568c59e722 ALSA: oxygen: add probe callback
Add a probe callback to the model structure so that model-specific
drivers can refine their model detection before the card is initialized.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 08:56:01 +02:00
Clemens Ladisch 9bd6a73aef ALSA: oxygen: use a copy of the model struct
Put a copy of the model structure into the chip structure so that model-
specific drivers can modify it depending on a particular device
instance.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 08:55:19 +02:00
Clemens Ladisch 6627bea10e ALSA: oxygen: use SPDIF channel status symbols
When setting the SPDIF channel status sample rate field, use the
recently defined symbols instead of magic numbers.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2008-09-22 08:53:31 +02:00
Clemens Ladisch df91bc23dc ALSA: oxygen: fix distorted output on AK4396-based cards
When changing the sample rate, the CMI8788's master clock output becomes
unstable for a short time.  The AK4396 needs the master clock to do SPI
writes, so writing to an AK4396 control register directly after a sample
rate change will garble the value.  In our case, this leads to the DACs
being misconfigured to I2S sample format, which results in a wrong
output level and horrible distortions on samples louder than -6 dB.

To fix this, we need to wait until the new master clock signal has
become stable before doing SPI writes.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-08-29 14:15:19 +02:00
Clemens Ladisch 3d839e5b87 ALSA: oxygen: prevent muting of nonexistent AC97 controls
The Xonar DX does not have CD Capture controls, so we have to check that
a control actually exists before muting it.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Cc: <stable@kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-08-26 12:43:13 +02:00
Clemens Ladisch 5430c72b14 ALSA: virtuoso: add Xonar D1 support
Add support for the Asus Xonar D1.  It is the same as the DX, but
without the external power detection.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-08-14 10:44:13 +02:00
Clemens Ladisch ca1f30ad6c [ALSA] virtuoso: restrict period time to less than 10 s
Add a constraint for the period time so that there are less than ten
seconds between interrupts so that ALSA does not assume that the device
is dead.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:17 +02:00
Clemens Ladisch d55d7a1cbb [ALSA] oxygen: add symbols for buffer/period size constraints
Introduce symbols for the buffer/period size constraints so that their
limits and relationships become clearer.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:17 +02:00
Clemens Ladisch 4a4bc53bc5 [ALSA] oxygen: add PM support
Add suspend/resume support.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:17 +02:00
Clemens Ladisch 92215f3a17 [ALSA] virtuoso: add xonar_enable_output()
Move the setting of the output enable GPIO bit to a separate function.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:17 +02:00
Clemens Ladisch 75146fc0f9 [ALSA] oxygen: separate out hardware initialization code
Create separate functions for the code that initializes the hardware, as
opposed to initializing internal driver state, so that they can be
reused for resume support.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:17 +02:00
Clemens Ladisch bbbfb55266 [ALSA] oxygen: simplify DAC volume initialization
When initializing the DAC volume registers, we can just use the generic
volume update functions instead of setting the registers manually.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:16 +02:00
Clemens Ladisch e58aee9580 [ALSA] oxygen: save register writes
Save the written values of all CMI8788 and AC97 registers and of some of
the DAC/ADC registers so that it is possible to restore the register
state later.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:16 +02:00
Clemens Ladisch c13650079b [ALSA] oxygen: add symbol for I/O space size
Remove another magic number - add a symbol for the size of the PCI I/O
range.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:15 +02:00
Clemens Ladisch d023dc0aa2 [ALSA] oxygen: fix version in MODULE_LICENSE
Adjust the MODULE_LICENSE strings to properly reflect the actual license.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-05-19 13:19:15 +02:00
Clemens Ladisch 9f9115d880 sound: oxygen: fix NULL pointer dereference when loading snd-oxygen
Check that model->control_filter is set before trying to call it.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-16 15:16:11 +02:00
Jeff Garzik f000fd8093 [ALSA] Fix synchronize_irq() bugs, redundancies
free_irq() calls synchronize_irq() for you, so there is no need for
drivers to manually do the same thing (again).  Thus, calls where
sync-irq immediately precedes free-irq can be simplified.

However, during this audit several bugs were noticed, where free-irq is
preceded by a "irq >= 0" check... but the sync-irq call is not covered
by the same check.

So, where sync-irq could not be eliminated completely, the missing check
was added.

Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:40 +02:00
Clemens Ladisch 4972a177fe [ALSA] oxygen: generalize DAC volume TLV handling
Add a pointer for DAC volume TLV data to the model structure so that the
model driver do not need to manually assign it in their control filter.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:37 +02:00
Clemens Ladisch e983532e44 [ALSA] oxygen: mute by default
Initialize the playback volume controls as being muted and having
minimal volume.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:37 +02:00
Clemens Ladisch 193e813814 [ALSA] oxygen: generalize handling of DAC volume limits
Add fields for the DAC volume limits to the module structure so that
model drivers do not need to install their own control info handlers.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:36 +02:00
Clemens Ladisch 0c0e6daf14 [ALSA] hifier: remove empty hifier_mixer_init()
The empty hifier_mixer_init() function is useless; remove it.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:36 +02:00
Clemens Ladisch a8bb1bad9b [ALSA] virtuoso: fix DX front panel I/O
Fix the GPIO 1 mixer control to enable I/O through the front panel
connector of the Xonar DX.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:36 +02:00
Clemens Ladisch 80060ecc45 [ALSA] virtuoso: initialize two-wire control register
On the Xonar DX, initialize all bits of the two-wire control register.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch 387fb6a206 [ALSA] virtuoso: add GPIO 1 mixer control
Add a mixer control for switching whatever it is that is connected to
GPIO pin 1 on the Xonar DX.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch 1d98c7d4be [ALSA] oxygen: use SPDIF input only if present
If the card model does not have a digital input or an AC97 codec,
disable the respective interrupt and mixer controls.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch 11864b4b84 [ALSA] virtuoso: correctly switch input jack on Xonar DX
When selecting the capture source on the Xonar DX, the input jack must
be routed to either the line input or the microphone input by setting a
GPIO pin.  This requires an additional callback so that the model driver
can hook into the toggling of AC97 switches.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch a9d3cc485e [ALSA] virtuoso: add Xonar DX support
Add support for the Asus Xonar DX.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch 80647ee26e [ALSA] virtuoso: fix typo
Fix a (fortunately harmless) typo.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch aef1a535c4 [ALSA] virtuoso: change card short name
Change the card short name to show to show the card name instead of the
chip name.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:32 +02:00
Clemens Ladisch d08267a9df [ALSA] virtuoso: set PCM1796 oversampling rate
When playing data at 96 kHz or higher, reduce the DAC oversampling rate
to 32.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:31 +02:00
Clemens Ladisch af9af1741f [ALSA] virtuoso: move some code to xonar_common_init()
Move the code that is common to all Xonar models to a separate function,
and make it more generic in preparation for another model.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:31 +02:00
Clemens Ladisch a694a6a0e4 [ALSA] virtuoso: allow both CS5381 and CS5361
Rename all CS5381 symbols to CS53x1 because they can also be used for
Xonar models with a CS5361.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:31 +02:00
Clemens Ladisch 271ebfca58 [ALSA] virtuoso: separate D2/D2X init functions
Use separate model structures for the D2 and D2X so that the init
function does not have to check for the model again.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:31 +02:00
Clemens Ladisch 10e6d5f9b6 [ALSA] oxygen: add I2C support
Add a function to write I2C registers.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:31 +02:00
Clemens Ladisch e97f79994a [ALSA] oxygen: fix line-in recording selection (now for real)
On C-Media cards, the GPIO pin 0 of the CM9780 must be handled exactly
like on Xonar cards, so move the Xonar code to the common mixer code.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:30 +02:00
Clemens Ladisch 43dd89c7e7 [ALSA] oxygen: disable clock of unused I2S inputs
Disable the master clock outputs of any unused I2S inputs.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:28 +02:00
Clemens Ladisch db12b8e301 [ALSA] oxygen: move MIDI flag to model struct
Put the flag that enables the MIDI port into the model structure instead
of passing it as a separate parameter to oxygen_pci_probe().

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:28 +02:00
Clemens Ladisch 87eedd2fd4 [ALSA] oxygen: make SPI/2-wire configuration model-specific
Allow the model drivers to specify if the codec communication goes over
SPI or a 2-wire bus.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:28 +02:00
Clemens Ladisch f009ad9b39 [ALSA] oxygen: change model-specific PCM device configuration
When specifying which PCM devices to use, model drivers now use flags
that also specify the routing between PCM devices and DMA channels
instead of just DMA channel bits.  This simplifies some code that checks
for these flags.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:28 +02:00
Clemens Ladisch fa5d8106cb [ALSA] oxygen: add monitor controls
Add controls to enable monitoring of the analog and digital inputs.

To allow monitoring after loading the driver when nothing has been
played back or recorded yet, the I2S input and outputs are initialized
to a valid configuration.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:27 +02:00
Clemens Ladisch 33fa724e29 [ALSA] virtuoso: move PCM1796 symbols to a header file
Move the PCM1796 register symbol definitions to their own header file.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:27 +02:00
Clemens Ladisch f5b2368ba8 [ALSA] oxygen: move WM8785 symbols to a header file
Move the WM8786 register symbol definitions to their own header file.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:27 +02:00
Harvey Harrison ff143874d0 [ALSA] sound: virtuoso.c fix shadowed variable warning
Use priv_idx as an identifier.
sound/pci/oxygen/virtuoso.c:277:15: warning: symbol 'index' shadows an earlier one
sound/pci/oxygen/virtuoso.c:56:12: originally declared here

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-04-24 12:00:18 +02:00
Clemens Ladisch b930b9f41d [ALSA] oxygen: add owner field
I forgot to set the module owner for the HiFier/Xonar models.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-02-29 11:28:16 +01:00
Clemens Ladisch 902b05c117 [ALSA] oxygen: fix line-in recording selection
The GPIO pin 0 of the CM9780 must be set when muting the line input even
on non-Xonar cards.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-22 14:20:08 -08:00
Takashi Iwai f007dc045a [ALSA] oxygen - Fix section mismatch
Removed invalid __devinit and __devexit that are remaining after
split to a helper module.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-22 14:20:08 -08:00
Clemens Ladisch 2ea85986dd [ALSA] oxygen: revert SPI clock frequency change for AK4396/WM8785
While the AK4396 and WM8785 datasheets say that the SPI clock cycle
length must be at least 200 ns, 320 ns seems not to work reliably with
the controller, so we better use 160 ns.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:23 +01:00
Clemens Ladisch 7c0141591f [ALSA] virtuoso: monitor external power on D2X
On the Xonar D2X, monitor the GPIO pin that indicates whether external
power is present.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:18 +01:00
Clemens Ladisch 5f7b9b4577 [ALSA] oxygen: add front panel capture
When a second AC97 codec is present, add a PCM device for capturing from
the front panel.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:17 +01:00
Clemens Ladisch a360156049 [ALSA] oxygen: add front panel controls
Add mixer controls for the front panel AC97 codec.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:17 +01:00
Clemens Ladisch 1e821dd276 [ALSA] oxygen: use AC97 interrupt
After an AC97 register read or write, use the AC97 interrupt instead of
polling to wait for the access to be completed.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:17 +01:00
Clemens Ladisch 911b499af4 [ALSA] oxygen: make line-in exclusive only on Xonar
Move the line input switching code to the Virtuoso driver because only
the Xonar cards bypass the analog mixer for line input.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:17 +01:00
Clemens Ladisch 236c4920ea [ALSA] oxygen: fix AK4396 double rate upper limit
Fix the upper sample rate limit for the double rate mode of the AK4396
to the value from the datasheet.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:16 +01:00
Clemens Ladisch c626026dd7 [ALSA] add TempoTec HiFier driver
Add a driver for the MediaTek/TempoTec HiFier Fantasia sound card.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:15 +01:00
Clemens Ladisch b78e3dbb04 [ALSA] oxygen: more initialization
Initialize more registers of the controller and the second AC97 codec.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:15 +01:00
Clemens Ladisch 976cd62700 [ALSA] oxygen: make the number of analog output configurable
Add a field to struct oxygen_model to allow model drivers for cards with
less than eight output channels.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:14 +01:00
Clemens Ladisch cd93dc8cca [ALSA] oxygen: remove MIDI for generic cards
None of the reference design models have MIDI, only the X-Meridian
allows to connect a MIDI adapter.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:13 +01:00
Clemens Ladisch 33c646e4ff [ALSA] oxygen: fix SPDIF input rates
Fix up SPDIF input sample rates again: 32 kHz and 64 kHz are not
supported.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:13 +01:00
Clemens Ladisch 02f21c9d6b [ALSA] oxygen: add SPDIF loopback control
Add a mixer control for the SPDIF loopback function.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:09 +01:00
Clemens Ladisch c57cccc038 [ALSA] oxygen: optimize snd_pcm_hardware structures
Add one more indirection to the lookup of the snd_pcm_hardware
structures so that we can save the space of the duplicate ones.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:08 +01:00
Clemens Ladisch 7f0b89465b [ALSA] oxygen: add 192 kHz SPDIF input support
Change the oxygen_spdif_input_bits_changed() function so that clock
changes on the SPDIF input are correctly detected.  This means that
sample rates greater than 96 kHz are now supported.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:08 +01:00
Clemens Ladisch 5a256f862c [ALSA] oxygen: fix DAC source register fields
Fix some wrong values for the definitions of the source masks for DACS 1
and 3.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:08 +01:00
Clemens Ladisch e9d88a8bd9 [ALSA] oxygen: fix control filter
Actually use the template that was maybe changed by the control filter
instead of the original one.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:08 +01:00
Clemens Ladisch 7ef37cd954 [ALSA] oxygen: move model-specific data out of common header
Instead of having model-specific fields in the common struct oxygen, put
them into a private structure that is allocated together with the card
structure.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:08 +01:00
Clemens Ladisch 3b94253bc9 [ALSA] oxygen: reduce SPI clock frequency for AK4396/WM8785
According to the datasheets, the SPI clock cycle must be at least 200 ns
for the AK4396 and the WM8785, so we cannot use the default 160 ns.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:07 +01:00
Clemens Ladisch 71e22a4b77 [ALSA] oxygen: allow more sample rates with WM8785
Allow to record with 32 kHz, 64 kHz, 88.2 kHz and 176.4 kHz with cards
that have a WM8785 ADC.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:07 +01:00
Clemens Ladisch 878ac3ee76 [ALSA] oxygen: add more symbols
Add symbol definitions for the various codecs and GPIO pins.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:07 +01:00
Clemens Ladisch 44fb7aae82 [ALSA] oxygen: remove MIDI autodetection
The MIDI bit in the MISC register is set by default and cannot be used
to detect the presence of a MIDI port.  Instead, add a parameter to the
oxygen_pci_probe() function so that model drivers can specify this.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:06 +01:00
Clemens Ladisch db2396d495 [ALSA] oxygen: fix pause handling
Use the DMA_PAUSE register for pausing instead of stopping DMA.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:06 +01:00
Clemens Ladisch c9946b2c80 [ALSA] oxygen: remove magic numbers
Replace some magic numbers with register symbols.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:05 +01:00
Clemens Ladisch e005954934 [ALSA] oxygen: fix playback routing
The default playback routing must be 0xe4, not 0xe1; the front and
surround DACs were exchanged.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:04 +01:00
Clemens Ladisch c2353a0826 [ALSA] oxygen: add register definitions
Add more symbols for registers and register fields.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:04 +01:00
Clemens Ladisch 05855ba3f4 [ALSA] oxygen: make the I2S format configurable
Add proper register bit symbols for the I2S format field, and allow card
models to configure the I2S format to be used for the DACs and ADCs.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:03 +01:00
Clemens Ladisch 747c6016ce [ALSA] oxygen: make PCM limits configurable
Add a callback to the model structure to allow modification of the
hardware PCM limits.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:00 +01:00
Clemens Ladisch ccc80fb467 [ALSA] oxygen: add control filter to model struct
Allow the models to modify mixer controls before they are added to the
card.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:00 +01:00
Clemens Ladisch e85e09250a [ALSA] oxygen: make all DMA channels configurable
Allow the card models to specify whether each of the hardware DMA
channels is used.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:30:00 +01:00
Clemens Ladisch 84aa6b7ba7 [ALSA] oxygen: make SPI configuration configurable
Add a field to the model structure so that it is possible to have a card
where the SPI outputs 4 and 5 are used for an EEPROM.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:59 +01:00
Clemens Ladisch 31c77643a0 [ALSA] oxygen: make AC97 codec optional
Only initialize and create mixer controls for the first AC97 codec when
one has actually been detected.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:59 +01:00
Clemens Ladisch fb920b7d8b [ALSA] oxygen: rename PCM to Master
Rename the 'PCM Playback Volume'/'Switch' mixer controls to 'Master'.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:58 +01:00
Clemens Ladisch 893e44ba5a [ALSA] oxygen: make line-in switch exclusive
The line input cannot be mixed with the other inputs, so we have to mute
the other input switches when it is selected.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:57 +01:00
Clemens Ladisch 01a3affb2e [ALSA] oxygen: use an array of snd_kcontrol pointers
Use an array for the pointers to known controls so that it is easier to
add more.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:57 +01:00
Clemens Ladisch 7113e95812 [ALSA] oxygen: fix channel routing
Do not exchange the surround and back jacks except when in 7.1 mode
where the surround jack is not rear but side.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:56 +01:00
Takashi Iwai 9004acc70e [ALSA] Remove sound/driver.h
This header file exists only for some hacks to adapt alsa-driver
tree.  It's useless for building in the kernel.  Let's move a few
lines in it to sound/core.h and remove it.
With this patch, sound/driver.h isn't removed but has just a single
compile warning to include it.  This should be really killed in
future.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:48 +01:00
Clemens Ladisch 740eb8358f [ALSA] oxygen: use uintptr_t in pointer casts
When we store the DMA channel number in the substream's private_data
pointer, use uintptr_t as an intermediate step when casting from/to
unsigned int to prevent the compiler from whining when the pointer size
is different.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:44 +01:00
Clemens Ladisch 1b8ff22fa8 [ALSA] add Asus Xonar driver
Add the snd-virtuoso driver for the Asus Virtuoso 200 chip used on the
PCI and PCI-E models of the Xonar sound card.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:44 +01:00
Clemens Ladisch d0ce9946c5 [ALSA] add CMI8788 driver
Add the snd-oxygen driver for the C-Media CMI8788 (Oxygen) chip, used on
the Asound A-8788, AuzenTech X-Meridian, Bgears b-Enspirer,
Club3D Theatron DTS, HT-Omega Claro, Razer Barracuda AC-1,
Sondigo Inferno, and TempoTec HIFIER sound cards.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-01-31 17:29:44 +01:00