Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
authorDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 14 Jul 2008 22:49:04 +0000 (15:49 -0700)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 14 Jul 2008 22:51:11 +0000 (15:51 -0700)
Conflicts:

sound/pci/Kconfig

1  2 
Makefile
arch/x86/kernel/microcode.c
drivers/net/wireless/rt2x00/rt61pci.c
drivers/net/wireless/rt2x00/rt73usb.c
include/asm-generic/vmlinux.lds.h
sound/isa/Kconfig
sound/pci/Kconfig
sound/pci/maestro3.c
sound/pci/pcxhr/pcxhr_core.c
sound/pci/ymfpci/ymfpci_main.c

diff --combined Makefile
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 2
  PATCHLEVEL = 6
  SUBLEVEL = 26
 -EXTRAVERSION = -rc9
 +EXTRAVERSION =
  NAME = Rotary Wombat
  
  # *DOCUMENTATION*
@@@ -450,7 -450,7 +450,7 @@@ scripts: scripts_basic include/config/a
  
  # Objects we will link into vmlinux / subdirs we need to visit
  init-y                := init/
- drivers-y     := drivers/ sound/
+ drivers-y     := drivers/ sound/ firmware/
  net-y         := net/
  libs-y                := lib/
  core-y                := usr/
@@@ -994,6 -994,16 +994,16 @@@ PHONY += depend de
  depend dep:
        @echo '*** Warning: make $@ is unnecessary now.'
  
+ # ---------------------------------------------------------------------------
+ # Firmware install
+ INSTALL_FW_PATH=$(INSTALL_MOD_PATH)/lib/firmware
+ export INSTALL_FW_PATH
+ PHONY += firmware_install
+ firmware_install: FORCE
+       @mkdir -p $(objtree)/firmware
+       $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_install
  # ---------------------------------------------------------------------------
  # Kernel headers
  INSTALL_HDR_PATH=$(objtree)/usr
@@@ -1080,6 -1090,7 +1090,7 @@@ _modinst_
  # boot script depmod is the master version.
  PHONY += _modinst_post
  _modinst_post: _modinst_
+       $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modinst
        $(call cmd,depmod)
  
  else # CONFIG_MODULES
@@@ -1197,6 -1208,8 +1208,8 @@@ help
        @echo  '* vmlinux         - Build the bare kernel'
        @echo  '* modules         - Build all modules'
        @echo  '  modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
+       @echo  '  firmware_install- Install all firmware to INSTALL_FW_PATH'
+       @echo  '                    (default: $$(INSTALL_MOD_PATH)/lib/firmware)'
        @echo  '  dir/            - Build all files in dir and below'
        @echo  '  dir/file.[ois]  - Build specified target only'
        @echo  '  dir/file.ko     - Build module including final link'
@@@ -5,14 -5,13 +5,14 @@@
   *                  2006      Shaohua Li <shaohua.li@intel.com>
   *
   *    This driver allows to upgrade microcode on Intel processors
 - *    belonging to IA-32 family - PentiumPro, Pentium II, 
 + *    belonging to IA-32 family - PentiumPro, Pentium II,
   *    Pentium III, Xeon, Pentium 4, etc.
   *
 - *    Reference: Section 8.10 of Volume III, Intel Pentium 4 Manual, 
 - *    Order Number 245472 or free download from:
 - *            
 - *    http://developer.intel.com/design/pentium4/manuals/245472.htm
 + *    Reference: Section 8.11 of Volume 3a, IA-32 Intel? Architecture
 + *    Software Developer's Manual
 + *    Order Number 253668 or free download from:
 + *
 + *    http://developer.intel.com/design/pentium4/manuals/253668.htm
   *
   *    For more information, go to http://www.urbanmyth.org/microcode
   *
   *            nature of implementation.
   *    1.11    22 Mar 2002 Tigran Aivazian <tigran@veritas.com>
   *            Fix the panic when writing zero-length microcode chunk.
 - *    1.12    29 Sep 2003 Nitin Kamble <nitin.a.kamble@intel.com>, 
 + *    1.12    29 Sep 2003 Nitin Kamble <nitin.a.kamble@intel.com>,
   *            Jun Nakajima <jun.nakajima@intel.com>
   *            Support for the microcode updates in the new format.
   *    1.13    10 Oct 2003 Tigran Aivazian <tigran@veritas.com>
   *            Removed ->read() method and obsoleted MICROCODE_IOCFREE ioctl
 - *            because we no longer hold a copy of applied microcode 
 + *            because we no longer hold a copy of applied microcode
   *            in kernel memory.
   *    1.14    25 Jun 2004 Tigran Aivazian <tigran@veritas.com>
   *            Fix sigmatch() macro to handle old CPUs with pf == 0.
@@@ -321,11 -320,11 +321,11 @@@ static void apply_microcode(int cpu
                return;
  
        /* serialize access to the physical write to MSR 0x79 */
 -      spin_lock_irqsave(&microcode_update_lock, flags);          
 +      spin_lock_irqsave(&microcode_update_lock, flags);
  
        /* write microcode via MSR 0x79 */
        wrmsr(MSR_IA32_UCODE_WRITE,
 -              (unsigned long) uci->mc->bits, 
 +              (unsigned long) uci->mc->bits,
                (unsigned long) uci->mc->bits >> 16 >> 16);
        wrmsr(MSR_IA32_UCODE_REV, 0, 0);
  
                return;
        }
        printk(KERN_INFO "microcode: CPU%d updated from revision "
 -             "0x%x to 0x%x, date = %08x \n", 
 +             "0x%x to 0x%x, date = %08x \n",
               cpu_num, uci->rev, val[1], uci->mc->hdr.date);
        uci->rev = val[1];
  }
@@@ -489,7 -488,7 +489,7 @@@ MODULE_ALIAS_MISCDEV(MICROCODE_MINOR)
  #define microcode_dev_exit() do { } while(0)
  #endif
  
- static long get_next_ucode_from_buffer(void **mc, void *buf,
+ static long get_next_ucode_from_buffer(void **mc, const u8 *buf,
        unsigned long size, long offset)
  {
        microcode_header_t *mc_header;
@@@ -523,7 -522,7 +523,7 @@@ static int cpu_request_microcode(int cp
        char name[30];
        struct cpuinfo_x86 *c = &cpu_data(cpu);
        const struct firmware *firmware;
-       void *buf;
+       const u8 *buf;
        unsigned long size;
        long offset = 0;
        int error;
                c->x86, c->x86_model, c->x86_mask);
        error = request_firmware(&firmware, name, &microcode_pdev->dev);
        if (error) {
 -              pr_debug("microcode: ucode data file %s load failed\n", name);
 +              pr_debug("microcode: data file %s load failed\n", name);
                return error;
        }
        buf = firmware->data;
@@@ -806,9 -805,6 +806,9 @@@ static int __init microcode_init (void
  {
        int error;
  
 +      printk(KERN_INFO
 +              "IA-32 Microcode Update Driver: v" MICROCODE_VERSION " <tigran@aivazian.fsnet.co.uk>\n");
 +
        error = microcode_dev_init();
        if (error)
                return error;
        }
  
        register_hotcpu_notifier(&mc_cpu_notifier);
 -
 -      printk(KERN_INFO 
 -              "IA-32 Microcode Update Driver: v" MICROCODE_VERSION " <tigran@aivazian.fsnet.co.uk>\n");
        return 0;
  }
  
@@@ -915,7 -915,7 +915,7 @@@ static char *rt61pci_get_firmware_name(
        return fw_name;
  }
  
- static u16 rt61pci_get_firmware_crc(void *data, const size_t len)
+ static u16 rt61pci_get_firmware_crc(const void *data, const size_t len)
  {
        u16 crc;
  
        return crc;
  }
  
- static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, void *data,
+ static int rt61pci_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data,
                                 const size_t len)
  {
        int i;
@@@ -1201,15 -1201,6 +1201,15 @@@ static int rt61pci_init_registers(struc
        rt2x00_set_field32(&reg, TXRX_CSR8_ACK_CTS_54MBS, 42);
        rt2x00pci_register_write(rt2x00dev, TXRX_CSR8, reg);
  
 +      rt2x00pci_register_read(rt2x00dev, TXRX_CSR9, &reg);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_INTERVAL, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TSF_TICKING, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TBTT_ENABLE, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_GEN, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TIMESTAMP_COMPENSATE, 0);
 +      rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, reg);
 +
        rt2x00pci_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f);
  
        rt2x00pci_register_write(rt2x00dev, MAC_CSR6, 0x00000fff);
@@@ -856,7 -856,7 +856,7 @@@ static char *rt73usb_get_firmware_name(
        return FIRMWARE_RT2571;
  }
  
- static u16 rt73usb_get_firmware_crc(void *data, const size_t len)
+ static u16 rt73usb_get_firmware_crc(const void *data, const size_t len)
  {
        u16 crc;
  
        return crc;
  }
  
