Linux Audio

Check our new training course

Loading...
v3.1
 
   1/* Analog Devices 1889 audio driver
   2 *
   3 * This is a driver for the AD1889 PCI audio chipset found
   4 * on the HP PA-RISC [BCJ]-xxx0 workstations.
   5 *
   6 * Copyright (C) 2004-2005, Kyle McMartin <kyle@parisc-linux.org>
   7 * Copyright (C) 2005, Thibaut Varene <varenet@parisc-linux.org>
   8 *   Based on the OSS AD1889 driver by Randolph Chung <tausq@debian.org>
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License, version 2, as
  12 * published by the Free Software Foundation.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  17 * GNU General Public License for more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program; if not, write to the Free Software
  21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22 *
  23 * TODO:
  24 *	Do we need to take care of CCS register?
  25 *	Maybe we could use finer grained locking (separate locks for pb/cap)?
  26 * Wishlist:
  27 *	Control Interface (mixer) support
  28 *	Better AC97 support (VSR...)?
  29 *	PM support
  30 *	MIDI support
  31 *	Game Port support
  32 *	SG DMA support (this will need *a lot* of work)
  33 */
  34
  35#include <linux/init.h>
  36#include <linux/pci.h>
  37#include <linux/dma-mapping.h>
  38#include <linux/slab.h>
  39#include <linux/interrupt.h>
  40#include <linux/compiler.h>
  41#include <linux/delay.h>
 
 
  42
  43#include <sound/core.h>
  44#include <sound/pcm.h>
  45#include <sound/initval.h>
  46#include <sound/ac97_codec.h>
  47
  48#include <asm/io.h>
  49
  50#include "ad1889.h"
  51#include "ac97/ac97_id.h"
  52
  53#define	AD1889_DRVVER	"Version: 1.7"
  54
  55MODULE_AUTHOR("Kyle McMartin <kyle@parisc-linux.org>, Thibaut Varene <t-bone@parisc-linux.org>");
  56MODULE_DESCRIPTION("Analog Devices AD1889 ALSA sound driver");
  57MODULE_LICENSE("GPL");
  58MODULE_SUPPORTED_DEVICE("{{Analog Devices,AD1889}}");
  59
  60static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
  61module_param_array(index, int, NULL, 0444);
  62MODULE_PARM_DESC(index, "Index value for the AD1889 soundcard.");
  63
  64static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
  65module_param_array(id, charp, NULL, 0444);
  66MODULE_PARM_DESC(id, "ID string for the AD1889 soundcard.");
  67
  68static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
  69module_param_array(enable, bool, NULL, 0444);
  70MODULE_PARM_DESC(enable, "Enable AD1889 soundcard.");
  71
  72static char *ac97_quirk[SNDRV_CARDS];
  73module_param_array(ac97_quirk, charp, NULL, 0444);
  74MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
  75
  76#define DEVNAME "ad1889"
  77#define PFX	DEVNAME ": "
  78
  79/* let's use the global sound debug interfaces */
  80#define ad1889_debug(fmt, arg...) snd_printd(KERN_DEBUG fmt, ## arg)
  81
  82/* keep track of some hw registers */
  83struct ad1889_register_state {
  84	u16 reg;	/* reg setup */
  85	u32 addr;	/* dma base address */
  86	unsigned long size;	/* DMA buffer size */
  87};
  88
  89struct snd_ad1889 {
  90	struct snd_card *card;
  91	struct pci_dev *pci;
  92
  93	int irq;
  94	unsigned long bar;
  95	void __iomem *iobase;
  96
  97	struct snd_ac97 *ac97;
  98	struct snd_ac97_bus *ac97_bus;
  99	struct snd_pcm *pcm;
 100	struct snd_info_entry *proc;
 101
 102	struct snd_pcm_substream *psubs;
 103	struct snd_pcm_substream *csubs;
 104
 105	/* playback register state */
 106	struct ad1889_register_state wave;
 107	struct ad1889_register_state ramc;
 108
 109	spinlock_t lock;
 110};
 111
 112static inline u16
 113ad1889_readw(struct snd_ad1889 *chip, unsigned reg)
 114{
 115	return readw(chip->iobase + reg);
 116}
 117
 118static inline void
 119ad1889_writew(struct snd_ad1889 *chip, unsigned reg, u16 val)
 120{
 121	writew(val, chip->iobase + reg);
 122}
 123
 124static inline u32
 125ad1889_readl(struct snd_ad1889 *chip, unsigned reg)
 126{
 127	return readl(chip->iobase + reg);
 128}
 129
 130static inline void
 131ad1889_writel(struct snd_ad1889 *chip, unsigned reg, u32 val)
 132{
 133	writel(val, chip->iobase + reg);
 134}
 135
 136static inline void
 137ad1889_unmute(struct snd_ad1889 *chip)
 138{
 139	u16 st;
 140	st = ad1889_readw(chip, AD_DS_WADA) & 
 141		~(AD_DS_WADA_RWAM | AD_DS_WADA_LWAM);
 142	ad1889_writew(chip, AD_DS_WADA, st);
 143	ad1889_readw(chip, AD_DS_WADA);
 144}
 145
 146static inline void
 147ad1889_mute(struct snd_ad1889 *chip)
 148{
 149	u16 st;
 150	st = ad1889_readw(chip, AD_DS_WADA) | AD_DS_WADA_RWAM | AD_DS_WADA_LWAM;
 151	ad1889_writew(chip, AD_DS_WADA, st);
 152	ad1889_readw(chip, AD_DS_WADA);
 153}
 154
 155static inline void
 156ad1889_load_adc_buffer_address(struct snd_ad1889 *chip, u32 address)
 157{
 158	ad1889_writel(chip, AD_DMA_ADCBA, address);
 159	ad1889_writel(chip, AD_DMA_ADCCA, address);
 160}
 161
 162static inline void
 163ad1889_load_adc_buffer_count(struct snd_ad1889 *chip, u32 count)
 164{
 165	ad1889_writel(chip, AD_DMA_ADCBC, count);
 166	ad1889_writel(chip, AD_DMA_ADCCC, count);
 167}
 168
 169static inline void
 170ad1889_load_adc_interrupt_count(struct snd_ad1889 *chip, u32 count)
 171{
 172	ad1889_writel(chip, AD_DMA_ADCIB, count);
 173	ad1889_writel(chip, AD_DMA_ADCIC, count);
 174}
 175
 176static inline void
 177ad1889_load_wave_buffer_address(struct snd_ad1889 *chip, u32 address)
 178{
 179	ad1889_writel(chip, AD_DMA_WAVBA, address);
 180	ad1889_writel(chip, AD_DMA_WAVCA, address);
 181}
 182
 183static inline void
 184ad1889_load_wave_buffer_count(struct snd_ad1889 *chip, u32 count)
 185{
 186	ad1889_writel(chip, AD_DMA_WAVBC, count);
 187	ad1889_writel(chip, AD_DMA_WAVCC, count);
 188}
 189
 190static inline void
 191ad1889_load_wave_interrupt_count(struct snd_ad1889 *chip, u32 count)
 192{
 193	ad1889_writel(chip, AD_DMA_WAVIB, count);
 194	ad1889_writel(chip, AD_DMA_WAVIC, count);
 195}
 196
 197static void
 198ad1889_channel_reset(struct snd_ad1889 *chip, unsigned int channel)
 199{
 200	u16 reg;
 201	
 202	if (channel & AD_CHAN_WAV) {
 203		/* Disable wave channel */
 204		reg = ad1889_readw(chip, AD_DS_WSMC) & ~AD_DS_WSMC_WAEN;
 205		ad1889_writew(chip, AD_DS_WSMC, reg);
 206		chip->wave.reg = reg;
 207		
 208		/* disable IRQs */
 209		reg = ad1889_readw(chip, AD_DMA_WAV);
 210		reg &= AD_DMA_IM_DIS;
 211		reg &= ~AD_DMA_LOOP;
 212		ad1889_writew(chip, AD_DMA_WAV, reg);
 213
 214		/* clear IRQ and address counters and pointers */
 215		ad1889_load_wave_buffer_address(chip, 0x0);
 216		ad1889_load_wave_buffer_count(chip, 0x0);
 217		ad1889_load_wave_interrupt_count(chip, 0x0);
 218
 219		/* flush */
 220		ad1889_readw(chip, AD_DMA_WAV);
 221	}
 222	
 223	if (channel & AD_CHAN_ADC) {
 224		/* Disable ADC channel */
 225		reg = ad1889_readw(chip, AD_DS_RAMC) & ~AD_DS_RAMC_ADEN;
 226		ad1889_writew(chip, AD_DS_RAMC, reg);
 227		chip->ramc.reg = reg;
 228
 229		reg = ad1889_readw(chip, AD_DMA_ADC);
 230		reg &= AD_DMA_IM_DIS;
 231		reg &= ~AD_DMA_LOOP;
 232		ad1889_writew(chip, AD_DMA_ADC, reg);
 233	
 234		ad1889_load_adc_buffer_address(chip, 0x0);
 235		ad1889_load_adc_buffer_count(chip, 0x0);
 236		ad1889_load_adc_interrupt_count(chip, 0x0);
 237
 238		/* flush */
 239		ad1889_readw(chip, AD_DMA_ADC);
 240	}
 241}
 242
 243static u16
 244snd_ad1889_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
 245{
 246	struct snd_ad1889 *chip = ac97->private_data;
 247	return ad1889_readw(chip, AD_AC97_BASE + reg);
 248}
 249
 250static void
 251snd_ad1889_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
 252{
 253	struct snd_ad1889 *chip = ac97->private_data;
 254	ad1889_writew(chip, AD_AC97_BASE + reg, val);
 255}
 256
 257static int
 258snd_ad1889_ac97_ready(struct snd_ad1889 *chip)
 259{
 260	int retry = 400; /* average needs 352 msec */
 261	
 262	while (!(ad1889_readw(chip, AD_AC97_ACIC) & AD_AC97_ACIC_ACRDY) 
 263			&& --retry)
 264		mdelay(1);
 265	if (!retry) {
 266		snd_printk(KERN_ERR PFX "[%s] Link is not ready.\n",
 267		       __func__);
 268		return -EIO;
 269	}
 270	ad1889_debug("[%s] ready after %d ms\n", __func__, 400 - retry);
 271
 272	return 0;
 273}
 274
 275static int 
 276snd_ad1889_hw_params(struct snd_pcm_substream *substream,
 277			struct snd_pcm_hw_params *hw_params)
 278{
 279	return snd_pcm_lib_malloc_pages(substream, 
 280					params_buffer_bytes(hw_params));
 281}
 282
 283static int
 284snd_ad1889_hw_free(struct snd_pcm_substream *substream)
 285{
 286	return snd_pcm_lib_free_pages(substream);
 287}
 288
 289static struct snd_pcm_hardware snd_ad1889_playback_hw = {
 290	.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
 291		SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BLOCK_TRANSFER,
 292	.formats = SNDRV_PCM_FMTBIT_S16_LE,
 293	.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
 294	.rate_min = 8000,	/* docs say 7000, but we're lazy */
 295	.rate_max = 48000,
 296	.channels_min = 1,
 297	.channels_max = 2,
 298	.buffer_bytes_max = BUFFER_BYTES_MAX,
 299	.period_bytes_min = PERIOD_BYTES_MIN,
 300	.period_bytes_max = PERIOD_BYTES_MAX,
 301	.periods_min = PERIODS_MIN,
 302	.periods_max = PERIODS_MAX,
 303	/*.fifo_size = 0,*/
 304};
 305
 306static struct snd_pcm_hardware snd_ad1889_capture_hw = {
 307	.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
 308		SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BLOCK_TRANSFER,
 309	.formats = SNDRV_PCM_FMTBIT_S16_LE,
 310	.rates = SNDRV_PCM_RATE_48000,
 311	.rate_min = 48000,	/* docs say we could to VSR, but we're lazy */
 312	.rate_max = 48000,
 313	.channels_min = 1,
 314	.channels_max = 2,
 315	.buffer_bytes_max = BUFFER_BYTES_MAX,
 316	.period_bytes_min = PERIOD_BYTES_MIN,
 317	.period_bytes_max = PERIOD_BYTES_MAX,
 318	.periods_min = PERIODS_MIN,
 319	.periods_max = PERIODS_MAX,
 320	/*.fifo_size = 0,*/
 321};
 322
 323static int
 324snd_ad1889_playback_open(struct snd_pcm_substream *ss)
 325{
 326	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 327	struct snd_pcm_runtime *rt = ss->runtime;
 328
 329	chip->psubs = ss;
 330	rt->hw = snd_ad1889_playback_hw;
 331
 332	return 0;
 333}
 334
 335static int
 336snd_ad1889_capture_open(struct snd_pcm_substream *ss)
 337{
 338	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 339	struct snd_pcm_runtime *rt = ss->runtime;
 340
 341	chip->csubs = ss;
 342	rt->hw = snd_ad1889_capture_hw;
 343
 344	return 0;
 345}
 346
 347static int
 348snd_ad1889_playback_close(struct snd_pcm_substream *ss)
 349{
 350	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 351	chip->psubs = NULL;
 352	return 0;
 353}
 354
 355static int
 356snd_ad1889_capture_close(struct snd_pcm_substream *ss)
 357{
 358	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 359	chip->csubs = NULL;
 360	return 0;
 361}
 362
 363static int
 364snd_ad1889_playback_prepare(struct snd_pcm_substream *ss)
 365{
 366	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 367	struct snd_pcm_runtime *rt = ss->runtime;
 368	unsigned int size = snd_pcm_lib_buffer_bytes(ss);
 369	unsigned int count = snd_pcm_lib_period_bytes(ss);
 370	u16 reg;
 371
 372	ad1889_channel_reset(chip, AD_CHAN_WAV);
 373
 374	reg = ad1889_readw(chip, AD_DS_WSMC);
 375	
 376	/* Mask out 16-bit / Stereo */
 377	reg &= ~(AD_DS_WSMC_WA16 | AD_DS_WSMC_WAST);
 378
 379	if (snd_pcm_format_width(rt->format) == 16)
 380		reg |= AD_DS_WSMC_WA16;
 381
 382	if (rt->channels > 1)
 383		reg |= AD_DS_WSMC_WAST;
 384
 385	/* let's make sure we don't clobber ourselves */
 386	spin_lock_irq(&chip->lock);
 387	
 388	chip->wave.size = size;
 389	chip->wave.reg = reg;
 390	chip->wave.addr = rt->dma_addr;
 391
 392	ad1889_writew(chip, AD_DS_WSMC, chip->wave.reg);
 393	
 394	/* Set sample rates on the codec */
 395	ad1889_writew(chip, AD_DS_WAS, rt->rate);
 396
 397	/* Set up DMA */
 398	ad1889_load_wave_buffer_address(chip, chip->wave.addr);
 399	ad1889_load_wave_buffer_count(chip, size);
 400	ad1889_load_wave_interrupt_count(chip, count);
 401
 402	/* writes flush */
 403	ad1889_readw(chip, AD_DS_WSMC);
 404	
 405	spin_unlock_irq(&chip->lock);
 406	
 407	ad1889_debug("prepare playback: addr = 0x%x, count = %u, "
 408			"size = %u, reg = 0x%x, rate = %u\n", chip->wave.addr,
 409			count, size, reg, rt->rate);
 410	return 0;
 411}
 412
 413static int
 414snd_ad1889_capture_prepare(struct snd_pcm_substream *ss)
 415{
 416	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 417	struct snd_pcm_runtime *rt = ss->runtime;
 418	unsigned int size = snd_pcm_lib_buffer_bytes(ss);
 419	unsigned int count = snd_pcm_lib_period_bytes(ss);
 420	u16 reg;
 421
 422	ad1889_channel_reset(chip, AD_CHAN_ADC);
 423	
 424	reg = ad1889_readw(chip, AD_DS_RAMC);
 425
 426	/* Mask out 16-bit / Stereo */
 427	reg &= ~(AD_DS_RAMC_AD16 | AD_DS_RAMC_ADST);
 428
 429	if (snd_pcm_format_width(rt->format) == 16)
 430		reg |= AD_DS_RAMC_AD16;
 431
 432	if (rt->channels > 1)
 433		reg |= AD_DS_RAMC_ADST;
 434
 435	/* let's make sure we don't clobber ourselves */
 436	spin_lock_irq(&chip->lock);
 437	
 438	chip->ramc.size = size;
 439	chip->ramc.reg = reg;
 440	chip->ramc.addr = rt->dma_addr;
 441
 442	ad1889_writew(chip, AD_DS_RAMC, chip->ramc.reg);
 443
 444	/* Set up DMA */
 445	ad1889_load_adc_buffer_address(chip, chip->ramc.addr);
 446	ad1889_load_adc_buffer_count(chip, size);
 447	ad1889_load_adc_interrupt_count(chip, count);
 448
 449	/* writes flush */
 450	ad1889_readw(chip, AD_DS_RAMC);
 451	
 452	spin_unlock_irq(&chip->lock);
 453	
 454	ad1889_debug("prepare capture: addr = 0x%x, count = %u, "
 455			"size = %u, reg = 0x%x, rate = %u\n", chip->ramc.addr,
 456			count, size, reg, rt->rate);
 457	return 0;
 458}
 459
 460/* this is called in atomic context with IRQ disabled.
 461   Must be as fast as possible and not sleep.
 462   DMA should be *triggered* by this call.
 463   The WSMC "WAEN" bit triggers DMA Wave On/Off */
 464static int
 465snd_ad1889_playback_trigger(struct snd_pcm_substream *ss, int cmd)
 466{
 467	u16 wsmc;
 468	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 469	
 470	wsmc = ad1889_readw(chip, AD_DS_WSMC);
 471
 472	switch (cmd) {
 473	case SNDRV_PCM_TRIGGER_START:
 474		/* enable DMA loop & interrupts */
 475		ad1889_writew(chip, AD_DMA_WAV, AD_DMA_LOOP | AD_DMA_IM_CNT);
 476		wsmc |= AD_DS_WSMC_WAEN;
 477		/* 1 to clear CHSS bit */
 478		ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_WAVS);
 479		ad1889_unmute(chip);
 480		break;
 481	case SNDRV_PCM_TRIGGER_STOP:
 482		ad1889_mute(chip);
 483		wsmc &= ~AD_DS_WSMC_WAEN;
 484		break;
 485	default:
 486		snd_BUG();
 487		return -EINVAL;
 488	}
 489	
 490	chip->wave.reg = wsmc;
 491	ad1889_writew(chip, AD_DS_WSMC, wsmc);	
 492	ad1889_readw(chip, AD_DS_WSMC);	/* flush */
 493
 494	/* reset the chip when STOP - will disable IRQs */
 495	if (cmd == SNDRV_PCM_TRIGGER_STOP)
 496		ad1889_channel_reset(chip, AD_CHAN_WAV);
 497
 498	return 0;
 499}
 500
 501/* this is called in atomic context with IRQ disabled.
 502   Must be as fast as possible and not sleep.
 503   DMA should be *triggered* by this call.
 504   The RAMC "ADEN" bit triggers DMA ADC On/Off */
 505static int
 506snd_ad1889_capture_trigger(struct snd_pcm_substream *ss, int cmd)
 507{
 508	u16 ramc;
 509	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 510
 511	ramc = ad1889_readw(chip, AD_DS_RAMC);
 512	
 513	switch (cmd) {
 514	case SNDRV_PCM_TRIGGER_START:
 515		/* enable DMA loop & interrupts */
 516		ad1889_writew(chip, AD_DMA_ADC, AD_DMA_LOOP | AD_DMA_IM_CNT);
 517		ramc |= AD_DS_RAMC_ADEN;
 518		/* 1 to clear CHSS bit */
 519		ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_ADCS);
 520		break;
 521	case SNDRV_PCM_TRIGGER_STOP:
 522		ramc &= ~AD_DS_RAMC_ADEN;
 523		break;
 524	default:
 525		return -EINVAL;
 526	}
 527	
 528	chip->ramc.reg = ramc;
 529	ad1889_writew(chip, AD_DS_RAMC, ramc);	
 530	ad1889_readw(chip, AD_DS_RAMC);	/* flush */
 531	
 532	/* reset the chip when STOP - will disable IRQs */
 533	if (cmd == SNDRV_PCM_TRIGGER_STOP)
 534		ad1889_channel_reset(chip, AD_CHAN_ADC);
 535		
 536	return 0;
 537}
 538
 539/* Called in atomic context with IRQ disabled */
 540static snd_pcm_uframes_t
 541snd_ad1889_playback_pointer(struct snd_pcm_substream *ss)
 542{
 543	size_t ptr = 0;
 544	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 545
 546	if (unlikely(!(chip->wave.reg & AD_DS_WSMC_WAEN)))
 547		return 0;
 548
 549	ptr = ad1889_readl(chip, AD_DMA_WAVCA);
 550	ptr -= chip->wave.addr;
 551	
 552	if (snd_BUG_ON(ptr >= chip->wave.size))
 553		return 0;
 554	
 555	return bytes_to_frames(ss->runtime, ptr);
 556}
 557
 558/* Called in atomic context with IRQ disabled */
 559static snd_pcm_uframes_t
 560snd_ad1889_capture_pointer(struct snd_pcm_substream *ss)
 561{
 562	size_t ptr = 0;
 563	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
 564
 565	if (unlikely(!(chip->ramc.reg & AD_DS_RAMC_ADEN)))
 566		return 0;
 567
 568	ptr = ad1889_readl(chip, AD_DMA_ADCCA);
 569	ptr -= chip->ramc.addr;
 570
 571	if (snd_BUG_ON(ptr >= chip->ramc.size))
 572		return 0;
 573	
 574	return bytes_to_frames(ss->runtime, ptr);
 575}
 576
 577static struct snd_pcm_ops snd_ad1889_playback_ops = {
 578	.open = snd_ad1889_playback_open,
 579	.close = snd_ad1889_playback_close,
 580	.ioctl = snd_pcm_lib_ioctl,
 581	.hw_params = snd_ad1889_hw_params,
 582	.hw_free = snd_ad1889_hw_free,
 583	.prepare = snd_ad1889_playback_prepare,
 584	.trigger = snd_ad1889_playback_trigger,
 585	.pointer = snd_ad1889_playback_pointer, 
 586};
 587
 588static struct snd_pcm_ops snd_ad1889_capture_ops = {
 589	.open = snd_ad1889_capture_open,
 590	.close = snd_ad1889_capture_close,
 591	.ioctl = snd_pcm_lib_ioctl,
 592	.hw_params = snd_ad1889_hw_params,
 593	.hw_free = snd_ad1889_hw_free,
 594	.prepare = snd_ad1889_capture_prepare,
 595	.trigger = snd_ad1889_capture_trigger,
 596	.pointer = snd_ad1889_capture_pointer, 
 597};
 598
 599static irqreturn_t
 600snd_ad1889_interrupt(int irq, void *dev_id)
 601{
 602	unsigned long st;
 603	struct snd_ad1889 *chip = dev_id;
 604
 605	st = ad1889_readl(chip, AD_DMA_DISR);
 606
 607	/* clear ISR */
 608	ad1889_writel(chip, AD_DMA_DISR, st);
 609
 610	st &= AD_INTR_MASK;
 611
 612	if (unlikely(!st))
 613		return IRQ_NONE;
 614
 615	if (st & (AD_DMA_DISR_PMAI|AD_DMA_DISR_PTAI))
 616		ad1889_debug("Unexpected master or target abort interrupt!\n");
 
 617
 618	if ((st & AD_DMA_DISR_WAVI) && chip->psubs)
 619		snd_pcm_period_elapsed(chip->psubs);
 620	if ((st & AD_DMA_DISR_ADCI) && chip->csubs)
 621		snd_pcm_period_elapsed(chip->csubs);
 622
 623	return IRQ_HANDLED;
 624}
 625
 626static int __devinit
 627snd_ad1889_pcm_init(struct snd_ad1889 *chip, int device, struct snd_pcm **rpcm)
 628{
 629	int err;
 630	struct snd_pcm *pcm;
 631
 632	if (rpcm)
 633		*rpcm = NULL;
 634
 635	err = snd_pcm_new(chip->card, chip->card->driver, device, 1, 1, &pcm);
 636	if (err < 0)
 637		return err;
 638
 639	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, 
 640			&snd_ad1889_playback_ops);
 641	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
 642			&snd_ad1889_capture_ops);
 643
 644	pcm->private_data = chip;
 645	pcm->info_flags = 0;
 646	strcpy(pcm->name, chip->card->shortname);
 647	
 648	chip->pcm = pcm;
 649	chip->psubs = NULL;
 650	chip->csubs = NULL;
 651
 652	err = snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
 653						snd_dma_pci_data(chip->pci),
 654						BUFFER_BYTES_MAX / 2,
 655						BUFFER_BYTES_MAX);
 656
 657	if (err < 0) {
 658		snd_printk(KERN_ERR PFX "buffer allocation error: %d\n", err);
 659		return err;
 660	}
 661	
 662	if (rpcm)
 663		*rpcm = pcm;
 664	
 665	return 0;
 666}
 667
 668static void
 669snd_ad1889_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
 670{
 671	struct snd_ad1889 *chip = entry->private_data;
 672	u16 reg;
 673	int tmp;
 674
 675	reg = ad1889_readw(chip, AD_DS_WSMC);
 676	snd_iprintf(buffer, "Wave output: %s\n",
 677			(reg & AD_DS_WSMC_WAEN) ? "enabled" : "disabled");
 678	snd_iprintf(buffer, "Wave Channels: %s\n",
 679			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
 680	snd_iprintf(buffer, "Wave Quality: %d-bit linear\n",
 681			(reg & AD_DS_WSMC_WA16) ? 16 : 8);
 682	
 683	/* WARQ is at offset 12 */
 684	tmp = (reg & AD_DS_WSMC_WARQ) ?
 685			(((reg & AD_DS_WSMC_WARQ >> 12) & 0x01) ? 12 : 18) : 4;
 686	tmp /= (reg & AD_DS_WSMC_WAST) ? 2 : 1;
 687	
 688	snd_iprintf(buffer, "Wave FIFO: %d %s words\n\n", tmp,
 689			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
 690				
 691	
 692	snd_iprintf(buffer, "Synthesis output: %s\n",
 693			reg & AD_DS_WSMC_SYEN ? "enabled" : "disabled");
 694	
 695	/* SYRQ is at offset 4 */
 696	tmp = (reg & AD_DS_WSMC_SYRQ) ?
 697			(((reg & AD_DS_WSMC_SYRQ >> 4) & 0x01) ? 12 : 18) : 4;
 698	tmp /= (reg & AD_DS_WSMC_WAST) ? 2 : 1;
 699	
 700	snd_iprintf(buffer, "Synthesis FIFO: %d %s words\n\n", tmp,
 701			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
 702
 703	reg = ad1889_readw(chip, AD_DS_RAMC);
 704	snd_iprintf(buffer, "ADC input: %s\n",
 705			(reg & AD_DS_RAMC_ADEN) ? "enabled" : "disabled");
 706	snd_iprintf(buffer, "ADC Channels: %s\n",
 707			(reg & AD_DS_RAMC_ADST) ? "stereo" : "mono");
 708	snd_iprintf(buffer, "ADC Quality: %d-bit linear\n",
 709			(reg & AD_DS_RAMC_AD16) ? 16 : 8);
 710	
 711	/* ACRQ is at offset 4 */
 712	tmp = (reg & AD_DS_RAMC_ACRQ) ?
 713			(((reg & AD_DS_RAMC_ACRQ >> 4) & 0x01) ? 12 : 18) : 4;
 714	tmp /= (reg & AD_DS_RAMC_ADST) ? 2 : 1;
 715	
 716	snd_iprintf(buffer, "ADC FIFO: %d %s words\n\n", tmp,
 717			(reg & AD_DS_RAMC_ADST) ? "stereo" : "mono");
 718	
 719	snd_iprintf(buffer, "Resampler input: %s\n",
 720			reg & AD_DS_RAMC_REEN ? "enabled" : "disabled");
 721			
 722	/* RERQ is at offset 12 */
 723	tmp = (reg & AD_DS_RAMC_RERQ) ?
 724			(((reg & AD_DS_RAMC_RERQ >> 12) & 0x01) ? 12 : 18) : 4;
 725	tmp /= (reg & AD_DS_RAMC_ADST) ? 2 : 1;
 726	
 727	snd_iprintf(buffer, "Resampler FIFO: %d %s words\n\n", tmp,
 728			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
 729				
 730	
 731	/* doc says LSB represents -1.5dB, but the max value (-94.5dB)
 732	suggests that LSB is -3dB, which is more coherent with the logarithmic
 733	nature of the dB scale */
 734	reg = ad1889_readw(chip, AD_DS_WADA);
 735	snd_iprintf(buffer, "Left: %s, -%d dB\n",
 736			(reg & AD_DS_WADA_LWAM) ? "mute" : "unmute",
 737			((reg & AD_DS_WADA_LWAA) >> 8) * 3);
 738	reg = ad1889_readw(chip, AD_DS_WADA);
 739	snd_iprintf(buffer, "Right: %s, -%d dB\n",
 740			(reg & AD_DS_WADA_RWAM) ? "mute" : "unmute",
 741			((reg & AD_DS_WADA_RWAA) >> 8) * 3);
 742	
 743	reg = ad1889_readw(chip, AD_DS_WAS);
 744	snd_iprintf(buffer, "Wave samplerate: %u Hz\n", reg);
 745	reg = ad1889_readw(chip, AD_DS_RES);
 746	snd_iprintf(buffer, "Resampler samplerate: %u Hz\n", reg);
 747}
 748
 749static void __devinit
 750snd_ad1889_proc_init(struct snd_ad1889 *chip)
 751{
 752	struct snd_info_entry *entry;
 753
 754	if (!snd_card_proc_new(chip->card, chip->card->driver, &entry))
 755		snd_info_set_text_ops(entry, chip, snd_ad1889_proc_read);
 756}
 757
 758static struct ac97_quirk ac97_quirks[] = {
 759	{
 760		.subvendor = 0x11d4,	/* AD */
 761		.subdevice = 0x1889,	/* AD1889 */
 762		.codec_id = AC97_ID_AD1819,
 763		.name = "AD1889",
 764		.type = AC97_TUNE_HP_ONLY
 765	},
 766	{ } /* terminator */
 767};
 768
 769static void __devinit
 770snd_ad1889_ac97_xinit(struct snd_ad1889 *chip)
 771{
 772	u16 reg;
 773
 774	reg = ad1889_readw(chip, AD_AC97_ACIC);
 775	reg |= AD_AC97_ACIC_ACRD;		/* Reset Disable */
 776	ad1889_writew(chip, AD_AC97_ACIC, reg);
 777	ad1889_readw(chip, AD_AC97_ACIC);	/* flush posted write */
 778	udelay(10);
 779	/* Interface Enable */
 780	reg |= AD_AC97_ACIC_ACIE;
 781	ad1889_writew(chip, AD_AC97_ACIC, reg);
 782	
 783	snd_ad1889_ac97_ready(chip);
 784
 785	/* Audio Stream Output | Variable Sample Rate Mode */
 786	reg = ad1889_readw(chip, AD_AC97_ACIC);
 787	reg |= AD_AC97_ACIC_ASOE | AD_AC97_ACIC_VSRM;
 788	ad1889_writew(chip, AD_AC97_ACIC, reg);
 789	ad1889_readw(chip, AD_AC97_ACIC); /* flush posted write */
 790
 791}
 792
 793static void
 794snd_ad1889_ac97_bus_free(struct snd_ac97_bus *bus)
 795{
 796	struct snd_ad1889 *chip = bus->private_data;
 797	chip->ac97_bus = NULL;
 798}
 799
 800static void
 801snd_ad1889_ac97_free(struct snd_ac97 *ac97)
 802{
 803	struct snd_ad1889 *chip = ac97->private_data;
 804	chip->ac97 = NULL;
 805}
 806
 807static int __devinit
 808snd_ad1889_ac97_init(struct snd_ad1889 *chip, const char *quirk_override)
 809{
 810	int err;
 811	struct snd_ac97_template ac97;
 812	static struct snd_ac97_bus_ops ops = {
 813		.write = snd_ad1889_ac97_write,
 814		.read = snd_ad1889_ac97_read,
 815	};
 816
 817	/* doing that here, it works. */
 818	snd_ad1889_ac97_xinit(chip);
 819
 820	err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus);
 821	if (err < 0)
 822		return err;
 823	
 824	chip->ac97_bus->private_free = snd_ad1889_ac97_bus_free;
 825
 826	memset(&ac97, 0, sizeof(ac97));
 827	ac97.private_data = chip;
 828	ac97.private_free = snd_ad1889_ac97_free;
 829	ac97.pci = chip->pci;
 830
 831	err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97);
 832	if (err < 0)
 833		return err;
 834		
 835	snd_ac97_tune_hardware(chip->ac97, ac97_quirks, quirk_override);
 836	
 837	return 0;
 838}
 839
 840static int
 841snd_ad1889_free(struct snd_ad1889 *chip)
 842{
 843	if (chip->irq < 0)
 844		goto skip_hw;
 845
 846	spin_lock_irq(&chip->lock);
 847
 848	ad1889_mute(chip);
 849
 850	/* Turn off interrupt on count and zero DMA registers */
 851	ad1889_channel_reset(chip, AD_CHAN_WAV | AD_CHAN_ADC);
 852
 853	/* clear DISR. If we don't, we'd better jump off the Eiffel Tower */
 854	ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PTAI | AD_DMA_DISR_PMAI);
 855	ad1889_readl(chip, AD_DMA_DISR);	/* flush, dammit! */
 856
 857	spin_unlock_irq(&chip->lock);
 858
 859	if (chip->irq >= 0)
 860		free_irq(chip->irq, chip);
 861
 862skip_hw:
 863	if (chip->iobase)
 864		iounmap(chip->iobase);
 865
 866	pci_release_regions(chip->pci);
 867	pci_disable_device(chip->pci);
 868
 869	kfree(chip);
 870	return 0;
 871}
 872
 873static int
 874snd_ad1889_dev_free(struct snd_device *device) 
 875{
 876	struct snd_ad1889 *chip = device->device_data;
 877	return snd_ad1889_free(chip);
 878}
 879
 880static int __devinit
 881snd_ad1889_init(struct snd_ad1889 *chip) 
 882{
 883	ad1889_writew(chip, AD_DS_CCS, AD_DS_CCS_CLKEN); /* turn on clock */
 884	ad1889_readw(chip, AD_DS_CCS);	/* flush posted write */
 885
 886	mdelay(10);
 887
 888	/* enable Master and Target abort interrupts */
 889	ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PMAE | AD_DMA_DISR_PTAE);
 890
 891	return 0;
 892}
 893
 894static int __devinit
 895snd_ad1889_create(struct snd_card *card,
 896		  struct pci_dev *pci,
 897		  struct snd_ad1889 **rchip)
 898{
 
 899	int err;
 900
 901	struct snd_ad1889 *chip;
 902	static struct snd_device_ops ops = {
 903		.dev_free = snd_ad1889_dev_free,
 904	};
 905
 906	*rchip = NULL;
 907
 908	if ((err = pci_enable_device(pci)) < 0)
 909		return err;
 910
 911	/* check PCI availability (32bit DMA) */
 912	if (pci_set_dma_mask(pci, DMA_BIT_MASK(32)) < 0 ||
 913	    pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)) < 0) {
 914		printk(KERN_ERR PFX "error setting 32-bit DMA mask.\n");
 915		pci_disable_device(pci);
 916		return -ENXIO;
 917	}
 918
 919	/* allocate chip specific data with zero-filled memory */
 920	if ((chip = kzalloc(sizeof(*chip), GFP_KERNEL)) == NULL) {
 921		pci_disable_device(pci);
 922		return -ENOMEM;
 923	}
 924
 925	chip->card = card;
 926	card->private_data = chip;
 927	chip->pci = pci;
 928	chip->irq = -1;
 929
 930	/* (1) PCI resource allocation */
 931	if ((err = pci_request_regions(pci, card->driver)) < 0)
 932		goto free_and_ret;
 
 933
 934	chip->bar = pci_resource_start(pci, 0);
 935	chip->iobase = pci_ioremap_bar(pci, 0);
 936	if (chip->iobase == NULL) {
 937		printk(KERN_ERR PFX "unable to reserve region.\n");
 938		err = -EBUSY;
 939		goto free_and_ret;
 940	}
 941	
 942	pci_set_master(pci);
 943
 944	spin_lock_init(&chip->lock);	/* only now can we call ad1889_free */
 945
 946	if (request_irq(pci->irq, snd_ad1889_interrupt,
 947			IRQF_SHARED, KBUILD_MODNAME, chip)) {
 948		printk(KERN_ERR PFX "cannot obtain IRQ %d\n", pci->irq);
 949		snd_ad1889_free(chip);
 950		return -EBUSY;
 951	}
 952
 953	chip->irq = pci->irq;
 954	synchronize_irq(chip->irq);
 
 955
 956	/* (2) initialization of the chip hardware */
 957	if ((err = snd_ad1889_init(chip)) < 0) {
 958		snd_ad1889_free(chip);
 959		return err;
 960	}
 961
 962	if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
 963		snd_ad1889_free(chip);
 964		return err;
 965	}
 966
 967	snd_card_set_dev(card, &pci->dev);
 968
 969	*rchip = chip;
 
 970
 971	return 0;
 972
 973free_and_ret:
 974	kfree(chip);
 975	pci_disable_device(pci);
 976
 977	return err;
 978}
 979
 980static int __devinit
 981snd_ad1889_probe(struct pci_dev *pci,
 982		 const struct pci_device_id *pci_id)
 983{
 984	int err;
 985	static int devno;
 986	struct snd_card *card;
 987	struct snd_ad1889 *chip;
 988
 989	/* (1) */
 990	if (devno >= SNDRV_CARDS)
 991		return -ENODEV;
 992	if (!enable[devno]) {
 993		devno++;
 994		return -ENOENT;
 995	}
 996
 997	/* (2) */
 998	err = snd_card_create(index[devno], id[devno], THIS_MODULE, 0, &card);
 999	/* XXX REVISIT: we can probably allocate chip in this call */
1000	if (err < 0)
1001		return err;
 
1002
1003	strcpy(card->driver, "AD1889");
1004	strcpy(card->shortname, "Analog Devices AD1889");
1005
1006	/* (3) */
1007	err = snd_ad1889_create(card, pci, &chip);
1008	if (err < 0)
1009		goto free_and_ret;
1010
1011	/* (4) */
1012	sprintf(card->longname, "%s at 0x%lx irq %i",
1013		card->shortname, chip->bar, chip->irq);
1014
1015	/* (5) */
1016	/* register AC97 mixer */
1017	err = snd_ad1889_ac97_init(chip, ac97_quirk[devno]);
1018	if (err < 0)
1019		goto free_and_ret;
1020	
1021	err = snd_ad1889_pcm_init(chip, 0, NULL);
1022	if (err < 0)
1023		goto free_and_ret;
1024
1025	/* register proc interface */
1026	snd_ad1889_proc_init(chip);
1027
1028	/* (6) */
1029	err = snd_card_register(card);
1030	if (err < 0)
1031		goto free_and_ret;
1032
1033	/* (7) */
1034	pci_set_drvdata(pci, card);
1035
1036	devno++;
1037	return 0;
1038
1039free_and_ret:
1040	snd_card_free(card);
1041	return err;
1042}
1043
1044static void __devexit
1045snd_ad1889_remove(struct pci_dev *pci)
1046{
1047	snd_card_free(pci_get_drvdata(pci));
1048	pci_set_drvdata(pci, NULL);
1049}
1050
1051static DEFINE_PCI_DEVICE_TABLE(snd_ad1889_ids) = {
1052	{ PCI_DEVICE(PCI_VENDOR_ID_ANALOG_DEVICES, PCI_DEVICE_ID_AD1889JS) },
1053	{ 0, },
1054};
1055MODULE_DEVICE_TABLE(pci, snd_ad1889_ids);
1056
1057static struct pci_driver ad1889_pci_driver = {
1058	.name = KBUILD_MODNAME,
1059	.id_table = snd_ad1889_ids,
1060	.probe = snd_ad1889_probe,
1061	.remove = __devexit_p(snd_ad1889_remove),
1062};
1063
1064static int __init
1065alsa_ad1889_init(void)
1066{
1067	return pci_register_driver(&ad1889_pci_driver);
1068}
1069
1070static void __exit
1071alsa_ad1889_fini(void)
1072{
1073	pci_unregister_driver(&ad1889_pci_driver);
1074}
1075
1076module_init(alsa_ad1889_init);
1077module_exit(alsa_ad1889_fini);
v6.13.7
  1// SPDX-License-Identifier: GPL-2.0-only
  2/* Analog Devices 1889 audio driver
  3 *
  4 * This is a driver for the AD1889 PCI audio chipset found
  5 * on the HP PA-RISC [BCJ]-xxx0 workstations.
  6 *
  7 * Copyright (C) 2004-2005, Kyle McMartin <kyle@parisc-linux.org>
  8 * Copyright (C) 2005, Thibaut Varene <varenet@parisc-linux.org>
  9 *   Based on the OSS AD1889 driver by Randolph Chung <tausq@debian.org>
 10 *
 
 
 
 
 
 
 
 
 
 
 
 
 
 11 * TODO:
 12 *	Do we need to take care of CCS register?
 13 *	Maybe we could use finer grained locking (separate locks for pb/cap)?
 14 * Wishlist:
 15 *	Control Interface (mixer) support
 16 *	Better AC97 support (VSR...)?
 17 *	PM support
 18 *	MIDI support
 19 *	Game Port support
 20 *	SG DMA support (this will need *a lot* of work)
 21 */
 22
 23#include <linux/init.h>
 24#include <linux/pci.h>
 25#include <linux/dma-mapping.h>
 26#include <linux/slab.h>
 27#include <linux/interrupt.h>
 28#include <linux/compiler.h>
 29#include <linux/delay.h>
 30#include <linux/module.h>
 31#include <linux/io.h>
 32
 33#include <sound/core.h>
 34#include <sound/pcm.h>
 35#include <sound/initval.h>
 36#include <sound/ac97_codec.h>
 37
 
 
 38#include "ad1889.h"
 39#include "ac97/ac97_id.h"
 40
 41#define	AD1889_DRVVER	"Version: 1.7"
 42
 43MODULE_AUTHOR("Kyle McMartin <kyle@parisc-linux.org>, Thibaut Varene <t-bone@parisc-linux.org>");
 44MODULE_DESCRIPTION("Analog Devices AD1889 ALSA sound driver");
 45MODULE_LICENSE("GPL");
 
 46
 47static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
 48module_param_array(index, int, NULL, 0444);
 49MODULE_PARM_DESC(index, "Index value for the AD1889 soundcard.");
 50
 51static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
 52module_param_array(id, charp, NULL, 0444);
 53MODULE_PARM_DESC(id, "ID string for the AD1889 soundcard.");
 54
 55static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
 56module_param_array(enable, bool, NULL, 0444);
 57MODULE_PARM_DESC(enable, "Enable AD1889 soundcard.");
 58
 59static char *ac97_quirk[SNDRV_CARDS];
 60module_param_array(ac97_quirk, charp, NULL, 0444);
 61MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
 62
 63#define DEVNAME "ad1889"
 64#define PFX	DEVNAME ": "
 65
 
 
 
 66/* keep track of some hw registers */
 67struct ad1889_register_state {
 68	u16 reg;	/* reg setup */
 69	u32 addr;	/* dma base address */
 70	unsigned long size;	/* DMA buffer size */
 71};
 72
 73struct snd_ad1889 {
 74	struct snd_card *card;
 75	struct pci_dev *pci;
 76
 77	int irq;
 78	unsigned long bar;
 79	void __iomem *iobase;
 80
 81	struct snd_ac97 *ac97;
 82	struct snd_ac97_bus *ac97_bus;
 83	struct snd_pcm *pcm;
 84	struct snd_info_entry *proc;
 85
 86	struct snd_pcm_substream *psubs;
 87	struct snd_pcm_substream *csubs;
 88
 89	/* playback register state */
 90	struct ad1889_register_state wave;
 91	struct ad1889_register_state ramc;
 92
 93	spinlock_t lock;
 94};
 95
 96static inline u16
 97ad1889_readw(struct snd_ad1889 *chip, unsigned reg)
 98{
 99	return readw(chip->iobase + reg);
100}
101
102static inline void
103ad1889_writew(struct snd_ad1889 *chip, unsigned reg, u16 val)
104{
105	writew(val, chip->iobase + reg);
106}
107
108static inline u32
109ad1889_readl(struct snd_ad1889 *chip, unsigned reg)
110{
111	return readl(chip->iobase + reg);
112}
113
114static inline void
115ad1889_writel(struct snd_ad1889 *chip, unsigned reg, u32 val)
116{
117	writel(val, chip->iobase + reg);
118}
119
120static inline void
121ad1889_unmute(struct snd_ad1889 *chip)
122{
123	u16 st;
124	st = ad1889_readw(chip, AD_DS_WADA) & 
125		~(AD_DS_WADA_RWAM | AD_DS_WADA_LWAM);
126	ad1889_writew(chip, AD_DS_WADA, st);
127	ad1889_readw(chip, AD_DS_WADA);
128}
129
130static inline void
131ad1889_mute(struct snd_ad1889 *chip)
132{
133	u16 st;
134	st = ad1889_readw(chip, AD_DS_WADA) | AD_DS_WADA_RWAM | AD_DS_WADA_LWAM;
135	ad1889_writew(chip, AD_DS_WADA, st);
136	ad1889_readw(chip, AD_DS_WADA);
137}
138
139static inline void
140ad1889_load_adc_buffer_address(struct snd_ad1889 *chip, u32 address)
141{
142	ad1889_writel(chip, AD_DMA_ADCBA, address);
143	ad1889_writel(chip, AD_DMA_ADCCA, address);
144}
145
146static inline void
147ad1889_load_adc_buffer_count(struct snd_ad1889 *chip, u32 count)
148{
149	ad1889_writel(chip, AD_DMA_ADCBC, count);
150	ad1889_writel(chip, AD_DMA_ADCCC, count);
151}
152
153static inline void
154ad1889_load_adc_interrupt_count(struct snd_ad1889 *chip, u32 count)
155{
156	ad1889_writel(chip, AD_DMA_ADCIB, count);
157	ad1889_writel(chip, AD_DMA_ADCIC, count);
158}
159
160static inline void
161ad1889_load_wave_buffer_address(struct snd_ad1889 *chip, u32 address)
162{
163	ad1889_writel(chip, AD_DMA_WAVBA, address);
164	ad1889_writel(chip, AD_DMA_WAVCA, address);
165}
166
167static inline void
168ad1889_load_wave_buffer_count(struct snd_ad1889 *chip, u32 count)
169{
170	ad1889_writel(chip, AD_DMA_WAVBC, count);
171	ad1889_writel(chip, AD_DMA_WAVCC, count);
172}
173
174static inline void
175ad1889_load_wave_interrupt_count(struct snd_ad1889 *chip, u32 count)
176{
177	ad1889_writel(chip, AD_DMA_WAVIB, count);
178	ad1889_writel(chip, AD_DMA_WAVIC, count);
179}
180
181static void
182ad1889_channel_reset(struct snd_ad1889 *chip, unsigned int channel)
183{
184	u16 reg;
185	
186	if (channel & AD_CHAN_WAV) {
187		/* Disable wave channel */
188		reg = ad1889_readw(chip, AD_DS_WSMC) & ~AD_DS_WSMC_WAEN;
189		ad1889_writew(chip, AD_DS_WSMC, reg);
190		chip->wave.reg = reg;
191		
192		/* disable IRQs */
193		reg = ad1889_readw(chip, AD_DMA_WAV);
194		reg &= AD_DMA_IM_DIS;
195		reg &= ~AD_DMA_LOOP;
196		ad1889_writew(chip, AD_DMA_WAV, reg);
197
198		/* clear IRQ and address counters and pointers */
199		ad1889_load_wave_buffer_address(chip, 0x0);
200		ad1889_load_wave_buffer_count(chip, 0x0);
201		ad1889_load_wave_interrupt_count(chip, 0x0);
202
203		/* flush */
204		ad1889_readw(chip, AD_DMA_WAV);
205	}
206	
207	if (channel & AD_CHAN_ADC) {
208		/* Disable ADC channel */
209		reg = ad1889_readw(chip, AD_DS_RAMC) & ~AD_DS_RAMC_ADEN;
210		ad1889_writew(chip, AD_DS_RAMC, reg);
211		chip->ramc.reg = reg;
212
213		reg = ad1889_readw(chip, AD_DMA_ADC);
214		reg &= AD_DMA_IM_DIS;
215		reg &= ~AD_DMA_LOOP;
216		ad1889_writew(chip, AD_DMA_ADC, reg);
217	
218		ad1889_load_adc_buffer_address(chip, 0x0);
219		ad1889_load_adc_buffer_count(chip, 0x0);
220		ad1889_load_adc_interrupt_count(chip, 0x0);
221
222		/* flush */
223		ad1889_readw(chip, AD_DMA_ADC);
224	}
225}
226
227static u16
228snd_ad1889_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
229{
230	struct snd_ad1889 *chip = ac97->private_data;
231	return ad1889_readw(chip, AD_AC97_BASE + reg);
232}
233
234static void
235snd_ad1889_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
236{
237	struct snd_ad1889 *chip = ac97->private_data;
238	ad1889_writew(chip, AD_AC97_BASE + reg, val);
239}
240
241static int
242snd_ad1889_ac97_ready(struct snd_ad1889 *chip)
243{
244	int retry = 400; /* average needs 352 msec */
245	
246	while (!(ad1889_readw(chip, AD_AC97_ACIC) & AD_AC97_ACIC_ACRDY) 
247			&& --retry)
248		usleep_range(1000, 2000);
249	if (!retry) {
250		dev_err(chip->card->dev, "[%s] Link is not ready.\n",
251			__func__);
252		return -EIO;
253	}
254	dev_dbg(chip->card->dev, "[%s] ready after %d ms\n", __func__, 400 - retry);
255
256	return 0;
257}
258
259static const struct snd_pcm_hardware snd_ad1889_playback_hw = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260	.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
261		SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BLOCK_TRANSFER,
262	.formats = SNDRV_PCM_FMTBIT_S16_LE,
263	.rates = SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
264	.rate_min = 8000,	/* docs say 7000, but we're lazy */
265	.rate_max = 48000,
266	.channels_min = 1,
267	.channels_max = 2,
268	.buffer_bytes_max = BUFFER_BYTES_MAX,
269	.period_bytes_min = PERIOD_BYTES_MIN,
270	.period_bytes_max = PERIOD_BYTES_MAX,
271	.periods_min = PERIODS_MIN,
272	.periods_max = PERIODS_MAX,
273	/*.fifo_size = 0,*/
274};
275
276static const struct snd_pcm_hardware snd_ad1889_capture_hw = {
277	.info = SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
278		SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_BLOCK_TRANSFER,
279	.formats = SNDRV_PCM_FMTBIT_S16_LE,
280	.rates = SNDRV_PCM_RATE_48000,
281	.rate_min = 48000,	/* docs say we could to VSR, but we're lazy */
282	.rate_max = 48000,
283	.channels_min = 1,
284	.channels_max = 2,
285	.buffer_bytes_max = BUFFER_BYTES_MAX,
286	.period_bytes_min = PERIOD_BYTES_MIN,
287	.period_bytes_max = PERIOD_BYTES_MAX,
288	.periods_min = PERIODS_MIN,
289	.periods_max = PERIODS_MAX,
290	/*.fifo_size = 0,*/
291};
292
293static int
294snd_ad1889_playback_open(struct snd_pcm_substream *ss)
295{
296	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
297	struct snd_pcm_runtime *rt = ss->runtime;
298
299	chip->psubs = ss;
300	rt->hw = snd_ad1889_playback_hw;
301
302	return 0;
303}
304
305static int
306snd_ad1889_capture_open(struct snd_pcm_substream *ss)
307{
308	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
309	struct snd_pcm_runtime *rt = ss->runtime;
310
311	chip->csubs = ss;
312	rt->hw = snd_ad1889_capture_hw;
313
314	return 0;
315}
316
317static int
318snd_ad1889_playback_close(struct snd_pcm_substream *ss)
319{
320	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
321	chip->psubs = NULL;
322	return 0;
323}
324
325static int
326snd_ad1889_capture_close(struct snd_pcm_substream *ss)
327{
328	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
329	chip->csubs = NULL;
330	return 0;
331}
332
333static int
334snd_ad1889_playback_prepare(struct snd_pcm_substream *ss)
335{
336	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
337	struct snd_pcm_runtime *rt = ss->runtime;
338	unsigned int size = snd_pcm_lib_buffer_bytes(ss);
339	unsigned int count = snd_pcm_lib_period_bytes(ss);
340	u16 reg;
341
342	ad1889_channel_reset(chip, AD_CHAN_WAV);
343
344	reg = ad1889_readw(chip, AD_DS_WSMC);
345	
346	/* Mask out 16-bit / Stereo */
347	reg &= ~(AD_DS_WSMC_WA16 | AD_DS_WSMC_WAST);
348
349	if (snd_pcm_format_width(rt->format) == 16)
350		reg |= AD_DS_WSMC_WA16;
351
352	if (rt->channels > 1)
353		reg |= AD_DS_WSMC_WAST;
354
355	/* let's make sure we don't clobber ourselves */
356	spin_lock_irq(&chip->lock);
357	
358	chip->wave.size = size;
359	chip->wave.reg = reg;
360	chip->wave.addr = rt->dma_addr;
361
362	ad1889_writew(chip, AD_DS_WSMC, chip->wave.reg);
363	
364	/* Set sample rates on the codec */
365	ad1889_writew(chip, AD_DS_WAS, rt->rate);
366
367	/* Set up DMA */
368	ad1889_load_wave_buffer_address(chip, chip->wave.addr);
369	ad1889_load_wave_buffer_count(chip, size);
370	ad1889_load_wave_interrupt_count(chip, count);
371
372	/* writes flush */
373	ad1889_readw(chip, AD_DS_WSMC);
374	
375	spin_unlock_irq(&chip->lock);
376	
377	dev_dbg(chip->card->dev,
378		"prepare playback: addr = 0x%x, count = %u, size = %u, reg = 0x%x, rate = %u\n",
379		chip->wave.addr, count, size, reg, rt->rate);
380	return 0;
381}
382
383static int
384snd_ad1889_capture_prepare(struct snd_pcm_substream *ss)
385{
386	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
387	struct snd_pcm_runtime *rt = ss->runtime;
388	unsigned int size = snd_pcm_lib_buffer_bytes(ss);
389	unsigned int count = snd_pcm_lib_period_bytes(ss);
390	u16 reg;
391
392	ad1889_channel_reset(chip, AD_CHAN_ADC);
393	
394	reg = ad1889_readw(chip, AD_DS_RAMC);
395
396	/* Mask out 16-bit / Stereo */
397	reg &= ~(AD_DS_RAMC_AD16 | AD_DS_RAMC_ADST);
398
399	if (snd_pcm_format_width(rt->format) == 16)
400		reg |= AD_DS_RAMC_AD16;
401
402	if (rt->channels > 1)
403		reg |= AD_DS_RAMC_ADST;
404
405	/* let's make sure we don't clobber ourselves */
406	spin_lock_irq(&chip->lock);
407	
408	chip->ramc.size = size;
409	chip->ramc.reg = reg;
410	chip->ramc.addr = rt->dma_addr;
411
412	ad1889_writew(chip, AD_DS_RAMC, chip->ramc.reg);
413
414	/* Set up DMA */
415	ad1889_load_adc_buffer_address(chip, chip->ramc.addr);
416	ad1889_load_adc_buffer_count(chip, size);
417	ad1889_load_adc_interrupt_count(chip, count);
418
419	/* writes flush */
420	ad1889_readw(chip, AD_DS_RAMC);
421	
422	spin_unlock_irq(&chip->lock);
423	
424	dev_dbg(chip->card->dev,
425		"prepare capture: addr = 0x%x, count = %u, size = %u, reg = 0x%x, rate = %u\n",
426		chip->ramc.addr, count, size, reg, rt->rate);
427	return 0;
428}
429
430/* this is called in atomic context with IRQ disabled.
431   Must be as fast as possible and not sleep.
432   DMA should be *triggered* by this call.
433   The WSMC "WAEN" bit triggers DMA Wave On/Off */
434static int
435snd_ad1889_playback_trigger(struct snd_pcm_substream *ss, int cmd)
436{
437	u16 wsmc;
438	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
439	
440	wsmc = ad1889_readw(chip, AD_DS_WSMC);
441
442	switch (cmd) {
443	case SNDRV_PCM_TRIGGER_START:
444		/* enable DMA loop & interrupts */
445		ad1889_writew(chip, AD_DMA_WAV, AD_DMA_LOOP | AD_DMA_IM_CNT);
446		wsmc |= AD_DS_WSMC_WAEN;
447		/* 1 to clear CHSS bit */
448		ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_WAVS);
449		ad1889_unmute(chip);
450		break;
451	case SNDRV_PCM_TRIGGER_STOP:
452		ad1889_mute(chip);
453		wsmc &= ~AD_DS_WSMC_WAEN;
454		break;
455	default:
456		snd_BUG();
457		return -EINVAL;
458	}
459	
460	chip->wave.reg = wsmc;
461	ad1889_writew(chip, AD_DS_WSMC, wsmc);	
462	ad1889_readw(chip, AD_DS_WSMC);	/* flush */
463
464	/* reset the chip when STOP - will disable IRQs */
465	if (cmd == SNDRV_PCM_TRIGGER_STOP)
466		ad1889_channel_reset(chip, AD_CHAN_WAV);
467
468	return 0;
469}
470
471/* this is called in atomic context with IRQ disabled.
472   Must be as fast as possible and not sleep.
473   DMA should be *triggered* by this call.
474   The RAMC "ADEN" bit triggers DMA ADC On/Off */
475static int
476snd_ad1889_capture_trigger(struct snd_pcm_substream *ss, int cmd)
477{
478	u16 ramc;
479	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
480
481	ramc = ad1889_readw(chip, AD_DS_RAMC);
482	
483	switch (cmd) {
484	case SNDRV_PCM_TRIGGER_START:
485		/* enable DMA loop & interrupts */
486		ad1889_writew(chip, AD_DMA_ADC, AD_DMA_LOOP | AD_DMA_IM_CNT);
487		ramc |= AD_DS_RAMC_ADEN;
488		/* 1 to clear CHSS bit */
489		ad1889_writel(chip, AD_DMA_CHSS, AD_DMA_CHSS_ADCS);
490		break;
491	case SNDRV_PCM_TRIGGER_STOP:
492		ramc &= ~AD_DS_RAMC_ADEN;
493		break;
494	default:
495		return -EINVAL;
496	}
497	
498	chip->ramc.reg = ramc;
499	ad1889_writew(chip, AD_DS_RAMC, ramc);	
500	ad1889_readw(chip, AD_DS_RAMC);	/* flush */
501	
502	/* reset the chip when STOP - will disable IRQs */
503	if (cmd == SNDRV_PCM_TRIGGER_STOP)
504		ad1889_channel_reset(chip, AD_CHAN_ADC);
505		
506	return 0;
507}
508
509/* Called in atomic context with IRQ disabled */
510static snd_pcm_uframes_t
511snd_ad1889_playback_pointer(struct snd_pcm_substream *ss)
512{
513	size_t ptr = 0;
514	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
515
516	if (unlikely(!(chip->wave.reg & AD_DS_WSMC_WAEN)))
517		return 0;
518
519	ptr = ad1889_readl(chip, AD_DMA_WAVCA);
520	ptr -= chip->wave.addr;
521	
522	if (snd_BUG_ON(ptr >= chip->wave.size))
523		return 0;
524	
525	return bytes_to_frames(ss->runtime, ptr);
526}
527
528/* Called in atomic context with IRQ disabled */
529static snd_pcm_uframes_t
530snd_ad1889_capture_pointer(struct snd_pcm_substream *ss)
531{
532	size_t ptr = 0;
533	struct snd_ad1889 *chip = snd_pcm_substream_chip(ss);
534
535	if (unlikely(!(chip->ramc.reg & AD_DS_RAMC_ADEN)))
536		return 0;
537
538	ptr = ad1889_readl(chip, AD_DMA_ADCCA);
539	ptr -= chip->ramc.addr;
540
541	if (snd_BUG_ON(ptr >= chip->ramc.size))
542		return 0;
543	
544	return bytes_to_frames(ss->runtime, ptr);
545}
546
547static const struct snd_pcm_ops snd_ad1889_playback_ops = {
548	.open = snd_ad1889_playback_open,
549	.close = snd_ad1889_playback_close,
 
 
 
550	.prepare = snd_ad1889_playback_prepare,
551	.trigger = snd_ad1889_playback_trigger,
552	.pointer = snd_ad1889_playback_pointer, 
553};
554
555static const struct snd_pcm_ops snd_ad1889_capture_ops = {
556	.open = snd_ad1889_capture_open,
557	.close = snd_ad1889_capture_close,
 
 
 
558	.prepare = snd_ad1889_capture_prepare,
559	.trigger = snd_ad1889_capture_trigger,
560	.pointer = snd_ad1889_capture_pointer, 
561};
562
563static irqreturn_t
564snd_ad1889_interrupt(int irq, void *dev_id)
565{
566	unsigned long st;
567	struct snd_ad1889 *chip = dev_id;
568
569	st = ad1889_readl(chip, AD_DMA_DISR);
570
571	/* clear ISR */
572	ad1889_writel(chip, AD_DMA_DISR, st);
573
574	st &= AD_INTR_MASK;
575
576	if (unlikely(!st))
577		return IRQ_NONE;
578
579	if (st & (AD_DMA_DISR_PMAI|AD_DMA_DISR_PTAI))
580		dev_dbg(chip->card->dev,
581			"Unexpected master or target abort interrupt!\n");
582
583	if ((st & AD_DMA_DISR_WAVI) && chip->psubs)
584		snd_pcm_period_elapsed(chip->psubs);
585	if ((st & AD_DMA_DISR_ADCI) && chip->csubs)
586		snd_pcm_period_elapsed(chip->csubs);
587
588	return IRQ_HANDLED;
589}
590
591static int
592snd_ad1889_pcm_init(struct snd_ad1889 *chip, int device)
593{
594	int err;
595	struct snd_pcm *pcm;
596
 
 
 
597	err = snd_pcm_new(chip->card, chip->card->driver, device, 1, 1, &pcm);
598	if (err < 0)
599		return err;
600
601	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, 
602			&snd_ad1889_playback_ops);
603	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
604			&snd_ad1889_capture_ops);
605
606	pcm->private_data = chip;
607	pcm->info_flags = 0;
608	strcpy(pcm->name, chip->card->shortname);
609	
610	chip->pcm = pcm;
611	chip->psubs = NULL;
612	chip->csubs = NULL;
613
614	snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV, &chip->pci->dev,
615				       BUFFER_BYTES_MAX / 2, BUFFER_BYTES_MAX);
 
 
616
 
 
 
 
 
 
 
 
617	return 0;
618}
619
620static void
621snd_ad1889_proc_read(struct snd_info_entry *entry, struct snd_info_buffer *buffer)
622{
623	struct snd_ad1889 *chip = entry->private_data;
624	u16 reg;
625	int tmp;
626
627	reg = ad1889_readw(chip, AD_DS_WSMC);
628	snd_iprintf(buffer, "Wave output: %s\n",
629			(reg & AD_DS_WSMC_WAEN) ? "enabled" : "disabled");
630	snd_iprintf(buffer, "Wave Channels: %s\n",
631			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
632	snd_iprintf(buffer, "Wave Quality: %d-bit linear\n",
633			(reg & AD_DS_WSMC_WA16) ? 16 : 8);
634	
635	/* WARQ is at offset 12 */
636	tmp = (reg & AD_DS_WSMC_WARQ) ?
637		((((reg & AD_DS_WSMC_WARQ) >> 12) & 0x01) ? 12 : 18) : 4;
638	tmp /= (reg & AD_DS_WSMC_WAST) ? 2 : 1;
639	
640	snd_iprintf(buffer, "Wave FIFO: %d %s words\n\n", tmp,
641			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
642				
643	
644	snd_iprintf(buffer, "Synthesis output: %s\n",
645			reg & AD_DS_WSMC_SYEN ? "enabled" : "disabled");
646	
647	/* SYRQ is at offset 4 */
648	tmp = (reg & AD_DS_WSMC_SYRQ) ?
649		((((reg & AD_DS_WSMC_SYRQ) >> 4) & 0x01) ? 12 : 18) : 4;
650	tmp /= (reg & AD_DS_WSMC_WAST) ? 2 : 1;
651	
652	snd_iprintf(buffer, "Synthesis FIFO: %d %s words\n\n", tmp,
653			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
654
655	reg = ad1889_readw(chip, AD_DS_RAMC);
656	snd_iprintf(buffer, "ADC input: %s\n",
657			(reg & AD_DS_RAMC_ADEN) ? "enabled" : "disabled");
658	snd_iprintf(buffer, "ADC Channels: %s\n",
659			(reg & AD_DS_RAMC_ADST) ? "stereo" : "mono");
660	snd_iprintf(buffer, "ADC Quality: %d-bit linear\n",
661			(reg & AD_DS_RAMC_AD16) ? 16 : 8);
662	
663	/* ACRQ is at offset 4 */
664	tmp = (reg & AD_DS_RAMC_ACRQ) ?
665		((((reg & AD_DS_RAMC_ACRQ) >> 4) & 0x01) ? 12 : 18) : 4;
666	tmp /= (reg & AD_DS_RAMC_ADST) ? 2 : 1;
667	
668	snd_iprintf(buffer, "ADC FIFO: %d %s words\n\n", tmp,
669			(reg & AD_DS_RAMC_ADST) ? "stereo" : "mono");
670	
671	snd_iprintf(buffer, "Resampler input: %s\n",
672			reg & AD_DS_RAMC_REEN ? "enabled" : "disabled");
673			
674	/* RERQ is at offset 12 */
675	tmp = (reg & AD_DS_RAMC_RERQ) ?
676		((((reg & AD_DS_RAMC_RERQ) >> 12) & 0x01) ? 12 : 18) : 4;
677	tmp /= (reg & AD_DS_RAMC_ADST) ? 2 : 1;
678	
679	snd_iprintf(buffer, "Resampler FIFO: %d %s words\n\n", tmp,
680			(reg & AD_DS_WSMC_WAST) ? "stereo" : "mono");
681				
682	
683	/* doc says LSB represents -1.5dB, but the max value (-94.5dB)
684	suggests that LSB is -3dB, which is more coherent with the logarithmic
685	nature of the dB scale */
686	reg = ad1889_readw(chip, AD_DS_WADA);
687	snd_iprintf(buffer, "Left: %s, -%d dB\n",
688			(reg & AD_DS_WADA_LWAM) ? "mute" : "unmute",
689			((reg & AD_DS_WADA_LWAA) >> 8) * 3);
690	reg = ad1889_readw(chip, AD_DS_WADA);
691	snd_iprintf(buffer, "Right: %s, -%d dB\n",
692			(reg & AD_DS_WADA_RWAM) ? "mute" : "unmute",
693			(reg & AD_DS_WADA_RWAA) * 3);
694	
695	reg = ad1889_readw(chip, AD_DS_WAS);
696	snd_iprintf(buffer, "Wave samplerate: %u Hz\n", reg);
697	reg = ad1889_readw(chip, AD_DS_RES);
698	snd_iprintf(buffer, "Resampler samplerate: %u Hz\n", reg);
699}
700
701static void
702snd_ad1889_proc_init(struct snd_ad1889 *chip)
703{
704	snd_card_ro_proc_new(chip->card, chip->card->driver,
705			     chip, snd_ad1889_proc_read);
 
 
706}
707
708static const struct ac97_quirk ac97_quirks[] = {
709	{
710		.subvendor = 0x11d4,	/* AD */
711		.subdevice = 0x1889,	/* AD1889 */
712		.codec_id = AC97_ID_AD1819,
713		.name = "AD1889",
714		.type = AC97_TUNE_HP_ONLY
715	},
716	{ } /* terminator */
717};
718
719static void
720snd_ad1889_ac97_xinit(struct snd_ad1889 *chip)
721{
722	u16 reg;
723
724	reg = ad1889_readw(chip, AD_AC97_ACIC);
725	reg |= AD_AC97_ACIC_ACRD;		/* Reset Disable */
726	ad1889_writew(chip, AD_AC97_ACIC, reg);
727	ad1889_readw(chip, AD_AC97_ACIC);	/* flush posted write */
728	udelay(10);
729	/* Interface Enable */
730	reg |= AD_AC97_ACIC_ACIE;
731	ad1889_writew(chip, AD_AC97_ACIC, reg);
732	
733	snd_ad1889_ac97_ready(chip);
734
735	/* Audio Stream Output | Variable Sample Rate Mode */
736	reg = ad1889_readw(chip, AD_AC97_ACIC);
737	reg |= AD_AC97_ACIC_ASOE | AD_AC97_ACIC_VSRM;
738	ad1889_writew(chip, AD_AC97_ACIC, reg);
739	ad1889_readw(chip, AD_AC97_ACIC); /* flush posted write */
740
741}
742
743static int
 
 
 
 
 
 
 
 
 
 
 
 
 
 
744snd_ad1889_ac97_init(struct snd_ad1889 *chip, const char *quirk_override)
745{
746	int err;
747	struct snd_ac97_template ac97;
748	static const struct snd_ac97_bus_ops ops = {
749		.write = snd_ad1889_ac97_write,
750		.read = snd_ad1889_ac97_read,
751	};
752
753	/* doing that here, it works. */
754	snd_ad1889_ac97_xinit(chip);
755
756	err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus);
757	if (err < 0)
758		return err;
759	
 
 
760	memset(&ac97, 0, sizeof(ac97));
761	ac97.private_data = chip;
 
762	ac97.pci = chip->pci;
763
764	err = snd_ac97_mixer(chip->ac97_bus, &ac97, &chip->ac97);
765	if (err < 0)
766		return err;
767		
768	snd_ac97_tune_hardware(chip->ac97, ac97_quirks, quirk_override);
769	
770	return 0;
771}
772
773static void
774snd_ad1889_free(struct snd_card *card)
775{
776	struct snd_ad1889 *chip = card->private_data;
 
777
778	spin_lock_irq(&chip->lock);
779
780	ad1889_mute(chip);
781
782	/* Turn off interrupt on count and zero DMA registers */
783	ad1889_channel_reset(chip, AD_CHAN_WAV | AD_CHAN_ADC);
784
785	/* clear DISR. If we don't, we'd better jump off the Eiffel Tower */
786	ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PTAI | AD_DMA_DISR_PMAI);
787	ad1889_readl(chip, AD_DMA_DISR);	/* flush, dammit! */
788
789	spin_unlock_irq(&chip->lock);
 
 
 
 
 
 
 
 
 
 
 
 
 
790}
791
792static int
793snd_ad1889_create(struct snd_card *card, struct pci_dev *pci)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
794{
795	struct snd_ad1889 *chip = card->private_data;
796	int err;
797
798	err = pcim_enable_device(pci);
799	if (err < 0)
 
 
 
 
 
 
800		return err;
801
802	/* check PCI availability (32bit DMA) */
803	if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32))) {
804		dev_err(card->dev, "error setting 32-bit DMA mask.\n");
 
 
805		return -ENXIO;
806	}
807
 
 
 
 
 
 
808	chip->card = card;
 
