| .. | .. |
|---|
| 1560 | 1560 | gpr += 2; |
|---|
| 1561 | 1561 | |
|---|
| 1562 | 1562 | /* Master volume (will be renamed later) */ |
|---|
| 1563 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1564 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1565 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1566 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1567 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1568 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1569 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1570 | | - A_OP(icode, &ptr, iMAC0, A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1563 | + for (z = 0; z < 8; z++) |
|---|
| 1564 | + A_OP(icode, &ptr, iMAC0, A_GPR(playback+z+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+z+SND_EMU10K1_PLAYBACK_CHANNELS)); |
|---|
| 1571 | 1565 | snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0); |
|---|
| 1572 | 1566 | gpr += 2; |
|---|
| 1573 | 1567 | |
|---|
| .. | .. |
|---|
| 1651 | 1645 | dev_dbg(emu->card->dev, "emufx.c: gpr=0x%x, tmp=0x%x\n", |
|---|
| 1652 | 1646 | gpr, tmp); |
|---|
| 1653 | 1647 | */ |
|---|
| 1654 | | - /* For the EMU1010: How to get 32bit values from the DSP. High 16bits into L, low 16bits into R. */ |
|---|
| 1655 | | - /* A_P16VIN(0) is delayed by one sample, |
|---|
| 1656 | | - * so all other A_P16VIN channels will need to also be delayed |
|---|
| 1657 | | - */ |
|---|
| 1658 | | - /* Left ADC in. 1 of 2 */ |
|---|
| 1659 | 1648 | snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_P16VIN(0x0), A_FXBUS2(0) ); |
|---|
| 1660 | | - /* Right ADC in 1 of 2 */ |
|---|
| 1661 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1662 | | - /* Delaying by one sample: instead of copying the input |
|---|
| 1663 | | - * value A_P16VIN to output A_FXBUS2 as in the first channel, |
|---|
| 1664 | | - * we use an auxiliary register, delaying the value by one |
|---|
| 1665 | | - * sample |
|---|
| 1666 | | - */ |
|---|
| 1667 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(2) ); |
|---|
| 1668 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x1), A_C_00000000, A_C_00000000); |
|---|
| 1669 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1670 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(4) ); |
|---|
| 1671 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x2), A_C_00000000, A_C_00000000); |
|---|
| 1672 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1673 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(6) ); |
|---|
| 1674 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x3), A_C_00000000, A_C_00000000); |
|---|
| 1675 | | - /* For 96kHz mode */ |
|---|
| 1676 | | - /* Left ADC in. 2 of 2 */ |
|---|
| 1677 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1678 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0x8) ); |
|---|
| 1679 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x4), A_C_00000000, A_C_00000000); |
|---|
| 1680 | | - /* Right ADC in 2 of 2 */ |
|---|
| 1681 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1682 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xa) ); |
|---|
| 1683 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x5), A_C_00000000, A_C_00000000); |
|---|
| 1684 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1685 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xc) ); |
|---|
| 1686 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x6), A_C_00000000, A_C_00000000); |
|---|
| 1687 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1688 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xe) ); |
|---|
| 1689 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x7), A_C_00000000, A_C_00000000); |
|---|
| 1690 | | - /* Pavel Hofman - we still have voices, A_FXBUS2s, and |
|---|
| 1691 | | - * A_P16VINs available - |
|---|
| 1692 | | - * let's add 8 more capture channels - total of 16 |
|---|
| 1693 | | - */ |
|---|
| 1694 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1695 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1696 | | - bit_shifter16, |
|---|
| 1697 | | - A_GPR(gpr - 1), |
|---|
| 1698 | | - A_FXBUS2(0x10)); |
|---|
| 1699 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x8), |
|---|
| 1700 | | - A_C_00000000, A_C_00000000); |
|---|
| 1701 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1702 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1703 | | - bit_shifter16, |
|---|
| 1704 | | - A_GPR(gpr - 1), |
|---|
| 1705 | | - A_FXBUS2(0x12)); |
|---|
| 1706 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x9), |
|---|
| 1707 | | - A_C_00000000, A_C_00000000); |
|---|
| 1708 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1709 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1710 | | - bit_shifter16, |
|---|
| 1711 | | - A_GPR(gpr - 1), |
|---|
| 1712 | | - A_FXBUS2(0x14)); |
|---|
| 1713 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xa), |
|---|
| 1714 | | - A_C_00000000, A_C_00000000); |
|---|
| 1715 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1716 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1717 | | - bit_shifter16, |
|---|
| 1718 | | - A_GPR(gpr - 1), |
|---|
| 1719 | | - A_FXBUS2(0x16)); |
|---|
| 1720 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xb), |
|---|
| 1721 | | - A_C_00000000, A_C_00000000); |
|---|
| 1722 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1723 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1724 | | - bit_shifter16, |
|---|
| 1725 | | - A_GPR(gpr - 1), |
|---|
| 1726 | | - A_FXBUS2(0x18)); |
|---|
| 1727 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xc), |
|---|
| 1728 | | - A_C_00000000, A_C_00000000); |
|---|
| 1729 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1730 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1731 | | - bit_shifter16, |
|---|
| 1732 | | - A_GPR(gpr - 1), |
|---|
| 1733 | | - A_FXBUS2(0x1a)); |
|---|
| 1734 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xd), |
|---|
| 1735 | | - A_C_00000000, A_C_00000000); |
|---|
| 1736 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1737 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1738 | | - bit_shifter16, |
|---|
| 1739 | | - A_GPR(gpr - 1), |
|---|
| 1740 | | - A_FXBUS2(0x1c)); |
|---|
| 1741 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xe), |
|---|
| 1742 | | - A_C_00000000, A_C_00000000); |
|---|
| 1743 | | - gpr_map[gpr++] = 0x00000000; |
|---|
| 1744 | | - snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp, |
|---|
| 1745 | | - bit_shifter16, |
|---|
| 1746 | | - A_GPR(gpr - 1), |
|---|
| 1747 | | - A_FXBUS2(0x1e)); |
|---|
| 1748 | | - A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xf), |
|---|
| 1749 | | - A_C_00000000, A_C_00000000); |
|---|
| 1649 | + /* A_P16VIN(0) is delayed by one sample, so all other A_P16VIN channels |
|---|
| 1650 | + * will need to also be delayed; we use an auxiliary register for that. */ |
|---|
| 1651 | + for (z = 1; z < 0x10; z++) { |
|---|
| 1652 | + snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr), A_FXBUS2(z * 2) ); |
|---|
| 1653 | + A_OP(icode, &ptr, iACC3, A_GPR(gpr), A_P16VIN(z), A_C_00000000, A_C_00000000); |
|---|
| 1654 | + gpr_map[gpr++] = 0x00000000; |
|---|
| 1655 | + } |
|---|
| 1750 | 1656 | } |
|---|
| 1751 | 1657 | |
|---|
| 1752 | 1658 | #if 0 |
|---|