.. | .. |
---|
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 |
---|