809	chip->pci = pci;
810	chip->irq = -1;
811
812	/* (1) PCI resource allocation */
813	err = pcim_iomap_regions(pci, 1 << 0, card->driver);
814	if (err < 0)
815		return err;
816
817	chip->bar = pci_resource_start(pci, 0);
818	chip->iobase = pcim_iomap_table(pci)[0];
 
 
 
 
 
819	
820	pci_set_master(pci);
821
822	spin_lock_init(&chip->lock);	/* only now can we call ad1889_free */
823
824	if (devm_request_irq(&pci->dev, pci->irq, snd_ad1889_interrupt,
825			     IRQF_SHARED, KBUILD_MODNAME, chip)) {
826		dev_err(card->dev, "cannot obtain IRQ %d\n", pci->irq);
 
827		return -EBUSY;
828	}
829
830	chip->irq = pci->irq;
831	card->sync_irq = chip->irq;
832	card->private_free = snd_ad1889_free;
833
834	/* (2) initialization of the chip hardware */
835	ad1889_writew(chip, AD_DS_CCS, AD_DS_CCS_CLKEN); /* turn on clock */
836	ad1889_readw(chip, AD_DS_CCS);	/* flush posted write */
 
 
 
 
 
 
 
837
838	usleep_range(10000, 11000);
839
840	/* enable Master and Target abort interrupts */
841	ad1889_writel(chip, AD_DMA_DISR, AD_DMA_DISR_PMAE | AD_DMA_DISR_PTAE);
842
843	return 0;
 
 
 
 
 
 
844}
845
846static int
847__snd_ad1889_probe(struct pci_dev *pci,
848		   const struct pci_device_id *pci_id)
849{
850	int err;
851	static int devno;
852	struct snd_card *card;
853	struct snd_ad1889 *chip;
854
855	/* (1) */
856	if (devno >= SNDRV_CARDS)
857		return -ENODEV;
858	if (!enable[devno]) {
859		devno++;
860		return -ENOENT;
861	}
862
863	/* (2) */
864	err = snd_devm_card_new(&pci->dev, index[devno], id[devno], THIS_MODULE,
865				sizeof(*chip), &card);
866	if (err < 0)
867		return err;
868	chip = card->private_data;
869
870	strcpy(card->driver, "AD1889");
871	strcpy(card->shortname, "Analog Devices AD1889");
872
873	/* (3) */
874	err = snd_ad1889_create(card, pci);
875	if (err < 0)
876		return err;
877
878	/* (4) */
879	sprintf(card->longname, "%s at 0x%lx irq %i",
880		card->shortname, chip->bar, chip->irq);
881
882	/* (5) */
883	/* register AC97 mixer */
884	err = snd_ad1889_ac97_init(chip, ac97_quirk[devno]);
885	if (err < 0)
886		return err;
887	
888	err = snd_ad1889_pcm_init(chip, 0);
889	if (err < 0)
890		return err;
891
892	/* register proc interface */
893	snd_ad1889_proc_init(chip);
894
895	/* (6) */
896	err = snd_card_register(card);
897	if (err < 0)
898		return err;
899
900	/* (7) */
901	pci_set_drvdata(pci, card);
902
903	devno++;
904	return 0;
 
 
 
 
905}
906
907static int snd_ad1889_probe(struct pci_dev *pci,
908			    const struct pci_device_id *pci_id)
909{
910	return snd_card_free_on_error(&pci->dev, __snd_ad1889_probe(pci, pci_id));
 
911}
912
913static const struct pci_device_id snd_ad1889_ids[] = {
914	{ PCI_DEVICE(PCI_VENDOR_ID_ANALOG_DEVICES, PCI_DEVICE_ID_AD1889JS) },
915	{ 0, },
916};
917MODULE_DEVICE_TABLE(pci, snd_ad1889_ids);
918
919static struct pci_driver ad1889_pci_driver = {
920	.name = KBUILD_MODNAME,
921	.id_table = snd_ad1889_ids,
922	.probe = snd_ad1889_probe,
 
923};
924
925module_pci_driver(ad1889_pci_driver);