- static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, void *data,
+ static int rt73usb_load_firmware(struct rt2x00_dev *rt2x00dev, const void *data,
                                 const size_t len)
  {
        unsigned int i;
        int status;
        u32 reg;
-       char *ptr = data;
+       const char *ptr = data;
        char *cache;
        int buflen;
        int timeout;
@@@ -1006,15 -1006,6 +1006,15 @@@ static int rt73usb_init_registers(struc
        rt2x00_set_field32(&reg, TXRX_CSR8_ACK_CTS_54MBS, 42);
        rt73usb_register_write(rt2x00dev, TXRX_CSR8, reg);
  
 +      rt73usb_register_read(rt2x00dev, TXRX_CSR9, &reg);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_INTERVAL, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TSF_TICKING, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TSF_SYNC, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TBTT_ENABLE, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_BEACON_GEN, 0);
 +      rt2x00_set_field32(&reg, TXRX_CSR9_TIMESTAMP_COMPENSATE, 0);
 +      rt73usb_register_write(rt2x00dev, TXRX_CSR9, reg);
 +
        rt73usb_register_write(rt2x00dev, TXRX_CSR15, 0x0000000f);
  
        rt73usb_register_read(rt2x00dev, MAC_CSR6, &reg);
                VMLINUX_SYMBOL(__end_pci_fixups_resume) = .;            \
        }                                                               \
                                                                        \
