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

Commit 08eca6b1 authored by Connor McAdams's avatar Connor McAdams Committed by Takashi Iwai
Browse files

ALSA: hda/ca0132 - Add bool variable to enable/disable pci region2 mmio



This patch adds the ability to choose whether or not to map the pci
region2, which is used for things such as GPIO on the Recon3D and Sound
Blaster Z.

Signed-off-by: default avatarConnor McAdams <conmanx360@gmail.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 7f73df95
Loading
Loading
Loading
Loading
+19 −13
Original line number Original line Diff line number Diff line
@@ -965,9 +965,11 @@ struct ca0132_spec {
	long cur_ctl_vals[TUNING_CTLS_COUNT];
	long cur_ctl_vals[TUNING_CTLS_COUNT];
#endif
#endif
	/*
	/*
	 * Sound Blaster Z PCI region 2 iomem, used for input and output
	 * The Recon3D, Sound Blaster Z, Sound Blaster ZxR, and Sound Blaster
	 * switching, and other unknown commands.
	 * AE-5 all use PCI region 2 to toggle GPIO and other currently unknown
	 * things.
	 */
	 */
	bool use_pci_mmio;
	void __iomem *mem_base;
	void __iomem *mem_base;


	/*
	/*
@@ -7562,16 +7564,6 @@ static int patch_ca0132(struct hda_codec *codec)
	else
	else
		spec->quirk = QUIRK_NONE;
		spec->quirk = QUIRK_NONE;


	/* Setup BAR Region 2 for Sound Blaster Z */
	if (spec->quirk == QUIRK_SBZ) {
		spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20);
		if (spec->mem_base == NULL) {
			codec_warn(codec, "pci_iomap failed!");
			codec_info(codec, "perhaps this is not an SBZ?");
			spec->quirk = QUIRK_NONE;
		}
	}

	spec->dsp_state = DSP_DOWNLOAD_INIT;
	spec->dsp_state = DSP_DOWNLOAD_INIT;
	spec->num_mixers = 1;
	spec->num_mixers = 1;


@@ -7590,19 +7582,33 @@ static int patch_ca0132(struct hda_codec *codec)
		break;
		break;
	}
	}


	/* Setup whether or not to use alt functions/controls */
	/* Setup whether or not to use alt functions/controls/pci_mmio */
	switch (spec->quirk) {
	switch (spec->quirk) {
	case QUIRK_SBZ:
	case QUIRK_SBZ:
		spec->use_alt_controls = true;
		spec->use_alt_functions = true;
		spec->use_pci_mmio = true;
		break;
	case QUIRK_R3DI:
	case QUIRK_R3DI:
		spec->use_alt_controls = true;
		spec->use_alt_controls = true;
		spec->use_alt_functions = true;
		spec->use_alt_functions = true;
		spec->use_pci_mmio = false;
		break;
		break;
	default:
	default:
		spec->use_alt_controls = false;
		spec->use_alt_controls = false;
		spec->use_alt_functions = false;
		spec->use_alt_functions = false;
		spec->use_pci_mmio = false;
		break;
		break;
	}
	}


	if (spec->use_pci_mmio) {
		spec->mem_base = pci_iomap(codec->bus->pci, 2, 0xC20);
		if (spec->mem_base == NULL) {
			codec_warn(codec, "pci_iomap failed! Setting quirk to QUIRK_NONE.");
			spec->quirk = QUIRK_NONE;
		}
	}

	spec->base_init_verbs = ca0132_base_init_verbs;
	spec->base_init_verbs = ca0132_base_init_verbs;
	spec->base_exit_verbs = ca0132_base_exit_verbs;
	spec->base_exit_verbs = ca0132_base_exit_verbs;