Exemplo n.º 1
0
int snd_ice1712_akm4xxx_init(struct snd_akm4xxx *ak, const struct snd_akm4xxx *temp,
			     const struct snd_ak4xxx_private *_priv, struct snd_ice1712 *ice)
{
	struct snd_ak4xxx_private *priv;

	if (_priv != NULL) {
		priv = kmalloc(sizeof(*priv), GFP_KERNEL);
		if (priv == NULL)
			return -ENOMEM;
		*priv = *_priv;
	} else {
		priv = NULL;
	}
	*ak = *temp;
	ak->card = ice->card;
        ak->private_value[0] = (unsigned long)priv;
	ak->private_data[0] = ice;
	if (ak->ops.lock == NULL)
		ak->ops.lock = snd_ice1712_akm4xxx_lock;
	if (ak->ops.unlock == NULL)
		ak->ops.unlock = snd_ice1712_akm4xxx_unlock;
	if (ak->ops.write == NULL)
		ak->ops.write = snd_ice1712_akm4xxx_write;
	snd_akm4xxx_init(ak);
	return 0;
}
Exemplo n.º 2
0
static int snd_ice1712_delta_resume(struct snd_ice1712 *ice)
{
	unsigned char akm_img_bak[AK4XXX_IMAGE_SIZE];
	unsigned char akm_vol_bak[AK4XXX_IMAGE_SIZE];

	/* init spdif */
	switch (ice->eeprom.subvendor) {
	case ICE1712_SUBDEVICE_AUDIOPHILE:
	case ICE1712_SUBDEVICE_DELTA410:
	case ICE1712_SUBDEVICE_DELTA1010E:
	case ICE1712_SUBDEVICE_DELTA1010LT:
	case ICE1712_SUBDEVICE_VX442:
	case ICE1712_SUBDEVICE_DELTA66E:
		snd_cs8427_init(ice->i2c, ice->cs8427);
		break;
	case ICE1712_SUBDEVICE_DELTA1010:
	case ICE1712_SUBDEVICE_MEDIASTATION:
		/* nothing */
		break;
	case ICE1712_SUBDEVICE_DELTADIO2496:
	case ICE1712_SUBDEVICE_DELTA66:
		/* Set spdif defaults */
		snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits);
		break;
	}

	/* init codec and restore registers */
	if (ice->akm_codecs) {
		memcpy(akm_img_bak, ice->akm->images, sizeof(akm_img_bak));
		memcpy(akm_vol_bak, ice->akm->volumes, sizeof(akm_vol_bak));
		snd_akm4xxx_init(ice->akm);
		memcpy(ice->akm->images, akm_img_bak, sizeof(akm_img_bak));
		memcpy(ice->akm->volumes, akm_vol_bak, sizeof(akm_vol_bak));
		snd_akm4xxx_reset(ice->akm, 0);
	}

	return 0;
}