Lines Matching +full:de +full:- +full:skew
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (C) 1999-2000 Takashi Iwai <tiwai@suse.de>
38 guard(spinlock_irqsave)(&emu->reg_lock);
39 if (reg != emu->last_reg) {
41 emu->last_reg = reg;
49 guard(spinlock_irqsave)(&emu->reg_lock);
50 if (reg != emu->last_reg) {
52 emu->last_reg = reg;
60 guard(spinlock_irqsave)(&emu->reg_lock);
61 if (reg != emu->last_reg) {
63 emu->last_reg = reg;
74 guard(spinlock_irqsave)(&emu->reg_lock);
75 if (reg != emu->last_reg) {
77 emu->last_reg = reg;
146 return -ENODEV;
149 return -ENODEV;
151 return -ENODEV;
153 dev_dbg(emu->card->dev, "EMU8000 [0x%lx]: Synth chip found\n",
154 emu->port1);
360 if (emu->dram_checked)
433 pr_info("EMU8000 [0x%lx]: %d KiB on-board DRAM detected\n",
434 emu->port1, size/1024);
436 emu->mem_size = size;
437 emu->dram_checked = 1;
449 the reverb and chorus effects for Yamaha OPL-3 synthesizer */
451 /* 31: FM left channel, 0xffffe0-0xffffe8 */
454 EMU8000_CSL_WRITE(emu, 30, 0x00FFFFE8 | (emu->fm_chorus_depth << 24));
455 EMU8000_PTRX_WRITE(emu, 30, (emu->fm_reverb_depth << 8));
459 /* 32: FM right channel, 0xfffff0-0xfffff8 */
462 EMU8000_CSL_WRITE(emu, 31, 0x00FFFFF8 | (emu->fm_chorus_depth << 24));
463 EMU8000_PTRX_WRITE(emu, 31, (emu->fm_reverb_depth << 8));
469 scoped_guard(spinlock_irqsave, &emu->reg_lock) {
480 /* skew volume & cutoff */
494 emu->last_reg = 0xffff; /* reset the last register index */
535 /*----------------------------------------------------------------
537 *----------------------------------------------------------------*/
540 {0xD26A, 0xD36A, 0x0000}, /* -12 dB */
541 {0xD25B, 0xD35B, 0x0000}, /* -8 */
542 {0xD24C, 0xD34C, 0x0000}, /* -6 */
543 {0xD23D, 0xD33D, 0x0000}, /* -4 */
544 {0xD21F, 0xD31F, 0x0000}, /* -2 */
555 {0x821E, 0xC26A, 0x031E, 0xC36A, 0x021E, 0xD208, 0x831E, 0xD308, 0x0001}, /* -12 dB */
571 * set Emu8000 digital equalizer; from 0 to 11 [-12dB - 12dB]
577 int bass = emu->bass_level;
578 int treble = emu->treble_level;
598 /*----------------------------------------------------------------
600 *----------------------------------------------------------------*/
618 unsigned short feedback; /* feedback level (0xE600-0xE6FF) */
619 unsigned short delay_offset; /* delay (0-0x0DA3) [1/44100 sec] */
620 unsigned short lfo_depth; /* LFO depth (0xBC00-0xBCFF) */
621 unsigned int delay; /* right delay (0-0xFFFFFFFF) [1/256/44100 sec] */
622 unsigned int lfo_freq; /* LFO freq LFO freq (0-0xFFFFFFFF) */
643 dev_warn(emu->card->dev, "invalid chorus mode %d for uploading\n", mode);
644 return -EINVAL;
647 return -EFAULT;
656 int effect = emu->chorus_mode;
669 /*----------------------------------------------------------------
671 *----------------------------------------------------------------*/
771 dev_warn(emu->card->dev, "invalid reverb mode %d for uploading\n", mode);
772 return -EINVAL;
775 return -EFAULT;
784 int effect = emu->reverb_mode;
801 /*----------------------------------------------------------------
803 *----------------------------------------------------------------*/
810 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
811 uinfo->count = 1;
812 uinfo->value.integer.min = 0;
813 uinfo->value.integer.max = 11;
821 ucontrol->value.integer.value[0] = kcontrol->private_value ? emu->treble_level : emu->bass_level;
831 val1 = ucontrol->value.integer.value[0] % 12;
832 scoped_guard(spinlock_irqsave, &emu->control_lock) {
833 if (kcontrol->private_value) {
834 change = val1 != emu->treble_level;
835 emu->treble_level = val1;
837 change = val1 != emu->bass_level;
838 emu->bass_level = val1;
848 .name = "Synth Tone Control - Bass",
858 .name = "Synth Tone Control - Treble",
870 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
871 uinfo->count = 1;
872 uinfo->value.integer.min = 0;
873 uinfo->value.integer.max = kcontrol->private_value ? (SNDRV_EMU8000_CHORUS_NUMBERS-1) : (SNDRV_EMU8000_REVERB_NUMBERS-1);
881 ucontrol->value.integer.value[0] = kcontrol->private_value ? emu->chorus_mode : emu->reverb_mode;
891 scoped_guard(spinlock_irqsave, &emu->control_lock) {
892 if (kcontrol->private_value) {
893 val1 = ucontrol->value.integer.value[0] % SNDRV_EMU8000_CHORUS_NUMBERS;
894 change = val1 != emu->chorus_mode;
895 emu->chorus_mode = val1;
897 val1 = ucontrol->value.integer.value[0] % SNDRV_EMU8000_REVERB_NUMBERS;
898 change = val1 != emu->reverb_mode;
899 emu->reverb_mode = val1;
903 if (kcontrol->private_value)
936 uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
937 uinfo->count = 1;
938 uinfo->value.integer.min = 0;
939 uinfo->value.integer.max = 255;
947 ucontrol->value.integer.value[0] = kcontrol->private_value ? emu->fm_chorus_depth : emu->fm_reverb_depth;
957 val1 = ucontrol->value.integer.value[0] % 256;
958 scoped_guard(spinlock_irqsave, &emu->control_lock) {
959 if (kcontrol->private_value) {
960 change = val1 != emu->fm_chorus_depth;
961 emu->fm_chorus_depth = val1;
963 change = val1 != emu->fm_reverb_depth;
964 emu->fm_reverb_depth = val1;
1012 return -EINVAL;
1014 spin_lock_init(&emu->control_lock);
1016 memset(emu->controls, 0, sizeof(emu->controls));
1022 emu->controls[i] = kctl;
1028 snd_ctl_remove(card, emu->controls[i]);
1049 hw = devm_kzalloc(card->dev, sizeof(*hw), GFP_KERNEL);
1051 return -ENOMEM;
1052 spin_lock_init(&hw->reg_lock);
1053 hw->index = index;
1054 hw->port1 = port;
1055 hw->port2 = port + 0x400;
1056 hw->port3 = port + 0x800;
1057 if (!devm_request_region(card->dev, hw->port1, 4, "Emu8000-1") ||
1058 !devm_request_region(card->dev, hw->port2, 4, "Emu8000-2") ||
1059 !devm_request_region(card->dev, hw->port3, 4, "Emu8000-3")) {
1060 dev_err(card->dev, "sbawe: can't grab ports 0x%lx, 0x%lx, 0x%lx\n",
1061 hw->port1, hw->port2, hw->port3);
1062 return -EBUSY;
1064 hw->mem_size = 0;
1065 hw->card = card;
1066 hw->seq_ports = seq_ports;
1067 hw->bass_level = 5;
1068 hw->treble_level = 9;
1069 hw->chorus_mode = 2;
1070 hw->reverb_mode = 4;
1071 hw->fm_chorus_depth = 0;
1072 hw->fm_reverb_depth = 0;
1075 return -ENODEV;
1084 strscpy(awe->name, "EMU-8000");