Lines Matching refs:ice

33 static void ap_cs8427_write_byte(struct snd_ice1712 *ice, unsigned char data, unsigned char tmp)  in ap_cs8427_write_byte()  argument
41 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_write_byte()
44 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_write_byte()
50 static unsigned char ap_cs8427_read_byte(struct snd_ice1712 *ice, unsigned char tmp) in ap_cs8427_read_byte() argument
57 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_read_byte()
59 if (snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA) & ICE1712_DELTA_AP_DIN) in ap_cs8427_read_byte()
62 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_read_byte()
69 static unsigned char ap_cs8427_codec_select(struct snd_ice1712 *ice) in ap_cs8427_codec_select() argument
72 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in ap_cs8427_codec_select()
73 switch (ice->eeprom.subvendor) { in ap_cs8427_codec_select()
94 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_codec_select()
100 static void ap_cs8427_codec_deassert(struct snd_ice1712 *ice, unsigned char tmp) in ap_cs8427_codec_deassert() argument
102 switch (ice->eeprom.subvendor) { in ap_cs8427_codec_deassert()
119 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_codec_deassert()
125 struct snd_ice1712 *ice = device->bus->private_data; in ap_cs8427_sendbytes() local
129 mutex_lock(&ice->gpio_mutex); in ap_cs8427_sendbytes()
130 tmp = ap_cs8427_codec_select(ice); in ap_cs8427_sendbytes()
131 ap_cs8427_write_byte(ice, (device->addr << 1) | 0, tmp); /* address + write mode */ in ap_cs8427_sendbytes()
133 ap_cs8427_write_byte(ice, *bytes++, tmp); in ap_cs8427_sendbytes()
134 ap_cs8427_codec_deassert(ice, tmp); in ap_cs8427_sendbytes()
135 mutex_unlock(&ice->gpio_mutex); in ap_cs8427_sendbytes()
142 struct snd_ice1712 *ice = device->bus->private_data; in ap_cs8427_readbytes() local
146 mutex_lock(&ice->gpio_mutex); in ap_cs8427_readbytes()
147 tmp = ap_cs8427_codec_select(ice); in ap_cs8427_readbytes()
148 ap_cs8427_write_byte(ice, (device->addr << 1) | 1, tmp); /* address + read mode */ in ap_cs8427_readbytes()
150 *bytes++ = ap_cs8427_read_byte(ice, tmp); in ap_cs8427_readbytes()
151 ap_cs8427_codec_deassert(ice, tmp); in ap_cs8427_readbytes()
152 mutex_unlock(&ice->gpio_mutex); in ap_cs8427_readbytes()
172 static void snd_ice1712_delta_cs8403_spdif_write(struct snd_ice1712 *ice, unsigned char bits) in snd_ice1712_delta_cs8403_spdif_write() argument
179 mutex_lock(&ice->gpio_mutex); in snd_ice1712_delta_cs8403_spdif_write()
180 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in snd_ice1712_delta_cs8403_spdif_write()
185 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_cs8403_spdif_write()
188 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_cs8403_spdif_write()
192 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_cs8403_spdif_write()
193 mutex_unlock(&ice->gpio_mutex); in snd_ice1712_delta_cs8403_spdif_write()
197 static void delta_spdif_default_get(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_default_get() argument
199 snd_cs8403_decode_spdif_bits(&ucontrol->value.iec958, ice->spdif.cs8403_bits); in delta_spdif_default_get()
202 static int delta_spdif_default_put(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_default_put() argument
208 spin_lock_irq(&ice->reg_lock); in delta_spdif_default_put()
209 change = ice->spdif.cs8403_bits != val; in delta_spdif_default_put()
210 ice->spdif.cs8403_bits = val; in delta_spdif_default_put()
211 if (change && ice->playback_pro_substream == NULL) { in delta_spdif_default_put()
212 spin_unlock_irq(&ice->reg_lock); in delta_spdif_default_put()
213 snd_ice1712_delta_cs8403_spdif_write(ice, val); in delta_spdif_default_put()
215 spin_unlock_irq(&ice->reg_lock); in delta_spdif_default_put()
220 static void delta_spdif_stream_get(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_stream_get() argument
222 snd_cs8403_decode_spdif_bits(&ucontrol->value.iec958, ice->spdif.cs8403_stream_bits); in delta_spdif_stream_get()
225 static int delta_spdif_stream_put(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_stream_put() argument
231 spin_lock_irq(&ice->reg_lock); in delta_spdif_stream_put()
232 change = ice->spdif.cs8403_stream_bits != val; in delta_spdif_stream_put()
233 ice->spdif.cs8403_stream_bits = val; in delta_spdif_stream_put()
234 if (change && ice->playback_pro_substream != NULL) { in delta_spdif_stream_put()
235 spin_unlock_irq(&ice->reg_lock); in delta_spdif_stream_put()
236 snd_ice1712_delta_cs8403_spdif_write(ice, val); in delta_spdif_stream_put()
238 spin_unlock_irq(&ice->reg_lock); in delta_spdif_stream_put()
250 struct snd_ice1712 *ice = ak->private_data[0]; in delta_ak4524_lock() local
252 snd_ice1712_save_gpio_status(ice); in delta_ak4524_lock()
264 struct snd_ice1712 *ice = ak->private_data[0]; in delta1010lt_ak4524_lock() local
266 snd_ice1712_save_gpio_status(ice); in delta1010lt_ak4524_lock()
277 struct snd_ice1712 *ice = ak->private_data[0]; in delta66e_ak4524_lock() local
279 snd_ice1712_save_gpio_status(ice); in delta66e_ak4524_lock()
291 struct snd_ice1712 *ice = ak->private_data[0]; in vx442_ak4524_lock() local
293 snd_ice1712_save_gpio_status(ice); in vx442_ak4524_lock()
302 static void delta_1010_set_rate_val(struct snd_ice1712 *ice, unsigned int rate) in delta_1010_set_rate_val() argument
309 mutex_lock(&ice->gpio_mutex); in delta_1010_set_rate_val()
310 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in delta_1010_set_rate_val()
315 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp2); in delta_1010_set_rate_val()
316 mutex_unlock(&ice->gpio_mutex); in delta_1010_set_rate_val()
325 struct snd_ice1712 *ice = ak->private_data[0]; in delta_ak4524_set_rate_val() local
331 mutex_lock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
332 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in delta_ak4524_set_rate_val()
333 mutex_unlock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
342 mutex_lock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
343 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA) & ~ICE1712_DELTA_DFS; in delta_ak4524_set_rate_val()
346 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in delta_ak4524_set_rate_val()
347 mutex_unlock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
374 static void delta_open_spdif(struct snd_ice1712 *ice, struct snd_pcm_substream *substream) in delta_open_spdif() argument
376 ice->spdif.cs8403_stream_bits = ice->spdif.cs8403_bits; in delta_open_spdif()
380 static void delta_setup_spdif(struct snd_ice1712 *ice, int rate) in delta_setup_spdif() argument
386 spin_lock_irqsave(&ice->reg_lock, flags); in delta_setup_spdif()
387 tmp = ice->spdif.cs8403_stream_bits; in delta_setup_spdif()
396 change = ice->spdif.cs8403_stream_bits != tmp; in delta_setup_spdif()
397 ice->spdif.cs8403_stream_bits = tmp; in delta_setup_spdif()
398 spin_unlock_irqrestore(&ice->reg_lock, flags); in delta_setup_spdif()
400 snd_ctl_notify(ice->card, SNDRV_CTL_EVENT_MASK_VALUE, &ice->spdif.stream_ctl->id); in delta_setup_spdif()
401 snd_ice1712_delta_cs8403_spdif_write(ice, tmp); in delta_setup_spdif()
411 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in snd_ice1712_delta1010lt_wordclock_status_get() local
413 if (snd_i2c_sendbytes(ice->cs8427, &reg, 1) != 1) in snd_ice1712_delta1010lt_wordclock_status_get()
414 dev_err(ice->card->dev, in snd_ice1712_delta1010lt_wordclock_status_get()
416 snd_i2c_readbytes(ice->cs8427, &reg, 1); in snd_ice1712_delta1010lt_wordclock_status_get()
566 static int snd_ice1712_delta_resume(struct snd_ice1712 *ice) in snd_ice1712_delta_resume() argument
572 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_resume()
579 snd_cs8427_init(ice->i2c, ice->cs8427); in snd_ice1712_delta_resume()
588 snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits); in snd_ice1712_delta_resume()
593 if (ice->akm_codecs) { in snd_ice1712_delta_resume()
594 memcpy(akm_img_bak, ice->akm->images, sizeof(akm_img_bak)); in snd_ice1712_delta_resume()
595 memcpy(akm_vol_bak, ice->akm->volumes, sizeof(akm_vol_bak)); in snd_ice1712_delta_resume()
596 snd_akm4xxx_init(ice->akm); in snd_ice1712_delta_resume()
597 memcpy(ice->akm->images, akm_img_bak, sizeof(akm_img_bak)); in snd_ice1712_delta_resume()
598 memcpy(ice->akm->volumes, akm_vol_bak, sizeof(akm_vol_bak)); in snd_ice1712_delta_resume()
599 snd_akm4xxx_reset(ice->akm, 0); in snd_ice1712_delta_resume()
605 static int snd_ice1712_delta_suspend(struct snd_ice1712 *ice) in snd_ice1712_delta_suspend() argument
607 if (ice->akm_codecs) /* reset & mute codec */ in snd_ice1712_delta_suspend()
608 snd_akm4xxx_reset(ice->akm, 1); in snd_ice1712_delta_suspend()
614 static int snd_ice1712_delta_init(struct snd_ice1712 *ice) in snd_ice1712_delta_init() argument
620 if (ice->eeprom.subvendor == ICE1712_SUBDEVICE_DELTA1010 && in snd_ice1712_delta_init()
621 ice->eeprom.gpiodir == 0x7b) in snd_ice1712_delta_init()
622 ice->eeprom.subvendor = ICE1712_SUBDEVICE_DELTA1010E; in snd_ice1712_delta_init()
624 if (ice->eeprom.subvendor == ICE1712_SUBDEVICE_DELTA66 && in snd_ice1712_delta_init()
625 ice->eeprom.gpiodir == 0xfb) in snd_ice1712_delta_init()
626 ice->eeprom.subvendor = ICE1712_SUBDEVICE_DELTA66E; in snd_ice1712_delta_init()
629 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
631 ice->num_total_dacs = 2; in snd_ice1712_delta_init()
632 ice->num_total_adcs = 2; in snd_ice1712_delta_init()
635 ice->num_total_dacs = 8; in snd_ice1712_delta_init()
636 ice->num_total_adcs = 2; in snd_ice1712_delta_init()
640 ice->num_total_dacs = ice->omni ? 8 : 4; in snd_ice1712_delta_init()
641 ice->num_total_adcs = ice->omni ? 8 : 4; in snd_ice1712_delta_init()
648 ice->num_total_dacs = 8; in snd_ice1712_delta_init()
649 ice->num_total_adcs = 8; in snd_ice1712_delta_init()
652 ice->num_total_dacs = 4; /* two AK4324 codecs */ in snd_ice1712_delta_init()
656 ice->num_total_dacs = 4; in snd_ice1712_delta_init()
657 ice->num_total_adcs = 4; in snd_ice1712_delta_init()
661 ice->pm_resume = snd_ice1712_delta_resume; in snd_ice1712_delta_init()
662 ice->pm_suspend = snd_ice1712_delta_suspend; in snd_ice1712_delta_init()
663 ice->pm_suspend_enabled = 1; in snd_ice1712_delta_init()
666 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in snd_ice1712_delta_init()
668 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_init()
672 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
679 err = snd_i2c_bus_create(ice->card, "ICE1712 GPIO 1", NULL, &ice->i2c); in snd_ice1712_delta_init()
681 dev_err(ice->card->dev, "unable to create I2C bus\n"); in snd_ice1712_delta_init()
684 ice->i2c->private_data = ice; in snd_ice1712_delta_init()
685 ice->i2c->ops = &ap_cs8427_i2c_ops; in snd_ice1712_delta_init()
686 err = snd_ice1712_init_cs8427(ice, CS8427_BASE_ADDR); in snd_ice1712_delta_init()
692 ice->gpio.set_pro_rate = delta_1010_set_rate_val; in snd_ice1712_delta_init()
695 ice->gpio.set_pro_rate = delta_1010_set_rate_val; in snd_ice1712_delta_init()
698 ice->spdif.ops.open = delta_open_spdif; in snd_ice1712_delta_init()
699 ice->spdif.ops.setup_rate = delta_setup_spdif; in snd_ice1712_delta_init()
700 ice->spdif.ops.default_get = delta_spdif_default_get; in snd_ice1712_delta_init()
701 ice->spdif.ops.default_put = delta_spdif_default_put; in snd_ice1712_delta_init()
702 ice->spdif.ops.stream_get = delta_spdif_stream_get; in snd_ice1712_delta_init()
703 ice->spdif.ops.stream_put = delta_spdif_stream_put; in snd_ice1712_delta_init()
705 snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits); in snd_ice1712_delta_init()
710 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
719 ak = ice->akm = kmalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL); in snd_ice1712_delta_init()
722 ice->akm_codecs = 1; in snd_ice1712_delta_init()
724 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
726 err = snd_ice1712_akm4xxx_init(ak, &akm_audiophile, &akm_audiophile_priv, ice); in snd_ice1712_delta_init()
729 err = snd_ice1712_akm4xxx_init(ak, &akm_delta410, &akm_delta410_priv, ice); in snd_ice1712_delta_init()
733 err = snd_ice1712_akm4xxx_init(ak, &akm_delta1010lt, &akm_delta1010lt_priv, ice); in snd_ice1712_delta_init()
737 err = snd_ice1712_akm4xxx_init(ak, &akm_delta44, &akm_delta44_priv, ice); in snd_ice1712_delta_init()
740 err = snd_ice1712_akm4xxx_init(ak, &akm_vx442, &akm_vx442_priv, ice); in snd_ice1712_delta_init()
743 err = snd_ice1712_akm4xxx_init(ak, &akm_delta66e, &akm_delta66e_priv, ice); in snd_ice1712_delta_init()
770 static int snd_ice1712_delta_add_controls(struct snd_ice1712 *ice) in snd_ice1712_delta_add_controls() argument
775 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
778 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_select, ice)); in snd_ice1712_delta_add_controls()
781 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_status, ice)); in snd_ice1712_delta_add_controls()
786 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_deltadio2496_spdif_in_select, ice)); in snd_ice1712_delta_add_controls()
792 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010lt_wordclock_select, ice)); in snd_ice1712_delta_add_controls()
795 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010lt_wordclock_status, ice)); in snd_ice1712_delta_add_controls()
802 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
807 err = snd_ice1712_spdif_build_controls(ice); in snd_ice1712_delta_add_controls()
814 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
819 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta_spdif_in_status, ice)); in snd_ice1712_delta_add_controls()
826 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
835 err = snd_ice1712_akm4xxx_build_controls(ice); in snd_ice1712_delta_add_controls()