Lines Matching refs:onyx
48 struct onyx { struct
65 #define codec_to_onyx(c) container_of(c, struct onyx, codec) argument
68 static int onyx_read_register(struct onyx *onyx, u8 reg, u8 *value) in onyx_read_register() argument
73 *value = onyx->cache[reg-FIRSTREGISTER]; in onyx_read_register()
76 v = i2c_smbus_read_byte_data(onyx->i2c, reg); in onyx_read_register()
80 onyx->cache[ONYX_REG_CONTROL-FIRSTREGISTER] = *value; in onyx_read_register()
84 static int onyx_write_register(struct onyx *onyx, u8 reg, u8 value) in onyx_write_register() argument
88 result = i2c_smbus_write_byte_data(onyx->i2c, reg, value); in onyx_write_register()
90 onyx->cache[reg-FIRSTREGISTER] = value; in onyx_write_register()
122 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_vol_get() local
125 mutex_lock(&onyx->mutex); in onyx_snd_vol_get()
126 onyx_read_register(onyx, ONYX_REG_DAC_ATTEN_LEFT, &l); in onyx_snd_vol_get()
127 onyx_read_register(onyx, ONYX_REG_DAC_ATTEN_RIGHT, &r); in onyx_snd_vol_get()
128 mutex_unlock(&onyx->mutex); in onyx_snd_vol_get()
139 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_vol_put() local
149 mutex_lock(&onyx->mutex); in onyx_snd_vol_put()
150 onyx_read_register(onyx, ONYX_REG_DAC_ATTEN_LEFT, &l); in onyx_snd_vol_put()
151 onyx_read_register(onyx, ONYX_REG_DAC_ATTEN_RIGHT, &r); in onyx_snd_vol_put()
155 mutex_unlock(&onyx->mutex); in onyx_snd_vol_put()
159 onyx_write_register(onyx, ONYX_REG_DAC_ATTEN_LEFT, in onyx_snd_vol_put()
162 onyx_write_register(onyx, ONYX_REG_DAC_ATTEN_RIGHT, in onyx_snd_vol_put()
165 mutex_unlock(&onyx->mutex); in onyx_snd_vol_put()
198 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_inputgain_get() local
201 mutex_lock(&onyx->mutex); in onyx_snd_inputgain_get()
202 onyx_read_register(onyx, ONYX_REG_ADC_CONTROL, &ig); in onyx_snd_inputgain_get()
203 mutex_unlock(&onyx->mutex); in onyx_snd_inputgain_get()
214 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_inputgain_put() local
220 mutex_lock(&onyx->mutex); in onyx_snd_inputgain_put()
221 onyx_read_register(onyx, ONYX_REG_ADC_CONTROL, &v); in onyx_snd_inputgain_put()
226 onyx_write_register(onyx, ONYX_REG_ADC_CONTROL, n); in onyx_snd_inputgain_put()
227 mutex_unlock(&onyx->mutex); in onyx_snd_inputgain_put()
252 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_capture_source_get() local
255 mutex_lock(&onyx->mutex); in onyx_snd_capture_source_get()
256 onyx_read_register(onyx, ONYX_REG_ADC_CONTROL, &v); in onyx_snd_capture_source_get()
257 mutex_unlock(&onyx->mutex); in onyx_snd_capture_source_get()
264 static void onyx_set_capture_source(struct onyx *onyx, int mic) in onyx_set_capture_source() argument
268 mutex_lock(&onyx->mutex); in onyx_set_capture_source()
269 onyx_read_register(onyx, ONYX_REG_ADC_CONTROL, &v); in onyx_set_capture_source()
273 onyx_write_register(onyx, ONYX_REG_ADC_CONTROL, v); in onyx_set_capture_source()
274 mutex_unlock(&onyx->mutex); in onyx_set_capture_source()
312 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_mute_get() local
315 mutex_lock(&onyx->mutex); in onyx_snd_mute_get()
316 onyx_read_register(onyx, ONYX_REG_DAC_CONTROL, &c); in onyx_snd_mute_get()
317 mutex_unlock(&onyx->mutex); in onyx_snd_mute_get()
328 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_mute_put() local
332 mutex_lock(&onyx->mutex); in onyx_snd_mute_put()
333 if (onyx->analog_locked) in onyx_snd_mute_put()
336 onyx_read_register(onyx, ONYX_REG_DAC_CONTROL, &v); in onyx_snd_mute_put()
343 err = onyx_write_register(onyx, ONYX_REG_DAC_CONTROL, c); in onyx_snd_mute_put()
346 mutex_unlock(&onyx->mutex); in onyx_snd_mute_put()
369 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_single_bit_get() local
376 mutex_lock(&onyx->mutex); in onyx_snd_single_bit_get()
377 onyx_read_register(onyx, address, &c); in onyx_snd_single_bit_get()
378 mutex_unlock(&onyx->mutex); in onyx_snd_single_bit_get()
388 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_snd_single_bit_put() local
397 mutex_lock(&onyx->mutex); in onyx_snd_single_bit_put()
398 if (spdiflock && onyx->spdif_locked) { in onyx_snd_single_bit_put()
403 onyx_read_register(onyx, address, &v); in onyx_snd_single_bit_put()
408 err = onyx_write_register(onyx, address, c); in onyx_snd_single_bit_put()
411 mutex_unlock(&onyx->mutex); in onyx_snd_single_bit_put()
490 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_spdif_get() local
493 mutex_lock(&onyx->mutex); in onyx_spdif_get()
494 onyx_read_register(onyx, ONYX_REG_DIG_INFO1, &v); in onyx_spdif_get()
497 onyx_read_register(onyx, ONYX_REG_DIG_INFO2, &v); in onyx_spdif_get()
500 onyx_read_register(onyx, ONYX_REG_DIG_INFO3, &v); in onyx_spdif_get()
503 onyx_read_register(onyx, ONYX_REG_DIG_INFO4, &v); in onyx_spdif_get()
505 mutex_unlock(&onyx->mutex); in onyx_spdif_get()
513 struct onyx *onyx = snd_kcontrol_chip(kcontrol); in onyx_spdif_put() local
516 mutex_lock(&onyx->mutex); in onyx_spdif_put()
517 onyx_read_register(onyx, ONYX_REG_DIG_INFO1, &v); in onyx_spdif_put()
519 onyx_write_register(onyx, ONYX_REG_DIG_INFO1, v); in onyx_spdif_put()
522 onyx_write_register(onyx, ONYX_REG_DIG_INFO2, v); in onyx_spdif_put()
524 onyx_read_register(onyx, ONYX_REG_DIG_INFO3, &v); in onyx_spdif_put()
526 onyx_write_register(onyx, ONYX_REG_DIG_INFO3, v); in onyx_spdif_put()
528 onyx_read_register(onyx, ONYX_REG_DIG_INFO4, &v); in onyx_spdif_put()
530 onyx_write_register(onyx, ONYX_REG_DIG_INFO4, v); in onyx_spdif_put()
531 mutex_unlock(&onyx->mutex); in onyx_spdif_put()
579 static int onyx_register_init(struct onyx *onyx) in onyx_register_init() argument
585 if (!onyx->initialised) { in onyx_register_init()
587 if (onyx_read_register(onyx, ONYX_REG_CONTROL, &val)) in onyx_register_init()
594 regs[i] = onyx->cache[register_map[i]-FIRSTREGISTER]; in onyx_register_init()
598 if (onyx_write_register(onyx, register_map[i], regs[i])) in onyx_register_init()
601 onyx->initialised = 1; in onyx_register_init()
673 struct onyx *onyx = cii->codec_data; in onyx_usable() local
676 mutex_lock(&onyx->mutex); in onyx_usable()
677 onyx_read_register(onyx, ONYX_REG_DIG_INFO4, &v); in onyx_usable()
679 onyx_read_register(onyx, ONYX_REG_DAC_CONTROL, &v); in onyx_usable()
683 mutex_unlock(&onyx->mutex); in onyx_usable()
698 struct onyx *onyx = cii->codec_data; in onyx_prepare() local
701 mutex_lock(&onyx->mutex); in onyx_prepare()
706 onyx_read_register(onyx, ONYX_REG_DAC_CONTROL, &v); in onyx_prepare()
707 if (onyx_write_register(onyx, in onyx_prepare()
711 onyx->analog_locked = 1; in onyx_prepare()
729 if (onyx_write_register(onyx, in onyx_prepare()
733 onyx->spdif_locked = 1; in onyx_prepare()
739 mutex_unlock(&onyx->mutex); in onyx_prepare()
747 struct onyx *onyx = cii->codec_data; in onyx_open() local
749 mutex_lock(&onyx->mutex); in onyx_open()
750 onyx->open_count++; in onyx_open()
751 mutex_unlock(&onyx->mutex); in onyx_open()
759 struct onyx *onyx = cii->codec_data; in onyx_close() local
761 mutex_lock(&onyx->mutex); in onyx_close()
762 onyx->open_count--; in onyx_close()
763 if (!onyx->open_count) in onyx_close()
764 onyx->spdif_locked = onyx->analog_locked = 0; in onyx_close()
765 mutex_unlock(&onyx->mutex); in onyx_close()
773 struct onyx *onyx = cii->codec_data; in onyx_switch_clock() local
775 mutex_lock(&onyx->mutex); in onyx_switch_clock()
779 onyx->codec.gpio->methods->all_amps_off(onyx->codec.gpio); in onyx_switch_clock()
782 onyx->codec.gpio->methods->all_amps_restore(onyx->codec.gpio); in onyx_switch_clock()
787 mutex_unlock(&onyx->mutex); in onyx_switch_clock()
796 struct onyx *onyx = cii->codec_data; in onyx_suspend() local
800 mutex_lock(&onyx->mutex); in onyx_suspend()
801 if (onyx_read_register(onyx, ONYX_REG_CONTROL, &v)) in onyx_suspend()
803 onyx_write_register(onyx, ONYX_REG_CONTROL, v | ONYX_ADPSV | ONYX_DAPSV); in onyx_suspend()
807 mutex_unlock(&onyx->mutex); in onyx_suspend()
814 struct onyx *onyx = cii->codec_data; in onyx_resume() local
818 mutex_lock(&onyx->mutex); in onyx_resume()
821 onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 0); in onyx_resume()
823 onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 1); in onyx_resume()
825 onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 0); in onyx_resume()
829 if (onyx_read_register(onyx, ONYX_REG_CONTROL, &v)) in onyx_resume()
831 onyx_write_register(onyx, ONYX_REG_CONTROL, v & ~(ONYX_ADPSV | ONYX_DAPSV)); in onyx_resume()
835 onyx_register_init(onyx); in onyx_resume()
838 mutex_unlock(&onyx->mutex); in onyx_resume()
863 struct onyx *onyx = codec_to_onyx(codec); in onyx_init_codec() local
869 if (!onyx->codec.gpio || !onyx->codec.gpio->methods) { in onyx_init_codec()
874 onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 0); in onyx_init_codec()
876 onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 1); in onyx_init_codec()
878 onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 0); in onyx_init_codec()
881 if (onyx_register_init(onyx)) { in onyx_init_codec()
886 if (aoa_snd_device_new(SNDRV_DEV_CODEC, onyx, &ops)) { in onyx_init_codec()
892 if ((onyx->codec.connected & 0xF) == 0) in onyx_init_codec()
896 if ((onyx->codec.connected & 0xC) == 0) { in onyx_init_codec()
897 if (!onyx->codec_info) in onyx_init_codec()
898 onyx->codec_info = kmalloc(sizeof(struct codec_info), GFP_KERNEL); in onyx_init_codec()
899 if (!onyx->codec_info) in onyx_init_codec()
901 ci = onyx->codec_info; in onyx_init_codec()
907 if ((onyx->codec.connected & 3) == 0) { in onyx_init_codec()
908 if (!onyx->codec_info) in onyx_init_codec()
909 onyx->codec_info = kmalloc(sizeof(struct codec_info), GFP_KERNEL); in onyx_init_codec()
910 if (!onyx->codec_info) in onyx_init_codec()
912 ci = onyx->codec_info; in onyx_init_codec()
919 if (onyx->codec.soundbus_dev->attach_codec(onyx->codec.soundbus_dev, in onyx_init_codec()
921 ci, onyx)) { in onyx_init_codec()
927 ctl = snd_ctl_new1(&n, onyx); \ in onyx_init_codec()
930 onyx->codec.soundbus_dev->pcm->device; \ in onyx_init_codec()
937 if (onyx->codec.soundbus_dev->pcm) { in onyx_init_codec()
940 if ((onyx->codec.connected & 0xC) == 0xC) in onyx_init_codec()
942 else if (onyx->codec.connected & 4) in onyx_init_codec()
943 onyx_set_capture_source(onyx, 0); in onyx_init_codec()
945 onyx_set_capture_source(onyx, 1); in onyx_init_codec()
946 if (onyx->codec.connected & 0xC) in onyx_init_codec()
951 if (onyx->codec.connected & 1) { in onyx_init_codec()
960 if (onyx->codec.connected & 2) { in onyx_init_codec()
964 if ((onyx->codec.connected & 3) == 3) in onyx_init_codec()
967 if ((onyx->codec.connected & 3) == 2) { in onyx_init_codec()
968 onyx_read_register(onyx, ONYX_REG_DIG_INFO4, &v); in onyx_init_codec()
970 onyx_write_register(onyx, ONYX_REG_DIG_INFO4, v); in onyx_init_codec()
978 onyx->codec.soundbus_dev->detach_codec(onyx->codec.soundbus_dev, onyx); in onyx_init_codec()
979 snd_device_free(aoa_get_card(), onyx); in onyx_init_codec()
985 struct onyx *onyx = codec_to_onyx(codec); in onyx_exit_codec() local
987 if (!onyx->codec.soundbus_dev) { in onyx_exit_codec()
991 onyx->codec.soundbus_dev->detach_codec(onyx->codec.soundbus_dev, onyx); in onyx_exit_codec()
998 struct onyx *onyx; in onyx_i2c_probe() local
1001 onyx = kzalloc(sizeof(struct onyx), GFP_KERNEL); in onyx_i2c_probe()
1003 if (!onyx) in onyx_i2c_probe()
1006 mutex_init(&onyx->mutex); in onyx_i2c_probe()
1007 onyx->i2c = client; in onyx_i2c_probe()
1008 i2c_set_clientdata(client, onyx); in onyx_i2c_probe()
1012 if (onyx_read_register(onyx, ONYX_REG_CONTROL, &dummy) != 0) { in onyx_i2c_probe()
1017 strlcpy(onyx->codec.name, "onyx", MAX_CODEC_NAME_LEN); in onyx_i2c_probe()
1018 onyx->codec.owner = THIS_MODULE; in onyx_i2c_probe()
1019 onyx->codec.init = onyx_init_codec; in onyx_i2c_probe()
1020 onyx->codec.exit = onyx_exit_codec; in onyx_i2c_probe()
1021 onyx->codec.node = of_node_get(node); in onyx_i2c_probe()
1023 if (aoa_codec_register(&onyx->codec)) { in onyx_i2c_probe()
1029 kfree(onyx); in onyx_i2c_probe()
1035 struct onyx *onyx = i2c_get_clientdata(client); in onyx_i2c_remove() local
1037 aoa_codec_unregister(&onyx->codec); in onyx_i2c_remove()
1038 of_node_put(onyx->codec.node); in onyx_i2c_remove()
1039 kfree(onyx->codec_info); in onyx_i2c_remove()
1040 kfree(onyx); in onyx_i2c_remove()