⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delta.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
	ice->spdif.cs8403_stream_bits = tmp;	spin_unlock_irqrestore(&ice->reg_lock, flags);	if (change)		snd_ctl_notify(ice->card, SNDRV_CTL_EVENT_MASK_VALUE, &ice->spdif.stream_ctl->id);	snd_ice1712_delta_cs8403_spdif_write(ice, tmp);}/* * initialize the chips on M-Audio cards */static akm4xxx_t akm_audiophile __devinitdata = {	.type = SND_AK4528,	.num_adcs = 2,	.num_dacs = 2,	.ops = {		.set_rate_val = delta_ak4524_set_rate_val	}};static struct snd_ak4xxx_private akm_audiophile_priv __devinitdata = {	.caddr = 2,	.cif = 0,	.data_mask = ICE1712_DELTA_AP_DOUT,	.clk_mask = ICE1712_DELTA_AP_CCLK,	.cs_mask = ICE1712_DELTA_AP_CS_CODEC,	.cs_addr = ICE1712_DELTA_AP_CS_CODEC,	.cs_none = 0,	.add_flags = ICE1712_DELTA_AP_CS_DIGITAL,	.mask_flags = 0,};static akm4xxx_t akm_delta410 __devinitdata = {	.type = SND_AK4529,	.num_adcs = 2,	.num_dacs = 8,	.ops = {		.set_rate_val = delta_ak4524_set_rate_val	}};static struct snd_ak4xxx_private akm_delta410_priv __devinitdata = {	.caddr = 0,	.cif = 0,	.data_mask = ICE1712_DELTA_AP_DOUT,	.clk_mask = ICE1712_DELTA_AP_CCLK,	.cs_mask = ICE1712_DELTA_AP_CS_CODEC,	.cs_addr = ICE1712_DELTA_AP_CS_CODEC,	.cs_none = 0,	.add_flags = ICE1712_DELTA_AP_CS_DIGITAL,	.mask_flags = 0,};static akm4xxx_t akm_delta1010lt __devinitdata = {	.type = SND_AK4524,	.num_adcs = 8,	.num_dacs = 8,	.ops = {		.lock = delta1010lt_ak4524_lock,		.set_rate_val = delta_ak4524_set_rate_val	}};static struct snd_ak4xxx_private akm_delta1010lt_priv __devinitdata = {	.caddr = 2,	.cif = 0, /* the default level of the CIF pin from AK4524 */	.data_mask = ICE1712_DELTA_1010LT_DOUT,	.clk_mask = ICE1712_DELTA_1010LT_CCLK,	.cs_mask = 0,	.cs_addr = 0, /* set later */	.cs_none = ICE1712_DELTA_1010LT_CS_NONE,	.add_flags = 0,	.mask_flags = 0,};static akm4xxx_t akm_delta44 __devinitdata = {	.type = SND_AK4524,	.num_adcs = 4,	.num_dacs = 4,	.ops = {		.lock = delta_ak4524_lock,		.set_rate_val = delta_ak4524_set_rate_val	}};static struct snd_ak4xxx_private akm_delta44_priv __devinitdata = {	.caddr = 2,	.cif = 0, /* the default level of the CIF pin from AK4524 */	.data_mask = ICE1712_DELTA_CODEC_SERIAL_DATA,	.clk_mask = ICE1712_DELTA_CODEC_SERIAL_CLOCK,	.cs_mask = 0,	.cs_addr = 0, /* set later */	.cs_none = 0,	.add_flags = 0,	.mask_flags = 0,};static akm4xxx_t akm_vx442 __devinitdata = {	.type = SND_AK4524,	.num_adcs = 4,	.num_dacs = 4,	.ops = {		.lock = vx442_ak4524_lock,		.set_rate_val = vx442_ak4524_set_rate_val	}};static struct snd_ak4xxx_private akm_vx442_priv __devinitdata = {	.caddr = 2,	.cif = 0,	.data_mask = ICE1712_VX442_DOUT,	.clk_mask = ICE1712_VX442_CCLK,	.cs_mask = 0,	.cs_addr = 0, /* set later */	.cs_none = 0,	.add_flags = 0,	.mask_flags = 0,};static int __devinit snd_ice1712_delta_init(ice1712_t *ice){	int err;	akm4xxx_t *ak;	/* determine I2C, DACs and ADCs */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_AUDIOPHILE:		ice->num_total_dacs = 2;		ice->num_total_adcs = 2;		break;	case ICE1712_SUBDEVICE_DELTA410:		ice->num_total_dacs = 8;		ice->num_total_adcs = 2;		break;	case ICE1712_SUBDEVICE_DELTA44:	case ICE1712_SUBDEVICE_DELTA66:		ice->num_total_dacs = ice->omni ? 8 : 4;		ice->num_total_adcs = ice->omni ? 8 : 4;		break;	case ICE1712_SUBDEVICE_DELTA1010:	case ICE1712_SUBDEVICE_DELTA1010LT:	case ICE1712_SUBDEVICE_MEDIASTATION:		ice->num_total_dacs = 8;		ice->num_total_adcs = 8;		break;	case ICE1712_SUBDEVICE_DELTADIO2496:		ice->num_total_dacs = 4;	/* two AK4324 codecs */		break;	case ICE1712_SUBDEVICE_VX442:		ice->num_total_dacs = 4;		ice->num_total_adcs = 4;		break;	}	/* initialize spdif */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_AUDIOPHILE:	case ICE1712_SUBDEVICE_DELTA410:	case ICE1712_SUBDEVICE_DELTA1010LT:	case ICE1712_SUBDEVICE_VX442:		if ((err = snd_i2c_bus_create(ice->card, "ICE1712 GPIO 1", NULL, &ice->i2c)) < 0) {			snd_printk(KERN_ERR "unable to create I2C bus\n");			return err;		}		ice->i2c->private_data = ice;		ice->i2c->ops = &ap_cs8427_i2c_ops;		if ((err = snd_ice1712_init_cs8427(ice, CS8427_BASE_ADDR)) < 0)			return err;		break;	case ICE1712_SUBDEVICE_DELTA1010:	case ICE1712_SUBDEVICE_MEDIASTATION:		ice->gpio.set_pro_rate = delta_1010_set_rate_val;		break;	case ICE1712_SUBDEVICE_DELTADIO2496:		ice->gpio.set_pro_rate = delta_1010_set_rate_val;		/* fall thru */	case ICE1712_SUBDEVICE_DELTA66:		ice->spdif.ops.open = delta_open_spdif;		ice->spdif.ops.setup_rate = delta_setup_spdif;		ice->spdif.ops.default_get = delta_spdif_default_get;		ice->spdif.ops.default_put = delta_spdif_default_put;		ice->spdif.ops.stream_get = delta_spdif_stream_get;		ice->spdif.ops.stream_put = delta_spdif_stream_put;		/* Set spdif defaults */		snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits);		break;	}	/* no analog? */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_DELTA1010:	case ICE1712_SUBDEVICE_DELTADIO2496:	case ICE1712_SUBDEVICE_MEDIASTATION:		return 0;	}	/* second stage of initialization, analog parts and others */	ak = ice->akm = kmalloc(sizeof(akm4xxx_t), GFP_KERNEL);	if (! ak)		return -ENOMEM;	ice->akm_codecs = 1;	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_AUDIOPHILE:		err = snd_ice1712_akm4xxx_init(ak, &akm_audiophile, &akm_audiophile_priv, ice);		break;	case ICE1712_SUBDEVICE_DELTA410:		err = snd_ice1712_akm4xxx_init(ak, &akm_delta410, &akm_delta410_priv, ice);		break;	case ICE1712_SUBDEVICE_DELTA1010LT:		err = snd_ice1712_akm4xxx_init(ak, &akm_delta1010lt, &akm_delta1010lt_priv, ice);		break;	case ICE1712_SUBDEVICE_DELTA66:	case ICE1712_SUBDEVICE_DELTA44:		err = snd_ice1712_akm4xxx_init(ak, &akm_delta44, &akm_delta44_priv, ice);		break;	case ICE1712_SUBDEVICE_VX442:		err = snd_ice1712_akm4xxx_init(ak, &akm_vx442, &akm_vx442_priv, ice);		break;	default:		snd_BUG();		return -EINVAL;	}	return err;}/* * additional controls for M-Audio cards */static snd_kcontrol_new_t snd_ice1712_delta1010_wordclock_select __devinitdata =ICE1712_GPIO(SNDRV_CTL_ELEM_IFACE_MIXER, "Word Clock Sync", 0, ICE1712_DELTA_WORD_CLOCK_SELECT, 1, 0);static snd_kcontrol_new_t snd_ice1712_delta1010lt_wordclock_select __devinitdata =ICE1712_GPIO(SNDRV_CTL_ELEM_IFACE_MIXER, "Word Clock Sync", 0, ICE1712_DELTA_1010LT_WORDCLOCK, 1, 0);static snd_kcontrol_new_t snd_ice1712_delta1010_wordclock_status __devinitdata =ICE1712_GPIO(SNDRV_CTL_ELEM_IFACE_MIXER, "Word Clock Status", 0, ICE1712_DELTA_WORD_CLOCK_STATUS, 1, SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE);static snd_kcontrol_new_t snd_ice1712_deltadio2496_spdif_in_select __devinitdata =ICE1712_GPIO(SNDRV_CTL_ELEM_IFACE_MIXER, "IEC958 Input Optical", 0, ICE1712_DELTA_SPDIF_INPUT_SELECT, 0, 0);static snd_kcontrol_new_t snd_ice1712_delta_spdif_in_status __devinitdata =ICE1712_GPIO(SNDRV_CTL_ELEM_IFACE_MIXER, "Delta IEC958 Input Status", 0, ICE1712_DELTA_SPDIF_IN_STAT, 1, SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE);static int __devinit snd_ice1712_delta_add_controls(ice1712_t *ice){	int err;	/* 1010 and dio specific controls */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_DELTA1010:	case ICE1712_SUBDEVICE_MEDIASTATION:		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_select, ice));		if (err < 0)			return err;		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_status, ice));		if (err < 0)			return err;		break;	case ICE1712_SUBDEVICE_DELTADIO2496:		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_deltadio2496_spdif_in_select, ice));		if (err < 0)			return err;		break;	case ICE1712_SUBDEVICE_DELTA1010LT:		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010lt_wordclock_select, ice));		if (err < 0)			return err;		break;	}	/* normal spdif controls */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_DELTA1010:	case ICE1712_SUBDEVICE_DELTADIO2496:	case ICE1712_SUBDEVICE_DELTA66:	case ICE1712_SUBDEVICE_MEDIASTATION:		err = snd_ice1712_spdif_build_controls(ice);		if (err < 0)			return err;		break;	}	/* spdif status in */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_DELTA1010:	case ICE1712_SUBDEVICE_DELTADIO2496:	case ICE1712_SUBDEVICE_DELTA66:	case ICE1712_SUBDEVICE_MEDIASTATION:		err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta_spdif_in_status, ice));		if (err < 0)			return err;		break;	}	/* ak4524 controls */	switch (ice->eeprom.subvendor) {	case ICE1712_SUBDEVICE_DELTA1010LT:	case ICE1712_SUBDEVICE_AUDIOPHILE:	case ICE1712_SUBDEVICE_DELTA410:	case ICE1712_SUBDEVICE_DELTA44:	case ICE1712_SUBDEVICE_DELTA66:	case ICE1712_SUBDEVICE_VX442:		err = snd_ice1712_akm4xxx_build_controls(ice);		if (err < 0)			return err;		break;	}	return 0;}/* entry point */struct snd_ice1712_card_info snd_ice1712_delta_cards[] __devinitdata = {	{		.subvendor = ICE1712_SUBDEVICE_DELTA1010,		.name = "M Audio Delta 1010",		.model = "delta1010",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,	},	{		.subvendor = ICE1712_SUBDEVICE_DELTADIO2496,		.name = "M Audio Delta DiO 2496",		.model = "dio2496",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,		.no_mpu401 = 1,	},	{		.subvendor = ICE1712_SUBDEVICE_DELTA66,		.name = "M Audio Delta 66",		.model = "delta66",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,		.no_mpu401 = 1,	},	{		.subvendor = ICE1712_SUBDEVICE_DELTA44,		.name = "M Audio Delta 44",		.model = "delta44",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,		.no_mpu401 = 1,	},	{		.subvendor = ICE1712_SUBDEVICE_AUDIOPHILE,		.name = "M Audio Audiophile 24/96",		.model = "audiophile",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,	},	{		.subvendor = ICE1712_SUBDEVICE_DELTA410,		.name = "M Audio Delta 410",		.model = "delta410",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,	},	{		.subvendor = ICE1712_SUBDEVICE_DELTA1010LT,		.name = "M Audio Delta 1010LT",		.model = "delta1010lt",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,	},	{		.subvendor = ICE1712_SUBDEVICE_VX442,		.name = "Digigram VX442",		.model = "vx442",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,		.no_mpu401 = 1,	},	{		.subvendor = ICE1712_SUBDEVICE_MEDIASTATION,		.name = "Lionstracs Mediastation",		.model = "mediastation",		.chip_init = snd_ice1712_delta_init,		.build_controls = snd_ice1712_delta_add_controls,	},	{ } /* terminator */};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -