コード例 #1
0
ファイル: ad1848.c プロジェクト: eyberg/rumpkernel-netbsd-src
void
ad1848_mute_channel(struct ad1848_softc *sc, int device, int mute)
{
	u_char reg;

	reg = ad_read(sc, mixer_channel_info[device].left_reg);

	if (mute & MUTE_LEFT) {
		if (device == AD1848_MONITOR_CHANNEL) {
			if (sc->open_mode & FREAD)
				ad1848_mute_wave_output(sc, WAVE_UNMUTE1, 0);
			ad_write(sc, mixer_channel_info[device].left_reg,
				 reg & ~DIGITAL_MIX1_ENABLE);
		} else if (device == AD1848_OUT_CHANNEL)
			ad_write(sc, mixer_channel_info[device].left_reg,
				 reg | MONO_OUTPUT_MUTE);
		else
			ad_write(sc, mixer_channel_info[device].left_reg,
				 reg | 0x80);
	} else if (!(sc->mute[device] & MUTE_LEFT)) {
		if (device == AD1848_MONITOR_CHANNEL) {
			ad_write(sc, mixer_channel_info[device].left_reg,
				 reg | DIGITAL_MIX1_ENABLE);
			if (sc->open_mode & FREAD)
				ad1848_mute_wave_output(sc, WAVE_UNMUTE1, 1);
		} else if (device == AD1848_OUT_CHANNEL)
			ad_write(sc, mixer_channel_info[device].left_reg,
				 reg & ~MONO_OUTPUT_MUTE);
		else
			ad_write(sc, mixer_channel_info[device].left_reg,
				 reg & ~0x80);
	}

	if (!mixer_channel_info[device].right_reg)
		return;

	reg = ad_read(sc, mixer_channel_info[device].right_reg);

	if (mute & MUTE_RIGHT) {
		ad_write(sc, mixer_channel_info[device].right_reg, reg | 0x80);
	} else if (!(sc->mute[device] & MUTE_RIGHT)) {
		ad_write(sc, mixer_channel_info[device].right_reg, reg &~0x80);
	}
}
コード例 #2
0
ファイル: ad1848_isa.c プロジェクト: Tommmster/netbsd-avr32
int
ad1848_isa_open(void *addr, int flags)
{
	struct ad1848_isa_softc *isc;
	struct ad1848_softc *sc;
	int error, state;

	isc = addr;
	sc = &isc->sc_ad1848;
	DPRINTF(("ad1848_isa_open: sc=%p\n", isc));
	state = 0;

	if (isc->sc_playdrq != -1) {
		error = isa_drq_alloc(isc->sc_ic, isc->sc_playdrq);
		if (error != 0)
			return EBUSY;
		state |= 1;
	}
	if (isc->sc_recdrq != -1 && isc->sc_recdrq != isc->sc_playdrq) {
		error = isa_drq_alloc(isc->sc_ic, isc->sc_recdrq);
		if (error != 0)
			goto bad;
		state |= 2;
	}

#ifndef AUDIO_NO_POWER_CTL
	/* Power-up chip */
	if (isc->powerctl)
		isc->powerctl(isc->powerarg, flags);
#endif

	/* Init and mute wave output */
	ad1848_mute_wave_output(sc, WAVE_MUTE2_INIT, 1);

	error = ad1848_open(sc, flags);
	if (error) {
#ifndef AUDIO_NO_POWER_CTL
		if (isc->powerctl)
			isc->powerctl(isc->powerarg, 0);
#endif
		goto bad;
	}

	DPRINTF(("ad1848_isa_open: opened\n"));
	return 0;

bad:
	if (state & 1)
		isa_drq_free(isc->sc_ic, isc->sc_playdrq);
	if (state & 2)
		isa_drq_free(isc->sc_ic, isc->sc_recdrq);

	return error;
}