From: Daniel Ritz Date: Tue, 4 May 2004 22:31:38 +0000 (+0100) Subject: [PCMCIA] add EnE specific initialization to fix HDSP X-Git-Tag: v2.6.6~10^2~7^2~9^2~1^2 X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=b6ae0c502bccc9908c071a4886883b1c467a9d7a;p=history.git [PCMCIA] add EnE specific initialization to fix HDSP Patch from Daniel Ritz. This patch clears an almost undocumented EnE specific test register that makes sound on RME Hammerfall DSP Carbus work...should even work after suspend. --- diff --git a/drivers/pcmcia/ti113x.h b/drivers/pcmcia/ti113x.h index 496a51923285..315f634fd7f1 100644 --- a/drivers/pcmcia/ti113x.h +++ b/drivers/pcmcia/ti113x.h @@ -150,6 +150,10 @@ /* ExCA IO offset registers */ #define TI113X_IO_OFFSET(map) (0x36+((map)<<1)) +/* EnE test register */ +#define ENE_TEST_C9 0xc9 /* 8bit */ +#define ENE_TEST_C9_TLTENABLE 0x02 + #ifdef CONFIG_CARDBUS /* @@ -160,6 +164,7 @@ #define ti_devctl(socket) ((socket)->private[2]) #define ti_diag(socket) ((socket)->private[3]) #define ti_mfunc(socket) ((socket)->private[4]) +#define ene_test_c9(socket) ((socket)->private[5]) /* * These are the TI specific power management handlers. @@ -171,6 +176,9 @@ static void ti_save_state(struct yenta_socket *socket) ti_cardctl(socket) = config_readb(socket, TI113X_CARD_CONTROL); ti_devctl(socket) = config_readb(socket, TI113X_DEVICE_CONTROL); ti_diag(socket) = config_readb(socket, TI1250_DIAGNOSTIC); + + if (socket->dev->vendor == PCI_VENDOR_ID_ENE) + ene_test_c9(socket) = config_readb(socket, ENE_TEST_C9); } static void ti_restore_state(struct yenta_socket *socket) @@ -180,6 +188,9 @@ static void ti_restore_state(struct yenta_socket *socket) config_writeb(socket, TI113X_CARD_CONTROL, ti_cardctl(socket)); config_writeb(socket, TI113X_DEVICE_CONTROL, ti_devctl(socket)); config_writeb(socket, TI1250_DIAGNOSTIC, ti_diag(socket)); + + if (socket->dev->vendor == PCI_VENDOR_ID_ENE) + config_writeb(socket, ENE_TEST_C9, ene_test_c9(socket)); } /* @@ -591,6 +602,16 @@ static int ti12xx_override(struct yenta_socket *socket) config_writel(socket, TI113X_SYSTEM_CONTROL, val); } + /* + * for EnE bridges only: clear testbit TLTEnable. this makes the + * RME Hammerfall DSP sound card working. + */ + if (socket->dev->vendor == PCI_VENDOR_ID_ENE) { + u8 test_c9 = config_readb(socket, ENE_TEST_C9); + test_c9 &= ~ENE_TEST_C9_TLTENABLE; + config_writeb(socket, ENE_TEST_C9, test_c9); + } + /* * Yenta expects controllers to use CSCINT to route * CSC interrupts to PCI rather than INTVAL.