Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6fef153a authored by Andy Owen's avatar Andy Owen Committed by Takashi Iwai
Browse files

ALSA: ca0106: Allow different sound cards to use different SPI channel mappings.

parent 861391d3
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -670,8 +670,9 @@ struct snd_ca0106_details {
			   gpio_type = 2 -> shared side-out/line-in. */
	int i2c_adc;	/* with i2c_adc=1, the driver adds some capture volume
			   controls, phone, mic, line-in and aux. */
	int spi_dac;	/* spi_dac=1 adds the mute switch for each analog
			   output, front, rear, etc. */
	u16 spi_dac;	/* spi_dac = 0 -> no spi interface for DACs
			   spi_dac = 0x<front><rear><center-lfe><side>
			   -> specifies DAC id for each channel pair. */
};

// definition of the chip-specific record
+16 −10
Original line number Diff line number Diff line
@@ -227,7 +227,7 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
	   .name   = "Audigy SE [SB0570]",
	   .gpio_type = 1,
	   .i2c_adc = 1,
	   .spi_dac = 1 } ,
	   .spi_dac = 0x4021 } ,
	 /* New Audigy LS. Has a different DAC. */
	 /* SB0570:
	  * CTRL:CA0106-DAT
@@ -238,7 +238,7 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
	   .name   = "Audigy SE OEM [SB0570a]",
	   .gpio_type = 1,
	   .i2c_adc = 1,
	   .spi_dac = 1 } ,
	   .spi_dac = 0x4021 } ,
	/* Sound Blaster 5.1vx
	 * Tested: Playback on front, rear, center/lfe speakers
	 * Not-Tested: Capture
@@ -247,7 +247,7 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
	  .name   = "Sound Blaster 5.1vx [SB1070]",
	  .gpio_type = 1,
	  .i2c_adc = 0,
	  .spi_dac = 1
	  .spi_dac = 0x0124
	 } ,
	 /* MSI K8N Diamond Motherboard with onboard SB Live 24bit without AC97 */
	 /* SB0438
@@ -264,7 +264,7 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
	   .name   = "MSI K8N Diamond MB",
	   .gpio_type = 2,
	   .i2c_adc = 1,
	   .spi_dac = 1 } ,
	   .spi_dac = 0x4021 } ,
	/* Giga-byte GA-G1975X mobo
	 * Novell bnc#395807
	 */
@@ -520,12 +520,18 @@ static int snd_ca0106_channel_dac(struct snd_ca0106_details *details,
				  int channel_id)
{
	switch (channel_id) {
	case PCM_FRONT_CHANNEL:		return 4;
	case PCM_REAR_CHANNEL:		return 0;
	case PCM_CENTER_LFE_CHANNEL:	return 2;
	case PCM_UNKNOWN_CHANNEL:	return 1;
	case PCM_FRONT_CHANNEL:
		return (details->spi_dac & 0xf000) >> (4 * 3);
	case PCM_REAR_CHANNEL:
		return (details->spi_dac & 0x0f00) >> (4 * 2);
	case PCM_CENTER_LFE_CHANNEL:
		return (details->spi_dac & 0x00f0) >> (4 * 1);
	case PCM_UNKNOWN_CHANNEL:
		return (details->spi_dac & 0x000f) >> (4 * 0);
	default:
		snd_printk(KERN_DEBUG "ca0106: unknown channel_id %d\n",
			   channel_id);
	}
	snd_printk(KERN_DEBUG "ca0106: unknown channel_id %d\n", channel_id);
	return 0;
}

@@ -1582,7 +1588,7 @@ static void ca0106_init_chip(struct snd_ca0106 *chip, int resume)
		/* snd_ca0106_i2c_write(chip, ADC_MUX, ADC_MUX_LINEIN); */
	}

	if (chip->details->spi_dac == 1) {
	if (chip->details->spi_dac) {
		/* The SB0570 use SPI to control DAC. */
		int size, n;

+2 −2
Original line number Diff line number Diff line
@@ -832,7 +832,7 @@ int __devinit snd_ca0106_mixer(struct snd_ca0106 *emu)
		if (err < 0)
			return err;
	}
	if (emu->details->spi_dac == 1)
	if (emu->details->spi_dac)
		ADD_CTLS(emu, snd_ca0106_volume_spi_dac_ctls);

	/* Create virtual master controls */
@@ -845,7 +845,7 @@ int __devinit snd_ca0106_mixer(struct snd_ca0106 *emu)
		return err;
	add_slaves(card, vmaster, slave_vols);

	if (emu->details->spi_dac == 1) {
	if (emu->details->spi_dac) {
		vmaster = snd_ctl_make_virtual_master("Master Playback Switch",
						      NULL);
		if (!vmaster)