From 591ec9c696216b317f0cdacee2e00d34789c0a08 Mon Sep 17 00:00:00 2001 From: Jacob Meuser Date: Wed, 13 Feb 2008 23:35:09 +0000 Subject: Since SPDIF support for the auixp driver is still half done disable it for now since some chipset revisions will freak out on the aparent half-initialisation. Also delay the setting of the DMA bits until after the codec detection but before the enabling of interrupts. Note that the DMA has to be explicitly started when the device is opened. From reinoud NetBSD via brad@ tested by ian@ and matthieu@ --- sys/dev/pci/auixp.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'sys/dev/pci') diff --git a/sys/dev/pci/auixp.c b/sys/dev/pci/auixp.c index f4573f82788..da1d0b3e5a0 100644 --- a/sys/dev/pci/auixp.c +++ b/sys/dev/pci/auixp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: auixp.c,v 1.16 2008/02/13 23:30:51 jakemsr Exp $ */ +/* $OpenBSD: auixp.c,v 1.17 2008/02/13 23:35:08 jakemsr Exp $ */ /* $NetBSD: auixp.c,v 1.9 2005/06/27 21:13:09 thorpej Exp $ */ /* @@ -1256,21 +1256,6 @@ auixp_attach(struct device *parent, struct device *self, void *aux) if (!sc->sc_output_dma || !sc->sc_input_dma) return; - /* fill in the missing details about the dma channels. */ - - /* for output */ - sc->sc_output_dma->linkptr = ATI_REG_OUT_DMA_LINKPTR; - sc->sc_output_dma->dma_enable_bit = ATI_REG_CMD_OUT_DMA_EN | - ATI_REG_CMD_SEND_EN; - /* have spdif? then this too! XXX not seeing LED yet! XXX */ - if (sc->has_spdif) - sc->sc_output_dma->dma_enable_bit |= ATI_REG_CMD_SPDF_OUT_EN; - - /* and for input */ - sc->sc_input_dma->linkptr = ATI_REG_IN_DMA_LINKPTR; - sc->sc_input_dma->dma_enable_bit = ATI_REG_CMD_IN_DMA_EN | - ATI_REG_CMD_RECEIVE_EN; - #if 0 /* could preliminary program DMA chain */ auixp_program_dma_chain(sc, sc->sc_output_dma); @@ -1364,6 +1349,23 @@ auixp_post_config(void *self) audio_attach_mi(&auixp_hw_if, codec, &sc->sc_dev); } + if (sc->has_spdif) + sc->has_spdif = 0; + + /* fill in the missing details about the dma channels. */ + /* for output */ + sc->sc_output_dma->linkptr = ATI_REG_OUT_DMA_LINKPTR; + sc->sc_output_dma->dma_enable_bit = ATI_REG_CMD_OUT_DMA_EN | + ATI_REG_CMD_SEND_EN; + /* have spdif? then this too! XXX not seeing LED yet! XXX */ + if (sc->has_spdif) + sc->sc_output_dma->dma_enable_bit |= ATI_REG_CMD_SPDF_OUT_EN; + + /* and for input */ + sc->sc_input_dma->linkptr = ATI_REG_IN_DMA_LINKPTR; + sc->sc_input_dma->dma_enable_bit = ATI_REG_CMD_IN_DMA_EN | + ATI_REG_CMD_RECEIVE_EN; + /* done! now enable all interrupts we can service */ auixp_enable_interrupts(sc); } -- cgit v1.2.3