File Index
Files and directories
Sign in
FILE

emu10k1_main.c

File preview with syntax highlighting.

linux-6.19.14/sound/pci/emu10k1/emu10k1_main.c C
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
   4 *                   James Courtier-Dutton <James@superbug.co.uk>
   5 *                   Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
   6 *                   Creative Labs, Inc.
   7 *
   8 *  Routines for control of EMU10K1 chips
   9 */
  10
  11#include <linux/sched.h>
  12#include <linux/delay.h>
  13#include <linux/init.h>
  14#include <linux/module.h>
  15#include <linux/interrupt.h>
  16#include <linux/iommu.h>
  17#include <linux/pci.h>
  18#include <linux/slab.h>
  19#include <linux/vmalloc.h>
  20#include <linux/mutex.h>
  21
  22
  23#include <sound/core.h>
  24#include <sound/emu10k1.h>
  25#include <linux/firmware.h>
  26#include "p16v.h"
  27#include "tina2.h"
  28#include "p17v.h"
  29
  30
  31#define HANA_FILENAME "emu/hana.fw"
  32#define DOCK_FILENAME "emu/audio_dock.fw"
  33#define EMU1010B_FILENAME "emu/emu1010b.fw"
  34#define MICRO_DOCK_FILENAME "emu/micro_dock.fw"
  35#define EMU0404_FILENAME "emu/emu0404.fw"
  36#define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw"
  37
  38MODULE_FIRMWARE(HANA_FILENAME);
  39MODULE_FIRMWARE(DOCK_FILENAME);
  40MODULE_FIRMWARE(EMU1010B_FILENAME);
  41MODULE_FIRMWARE(MICRO_DOCK_FILENAME);
  42MODULE_FIRMWARE(EMU0404_FILENAME);
  43MODULE_FIRMWARE(EMU1010_NOTEBOOK_FILENAME);
  44
  45
  46/*************************************************************************
  47 * EMU10K1 init / done
  48 *************************************************************************/
  49
  50void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch)
  51{
  52	snd_emu10k1_ptr_write_multiple(emu, ch,
  53		DCYSUSV, 0,
  54		VTFT, VTFT_FILTERTARGET_MASK,
  55		CVCF, CVCF_CURRENTFILTER_MASK,
  56		PTRX, 0,
  57		CPF, 0,
  58		CCR, 0,
  59
  60		PSST, 0,
  61		DSL, 0x10,
  62		CCCA, 0,
  63		Z1, 0,
  64		Z2, 0,
  65		FXRT, 0x32100000,
  66
  67		// The rest is meaningless as long as DCYSUSV_CHANNELENABLE_MASK is zero
  68		DCYSUSM, 0,
  69		ATKHLDV, 0,
  70		ATKHLDM, 0,
  71		IP, 0,
  72		IFATN, IFATN_FILTERCUTOFF_MASK | IFATN_ATTENUATION_MASK,
  73		PEFE, 0,
  74		FMMOD, 0,
  75		TREMFRQ, 24,	/* 1 Hz */
  76		FM2FRQ2, 24,	/* 1 Hz */
  77		LFOVAL2, 0,
  78		LFOVAL1, 0,
  79		ENVVOL, 0,
  80		ENVVAL, 0,
  81
  82		REGLIST_END);
  83
  84	/* Audigy extra stuffs */
  85	if (emu->audigy) {
  86		snd_emu10k1_ptr_write_multiple(emu, ch,
  87			A_CSBA, 0,
  88			A_CSDC, 0,
  89			A_CSFE, 0,
  90			A_CSHG, 0,
  91			A_FXRT1, 0x03020100,
  92			A_FXRT2, 0x07060504,
  93			A_SENDAMOUNTS, 0,
  94			REGLIST_END);
  95	}
  96}
  97
  98static const unsigned int spi_dac_init[] = {
  99		0x00ff,
 100		0x02ff,
 101		0x0400,
 102		0x0520,
 103		0x0600,
 104		0x08ff,
 105		0x0aff,
 106		0x0cff,
 107		0x0eff,
 108		0x10ff,
 109		0x1200,
 110		0x1400,
 111		0x1480,
 112		0x1800,
 113		0x1aff,
 114		0x1cff,
 115		0x1e00,
 116		0x0530,
 117		0x0602,
 118		0x0622,
 119		0x1400,
 120};
 121
 122static const unsigned int i2c_adc_init[][2] = {
 123	{ 0x17, 0x00 }, /* Reset */
 124	{ 0x07, 0x00 }, /* Timeout */
 125	{ 0x0b, 0x22 },  /* Interface control */
 126	{ 0x0c, 0x22 },  /* Master mode control */
 127	{ 0x0d, 0x08 },  /* Powerdown control */
 128	{ 0x0e, 0xcf },  /* Attenuation Left  0x01 = -103dB, 0xff = 24dB */
 129	{ 0x0f, 0xcf },  /* Attenuation Right 0.5dB steps */
 130	{ 0x10, 0x7b },  /* ALC Control 1 */
 131	{ 0x11, 0x00 },  /* ALC Control 2 */
 132	{ 0x12, 0x32 },  /* ALC Control 3 */
 133	{ 0x13, 0x00 },  /* Noise gate control */
 134	{ 0x14, 0xa6 },  /* Limiter control */
 135	{ 0x15, ADC_MUX_2 },  /* ADC Mixer control. Mic for A2ZS Notebook */
 136};
 137
 138static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir)
 139{
 140	unsigned int silent_page;
 141	int ch;
 142	u32 tmp;
 143
 144	/* disable audio and lock cache */
 145	outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK |
 146		HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
 147
 148	outl(0, emu->port + INTE);
 149
 150	snd_emu10k1_ptr_write_multiple(emu, 0,
 151		/* reset recording buffers */
 152		MICBS, ADCBS_BUFSIZE_NONE,
 153		MICBA, 0,
 154		FXBS, ADCBS_BUFSIZE_NONE,
 155		FXBA, 0,
 156		ADCBS, ADCBS_BUFSIZE_NONE,
 157		ADCBA, 0,
 158
 159		/* disable channel interrupt */
 160		CLIEL, 0,
 161		CLIEH, 0,
 162
 163		/* disable stop on loop end */
 164		SOLEL, 0,
 165		SOLEH, 0,
 166
 167		REGLIST_END);
 168
 169	if (emu->audigy) {
 170		/* set SPDIF bypass mode */
 171		snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT);
 172		/* enable rear left + rear right AC97 slots */
 173		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT |
 174				      AC97SLOT_REAR_LEFT);
 175	}
 176
 177	/* init envelope engine */
 178	for (ch = 0; ch < NUM_G; ch++)
 179		snd_emu10k1_voice_init(emu, ch);
 180
 181	snd_emu10k1_ptr_write_multiple(emu, 0,
 182		SPCS0, emu->spdif_bits[0],
 183		SPCS1, emu->spdif_bits[1],
 184		SPCS2, emu->spdif_bits[2],
 185		REGLIST_END);
 186
 187	if (emu->card_capabilities->emu_model) {
 188	} else if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
 189		/* Hacks for Alice3 to work independent of haP16V driver */
 190		/* Setup SRCMulti_I2S SamplingRate */
 191		snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000);
 192
 193		/* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
 194		snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14);
 195		/* Setup SRCMulti Input Audio Enable */
 196		/* Use 0xFFFFFFFF to enable P16V sounds. */
 197		snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF);
 198
 199		/* Enabled Phased (8-channel) P16V playback */
 200		outl(0x0201, emu->port + HCFG2);
 201		/* Set playback routing. */
 202		snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4);
 203	} else if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */
 204		/* Hacks for Alice3 to work independent of haP16V driver */
 205		dev_info(emu->card->dev, "Audigy2 value: Special config.\n");
 206		/* Setup SRCMulti_I2S SamplingRate */
 207		snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000);
 208
 209		/* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
 210		snd_emu10k1_ptr20_write(emu, P17V_SRCSel, 0, 0x14);
 211
 212		/* Setup SRCMulti Input Audio Enable */
 213		snd_emu10k1_ptr20_write(emu, P17V_MIXER_I2S_ENABLE, 0, 0xFF000000);
 214
 215		/* Setup SPDIF Out Audio Enable */
 216		/* The Audigy 2 Value has a separate SPDIF out,
 217		 * so no need for a mixer switch
 218		 */
 219		snd_emu10k1_ptr20_write(emu, P17V_MIXER_SPDIF_ENABLE, 0, 0xFF000000);
 220
 221		tmp = inw(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */
 222		outw(tmp, emu->port + A_IOCFG);
 223	}
 224	if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */
 225		int size, n;
 226
 227		size = ARRAY_SIZE(spi_dac_init);
 228		for (n = 0; n < size; n++)
 229			snd_emu10k1_spi_write(emu, spi_dac_init[n]);
 230
 231		snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10);
 232		/* Enable GPIOs
 233		 * GPIO0: Unknown
 234		 * GPIO1: Speakers-enabled.
 235		 * GPIO2: Unknown
 236		 * GPIO3: Unknown
 237		 * GPIO4: IEC958 Output on.
 238		 * GPIO5: Unknown
 239		 * GPIO6: Unknown
 240		 * GPIO7: Unknown
 241		 */
 242		outw(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */
 243	}
 244	if (emu->card_capabilities->i2c_adc) { /* Audigy 2 ZS Notebook with ADC Wolfson WM8775 */
 245		int size, n;
 246
 247		snd_emu10k1_ptr20_write(emu, P17V_I2S_SRC_SEL, 0, 0x2020205f);
 248		tmp = inw(emu->port + A_IOCFG);
 249		outw(tmp | 0x4, emu->port + A_IOCFG);  /* Set bit 2 for mic input */
 250		tmp = inw(emu->port + A_IOCFG);
 251		size = ARRAY_SIZE(i2c_adc_init);
 252		for (n = 0; n < size; n++)
 253			snd_emu10k1_i2c_write(emu, i2c_adc_init[n][0], i2c_adc_init[n][1]);
 254		for (n = 0; n < 4; n++) {
 255			emu->i2c_capture_volume[n][0] = 0xcf;
 256			emu->i2c_capture_volume[n][1] = 0xcf;
 257		}
 258	}
 259
 260
 261	snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
 262	snd_emu10k1_ptr_write(emu, TCB, 0, 0);	/* taken from original driver */
 263	snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_256K);	/* taken from original driver */
 264
 265	silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
 266	for (ch = 0; ch < NUM_G; ch++) {
 267		snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
 268		snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
 269	}
 270
 271	if (emu->card_capabilities->emu_model) {
 272		outl(HCFG_AUTOMUTE_ASYNC |
 273			HCFG_EMU32_SLAVE |
 274			HCFG_AUDIOENABLE, emu->port + HCFG);
 275	/*
 276	 *  Hokay, setup HCFG
 277	 *   Mute Disable Audio = 0
 278	 *   Lock Tank Memory = 1
 279	 *   Lock Sound Memory = 0
 280	 *   Auto Mute = 1
 281	 */
 282	} else if (emu->audigy) {
 283		if (emu->revision == 4) /* audigy2 */
 284			outl(HCFG_AUDIOENABLE |
 285			     HCFG_AC3ENABLE_CDSPDIF |
 286			     HCFG_AC3ENABLE_GPSPDIF |
 287			     HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
 288		else
 289			outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
 290	/* FIXME: Remove all these emu->model and replace it with a card recognition parameter,
 291	 * e.g. card_capabilities->joystick */
 292	} else if (emu->model == 0x20 ||
 293	    emu->model == 0xc400 ||
 294	    (emu->model == 0x21 && emu->revision < 6))
 295		outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG);
 296	else
 297		/* With on-chip joystick */
 298		outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
 299
 300	if (enable_ir) {	/* enable IR for SB Live */
 301		if (emu->card_capabilities->emu_model) {
 302			;  /* Disable all access to A_IOCFG for the emu1010 */
 303		} else if (emu->card_capabilities->i2c_adc) {
 304			;  /* Disable A_IOCFG for Audigy 2 ZS Notebook */
 305		} else if (emu->audigy) {
 306			u16 reg = inw(emu->port + A_IOCFG);
 307			outw(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
 308			udelay(500);
 309			outw(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
 310			udelay(100);
 311			outw(reg, emu->port + A_IOCFG);
 312		} else {
 313			unsigned int reg = inl(emu->port + HCFG);
 314			outl(reg | HCFG_GPOUT2, emu->port + HCFG);
 315			udelay(500);
 316			outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG);
 317			udelay(100);
 318			outl(reg, emu->port + HCFG);
 319		}
 320	}
 321
 322	if (emu->card_capabilities->emu_model) {
 323		;  /* Disable all access to A_IOCFG for the emu1010 */
 324	} else if (emu->card_capabilities->i2c_adc) {
 325		;  /* Disable A_IOCFG for Audigy 2 ZS Notebook */
 326	} else if (emu->audigy) {	/* enable analog output */
 327		u16 reg = inw(emu->port + A_IOCFG);
 328		outw(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
 329	}
 330
 331	if (emu->address_mode == 0) {
 332		/* use 16M in 4G */
 333		outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG);
 334	}
 335
 336	return 0;
 337}
 338
 339static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu)
 340{
 341	/*
 342	 *  Enable the audio bit
 343	 */
 344	outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG);
 345
 346	/* Enable analog/digital outs on audigy */
 347	if (emu->card_capabilities->emu_model) {
 348		;  /* Disable all access to A_IOCFG for the emu1010 */
 349	} else if (emu->card_capabilities->i2c_adc) {
 350		;  /* Disable A_IOCFG for Audigy 2 ZS Notebook */
 351	} else if (emu->audigy) {
 352		outw(inw(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
 353
 354		if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
 355			/* Unmute Analog now.  Set GPO6 to 1 for Apollo.
 356			 * This has to be done after init ALice3 I2SOut beyond 48KHz.
 357			 * So, sequence is important. */
 358			outw(inw(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG);
 359		} else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */
 360			/* Unmute Analog now. */
 361			outw(inw(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG);
 362		} else {
 363			/* Disable routing from AC97 line out to Front speakers */
 364			outw(inw(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG);
 365		}
 366	}
 367
 368#if 0
 369	{
 370	unsigned int tmp;
 371	/* FIXME: the following routine disables LiveDrive-II !! */
 372	/* TOSLink detection */
 373	emu->tos_link = 0;
 374	tmp = inl(emu->port + HCFG);
 375	if (tmp & (HCFG_GPINPUT0 | HCFG_GPINPUT1)) {
 376		outl(tmp|0x800, emu->port + HCFG);
 377		udelay(50);
 378		if (tmp != (inl(emu->port + HCFG) & ~0x800)) {
 379			emu->tos_link = 1;
 380			outl(tmp, emu->port + HCFG);
 381		}
 382	}
 383	}
 384#endif
 385
 386	if (emu->card_capabilities->emu_model)
 387		snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE | INTE_A_GPIOENABLE);
 388	else
 389		snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE);
 390}
 391
 392int snd_emu10k1_done(struct snd_emu10k1 *emu)
 393{
 394	int ch;
 395
 396	outl(0, emu->port + INTE);
 397
 398	/*
 399	 *  Shutdown the voices
 400	 */
 401	for (ch = 0; ch < NUM_G; ch++) {
 402		snd_emu10k1_ptr_write_multiple(emu, ch,
 403			DCYSUSV, 0,
 404			VTFT, 0,
 405			CVCF, 0,
 406			PTRX, 0,
 407			CPF, 0,
 408			REGLIST_END);
 409	}
 410
 411	// stop the DSP
 412	if (emu->audigy)
 413		snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
 414	else
 415		snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP);
 416
 417	snd_emu10k1_ptr_write_multiple(emu, 0,
 418		/* reset recording buffers */
 419		MICBS, 0,
 420		MICBA, 0,
 421		FXBS, 0,
 422		FXBA, 0,
 423		FXWC, 0,
 424		ADCBS, ADCBS_BUFSIZE_NONE,
 425		ADCBA, 0,
 426		TCBS, TCBS_BUFFSIZE_16K,
 427		TCB, 0,
 428
 429		/* disable channel interrupt */
 430		CLIEL, 0,
 431		CLIEH, 0,
 432		SOLEL, 0,
 433		SOLEH, 0,
 434
 435		PTB, 0,
 436
 437		REGLIST_END);
 438
 439	/* disable audio and lock cache */
 440	outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
 441
 442	return 0;
 443}
 444
 445/*************************************************************************
 446 * ECARD functional implementation
 447 *************************************************************************/
 448
 449/* In A1 Silicon, these bits are in the HC register */
 450#define HOOKN_BIT		(1L << 12)
 451#define HANDN_BIT		(1L << 11)
 452#define PULSEN_BIT		(1L << 10)
 453
 454#define EC_GDI1			(1 << 13)
 455#define EC_GDI0			(1 << 14)
 456
 457#define EC_NUM_CONTROL_BITS	20
 458
 459#define EC_AC3_DATA_SELN	0x0001L
 460#define EC_EE_DATA_SEL		0x0002L
 461#define EC_EE_CNTRL_SELN	0x0004L
 462#define EC_EECLK		0x0008L
 463#define EC_EECS			0x0010L
 464#define EC_EESDO		0x0020L
 465#define EC_TRIM_CSN		0x0040L
 466#define EC_TRIM_SCLK		0x0080L
 467#define EC_TRIM_SDATA		0x0100L
 468#define EC_TRIM_MUTEN		0x0200L
 469#define EC_ADCCAL		0x0400L
 470#define EC_ADCRSTN		0x0800L
 471#define EC_DACCAL		0x1000L
 472#define EC_DACMUTEN		0x2000L
 473#define EC_LEDN			0x4000L
 474
 475#define EC_SPDIF0_SEL_SHIFT	15
 476#define EC_SPDIF1_SEL_SHIFT	17
 477#define EC_SPDIF0_SEL_MASK	(0x3L << EC_SPDIF0_SEL_SHIFT)
 478#define EC_SPDIF1_SEL_MASK	(0x7L << EC_SPDIF1_SEL_SHIFT)
 479#define EC_SPDIF0_SELECT(_x)	(((_x) << EC_SPDIF0_SEL_SHIFT) & EC_SPDIF0_SEL_MASK)
 480#define EC_SPDIF1_SELECT(_x)	(((_x) << EC_SPDIF1_SEL_SHIFT) & EC_SPDIF1_SEL_MASK)
 481#define EC_CURRENT_PROM_VERSION 0x01	/* Self-explanatory.  This should
 482					 * be incremented any time the EEPROM's
 483					 * format is changed.  */
 484
 485#define EC_EEPROM_SIZE		0x40	/* ECARD EEPROM has 64 16-bit words */
 486
 487/* Addresses for special values stored in to EEPROM */
 488#define EC_PROM_VERSION_ADDR	0x20	/* Address of the current prom version */
 489#define EC_BOARDREV0_ADDR	0x21	/* LSW of board rev */
 490#define EC_BOARDREV1_ADDR	0x22	/* MSW of board rev */
 491
 492#define EC_LAST_PROMFILE_ADDR	0x2f
 493
 494#define EC_SERIALNUM_ADDR	0x30	/* First word of serial number.  The
 495					 * can be up to 30 characters in length
 496					 * and is stored as a NULL-terminated
 497					 * ASCII string.  Any unused bytes must be
 498					 * filled with zeros */
 499#define EC_CHECKSUM_ADDR	0x3f	/* Location at which checksum is stored */
 500
 501
 502/* Most of this stuff is pretty self-evident.  According to the hardware
 503 * dudes, we need to leave the ADCCAL bit low in order to avoid a DC
 504 * offset problem.  Weird.
 505 */
 506#define EC_RAW_RUN_MODE		(EC_DACMUTEN | EC_ADCRSTN | EC_TRIM_MUTEN | \
 507				 EC_TRIM_CSN)
 508
 509
 510#define EC_DEFAULT_ADC_GAIN	0xC4C4
 511#define EC_DEFAULT_SPDIF0_SEL	0x0
 512#define EC_DEFAULT_SPDIF1_SEL	0x4
 513
 514/**************************************************************************
 515 * @func Clock bits into the Ecard's control latch.  The Ecard uses a
 516 *  control latch will is loaded bit-serially by toggling the Modem control
 517 *  lines from function 2 on the E8010.  This function hides these details
 518 *  and presents the illusion that we are actually writing to a distinct
 519 *  register.
 520 */
 521
 522static void snd_emu10k1_ecard_write(struct snd_emu10k1 *emu, unsigned int value)
 523{
 524	unsigned short count;
 525	unsigned int data;
 526	unsigned long hc_port;
 527	unsigned int hc_value;
 528
 529	hc_port = emu->port + HCFG;
 530	hc_value = inl(hc_port) & ~(HOOKN_BIT | HANDN_BIT | PULSEN_BIT);
 531	outl(hc_value, hc_port);
 532
 533	for (count = 0; count < EC_NUM_CONTROL_BITS; count++) {
 534
 535		/* Set up the value */
 536		data = ((value & 0x1) ? PULSEN_BIT : 0);
 537		value >>= 1;
 538
 539		outl(hc_value | data, hc_port);
 540
 541		/* Clock the shift register */
 542		outl(hc_value | data | HANDN_BIT, hc_port);
 543		outl(hc_value | data, hc_port);
 544	}
 545
 546	/* Latch the bits */
 547	outl(hc_value | HOOKN_BIT, hc_port);
 548	outl(hc_value, hc_port);
 549}
 550
 551/**************************************************************************
 552 * @func Set the gain of the ECARD's CS3310 Trim/gain controller.  The
 553 * trim value consists of a 16bit value which is composed of two
 554 * 8 bit gain/trim values, one for the left channel and one for the
 555 * right channel.  The following table maps from the Gain/Attenuation
 556 * value in decibels into the corresponding bit pattern for a single
 557 * channel.
 558 */
 559
 560static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 *emu,
 561					 unsigned short gain)
 562{
 563	unsigned int bit;
 564
 565	/* Enable writing to the TRIM registers */
 566	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
 567
 568	/* Do it again to insure that we meet hold time requirements */
 569	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
 570
 571	for (bit = (1 << 15); bit; bit >>= 1) {
 572		unsigned int value;
 573
 574		value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA);
 575
 576		if (gain & bit)
 577			value |= EC_TRIM_SDATA;
 578
 579		/* Clock the bit */
 580		snd_emu10k1_ecard_write(emu, value);
 581		snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK);
 582		snd_emu10k1_ecard_write(emu, value);
 583	}
 584
 585	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
 586}
 587
 588static int snd_emu10k1_ecard_init(struct snd_emu10k1 *emu)
 589{
 590	unsigned int hc_value;
 591
 592	/* Set up the initial settings */
 593	emu->ecard_ctrl = EC_RAW_RUN_MODE |
 594			  EC_SPDIF0_SELECT(EC_DEFAULT_SPDIF0_SEL) |
 595			  EC_SPDIF1_SELECT(EC_DEFAULT_SPDIF1_SEL);
 596
 597	/* Step 0: Set the codec type in the hardware control register
 598	 * and enable audio output */
 599	hc_value = inl(emu->port + HCFG);
 600	outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG);
 601	inl(emu->port + HCFG);
 602
 603	/* Step 1: Turn off the led and deassert TRIM_CS */
 604	snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
 605
 606	/* Step 2: Calibrate the ADC and DAC */
 607	snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN);
 608
 609	/* Step 3: Wait for awhile;   XXX We can't get away with this
 610	 * under a real operating system; we'll need to block and wait that
 611	 * way. */
 612	snd_emu10k1_wait(emu, 48000);
 613
 614	/* Step 4: Switch off the DAC and ADC calibration.  Note
 615	 * That ADC_CAL is actually an inverted signal, so we assert
 616	 * it here to stop calibration.  */
 617	snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
 618
 619	/* Step 4: Switch into run mode */
 620	snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
 621
 622	/* Step 5: Set the analog input gain */
 623	snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN);
 624
 625	return 0;
 626}
 627
 628static int snd_emu10k1_cardbus_init(struct snd_emu10k1 *emu)
 629{
 630	unsigned long special_port;
 631	__always_unused unsigned int value;
 632
 633	/* Special initialisation routine
 634	 * before the rest of the IO-Ports become active.
 635	 */
 636	special_port = emu->port + 0x38;
 637	value = inl(special_port);
 638	outl(0x00d00000, special_port);
 639	value = inl(special_port);
 640	outl(0x00d00001, special_port);
 641	value = inl(special_port);
 642	outl(0x00d0005f, special_port);
 643	value = inl(special_port);
 644	outl(0x00d0007f, special_port);
 645	value = inl(special_port);
 646	outl(0x0090007f, special_port);
 647	value = inl(special_port);
 648
 649	snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */
 650	/* Delay to give time for ADC chip to switch on. It needs 113ms */
 651	msleep(200);
 652	return 0;
 653}
 654
 655/* firmware file names, per model, init-fw and dock-fw (optional) */
 656static const char * const firmware_names[5][2] = {
 657	[EMU_MODEL_EMU1010] = {
 658		HANA_FILENAME, DOCK_FILENAME
 659	},
 660	[EMU_MODEL_EMU1010B] = {
 661		EMU1010B_FILENAME, MICRO_DOCK_FILENAME
 662	},
 663	[EMU_MODEL_EMU1616] = {
 664		EMU1010_NOTEBOOK_FILENAME, MICRO_DOCK_FILENAME
 665	},
 666	[EMU_MODEL_EMU0404] = {
 667		EMU0404_FILENAME, NULL
 668	},
 669};
 670
 671static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, int dock,
 672				     const struct firmware **fw)
 673{
 674	const char *filename;
 675	int err;
 676
 677	if (!*fw) {
 678		filename = firmware_names[emu->card_capabilities->emu_model][dock];
 679		if (!filename)
 680			return 0;
 681		err = request_firmware(fw, filename, &emu->pci->dev);
 682		if (err)
 683			return err;
 684	}
 685
 686	snd_emu1010_load_firmware_entry(emu, dock, *fw);
 687	return 0;
 688}
 689
 690static void snd_emu1010_load_dock_firmware(struct snd_emu10k1 *emu)
 691{
 692	u32 tmp, tmp2;
 693	int err;
 694
 695	// The docking events clearly arrive prematurely - while the
 696	// Dock's FPGA seems to be successfully programmed, the Dock
 697	// fails to initialize subsequently if we don't give it some
 698	// time to "warm up" here.
 699	msleep(200);
 700
 701	dev_info(emu->card->dev, "emu1010: Loading Audio Dock Firmware\n");
 702	err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw);
 703	if (err < 0)
 704		return;
 705	snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0);
 706
 707	snd_emu1010_fpga_read(emu, EMU_HANA_ID, &tmp);
 708	dev_dbg(emu->card->dev, "emu1010: EMU_HANA+DOCK_ID = 0x%x\n", tmp);
 709	if ((tmp & 0x1f) != 0x15) {
 710		/* FPGA failed to be programmed */
 711		dev_err(emu->card->dev,
 712			"emu1010: Loading Audio Dock Firmware failed, reg = 0x%x\n",
 713			tmp);
 714		return;
 715	}
 716	dev_info(emu->card->dev, "emu1010: Audio Dock Firmware loaded\n");
 717
 718	snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp);
 719	snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2);
 720	dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2);
 721
 722	/* Allow DLL to settle, to sync clocking between 1010 and Dock */
 723	msleep(10);
 724}
 725
 726static void emu1010_dock_event(struct snd_emu10k1 *emu)
 727{
 728	u32 reg;
 729
 730	snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg); /* OPTIONS: Which cards are attached to the EMU */
 731	if (reg & EMU_HANA_OPTION_DOCK_OFFLINE) {
 732		/* Audio Dock attached */
 733		snd_emu1010_load_dock_firmware(emu);
 734		/* Unmute all. Default is muted after a firmware load */
 735		snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
 736	} else if (!(reg & EMU_HANA_OPTION_DOCK_ONLINE)) {
 737		/* Audio Dock removed */
 738		dev_info(emu->card->dev, "emu1010: Audio Dock detached\n");
 739		/* The hardware auto-mutes all, so we unmute again */
 740		snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
 741	}
 742}
 743
 744static void emu1010_clock_event(struct snd_emu10k1 *emu)
 745{
 746	struct snd_ctl_elem_id id;
 747
 748	scoped_guard(spinlock_irq, &emu->reg_lock) {
 749		// This is the only thing that can actually happen.
 750		emu->emu1010.clock_source = emu->emu1010.clock_fallback;
 751		emu->emu1010.wclock = 1 - emu->emu1010.clock_source;
 752		snd_emu1010_update_clock(emu);
 753	}
 754	snd_ctl_build_ioff(&id, emu->ctl_clock_source, 0);
 755	snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE, &id);
 756}
 757
 758static void emu1010_work(struct work_struct *work)
 759{
 760	struct snd_emu10k1 *emu;
 761	u32 sts;
 762
 763	emu = container_of(work, struct snd_emu10k1, emu1010.work);
 764	if (emu->card->shutdown)
 765		return;
 766#ifdef CONFIG_PM_SLEEP
 767	if (emu->suspend)
 768		return;
 769#endif
 770
 771	guard(snd_emu1010_fpga_lock)(emu);
 772
 773	snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &sts);
 774
 775	// The distinction of the IRQ status bits is unreliable,
 776	// so we dispatch later based on option card status.
 777	if (sts & (EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST))
 778		emu1010_dock_event(emu);
 779
 780	if (sts & EMU_HANA_IRQ_WCLK_CHANGED)
 781		emu1010_clock_event(emu);
 782}
 783
 784static void emu1010_interrupt(struct snd_emu10k1 *emu)
 785{
 786	// We get an interrupt on each GPIO input pin change, but we
 787	// care only about the ones triggered by the dedicated pin.
 788	u16 sts = inw(emu->port + A_GPIO);
 789	u16 bit = emu->card_capabilities->ca0108_chip ? 0x2000 : 0x8000;
 790	if (!(sts & bit))
 791		return;
 792
 793	schedule_work(&emu->emu1010.work);
 794}
 795
 796/*
 797 * Current status of the driver:
 798 * ----------------------------
 799 * 	* only 44.1/48kHz supported (the MS Win driver supports up to 192 kHz)
 800 * 	* PCM device nb. 2:
 801 *		16 x 16-bit playback - snd_emu10k1_fx8010_playback_ops
 802 * 		16 x 32-bit capture - snd_emu10k1_capture_efx_ops
 803 */
 804static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
 805{
 806	u32 tmp, tmp2, reg;
 807	int err;
 808
 809	dev_info(emu->card->dev, "emu1010: Special config.\n");
 810
 811	/* Mute, and disable audio and lock cache, just in case.
 812	 * Proper init follows in snd_emu10k1_init(). */
 813	outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG);
 814
 815	guard(snd_emu1010_fpga_lock)(emu);
 816
 817	dev_info(emu->card->dev, "emu1010: Loading Hana Firmware\n");
 818	err = snd_emu1010_load_firmware(emu, 0, &emu->firmware);
 819	if (err < 0) {
 820		dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n");
 821		return err;
 822	}
 823
 824	/* ID, should read & 0x7f = 0x55 when FPGA programmed. */
 825	snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg);
 826	if ((reg & 0x3f) != 0x15) {
 827		/* FPGA failed to be programmed */
 828		dev_info(emu->card->dev,
 829			 "emu1010: Loading Hana Firmware file failed, reg = 0x%x\n",
 830			 reg);
 831		return -ENODEV;
 832	}
 833
 834	dev_info(emu->card->dev, "emu1010: Hana Firmware loaded\n");
 835	snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp);
 836	snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2);
 837	dev_info(emu->card->dev, "emu1010: Hana version: %u.%u\n", tmp, tmp2);
 838	/* Enable 48Volt power to Audio Dock */
 839	snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON);
 840
 841	snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, &reg);
 842	dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg);
 843	if (reg & EMU_HANA_OPTION_DOCK_OFFLINE)
 844		snd_emu1010_load_dock_firmware(emu);
 845	if (emu->card_capabilities->no_adat) {
 846		emu->emu1010.optical_in = 0; /* IN_SPDIF */
 847		emu->emu1010.optical_out = 0; /* OUT_SPDIF */
 848	} else {
 849		/* Optical -> ADAT I/O  */
 850		emu->emu1010.optical_in = 1; /* IN_ADAT */
 851		emu->emu1010.optical_out = 1; /* OUT_ADAT */
 852	}
 853	tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) |
 854		(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF);
 855	snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
 856	/* Set no attenuation on Audio Dock pads. */
 857	emu->emu1010.adc_pads = 0x00;
 858	snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, emu->emu1010.adc_pads);
 859	/* Unmute Audio dock DACs, Headphone source DAC-4. */
 860	snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, EMU_HANA_DOCK_PHONES_192_DAC4);
 861	/* DAC PADs. */
 862	emu->emu1010.dac_pads = EMU_HANA_DOCK_DAC_PAD1 | EMU_HANA_DOCK_DAC_PAD2 |
 863				EMU_HANA_DOCK_DAC_PAD3 | EMU_HANA_DOCK_DAC_PAD4;
 864	snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, emu->emu1010.dac_pads);
 865	/* SPDIF Format. Set Consumer mode, 24bit, copy enable */
 866	snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, EMU_HANA_SPDIF_MODE_RX_INVALID);
 867	/* MIDI routing */
 868	snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, EMU_HANA_MIDI_INA_FROM_HAMOA | EMU_HANA_MIDI_INB_FROM_DOCK2);
 869	snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, EMU_HANA_MIDI_OUT_DOCK2 | EMU_HANA_MIDI_OUT_SYNC2);
 870
 871	emu->gpio_interrupt = emu1010_interrupt;
 872	// Note: The Audigy INTE is set later
 873	snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE,
 874			       EMU_HANA_IRQ_DOCK | EMU_HANA_IRQ_DOCK_LOST | EMU_HANA_IRQ_WCLK_CHANGED);
 875	snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &reg);  // Clear pending IRQs
 876
 877	emu->emu1010.clock_source = 1;  /* 48000 */
 878	emu->emu1010.clock_fallback = 1;  /* 48000 */
 879	/* Default WCLK set to 48kHz. */
 880	snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K);
 881	/* Word Clock source, Internal 48kHz x1 */
 882	emu->emu1010.wclock = EMU_HANA_WCLOCK_INT_48K;
 883	snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K);
 884	/* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */
 885	snd_emu1010_update_clock(emu);
 886
 887	// The routes are all set to EMU_SRC_SILENCE due to the reset,
 888	// so it is safe to simply enable the outputs.
 889	snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
 890
 891	return 0;
 892}
 893/*
 894 *  Create the EMU10K1 instance
 895 */
 896
 897#ifdef CONFIG_PM_SLEEP
 898static int alloc_pm_buffer(struct snd_emu10k1 *emu);
 899static void free_pm_buffer(struct snd_emu10k1 *emu);
 900#endif
 901
 902static void snd_emu10k1_free(struct snd_card *card)
 903{
 904	struct snd_emu10k1 *emu = card->private_data;
 905
 906	if (emu->port) {	/* avoid access to already used hardware */
 907		snd_emu10k1_fx8010_tram_setup(emu, 0);
 908		snd_emu10k1_done(emu);
 909		snd_emu10k1_free_efx(emu);
 910	}
 911	if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) {
 912		/* Disable 48Volt power to Audio Dock */
 913		snd_emu1010_fpga_write_lock(emu, EMU_HANA_DOCK_PWR, 0);
 914	}
 915	cancel_work_sync(&emu->emu1010.work);
 916	mutex_destroy(&emu->emu1010.lock);
 917	release_firmware(emu->firmware);
 918	release_firmware(emu->dock_fw);
 919	snd_util_memhdr_free(emu->memhdr);
 920	if (emu->silent_page.area)
 921		snd_dma_free_pages(&emu->silent_page);
 922	if (emu->ptb_pages.area)
 923		snd_dma_free_pages(&emu->ptb_pages);
 924	vfree(emu->page_ptr_table);
 925	vfree(emu->page_addr_table);
 926#ifdef CONFIG_PM_SLEEP
 927	free_pm_buffer(emu);
 928#endif
 929}
 930
 931static const struct snd_emu_chip_details emu_chip_details[] = {
 932	/* Audigy 5/Rx SB1550 */
 933	/* Tested by michael@gernoth.net 28 Mar 2015 */
 934	/* DSP: CA10300-IAT LF
 935	 * DAC: Cirrus Logic CS4382-KQZ
 936	 * ADC: Philips 1361T
 937	 * AC97: Sigmatel STAC9750
 938	 * CA0151: None
 939	 */
 940	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10241102,
 941	 .driver = "Audigy2", .name = "SB Audigy 5/Rx [SB1550]",
 942	 .id = "Audigy2",
 943	 .emu10k2_chip = 1,
 944	 .ca0108_chip = 1,
 945	 .spk71 = 1,
 946	 .adc_1361t = 1,  /* 24 bit capture instead of 16bit */
 947	 .ac97_chip = 1},
 948	/* Audigy4 (Not PRO) SB0610 */
 949	/* Tested by James@superbug.co.uk 4th April 2006 */
 950	/* A_IOCFG bits
 951	 * Output
 952	 * 0: ?
 953	 * 1: ?
 954	 * 2: ?
 955	 * 3: 0 - Digital Out, 1 - Line in
 956	 * 4: ?
 957	 * 5: ?
 958	 * 6: ?
 959	 * 7: ?
 960	 * Input
 961	 * 8: ?
 962	 * 9: ?
 963	 * A: Green jack sense (Front)
 964	 * B: ?
 965	 * C: Black jack sense (Rear/Side Right)
 966	 * D: Yellow jack sense (Center/LFE/Side Left)
 967	 * E: ?
 968	 * F: ?
 969	 *
 970	 * Digital Out/Line in switch using A_IOCFG bit 3 (0x08)
 971	 * 0 - Digital Out
 972	 * 1 - Line in
 973	 */
 974	/* Mic input not tested.
 975	 * Analog CD input not tested
 976	 * Digital Out not tested.
 977	 * Line in working.
 978	 * Audio output 5.1 working. Side outputs not working.
 979	 */
 980	/* DSP: CA10300-IAT LF
 981	 * DAC: Cirrus Logic CS4382-KQZ
 982	 * ADC: Philips 1361T
 983	 * AC97: Sigmatel STAC9750
 984	 * CA0151: None
 985	 */
 986	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
 987	 .driver = "Audigy2", .name = "SB Audigy 4 [SB0610]",
 988	 .id = "Audigy2",
 989	 .emu10k2_chip = 1,
 990	 .ca0108_chip = 1,
 991	 .spk71 = 1,
 992	 .adc_1361t = 1,  /* 24 bit capture instead of 16bit */
 993	 .ac97_chip = 1} ,
 994	/* Audigy 2 Value AC3 out does not work yet.
 995	 * Need to find out how to turn off interpolators.
 996	 */
 997	/* Tested by James@superbug.co.uk 3rd July 2005 */
 998	/* DSP: CA0108-IAT
 999	 * DAC: CS4382-KQ
1000	 * ADC: Philips 1361T
1001	 * AC97: STAC9750
1002	 * CA0151: None
1003	 */
1004	/*
1005	 * A_IOCFG Input (GPIO)
1006	 * 0x400  = Front analog jack plugged in. (Green socket)
1007	 * 0x1000 = Rear analog jack plugged in. (Black socket)
1008	 * 0x2000 = Center/LFE analog jack plugged in. (Orange socket)
1009	 * A_IOCFG Output (GPIO)
1010	 * 0x60 = Sound out of front Left.
1011	 * Win sets it to 0xXX61
1012	 */
1013	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102,
1014	 .driver = "Audigy2", .name = "SB Audigy 2 Value [SB0400]",
1015	 .id = "Audigy2",
1016	 .emu10k2_chip = 1,
1017	 .ca0108_chip = 1,
1018	 .spk71 = 1,
1019	 .ac97_chip = 1} ,
1020	/* Audigy 2 ZS Notebook Cardbus card.*/
1021	/* Tested by James@superbug.co.uk 6th November 2006 */
1022	/* Audio output 7.1/Headphones working.
1023	 * Digital output working. (AC3 not checked, only PCM)
1024	 * Audio Mic/Line inputs working.
1025	 * Digital input not tested.
1026	 */
1027	/* DSP: Tina2
1028	 * DAC: Wolfson WM8768/WM8568
1029	 * ADC: Wolfson WM8775
1030	 * AC97: None
1031	 * CA0151: None
1032	 */
1033	/* Tested by James@superbug.co.uk 4th April 2006 */
1034	/* A_IOCFG bits
1035	 * Output
1036	 * 0: Not Used
1037	 * 1: 0 = Mute all the 7.1 channel out. 1 = unmute.
1038	 * 2: Analog input 0 = line in, 1 = mic in
1039	 * 3: Not Used
1040	 * 4: Digital output 0 = off, 1 = on.
1041	 * 5: Not Used
1042	 * 6: Not Used
1043	 * 7: Not Used
1044	 * Input
1045	 *      All bits 1 (0x3fxx) means nothing plugged in.
1046	 * 8-9: 0 = Line in/Mic, 2 = Optical in, 3 = Nothing.
1047	 * A-B: 0 = Headphones, 2 = Optical out, 3 = Nothing.
1048	 * C-D: 2 = Front/Rear/etc, 3 = nothing.
1049	 * E-F: Always 0
1050	 *
1051	 */
1052	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x20011102,
1053	 .driver = "Audigy2", .name = "Audigy 2 ZS Notebook [SB0530]",
1054	 .id = "Audigy2",
1055	 .emu10k2_chip = 1,
1056	 .ca0108_chip = 1,
1057	 .ca_cardbus_chip = 1,
1058	 .spi_dac = 1,
1059	 .i2c_adc = 1,
1060	 .spk71 = 1} ,
1061	/* This is MAEM8950 "Mana" */
1062	/* Attach MicroDock[M] to make it an E-MU 1616[m]. */
1063	/* Does NOT support sync daughter card (obviously). */
1064	/* Tested by James@superbug.co.uk 4th Nov 2007. */
1065	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x42011102,
1066	 .driver = "Audigy2", .name = "E-MU 02 CardBus [MAEM8950]",
1067	 .id = "EMU1010",
1068	 .emu10k2_chip = 1,
1069	 .ca0108_chip = 1,
1070	 .ca_cardbus_chip = 1,
1071	 .spk71 = 1 ,
1072	 .emu_model = EMU_MODEL_EMU1616},
1073	/* Tested by James@superbug.co.uk 4th Nov 2007. */
1074	/* This is MAEM8960 "Hana3", 0202 is MAEM8980 */
1075	/* Attach 0202 daughter card to make it an E-MU 1212m, OR a
1076	 * MicroDock[M] to make it an E-MU 1616[m]. */
1077	/* Does NOT support sync daughter card. */
1078	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40041102,
1079	 .driver = "Audigy2", .name = "E-MU 1010b PCI [MAEM8960]",
1080	 .id = "EMU1010",
1081	 .emu10k2_chip = 1,
1082	 .ca0108_chip = 1,
1083	 .spk71 = 1,
1084	 .emu_model = EMU_MODEL_EMU1010B}, /* EMU 1010 new revision */
1085	/* Tested by Maxim Kachur <mcdebugger@duganet.ru> 17th Oct 2012. */
1086	/* This is MAEM8986, 0202 is MAEM8980 */
1087	/* Attach 0202 daughter card to make it an E-MU 1212m, OR a
1088	 * MicroDockM to make it an E-MU 1616m. The non-m
1089	 * version was never sold with this card, but should
1090	 * still work. */
1091	/* Does NOT support sync daughter card. */
1092	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40071102,
1093	 .driver = "Audigy2", .name = "E-MU 1010 PCIe [MAEM8986]",
1094	 .id = "EMU1010",
1095	 .emu10k2_chip = 1,
1096	 .ca0108_chip = 1,
1097	 .spk71 = 1,
1098	 .emu_model = EMU_MODEL_EMU1010B}, /* EMU 1010 PCIe */
1099	/* Tested by James@superbug.co.uk 8th July 2005. */
1100	/* This is MAEM8810 "Hana", 0202 is MAEM8820 "Hamoa" */
1101	/* Attach 0202 daughter card to make it an E-MU 1212m, OR an
1102	 * AudioDock[M] to make it an E-MU 1820[m]. */
1103	/* Supports sync daughter card. */
1104	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102,
1105	 .driver = "Audigy2", .name = "E-MU 1010 [MAEM8810]",
1106	 .id = "EMU1010",
1107	 .emu10k2_chip = 1,
1108	 .ca0102_chip = 1,
1109	 .spk71 = 1,
1110	 .emu_model = EMU_MODEL_EMU1010}, /* EMU 1010 old revision */
1111	/* This is MAEM8852 "HanaLiteLite" */
1112	/* Supports sync daughter card. */
1113	/* Tested by oswald.buddenhagen@gmx.de Mar 2023. */
1114	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40021102,
1115	 .driver = "Audigy2", .name = "E-MU 0404b PCI [MAEM8852]",
1116	 .id = "EMU0404",
1117	 .emu10k2_chip = 1,
1118	 .ca0108_chip = 1,
1119	 .spk20 = 1,
1120	 .no_adat = 1,
1121	 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 new revision */
1122	/* This is MAEM8850 "HanaLite" */
1123	/* Supports sync daughter card. */
1124	/* Tested by James@superbug.co.uk 20-3-2007. */
1125	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40021102,
1126	 .driver = "Audigy2", .name = "E-MU 0404 [MAEM8850]",
1127	 .id = "EMU0404",
1128	 .emu10k2_chip = 1,
1129	 .ca0102_chip = 1,
1130	 .spk20 = 1,
1131	 .no_adat = 1,
1132	 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 */
1133	/* EMU0404 PCIe */
1134	/* Does NOT support sync daughter card. */
1135	{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x40051102,
1136	 .driver = "Audigy2", .name = "E-MU 0404 PCIe [MAEM8984]",
1137	 .id = "EMU0404",
1138	 .emu10k2_chip = 1,
1139	 .ca0108_chip = 1,
1140	 .spk20 = 1,
1141	 .no_adat = 1,
1142	 .emu_model = EMU_MODEL_EMU0404}, /* EMU 0404 PCIe ver_03 */
1143	{.vendor = 0x1102, .device = 0x0008,
1144	 .driver = "Audigy2", .name = "SB Audigy 2 Value [Unknown]",
1145	 .id = "Audigy2",
1146	 .emu10k2_chip = 1,
1147	 .ca0108_chip = 1,
1148	 .ac97_chip = 1} ,
1149	/* Tested by James@superbug.co.uk 3rd July 2005 */
1150	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102,
1151	 .driver = "Audigy2", .name = "SB Audigy 4 PRO [SB0380]",
1152	 .id = "Audigy2",
1153	 .emu10k2_chip = 1,
1154	 .ca0102_chip = 1,
1155	 .ca0151_chip = 1,
1156	 .spk71 = 1,
1157	 .spdif_bug = 1,
1158	 .ac97_chip = 1} ,
1159	/* Tested by shane-alsa@cm.nu 5th Nov 2005 */
1160	/* The 0x20061102 does have SB0350 written on it
1161	 * Just like 0x20021102
1162	 */
1163	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20061102,
1164	 .driver = "Audigy2", .name = "SB Audigy 2 [SB0350b]",
1165	 .id = "Audigy2",
1166	 .emu10k2_chip = 1,
1167	 .ca0102_chip = 1,
1168	 .ca0151_chip = 1,
1169	 .spk71 = 1,
1170	 .spdif_bug = 1,
1171	 .invert_shared_spdif = 1,	/* digital/analog switch swapped */
1172	 .ac97_chip = 1} ,
1173	/* 0x20051102 also has SB0350 written on it, treated as Audigy 2 ZS by
1174	   Creative's Windows driver */
1175	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20051102,
1176	 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0350a]",
1177	 .id = "Audigy2",
1178	 .emu10k2_chip = 1,
1179	 .ca0102_chip = 1,
1180	 .ca0151_chip = 1,
1181	 .spk71 = 1,
1182	 .spdif_bug = 1,
1183	 .invert_shared_spdif = 1,	/* digital/analog switch swapped */
1184	 .ac97_chip = 1} ,
1185	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20021102,
1186	 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0350]",
1187	 .id = "Audigy2",
1188	 .emu10k2_chip = 1,
1189	 .ca0102_chip = 1,
1190	 .ca0151_chip = 1,
1191	 .spk71 = 1,
1192	 .spdif_bug = 1,
1193	 .invert_shared_spdif = 1,	/* digital/analog switch swapped */
1194	 .ac97_chip = 1} ,
1195	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20011102,
1196	 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0360]",
1197	 .id = "Audigy2",
1198	 .emu10k2_chip = 1,
1199	 .ca0102_chip = 1,
1200	 .ca0151_chip = 1,
1201	 .spk71 = 1,
1202	 .spdif_bug = 1,
1203	 .invert_shared_spdif = 1,	/* digital/analog switch swapped */
1204	 .ac97_chip = 1} ,
1205	/* Audigy 2 */
1206	/* Tested by James@superbug.co.uk 3rd July 2005 */
1207	/* DSP: CA0102-IAT
1208	 * DAC: CS4382-KQ
1209	 * ADC: Philips 1361T
1210	 * AC97: STAC9721
1211	 * CA0151: Yes
1212	 */
1213	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10071102,
1214	 .driver = "Audigy2", .name = "SB Audigy 2 [SB0240]",
1215	 .id = "Audigy2",
1216	 .emu10k2_chip = 1,
1217	 .ca0102_chip = 1,
1218	 .ca0151_chip = 1,
1219	 .spk71 = 1,
1220	 .spdif_bug = 1,
1221	 .adc_1361t = 1,  /* 24 bit capture instead of 16bit */
1222	 .ac97_chip = 1} ,
1223	/* Audigy 2 Platinum EX */
1224	/* Win driver sets A_IOCFG output to 0x1c00 */
1225	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10051102,
1226	 .driver = "Audigy2", .name = "Audigy 2 Platinum EX [SB0280]",
1227	 .id = "Audigy2",
1228	 .emu10k2_chip = 1,
1229	 .ca0102_chip = 1,
1230	 .ca0151_chip = 1,
1231	 .spk71 = 1,
1232	 .spdif_bug = 1} ,
1233	/* Dell OEM/Creative Labs Audigy 2 ZS */
1234	/* See ALSA bug#1365 */
1235	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10031102,
1236	 .driver = "Audigy2", .name = "SB Audigy 2 ZS [SB0353]",
1237	 .id = "Audigy2",
1238	 .emu10k2_chip = 1,
1239	 .ca0102_chip = 1,
1240	 .ca0151_chip = 1,
1241	 .spk71 = 1,
1242	 .spdif_bug = 1,
1243	 .invert_shared_spdif = 1,	/* digital/analog switch swapped */
1244	 .ac97_chip = 1} ,
1245	/* Audigy 2 Platinum */
1246	/* Win driver sets A_IOCFG output to 0xa00 */
1247	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
1248	 .driver = "Audigy2", .name = "SB Audigy 2 Platinum [SB0240P]",
1249	 .id = "Audigy2",
1250	 .emu10k2_chip = 1,
1251	 .ca0102_chip = 1,
1252	 .ca0151_chip = 1,
1253	 .spk71 = 1,
1254	 .spdif_bug = 1,
1255	 .invert_shared_spdif = 1,	/* digital/analog switch swapped */
1256	 .adc_1361t = 1,  /* 24 bit capture instead of 16bit. Fixes ALSA bug#324 */
1257	 .ac97_chip = 1} ,
1258	{.vendor = 0x1102, .device = 0x0004, .revision = 0x04,
1259	 .driver = "Audigy2", .name = "SB Audigy 2 [Unknown]",
1260	 .id = "Audigy2",
1261	 .emu10k2_chip = 1,
1262	 .ca0102_chip = 1,
1263	 .ca0151_chip = 1,
1264	 .spdif_bug = 1,
1265	 .ac97_chip = 1} ,
1266	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102,
1267	 .driver = "Audigy", .name = "SB Audigy 1 [SB0092]",
1268	 .id = "Audigy",
1269	 .emu10k2_chip = 1,
1270	 .ca0102_chip = 1,
1271	 .ac97_chip = 1} ,
1272	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102,
1273	 .driver = "Audigy", .name = "SB Audigy 1 ES [SB0160]",
1274	 .id = "Audigy",
1275	 .emu10k2_chip = 1,
1276	 .ca0102_chip = 1,
1277	 .spdif_bug = 1,
1278	 .ac97_chip = 1} ,
1279	{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102,
1280	 .driver = "Audigy", .name = "SB Audigy 1 [SB0090]",
1281	 .id = "Audigy",
1282	 .emu10k2_chip = 1,
1283	 .ca0102_chip = 1,
1284	 .ac97_chip = 1} ,
1285	{.vendor = 0x1102, .device = 0x0004,
1286	 .driver = "Audigy", .name = "Audigy 1 [Unknown]",
1287	 .id = "Audigy",
1288	 .emu10k2_chip = 1,
1289	 .ca0102_chip = 1,
1290	 .ac97_chip = 1} ,
1291	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x100a1102,
1292	 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0220]",
1293	 .id = "Live",
1294	 .emu10k1_chip = 1,
1295	 .ac97_chip = 1,
1296	 .sblive51 = 1} ,
1297	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806b1102,
1298	 .driver = "EMU10K1", .name = "SB Live! [SB0105]",
1299	 .id = "Live",
1300	 .emu10k1_chip = 1,
1301	 .ac97_chip = 1,
1302	 .sblive51 = 1} ,
1303	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806a1102,
1304	 .driver = "EMU10K1", .name = "SB Live! Value [SB0103]",
1305	 .id = "Live",
1306	 .emu10k1_chip = 1,
1307	 .ac97_chip = 1,
1308	 .sblive51 = 1} ,
1309	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102,
1310	 .driver = "EMU10K1", .name = "SB Live! Value [SB0101]",
1311	 .id = "Live",
1312	 .emu10k1_chip = 1,
1313	 .ac97_chip = 1,
1314	 .sblive51 = 1} ,
1315	/* Tested by ALSA bug#1680 26th December 2005 */
1316	/* note: It really has SB0220 written on the card, */
1317	/* but it's SB0228 according to kx.inf */
1318	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80661102,
1319	 .driver = "EMU10K1", .name = "SB Live! 5.1 Dell OEM [SB0228]",
1320	 .id = "Live",
1321	 .emu10k1_chip = 1,
1322	 .ac97_chip = 1,
1323	 .sblive51 = 1} ,
1324	/* Tested by Thomas Zehetbauer 27th Aug 2005 */
1325	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80651102,
1326	 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0220]",
1327	 .id = "Live",
1328	 .emu10k1_chip = 1,
1329	 .ac97_chip = 1,
1330	 .sblive51 = 1} ,
1331	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
1332	 .driver = "EMU10K1", .name = "SB Live! 5.1",
1333	 .id = "Live",
1334	 .emu10k1_chip = 1,
1335	 .ac97_chip = 1,
1336	 .sblive51 = 1} ,
1337	/* Tested by alsa bugtrack user "hus" bug #1297 12th Aug 2005 */
1338	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
1339	 .driver = "EMU10K1", .name = "SB Live! 5.1 [SB0060]",
1340	 .id = "Live",
1341	 .emu10k1_chip = 1,
1342	 .ac97_chip = 2, /* ac97 is optional; both SBLive 5.1 and platinum
1343			  * share the same IDs!
1344			  */
1345	 .sblive51 = 1} ,
1346	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
1347	 .driver = "EMU10K1", .name = "SB Live! Value [CT4850]",
1348	 .id = "Live",
1349	 .emu10k1_chip = 1,
1350	 .ac97_chip = 1,
1351	 .sblive51 = 1} ,
1352	/* SB Live! Platinum */
1353	/* Win driver sets A_IOCFG output to 0 */
1354	/* Tested by Jonathan Dowland <jon@dow.land> Apr 2023. */
1355	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102,
1356	 .driver = "EMU10K1", .name = "SB Live! Platinum [CT4760P]",
1357	 .id = "Live",
1358	 .emu10k1_chip = 1,
1359	 .ac97_chip = 1} ,
1360	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102,
1361	 .driver = "EMU10K1", .name = "SB Live! Value [CT4871]",
1362	 .id = "Live",
1363	 .emu10k1_chip = 1,
1364	 .ac97_chip = 1,
1365	 .sblive51 = 1} ,
1366	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80311102,
1367	 .driver = "EMU10K1", .name = "SB Live! Value [CT4831]",
1368	 .id = "Live",
1369	 .emu10k1_chip = 1,
1370	 .ac97_chip = 1,
1371	 .sblive51 = 1} ,
1372	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102,
1373	 .driver = "EMU10K1", .name = "SB Live! Value [CT4870]",
1374	 .id = "Live",
1375	 .emu10k1_chip = 1,
1376	 .ac97_chip = 1,
1377	 .sblive51 = 1} ,
1378	/* Tested by James@superbug.co.uk 3rd July 2005 */
1379	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102,
1380	 .driver = "EMU10K1", .name = "SB Live! Value [CT4832]",
1381	 .id = "Live",
1382	 .emu10k1_chip = 1,
1383	 .ac97_chip = 1,
1384	 .sblive51 = 1} ,
1385	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102,
1386	 .driver = "EMU10K1", .name = "SB Live! Value [CT4830]",
1387	 .id = "Live",
1388	 .emu10k1_chip = 1,
1389	 .ac97_chip = 1,
1390	 .sblive51 = 1} ,
1391	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102,
1392	 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]",
1393	 .id = "Live",
1394	 .emu10k1_chip = 1,
1395	 .ac97_chip = 1,
1396	 .sblive51 = 1} ,
1397	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102,
1398	 .driver = "EMU10K1", .name = "SB Live! Value [CT4780]",
1399	 .id = "Live",
1400	 .emu10k1_chip = 1,
1401	 .ac97_chip = 1,
1402	 .sblive51 = 1} ,
1403	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
1404	 .driver = "EMU10K1", .name = "E-MU APS [PC545]",
1405	 .id = "APS",
1406	 .emu10k1_chip = 1,
1407	 .ecard = 1} ,
1408	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
1409	 .driver = "EMU10K1", .name = "SB Live! [CT4620]",
1410	 .id = "Live",
1411	 .emu10k1_chip = 1,
1412	 .ac97_chip = 1,
1413	 .sblive51 = 1} ,
1414	{.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102,
1415	 .driver = "EMU10K1", .name = "SB Live! Value [CT4670]",
1416	 .id = "Live",
1417	 .emu10k1_chip = 1,
1418	 .ac97_chip = 1,
1419	 .sblive51 = 1} ,
1420	{.vendor = 0x1102, .device = 0x0002,
1421	 .driver = "EMU10K1", .name = "SB Live! [Unknown]",
1422	 .id = "Live",
1423	 .emu10k1_chip = 1,
1424	 .ac97_chip = 1,
1425	 .sblive51 = 1} ,
1426	{ } /* terminator */
1427};
1428
1429/*
1430 * The chip (at least the Audigy 2 CA0102 chip, but most likely others, too)
1431 * has a problem that from time to time it likes to do few DMA reads a bit
1432 * beyond its normal allocation and gets very confused if these reads get
1433 * blocked by a IOMMU.
1434 *
1435 * This behaviour has been observed for the first (reserved) page
1436 * (for which it happens multiple times at every playback), often for various
1437 * synth pages and sometimes for PCM playback buffers and the page table
1438 * memory itself.
1439 *
1440 * As a workaround let's widen these DMA allocations by an extra page if we
1441 * detect that the device is behind a non-passthrough IOMMU.
1442 */
1443static void snd_emu10k1_detect_iommu(struct snd_emu10k1 *emu)
1444{
1445	struct iommu_domain *domain;
1446
1447	emu->iommu_workaround = false;
1448
1449	domain = iommu_get_domain_for_dev(emu->card->dev);
1450	if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY)
1451		return;
1452
1453	dev_notice(emu->card->dev,
1454		   "non-passthrough IOMMU detected, widening DMA allocations");
1455	emu->iommu_workaround = true;
1456}
1457
1458int snd_emu10k1_create(struct snd_card *card,
1459		       struct pci_dev *pci,
1460		       unsigned short extin_mask,
1461		       unsigned short extout_mask,
1462		       long max_cache_bytes,
1463		       int enable_ir,
1464		       uint subsystem)
1465{
1466	struct snd_emu10k1 *emu = card->private_data;
1467	int idx, err;
1468	int is_audigy;
1469	size_t page_table_size;
1470	__le32 *pgtbl;
1471	unsigned int silent_page;
1472	const struct snd_emu_chip_details *c;
1473
1474	/* enable PCI device */
1475	err = pcim_enable_device(pci);
1476	if (err < 0)
1477		return err;
1478
1479	card->private_free = snd_emu10k1_free;
1480	emu->card = card;
1481	spin_lock_init(&emu->reg_lock);
1482	spin_lock_init(&emu->emu_lock);
1483	spin_lock_init(&emu->spi_lock);
1484	spin_lock_init(&emu->i2c_lock);
1485	spin_lock_init(&emu->voice_lock);
1486	spin_lock_init(&emu->synth_lock);
1487	spin_lock_init(&emu->memblk_lock);
1488	mutex_init(&emu->fx8010.lock);
1489	INIT_LIST_HEAD(&emu->mapped_link_head);
1490	INIT_LIST_HEAD(&emu->mapped_order_link_head);
1491	emu->pci = pci;
1492	emu->irq = -1;
1493	emu->synth = NULL;
1494	emu->get_synth_voice = NULL;
1495	INIT_WORK(&emu->emu1010.work, emu1010_work);
1496	mutex_init(&emu->emu1010.lock);
1497	/* read revision & serial */
1498	emu->revision = pci->revision;
1499	pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1500	pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1501	dev_dbg(card->dev,
1502		"vendor = 0x%x, device = 0x%x, subsystem_vendor_id = 0x%x, subsystem_id = 0x%x\n",
1503		pci->vendor, pci->device, emu->serial, emu->model);
1504
1505	for (c = emu_chip_details; c->vendor; c++) {
1506		if (c->vendor == pci->vendor && c->device == pci->device) {
1507			if (subsystem) {
1508				if (c->subsystem && (c->subsystem == subsystem))
1509					break;
1510				else
1511					continue;
1512			} else {
1513				if (c->subsystem && (c->subsystem != emu->serial))
1514					continue;
1515				if (c->revision && c->revision != emu->revision)
1516					continue;
1517			}
1518			break;
1519		}
1520	}
1521	if (c->vendor == 0) {
1522		dev_err(card->dev, "emu10k1: Card not recognised\n");
1523		return -ENOENT;
1524	}
1525	emu->card_capabilities = c;
1526	if (c->subsystem && !subsystem)
1527		dev_dbg(card->dev, "Sound card name = %s\n", c->name);
1528	else if (subsystem)
1529		dev_dbg(card->dev, "Sound card name = %s, "
1530			"vendor = 0x%x, device = 0x%x, subsystem = 0x%x. "
1531			"Forced to subsystem = 0x%x\n",	c->name,
1532			pci->vendor, pci->device, emu->serial, c->subsystem);
1533	else
1534		dev_dbg(card->dev, "Sound card name = %s, "
1535			"vendor = 0x%x, device = 0x%x, subsystem = 0x%x.\n",
1536			c->name, pci->vendor, pci->device,
1537			emu->serial);
1538
1539	if (!*card->id && c->id)
1540		strscpy(card->id, c->id, sizeof(card->id));
1541
1542	is_audigy = emu->audigy = c->emu10k2_chip;
1543
1544	snd_emu10k1_detect_iommu(emu);
1545
1546	/* set addressing mode */
1547	emu->address_mode = is_audigy ? 0 : 1;
1548	/* set the DMA transfer mask */
1549	emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK;
1550	if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) {
1551		dev_err(card->dev,
1552			"architecture does not support PCI busmaster DMA with mask 0x%lx\n",
1553			emu->dma_mask);
1554		return -ENXIO;
1555	}
1556	if (is_audigy)
1557		emu->gpr_base = A_FXGPREGBASE;
1558	else
1559		emu->gpr_base = FXGPREGBASE;
1560
1561	err = pcim_request_all_regions(pci, "EMU10K1");
1562	if (err < 0)
1563		return err;
1564	emu->port = pci_resource_start(pci, 0);
1565
1566	emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1567
1568	page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 :
1569					 MAXPAGES0);
1570	if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size,
1571						&emu->ptb_pages) < 0)
1572		return -ENOMEM;
1573	dev_dbg(card->dev, "page table address range is %.8lx:%.8lx\n",
1574		(unsigned long)emu->ptb_pages.addr,
1575		(unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes));
1576
1577	emu->page_ptr_table = vmalloc(array_size(sizeof(void *),
1578						 emu->max_cache_pages));
1579	emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long),
1580						  emu->max_cache_pages));
1581	if (!emu->page_ptr_table || !emu->page_addr_table)
1582		return -ENOMEM;
1583
1584	if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE,
1585						&emu->silent_page) < 0)
1586		return -ENOMEM;
1587	dev_dbg(card->dev, "silent page range is %.8lx:%.8lx\n",
1588		(unsigned long)emu->silent_page.addr,
1589		(unsigned long)(emu->silent_page.addr +
1590				emu->silent_page.bytes));
1591
1592	emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1593	if (!emu->memhdr)
1594		return -ENOMEM;
1595	emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1596		sizeof(struct snd_util_memblk);
1597
1598	pci_set_master(pci);
1599
1600	// The masks are not used for Audigy.
1601	// FIXME: these should come from the card_capabilites table.
1602	if (extin_mask == 0)
1603		extin_mask = 0x3fcf;  // EXTIN_*
1604	if (extout_mask == 0)
1605		extout_mask = 0x7fff;  // EXTOUT_*
1606	emu->fx8010.extin_mask = extin_mask;
1607	emu->fx8010.extout_mask = extout_mask;
1608	emu->enable_ir = enable_ir;
1609
1610	if (emu->card_capabilities->ca_cardbus_chip) {
1611		err = snd_emu10k1_cardbus_init(emu);
1612		if (err < 0)
1613			return err;
1614	}
1615	if (emu->card_capabilities->ecard) {
1616		err = snd_emu10k1_ecard_init(emu);
1617		if (err < 0)
1618			return err;
1619	} else if (emu->card_capabilities->emu_model) {
1620		err = snd_emu10k1_emu1010_init(emu);
1621		if (err < 0)
1622			return err;
1623	} else {
1624		/* 5.1: Enable the additional AC97 Slots. If the emu10k1 version
1625			does not support this, it shouldn't do any harm */
1626		snd_emu10k1_ptr_write(emu, AC97SLOT, 0,
1627					AC97SLOT_CNTR|AC97SLOT_LFE);
1628	}
1629
1630	/* initialize TRAM setup */
1631	emu->fx8010.itram_size = (16 * 1024)/2;
1632	emu->fx8010.etram_pages.area = NULL;
1633	emu->fx8010.etram_pages.bytes = 0;
1634
1635	/* irq handler must be registered after I/O ports are activated */
1636	if (devm_request_irq(&pci->dev, pci->irq, snd_emu10k1_interrupt,
1637			     IRQF_SHARED, KBUILD_MODNAME, emu))
1638		return -EBUSY;
1639	emu->irq = pci->irq;
1640	card->sync_irq = emu->irq;
1641
1642	/*
1643	 *  Init to 0x02109204 :
1644	 *  Clock accuracy    = 0     (1000ppm)
1645	 *  Sample Rate       = 2     (48kHz)
1646	 *  Audio Channel     = 1     (Left of 2)
1647	 *  Source Number     = 0     (Unspecified)
1648	 *  Generation Status = 1     (Original for Cat Code 12)
1649	 *  Cat Code          = 12    (Digital Signal Mixer)
1650	 *  Mode              = 0     (Mode 0)
1651	 *  Emphasis          = 0     (None)
1652	 *  CP                = 1     (Copyright unasserted)
1653	 *  AN                = 0     (Audio data)
1654	 *  P                 = 0     (Consumer)
1655	 */
1656	emu->spdif_bits[0] = emu->spdif_bits[1] =
1657		emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
1658		SPCS_CHANNELNUM_LEFT | SPCS_SOURCENUM_UNSPEC |
1659		SPCS_GENERATIONSTATUS | 0x00001200 |
1660		0x00000000 | SPCS_EMPHASIS_NONE | SPCS_COPYRIGHT;
1661
1662	/* Clear silent pages and set up pointers */
1663	memset(emu->silent_page.area, 0, emu->silent_page.bytes);
1664	silent_page = emu->silent_page.addr << emu->address_mode;
1665	pgtbl = (__le32 *)emu->ptb_pages.area;
1666	for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++)
1667		pgtbl[idx] = cpu_to_le32(silent_page | idx);
1668
1669	/* set up voice indices */
1670	for (idx = 0; idx < NUM_G; idx++)
1671		emu->voices[idx].number = idx;
1672
1673	err = snd_emu10k1_init(emu, enable_ir);
1674	if (err < 0)
1675		return err;
1676#ifdef CONFIG_PM_SLEEP
1677	err = alloc_pm_buffer(emu);
1678	if (err < 0)
1679		return err;
1680#endif
1681
1682	/*  Initialize the effect engine */
1683	err = snd_emu10k1_init_efx(emu);
1684	if (err < 0)
1685		return err;
1686	snd_emu10k1_audio_enable(emu);
1687
1688#ifdef CONFIG_SND_PROC_FS
1689	snd_emu10k1_proc_init(emu);
1690#endif
1691	return 0;
1692}
1693
1694#ifdef CONFIG_PM_SLEEP
1695static const unsigned char saved_regs[] = {
1696	CPF, PTRX, CVCF, VTFT, Z1, Z2, PSST, DSL, CCCA, CCR, CLP,
1697	FXRT, MAPA, MAPB, ENVVOL, ATKHLDV, DCYSUSV, LFOVAL1, ENVVAL,
1698	ATKHLDM, DCYSUSM, LFOVAL2, IP, IFATN, PEFE, FMMOD, TREMFRQ, FM2FRQ2,
1699	TEMPENV, ADCCR, FXWC, MICBA, ADCBA, FXBA,
1700	MICBS, ADCBS, FXBS, CDCS, GPSCS, SPCS0, SPCS1, SPCS2,
1701	SPBYPASS, AC97SLOT, CDSRCS, GPSRCS, ZVSRCS, MICIDX, ADCIDX, FXIDX,
1702	0xff /* end */
1703};
1704static const unsigned char saved_regs_audigy[] = {
1705	A_ADCIDX, A_MICIDX, A_FXWC1, A_FXWC2, A_EHC,
1706	A_FXRT2, A_SENDAMOUNTS, A_FXRT1,
1707	0xff /* end */
1708};
1709
1710static int alloc_pm_buffer(struct snd_emu10k1 *emu)
1711{
1712	int size;
1713
1714	size = ARRAY_SIZE(saved_regs);
1715	if (emu->audigy)
1716		size += ARRAY_SIZE(saved_regs_audigy);
1717	emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size));
1718	if (!emu->saved_ptr)
1719		return -ENOMEM;
1720	if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
1721		return -ENOMEM;
1722	if (emu->card_capabilities->ca0151_chip &&
1723	    snd_p16v_alloc_pm_buffer(emu) < 0)
1724		return -ENOMEM;
1725	return 0;
1726}
1727
1728static void free_pm_buffer(struct snd_emu10k1 *emu)
1729{
1730	vfree(emu->saved_ptr);
1731	snd_emu10k1_efx_free_pm_buffer(emu);
1732	if (emu->card_capabilities->ca0151_chip)
1733		snd_p16v_free_pm_buffer(emu);
1734}
1735
1736void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
1737{
1738	int i;
1739	const unsigned char *reg;
1740	unsigned int *val;
1741
1742	val = emu->saved_ptr;
1743	for (reg = saved_regs; *reg != 0xff; reg++)
1744		for (i = 0; i < NUM_G; i++, val++)
1745			*val = snd_emu10k1_ptr_read(emu, *reg, i);
1746	if (emu->audigy) {
1747		for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1748			for (i = 0; i < NUM_G; i++, val++)
1749				*val = snd_emu10k1_ptr_read(emu, *reg, i);
1750	}
1751	if (emu->audigy)
1752		emu->saved_a_iocfg = inw(emu->port + A_IOCFG);
1753	emu->saved_hcfg = inl(emu->port + HCFG);
1754}
1755
1756void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
1757{
1758	if (emu->card_capabilities->ca_cardbus_chip)
1759		snd_emu10k1_cardbus_init(emu);
1760	if (emu->card_capabilities->ecard)
1761		snd_emu10k1_ecard_init(emu);
1762	else if (emu->card_capabilities->emu_model)
1763		snd_emu10k1_emu1010_init(emu);
1764	else
1765		snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1766	snd_emu10k1_init(emu, emu->enable_ir);
1767}
1768
1769void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
1770{
1771	int i;
1772	const unsigned char *reg;
1773	unsigned int *val;
1774
1775	snd_emu10k1_audio_enable(emu);
1776
1777	/* resore for spdif */
1778	if (emu->audigy)
1779		outw(emu->saved_a_iocfg, emu->port + A_IOCFG);
1780	outl(emu->saved_hcfg, emu->port + HCFG);
1781
1782	val = emu->saved_ptr;
1783	for (reg = saved_regs; *reg != 0xff; reg++)
1784		for (i = 0; i < NUM_G; i++, val++)
1785			snd_emu10k1_ptr_write(emu, *reg, i, *val);
1786	if (emu->audigy) {
1787		for (reg = saved_regs_audigy; *reg != 0xff; reg++)
1788			for (i = 0; i < NUM_G; i++, val++)
1789				snd_emu10k1_ptr_write(emu, *reg, i, *val);
1790	}
1791}
1792#endif
~/ Read-only file preview.