Lines Matching refs:ice

47 static void ap_cs8427_write_byte(struct snd_ice1712 *ice, unsigned char data, unsigned char tmp)  in ap_cs8427_write_byte()  argument
55 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_write_byte()
58 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_write_byte()
64 static unsigned char ap_cs8427_read_byte(struct snd_ice1712 *ice, unsigned char tmp) in ap_cs8427_read_byte() argument
71 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_read_byte()
73 if (snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA) & ICE1712_DELTA_AP_DIN) in ap_cs8427_read_byte()
76 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_read_byte()
83 static unsigned char ap_cs8427_codec_select(struct snd_ice1712 *ice) in ap_cs8427_codec_select() argument
86 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in ap_cs8427_codec_select()
87 switch (ice->eeprom.subvendor) { in ap_cs8427_codec_select()
108 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_codec_select()
114 static void ap_cs8427_codec_deassert(struct snd_ice1712 *ice, unsigned char tmp) in ap_cs8427_codec_deassert() argument
116 switch (ice->eeprom.subvendor) { in ap_cs8427_codec_deassert()
133 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in ap_cs8427_codec_deassert()
139 struct snd_ice1712 *ice = device->bus->private_data; in ap_cs8427_sendbytes() local
143 mutex_lock(&ice->gpio_mutex); in ap_cs8427_sendbytes()
144 tmp = ap_cs8427_codec_select(ice); in ap_cs8427_sendbytes()
145 ap_cs8427_write_byte(ice, (device->addr << 1) | 0, tmp); /* address + write mode */ in ap_cs8427_sendbytes()
147 ap_cs8427_write_byte(ice, *bytes++, tmp); in ap_cs8427_sendbytes()
148 ap_cs8427_codec_deassert(ice, tmp); in ap_cs8427_sendbytes()
149 mutex_unlock(&ice->gpio_mutex); in ap_cs8427_sendbytes()
156 struct snd_ice1712 *ice = device->bus->private_data; in ap_cs8427_readbytes() local
160 mutex_lock(&ice->gpio_mutex); in ap_cs8427_readbytes()
161 tmp = ap_cs8427_codec_select(ice); in ap_cs8427_readbytes()
162 ap_cs8427_write_byte(ice, (device->addr << 1) | 1, tmp); /* address + read mode */ in ap_cs8427_readbytes()
164 *bytes++ = ap_cs8427_read_byte(ice, tmp); in ap_cs8427_readbytes()
165 ap_cs8427_codec_deassert(ice, tmp); in ap_cs8427_readbytes()
166 mutex_unlock(&ice->gpio_mutex); in ap_cs8427_readbytes()
186 static void snd_ice1712_delta_cs8403_spdif_write(struct snd_ice1712 *ice, unsigned char bits) in snd_ice1712_delta_cs8403_spdif_write() argument
193 mutex_lock(&ice->gpio_mutex); in snd_ice1712_delta_cs8403_spdif_write()
194 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in snd_ice1712_delta_cs8403_spdif_write()
199 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_cs8403_spdif_write()
202 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_cs8403_spdif_write()
206 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_cs8403_spdif_write()
207 mutex_unlock(&ice->gpio_mutex); in snd_ice1712_delta_cs8403_spdif_write()
211 static void delta_spdif_default_get(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_default_get() argument
213 snd_cs8403_decode_spdif_bits(&ucontrol->value.iec958, ice->spdif.cs8403_bits); in delta_spdif_default_get()
216 static int delta_spdif_default_put(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_default_put() argument
222 spin_lock_irq(&ice->reg_lock); in delta_spdif_default_put()
223 change = ice->spdif.cs8403_bits != val; in delta_spdif_default_put()
224 ice->spdif.cs8403_bits = val; in delta_spdif_default_put()
225 if (change && ice->playback_pro_substream == NULL) { in delta_spdif_default_put()
226 spin_unlock_irq(&ice->reg_lock); in delta_spdif_default_put()
227 snd_ice1712_delta_cs8403_spdif_write(ice, val); in delta_spdif_default_put()
229 spin_unlock_irq(&ice->reg_lock); in delta_spdif_default_put()
234 static void delta_spdif_stream_get(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_stream_get() argument
236 snd_cs8403_decode_spdif_bits(&ucontrol->value.iec958, ice->spdif.cs8403_stream_bits); in delta_spdif_stream_get()
239 static int delta_spdif_stream_put(struct snd_ice1712 *ice, struct snd_ctl_elem_value *ucontrol) in delta_spdif_stream_put() argument
245 spin_lock_irq(&ice->reg_lock); in delta_spdif_stream_put()
246 change = ice->spdif.cs8403_stream_bits != val; in delta_spdif_stream_put()
247 ice->spdif.cs8403_stream_bits = val; in delta_spdif_stream_put()
248 if (change && ice->playback_pro_substream != NULL) { in delta_spdif_stream_put()
249 spin_unlock_irq(&ice->reg_lock); in delta_spdif_stream_put()
250 snd_ice1712_delta_cs8403_spdif_write(ice, val); in delta_spdif_stream_put()
252 spin_unlock_irq(&ice->reg_lock); in delta_spdif_stream_put()
264 struct snd_ice1712 *ice = ak->private_data[0]; in delta_ak4524_lock() local
266 snd_ice1712_save_gpio_status(ice); in delta_ak4524_lock()
278 struct snd_ice1712 *ice = ak->private_data[0]; in delta1010lt_ak4524_lock() local
280 snd_ice1712_save_gpio_status(ice); in delta1010lt_ak4524_lock()
291 struct snd_ice1712 *ice = ak->private_data[0]; in delta66e_ak4524_lock() local
293 snd_ice1712_save_gpio_status(ice); in delta66e_ak4524_lock()
305 struct snd_ice1712 *ice = ak->private_data[0]; in vx442_ak4524_lock() local
307 snd_ice1712_save_gpio_status(ice); in vx442_ak4524_lock()
316 static void delta_1010_set_rate_val(struct snd_ice1712 *ice, unsigned int rate) in delta_1010_set_rate_val() argument
323 mutex_lock(&ice->gpio_mutex); in delta_1010_set_rate_val()
324 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in delta_1010_set_rate_val()
329 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp2); in delta_1010_set_rate_val()
330 mutex_unlock(&ice->gpio_mutex); in delta_1010_set_rate_val()
339 struct snd_ice1712 *ice = ak->private_data[0]; in delta_ak4524_set_rate_val() local
345 mutex_lock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
346 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in delta_ak4524_set_rate_val()
347 mutex_unlock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
356 mutex_lock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
357 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA) & ~ICE1712_DELTA_DFS; in delta_ak4524_set_rate_val()
360 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in delta_ak4524_set_rate_val()
361 mutex_unlock(&ice->gpio_mutex); in delta_ak4524_set_rate_val()
388 static void delta_open_spdif(struct snd_ice1712 *ice, struct snd_pcm_substream *substream) in delta_open_spdif() argument
390 ice->spdif.cs8403_stream_bits = ice->spdif.cs8403_bits; in delta_open_spdif()
394 static void delta_setup_spdif(struct snd_ice1712 *ice, int rate) in delta_setup_spdif() argument
400 spin_lock_irqsave(&ice->reg_lock, flags); in delta_setup_spdif()
401 tmp = ice->spdif.cs8403_stream_bits; in delta_setup_spdif()
410 change = ice->spdif.cs8403_stream_bits != tmp; in delta_setup_spdif()
411 ice->spdif.cs8403_stream_bits = tmp; in delta_setup_spdif()
412 spin_unlock_irqrestore(&ice->reg_lock, flags); in delta_setup_spdif()
414 snd_ctl_notify(ice->card, SNDRV_CTL_EVENT_MASK_VALUE, &ice->spdif.stream_ctl->id); in delta_setup_spdif()
415 snd_ice1712_delta_cs8403_spdif_write(ice, tmp); in delta_setup_spdif()
425 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in snd_ice1712_delta1010lt_wordclock_status_get() local
427 if (snd_i2c_sendbytes(ice->cs8427, &reg, 1) != 1) in snd_ice1712_delta1010lt_wordclock_status_get()
428 dev_err(ice->card->dev, in snd_ice1712_delta1010lt_wordclock_status_get()
430 snd_i2c_readbytes(ice->cs8427, &reg, 1); in snd_ice1712_delta1010lt_wordclock_status_get()
580 static int snd_ice1712_delta_resume(struct snd_ice1712 *ice) in snd_ice1712_delta_resume() argument
586 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_resume()
593 snd_cs8427_init(ice->i2c, ice->cs8427); in snd_ice1712_delta_resume()
602 snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits); in snd_ice1712_delta_resume()
607 if (ice->akm_codecs) { in snd_ice1712_delta_resume()
608 memcpy(akm_img_bak, ice->akm->images, sizeof(akm_img_bak)); in snd_ice1712_delta_resume()
609 memcpy(akm_vol_bak, ice->akm->volumes, sizeof(akm_vol_bak)); in snd_ice1712_delta_resume()
610 snd_akm4xxx_init(ice->akm); in snd_ice1712_delta_resume()
611 memcpy(ice->akm->images, akm_img_bak, sizeof(akm_img_bak)); in snd_ice1712_delta_resume()
612 memcpy(ice->akm->volumes, akm_vol_bak, sizeof(akm_vol_bak)); in snd_ice1712_delta_resume()
613 snd_akm4xxx_reset(ice->akm, 0); in snd_ice1712_delta_resume()
619 static int snd_ice1712_delta_suspend(struct snd_ice1712 *ice) in snd_ice1712_delta_suspend() argument
621 if (ice->akm_codecs) /* reset & mute codec */ in snd_ice1712_delta_suspend()
622 snd_akm4xxx_reset(ice->akm, 1); in snd_ice1712_delta_suspend()
628 static int snd_ice1712_delta_init(struct snd_ice1712 *ice) in snd_ice1712_delta_init() argument
634 if (ice->eeprom.subvendor == ICE1712_SUBDEVICE_DELTA1010 && in snd_ice1712_delta_init()
635 ice->eeprom.gpiodir == 0x7b) in snd_ice1712_delta_init()
636 ice->eeprom.subvendor = ICE1712_SUBDEVICE_DELTA1010E; in snd_ice1712_delta_init()
638 if (ice->eeprom.subvendor == ICE1712_SUBDEVICE_DELTA66 && in snd_ice1712_delta_init()
639 ice->eeprom.gpiodir == 0xfb) in snd_ice1712_delta_init()
640 ice->eeprom.subvendor = ICE1712_SUBDEVICE_DELTA66E; in snd_ice1712_delta_init()
643 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
645 ice->num_total_dacs = 2; in snd_ice1712_delta_init()
646 ice->num_total_adcs = 2; in snd_ice1712_delta_init()
649 ice->num_total_dacs = 8; in snd_ice1712_delta_init()
650 ice->num_total_adcs = 2; in snd_ice1712_delta_init()
654 ice->num_total_dacs = ice->omni ? 8 : 4; in snd_ice1712_delta_init()
655 ice->num_total_adcs = ice->omni ? 8 : 4; in snd_ice1712_delta_init()
662 ice->num_total_dacs = 8; in snd_ice1712_delta_init()
663 ice->num_total_adcs = 8; in snd_ice1712_delta_init()
666 ice->num_total_dacs = 4; /* two AK4324 codecs */ in snd_ice1712_delta_init()
670 ice->num_total_dacs = 4; in snd_ice1712_delta_init()
671 ice->num_total_adcs = 4; in snd_ice1712_delta_init()
675 ice->pm_resume = snd_ice1712_delta_resume; in snd_ice1712_delta_init()
676 ice->pm_suspend = snd_ice1712_delta_suspend; in snd_ice1712_delta_init()
677 ice->pm_suspend_enabled = 1; in snd_ice1712_delta_init()
680 tmp = snd_ice1712_read(ice, ICE1712_IREG_GPIO_DATA); in snd_ice1712_delta_init()
682 snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, tmp); in snd_ice1712_delta_init()
686 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
693 if ((err = snd_i2c_bus_create(ice->card, "ICE1712 GPIO 1", NULL, &ice->i2c)) < 0) { in snd_ice1712_delta_init()
694 dev_err(ice->card->dev, "unable to create I2C bus\n"); in snd_ice1712_delta_init()
697 ice->i2c->private_data = ice; in snd_ice1712_delta_init()
698 ice->i2c->ops = &ap_cs8427_i2c_ops; in snd_ice1712_delta_init()
699 if ((err = snd_ice1712_init_cs8427(ice, CS8427_BASE_ADDR)) < 0) in snd_ice1712_delta_init()
704 ice->gpio.set_pro_rate = delta_1010_set_rate_val; in snd_ice1712_delta_init()
707 ice->gpio.set_pro_rate = delta_1010_set_rate_val; in snd_ice1712_delta_init()
710 ice->spdif.ops.open = delta_open_spdif; in snd_ice1712_delta_init()
711 ice->spdif.ops.setup_rate = delta_setup_spdif; in snd_ice1712_delta_init()
712 ice->spdif.ops.default_get = delta_spdif_default_get; in snd_ice1712_delta_init()
713 ice->spdif.ops.default_put = delta_spdif_default_put; in snd_ice1712_delta_init()
714 ice->spdif.ops.stream_get = delta_spdif_stream_get; in snd_ice1712_delta_init()
715 ice->spdif.ops.stream_put = delta_spdif_stream_put; in snd_ice1712_delta_init()
717 snd_ice1712_delta_cs8403_spdif_write(ice, ice->spdif.cs8403_bits); in snd_ice1712_delta_init()
722 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
731 ak = ice->akm = kmalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL); in snd_ice1712_delta_init()
734 ice->akm_codecs = 1; in snd_ice1712_delta_init()
736 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_init()
738 err = snd_ice1712_akm4xxx_init(ak, &akm_audiophile, &akm_audiophile_priv, ice); in snd_ice1712_delta_init()
741 err = snd_ice1712_akm4xxx_init(ak, &akm_delta410, &akm_delta410_priv, ice); in snd_ice1712_delta_init()
745 err = snd_ice1712_akm4xxx_init(ak, &akm_delta1010lt, &akm_delta1010lt_priv, ice); in snd_ice1712_delta_init()
749 err = snd_ice1712_akm4xxx_init(ak, &akm_delta44, &akm_delta44_priv, ice); in snd_ice1712_delta_init()
752 err = snd_ice1712_akm4xxx_init(ak, &akm_vx442, &akm_vx442_priv, ice); in snd_ice1712_delta_init()
755 err = snd_ice1712_akm4xxx_init(ak, &akm_delta66e, &akm_delta66e_priv, ice); in snd_ice1712_delta_init()
782 static int snd_ice1712_delta_add_controls(struct snd_ice1712 *ice) in snd_ice1712_delta_add_controls() argument
787 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
790 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_select, ice)); in snd_ice1712_delta_add_controls()
793 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010_wordclock_status, ice)); in snd_ice1712_delta_add_controls()
798 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_deltadio2496_spdif_in_select, ice)); in snd_ice1712_delta_add_controls()
804 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010lt_wordclock_select, ice)); in snd_ice1712_delta_add_controls()
807 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta1010lt_wordclock_status, ice)); in snd_ice1712_delta_add_controls()
814 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
819 err = snd_ice1712_spdif_build_controls(ice); in snd_ice1712_delta_add_controls()
826 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
831 err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_delta_spdif_in_status, ice)); in snd_ice1712_delta_add_controls()
838 switch (ice->eeprom.subvendor) { in snd_ice1712_delta_add_controls()
847 err = snd_ice1712_akm4xxx_build_controls(ice); in snd_ice1712_delta_add_controls()