Lines Matching refs:ice
81 static unsigned short wm_get(struct snd_ice1712 *ice, int reg) in wm_get() argument
84 return ((unsigned short)ice->akm[0].images[reg] << 8) | in wm_get()
85 ice->akm[0].images[reg + 1]; in wm_get()
91 static void wm_put_nocache(struct snd_ice1712 *ice, int reg, unsigned short val) in wm_put_nocache() argument
95 snd_vt1724_write_i2c(ice, WM_DEV, cval >> 8, cval & 0xff); in wm_put_nocache()
98 static void wm_put(struct snd_ice1712 *ice, int reg, unsigned short val) in wm_put() argument
100 wm_put_nocache(ice, reg, val); in wm_put()
102 ice->akm[0].images[reg] = val >> 8; in wm_put()
103 ice->akm[0].images[reg + 1] = val; in wm_put()
125 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_dac_vol_get() local
129 mutex_lock(&ice->gpio_mutex); in wm_dac_vol_get()
131 val = wm_get(ice, WM_DAC_ATTEN_L + i) & 0xff; in wm_dac_vol_get()
135 mutex_unlock(&ice->gpio_mutex); in wm_dac_vol_get()
141 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_dac_vol_put() local
145 mutex_lock(&ice->gpio_mutex); in wm_dac_vol_put()
150 oval = wm_get(ice, idx) & 0xff; in wm_dac_vol_put()
152 wm_put(ice, idx, nval); in wm_dac_vol_put()
153 wm_put_nocache(ice, idx, nval | 0x100); in wm_dac_vol_put()
157 mutex_unlock(&ice->gpio_mutex); in wm_dac_vol_put()
180 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_adc_vol_get() local
184 mutex_lock(&ice->gpio_mutex); in wm_adc_vol_get()
186 val = wm_get(ice, WM_ADC_ATTEN_L + i) & 0xff; in wm_adc_vol_get()
190 mutex_unlock(&ice->gpio_mutex); in wm_adc_vol_get()
196 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_adc_vol_put() local
200 mutex_lock(&ice->gpio_mutex); in wm_adc_vol_put()
205 ovol = wm_get(ice, idx) & 0xff; in wm_adc_vol_put()
207 wm_put(ice, idx, nvol); in wm_adc_vol_put()
211 mutex_unlock(&ice->gpio_mutex); in wm_adc_vol_put()
222 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_adc_mux_get() local
225 mutex_lock(&ice->gpio_mutex); in wm_adc_mux_get()
226 ucontrol->value.integer.value[0] = (wm_get(ice, WM_ADC_MUX) & (1 << bit)) ? 1 : 0; in wm_adc_mux_get()
227 mutex_unlock(&ice->gpio_mutex); in wm_adc_mux_get()
233 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_adc_mux_put() local
238 mutex_lock(&ice->gpio_mutex); in wm_adc_mux_put()
239 nval = oval = wm_get(ice, WM_ADC_MUX); in wm_adc_mux_put()
246 wm_put(ice, WM_ADC_MUX, nval); in wm_adc_mux_put()
248 mutex_unlock(&ice->gpio_mutex); in wm_adc_mux_put()
259 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_bypass_get() local
261 mutex_lock(&ice->gpio_mutex); in wm_bypass_get()
262 ucontrol->value.integer.value[0] = (wm_get(ice, WM_OUT_MUX) & 0x04) ? 1 : 0; in wm_bypass_get()
263 mutex_unlock(&ice->gpio_mutex); in wm_bypass_get()
269 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_bypass_put() local
273 mutex_lock(&ice->gpio_mutex); in wm_bypass_put()
274 val = oval = wm_get(ice, WM_OUT_MUX); in wm_bypass_put()
280 wm_put(ice, WM_OUT_MUX, val); in wm_bypass_put()
283 mutex_unlock(&ice->gpio_mutex); in wm_bypass_put()
294 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_chswap_get() local
296 mutex_lock(&ice->gpio_mutex); in wm_chswap_get()
297 ucontrol->value.integer.value[0] = (wm_get(ice, WM_DAC_CTRL1) & 0xf0) != 0x90; in wm_chswap_get()
298 mutex_unlock(&ice->gpio_mutex); in wm_chswap_get()
304 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in wm_chswap_put() local
308 mutex_lock(&ice->gpio_mutex); in wm_chswap_put()
309 oval = wm_get(ice, WM_DAC_CTRL1); in wm_chswap_put()
316 wm_put(ice, WM_DAC_CTRL1, val); in wm_chswap_put()
317 wm_put_nocache(ice, WM_DAC_CTRL1, val); in wm_chswap_put()
320 mutex_unlock(&ice->gpio_mutex); in wm_chswap_put()
327 static void set_gpio_bit(struct snd_ice1712 *ice, unsigned int bit, int val) in set_gpio_bit() argument
329 unsigned int tmp = snd_ice1712_gpio_read(ice); in set_gpio_bit()
334 snd_ice1712_gpio_write(ice, tmp); in set_gpio_bit()
337 static void spi_send_byte(struct snd_ice1712 *ice, unsigned char data) in spi_send_byte() argument
341 set_gpio_bit(ice, PONTIS_CS_CLK, 0); in spi_send_byte()
343 set_gpio_bit(ice, PONTIS_CS_WDATA, data & 0x80); in spi_send_byte()
345 set_gpio_bit(ice, PONTIS_CS_CLK, 1); in spi_send_byte()
351 static unsigned int spi_read_byte(struct snd_ice1712 *ice) in spi_read_byte() argument
358 set_gpio_bit(ice, PONTIS_CS_CLK, 0); in spi_read_byte()
360 if (snd_ice1712_gpio_read(ice) & PONTIS_CS_RDATA) in spi_read_byte()
363 set_gpio_bit(ice, PONTIS_CS_CLK, 1); in spi_read_byte()
370 static void spi_write(struct snd_ice1712 *ice, unsigned int dev, unsigned int reg, unsigned int dat… in spi_write() argument
372 snd_ice1712_gpio_set_dir(ice, PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK); in spi_write()
373 snd_ice1712_gpio_set_mask(ice, ~(PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK)); in spi_write()
374 set_gpio_bit(ice, PONTIS_CS_CS, 0); in spi_write()
375 spi_send_byte(ice, dev & ~1); /* WRITE */ in spi_write()
376 spi_send_byte(ice, reg); /* MAP */ in spi_write()
377 spi_send_byte(ice, data); /* DATA */ in spi_write()
379 set_gpio_bit(ice, PONTIS_CS_CS, 1); in spi_write()
382 snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask); in spi_write()
383 snd_ice1712_gpio_set_dir(ice, ice->gpio.direction); in spi_write()
386 static unsigned int spi_read(struct snd_ice1712 *ice, unsigned int dev, unsigned int reg) in spi_read() argument
389 snd_ice1712_gpio_set_dir(ice, PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK); in spi_read()
390 snd_ice1712_gpio_set_mask(ice, ~(PONTIS_CS_CS|PONTIS_CS_WDATA|PONTIS_CS_CLK)); in spi_read()
391 set_gpio_bit(ice, PONTIS_CS_CS, 0); in spi_read()
392 spi_send_byte(ice, dev & ~1); /* WRITE */ in spi_read()
393 spi_send_byte(ice, reg); /* MAP */ in spi_read()
395 set_gpio_bit(ice, PONTIS_CS_CS, 1); in spi_read()
397 set_gpio_bit(ice, PONTIS_CS_CS, 0); in spi_read()
398 spi_send_byte(ice, dev | 1); /* READ */ in spi_read()
399 val = spi_read_byte(ice); in spi_read()
401 set_gpio_bit(ice, PONTIS_CS_CS, 1); in spi_read()
404 snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask); in spi_read()
405 snd_ice1712_gpio_set_dir(ice, ice->gpio.direction); in spi_read()
425 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in cs_source_get() local
427 mutex_lock(&ice->gpio_mutex); in cs_source_get()
428 ucontrol->value.enumerated.item[0] = ice->gpio.saved[0]; in cs_source_get()
429 mutex_unlock(&ice->gpio_mutex); in cs_source_get()
435 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in cs_source_put() local
439 mutex_lock(&ice->gpio_mutex); in cs_source_put()
440 if (ucontrol->value.enumerated.item[0] != ice->gpio.saved[0]) { in cs_source_put()
441 ice->gpio.saved[0] = ucontrol->value.enumerated.item[0] & 3; in cs_source_put()
442 val = 0x80 | (ice->gpio.saved[0] << 3); in cs_source_put()
443 spi_write(ice, CS_DEV, 0x04, val); in cs_source_put()
446 mutex_unlock(&ice->gpio_mutex); in cs_source_put()
465 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in pontis_gpio_mask_get() local
466 mutex_lock(&ice->gpio_mutex); in pontis_gpio_mask_get()
468 ucontrol->value.integer.value[0] = (~ice->gpio.write_mask & 0xffff) | 0x00f0; in pontis_gpio_mask_get()
469 mutex_unlock(&ice->gpio_mutex); in pontis_gpio_mask_get()
475 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in pontis_gpio_mask_put() local
478 mutex_lock(&ice->gpio_mutex); in pontis_gpio_mask_put()
481 changed = val != ice->gpio.write_mask; in pontis_gpio_mask_put()
482 ice->gpio.write_mask = val; in pontis_gpio_mask_put()
483 mutex_unlock(&ice->gpio_mutex); in pontis_gpio_mask_put()
489 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in pontis_gpio_dir_get() local
490 mutex_lock(&ice->gpio_mutex); in pontis_gpio_dir_get()
492 ucontrol->value.integer.value[0] = ice->gpio.direction & 0xff0f; in pontis_gpio_dir_get()
493 mutex_unlock(&ice->gpio_mutex); in pontis_gpio_dir_get()
499 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in pontis_gpio_dir_put() local
502 mutex_lock(&ice->gpio_mutex); in pontis_gpio_dir_put()
505 changed = (val != ice->gpio.direction); in pontis_gpio_dir_put()
506 ice->gpio.direction = val; in pontis_gpio_dir_put()
507 mutex_unlock(&ice->gpio_mutex); in pontis_gpio_dir_put()
513 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in pontis_gpio_data_get() local
514 mutex_lock(&ice->gpio_mutex); in pontis_gpio_data_get()
515 snd_ice1712_gpio_set_dir(ice, ice->gpio.direction); in pontis_gpio_data_get()
516 snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask); in pontis_gpio_data_get()
517 ucontrol->value.integer.value[0] = snd_ice1712_gpio_read(ice) & 0xffff; in pontis_gpio_data_get()
518 mutex_unlock(&ice->gpio_mutex); in pontis_gpio_data_get()
524 struct snd_ice1712 *ice = snd_kcontrol_chip(kcontrol); in pontis_gpio_data_put() local
527 mutex_lock(&ice->gpio_mutex); in pontis_gpio_data_put()
528 snd_ice1712_gpio_set_dir(ice, ice->gpio.direction); in pontis_gpio_data_put()
529 snd_ice1712_gpio_set_mask(ice, ice->gpio.write_mask); in pontis_gpio_data_put()
530 val = snd_ice1712_gpio_read(ice) & 0xffff; in pontis_gpio_data_put()
533 snd_ice1712_gpio_write(ice, nval); in pontis_gpio_data_put()
536 mutex_unlock(&ice->gpio_mutex); in pontis_gpio_data_put()
634 struct snd_ice1712 *ice = entry->private_data; in wm_proc_regs_write() local
637 mutex_lock(&ice->gpio_mutex); in wm_proc_regs_write()
642 wm_put(ice, reg, val); in wm_proc_regs_write()
644 mutex_unlock(&ice->gpio_mutex); in wm_proc_regs_write()
649 struct snd_ice1712 *ice = entry->private_data; in wm_proc_regs_read() local
652 mutex_lock(&ice->gpio_mutex); in wm_proc_regs_read()
654 val = wm_get(ice, reg); in wm_proc_regs_read()
657 mutex_unlock(&ice->gpio_mutex); in wm_proc_regs_read()
660 static void wm_proc_init(struct snd_ice1712 *ice) in wm_proc_init() argument
663 if (! snd_card_proc_new(ice->card, "wm_codec", &entry)) { in wm_proc_init()
664 snd_info_set_text_ops(entry, ice, wm_proc_regs_read); in wm_proc_init()
672 struct snd_ice1712 *ice = entry->private_data; in cs_proc_regs_read() local
675 mutex_lock(&ice->gpio_mutex); in cs_proc_regs_read()
677 val = spi_read(ice, CS_DEV, reg); in cs_proc_regs_read()
680 val = spi_read(ice, CS_DEV, 0x7f); in cs_proc_regs_read()
682 mutex_unlock(&ice->gpio_mutex); in cs_proc_regs_read()
685 static void cs_proc_init(struct snd_ice1712 *ice) in cs_proc_init() argument
688 if (! snd_card_proc_new(ice->card, "cs_codec", &entry)) in cs_proc_init()
689 snd_info_set_text_ops(entry, ice, cs_proc_regs_read); in cs_proc_init()
693 static int pontis_add_controls(struct snd_ice1712 *ice) in pontis_add_controls() argument
699 err = snd_ctl_add(ice->card, snd_ctl_new1(&pontis_controls[i], ice)); in pontis_add_controls()
704 wm_proc_init(ice); in pontis_add_controls()
705 cs_proc_init(ice); in pontis_add_controls()
714 static int pontis_init(struct snd_ice1712 *ice) in pontis_init() argument
760 ice->vt1720 = 1; in pontis_init()
761 ice->num_total_dacs = 2; in pontis_init()
762 ice->num_total_adcs = 2; in pontis_init()
765 ice->akm = kzalloc(sizeof(struct snd_akm4xxx), GFP_KERNEL); in pontis_init()
766 if (! ice->akm) in pontis_init()
768 ice->akm_codecs = 1; in pontis_init()
773 ice->gpio.saved[0] = 0; in pontis_init()
777 wm_put(ice, wm_inits[i], wm_inits[i+1]); in pontis_init()
780 wm_put(ice, wm_inits2[i], wm_inits2[i+1]); in pontis_init()
784 outb(inb(ICEMT1724(ice, AC97_CMD)) | 0x80, ICEMT1724(ice, AC97_CMD)); in pontis_init()
787 outb(inb(ICEMT1724(ice, AC97_CMD)) & ~0x80, ICEMT1724(ice, AC97_CMD)); in pontis_init()
790 spi_write(ice, CS_DEV, cs_inits[i], cs_inits[i+1]); in pontis_init()