aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/Makefile2
-rw-r--r--firmware/WHENCE14
-rw-r--r--firmware/ess/maestro3_assp_kernel.fw.ihex120
-rw-r--r--firmware/ess/maestro3_assp_minisrc.fw.ihex51
-rw-r--r--sound/pci/Kconfig10
-rw-r--r--sound/pci/maestro3.c171
6 files changed, 187 insertions, 181 deletions
diff --git a/firmware/Makefile b/firmware/Makefile
index ea4a883f5c60..f312ac0e8979 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -21,6 +21,8 @@ fw-external-y := $(subst ",,$(CONFIG_EXTRA_FIRMWARE))
21# But be aware that the config file might not be included at all. 21# But be aware that the config file might not be included at all.
22 22
23fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp 23fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
24fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
25 ess/maestro3_assp_minisrc.fw
24 26
25fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-) 27fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
26 28
diff --git a/firmware/WHENCE b/firmware/WHENCE
index 89ca95b90960..c08dbc887cb9 100644
--- a/firmware/WHENCE
+++ b/firmware/WHENCE
@@ -17,3 +17,17 @@ Licence: Unknown
17Found in alsa-firmware package in hex form; no licensing information. 17Found in alsa-firmware package in hex form; no licensing information.
18 18
19-------------------------------------------------------------------------- 19--------------------------------------------------------------------------
20
21Driver: maestro3 -- ESS Allegro Maestro3 audio device
22
23File: ess/maestro3_assp_kernel.fw
24File: ess/maestro3_assp_minisrc.fw
25
26Licence: Unknown
27
28Found in alsa-firmware package in hex form with a comment claiming to
29be GPLv2+, but without source -- and with another comment saying "ESS
30drops binary dsp code images on our heads, but we don't get to see
31specs on the dsp."
32
33--------------------------------------------------------------------------
diff --git a/firmware/ess/maestro3_assp_kernel.fw.ihex b/firmware/ess/maestro3_assp_kernel.fw.ihex
new file mode 100644
index 000000000000..933c4c375c2f
--- /dev/null
+++ b/firmware/ess/maestro3_assp_kernel.fw.ihex
@@ -0,0 +1,120 @@
1:10000000807930008079B4038079B4038079FB0073
2:100010008079DD008079B4038079320380798702AA
3:100020008079B4038079B4038079B4038079B40310
4:1000300080791A038079B40380792F028079B40320
5:100040008079B4038079B4038079B4038079B403F0
6:100050008079630080796B008079B4038079B40380
7:1000600080BF7C2C0688048840BE20BC09AE0010EE
8:100070000AAE0100386908EB53005A6908EBD60054
9:100080000900888B806988E3360030BE20BC09698E
10:1000900001B8099041BE41BE286988EB780041BE95
11:1000A00040BE8079380041BE41BE3A90386908E3CD
12:1000B00056003A9041BE40BE00EF3A90396908E3DD
13:1000C0005E003A9000EF0B690C668CEF0A690C66D3
14:1000D0000B62096600EF10690F6604EF88E3750094
15:1000E0000E690F6610620D6600EF0E690D6600EF77
16:1000F00070AE010020BC27AE0100396908EB5D003D
17:10010000266901B826902600888B806988E3CB0099
18:100110002890280D114200E17A00114700E1A0006B
19:10012000807A630011B80A66096204E37A000B0C56
20:1001300005400A1001BA1290120C02408079AF00FB
21:10014000807A6B0002BE0E620D6610BA44E37A003C
22:10015000100C05400E1001BA1290120C0240031050
23:1001600002BA1290120C0040031088E3BA00041087
24:100170008079BC00041001BA1290120C0140050CE9
25:100180000340060C04401110B0BFFF011290120C86
26:10019000064020BC00EF26AE28107069D0BF0100D9
27:1001A000709088E37A0028AE000000EF70AE000384
28:1001B000700C0CB05AAE000000EF807A8A037F69A1
29:1001C00001B87F905600888BA00C08B071AF00B0CA
30:1001D000714E00E2F30056AE57105600A00C08B066
31:1001E00056808079A1031008A0BF591004E3A10331
32:1001F00056808079A103807A8A0301BF43BE59BE2D
33:100200007C90376988E30D0101BA08E30C0171AEF7
34:100210000400710C0050366937900ABF9E108A8B1B
35:1002200080AF1480804C0ABF600500F50ABF20052E
36:1002300000B917BBA090176988E34801170D00E1CA
37:1002400027010CBF78050DBF7C0580792B010CBF01
38:1002500038050DBF3C05006908E335018C8B59BE9C
39:1002600007BBA09020BC807957010C038B8B03B98E
40:100270000988C6BE3E01AC69AB90AD69AB9013086E
41:100280000A6644E3440109030C8320BC80795701CA
42:10029000556988E35701387C0BBF780500F50BBF23
43:1002A000380507B90988C6BE5601AB10AA90746913
44:1002B00088E3630172AE400500F572AE000561AEE1
45:1002C0003B10807AF602786988E382018C8B0CBF40
46:1002D000600500E5407C140820BA12883D73807ADE
47:1002E00080033E73807A80038C8B0CBF6C0500E525
48:1002F000407C14082CBA12883F73807A80034073C4
49:10030000807A8003756988E38E0172AE480500F536
50:1003100072AE080561AE4110807AF602796988E311
51:10032000AD018C8B0CBF600500E5407C140818BA49
52:1003300012884373807A80034473807A80038C8BA5
53:100340000CBF6C0500E5407C140824BA1288457384
54:10035000807A80034673807A8003766988E3B901E6
55:1003600072AE580500F572AE180561AE4710807A7E
56:10037000F6027A6988E3D8018C8B0CBF600500E532
57:10038000407C140808BA12884973807A80034A7343
58:10039000807A80038C8B0CBF6C0500E5407C1408D0
59:1003A00014BA12884B73807A80034C73807A80036E
60:1003B00021BC1CAE90108A8B0ABF600500E5407C12
61:1003C000120804B813888D8B0DBF6C0500E5407CC6
62:1003D000150804B81188807A4A038A8B0ABF600521
63:1003E00000E5407C1F7303B90988C6BEF9018A5431
64:1003F00003BEA098207303B90988C6BE01028A54BF
65:1004000003BEA098201F1F2F269820BC356988E3C3
66:10041000A103336901B83390A0BFEE0208E3A10342
67:10042000339000BF516988E31F02347380BE605768
68:1004300003BE7E9F59BE34907E69510D139020BC3F
69:100440005C6988E3A1035E7380BE605703BE7E9F34
70:1004500059BE5E907E695C0D13908079A103807A0D
71:100460008A0301BF43BE776988E34E0261AE4D1037
72:100470006100888B806988E34E027190710D0B00DA
73:10048000A0AF1080A0AF108010080A6608E34902F0
74:10049000090010080C6688E34E020B8020BC7B69C3
75:1004A00088E3A1030ABF9E108A8B80AF1480804C22
76:1004B00000E166027C6990BF6005729072037C69FE
77:1004C00090BF640573907304807970027C6990BF5B
78:1004D0002005729072037C6990BF240573907304A9
79:1004E0007C6901B87C900ABFFD108A8B80AF1080B8
80:1004F0004F738A5403BE809821BC26738B5403BE6D
81:100500008B618C9803BE806180988079A103807A8A
82:100510008A03280D114700E1BE0212AF064012699E
83:10052000B0BF000C88E3B602A0BF000888E3B202A7
84:100530001269B0BF000CA0BF000488E3A3020969E0
85:100540000B908079A5020BAF054001690590026907
86:100550000690114300E1ED021169C0BF0020119027
87:100560008079ED0209690B908079B8020BAF0540E4
88:1005700005AF034006AF04408079ED0212AF06409C
89:100580001269B0BF000C88E3E702A0BF000888E34F
90:10059000E3021269B0BF000CA0BF000488E3D402DC
91:1005A0000D6910908079D60210AF05400169059061
92:1005B00002690690114300E1ED021169C0BF0020FD
93:1005C00011908079ED020D6910908079E90210AFE9
94:1005D000054005AF034006AF044020BC7069719030
95:1005E000807A7800716970908079A10320BC6103E2
96:1005F0008B8B806988EF7202720304787190710DA1
97:100600008A8B0B0003B90988C6BE0903A869AB90A1
98:10061000A869AA9010080A6644E30F0309001008AD
99:100620000C6688E314030B8020BC616901B86190FB
100:100630008079F702807A8A03355D0100346901B858
101:1006400034900ABF9E108A8B80AF1480804872AEAF
102:10065000500500F572AE100561AE5110807AF602B9
103:100660008079A103807A8A03355D02005E6901B852
104:100670005E900ABF9E108A8B80AF1480804772AE56
105:10068000580500F572AE180561AE5C10807AF6026E
106:100690008079A1031C00888B806988EF1D901D0D57
107:1006A0000F1010668CE358030E6910660F620D661A
108:1006B0000FBA01E37A0310048A8B03B90988C6BE16
109:1006C0006C038C6AAA61AB988C6AAB61AD988C6A3A
110:1006D000AD61A9988C6AA961AA98047C8B8B047C73
111:1006E0008D8B047C898B047C14080E6608E37903E7
112:1006F0000D04108421BC1C6901B81C9080794A0348
113:1007000003B909888A8BC6BE8803AC5403BE8C61CA
114:10071000AA9800EF20BC46BE09086B900A086C90AE
115:100720000B086D901A0862901B0863901E08649075
116:1007300059BE1E88658066816782688369846A8580
117:1007400000EF20BC6B6909886C690A886D690B88A9
118:1007500062691A8863691B8864691E88650066017E
119:0A0760006702680369046A053ABEE7
120:00000001FF
diff --git a/firmware/ess/maestro3_assp_minisrc.fw.ihex b/firmware/ess/maestro3_assp_minisrc.fw.ihex
new file mode 100644
index 000000000000..d2c0031dadf2
--- /dev/null
+++ b/firmware/ess/maestro3_assp_minisrc.fw.ihex
@@ -0,0 +1,51 @@
1:1000000080BF1E106E906E00888B806988EF6F90A5
2:100010006F0D006908EB120420BC6E6901B86E9088
3:10002000807903040EB9078843BE01BF47BE41BEB5
4:10003000807A2A0040BE2930CCEF41BE807A280069
5:1000400040BE2830CCEF076908E32A0409692C90E8
6:1000500080792C040D692C9009101A880A1001BAB5
7:100060001B880D101C880E1001BA1D8880BFED0082
8:100070001E880C05240104B92790186908E3B3040D
9:100080002D901369A0BF987504F72DAEFF008D8BDE
10:10009000196908E363041A6908E3560407B9098873
11:1000A000C6BE5304A910AD9080797C0403B90988B9
12:1000B000C6BE60048918226CAD90A910236E226C14
13:1000C000AD9080797C041A1008E36F0403B90988A5
14:1000D000C6BE6C04A910A090AD9080797C0401B9D3
15:1000E0000988C6BE7B048918226CA090AD90A91027
16:1000F000236E226CA090AD902D6908E39C0424012E
17:1001000003B702B91888898B2C028A10047CA0904E
18:100110002B691F88807E5B052A690988898BA099D5
19:100120008A10A0902B691F88807E5B052A69098848
20:10013000898BAF99997B840424010F061B1013202F
21:100140001B90A0BFFF7F44E3AC041B90898B807A97
22:100150001A05276901BA2790807A2305276908E3E1
23:100160009E0480790F052406261013202690A0BF38
24:10017000FF7F04E3C0048D8B807A1A058079B40474
25:100180002690131026301B908D8B807A1A05807A6A
26:100190002305271001BA279008E3B40424010F06B1
27:1001A000898B1A6908E3EA04196988E3E00403B952
28:1001B0000988C6BEDD04A01FAE2FA99880790F055F
29:1001C00001B9188807B90988C6BEE704EE10A990DE
30:1001D00080790F05196908E3FE0403B9098846BE52
31:1001E000C6BEFA04A0171EBEAE1FBFBF00FF13BEDF
32:1001F000DFBF8080A99947BE80790F0501B90988C2
33:10020000C6BE0E05A016A026B7BF00FF1EBEA01ECC
34:10021000AE2EBFBF00FF13BEDFBF8080A9990C8543
35:100220000F86076988E31605070D108559BE1E88DD
36:100230004ABE00EF1E101C901F101D90A0101E90B3
37:10024000A0101F9000EF1E101C3020901B73205434
38:1002500003BE259825101C2025902573145403BE39
39:100260008E8B80982F6988E3390559BE07BB806162
40:100270008098A08B1F101D3021901B73215403BE4A
41:100280002E982E101D202E902E73155403BE80988C
42:100290002F6988E34F0559BE07BB80618098A08B0A
43:1002A000186908EF2573165403BEA0982E731754CF
44:1002B00003BEA09800EFA08BC6BE6B0559BE04BB61
45:1002C00090AA04BE1EBEE099E08BA069D090A06900
46:1002D000D0901F0805B81F88908BA069D090A069A6
47:1002E0009090D08BD88B1FBE00EF00000000000064
48:1002F00000000000000000000000000000000000FE
49:1003000000000000000000000000000000000000ED
50:020310000000EB
51:00000001FF
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig
index 1abbf877f20d..32836ea45170 100644
--- a/sound/pci/Kconfig
+++ b/sound/pci/Kconfig
@@ -744,7 +744,6 @@ config SND_KORG1212
744config SND_MAESTRO3 744config SND_MAESTRO3
745 tristate "ESS Allegro/Maestro3" 745 tristate "ESS Allegro/Maestro3"
746 depends on SND 746 depends on SND
747 select FW_LOADER if !SND_MAESTRO3_FIRMWARE_IN_KERNEL
748 select SND_AC97_CODEC 747 select SND_AC97_CODEC
749 help 748 help
750 Say Y here to include support for soundcards based on ESS Maestro 3 749 Say Y here to include support for soundcards based on ESS Maestro 3
@@ -753,15 +752,6 @@ config SND_MAESTRO3
753 To compile this driver as a module, choose M here: the module 752 To compile this driver as a module, choose M here: the module
754 will be called snd-maestro3. 753 will be called snd-maestro3.
755 754
756config SND_MAESTRO3_FIRMWARE_IN_KERNEL
757 bool "In-kernel firmware for Maestro3 driver"
758 depends on SND_MAESTRO3
759 default y
760 help
761 Say Y here to include the static firmware built in the kernel
762 for the Maestro3 driver. If you choose N here, you need to
763 install the firmware files from the alsa-firmware package.
764
765config SND_MIXART 755config SND_MIXART
766 tristate "Digigram miXart" 756 tristate "Digigram miXart"
767 depends on SND 757 depends on SND
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 9dfba6eff858..b2582972c9a4 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -58,10 +58,8 @@ MODULE_SUPPORTED_DEVICE("{{ESS,Maestro3 PCI},"
58 "{ESS,Allegro PCI}," 58 "{ESS,Allegro PCI},"
59 "{ESS,Allegro-1 PCI}," 59 "{ESS,Allegro-1 PCI},"
60 "{ESS,Canyon3D-2/LE PCI}}"); 60 "{ESS,Canyon3D-2/LE PCI}}");
61#ifndef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
62MODULE_FIRMWARE("ess/maestro3_assp_kernel.fw"); 61MODULE_FIRMWARE("ess/maestro3_assp_kernel.fw");
63MODULE_FIRMWARE("ess/maestro3_assp_minisrc.fw"); 62MODULE_FIRMWARE("ess/maestro3_assp_minisrc.fw");
64#endif
65 63
66static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ 64static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */
67static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ 65static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
@@ -2101,161 +2099,6 @@ static int __devinit snd_m3_mixer(struct snd_m3 *chip)
2101} 2099}
2102 2100
2103 2101
2104#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
2105
2106/*
2107 * DSP Code images
2108 */
2109
2110static const u16 assp_kernel_image[] = {
2111 0x7980, 0x0030, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x00FB, 0x7980, 0x00DD, 0x7980, 0x03B4,
2112 0x7980, 0x0332, 0x7980, 0x0287, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4,
2113 0x7980, 0x031A, 0x7980, 0x03B4, 0x7980, 0x022F, 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x03B4,
2114 0x7980, 0x03B4, 0x7980, 0x03B4, 0x7980, 0x0063, 0x7980, 0x006B, 0x7980, 0x03B4, 0x7980, 0x03B4,
2115 0xBF80, 0x2C7C, 0x8806, 0x8804, 0xBE40, 0xBC20, 0xAE09, 0x1000, 0xAE0A, 0x0001, 0x6938, 0xEB08,
2116 0x0053, 0x695A, 0xEB08, 0x00D6, 0x0009, 0x8B88, 0x6980, 0xE388, 0x0036, 0xBE30, 0xBC20, 0x6909,
2117 0xB801, 0x9009, 0xBE41, 0xBE41, 0x6928, 0xEB88, 0x0078, 0xBE41, 0xBE40, 0x7980, 0x0038, 0xBE41,
2118 0xBE41, 0x903A, 0x6938, 0xE308, 0x0056, 0x903A, 0xBE41, 0xBE40, 0xEF00, 0x903A, 0x6939, 0xE308,
2119 0x005E, 0x903A, 0xEF00, 0x690B, 0x660C, 0xEF8C, 0x690A, 0x660C, 0x620B, 0x6609, 0xEF00, 0x6910,
2120 0x660F, 0xEF04, 0xE388, 0x0075, 0x690E, 0x660F, 0x6210, 0x660D, 0xEF00, 0x690E, 0x660D, 0xEF00,
2121 0xAE70, 0x0001, 0xBC20, 0xAE27, 0x0001, 0x6939, 0xEB08, 0x005D, 0x6926, 0xB801, 0x9026, 0x0026,
2122 0x8B88, 0x6980, 0xE388, 0x00CB, 0x9028, 0x0D28, 0x4211, 0xE100, 0x007A, 0x4711, 0xE100, 0x00A0,
2123 0x7A80, 0x0063, 0xB811, 0x660A, 0x6209, 0xE304, 0x007A, 0x0C0B, 0x4005, 0x100A, 0xBA01, 0x9012,
2124 0x0C12, 0x4002, 0x7980, 0x00AF, 0x7A80, 0x006B, 0xBE02, 0x620E, 0x660D, 0xBA10, 0xE344, 0x007A,
2125 0x0C10, 0x4005, 0x100E, 0xBA01, 0x9012, 0x0C12, 0x4002, 0x1003, 0xBA02, 0x9012, 0x0C12, 0x4000,
2126 0x1003, 0xE388, 0x00BA, 0x1004, 0x7980, 0x00BC, 0x1004, 0xBA01, 0x9012, 0x0C12, 0x4001, 0x0C05,
2127 0x4003, 0x0C06, 0x4004, 0x1011, 0xBFB0, 0x01FF, 0x9012, 0x0C12, 0x4006, 0xBC20, 0xEF00, 0xAE26,
2128 0x1028, 0x6970, 0xBFD0, 0x0001, 0x9070, 0xE388, 0x007A, 0xAE28, 0x0000, 0xEF00, 0xAE70, 0x0300,
2129 0x0C70, 0xB00C, 0xAE5A, 0x0000, 0xEF00, 0x7A80, 0x038A, 0x697F, 0xB801, 0x907F, 0x0056, 0x8B88,
2130 0x0CA0, 0xB008, 0xAF71, 0xB000, 0x4E71, 0xE200, 0x00F3, 0xAE56, 0x1057, 0x0056, 0x0CA0, 0xB008,
2131 0x8056, 0x7980, 0x03A1, 0x0810, 0xBFA0, 0x1059, 0xE304, 0x03A1, 0x8056, 0x7980, 0x03A1, 0x7A80,
2132 0x038A, 0xBF01, 0xBE43, 0xBE59, 0x907C, 0x6937, 0xE388, 0x010D, 0xBA01, 0xE308, 0x010C, 0xAE71,
2133 0x0004, 0x0C71, 0x5000, 0x6936, 0x9037, 0xBF0A, 0x109E, 0x8B8A, 0xAF80, 0x8014, 0x4C80, 0xBF0A,
2134 0x0560, 0xF500, 0xBF0A, 0x0520, 0xB900, 0xBB17, 0x90A0, 0x6917, 0xE388, 0x0148, 0x0D17, 0xE100,
2135 0x0127, 0xBF0C, 0x0578, 0xBF0D, 0x057C, 0x7980, 0x012B, 0xBF0C, 0x0538, 0xBF0D, 0x053C, 0x6900,
2136 0xE308, 0x0135, 0x8B8C, 0xBE59, 0xBB07, 0x90A0, 0xBC20, 0x7980, 0x0157, 0x030C, 0x8B8B, 0xB903,
2137 0x8809, 0xBEC6, 0x013E, 0x69AC, 0x90AB, 0x69AD, 0x90AB, 0x0813, 0x660A, 0xE344, 0x0144, 0x0309,
2138 0x830C, 0xBC20, 0x7980, 0x0157, 0x6955, 0xE388, 0x0157, 0x7C38, 0xBF0B, 0x0578, 0xF500, 0xBF0B,
2139 0x0538, 0xB907, 0x8809, 0xBEC6, 0x0156, 0x10AB, 0x90AA, 0x6974, 0xE388, 0x0163, 0xAE72, 0x0540,
2140 0xF500, 0xAE72, 0x0500, 0xAE61, 0x103B, 0x7A80, 0x02F6, 0x6978, 0xE388, 0x0182, 0x8B8C, 0xBF0C,
2141 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA20, 0x8812, 0x733D, 0x7A80, 0x0380, 0x733E, 0x7A80, 0x0380,
2142 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 0x0814, 0xBA2C, 0x8812, 0x733F, 0x7A80, 0x0380, 0x7340,
2143 0x7A80, 0x0380, 0x6975, 0xE388, 0x018E, 0xAE72, 0x0548, 0xF500, 0xAE72, 0x0508, 0xAE61, 0x1041,
2144 0x7A80, 0x02F6, 0x6979, 0xE388, 0x01AD, 0x8B8C, 0xBF0C, 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA18,
2145 0x8812, 0x7343, 0x7A80, 0x0380, 0x7344, 0x7A80, 0x0380, 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40,
2146 0x0814, 0xBA24, 0x8812, 0x7345, 0x7A80, 0x0380, 0x7346, 0x7A80, 0x0380, 0x6976, 0xE388, 0x01B9,
2147 0xAE72, 0x0558, 0xF500, 0xAE72, 0x0518, 0xAE61, 0x1047, 0x7A80, 0x02F6, 0x697A, 0xE388, 0x01D8,
2148 0x8B8C, 0xBF0C, 0x0560, 0xE500, 0x7C40, 0x0814, 0xBA08, 0x8812, 0x7349, 0x7A80, 0x0380, 0x734A,
2149 0x7A80, 0x0380, 0x8B8C, 0xBF0C, 0x056C, 0xE500, 0x7C40, 0x0814, 0xBA14, 0x8812, 0x734B, 0x7A80,
2150 0x0380, 0x734C, 0x7A80, 0x0380, 0xBC21, 0xAE1C, 0x1090, 0x8B8A, 0xBF0A, 0x0560, 0xE500, 0x7C40,
2151 0x0812, 0xB804, 0x8813, 0x8B8D, 0xBF0D, 0x056C, 0xE500, 0x7C40, 0x0815, 0xB804, 0x8811, 0x7A80,
2152 0x034A, 0x8B8A, 0xBF0A, 0x0560, 0xE500, 0x7C40, 0x731F, 0xB903, 0x8809, 0xBEC6, 0x01F9, 0x548A,
2153 0xBE03, 0x98A0, 0x7320, 0xB903, 0x8809, 0xBEC6, 0x0201, 0x548A, 0xBE03, 0x98A0, 0x1F20, 0x2F1F,
2154 0x9826, 0xBC20, 0x6935, 0xE388, 0x03A1, 0x6933, 0xB801, 0x9033, 0xBFA0, 0x02EE, 0xE308, 0x03A1,
2155 0x9033, 0xBF00, 0x6951, 0xE388, 0x021F, 0x7334, 0xBE80, 0x5760, 0xBE03, 0x9F7E, 0xBE59, 0x9034,
2156 0x697E, 0x0D51, 0x9013, 0xBC20, 0x695C, 0xE388, 0x03A1, 0x735E, 0xBE80, 0x5760, 0xBE03, 0x9F7E,
2157 0xBE59, 0x905E, 0x697E, 0x0D5C, 0x9013, 0x7980, 0x03A1, 0x7A80, 0x038A, 0xBF01, 0xBE43, 0x6977,
2158 0xE388, 0x024E, 0xAE61, 0x104D, 0x0061, 0x8B88, 0x6980, 0xE388, 0x024E, 0x9071, 0x0D71, 0x000B,
2159 0xAFA0, 0x8010, 0xAFA0, 0x8010, 0x0810, 0x660A, 0xE308, 0x0249, 0x0009, 0x0810, 0x660C, 0xE388,
2160 0x024E, 0x800B, 0xBC20, 0x697B, 0xE388, 0x03A1, 0xBF0A, 0x109E, 0x8B8A, 0xAF80, 0x8014, 0x4C80,
2161 0xE100, 0x0266, 0x697C, 0xBF90, 0x0560, 0x9072, 0x0372, 0x697C, 0xBF90, 0x0564, 0x9073, 0x0473,
2162 0x7980, 0x0270, 0x697C, 0xBF90, 0x0520, 0x9072, 0x0372, 0x697C, 0xBF90, 0x0524, 0x9073, 0x0473,
2163 0x697C, 0xB801, 0x907C, 0xBF0A, 0x10FD, 0x8B8A, 0xAF80, 0x8010, 0x734F, 0x548A, 0xBE03, 0x9880,
2164 0xBC21, 0x7326, 0x548B, 0xBE03, 0x618B, 0x988C, 0xBE03, 0x6180, 0x9880, 0x7980, 0x03A1, 0x7A80,
2165 0x038A, 0x0D28, 0x4711, 0xE100, 0x02BE, 0xAF12, 0x4006, 0x6912, 0xBFB0, 0x0C00, 0xE388, 0x02B6,
2166 0xBFA0, 0x0800, 0xE388, 0x02B2, 0x6912, 0xBFB0, 0x0C00, 0xBFA0, 0x0400, 0xE388, 0x02A3, 0x6909,
2167 0x900B, 0x7980, 0x02A5, 0xAF0B, 0x4005, 0x6901, 0x9005, 0x6902, 0x9006, 0x4311, 0xE100, 0x02ED,
2168 0x6911, 0xBFC0, 0x2000, 0x9011, 0x7980, 0x02ED, 0x6909, 0x900B, 0x7980, 0x02B8, 0xAF0B, 0x4005,
2169 0xAF05, 0x4003, 0xAF06, 0x4004, 0x7980, 0x02ED, 0xAF12, 0x4006, 0x6912, 0xBFB0, 0x0C00, 0xE388,
2170 0x02E7, 0xBFA0, 0x0800, 0xE388, 0x02E3, 0x6912, 0xBFB0, 0x0C00, 0xBFA0, 0x0400, 0xE388, 0x02D4,
2171 0x690D, 0x9010, 0x7980, 0x02D6, 0xAF10, 0x4005, 0x6901, 0x9005, 0x6902, 0x9006, 0x4311, 0xE100,
2172 0x02ED, 0x6911, 0xBFC0, 0x2000, 0x9011, 0x7980, 0x02ED, 0x690D, 0x9010, 0x7980, 0x02E9, 0xAF10,
2173 0x4005, 0xAF05, 0x4003, 0xAF06, 0x4004, 0xBC20, 0x6970, 0x9071, 0x7A80, 0x0078, 0x6971, 0x9070,
2174 0x7980, 0x03A1, 0xBC20, 0x0361, 0x8B8B, 0x6980, 0xEF88, 0x0272, 0x0372, 0x7804, 0x9071, 0x0D71,
2175 0x8B8A, 0x000B, 0xB903, 0x8809, 0xBEC6, 0x0309, 0x69A8, 0x90AB, 0x69A8, 0x90AA, 0x0810, 0x660A,
2176 0xE344, 0x030F, 0x0009, 0x0810, 0x660C, 0xE388, 0x0314, 0x800B, 0xBC20, 0x6961, 0xB801, 0x9061,
2177 0x7980, 0x02F7, 0x7A80, 0x038A, 0x5D35, 0x0001, 0x6934, 0xB801, 0x9034, 0xBF0A, 0x109E, 0x8B8A,
2178 0xAF80, 0x8014, 0x4880, 0xAE72, 0x0550, 0xF500, 0xAE72, 0x0510, 0xAE61, 0x1051, 0x7A80, 0x02F6,
2179 0x7980, 0x03A1, 0x7A80, 0x038A, 0x5D35, 0x0002, 0x695E, 0xB801, 0x905E, 0xBF0A, 0x109E, 0x8B8A,
2180 0xAF80, 0x8014, 0x4780, 0xAE72, 0x0558, 0xF500, 0xAE72, 0x0518, 0xAE61, 0x105C, 0x7A80, 0x02F6,
2181 0x7980, 0x03A1, 0x001C, 0x8B88, 0x6980, 0xEF88, 0x901D, 0x0D1D, 0x100F, 0x6610, 0xE38C, 0x0358,
2182 0x690E, 0x6610, 0x620F, 0x660D, 0xBA0F, 0xE301, 0x037A, 0x0410, 0x8B8A, 0xB903, 0x8809, 0xBEC6,
2183 0x036C, 0x6A8C, 0x61AA, 0x98AB, 0x6A8C, 0x61AB, 0x98AD, 0x6A8C, 0x61AD, 0x98A9, 0x6A8C, 0x61A9,
2184 0x98AA, 0x7C04, 0x8B8B, 0x7C04, 0x8B8D, 0x7C04, 0x8B89, 0x7C04, 0x0814, 0x660E, 0xE308, 0x0379,
2185 0x040D, 0x8410, 0xBC21, 0x691C, 0xB801, 0x901C, 0x7980, 0x034A, 0xB903, 0x8809, 0x8B8A, 0xBEC6,
2186 0x0388, 0x54AC, 0xBE03, 0x618C, 0x98AA, 0xEF00, 0xBC20, 0xBE46, 0x0809, 0x906B, 0x080A, 0x906C,
2187 0x080B, 0x906D, 0x081A, 0x9062, 0x081B, 0x9063, 0x081E, 0x9064, 0xBE59, 0x881E, 0x8065, 0x8166,
2188 0x8267, 0x8368, 0x8469, 0x856A, 0xEF00, 0xBC20, 0x696B, 0x8809, 0x696C, 0x880A, 0x696D, 0x880B,
2189 0x6962, 0x881A, 0x6963, 0x881B, 0x6964, 0x881E, 0x0065, 0x0166, 0x0267, 0x0368, 0x0469, 0x056A,
2190 0xBE3A,
2191};
2192
2193/*
2194 * Mini sample rate converter code image
2195 * that is to be loaded at 0x400 on the DSP.
2196 */
2197static const u16 assp_minisrc_image[] = {
2198
2199 0xBF80, 0x101E, 0x906E, 0x006E, 0x8B88, 0x6980, 0xEF88, 0x906F, 0x0D6F, 0x6900, 0xEB08, 0x0412,
2200 0xBC20, 0x696E, 0xB801, 0x906E, 0x7980, 0x0403, 0xB90E, 0x8807, 0xBE43, 0xBF01, 0xBE47, 0xBE41,
2201 0x7A80, 0x002A, 0xBE40, 0x3029, 0xEFCC, 0xBE41, 0x7A80, 0x0028, 0xBE40, 0x3028, 0xEFCC, 0x6907,
2202 0xE308, 0x042A, 0x6909, 0x902C, 0x7980, 0x042C, 0x690D, 0x902C, 0x1009, 0x881A, 0x100A, 0xBA01,
2203 0x881B, 0x100D, 0x881C, 0x100E, 0xBA01, 0x881D, 0xBF80, 0x00ED, 0x881E, 0x050C, 0x0124, 0xB904,
2204 0x9027, 0x6918, 0xE308, 0x04B3, 0x902D, 0x6913, 0xBFA0, 0x7598, 0xF704, 0xAE2D, 0x00FF, 0x8B8D,
2205 0x6919, 0xE308, 0x0463, 0x691A, 0xE308, 0x0456, 0xB907, 0x8809, 0xBEC6, 0x0453, 0x10A9, 0x90AD,
2206 0x7980, 0x047C, 0xB903, 0x8809, 0xBEC6, 0x0460, 0x1889, 0x6C22, 0x90AD, 0x10A9, 0x6E23, 0x6C22,
2207 0x90AD, 0x7980, 0x047C, 0x101A, 0xE308, 0x046F, 0xB903, 0x8809, 0xBEC6, 0x046C, 0x10A9, 0x90A0,
2208 0x90AD, 0x7980, 0x047C, 0xB901, 0x8809, 0xBEC6, 0x047B, 0x1889, 0x6C22, 0x90A0, 0x90AD, 0x10A9,
2209 0x6E23, 0x6C22, 0x90A0, 0x90AD, 0x692D, 0xE308, 0x049C, 0x0124, 0xB703, 0xB902, 0x8818, 0x8B89,
2210 0x022C, 0x108A, 0x7C04, 0x90A0, 0x692B, 0x881F, 0x7E80, 0x055B, 0x692A, 0x8809, 0x8B89, 0x99A0,
2211 0x108A, 0x90A0, 0x692B, 0x881F, 0x7E80, 0x055B, 0x692A, 0x8809, 0x8B89, 0x99AF, 0x7B99, 0x0484,
2212 0x0124, 0x060F, 0x101B, 0x2013, 0x901B, 0xBFA0, 0x7FFF, 0xE344, 0x04AC, 0x901B, 0x8B89, 0x7A80,
2213 0x051A, 0x6927, 0xBA01, 0x9027, 0x7A80, 0x0523, 0x6927, 0xE308, 0x049E, 0x7980, 0x050F, 0x0624,
2214 0x1026, 0x2013, 0x9026, 0xBFA0, 0x7FFF, 0xE304, 0x04C0, 0x8B8D, 0x7A80, 0x051A, 0x7980, 0x04B4,
2215 0x9026, 0x1013, 0x3026, 0x901B, 0x8B8D, 0x7A80, 0x051A, 0x7A80, 0x0523, 0x1027, 0xBA01, 0x9027,
2216 0xE308, 0x04B4, 0x0124, 0x060F, 0x8B89, 0x691A, 0xE308, 0x04EA, 0x6919, 0xE388, 0x04E0, 0xB903,
2217 0x8809, 0xBEC6, 0x04DD, 0x1FA0, 0x2FAE, 0x98A9, 0x7980, 0x050F, 0xB901, 0x8818, 0xB907, 0x8809,
2218 0xBEC6, 0x04E7, 0x10EE, 0x90A9, 0x7980, 0x050F, 0x6919, 0xE308, 0x04FE, 0xB903, 0x8809, 0xBE46,
2219 0xBEC6, 0x04FA, 0x17A0, 0xBE1E, 0x1FAE, 0xBFBF, 0xFF00, 0xBE13, 0xBFDF, 0x8080, 0x99A9, 0xBE47,
2220 0x7980, 0x050F, 0xB901, 0x8809, 0xBEC6, 0x050E, 0x16A0, 0x26A0, 0xBFB7, 0xFF00, 0xBE1E, 0x1EA0,
2221 0x2EAE, 0xBFBF, 0xFF00, 0xBE13, 0xBFDF, 0x8080, 0x99A9, 0x850C, 0x860F, 0x6907, 0xE388, 0x0516,
2222 0x0D07, 0x8510, 0xBE59, 0x881E, 0xBE4A, 0xEF00, 0x101E, 0x901C, 0x101F, 0x901D, 0x10A0, 0x901E,
2223 0x10A0, 0x901F, 0xEF00, 0x101E, 0x301C, 0x9020, 0x731B, 0x5420, 0xBE03, 0x9825, 0x1025, 0x201C,
2224 0x9025, 0x7325, 0x5414, 0xBE03, 0x8B8E, 0x9880, 0x692F, 0xE388, 0x0539, 0xBE59, 0xBB07, 0x6180,
2225 0x9880, 0x8BA0, 0x101F, 0x301D, 0x9021, 0x731B, 0x5421, 0xBE03, 0x982E, 0x102E, 0x201D, 0x902E,
2226 0x732E, 0x5415, 0xBE03, 0x9880, 0x692F, 0xE388, 0x054F, 0xBE59, 0xBB07, 0x6180, 0x9880, 0x8BA0,
2227 0x6918, 0xEF08, 0x7325, 0x5416, 0xBE03, 0x98A0, 0x732E, 0x5417, 0xBE03, 0x98A0, 0xEF00, 0x8BA0,
2228 0xBEC6, 0x056B, 0xBE59, 0xBB04, 0xAA90, 0xBE04, 0xBE1E, 0x99E0, 0x8BE0, 0x69A0, 0x90D0, 0x69A0,
2229 0x90D0, 0x081F, 0xB805, 0x881F, 0x8B90, 0x69A0, 0x90D0, 0x69A0, 0x9090, 0x8BD0, 0x8BD8, 0xBE1F,
2230 0xEF00, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2231 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2232};
2233
2234static const struct firmware assp_kernel = {
2235 .data = (u8 *)assp_kernel_image,
2236 .size = sizeof assp_kernel_image
2237};
2238static const struct firmware assp_minisrc = {
2239 .data = (u8 *)assp_minisrc_image,
2240 .size = sizeof assp_minisrc_image
2241};
2242
2243#ifdef __LITTLE_ENDIAN
2244static inline void snd_m3_convert_to_le(const struct firmware *fw) { }
2245#else
2246static void snd_m3_convert_to_le(const struct firmware *fw)
2247{
2248 int i;
2249 u16 *data = (u16 *)fw->data;
2250
2251 for (i = 0; i < fw->size / 2; ++i)
2252 cpu_to_le16s(&data[i]);
2253}
2254#endif
2255
2256#endif /* CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL */
2257
2258
2259/* 2102/*
2260 * initialize ASSP 2103 * initialize ASSP
2261 */ 2104 */
@@ -2547,10 +2390,8 @@ static int snd_m3_free(struct snd_m3 *chip)
2547 if (chip->iobase) 2390 if (chip->iobase)
2548 pci_release_regions(chip->pci); 2391 pci_release_regions(chip->pci);
2549 2392
2550#ifndef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
2551 release_firmware(chip->assp_kernel_image); 2393 release_firmware(chip->assp_kernel_image);
2552 release_firmware(chip->assp_minisrc_image); 2394 release_firmware(chip->assp_minisrc_image);
2553#endif
2554 2395
2555 pci_disable_device(chip->pci); 2396 pci_disable_device(chip->pci);
2556 kfree(chip); 2397 kfree(chip);
@@ -2740,27 +2581,19 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
2740 return -ENOMEM; 2581 return -ENOMEM;
2741 } 2582 }
2742 2583
2743#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
2744 chip->assp_kernel_image = &assp_kernel;
2745#else
2746 err = request_firmware(&chip->assp_kernel_image, 2584 err = request_firmware(&chip->assp_kernel_image,
2747 "ess/maestro3_assp_kernel.fw", &pci->dev); 2585 "ess/maestro3_assp_kernel.fw", &pci->dev);
2748 if (err < 0) { 2586 if (err < 0) {
2749 snd_m3_free(chip); 2587 snd_m3_free(chip);
2750 return err; 2588 return err;
2751 } 2589 }
2752#endif
2753 2590
2754#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
2755 chip->assp_minisrc_image = &assp_minisrc;
2756#else
2757 err = request_firmware(&chip->assp_minisrc_image, 2591 err = request_firmware(&chip->assp_minisrc_image,
2758 "ess/maestro3_assp_minisrc.fw", &pci->dev); 2592 "ess/maestro3_assp_minisrc.fw", &pci->dev);
2759 if (err < 0) { 2593 if (err < 0) {
2760 snd_m3_free(chip); 2594 snd_m3_free(chip);
2761 return err; 2595 return err;
2762 } 2596 }
2763#endif
2764 2597
2765 if ((err = pci_request_regions(pci, card->driver)) < 0) { 2598 if ((err = pci_request_regions(pci, card->driver)) < 0) {
2766 snd_m3_free(chip); 2599 snd_m3_free(chip);
@@ -2912,10 +2745,6 @@ static struct pci_driver driver = {
2912 2745
2913static int __init alsa_card_m3_init(void) 2746static int __init alsa_card_m3_init(void)
2914{ 2747{
2915#ifdef CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL
2916 snd_m3_convert_to_le(&assp_kernel);
2917 snd_m3_convert_to_le(&assp_minisrc);
2918#endif
2919 return pci_register_driver(&driver); 2748 return pci_register_driver(&driver);
2920} 2749}
2921 2750