+       /* Built-in firmware blobs */                                   \
+       .builtin_fw        : AT(ADDR(.builtin_fw) - LOAD_OFFSET) {      \
+               VMLINUX_SYMBOL(__start_builtin_fw) = .;                 \
+               *(.builtin_fw)                                          \
+               VMLINUX_SYMBOL(__end_builtin_fw) = .;                   \
+       }                                                               \
+                                                                       \
        /* RapidIO route ops */                                         \
        .rio_route        : AT(ADDR(.rio_route) - LOAD_OFFSET) {        \
                VMLINUX_SYMBOL(__start_rio_route_ops) = .;              \
                VMLINUX_SYMBOL(__end_rio_route_ops) = .;                \
        }                                                               \
                                                                        \
 +      TRACEDATA                                                       \
 +                                                                      \
        /* Kernel symbol table: Normal symbols */                       \
        __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
                VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
                __stop___bug_table = .;                                 \
        }
  
 +#ifdef CONFIG_PM_TRACE
 +#define TRACEDATA                                                     \
 +      . = ALIGN(4);                                                   \
 +      .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {               \
 +              __tracedata_start = .;                                  \
 +              *(.tracedata)                                           \
 +              __tracedata_end = .;                                    \
 +      }
 +#else
 +#define TRACEDATA
 +#endif
 +
  #define NOTES                                                         \
        .notes : AT(ADDR(.notes) - LOAD_OFFSET) {                       \
                VMLINUX_SYMBOL(__start_notes) = .;                      \
diff --combined sound/isa/Kconfig
@@@ -21,17 -21,12 +21,17 @@@ config SND_SB16_DS
          select SND_PCM
          select SND_SB_COMMON
  
 -menu "ISA devices"
 -      depends on SND!=n && ISA && ISA_DMA_API
 +menuconfig SND_ISA
 +      bool "ISA sound devices"
 +      depends on ISA && ISA_DMA_API
 +      default y
 +      help
 +        Support for sound devices connected via the ISA bus.
 +
 +if SND_ISA
  
  config SND_ADLIB
        tristate "AdLib FM card"
 -      depends on SND
        select SND_OPL3_LIB
        help
          Say Y here to include support for AdLib FM cards.
@@@ -41,7 -36,7 +41,7 @@@
  
  config SND_AD1816A
        tristate "Analog Devices SoundPort AD1816A"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
@@@ -55,6 -50,7 +55,6 @@@
  
  config SND_AD1848
        tristate "Generic AD1848/CS4248 driver"
 -      depends on SND
        select SND_AD1848_LIB
        help
          Say Y here to include support for AD1848 (Analog Devices) or
@@@ -68,7 -64,7 +68,7 @@@
  
  config SND_ALS100
        tristate "Avance Logic ALS100/ALS120"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
@@@ -82,7 -78,7 +82,7 @@@
  
  config SND_AZT2320
        tristate "Aztech Systems AZT2320"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
@@@ -96,6 -92,7 +96,6 @@@
  
  config SND_CMI8330
        tristate "C-Media CMI8330"
 -      depends on SND
        select SND_AD1848_LIB
        select SND_SB16_DSP
        help
  
  config SND_CS4231
        tristate "Generic Cirrus Logic CS4231 driver"
 -      depends on SND
        select SND_MPU401_UART
        select SND_CS4231_LIB
        help
  
  config SND_CS4232
        tristate "Generic Cirrus Logic CS4232 driver"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_CS4231_LIB
  
  config SND_CS4236
        tristate "Generic Cirrus Logic CS4236+ driver"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_CS4231_LIB
  
  config SND_DT019X
        tristate "Diamond Technologies DT-019X, Avance Logic ALS-007"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select ISAPNP
        select SND_OPL3_LIB
        select SND_MPU401_UART
  
  config SND_ES968
        tristate "Generic ESS ES968 driver"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select ISAPNP
        select SND_MPU401_UART
        select SND_SB8_DSP
  
  config SND_ES1688
        tristate "Generic ESS ES688/ES1688 driver"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
  
  config SND_ES18XX
        tristate "Generic ESS ES18xx driver"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
  
  config SND_SC6000
        tristate "Gallant SC-6000, Audio Excel DSP 16"
 -      depends on SND && HAS_IOPORT
 +      depends on HAS_IOPORT
        select SND_AD1848_LIB
        select SND_OPL3_LIB
        select SND_MPU401_UART
          To compile this driver as a module, choose M here: the module
          will be called snd-sc6000.
  
 -config SND_GUS_SYNTH
 -      tristate
 -
  config SND_GUSCLASSIC
        tristate "Gravis UltraSound Classic"
 -      depends on SND
        select SND_RAWMIDI
        select SND_PCM
 -      select SND_GUS_SYNTH
        help
          Say Y here to include support for Gravis UltraSound Classic
          soundcards.
  
  config SND_GUSEXTREME
        tristate "Gravis UltraSound Extreme"
 -      depends on SND
        select SND_HWDEP
        select SND_MPU401_UART
        select SND_PCM
 -      select SND_GUS_SYNTH
        help
          Say Y here to include support for Gravis UltraSound Extreme
          soundcards.
  
  config SND_GUSMAX
        tristate "Gravis UltraSound MAX"
 -      depends on SND
        select SND_RAWMIDI
        select SND_CS4231_LIB
 -      select SND_GUS_SYNTH
        help
          Say Y here to include support for Gravis UltraSound MAX
          soundcards.
  
  config SND_INTERWAVE
        tristate "AMD InterWave, Gravis UltraSound PnP"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select SND_RAWMIDI
        select SND_CS4231_LIB
 -      select SND_GUS_SYNTH
        help
          Say Y here to include support for AMD InterWave based
          soundcards (Gravis UltraSound Plug & Play, STB SoundRage32,
  
  config SND_INTERWAVE_STB
        tristate "AMD InterWave + TEA6330T (UltraSound 32-Pro)"
 -      depends on SND && PNP && ISA
 +      depends on PNP
        select SND_RAWMIDI
        select SND_CS4231_LIB
 -      select SND_GUS_SYNTH
        help
          Say Y here to include support for AMD InterWave based
          soundcards with a TEA6330T bass and treble regulator
  
  config SND_OPL3SA2
        tristate "Yamaha OPL3-SA2/SA3"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_CS4231_LIB
  
  config SND_OPTI92X_AD1848
        tristate "OPTi 82C92x - AD1848"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_OPL4_LIB
        select SND_MPU401_UART
  
  config SND_OPTI92X_CS4231
        tristate "OPTi 82C92x - CS4231"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_OPL4_LIB
        select SND_MPU401_UART
  
  config SND_OPTI93X
        tristate "OPTi 82C93x"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
 -      select SND_PCM
 +      select SND_CS4231_LIB
        help
          Say Y here to include support for soundcards based on Opti
          82C93x chips.
  
  config SND_MIRO
        tristate "Miro miroSOUND PCM1pro/PCM12/PCM20radio driver"
 -      depends on SND
        select SND_OPL4_LIB
        select SND_CS4231_LIB
        select SND_MPU401_UART
  
  config SND_SB8
        tristate "Sound Blaster 1.0/2.0/Pro (8-bit)"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_RAWMIDI
        select SND_SB8_DSP
  
  config SND_SB16
        tristate "Sound Blaster 16 (PnP)"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_SB16_DSP
  
  config SND_SBAWE
        tristate "Sound Blaster AWE (32,64) (PnP)"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_SB16_DSP
@@@ -370,17 -391,9 +370,8 @@@ config SND_SB16_CS
          coprocessor can do variable tasks like various compression and
          decompression algorithms.
  
- config SND_SB16_CSP_FIRMWARE_IN_KERNEL
-       bool "In-kernel firmware for SB16 CSP"
-       depends on SND_SB16_CSP
-       default y
-       help
-         Say Y here to include the static firmware built in the kernel
-         for the SB16 CSP controller.  If you choose N here, you need
-         to install the firmware files from the alsa-firmware package.
  config SND_SGALAXY
        tristate "Aztech Sound Galaxy"
 -      depends on SND
        select SND_AD1848_LIB
        help
          Say Y here to include support for Aztech Sound Galaxy
  
  config SND_SSCAPE
        tristate "Ensoniq SoundScape PnP driver"
 -      depends on SND
        select SND_HWDEP
        select SND_MPU401_UART
        select SND_CS4231_LIB
  
  config SND_WAVEFRONT
        tristate "Turtle Beach Maui,Tropez,Tropez+ (Wavefront)"
 -      depends on SND
        select FW_LOADER
        select SND_OPL3_LIB
        select SND_MPU401_UART
@@@ -424,5 -439,4 +415,5 @@@ config SND_WAVEFRONT_FIRMWARE_IN_KERNE
          you need to install the firmware files from the
          alsa-firmware package.
  
 -endmenu
 +endif # SND_ISA
 +
diff --combined sound/pci/Kconfig
@@@ -1,16 -1,11 +1,16 @@@
  # ALSA PCI drivers
  
 -menu "PCI devices"
 -      depends on SND!=n && PCI
 +menuconfig SND_PCI
 +      bool "PCI sound devices"
 +      depends on PCI
 +      default y
 +      help
 +        Support for sound devices connected via the PCI bus.
 +
 +if SND_PCI
  
  config SND_AD1889
        tristate "Analog Devices AD1889"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for the integrated AC97 sound
@@@ -22,6 -17,7 +22,6 @@@
  
  config SND_ALS300
        tristate "Avance Logic ALS300/ALS300+"
 -      depends on SND
        select SND_PCM
        select SND_AC97_CODEC
        select SND_OPL3_LIB
@@@ -33,7 -29,7 +33,7 @@@
  
  config SND_ALS4000
        tristate "Avance Logic ALS4000"
 -      depends on SND && ISA_DMA_API
 +      depends on ISA_DMA_API
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
@@@ -47,6 -43,7 +47,6 @@@
  
  config SND_ALI5451
        tristate "ALi M5451 PCI Audio Controller"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
@@@ -60,6 -57,7 +60,6 @@@
  
  config SND_ATIIXP
        tristate "ATI IXP AC97 Controller"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for the integrated AC97 sound
@@@ -71,6 -69,7 +71,6 @@@
  
  config SND_ATIIXP_MODEM
        tristate "ATI IXP Modem"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for the integrated MC97 modem on
@@@ -81,6 -80,7 +81,6 @@@
  
  config SND_AU8810
        tristate "Aureal Advantage"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
@@@ -95,6 -95,7 +95,6 @@@
  
  config SND_AU8820
        tristate "Aureal Vortex"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
  
  config SND_AU8830
        tristate "Aureal Vortex 2"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
  
  config SND_AW2
        tristate "Emagic Audiowerk 2"
 -      depends on SND
        help
          Say Y here to include support for Emagic Audiowerk 2 soundcards.
  
  
  config SND_AZT3328
        tristate "Aztech AZF3328 / PCI168 (EXPERIMENTAL)"
 -      depends on SND && EXPERIMENTAL
 +      depends on EXPERIMENTAL
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
  
  config SND_BT87X
        tristate "Bt87x Audio Capture"
 -      depends on SND
        select SND_PCM
        help
          If you want to record audio from TV cards based on
@@@ -170,6 -174,7 +170,6 @@@ config SND_BT87X_OVERCLOC
  
  config SND_CA0106
        tristate "SB Audigy LS / Live 24bit"
 -      depends on SND
        select SND_AC97_CODEC
        select SND_RAWMIDI
        select SND_VMASTER
  
  config SND_CMIPCI
        tristate "C-Media 8338, 8738, 8768, 8770"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_PCM
  
  config SND_OXYGEN_LIB
          tristate
 -      depends on SND
        select SND_PCM
        select SND_MPU401_UART
  
  config SND_OXYGEN
        tristate "C-Media 8788 (Oxygen)"
 -      depends on SND
        select SND_OXYGEN_LIB
        help
          Say Y here to include support for sound cards based on the
  
  config SND_CS4281
        tristate "Cirrus Logic (Sound Fusion) CS4281"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_RAWMIDI
        select SND_AC97_CODEC
  
  config SND_CS46XX
        tristate "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x"
 -      depends on SND
        select SND_RAWMIDI
        select SND_AC97_CODEC
        help
@@@ -248,7 -258,7 +248,7 @@@ config SND_CS46XX_NEW_DS
  
  config SND_CS5530
        tristate "CS5530 Audio"
 -      depends on SND && ISA_DMA_API
 +      depends on ISA_DMA_API
        select SND_SB16_DSP
        help
          Say Y here to include support for audio on Cyrix/NatSemi CS5530 chips.
  
  config SND_CS5535AUDIO
        tristate "CS5535/CS5536 Audio"
 -      depends on SND && X86 && !X86_64
 +      depends on X86 && !X86_64
        select SND_PCM
        select SND_AC97_CODEC
        help
  
  config SND_DARLA20
        tristate "(Echoaudio) Darla20"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_GINA20
        tristate "(Echoaudio) Gina20"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_LAYLA20
        tristate "(Echoaudio) Layla20"
 -      depends on SND
        select FW_LOADER
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_DARLA24
        tristate "(Echoaudio) Darla24"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_GINA24
        tristate "(Echoaudio) Gina24"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_LAYLA24
        tristate "(Echoaudio) Layla24"
 -      depends on SND
        select FW_LOADER
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_MONA
        tristate "(Echoaudio) Mona"
 -      depends on SND
        select FW_LOADER
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_MIA
        tristate "(Echoaudio) Mia"
 -      depends on SND
        select FW_LOADER
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_ECHO3G
        tristate "(Echoaudio) 3G cards"
 -      depends on SND
        select FW_LOADER
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_INDIGO
        tristate "(Echoaudio) Indigo"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_INDIGOIO
        tristate "(Echoaudio) Indigo IO"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_INDIGODJ
        tristate "(Echoaudio) Indigo DJ"
 -      depends on SND
        select FW_LOADER
        select SND_PCM
        help
  
  config SND_EMU10K1
        tristate "Emu10k1 (SB Live!, Audigy, E-mu APS)"
 -      depends on SND
        select FW_LOADER
        select SND_HWDEP
        select SND_RAWMIDI
  
  config SND_EMU10K1X
        tristate "Emu10k1X (Dell OEM Version)"
 -      depends on SND
        select SND_AC97_CODEC
        select SND_RAWMIDI
        help
  
  config SND_ENS1370
        tristate "(Creative) Ensoniq AudioPCI 1370"
 -      depends on SND
        select SND_RAWMIDI
        select SND_PCM
        help
  
  config SND_ENS1371
        tristate "(Creative) Ensoniq AudioPCI 1371/1373"
 -      depends on SND
        select SND_RAWMIDI
        select SND_AC97_CODEC
        help
  
  config SND_ES1938
        tristate "ESS ES1938/1946/1969 (Solo-1)"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_AC97_CODEC
  
  config SND_ES1968
        tristate "ESS ES1968/1978 (Maestro-1/2/2E)"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
  
  config SND_FM801
        tristate "ForteMedia FM801"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_AC97_CODEC
@@@ -499,6 -528,7 +499,6 @@@ config SND_FM801_TEA575
  
  config SND_HDA_INTEL
        tristate "Intel HD Audio"
 -      depends on SND
        select SND_PCM
        select SND_VMASTER
        help
@@@ -607,6 -637,7 +607,6 @@@ config SND_HDA_POWER_SAVE_DEFAUL
  
  config SND_HDSP
        tristate "RME Hammerfall DSP Audio"
 -      depends on SND
        select SND_HWDEP
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_HDSPM
        tristate "RME Hammerfall DSP MADI"
 -      depends on SND
        select SND_HWDEP
        select SND_RAWMIDI
        select SND_PCM
  
  config SND_HIFIER
        tristate "TempoTec HiFier Fantasia"
 -      depends on SND
        select SND_OXYGEN_LIB
        help
          Say Y here to include support for the MediaTek/TempoTec HiFier
  
  config SND_ICE1712
        tristate "ICEnsemble ICE1712 (Envy24)"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
  
  config SND_ICE1724
        tristate "ICE/VT1724/1720 (Envy24HT/PT)"
 -      depends on SND
 -      select SND_MPU401_UART
 +      select SND_RAWMIDI
        select SND_AC97_CODEC
        select SND_VMASTER
        help
  
  config SND_INTEL8X0
        tristate "Intel/SiS/nVidia/AMD/ALi AC97 Controller"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for the integrated AC97 sound
  
  config SND_INTEL8X0M
        tristate "Intel/SiS/nVidia/AMD MC97 Modem"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for the integrated MC97 modem on
  
  config SND_KORG1212
        tristate "Korg 1212 IO"
-       select FW_LOADER if !SND_KORG1212_FIRMWARE_IN_KERNEL
 -      depends on SND
        select SND_PCM
        help
          Say Y here to include support for Korg 1212IO soundcards.
          To compile this driver as a module, choose M here: the module
          will be called snd-korg1212.
  
- config SND_KORG1212_FIRMWARE_IN_KERNEL
-       bool "In-kernel firmware for Korg1212 driver"
-       depends on SND_KORG1212
-       default y
-       help
-         Say Y here to include the static firmware built in the kernel
-         for the Korg1212 driver.  If you choose N here, you need to
-         install the firmware files from the alsa-firmware package.
  config SND_MAESTRO3
        tristate "ESS Allegro/Maestro3"
-       select FW_LOADER if !SND_MAESTRO3_FIRMWARE_IN_KERNEL
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for soundcards based on ESS Maestro 3
          To compile this driver as a module, choose M here: the module
          will be called snd-maestro3.
  
- config SND_MAESTRO3_FIRMWARE_IN_KERNEL
-       bool "In-kernel firmware for Maestro3 driver"
-       depends on SND_MAESTRO3
-       default y
-       help
-         Say Y here to include the static firmware built in the kernel
-         for the Maestro3 driver.  If you choose N here, you need to
-         install the firmware files from the alsa-firmware package.
  config SND_MIXART
        tristate "Digigram miXart"
 -      depends on SND
        select SND_HWDEP
        select SND_PCM
        help
  
  config SND_NM256
        tristate "NeoMagic NM256AV/ZX"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for NeoMagic NM256AV/ZX chips.
  
  config SND_PCXHR
        tristate "Digigram PCXHR"
 -      depends on SND
        select SND_PCM
        select SND_HWDEP
        help
  
  config SND_RIPTIDE
        tristate "Conexant Riptide"
 -      depends on SND
        select FW_LOADER
        select SND_OPL3_LIB
        select SND_MPU401_UART
  
  config SND_RME32
        tristate "RME Digi32, 32/8, 32 PRO"
 -      depends on SND
        select SND_PCM
        help
          Say Y to include support for RME Digi32, Digi32 PRO and
  
  config SND_RME96
        tristate "RME Digi96, 96/8, 96/8 PRO"
 -      depends on SND
        select SND_PCM
        help
          Say Y here to include support for RME Digi96, Digi96/8 and
  
  config SND_RME9652
        tristate "RME Digi9652 (Hammerfall)"
 -      depends on SND
        select SND_PCM
        help
          Say Y here to include support for RME Hammerfall (RME
  
  config SND_SIS7019
        tristate "SiS 7019 Audio Accelerator"
 -      depends on SND && X86 && !X86_64
 +      depends on X86 && !X86_64
        select SND_AC97_CODEC
        help
          Say Y here to include support for the SiS 7019 Audio Accelerator.
  
  config SND_SONICVIBES
        tristate "S3 SonicVibes"
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_AC97_CODEC
  
  config SND_TRIDENT
        tristate "Trident 4D-Wave DX/NX; SiS 7018"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
  
  config SND_VIA82XX
        tristate "VIA 82C686A/B, 8233/8235 AC97 Controller"
 -      depends on SND
        select SND_MPU401_UART
        select SND_AC97_CODEC
        help
  
  config SND_VIA82XX_MODEM
        tristate "VIA 82C686A/B, 8233 based Modems"
 -      depends on SND
        select SND_AC97_CODEC
        help
          Say Y here to include support for the integrated MC97 modem on
  
  config SND_VIRTUOSO
        tristate "Asus Virtuoso 100/200 (Xonar)"
 -      depends on SND
        select SND_OXYGEN_LIB
        help
          Say Y here to include support for sound cards based on the
  
  config SND_VX222
        tristate "Digigram VX222"
 -      depends on SND
        select SND_VX_LIB
        help
          Say Y here to include support for Digigram VX222 soundcards.
  
  config SND_YMFPCI
        tristate "Yamaha YMF724/740/744/754"
-       select FW_LOADER if !SND_YMFPCI_FIRMWARE_IN_KERNEL
 -      depends on SND
        select SND_OPL3_LIB
        select SND_MPU401_UART
        select SND_AC97_CODEC
          To compile this driver as a module, choose M here: the module
          will be called snd-ymfpci.
  
- config SND_YMFPCI_FIRMWARE_IN_KERNEL
-       bool "In-kernel firmware for YMFPCI driver"
-       depends on SND_YMFPCI
-       default y
 -config SND_AC97_POWER_SAVE
 -      bool "AC97 Power-Saving Mode"
 -      depends on SND_AC97_CODEC && EXPERIMENTAL
 -      default n
--      help
-         Say Y here to include the static firmware built in the kernel
-         for the YMFPCI driver.  If you choose N here, you need to
-         install the firmware files from the alsa-firmware package.
 -        Say Y here to enable the aggressive power-saving support of
 -        AC97 codecs.  In this mode, the power-mode is dynamically
 -        controlled at each open/close.
 -
 -        The mode is activated by passing power_save=1 option to
 -        snd-ac97-codec driver.  You can toggle it dynamically over
 -        sysfs, too.
 -
 -config SND_AC97_POWER_SAVE_DEFAULT
 -      int "Default time-out for AC97 power-save mode"
 -      depends on SND_AC97_POWER_SAVE
 -      default 0
 -      help
 -        The default time-out value in seconds for AC97 automatic
 -        power-save mode.  0 means to disable the power-save mode.
--
 -endmenu
 +endif # SND_PCI
diff --combined sound/pci/maestro3.c
@@@ -58,10 -58,8 +58,8 @@@ MODULE_SUPPORTED_DEVICE("{{ESS,Maestro
                "{ESS,Allegro PCI},"
                "{ESS,Allegro-1 PCI},"
                "{ESS,Canyon3D-2/LE PCI}}");
- #ifndef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
  MODULE_FIRMWARE("ess/maestro3_assp_kernel.fw");
  MODULE_FIRMWARE("ess/maestro3_assp_minisrc.fw");
- #endif
  
  static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;    /* Index 0-MAX */
  static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;     /* ID for this card */
@@@ -2101,163 -2099,6 +2099,6 @@@ static int __devinit snd_m3_mixer(struc
  }
  
  
- #ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
- /*
-  * DSP Code images
-  */
- static const u16 assp_kernel_image[] = {
-     0x7980, 0x0030, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x00FB, 0x7980, 0x00DD, 0x7980, 0x03B4, 
-     0x7980, 0x0332, 0x7980, 0x0287, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4, 
-     0x7980, 0x031A, 0x7980, 0x03B4, 0x7980, 0x022F, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4, 
-     0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x0063, 0x7980, 0x006B, 0x7980, 0x03B4, 0x7980, 0x03B4, 
-     0xBF80, 0x2C7C, 0x8806, 0x8804, 0xBE40, 0xBC20, 0xAE09, 0x1000, 0xAE0A, 0x0001, 0x6938, 0xEB08, 
-     0x0053, 0x695A, 0xEB08, 0x00D6, 0x0009, 0x8B88, 0x6980, 0xE388, 0x0036, 0xBE30, 0xBC20, 0x6909, 
-     0xB801, 0x9009, 0xBE41, 0xBE41, 0x6928, 0xEB88, 0x0078, 0xBE41, 0xBE40, 0x7980, 0x0038, 0xBE41, 
-     0xBE41, 0x903A, 0x6938, 0xE308, 0x0056, 0x903A, 0xBE41, 0xBE40, 0xEF00, 0x903A, 0x6939, 0xE308, 
-     0x005E, 0x903A, 0xEF00, 0x690B, 0x660C, 0xEF8C, 0x690A, 0x660C, 0x620B, 0x6609, 0xEF00, 0x6910, 
-     0x660F, 0xEF04, 0xE388, 0x0075, 0x690E, 0x660F, 0x6210, 0x660D, 0xEF00, 0x690E, 0x660D, 0xEF00, 
-     0xAE70, 0x0001, 0xBC20, 0xAE27, 0x0001, 0x6939, 0xEB08, 0x005D, 0x6926, 0xB801, 0x9026, 0x0026, 
-     0x8B88, 0x6980, 0xE388, 0x00CB, 0x9028, 0x0D28, 0x4211, 0xE100, 0x007A, 0x4711, 0xE100, 0x00A0, 
-     0x7A80, 0x0063, 0xB811, 0x660A, 0x6209, 0xE304, 0x007A, 0x0C0B, 0x4005, 0x100A, 0xBA01, 0x9012, 
-     0x0C12, 0x4002, 0x7980, 0x00AF, 0x7A80, 0x006B, 0xBE02, 0x620E, 0x660D, 0xBA10, 0xE344, 0x007A, 
-     0x0C10, 0x4005, 0x100E, 0xBA01, 0x9012, 0x0C12, 0x4002, 0x1003, 0xBA02, 0x9012, 0x0C12, 0x4000, 
-     0x1003, 0xE388, 0x00BA, 0x1004, 0x7980, 0x00BC, 0x1004, 0xBA01, 0x9012, 0x0C12, 0x4001, 0x0C05, 
-     0x4003, 0x0C06, 0x4004, 0x1011, 0xBFB0, 0x01FF, 0x9012, 0x0C12, 0x4006, 0xBC20, 0xEF00, 0xAE26, 
-     0x1028, 0x6970, 0xBFD0, 0x0001, 0x9070, 0xE388, 0x007A, 0xAE28, 0x0000, 0xEF00, 0xAE70, 0x0300, 
-     0x0C70, 0xB00C, 0xAE5A, 0x0000, 0xEF00, 0x7A80, 0x038A, 0x697F, 0xB801, 0x907F, 0x0056, 0x8B88, 
-     0x0CA0, 0xB008, 0xAF71, 0xB000, 0x4E71, 0xE200, 0x00F3, 0xAE56, 0x1057, 0x0056, 0x0CA0, 0xB008, 
-     0x8056, 0x7980, 0x03A1, 0x0810, 0xBFA0, 0x1059, 0xE304, 0x03A1, 0x8056, 0x7980, 0x03A1, 0x7A80, 
-     0x038A, 0xBF01, 0xBE43, 0xBE59, 0x907C, 0x6937, 0xE388, 0x010D, 0xBA01, 0xE308, 0x010C, 0xAE71, 
-     0x0004, 0x0C71, 0x5000, 0x6936, 0x9037, 0xBF0A, 0x109E, 0x8B8A, 0xAF80, 0x8014, 0x4C80, 0xBF0A, 
-     0x0560, 0xF500, 0xBF0A, 0x0520, 0xB900, 0xBB17, 0x90A0, 0x6917, 0xE388, 0x0148, 0x0D17, 0xE100, 
-     0x0127, 0xBF0C, 0x0578, 0xBF0D, 0x057C, 0x7980, 0x012B, 0xBF0C, 0x0538, 0xBF0D, 0x053C, 0x6900, 
-     0xE308, 0x0135, 0x8B8C, 0xBE59, 0xBB07, 0x90A0, 0xBC20, 0x7980, 0x0157, 0x030C, 0x8B8B, 0xB903, 
-     0x8809, 0xBEC6, 0x013E, 0x69AC, 0x90AB, 0x69AD, 0x90AB, 0x0813, 0x660A, 0xE344, 0x0144, 0x0309, 
-     0x830C, 0xBC20, 0x7980, 0x0157, 0x6955, 0xE388, 0x0157, 0x7C38, 0xBF0B, 0x0578, 0xF500, 0xBF0B, 
-     0x0538, 0xB907, 0x8809, 0xBEC6, 0x0156, 0x10AB, 0x90AA, 0x6974, 0xE388, 0x0163, 0xAE72, 0x0540, 
-     0xF500, 0xAE72, 0x0500, 0xAE61, 0x103B, 0x7A80, 0x02F6, 0x6978, 0xE388, 0x0182, 0x8B8C, 0xBF0C, 
-     0x0560, 0xE500, 0x7C40, 0x0814, 0xBA20, 0x8812, 0x733D, 0x7A80, 0x0380, 0x733E, 0x7A80, 0x0380, 
-     0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 0x0814, 0xBA2C, 0x8812, 0x733F, 0x7A80, 0x0380, 0x7340, 
-     0x7A80, 0x0380, 0x6975, 0xE388, 0x018E, 0xAE72, 0x0548, 0xF500, 0xAE72, 0x0508, 0xAE61, 0x1041, 
-     0x7A80, 0x02F6, 0x6979, 0xE388, 0x01AD, 0x8B8C, 0xBF0C, 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA18, 
-     0x8812, 0x7343, 0x7A80, 0x0380, 0x7344, 0x7A80, 0x0380, 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 
-     0x0814, 0xBA24, 0x8812, 0x7345, 0x7A80, 0x0380, 0x7346, 0x7A80, 0x0380, 0x6976, 0xE388, 0x01B9, 
-     0xAE72, 0x0558, 0xF500, 0xAE72, 0x0518, 0xAE61, 0x1047, 0x7A80, 0x02F6, 0x697A, 0xE388, 0x01D8, 
-     0x8B8C, 0xBF0C, 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA08, 0x8812, 0x7349, 0x7A80, 0x0380, 0x734A, 
-     0x7A80, 0x0380, 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 0x0814, 0xBA14, 0x8812, 0x734B, 0x7A80, 
-     0x0380, 0x734C, 0x7A80, 0x0380, 0xBC21, 0xAE1C, 0x1090, 0x8B8A, 0xBF0A, 0x0560, 0xE500, 0x7C40, 
-     0x0812, 0xB804, 0x8813, 0x8B8D, 0xBF0D, 0x056C, 0xE500, 0x7C40, 0x0815, 0xB804, 0x8811, 0x7A80, 
-     0x034A, 0x8B8A, 0xBF0A, 0x0560, 0xE500, 0x7C40, 0x731F, 0xB903, 0x8809, 0xBEC6, 0x01F9, 0x548A, 
-     0xBE03, 0x98A0, 0x7320, 0xB903, 0x8809, 0xBEC6, 0x0201, 0x548A, 0xBE03, 0x98A0, 0x1F20, 0x2F1F, 
-     0x9826, 0xBC20, 0x6935, 0xE388, 0x03A1, 0x6933, 0xB801, 0x9033, 0xBFA0, 0x02EE, 0xE308, 0x03A1, 
-     0x9033, 0xBF00, 0x6951, 0xE388, 0x021F, 0x7334, 0xBE80, 0x5760, 0xBE03, 0x9F7E, 0xBE59, 0x9034, 
-     0x697E, 0x0D51, 0x9013, 0xBC20, 0x695C, 0xE388, 0x03A1, 0x735E, 0xBE80, 0x5760, 0xBE03, 0x9F7E, 
-     0xBE59, 0x905E, 0x697E, 0x0D5C, 0x9013, 0x7980, 0x03A1, 0x7A80, 0x038A, 0xBF01, 0xBE43, 0x6977, 
-     0xE388, 0x024E, 0xAE61, 0x104D, 0x0061, 0x8B88, 0x6980, 0xE388, 0x024E, 0x9071, 0x0D71, 0x000B, 
-     0xAFA0, 0x8010, 0xAFA0, 0x8010, 0x0810, 0x660A, 0xE308, 0x0249, 0x0009, 0x0810, 0x660C, 0xE388, 
-     0x024E, 0x800B, 0xBC20, 0x697B, 0xE388, 0x03A1, 0xBF0A, 0x109E, 0x8B8A, 0xAF80, 0x8014, 0x4C80, 
-     0xE100, 0x0266, 0x697C, 0xBF90, 0x0560, 0x9072, 0x0372, 0x697C, 0xBF90, 0x0564, 0x9073, 0x0473, 
-     0x7980, 0x0270, 0x697C, 0xBF90, 0x0520, 0x9072, 0x0372, 0x697C, 0xBF90, 0x0524, 0x9073, 0x0473, 
-     0x697C, 0xB801, 0x907C, 0xBF0A, 0x10FD, 0x8B8A, 0xAF80, 0x8010, 0x734F, 0x548A, 0xBE03, 0x9880, 
-     0xBC21, 0x7326, 0x548B, 0xBE03, 0x618B, 0x988C, 0xBE03, 0x6180, 0x9880, 0x7980, 0x03A1, 0x7A80, 
-     0x038A, 0x0D28, 0x4711, 0xE100, 0x02BE, 0xAF12, 0x4006, 0x6912, 0xBFB0, 0x0C00, 0xE388, 0x02B6, 
-     0xBFA0, 0x0800, 0xE388, 0x02B2, 0x6912, 0xBFB0, 0x0C00, 0xBFA0, 0x0400, 0xE388, 0x02A3, 0x6909, 
-     0x900B, 0x7980, 0x02A5, 0xAF0B, 0x4005, 0x6901, 0x9005, 0x6902, 0x9006, 0x4311, 0xE100, 0x02ED, 
-     0x6911, 0xBFC0, 0x2000, 0x9011, 0x7980, 0x02ED, 0x6909, 0x900B, 0x7980, 0x02B8, 0xAF0B, 0x4005, 
-     0xAF05, 0x4003, 0xAF06, 0x4004, 0x7980, 0x02ED, 0xAF12, 0x4006, 0x6912, 0xBFB0, 0x0C00, 0xE388, 
-     0x02E7, 0xBFA0, 0x0800, 0xE388, 0x02E3, 0x6912, 0xBFB0, 0x0C00, 0xBFA0, 0x0400, 0xE388, 0x02D4, 
-     0x690D, 0x9010, 0x7980, 0x02D6, 0xAF10, 0x4005, 0x6901, 0x9005, 0x6902, 0x9006, 0x4311, 0xE100, 
-     0x02ED, 0x6911, 0xBFC0, 0x2000, 0x9011, 0x7980, 0x02ED, 0x690D, 0x9010, 0x7980, 0x02E9, 0xAF10, 
-     0x4005, 0xAF05, 0x4003, 0xAF06, 0x4004, 0xBC20, 0x6970, 0x9071, 0x7A80, 0x0078, 0x6971, 0x9070, 
-     0x7980, 0x03A1, 0xBC20, 0x0361, 0x8B8B, 0x6980, 0xEF88, 0x0272, 0x0372, 0x7804, 0x9071, 0x0D71, 
-     0x8B8A, 0x000B, 0xB903, 0x8809, 0xBEC6, 0x0309, 0x69A8, 0x90AB, 0x69A8, 0x90AA, 0x0810, 0x660A, 
-     0xE344, 0x030F, 0x0009, 0x0810, 0x660C, 0xE388, 0x0314, 0x800B, 0xBC20, 0x6961, 0xB801, 0x9061, 
-     0x7980, 0x02F7, 0x7A80, 0x038A, 0x5D35, 0x0001, 0x6934, 0xB801, 0x9034, 0xBF0A, 0x109E, 0x8B8A, 
-     0xAF80, 0x8014, 0x4880, 0xAE72, 0x0550, 0xF500, 0xAE72, 0x0510, 0xAE61, 0x1051, 0x7A80, 0x02F6, 
-     0x7980, 0x03A1, 0x7A80, 0x038A, 0x5D35, 0x0002, 0x695E, 0xB801, 0x905E, 0xBF0A, 0x109E, 0x8B8A, 
-     0xAF80, 0x8014, 0x4780, 0xAE72, 0x0558, 0xF500, 0xAE72, 0x0518, 0xAE61, 0x105C, 0x7A80, 0x02F6, 
-     0x7980, 0x03A1, 0x001C, 0x8B88, 0x6980, 0xEF88, 0x901D, 0x0D1D, 0x100F, 0x6610, 0xE38C, 0x0358, 
-     0x690E, 0x6610, 0x620F, 0x660D, 0xBA0F, 0xE301, 0x037A, 0x0410, 0x8B8A, 0xB903, 0x8809, 0xBEC6, 
-     0x036C, 0x6A8C, 0x61AA, 0x98AB, 0x6A8C, 0x61AB, 0x98AD, 0x6A8C, 0x61AD, 0x98A9, 0x6A8C, 0x61A9, 
-     0x98AA, 0x7C04, 0x8B8B, 0x7C04, 0x8B8D, 0x7C04, 0x8B89, 0x7C04, 0x0814, 0x660E, 0xE308, 0x0379, 
-     0x040D, 0x8410, 0xBC21, 0x691C, 0xB801, 0x901C, 0x7980, 0x034A, 0xB903, 0x8809, 0x8B8A, 0xBEC6, 
-     0x0388, 0x54AC, 0xBE03, 0x618C, 0x98AA, 0xEF00, 0xBC20, 0xBE46, 0x0809, 0x906B, 0x080A, 0x906C, 
-     0x080B, 0x906D, 0x081A, 0x9062, 0x081B, 0x9063, 0x081E, 0x9064, 0xBE59, 0x881E, 0x8065, 0x8166, 
-     0x8267, 0x8368, 0x8469, 0x856A, 0xEF00, 0xBC20, 0x696B, 0x8809, 0x696C, 0x880A, 0x696D, 0x880B, 
-     0x6962, 0x881A, 0x6963, 0x881B, 0x6964, 0x881E, 0x0065, 0x0166, 0x0267, 0x0368, 0x0469, 0x056A, 
-     0xBE3A, 
- };
- /*
-  * Mini sample rate converter code image
-  * that is to be loaded at 0x400 on the DSP.
-  */
- static const u16 assp_minisrc_image[] = {
-     0xBF80, 0x101E, 0x906E, 0x006E, 0x8B88, 0x6980, 0xEF88, 0x906F, 0x0D6F, 0x6900, 0xEB08, 0x0412, 
-     0xBC20, 0x696E, 0xB801, 0x906E, 0x7980, 0x0403, 0xB90E, 0x8807, 0xBE43, 0xBF01, 0xBE47, 0xBE41, 
-     0x7A80, 0x002A, 0xBE40, 0x3029, 0xEFCC, 0xBE41, 0x7A80, 0x0028, 0xBE40, 0x3028, 0xEFCC, 0x6907, 
-     0xE308, 0x042A, 0x6909, 0x902C, 0x7980, 0x042C, 0x690D, 0x902C, 0x1009, 0x881A, 0x100A, 0xBA01, 
-     0x881B, 0x100D, 0x881C, 0x100E, 0xBA01, 0x881D, 0xBF80, 0x00ED, 0x881E, 0x050C, 0x0124, 0xB904, 
-     0x9027, 0x6918, 0xE308, 0x04B3, 0x902D, 0x6913, 0xBFA0, 0x7598, 0xF704, 0xAE2D, 0x00FF, 0x8B8D, 
-     0x6919, 0xE308, 0x0463, 0x691A, 0xE308, 0x0456, 0xB907, 0x8809, 0xBEC6, 0x0453, 0x10A9, 0x90AD, 
-     0x7980, 0x047C, 0xB903, 0x8809, 0xBEC6, 0x0460, 0x1889, 0x6C22, 0x90AD, 0x10A9, 0x6E23, 0x6C22, 
-     0x90AD, 0x7980, 0x047C, 0x101A, 0xE308, 0x046F, 0xB903, 0x8809, 0xBEC6, 0x046C, 0x10A9, 0x90A0, 
-     0x90AD, 0x7980, 0x047C, 0xB901, 0x8809, 0xBEC6, 0x047B, 0x1889, 0x6C22, 0x90A0, 0x90AD, 0x10A9, 
-     0x6E23, 0x6C22, 0x90A0, 0x90AD, 0x692D, 0xE308, 0x049C, 0x0124, 0xB703, 0xB902, 0x8818, 0x8B89, 
-     0x022C, 0x108A, 0x7C04, 0x90A0, 0x692B, 0x881F, 0x7E80, 0x055B, 0x692A, 0x8809, 0x8B89, 0x99A0, 
-     0x108A, 0x90A0, 0x692B, 0x881F, 0x7E80, 0x055B, 0x692A, 0x8809, 0x8B89, 0x99AF, 0x7B99, 0x0484, 
-     0x0124, 0x060F, 0x101B, 0x2013, 0x901B, 0xBFA0, 0x7FFF, 0xE344, 0x04AC, 0x901B, 0x8B89, 0x7A80, 
-     0x051A, 0x6927, 0xBA01, 0x9027, 0x7A80, 0x0523, 0x6927, 0xE308, 0x049E, 0x7980, 0x050F, 0x0624, 
-     0x1026, 0x2013, 0x9026, 0xBFA0, 0x7FFF, 0xE304, 0x04C0, 0x8B8D, 0x7A80, 0x051A, 0x7980, 0x04B4, 
-     0x9026, 0x1013, 0x3026, 0x901B, 0x8B8D, 0x7A80, 0x051A, 0x7A80, 0x0523, 0x1027, 0xBA01, 0x9027, 
-     0xE308, 0x04B4, 0x0124, 0x060F, 0x8B89, 0x691A, 0xE308, 0x04EA, 0x6919, 0xE388, 0x04E0, 0xB903, 
-     0x8809, 0xBEC6, 0x04DD, 0x1FA0, 0x2FAE, 0x98A9, 0x7980, 0x050F, 0xB901, 0x8818, 0xB907, 0x8809, 
-     0xBEC6, 0x04E7, 0x10EE, 0x90A9, 0x7980, 0x050F, 0x6919, 0xE308, 0x04FE, 0xB903, 0x8809, 0xBE46, 
-     0xBEC6, 0x04FA, 0x17A0, 0xBE1E, 0x1FAE, 0xBFBF, 0xFF00, 0xBE13, 0xBFDF, 0x8080, 0x99A9, 0xBE47, 
-     0x7980, 0x050F, 0xB901, 0x8809, 0xBEC6, 0x050E, 0x16A0, 0x26A0, 0xBFB7, 0xFF00, 0xBE1E, 0x1EA0, 
-     0x2EAE, 0xBFBF, 0xFF00, 0xBE13, 0xBFDF, 0x8080, 0x99A9, 0x850C, 0x860F, 0x6907, 0xE388, 0x0516, 
-     0x0D07, 0x8510, 0xBE59, 0x881E, 0xBE4A, 0xEF00, 0x101E, 0x901C, 0x101F, 0x901D, 0x10A0, 0x901E, 
-     0x10A0, 0x901F, 0xEF00, 0x101E, 0x301C, 0x9020, 0x731B, 0x5420, 0xBE03, 0x9825, 0x1025, 0x201C, 
-     0x9025, 0x7325, 0x5414, 0xBE03, 0x8B8E, 0x9880, 0x692F, 0xE388, 0x0539, 0xBE59, 0xBB07, 0x6180, 
-     0x9880, 0x8BA0, 0x101F, 0x301D, 0x9021, 0x731B, 0x5421, 0xBE03, 0x982E, 0x102E, 0x201D, 0x902E, 
-     0x732E, 0x5415, 0xBE03, 0x9880, 0x692F, 0xE388, 0x054F, 0xBE59, 0xBB07, 0x6180, 0x9880, 0x8BA0, 
-     0x6918, 0xEF08, 0x7325, 0x5416, 0xBE03, 0x98A0, 0x732E, 0x5417, 0xBE03, 0x98A0, 0xEF00, 0x8BA0, 
-     0xBEC6, 0x056B, 0xBE59, 0xBB04, 0xAA90, 0xBE04, 0xBE1E, 0x99E0, 0x8BE0, 0x69A0, 0x90D0, 0x69A0, 
-     0x90D0, 0x081F, 0xB805, 0x881F, 0x8B90, 0x69A0, 0x90D0, 0x69A0, 0x9090, 0x8BD0, 0x8BD8, 0xBE1F, 
-     0xEF00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-     0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
- };
- static const struct firmware assp_kernel = {
-       .data = (u8 *)assp_kernel_image,
-       .size = sizeof assp_kernel_image
- };
- static const struct firmware assp_minisrc = {
-       .data = (u8 *)assp_minisrc_image,
-       .size = sizeof assp_minisrc_image
- };
- #else /* CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL */
- #ifdef __LITTLE_ENDIAN
- static inline void snd_m3_convert_from_le(const struct firmware *fw) { }
- #else
- static void snd_m3_convert_from_le(const struct firmware *fw)
- {
-       int i;
-       u16 *data = (u16 *)fw->data;
-       for (i = 0; i < fw->size / 2; ++i)
-               le16_to_cpus(&data[i]);
- }
- #endif
- #endif /* CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL */
  /*
   * initialize ASSP
   */
@@@ -2271,7 -2112,7 +2112,7 @@@ static const u16 minisrc_lpf[MINISRC_LP
  static void snd_m3_assp_init(struct snd_m3 *chip)
  {
        unsigned int i;
-       u16 *data;
+       const u16 *data;
  
        /* zero kernel data */
        for (i = 0; i < (REV_B_DATA_MEMORY_UNIT_LENGTH * NUM_UNITS_KERNEL_DATA) / 2; i++)
                          KDATA_DMA_XFER0);
  
        /* write kernel into code memory.. */
-       data = (u16 *)chip->assp_kernel_image->data;
+       data = (const u16 *)chip->assp_kernel_image->data;
        for (i = 0 ; i * 2 < chip->assp_kernel_image->size; i++) {
                snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE, 
-                                 REV_B_CODE_MEMORY_BEGIN + i, data[i]);
+                                 REV_B_CODE_MEMORY_BEGIN + i,
+                                 le16_to_cpu(data[i]));
        }
  
        /*
         * drop it there.  It seems that the minisrc doesn't
         * need vectors, so we won't bother with them..
         */
-       data = (u16 *)chip->assp_minisrc_image->data;
+       data = (const u16 *)chip->assp_minisrc_image->data;
        for (i = 0; i * 2 < chip->assp_minisrc_image->size; i++) {
                snd_m3_assp_write(chip, MEMTYPE_INTERNAL_CODE, 
-                                 0x400 + i, data[i]);
+                                 0x400 + i, le16_to_cpu(data[i]));
        }
  
        /*
@@@ -2427,29 -2269,6 +2269,29 @@@ snd_m3_amp_enable(struct snd_m3 *chip, 
        outw(0xffff, io + GPIO_MASK);
  }
  
 +static void
 +snd_m3_hv_init(struct snd_m3 *chip)
 +{
 +      unsigned long io = chip->iobase;
 +      u16 val = GPI_VOL_DOWN | GPI_VOL_UP;
 +
 +      if (!chip->is_omnibook)
 +              return;
 +
 +      /*
 +       * Volume buttons on some HP OmniBook laptops
 +       * require some GPIO magic to work correctly.
 +       */
 +      outw(0xffff, io + GPIO_MASK);
 +      outw(0x0000, io + GPIO_DATA);
 +
 +      outw(~val, io + GPIO_MASK);
 +      outw(inw(io + GPIO_DIRECTION) & ~val, io + GPIO_DIRECTION);
 +      outw(val, io + GPIO_MASK);
 +
 +      outw(0xffff, io + GPIO_MASK);
 +}
 +
  static int
  snd_m3_chip_init(struct snd_m3 *chip)
  {
               DISABLE_LEGACY);
        pci_write_config_word(pcidev, PCI_LEGACY_AUDIO_CTRL, w);
  
 -      if (chip->is_omnibook) {
 -              /*
 -               * Volume buttons on some HP OmniBook laptops don't work
 -               * correctly. This makes them work for the most part.
 -               *
 -               * Volume up and down buttons on the laptop side work.
 -               * Fn+cursor_up (volme up) works.
 -               * Fn+cursor_down (volume down) doesn't work.
 -               * Fn+F7 (mute) works acts as volume up.
 -               */
 -              outw(~(GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_MASK);
 -              outw(inw(io + GPIO_DIRECTION) & ~(GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_DIRECTION);
 -              outw((GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_DATA);
 -              outw(0xffff, io + GPIO_MASK);
 -      }
        pci_read_config_dword(pcidev, PCI_ALLEGRO_CONFIG, &n);
        n &= ~(HV_CTRL_ENABLE | REDUCED_DEBOUNCE | HV_BUTTON_FROM_GD);
        n |= chip->hv_config;
@@@ -2556,10 -2390,8 +2398,8 @@@ static int snd_m3_free(struct snd_m3 *c
        if (chip->iobase)
                pci_release_regions(chip->pci);
  
- #ifndef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
        release_firmware(chip->assp_kernel_image);
        release_firmware(chip->assp_minisrc_image);
- #endif
  
        pci_disable_device(chip->pci);
        kfree(chip);
@@@ -2650,8 -2482,6 +2490,8 @@@ static int m3_resume(struct pci_dev *pc
        snd_m3_enable_ints(chip);
        snd_m3_amp_enable(chip, 1);
  
 +      snd_m3_hv_init(chip);
 +
        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
        return 0;
  }
@@@ -2751,29 -2581,19 +2591,19 @@@ snd_m3_create(struct snd_card *card, st
                return -ENOMEM;
        }
  
- #ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
-       chip->assp_kernel_image = &assp_kernel;
- #else
        err = request_firmware(&chip->assp_kernel_image,
                               "ess/maestro3_assp_kernel.fw", &pci->dev);
        if (err < 0) {
                snd_m3_free(chip);
                return err;
-       } else
-               snd_m3_convert_from_le(chip->assp_kernel_image);
- #endif
+       }
  
- #ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
-       chip->assp_minisrc_image = &assp_minisrc;
- #else
        err = request_firmware(&chip->assp_minisrc_image,
                               "ess/maestro3_assp_minisrc.fw", &pci->dev);
        if (err < 0) {
                snd_m3_free(chip);
                return err;
-       } else
-               snd_m3_convert_from_le(chip->assp_minisrc_image);
- #endif
+       }
  
        if ((err = pci_request_regions(pci, card->driver)) < 0) {
                snd_m3_free(chip);
  
        snd_m3_amp_enable(chip, 1);
  
 +      snd_m3_hv_init(chip);
 +
        tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip);
  
        if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED,
@@@ -269,7 -269,7 +269,7 @@@ int pcxhr_load_xilinx_binary(struct pcx
        unsigned int chipsc;
        unsigned char data;
        unsigned char mask;
-       unsigned char *image;
+       const unsigned char *image;
  
        /* test first xilinx */
        chipsc = PCXHR_INPL(mgr, PCXHR_PLX_CHIPSC);
@@@ -316,7 -316,7 +316,7 @@@ static int pcxhr_download_dsp(struct pc
        int err;
        unsigned int i;
        unsigned int len;
-       unsigned char *data;
+       const unsigned char *data;
        unsigned char dummy;
        /* check the length of boot image */
        snd_assert(dsp->size > 0, return -EINVAL);
@@@ -473,7 -473,7 +473,7 @@@ static struct pcxhr_cmd_info pcxhr_dsp_
  [CMD_AUDIO_LEVEL_ADJUST] =            { 0xc22000, 0, RMH_SSIZE_FIXED },
  };
  
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
  static char* cmd_names[] = {
  [CMD_VERSION] =                               "CMD_VERSION",
  [CMD_SUPPORTED] =                     "CMD_SUPPORTED",
@@@ -549,7 -549,7 +549,7 @@@ static int pcxhr_read_rmh_status(struc
                                }
                        }
                }
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
                if (rmh->cmd_idx < CMD_LAST_INDEX)
                        snd_printdd("    stat[%d]=%x\n", i, data);
  #endif
@@@ -597,7 -597,7 +597,7 @@@ static int pcxhr_send_msg_nolock(struc
                data |= 0x008000;       /* MASK_MORE_THAN_1_WORD_COMMAND */
        else
                data &= 0xff7fff;       /* MASK_1_WORD_COMMAND */
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
        if (rmh->cmd_idx < CMD_LAST_INDEX)
                snd_printdd("MSG cmd[0]=%x (%s)\n", data, cmd_names[rmh->cmd_idx]);
  #endif
                for (i=1; i < rmh->cmd_len; i++) {
                        /* send other words */
                        data = rmh->cmd[i];
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
                        if (rmh->cmd_idx < CMD_LAST_INDEX)
                                snd_printdd("    cmd[%d]=%x\n", i, data);
  #endif
@@@ -847,7 -847,7 +847,7 @@@ int pcxhr_set_pipe_state(struct pcxhr_m
        int state, i, err;
        int audio_mask;
  
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
        struct timeval my_tv1, my_tv2;
        do_gettimeofday(&my_tv1);
  #endif
                if (err)
                        return err;
        }
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
        do_gettimeofday(&my_tv2);
        snd_printdd("***SET PIPE STATE*** TIME = %ld (err = %x)\n",
                    (long)(my_tv2.tv_usec - my_tv1.tv_usec), err);
@@@ -951,7 -951,7 +951,7 @@@ static int pcxhr_handle_async_err(struc
                                  enum pcxhr_async_err_src err_src, int pipe,
                                  int is_capture)
  {
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
        static char* err_src_name[] = {
                [PCXHR_ERR_PIPE]        = "Pipe",
                [PCXHR_ERR_STREAM]      = "Stream",
@@@ -1169,7 -1169,7 +1169,7 @@@ irqreturn_t pcxhr_interrupt(int irq, vo
                                    mgr->dsp_time_last, dsp_time_new);
                        mgr->dsp_time_err++;
                }
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
                if (dsp_time_diff == 0)
                        snd_printdd("ERROR DSP TIME NO DIFF time(%d)\n", dsp_time_new);
                else if (dsp_time_diff >= (2*PCXHR_GRANULARITY))
                mgr->src_it_dsp = reg;
                tasklet_hi_schedule(&mgr->msg_taskq);
        }
 -#ifdef CONFIG_SND_DEBUG_DETECT
 +#ifdef CONFIG_SND_DEBUG_VERBOSE
        if (reg & PCXHR_FATAL_DSP_ERR)
                snd_printdd("FATAL DSP ERROR : %x\n", reg);
  #endif
@@@ -26,6 -26,7 +26,7 @@@
  #include <linux/sched.h>
  #include <linux/slab.h>
  #include <linux/vmalloc.h>
+ #include <linux/mutex.h>
  
  #include <sound/core.h>
  #include <sound/control.h>
@@@ -1993,55 -1994,6 +1994,6 @@@ static void snd_ymfpci_disable_dsp(stru
        }
  }
  
- #ifdef CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
- #include "ymfpci_image.h"
- static struct firmware snd_ymfpci_dsp_microcode = {
-       .size = YDSXG_DSPLENGTH,
-       .data = (u8 *)DspInst,
- };
- static struct firmware snd_ymfpci_controller_microcode = {
-       .size = YDSXG_CTRLLENGTH,
-       .data = (u8 *)CntrlInst,
- };
- static struct firmware snd_ymfpci_controller_1e_microcode = {
-       .size = YDSXG_CTRLLENGTH,
-       .data = (u8 *)CntrlInst1E,
- };
- #endif
- #ifdef CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
- static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
- {
-       chip->dsp_microcode = &snd_ymfpci_dsp_microcode;
-       if (chip->device_id == PCI_DEVICE_ID_YAMAHA_724F ||
-           chip->device_id == PCI_DEVICE_ID_YAMAHA_740C ||
-           chip->device_id == PCI_DEVICE_ID_YAMAHA_744 ||
-           chip->device_id == PCI_DEVICE_ID_YAMAHA_754)
-               chip->controller_microcode =
-                       &snd_ymfpci_controller_1e_microcode;
-       else
-               chip->controller_microcode =
-                       &snd_ymfpci_controller_microcode;
-       return 0;
- }
- #else /* use fw_loader */
- #ifdef __LITTLE_ENDIAN
- static inline void snd_ymfpci_convert_from_le(const struct firmware *fw) { }
- #else
- static void snd_ymfpci_convert_from_le(const struct firmware *fw)
- {
-       int i;
-       u32 *data = (u32 *)fw->data;
-       for (i = 0; i < fw->size / 4; ++i)
-               le32_to_cpus(&data[i]);
- }
- #endif
  static int snd_ymfpci_request_firmware(struct snd_ymfpci *chip)
  {
        int err, is_1e;
        err = request_firmware(&chip->dsp_microcode, "yamaha/ds1_dsp.fw",
                               &chip->pci->dev);
        if (err >= 0) {
-               if (chip->dsp_microcode->size == YDSXG_DSPLENGTH)
-                       snd_ymfpci_convert_from_le(chip->dsp_microcode);
-               else {
+               if (chip->dsp_microcode->size != YDSXG_DSPLENGTH) {
                        snd_printk(KERN_ERR "DSP microcode has wrong size\n");
                        err = -EINVAL;
                }
        err = request_firmware(&chip->controller_microcode, name,
                               &chip->pci->dev);
        if (err >= 0) {
-               if (chip->controller_microcode->size == YDSXG_CTRLLENGTH)
-                       snd_ymfpci_convert_from_le(chip->controller_microcode);
-               else {
+               if (chip->controller_microcode->size != YDSXG_CTRLLENGTH) {
                        snd_printk(KERN_ERR "controller microcode"
                                   " has wrong size\n");
                        err = -EINVAL;
@@@ -2084,13 -2032,11 +2032,11 @@@ MODULE_FIRMWARE("yamaha/ds1_dsp.fw")
  MODULE_FIRMWARE("yamaha/ds1_ctrl.fw");
  MODULE_FIRMWARE("yamaha/ds1e_ctrl.fw");
  
- #endif
  static void snd_ymfpci_download_image(struct snd_ymfpci *chip)
  {
        int i;
        u16 ctrl;
-       u32 *inst;
+       const __le32 *inst;
  
        snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0x00000000);
        snd_ymfpci_disable_dsp(chip);
        snd_ymfpci_writew(chip, YDSXGR_GLOBALCTRL, ctrl & ~0x0007);
  
        /* setup DSP instruction code */
-       inst = (u32 *)chip->dsp_microcode->data;
+       inst = (const __le32 *)chip->dsp_microcode->data;
        for (i = 0; i < YDSXG_DSPLENGTH / 4; i++)
-               snd_ymfpci_writel(chip, YDSXGR_DSPINSTRAM + (i << 2), inst[i]);
+               snd_ymfpci_writel(chip, YDSXGR_DSPINSTRAM + (i << 2),
+                                 le32_to_cpu(inst[i]));
  
        /* setup control instruction code */
-       inst = (u32 *)chip->controller_microcode->data;
+       inst = (const __le32 *)chip->controller_microcode->data;
        for (i = 0; i < YDSXG_CTRLLENGTH / 4; i++)
-               snd_ymfpci_writel(chip, YDSXGR_CTRLINSTRAM + (i << 2), inst[i]);
+               snd_ymfpci_writel(chip, YDSXGR_CTRLINSTRAM + (i << 2),
+                                 le32_to_cpu(inst[i]));
  
        snd_ymfpci_enable_dsp(chip);
  }
@@@ -2205,7 -2153,6 +2153,7 @@@ static int __devinit snd_ymfpci_memallo
        for (reg = 0x80; reg < 0xc0; reg += 4)
                snd_ymfpci_writel(chip, reg, 0);
        snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0x3fff3fff);
 +      snd_ymfpci_writel(chip, YDSXGR_BUF441OUTVOL, 0x3fff3fff);
        snd_ymfpci_writel(chip, YDSXGR_ZVOUTVOL, 0x3fff3fff);
        snd_ymfpci_writel(chip, YDSXGR_SPDIFOUTVOL, 0x3fff3fff);
        snd_ymfpci_writel(chip, YDSXGR_NATIVEADCINVOL, 0x3fff3fff);
@@@ -2265,10 -2212,8 +2213,8 @@@ static int snd_ymfpci_free(struct snd_y
        pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl);
        
        pci_disable_device(chip->pci);
- #ifndef CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL
        release_firmware(chip->dsp_microcode);
        release_firmware(chip->controller_microcode);
- #endif
        kfree(chip);
        return 0;
  }
@@@ -2325,7 -2270,6 +2271,7 @@@ int snd_ymfpci_suspend(struct pci_dev *
                chip->saved_regs[i] = snd_ymfpci_readl(chip, saved_regs_index[i]);
        chip->saved_ydsxgr_mode = snd_ymfpci_readl(chip, YDSXGR_MODE);
        snd_ymfpci_writel(chip, YDSXGR_NATIVEDACOUTVOL, 0);
 +      snd_ymfpci_writel(chip, YDSXGR_BUF441OUTVOL, 0);
        snd_ymfpci_disable_dsp(chip);
        pci_disable_device(pci);
        pci_save_state(pci);