]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
Merge branch 'for-2.6.36' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 15 Aug 2010 13:56:40 +0000 (14:56 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 15 Aug 2010 13:56:40 +0000 (14:56 +0100)
Trivial overlap with the removal of the local revision variable.

Conflicts:
sound/soc/codecs/wm8994.c

347 files changed:
arch/arm/mach-davinci/devices.c
arch/arm/mach-ep93xx/core.c
arch/arm/mach-kirkwood/common.c
arch/arm/mach-mx2/clock_imx27.c
arch/arm/mach-mx2/devices.c
arch/arm/mach-mx3/clock-imx31.c
arch/arm/mach-mx3/clock-imx35.c
arch/arm/mach-mx3/devices.c
arch/arm/mach-omap1/devices.c
arch/arm/mach-omap2/board-n8x0.c
arch/arm/mach-omap2/board-rx51-peripherals.c
arch/arm/mach-omap2/board-zoom2.c
arch/arm/mach-omap2/devices.c
arch/arm/mach-omap2/include/mach/board-zoom.h
arch/arm/mach-pxa/devices.c
arch/arm/mach-pxa/devices.h
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-pxa/pxa3xx.c
arch/arm/mach-pxa/zylonite.c
arch/arm/mach-s3c64xx/dev-audio.c
arch/arm/mach-s3c64xx/mach-smdk6410.c
arch/arm/plat-mxc/audmux-v2.c
arch/arm/plat-omap/include/plat/mcbsp.h
arch/arm/plat-s3c24xx/devs.c
arch/arm/plat-samsung/include/plat/devs.h
arch/powerpc/boot/dts/mpc8610_hpcd.dts
arch/powerpc/include/asm/fsl_guts.h [new file with mode: 0644]
arch/powerpc/include/asm/immap_86xx.h [deleted file]
drivers/input/misc/twl4030-vibra.c
drivers/mfd/twl-core.c
drivers/mfd/twl4030-codec.c
include/linux/i2c/twl.h
include/sound/sh_fsi.h
include/sound/soc-dai.h
include/sound/soc-dapm.h
include/sound/soc-of-simple.h [deleted file]
include/sound/soc.h
include/sound/tlv320aic3x.h
include/sound/wm8962.h [new file with mode: 0644]
sound/soc/atmel/atmel-pcm.c
sound/soc/atmel/atmel-pcm.h
sound/soc/atmel/atmel_ssc_dai.c
sound/soc/atmel/atmel_ssc_dai.h
sound/soc/atmel/playpaq_wm8510.c
sound/soc/atmel/sam9g20_wm8731.c
sound/soc/atmel/snd-soc-afeb9260.c
sound/soc/au1x/db1200.c
sound/soc/au1x/dbdma2.c
sound/soc/au1x/psc-ac97.c
sound/soc/au1x/psc-i2s.c
sound/soc/au1x/psc.h
sound/soc/blackfin/bf5xx-ac97-pcm.c
sound/soc/blackfin/bf5xx-ac97-pcm.h
sound/soc/blackfin/bf5xx-ac97.c
sound/soc/blackfin/bf5xx-ac97.h
sound/soc/blackfin/bf5xx-ad1836.c
sound/soc/blackfin/bf5xx-ad193x.c
sound/soc/blackfin/bf5xx-ad1980.c
sound/soc/blackfin/bf5xx-ad73311.c
sound/soc/blackfin/bf5xx-i2s-pcm.c
sound/soc/blackfin/bf5xx-i2s-pcm.h
sound/soc/blackfin/bf5xx-i2s.c
sound/soc/blackfin/bf5xx-i2s.h [deleted file]
sound/soc/blackfin/bf5xx-ssm2602.c
sound/soc/blackfin/bf5xx-tdm-pcm.c
sound/soc/blackfin/bf5xx-tdm-pcm.h
sound/soc/blackfin/bf5xx-tdm.c
sound/soc/blackfin/bf5xx-tdm.h
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/ac97.c
sound/soc/codecs/ac97.h [deleted file]
sound/soc/codecs/ad1836.c
sound/soc/codecs/ad1836.h
sound/soc/codecs/ad193x.c
sound/soc/codecs/ad193x.h
sound/soc/codecs/ad1980.c
sound/soc/codecs/ad1980.h
sound/soc/codecs/ad73311.c
sound/soc/codecs/ad73311.h
sound/soc/codecs/ads117x.c
sound/soc/codecs/ads117x.h
sound/soc/codecs/ak4104.c
sound/soc/codecs/ak4104.h [deleted file]
sound/soc/codecs/ak4535.c
sound/soc/codecs/ak4535.h
sound/soc/codecs/ak4642.c
sound/soc/codecs/ak4642.h [deleted file]
sound/soc/codecs/ak4671.c
sound/soc/codecs/ak4671.h
sound/soc/codecs/cq93vc.c
sound/soc/codecs/cq93vc.h [deleted file]
sound/soc/codecs/cs4270.c
sound/soc/codecs/cs4270.h [deleted file]
sound/soc/codecs/cs42l51.c
sound/soc/codecs/cs42l51.h
sound/soc/codecs/cx20442.c
sound/soc/codecs/cx20442.h
sound/soc/codecs/da7210.c
sound/soc/codecs/da7210.h [deleted file]
sound/soc/codecs/jz4740.c
sound/soc/codecs/jz4740.h [deleted file]
sound/soc/codecs/pcm3008.c
sound/soc/codecs/pcm3008.h
sound/soc/codecs/spdif_transciever.c
sound/soc/codecs/spdif_transciever.h [deleted file]
sound/soc/codecs/ssm2602.c
sound/soc/codecs/ssm2602.h
sound/soc/codecs/stac9766.c
sound/soc/codecs/stac9766.h
sound/soc/codecs/tlv320aic23.c
sound/soc/codecs/tlv320aic23.h
sound/soc/codecs/tlv320aic26.c
sound/soc/codecs/tlv320aic26.h
sound/soc/codecs/tlv320aic3x.c
sound/soc/codecs/tlv320aic3x.h
sound/soc/codecs/tlv320dac33.c
sound/soc/codecs/tlv320dac33.h
sound/soc/codecs/twl4030.c
sound/soc/codecs/twl4030.h [deleted file]
sound/soc/codecs/twl6040.c
sound/soc/codecs/twl6040.h
sound/soc/codecs/uda134x.c
sound/soc/codecs/uda134x.h
sound/soc/codecs/uda1380.c
sound/soc/codecs/uda1380.h
sound/soc/codecs/wm2000.h
sound/soc/codecs/wm8350.c
sound/soc/codecs/wm8350.h
sound/soc/codecs/wm8400.c
sound/soc/codecs/wm8400.h
sound/soc/codecs/wm8510.c
sound/soc/codecs/wm8510.h
sound/soc/codecs/wm8523.c
sound/soc/codecs/wm8523.h
sound/soc/codecs/wm8580.c
sound/soc/codecs/wm8580.h
sound/soc/codecs/wm8711.c
sound/soc/codecs/wm8711.h
sound/soc/codecs/wm8727.c
sound/soc/codecs/wm8727.h [deleted file]
sound/soc/codecs/wm8728.c
sound/soc/codecs/wm8728.h
sound/soc/codecs/wm8731.c
sound/soc/codecs/wm8731.h
sound/soc/codecs/wm8741.c
sound/soc/codecs/wm8741.h
sound/soc/codecs/wm8750.c
sound/soc/codecs/wm8750.h
sound/soc/codecs/wm8753.c
sound/soc/codecs/wm8753.h
sound/soc/codecs/wm8776.c
sound/soc/codecs/wm8776.h
sound/soc/codecs/wm8900.c
sound/soc/codecs/wm8900.h
sound/soc/codecs/wm8903.c
sound/soc/codecs/wm8903.h
sound/soc/codecs/wm8904.c
sound/soc/codecs/wm8904.h
sound/soc/codecs/wm8940.c
sound/soc/codecs/wm8940.h
sound/soc/codecs/wm8955.c
sound/soc/codecs/wm8955.h
sound/soc/codecs/wm8960.c
sound/soc/codecs/wm8960.h
sound/soc/codecs/wm8961.c
sound/soc/codecs/wm8961.h
sound/soc/codecs/wm8962-tables.c [new file with mode: 0644]
sound/soc/codecs/wm8962.c [new file with mode: 0644]
sound/soc/codecs/wm8962.h [new file with mode: 0644]
sound/soc/codecs/wm8971.c
sound/soc/codecs/wm8971.h
sound/soc/codecs/wm8974.c
sound/soc/codecs/wm8974.h
sound/soc/codecs/wm8978.c
sound/soc/codecs/wm8978.h
sound/soc/codecs/wm8988.c
sound/soc/codecs/wm8988.h
sound/soc/codecs/wm8990.c
sound/soc/codecs/wm8990.h
sound/soc/codecs/wm8993.c
sound/soc/codecs/wm8993.h
sound/soc/codecs/wm8994.c
sound/soc/codecs/wm8994.h
sound/soc/codecs/wm9081.c
sound/soc/codecs/wm9081.h
sound/soc/codecs/wm9090.c
sound/soc/codecs/wm9090.h
sound/soc/codecs/wm9705.c
sound/soc/codecs/wm9705.h
sound/soc/codecs/wm9712.c
sound/soc/codecs/wm9712.h
sound/soc/codecs/wm9713.c
sound/soc/codecs/wm9713.h
sound/soc/davinci/davinci-evm.c
sound/soc/davinci/davinci-i2s.c
sound/soc/davinci/davinci-i2s.h
sound/soc/davinci/davinci-mcasp.c
sound/soc/davinci/davinci-mcasp.h
sound/soc/davinci/davinci-pcm.c
sound/soc/davinci/davinci-pcm.h
sound/soc/davinci/davinci-sffsdr.c
sound/soc/davinci/davinci-vcif.c
sound/soc/davinci/davinci-vcif.h [deleted file]
sound/soc/ep93xx/ep93xx-i2s.c
sound/soc/ep93xx/ep93xx-i2s.h [deleted file]
sound/soc/ep93xx/ep93xx-pcm.c
sound/soc/ep93xx/ep93xx-pcm.h
sound/soc/ep93xx/snappercl15.c
sound/soc/fsl/Kconfig
sound/soc/fsl/Makefile
sound/soc/fsl/efika-audio-fabric.c
sound/soc/fsl/fsl_dma.c
sound/soc/fsl/fsl_dma.h
sound/soc/fsl/fsl_ssi.c
sound/soc/fsl/fsl_ssi.h
sound/soc/fsl/mpc5200_dma.c
sound/soc/fsl/mpc5200_dma.h
sound/soc/fsl/mpc5200_psc_ac97.c
sound/soc/fsl/mpc5200_psc_ac97.h
sound/soc/fsl/mpc5200_psc_i2s.c
sound/soc/fsl/mpc8610_hpcd.c
sound/soc/fsl/pcm030-audio-fabric.c
sound/soc/fsl/soc-of-simple.c [deleted file]
sound/soc/imx/Kconfig
sound/soc/imx/Makefile
sound/soc/imx/eukrea-tlv320.c
sound/soc/imx/imx-pcm-dma-mx2.c
sound/soc/imx/imx-pcm-fiq.c
sound/soc/imx/imx-ssi.c
sound/soc/imx/imx-ssi.h
sound/soc/imx/phycore-ac97.c
sound/soc/imx/wm1133-ev1.c
sound/soc/jz4740/jz4740-i2s.c
sound/soc/jz4740/jz4740-i2s.h
sound/soc/jz4740/jz4740-pcm.c
sound/soc/jz4740/jz4740-pcm.h
sound/soc/jz4740/qi_lb60.c
sound/soc/kirkwood/kirkwood-dma.c
sound/soc/kirkwood/kirkwood-dma.h [deleted file]
sound/soc/kirkwood/kirkwood-i2s.c
sound/soc/kirkwood/kirkwood-i2s.h [deleted file]
sound/soc/kirkwood/kirkwood-openrd.c
sound/soc/nuc900/nuc900-ac97.c
sound/soc/nuc900/nuc900-audio.c
sound/soc/nuc900/nuc900-audio.h
sound/soc/nuc900/nuc900-pcm.c
sound/soc/omap/am3517evm.c
sound/soc/omap/ams-delta.c
sound/soc/omap/igep0020.c
sound/soc/omap/mcpdm.c
sound/soc/omap/mcpdm.h
sound/soc/omap/n810.c
sound/soc/omap/omap-mcbsp.c
sound/soc/omap/omap-mcbsp.h
sound/soc/omap/omap-mcpdm.c
sound/soc/omap/omap-mcpdm.h [deleted file]
sound/soc/omap/omap-pcm.c
sound/soc/omap/omap-pcm.h
sound/soc/omap/omap2evm.c
sound/soc/omap/omap3beagle.c
sound/soc/omap/omap3evm.c
sound/soc/omap/omap3pandora.c
sound/soc/omap/osk5912.c
sound/soc/omap/overo.c
sound/soc/omap/rx51.c
sound/soc/omap/sdp3430.c
sound/soc/omap/sdp4430.c
sound/soc/omap/zoom2.c
sound/soc/pxa/corgi.c
sound/soc/pxa/e740_wm9705.c
sound/soc/pxa/e750_wm9705.c
sound/soc/pxa/e800_wm9712.c
sound/soc/pxa/em-x270.c
sound/soc/pxa/imote2.c
sound/soc/pxa/magician.c
sound/soc/pxa/mioa701_wm9713.c
sound/soc/pxa/palm27x.c
sound/soc/pxa/poodle.c
sound/soc/pxa/pxa-ssp.c
sound/soc/pxa/pxa-ssp.h
sound/soc/pxa/pxa2xx-ac97.c
sound/soc/pxa/pxa2xx-ac97.h
sound/soc/pxa/pxa2xx-i2s.c
sound/soc/pxa/pxa2xx-i2s.h
sound/soc/pxa/pxa2xx-pcm.c
sound/soc/pxa/pxa2xx-pcm.h [deleted file]
sound/soc/pxa/raumfeld.c
sound/soc/pxa/spitz.c
sound/soc/pxa/tosa.c
sound/soc/pxa/z2.c
sound/soc/pxa/zylonite.c
sound/soc/s3c24xx/Kconfig
sound/soc/s3c24xx/Makefile
sound/soc/s3c24xx/aquila_wm8994.c [new file with mode: 0644]
sound/soc/s3c24xx/goni_wm8994.c [new file with mode: 0644]
sound/soc/s3c24xx/jive_wm8750.c
sound/soc/s3c24xx/ln2440sbc_alc650.c
sound/soc/s3c24xx/neo1973_gta02_wm8753.c
sound/soc/s3c24xx/neo1973_wm8753.c
sound/soc/s3c24xx/s3c-ac97.c
sound/soc/s3c24xx/s3c-ac97.h
sound/soc/s3c24xx/s3c-dma.c
sound/soc/s3c24xx/s3c-dma.h
sound/soc/s3c24xx/s3c-i2s-v2.c
sound/soc/s3c24xx/s3c-i2s-v2.h
sound/soc/s3c24xx/s3c-pcm.c
sound/soc/s3c24xx/s3c2412-i2s.c
sound/soc/s3c24xx/s3c2412-i2s.h
sound/soc/s3c24xx/s3c24xx-i2s.c
sound/soc/s3c24xx/s3c24xx-i2s.h
sound/soc/s3c24xx/s3c24xx_simtec.c
sound/soc/s3c24xx/s3c24xx_simtec.h
sound/soc/s3c24xx/s3c24xx_simtec_hermes.c
sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c
sound/soc/s3c24xx/s3c24xx_uda134x.c
sound/soc/s3c24xx/s3c64xx-i2s-v4.c
sound/soc/s3c24xx/s3c64xx-i2s.c
sound/soc/s3c24xx/s3c64xx-i2s.h
sound/soc/s3c24xx/smartq_wm8987.c
sound/soc/s3c24xx/smdk2443_wm9710.c
sound/soc/s3c24xx/smdk64xx_wm8580.c
sound/soc/s3c24xx/smdk_wm9713.c
sound/soc/s6000/s6000-i2s.c
sound/soc/s6000/s6000-i2s.h
sound/soc/s6000/s6000-pcm.c
sound/soc/s6000/s6000-pcm.h
sound/soc/s6000/s6105-ipcam.c
sound/soc/sh/dma-sh7760.c
sound/soc/sh/fsi-ak4642.c
sound/soc/sh/fsi-da7210.c
sound/soc/sh/fsi.c
sound/soc/sh/hac.c
sound/soc/sh/migor.c
sound/soc/sh/sh7760-ac97.c
sound/soc/sh/siu.h
sound/soc/sh/siu_dai.c
sound/soc/sh/siu_pcm.c
sound/soc/sh/ssi.c
sound/soc/soc-cache.c
sound/soc/soc-core.c
sound/soc/soc-dapm.c
sound/soc/soc-jack.c
sound/soc/txx9/txx9aclc-ac97.c
sound/soc/txx9/txx9aclc-generic.c
sound/soc/txx9/txx9aclc.c
sound/soc/txx9/txx9aclc.h

index 8b7201e4c79c6aabd616a11a696bf183357a911b..de40e9c787e1621b12ccaf98313f70a32d4c9839 100644 (file)
@@ -295,6 +295,18 @@ static void davinci_init_wdt(void)
 
 /*-------------------------------------------------------------------------*/
 
+struct platform_device davinci_pcm_device = {
+       .name           = "davinci-pcm-audio",
+       .id             = -1,
+};
+
+static void davinci_init_pcm(void)
+{
+       platform_device_register(&davinci_pcm_device);
+}
+
+/*-------------------------------------------------------------------------*/
+
 struct davinci_timer_instance davinci_timer_instance[2] = {
        {
                .base           = DAVINCI_TIMER0_BASE,
@@ -315,6 +327,7 @@ static int __init davinci_init_devices(void)
        /* please keep these calls, and their implementations above,
         * in alphabetical order so they're easier to sort through.
         */
+       davinci_init_pcm();
        davinci_init_wdt();
 
        return 0;
index b4ee5409eb7229ff2a8965c7de7ec5c8d47f80ef..b5261d44b2639f6bc3f448e46c20e3f5ee2eaa1c 100644 (file)
@@ -732,9 +732,15 @@ static struct platform_device ep93xx_i2s_device = {
        .resource       = ep93xx_i2s_resource,
 };
 
+static struct platform_device ep93xx_pcm_device = {
+       .name           = "ep93xx-pcm-audio",
+       .id             = -1,
+};
+
 void __init ep93xx_register_i2s(void)
 {
        platform_device_register(&ep93xx_i2s_device);
+       platform_device_register(&ep93xx_pcm_device);
 }
 
 #define EP93XX_SYSCON_DEVCFG_I2S_MASK  (EP93XX_SYSCON_DEVCFG_I2SONSSP | \
index e1f3efedbcf18717696eb400370f6f7da5864ccc..07690132cdbfc24b2caa019ede3bbfcad17d9683 100644 (file)
@@ -896,10 +896,16 @@ static struct platform_device kirkwood_i2s_device = {
        },
 };
 
+static struct platform_device kirkwood_pcm_device = {
+       .name           = "kirkwood-pcm",
+       .id             = -1,
+};
+
 void __init kirkwood_audio_init(void)
 {
        kirkwood_clk_ctrl |= CGC_AUDIO;
        platform_device_register(&kirkwood_i2s_device);
+       platform_device_register(&kirkwood_pcm_device);
 }
 
 /*****************************************************************************
index 0f0823c8b1707e9d8f86bbc77fb0320aa25395b8..379de9c593327a8b2d3ab19279aef62495d496d9 100644 (file)
@@ -653,8 +653,8 @@ static struct clk_lookup lookups[] = {
        _REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", usb_clk1)
        _REGISTER_CLOCK("mxc-ehci.2", "usb", usb_clk)
        _REGISTER_CLOCK("mxc-ehci.2", "usb_ahb", usb_clk1)
-       _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk)
-       _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
+       _REGISTER_CLOCK("imx-ssi-dai.0", NULL, ssi1_clk)
+       _REGISTER_CLOCK("imx-ssi-dai.1", NULL, ssi2_clk)
        _REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
        _REGISTER_CLOCK(NULL, "vpu", vpu_clk)
        _REGISTER_CLOCK(NULL, "dma", dma_clk)
index a0aeb8a4adc19ef419a0a045ad3b882131597106..2354d67a10db36b25b92942144ac144201594785 100644 (file)
@@ -415,7 +415,7 @@ struct platform_device mxc_usbh2 = {
        };                                                              \
                                                                        \
        struct platform_device imx_ssi_device ## n = {                  \
-               .name = "imx-ssi",                                      \
+               .name = "imx-ssi-dai",                                  \
                .id = n,                                                \
                .num_resources = ARRAY_SIZE(imx_ssi_resources ## n),    \
                .resource = imx_ssi_resources ## n,                     \
index 9a9eb6de6127efd0b7a6241a17a5f9d88b4e09e1..9b52a67abf2de7eb5a9f983b54f857a9c6fa3ff4 100644 (file)
@@ -558,8 +558,8 @@ static struct clk_lookup lookups[] = {
        _REGISTER_CLOCK("mxc_w1.0", NULL, owire_clk)
        _REGISTER_CLOCK("mxc-mmc.0", NULL, sdhc1_clk)
        _REGISTER_CLOCK("mxc-mmc.1", NULL, sdhc2_clk)
-       _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk)
-       _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
+       _REGISTER_CLOCK("imx-ssi-dai.0", NULL, ssi1_clk)
+       _REGISTER_CLOCK("imx-ssi-dai.1", NULL, ssi2_clk)
        _REGISTER_CLOCK(NULL, "firi", firi_clk)
        _REGISTER_CLOCK(NULL, "ata", ata_clk)
        _REGISTER_CLOCK(NULL, "rtic", rtic_clk)
index 9f3e943e22326cf0b0f8024194414de457a66356..7b5acd5aa7c186e21145e600de33e209dcf6a8bb 100644 (file)
@@ -464,8 +464,8 @@ static struct clk_lookup lookups[] = {
        _REGISTER_CLOCK(NULL, "sdma", sdma_clk)
        _REGISTER_CLOCK(NULL, "spba", spba_clk)
        _REGISTER_CLOCK(NULL, "spdif", spdif_clk)
-       _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk)
-       _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk)
+       _REGISTER_CLOCK("imx-ssi-dai.0", NULL, ssi1_clk)
+       _REGISTER_CLOCK("imx-ssi-dai.1", NULL, ssi2_clk)
        _REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk)
        _REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk)
        _REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
index db7acd6e910160cc230736ff3eb441eff255f2d0..27cfc39106a81436518926b67d31c5aee203415a 100644 (file)
@@ -562,14 +562,14 @@ static struct resource imx_ssi_resources1[] = {
 };
 
 struct platform_device imx_ssi_device0 = {
-       .name = "imx-ssi",
+       .name = "imx-ssi-dai",
        .id = 0,
        .num_resources = ARRAY_SIZE(imx_ssi_resources0),
        .resource = imx_ssi_resources0,
 };
 
 struct platform_device imx_ssi_device1 = {
-       .name = "imx-ssi",
+       .name = "imx-ssi-dai",
        .id = 1,
        .num_resources = ARRAY_SIZE(imx_ssi_resources1),
        .resource = imx_ssi_resources1,
index 379100c176392a199a8da2235374a922c29ee3de..eb98eb8d3731c1ce51ff9aa0bc603be866e1c345 100644 (file)
@@ -25,6 +25,7 @@
 #include <mach/gpio.h>
 #include <plat/mmc.h>
 #include <plat/omap7xx.h>
+#include <plat/mcbsp.h>
 
 /*-------------------------------------------------------------------------*/
 
@@ -267,6 +268,30 @@ static inline void omap_init_sti(void)
 static inline void omap_init_sti(void) {}
 #endif
 
+#if defined(CONFIG_SND_SOC) || defined(CONFIG_SND_SOC_MODULE)
+
+static struct platform_device omap_pcm = {
+       .name   = "omap-pcm-audio",
+       .id     = -1,
+};
+
+OMAP_MCBSP_PLATFORM_DEVICE(1);
+OMAP_MCBSP_PLATFORM_DEVICE(2);
+OMAP_MCBSP_PLATFORM_DEVICE(3);
+
+static void omap_init_audio(void)
+{
+       platform_device_register(&omap_mcbsp1);
+       platform_device_register(&omap_mcbsp2);
+       if (!cpu_is_omap7xx())
+               platform_device_register(&omap_mcbsp3);
+       platform_device_register(&omap_pcm);
+}
+
+#else
+static inline void omap_init_audio(void) {}
+#endif
+
 /*-------------------------------------------------------------------------*/
 
 /*
@@ -299,6 +324,7 @@ static int __init omap1_init_devices(void)
        omap_init_rtc();
        omap_init_spi100k();
        omap_init_sti();
+       omap_init_audio();
 
        return 0;
 }
index 3ccc34ebdcc79c11e021b4c80e9fca550bfea037..04df912a7b55bddded21f902e47bdff7313eda0b 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/i2c.h>
 #include <linux/spi/spi.h>
 #include <linux/usb/musb.h>
+#include <sound/tlv320aic3x.h>
 
 #include <asm/mach/arch.h>
 #include <asm/mach-types.h>
@@ -612,11 +613,25 @@ static int n8x0_menelaus_late_init(struct device *dev)
        return 0;
 }
 
+static struct aic3x_setup_data n810_aic33_setup = {
+       .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
+       .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
+};
+
+static struct aic3x_pdata n810_aic33_data = {
+       .setup = &n810_aic33_setup,
+       .gpio_reset = -1,
+};
+
 static struct i2c_board_info __initdata n8x0_i2c_board_info_1[] = {
        {
                I2C_BOARD_INFO("menelaus", 0x72),
                .irq = INT_24XX_SYS_NIRQ,
        },
+       {
+               I2C_BOARD_INFO("tlv320aic3x", 0x1b),
+               .platform_data = &n810_aic33_data,
+       },
 };
 
 static struct menelaus_platform_data n8x0_menelaus_platform_data = {
index abdf321c2d4155b1d7b021722b37026d2ab60a81..28978c08bcedbcf83a9b9dd76ac1e33450f3a421 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/gpio.h>
 #include <linux/gpio_keys.h>
 #include <linux/mmc/host.h>
+#include <sound/tlv320aic3x.h>
 
 #include <plat/mcspi.h>
 #include <plat/mux.h>
@@ -686,7 +687,6 @@ static struct twl4030_power_data rx51_t2scripts_data __initdata = {
 };
 
 
-
 static struct twl4030_platform_data rx51_twldata __initdata = {
        .irq_base               = TWL4030_IRQ_BASE,
        .irq_end                = TWL4030_IRQ_END,
@@ -716,9 +716,21 @@ static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_1[] = {
        },
 };
 
+/* Audio setup data */
+static struct aic3x_setup_data rx51_aic34_setup = {
+       .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
+       .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
+};
+
+static struct aic3x_pdata rx51_aic34_data = {
+       .setup = &rx51_aic34_setup,
+       .gpio_reset = 60,
+};
+
 static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
        {
                I2C_BOARD_INFO("tlv320aic3x", 0x18),
+               .platform_data = &rx51_aic34_data,
        },
 };
 
index 803ef14cbf2d64ca3218e56ce4e48572088fe67f..410fe006c0f6c7ed5bab7c76384623905415b920 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/platform_device.h>
 #include <linux/input.h>
 #include <linux/gpio.h>
+#include <linux/i2c/twl.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -34,8 +35,11 @@ static void __init omap_zoom2_init_irq(void)
        omap_gpio_init();
 }
 
-/* REVISIT: These audio entries can be removed once MFD code is merged */
-#if 0
+/* EXTMUTE callback function */
+void zoom2_set_hs_extmute(int mute)
+{
+       gpio_set_value(ZOOM2_HEADSET_EXTMUTE_GPIO, mute);
+}
 
 static struct twl4030_madc_platform_data zoom2_madc_data = {
        .irq_line       = 1,
@@ -43,6 +47,9 @@ static struct twl4030_madc_platform_data zoom2_madc_data = {
 
 static struct twl4030_codec_audio_data zoom2_audio_data = {
        .audio_mclk = 26000000,
+       .ramp_delay_value = 3,  /* 161 ms */
+       .hs_extmute = 1,
+       .set_hs_extmute = zoom2_set_hs_extmute,
 };
 
 static struct twl4030_codec_data zoom2_codec_data = {
@@ -64,10 +71,24 @@ static struct twl4030_platform_data zoom2_twldata = {
        .vmmc1          = &zoom2_vmmc1,
        .vmmc2          = &zoom2_vmmc2,
        .vsim           = &zoom2_vsim,
+};
 
+static struct i2c_board_info __initdata zoom2_i2c_boardinfo[] = {
+       {
+               I2C_BOARD_INFO("twl4030", 0x48),
+               .flags = I2C_CLIENT_WAKE,
+               .irq = INT_34XX_SYS_NIRQ,
+               .platform_data = &zoom2_twldata,
+       },
 };
 
-#endif
+static int __init omap3_zoom2_i2c_init(void)
+{
+       omap_register_i2c_bus(1, 2600, zoom2_i2c_boardinfo,
+                       ARRAY_SIZE(zoom2_i2c_boardinfo));
+       return 0;
+}
+
 
 #ifdef CONFIG_OMAP_MUX
 static struct omap_board_mux board_mux[] __initdata = {
@@ -81,6 +102,7 @@ static void __init omap_zoom2_init(void)
 {
        omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
        zoom_peripherals_init();
+       omap3_zoom2_i2c_init();
        zoom_debugboard_init();
 }
 
index 03e6c9ed82a41f66495fc318041c6a900e20256d..f9a5961d23a7035049d2299c059686d8d0a42fd7 100644 (file)
@@ -29,6 +29,7 @@
 #include <mach/gpio.h>
 #include <plat/mmc.h>
 #include <plat/dma.h>
+#include <plat/mcbsp.h>
 
 #include "mux.h"
 
@@ -289,6 +290,43 @@ static inline void omap_init_sti(void)
 static inline void omap_init_sti(void) {}
 #endif
 
+#if defined(CONFIG_SND_SOC) || defined(CONFIG_SND_SOC_MODULE)
+
+static struct platform_device omap_pcm = {
+       .name   = "omap-pcm-audio",
+       .id     = -1,
+};
+
+/*
+ * OMAP2420 has 2 McBSP ports
+ * OMAP2430 has 5 McBSP ports
+ * OMAP3 has 5 McBSP ports
+ * OMAP4 has 4 McBSP ports
+ */
+OMAP_MCBSP_PLATFORM_DEVICE(1);
+OMAP_MCBSP_PLATFORM_DEVICE(2);
+OMAP_MCBSP_PLATFORM_DEVICE(3);
+OMAP_MCBSP_PLATFORM_DEVICE(4);
+OMAP_MCBSP_PLATFORM_DEVICE(5);
+
+static void omap_init_audio(void)
+{
+       platform_device_register(&omap_mcbsp1);
+       platform_device_register(&omap_mcbsp2);
+       if (cpu_is_omap243x() || cpu_is_omap34xx() || cpu_is_omap44xx()) {
+               platform_device_register(&omap_mcbsp3);
+               platform_device_register(&omap_mcbsp4);
+       }
+       if (cpu_is_omap243x() || cpu_is_omap34xx())
+               platform_device_register(&omap_mcbsp5);
+
+       platform_device_register(&omap_pcm);
+}
+
+#else
+static inline void omap_init_audio(void) {}
+#endif
+
 #if defined(CONFIG_SPI_OMAP24XX) || defined(CONFIG_SPI_OMAP24XX_MODULE)
 
 #include <plat/mcspi.h>
@@ -901,6 +939,7 @@ static int __init omap2_init_devices(void)
         * in alphabetical order so they're easier to sort through.
         */
        omap_hsmmc_reset();
+       omap_init_audio();
        omap_init_camera();
        omap_init_mbox();
        omap_init_mcspi();
index c93b29e21b78afd28258bf6dc8fde504811d3fee..b6a010fc8bda3f5eb363711733a462ce93bfbefa 100644 (file)
@@ -3,3 +3,5 @@
  */
 extern int __init zoom_debugboard_init(void);
 extern void __init zoom_peripherals_init(void);
+
+#define ZOOM2_HEADSET_EXTMUTE_GPIO     153
index 8e10db148f1b2cccdc70b07ba0785b280a80dcfc..200c31a2730e0c2fce4a1167596ef90d487721a9 100644 (file)
@@ -340,6 +340,31 @@ struct platform_device pxa_device_i2s = {
        .num_resources  = ARRAY_SIZE(pxai2s_resources),
 };
 
+struct platform_device pxa_device_asoc_ssp1 = {
+       .name           = "pxa-ssp-dai",
+       .id             = 0,
+};
+
+struct platform_device pxa_device_asoc_ssp2= {
+       .name           = "pxa-ssp-dai",
+       .id             = 1,
+};
+
+struct platform_device pxa_device_asoc_ssp3 = {
+       .name           = "pxa-ssp-dai",
+       .id             = 2,
+};
+
+struct platform_device pxa_device_asoc_ssp4 = {
+       .name           = "pxa-ssp-dai",
+       .id             = 3,
+};
+
+struct platform_device pxa_device_asoc_platform = {
+       .name           = "pxa-pcm-audio",
+       .id             = -1,
+};
+
 static u64 pxaficp_dmamask = ~(u32)0;
 
 struct platform_device pxa_device_ficp = {
index 93817d99761e902a42bd610d5b060e49095b0450..506fd5753ccc4781066997335455ebec84fc109b 100644 (file)
@@ -37,4 +37,10 @@ extern struct platform_device pxa3xx_device_i2c_power;
 
 extern struct platform_device pxa3xx_device_gcu;
 
+extern struct platform_device pxa_device_asoc_platform;
+extern struct platform_device pxa_device_asoc_ssp1;
+extern struct platform_device pxa_device_asoc_ssp2;
+extern struct platform_device pxa_device_asoc_ssp3;
+extern struct platform_device pxa_device_asoc_ssp4;
+
 void __init pxa_register_device(struct platform_device *dev, void *data);
index 0af36177ff085c92f34cd729bd5775f25d948a2f..465008293a259137fd04eb498b757c392251c214 100644 (file)
@@ -384,6 +384,10 @@ void __init pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info)
 static struct platform_device *devices[] __initdata = {
        &pxa27x_device_udc,
        &pxa_device_i2s,
+       &pxa_device_asoc_ssp1,
+       &pxa_device_asoc_ssp2,
+       &pxa_device_asoc_ssp3,
+       &pxa_device_asoc_platform,
        &sa1100_device_rtc,
        &pxa_device_rtc,
        &pxa27x_device_ssp1,
index f544e58e1536047a30dbe91414e055f4008a6e7e..f7a3b158ca97278d1de14250822fdd6100b2aed5 100644 (file)
@@ -597,6 +597,11 @@ void __init pxa3xx_set_i2c_power_info(struct i2c_pxa_platform_data *info)
 static struct platform_device *devices[] __initdata = {
        &pxa27x_device_udc,
        &pxa_device_i2s,
+       &pxa_device_asoc_ssp1,
+       &pxa_device_asoc_ssp2,
+       &pxa_device_asoc_ssp3,
+       &pxa_device_asoc_ssp4,
+       &pxa_device_asoc_platform,
        &sa1100_device_rtc,
        &pxa_device_rtc,
        &pxa27x_device_ssp1,
index c479cbecf784ac3c53f634d2b4fad3e1fefd4daa..5ba9d99a1bf6c5c33032686f9d64c05777e27d29 100644 (file)
@@ -45,6 +45,16 @@ int wm9713_irq;
 int lcd_id;
 int lcd_orientation;
 
+struct platform_device pxa_device_wm9713_audio = {
+       .name           = "wm9713-codec",
+       .id             = -1,
+};
+
+static void __init zylonite_init_wm9713_audio(void)
+{
+       platform_device_register(&pxa_device_wm9713_audio);
+}
+
 static struct resource smc91x_resources[] = {
        [0] = {
                .start  = ZYLONITE_ETH_PHYS + 0x300,
@@ -408,6 +418,7 @@ static void __init zylonite_init(void)
        zylonite_init_nand();
        zylonite_init_leds();
        zylonite_init_ohci();
+       zylonite_init_wm9713_audio();
 }
 
 MACHINE_START(ZYLONITE, "PXA3xx Platform Development Kit (aka Zylonite)")
index c3e9e73bd0f91ef4d5e74cf3072d29de8dbbb8a7..55ae1b0afae9fa2d238ad089cc7d40bf50808f6b 100644 (file)
@@ -333,3 +333,16 @@ void __init s3c64xx_ac97_setup_gpio(int num)
        else
                s3c_ac97_pdata.cfg_gpio = s3c64xx_ac97_cfg_gpe;
 }
+
+static u64 s3c_device_audio_dmamask = 0xffffffffUL;
+
+struct platform_device s3c_device_pcm = {
+       .name             = "s3c24xx-pcm-audio",
+       .id               = -1,
+       .dev              = {
+               .dma_mask = &s3c_device_audio_dmamask,
+               .coherent_dma_mask = 0xffffffffUL
+       }
+};
+EXPORT_SYMBOL(s3c_device_pcm);
+
index d9a03555f88bdfed473a2780774436eb7872e3e7..362fc76ee726d0a76865245b342cbb310442357f 100644 (file)
@@ -256,6 +256,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
        &s3c_device_fb,
        &s3c_device_ohci,
        &s3c_device_usb_hsotg,
+       &s3c_device_pcm,
        &s3c64xx_device_iisv4,
 
 #ifdef CONFIG_REGULATOR
index 0c2cc5cd4d83ac6ec5129dcba1a896eab8230f00..7c479e4fa999136363a16fa634726bcf1e5831d6 100644 (file)
@@ -49,9 +49,9 @@ static const char *audmux_port_string(int port)
 {
        switch (port) {
        case MX31_AUDMUX_PORT1_SSI0:
-               return "imx-ssi.0";
+               return "imx-ssi-dai.0";
        case MX31_AUDMUX_PORT2_SSI1:
-               return "imx-ssi.1";
+               return "imx-ssi-dai.1";
        case MX31_AUDMUX_PORT3_SSI_PINS_3:
                return "SSI3";
        case MX31_AUDMUX_PORT4_SSI_PINS_4:
index b4ff6a11a8f2862dbc2f0daf1c70167b50284145..5b20103e68eb176672e09743545bae1a9b346ddf 100644 (file)
 #include <mach/hardware.h>
 #include <plat/clock.h>
 
+/* macro for building platform_device for McBSP ports */
+#define OMAP_MCBSP_PLATFORM_DEVICE(port_nr)            \
+static struct platform_device omap_mcbsp##port_nr = {  \
+       .name   = "omap-mcbsp-dai",                     \
+       .id     = OMAP_MCBSP##port_nr,                  \
+}
+
 #define OMAP7XX_MCBSP1_BASE    0xfffb1000
 #define OMAP7XX_MCBSP2_BASE    0xfffb1800
 
index 452e18438b41b21546e5ae52c7b0b25e74078032..9f8ee5e38615c802347de82526c7e26fc57f8226 100644 (file)
@@ -481,7 +481,7 @@ static struct resource s3c_ac97_resource[] = {
        },
 };
 
-static u64 s3c_device_ac97_dmamask = 0xffffffffUL;
+static u64 s3c_device_audio_dmamask = 0xffffffffUL;
 
 struct platform_device s3c_device_ac97 = {
        .name             = "s3c-ac97",
@@ -489,11 +489,37 @@ struct platform_device s3c_device_ac97 = {
        .num_resources    = ARRAY_SIZE(s3c_ac97_resource),
        .resource         = s3c_ac97_resource,
        .dev              = {
-               .dma_mask = &s3c_device_ac97_dmamask,
+               .dma_mask = &s3c_device_audio_dmamask,
                .coherent_dma_mask = 0xffffffffUL
        }
 };
 
 EXPORT_SYMBOL(s3c_device_ac97);
 
+/* ASoC PCM DMA */
+
+struct platform_device s3c_device_pcm = {
+       .name             = "s3c24xx-pcm-audio",
+       .id               = -1,
+       .dev              = {
+               .dma_mask = &s3c_device_audio_dmamask,
+               .coherent_dma_mask = 0xffffffffUL
+       }
+};
+
+EXPORT_SYMBOL(s3c_device_pcm);
+
+/* ASoC I2S */
+
+struct platform_device s3c2412_device_iis = {
+       .name             = "s3c2412-iis",
+       .id               = -1,
+       .dev              = {
+               .dma_mask = &s3c_device_audio_dmamask,
+               .coherent_dma_mask = 0xffffffffUL
+       }
+};
+
+EXPORT_SYMBOL(s3c2412_device_iis);
+
 #endif // CONFIG_CPU_S32440
index e6144e4b91189fa9596bc2c73a335d1b252d0d6d..9ea6786d459d6d272135ed939bd4f6c0ed816676 100644 (file)
@@ -32,6 +32,8 @@ extern struct platform_device s3c64xx_device_iisv4;
 extern struct platform_device s3c64xx_device_spi0;
 extern struct platform_device s3c64xx_device_spi1;
 
+extern struct platform_device s3c_device_pcm;
+
 extern struct platform_device s3c64xx_device_pcm0;
 extern struct platform_device s3c64xx_device_pcm1;
 
index 9535ce68caaee41331554d2a330a783b503e6eb1..83c3218cb4da2717b9a375ab904ddc8879e9b038 100644 (file)
 
                ssi@16100 {
                        compatible = "fsl,mpc8610-ssi";
+                       status = "disabled";
                        cell-index = <1>;
                        reg = <0x16100 0x100>;
                        interrupt-parent = <&mpic>;
diff --git a/arch/powerpc/include/asm/fsl_guts.h b/arch/powerpc/include/asm/fsl_guts.h
new file mode 100644 (file)
index 0000000..bebd124
--- /dev/null
@@ -0,0 +1,197 @@
+/**
+ * Freecale 85xx and 86xx Global Utilties register set
+ *
+ * Authors: Jeff Brown
+ *          Timur Tabi <timur@freescale.com>
+ *
+ * Copyright 2004,2007 Freescale Semiconductor, Inc
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+
+#ifndef __ASM_POWERPC_FSL_GUTS_H__
+#define __ASM_POWERPC_FSL_GUTS_H__
+#ifdef __KERNEL__
+
+/*
+ * These #ifdefs are safe because it's not possible to build a kernel that
+ * runs on e500 and e600 cores.
+ */
+
+#if !defined(CONFIG_PPC_85xx) && !defined(CONFIG_PPC_86xx)
+#error Only 85xx and 86xx SOCs are supported
+#endif
+
+/**
+ * Global Utility Registers.
+ *
+ * Not all registers defined in this structure are available on all chips, so
+ * you are expected to know whether a given register actually exists on your
+ * chip before you access it.
+ *
+ * Also, some registers are similar on different chips but have slightly
+ * different names.  In these cases, one name is chosen to avoid extraneous
+ * #ifdefs.
+ */
+#ifdef CONFIG_PPC_85xx
+struct ccsr_guts_85xx {
+#else
+struct ccsr_guts_86xx {
+#endif
+       __be32  porpllsr;       /* 0x.0000 - POR PLL Ratio Status Register */
+       __be32  porbmsr;        /* 0x.0004 - POR Boot Mode Status Register */
+       __be32  porimpscr;      /* 0x.0008 - POR I/O Impedance Status and Control Register */
+       __be32  pordevsr;       /* 0x.000c - POR I/O Device Status Register */
+       __be32  pordbgmsr;      /* 0x.0010 - POR Debug Mode Status Register */
+       __be32  pordevsr2;      /* 0x.0014 - POR device status register 2 */
+       u8      res018[0x20 - 0x18];
+       __be32  porcir;         /* 0x.0020 - POR Configuration Information Register */
+       u8      res024[0x30 - 0x24];
+       __be32  gpiocr;         /* 0x.0030 - GPIO Control Register */
+       u8      res034[0x40 - 0x34];
+       __be32  gpoutdr;        /* 0x.0040 - General-Purpose Output Data Register */
+       u8      res044[0x50 - 0x44];
+       __be32  gpindr;         /* 0x.0050 - General-Purpose Input Data Register */
+       u8      res054[0x60 - 0x54];
+       __be32  pmuxcr;         /* 0x.0060 - Alternate Function Signal Multiplex Control */
+        __be32  pmuxcr2;       /* 0x.0064 - Alternate function signal multiplex control 2 */
+        __be32  dmuxcr;                /* 0x.0068 - DMA Mux Control Register */
+        u8     res06c[0x70 - 0x6c];
+       __be32  devdisr;        /* 0x.0070 - Device Disable Control */
+       __be32  devdisr2;       /* 0x.0074 - Device Disable Control 2 */
+       u8      res078[0x7c - 0x78];
+       __be32  pmjcr;          /* 0x.007c - 4 Power Management Jog Control Register */
+       __be32  powmgtcsr;      /* 0x.0080 - Power Management Status and Control Register */
+       __be32  pmrccr;         /* 0x.0084 - Power Management Reset Counter Configuration Register */
+       __be32  pmpdccr;        /* 0x.0088 - Power Management Power Down Counter Configuration Register */
+       __be32  pmcdr;          /* 0x.008c - 4Power management clock disable register */
+       __be32  mcpsumr;        /* 0x.0090 - Machine Check Summary Register */
+       __be32  rstrscr;        /* 0x.0094 - Reset Request Status and Control Register */
+       __be32  ectrstcr;       /* 0x.0098 - Exception reset control register */
+       __be32  autorstsr;      /* 0x.009c - Automatic reset status register */
+       __be32  pvr;            /* 0x.00a0 - Processor Version Register */
+       __be32  svr;            /* 0x.00a4 - System Version Register */
+       u8      res0a8[0xb0 - 0xa8];
+       __be32  rstcr;          /* 0x.00b0 - Reset Control Register */
+       u8      res0b4[0xc0 - 0xb4];
+#ifdef CONFIG_PPC_85xx
+       __be32  iovselsr;       /* 0x.00c0 - I/O voltage select status register */
+#else
+       __be32  elbcvselcr;     /* 0x.00c0 - eLBC Voltage Select Ctrl Reg */
+#endif
+       u8      res0c4[0x224 - 0xc4];
+       __be32  iodelay1;       /* 0x.0224 - IO delay control register 1 */
+       __be32  iodelay2;       /* 0x.0228 - IO delay control register 2 */
+       u8      res22c[0x800 - 0x22c];
+       __be32  clkdvdr;        /* 0x.0800 - Clock Divide Register */
+       u8      res804[0x900 - 0x804];
+       __be32  ircr;           /* 0x.0900 - Infrared Control Register */
+       u8      res904[0x908 - 0x904];
+       __be32  dmacr;          /* 0x.0908 - DMA Control Register */
+       u8      res90c[0x914 - 0x90c];
+       __be32  elbccr;         /* 0x.0914 - eLBC Control Register */
+       u8      res918[0xb20 - 0x918];
+       __be32  ddr1clkdr;      /* 0x.0b20 - DDR1 Clock Disable Register */
+       __be32  ddr2clkdr;      /* 0x.0b24 - DDR2 Clock Disable Register */
+       __be32  ddrclkdr;       /* 0x.0b28 - DDR Clock Disable Register */
+       u8      resb2c[0xe00 - 0xb2c];
+       __be32  clkocr;         /* 0x.0e00 - Clock Out Select Register */
+       u8      rese04[0xe10 - 0xe04];
+       __be32  ddrdllcr;       /* 0x.0e10 - DDR DLL Control Register */
+       u8      rese14[0xe20 - 0xe14];
+       __be32  lbcdllcr;       /* 0x.0e20 - LBC DLL Control Register */
+       __be32  cpfor;          /* 0x.0e24 - L2 charge pump fuse override register */
+       u8      rese28[0xf04 - 0xe28];
+       __be32  srds1cr0;       /* 0x.0f04 - SerDes1 Control Register 0 */
+       __be32  srds1cr1;       /* 0x.0f08 - SerDes1 Control Register 0 */
+       u8      resf0c[0xf2c - 0xf0c];
+       __be32  itcr;           /* 0x.0f2c - Internal transaction control register */
+       u8      resf30[0xf40 - 0xf30];
+       __be32  srds2cr0;       /* 0x.0f40 - SerDes2 Control Register 0 */
+       __be32  srds2cr1;       /* 0x.0f44 - SerDes2 Control Register 0 */
+} __attribute__ ((packed));
+
+#ifdef CONFIG_PPC_86xx
+
+#define CCSR_GUTS_DMACR_DEV_SSI        0       /* DMA controller/channel set to SSI */
+#define CCSR_GUTS_DMACR_DEV_IR 1       /* DMA controller/channel set to IR */
+
+/*
+ * Set the DMACR register in the GUTS
+ *
+ * The DMACR register determines the source of initiated transfers for each
+ * channel on each DMA controller.  Rather than have a bunch of repetitive
+ * macros for the bit patterns, we just have a function that calculates
+ * them.
+ *
+ * guts: Pointer to GUTS structure
+ * co: The DMA controller (0 or 1)
+ * ch: The channel on the DMA controller (0, 1, 2, or 3)
+ * device: The device to set as the source (CCSR_GUTS_DMACR_DEV_xx)
+ */
+static inline void guts_set_dmacr(struct ccsr_guts_86xx __iomem *guts,
+       unsigned int co, unsigned int ch, unsigned int device)
+{
+       unsigned int shift = 16 + (8 * (1 - co) + 2 * (3 - ch));
+
+       clrsetbits_be32(&guts->dmacr, 3 << shift, device << shift);
+}
+
+#define CCSR_GUTS_PMUXCR_LDPSEL                0x00010000
+#define CCSR_GUTS_PMUXCR_SSI1_MASK     0x0000C000      /* Bitmask for SSI1 */
+#define CCSR_GUTS_PMUXCR_SSI1_LA       0x00000000      /* Latched address */
+#define CCSR_GUTS_PMUXCR_SSI1_HI       0x00004000      /* High impedance */
+#define CCSR_GUTS_PMUXCR_SSI1_SSI      0x00008000      /* Used for SSI1 */
+#define CCSR_GUTS_PMUXCR_SSI2_MASK     0x00003000      /* Bitmask for SSI2 */
+#define CCSR_GUTS_PMUXCR_SSI2_LA       0x00000000      /* Latched address */
+#define CCSR_GUTS_PMUXCR_SSI2_HI       0x00001000      /* High impedance */
+#define CCSR_GUTS_PMUXCR_SSI2_SSI      0x00002000      /* Used for SSI2 */
+#define CCSR_GUTS_PMUXCR_LA_22_25_LA   0x00000000      /* Latched Address */
+#define CCSR_GUTS_PMUXCR_LA_22_25_HI   0x00000400      /* High impedance */
+#define CCSR_GUTS_PMUXCR_DBGDRV                0x00000200      /* Signals not driven */
+#define CCSR_GUTS_PMUXCR_DMA2_0                0x00000008
+#define CCSR_GUTS_PMUXCR_DMA2_3                0x00000004
+#define CCSR_GUTS_PMUXCR_DMA1_0                0x00000002
+#define CCSR_GUTS_PMUXCR_DMA1_3                0x00000001
+
+/*
+ * Set the DMA external control bits in the GUTS
+ *
+ * The DMA external control bits in the PMUXCR are only meaningful for
+ * channels 0 and 3.  Any other channels are ignored.
+ *
+ * guts: Pointer to GUTS structure
+ * co: The DMA controller (0 or 1)
+ * ch: The channel on the DMA controller (0, 1, 2, or 3)
+ * value: the new value for the bit (0 or 1)
+ */
+static inline void guts_set_pmuxcr_dma(struct ccsr_guts_86xx __iomem *guts,
+       unsigned int co, unsigned int ch, unsigned int value)
+{
+       if ((ch == 0) || (ch == 3)) {
+               unsigned int shift = 2 * (co + 1) - (ch & 1) - 1;
+
+               clrsetbits_be32(&guts->pmuxcr, 1 << shift, value << shift);
+       }
+}
+
+#define CCSR_GUTS_CLKDVDR_PXCKEN       0x80000000
+#define CCSR_GUTS_CLKDVDR_SSICKEN      0x20000000
+#define CCSR_GUTS_CLKDVDR_PXCKINV      0x10000000
+#define CCSR_GUTS_CLKDVDR_PXCKDLY_SHIFT 25
+#define CCSR_GUTS_CLKDVDR_PXCKDLY_MASK 0x06000000
+#define CCSR_GUTS_CLKDVDR_PXCKDLY(x) \
+       (((x) & 3) << CCSR_GUTS_CLKDVDR_PXCKDLY_SHIFT)
+#define CCSR_GUTS_CLKDVDR_PXCLK_SHIFT  16
+#define CCSR_GUTS_CLKDVDR_PXCLK_MASK   0x001F0000
+#define CCSR_GUTS_CLKDVDR_PXCLK(x) (((x) & 31) << CCSR_GUTS_CLKDVDR_PXCLK_SHIFT)
+#define CCSR_GUTS_CLKDVDR_SSICLK_MASK  0x000000FF
+#define CCSR_GUTS_CLKDVDR_SSICLK(x) ((x) & CCSR_GUTS_CLKDVDR_SSICLK_MASK)
+
+#endif
+
+#endif
+#endif
diff --git a/arch/powerpc/include/asm/immap_86xx.h b/arch/powerpc/include/asm/immap_86xx.h
deleted file mode 100644 (file)
index 0f165e5..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * MPC86xx Internal Memory Map
- *
- * Authors: Jeff Brown
- *          Timur Tabi <timur@freescale.com>
- *
- * Copyright 2004,2007 Freescale Semiconductor, Inc
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
- *
- * This header file defines structures for various 86xx SOC devices that are
- * used by multiple source files.
- */
-
-#ifndef __ASM_POWERPC_IMMAP_86XX_H__
-#define __ASM_POWERPC_IMMAP_86XX_H__
-#ifdef __KERNEL__
-
-/* Global Utility Registers */
-struct ccsr_guts {
-       __be32  porpllsr;       /* 0x.0000 - POR PLL Ratio Status Register */
-       __be32  porbmsr;        /* 0x.0004 - POR Boot Mode Status Register */
-       __be32  porimpscr;      /* 0x.0008 - POR I/O Impedance Status and Control Register */
-       __be32  pordevsr;       /* 0x.000c - POR I/O Device Status Register */
-       __be32  pordbgmsr;      /* 0x.0010 - POR Debug Mode Status Register */
-       u8      res1[0x20 - 0x14];
-       __be32  porcir;         /* 0x.0020 - POR Configuration Information Register */
-       u8      res2[0x30 - 0x24];
-       __be32  gpiocr;         /* 0x.0030 - GPIO Control Register */
-       u8      res3[0x40 - 0x34];
-       __be32  gpoutdr;        /* 0x.0040 - General-Purpose Output Data Register */
-       u8      res4[0x50 - 0x44];
-       __be32  gpindr;         /* 0x.0050 - General-Purpose Input Data Register */
-       u8      res5[0x60 - 0x54];
-       __be32  pmuxcr;         /* 0x.0060 - Alternate Function Signal Multiplex Control */
-       u8      res6[0x70 - 0x64];
-       __be32  devdisr;        /* 0x.0070 - Device Disable Control */
-       __be32  devdisr2;       /* 0x.0074 - Device Disable Control 2 */
-       u8      res7[0x80 - 0x78];
-       __be32  powmgtcsr;      /* 0x.0080 - Power Management Status and Control Register */
-       u8      res8[0x90 - 0x84];
-       __be32  mcpsumr;        /* 0x.0090 - Machine Check Summary Register */
-       __be32  rstrscr;        /* 0x.0094 - Reset Request Status and Control Register */
-       u8      res9[0xA0 - 0x98];
-       __be32  pvr;            /* 0x.00a0 - Processor Version Register */
-       __be32  svr;            /* 0x.00a4 - System Version Register */
-       u8      res10[0xB0 - 0xA8];
-       __be32  rstcr;          /* 0x.00b0 - Reset Control Register */
-       u8      res11[0xC0 - 0xB4];
-       __be32  elbcvselcr;     /* 0x.00c0 - eLBC Voltage Select Ctrl Reg */
-       u8      res12[0x800 - 0xC4];
-       __be32  clkdvdr;        /* 0x.0800 - Clock Divide Register */
-       u8      res13[0x900 - 0x804];
-       __be32  ircr;           /* 0x.0900 - Infrared Control Register */
-       u8      res14[0x908 - 0x904];
-       __be32  dmacr;          /* 0x.0908 - DMA Control Register */
-       u8      res15[0x914 - 0x90C];
-       __be32  elbccr;         /* 0x.0914 - eLBC Control Register */
-       u8      res16[0xB20 - 0x918];
-       __be32  ddr1clkdr;      /* 0x.0b20 - DDR1 Clock Disable Register */
-       __be32  ddr2clkdr;      /* 0x.0b24 - DDR2 Clock Disable Register */
-       __be32  ddrclkdr;       /* 0x.0b28 - DDR Clock Disable Register */
-       u8      res17[0xE00 - 0xB2C];
-       __be32  clkocr;         /* 0x.0e00 - Clock Out Select Register */
-       u8      res18[0xE10 - 0xE04];
-       __be32  ddrdllcr;       /* 0x.0e10 - DDR DLL Control Register */
-       u8      res19[0xE20 - 0xE14];
-       __be32  lbcdllcr;       /* 0x.0e20 - LBC DLL Control Register */
-       u8      res20[0xF04 - 0xE24];
-       __be32  srds1cr0;       /* 0x.0f04 - SerDes1 Control Register 0 */
-       __be32  srds1cr1;       /* 0x.0f08 - SerDes1 Control Register 0 */
-       u8      res21[0xF40 - 0xF0C];
-       __be32  srds2cr0;       /* 0x.0f40 - SerDes1 Control Register 0 */
-       __be32  srds2cr1;       /* 0x.0f44 - SerDes1 Control Register 0 */
-} __attribute__ ((packed));
-
-#define CCSR_GUTS_DMACR_DEV_SSI        0       /* DMA controller/channel set to SSI */
-#define CCSR_GUTS_DMACR_DEV_IR 1       /* DMA controller/channel set to IR */
-
-/*
- * Set the DMACR register in the GUTS
- *
- * The DMACR register determines the source of initiated transfers for each
- * channel on each DMA controller.  Rather than have a bunch of repetitive
- * macros for the bit patterns, we just have a function that calculates
- * them.
- *
- * guts: Pointer to GUTS structure
- * co: The DMA controller (0 or 1)
- * ch: The channel on the DMA controller (0, 1, 2, or 3)
- * device: The device to set as the source (CCSR_GUTS_DMACR_DEV_xx)
- */
-static inline void guts_set_dmacr(struct ccsr_guts __iomem *guts,
-       unsigned int co, unsigned int ch, unsigned int device)
-{
-       unsigned int shift = 16 + (8 * (1 - co) + 2 * (3 - ch));
-
-       clrsetbits_be32(&guts->dmacr, 3 << shift, device << shift);
-}
-
-#define CCSR_GUTS_PMUXCR_LDPSEL                0x00010000
-#define CCSR_GUTS_PMUXCR_SSI1_MASK     0x0000C000      /* Bitmask for SSI1 */
-#define CCSR_GUTS_PMUXCR_SSI1_LA       0x00000000      /* Latched address */
-#define CCSR_GUTS_PMUXCR_SSI1_HI       0x00004000      /* High impedance */
-#define CCSR_GUTS_PMUXCR_SSI1_SSI      0x00008000      /* Used for SSI1 */
-#define CCSR_GUTS_PMUXCR_SSI2_MASK     0x00003000      /* Bitmask for SSI2 */
-#define CCSR_GUTS_PMUXCR_SSI2_LA       0x00000000      /* Latched address */
-#define CCSR_GUTS_PMUXCR_SSI2_HI       0x00001000      /* High impedance */
-#define CCSR_GUTS_PMUXCR_SSI2_SSI      0x00002000      /* Used for SSI2 */
-#define CCSR_GUTS_PMUXCR_LA_22_25_LA   0x00000000      /* Latched Address */
-#define CCSR_GUTS_PMUXCR_LA_22_25_HI   0x00000400      /* High impedance */
-#define CCSR_GUTS_PMUXCR_DBGDRV                0x00000200      /* Signals not driven */
-#define CCSR_GUTS_PMUXCR_DMA2_0                0x00000008
-#define CCSR_GUTS_PMUXCR_DMA2_3                0x00000004
-#define CCSR_GUTS_PMUXCR_DMA1_0                0x00000002
-#define CCSR_GUTS_PMUXCR_DMA1_3                0x00000001
-
-/*
- * Set the DMA external control bits in the GUTS
- *
- * The DMA external control bits in the PMUXCR are only meaningful for
- * channels 0 and 3.  Any other channels are ignored.
- *
- * guts: Pointer to GUTS structure
- * co: The DMA controller (0 or 1)
- * ch: The channel on the DMA controller (0, 1, 2, or 3)
- * value: the new value for the bit (0 or 1)
- */
-static inline void guts_set_pmuxcr_dma(struct ccsr_guts __iomem *guts,
-       unsigned int co, unsigned int ch, unsigned int value)
-{
-       if ((ch == 0) || (ch == 3)) {
-               unsigned int shift = 2 * (co + 1) - (ch & 1) - 1;
-
-               clrsetbits_be32(&guts->pmuxcr, 1 << shift, value << shift);
-       }
-}
-
-#define CCSR_GUTS_CLKDVDR_PXCKEN       0x80000000
-#define CCSR_GUTS_CLKDVDR_SSICKEN      0x20000000
-#define CCSR_GUTS_CLKDVDR_PXCKINV      0x10000000
-#define CCSR_GUTS_CLKDVDR_PXCKDLY_SHIFT 25
-#define CCSR_GUTS_CLKDVDR_PXCKDLY_MASK 0x06000000
-#define CCSR_GUTS_CLKDVDR_PXCKDLY(x) \
-       (((x) & 3) << CCSR_GUTS_CLKDVDR_PXCKDLY_SHIFT)
-#define CCSR_GUTS_CLKDVDR_PXCLK_SHIFT  16
-#define CCSR_GUTS_CLKDVDR_PXCLK_MASK   0x001F0000
-#define CCSR_GUTS_CLKDVDR_PXCLK(x) (((x) & 31) << CCSR_GUTS_CLKDVDR_PXCLK_SHIFT)
-#define CCSR_GUTS_CLKDVDR_SSICLK_MASK  0x000000FF
-#define CCSR_GUTS_CLKDVDR_SSICLK(x) ((x) & CCSR_GUTS_CLKDVDR_SSICLK_MASK)
-
-#endif /* __ASM_POWERPC_IMMAP_86XX_H__ */
-#endif /* __KERNEL__ */
index 4f9b2afc24e820d75b819555f7f667f94bd73f69..014dd4ad0d4fecede04221e5348fc78e023d76e2 100644 (file)
@@ -271,7 +271,7 @@ static struct platform_driver twl4030_vibra_driver = {
        .probe          = twl4030_vibra_probe,
        .remove         = __devexit_p(twl4030_vibra_remove),
        .driver         = {
-               .name   = "twl4030_codec_vibra",
+               .name   = "twl4030-vibra",
                .owner  = THIS_MODULE,
 #ifdef CONFIG_PM
                .pm     = &twl4030_vibra_pm_ops,
@@ -291,7 +291,7 @@ static void __exit twl4030_vibra_exit(void)
 }
 module_exit(twl4030_vibra_exit);
 
-MODULE_ALIAS("platform:twl4030_codec_vibra");
+MODULE_ALIAS("platform:twl4030-vibra");
 
 MODULE_DESCRIPTION("TWL4030 Vibra driver");
 MODULE_LICENSE("GPL");
index 720e099e506df1297a5e71a2047fe9fae52fe98a..5d0fb60a4c147138833506588d6329b1e716e1ae 100644 (file)
@@ -698,17 +698,17 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
 
        if (twl_has_codec() && pdata->codec && twl_class_is_4030()) {
                sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
-               child = add_child(sub_chip_id, "twl4030_codec",
+               child = add_child(sub_chip_id, "twl4030-audio",
                                pdata->codec, sizeof(*pdata->codec),
                                false, 0, 0);
                if (IS_ERR(child))
                        return PTR_ERR(child);
        }
 
-       /* Phoenix*/
+       /* Phoenix codec driver is probed directly atm */
        if (twl_has_codec() && pdata->codec && twl_class_is_6030()) {
                sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid;
-               child = add_child(sub_chip_id, "twl6040_codec",
+               child = add_child(sub_chip_id, "twl6040-codec",
                                pdata->codec, sizeof(*pdata->codec),
                                false, 0, 0);
                if (IS_ERR(child))
index add6f67d80323a42824709337958fe90df55e443..9a4b196d6deb64751d8e4981bb81de8074f5e231 100644 (file)
@@ -207,14 +207,14 @@ static int __devinit twl4030_codec_probe(struct platform_device *pdev)
 
        if (pdata->audio) {
                cell = &codec->cells[childs];
-               cell->name = "twl4030_codec_audio";
+               cell->name = "twl4030-codec";
                cell->platform_data = pdata->audio;
                cell->data_size = sizeof(*pdata->audio);
                childs++;
        }
        if (pdata->vibra) {
                cell = &codec->cells[childs];
-               cell->name = "twl4030_codec_vibra";
+               cell->name = "twl4030-vibra";
                cell->platform_data = pdata->vibra;
                cell->data_size = sizeof(*pdata->vibra);
                childs++;
@@ -249,14 +249,14 @@ static int __devexit twl4030_codec_remove(struct platform_device *pdev)
        return 0;
 }
 
-MODULE_ALIAS("platform:twl4030_codec");
+MODULE_ALIAS("platform:twl4030-audio");
 
 static struct platform_driver twl4030_codec_driver = {
        .probe          = twl4030_codec_probe,
        .remove         = __devexit_p(twl4030_codec_remove),
        .driver         = {
                .owner  = THIS_MODULE,
-               .name   = "twl4030_codec",
+               .name   = "twl4030-audio",
        },
 };
 
index 6de90bfc6acde5a2728cb4d95091ab2dd7115822..4793d8a7f48086e58bac27204e8245dcc40c558d 100644 (file)
@@ -553,8 +553,12 @@ extern void twl4030_power_init(struct twl4030_power_data *triton2_scripts);
 extern int twl4030_remove_script(u8 flags);
 
 struct twl4030_codec_audio_data {
-       unsigned int    audio_mclk;
+       unsigned int audio_mclk; /* not used, will be removed */
+       unsigned int digimic_delay; /* in ms */
        unsigned int ramp_delay_value;
+       unsigned int offset_cncl_path;
+       unsigned int check_defaults:1;
+       unsigned int reset_registers:1;
        unsigned int hs_extmute:1;
        void (*set_hs_extmute)(int mute);
 };
index 9d51d6f358930c68d7c8264e4e0e047a1b15343b..3fd6456d07d796696f99d65f73440c8443c0c9c1 100644 (file)
@@ -114,7 +114,7 @@ struct sh_fsi_platform_info {
        int (*set_rate)(int is_porta, int rate); /* for master mode */
 };
 
-extern struct snd_soc_dai fsi_soc_dai[2];
-extern struct snd_soc_platform fsi_soc_platform;
+extern struct snd_soc_dai_driver fsi_soc_dai[2];
+extern struct snd_soc_platform_driver fsi_soc_platform;
 
 #endif /* __SOUND_FSI_H */
index 377693a143855fe24a827aaaa035f1c55cccfe61..e7b680248006524012531c0e78d165e01e09ea4b 100644 (file)
@@ -91,15 +91,17 @@ struct snd_pcm_substream;
                                SNDRV_PCM_FMTBIT_S32_LE |\
                                SNDRV_PCM_FMTBIT_S32_BE)
 
-struct snd_soc_dai_ops;
+struct snd_soc_dai_driver;
 struct snd_soc_dai;
 struct snd_ac97_bus_ops;
 
 /* Digital Audio Interface registration */
-int snd_soc_register_dai(struct snd_soc_dai *dai);
-void snd_soc_unregister_dai(struct snd_soc_dai *dai);
-int snd_soc_register_dais(struct snd_soc_dai *dai, size_t count);
-void snd_soc_unregister_dais(struct snd_soc_dai *dai, size_t count);
+int snd_soc_register_dai(struct device *dev,
+               struct snd_soc_dai_driver *dai_drv);
+void snd_soc_unregister_dai(struct device *dev);
+int snd_soc_register_dais(struct device *dev,
+               struct snd_soc_dai_driver *dai_drv, size_t count);
+void snd_soc_unregister_dais(struct device *dev, size_t count);
 
 /* Digital Audio Interface clocking API.*/
 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
@@ -126,16 +128,6 @@ int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate);
 /* Digital Audio Interface mute */
 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute);
 
-/*
- * Digital Audio Interface.
- *
- * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97
- * operations and capabilities. Codec and platform drivers will register this
- * structure for every DAI they have.
- *
- * This structure covers the clocking, formating and ALSA operations for each
- * interface.
- */
 struct snd_soc_dai_ops {
        /*
         * DAI clocking configuration, all optional.
@@ -191,24 +183,24 @@ struct snd_soc_dai_ops {
 };
 
 /*
- * Digital Audio Interface runtime data.
+ * Digital Audio Interface Driver.
  *
- * Holds runtime data for a DAI.
+ * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97
+ * operations and capabilities. Codec and platform drivers will register this
+ * structure for every DAI they have.
+ *
+ * This structure covers the clocking, formating and ALSA operations for each
+ * interface.
  */
-struct snd_soc_dai {
+struct snd_soc_dai_driver {
        /* DAI description */
-       char *name;
+       const char *name;
        unsigned int id;
        int ac97_control;
 
-       struct device *dev;
-       void *ac97_pdata;       /* platform_data for the ac97 codec */
-
-       /* DAI callbacks */
-       int (*probe)(struct platform_device *pdev,
-                    struct snd_soc_dai *dai);
-       void (*remove)(struct platform_device *pdev,
-                      struct snd_soc_dai *dai);
+       /* DAI driver callbacks */
+       int (*probe)(struct snd_soc_dai *dai);
+       int (*remove)(struct snd_soc_dai *dai);
        int (*suspend)(struct snd_soc_dai *dai);
        int (*resume)(struct snd_soc_dai *dai);
 
@@ -219,26 +211,51 @@ struct snd_soc_dai {
        struct snd_soc_pcm_stream capture;
        struct snd_soc_pcm_stream playback;
        unsigned int symmetric_rates:1;
+};
+
+/*
+ * Digital Audio Interface runtime data.
+ *
+ * Holds runtime data for a DAI.
+ */
+struct snd_soc_dai {
+       const char *name;
+       int id;
+       struct device *dev;
+       void *ac97_pdata;       /* platform_data for the ac97 codec */
+
+       /* driver ops */
+       struct snd_soc_dai_driver *driver;
 
        /* DAI runtime info */
-       struct snd_soc_codec *codec;
+       unsigned int capture_active:1;          /* stream is in use */
+       unsigned int playback_active:1;         /* stream is in use */
+       unsigned int symmetric_rates:1;
+       struct snd_pcm_runtime *runtime;
        unsigned int active;
        unsigned char pop_wait:1;
+       unsigned char probed:1;
 
-       /* DAI private data */
-       void *private_data;
+       /* DAI DMA data */
+       void *playback_dma_data;
+       void *capture_dma_data;
 
-       /* parent platform */
-       struct snd_soc_platform *platform;
+       /* parent platform/codec */
+       union {
+               struct snd_soc_platform *platform;
+               struct snd_soc_codec *codec;
+       };
+       struct snd_soc_card *card;
 
        struct list_head list;
+       struct list_head card_list;
 };
 
 static inline void *snd_soc_dai_get_dma_data(const struct snd_soc_dai *dai,
                                             const struct snd_pcm_substream *ss)
 {
        return (ss->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
-               dai->playback.dma_data : dai->capture.dma_data;
+               dai->playback_dma_data : dai->capture_dma_data;
 }
 
 static inline void snd_soc_dai_set_dma_data(struct snd_soc_dai *dai,
@@ -246,9 +263,20 @@ static inline void snd_soc_dai_set_dma_data(struct snd_soc_dai *dai,
                                            void *data)
 {
        if (ss->stream == SNDRV_PCM_STREAM_PLAYBACK)
-               dai->playback.dma_data = data;
+               dai->playback_dma_data = data;
        else
-               dai->capture.dma_data = data;
+               dai->capture_dma_data = data;
+}
+
+static inline void snd_soc_dai_set_drvdata(struct snd_soc_dai *dai,
+               void *data)
+{
+       dev_set_drvdata(dai->dev, data);
+}
+
+static inline void *snd_soc_dai_get_drvdata(struct snd_soc_dai *dai)
+{
+       return dev_get_drvdata(dai->dev);
 }
 
 #endif
index c5d9987bc897adc5ec87a06ec57cadf2fd627471..c4a445651ca09ddcb7ab1ca8fc209eaf7aaaaaf0 100644 (file)
@@ -322,14 +322,14 @@ int snd_soc_dapm_new_controls(struct snd_soc_codec *codec,
 
 /* dapm path setup */
 int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec);
-void snd_soc_dapm_free(struct snd_soc_device *socdev);
+void snd_soc_dapm_free(struct snd_soc_codec *codec);
 int snd_soc_dapm_add_routes(struct snd_soc_codec *codec,
                            const struct snd_soc_dapm_route *route, int num);
 
 /* dapm events */
-int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream,
-       int event);
-void snd_soc_dapm_shutdown(struct snd_soc_device *socdev);
+int snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd,
+       const char *stream, int event);
+void snd_soc_dapm_shutdown(struct snd_soc_card *card);
 
 /* dapm sys fs - used by the core */
 int snd_soc_dapm_sys_add(struct device *dev);
diff --git a/include/sound/soc-of-simple.h b/include/sound/soc-of-simple.h
deleted file mode 100644 (file)
index a064e19..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * OF helpers for ALSA SoC
- *
- * Copyright (C) 2008, Secret Lab Technologies Ltd.
- */
-
-#ifndef _INCLUDE_SOC_OF_H_
-#define _INCLUDE_SOC_OF_H_
-
-#if defined(CONFIG_SND_SOC_OF_SIMPLE) || defined(CONFIG_SND_SOC_OF_SIMPLE_MODULE)
-
-#include <linux/of.h>
-#include <sound/soc.h>
-
-int of_snd_soc_register_codec(struct snd_soc_codec_device *codec_dev,
-                             void *codec_data, struct snd_soc_dai *dai,
-                             struct device_node *node);
-
-int of_snd_soc_register_platform(struct snd_soc_platform *platform,
-                                struct device_node *node,
-                                struct snd_soc_dai *cpu_dai);
-
-#endif
-
-#endif /* _INCLUDE_SOC_OF_H_ */
index 65e9d03ed4f5e0c34ca833d6e6570de05fc78125..d31e8b7b2d5e453969adff8151b796b6b60879cb 100644 (file)
@@ -228,13 +228,17 @@ struct snd_soc_ops;
 struct snd_soc_dai_mode;
 struct snd_soc_pcm_runtime;
 struct snd_soc_dai;
+struct snd_soc_dai_driver;
 struct snd_soc_platform;
 struct snd_soc_dai_link;
+struct snd_soc_platform_driver;
 struct snd_soc_codec;
+struct snd_soc_codec_driver;
 struct soc_enum;
 struct snd_soc_ac97_ops;
 struct snd_soc_jack;
 struct snd_soc_jack_pin;
+
 #ifdef CONFIG_GPIOLIB
 struct snd_soc_jack_gpio;
 #endif
@@ -249,19 +253,18 @@ enum snd_soc_control_type {
        SND_SOC_SPI,
 };
 
-int snd_soc_register_platform(struct snd_soc_platform *platform);
-void snd_soc_unregister_platform(struct snd_soc_platform *platform);
-int snd_soc_register_codec(struct snd_soc_codec *codec);
-void snd_soc_unregister_codec(struct snd_soc_codec *codec);
+int snd_soc_register_platform(struct device *dev,
+               struct snd_soc_platform_driver *platform_drv);
+void snd_soc_unregister_platform(struct device *dev);
+int snd_soc_register_codec(struct device *dev,
+               struct snd_soc_codec_driver *codec_drv,
+               struct snd_soc_dai_driver *dai_drv, int num_dai);
+void snd_soc_unregister_codec(struct device *dev);
 int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg);
 int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
                               int addr_bits, int data_bits,
                               enum snd_soc_control_type control);
 
-/* pcm <-> DAI connect */
-void snd_soc_free_pcms(struct snd_soc_device *socdev);
-int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid);
-
 /* Utility functions to get clock rates from various things */
 int snd_soc_calc_frame_size(int sample_size, int channels, int tdm_slots);
 int snd_soc_params_to_frame_size(struct snd_pcm_hw_params *params);
@@ -273,7 +276,7 @@ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
        const struct snd_pcm_hardware *hw);
 
 /* Jack reporting */
-int snd_soc_jack_new(struct snd_soc_card *card, const char *id, int type,
+int snd_soc_jack_new(struct snd_soc_codec *codec, const char *id, int type,
                     struct snd_soc_jack *jack);
 void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);
 int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,
@@ -390,7 +393,7 @@ struct snd_soc_jack_gpio {
 
 struct snd_soc_jack {
        struct snd_jack *jack;
-       struct snd_soc_card *card;
+       struct snd_soc_codec *codec;
        struct list_head pins;
        int status;
        struct blocking_notifier_head notifier;
@@ -398,15 +401,13 @@ struct snd_soc_jack {
 
 /* SoC PCM stream information */
 struct snd_soc_pcm_stream {
-       char *stream_name;
+       const char *stream_name;
        u64 formats;                    /* SNDRV_PCM_FMTBIT_* */
        unsigned int rates;             /* SNDRV_PCM_RATE_* */
        unsigned int rate_min;          /* min rate */
        unsigned int rate_max;          /* max rate */
        unsigned int channels_min;      /* min channels */
        unsigned int channels_max;      /* max channels */
-       unsigned int active;            /* stream is in use */
-       void *dma_data;                 /* used by platform code */
 };
 
 /* SoC audio ops */
@@ -419,44 +420,35 @@ struct snd_soc_ops {
        int (*trigger)(struct snd_pcm_substream *, int);
 };
 
-/* SoC Audio Codec */
+/* SoC Audio Codec device */
 struct snd_soc_codec {
-       char *name;
-       struct module *owner;
-       struct mutex mutex;
+       const char *name;
+       int id;
        struct device *dev;
-       struct snd_soc_device *socdev;
+       struct snd_soc_codec_driver *driver;
 
+       struct mutex mutex;
+       struct snd_soc_card *card;
        struct list_head list;
-
-       /* callbacks */
-       int (*set_bias_level)(struct snd_soc_codec *,
-                             enum snd_soc_bias_level level);
+       struct list_head card_list;
+       int num_dai;
 
        /* runtime */
-       struct snd_card *card;
        struct snd_ac97 *ac97;  /* for ad-hoc ac97 devices */
        unsigned int active;
-       unsigned int pcm_devs;
-       void *drvdata;
+       unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
+       unsigned int cache_only:1;  /* Suppress writes to hardware */
+       unsigned int cache_sync:1; /* Cache needs to be synced to hardware */
+       unsigned int suspended:1; /* Codec is in suspend PM state */
+       unsigned int probed:1; /* Codec has been probed */
+       unsigned int ac97_registered:1; /* Codec has been AC97 registered */
+       unsigned int sysfs_registered:1; /* codec has been sysfs registered */
 
        /* codec IO */
        void *control_data; /* codec control (i2c/3wire) data */
-       unsigned int (*read)(struct snd_soc_codec *, unsigned int);
-       int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
-       int (*display_register)(struct snd_soc_codec *, char *,
-                               size_t, unsigned int);
-       int (*volatile_register)(unsigned int);
-       int (*readable_register)(unsigned int);
        hw_write_t hw_write;
        unsigned int (*hw_read)(struct snd_soc_codec *, unsigned int);
        void *reg_cache;
-       short reg_cache_size;
-       short reg_cache_step;
-
-       unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
-       unsigned int cache_only:1;  /* Suppress writes to hardware */
-       unsigned int cache_sync:1; /* Cache needs to be synced to hardware */
 
        /* dapm */
        u32 pop_time;
@@ -466,10 +458,6 @@ struct snd_soc_codec {
        enum snd_soc_bias_level suspend_bias_level;
        struct delayed_work delayed_work;
 
-       /* codec DAI's */
-       struct snd_soc_dai *dai;
-       unsigned int num_dai;
-
 #ifdef CONFIG_DEBUG_FS
        struct dentry *debugfs_codec_root;
        struct dentry *debugfs_reg;
@@ -478,23 +466,40 @@ struct snd_soc_codec {
 #endif
 };
 
-/* codec device */
-struct snd_soc_codec_device {
-       int (*probe)(struct platform_device *pdev);
-       int (*remove)(struct platform_device *pdev);
-       int (*suspend)(struct platform_device *pdev, pm_message_t state);
-       int (*resume)(struct platform_device *pdev);
+/* codec driver */
+struct snd_soc_codec_driver {
+
+       /* driver ops */
+       int (*probe)(struct snd_soc_codec *);
+       int (*remove)(struct snd_soc_codec *);
+       int (*suspend)(struct snd_soc_codec *,
+                       pm_message_t state);
+       int (*resume)(struct snd_soc_codec *);
+
+       /* codec IO */
+       unsigned int (*read)(struct snd_soc_codec *, unsigned int);
+       int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
+       int (*display_register)(struct snd_soc_codec *, char *,
+                               size_t, unsigned int);
+       int (*volatile_register)(unsigned int);
+       int (*readable_register)(unsigned int);
+       short reg_cache_size;
+       short reg_cache_step;
+       short reg_word_size;
+       const void *reg_cache_default;
+
+       /* codec bias level */
+       int (*set_bias_level)(struct snd_soc_codec *,
+                             enum snd_soc_bias_level level);
 };
 
 /* SoC platform interface */
-struct snd_soc_platform {
-       char *name;
-       struct list_head list;
+struct snd_soc_platform_driver {
 
-       int (*probe)(struct platform_device *pdev);
-       int (*remove)(struct platform_device *pdev);
-       int (*suspend)(struct snd_soc_dai_link *dai_link);
-       int (*resume)(struct snd_soc_dai_link *dai_link);
+       int (*probe)(struct snd_soc_platform *);
+       int (*remove)(struct snd_soc_platform *);
+       int (*suspend)(struct snd_soc_dai *dai);
+       int (*resume)(struct snd_soc_dai *dai);
 
        /* pcm creation and destruction */
        int (*pcm_new)(struct snd_card *, struct snd_soc_dai *,
@@ -509,23 +514,31 @@ struct snd_soc_platform {
                struct snd_soc_dai *);
 
        /* platform stream ops */
-       struct snd_pcm_ops *pcm_ops;
+       struct snd_pcm_ops *ops;
 };
 
-/* SoC machine DAI configuration, glues a codec and cpu DAI together */
-struct snd_soc_dai_link  {
-       char *name;                     /* Codec name */
-       char *stream_name;              /* Stream name */
+struct snd_soc_platform {
+       const char *name;
+       int id;
+       struct device *dev;
+       struct snd_soc_platform_driver *driver;
 
-       /* DAI */
-       struct snd_soc_dai *codec_dai;
-       struct snd_soc_dai *cpu_dai;
+       unsigned int suspended:1; /* platform is suspended */
+       unsigned int probed:1;
 
-       /* machine stream operations */
-       struct snd_soc_ops *ops;
+       struct snd_soc_card *card;
+       struct list_head list;
+       struct list_head card_list;
+};
 
-       /* codec/machine specific init - e.g. add machine controls */
-       int (*init)(struct snd_soc_codec *codec);
+struct snd_soc_dai_link {
+       /* config - must be set by machine driver */
+       const char *name;                       /* Codec name */
+       const char *stream_name;                /* Stream name */
+       const char *codec_name;         /* for multi-codec */
+       const char *platform_name;      /* for multi-platform */
+       const char *cpu_dai_name;
+       const char *codec_dai_name;
 
        /* Keep DAI active over suspend */
        unsigned int ignore_suspend:1;
@@ -533,21 +546,24 @@ struct snd_soc_dai_link  {
        /* Symmetry requirements */
        unsigned int symmetric_rates:1;
 
-       /* Symmetry data - only valid if symmetry is being enforced */
-       unsigned int rate;
+       /* codec/machine specific init - e.g. add machine controls */
+       int (*init)(struct snd_soc_pcm_runtime *rtd);
 
-       /* DAI pcm */
-       struct snd_pcm *pcm;
+       /* machine stream operations */
+       struct snd_soc_ops *ops;
 };
 
 /* SoC card */
 struct snd_soc_card {
-       char *name;
+       const char *name;
        struct device *dev;
+       struct snd_card *snd_card;
+       struct module *owner;
 
        struct list_head list;
+       struct mutex mutex;
 
-       int instantiated;
+       bool instantiated;
 
        int (*probe)(struct platform_device *pdev);
        int (*remove)(struct platform_device *pdev);
@@ -568,28 +584,38 @@ struct snd_soc_card {
        /* CPU <--> Codec DAI links  */
        struct snd_soc_dai_link *dai_link;
        int num_links;
+       struct snd_soc_pcm_runtime *rtd;
+       int num_rtd;
 
-       struct snd_soc_device *socdev;
-
-       struct snd_soc_codec *codec;
-
-       struct snd_soc_platform *platform;
-       struct delayed_work delayed_work;
        struct work_struct deferred_resume_work;
+
+       /* lists of probed devices belonging to this card */
+       struct list_head codec_dev_list;
+       struct list_head platform_dev_list;
+       struct list_head dai_dev_list;
 };
 
-/* SoC Device - the audio subsystem */
-struct snd_soc_device {
-       struct device *dev;
+/* SoC machine DAI configuration, glues a codec and cpu DAI together */
+struct snd_soc_pcm_runtime  {
+       struct device dev;
        struct snd_soc_card *card;
-       struct snd_soc_codec_device *codec_dev;
-       void *codec_data;
-};
+       struct snd_soc_dai_link *dai_link;
+
+       unsigned int complete:1;
+       unsigned int dev_registered:1;
 
-/* runtime channel data */
-struct snd_soc_pcm_runtime {
-       struct snd_soc_dai_link *dai;
-       struct snd_soc_device *socdev;
+       /* Symmetry data - only valid if symmetry is being enforced */
+       unsigned int rate;
+       long pmdown_time;
+
+       /* runtime devices */
+       struct snd_pcm *pcm;
+       struct snd_soc_codec *codec;
+       struct snd_soc_platform *platform;
+       struct snd_soc_dai *codec_dai;
+       struct snd_soc_dai *cpu_dai;
+
+       struct delayed_work delayed_work;
 };
 
 /* mixer control */
@@ -615,24 +641,48 @@ struct soc_enum {
 static inline unsigned int snd_soc_read(struct snd_soc_codec *codec,
                                        unsigned int reg)
 {
-       return codec->read(codec, reg);
+       return codec->driver->read(codec, reg);
 }
 
 static inline unsigned int snd_soc_write(struct snd_soc_codec *codec,
                                         unsigned int reg, unsigned int val)
 {
-       return codec->write(codec, reg, val);
+       return codec->driver->write(codec, reg, val);
 }
 
+/* device driver data */
+
 static inline void snd_soc_codec_set_drvdata(struct snd_soc_codec *codec,
-                                            void *data)
+               void *data)
 {
-       codec->drvdata = data;
+       dev_set_drvdata(codec->dev, data);
 }
 
 static inline void *snd_soc_codec_get_drvdata(struct snd_soc_codec *codec)
 {
-       return codec->drvdata;
+       return dev_get_drvdata(codec->dev);
+}
+
+static inline void snd_soc_platform_set_drvdata(struct snd_soc_platform *platform,
+               void *data)
+{
+       dev_set_drvdata(platform->dev, data);
+}
+
+static inline void *snd_soc_platform_get_drvdata(struct snd_soc_platform *platform)
+{
+       return dev_get_drvdata(platform->dev);
+}
+
+static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd,
+               void *data)
+{
+       dev_set_drvdata(&rtd->dev, data);
+}
+
+static inline void *snd_soc_pcm_get_drvdata(struct snd_soc_pcm_runtime *rtd)
+{
+       return dev_get_drvdata(&rtd->dev);
 }
 
 #include <sound/soc-dai.h>
index b1a5f34e5cfad9917cb48ecd3872152eeae6944b..99e0308bf2c2416d3e0864fd1063b53f3f2656c3 100644 (file)
 #ifndef __TLV320AIC3x_H__
 #define __TLV320AIC3x_H__
 
+/* GPIO API */
+enum {
+       AIC3X_GPIO1_FUNC_DISABLED               = 0,
+       AIC3X_GPIO1_FUNC_AUDIO_WORDCLK_ADC      = 1,
+       AIC3X_GPIO1_FUNC_CLOCK_MUX              = 2,
+       AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV2         = 3,
+       AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV4         = 4,
+       AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV8         = 5,
+       AIC3X_GPIO1_FUNC_SHORT_CIRCUIT_IRQ      = 6,
+       AIC3X_GPIO1_FUNC_AGC_NOISE_IRQ          = 7,
+       AIC3X_GPIO1_FUNC_INPUT                  = 8,
+       AIC3X_GPIO1_FUNC_OUTPUT                 = 9,
+       AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK     = 10,
+       AIC3X_GPIO1_FUNC_AUDIO_WORDCLK          = 11,
+       AIC3X_GPIO1_FUNC_BUTTON_IRQ             = 12,
+       AIC3X_GPIO1_FUNC_HEADSET_DETECT_IRQ     = 13,
+       AIC3X_GPIO1_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ   = 14,
+       AIC3X_GPIO1_FUNC_ALL_IRQ                = 16
+};
+
+enum {
+       AIC3X_GPIO2_FUNC_DISABLED               = 0,
+       AIC3X_GPIO2_FUNC_HEADSET_DETECT_IRQ     = 2,
+       AIC3X_GPIO2_FUNC_INPUT                  = 3,
+       AIC3X_GPIO2_FUNC_OUTPUT                 = 4,
+       AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT      = 5,
+       AIC3X_GPIO2_FUNC_AUDIO_BITCLK           = 8,
+       AIC3X_GPIO2_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ = 9,
+       AIC3X_GPIO2_FUNC_ALL_IRQ                = 10,
+       AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_OR_AGC_IRQ = 11,
+       AIC3X_GPIO2_FUNC_HEADSET_OR_BUTTON_PRESS_OR_SHORT_CIRCUIT_IRQ = 12,
+       AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_IRQ      = 13,
+       AIC3X_GPIO2_FUNC_AGC_NOISE_IRQ          = 14,
+       AIC3X_GPIO2_FUNC_BUTTON_PRESS_IRQ       = 15
+};
+
+struct aic3x_setup_data {
+       unsigned int gpio_func[2];
+};
+
 struct aic3x_pdata {
        int gpio_reset; /* < 0 if not used */
+       struct aic3x_setup_data *setup;
 };
 
-#endif
\ No newline at end of file
+#endif
diff --git a/include/sound/wm8962.h b/include/sound/wm8962.h
new file mode 100644 (file)
index 0000000..f70258e
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * wm8962.h  --  WM8962 Soc Audio driver platform data
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _WM8962_PDATA_H
+#define _WM8962_PDATA_H
+
+#define WM8962_MAX_GPIO 6
+
+/* Use to set GPIO default values to zero */
+#define WM8962_GPIO_SET 0x10000
+
+struct wm8962_pdata {
+       u32 gpio_init[WM8962_MAX_GPIO];
+
+       bool spk_mono;   /* Speaker outputs tied together as mono */
+};
+
+#endif
index dc5249fba85c71884c613c5b028a9fd173143bf5..d0e75323ec190a317d2c6c8252ad8cf1e1e8035a 100644 (file)
@@ -179,7 +179,7 @@ static int atmel_pcm_hw_params(struct snd_pcm_substream *substream,
        snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
        runtime->dma_bytes = params_buffer_bytes(params);
 
-       prtd->params = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       prtd->params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
        prtd->params->dma_intr_handler = atmel_pcm_dma_irq;
 
        prtd->dma_buffer = runtime->dma_addr;
@@ -374,14 +374,14 @@ static int atmel_pcm_new(struct snd_card *card,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = 0xffffffff;
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = atmel_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                pr_debug("at32-pcm:"
                                "Allocating PCM capture DMA buffer\n");
                ret = atmel_pcm_preallocate_dma_buffer(pcm,
@@ -414,12 +414,9 @@ static void atmel_pcm_free_dma_buffers(struct snd_pcm *pcm)
 }
 
 #ifdef CONFIG_PM
-static int atmel_pcm_suspend(struct snd_soc_dai_link *dai_link)
+static int atmel_pcm_suspend(struct snd_soc_dai *dai)
 {
-       struct snd_pcm *pcm = dai_link->pcm;
-       struct snd_pcm_str *stream = &pcm->streams[0];
-       struct snd_pcm_substream *substream = stream->substream;
-       struct snd_pcm_runtime *runtime = substream->runtime;
+       struct snd_pcm_runtime *runtime = dai->runtime;
        struct atmel_runtime_data *prtd;
        struct atmel_pcm_dma_params *params;
 
@@ -441,12 +438,9 @@ static int atmel_pcm_suspend(struct snd_soc_dai_link *dai_link)
        return 0;
 }
 
-static int atmel_pcm_resume(struct snd_soc_dai_link *dai_link)
+static int atmel_pcm_resume(struct snd_soc_dai *dai)
 {
-       struct snd_pcm *pcm = dai_link->pcm;
-       struct snd_pcm_str *stream = &pcm->streams[0];
-       struct snd_pcm_substream *substream = stream->substream;
-       struct snd_pcm_runtime *runtime = substream->runtime;
+       struct snd_pcm_runtime *runtime = dai->runtime;
        struct atmel_runtime_data *prtd;
        struct atmel_pcm_dma_params *params;
 
@@ -470,27 +464,46 @@ static int atmel_pcm_resume(struct snd_soc_dai_link *dai_link)
 #define atmel_pcm_resume       NULL
 #endif
 
-struct snd_soc_platform atmel_soc_platform = {
-       .name           = "atmel-audio",
-       .pcm_ops        = &atmel_pcm_ops,
+static struct snd_soc_platform_driver atmel_soc_platform = {
+       .ops            = &atmel_pcm_ops,
        .pcm_new        = atmel_pcm_new,
        .pcm_free       = atmel_pcm_free_dma_buffers,
        .suspend        = atmel_pcm_suspend,
        .resume         = atmel_pcm_resume,
 };
-EXPORT_SYMBOL_GPL(atmel_soc_platform);
 
-static int __init atmel_pcm_modinit(void)
+static int __devinit atmel_soc_platform_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_platform(&pdev->dev, &atmel_soc_platform);
+}
+
+static int __devexit atmel_soc_platform_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver atmel_pcm_driver = {
+       .driver = {
+                       .name = "atmel-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = atmel_soc_platform_probe,
+       .remove = __devexit_p(atmel_soc_platform_remove),
+};
+
+static int __init snd_atmel_pcm_init(void)
 {
-       return snd_soc_register_platform(&atmel_soc_platform);
+       return platform_driver_register(&atmel_pcm_driver);
 }
-module_init(atmel_pcm_modinit);
+module_init(snd_atmel_pcm_init);
 
-static void __exit atmel_pcm_modexit(void)
+static void __exit snd_atmel_pcm_exit(void)
 {
-       snd_soc_unregister_platform(&atmel_soc_platform);
+       platform_driver_unregister(&atmel_pcm_driver);
 }
-module_exit(atmel_pcm_modexit);
+module_exit(snd_atmel_pcm_exit);
 
 MODULE_AUTHOR("Sedji Gaouaou <sedji.gaouaou@atmel.com>");
 MODULE_DESCRIPTION("Atmel PCM module");
index ec9b2824b66381d3e3e1479ef7039e875c0cbacd..2597329302e76c0c6d50a9f536eea39891f45c64 100644 (file)
@@ -74,9 +74,6 @@ struct atmel_pcm_dma_params {
        void (*dma_intr_handler)(u32, struct snd_pcm_substream *);
 };
 
-extern struct snd_soc_platform atmel_soc_platform;
-
-
 /*
  * SSC register access (since ssc_writel() / ssc_readl() require literal name)
  */
index c85844d4845bdc15f24c94c8d4a82dbedcfcc1ec..eabf66af12cd13eea5378e61b3cb340ede50228a 100644 (file)
@@ -205,8 +205,7 @@ static irqreturn_t atmel_ssc_interrupt(int irq, void *dev_id)
 static int atmel_ssc_startup(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
-       struct atmel_ssc_info *ssc_p = &ssc_info[rtd->dai->cpu_dai->id];
+       struct atmel_ssc_info *ssc_p = &ssc_info[dai->id];
        int dir_mask;
 
        pr_debug("atmel_ssc_startup: SSC_SR=0x%u\n",
@@ -235,8 +234,7 @@ static int atmel_ssc_startup(struct snd_pcm_substream *substream,
 static void atmel_ssc_shutdown(struct snd_pcm_substream *substream,
                               struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
-       struct atmel_ssc_info *ssc_p = &ssc_info[rtd->dai->cpu_dai->id];
+       struct atmel_ssc_info *ssc_p = &ssc_info[dai->id];
        struct atmel_pcm_dma_params *dma_params;
        int dir, dir_mask;
 
@@ -338,7 +336,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
-       int id = rtd->dai->cpu_dai->id;
+       int id = dai->id;
        struct atmel_ssc_info *ssc_p = &ssc_info[id];
        struct atmel_pcm_dma_params *dma_params;
        int dir, channels, bits;
@@ -368,7 +366,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
         * function.  It should not be used for other purposes
         * as it is common to all substreams.
         */
-       snd_soc_dai_set_dma_data(rtd->dai->cpu_dai, substream, dma_params);
+       snd_soc_dai_set_dma_data(rtd->cpu_dai, substream, dma_params);
 
        channels = params_channels(params);
 
@@ -605,8 +603,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
 static int atmel_ssc_prepare(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
-       struct atmel_ssc_info *ssc_p = &ssc_info[rtd->dai->cpu_dai->id];
+       struct atmel_ssc_info *ssc_p = &ssc_info[dai->id];
        struct atmel_pcm_dma_params *dma_params;
        int dir;
 
@@ -690,6 +687,32 @@ static int atmel_ssc_resume(struct snd_soc_dai *cpu_dai)
 #  define atmel_ssc_resume     NULL
 #endif /* CONFIG_PM */
 
+static int atmel_ssc_probe(struct snd_soc_dai *dai)
+{
+       struct atmel_ssc_info *ssc_p = &ssc_info[dai->id];
+       int ret = 0;
+
+       snd_soc_dai_set_drvdata(dai, ssc_p);
+
+       /*
+        * Request SSC device
+        */
+       ssc_p->ssc = ssc_request(dai->id);
+       if (IS_ERR(ssc_p->ssc)) {
+               printk(KERN_ERR "ASoC: Failed to request SSC %d\n", dai->id);
+               ret = PTR_ERR(ssc_p->ssc);
+       }
+
+       return ret;
+}
+
+static int atmel_ssc_remove(struct snd_soc_dai *dai)
+{
+       struct atmel_ssc_info *ssc_p = snd_soc_dai_get_drvdata(dai);
+
+       ssc_free(ssc_p->ssc);
+       return 0;
+}
 
 #define ATMEL_SSC_RATES (SNDRV_PCM_RATE_8000_96000)
 
@@ -705,9 +728,11 @@ static struct snd_soc_dai_ops atmel_ssc_dai_ops = {
        .set_clkdiv     = atmel_ssc_set_dai_clkdiv,
 };
 
-struct snd_soc_dai atmel_ssc_dai[NUM_SSC_DEVICES] = {
-       {       .name = "atmel-ssc0",
-               .id = 0,
+static struct snd_soc_dai_driver atmel_ssc_dai[NUM_SSC_DEVICES] = {
+       {
+               .name = "atmel-ssc-dai.0",
+               .probe = atmel_ssc_probe,
+               .remove = atmel_ssc_remove,
                .suspend = atmel_ssc_suspend,
                .resume = atmel_ssc_resume,
                .playback = {
@@ -721,11 +746,12 @@ struct snd_soc_dai atmel_ssc_dai[NUM_SSC_DEVICES] = {
                        .rates = ATMEL_SSC_RATES,
                        .formats = ATMEL_SSC_FORMATS,},
                .ops = &atmel_ssc_dai_ops,
-               .private_data = &ssc_info[0],
        },
 #if NUM_SSC_DEVICES == 3
-       {       .name = "atmel-ssc1",
-               .id = 1,
+       {
+               .name = "atmel-ssc-dai.1",
+               .probe = atmel_ssc_probe,
+               .remove = atmel_ssc_remove,
                .suspend = atmel_ssc_suspend,
                .resume = atmel_ssc_resume,
                .playback = {
@@ -739,10 +765,11 @@ struct snd_soc_dai atmel_ssc_dai[NUM_SSC_DEVICES] = {
                        .rates = ATMEL_SSC_RATES,
                        .formats = ATMEL_SSC_FORMATS,},
                .ops = &atmel_ssc_dai_ops,
-               .private_data = &ssc_info[1],
        },
-       {       .name = "atmel-ssc2",
-               .id = 2,
+       {
+               .name = "atmel-ssc-dai.2",
+               .probe = atmel_ssc_probe,
+               .remove = atmel_ssc_remove,
                .suspend = atmel_ssc_suspend,
                .resume = atmel_ssc_resume,
                .playback = {
@@ -756,23 +783,43 @@ struct snd_soc_dai atmel_ssc_dai[NUM_SSC_DEVICES] = {
                        .rates = ATMEL_SSC_RATES,
                        .formats = ATMEL_SSC_FORMATS,},
                .ops = &atmel_ssc_dai_ops,
-               .private_data = &ssc_info[2],
        },
 #endif
 };
-EXPORT_SYMBOL_GPL(atmel_ssc_dai);
 
-static int __init atmel_ssc_modinit(void)
+static __devinit int asoc_ssc_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dais(&pdev->dev, atmel_ssc_dai,
+                       ARRAY_SIZE(atmel_ssc_dai));
+}
+
+static int __devexit asoc_ssc_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(atmel_ssc_dai));
+       return 0;
+}
+
+static struct platform_driver asoc_ssc_driver = {
+       .driver = {
+                       .name = "atmel-ssc-dai",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = asoc_ssc_probe,
+       .remove = __devexit_p(asoc_ssc_remove),
+};
+
+static int __init snd_atmel_ssc_init(void)
 {
-       return snd_soc_register_dais(atmel_ssc_dai, ARRAY_SIZE(atmel_ssc_dai));
+       return platform_driver_register(&asoc_ssc_driver);
 }
-module_init(atmel_ssc_modinit);
+module_init(snd_atmel_ssc_init);
 
-static void __exit atmel_ssc_modexit(void)
+static void __exit snd_atmel_ssc_exit(void)
 {
-       snd_soc_unregister_dais(atmel_ssc_dai, ARRAY_SIZE(atmel_ssc_dai));
+       platform_driver_unregister(&asoc_ssc_driver);
 }
-module_exit(atmel_ssc_modexit);
+module_exit(snd_atmel_ssc_exit);
 
 /* Module information */
 MODULE_AUTHOR("Sedji Gaouaou, sedji.gaouaou@atmel.com, www.atmel.com");
index 391135f9c6c10b0057b7a1b742da180ca44927f2..392a469531126d7eb94a32d3700daf5991901d58 100644 (file)
@@ -116,6 +116,5 @@ struct atmel_ssc_info {
        struct atmel_pcm_dma_params *dma_params[2];
        struct atmel_ssc_state ssc_state;
 };
-extern struct snd_soc_dai atmel_ssc_dai[];
 
 #endif /* _AT91_SSC_DAI_H */
index 9df4c68ef000440cfeccd0cd0123de35c03e2a76..5f4e59f4461c3599a1cf3443e48d96e1e2aeee73 100644 (file)
@@ -83,7 +83,7 @@ static struct ssc_clock_data playpaq_wm8510_calc_ssc_clock(
        struct snd_pcm_hw_params *params,
        struct snd_soc_dai *cpu_dai)
 {
-       struct at32_ssc_info *ssc_p = cpu_dai->private_data;
+       struct at32_ssc_info *ssc_p = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssc_device *ssc = ssc_p->ssc;
        struct ssc_clock_data cd;
        unsigned int rate, width_bits, channels;
@@ -131,9 +131,9 @@ static int playpaq_wm8510_hw_params(struct snd_pcm_substream *substream,
                                    struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct at32_ssc_info *ssc_p = cpu_dai->private_data;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct at32_ssc_info *ssc_p = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssc_device *ssc = ssc_p->ssc;
        unsigned int pll_out = 0, bclk = 0, mclk_div = 0;
        int ret;
@@ -315,8 +315,9 @@ static const struct snd_soc_dapm_route intercon[] = {
 
 
 
-static int playpaq_wm8510_init(struct snd_soc_codec *codec)
+static int playpaq_wm8510_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int i;
 
        /*
@@ -342,7 +343,7 @@ static int playpaq_wm8510_init(struct snd_soc_codec *codec)
 
 
        /* Make CSB show PLL rate */
-       snd_soc_dai_set_clkdiv(codec->dai, WM8510_OPCLKDIV,
+       snd_soc_dai_set_clkdiv(rtd->codec_dai, WM8510_OPCLKDIV,
                                       WM8510_OPCLKDIV_1 | 4);
 
        return 0;
@@ -353,8 +354,10 @@ static int playpaq_wm8510_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link playpaq_wm8510_dai = {
        .name = "WM8510",
        .stream_name = "WM8510 PCM",
-       .cpu_dai = &at32_ssc_dai[0],
-       .codec_dai = &wm8510_dai,
+       .cpu_dai_name= "atmel-ssc-dai.0",
+       .platform_name = "atmel-pcm-audio",
+       .codec_name = "wm8510-codec.0-0x1a",
+       .codec_dai_name = "wm8510-hifi",
        .init = playpaq_wm8510_init,
        .ops = &playpaq_wm8510_ops,
 };
@@ -363,46 +366,16 @@ static struct snd_soc_dai_link playpaq_wm8510_dai = {
 
 static struct snd_soc_card snd_soc_playpaq = {
        .name = "LRS_PlayPaq_WM8510",
-       .platform = &at32_soc_platform,
        .dai_link = &playpaq_wm8510_dai,
        .num_links = 1,
 };
 
-
-
-static struct wm8510_setup_data playpaq_wm8510_setup = {
-       .i2c_bus = 0,
-       .i2c_address = 0x1a,
-};
-
-
-
-static struct snd_soc_device playpaq_wm8510_snd_devdata = {
-       .card = &snd_soc_playpaq,
-       .codec_dev = &soc_codec_dev_wm8510,
-       .codec_data = &playpaq_wm8510_setup,
-};
-
 static struct platform_device *playpaq_snd_device;
 
 
 static int __init playpaq_asoc_init(void)
 {
        int ret = 0;
-       struct at32_ssc_info *ssc_p = playpaq_wm8510_dai.cpu_dai->private_data;
-       struct ssc_device *ssc = NULL;
-
-
-       /*
-        * Request SSC device
-        */
-       ssc = ssc_request(0);
-       if (IS_ERR(ssc)) {
-               ret = PTR_ERR(ssc);
-               goto err_ssc;
-       }
-       ssc_p->ssc = ssc;
-
 
        /*
         * Configure MCLK for WM8510
@@ -439,8 +412,7 @@ static int __init playpaq_asoc_init(void)
                goto err_device_alloc;
        }
 
-       platform_set_drvdata(playpaq_snd_device, &playpaq_wm8510_snd_devdata);
-       playpaq_wm8510_snd_devdata.dev = &playpaq_snd_device->dev;
+       platform_set_drvdata(playpaq_snd_device, &snd_soc_playpaq);
 
        ret = platform_device_add(playpaq_snd_device);
        if (ret) {
@@ -468,25 +440,12 @@ err_pll0:
                clk_put(_gclk0);
                _gclk0 = NULL;
        }
-err_gclk0:
-       ssc_free(ssc);
-err_ssc:
        return ret;
 }
 
 
 static void __exit playpaq_asoc_exit(void)
 {
-       struct at32_ssc_info *ssc_p = playpaq_wm8510_dai.cpu_dai->private_data;
-       struct ssc_device *ssc;
-
-       if (ssc_p != NULL) {
-               ssc = ssc_p->ssc;
-               if (ssc != NULL)
-                       ssc_free(ssc);
-               ssc_p->ssc = NULL;
-       }
-
        if (_gclk0 != NULL) {
                clk_put(_gclk0);
                _gclk0 = NULL;
index e028744c32ce9928c9160cc4f79f10642fa1d693..66a6f187968906195cfee0049eebe0b2851bd4a1 100644 (file)
@@ -69,8 +69,8 @@ static int at91sam9g20ek_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* set codec DAI configuration */
@@ -136,9 +136,10 @@ static const struct snd_soc_dapm_route intercon[] = {
 /*
  * Logic for a wm8731 as connected on a at91sam9g20ek board.
  */
-static int at91sam9g20ek_wm8731_init(struct snd_soc_codec *codec)
+static int at91sam9g20ek_wm8731_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_dai *codec_dai = &codec->dai[0];
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret;
 
        printk(KERN_DEBUG
@@ -179,31 +180,25 @@ static int at91sam9g20ek_wm8731_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link at91sam9g20ek_dai = {
        .name = "WM8731",
        .stream_name = "WM8731 PCM",
-       .cpu_dai = &atmel_ssc_dai[0],
-       .codec_dai = &wm8731_dai,
+       .cpu_dai_name = "atmel-ssc-dai.0",
+       .codec_dai_name = "wm8731-hifi",
        .init = at91sam9g20ek_wm8731_init,
+       .platform_name = "atmel_pcm-audio",
+       .codec_name = "wm8731-codec.0-001a",
        .ops = &at91sam9g20ek_ops,
 };
 
 static struct snd_soc_card snd_soc_at91sam9g20ek = {
        .name = "AT91SAMG20-EK",
-       .platform = &atmel_soc_platform,
        .dai_link = &at91sam9g20ek_dai,
        .num_links = 1,
        .set_bias_level = at91sam9g20ek_set_bias_level,
 };
 
-static struct snd_soc_device at91sam9g20ek_snd_devdata = {
-       .card = &snd_soc_at91sam9g20ek,
-       .codec_dev = &soc_codec_dev_wm8731,
-};
-
 static struct platform_device *at91sam9g20ek_snd_device;
 
 static int __init at91sam9g20ek_init(void)
 {
-       struct atmel_ssc_info *ssc_p = at91sam9g20ek_dai.cpu_dai->private_data;
-       struct ssc_device *ssc = NULL;
        struct clk *pllb;
        int ret;
 
@@ -235,18 +230,6 @@ static int __init at91sam9g20ek_init(void)
 
        clk_set_rate(mclk, MCLK_RATE);
 
-       /*
-        * Request SSC device
-        */
-       ssc = ssc_request(0);
-       if (IS_ERR(ssc)) {
-               printk(KERN_ERR "ASoC: Failed to request SSC 0\n");
-               ret = PTR_ERR(ssc);
-               ssc = NULL;
-               goto err_ssc;
-       }
-       ssc_p->ssc = ssc;
-
        at91sam9g20ek_snd_device = platform_device_alloc("soc-audio", -1);
        if (!at91sam9g20ek_snd_device) {
                printk(KERN_ERR "ASoC: Platform device allocation failed\n");
@@ -254,8 +237,7 @@ static int __init at91sam9g20ek_init(void)
        }
 
        platform_set_drvdata(at91sam9g20ek_snd_device,
-                       &at91sam9g20ek_snd_devdata);
-       at91sam9g20ek_snd_devdata.dev = &at91sam9g20ek_snd_device->dev;
+                       &snd_soc_at91sam9g20ek);
 
        ret = platform_device_add(at91sam9g20ek_snd_device);
        if (ret) {
@@ -265,9 +247,6 @@ static int __init at91sam9g20ek_init(void)
 
        return ret;
 
-err_ssc:
-       ssc_free(ssc);
-       ssc_p->ssc = NULL;
 err_mclk:
        clk_put(mclk);
        mclk = NULL;
@@ -277,16 +256,6 @@ err:
 
 static void __exit at91sam9g20ek_exit(void)
 {
-       struct atmel_ssc_info *ssc_p = at91sam9g20ek_dai.cpu_dai->private_data;
-       struct ssc_device *ssc;
-
-       if (ssc_p != NULL) {
-               ssc = ssc_p->ssc;
-               if (ssc != NULL)
-                       ssc_free(ssc);
-               ssc_p->ssc = NULL;
-       }
-
        platform_device_unregister(at91sam9g20ek_snd_device);
        at91sam9g20ek_snd_device = NULL;
        clk_put(mclk);
index 23349de273134871e153ce42a1129815c4fae745..e3d283561c196a8198e97d6bf2cc3b1b11987624 100644 (file)
@@ -46,8 +46,8 @@ static int afeb9260_hw_params(struct snd_pcm_substream *substream,
                         struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int err;
 
        /* Set codec DAI configuration */
@@ -102,8 +102,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"MICIN", NULL, "Mic Jack"},
 };
 
-static int afeb9260_tlv320aic23_init(struct snd_soc_codec *codec)
+static int afeb9260_tlv320aic23_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* Add afeb9260 specific widgets */
        snd_soc_dapm_new_controls(codec, tlv320aic23_dapm_widgets,
@@ -125,8 +126,10 @@ static int afeb9260_tlv320aic23_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link afeb9260_dai = {
        .name = "TLV320AIC23",
        .stream_name = "AIC23",
-       .cpu_dai = &atmel_ssc_dai[0],
-       .codec_dai = &tlv320aic23_dai,
+       .cpu_dai_name = "atmel-ssc-dai.0",
+       .codec_dai_name = "tlv320aic23-hifi",
+       .platform_name = "atmel_pcm-audio",
+       .codec_name = "tlv320aic23-codec.0-0x1a",
        .init = afeb9260_tlv320aic23_init,
        .ops = &afeb9260_ops,
 };
@@ -134,37 +137,20 @@ static struct snd_soc_dai_link afeb9260_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_machine_afeb9260 = {
        .name = "AFEB9260",
-       .platform = &atmel_soc_platform,
        .dai_link = &afeb9260_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device afeb9260_snd_devdata = {
-       .card = &snd_soc_machine_afeb9260,
-       .codec_dev = &soc_codec_dev_tlv320aic23,
-};
-
 static struct platform_device *afeb9260_snd_device;
 
 static int __init afeb9260_soc_init(void)
 {
        int err;
        struct device *dev;
-       struct atmel_ssc_info *ssc_p = afeb9260_dai.cpu_dai->private_data;
-       struct ssc_device *ssc = NULL;
 
        if (!(machine_is_afeb9260()))
                return -ENODEV;
 
-       ssc = ssc_request(0);
-       if (IS_ERR(ssc)) {
-               printk(KERN_ERR "ASoC: Failed to request SSC 0\n");
-               err = PTR_ERR(ssc);
-               ssc = NULL;
-               goto err_ssc;
-       }
-       ssc_p->ssc = ssc;
 
        afeb9260_snd_device = platform_device_alloc("soc-audio", -1);
        if (!afeb9260_snd_device) {
@@ -172,8 +158,7 @@ static int __init afeb9260_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(afeb9260_snd_device, &afeb9260_snd_devdata);
-       afeb9260_snd_devdata.dev = &afeb9260_snd_device->dev;
+       platform_set_drvdata(afeb9260_snd_device, &snd_soc_machine_afeb9260);
        err = platform_device_add(afeb9260_snd_device);
        if (err)
                goto err1;
@@ -184,9 +169,7 @@ static int __init afeb9260_soc_init(void)
 err1:
        platform_device_del(afeb9260_snd_device);
        platform_device_put(afeb9260_snd_device);
-err_ssc:
        return err;
-
 }
 
 static void __exit afeb9260_soc_exit(void)
index cdf7be1b9b91095ce0053e0c39595c4f5911ebb1..8780c90107fc78cbe2787e6fcb5f6cf80258863e 100644 (file)
@@ -19,7 +19,6 @@
 #include <asm/mach-au1x00/au1xxx_dbdma.h>
 #include <asm/mach-db1x00/bcsr.h>
 
-#include "../codecs/ac97.h"
 #include "../codecs/wm8731.h"
 #include "psc.h"
 
 static struct snd_soc_dai_link db1200_ac97_dai = {
        .name           = "AC97",
        .stream_name    = "AC97 HiFi",
-       .cpu_dai        = &au1xpsc_ac97_dai,
-       .codec_dai      = &ac97_dai,
+       .cpu_dai_name   = "au1xpsc-ac97",
+       .codec_dai_name = "ac97-hifi",
+       .platform_name  =  "au1xpsc-pcm-audio",
+       .codec_name     = "ac97-codec",
 };
 
 static struct snd_soc_card db1200_ac97_machine = {
        .name           = "DB1200_AC97",
        .dai_link       = &db1200_ac97_dai,
        .num_links      = 1,
-       .platform       = &au1xpsc_soc_platform,
-};
-
-static struct snd_soc_device db1200_ac97_devdata = {
-       .card           = &db1200_ac97_machine,
-       .codec_dev      = &soc_codec_dev_ac97,
 };
 
 /*-------------------------  I2S PART  ---------------------------*/
@@ -49,8 +44,8 @@ static struct snd_soc_device db1200_ac97_devdata = {
 static int db1200_i2s_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* WM8731 has its own 12MHz crystal */
@@ -80,8 +75,10 @@ static struct snd_soc_ops db1200_i2s_wm8731_ops = {
 static struct snd_soc_dai_link db1200_i2s_dai = {
        .name           = "WM8731",
        .stream_name    = "WM8731 PCM",
-       .cpu_dai        = &au1xpsc_i2s_dai,
-       .codec_dai      = &wm8731_dai,
+       .cpu_dai_name   = "au1xpsc",
+       .codec_dai_name = "wm8731-hifi"
+       .platform_name  = "au1xpsc-pcm-audio",
+       .codec_name     = "wm8731-codec.0-001a",
        .ops            = &db1200_i2s_wm8731_ops,
 };
 
@@ -89,12 +86,6 @@ static struct snd_soc_card db1200_i2s_machine = {
        .name           = "DB1200_I2S",
        .dai_link       = &db1200_i2s_dai,
        .num_links      = 1,
-       .platform       = &au1xpsc_soc_platform,
-};
-
-static struct snd_soc_device db1200_i2s_devdata = {
-       .card           = &db1200_i2s_machine,
-       .codec_dev      = &soc_codec_dev_wm8731,
 };
 
 /*-------------------------  COMMON PART  ---------------------------*/
@@ -112,12 +103,10 @@ static int __init db1200_audio_load(void)
 
        /* DB1200 board setup set PSC1MUX to preferred audio device */
        if (bcsr_read(BCSR_RESETS) & BCSR_RESETS_PSC1MUX)
-               platform_set_drvdata(db1200_asoc_dev, &db1200_i2s_devdata);
+               platform_set_drvdata(db1200_asoc_dev, &db1200_i2s_machine);
        else
-               platform_set_drvdata(db1200_asoc_dev, &db1200_ac97_devdata);
+               platform_set_drvdata(db1200_asoc_dev, &db1200_ac97_machine);
 
-       db1200_ac97_devdata.dev = &db1200_asoc_dev->dev;
-       db1200_i2s_devdata.dev = &db1200_asoc_dev->dev;
        ret = platform_device_add(db1200_asoc_dev);
 
        if (ret) {
index 6d9f4c624949ed65906433a2efc2caa33bde841d..00fdb9cbfc2d44816064b6f70e8a59a943ae977d 100644 (file)
@@ -329,7 +329,7 @@ static int au1xpsc_pcm_new(struct snd_card *card,
        return 0;
 }
 
-static int au1xpsc_pcm_probe(struct platform_device *pdev)
+static int au1xpsc_pcm_probe(struct snd_soc_platform *platform)
 {
        if (!au1xpsc_audio_pcmdma[PCM_TX] || !au1xpsc_audio_pcmdma[PCM_RX])
                return -ENODEV;
@@ -337,17 +337,10 @@ static int au1xpsc_pcm_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int au1xpsc_pcm_remove(struct platform_device *pdev)
-{
-       return 0;
-}
-
 /* au1xpsc audio platform */
-struct snd_soc_platform au1xpsc_soc_platform = {
-       .name           = "au1xpsc-pcm-dbdma",
+struct snd_soc_platform_driver au1xpsc_soc_platform = {
        .probe          = au1xpsc_pcm_probe,
-       .remove         = au1xpsc_pcm_remove,
-       .pcm_ops        = &au1xpsc_pcm_ops,
+       .ops            = &au1xpsc_pcm_ops,
        .pcm_new        = au1xpsc_pcm_new,
        .pcm_free       = au1xpsc_pcm_free_dma_buffers,
 };
@@ -387,7 +380,7 @@ static int __devinit au1xpsc_pcm_drvprobe(struct platform_device *pdev)
        }
        (au1xpsc_audio_pcmdma[PCM_RX])->ddma_id = r->start;
 
-       ret = snd_soc_register_platform(&au1xpsc_soc_platform);
+       ret = snd_soc_register_platform(&pdev->dev, &au1xpsc_soc_platform);
        if (!ret)
                return ret;
 
@@ -404,7 +397,7 @@ static int __devexit au1xpsc_pcm_drvremove(struct platform_device *pdev)
 {
        int i;
 
-       snd_soc_unregister_platform(&au1xpsc_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
 
        for (i = 0; i < 2; i++) {
                if (au1xpsc_audio_pcmdma[i]) {
@@ -419,7 +412,7 @@ static int __devexit au1xpsc_pcm_drvremove(struct platform_device *pdev)
 
 static struct platform_driver au1xpsc_pcm_driver = {
        .driver = {
-               .name   = "au1xpsc-pcm",
+               .name   = "au1xpsc-pcm-audio",
                .owner  = THIS_MODULE,
        },
        .probe          = au1xpsc_pcm_drvprobe,
index d14a5a91a4654dc347af790ace1244479659fb36..6a9516cbe42453f6e7d67d85ced5dee5e76f36fb 100644 (file)
@@ -315,27 +315,19 @@ static int au1xpsc_ac97_trigger(struct snd_pcm_substream *substream,
        return ret;
 }
 
-static int au1xpsc_ac97_probe(struct platform_device *pdev,
-                             struct snd_soc_dai *dai)
+static int au1xpsc_ac97_probe(struct snd_soc_dai *dai)
 {
        return au1xpsc_ac97_workdata ? 0 : -ENODEV;
 }
 
-static void au1xpsc_ac97_remove(struct platform_device *pdev,
-                               struct snd_soc_dai *dai)
-{
-}
-
 static struct snd_soc_dai_ops au1xpsc_ac97_dai_ops = {
        .trigger        = au1xpsc_ac97_trigger,
        .hw_params      = au1xpsc_ac97_hw_params,
 };
 
-struct snd_soc_dai au1xpsc_ac97_dai = {
-       .name                   = "au1xpsc_ac97",
+struct snd_soc_dai_driver au1xpsc_ac97_dai = {
        .ac97_control           = 1,
        .probe                  = au1xpsc_ac97_probe,
-       .remove                 = au1xpsc_ac97_remove,
        .playback = {
                .rates          = AC97_RATES,
                .formats        = AC97_FMTS,
@@ -395,7 +387,7 @@ static int __devinit au1xpsc_ac97_drvprobe(struct platform_device *pdev)
        au_writel(PSC_SEL_PS_AC97MODE | sel, PSC_SEL(wd));
        au_sync();
 
-       ret = snd_soc_register_dai(&au1xpsc_ac97_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &au1xpsc_ac97_dai);
        if (ret)
                goto out1;
 
@@ -406,7 +398,7 @@ static int __devinit au1xpsc_ac97_drvprobe(struct platform_device *pdev)
                return 0;
        }
 
-       snd_soc_unregister_dai(&au1xpsc_ac97_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 out1:
        release_mem_region(r->start, resource_size(r));
 out0:
@@ -422,7 +414,7 @@ static int __devexit au1xpsc_ac97_drvremove(struct platform_device *pdev)
        if (wd->dmapd)
                au1xpsc_pcm_destroy(wd->dmapd);
 
-       snd_soc_unregister_dai(&au1xpsc_ac97_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        /* disable PSC completely */
        au_writel(0, AC97_CFG(wd));
@@ -485,7 +477,7 @@ static struct dev_pm_ops au1xpscac97_pmops = {
 
 static struct platform_driver au1xpsc_ac97_driver = {
        .driver = {
-               .name   = "au1xpsc_ac97",
+               .name   = "au1xpsc-ac97",
                .owner  = THIS_MODULE,
                .pm     = AU1XPSCAC97_PMOPS,
        },
index 6083fe7799faba3b6b4737136b12d74cc428f59b..94e560a8756db44dab471ceccaf632029ba5c253 100644 (file)
@@ -263,27 +263,19 @@ static int au1xpsc_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
        return ret;
 }
 
-static int au1xpsc_i2s_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
+static int au1xpsc_i2s_probe(struct snd_soc_dai *dai)
 {
        return  au1xpsc_i2s_workdata ? 0 : -ENODEV;
 }
 
-static void au1xpsc_i2s_remove(struct platform_device *pdev,
-                              struct snd_soc_dai *dai)
-{
-}
-
 static struct snd_soc_dai_ops au1xpsc_i2s_dai_ops = {
        .trigger        = au1xpsc_i2s_trigger,
        .hw_params      = au1xpsc_i2s_hw_params,
        .set_fmt        = au1xpsc_i2s_set_fmt,
 };
 
-struct snd_soc_dai au1xpsc_i2s_dai = {
-       .name                   = "au1xpsc_i2s",
+static struct snd_soc_dai_driver au1xpsc_i2s_dai = {
        .probe                  = au1xpsc_i2s_probe,
-       .remove                 = au1xpsc_i2s_remove,
        .playback = {
                .rates          = AU1XPSC_I2S_RATES,
                .formats        = AU1XPSC_I2S_FMTS,
@@ -298,7 +290,6 @@ struct snd_soc_dai au1xpsc_i2s_dai = {
        },
        .ops = &au1xpsc_i2s_dai_ops,
 };
-EXPORT_SYMBOL(au1xpsc_i2s_dai);
 
 static int __devinit au1xpsc_i2s_drvprobe(struct platform_device *pdev)
 {
@@ -346,7 +337,7 @@ static int __devinit au1xpsc_i2s_drvprobe(struct platform_device *pdev)
         * time out.
         */
 
-       ret = snd_soc_register_dai(&au1xpsc_i2s_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &au1xpsc_i2s_dai);
        if (ret)
                goto out1;
 
@@ -358,7 +349,7 @@ static int __devinit au1xpsc_i2s_drvprobe(struct platform_device *pdev)
                return 0;
        }
 
-       snd_soc_unregister_dai(&au1xpsc_i2s_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 out1:
        release_mem_region(r->start, resource_size(r));
 out0:
@@ -374,7 +365,7 @@ static int __devexit au1xpsc_i2s_drvremove(struct platform_device *pdev)
        if (wd->dmapd)
                au1xpsc_pcm_destroy(wd->dmapd);
 
-       snd_soc_unregister_dai(&au1xpsc_i2s_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        au_writel(0, I2S_CFG(wd));
        au_sync();
@@ -436,7 +427,7 @@ static struct dev_pm_ops au1xpsci2s_pmops = {
 
 static struct platform_driver au1xpsc_i2s_driver = {
        .driver         = {
-               .name   = "au1xpsc_i2s",
+               .name   = "au1xpsc",
                .owner  = THIS_MODULE,
                .pm     = AU1XPSCI2S_PMOPS,
        },
index 093775d4dc3e47185759c737e1bb18338a615b7c..f281443fd52f5b3fdeeb7821ad5fbcdaa516e96f 100644 (file)
@@ -16,9 +16,6 @@
 #ifndef _AU1X_PCM_H
 #define _AU1X_PCM_H
 
-extern struct snd_soc_dai au1xpsc_ac97_dai;
-extern struct snd_soc_dai au1xpsc_i2s_dai;
-extern struct snd_soc_platform au1xpsc_soc_platform;
 extern struct snd_ac97_bus_ops soc_ac97_ops;
 
 /* DBDMA helpers */
index 5e7aacf3bb5a2027c2decfe98e3b49919c04a207..5a2fd8abaefaee65e5509e4c98adf252c06293df 100644 (file)
@@ -422,14 +422,14 @@ int bf5xx_pcm_ac97_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -439,25 +439,44 @@ int bf5xx_pcm_ac97_new(struct snd_card *card, struct snd_soc_dai *dai,
        return ret;
 }
 
-struct snd_soc_platform bf5xx_ac97_soc_platform = {
-       .name           = "bf5xx-audio",
-       .pcm_ops        = &bf5xx_pcm_ac97_ops,
+static struct snd_soc_platform_driver bf5xx_ac97_soc_platform = {
+       .ops                    = &bf5xx_pcm_ac97_ops,
        .pcm_new        = bf5xx_pcm_ac97_new,
        .pcm_free       = bf5xx_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(bf5xx_ac97_soc_platform);
 
-static int __init bfin_ac97_init(void)
+static int __devinit bf5xx_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&bf5xx_ac97_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &bf5xx_ac97_soc_platform);
 }
-module_init(bfin_ac97_init);
 
-static void __exit bfin_ac97_exit(void)
+static int __devexit bf5xx_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&bf5xx_ac97_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver bf5xx_pcm_driver = {
+       .driver = {
+                       .name = "bf5xx-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = bf5xx_soc_platform_probe,
+       .remove = __devexit_p(bf5xx_soc_platform_remove),
+};
+
+static int __init snd_bf5xx_pcm_init(void)
+{
+       return platform_driver_register(&bf5xx_pcm_driver);
+}
+module_init(snd_bf5xx_pcm_init);
+
+static void __exit snd_bf5xx_pcm_exit(void)
+{
+       platform_driver_unregister(&bf5xx_pcm_driver);
 }
-module_exit(bfin_ac97_exit);
+module_exit(snd_bf5xx_pcm_exit);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("ADI Blackfin AC97 PCM DMA module");
index 350125a0ae21282a74acd35c007c98de97d741f1..d324d5826a9baaaba648129bd21e2634160666df 100644 (file)
@@ -23,7 +23,4 @@ struct bf5xx_gpio {
        u32 frm;
 };
 
-/* platform data */
-extern struct snd_soc_platform bf5xx_ac97_soc_platform;
-
 #endif
index c0eba51099804fcebc40ee13d5b495b3106448f2..c5f856ec27ca1bedc8d0256cf5fe97d11ebac730 100644 (file)
@@ -255,7 +255,7 @@ EXPORT_SYMBOL_GPL(soc_ac97_ops);
 #ifdef CONFIG_PM
 static int bf5xx_ac97_suspend(struct snd_soc_dai *dai)
 {
-       struct sport_device *sport = dai->private_data;
+       struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
 
        pr_debug("%s : sport %d\n", __func__, dai->id);
        if (!dai->active)
@@ -270,7 +270,7 @@ static int bf5xx_ac97_suspend(struct snd_soc_dai *dai)
 static int bf5xx_ac97_resume(struct snd_soc_dai *dai)
 {
        int ret;
-       struct sport_device *sport = dai->private_data;
+       struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
 
        pr_debug("%s : sport %d\n", __func__, dai->id);
        if (!dai->active)
@@ -306,8 +306,7 @@ static int bf5xx_ac97_resume(struct snd_soc_dai *dai)
 #define bf5xx_ac97_resume      NULL
 #endif
 
-static int bf5xx_ac97_probe(struct platform_device *pdev,
-                           struct snd_soc_dai *dai)
+static int bf5xx_ac97_probe(struct snd_soc_dai *dai)
 {
        int ret = 0;
        cmd_count = (int *)get_zeroed_page(GFP_KERNEL);
@@ -379,8 +378,7 @@ peripheral_err:
        return ret;
 }
 
-static void bf5xx_ac97_remove(struct platform_device *pdev,
-                             struct snd_soc_dai *dai)
+static int bf5xx_ac97_remove(struct snd_soc_dai *dai)
 {
        free_page((unsigned long)cmd_count);
        cmd_count = NULL;
@@ -388,11 +386,10 @@ static void bf5xx_ac97_remove(struct platform_device *pdev,
 #ifdef CONFIG_SND_BF5XX_HAVE_COLD_RESET
        gpio_free(CONFIG_SND_BF5XX_RESET_GPIO_NUM);
 #endif
+       return 0;
 }
 
-struct snd_soc_dai bfin_ac97_dai = {
-       .name = "bf5xx-ac97",
-       .id = 0,
+struct snd_soc_dai_driver bfin_ac97_dai = {
        .ac97_control = 1,
        .probe = bf5xx_ac97_probe,
        .remove = bf5xx_ac97_remove,
@@ -417,18 +414,40 @@ struct snd_soc_dai bfin_ac97_dai = {
 };
 EXPORT_SYMBOL_GPL(bfin_ac97_dai);
 
+static __devinit int asoc_bfin_ac97_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dai(&pdev->dev, &bfin_ac97_dai);
+}
+
+static int __devexit asoc_bfin_ac97_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver asoc_bfin_ac97_driver = {
+       .driver = {
+                       .name = "bfin-ac97",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = asoc_bfin_ac97_probe,
+       .remove = __devexit_p(asoc_bfin_ac97_remove),
+};
+
 static int __init bfin_ac97_init(void)
 {
-       return snd_soc_register_dai(&bfin_ac97_dai);
+       return platform_driver_register(&asoc_bfin_ac97_driver);
 }
 module_init(bfin_ac97_init);
 
 static void __exit bfin_ac97_exit(void)
 {
-       snd_soc_unregister_dai(&bfin_ac97_dai);
+       platform_driver_unregister(&asoc_bfin_ac97_driver);
 }
 module_exit(bfin_ac97_exit);
 
+
 MODULE_AUTHOR("Roy Huang");
 MODULE_DESCRIPTION("AC97 driver for ADI Blackfin");
 MODULE_LICENSE("GPL");
index a1f97dd809d63fda550f4d62cd18a5a2c1eb7bde..15c635e33f4d99a42b6386cbc7e7c54e2bf807ef 100644 (file)
@@ -50,8 +50,6 @@ struct ac97_frame {
 #define TAG_PCM_SR             0x0080
 #define TAG_PCM_LFE            0x0040
 
-extern struct snd_soc_dai bfin_ac97_dai;
-
 void bf5xx_pcm_to_ac97(struct ac97_frame *dst, const __u16 *src, \
                size_t count, unsigned int chan_mask);
 
index 0f45a3f56be8f3ff4ae335941d30c0fda62d24b8..2394bff2b655bce897b5ea209f134744dc8ffc94 100644 (file)
@@ -40,9 +40,9 @@ static struct snd_soc_card bf5xx_ad1836;
 static int bf5xx_ad1836_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
-       cpu_dai->private_data = sport_handle;
+       snd_soc_dai_set_drvdata(cpu_dai, sport_handle);
        return 0;
 }
 
@@ -50,8 +50,8 @@ static int bf5xx_ad1836_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        unsigned int channel_map[] = {0, 4, 1, 5, 2, 6, 3, 7};
        int ret = 0;
        /* set cpu DAI configuration */
@@ -83,23 +83,19 @@ static struct snd_soc_ops bf5xx_ad1836_ops = {
 static struct snd_soc_dai_link bf5xx_ad1836_dai = {
        .name = "ad1836",
        .stream_name = "AD1836",
-       .cpu_dai = &bf5xx_tdm_dai,
-       .codec_dai = &ad1836_dai,
+       .cpu_dai_name = "bf5xx-tdm",
+       .codec_dai_name = "ad1836-hifi",
+       .platform_name = "bf5xx-tdm-pcm-audio",
+       .codec_name = "ad1836-codec.0",
        .ops = &bf5xx_ad1836_ops,
 };
 
 static struct snd_soc_card bf5xx_ad1836 = {
        .name = "bf5xx_ad1836",
-       .platform = &bf5xx_tdm_soc_platform,
        .dai_link = &bf5xx_ad1836_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device bf5xx_ad1836_snd_devdata = {
-       .card = &bf5xx_ad1836,
-       .codec_dev = &soc_codec_dev_ad1836,
-};
-
 static struct platform_device *bfxx_ad1836_snd_device;
 
 static int __init bf5xx_ad1836_init(void)
@@ -110,8 +106,7 @@ static int __init bf5xx_ad1836_init(void)
        if (!bfxx_ad1836_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(bfxx_ad1836_snd_device, &bf5xx_ad1836_snd_devdata);
-       bf5xx_ad1836_snd_devdata.dev = &bfxx_ad1836_snd_device->dev;
+       platform_set_drvdata(bfxx_ad1836_snd_device, &bf5xx_ad1836);
        ret = platform_device_add(bfxx_ad1836_snd_device);
 
        if (ret)
index b8c9060cfd8e801d15620d2c710f62a96c96c02d..e4a625317a1acde4e62ea0cc9a03eeaf0ad2e00f 100644 (file)
@@ -49,9 +49,9 @@ static struct snd_soc_card bf5xx_ad193x;
 static int bf5xx_ad193x_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
-       cpu_dai->private_data = sport_handle;
+       snd_soc_dai_set_drvdata(cpu_dai, sport_handle);
        return 0;
 }
 
@@ -59,8 +59,8 @@ static int bf5xx_ad193x_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        unsigned int channel_map[] = {0, 1, 2, 3, 4, 5, 6, 7};
        int ret = 0;
        /* set cpu DAI configuration */
@@ -97,23 +97,19 @@ static struct snd_soc_ops bf5xx_ad193x_ops = {
 static struct snd_soc_dai_link bf5xx_ad193x_dai = {
        .name = "ad193x",
        .stream_name = "AD193X",
-       .cpu_dai = &bf5xx_tdm_dai,
-       .codec_dai = &ad193x_dai,
+       .cpu_dai_name = "bf5xx-tdm",
+       .codec_dai_name ="ad193x-hifi",
+       .platform_name = "bf5xx-tdm-pcm-audio",
+       .codec_name = "ad193x-codec.5",
        .ops = &bf5xx_ad193x_ops,
 };
 
 static struct snd_soc_card bf5xx_ad193x = {
        .name = "bf5xx_ad193x",
-       .platform = &bf5xx_tdm_soc_platform,
        .dai_link = &bf5xx_ad193x_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device bf5xx_ad193x_snd_devdata = {
-       .card = &bf5xx_ad193x,
-       .codec_dev = &soc_codec_dev_ad193x,
-};
-
 static struct platform_device *bfxx_ad193x_snd_device;
 
 static int __init bf5xx_ad193x_init(void)
@@ -124,8 +120,7 @@ static int __init bf5xx_ad193x_init(void)
        if (!bfxx_ad193x_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(bfxx_ad193x_snd_device, &bf5xx_ad193x_snd_devdata);
-       bf5xx_ad193x_snd_devdata.dev = &bfxx_ad193x_snd_device->dev;
+       platform_set_drvdata(bfxx_ad193x_snd_device, &bf5xx_ad193x);
        ret = platform_device_add(bfxx_ad193x_snd_device);
 
        if (ret)
index 92f7c327bb7a371c93d4298e6541fb9bc31b925f..d57c9c9c9883207039174b71cdfa490b64109dfa 100644 (file)
@@ -56,10 +56,10 @@ static struct snd_soc_card bf5xx_board;
 static int bf5xx_board_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        pr_debug("%s enter\n", __func__);
-       cpu_dai->private_data = sport_handle;
+       snd_soc_dai_set_drvdata(cpu_dai, sport_handle);
        return 0;
 }
 
@@ -70,23 +70,19 @@ static struct snd_soc_ops bf5xx_board_ops = {
 static struct snd_soc_dai_link bf5xx_board_dai = {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &bfin_ac97_dai,
-       .codec_dai = &ad1980_dai,
+       .cpu_dai_name = "bfin-ac97",
+       .codec_dai_name = "ad1980-hifi",
+       .platform_name = "bfin-pcm-audio",
+       .codec_name = "ad1980-codec",
        .ops = &bf5xx_board_ops,
 };
 
 static struct snd_soc_card bf5xx_board = {
        .name = "bf5xx-board",
-       .platform = &bf5xx_ac97_soc_platform,
        .dai_link = &bf5xx_board_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device bf5xx_board_snd_devdata = {
-       .card = &bf5xx_board,
-       .codec_dev = &soc_codec_dev_ad1980,
-};
-
 static struct platform_device *bf5xx_board_snd_device;
 
 static int __init bf5xx_board_init(void)
@@ -97,8 +93,7 @@ static int __init bf5xx_board_init(void)
        if (!bf5xx_board_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(bf5xx_board_snd_device, &bf5xx_board_snd_devdata);
-       bf5xx_board_snd_devdata.dev = &bf5xx_board_snd_device->dev;
+       platform_set_drvdata(bf5xx_board_snd_device, &bf5xx_board);
        ret = platform_device_add(bf5xx_board_snd_device);
 
        if (ret)
index 9825b71d0e28a3a7002ab690afcc867efaaf7123..900ced54ac79bee6290e917f99faba5c71f1cb7d 100644 (file)
@@ -47,7 +47,6 @@
 #include "../codecs/ad73311.h"
 #include "bf5xx-sport.h"
 #include "bf5xx-i2s-pcm.h"
-#include "bf5xx-i2s.h"
 
 #if CONFIG_SND_BF5XX_SPORT_NUM == 0
 #define bfin_write_SPORT_TCR1  bfin_write_SPORT0_TCR1
@@ -150,10 +149,10 @@ static int bf5xx_probe(struct platform_device *pdev)
 static int bf5xx_ad73311_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        pr_debug("%s enter\n", __func__);
-       cpu_dai->private_data = sport_handle;
+       snd_soc_dai_set_drvdata(cpu_dai, sport_handle);
        return 0;
 }
 
@@ -161,7 +160,7 @@ static int bf5xx_ad73311_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret = 0;
 
        pr_debug("%s rate %d format %x\n", __func__, params_rate(params),
@@ -185,24 +184,20 @@ static struct snd_soc_ops bf5xx_ad73311_ops = {
 static struct snd_soc_dai_link bf5xx_ad73311_dai = {
        .name = "ad73311",
        .stream_name = "AD73311",
-       .cpu_dai = &bf5xx_i2s_dai,
-       .codec_dai = &ad73311_dai,
+       .cpu_dai_name = "bf5xx-i2s",
+       .codec_dai_name = "ad73311-hifi",
+       .platform_name = "bfin-pcm-audio",
+       .codec_name = "ad73311-codec",
        .ops = &bf5xx_ad73311_ops,
 };
 
 static struct snd_soc_card bf5xx_ad73311 = {
        .name = "bf5xx_ad73311",
-       .platform = &bf5xx_i2s_soc_platform,
        .probe = bf5xx_probe,
        .dai_link = &bf5xx_ad73311_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device bf5xx_ad73311_snd_devdata = {
-       .card = &bf5xx_ad73311,
-       .codec_dev = &soc_codec_dev_ad73311,
-};
-
 static struct platform_device *bf5xx_ad73311_snd_device;
 
 static int __init bf5xx_ad73311_init(void)
@@ -214,8 +209,7 @@ static int __init bf5xx_ad73311_init(void)
        if (!bf5xx_ad73311_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(bf5xx_ad73311_snd_device, &bf5xx_ad73311_snd_devdata);
-       bf5xx_ad73311_snd_devdata.dev = &bf5xx_ad73311_snd_device->dev;
+       platform_set_drvdata(bf5xx_ad73311_snd_device, &bf5xx_ad73311);
        ret = platform_device_add(bf5xx_ad73311_snd_device);
 
        if (ret)
index 1d2a1adf25759070cfa96a3cab81c89c31630b30..890a0dccf902a4fc14922cd11565406df86ec0b7 100644 (file)
@@ -40,7 +40,6 @@
 #include <asm/dma.h>
 
 #include "bf5xx-i2s-pcm.h"
-#include "bf5xx-i2s.h"
 #include "bf5xx-sport.h"
 
 static void bf5xx_dma_irq(void *data)
@@ -257,14 +256,14 @@ int bf5xx_pcm_i2s_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -274,25 +273,44 @@ int bf5xx_pcm_i2s_new(struct snd_card *card, struct snd_soc_dai *dai,
        return ret;
 }
 
-struct snd_soc_platform bf5xx_i2s_soc_platform = {
-       .name           = "bf5xx-audio",
-       .pcm_ops        = &bf5xx_pcm_i2s_ops,
+static struct snd_soc_platform_driver bf5xx_i2s_soc_platform = {
+       .ops            = &bf5xx_pcm_i2s_ops,
        .pcm_new        = bf5xx_pcm_i2s_new,
        .pcm_free       = bf5xx_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(bf5xx_i2s_soc_platform);
 
-static int __init bfin_i2s_init(void)
+static int __devinit bfin_i2s_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&bf5xx_i2s_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &bf5xx_i2s_soc_platform);
 }
-module_init(bfin_i2s_init);
 
-static void __exit bfin_i2s_exit(void)
+static int __devexit bfin_i2s_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&bf5xx_i2s_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver bfin_i2s_pcm_driver = {
+       .driver = {
+                       .name = "bfin-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = bfin_i2s_soc_platform_probe,
+       .remove = __devexit_p(bfin_i2s_soc_platform_remove),
+};
+
+static int __init snd_bfin_i2s_pcm_init(void)
+{
+       return platform_driver_register(&bfin_i2s_pcm_driver);
+}
+module_init(snd_bfin_i2s_pcm_init);
+
+static void __exit snd_bfin_i2s_pcm_exit(void)
+{
+       platform_driver_unregister(&bfin_i2s_pcm_driver);
 }
-module_exit(bfin_i2s_exit);
+module_exit(snd_bfin_i2s_pcm_exit);
 
 MODULE_AUTHOR("Cliff Cai");
 MODULE_DESCRIPTION("ADI Blackfin I2S PCM DMA module");
index 4d4609a97c598df1a8ec0dddd2a7d76618b41f3a..0c2c5a68d4fff43bc2438749bceb7c5bc1b32148 100644 (file)
@@ -23,7 +23,4 @@ struct bf5xx_gpio {
        u32 frm;
 };
 
-/* platform data */
-extern struct snd_soc_platform bf5xx_i2s_soc_platform;
-
 #endif
index 3e6ada0dd1c42ef1b07ee144aca320fea9ebeaf5..d453b1e9d607d0d0e9d712bf981a3e6dda4ae17f 100644 (file)
@@ -42,7 +42,6 @@
 #include <linux/gpio.h>
 
 #include "bf5xx-sport.h"
-#include "bf5xx-i2s.h"
 
 struct bf5xx_i2s_port {
        u16 tcr1;
@@ -195,8 +194,7 @@ static void bf5xx_i2s_shutdown(struct snd_pcm_substream *substream,
                bf5xx_i2s.configured = 0;
 }
 
-static int bf5xx_i2s_probe(struct platform_device *pdev,
-                          struct snd_soc_dai *dai)
+static int bf5xx_i2s_probe(struct snd_soc_dai *dai)
 {
        pr_debug("%s enter\n", __func__);
        if (peripheral_request_list(&sport_req[sport_num][0], "soc-audio")) {
@@ -215,11 +213,11 @@ static int bf5xx_i2s_probe(struct platform_device *pdev,
        return 0;
 }
 
-static void bf5xx_i2s_remove(struct platform_device *pdev,
-                       struct snd_soc_dai *dai)
+static int bf5xx_i2s_remove(struct snd_soc_dai *dai)
 {
        pr_debug("%s enter\n", __func__);
        peripheral_free_list(&sport_req[sport_num][0]);
+       return 0;
 }
 
 #ifdef CONFIG_PM
@@ -228,9 +226,9 @@ static int bf5xx_i2s_suspend(struct snd_soc_dai *dai)
 
        pr_debug("%s : sport %d\n", __func__, dai->id);
 
-       if (dai->capture.active)
+       if (dai->capture_active)
                sport_rx_stop(sport_handle);
-       if (dai->playback.active)
+       if (dai->playback_active)
                sport_tx_stop(sport_handle);
        return 0;
 }
@@ -277,9 +275,7 @@ static struct snd_soc_dai_ops bf5xx_i2s_dai_ops = {
        .set_fmt        = bf5xx_i2s_set_dai_fmt,
 };
 
-struct snd_soc_dai bf5xx_i2s_dai = {
-       .name = "bf5xx-i2s",
-       .id = 0,
+static struct snd_soc_dai_driver bf5xx_i2s_dai = {
        .probe = bf5xx_i2s_probe,
        .remove = bf5xx_i2s_remove,
        .suspend = bf5xx_i2s_suspend,
@@ -296,18 +292,39 @@ struct snd_soc_dai bf5xx_i2s_dai = {
                .formats = BF5XX_I2S_FORMATS,},
        .ops = &bf5xx_i2s_dai_ops,
 };
-EXPORT_SYMBOL_GPL(bf5xx_i2s_dai);
+
+static int bfin_i2s_drv_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dai(&pdev->dev, &bf5xx_i2s_dai);
+}
+
+static int __devexit bfin_i2s_drv_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver bfin_i2s_driver = {
+       .probe = bfin_i2s_drv_probe,
+       .remove = __devexit_p(bfin_i2s_drv_remove),
+
+       .driver = {
+               .name = "bf5xx-i2s",
+               .owner = THIS_MODULE,
+       },
+};
 
 static int __init bfin_i2s_init(void)
 {
-       return snd_soc_register_dai(&bf5xx_i2s_dai);
+       return platform_driver_register(&bfin_i2s_driver);
 }
-module_init(bfin_i2s_init);
 
 static void __exit bfin_i2s_exit(void)
 {
-       snd_soc_unregister_dai(&bf5xx_i2s_dai);
+       platform_driver_unregister(&bfin_i2s_driver);
 }
+
+module_init(bfin_i2s_init);
 module_exit(bfin_i2s_exit);
 
 /* Module information */
diff --git a/sound/soc/blackfin/bf5xx-i2s.h b/sound/soc/blackfin/bf5xx-i2s.h
deleted file mode 100644 (file)
index 264ecdc..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * sound/soc/blackfin/bf5xx-i2s.h
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef _BF5XX_I2S_H
-#define _BF5XX_I2S_H
-
-extern struct snd_soc_dai bf5xx_i2s_dai;
-
-#endif
index 3a00fa4dbe6d4202d5e32647a684000335c71e29..36f2769eb912b67c04bb08cb60a28681f7977f29 100644 (file)
 #include "../codecs/ssm2602.h"
 #include "bf5xx-sport.h"
 #include "bf5xx-i2s-pcm.h"
-#include "bf5xx-i2s.h"
 
 static struct snd_soc_card bf5xx_ssm2602;
 
 static int bf5xx_ssm2602_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        pr_debug("%s enter\n", __func__);
-       cpu_dai->private_data = sport_handle;
+       snd_soc_dai_set_drvdata(cpu_dai, sport_handle);
        return 0;
 }
 
@@ -60,8 +59,8 @@ static int bf5xx_ssm2602_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
 
@@ -118,36 +117,19 @@ static struct snd_soc_ops bf5xx_ssm2602_ops = {
 static struct snd_soc_dai_link bf5xx_ssm2602_dai = {
        .name = "ssm2602",
        .stream_name = "SSM2602",
-       .cpu_dai = &bf5xx_i2s_dai,
-       .codec_dai = &ssm2602_dai,
+       .cpu_dai_name = "bf5xx-i2s",
+       .codec_dai_name = "ssm2602-hifi",
+       .platform_name = "bf5xx-pcm-audio",
+       .codec_name = "ssm2602-codec.0-0x1b",
        .ops = &bf5xx_ssm2602_ops,
 };
 
-/*
- * SSM2602 2 wire address is determined by CSB
- * state during powerup.
- *    low  = 0x1a
- *    high = 0x1b
- */
-
-static struct ssm2602_setup_data bf5xx_ssm2602_setup = {
-       .i2c_bus = 0,
-       .i2c_address = 0x1b,
-};
-
 static struct snd_soc_card bf5xx_ssm2602 = {
        .name = "bf5xx_ssm2602",
-       .platform = &bf5xx_i2s_soc_platform,
        .dai_link = &bf5xx_ssm2602_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device bf5xx_ssm2602_snd_devdata = {
-       .card = &bf5xx_ssm2602,
-       .codec_dev = &soc_codec_dev_ssm2602,
-       .codec_data = &bf5xx_ssm2602_setup,
-};
-
 static struct platform_device *bf5xx_ssm2602_snd_device;
 
 static int __init bf5xx_ssm2602_init(void)
@@ -159,9 +141,7 @@ static int __init bf5xx_ssm2602_init(void)
        if (!bf5xx_ssm2602_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(bf5xx_ssm2602_snd_device,
-                               &bf5xx_ssm2602_snd_devdata);
-       bf5xx_ssm2602_snd_devdata.dev = &bf5xx_ssm2602_snd_device->dev;
+       platform_set_drvdata(bf5xx_ssm2602_snd_device, &bf5xx_ssm2602);
        ret = platform_device_add(bf5xx_ssm2602_snd_device);
 
        if (ret)
index 6bac1ac1a315b72ee8b9fe134f4b94665a2cb47b..74cf759b78a6ceac0fa2210e25f540e191ed1e08 100644 (file)
@@ -290,14 +290,14 @@ static int bf5xx_pcm_tdm_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = bf5xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -307,25 +307,44 @@ out:
        return ret;
 }
 
-struct snd_soc_platform bf5xx_tdm_soc_platform = {
-       .name           = "bf5xx-audio",
-       .pcm_ops        = &bf5xx_pcm_tdm_ops,
+static struct snd_soc_platform_driver bf5xx_tdm_soc_platform = {
+       .ops        = &bf5xx_pcm_tdm_ops,
        .pcm_new        = bf5xx_pcm_tdm_new,
        .pcm_free       = bf5xx_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(bf5xx_tdm_soc_platform);
 
-static int __init bfin_pcm_tdm_init(void)
+static int __devinit bf5xx_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&bf5xx_tdm_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &bf5xx_tdm_soc_platform);
 }
-module_init(bfin_pcm_tdm_init);
 
-static void __exit bfin_pcm_tdm_exit(void)
+static int __devexit bf5xx_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&bf5xx_tdm_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver bfin_tdm_driver = {
+       .driver = {
+                       .name = "bf5xx-tdm-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = bf5xx_soc_platform_probe,
+       .remove = __devexit_p(bf5xx_soc_platform_remove),
+};
+
+static int __init snd_bfin_tdm_init(void)
+{
+       return platform_driver_register(&bfin_tdm_driver);
+}
+module_init(snd_bfin_tdm_init);
+
+static void __exit snd_bfin_tdm_exit(void)
+{
+       platform_driver_unregister(&bfin_tdm_driver);
 }
-module_exit(bfin_pcm_tdm_exit);
+module_exit(snd_bfin_tdm_exit);
 
 MODULE_AUTHOR("Barry Song");
 MODULE_DESCRIPTION("ADI Blackfin TDM PCM DMA module");
index ddc5047df88c9b00477ec7034884609c3cc9dce6..7f8cc01c447714326e88c126fc850fc87405c382 100644 (file)
@@ -15,7 +15,4 @@ struct bf5xx_pcm_dma_params {
        char *name;                     /* stream identifier */
 };
 
-/* platform data */
-extern struct snd_soc_platform bf5xx_tdm_soc_platform;
-
 #endif
index 24c14269f4bc498601fb920e130b1ff44c5d4028..125123929f16c28d1e52ca01ebde662196f66253 100644 (file)
@@ -214,9 +214,9 @@ static int bf5xx_tdm_suspend(struct snd_soc_dai *dai)
 
        if (!dai->active)
                return 0;
-       if (dai->capture.active)
+       if (dai->capture_active)
                sport_rx_stop(sport);
-       if (dai->playback.active)
+       if (dai->playback_active)
                sport_tx_stop(sport);
        return 0;
 }
@@ -224,7 +224,7 @@ static int bf5xx_tdm_suspend(struct snd_soc_dai *dai)
 static int bf5xx_tdm_resume(struct snd_soc_dai *dai)
 {
        int ret;
-       struct sport_device *sport = dai->private_data;
+       struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
 
        if (!dai->active)
                return 0;
@@ -262,9 +262,7 @@ static struct snd_soc_dai_ops bf5xx_tdm_dai_ops = {
        .set_channel_map   = bf5xx_tdm_set_channel_map,
 };
 
-struct snd_soc_dai bf5xx_tdm_dai = {
-       .name = "bf5xx-tdm",
-       .id = 0,
+static struct snd_soc_dai_driver bf5xx_tdm_dai = {
        .suspend = bf5xx_tdm_suspend,
        .resume = bf5xx_tdm_resume,
        .playback = {
@@ -279,7 +277,6 @@ struct snd_soc_dai bf5xx_tdm_dai = {
                .formats = SNDRV_PCM_FMTBIT_S32_LE,},
        .ops = &bf5xx_tdm_dai_ops,
 };
-EXPORT_SYMBOL_GPL(bf5xx_tdm_dai);
 
 static int __devinit bfin_tdm_probe(struct platform_device *pdev)
 {
@@ -320,7 +317,7 @@ static int __devinit bfin_tdm_probe(struct platform_device *pdev)
                goto sport_config_err;
        }
 
-       ret = snd_soc_register_dai(&bf5xx_tdm_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &bf5xx_tdm_dai);
        if (ret) {
                pr_err("Failed to register DAI: %d\n", ret);
                goto sport_config_err;
@@ -337,7 +334,7 @@ sport_config_err:
 static int __devexit bfin_tdm_remove(struct platform_device *pdev)
 {
        peripheral_free_list(&sport_req[sport_num][0]);
-       snd_soc_unregister_dai(&bf5xx_tdm_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        return 0;
 }
index 04189a18c1bad941dc0a77d6d66134b7492109a7..e986a3ea3315781afadda87eff824944ae07d78a 100644 (file)
@@ -20,6 +20,4 @@ struct bf5xx_tdm_port {
        int configured;
 };
 
-extern struct snd_soc_dai bf5xx_tdm_dai;
-
 #endif
index 83f5c67d3c41630794ee8d2aa3fc54409e240a70..bfdd92b78fb6dbe3050abdf8c36370b260c79dd8 100644 (file)
@@ -61,6 +61,7 @@ config SND_SOC_ALL_CODECS
        select SND_SOC_WM8955 if I2C
        select SND_SOC_WM8960 if I2C
        select SND_SOC_WM8961 if I2C
+       select SND_SOC_WM8962 if I2C
        select SND_SOC_WM8971 if I2C
        select SND_SOC_WM8974 if I2C
        select SND_SOC_WM8978 if I2C
@@ -248,6 +249,9 @@ config SND_SOC_WM8960
 config SND_SOC_WM8961
        tristate
 
+config SND_SOC_WM8962
+       tristate
+
 config SND_SOC_WM8971
        tristate
 
index 53524095759c62ed322a033d818c78543182749a..9c3c39fd99ad2370660d1c55aa0995eb2020974a 100644 (file)
@@ -46,6 +46,7 @@ snd-soc-wm8940-objs := wm8940.o
 snd-soc-wm8955-objs := wm8955.o
 snd-soc-wm8960-objs := wm8960.o
 snd-soc-wm8961-objs := wm8961.o
+snd-soc-wm8962-objs := wm8962.o wm8962-tables.o
 snd-soc-wm8971-objs := wm8971.o
 snd-soc-wm8974-objs := wm8974.o
 snd-soc-wm8978-objs := wm8978.o
@@ -115,6 +116,7 @@ obj-$(CONFIG_SND_SOC_WM8940)        += snd-soc-wm8940.o
 obj-$(CONFIG_SND_SOC_WM8955)   += snd-soc-wm8955.o
 obj-$(CONFIG_SND_SOC_WM8960)   += snd-soc-wm8960.o
 obj-$(CONFIG_SND_SOC_WM8961)   += snd-soc-wm8961.o
+obj-$(CONFIG_SND_SOC_WM8962)   += snd-soc-wm8962.o
 obj-$(CONFIG_SND_SOC_WM8971)   += snd-soc-wm8971.o
 obj-$(CONFIG_SND_SOC_WM8974)   += snd-soc-wm8974.o
 obj-$(CONFIG_SND_SOC_WM8978)   += snd-soc-wm8978.o
index 1f5e57a4bb7accdfdad3eefdd209b9b056b7351c..12c87d37eba19664a8d3336591caa2b7381f2703 100644 (file)
@@ -21,7 +21,6 @@
 #include <sound/ac97_codec.h>
 #include <sound/initval.h>
 #include <sound/soc.h>
-#include "ac97.h"
 
 #define AC97_VERSION "0.6"
 
@@ -30,8 +29,7 @@ static int ac97_prepare(struct snd_pcm_substream *substream,
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        int reg = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
                  AC97_PCM_FRONT_DAC_RATE : AC97_PCM_LR_ADC_RATE;
@@ -46,8 +44,8 @@ static struct snd_soc_dai_ops ac97_dai_ops = {
        .prepare        = ac97_prepare,
 };
 
-struct snd_soc_dai ac97_dai = {
-       .name = "AC97 HiFi",
+static struct snd_soc_dai_driver ac97_dai = {
+       .name = "ac97-hifi",
        .ac97_control = 1,
        .playback = {
                .stream_name = "AC97 Playback",
@@ -63,7 +61,6 @@ struct snd_soc_dai ac97_dai = {
                .formats = SND_SOC_STD_AC97_FMTS,},
        .ops = &ac97_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ac97_dai);
 
 static unsigned int ac97_read(struct snd_soc_codec *codec,
        unsigned int reg)
@@ -78,95 +75,49 @@ static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
        return 0;
 }
 
-static int ac97_soc_probe(struct platform_device *pdev)
+static int ac97_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_codec *codec;
        struct snd_ac97_bus *ac97_bus;
        struct snd_ac97_template ac97_template;
-       int i;
-       int ret = 0;
+       int ret;
 
        printk(KERN_INFO "AC97 SoC Audio Codec %s\n", AC97_VERSION);
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (!socdev->card->codec)
-               return -ENOMEM;
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->name = "AC97";
-       codec->owner = THIS_MODULE;
-       codec->dai = &ac97_dai;
-       codec->num_dai = 1;
-       codec->write = ac97_write;
-       codec->read = ac97_read;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto err;
+       ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
+       if (ret < 0) {
+               printk(KERN_ERR "ASoC: failed to init gen ac97 glue\n");
+               return ret;
+       }
 
        /* add codec as bus device for standard ac97 */
-       ret = snd_ac97_bus(codec->card, 0, &soc_ac97_ops, NULL, &ac97_bus);
+       ret = snd_ac97_bus(codec->card->snd_card, 0, &soc_ac97_ops, NULL, &ac97_bus);
        if (ret < 0)
-               goto bus_err;
+               return ret;
 
        memset(&ac97_template, 0, sizeof(struct snd_ac97_template));
        ret = snd_ac97_mixer(ac97_bus, &ac97_template, &codec->ac97);
        if (ret < 0)
-               goto bus_err;
-
-       for (i = 0; i < card->num_links; i++) {
-               if (card->dai_link[i].codec_dai->ac97_control) {
-                       snd_ac97_dev_add_pdata(codec->ac97,
-                               card->dai_link[i].cpu_dai->ac97_pdata);
-               }
-       }
+               return ret;
 
        return 0;
-
-bus_err:
-       snd_soc_free_pcms(socdev);
-
-err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
-       return ret;
 }
 
-static int ac97_soc_remove(struct platform_device *pdev)
+static int ac97_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (!codec)
-               return 0;
-
-       snd_soc_free_pcms(socdev);
-       kfree(socdev->card->codec);
-
        return 0;
 }
 
 #ifdef CONFIG_PM
-static int ac97_soc_suspend(struct platform_device *pdev, pm_message_t msg)
+static int ac97_soc_suspend(struct snd_soc_codec *codec, pm_message_t msg)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_ac97_suspend(socdev->card->codec->ac97);
+       snd_ac97_suspend(codec->ac97);
 
        return 0;
 }
 
-static int ac97_soc_resume(struct platform_device *pdev)
+static int ac97_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_ac97_resume(socdev->card->codec->ac97);
+       snd_ac97_resume(codec->ac97);
 
        return 0;
 }
@@ -175,13 +126,48 @@ static int ac97_soc_resume(struct platform_device *pdev)
 #define ac97_soc_resume NULL
 #endif
 
-struct snd_soc_codec_device soc_codec_dev_ac97 = {
+static struct snd_soc_codec_driver soc_codec_dev_ac97 = {
+       .write = ac97_write,
+       .read = ac97_read,
        .probe =        ac97_soc_probe,
        .remove =       ac97_soc_remove,
        .suspend =      ac97_soc_suspend,
        .resume =       ac97_soc_resume,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_ac97);
+
+static __devinit int ac97_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_ac97, &ac97_dai, 1);
+}
+
+static int __devexit ac97_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver ac97_codec_driver = {
+       .driver = {
+                       .name = "ac97-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = ac97_probe,
+       .remove = __devexit_p(ac97_remove),
+};
+
+static int __init ac97_init(void)
+{
+       return platform_driver_register(&ac97_codec_driver);
+}
+module_init(ac97_init);
+
+static void __exit ac97_exit(void)
+{
+       platform_driver_unregister(&ac97_codec_driver);
+}
+module_exit(ac97_exit);
 
 MODULE_DESCRIPTION("Soc Generic AC97 driver");
 MODULE_AUTHOR("Liam Girdwood");
diff --git a/sound/soc/codecs/ac97.h b/sound/soc/codecs/ac97.h
deleted file mode 100644 (file)
index 281aa42..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * linux/sound/codecs/ac97.h -- ALSA SoC Layer
- *
- * Author:             Liam Girdwood
- * Created:            Dec 1st 2005
- * Copyright:  Wolfson Microelectronics. PLC.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef __LINUX_SND_SOC_AC97_H
-#define __LINUX_SND_SOC_AC97_H
-
-extern struct snd_soc_codec_device soc_codec_dev_ac97;
-extern struct snd_soc_dai ac97_dai;
-
-#endif
index a01006c8c606ffd613b250bf7f95fbc95ebaa05c..d272534c8f8413dba5221dc60d01fdbfb74b72e8 100644 (file)
 
 /* codec private data */
 struct ad1836_priv {
-       struct snd_soc_codec codec;
-       u16 reg_cache[AD1836_NUM_REGS];
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
-static struct snd_soc_codec *ad1836_codec;
-struct snd_soc_codec_device soc_codec_dev_ad1836;
-static int ad1836_register(struct ad1836_priv *ad1836);
-static void ad1836_unregister(struct ad1836_priv *ad1836);
-
 /*
  * AD1836 volume/mute/de-emphasis etc. controls
  */
@@ -146,8 +141,7 @@ static int ad1836_hw_params(struct snd_pcm_substream *substream,
        int word_len = 0;
 
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* bit size */
        switch (params_format(params)) {
@@ -173,12 +167,9 @@ static int ad1836_hw_params(struct snd_pcm_substream *substream,
 }
 
 #ifdef CONFIG_PM
-static int ad1836_soc_suspend(struct platform_device *pdev,
+static int ad1836_soc_suspend(struct snd_soc_codec *codec,
                pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        /* reset clock control mode */
        u16 adc_ctrl2 = snd_soc_read(codec, AD1836_ADC_CTRL2);
        adc_ctrl2 &= ~AD1836_ADC_SERFMT_MASK;
@@ -186,11 +177,8 @@ static int ad1836_soc_suspend(struct platform_device *pdev,
        return snd_soc_write(codec, AD1836_ADC_CTRL2, adc_ctrl2);
 }
 
-static int ad1836_soc_resume(struct platform_device *pdev)
+static int ad1836_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        /* restore clock control mode */
        u16 adc_ctrl2 = snd_soc_read(codec, AD1836_ADC_CTRL2);
        adc_ctrl2 |= AD1836_ADC_AUX;
@@ -202,49 +190,14 @@ static int ad1836_soc_resume(struct platform_device *pdev)
 #define ad1836_soc_resume  NULL
 #endif
 
-static int __devinit ad1836_spi_probe(struct spi_device *spi)
-{
-       struct snd_soc_codec *codec;
-       struct ad1836_priv *ad1836;
-
-       ad1836 = kzalloc(sizeof(struct ad1836_priv), GFP_KERNEL);
-       if (ad1836 == NULL)
-               return -ENOMEM;
-
-       codec = &ad1836->codec;
-       codec->control_data = spi;
-       codec->dev = &spi->dev;
-
-       dev_set_drvdata(&spi->dev, ad1836);
-
-       return ad1836_register(ad1836);
-}
-
-static int __devexit ad1836_spi_remove(struct spi_device *spi)
-{
-       struct ad1836_priv *ad1836 = dev_get_drvdata(&spi->dev);
-
-       ad1836_unregister(ad1836);
-       return 0;
-}
-
-static struct spi_driver ad1836_spi_driver = {
-       .driver = {
-               .name   = "ad1836",
-               .owner  = THIS_MODULE,
-       },
-       .probe          = ad1836_spi_probe,
-       .remove         = __devexit_p(ad1836_spi_remove),
-};
-
 static struct snd_soc_dai_ops ad1836_dai_ops = {
        .hw_params = ad1836_hw_params,
        .set_fmt = ad1836_set_dai_fmt,
 };
 
 /* codec DAI instance */
-struct snd_soc_dai ad1836_dai = {
-       .name = "AD1836",
+static struct snd_soc_dai_driver ad1836_dai = {
+       .name = "ad1836-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -263,35 +216,13 @@ struct snd_soc_dai ad1836_dai = {
        },
        .ops = &ad1836_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ad1836_dai);
 
-static int ad1836_register(struct ad1836_priv *ad1836)
+static int ad1836_probe(struct snd_soc_codec *codec)
 {
-       int ret;
-       struct snd_soc_codec *codec = &ad1836->codec;
-
-       if (ad1836_codec) {
-               dev_err(codec->dev, "Another ad1836 is registered\n");
-               kfree(ad1836);
-               return -EINVAL;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-       snd_soc_codec_set_drvdata(codec, ad1836);
-       codec->reg_cache = ad1836->reg_cache;
-       codec->reg_cache_size = AD1836_NUM_REGS;
-       codec->name = "AD1836";
-       codec->owner = THIS_MODULE;
-       codec->dai = &ad1836_dai;
-       codec->num_dai = 1;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       ad1836_dai.dev = codec->dev;
-       ad1836_codec = codec;
+       struct ad1836_priv *ad1836 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0;
 
+       codec->control_data = ad1836->control_data;
        ret = snd_soc_codec_set_cache_io(codec, 4, 12, SND_SOC_SPI);
        if (ret < 0) {
                dev_err(codec->dev, "failed to set cache I/O: %d\n",
@@ -319,81 +250,69 @@ static int ad1836_register(struct ad1836_priv *ad1836)
        snd_soc_write(codec, AD1836_DAC_L3_VOL, 0x3FF);
        snd_soc_write(codec, AD1836_DAC_R3_VOL, 0x3FF);
 
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               kfree(ad1836);
-               return ret;
-       }
-
-       ret = snd_soc_register_dai(&ad1836_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               kfree(ad1836);
-               return ret;
-       }
-
-       return 0;
-}
-
-static void ad1836_unregister(struct ad1836_priv *ad1836)
-{
-       snd_soc_unregister_dai(&ad1836_dai);
-       snd_soc_unregister_codec(&ad1836->codec);
-       kfree(ad1836);
-       ad1836_codec = NULL;
-}
-
-static int ad1836_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (ad1836_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = ad1836_codec;
-       codec = ad1836_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
        snd_soc_add_controls(codec, ad1836_snd_controls,
                             ARRAY_SIZE(ad1836_snd_controls));
        snd_soc_dapm_new_controls(codec, ad1836_dapm_widgets,
                                  ARRAY_SIZE(ad1836_dapm_widgets));
        snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths));
 
-pcm_err:
        return ret;
 }
 
 /* power down chip */
-static int ad1836_remove(struct platform_device *pdev)
+static int ad1836_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       /* reset clock control mode */
+       u16 adc_ctrl2 = snd_soc_read(codec, AD1836_ADC_CTRL2);
+       adc_ctrl2 &= ~AD1836_ADC_SERFMT_MASK;
 
-       return 0;
+       return snd_soc_write(codec, AD1836_ADC_CTRL2, adc_ctrl2);
 }
 
-struct snd_soc_codec_device soc_codec_dev_ad1836 = {
+static struct snd_soc_codec_driver soc_codec_dev_ad1836 = {
        .probe =        ad1836_probe,
        .remove =       ad1836_remove,
        .suspend =      ad1836_soc_suspend,
        .resume =       ad1836_soc_resume,
+       .reg_cache_size = AD1836_NUM_REGS,
+       .reg_word_size = sizeof(u16),
+};
+
+static int __devinit ad1836_spi_probe(struct spi_device *spi)
+{
+       struct ad1836_priv *ad1836;
+       int ret;
+
+       ad1836 = kzalloc(sizeof(struct ad1836_priv), GFP_KERNEL);
+       if (ad1836 == NULL)
+               return -ENOMEM;
+
+       spi_set_drvdata(spi, ad1836);
+       ad1836->control_data = spi;
+       ad1836->control_type = SND_SOC_SPI;
+
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_ad1836, &ad1836_dai, 1);
+       if (ret < 0)
+               kfree(ad1836);
+       return ret;
+}
+
+static int __devexit ad1836_spi_remove(struct spi_device *spi)
+{
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
+       return 0;
+}
+
+static struct spi_driver ad1836_spi_driver = {
+       .driver = {
+               .name   = "ad1836-codec",
+               .owner  = THIS_MODULE,
+       },
+       .probe          = ad1836_spi_probe,
+       .remove         = __devexit_p(ad1836_spi_remove),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_ad1836);
 
 static int __init ad1836_init(void)
 {
index e9d90d3951c520f4c18fdb56d9eae6d72dd0b160..845596717fdf522d2de2d83d37e123825a36cade 100644 (file)
@@ -60,6 +60,4 @@
 
 #define AD1836_NUM_REGS                16
 
-extern struct snd_soc_dai ad1836_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ad1836;
 #endif
index 1def75e4862f60fe2a143470cdb2ae458453e08a..fa2834c91b9f5e8507841eba8155d54a59386e35 100644 (file)
 
 /* codec private data */
 struct ad193x_priv {
-       unsigned int sysclk;
-       struct snd_soc_codec codec;
        u8 reg_cache[AD193X_NUM_REGS];
+       enum snd_soc_control_type bus_type;
+       void *control_data;
+       int sysclk;
 };
 
 /* ad193x register cache & default register settings */
@@ -34,9 +35,6 @@ static const u8 ad193x_reg[AD193X_NUM_REGS] = {
        0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0, 0,
 };
 
-static struct snd_soc_codec *ad193x_codec;
-struct snd_soc_codec_device soc_codec_dev_ad193x;
-
 /*
  * AD193X volume/mute/de-emphasis etc. controls
  */
@@ -275,8 +273,7 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
        int word_len = 0, reg = 0, master_rate = 0;
 
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec);
 
        /* bit size */
@@ -323,100 +320,6 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
        return 0;
 }
 
-static int ad193x_bus_probe(struct device *dev, void *ctrl_data, int bus_type)
-{
-       struct snd_soc_codec *codec;
-       struct ad193x_priv *ad193x;
-       int ret;
-
-       if (ad193x_codec) {
-               dev_err(dev, "Another ad193x is registered\n");
-               return -EINVAL;
-       }
-
-       ad193x = kzalloc(sizeof(struct ad193x_priv), GFP_KERNEL);
-       if (ad193x == NULL)
-               return -ENOMEM;
-
-       dev_set_drvdata(dev, ad193x);
-
-       codec = &ad193x->codec;
-       mutex_init(&codec->mutex);
-       codec->control_data = ctrl_data;
-       codec->dev = dev;
-       snd_soc_codec_set_drvdata(codec, ad193x);
-       codec->reg_cache = ad193x->reg_cache;
-       codec->reg_cache_size = AD193X_NUM_REGS;
-       codec->name = "AD193X";
-       codec->owner = THIS_MODULE;
-       codec->dai = &ad193x_dai;
-       codec->num_dai = 1;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       ad193x_dai.dev = codec->dev;
-       ad193x_codec = codec;
-
-       memcpy(codec->reg_cache, ad193x_reg, AD193X_NUM_REGS);
-
-       if (bus_type == SND_SOC_I2C)
-               ret = snd_soc_codec_set_cache_io(codec, 8, 8, bus_type);
-       else
-               ret = snd_soc_codec_set_cache_io(codec, 16, 8, bus_type);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to set cache I/O: %d\n",
-                               ret);
-               kfree(ad193x);
-               return ret;
-       }
-
-       /* default setting for ad193x */
-
-       /* unmute dac channels */
-       snd_soc_write(codec, AD193X_DAC_CHNL_MUTE, 0x0);
-       /* de-emphasis: 48kHz, powedown dac */
-       snd_soc_write(codec, AD193X_DAC_CTRL2, 0x1A);
-       /* powerdown dac, dac in tdm mode */
-       snd_soc_write(codec, AD193X_DAC_CTRL0, 0x41);
-       /* high-pass filter enable */
-       snd_soc_write(codec, AD193X_ADC_CTRL0, 0x3);
-       /* sata delay=1, adc aux mode */
-       snd_soc_write(codec, AD193X_ADC_CTRL1, 0x43);
-       /* pll input: mclki/xi */
-       snd_soc_write(codec, AD193X_PLL_CLK_CTRL0, 0x99); /* mclk=24.576Mhz: 0x9D; mclk=12.288Mhz: 0x99 */
-       snd_soc_write(codec, AD193X_PLL_CLK_CTRL1, 0x04);
-       ad193x->sysclk = 12288000;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               kfree(ad193x);
-               return ret;
-       }
-
-       ret = snd_soc_register_dai(&ad193x_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               kfree(ad193x);
-               return ret;
-       }
-
-       return 0;
-}
-
-static int ad193x_bus_remove(struct device *dev)
-{
-       struct ad193x_priv *ad193x = dev_get_drvdata(dev);
-
-       snd_soc_unregister_dai(&ad193x_dai);
-       snd_soc_unregister_codec(&ad193x->codec);
-       kfree(ad193x);
-       ad193x_codec = NULL;
-
-       return 0;
-}
-
 static struct snd_soc_dai_ops ad193x_dai_ops = {
        .hw_params = ad193x_hw_params,
        .digital_mute = ad193x_mute,
@@ -426,8 +329,8 @@ static struct snd_soc_dai_ops ad193x_dai_ops = {
 };
 
 /* codec DAI instance */
-struct snd_soc_dai ad193x_dai = {
-       .name = "AD193X",
+static struct snd_soc_dai_driver ad193x_dai = {
+       .name = "ad193x-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -446,28 +349,39 @@ struct snd_soc_dai ad193x_dai = {
        },
        .ops = &ad193x_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ad193x_dai);
 
-static int ad193x_probe(struct platform_device *pdev)
+static int ad193x_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
+       struct ad193x_priv *ad193x = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       if (ad193x_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
+       codec->control_data = ad193x->control_data;
+       if (ad193x->bus_type == SND_SOC_I2C)
+               ret = snd_soc_codec_set_cache_io(codec, 8, 8, ad193x->bus_type);
+       else
+               ret = snd_soc_codec_set_cache_io(codec, 16, 8, ad193x->bus_type);
+       if (ret < 0) {
+               dev_err(codec->dev, "failed to set cache I/O: %d\n",
+                               ret);
+               kfree(ad193x);
+               return ret;
        }
 
-       socdev->card->codec = ad193x_codec;
-       codec = ad193x_codec;
+       /* default setting for ad193x */
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
+       /* unmute dac channels */
+       snd_soc_write(codec, AD193X_DAC_CHNL_MUTE, 0x0);
+       /* de-emphasis: 48kHz, powedown dac */
+       snd_soc_write(codec, AD193X_DAC_CTRL2, 0x1A);
+       /* powerdown dac, dac in tdm mode */
+       snd_soc_write(codec, AD193X_DAC_CTRL0, 0x41);
+       /* high-pass filter enable */
+       snd_soc_write(codec, AD193X_ADC_CTRL0, 0x3);
+       /* sata delay=1, adc aux mode */
+       snd_soc_write(codec, AD193X_ADC_CTRL1, 0x43);
+       /* pll input: mclki/xi */
+       snd_soc_write(codec, AD193X_PLL_CLK_CTRL0, 0x99); /* mclk=24.576Mhz: 0x9D; mclk=12.288Mhz: 0x99 */
+       snd_soc_write(codec, AD193X_PLL_CLK_CTRL1, 0x04);
 
        snd_soc_add_controls(codec, ad193x_snd_controls,
                             ARRAY_SIZE(ad193x_snd_controls));
@@ -475,41 +389,47 @@ static int ad193x_probe(struct platform_device *pdev)
                                  ARRAY_SIZE(ad193x_dapm_widgets));
        snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths));
 
-pcm_err:
        return ret;
 }
 
-/* power down chip */
-static int ad193x_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_ad193x = {
+static struct snd_soc_codec_driver soc_codec_dev_ad193x = {
        .probe =        ad193x_probe,
-       .remove =       ad193x_remove,
+       .reg_cache_default = ad193x_reg,
+       .reg_cache_size = AD193X_NUM_REGS,
+       .reg_word_size = sizeof(u16),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_ad193x);
 
 #if defined(CONFIG_SPI_MASTER)
 static int __devinit ad193x_spi_probe(struct spi_device *spi)
 {
-       return ad193x_bus_probe(&spi->dev, spi, SND_SOC_SPI);
+       struct ad193x_priv *ad193x;
+       int ret;
+
+       ad193x = kzalloc(sizeof(struct ad193x_priv), GFP_KERNEL);
+       if (ad193x == NULL)
+               return -ENOMEM;
+
+       spi_set_drvdata(spi, ad193x);
+       ad193x->control_data = spi;
+       ad193x->bus_type = SND_SOC_SPI;
+
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_ad193x, &ad193x_dai, 1);
+       if (ret < 0)
+               kfree(ad193x);
+       return ret;
 }
 
 static int __devexit ad193x_spi_remove(struct spi_device *spi)
 {
-       return ad193x_bus_remove(&spi->dev);
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
+       return 0;
 }
 
 static struct spi_driver ad193x_spi_driver = {
        .driver = {
-               .name   = "ad193x",
+               .name   = "ad193x-codec",
                .owner  = THIS_MODULE,
        },
        .probe          = ad193x_spi_probe,
@@ -528,17 +448,34 @@ MODULE_DEVICE_TABLE(i2c, ad193x_id);
 static int __devinit ad193x_i2c_probe(struct i2c_client *client,
                const struct i2c_device_id *id)
 {
-       return ad193x_bus_probe(&client->dev, client, SND_SOC_I2C);
+       struct ad193x_priv *ad193x;
+       int ret;
+
+       ad193x = kzalloc(sizeof(struct ad193x_priv), GFP_KERNEL);
+       if (ad193x == NULL)
+               return -ENOMEM;
+
+       i2c_set_clientdata(client, ad193x);
+       ad193x->control_data = client;
+       ad193x->bus_type = SND_SOC_I2C;
+
+       ret =  snd_soc_register_codec(&client->dev,
+                       &soc_codec_dev_ad193x, &ad193x_dai, 1);
+       if (ret < 0)
+               kfree(ad193x);
+       return ret;
 }
 
 static int __devexit ad193x_i2c_remove(struct i2c_client *client)
 {
-       return ad193x_bus_remove(&client->dev);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
+       return 0;
 }
 
 static struct i2c_driver ad193x_i2c_driver = {
        .driver = {
-               .name = "ad193x",
+               .name = "ad193x-codec",
        },
        .probe    = ad193x_i2c_probe,
        .remove   = __devexit_p(ad193x_i2c_remove),
index 654ba64ae04c6d4b0e8ebc89a0138916c37eed1c..9747b54978775cd43fe5d5af4f0234670ba2ff2f 100644 (file)
@@ -80,7 +80,4 @@
 
 #define AD193X_NUM_REGS          17
 
-extern struct snd_soc_dai ad193x_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ad193x;
-
 #endif
index 70cfaec3be2c0efbcf57c0c753622e747683b67c..81a4440499366d386a144f3d40add9da4b128496 100644 (file)
@@ -138,8 +138,8 @@ static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
        return 0;
 }
 
-struct snd_soc_dai ad1980_dai = {
-       .name = "AC97",
+struct snd_soc_dai_driver ad1980_dai = {
+       .name = "ad1980-hifi",
        .ac97_control = 1,
        .playback = {
                .stream_name = "Playback",
@@ -185,53 +185,20 @@ err:
        return -EIO;
 }
 
-static int ad1980_soc_probe(struct platform_device *pdev)
+static int ad1980_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
+       int ret;
        u16 vendor_id2;
        u16 ext_status;
 
        printk(KERN_INFO "AD1980 SoC Audio Codec\n");
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (socdev->card->codec == NULL)
-               return -ENOMEM;
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->reg_cache =
-               kzalloc(sizeof(u16) * ARRAY_SIZE(ad1980_reg), GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto cache_err;
-       }
-       memcpy(codec->reg_cache, ad1980_reg, sizeof(u16) * \
-                       ARRAY_SIZE(ad1980_reg));
-       codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(ad1980_reg);
-       codec->reg_cache_step = 2;
-       codec->name = "AD1980";
-       codec->owner = THIS_MODULE;
-       codec->dai = &ad1980_dai;
-       codec->num_dai = 1;
-       codec->write = ac97_write;
-       codec->read = ac97_read;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
        ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
        if (ret < 0) {
                printk(KERN_ERR "ad1980: failed to register AC97 codec\n");
-               goto codec_err;
+               return ret;
        }
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto pcm_err;
-
-
        ret = ad1980_reset(codec, 0);
        if (ret < 0) {
                printk(KERN_ERR "Failed to reset AD1980: AC97 link error\n");
@@ -270,41 +237,59 @@ static int ad1980_soc_probe(struct platform_device *pdev)
        return 0;
 
 reset_err:
-       snd_soc_free_pcms(socdev);
-
-pcm_err:
        snd_soc_free_ac97_codec(codec);
-
-codec_err:
-       kfree(codec->reg_cache);
-
-cache_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
        return ret;
 }
 
-static int ad1980_soc_remove(struct platform_device *pdev)
+static int ad1980_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec == NULL)
-               return 0;
-
-       snd_soc_dapm_free(socdev);
-       snd_soc_free_pcms(socdev);
        snd_soc_free_ac97_codec(codec);
-       kfree(codec->reg_cache);
-       kfree(codec);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_ad1980 = {
+static struct snd_soc_codec_driver soc_codec_dev_ad1980 = {
        .probe =        ad1980_soc_probe,
        .remove =       ad1980_soc_remove,
+       .reg_cache_size = ARRAY_SIZE(ad1980_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_step = 2,
+       .write = ac97_write,
+       .read = ac97_read,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_ad1980);
+
+static __devinit int ad1980_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_ad1980, &ad1980_dai, 1);
+}
+
+static int __devexit ad1980_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver ad1980_codec_driver = {
+       .driver = {
+                       .name = "ad1980-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = ad1980_probe,
+       .remove = __devexit_p(ad1980_remove),
+};
+
+static int __init ad1980_init(void)
+{
+       return platform_driver_register(&ad1980_codec_driver);
+}
+module_init(ad1980_init);
+
+static void __exit ad1980_exit(void)
+{
+       platform_driver_unregister(&ad1980_codec_driver);
+}
+module_exit(ad1980_exit);
 
 MODULE_DESCRIPTION("ASoC ad1980 driver (Obsolete)");
 MODULE_AUTHOR("Roy Huang, Cliff Cai");
index 538f37c908068628eddf039194762a8e1bfb0898..eb0af44ad3dfb6f7050e8943814172d7ca4bc26e 100644 (file)
@@ -23,7 +23,4 @@
 #define PR5            0x2000
 #define PR6            0x4000
 
-extern struct snd_soc_dai ad1980_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ad1980;
-
 #endif
index 475807bea2c229d04e4e3ed91dd8647ffa26d259..c53955fe17b65875e8354063e897c6501edc7b50 100644 (file)
@@ -23,8 +23,8 @@
 
 #include "ad73311.h"
 
-struct snd_soc_dai ad73311_dai = {
-       .name = "AD73311",
+static struct snd_soc_dai_driver ad73311_dai = {
+       .name = "ad73311-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -38,68 +38,40 @@ struct snd_soc_dai ad73311_dai = {
                .rates = SNDRV_PCM_RATE_8000,
                .formats = SNDRV_PCM_FMTBIT_S16_LE, },
 };
-EXPORT_SYMBOL_GPL(ad73311_dai);
 
-static int ad73311_soc_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-       mutex_init(&codec->mutex);
-       codec->name = "AD73311";
-       codec->owner = THIS_MODULE;
-       codec->dai = &ad73311_dai;
-       codec->num_dai = 1;
-       socdev->card->codec = codec;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "ad73311: failed to create pcms\n");
-               goto pcm_err;
-       }
-
-       return ret;
+static struct snd_soc_codec_driver soc_codec_dev_ad73311;
 
-pcm_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
-       return ret;
+static int ad73311_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_ad73311, &ad73311_dai, 1);
 }
 
-static int ad73311_soc_remove(struct platform_device *pdev)
+static int ad73311_remove(struct platform_device *pdev)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec == NULL)
-               return 0;
-       snd_soc_free_pcms(socdev);
-       kfree(codec);
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_ad73311 = {
-       .probe =        ad73311_soc_probe,
-       .remove =       ad73311_soc_remove,
+static struct platform_driver ad73311_codec_driver = {
+       .driver = {
+                       .name = "ad73311-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = ad73311_probe,
+       .remove = __devexit_p(ad73311_remove),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_ad73311);
 
 static int __init ad73311_init(void)
 {
-       return snd_soc_register_dai(&ad73311_dai);
+       return platform_driver_register(&ad73311_codec_driver);
 }
 module_init(ad73311_init);
 
 static void __exit ad73311_exit(void)
 {
-       snd_soc_unregister_dai(&ad73311_dai);
+       platform_driver_unregister(&ad73311_codec_driver);
 }
 module_exit(ad73311_exit);
 
index 569573d2d4d7a628b18c9c1a108512e11a4e9008..4b353eefc0bf04508ffce2c24ecc36405773381d 100644 (file)
@@ -85,6 +85,4 @@
 #define REGF_INV               (1 << 6)
 #define REGF_ALB               (1 << 7)
 
-extern struct snd_soc_dai ad73311_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ad73311;
 #endif
index f8e75edb27b7ec793f21f32e10200db2d734148c..8402854ec15e30b320d31e1416896ced2f964850 100644 (file)
 #include <sound/initval.h>
 #include <sound/soc.h>
 
-#include "ads117x.h"
-
 #define ADS117X_RATES (SNDRV_PCM_RATE_8000_48000)
-
 #define ADS117X_FORMATS (SNDRV_PCM_FMTBIT_S16_LE)
 
-struct snd_soc_dai ads117x_dai = {
+static struct snd_soc_dai_driver ads117x_dai = {
 /* ADC */
-       .name = "ADS117X ADC",
-       .id = 1,
+       .name = "ads117x-hifi",
        .capture = {
                .stream_name = "Capture",
                .channels_min = 1,
@@ -36,75 +32,29 @@ struct snd_soc_dai ads117x_dai = {
                .rates = ADS117X_RATES,
                .formats = ADS117X_FORMATS,},
 };
-EXPORT_SYMBOL_GPL(ads117x_dai);
-
-static int ads117x_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
 
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-       codec->name = "ADS117X";
-       codec->owner = THIS_MODULE;
-       codec->dai = &ads117x_dai;
-       codec->num_dai = 1;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "ads117x: failed to create pcms\n");
-               kfree(codec);
-               return ret;
-       }
-
-       return 0;
-}
-
-static int ads117x_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       snd_soc_free_pcms(socdev);
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_ads117x = {
-       .probe =        ads117x_probe,
-       .remove =       ads117x_remove,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_ads117x);
+static struct snd_soc_codec_driver soc_codec_dev_ads117x;
 
-static __devinit int ads117x_platform_probe(struct platform_device *pdev)
+static __devinit int ads117x_probe(struct platform_device *pdev)
 {
-       ads117x_dai.dev = &pdev->dev;
-       return snd_soc_register_dai(&ads117x_dai);
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_ads117x, &ads117x_dai, 1);
 }
 
-static int __devexit ads117x_platform_remove(struct platform_device *pdev)
+static int __devexit ads117x_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&ads117x_dai);
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
 static struct platform_driver ads117x_codec_driver = {
        .driver = {
-                       .name = "ads117x",
+                       .name = "ads117x-codec",
                        .owner = THIS_MODULE,
        },
 
-       .probe = ads117x_platform_probe,
-       .remove = __devexit_p(ads117x_platform_remove),
+       .probe = ads117x_probe,
+       .remove = __devexit_p(ads117x_remove),
 };
 
 static int __init ads117x_init(void)
index dbcf50ec9bd175e32efed8f14b0d295730b87849..3ce028614002c1bbc14d094ccdf7d056fb8b436a 100644 (file)
@@ -9,5 +9,5 @@
  *  Free Software Foundation;  either version 2 of the  License, or (at your
  *  option) any later version.
  */
-extern struct snd_soc_dai ads117x_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ads117x;
+extern struct snd_soc_dai_driver ads117x_dai;
+extern struct snd_soc_codec_driver soc_codec_dev_ads117x;
index 192aebda3029628efa7f11e8a4b019d825f857ca..c27f8f59dc66d38cc4fb98fe7a428168333ac3db 100644 (file)
@@ -17,8 +17,6 @@
 #include <linux/spi/spi.h>
 #include <sound/asoundef.h>
 
-#include "ak4104.h"
-
 /* AK4104 registers addresses */
 #define AK4104_REG_CONTROL1            0x00
 #define AK4104_REG_RESERVED            0x01
 #define AK4104_TX_TXE                  (1 << 0)
 #define AK4104_TX_V                    (1 << 1)
 
-#define DRV_NAME "ak4104"
+#define DRV_NAME "ak4104-codec"
 
 struct ak4104_private {
-       struct snd_soc_codec codec;
-       u8 reg_cache[AK4104_NUM_REGS];
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
 static int ak4104_fill_cache(struct snd_soc_codec *codec)
@@ -58,7 +56,7 @@ static int ak4104_fill_cache(struct snd_soc_codec *codec)
        u8 *reg_cache = codec->reg_cache;
        struct spi_device *spi = codec->control_data;
 
-       for (i = 0; i < codec->reg_cache_size; i++) {
+       for (i = 0; i < codec->driver->reg_cache_size; i++) {
                int ret = spi_w8r8(spi, i | AK4104_READ);
                if (ret < 0) {
                        dev_err(&spi->dev, "SPI write failure\n");
@@ -76,7 +74,7 @@ static unsigned int ak4104_read_reg_cache(struct snd_soc_codec *codec,
 {
        u8 *reg_cache = codec->reg_cache;
 
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -EINVAL;
 
        return reg_cache[reg];
@@ -88,7 +86,7 @@ static int ak4104_spi_write(struct snd_soc_codec *codec, unsigned int reg,
        u8 *cache = codec->reg_cache;
        struct spi_device *spi = codec->control_data;
 
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -EINVAL;
 
        /* only write to the hardware if value has changed */
@@ -145,8 +143,7 @@ static int ak4104_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        int val = 0;
 
        /* set the IEC958 bits: consumer mode, no copyright bit */
@@ -178,8 +175,8 @@ static struct snd_soc_dai_ops ak4101_dai_ops = {
        .set_fmt = ak4104_set_dai_fmt,
 };
 
-struct snd_soc_dai ak4104_dai = {
-       .name = DRV_NAME,
+static struct snd_soc_dai_driver ak4104_dai = {
+       .name = "ak4104-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -192,45 +189,17 @@ struct snd_soc_dai ak4104_dai = {
        .ops = &ak4101_dai_ops,
 };
 
-static struct snd_soc_codec *ak4104_codec;
-
-static int ak4104_spi_probe(struct spi_device *spi)
+static int ak4104_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec;
-       struct ak4104_private *ak4104;
+       struct ak4104_private *ak4104 = snd_soc_codec_get_drvdata(codec);
        int ret, val;
 
-       spi->bits_per_word = 8;
-       spi->mode = SPI_MODE_0;
-       ret = spi_setup(spi);
-       if (ret < 0)
-               return ret;
-
-       ak4104 = kzalloc(sizeof(struct ak4104_private), GFP_KERNEL);
-       if (!ak4104) {
-               dev_err(&spi->dev, "could not allocate codec\n");
-               return -ENOMEM;
-       }
-
-       codec = &ak4104->codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->dev = &spi->dev;
-       codec->name = DRV_NAME;
-       codec->owner = THIS_MODULE;
-       codec->dai = &ak4104_dai;
-       codec->num_dai = 1;
-       snd_soc_codec_set_drvdata(codec, ak4104);
-       codec->control_data = spi;
-       codec->reg_cache = ak4104->reg_cache;
-       codec->reg_cache_size = AK4104_NUM_REGS;
+       codec->control_data = ak4104->control_data;
 
        /* read all regs and fill the cache */
        ret = ak4104_fill_cache(codec);
        if (ret < 0) {
-               dev_err(&spi->dev, "failed to fill register cache\n");
+               dev_err(codec->dev, "failed to fill register cache\n");
                return ret;
        }
 
@@ -238,93 +207,81 @@ static int ak4104_spi_probe(struct spi_device *spi)
         * should contain 0x5b. Not a good way to verify the presence of
         * the device, but there is no hardware ID register. */
        if (ak4104_read_reg_cache(codec, AK4104_REG_RESERVED) !=
-                                        AK4104_RESERVED_VAL) {
-               ret = -ENODEV;
-               goto error_free_codec;
-       }
+                                        AK4104_RESERVED_VAL)
+               return -ENODEV;
 
        /* set power-up and non-reset bits */
        val = ak4104_read_reg_cache(codec, AK4104_REG_CONTROL1);
        val |= AK4104_CONTROL1_PW | AK4104_CONTROL1_RSTN;
        ret = ak4104_spi_write(codec, AK4104_REG_CONTROL1, val);
        if (ret < 0)
-               goto error_free_codec;
+               return ret;
 
        /* enable transmitter */
        val = ak4104_read_reg_cache(codec, AK4104_REG_TX);
        val |= AK4104_TX_TXE;
        ret = ak4104_spi_write(codec, AK4104_REG_TX, val);
        if (ret < 0)
-               goto error_free_codec;
-
-       ak4104_codec = codec;
-       ret = snd_soc_register_dai(&ak4104_dai);
-       if (ret < 0) {
-               dev_err(&spi->dev, "failed to register DAI\n");
-               goto error_free_codec;
-       }
+               return ret;
 
-       spi_set_drvdata(spi, ak4104);
-       dev_info(&spi->dev, "SPI device initialized\n");
+       dev_info(codec->dev, "SPI device initialized\n");
        return 0;
-
-error_free_codec:
-       kfree(ak4104);
-       ak4104_dai.dev = NULL;
-       return ret;
 }
 
-static int __devexit ak4104_spi_remove(struct spi_device *spi)
+static int ak4104_remove(struct snd_soc_codec *codec)
 {
-       int ret, val;
-       struct ak4104_private *ak4104 = spi_get_drvdata(spi);
+       int val, ret;
 
-       val = ak4104_read_reg_cache(&ak4104->codec, AK4104_REG_CONTROL1);
+       val = ak4104_read_reg_cache(codec, AK4104_REG_CONTROL1);
        if (val < 0)
                return val;
 
        /* clear power-up and non-reset bits */
        val &= ~(AK4104_CONTROL1_PW | AK4104_CONTROL1_RSTN);
-       ret = ak4104_spi_write(&ak4104->codec, AK4104_REG_CONTROL1, val);
-       if (ret < 0)
-               return ret;
+       ret = ak4104_spi_write(codec, AK4104_REG_CONTROL1, val);
 
-       ak4104_codec = NULL;
-       kfree(ak4104);
-       return 0;
+       return ret;
 }
 
-static int ak4104_probe(struct platform_device *pdev)
+static struct snd_soc_codec_driver soc_codec_device_ak4104 = {
+       .probe =        ak4104_probe,
+       .remove =       ak4104_remove,
+       .reg_cache_size = AK4104_NUM_REGS,
+       .reg_word_size = sizeof(u16),
+};
+
+static int ak4104_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = ak4104_codec;
+       struct ak4104_private *ak4104;
        int ret;
 
-       /* Connect the codec to the socdev.  snd_soc_new_pcms() needs this. */
-       socdev->card->codec = codec;
-
-       /* Register PCMs */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms\n");
+       spi->bits_per_word = 8;
+       spi->mode = SPI_MODE_0;
+       ret = spi_setup(spi);
+       if (ret < 0)
                return ret;
-       }
 
-       return 0;
+       ak4104 = kzalloc(sizeof(struct ak4104_private), GFP_KERNEL);
+       if (ak4104 == NULL)
+               return -ENOMEM;
+
+       ak4104->control_data = spi;
+       ak4104->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, ak4104);
+
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_device_ak4104, &ak4104_dai, 1);
+       if (ret < 0)
+               kfree(ak4104);
+       return ret;
 }
 
-static int ak4104_remove(struct platform_device *pdev)
+static int __devexit ak4104_spi_remove(struct spi_device *spi)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       snd_soc_free_pcms(socdev);
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
-};
-
-struct snd_soc_codec_device soc_codec_device_ak4104 = {
-       .probe =        ak4104_probe,
-       .remove =       ak4104_remove
-};
-EXPORT_SYMBOL_GPL(soc_codec_device_ak4104);
+}
 
 static struct spi_driver ak4104_spi_driver = {
        .driver  = {
diff --git a/sound/soc/codecs/ak4104.h b/sound/soc/codecs/ak4104.h
deleted file mode 100644 (file)
index eb88fe7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _AK4104_H
-#define _AK4104_H
-
-extern struct snd_soc_dai ak4104_dai;
-extern struct snd_soc_codec_device soc_codec_device_ak4104;
-
-#endif
index d4253675b2d386f6aaa4d5a7fa53a20ebc07d22d..cd88c8f32a3871da48e1f2b5d4874e5b23cc0b78 100644 (file)
 
 #define AK4535_VERSION "0.3"
 
-struct snd_soc_codec_device soc_codec_dev_ak4535;
-
 /* codec private data */
 struct ak4535_priv {
        unsigned int sysclk;
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
 /*
@@ -313,8 +313,7 @@ static int ak4535_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct ak4535_priv *ak4535 = snd_soc_codec_get_drvdata(codec);
        u8 mode2 = ak4535_read_reg_cache(codec, AK4535_MODE2) & ~(0x3 << 5);
        int rate = params_rate(params), fs = 256;
@@ -378,14 +377,16 @@ static int ak4535_mute(struct snd_soc_dai *dai, int mute)
 static int ak4535_set_bias_level(struct snd_soc_codec *codec,
        enum snd_soc_bias_level level)
 {
-       u16 i;
+       u16 i, mute_reg;
 
        switch (level) {
        case SND_SOC_BIAS_ON:
-               ak4535_mute(codec->dai, 0);
+               mute_reg = ak4535_read_reg_cache(codec, AK4535_DAC) & 0xffdf;
+               ak4535_write(codec, AK4535_DAC, mute_reg);
                break;
        case SND_SOC_BIAS_PREPARE:
-               ak4535_mute(codec->dai, 1);
+               mute_reg = ak4535_read_reg_cache(codec, AK4535_DAC) & 0xffdf;
+               ak4535_write(codec, AK4535_DAC, mute_reg | 0x20);
                break;
        case SND_SOC_BIAS_STANDBY:
                i = ak4535_read_reg_cache(codec, AK4535_PM1);
@@ -413,8 +414,8 @@ static struct snd_soc_dai_ops ak4535_dai_ops = {
        .set_sysclk     = ak4535_set_dai_sysclk,
 };
 
-struct snd_soc_dai ak4535_dai = {
-       .name = "AK4535",
+static struct snd_soc_dai_driver ak4535_dai = {
+       .name = "ak4535-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -429,54 +430,27 @@ struct snd_soc_dai ak4535_dai = {
                .formats = SNDRV_PCM_FMTBIT_S16_LE,},
        .ops = &ak4535_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ak4535_dai);
 
-static int ak4535_suspend(struct platform_device *pdev, pm_message_t state)
+static int ak4535_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        ak4535_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int ak4535_resume(struct platform_device *pdev)
+static int ak4535_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        ak4535_sync(codec);
        ak4535_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
        return 0;
 }
 
-/*
- * initialise the AK4535 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int ak4535_init(struct snd_soc_device *socdev)
+static int ak4535_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int ret = 0;
+       struct ak4535_priv *ak4535 = snd_soc_codec_get_drvdata(codec);
 
-       codec->name = "AK4535";
-       codec->owner = THIS_MODULE;
-       codec->read = ak4535_read_reg_cache;
-       codec->write = ak4535_write;
-       codec->set_bias_level = ak4535_set_bias_level;
-       codec->dai = &ak4535_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(ak4535_reg);
-       codec->reg_cache = kmemdup(ak4535_reg, sizeof(ak4535_reg), GFP_KERNEL);
-
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
+       printk(KERN_INFO "AK4535 Audio Codec %s", AK4535_VERSION);
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "ak4535: failed to create pcms\n");
-               goto pcm_err;
-       }
+       codec->control_data = ak4535->control_data;
 
        /* power on device */
        ak4535_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
@@ -485,39 +459,55 @@ static int ak4535_init(struct snd_soc_device *socdev)
                                ARRAY_SIZE(ak4535_snd_controls));
        ak4535_add_widgets(codec);
 
-       return ret;
-
-pcm_err:
-       kfree(codec->reg_cache);
+       return 0;
+}
 
-       return ret;
+/* power down chip */
+static int ak4535_remove(struct snd_soc_codec *codec)
+{
+       ak4535_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
-static struct snd_soc_device *ak4535_socdev;
+static struct snd_soc_codec_driver soc_codec_dev_ak4535 = {
+       .probe =        ak4535_probe,
+       .remove =       ak4535_remove,
+       .suspend =      ak4535_suspend,
+       .resume =       ak4535_resume,
+       .read = ak4535_read_reg_cache,
+       .write = ak4535_write,
+       .set_bias_level = ak4535_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(ak4535_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default = ak4535_reg,
+};
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-
-static int ak4535_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static __devinit int ak4535_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = ak4535_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct ak4535_priv *ak4535;
        int ret;
 
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
+       ak4535 = kzalloc(sizeof(struct ak4535_priv), GFP_KERNEL);
+       if (ak4535 == NULL)
+               return -ENOMEM;
 
-       ret = ak4535_init(socdev);
-       if (ret < 0)
-               printk(KERN_ERR "failed to initialise AK4535\n");
+       i2c_set_clientdata(i2c, ak4535);
+       ak4535->control_data = i2c;
+       ak4535->control_type = SND_SOC_I2C;
 
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_ak4535, &ak4535_dai, 1);
+       if (ret < 0)
+               kfree(ak4535);
        return ret;
 }
 
-static int ak4535_i2c_remove(struct i2c_client *client)
+static __devexit int ak4535_i2c_remove(struct i2c_client *client)
 {
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       kfree(codec->reg_cache);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -529,138 +519,34 @@ MODULE_DEVICE_TABLE(i2c, ak4535_i2c_id);
 
 static struct i2c_driver ak4535_i2c_driver = {
        .driver = {
-               .name = "AK4535 I2C Codec",
+               .name = "ak4535-codec",
                .owner = THIS_MODULE,
        },
        .probe =    ak4535_i2c_probe,
-       .remove =   ak4535_i2c_remove,
+       .remove =   __devexit_p(ak4535_i2c_remove),
        .id_table = ak4535_i2c_id,
 };
-
-static int ak4535_add_i2c_device(struct platform_device *pdev,
-                                const struct ak4535_setup_data *setup)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-       int ret;
-
-       ret = i2c_add_driver(&ak4535_i2c_driver);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "can't add i2c driver\n");
-               return ret;
-       }
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = setup->i2c_address;
-       strlcpy(info.type, "ak4535", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(setup->i2c_bus);
-       if (!adapter) {
-               dev_err(&pdev->dev, "can't get i2c adapter %d\n",
-                       setup->i2c_bus);
-               goto err_driver;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               goto err_driver;
-       }
-
-       return 0;
-
-err_driver:
-       i2c_del_driver(&ak4535_i2c_driver);
-       return -ENODEV;
-}
 #endif
 
-static int ak4535_probe(struct platform_device *pdev)
+static int __init ak4535_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct ak4535_setup_data *setup;
-       struct snd_soc_codec *codec;
-       struct ak4535_priv *ak4535;
-       int ret;
-
-       printk(KERN_INFO "AK4535 Audio Codec %s", AK4535_VERSION);
-
-       setup = socdev->codec_data;
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-
-       ak4535 = kzalloc(sizeof(struct ak4535_priv), GFP_KERNEL);
-       if (ak4535 == NULL) {
-               kfree(codec);
-               return -ENOMEM;
-       }
-
-       snd_soc_codec_set_drvdata(codec, ak4535);
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       ak4535_socdev = socdev;
-       ret = -ENODEV;
-
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       if (setup->i2c_address) {
-               codec->hw_write = (hw_write_t)i2c_master_send;
-               ret = ak4535_add_i2c_device(pdev, setup);
-       }
-#endif
-
+       ret = i2c_add_driver(&ak4535_i2c_driver);
        if (ret != 0) {
-               kfree(snd_soc_codec_get_drvdata(codec));
-               kfree(codec);
+               printk(KERN_ERR "Failed to register AK4535 I2C driver: %d\n",
+                      ret);
        }
+#endif
        return ret;
 }
+module_init(ak4535_modinit);
 
-/* power down chip */
-static int ak4535_remove(struct platform_device *pdev)
+static void __exit ak4535_exit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               ak4535_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       if (codec->control_data)
-               i2c_unregister_device(codec->control_data);
        i2c_del_driver(&ak4535_i2c_driver);
 #endif
-       kfree(snd_soc_codec_get_drvdata(codec));
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_ak4535 = {
-       .probe =        ak4535_probe,
-       .remove =       ak4535_remove,
-       .suspend =      ak4535_suspend,
-       .resume =       ak4535_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_ak4535);
-
-static int __init ak4535_modinit(void)
-{
-       return snd_soc_register_dai(&ak4535_dai);
-}
-module_init(ak4535_modinit);
-
-static void __exit ak4535_exit(void)
-{
-       snd_soc_unregister_dai(&ak4535_dai);
 }
 module_exit(ak4535_exit);
 
index c7a58703ea394ccd30c79a359d4be1401b438710..0431e5f634a2440c8ef9f0206fe1c0959a6cd553 100644 (file)
 
 #define AK4535_CACHEREGNUM     0x10
 
-struct ak4535_setup_data {
-       int            i2c_bus;
-       unsigned short i2c_address;
-};
-
-extern struct snd_soc_dai ak4535_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ak4535;
-
 #endif
index 3d7dc55305ec3531838627e7a33f8b22009cfb2f..31b35e967398064d87b1e239d374cdf0810b7638 100644 (file)
@@ -30,8 +30,6 @@
 #include <sound/initval.h>
 #include <sound/tlv.h>
 
-#include "ak4642.h"
-
 #define AK4642_VERSION "0.0.1"
 
 #define PW_MGMT1       0x00
 #define FS3            (1 << 5)
 #define FS_MASK                (FS0 | FS1 | FS2 | FS3)
 
-struct snd_soc_codec_device soc_codec_dev_ak4642;
 
 /*
  * Playback Volume (table 39)
@@ -123,11 +120,11 @@ static const struct snd_kcontrol_new ak4642_snd_controls[] = {
 
 /* codec private data */
 struct ak4642_priv {
-       struct snd_soc_codec codec;
+       unsigned int sysclk;
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
-static struct snd_soc_codec *ak4642_codec;
-
 /*
  * ak4642 register cache
  */
@@ -393,8 +390,8 @@ static struct snd_soc_dai_ops ak4642_dai_ops = {
        .hw_params      = ak4642_dai_hw_params,
 };
 
-struct snd_soc_dai ak4642_dai = {
-       .name = "AK4642",
+static struct snd_soc_dai_driver ak4642_dai = {
+       .name = "ak4642-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -410,112 +407,63 @@ struct snd_soc_dai ak4642_dai = {
        .ops = &ak4642_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(ak4642_dai);
 
-static int ak4642_resume(struct platform_device *pdev)
+static int ak4642_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        ak4642_sync(codec);
        return 0;
 }
 
-/*
- * initialise the AK4642 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int ak4642_init(struct ak4642_priv *ak4642)
+
+static int ak4642_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = &ak4642->codec;
-       int ret = 0;
+       struct ak4642_priv *ak4642 = snd_soc_codec_get_drvdata(codec);
 
-       if (ak4642_codec) {
-               dev_err(codec->dev, "Another ak4642 is registered\n");
-               return -EINVAL;
-       }
+       dev_info(codec->dev, "AK4642 Audio Codec %s", AK4642_VERSION);
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, ak4642);
-       codec->name             = "AK4642";
-       codec->owner            = THIS_MODULE;
-       codec->read             = ak4642_read_reg_cache;
-       codec->write            = ak4642_write;
-       codec->dai              = &ak4642_dai;
-       codec->num_dai          = 1;
        codec->hw_write         = (hw_write_t)i2c_master_send;
-       codec->reg_cache_size   = ARRAY_SIZE(ak4642_reg);
-       codec->reg_cache        = kmemdup(ak4642_reg,
-                                         sizeof(ak4642_reg), GFP_KERNEL);
-
-       if (!codec->reg_cache)
-               return -ENOMEM;
-
-       ak4642_dai.dev = codec->dev;
-       ak4642_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto reg_cache_err;
-       }
+       codec->control_data = ak4642->control_data;
 
-       ret = snd_soc_register_dai(&ak4642_dai);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               goto reg_cache_err;
-       }
-
-       return ret;
-
-reg_cache_err:
-       kfree(codec->reg_cache);
-       codec->reg_cache = NULL;
 
-       return ret;
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_ak4642 = {
+       .probe =        ak4642_probe,
+       .resume =       ak4642_resume,
+       .read           = ak4642_read_reg_cache,
+       .write          = ak4642_write,
+       .reg_cache_size = ARRAY_SIZE(ak4642_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default      = ak4642_reg,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-static int ak4642_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static __devinit int ak4642_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
        struct ak4642_priv *ak4642;
-       struct snd_soc_codec *codec;
        int ret;
 
        ak4642 = kzalloc(sizeof(struct ak4642_priv), GFP_KERNEL);
-       if (!ak4642)
+       if (ak4642 == NULL)
                return -ENOMEM;
 
-       codec = &ak4642->codec;
-       codec->dev = &i2c->dev;
-
        i2c_set_clientdata(i2c, ak4642);
-       codec->control_data = i2c;
+       ak4642->control_data = i2c;
+       ak4642->control_type = SND_SOC_I2C;
 
-       ret = ak4642_init(ak4642);
-       if (ret < 0) {
-               printk(KERN_ERR "failed to initialise AK4642\n");
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_ak4642, &ak4642_dai, 1);
+       if (ret < 0)
                kfree(ak4642);
-       }
-
        return ret;
 }
 
-static int ak4642_i2c_remove(struct i2c_client *client)
+static __devexit int ak4642_i2c_remove(struct i2c_client *client)
 {
-       struct ak4642_priv *ak4642 = i2c_get_clientdata(client);
-
-       snd_soc_unregister_dai(&ak4642_dai);
-       snd_soc_unregister_codec(&ak4642->codec);
-       kfree(ak4642->codec.reg_cache);
-       kfree(ak4642);
-       ak4642_codec = NULL;
-
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -528,64 +476,15 @@ MODULE_DEVICE_TABLE(i2c, ak4642_i2c_id);
 
 static struct i2c_driver ak4642_i2c_driver = {
        .driver = {
-               .name = "AK4642 I2C Codec",
+               .name = "ak4642-codec",
                .owner = THIS_MODULE,
        },
-       .probe          = ak4642_i2c_probe,
-       .remove         = ak4642_i2c_remove,
-       .id_table       = ak4642_i2c_id,
+       .probe =    ak4642_i2c_probe,
+       .remove =   __devexit_p(ak4642_i2c_remove),
+       .id_table = ak4642_i2c_id,
 };
-
 #endif
 
-static int ak4642_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       int ret;
-
-       if (!ak4642_codec) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = ak4642_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "ak4642: failed to create pcms\n");
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(ak4642_codec, ak4642_snd_controls,
-                            ARRAY_SIZE(ak4642_snd_controls));
-
-       dev_info(&pdev->dev, "AK4642 Audio Codec %s", AK4642_VERSION);
-       return ret;
-
-pcm_err:
-       return ret;
-
-}
-
-/* power down chip */
-static int ak4642_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_ak4642 = {
-       .probe =        ak4642_probe,
-       .remove =       ak4642_remove,
-       .resume =       ak4642_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_ak4642);
-
 static int __init ak4642_modinit(void)
 {
        int ret = 0;
diff --git a/sound/soc/codecs/ak4642.h b/sound/soc/codecs/ak4642.h
deleted file mode 100644 (file)
index e476833..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * ak4642.h  --  AK4642 Soc Audio driver
- *
- * Copyright (C) 2009 Renesas Solutions Corp.
- * Kuninori Morimoto <morimoto.kuninori@renesas.com>
- *
- * Based on ak4535.c
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef _AK4642_H
-#define _AK4642_H
-
-extern struct snd_soc_dai ak4642_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ak4642;
-
-#endif
index 87566932a3b174c8afa318c679421882ff906356..239f0562003ca43a1633338ae59bd14a4531ab2d 100644 (file)
 
 #include "ak4671.h"
 
-static struct snd_soc_codec *ak4671_codec;
 
 /* codec private data */
 struct ak4671_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        u8 reg_cache[AK4671_CACHEREGNUM];
 };
 
@@ -619,8 +619,8 @@ static struct snd_soc_dai_ops ak4671_dai_ops = {
        .set_fmt        = ak4671_set_dai_fmt,
 };
 
-struct snd_soc_dai ak4671_dai = {
-       .name = "AK4671",
+static struct snd_soc_dai_driver ak4671_dai = {
+       .name = "ak4671-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -635,27 +635,19 @@ struct snd_soc_dai ak4671_dai = {
                .formats = AK4671_FORMATS,},
        .ops = &ak4671_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ak4671_dai);
 
-static int ak4671_probe(struct platform_device *pdev)
+static int ak4671_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (ak4671_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
+       struct ak4671_priv *ak4671 = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       socdev->card->codec = ak4671_codec;
-       codec = ak4671_codec;
+       codec->hw_write = (hw_write_t)i2c_master_send;
+       codec->bias_level = SND_SOC_BIAS_OFF;
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       ret = snd_soc_codec_set_cache_io(codec, 8, 8, ak4671->control_type);
        if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
        snd_soc_add_controls(codec, ak4671_snd_controls,
@@ -665,121 +657,48 @@ static int ak4671_probe(struct platform_device *pdev)
        ak4671_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return ret;
-
-pcm_err:
-       return ret;
 }
 
-static int ak4671_remove(struct platform_device *pdev)
+static int ak4671_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
+       ak4671_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_ak4671 = {
+static struct snd_soc_codec_driver soc_codec_dev_ak4671 = {
        .probe = ak4671_probe,
        .remove = ak4671_remove,
+       .set_bias_level = ak4671_set_bias_level,
+       .reg_cache_size = AK4671_CACHEREGNUM,
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default = ak4671_reg,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_ak4671);
-
-static int ak4671_register(struct ak4671_priv *ak4671,
-               enum snd_soc_control_type control)
-{
-       int ret;
-       struct snd_soc_codec *codec = &ak4671->codec;
-
-       if (ak4671_codec) {
-               dev_err(codec->dev, "Another AK4671 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec,  ak4671);
-       codec->name = "AK4671";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = ak4671_set_bias_level;
-       codec->dai = &ak4671_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = AK4671_CACHEREGNUM;
-       codec->reg_cache = &ak4671->reg_cache;
-
-       memcpy(codec->reg_cache, ak4671_reg, sizeof(ak4671_reg));
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 8, control);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
-       ak4671_dai.dev = codec->dev;
-       ak4671_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&ak4671_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(ak4671);
-       return ret;
-}
-
-static void ak4671_unregister(struct ak4671_priv *ak4671)
-{
-       ak4671_set_bias_level(&ak4671->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&ak4671_dai);
-       snd_soc_unregister_codec(&ak4671->codec);
-       kfree(ak4671);
-       ak4671_codec = NULL;
-}
 
 static int __devinit ak4671_i2c_probe(struct i2c_client *client,
                const struct i2c_device_id *id)
 {
        struct ak4671_priv *ak4671;
-       struct snd_soc_codec *codec;
+       int ret;
 
        ak4671 = kzalloc(sizeof(struct ak4671_priv), GFP_KERNEL);
        if (ak4671 == NULL)
                return -ENOMEM;
 
-       codec = &ak4671->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(client, ak4671);
-       codec->control_data = client;
-
-       codec->dev = &client->dev;
+       ak4671->control_data = client;
+       ak4671->control_type = SND_SOC_I2C;
 
-       return ak4671_register(ak4671, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&client->dev,
+                       &soc_codec_dev_ak4671, &ak4671_dai, 1);
+       if (ret < 0)
+               kfree(ak4671);
+       return ret;
 }
 
 static __devexit int ak4671_i2c_remove(struct i2c_client *client)
 {
-       struct ak4671_priv *ak4671 = i2c_get_clientdata(client);
-
-       ak4671_unregister(ak4671);
-
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -791,7 +710,7 @@ MODULE_DEVICE_TABLE(i2c, ak4671_i2c_id);
 
 static struct i2c_driver ak4671_i2c_driver = {
        .driver = {
-               .name = "ak4671",
+               .name = "ak4671-codec",
                .owner = THIS_MODULE,
        },
        .probe = ak4671_i2c_probe,
index e2fad964e88b125e54a58967743d2e2837a676ad..61cb7ab7552ce5a390fd1306905214a60bdd442e 100644 (file)
 /* AK4671_LOUT2_POWER_MANAGEMENT (0x10) Fields */
 #define AK4671_MUTEN                           0x04
 
-extern struct snd_soc_dai ak4671_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ak4671;
-
 #endif
index a320fb5a0e26afefba683311539584a71c6ade7c..823643932dde2eb6208fd290f90254a2416e29bc 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/slab.h>
 #include <linux/clk.h>
 #include <linux/mfd/davinci_voicecodec.h>
+#include <linux/spi/spi.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -41,8 +42,6 @@
 
 #include <mach/dm365.h>
 
-#include "cq93vc.h"
-
 static inline unsigned int cq93vc_read(struct snd_soc_codec *codec,
                                                unsigned int reg)
 {
@@ -130,8 +129,8 @@ static struct snd_soc_dai_ops cq93vc_dai_ops = {
        .set_sysclk     = cq93vc_set_dai_sysclk,
 };
 
-struct snd_soc_dai cq93vc_dai = {
-       .name = "CQ93VC",
+static struct snd_soc_dai_driver cq93vc_dai = {
+       .name = "cq93vc-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -146,36 +145,20 @@ struct snd_soc_dai cq93vc_dai = {
                .formats = CQ93VC_FORMATS,},
        .ops = &cq93vc_dai_ops,
 };
-EXPORT_SYMBOL_GPL(cq93vc_dai);
 
-static int cq93vc_resume(struct platform_device *pdev)
+static int cq93vc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        cq93vc_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
 }
 
-static struct snd_soc_codec *cq93vc_codec;
-
-static int cq93vc_probe(struct platform_device *pdev)
+static int cq93vc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct device *dev = &pdev->dev;
-       struct snd_soc_codec *codec;
-       int ret;
-
-       socdev->card->codec = cq93vc_codec;
-       codec = socdev->card->codec;
-
-       /* Register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(dev, "%s: failed to create pcms\n", pdev->name);
-               return ret;
-       }
+       struct davinci_vc *davinci_vc = codec->dev->platform_data;
+
+       davinci_vc->cq93vc.codec = codec;
+       codec->control_data = davinci_vc;
 
        /* Set controls */
        snd_soc_add_controls(codec, cq93vc_snd_controls,
@@ -187,108 +170,51 @@ static int cq93vc_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int cq93vc_remove(struct platform_device *pdev)
+static int cq93vc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       cq93vc_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_cq93vc = {
+static struct snd_soc_codec_driver soc_codec_dev_cq93vc = {
+       .read = cq93vc_read,
+       .write = cq93vc_write,
+       .set_bias_level = cq93vc_set_bias_level,
        .probe = cq93vc_probe,
        .remove = cq93vc_remove,
        .resume = cq93vc_resume,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_cq93vc);
 
-static __init int cq93vc_codec_probe(struct platform_device *pdev)
+static int cq93vc_platform_probe(struct platform_device *pdev)
 {
-       struct davinci_vc *davinci_vc = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL) {
-               dev_dbg(davinci_vc->dev,
-                       "could not allocate memory for codec data\n");
-               return -ENOMEM;
-       }
-
-       davinci_vc->cq93vc.codec = codec;
-
-       cq93vc_dai.dev = &pdev->dev;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-       codec->dev = &pdev->dev;
-       codec->name = "CQ93VC";
-       codec->owner = THIS_MODULE;
-       codec->read = cq93vc_read;
-       codec->write = cq93vc_write;
-       codec->set_bias_level = cq93vc_set_bias_level;
-       codec->dai = &cq93vc_dai;
-       codec->num_dai = 1;
-       codec->control_data = davinci_vc;
-
-       cq93vc_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret) {
-               dev_err(davinci_vc->dev, "failed to register codec\n");
-               goto fail1;
-       }
-
-       ret = snd_soc_register_dai(&cq93vc_dai);
-       if (ret) {
-               dev_err(davinci_vc->dev, "could register dai\n");
-               goto fail2;
-       }
-       return 0;
-
-fail2:
-       snd_soc_unregister_codec(codec);
-
-fail1:
-       kfree(codec);
-       cq93vc_codec = NULL;
-
-       return ret;
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_cq93vc, &cq93vc_dai, 1);
 }
 
-static int __devexit cq93vc_codec_remove(struct platform_device *pdev)
+static int cq93vc_platform_remove(struct platform_device *pdev)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       snd_soc_unregister_dai(&cq93vc_dai);
-       snd_soc_unregister_codec(&codec);
-
-       kfree(codec);
-       cq93vc_codec = NULL;
-
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
 static struct platform_driver cq93vc_codec_driver = {
        .driver = {
-                  .name = "cq93vc",
-                  .owner = THIS_MODULE,
-                  },
-       .probe = cq93vc_codec_probe,
-       .remove = __devexit_p(cq93vc_codec_remove),
+                       .name = "cq93vc-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = cq93vc_platform_probe,
+       .remove = __devexit_p(cq93vc_platform_remove),
 };
 
-static __init int cq93vc_init(void)
+static int __init cq93vc_init(void)
 {
-       return platform_driver_probe(&cq93vc_codec_driver, cq93vc_codec_probe);
+       return platform_driver_register(&cq93vc_codec_driver);
 }
 module_init(cq93vc_init);
 
-static __exit void cq93vc_exit(void)
+static void __exit cq93vc_exit(void)
 {
        platform_driver_unregister(&cq93vc_codec_driver);
 }
diff --git a/sound/soc/codecs/cq93vc.h b/sound/soc/codecs/cq93vc.h
deleted file mode 100644 (file)
index 845b196..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * ALSA SoC CQ0093 Voice Codec Driver for DaVinci platforms
- *
- * Copyright (C) 2010 Texas Instruments, Inc
- *
- * Author: Miguel Aguilar <miguel.aguilar@ridgerun.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _CQ93VC_H
-#define _CQ93VC_H
-
-extern struct snd_soc_dai cq93vc_dai;
-extern struct snd_soc_codec_device soc_codec_dev_cq93vc;
-
-#endif
index 30d949239def0727127497f6a8f5c92f6885d386..6542dc03895110bc3cd1010b0236286eccbc0f15 100644 (file)
@@ -31,8 +31,6 @@
 #include <linux/delay.h>
 #include <linux/regulator/consumer.h>
 
-#include "cs4270.h"
-
 /*
  * The codec isn't really big-endian or little-endian, since the I2S
  * interface requires data to be sent serially with the MSbit first.
@@ -114,7 +112,8 @@ static const char *supply_names[] = {
 
 /* Private data for the CS4270 */
 struct cs4270_private {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        u8 reg_cache[CS4270_NUMREGS];
        unsigned int mclk; /* Input frequency of the MCLK pin */
        unsigned int mode; /* The mode (I2S or left-justified) */
@@ -212,44 +211,8 @@ static int cs4270_set_dai_sysclk(struct snd_soc_dai *codec_dai,
 {
        struct snd_soc_codec *codec = codec_dai->codec;
        struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
-       unsigned int rates = 0;
-       unsigned int rate_min = -1;
-       unsigned int rate_max = 0;
-       unsigned int i;
 
        cs4270->mclk = freq;
-
-       if (cs4270->mclk) {
-               for (i = 0; i < NUM_MCLK_RATIOS; i++) {
-                       unsigned int rate = freq / cs4270_mode_ratios[i].ratio;
-                       rates |= snd_pcm_rate_to_rate_bit(rate);
-                       if (rate < rate_min)
-                               rate_min = rate;
-                       if (rate > rate_max)
-                               rate_max = rate;
-               }
-               /* FIXME: soc should support a rate list */
-               rates &= ~SNDRV_PCM_RATE_KNOT;
-
-               if (!rates) {
-                       dev_err(codec->dev, "could not find a valid sample rate\n");
-                       return -EINVAL;
-               }
-       } else {
-               /* enable all possible rates */
-               rates = SNDRV_PCM_RATE_8000_192000;
-               rate_min = 8000;
-               rate_max = 192000;
-       }
-
-       codec_dai->playback.rates = rates;
-       codec_dai->playback.rate_min = rate_min;
-       codec_dai->playback.rate_max = rate_max;
-
-       codec_dai->capture.rates = rates;
-       codec_dai->capture.rate_min = rate_min;
-       codec_dai->capture.rate_max = rate_max;
-
        return 0;
 }
 
@@ -410,8 +373,7 @@ static int cs4270_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
        int ret;
        unsigned int i;
@@ -549,19 +511,6 @@ static const struct snd_kcontrol_new cs4270_snd_controls[] = {
                snd_soc_get_volsw, cs4270_soc_put_mute),
 };
 
-/*
- * cs4270_codec - global variable to store codec for the ASoC probe function
- *
- * If struct i2c_driver had a private_data field, we wouldn't need to use
- * cs4270_codec.  This is the only way to pass the codec structure from
- * cs4270_i2c_probe() to cs4270_probe().  Unfortunately, there is no good
- * way to synchronize these two functions.  cs4270_i2c_probe() can be called
- * multiple times before cs4270_probe() is called even once.  So for now, we
- * also only allow cs4270_i2c_probe() to be run once.  That means that we do
- * not support more than one cs4270 device in the system, at least for now.
- */
-static struct snd_soc_codec *cs4270_codec;
-
 static struct snd_soc_dai_ops cs4270_dai_ops = {
        .hw_params      = cs4270_hw_params,
        .set_sysclk     = cs4270_set_dai_sysclk,
@@ -569,20 +518,24 @@ static struct snd_soc_dai_ops cs4270_dai_ops = {
        .digital_mute   = cs4270_dai_mute,
 };
 
-struct snd_soc_dai cs4270_dai = {
-       .name = "cs4270",
+struct snd_soc_dai_driver cs4270_dai = {
+       .name = "cs4270-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
                .channels_max = 2,
-               .rates = 0,
+               .rates = SNDRV_PCM_RATE_CONTINUOUS,
+               .rate_min = 4000,
+               .rate_max = 216000,
                .formats = CS4270_FORMATS,
        },
        .capture = {
                .stream_name = "Capture",
                .channels_min = 1,
                .channels_max = 2,
-               .rates = 0,
+               .rates = SNDRV_PCM_RATE_CONTINUOUS,
+               .rate_min = 4000,
+               .rate_max = 216000,
                .formats = CS4270_FORMATS,
        },
        .ops = &cs4270_dai_ops,
@@ -596,153 +549,19 @@ EXPORT_SYMBOL_GPL(cs4270_dai);
  * This function is called when ASoC has all the pieces it needs to
  * instantiate a sound driver.
  */
-static int cs4270_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = cs4270_codec;
-       struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
-       int i, ret;
-
-       /* Connect the codec to the socdev.  snd_soc_new_pcms() needs this. */
-       socdev->card->codec = codec;
-
-       /* Register PCMs */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms\n");
-               return ret;
-       }
-
-       /* Add the non-DAPM controls */
-       ret = snd_soc_add_controls(codec, cs4270_snd_controls,
-                               ARRAY_SIZE(cs4270_snd_controls));
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to add controls\n");
-               goto error_free_pcms;
-       }
-
-       /* get the power supply regulators */
-       for (i = 0; i < ARRAY_SIZE(supply_names); i++)
-               cs4270->supplies[i].supply = supply_names[i];
-
-       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(cs4270->supplies),
-                                cs4270->supplies);
-       if (ret < 0)
-               goto error_free_pcms;
-
-       ret = regulator_bulk_enable(ARRAY_SIZE(cs4270->supplies),
-                                   cs4270->supplies);
-       if (ret < 0)
-               goto error_free_regulators;
-
-       return 0;
-
-error_free_regulators:
-       regulator_bulk_free(ARRAY_SIZE(cs4270->supplies),
-                           cs4270->supplies);
-
-error_free_pcms:
-       snd_soc_free_pcms(socdev);
-
-       return ret;
-}
-
-/**
- * cs4270_remove - ASoC remove function
- * @pdev: platform device
- *
- * This function is the counterpart to cs4270_probe().
- */
-static int cs4270_remove(struct platform_device *pdev)
+static int cs4270_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = cs4270_codec;
        struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
+       int i, ret, reg;
 
-       snd_soc_free_pcms(socdev);
-       regulator_bulk_disable(ARRAY_SIZE(cs4270->supplies), cs4270->supplies);
-       regulator_bulk_free(ARRAY_SIZE(cs4270->supplies), cs4270->supplies);
-
-       return 0;
-};
-
-/**
- * cs4270_i2c_probe - initialize the I2C interface of the CS4270
- * @i2c_client: the I2C client object
- * @id: the I2C device ID (ignored)
- *
- * This function is called whenever the I2C subsystem finds a device that
- * matches the device ID given via a prior call to i2c_add_driver().
- */
-static int cs4270_i2c_probe(struct i2c_client *i2c_client,
-       const struct i2c_device_id *id)
-{
-       struct snd_soc_codec *codec;
-       struct cs4270_private *cs4270;
-       unsigned int reg;
-       int ret;
-
-       /* For now, we only support one cs4270 device in the system.  See the
-        * comment for cs4270_codec.
-        */
-       if (cs4270_codec) {
-               dev_err(&i2c_client->dev, "ignoring CS4270 at addr %X\n",
-                      i2c_client->addr);
-               dev_err(&i2c_client->dev, "only one per board allowed\n");
-               /* Should we return something other than ENODEV here? */
-               return -ENODEV;
-       }
-
-       /* Verify that we have a CS4270 */
-
-       ret = i2c_smbus_read_byte_data(i2c_client, CS4270_CHIPID);
-       if (ret < 0) {
-               dev_err(&i2c_client->dev, "failed to read i2c at addr %X\n",
-                      i2c_client->addr);
-               return ret;
-       }
-       /* The top four bits of the chip ID should be 1100. */
-       if ((ret & 0xF0) != 0xC0) {
-               dev_err(&i2c_client->dev, "device at addr %X is not a CS4270\n",
-                      i2c_client->addr);
-               return -ENODEV;
-       }
-
-       dev_info(&i2c_client->dev, "found device at i2c address %X\n",
-               i2c_client->addr);
-       dev_info(&i2c_client->dev, "hardware revision %X\n", ret & 0xF);
-
-       /* Allocate enough space for the snd_soc_codec structure
-          and our private data together. */
-       cs4270 = kzalloc(sizeof(struct cs4270_private), GFP_KERNEL);
-       if (!cs4270) {
-               dev_err(&i2c_client->dev, "could not allocate codec\n");
-               return -ENOMEM;
-       }
-       codec = &cs4270->codec;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->dev = &i2c_client->dev;
-       codec->name = "CS4270";
-       codec->owner = THIS_MODULE;
-       codec->dai = &cs4270_dai;
-       codec->num_dai = 1;
-       snd_soc_codec_set_drvdata(codec, cs4270);
-       codec->control_data = i2c_client;
-       codec->read = cs4270_read_reg_cache;
-       codec->write = cs4270_i2c_write;
-       codec->reg_cache = cs4270->reg_cache;
-       codec->reg_cache_size = CS4270_NUMREGS;
+       codec->control_data = cs4270->control_data;
 
        /* The I2C interface is set up, so pre-fill our register cache */
 
        ret = cs4270_fill_cache(codec);
        if (ret < 0) {
-               dev_err(&i2c_client->dev, "failed to fill register cache\n");
-               goto error_free_codec;
+               dev_err(codec->dev, "failed to fill register cache\n");
+               return ret;
        }
 
        /* Disable auto-mute.  This feature appears to be buggy.  In some
@@ -755,7 +574,7 @@ static int cs4270_i2c_probe(struct i2c_client *i2c_client,
        reg &= ~CS4270_MUTE_AUTO;
        ret = cs4270_i2c_write(codec, CS4270_MUTE, reg);
        if (ret < 0) {
-               dev_err(&i2c_client->dev, "i2c write failed\n");
+               dev_err(codec->dev, "i2c write failed\n");
                return ret;
        }
 
@@ -769,65 +588,56 @@ static int cs4270_i2c_probe(struct i2c_client *i2c_client,
        reg &= ~(CS4270_TRANS_SOFT | CS4270_TRANS_ZERO);
        ret = cs4270_i2c_write(codec, CS4270_TRANS, reg);
        if (ret < 0) {
-               dev_err(&i2c_client->dev, "i2c write failed\n");
+               dev_err(codec->dev, "i2c write failed\n");
                return ret;
        }
 
-       /* Initialize the DAI. Normally, we'd prefer to have a kmalloc'd DAI
-        * structure for each CS4270 device, but the machine driver needs to
-        * have a pointer to the DAI structure, so for now it must be a global
-        * variable.
-        */
-       cs4270_dai.dev = &i2c_client->dev;
-
-       /* Register the DAI.  If all the other ASoC driver have already
-        * registered, then this will call our probe function, so
-        * cs4270_codec needs to be ready.
-        */
-       cs4270_codec = codec;
-       ret = snd_soc_register_dai(&cs4270_dai);
+       /* Add the non-DAPM controls */
+       ret = snd_soc_add_controls(codec, cs4270_snd_controls,
+                               ARRAY_SIZE(cs4270_snd_controls));
        if (ret < 0) {
-               dev_err(&i2c_client->dev, "failed to register DAIe\n");
-               goto error_free_codec;
+               dev_err(codec->dev, "failed to add controls\n");
+               return ret;
        }
 
-       i2c_set_clientdata(i2c_client, cs4270);
+       /* get the power supply regulators */
+       for (i = 0; i < ARRAY_SIZE(supply_names); i++)
+               cs4270->supplies[i].supply = supply_names[i];
+
+       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(cs4270->supplies),
+                                cs4270->supplies);
+       if (ret < 0)
+               return ret;
+
+       ret = regulator_bulk_enable(ARRAY_SIZE(cs4270->supplies),
+                                   cs4270->supplies);
+       if (ret < 0)
+               goto error_free_regulators;
 
        return 0;
 
-error_free_codec:
-       kfree(cs4270);
-       cs4270_codec = NULL;
-       cs4270_dai.dev = NULL;
+error_free_regulators:
+       regulator_bulk_free(ARRAY_SIZE(cs4270->supplies),
+                           cs4270->supplies);
 
        return ret;
 }
 
 /**
- * cs4270_i2c_remove - remove an I2C device
- * @i2c_client: the I2C client object
+ * cs4270_remove - ASoC remove function
+ * @pdev: platform device
  *
- * This function is the counterpart to cs4270_i2c_probe().
+ * This function is the counterpart to cs4270_probe().
  */
-static int cs4270_i2c_remove(struct i2c_client *i2c_client)
+static int cs4270_remove(struct snd_soc_codec *codec)
 {
-       struct cs4270_private *cs4270 = i2c_get_clientdata(i2c_client);
+       struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
 
-       kfree(cs4270);
-       cs4270_codec = NULL;
-       cs4270_dai.dev = NULL;
+       regulator_bulk_disable(ARRAY_SIZE(cs4270->supplies), cs4270->supplies);
+       regulator_bulk_free(ARRAY_SIZE(cs4270->supplies), cs4270->supplies);
 
        return 0;
-}
-
-/*
- * cs4270_id - I2C device IDs supported by this driver
- */
-static struct i2c_device_id cs4270_id[] = {
-       {"cs4270", 0},
-       {}
 };
-MODULE_DEVICE_TABLE(i2c, cs4270_id);
 
 #ifdef CONFIG_PM
 
@@ -840,9 +650,8 @@ MODULE_DEVICE_TABLE(i2c, cs4270_id);
  * and all registers are written back to the hardware when resuming.
  */
 
-static int cs4270_soc_suspend(struct platform_device *pdev, pm_message_t mesg)
+static int cs4270_soc_suspend(struct snd_soc_codec *codec, pm_message_t mesg)
 {
-       struct snd_soc_codec *codec = cs4270_codec;
        struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
        int reg, ret;
 
@@ -860,9 +669,8 @@ static int cs4270_soc_suspend(struct platform_device *pdev, pm_message_t mesg)
        return 0;
 }
 
-static int cs4270_soc_resume(struct platform_device *pdev)
+static int cs4270_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = cs4270_codec;
        struct cs4270_private *cs4270 = snd_soc_codec_get_drvdata(codec);
        struct i2c_client *i2c_client = codec->control_data;
        int reg;
@@ -895,6 +703,95 @@ static int cs4270_soc_resume(struct platform_device *pdev)
 #define cs4270_soc_resume      NULL
 #endif /* CONFIG_PM */
 
+/*
+ * ASoC codec device structure
+ *
+ * Assign this variable to the codec_dev field of the machine driver's
+ * snd_soc_device structure.
+ */
+static struct snd_soc_codec_driver soc_codec_device_cs4270 = {
+       .probe =        cs4270_probe,
+       .remove =       cs4270_remove,
+       .suspend =      cs4270_soc_suspend,
+       .resume =       cs4270_soc_resume,
+       .read = cs4270_read_reg_cache,
+       .write = cs4270_i2c_write,
+       .reg_cache_size = CS4270_NUMREGS,
+       .reg_word_size = sizeof(u8),
+};
+
+/**
+ * cs4270_i2c_probe - initialize the I2C interface of the CS4270
+ * @i2c_client: the I2C client object
+ * @id: the I2C device ID (ignored)
+ *
+ * This function is called whenever the I2C subsystem finds a device that
+ * matches the device ID given via a prior call to i2c_add_driver().
+ */
+static int cs4270_i2c_probe(struct i2c_client *i2c_client,
+       const struct i2c_device_id *id)
+{
+       struct cs4270_private *cs4270;
+       int ret;
+
+       /* Verify that we have a CS4270 */
+
+       ret = i2c_smbus_read_byte_data(i2c_client, CS4270_CHIPID);
+       if (ret < 0) {
+               dev_err(&i2c_client->dev, "failed to read i2c at addr %X\n",
+                      i2c_client->addr);
+               return ret;
+       }
+       /* The top four bits of the chip ID should be 1100. */
+       if ((ret & 0xF0) != 0xC0) {
+               dev_err(&i2c_client->dev, "device at addr %X is not a CS4270\n",
+                      i2c_client->addr);
+               return -ENODEV;
+       }
+
+       dev_info(&i2c_client->dev, "found device at i2c address %X\n",
+               i2c_client->addr);
+       dev_info(&i2c_client->dev, "hardware revision %X\n", ret & 0xF);
+
+       cs4270 = kzalloc(sizeof(struct cs4270_private), GFP_KERNEL);
+       if (!cs4270) {
+               dev_err(&i2c_client->dev, "could not allocate codec\n");
+               return -ENOMEM;
+       }
+
+       i2c_set_clientdata(i2c_client, cs4270);
+       cs4270->control_data = i2c_client;
+       cs4270->control_type = SND_SOC_I2C;
+
+       ret = snd_soc_register_codec(&i2c_client->dev,
+                       &soc_codec_device_cs4270, &cs4270_dai, 1);
+       if (ret < 0)
+               kfree(cs4270);
+       return ret;
+}
+
+/**
+ * cs4270_i2c_remove - remove an I2C device
+ * @i2c_client: the I2C client object
+ *
+ * This function is the counterpart to cs4270_i2c_probe().
+ */
+static int cs4270_i2c_remove(struct i2c_client *i2c_client)
+{
+       snd_soc_unregister_codec(&i2c_client->dev);
+       kfree(i2c_get_clientdata(i2c_client));
+       return 0;
+}
+
+/*
+ * cs4270_id - I2C device IDs supported by this driver
+ */
+static struct i2c_device_id cs4270_id[] = {
+       {"cs4270", 0},
+       {}
+};
+MODULE_DEVICE_TABLE(i2c, cs4270_id);
+
 /*
  * cs4270_i2c_driver - I2C device identification
  *
@@ -903,7 +800,7 @@ static int cs4270_soc_resume(struct platform_device *pdev)
  */
 static struct i2c_driver cs4270_i2c_driver = {
        .driver = {
-               .name = "cs4270",
+               .name = "cs4270-codec",
                .owner = THIS_MODULE,
        },
        .id_table = cs4270_id,
@@ -911,20 +808,6 @@ static struct i2c_driver cs4270_i2c_driver = {
        .remove = cs4270_i2c_remove,
 };
 
-/*
- * ASoC codec device structure
- *
- * Assign this variable to the codec_dev field of the machine driver's
- * snd_soc_device structure.
- */
-struct snd_soc_codec_device soc_codec_device_cs4270 = {
-       .probe =        cs4270_probe,
-       .remove =       cs4270_remove,
-       .suspend =      cs4270_soc_suspend,
-       .resume =       cs4270_soc_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_device_cs4270);
-
 static int __init cs4270_init(void)
 {
        pr_info("Cirrus Logic CS4270 ALSA SoC Codec Driver\n");
diff --git a/sound/soc/codecs/cs4270.h b/sound/soc/codecs/cs4270.h
deleted file mode 100644 (file)
index adc6cd9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Cirrus Logic CS4270 ALSA SoC Codec Driver
- *
- * Author: Timur Tabi <timur@freescale.com>
- *
- * Copyright 2007 Freescale Semiconductor, Inc.  This file is licensed under
- * the terms of the GNU General Public License version 2.  This program
- * is licensed "as is" without any warranty of any kind, whether express
- * or implied.
- */
-
-#ifndef _CS4270_H
-#define _CS4270_H
-
-/*
- * The ASoC codec DAI structure for the CS4270.  Assign this structure to
- * the .codec_dai field of your machine driver's snd_soc_dai_link structure.
- */
-extern struct snd_soc_dai cs4270_dai;
-
-/*
- * The ASoC codec device structure for the CS4270.  Assign this structure
- * to the .codec_dev field of your machine driver's snd_soc_device
- * structure.
- */
-extern struct snd_soc_codec_device soc_codec_device_cs4270;
-
-#endif
index dd9b8550c402bcb65f2757ecc4123ba6c6c3c219..8a25743870c21ae880b4fab027ab07fb2f478196 100644 (file)
@@ -42,15 +42,14 @@ enum master_slave_mode {
 };
 
 struct cs42l51_private {
+       enum snd_soc_control_type control_type;
+       void *control_data;
        unsigned int mclk;
        unsigned int audio_mode;        /* The mode (I2S or left-justified) */
        enum master_slave_mode func;
-       struct snd_soc_codec codec;
        u8 reg_cache[CS42L51_NUMREGS];
 };
 
-static struct snd_soc_codec *cs42l51_codec;
-
 #define CS42L51_FORMATS ( \
                SNDRV_PCM_FMTBIT_S16_LE  | SNDRV_PCM_FMTBIT_S16_BE  | \
                SNDRV_PCM_FMTBIT_S18_3LE | SNDRV_PCM_FMTBIT_S18_3BE | \
@@ -75,134 +74,6 @@ static int cs42l51_fill_cache(struct snd_soc_codec *codec)
        return 0;
 }
 
-static int cs42l51_i2c_probe(struct i2c_client *i2c_client,
-       const struct i2c_device_id *id)
-{
-       struct snd_soc_codec *codec;
-       struct cs42l51_private *cs42l51;
-       int ret = 0;
-       int reg;
-
-       if (cs42l51_codec)
-               return -EBUSY;
-
-       /* Verify that we have a CS42L51 */
-       ret = i2c_smbus_read_byte_data(i2c_client, CS42L51_CHIP_REV_ID);
-       if (ret < 0) {
-               dev_err(&i2c_client->dev, "failed to read I2C\n");
-               goto error;
-       }
-
-       if ((ret != CS42L51_MK_CHIP_REV(CS42L51_CHIP_ID, CS42L51_CHIP_REV_A)) &&
-           (ret != CS42L51_MK_CHIP_REV(CS42L51_CHIP_ID, CS42L51_CHIP_REV_B))) {
-               dev_err(&i2c_client->dev, "Invalid chip id\n");
-               ret = -ENODEV;
-               goto error;
-       }
-
-       dev_info(&i2c_client->dev, "found device cs42l51 rev %d\n",
-                               ret & 7);
-
-       cs42l51 = kzalloc(sizeof(struct cs42l51_private), GFP_KERNEL);
-       if (!cs42l51) {
-               dev_err(&i2c_client->dev, "could not allocate codec\n");
-               return -ENOMEM;
-       }
-       codec = &cs42l51->codec;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->dev = &i2c_client->dev;
-       codec->name = "CS42L51";
-       codec->owner = THIS_MODULE;
-       codec->dai = &cs42l51_dai;
-       codec->num_dai = 1;
-       snd_soc_codec_set_drvdata(codec, cs42l51);
-
-       codec->control_data = i2c_client;
-       codec->reg_cache = cs42l51->reg_cache;
-       codec->reg_cache_size = CS42L51_NUMREGS;
-       i2c_set_clientdata(i2c_client, codec);
-
-       ret = cs42l51_fill_cache(codec);
-       if (ret < 0) {
-               dev_err(&i2c_client->dev, "failed to fill register cache\n");
-               goto error_alloc;
-       }
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_I2C);
-       if (ret < 0) {
-               dev_err(&i2c_client->dev, "Failed to set cache I/O: %d\n", ret);
-               goto error_alloc;
-       }
-
-       /*
-        * DAC configuration
-        * - Use signal processor
-        * - auto mute
-        * - vol changes immediate
-        * - no de-emphasize
-        */
-       reg = CS42L51_DAC_CTL_DATA_SEL(1)
-               | CS42L51_DAC_CTL_AMUTE | CS42L51_DAC_CTL_DACSZ(0);
-       ret = snd_soc_write(codec, CS42L51_DAC_CTL, reg);
-       if (ret < 0)
-               goto error_alloc;
-
-       cs42l51_dai.dev = codec->dev;
-       cs42l51_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto error_alloc;
-       }
-
-       ret = snd_soc_register_dai(&cs42l51_dai);
-       if (ret < 0) {
-               dev_err(&i2c_client->dev, "failed to register DAIe\n");
-               goto error_reg;
-       }
-
-       return 0;
-
-error_reg:
-       snd_soc_unregister_codec(codec);
-error_alloc:
-       kfree(cs42l51);
-error:
-       return ret;
-}
-
-static int cs42l51_i2c_remove(struct i2c_client *client)
-{
-       struct cs42l51_private *cs42l51 = i2c_get_clientdata(client);
-       snd_soc_unregister_dai(&cs42l51_dai);
-       snd_soc_unregister_codec(cs42l51_codec);
-       cs42l51_codec = NULL;
-       kfree(cs42l51);
-       return 0;
-}
-
-
-static const struct i2c_device_id cs42l51_id[] = {
-       {"cs42l51", 0},
-       {}
-};
-MODULE_DEVICE_TABLE(i2c, cs42l51_id);
-
-static struct i2c_driver cs42l51_i2c_driver = {
-       .driver = {
-               .name = "CS42L51 I2C",
-               .owner = THIS_MODULE,
-       },
-       .id_table = cs42l51_id,
-       .probe = cs42l51_i2c_probe,
-       .remove = cs42l51_i2c_remove,
-};
-
 static int cs42l51_get_chan_mix(struct snd_kcontrol *kcontrol,
                        struct snd_ctl_elem_value *ucontrol)
 {
@@ -484,51 +355,8 @@ static int cs42l51_set_dai_sysclk(struct snd_soc_dai *codec_dai,
 {
        struct snd_soc_codec *codec = codec_dai->codec;
        struct cs42l51_private *cs42l51 = snd_soc_codec_get_drvdata(codec);
-       struct cs42l51_ratios *ratios = NULL;
-       int nr_ratios = 0;
-       unsigned int rates = 0;
-       unsigned int rate_min = -1;
-       unsigned int rate_max = 0;
-       int i;
 
        cs42l51->mclk = freq;
-
-       switch (cs42l51->func) {
-       case MODE_MASTER:
-               return -EINVAL;
-       case MODE_SLAVE:
-               ratios = slave_ratios;
-               nr_ratios = ARRAY_SIZE(slave_ratios);
-               break;
-       case MODE_SLAVE_AUTO:
-               ratios = slave_auto_ratios;
-               nr_ratios = ARRAY_SIZE(slave_auto_ratios);
-               break;
-       }
-
-       for (i = 0; i < nr_ratios; i++) {
-               unsigned int rate = freq / ratios[i].ratio;
-               rates |= snd_pcm_rate_to_rate_bit(rate);
-               if (rate < rate_min)
-                       rate_min = rate;
-               if (rate > rate_max)
-                       rate_max = rate;
-       }
-       rates &= ~SNDRV_PCM_RATE_KNOT;
-
-       if (!rates) {
-               dev_err(codec->dev, "could not find a valid sample rate\n");
-               return -EINVAL;
-       }
-
-       codec_dai->playback.rates = rates;
-       codec_dai->playback.rate_min = rate_min;
-       codec_dai->playback.rate_max = rate_max;
-
-       codec_dai->capture.rates = rates;
-       codec_dai->capture.rate_min = rate_min;
-       codec_dai->capture.rate_max = rate_max;
-
        return 0;
 }
 
@@ -537,8 +365,7 @@ static int cs42l51_hw_params(struct snd_pcm_substream *substream,
                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct cs42l51_private *cs42l51 = snd_soc_codec_get_drvdata(codec);
        int ret;
        unsigned int i;
@@ -670,8 +497,8 @@ static struct snd_soc_dai_ops cs42l51_dai_ops = {
        .digital_mute   = cs42l51_dai_mute,
 };
 
-struct snd_soc_dai cs42l51_dai = {
-       .name = "CS42L51 HiFi",
+static struct snd_soc_dai_driver cs42l51_dai = {
+       .name = "cs42l51-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -688,30 +515,39 @@ struct snd_soc_dai cs42l51_dai = {
        },
        .ops = &cs42l51_dai_ops,
 };
-EXPORT_SYMBOL_GPL(cs42l51_dai);
-
 
-static int cs42l51_probe(struct platform_device *pdev)
+static int cs42l51_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
+       struct cs42l51_private *cs42l51 = snd_soc_codec_get_drvdata(codec);
+       int ret, reg;
 
-       if (!cs42l51_codec) {
-               dev_err(&pdev->dev, "CS42L51 codec not yet registered\n");
-               return -EINVAL;
-       }
+       codec->control_data = cs42l51->control_data;
 
-       socdev->card->codec = cs42l51_codec;
-       codec = socdev->card->codec;
+       ret = cs42l51_fill_cache(codec);
+       if (ret < 0) {
+               dev_err(codec->dev, "failed to fill register cache\n");
+               return ret;
+       }
 
-       /* Register PCMs */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       ret = snd_soc_codec_set_cache_io(codec, 8, 8, cs42l51->control_type);
        if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create PCMs\n");
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
                return ret;
        }
 
+       /*
+        * DAC configuration
+        * - Use signal processor
+        * - auto mute
+        * - vol changes immediate
+        * - no de-emphasize
+        */
+       reg = CS42L51_DAC_CTL_DATA_SEL(1)
+               | CS42L51_DAC_CTL_AMUTE | CS42L51_DAC_CTL_DACSZ(0);
+       ret = snd_soc_write(codec, CS42L51_DAC_CTL, reg);
+       if (ret < 0)
+               return ret;
+
        snd_soc_add_controls(codec, cs42l51_snd_controls,
                ARRAY_SIZE(cs42l51_snd_controls));
        snd_soc_dapm_new_controls(codec, cs42l51_dapm_widgets,
@@ -722,22 +558,77 @@ static int cs42l51_probe(struct platform_device *pdev)
        return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_device_cs42l51 = {
+       .probe =        cs42l51_probe,
+       .reg_cache_size = CS42L51_NUMREGS,
+       .reg_word_size = sizeof(u8),
+};
 
-static int cs42l51_remove(struct platform_device *pdev)
+static int cs42l51_i2c_probe(struct i2c_client *i2c_client,
+       const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct cs42l51_private *cs42l51;
+       int ret;
 
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       /* Verify that we have a CS42L51 */
+       ret = i2c_smbus_read_byte_data(i2c_client, CS42L51_CHIP_REV_ID);
+       if (ret < 0) {
+               dev_err(&i2c_client->dev, "failed to read I2C\n");
+               goto error;
+       }
+
+       if ((ret != CS42L51_MK_CHIP_REV(CS42L51_CHIP_ID, CS42L51_CHIP_REV_A)) &&
+           (ret != CS42L51_MK_CHIP_REV(CS42L51_CHIP_ID, CS42L51_CHIP_REV_B))) {
+               dev_err(&i2c_client->dev, "Invalid chip id\n");
+               ret = -ENODEV;
+               goto error;
+       }
+
+       dev_info(&i2c_client->dev, "found device cs42l51 rev %d\n",
+                               ret & 7);
+
+       cs42l51 = kzalloc(sizeof(struct cs42l51_private), GFP_KERNEL);
+       if (!cs42l51) {
+               dev_err(&i2c_client->dev, "could not allocate codec\n");
+               return -ENOMEM;
+       }
+
+       i2c_set_clientdata(i2c_client, cs42l51);
+       cs42l51->control_data = i2c_client;
+       cs42l51->control_type = SND_SOC_I2C;
 
+       ret =  snd_soc_register_codec(&i2c_client->dev,
+                       &soc_codec_device_cs42l51, &cs42l51_dai, 1);
+       if (ret < 0)
+               kfree(cs42l51);
+error:
+       return ret;
+}
+
+static int cs42l51_i2c_remove(struct i2c_client *client)
+{
+       struct cs42l51_private *cs42l51 = i2c_get_clientdata(client);
+
+       snd_soc_unregister_codec(&client->dev);
+       kfree(cs42l51);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_device_cs42l51 = {
-       .probe =        cs42l51_probe,
-       .remove =       cs42l51_remove
+static const struct i2c_device_id cs42l51_id[] = {
+       {"cs42l51", 0},
+       {}
+};
+MODULE_DEVICE_TABLE(i2c, cs42l51_id);
+
+static struct i2c_driver cs42l51_i2c_driver = {
+       .driver = {
+               .name = "cs42L51-codec",
+               .owner = THIS_MODULE,
+       },
+       .id_table = cs42l51_id,
+       .probe = cs42l51_i2c_probe,
+       .remove = cs42l51_i2c_remove,
 };
-EXPORT_SYMBOL_GPL(soc_codec_device_cs42l51);
 
 static int __init cs42l51_init(void)
 {
index 8f0bd9786ad2a4966421bab434441944bebd84c5..2beeb171db4b99f8635b01304d97f7b0439e7fe0 100644 (file)
 #define CS42L51_LASTREG                0x20
 #define CS42L51_NUMREGS                (CS42L51_LASTREG - CS42L51_FIRSTREG + 1)
 
-extern struct snd_soc_dai cs42l51_dai;
-extern struct snd_soc_codec_device soc_codec_device_cs42l51;
 #endif
index f07a415c753fd12a31d1b24d7cc4e82deafa5819..cf4323dbf9c4aa5429a2322ae263536d71bb656d 100644 (file)
@@ -24,7 +24,8 @@
 
 
 struct cx20442_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        u8 reg_cache[1];
 };
 
@@ -102,7 +103,7 @@ static unsigned int cx20442_read_reg_cache(struct snd_soc_codec *codec,
 {
        u8 *reg_cache = codec->reg_cache;
 
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -EINVAL;
 
        return reg_cache[reg];
@@ -164,16 +165,17 @@ static int cx20442_pm_to_v253_vsp(u8 value)
 static int cx20442_write(struct snd_soc_codec *codec, unsigned int reg,
                                                        unsigned int value)
 {
+       struct cx20442_priv *cx20442 = snd_soc_codec_get_drvdata(codec);
        u8 *reg_cache = codec->reg_cache;
        int vls, vsp, old, len;
        char buf[18];
 
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -EINVAL;
 
        /* hw_write and control_data pointers required for talking to the modem
         * are expected to be set by the line discipline initialization code */
-       if (!codec->hw_write || !codec->control_data)
+       if (!codec->hw_write || !cx20442->control_data)
                return -EIO;
 
        old = reg_cache[reg];
@@ -202,17 +204,13 @@ static int cx20442_write(struct snd_soc_codec *codec, unsigned int reg,
                return -ENOMEM;
 
        dev_dbg(codec->dev, "%s: %s\n", __func__, buf);
-       if (codec->hw_write(codec->control_data, buf, len) != len)
+       if (codec->hw_write(cx20442->control_data, buf, len) != len)
                return -EIO;
 
        return 0;
 }
 
 
-/* Moved up here as line discipline referres it during initialization */
-static struct snd_soc_codec *cx20442_codec;
-
-
 /*
  * Line discpline related code
  *
@@ -228,15 +226,15 @@ static const char *v253_init = "ate0m0q0+fclass=8\r";
 /* Line discipline .open() */
 static int v253_open(struct tty_struct *tty)
 {
-       struct snd_soc_codec *codec = cx20442_codec;
        int ret, len = strlen(v253_init);
 
        /* Doesn't make sense without write callback */
        if (!tty->ops->write)
                return -EINVAL;
 
-       /* Pass the codec structure address for use by other ldisc callbacks */
-       tty->disc_data = codec;
+       /* Won't work if no codec pointer has been passed by a card driver */
+       if (!tty->disc_data)
+               return -ENODEV;
 
        if (tty->ops->write(tty, v253_init, len) != len) {
                ret = -EIO;
@@ -253,15 +251,18 @@ err:
 static void v253_close(struct tty_struct *tty)
 {
        struct snd_soc_codec *codec = tty->disc_data;
+       struct cx20442_priv *cx20442;
 
        tty->disc_data = NULL;
 
        if (!codec)
                return;
 
+       cx20442 = snd_soc_codec_get_drvdata(codec);
+
        /* Prevent the codec driver from further accessing the modem */
        codec->hw_write = NULL;
-       codec->control_data = NULL;
+       cx20442->control_data = NULL;
        codec->pop_time = 0;
 }
 
@@ -277,15 +278,18 @@ static void v253_receive(struct tty_struct *tty,
                                const unsigned char *cp, char *fp, int count)
 {
        struct snd_soc_codec *codec = tty->disc_data;
+       struct cx20442_priv *cx20442;
 
        if (!codec)
                return;
 
-       if (!codec->control_data) {
+       cx20442 = snd_soc_codec_get_drvdata(codec);
+
+       if (!cx20442->control_data) {
                /* First modem response, complete setup procedure */
 
                /* Set up codec driver access to modem controls */
-               codec->control_data = tty;
+               cx20442->control_data = tty;
                codec->hw_write = (hw_write_t)tty->ops->write;
                codec->pop_time = 1;
        }
@@ -313,8 +317,8 @@ EXPORT_SYMBOL_GPL(v253_ops);
  * Codec DAI
  */
 
-struct snd_soc_dai cx20442_dai = {
-       .name = "CX20442",
+static struct snd_soc_dai_driver cx20442_dai = {
+       .name = "cx20442-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -330,142 +334,63 @@ struct snd_soc_dai cx20442_dai = {
                .formats = SNDRV_PCM_FMTBIT_S16_LE,
        },
 };
-EXPORT_SYMBOL_GPL(cx20442_dai);
 
-static int cx20442_codec_probe(struct platform_device *pdev)
+static int cx20442_codec_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       if (!cx20442_codec) {
-               dev_err(&pdev->dev, "cx20442 not yet discovered\n");
-               return -ENODEV;
-       }
-       codec = cx20442_codec;
-
-       socdev->card->codec = codec;
+       struct cx20442_priv *cx20442;
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create pcms\n");
-               goto pcm_err;
-       }
+       cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL);
+       if (cx20442 == NULL)
+               return -ENOMEM;
+       snd_soc_codec_set_drvdata(codec, cx20442);
 
        cx20442_add_widgets(codec);
 
-pcm_err:
-       return ret;
+       cx20442->control_data = NULL;
+       codec->hw_write = NULL;
+       codec->pop_time = 0;
+
+       return 0;
 }
 
 /* power down chip */
-static int cx20442_codec_remove(struct platform_device *pdev)
+static int cx20442_codec_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
+       struct cx20442_priv *cx20442 = snd_soc_codec_get_drvdata(codec);
 
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       if (cx20442->control_data) {
+                       struct tty_struct *tty = cx20442->control_data;
+                       tty_hangup(tty);
+       }
 
+       kfree(cx20442);
        return 0;
 }
 
-struct snd_soc_codec_device cx20442_codec_dev = {
+static struct snd_soc_codec_driver cx20442_codec_dev = {
        .probe =        cx20442_codec_probe,
        .remove =       cx20442_codec_remove,
+       .reg_cache_size = 1,
+       .reg_word_size = sizeof(u8),
+       .read = cx20442_read_reg_cache,
+       .write = cx20442_write,
 };
-EXPORT_SYMBOL_GPL(cx20442_codec_dev);
-
-static int cx20442_register(struct cx20442_priv *cx20442)
-{
-       struct snd_soc_codec *codec = &cx20442->codec;
-       int ret;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "CX20442";
-       codec->owner = THIS_MODULE;
-       snd_soc_codec_set_drvdata(codec, cx20442);
-
-       codec->dai = &cx20442_dai;
-       codec->num_dai = 1;
-
-       codec->reg_cache = &cx20442->reg_cache;
-       codec->reg_cache_size = ARRAY_SIZE(cx20442->reg_cache);
-       codec->read = cx20442_read_reg_cache;
-       codec->write = cx20442_write;
-
-       codec->bias_level = SND_SOC_BIAS_OFF;
-
-       cx20442_dai.dev = codec->dev;
-
-       cx20442_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&cx20442_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       cx20442_codec = NULL;
-       kfree(cx20442);
-       return ret;
-}
-
-static void cx20442_unregister(struct cx20442_priv *cx20442)
-{
-       snd_soc_unregister_dai(&cx20442_dai);
-       snd_soc_unregister_codec(&cx20442->codec);
-
-       cx20442_codec = NULL;
-       kfree(cx20442);
-}
 
 static int cx20442_platform_probe(struct platform_device *pdev)
 {
-       struct cx20442_priv *cx20442;
-       struct snd_soc_codec *codec;
-
-       cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL);
-       if (cx20442 == NULL)
-               return -ENOMEM;
-
-       codec = &cx20442->codec;
-
-       codec->control_data = NULL;
-       codec->hw_write = NULL;
-       codec->pop_time = 0;
-
-       codec->dev = &pdev->dev;
-       platform_set_drvdata(pdev, cx20442);
-
-       return cx20442_register(cx20442);
+       return snd_soc_register_codec(&pdev->dev,
+                       &cx20442_codec_dev, &cx20442_dai, 1);
 }
 
 static int __exit cx20442_platform_remove(struct platform_device *pdev)
 {
-       struct cx20442_priv *cx20442 = platform_get_drvdata(pdev);
-
-       cx20442_unregister(cx20442);
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
 static struct platform_driver cx20442_platform_driver = {
        .driver = {
-               .name = "cx20442",
+               .name = "cx20442-codec",
                .owner = THIS_MODULE,
                },
        .probe = cx20442_platform_probe,
@@ -487,4 +412,4 @@ module_exit(cx20442_exit);
 MODULE_DESCRIPTION("ASoC CX20442-11 voice modem codec driver");
 MODULE_AUTHOR("Janusz Krzysztofik");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:cx20442");
+MODULE_ALIAS("platform:cx20442-codec");
index 688a5eb62e17d7ab4dbafa3c28e36f705b9465f5..c7a7c79ef0cd4d242783ccf7050a0ebc65cafacc 100644 (file)
@@ -13,8 +13,6 @@
 #ifndef _CX20442_CODEC_H
 #define _CX20442_CODEC_H
 
-extern struct snd_soc_dai cx20442_dai;
-extern struct snd_soc_codec_device cx20442_codec_dev;
 extern struct tty_ldisc_ops v253_ops;
 
 #endif
index 3c51d6a575237270de5d540bb13a1b93a77829d2..eabf3c0625004669f22707255c0710de0b6dd1ec 100644 (file)
@@ -25,8 +25,6 @@
 #include <sound/initval.h>
 #include <sound/tlv.h>
 
-#include "da7210.h"
-
 /* DA7210 register space */
 #define DA7210_STATUS                  0x02
 #define DA7210_STARTUP1                        0x03
@@ -162,11 +160,10 @@ static const struct snd_kcontrol_new da7210_snd_controls[] = {
 
 /* Codec private data */
 struct da7210_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
-static struct snd_soc_codec *da7210_codec;
-
 /*
  * Register cache
  */
@@ -209,12 +206,12 @@ static int da7210_write(struct snd_soc_codec *codec, u32 reg, u32 value)
        u8 *cache = codec->reg_cache;
        u8 data[2];
 
-       BUG_ON(codec->volatile_register);
+       BUG_ON(codec->driver->volatile_register);
 
        data[0] = reg & 0xff;
        data[1] = value & 0xff;
 
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -EIO;
 
        if (2 != codec->hw_write(codec->control_data, data, 2))
@@ -267,8 +264,7 @@ static int da7210_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u32 dai_cfg1;
        u32 hpf_reg, hpf_mask, hpf_value;
        u32 fs, bypass;
@@ -430,9 +426,8 @@ static struct snd_soc_dai_ops da7210_dai_ops = {
        .set_fmt        = da7210_set_dai_fmt,
 };
 
-struct snd_soc_dai da7210_dai = {
-       .name = "DA7210 IIS",
-       .id = 0,
+static struct snd_soc_dai_driver da7210_dai = {
+       .name = "da7210-hifi",
        /* playback capabilities */
        .playback = {
                .stream_name = "Playback",
@@ -452,55 +447,15 @@ struct snd_soc_dai da7210_dai = {
        .ops = &da7210_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(da7210_dai);
 
-/*
- * Initialize the DA7210 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int da7210_init(struct da7210_priv *da7210)
+static int da7210_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = &da7210->codec;
-       int ret = 0;
+       struct da7210_priv *da7210 = snd_soc_codec_get_drvdata(codec);
 
-       if (da7210_codec) {
-               dev_err(codec->dev, "Another da7210 is registered\n");
-               return -EINVAL;
-       }
+       dev_info(codec->dev, "DA7210 Audio Codec %s\n", DA7210_VERSION);
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, da7210);
-       codec->name             = "DA7210";
-       codec->owner            = THIS_MODULE;
-       codec->read             = da7210_read;
-       codec->write            = da7210_write;
-       codec->dai              = &da7210_dai;
-       codec->num_dai          = 1;
+       codec->control_data = da7210->control_data;
        codec->hw_write         = (hw_write_t)i2c_master_send;
-       codec->reg_cache_size   = ARRAY_SIZE(da7210_reg);
-       codec->reg_cache        = kmemdup(da7210_reg,
-                                         sizeof(da7210_reg), GFP_KERNEL);
-
-       if (!codec->reg_cache)
-               return -ENOMEM;
-
-       da7210_dai.dev = codec->dev;
-       da7210_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register CODEC: %d\n", ret);
-               goto init_err;
-       }
-
-       ret = snd_soc_register_dai(&da7210_dai);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto codec_err;
-       }
 
        /* FIXME
         *
@@ -583,54 +538,50 @@ static int da7210_init(struct da7210_priv *da7210)
        /* Activate all enabled subsystem */
        da7210_write(codec, DA7210_STARTUP1, DA7210_SC_MST_EN);
 
-       return ret;
-
-codec_err:
-       snd_soc_unregister_codec(codec);
-init_err:
-       kfree(codec->reg_cache);
-       codec->reg_cache = NULL;
+       snd_soc_add_controls(codec, da7210_snd_controls,
+                            ARRAY_SIZE(da7210_snd_controls));
 
-       return ret;
+       dev_info(codec->dev, "DA7210 Audio Codec %s\n", DA7210_VERSION);
 
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_da7210 = {
+       .probe =        da7210_probe,
+       .read           = da7210_read,
+       .write          = da7210_write,
+       .reg_cache_size = ARRAY_SIZE(da7210_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default      = da7210_reg,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static int __devinit da7210_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct da7210_priv *da7210;
-       struct snd_soc_codec *codec;
        int ret;
 
        da7210 = kzalloc(sizeof(struct da7210_priv), GFP_KERNEL);
        if (!da7210)
                return -ENOMEM;
 
-       codec = &da7210->codec;
-       codec->dev = &i2c->dev;
-
        i2c_set_clientdata(i2c, da7210);
-       codec->control_data = i2c;
+       da7210->control_data = i2c;
+       da7210->control_type = SND_SOC_I2C;
 
-       ret = da7210_init(da7210);
-       if (ret < 0) {
-               pr_err("Failed to initialise da7210 audio codec\n");
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_da7210, &da7210_dai, 1);
+       if (ret < 0)
                kfree(da7210);
-       }
 
        return ret;
 }
 
 static int __devexit da7210_i2c_remove(struct i2c_client *client)
 {
-       struct da7210_priv *da7210 = i2c_get_clientdata(client);
-
-       snd_soc_unregister_dai(&da7210_dai);
-       kfree(da7210->codec.reg_cache);
-       kfree(da7210);
-       da7210_codec = NULL;
-
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -643,7 +594,7 @@ MODULE_DEVICE_TABLE(i2c, da7210_i2c_id);
 /* I2C codec control layer */
 static struct i2c_driver da7210_i2c_driver = {
        .driver = {
-               .name = "DA7210 I2C Codec",
+               .name = "da7210-codec",
                .owner = THIS_MODULE,
        },
        .probe = da7210_i2c_probe,
@@ -652,50 +603,6 @@ static struct i2c_driver da7210_i2c_driver = {
 };
 #endif
 
-static int da7210_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       if (!da7210_codec) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = da7210_codec;
-       codec = da7210_codec;
-
-       /* Register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto pcm_err;
-
-       snd_soc_add_controls(da7210_codec, da7210_snd_controls,
-                            ARRAY_SIZE(da7210_snd_controls));
-
-       dev_info(&pdev->dev, "DA7210 Audio Codec %s\n", DA7210_VERSION);
-
-pcm_err:
-       return ret;
-}
-
-static int da7210_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_da7210 = {
-       .probe =        da7210_probe,
-       .remove =       da7210_remove,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_da7210);
-
 static int __init da7210_modinit(void)
 {
        int ret = 0;
diff --git a/sound/soc/codecs/da7210.h b/sound/soc/codecs/da7210.h
deleted file mode 100644 (file)
index 390d621..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * da7210.h  --  audio driver for da7210
- *
- * Copyright (c) 2009 Dialog Semiconductor
- * Written by David Chen <Dajun.chen@diasemi.com>
- *
- * Copyright (C) 2009 Renesas Solutions Corp.
- * Cleanups by Kuninori Morimoto <morimoto.kuninori@renesas.com>
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
- *
- */
-
-#ifndef _DA7210_H
-#define _DA7210_H
-
-extern struct snd_soc_dai da7210_dai;
-extern struct snd_soc_codec_device soc_codec_dev_da7210;
-
-#endif
-
index 66557de1e4fec533f0e0e1f4ddb8a9294b58c13f..16253ec9b0228e0bf8bd5fce98ba2a7c62436444 100644 (file)
@@ -74,29 +74,22 @@ static const uint32_t jz4740_codec_regs[] = {
 struct jz4740_codec {
        void __iomem *base;
        struct resource *mem;
-
-       uint32_t reg_cache[2];
-       struct snd_soc_codec codec;
 };
 
-static inline struct jz4740_codec *codec_to_jz4740(struct snd_soc_codec *codec)
-{
-       return container_of(codec, struct jz4740_codec, codec);
-}
-
 static unsigned int jz4740_codec_read(struct snd_soc_codec *codec,
        unsigned int reg)
 {
-       struct jz4740_codec *jz4740_codec = codec_to_jz4740(codec);
+       struct jz4740_codec *jz4740_codec = snd_soc_codec_get_drvdata(codec);
        return readl(jz4740_codec->base + (reg << 2));
 }
 
 static int jz4740_codec_write(struct snd_soc_codec *codec, unsigned int reg,
        unsigned int val)
 {
-       struct jz4740_codec *jz4740_codec = codec_to_jz4740(codec);
+       struct jz4740_codec *jz4740_codec = snd_soc_codec_get_drvdata(codec);
+       u32 *cache = codec->reg_cache;
 
-       jz4740_codec->reg_cache[reg] = val;
+       cache[reg] = val;
        writel(val, jz4740_codec->base + (reg << 2));
 
        return 0;
@@ -172,8 +165,7 @@ static int jz4740_codec_hw_params(struct snd_pcm_substream *substream,
 {
        uint32_t val;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec =rtd->codec;
 
        switch (params_rate(params)) {
        case 8000:
@@ -219,8 +211,8 @@ static struct snd_soc_dai_ops jz4740_codec_dai_ops = {
        .hw_params = jz4740_codec_hw_params,
 };
 
-struct snd_soc_dai jz4740_codec_dai = {
-       .name = "jz4740",
+static struct snd_soc_dai_driver jz4740_codec_dai = {
+       .name = "jz4740-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -238,7 +230,6 @@ struct snd_soc_dai jz4740_codec_dai = {
        .ops = &jz4740_codec_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(jz4740_codec_dai);
 
 static void jz4740_codec_wakeup(struct snd_soc_codec *codec)
 {
@@ -302,23 +293,10 @@ static int jz4740_codec_set_bias_level(struct snd_soc_codec *codec,
        return 0;
 }
 
-static struct snd_soc_codec *jz4740_codec_codec;
-
-static int jz4740_codec_dev_probe(struct platform_device *pdev)
+static int jz4740_codec_dev_probe(struct snd_soc_codec *codec)
 {
-       int ret;
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = jz4740_codec_codec;
-
-       BUG_ON(!codec);
-
-       socdev->card->codec = codec;
-
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret) {
-               dev_err(&pdev->dev, "Failed to create pcms: %d\n", ret);
-               return ret;
-       }
+       snd_soc_update_bits(codec, JZ4740_REG_CODEC_1,
+                       JZ4740_CODEC_1_SW2_ENABLE, JZ4740_CODEC_1_SW2_ENABLE);
 
        snd_soc_add_controls(codec, jz4740_codec_controls,
                ARRAY_SIZE(jz4740_codec_controls));
@@ -331,34 +309,27 @@ static int jz4740_codec_dev_probe(struct platform_device *pdev)
 
        snd_soc_dapm_new_widgets(codec);
 
+       jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
        return 0;
 }
 
-static int jz4740_codec_dev_remove(struct platform_device *pdev)
+static int jz4740_codec_dev_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
 
-static int jz4740_codec_suspend(struct platform_device *pdev, pm_message_t state)
+static int jz4740_codec_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        return jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_OFF);
 }
 
-static int jz4740_codec_resume(struct platform_device *pdev)
+static int jz4740_codec_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        return jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 }
 
@@ -367,19 +338,23 @@ static int jz4740_codec_resume(struct platform_device *pdev)
 #define jz4740_codec_resume NULL
 #endif
 
-struct snd_soc_codec_device soc_codec_dev_jz4740_codec = {
+static struct snd_soc_codec_driver soc_codec_dev_jz4740_codec = {
        .probe = jz4740_codec_dev_probe,
        .remove = jz4740_codec_dev_remove,
        .suspend = jz4740_codec_suspend,
        .resume = jz4740_codec_resume,
+       .read = jz4740_codec_read,
+       .write = jz4740_codec_write,
+       .set_bias_level = jz4740_codec_set_bias_level,
+       .reg_cache_default      = jz4740_codec_regs,
+       .reg_word_size = sizeof(u32),
+       .reg_cache_size = 2,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_jz4740_codec);
 
 static int __devinit jz4740_codec_probe(struct platform_device *pdev)
 {
        int ret;
        struct jz4740_codec *jz4740_codec;
-       struct snd_soc_codec *codec;
        struct resource *mem;
 
        jz4740_codec = kzalloc(sizeof(*jz4740_codec), GFP_KERNEL);
@@ -408,55 +383,17 @@ static int __devinit jz4740_codec_probe(struct platform_device *pdev)
        }
        jz4740_codec->mem = mem;
 
-       jz4740_codec_dai.dev = &pdev->dev;
-
-       codec = &jz4740_codec->codec;
-
-       codec->dev              = &pdev->dev;
-       codec->name             = "jz4740";
-       codec->owner            = THIS_MODULE;
-
-       codec->read             = jz4740_codec_read;
-       codec->write            = jz4740_codec_write;
-       codec->set_bias_level   = jz4740_codec_set_bias_level;
-       codec->bias_level       = SND_SOC_BIAS_OFF;
-
-       codec->dai              = &jz4740_codec_dai;
-       codec->num_dai          = 1;
-
-       codec->reg_cache        = jz4740_codec->reg_cache;
-       codec->reg_cache_size   = 2;
-       memcpy(codec->reg_cache, jz4740_codec_regs, sizeof(jz4740_codec_regs));
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       jz4740_codec_codec = codec;
-
-       snd_soc_update_bits(codec, JZ4740_REG_CODEC_1,
-                       JZ4740_CODEC_1_SW2_ENABLE, JZ4740_CODEC_1_SW2_ENABLE);
-
        platform_set_drvdata(pdev, jz4740_codec);
 
-       ret = snd_soc_register_codec(codec);
+       ret = snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_jz4740_codec, &jz4740_codec_dai, 1);
        if (ret) {
                dev_err(&pdev->dev, "Failed to register codec\n");
                goto err_iounmap;
        }
 
-       ret = snd_soc_register_dai(&jz4740_codec_dai);
-       if (ret) {
-               dev_err(&pdev->dev, "Failed to register codec dai\n");
-               goto err_unregister_codec;
-       }
-
-       jz4740_codec_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
        return 0;
 
-err_unregister_codec:
-       snd_soc_unregister_codec(codec);
 err_iounmap:
        iounmap(jz4740_codec->base);
 err_release_mem_region:
@@ -472,8 +409,7 @@ static int __devexit jz4740_codec_remove(struct platform_device *pdev)
        struct jz4740_codec *jz4740_codec = platform_get_drvdata(pdev);
        struct resource *mem = jz4740_codec->mem;
 
-       snd_soc_unregister_dai(&jz4740_codec_dai);
-       snd_soc_unregister_codec(&jz4740_codec->codec);
+       snd_soc_unregister_codec(&pdev->dev);
 
        iounmap(jz4740_codec->base);
        release_mem_region(mem->start, resource_size(mem));
diff --git a/sound/soc/codecs/jz4740.h b/sound/soc/codecs/jz4740.h
deleted file mode 100644 (file)
index b5a0691..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- *  You should have received a copy of the  GNU General Public License along
- *  with this program; if not, write  to the Free Software Foundation, Inc.,
- *  675 Mass Ave, Cambridge, MA 02139, USA.
- *
- */
-
-#ifndef __SND_SOC_CODECS_JZ4740_CODEC_H__
-#define __SND_SOC_CODECS_JZ4740_CODEC_H__
-
-extern struct snd_soc_dai jz4740_codec_dai;
-extern struct snd_soc_codec_device soc_codec_dev_jz4740_codec;
-
-#endif
index 5a5f187a265738283cb4f05049f78d12430d9789..bd8f26e41602cf2fe8bcb36dd423bc62a1c1c521 100644 (file)
@@ -32,8 +32,8 @@
 #define PCM3008_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |   \
                       SNDRV_PCM_RATE_48000)
 
-struct snd_soc_dai pcm3008_dai = {
-       .name = "PCM3008 HiFi",
+static struct snd_soc_dai_driver pcm3008_dai = {
+       .name = "pcm3008-hifi",
        .playback = {
                .stream_name = "PCM3008 Playback",
                .channels_min = 1,
@@ -49,7 +49,6 @@ struct snd_soc_dai pcm3008_dai = {
                .formats = SNDRV_PCM_FMTBIT_S16_LE,
        },
 };
-EXPORT_SYMBOL_GPL(pcm3008_dai);
 
 static void pcm3008_gpio_free(struct pcm3008_setup_data *setup)
 {
@@ -59,38 +58,13 @@ static void pcm3008_gpio_free(struct pcm3008_setup_data *setup)
        gpio_free(setup->pdda_pin);
 }
 
-static int pcm3008_soc_probe(struct platform_device *pdev)
+static int pcm3008_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct pcm3008_setup_data *setup = socdev->codec_data;
+       struct pcm3008_setup_data *setup = codec->dev->platform_data;
        int ret = 0;
 
        printk(KERN_INFO "PCM3008 SoC Audio Codec %s\n", PCM3008_VERSION);
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (!socdev->card->codec)
-               return -ENOMEM;
-
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->name = "PCM3008";
-       codec->owner = THIS_MODULE;
-       codec->dai = &pcm3008_dai;
-       codec->num_dai = 1;
-       codec->write = NULL;
-       codec->read = NULL;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       /* Register PCMs. */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "pcm3008: failed to create pcms\n");
-               goto pcm_err;
-       }
-
        /* DEM1  DEM0  DE-EMPHASIS_MODE
         * Low   Low   De-emphasis 44.1 kHz ON
         * Low   High  De-emphasis OFF
@@ -130,33 +104,22 @@ static int pcm3008_soc_probe(struct platform_device *pdev)
 
 gpio_err:
        pcm3008_gpio_free(setup);
-pcm_err:
-       kfree(socdev->card->codec);
 
        return ret;
 }
 
-static int pcm3008_soc_remove(struct platform_device *pdev)
+static int pcm3008_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-       struct pcm3008_setup_data *setup = socdev->codec_data;
-
-       if (!codec)
-               return 0;
+       struct pcm3008_setup_data *setup = codec->dev->platform_data;
 
        pcm3008_gpio_free(setup);
-       snd_soc_free_pcms(socdev);
-       kfree(socdev->card->codec);
-
        return 0;
 }
 
 #ifdef CONFIG_PM
-static int pcm3008_soc_suspend(struct platform_device *pdev, pm_message_t msg)
+static int pcm3008_soc_suspend(struct snd_soc_codec *codec, pm_message_t msg)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct pcm3008_setup_data *setup = socdev->codec_data;
+       struct pcm3008_setup_data *setup = codec->dev->platform_data;
 
        gpio_set_value(setup->pdad_pin, 0);
        gpio_set_value(setup->pdda_pin, 0);
@@ -164,10 +127,9 @@ static int pcm3008_soc_suspend(struct platform_device *pdev, pm_message_t msg)
        return 0;
 }
 
-static int pcm3008_soc_resume(struct platform_device *pdev)
+static int pcm3008_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct pcm3008_setup_data *setup = socdev->codec_data;
+       struct pcm3008_setup_data *setup = codec->dev->platform_data;
 
        gpio_set_value(setup->pdad_pin, 1);
        gpio_set_value(setup->pdda_pin, 1);
@@ -179,23 +141,45 @@ static int pcm3008_soc_resume(struct platform_device *pdev)
 #define pcm3008_soc_resume NULL
 #endif
 
-struct snd_soc_codec_device soc_codec_dev_pcm3008 = {
+static struct snd_soc_codec_driver soc_codec_dev_pcm3008 = {
        .probe =        pcm3008_soc_probe,
        .remove =       pcm3008_soc_remove,
        .suspend =      pcm3008_soc_suspend,
        .resume =       pcm3008_soc_resume,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_pcm3008);
 
-static int __init pcm3008_init(void)
+static int __devinit pcm3008_codec_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_pcm3008, &pcm3008_dai, 1);
+}
+
+static int __devexit pcm3008_codec_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+MODULE_ALIAS("platform:pcm3008-codec");
+
+static struct platform_driver pcm3008_codec_driver = {
+       .probe          = pcm3008_codec_probe,
+       .remove         = __devexit_p(pcm3008_codec_remove),
+       .driver         = {
+               .name   = "pcm3008-codec",
+               .owner  = THIS_MODULE,
+       },
+};
+
+static int __init pcm3008_modinit(void)
 {
-       return snd_soc_register_dai(&pcm3008_dai);
+       return platform_driver_register(&pcm3008_codec_driver);
 }
-module_init(pcm3008_init);
+module_init(pcm3008_modinit);
 
 static void __exit pcm3008_exit(void)
 {
-       snd_soc_unregister_dai(&pcm3008_dai);
+       platform_driver_unregister(&pcm3008_codec_driver);
 }
 module_exit(pcm3008_exit);
 
index d04e87d3c060c964614fcfcb803e0d07b016309f..7e5489ab48123ec46b19a239a15bf2b39944693e 100644 (file)
@@ -19,7 +19,4 @@ struct pcm3008_setup_data {
        unsigned pdda_pin;
 };
 
-extern struct snd_soc_codec_device soc_codec_dev_pcm3008;
-extern struct snd_soc_dai pcm3008_dai;
-
 #endif
index 9119836051a4721abef78468869c07b7bdc409a8..4c32b54913ad0f6316de3bea2f4e03a558fe8ec6 100644 (file)
 #include <sound/pcm.h>
 #include <sound/initval.h>
 
-#include "spdif_transciever.h"
-
 MODULE_LICENSE("GPL");
 
 #define STUB_RATES     SNDRV_PCM_RATE_8000_96000
 #define STUB_FORMATS   SNDRV_PCM_FMTBIT_S16_LE
 
-static struct snd_soc_codec *spdif_dit_codec;
-
-static int spdif_dit_codec_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       if (spdif_dit_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = spdif_dit_codec;
-       codec = spdif_dit_codec;
-
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto err_create_pcms;
-       }
-
-       return 0;
-
-err_create_pcms:
-       return ret;
-}
-
-static int spdif_dit_codec_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-
-       return 0;
-}
 
-struct snd_soc_codec_device soc_codec_dev_spdif_dit = {
-       .probe          = spdif_dit_codec_probe,
-       .remove         = spdif_dit_codec_remove,
-}; EXPORT_SYMBOL_GPL(soc_codec_dev_spdif_dit);
+static struct snd_soc_codec_driver soc_codec_spdif_dit;
 
-struct snd_soc_dai dit_stub_dai = {
-       .name           = "DIT",
+static struct snd_soc_dai_driver dit_stub_dai = {
+       .name           = "dit-hifi",
        .playback       = {
                .stream_name    = "Playback",
                .channels_min   = 1,
@@ -80,65 +39,16 @@ struct snd_soc_dai dit_stub_dai = {
                .formats        = STUB_FORMATS,
        },
 };
-EXPORT_SYMBOL_GPL(dit_stub_dai);
 
 static int spdif_dit_probe(struct platform_device *pdev)
 {
-       struct snd_soc_codec *codec;
-       int ret;
-
-       if (spdif_dit_codec) {
-               dev_err(&pdev->dev, "Another Codec is registered\n");
-               ret = -EINVAL;
-               goto err_reg_codec;
-       }
-
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-
-       codec->dev = &pdev->dev;
-
-       mutex_init(&codec->mutex);
-
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "spdif-dit";
-       codec->owner = THIS_MODULE;
-       codec->dai = &dit_stub_dai;
-       codec->num_dai = 1;
-
-       spdif_dit_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_reg_codec;
-       }
-
-       dit_stub_dai.dev = &pdev->dev;
-       ret = snd_soc_register_dai(&dit_stub_dai);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to register dai: %d\n", ret);
-               goto err_reg_dai;
-       }
-
-       return 0;
-
-err_reg_dai:
-       snd_soc_unregister_codec(codec);
-err_reg_codec:
-       kfree(spdif_dit_codec);
-       return ret;
+       return snd_soc_register_codec(&pdev->dev, &soc_codec_spdif_dit,
+                       &dit_stub_dai, 1);
 }
 
 static int spdif_dit_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&dit_stub_dai);
-       snd_soc_unregister_codec(spdif_dit_codec);
-       kfree(spdif_dit_codec);
-       spdif_dit_codec = NULL;
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
diff --git a/sound/soc/codecs/spdif_transciever.h b/sound/soc/codecs/spdif_transciever.h
deleted file mode 100644 (file)
index 1e10212..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * ALSA SoC DIT/DIR driver header
- *
- * Author:      Steve Chen,  <schen@mvista.com>
- * Copyright:   (C) 2008 MontaVista Software, Inc., <source@mvista.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef CODEC_STUBS_H
-#define CODEC_STUBS_H
-
-extern struct snd_soc_codec_device soc_codec_dev_spdif_dit;
-extern struct snd_soc_dai dit_stub_dai;
-
-#endif /* CODEC_STUBS_H */
index b47ed4f6ab2072b86157b97da602d168e3756bd6..67d8c044ca04596acf55311b5db548b4d45adb3d 100644 (file)
 
 #define SSM2602_VERSION "0.1"
 
-struct snd_soc_codec_device soc_codec_dev_ssm2602;
-
 /* codec private data */
 struct ssm2602_priv {
        unsigned int sysclk;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        struct snd_pcm_substream *master_substream;
        struct snd_pcm_substream *slave_substream;
 };
@@ -276,8 +276,7 @@ static int ssm2602_hw_params(struct snd_pcm_substream *substream,
 {
        u16 srate;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
        struct i2c_client *i2c = codec->control_data;
        u16 iface = ssm2602_read_reg_cache(codec, SSM2602_IFACE) & 0xfff3;
@@ -321,8 +320,7 @@ static int ssm2602_startup(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
        struct i2c_client *i2c = codec->control_data;
        struct snd_pcm_runtime *master_runtime;
@@ -360,8 +358,7 @@ static int ssm2602_pcm_prepare(struct snd_pcm_substream *substream,
                               struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        /* set active */
        ssm2602_write(codec, SSM2602_ACTIVE, ACTIVE_ACTIVATE_CODEC);
 
@@ -372,8 +369,7 @@ static void ssm2602_shutdown(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
 
        /* deactivate */
@@ -518,8 +514,8 @@ static struct snd_soc_dai_ops ssm2602_dai_ops = {
        .set_fmt        = ssm2602_set_dai_fmt,
 };
 
-struct snd_soc_dai ssm2602_dai = {
-       .name = "SSM2602",
+static struct snd_soc_dai_driver ssm2602_dai = {
+       .name = "ssm2602-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -534,21 +530,15 @@ struct snd_soc_dai ssm2602_dai = {
                .formats = SSM2602_FORMATS,},
        .ops = &ssm2602_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ssm2602_dai);
 
-static int ssm2602_suspend(struct platform_device *pdev, pm_message_t state)
+static int ssm2602_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        ssm2602_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int ssm2602_resume(struct platform_device *pdev)
+static int ssm2602_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -563,36 +553,18 @@ static int ssm2602_resume(struct platform_device *pdev)
        return 0;
 }
 
-/*
- * initialise the ssm2602 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int ssm2602_init(struct snd_soc_device *socdev)
+static int ssm2602_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int reg, ret = 0;
-
-       codec->name = "SSM2602";
-       codec->owner = THIS_MODULE;
-       codec->read = ssm2602_read_reg_cache;
-       codec->write = ssm2602_write;
-       codec->set_bias_level = ssm2602_set_bias_level;
-       codec->dai = &ssm2602_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = sizeof(ssm2602_reg);
-       codec->reg_cache = kmemdup(ssm2602_reg, sizeof(ssm2602_reg),
-                                       GFP_KERNEL);
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
+       struct ssm2602_priv *ssm2602 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0, reg;
+
+       pr_info("ssm2602 Audio Codec %s", SSM2602_VERSION);
+
+       codec->bias_level = SND_SOC_BIAS_OFF,
+       codec->control_data = ssm2602->control_data;
 
        ssm2602_reset(codec);
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               pr_err("ssm2602: failed to create pcms\n");
-               goto pcm_err;
-       }
        /*power on device*/
        ssm2602_write(codec, SSM2602_ACTIVE, 0);
        /* set the update bits */
@@ -614,13 +586,27 @@ static int ssm2602_init(struct snd_soc_device *socdev)
        ssm2602_add_widgets(codec);
 
        return ret;
+}
 
-pcm_err:
-       kfree(codec->reg_cache);
-       return ret;
+/* remove everything here */
+static int ssm2602_remove(struct snd_soc_codec *codec)
+{
+       ssm2602_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
-static struct snd_soc_device *ssm2602_socdev;
+static struct snd_soc_codec_driver soc_codec_dev_ssm2602 = {
+       .probe =        ssm2602_probe,
+       .remove =       ssm2602_remove,
+       .suspend =      ssm2602_suspend,
+       .resume =       ssm2602_resume,
+       .read = ssm2602_read_reg_cache,
+       .write = ssm2602_write,
+       .set_bias_level = ssm2602_set_bias_level,
+       .reg_cache_size = sizeof(ssm2602_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = ssm2602_reg,
+};
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 /*
@@ -632,24 +618,28 @@ static struct snd_soc_device *ssm2602_socdev;
 static int ssm2602_i2c_probe(struct i2c_client *i2c,
                             const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = ssm2602_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct ssm2602_priv *ssm2602;
        int ret;
 
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
+       ssm2602 = kzalloc(sizeof(struct ssm2602_priv), GFP_KERNEL);
+       if (ssm2602 == NULL)
+               return -ENOMEM;
 
-       ret = ssm2602_init(socdev);
-       if (ret < 0)
-               pr_err("failed to initialise SSM2602\n");
+       i2c_set_clientdata(i2c, ssm2602);
+       ssm2602->control_data = i2c;
+       ssm2602->control_type = SND_SOC_I2C;
 
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_ssm2602, &ssm2602_dai, 1);
+       if (ret < 0)
+               kfree(ssm2602);
        return ret;
 }
 
 static int ssm2602_i2c_remove(struct i2c_client *client)
 {
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       kfree(codec->reg_cache);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -658,130 +648,39 @@ static const struct i2c_device_id ssm2602_i2c_id[] = {
        { }
 };
 MODULE_DEVICE_TABLE(i2c, ssm2602_i2c_id);
+
 /* corgi i2c codec control layer */
 static struct i2c_driver ssm2602_i2c_driver = {
        .driver = {
-               .name = "SSM2602 I2C Codec",
+               .name = "ssm2602-codec",
                .owner = THIS_MODULE,
        },
        .probe = ssm2602_i2c_probe,
        .remove = ssm2602_i2c_remove,
        .id_table = ssm2602_i2c_id,
 };
-
-static int ssm2602_add_i2c_device(struct platform_device *pdev,
-                                 const struct ssm2602_setup_data *setup)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-       int ret;
-
-       ret = i2c_add_driver(&ssm2602_i2c_driver);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "can't add i2c driver\n");
-               return ret;
-       }
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = setup->i2c_address;
-       strlcpy(info.type, "ssm2602", I2C_NAME_SIZE);
-       adapter = i2c_get_adapter(setup->i2c_bus);
-       if (!adapter) {
-               dev_err(&pdev->dev, "can't get i2c adapter %d\n",
-               setup->i2c_bus);
-               goto err_driver;
-       }
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
-               (unsigned int)info.addr);
-               goto err_driver;
-       }
-       return 0;
-err_driver:
-       i2c_del_driver(&ssm2602_i2c_driver);
-       return -ENODEV;
-}
 #endif
 
-static int ssm2602_probe(struct platform_device *pdev)
+
+static int __init ssm2602_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct ssm2602_setup_data *setup;
-       struct snd_soc_codec *codec;
-       struct ssm2602_priv *ssm2602;
        int ret = 0;
-
-       pr_info("ssm2602 Audio Codec %s", SSM2602_VERSION);
-
-       setup = socdev->codec_data;
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-
-       ssm2602 = kzalloc(sizeof(struct ssm2602_priv), GFP_KERNEL);
-       if (ssm2602 == NULL) {
-               kfree(codec);
-               return -ENOMEM;
-       }
-
-       snd_soc_codec_set_drvdata(codec, ssm2602);
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       ssm2602_socdev = socdev;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       if (setup->i2c_address) {
-               codec->hw_write = (hw_write_t)i2c_master_send;
-               ret = ssm2602_add_i2c_device(pdev, setup);
+       ret = i2c_add_driver(&ssm2602_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register SSM2602 I2C driver: %d\n",
+                      ret);
        }
-#else
-       /* other interfaces */
 #endif
        return ret;
 }
+module_init(ssm2602_modinit);
 
-/* remove everything here */
-static int ssm2602_remove(struct platform_device *pdev)
+static void __exit ssm2602_exit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               ssm2602_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       i2c_unregister_device(codec->control_data);
        i2c_del_driver(&ssm2602_i2c_driver);
 #endif
-       kfree(snd_soc_codec_get_drvdata(codec));
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_ssm2602 = {
-       .probe =        ssm2602_probe,
-       .remove =       ssm2602_remove,
-       .suspend =      ssm2602_suspend,
-       .resume =       ssm2602_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_ssm2602);
-
-static int __init ssm2602_modinit(void)
-{
-       return snd_soc_register_dai(&ssm2602_dai);
-}
-module_init(ssm2602_modinit);
-
-static void __exit ssm2602_exit(void)
-{
-       snd_soc_unregister_dai(&ssm2602_dai);
 }
 module_exit(ssm2602_exit);
 
index f344e6d76e31735d43d15c6b34d4ab3a01a1c6ad..42a47d0f8e2551879c7d9397e1d035ecfe918f46 100644 (file)
@@ -124,7 +124,4 @@ struct ssm2602_setup_data {
        unsigned short i2c_address;
 };
 
-extern struct snd_soc_dai ssm2602_dai;
-extern struct snd_soc_codec_device soc_codec_dev_ssm2602;
-
 #endif
index ee86568545c255f2746c32eb6d469a3633f2a470..00d67cc8e2062a9071dcb78ee0fb2d64b5a77166 100644 (file)
@@ -25,7 +25,6 @@
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <sound/tlv.h>
-#include <sound/soc-of-simple.h>
 
 #include "stac9766.h"
 
@@ -257,20 +256,15 @@ static int stac9766_reset(struct snd_soc_codec *codec, int try_warm)
        return 0;
 }
 
-static int stac9766_codec_suspend(struct platform_device *pdev,
+static int stac9766_codec_suspend(struct snd_soc_codec *codec,
                                  pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        stac9766_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int stac9766_codec_resume(struct platform_device *pdev)
+static int stac9766_codec_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        u16 id, reset;
 
        reset = 0;
@@ -300,10 +294,9 @@ static struct snd_soc_dai_ops stac9766_dai_ops_digital = {
        .prepare = ac97_digital_prepare,
 };
 
-struct snd_soc_dai stac9766_dai[] = {
+static struct snd_soc_dai_driver stac9766_dai[] = {
 {
-       .name = "stac9766 analog",
-       .id = 0,
+       .name = "stac9766-hifi-analog",
        .ac97_control = 1,
 
        /* stream cababilities */
@@ -325,8 +318,7 @@ struct snd_soc_dai stac9766_dai[] = {
        .ops = &stac9766_dai_ops_analog,
 },
 {
-       .name = "stac9766 IEC958",
-       .id = 1,
+       .name = "stac9766-hifi-IEC958",
        .ac97_control = 1,
 
        /* stream cababilities */
@@ -342,57 +334,24 @@ struct snd_soc_dai stac9766_dai[] = {
        .ops = &stac9766_dai_ops_digital,
 }
 };
-EXPORT_SYMBOL_GPL(stac9766_dai);
 
-static int stac9766_codec_probe(struct platform_device *pdev)
+static int stac9766_codec_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
        int ret = 0;
 
        printk(KERN_INFO "STAC9766 SoC Audio Codec %s\n", STAC9766_VERSION);
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (socdev->card->codec == NULL)
-               return -ENOMEM;
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->reg_cache = kmemdup(stac9766_reg, sizeof(stac9766_reg),
-                                  GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto cache_err;
-       }
-       codec->reg_cache_size = sizeof(stac9766_reg);
-       codec->reg_cache_step = 2;
-
-       codec->name = "STAC9766";
-       codec->owner = THIS_MODULE;
-       codec->dai = stac9766_dai;
-       codec->num_dai = ARRAY_SIZE(stac9766_dai);
-       codec->write = stac9766_ac97_write;
-       codec->read = stac9766_ac97_read;
-       codec->set_bias_level = stac9766_set_bias_level;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
        ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
        if (ret < 0)
                goto codec_err;
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto pcm_err;
-
        /* do a cold reset for the controller and then try
         * a warm reset followed by an optional cold reset for codec */
        stac9766_reset(codec, 0);
        ret = stac9766_reset(codec, 1);
        if (ret < 0) {
                printk(KERN_ERR "Failed to reset STAC9766: AC97 link error\n");
-               goto reset_err;
+               goto codec_err;
        }
 
        stac9766_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
@@ -402,40 +361,63 @@ static int stac9766_codec_probe(struct platform_device *pdev)
 
        return 0;
 
-reset_err:
-       snd_soc_free_pcms(socdev);
-pcm_err:
-       snd_soc_free_ac97_codec(codec);
 codec_err:
-       kfree(snd_soc_codec_get_drvdata(codec));
-cache_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
+       snd_soc_free_ac97_codec(codec);
        return ret;
 }
 
-static int stac9766_codec_remove(struct platform_device *pdev)
+static int stac9766_codec_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec == NULL)
-               return 0;
-
-       snd_soc_free_pcms(socdev);
        snd_soc_free_ac97_codec(codec);
-       kfree(codec->reg_cache);
-       kfree(codec);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_stac9766 = {
+static struct snd_soc_codec_driver soc_codec_dev_stac9766 = {
+       .write = stac9766_ac97_write,
+       .read = stac9766_ac97_read,
+       .set_bias_level = stac9766_set_bias_level,
        .probe = stac9766_codec_probe,
        .remove = stac9766_codec_remove,
        .suspend = stac9766_codec_suspend,
        .resume = stac9766_codec_resume,
+       .reg_cache_size = sizeof(stac9766_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_step = 2,
+};
+
+static __devinit int stac9766_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_stac9766, stac9766_dai, ARRAY_SIZE(stac9766_dai));
+}
+
+static int __devexit stac9766_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver stac9766_codec_driver = {
+       .driver = {
+                       .name = "stac9766-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = stac9766_probe,
+       .remove = __devexit_p(stac9766_remove),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_stac9766);
+
+static int __init stac9766_init(void)
+{
+       return platform_driver_register(&stac9766_codec_driver);
+}
+module_init(stac9766_init);
+
+static void __exit stac9766_exit(void)
+{
+       platform_driver_unregister(&stac9766_codec_driver);
+}
+module_exit(stac9766_exit);
 
 MODULE_DESCRIPTION("ASoC stac9766 driver");
 MODULE_AUTHOR("Jon Smirl <jonsmirl@gmail.com>");
index 65642eb8393e2d71ad26d7413496976520cbdcff..c726f907e2c03311c54ff31318193fff5cee4e7e 100644 (file)
@@ -14,8 +14,4 @@
 #define STAC9766_DAI_AC97_ANALOG               0
 #define STAC9766_DAI_AC97_DIGITAL              1
 
-extern struct snd_soc_dai stac9766_dai[];
-extern struct snd_soc_codec_device soc_codec_dev_stac9766;
-
-
 #endif
index 0a4b0fef33550f217adf1a597636963e76cb4d48..e8652b1ae32606b5c57bd0ff7d0a8b4a304fa9d5 100644 (file)
@@ -240,7 +240,8 @@ static const struct snd_soc_dapm_route intercon[] = {
 
 /* AIC23 driver data */
 struct aic23 {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        int mclk;
        int requested_adc;
        int requested_dac;
@@ -404,11 +405,10 @@ static int tlv320aic23_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 iface_reg;
        int ret;
-       struct aic23 *aic23 = container_of(codec, struct aic23, codec);
+       struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec);
        u32 sample_rate_adc = aic23->requested_adc;
        u32 sample_rate_dac = aic23->requested_dac;
        u32 sample_rate = params_rate(params);
@@ -452,8 +452,7 @@ static int tlv320aic23_pcm_prepare(struct snd_pcm_substream *substream,
                                   struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* set active */
        tlv320aic23_write(codec, TLV320AIC23_ACTIVE, 0x0001);
@@ -465,9 +464,8 @@ static void tlv320aic23_shutdown(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
-       struct aic23 *aic23 = container_of(codec, struct aic23, codec);
+       struct snd_soc_codec *codec = rtd->codec;
+       struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec);
 
        /* deactivate */
        if (!codec->active) {
@@ -546,8 +544,7 @@ static int tlv320aic23_set_dai_fmt(struct snd_soc_dai *codec_dai,
 static int tlv320aic23_set_dai_sysclk(struct snd_soc_dai *codec_dai,
                                      int clk_id, unsigned int freq, int dir)
 {
-       struct snd_soc_codec *codec = codec_dai->codec;
-       struct aic23 *aic23 = container_of(codec, struct aic23, codec);
+       struct aic23 *aic23 = snd_soc_dai_get_drvdata(codec_dai);
        aic23->mclk = freq;
        return 0;
 }
@@ -594,8 +591,8 @@ static struct snd_soc_dai_ops tlv320aic23_dai_ops = {
        .set_sysclk     = tlv320aic23_set_dai_sysclk,
 };
 
-struct snd_soc_dai tlv320aic23_dai = {
-       .name = "tlv320aic23",
+static struct snd_soc_dai_driver tlv320aic23_dai = {
+       .name = "tlv320aic23-hifi",
        .playback = {
                     .stream_name = "Playback",
                     .channels_min = 2,
@@ -610,23 +607,17 @@ struct snd_soc_dai tlv320aic23_dai = {
                    .formats = AIC23_FORMATS,},
        .ops = &tlv320aic23_dai_ops,
 };
-EXPORT_SYMBOL_GPL(tlv320aic23_dai);
 
-static int tlv320aic23_suspend(struct platform_device *pdev,
+static int tlv320aic23_suspend(struct snd_soc_codec *codec,
                               pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        tlv320aic23_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int tlv320aic23_resume(struct platform_device *pdev)
+static int tlv320aic23_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        u16 reg;
 
        /* Sync reg_cache with the hardware */
@@ -639,39 +630,19 @@ static int tlv320aic23_resume(struct platform_device *pdev)
        return 0;
 }
 
-/*
- * initialise the AIC23 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int tlv320aic23_init(struct snd_soc_device *socdev)
+static int tlv320aic23_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int ret = 0;
-       u16 reg;
+       struct aic23 *aic23 = snd_soc_codec_get_drvdata(codec);
+       int reg;
 
-       codec->name = "tlv320aic23";
-       codec->owner = THIS_MODULE;
-       codec->read = tlv320aic23_read_reg_cache;
-       codec->write = tlv320aic23_write;
-       codec->set_bias_level = tlv320aic23_set_bias_level;
-       codec->dai = &tlv320aic23_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(tlv320aic23_reg);
-       codec->reg_cache =
-           kmemdup(tlv320aic23_reg, sizeof(tlv320aic23_reg), GFP_KERNEL);
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
+       printk(KERN_INFO "AIC23 Audio Codec %s\n", AIC23_VERSION);
+       codec->control_data = aic23->control_data;
+       codec->hw_write = (hw_write_t)i2c_master_send;
+       codec->hw_read = NULL;
 
        /* Reset codec */
        tlv320aic23_write(codec, TLV320AIC23_RESET, 0);
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "tlv320aic23: failed to create pcms\n");
-               goto pcm_err;
-       }
-
        /* power on device */
        tlv320aic23_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
@@ -707,13 +678,27 @@ static int tlv320aic23_init(struct snd_soc_device *socdev)
                                ARRAY_SIZE(tlv320aic23_snd_controls));
        tlv320aic23_add_widgets(codec);
 
-       return ret;
+       return 0;
+}
 
-pcm_err:
-       kfree(codec->reg_cache);
-       return ret;
+static int tlv320aic23_remove(struct snd_soc_codec *codec)
+{
+       tlv320aic23_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
-static struct snd_soc_device *tlv320aic23_socdev;
+
+static struct snd_soc_codec_driver soc_codec_dev_tlv320aic23 = {
+       .reg_cache_size = ARRAY_SIZE(tlv320aic23_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = tlv320aic23_reg,
+       .probe = tlv320aic23_probe,
+       .remove = tlv320aic23_remove,
+       .suspend = tlv320aic23_suspend,
+       .resume = tlv320aic23_resume,
+       .read = tlv320aic23_read_reg_cache,
+       .write = tlv320aic23_write,
+       .set_bias_level = tlv320aic23_set_bias_level,
+};
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 /*
@@ -723,31 +708,30 @@ static struct snd_soc_device *tlv320aic23_socdev;
 static int tlv320aic23_codec_probe(struct i2c_client *i2c,
                                   const struct i2c_device_id *i2c_id)
 {
-       struct snd_soc_device *socdev = tlv320aic23_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct aic23 *aic23;
        int ret;
 
        if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
                return -EINVAL;
 
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
+       aic23 = kzalloc(sizeof(struct aic23), GFP_KERNEL);
+       if (aic23 == NULL)
+               return -ENOMEM;
 
-       ret = tlv320aic23_init(socdev);
-       if (ret < 0) {
-               printk(KERN_ERR "tlv320aic23: failed to initialise AIC23\n");
-               goto err;
-       }
-       return ret;
+       i2c_set_clientdata(i2c, aic23);
+       aic23->control_data = i2c;
+       aic23->control_type = SND_SOC_I2C;
 
-err:
-       kfree(codec);
-       kfree(i2c);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_tlv320aic23, &tlv320aic23_dai, 1);
+       if (ret < 0)
+               kfree(aic23);
        return ret;
 }
 static int __exit tlv320aic23_i2c_remove(struct i2c_client *i2c)
 {
-       put_device(&i2c->dev);
+       snd_soc_unregister_codec(&i2c->dev);
+       kfree(i2c_get_clientdata(i2c));
        return 0;
 }
 
@@ -760,7 +744,7 @@ MODULE_DEVICE_TABLE(i2c, tlv320aic23_id);
 
 static struct i2c_driver tlv320aic23_i2c_driver = {
        .driver = {
-                  .name = "tlv320aic23",
+                  .name = "tlv320aic23-codec",
                   },
        .probe = tlv320aic23_codec_probe,
        .remove = __exit_p(tlv320aic23_i2c_remove),
@@ -769,71 +753,25 @@ static struct i2c_driver tlv320aic23_i2c_driver = {
 
 #endif
 
-static int tlv320aic23_probe(struct platform_device *pdev)
+static int __init tlv320aic23_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct aic23 *aic23;
-       int ret = 0;
-
-       printk(KERN_INFO "AIC23 Audio Codec %s\n", AIC23_VERSION);
-
-       aic23 = kzalloc(sizeof(struct aic23), GFP_KERNEL);
-       if (aic23 == NULL)
-               return -ENOMEM;
-       codec = &aic23->codec;
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       tlv320aic23_socdev = socdev;
+       int ret;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       codec->hw_write = (hw_write_t) i2c_master_send;
-       codec->hw_read = NULL;
        ret = i2c_add_driver(&tlv320aic23_i2c_driver);
-       if (ret != 0)
-               printk(KERN_ERR "can't add i2c driver");
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register TLV320AIC23 I2C driver: %d\n",
+                      ret);
+       }
 #endif
        return ret;
 }
+module_init(tlv320aic23_modinit);
 
-static int tlv320aic23_remove(struct platform_device *pdev)
+static void __exit tlv320aic23_exit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-       struct aic23 *aic23 = container_of(codec, struct aic23, codec);
-
-       if (codec->control_data)
-               tlv320aic23_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&tlv320aic23_i2c_driver);
 #endif
-       kfree(codec->reg_cache);
-       kfree(aic23);
-
-       return 0;
-}
-struct snd_soc_codec_device soc_codec_dev_tlv320aic23 = {
-       .probe = tlv320aic23_probe,
-       .remove = tlv320aic23_remove,
-       .suspend = tlv320aic23_suspend,
-       .resume = tlv320aic23_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_tlv320aic23);
-
-static int __init tlv320aic23_modinit(void)
-{
-       return snd_soc_register_dai(&tlv320aic23_dai);
-}
-module_init(tlv320aic23_modinit);
-
-static void __exit tlv320aic23_exit(void)
-{
-       snd_soc_unregister_dai(&tlv320aic23_dai);
 }
 module_exit(tlv320aic23_exit);
 
index 79d1faf8e570bafa76147716e3b2fa3b247bd8ab..e804120bd3da3bae2354fe5bfd46809d93f561cb 100644 (file)
 #define TLV320AIC23_SIDETONE_12                0x080
 #define TLV320AIC23_SIDETONE_18                0x0c0
 
-extern struct snd_soc_dai tlv320aic23_dai;
-extern struct snd_soc_codec_device soc_codec_dev_tlv320aic23;
-
 #endif /* _TLV320AIC23_H */
index f0e00fd4b43578ef78f1f20a8d82c5561379a556..6b7d71ec0004ddb660e9e962a64002dc430ecd2d 100644 (file)
@@ -19,7 +19,6 @@
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
-#include <sound/soc-of-simple.h>
 #include <sound/initval.h>
 
 #include "tlv320aic26.h"
@@ -130,8 +129,7 @@ static int aic26_hw_params(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct aic26 *aic26 = snd_soc_codec_get_drvdata(codec);
        int fsref, divisor, wlen, pval, jval, dval, qval;
        u16 reg;
@@ -278,8 +276,8 @@ static struct snd_soc_dai_ops aic26_dai_ops = {
        .set_fmt        = aic26_set_fmt,
 };
 
-struct snd_soc_dai aic26_dai = {
-       .name = "tlv320aic26",
+static struct snd_soc_dai_driver aic26_dai = {
+       .name = "tlv320aic26-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -296,7 +294,6 @@ struct snd_soc_dai aic26_dai = {
        },
        .ops = &aic26_dai_ops,
 };
-EXPORT_SYMBOL_GPL(aic26_dai);
 
 /* ---------------------------------------------------------------------
  * ALSA controls
@@ -318,61 +315,6 @@ static const struct snd_kcontrol_new aic26_snd_controls[] = {
        SOC_ENUM("Capture Source", aic26_capture_src_enum),
 };
 
-/* ---------------------------------------------------------------------
- * SoC CODEC portion of driver: probe and release routines
- */
-static int aic26_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct aic26 *aic26;
-       int ret, err;
-
-       dev_info(&pdev->dev, "Probing AIC26 SoC CODEC driver\n");
-       dev_dbg(&pdev->dev, "socdev=%p\n", socdev);
-       dev_dbg(&pdev->dev, "codec_data=%p\n", socdev->codec_data);
-
-       /* Fetch the relevant aic26 private data here (it's already been
-        * stored in the .codec pointer) */
-       aic26 = socdev->codec_data;
-       if (aic26 == NULL) {
-               dev_err(&pdev->dev, "aic26: missing codec pointer\n");
-               return -ENODEV;
-       }
-       codec = &aic26->codec;
-       socdev->card->codec = codec;
-
-       dev_dbg(&pdev->dev, "Registering PCMs, dev=%p, socdev->dev=%p\n",
-               &pdev->dev, socdev->dev);
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "aic26: failed to create pcms\n");
-               return -ENODEV;
-       }
-
-       /* register controls */
-       dev_dbg(&pdev->dev, "Registering controls\n");
-       err = snd_soc_add_controls(codec, aic26_snd_controls,
-                       ARRAY_SIZE(aic26_snd_controls));
-       WARN_ON(err < 0);
-
-       return 0;
-}
-
-static int aic26_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       snd_soc_free_pcms(socdev);
-       return 0;
-}
-
-struct snd_soc_codec_device aic26_soc_codec_dev = {
-       .probe = aic26_probe,
-       .remove = aic26_remove,
-};
-EXPORT_SYMBOL_GPL(aic26_soc_codec_dev);
-
 /* ---------------------------------------------------------------------
  * SPI device portion of driver: sysfs files for debugging
  */
@@ -409,95 +351,95 @@ static ssize_t aic26_keyclick_set(struct device *dev,
 static DEVICE_ATTR(keyclick, 0644, aic26_keyclick_show, aic26_keyclick_set);
 
 /* ---------------------------------------------------------------------
- * SPI device portion of driver: probe and release routines and SPI
- *                              driver registration.
+ * SoC CODEC portion of driver: probe and release routines
  */
-static int aic26_spi_probe(struct spi_device *spi)
+static int aic26_probe(struct snd_soc_codec *codec)
 {
-       struct aic26 *aic26;
-       int ret, i, reg;
-
-       dev_dbg(&spi->dev, "probing tlv320aic26 spi device\n");
-
-       /* Allocate driver data */
-       aic26 = kzalloc(sizeof *aic26, GFP_KERNEL);
-       if (!aic26)
-               return -ENOMEM;
-
-       /* Initialize the driver data */
-       aic26->spi = spi;
-       dev_set_drvdata(&spi->dev, aic26);
+       struct aic26 *aic26 = snd_soc_codec_get_drvdata(codec);
+       int ret, err, i, reg;
 
-       /* Setup what we can in the codec structure so that the register
-        * access functions will work as expected.  More will be filled
-        * out when it is probed by the SoC CODEC part of this driver */
-       snd_soc_codec_set_drvdata(&aic26->codec, aic26);
-       aic26->codec.name = "aic26";
-       aic26->codec.owner = THIS_MODULE;
-       aic26->codec.dai = &aic26_dai;
-       aic26->codec.num_dai = 1;
-       aic26->codec.read = aic26_reg_read;
-       aic26->codec.write = aic26_reg_write;
-       aic26->master = 1;
-       mutex_init(&aic26->codec.mutex);
-       INIT_LIST_HEAD(&aic26->codec.dapm_widgets);
-       INIT_LIST_HEAD(&aic26->codec.dapm_paths);
-       aic26->codec.reg_cache_size = AIC26_NUM_REGS;
-       aic26->codec.reg_cache = aic26->reg_cache;
-
-       aic26_dai.dev = &spi->dev;
-       ret = snd_soc_register_dai(&aic26_dai);
-       if (ret != 0) {
-               dev_err(&spi->dev, "Failed to register DAI: %d\n", ret);
-               kfree(aic26);
-               return ret;
-       }
+       dev_info(codec->dev, "Probing AIC26 SoC CODEC driver\n");
 
        /* Reset the codec to power on defaults */
-       aic26_reg_write(&aic26->codec, AIC26_REG_RESET, 0xBB00);
+       aic26_reg_write(codec, AIC26_REG_RESET, 0xBB00);
 
        /* Power up CODEC */
-       aic26_reg_write(&aic26->codec, AIC26_REG_POWER_CTRL, 0);
+       aic26_reg_write(codec, AIC26_REG_POWER_CTRL, 0);
 
        /* Audio Control 3 (master mode, fsref rate) */
-       reg = aic26_reg_read(&aic26->codec, AIC26_REG_AUDIO_CTRL3);
+       reg = aic26_reg_read(codec, AIC26_REG_AUDIO_CTRL3);
        reg &= ~0xf800;
        reg |= 0x0800; /* set master mode */
-       aic26_reg_write(&aic26->codec, AIC26_REG_AUDIO_CTRL3, reg);
+       aic26_reg_write(codec, AIC26_REG_AUDIO_CTRL3, reg);
 
        /* Fill register cache */
        for (i = 0; i < ARRAY_SIZE(aic26->reg_cache); i++)
-               aic26_reg_read(&aic26->codec, i);
+               aic26_reg_read(codec, i);
 
        /* Register the sysfs files for debugging */
        /* Create SysFS files */
-       ret = device_create_file(&spi->dev, &dev_attr_keyclick);
+       ret = device_create_file(codec->dev, &dev_attr_keyclick);
        if (ret)
-               dev_info(&spi->dev, "error creating sysfs files\n");
+               dev_info(codec->dev, "error creating sysfs files\n");
 
-#if defined(CONFIG_SND_SOC_OF_SIMPLE)
-       /* Tell the of_soc helper about this codec */
-       of_snd_soc_register_codec(&aic26_soc_codec_dev, aic26, &aic26_dai,
-                                 spi->dev.archdata.of_node);
-#endif
+       /* register controls */
+       dev_dbg(codec->dev, "Registering controls\n");
+       err = snd_soc_add_controls(codec, aic26_snd_controls,
+                       ARRAY_SIZE(aic26_snd_controls));
+       WARN_ON(err < 0);
 
-       dev_dbg(&spi->dev, "SPI device initialized\n");
        return 0;
 }
 
-static int aic26_spi_remove(struct spi_device *spi)
+static struct snd_soc_codec_driver aic26_soc_codec_dev = {
+       .probe = aic26_probe,
+       .read = aic26_reg_read,
+       .write = aic26_reg_write,
+       .reg_cache_size = AIC26_NUM_REGS,
+       .reg_word_size = sizeof(u16),
+};
+
+/* ---------------------------------------------------------------------
+ * SPI device portion of driver: probe and release routines and SPI
+ *                              driver registration.
+ */
+static int aic26_spi_probe(struct spi_device *spi)
 {
-       struct aic26 *aic26 = dev_get_drvdata(&spi->dev);
+       struct aic26 *aic26;
+       int ret;
 
-       snd_soc_unregister_dai(&aic26_dai);
-       kfree(aic26);
+       dev_dbg(&spi->dev, "probing tlv320aic26 spi device\n");
+
+       /* Allocate driver data */
+       aic26 = kzalloc(sizeof *aic26, GFP_KERNEL);
+       if (!aic26)
+               return -ENOMEM;
 
+       /* Initialize the driver data */
+       aic26->spi = spi;
+       dev_set_drvdata(&spi->dev, aic26);
+       aic26->master = 1;
+
+       ret = snd_soc_register_codec(&spi->dev,
+                       &aic26_soc_codec_dev, &aic26_dai, 1);
+       if (ret < 0)
+               kfree(aic26);
+       return ret;
+
+       dev_dbg(&spi->dev, "SPI device initialized\n");
+       return 0;
+}
+
+static int aic26_spi_remove(struct spi_device *spi)
+{
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
 static struct spi_driver aic26_spi = {
        .driver = {
-               .name = "tlv320aic26",
+               .name = "tlv320aic26-codec",
                .owner = THIS_MODULE,
        },
        .probe = aic26_spi_probe,
index 786ba16c945fa13728e2169baab21f5a3ffadfcc..62b1f2261429cf8c25747b5ecb4c4554c5b6d71f 100644 (file)
@@ -90,7 +90,4 @@ enum aic26_wlen {
        AIC26_WLEN_32   = 3 << 10,
 };
 
-extern struct snd_soc_dai aic26_dai;
-extern struct snd_soc_codec_device aic26_soc_codec_dev;
-
 #endif /* _TLV320AIC16_H_ */
index 71a69908ccf69485e0bbdb3e2804fcf06ee3fe8f..43fd9c171742b13dcad9bce01233c9d802d94904 100644 (file)
@@ -63,8 +63,10 @@ static const char *aic3x_supply_names[AIC3X_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct aic3x_priv {
-       struct snd_soc_codec codec;
        struct regulator_bulk_data supplies[AIC3X_NUM_SUPPLIES];
+       enum snd_soc_control_type control_type;
+       struct aic3x_setup_data *setup;
+       void *control_data;
        unsigned int sysclk;
        int master;
        int gpio_reset;
@@ -773,8 +775,7 @@ static int aic3x_hw_params(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec =rtd->codec;
        struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec);
        int codec_clk = 0, bypass_pll = 0, fsref, last_clk = 0;
        u8 data, j, r, p, pll_q, pll_p = 1, pll_r = 1, pll_j = 1;
@@ -1101,8 +1102,8 @@ static struct snd_soc_dai_ops aic3x_dai_ops = {
        .set_fmt        = aic3x_set_dai_fmt,
 };
 
-struct snd_soc_dai aic3x_dai = {
-       .name = "tlv320aic3x",
+static struct snd_soc_dai_driver aic3x_dai = {
+       .name = "tlv320aic3x-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -1117,22 +1118,16 @@ struct snd_soc_dai aic3x_dai = {
                .formats = AIC3X_FORMATS,},
        .ops = &aic3x_dai_ops,
 };
-EXPORT_SYMBOL_GPL(aic3x_dai);
 
-static int aic3x_suspend(struct platform_device *pdev, pm_message_t state)
+static int aic3x_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        aic3x_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int aic3x_resume(struct platform_device *pdev)
+static int aic3x_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u8 *cache = codec->reg_cache;
@@ -1157,22 +1152,6 @@ static int aic3x_init(struct snd_soc_codec *codec)
 {
        int reg;
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "tlv320aic3x";
-       codec->owner = THIS_MODULE;
-       codec->read = aic3x_read_reg_cache;
-       codec->write = aic3x_write;
-       codec->set_bias_level = aic3x_set_bias_level;
-       codec->dai = &aic3x_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(aic3x_reg);
-       codec->reg_cache = kmemdup(aic3x_reg, sizeof(aic3x_reg), GFP_KERNEL);
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
-
        aic3x_write(codec, AIC3X_PAGE_SELECT, PAGE0_SELECT);
        aic3x_write(codec, AIC3X_RESET, SOFT_RESET);
 
@@ -1245,56 +1224,50 @@ static int aic3x_init(struct snd_soc_codec *codec)
        return 0;
 }
 
-static struct snd_soc_codec *aic3x_codec;
-
-static int aic3x_register(struct snd_soc_codec *codec)
+static int aic3x_probe(struct snd_soc_codec *codec)
 {
-       int ret;
+       struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec);
+
+       codec->hw_write = (hw_write_t) i2c_master_send;
+       codec->control_data = aic3x->control_data;
 
-       ret = aic3x_init(codec);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to initialise device\n");
-               return ret;
+       if (aic3x->setup) {
+               /* setup GPIO functions */
+               aic3x_write(codec, AIC3X_GPIO1_REG,
+                           (aic3x->setup->gpio_func[0] & 0xf) << 4);
+               aic3x_write(codec, AIC3X_GPIO2_REG,
+                           (aic3x->setup->gpio_func[1] & 0xf) << 4);
        }
 
-       aic3x_codec = codec;
+       aic3x_init(codec);
 
-       ret = snd_soc_register_codec(codec);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register codec\n");
-               return ret;
-       }
+       snd_soc_add_controls(codec, aic3x_snd_controls,
+                            ARRAY_SIZE(aic3x_snd_controls));
 
-       ret = snd_soc_register_dai(&aic3x_dai);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register dai\n");
-               snd_soc_unregister_codec(codec);
-               return ret;
-       }
+       aic3x_add_widgets(codec);
 
        return 0;
 }
 
-static int aic3x_unregister(struct aic3x_priv *aic3x)
+static int aic3x_remove(struct snd_soc_codec *codec)
 {
-       aic3x_set_bias_level(&aic3x->codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_unregister_dai(&aic3x_dai);
-       snd_soc_unregister_codec(&aic3x->codec);
-
-       if (aic3x->gpio_reset >= 0) {
-               gpio_set_value(aic3x->gpio_reset, 0);
-               gpio_free(aic3x->gpio_reset);
-       }
-       regulator_bulk_disable(ARRAY_SIZE(aic3x->supplies), aic3x->supplies);
-       regulator_bulk_free(ARRAY_SIZE(aic3x->supplies), aic3x->supplies);
-
-       kfree(aic3x);
-       aic3x_codec = NULL;
-
+       aic3x_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_aic3x = {
+       .read = aic3x_read_reg_cache,
+       .write = aic3x_write,
+       .set_bias_level = aic3x_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(aic3x_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default = aic3x_reg,
+       .probe = aic3x_probe,
+       .remove = aic3x_remove,
+       .suspend = aic3x_suspend,
+       .resume = aic3x_resume,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 /*
  * AIC3X 2 wire address can be up to 4 devices with device addresses
@@ -1308,9 +1281,9 @@ static int aic3x_unregister(struct aic3x_priv *aic3x)
 static int aic3x_i2c_probe(struct i2c_client *i2c,
                           const struct i2c_device_id *id)
 {
-       struct snd_soc_codec *codec;
-       struct aic3x_priv *aic3x;
        struct aic3x_pdata *pdata = i2c->dev.platform_data;
+       struct aic3x_setup_data *setup = pdata->setup;
+       struct aic3x_priv *aic3x;
        int ret, i;
 
        aic3x = kzalloc(sizeof(struct aic3x_priv), GFP_KERNEL);
@@ -1319,12 +1292,8 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
                return -ENOMEM;
        }
 
-       codec = &aic3x->codec;
-       codec->dev = &i2c->dev;
-       snd_soc_codec_set_drvdata(codec, aic3x);
-       codec->control_data = i2c;
-       codec->hw_write = (hw_write_t) i2c_master_send;
-
+       aic3x->control_data = i2c;
+       aic3x->setup = setup;
        i2c_set_clientdata(i2c, aic3x);
 
        aic3x->gpio_reset = -1;
@@ -1339,17 +1308,17 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
        for (i = 0; i < ARRAY_SIZE(aic3x->supplies); i++)
                aic3x->supplies[i].supply = aic3x_supply_names[i];
 
-       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(aic3x->supplies),
+       ret = regulator_bulk_get(&i2c->dev, ARRAY_SIZE(aic3x->supplies),
                                 aic3x->supplies);
        if (ret != 0) {
-               dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
+               dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
                goto err_get;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(aic3x->supplies),
                                    aic3x->supplies);
        if (ret != 0) {
-               dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
+               dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
                goto err_enable;
        }
 
@@ -1358,7 +1327,11 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
                gpio_set_value(aic3x->gpio_reset, 1);
        }
 
-       return aic3x_register(codec);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_aic3x, &aic3x_dai, 1);
+       if (ret < 0)
+               goto err_enable;
+       return ret;
 
 err_enable:
        regulator_bulk_free(ARRAY_SIZE(aic3x->supplies), aic3x->supplies);
@@ -1374,7 +1347,16 @@ static int aic3x_i2c_remove(struct i2c_client *client)
 {
        struct aic3x_priv *aic3x = i2c_get_clientdata(client);
 
-       return aic3x_unregister(aic3x);
+       if (aic3x->gpio_reset >= 0) {
+               gpio_set_value(aic3x->gpio_reset, 0);
+               gpio_free(aic3x->gpio_reset);
+       }
+       regulator_bulk_disable(ARRAY_SIZE(aic3x->supplies), aic3x->supplies);
+       regulator_bulk_free(ARRAY_SIZE(aic3x->supplies), aic3x->supplies);
+
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
+       return 0;
 }
 
 static const struct i2c_device_id aic3x_i2c_id[] = {
@@ -1387,7 +1369,7 @@ MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id);
 /* machine i2c codec control layer */
 static struct i2c_driver aic3x_i2c_driver = {
        .driver = {
-               .name = "aic3x I2C Codec",
+               .name = "tlv320aic3x-codec",
                .owner = THIS_MODULE,
        },
        .probe  = aic3x_i2c_probe,
@@ -1409,90 +1391,27 @@ static inline void aic3x_i2c_exit(void)
 {
        i2c_del_driver(&aic3x_i2c_driver);
 }
-#else
-static inline void aic3x_i2c_init(void) { }
-static inline void aic3x_i2c_exit(void) { }
 #endif
 
-static int aic3x_probe(struct platform_device *pdev)
+static int __init aic3x_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct aic3x_setup_data *setup;
-       struct snd_soc_codec *codec;
        int ret = 0;
-
-       codec = aic3x_codec;
-       if (!codec) {
-               dev_err(&pdev->dev, "Codec not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = codec;
-       setup = socdev->codec_data;
-
-       if (setup) {
-               /* setup GPIO functions */
-               aic3x_write(codec, AIC3X_GPIO1_REG,
-                           (setup->gpio_func[0] & 0xf) << 4);
-               aic3x_write(codec, AIC3X_GPIO2_REG,
-                           (setup->gpio_func[1] & 0xf) << 4);
-       }
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "aic3x: failed to create pcms\n");
-               goto pcm_err;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&aic3x_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register TLV320AIC3x I2C driver: %d\n",
+                      ret);
        }
-
-       snd_soc_add_controls(codec, aic3x_snd_controls,
-                            ARRAY_SIZE(aic3x_snd_controls));
-
-       aic3x_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       kfree(codec->reg_cache);
+#endif
        return ret;
 }
-
-static int aic3x_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       /* power down chip */
-       if (codec->control_data)
-               aic3x_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       kfree(codec->reg_cache);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_aic3x = {
-       .probe = aic3x_probe,
-       .remove = aic3x_remove,
-       .suspend = aic3x_suspend,
-       .resume = aic3x_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_aic3x);
-
-static int __init aic3x_modinit(void)
-{
-       aic3x_i2c_init();
-
-       return 0;
-}
 module_init(aic3x_modinit);
 
 static void __exit aic3x_exit(void)
 {
-       aic3x_i2c_exit();
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       i2c_del_driver(&aic3x_i2c_driver);
+#endif
 }
 module_exit(aic3x_exit);
 
index 9af1c886213c0f1d432014ea65a259dfea4ecfd8..f6e3d9b42daf1be507e05e8a6da0737be21c03c2 100644 (file)
 /* Default input volume */
 #define DEFAULT_GAIN    0x20
 
-/* GPIO API */
-enum {
-       AIC3X_GPIO1_FUNC_DISABLED               = 0,
-       AIC3X_GPIO1_FUNC_AUDIO_WORDCLK_ADC      = 1,
-       AIC3X_GPIO1_FUNC_CLOCK_MUX              = 2,
-       AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV2         = 3,
-       AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV4         = 4,
-       AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV8         = 5,
-       AIC3X_GPIO1_FUNC_SHORT_CIRCUIT_IRQ      = 6,
-       AIC3X_GPIO1_FUNC_AGC_NOISE_IRQ          = 7,
-       AIC3X_GPIO1_FUNC_INPUT                  = 8,
-       AIC3X_GPIO1_FUNC_OUTPUT                 = 9,
-       AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK     = 10,
-       AIC3X_GPIO1_FUNC_AUDIO_WORDCLK          = 11,
-       AIC3X_GPIO1_FUNC_BUTTON_IRQ             = 12,
-       AIC3X_GPIO1_FUNC_HEADSET_DETECT_IRQ     = 13,
-       AIC3X_GPIO1_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ   = 14,
-       AIC3X_GPIO1_FUNC_ALL_IRQ                = 16
-};
-
-enum {
-       AIC3X_GPIO2_FUNC_DISABLED               = 0,
-       AIC3X_GPIO2_FUNC_HEADSET_DETECT_IRQ     = 2,
-       AIC3X_GPIO2_FUNC_INPUT                  = 3,
-       AIC3X_GPIO2_FUNC_OUTPUT                 = 4,
-       AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT      = 5,
-       AIC3X_GPIO2_FUNC_AUDIO_BITCLK           = 8,
-       AIC3X_GPIO2_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ = 9,
-       AIC3X_GPIO2_FUNC_ALL_IRQ                = 10,
-       AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_OR_AGC_IRQ = 11,
-       AIC3X_GPIO2_FUNC_HEADSET_OR_BUTTON_PRESS_OR_SHORT_CIRCUIT_IRQ = 12,
-       AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_IRQ      = 13,
-       AIC3X_GPIO2_FUNC_AGC_NOISE_IRQ          = 14,
-       AIC3X_GPIO2_FUNC_BUTTON_PRESS_IRQ       = 15
-};
-
 void aic3x_set_gpio(struct snd_soc_codec *codec, int gpio, int state);
 int aic3x_get_gpio(struct snd_soc_codec *codec, int gpio);
 
@@ -281,11 +245,4 @@ void aic3x_set_headset_detection(struct snd_soc_codec *codec, int detect,
 int aic3x_headset_detected(struct snd_soc_codec *codec);
 int aic3x_button_pressed(struct snd_soc_codec *codec);
 
-struct aic3x_setup_data {
-       unsigned int gpio_func[2];
-};
-
-extern struct snd_soc_dai aic3x_dai;
-extern struct snd_soc_codec_device soc_codec_dev_aic3x;
-
 #endif /* _AIC3X_H */
index 8651b01ed22358a636abdd7ba2c63e051ae95461..a3c5b521da6a5740a9bf27cf34da2a43668ee4f9 100644 (file)
@@ -66,8 +66,6 @@
 static void dac33_calculate_times(struct snd_pcm_substream *substream);
 static int dac33_prepare_chip(struct snd_pcm_substream *substream);
 
-static struct snd_soc_codec *tlv320dac33_codec;
-
 enum dac33_state {
        DAC33_IDLE = 0,
        DAC33_PREFILL,
@@ -93,7 +91,7 @@ struct tlv320dac33_priv {
        struct mutex mutex;
        struct workqueue_struct *dac33_wq;
        struct work_struct work;
-       struct snd_soc_codec codec;
+       struct snd_soc_codec *codec;
        struct regulator_bulk_data supplies[DAC33_NUM_SUPPLIES];
        struct snd_pcm_substream *substream;
        int power_gpio;
@@ -128,6 +126,8 @@ struct tlv320dac33_priv {
        unsigned int uthr;
 
        enum dac33_state state;
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
 static const u8 dac33_reg[DAC33_CACHEREGNUM] = {
@@ -650,9 +650,7 @@ static int dac33_set_bias_level(struct snd_soc_codec *codec,
 
 static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
 {
-       struct snd_soc_codec *codec;
-
-       codec = &dac33->codec;
+       struct snd_soc_codec *codec = dac33->codec;
 
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_MODE1:
@@ -695,9 +693,7 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
 
 static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33)
 {
-       struct snd_soc_codec *codec;
-
-       codec = &dac33->codec;
+       struct snd_soc_codec *codec = dac33->codec;
 
        switch (dac33->fifo_mode) {
        case DAC33_FIFO_MODE1:
@@ -726,7 +722,7 @@ static void dac33_work(struct work_struct *work)
        u8 reg;
 
        dac33 = container_of(work, struct tlv320dac33_priv, work);
-       codec = &dac33->codec;
+       codec = dac33->codec;
 
        mutex_lock(&dac33->mutex);
        switch (dac33->state) {
@@ -787,8 +783,7 @@ static int dac33_startup(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
 
        /* Stream started, save the substream pointer */
@@ -801,8 +796,7 @@ static void dac33_shutdown(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
 
        dac33->substream = NULL;
@@ -817,8 +811,7 @@ static int dac33_hw_params(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* Check parameters for validity */
        switch (params_rate(params)) {
@@ -856,8 +849,7 @@ static int dac33_hw_params(struct snd_pcm_substream *substream,
 static int dac33_prepare_chip(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
        unsigned int oscset, ratioset, pwr_ctrl, reg_tmp;
        u8 aictrl_a, aictrl_b, fifoctrl_a;
@@ -1049,8 +1041,7 @@ static int dac33_prepare_chip(struct snd_pcm_substream *substream)
 static void dac33_calculate_times(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
        unsigned int period_size = substream->runtime->period_size;
        unsigned int rate = substream->runtime->rate;
@@ -1129,8 +1120,7 @@ static int dac33_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
                             struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
        int ret = 0;
 
@@ -1163,8 +1153,7 @@ static snd_pcm_sframes_t dac33_dai_delay(
                        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
        unsigned long long t0, t1, t_now;
        unsigned int time_delta, uthr;
@@ -1389,24 +1378,47 @@ static int dac33_set_dai_fmt(struct snd_soc_dai *codec_dai,
        return 0;
 }
 
-static int dac33_soc_probe(struct platform_device *pdev)
+static int dac33_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct tlv320dac33_priv *dac33;
+       struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
        int ret = 0;
 
-       BUG_ON(!tlv320dac33_codec);
+       codec->control_data = dac33->control_data;
+       codec->hw_write = (hw_write_t) i2c_master_send;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       codec->idle_bias_off = 1;
+       dac33->codec = codec;
 
-       codec = tlv320dac33_codec;
-       socdev->card->codec = codec;
-       dac33 = snd_soc_codec_get_drvdata(codec);
+       /* Read the tlv320dac33 ID registers */
+       ret = dac33_hard_power(codec, 1);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to power up codec: %d\n", ret);
+               goto err_power;
+       }
+       dac33_read_id(codec);
+       dac33_hard_power(codec, 0);
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms\n");
-               goto pcm_err;
+       /* Check if the IRQ number is valid and request it */
+       if (dac33->irq >= 0) {
+               ret = request_irq(dac33->irq, dac33_interrupt_handler,
+                                 IRQF_TRIGGER_RISING | IRQF_DISABLED,
+                                 codec->name, codec);
+               if (ret < 0) {
+                       dev_err(codec->dev, "Could not request IRQ%d (%d)\n",
+                                               dac33->irq, ret);
+                       dac33->irq = -1;
+               }
+               if (dac33->irq != -1) {
+                       /* Setup work queue */
+                       dac33->dac33_wq =
+                               create_singlethread_workqueue("tlv320dac33");
+                       if (dac33->dac33_wq == NULL) {
+                               free_irq(dac33->irq, codec);
+                               return -ENOMEM;
+                       }
+
+                       INIT_WORK(&dac33->work, dac33_work);
+               }
        }
 
        snd_soc_add_controls(codec, dac33_snd_controls,
@@ -1420,56 +1432,51 @@ static int dac33_soc_probe(struct platform_device *pdev)
                        snd_soc_add_controls(codec, dac33_fifo_snd_controls,
                                        ARRAY_SIZE(dac33_fifo_snd_controls));
        }
-
        dac33_add_widgets(codec);
 
-       return 0;
-
-pcm_err:
-       dac33_hard_power(codec, 0);
+err_power:
        return ret;
 }
 
-static int dac33_soc_remove(struct platform_device *pdev)
+static int dac33_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
 
        dac33_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
+       if (dac33->irq >= 0) {
+               free_irq(dac33->irq, dac33->codec);
+               destroy_workqueue(dac33->dac33_wq);
+       }
        return 0;
 }
 
-static int dac33_soc_suspend(struct platform_device *pdev, pm_message_t state)
+static int dac33_soc_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        dac33_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int dac33_soc_resume(struct platform_device *pdev)
+static int dac33_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        dac33_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_tlv320dac33 = {
+static struct snd_soc_codec_driver soc_codec_dev_tlv320dac33 = {
+       .read = dac33_read_reg_cache,
+       .write = dac33_write_locked,
+       .set_bias_level = dac33_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(dac33_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default = dac33_reg,
        .probe = dac33_soc_probe,
        .remove = dac33_soc_remove,
        .suspend = dac33_soc_suspend,
        .resume = dac33_soc_resume,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_tlv320dac33);
 
 #define DAC33_RATES    (SNDRV_PCM_RATE_44100 | \
                         SNDRV_PCM_RATE_48000)
@@ -1485,8 +1492,8 @@ static struct snd_soc_dai_ops dac33_dai_ops = {
        .set_fmt        = dac33_set_dai_fmt,
 };
 
-struct snd_soc_dai dac33_dai = {
-       .name = "tlv320dac33",
+static struct snd_soc_dai_driver dac33_dai = {
+       .name = "tlv320dac33-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -1495,14 +1502,12 @@ struct snd_soc_dai dac33_dai = {
                .formats = DAC33_FORMATS,},
        .ops = &dac33_dai_ops,
 };
-EXPORT_SYMBOL_GPL(dac33_dai);
 
 static int __devinit dac33_i2c_probe(struct i2c_client *client,
                                     const struct i2c_device_id *id)
 {
        struct tlv320dac33_platform_data *pdata;
        struct tlv320dac33_priv *dac33;
-       struct snd_soc_codec *codec;
        int ret, i;
 
        if (client->dev.platform_data == NULL) {
@@ -1515,33 +1520,9 @@ static int __devinit dac33_i2c_probe(struct i2c_client *client,
        if (dac33 == NULL)
                return -ENOMEM;
 
-       codec = &dac33->codec;
-       snd_soc_codec_set_drvdata(codec, dac33);
-       codec->control_data = client;
-
-       mutex_init(&codec->mutex);
+       dac33->control_data = client;
        mutex_init(&dac33->mutex);
        spin_lock_init(&dac33->lock);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "tlv320dac33";
-       codec->owner = THIS_MODULE;
-       codec->read = dac33_read_reg_cache;
-       codec->write = dac33_write_locked;
-       codec->hw_write = (hw_write_t) i2c_master_send;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = dac33_set_bias_level;
-       codec->idle_bias_off = 1;
-       codec->dai = &dac33_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(dac33_reg);
-       codec->reg_cache = kmemdup(dac33_reg, ARRAY_SIZE(dac33_reg),
-                                  GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto error_reg;
-       }
 
        i2c_set_clientdata(client, dac33);
 
@@ -1561,125 +1542,59 @@ static int __devinit dac33_i2c_probe(struct i2c_client *client,
        /* Disable FIFO use by default */
        dac33->fifo_mode = DAC33_FIFO_BYPASS;
 
-       tlv320dac33_codec = codec;
-
-       codec->dev = &client->dev;
-       dac33_dai.dev = codec->dev;
-
        /* Check if the reset GPIO number is valid and request it */
        if (dac33->power_gpio >= 0) {
                ret = gpio_request(dac33->power_gpio, "tlv320dac33 reset");
                if (ret < 0) {
-                       dev_err(codec->dev,
+                       dev_err(&client->dev,
                                "Failed to request reset GPIO (%d)\n",
                                dac33->power_gpio);
-                       snd_soc_unregister_dai(&dac33_dai);
-                       snd_soc_unregister_codec(codec);
-                       goto error_gpio;
+                       goto err_gpio;
                }
                gpio_direction_output(dac33->power_gpio, 0);
        }
 
-       /* Check if the IRQ number is valid and request it */
-       if (dac33->irq >= 0) {
-               ret = request_irq(dac33->irq, dac33_interrupt_handler,
-                                 IRQF_TRIGGER_RISING | IRQF_DISABLED,
-                                 codec->name, codec);
-               if (ret < 0) {
-                       dev_err(codec->dev, "Could not request IRQ%d (%d)\n",
-                                               dac33->irq, ret);
-                       dac33->irq = -1;
-               }
-               if (dac33->irq != -1) {
-                       /* Setup work queue */
-                       dac33->dac33_wq =
-                               create_singlethread_workqueue("tlv320dac33");
-                       if (dac33->dac33_wq == NULL) {
-                               free_irq(dac33->irq, &dac33->codec);
-                               ret = -ENOMEM;
-                               goto error_wq;
-                       }
-
-                       INIT_WORK(&dac33->work, dac33_work);
-               }
-       }
-
        for (i = 0; i < ARRAY_SIZE(dac33->supplies); i++)
                dac33->supplies[i].supply = dac33_supply_names[i];
 
-       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(dac33->supplies),
+       ret = regulator_bulk_get(&client->dev, ARRAY_SIZE(dac33->supplies),
                                 dac33->supplies);
 
        if (ret != 0) {
-               dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
+               dev_err(&client->dev, "Failed to request supplies: %d\n", ret);
                goto err_get;
        }
 
-       /* Read the tlv320dac33 ID registers */
-       ret = dac33_hard_power(codec, 1);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to power up codec: %d\n", ret);
-               goto error_codec;
-       }
-       dac33_read_id(codec);
-       dac33_hard_power(codec, 0);
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto error_codec;
-       }
-
-       ret = snd_soc_register_dai(&dac33_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               goto error_codec;
-       }
+       ret = snd_soc_register_codec(&client->dev,
+                       &soc_codec_dev_tlv320dac33, &dac33_dai, 1);
+       if (ret < 0)
+               goto err_register;
 
        return ret;
-
-error_codec:
+err_register:
        regulator_bulk_free(ARRAY_SIZE(dac33->supplies), dac33->supplies);
 err_get:
-       if (dac33->irq >= 0) {
-               free_irq(dac33->irq, &dac33->codec);
-               destroy_workqueue(dac33->dac33_wq);
-       }
-error_wq:
        if (dac33->power_gpio >= 0)
                gpio_free(dac33->power_gpio);
-error_gpio:
-       kfree(codec->reg_cache);
-error_reg:
-       tlv320dac33_codec = NULL;
+err_gpio:
        kfree(dac33);
-
        return ret;
 }
 
 static int __devexit dac33_i2c_remove(struct i2c_client *client)
 {
-       struct tlv320dac33_priv *dac33;
-
-       dac33 = i2c_get_clientdata(client);
+       struct tlv320dac33_priv *dac33 = i2c_get_clientdata(client);
 
        if (unlikely(dac33->chip_power))
-               dac33_hard_power(&dac33->codec, 0);
+               dac33_hard_power(dac33->codec, 0);
 
        if (dac33->power_gpio >= 0)
                gpio_free(dac33->power_gpio);
-       if (dac33->irq >= 0)
-               free_irq(dac33->irq, &dac33->codec);
 
        regulator_bulk_free(ARRAY_SIZE(dac33->supplies), dac33->supplies);
 
-       destroy_workqueue(dac33->dac33_wq);
-       snd_soc_unregister_dai(&dac33_dai);
-       snd_soc_unregister_codec(&dac33->codec);
-       kfree(dac33->codec.reg_cache);
+       snd_soc_unregister_codec(&client->dev);
        kfree(dac33);
-       tlv320dac33_codec = NULL;
 
        return 0;
 }
@@ -1694,7 +1609,7 @@ static const struct i2c_device_id tlv320dac33_i2c_id[] = {
 
 static struct i2c_driver tlv320dac33_i2c_driver = {
        .driver = {
-               .name = "tlv320dac33",
+               .name = "tlv320dac33-codec",
                .owner = THIS_MODULE,
        },
        .probe          = dac33_i2c_probe,
index eb8ae07f0bd2e166003aeda14789e47799e82b2b..7c318b5da4370bfb1c8cee6af5e436161068203e 100644 (file)
 #define TLV320DAC33_MCLK               0
 #define TLV320DAC33_SLEEPCLK           1
 
-extern struct snd_soc_dai dac33_dai;
-extern struct snd_soc_codec_device soc_codec_dev_tlv320dac33;
-
 #endif /* __TLV320DAC33_H */
index 7b618bbff8844d65f55092780b199d4b213e433b..c7ee1a4c9d99f0643318333bf48831a139ef87fc 100644 (file)
 #include <sound/initval.h>
 #include <sound/tlv.h>
 
-#include "twl4030.h"
+/* Register descriptions are here */
+#include <linux/mfd/twl4030-codec.h>
+
+/* Shadow register used by the audio driver */
+#define TWL4030_REG_SW_SHADOW          0x4A
+#define TWL4030_CACHEREGNUM    (TWL4030_REG_SW_SHADOW + 1)
+
+/* TWL4030_REG_SW_SHADOW (0x4A) Fields */
+#define TWL4030_HFL_EN                 0x01
+#define TWL4030_HFR_EN                 0x02
 
 /*
  * twl4030 register cache & default register settings
@@ -277,21 +286,19 @@ static inline void twl4030_reset_registers(struct snd_soc_codec *codec)
 
 }
 
-static void twl4030_init_chip(struct platform_device *pdev)
+static void twl4030_init_chip(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct twl4030_setup_data *setup = socdev->codec_data;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct twl4030_codec_audio_data *pdata = dev_get_platdata(codec->dev);
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
        u8 reg, byte;
        int i = 0;
 
        /* Check defaults, if instructed before anything else */
-       if (setup && setup->check_defaults)
+       if (pdata && pdata->check_defaults)
                twl4030_check_defaults(codec);
 
        /* Reset registers, if no setup data or if instructed to do so */
-       if (!setup || (setup && setup->reset_registers))
+       if (!pdata || (pdata && pdata->reset_registers))
                twl4030_reset_registers(codec);
 
        /* Refresh APLL_CTL register from HW */
@@ -312,20 +319,14 @@ static void twl4030_init_chip(struct platform_device *pdev)
        twl4030_write(codec, TWL4030_REG_ARXR2_APGA_CTL, 0x32);
 
        /* Machine dependent setup */
-       if (!setup)
+       if (!pdata)
                return;
 
-       twl4030->digimic_delay = setup->digimic_delay;
-
-       /* Configuration for headset ramp delay from setup data */
-       if (setup->sysclk != twl4030->sysclk)
-               dev_warn(codec->dev,
-                               "Mismatch in APLL mclk: %u (configured: %u)\n",
-                               setup->sysclk, twl4030->sysclk);
+       twl4030->digimic_delay = pdata->digimic_delay;
 
        reg = twl4030_read_reg_cache(codec, TWL4030_REG_HS_POPN_SET);
        reg &= ~TWL4030_RAMP_DELAY;
-       reg |= (setup->ramp_delay_value << 2);
+       reg |= (pdata->ramp_delay_value << 2);
        twl4030_write_reg_cache(codec, TWL4030_REG_HS_POPN_SET, reg);
 
        /* initiate offset cancellation */
@@ -333,7 +334,7 @@ static void twl4030_init_chip(struct platform_device *pdev)
 
        reg = twl4030_read_reg_cache(codec, TWL4030_REG_ANAMICL);
        reg &= ~TWL4030_OFFSET_CNCL_SEL;
-       reg |= setup->offset_cncl_path;
+       reg |= pdata->offset_cncl_path;
        twl4030_write(codec, TWL4030_REG_ANAMICL,
                reg | TWL4030_CNCL_OFFSET_START);
 
@@ -718,9 +719,7 @@ static int aif_event(struct snd_soc_dapm_widget *w,
 
 static void headset_ramp(struct snd_soc_codec *codec, int ramp)
 {
-       struct snd_soc_device *socdev = codec->socdev;
-       struct twl4030_setup_data *setup = socdev->codec_data;
-
+       struct twl4030_codec_audio_data *pdata = codec->dev->platform_data;
        unsigned char hs_gain, hs_pop;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
        /* Base values for ramp delay calculation: 2^19 - 2^26 */
@@ -732,9 +731,9 @@ static void headset_ramp(struct snd_soc_codec *codec, int ramp)
 
        /* Enable external mute control, this dramatically reduces
         * the pop-noise */
-       if (setup && setup->hs_extmute) {
-               if (setup->set_hs_extmute) {
-                       setup->set_hs_extmute(1);
+       if (pdata && pdata->hs_extmute) {
+               if (pdata->set_hs_extmute) {
+                       pdata->set_hs_extmute(1);
                } else {
                        hs_pop |= TWL4030_EXTMUTE;
                        twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
@@ -772,9 +771,9 @@ static void headset_ramp(struct snd_soc_codec *codec, int ramp)
        }
 
        /* Disable external mute */
-       if (setup && setup->hs_extmute) {
-               if (setup->set_hs_extmute) {
-                       setup->set_hs_extmute(0);
+       if (pdata && pdata->hs_extmute) {
+               if (pdata->set_hs_extmute) {
+                       pdata->set_hs_extmute(0);
                } else {
                        hs_pop &= ~TWL4030_EXTMUTE;
                        twl4030_write(codec, TWL4030_REG_HS_POPN_SET, hs_pop);
@@ -1707,8 +1706,7 @@ static int twl4030_startup(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
 
        if (twl4030->master_substream) {
@@ -1738,8 +1736,7 @@ static void twl4030_shutdown(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
 
        if (twl4030->master_substream == substream)
@@ -1764,8 +1761,7 @@ static int twl4030_hw_params(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
        u8 mode, old_mode, format, old_format;
 
@@ -1999,8 +1995,7 @@ static int twl4030_voice_startup(struct snd_pcm_substream *substream,
                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
        u8 mode;
 
@@ -2033,8 +2028,7 @@ static void twl4030_voice_shutdown(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* Enable voice digital filters */
        twl4030_voice_enable(codec, substream->stream, 0);
@@ -2044,8 +2038,7 @@ static int twl4030_voice_hw_params(struct snd_pcm_substream *substream,
                struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
        u8 old_mode, mode;
 
@@ -2175,7 +2168,7 @@ static int twl4030_voice_set_tristate(struct snd_soc_dai *dai, int tristate)
 #define TWL4030_RATES   (SNDRV_PCM_RATE_8000_48000)
 #define TWL4030_FORMATS         (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FORMAT_S24_LE)
 
-static struct snd_soc_dai_ops twl4030_dai_ops = {
+static struct snd_soc_dai_ops twl4030_dai_hifi_ops = {
        .startup        = twl4030_startup,
        .shutdown       = twl4030_shutdown,
        .hw_params      = twl4030_hw_params,
@@ -2193,9 +2186,9 @@ static struct snd_soc_dai_ops twl4030_dai_voice_ops = {
        .set_tristate   = twl4030_voice_set_tristate,
 };
 
-struct snd_soc_dai twl4030_dai[] = {
+static struct snd_soc_dai_driver twl4030_dai[] = {
 {
-       .name = "twl4030",
+       .name = "twl4030-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 2,
@@ -2208,10 +2201,10 @@ struct snd_soc_dai twl4030_dai[] = {
                .channels_max = 4,
                .rates = TWL4030_RATES,
                .formats = TWL4030_FORMATS,},
-       .ops = &twl4030_dai_ops,
+       .ops = &twl4030_dai_hifi_ops,
 },
 {
-       .name = "twl4030 Voice",
+       .name = "twl4030-voice",
        .playback = {
                .stream_name = "Voice Playback",
                .channels_min = 1,
@@ -2227,164 +2220,92 @@ struct snd_soc_dai twl4030_dai[] = {
        .ops = &twl4030_dai_voice_ops,
 },
 };
-EXPORT_SYMBOL_GPL(twl4030_dai);
 
-static int twl4030_soc_suspend(struct platform_device *pdev, pm_message_t state)
+static int twl4030_soc_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        twl4030_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
        return 0;
 }
 
-static int twl4030_soc_resume(struct platform_device *pdev)
+static int twl4030_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        twl4030_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
        return 0;
 }
 
-static struct snd_soc_codec *twl4030_codec;
-
-static int twl4030_soc_probe(struct platform_device *pdev)
+static int twl4030_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       BUG_ON(!twl4030_codec);
-
-       codec = twl4030_codec;
-       socdev->card->codec = codec;
-
-       twl4030_init_chip(pdev);
+       struct twl4030_priv *twl4030;
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create pcms\n");
-               return ret;
+       twl4030 = kzalloc(sizeof(struct twl4030_priv), GFP_KERNEL);
+       if (twl4030 == NULL) {
+               printk("Can not allocate memroy\n");
+               return -ENOMEM;
        }
+       snd_soc_codec_set_drvdata(codec, twl4030);
+       /* Set the defaults, and power up the codec */
+       twl4030->sysclk = twl4030_codec_get_mclk() / 1000;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       codec->idle_bias_off = 1;
+
+       twl4030_init_chip(codec);
 
        snd_soc_add_controls(codec, twl4030_snd_controls,
                                ARRAY_SIZE(twl4030_snd_controls));
        twl4030_add_widgets(codec);
-
        return 0;
 }
 
-static int twl4030_soc_remove(struct platform_device *pdev)
+static int twl4030_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        /* Reset registers to their chip default before leaving */
        twl4030_reset_registers(codec);
        twl4030_set_bias_level(codec, SND_SOC_BIAS_OFF);
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
        return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_twl4030 = {
+       .probe = twl4030_soc_probe,
+       .remove = twl4030_soc_remove,
+       .suspend = twl4030_soc_suspend,
+       .resume = twl4030_soc_resume,
+       .read = twl4030_read_reg_cache,
+       .write = twl4030_write,
+       .set_bias_level = twl4030_set_bias_level,
+       .reg_cache_size = sizeof(twl4030_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default = twl4030_reg,
+};
+
 static int __devinit twl4030_codec_probe(struct platform_device *pdev)
 {
        struct twl4030_codec_audio_data *pdata = pdev->dev.platform_data;
-       struct snd_soc_codec *codec;
-       struct twl4030_priv *twl4030;
-       int ret;
 
        if (!pdata) {
                dev_err(&pdev->dev, "platform_data is missing\n");
                return -EINVAL;
        }
 
-       twl4030 = kzalloc(sizeof(struct twl4030_priv), GFP_KERNEL);
-       if (twl4030 == NULL) {
-               dev_err(&pdev->dev, "Can not allocate memroy\n");
-               return -ENOMEM;
-       }
-
-       codec = &twl4030->codec;
-       snd_soc_codec_set_drvdata(codec, twl4030);
-       codec->dev = &pdev->dev;
-       twl4030_dai[0].dev = &pdev->dev;
-       twl4030_dai[1].dev = &pdev->dev;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "twl4030";
-       codec->owner = THIS_MODULE;
-       codec->read = twl4030_read_reg_cache;
-       codec->write = twl4030_write;
-       codec->set_bias_level = twl4030_set_bias_level;
-       codec->idle_bias_off = 1;
-       codec->dai = twl4030_dai;
-       codec->num_dai = ARRAY_SIZE(twl4030_dai);
-       codec->reg_cache_size = sizeof(twl4030_reg);
-       codec->reg_cache = kmemdup(twl4030_reg, sizeof(twl4030_reg),
-                                       GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto error_cache;
-       }
-
-       platform_set_drvdata(pdev, twl4030);
-       twl4030_codec = codec;
-
-       /* Set the defaults, and power up the codec */
-       twl4030->sysclk = twl4030_codec_get_mclk() / 1000;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto error_codec;
-       }
-
-       ret = snd_soc_register_dais(&twl4030_dai[0], ARRAY_SIZE(twl4030_dai));
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               goto error_codec;
-       }
-
-       return 0;
-
-error_codec:
-       twl4030_codec_enable(codec, 0);
-       kfree(codec->reg_cache);
-error_cache:
-       kfree(twl4030);
-       return ret;
+       return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_twl4030,
+                       twl4030_dai, ARRAY_SIZE(twl4030_dai));
 }
 
 static int __devexit twl4030_codec_remove(struct platform_device *pdev)
 {
-       struct twl4030_priv *twl4030 = platform_get_drvdata(pdev);
+       struct twl4030_priv *twl4030 = dev_get_drvdata(&pdev->dev);
 
-       snd_soc_unregister_dais(&twl4030_dai[0], ARRAY_SIZE(twl4030_dai));
-       snd_soc_unregister_codec(&twl4030->codec);
-       kfree(twl4030->codec.reg_cache);
+       snd_soc_unregister_codec(&pdev->dev);
        kfree(twl4030);
-
-       twl4030_codec = NULL;
        return 0;
 }
 
-MODULE_ALIAS("platform:twl4030_codec_audio");
+MODULE_ALIAS("platform:twl4030-codec");
 
 static struct platform_driver twl4030_codec_driver = {
        .probe          = twl4030_codec_probe,
        .remove         = __devexit_p(twl4030_codec_remove),
        .driver         = {
-               .name   = "twl4030_codec_audio",
+               .name   = "twl4030-codec",
                .owner  = THIS_MODULE,
        },
 };
@@ -2401,14 +2322,6 @@ static void __exit twl4030_exit(void)
 }
 module_exit(twl4030_exit);
 
-struct snd_soc_codec_device soc_codec_dev_twl4030 = {
-       .probe = twl4030_soc_probe,
-       .remove = twl4030_soc_remove,
-       .suspend = twl4030_soc_suspend,
-       .resume = twl4030_soc_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_twl4030);
-
 MODULE_DESCRIPTION("ASoC TWL4030 codec driver");
 MODULE_AUTHOR("Steve Sakoman");
 MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/twl4030.h b/sound/soc/codecs/twl4030.h
deleted file mode 100644 (file)
index 6c57430..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * ALSA SoC TWL4030 codec driver
- *
- * Author: Steve Sakoman <steve@sakoman.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __TWL4030_AUDIO_H__
-#define __TWL4030_AUDIO_H__
-
-/* Register descriptions are here */
-#include <linux/mfd/twl4030-codec.h>
-
-/* Shadow register used by the audio driver */
-#define TWL4030_REG_SW_SHADOW          0x4A
-#define TWL4030_CACHEREGNUM    (TWL4030_REG_SW_SHADOW + 1)
-
-/* TWL4030_REG_SW_SHADOW (0x4A) Fields */
-#define TWL4030_HFL_EN                 0x01
-#define TWL4030_HFR_EN                 0x02
-
-#define TWL4030_DAI_HIFI               0
-#define TWL4030_DAI_VOICE              1
-
-extern struct snd_soc_dai twl4030_dai[2];
-extern struct snd_soc_codec_device soc_codec_dev_twl4030;
-
-struct twl4030_setup_data {
-       unsigned int ramp_delay_value;
-       unsigned int digimic_delay; /* in ms */
-       unsigned int sysclk;
-       unsigned int offset_cncl_path;
-       unsigned int check_defaults:1;
-       unsigned int reset_registers:1;
-       unsigned int hs_extmute:1;
-       void (*set_hs_extmute)(int mute);
-};
-
-#endif /* End of __TWL4030_AUDIO_H__ */
-
-
index 64a807f1a8a1812e4b01d891b8809f69ce1bf1f9..10f6e521451161dbdd169b59d69101a3010f41c3 100644 (file)
@@ -45,7 +45,6 @@
 
 /* codec private data */
 struct twl6040_data {
-       struct snd_soc_codec codec;
        int audpwron;
        int naudint;
        int codec_powered;
@@ -770,8 +769,7 @@ static int twl6040_startup(struct snd_pcm_substream *substream,
                        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
 
        if (!priv->sysclk) {
@@ -803,8 +801,7 @@ static int twl6040_hw_params(struct snd_pcm_substream *substream,
                        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
        u8 lppllctl;
        int rate;
@@ -839,8 +836,7 @@ static int twl6040_trigger(struct snd_pcm_substream *substream,
                        int cmd, struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
 
        switch (cmd) {
@@ -978,8 +974,8 @@ static struct snd_soc_dai_ops twl6040_dai_ops = {
        .set_sysclk     = twl6040_set_dai_sysclk,
 };
 
-struct snd_soc_dai twl6040_dai = {
-       .name = "twl6040",
+static struct snd_soc_dai_driver twl6040_dai = {
+       .name = "twl6040-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -996,24 +992,17 @@ struct snd_soc_dai twl6040_dai = {
        },
        .ops = &twl6040_dai_ops,
 };
-EXPORT_SYMBOL_GPL(twl6040_dai);
 
 #ifdef CONFIG_PM
-static int twl6040_suspend(struct platform_device *pdev, pm_message_t state)
+static int twl6040_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        twl6040_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int twl6040_resume(struct platform_device *pdev)
+static int twl6040_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        twl6040_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
@@ -1023,68 +1012,9 @@ static int twl6040_resume(struct platform_device *pdev)
 #define twl6040_resume NULL
 #endif
 
-static struct snd_soc_codec *twl6040_codec;
-
-static int twl6040_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       BUG_ON(!twl6040_codec);
-
-       codec = twl6040_codec;
-       socdev->card->codec = codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create pcms\n");
-               return ret;
-       }
-
-       snd_soc_add_controls(codec, twl6040_snd_controls,
-                               ARRAY_SIZE(twl6040_snd_controls));
-       twl6040_add_widgets(codec);
-
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to register card\n");
-               goto card_err;
-       }
-
-       return ret;
-
-card_err:
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-       return ret;
-}
-
-static int twl6040_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       twl6040_set_bias_level(codec, SND_SOC_BIAS_OFF);
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_twl6040 = {
-       .probe = twl6040_probe,
-       .remove = twl6040_remove,
-       .suspend = twl6040_suspend,
-       .resume = twl6040_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_twl6040);
-
-static int __devinit twl6040_codec_probe(struct platform_device *pdev)
+static int twl6040_probe(struct snd_soc_codec *codec)
 {
-       struct twl4030_codec_data *twl_codec = pdev->dev.platform_data;
-       struct snd_soc_codec *codec;
+       struct twl4030_codec_data *twl_codec = codec->dev->platform_data;
        struct twl6040_data *priv;
        int audpwron, naudint;
        int ret = 0;
@@ -1092,6 +1022,7 @@ static int __devinit twl6040_codec_probe(struct platform_device *pdev)
        priv = kzalloc(sizeof(struct twl6040_data), GFP_KERNEL);
        if (priv == NULL)
                return -ENOMEM;
+       snd_soc_codec_set_drvdata(codec, priv);
 
        if (twl_codec) {
                audpwron = twl_codec->audpwron_gpio;
@@ -1104,29 +1035,6 @@ static int __devinit twl6040_codec_probe(struct platform_device *pdev)
        priv->audpwron = audpwron;
        priv->naudint = naudint;
 
-       codec = &priv->codec;
-       codec->dev = &pdev->dev;
-       twl6040_dai.dev = &pdev->dev;
-
-       codec->name = "twl6040";
-       codec->owner = THIS_MODULE;
-       codec->read = twl6040_read_reg_cache;
-       codec->write = twl6040_write;
-       codec->set_bias_level = twl6040_set_bias_level;
-       snd_soc_codec_set_drvdata(codec, priv);
-       codec->dai = &twl6040_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(twl6040_reg);
-       codec->reg_cache = kmemdup(twl6040_reg, sizeof(twl6040_reg),
-                                       GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto cache_err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
        init_completion(&priv->ready);
 
        if (gpio_is_valid(audpwron)) {
@@ -1169,23 +1077,12 @@ static int __devinit twl6040_codec_probe(struct platform_device *pdev)
        if (ret)
                goto irq_err;
 
-       ret = snd_soc_register_codec(codec);
-       if (ret)
-               goto reg_err;
-
-       twl6040_codec = codec;
-
-       ret = snd_soc_register_dai(&twl6040_dai);
-       if (ret)
-               goto dai_err;
+       snd_soc_add_controls(codec, twl6040_snd_controls,
+                               ARRAY_SIZE(twl6040_snd_controls));
+       twl6040_add_widgets(codec);
 
        return 0;
 
-dai_err:
-       snd_soc_unregister_codec(codec);
-       twl6040_codec = NULL;
-reg_err:
-       twl6040_set_bias_level(codec, SND_SOC_BIAS_OFF);
 irq_err:
        if (naudint)
                free_irq(naudint, codec);
@@ -1193,36 +1090,57 @@ gpio2_err:
        if (gpio_is_valid(audpwron))
                gpio_free(audpwron);
 gpio1_err:
-       kfree(codec->reg_cache);
-cache_err:
        kfree(priv);
        return ret;
 }
 
-static int __devexit twl6040_codec_remove(struct platform_device *pdev)
+static int twl6040_remove(struct snd_soc_codec *codec)
 {
-       struct twl6040_data *priv = snd_soc_codec_get_drvdata(twl6040_codec);
+       struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
        int audpwron = priv->audpwron;
        int naudint = priv->naudint;
 
+       twl6040_set_bias_level(codec, SND_SOC_BIAS_OFF);
+
        if (gpio_is_valid(audpwron))
                gpio_free(audpwron);
 
        if (naudint)
-               free_irq(naudint, twl6040_codec);
+               free_irq(naudint, codec);
 
-       snd_soc_unregister_dai(&twl6040_dai);
-       snd_soc_unregister_codec(twl6040_codec);
+       kfree(priv);
 
-       kfree(twl6040_codec);
-       twl6040_codec = NULL;
+       return 0;
+}
 
+static struct snd_soc_codec_driver soc_codec_dev_twl6040 = {
+       .probe = twl6040_probe,
+       .remove = twl6040_remove,
+       .suspend = twl6040_suspend,
+       .resume = twl6040_resume,
+       .read = twl6040_read_reg_cache,
+       .write = twl6040_write,
+       .set_bias_level = twl6040_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(twl6040_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_default = twl6040_reg,
+};
+
+static int __devinit twl6040_codec_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_twl6040, &twl6040_dai, 1);
+}
+
+static int __devexit twl6040_codec_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
 static struct platform_driver twl6040_codec_driver = {
        .driver = {
-               .name = "twl6040_codec",
+               .name = "twl6040-codec",
                .owner = THIS_MODULE,
        },
        .probe = twl6040_codec_probe,
index c472070a1da2c93544cc67e9fe827eb5d146eccd..f7c77fa58a3c4b5de3e836dfd7cdc98b4c15b52f 100644 (file)
 #define TWL6040_HPPLL_ID               1
 #define TWL6040_LPPLL_ID               2
 
-extern struct snd_soc_dai twl6040_dai;
-extern struct snd_soc_codec_device soc_codec_dev_twl6040;
-
 #endif /* End of __TWL6040_H__ */
index f3b4c1d6a82d1927975d80c303a62d38448bb238..7540a509a6f58acec8c29aad5c76b65a86a5f83a 100644 (file)
@@ -161,8 +161,7 @@ static int uda134x_startup(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec =rtd->codec;
        struct uda134x_priv *uda134x = snd_soc_codec_get_drvdata(codec);
        struct snd_pcm_runtime *master_runtime;
 
@@ -194,8 +193,7 @@ static void uda134x_shutdown(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct uda134x_priv *uda134x = snd_soc_codec_get_drvdata(codec);
 
        if (uda134x->master_substream == substream)
@@ -209,8 +207,7 @@ static int uda134x_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct uda134x_priv *uda134x = snd_soc_codec_get_drvdata(codec);
        u8 hw_params;
 
@@ -364,7 +361,7 @@ static int uda134x_set_bias_level(struct snd_soc_codec *codec,
                        pd->power(1);
                        /* Sync reg_cache with the hardware */
                        for (i = 0; i < ARRAY_SIZE(uda134x_reg); i++)
-                               codec->write(codec, i, *cache++);
+                               codec->driver->write(codec, i, *cache++);
                }
                break;
        case SND_SOC_BIAS_STANDBY:
@@ -465,8 +462,8 @@ static struct snd_soc_dai_ops uda134x_dai_ops = {
        .set_fmt        = uda134x_set_dai_fmt,
 };
 
-struct snd_soc_dai uda134x_dai = {
-       .name = "UDA134X",
+static struct snd_soc_dai_driver uda134x_dai = {
+       .name = "uda134x-hifi",
        /* playback capabilities */
        .playback = {
                .stream_name = "Playback",
@@ -486,27 +483,21 @@ struct snd_soc_dai uda134x_dai = {
        /* pcm operations */
        .ops = &uda134x_dai_ops,
 };
-EXPORT_SYMBOL(uda134x_dai);
 
-
-static int uda134x_soc_probe(struct platform_device *pdev)
+static int uda134x_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
        struct uda134x_priv *uda134x;
-       void *codec_setup_data = socdev->codec_data;
-       int ret = -ENOMEM;
-       struct uda134x_platform_data *pd;
+       struct uda134x_platform_data *pd = dev_get_drvdata(codec->card->dev);
+       int ret;
 
        printk(KERN_INFO "UDA134X SoC Audio Codec\n");
 
-       if (!codec_setup_data) {
+       if (!pd) {
                printk(KERN_ERR "UDA134X SoC codec: "
                       "missing L3 bitbang function\n");
                return -ENODEV;
        }
 
-       pd = codec_setup_data;
        switch (pd->model) {
        case UDA134X_UDA1340:
        case UDA134X_UDA1341:
@@ -520,58 +511,22 @@ static int uda134x_soc_probe(struct platform_device *pdev)
                return -EINVAL;
        }
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (socdev->card->codec == NULL)
-               return ret;
-
-       codec = socdev->card->codec;
-
        uda134x = kzalloc(sizeof(struct uda134x_priv), GFP_KERNEL);
        if (uda134x == NULL)
-               goto priv_err;
+               return -ENOMEM;
        snd_soc_codec_set_drvdata(codec, uda134x);
 
-       codec->reg_cache = kmemdup(uda134x_reg, sizeof(uda134x_reg),
-                                  GFP_KERNEL);
-       if (codec->reg_cache == NULL)
-               goto reg_err;
-
-       mutex_init(&codec->mutex);
-
-       codec->reg_cache_size = sizeof(uda134x_reg);
-       codec->reg_cache_step = 1;
-
-       codec->name = "UDA134X";
-       codec->owner = THIS_MODULE;
-       codec->dai = &uda134x_dai;
-       codec->num_dai = 1;
-       codec->read = uda134x_read_reg_cache;
-       codec->write = uda134x_write;
-
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->control_data = codec_setup_data;
+       codec->control_data = pd;
 
        if (pd->power)
                pd->power(1);
 
        uda134x_reset(codec);
 
-       if (pd->is_powered_on_standby) {
-               codec->set_bias_level = NULL;
+       if (pd->is_powered_on_standby)
                uda134x_set_bias_level(codec, SND_SOC_BIAS_ON);
-       } else {
-               codec->set_bias_level = uda134x_set_bias_level;
+       else
                uda134x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-       }
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "UDA134X: failed to register pcms\n");
-               goto pcm_err;
-       }
 
        switch (pd->model) {
        case UDA134X_UDA1340:
@@ -590,61 +545,42 @@ static int uda134x_soc_probe(struct platform_device *pdev)
        default:
                printk(KERN_ERR "%s unknown codec type: %d",
                        __func__, pd->model);
-       return -EINVAL;
+               kfree(uda134x);
+               return -EINVAL;
        }
 
        if (ret < 0) {
                printk(KERN_ERR "UDA134X: failed to register controls\n");
-               goto pcm_err;
+               kfree(uda134x);
+               return ret;
        }
 
        return 0;
-
-pcm_err:
-       kfree(codec->reg_cache);
-reg_err:
-       kfree(snd_soc_codec_get_drvdata(codec));
-priv_err:
-       kfree(codec);
-       return ret;
 }
 
 /* power down chip */
-static int uda134x_soc_remove(struct platform_device *pdev)
+static int uda134x_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct uda134x_priv *uda134x = snd_soc_codec_get_drvdata(codec);
 
        uda134x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
        uda134x_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       kfree(snd_soc_codec_get_drvdata(codec));
-       kfree(codec->reg_cache);
-       kfree(codec);
-
+       kfree(uda134x);
        return 0;
 }
 
 #if defined(CONFIG_PM)
-static int uda134x_soc_suspend(struct platform_device *pdev,
+static int uda134x_soc_suspend(struct snd_soc_codec *codec,
                                                pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        uda134x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
        uda134x_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int uda134x_soc_resume(struct platform_device *pdev)
+static int uda134x_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        uda134x_set_bias_level(codec, SND_SOC_BIAS_PREPARE);
        uda134x_set_bias_level(codec, SND_SOC_BIAS_ON);
        return 0;
@@ -654,25 +590,53 @@ static int uda134x_soc_resume(struct platform_device *pdev)
 #define uda134x_soc_resume NULL
 #endif /* CONFIG_PM */
 
-struct snd_soc_codec_device soc_codec_dev_uda134x = {
+static struct snd_soc_codec_driver soc_codec_dev_uda134x = {
        .probe =        uda134x_soc_probe,
        .remove =       uda134x_soc_remove,
        .suspend =      uda134x_soc_suspend,
        .resume =       uda134x_soc_resume,
+       .reg_cache_size = sizeof(uda134x_reg),
+       .reg_word_size = sizeof(u8),
+       .reg_cache_step = 1,
+       .read = uda134x_read_reg_cache,
+       .write = uda134x_write,
+#ifdef POWER_OFF_ON_STANDBY
+       .set_bias_level = uda134x_set_bias_level,
+#endif
+};
+
+static int __devinit uda134x_codec_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_uda134x, &uda134x_dai, 1);
+}
+
+static int __devexit uda134x_codec_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver uda134x_codec_driver = {
+       .driver = {
+               .name = "uda134x-codec",
+               .owner = THIS_MODULE,
+       },
+       .probe = uda134x_codec_probe,
+       .remove = __devexit_p(uda134x_codec_remove),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_uda134x);
 
-static int __init uda134x_init(void)
+static int __init uda134x_codec_init(void)
 {
-       return snd_soc_register_dai(&uda134x_dai);
+       return platform_driver_register(&uda134x_codec_driver);
 }
-module_init(uda134x_init);
+module_init(uda134x_codec_init);
 
-static void __exit uda134x_exit(void)
+static void __exit uda134x_codec_exit(void)
 {
-       snd_soc_unregister_dai(&uda134x_dai);
+       platform_driver_unregister(&uda134x_codec_driver);
 }
-module_exit(uda134x_exit);
+module_exit(uda134x_codec_exit);
 
 MODULE_DESCRIPTION("UDA134X ALSA soc codec driver");
 MODULE_AUTHOR("Zoltan Devai, Christian Pellegrin <chripell@evolware.org>");
index 205f03b3eaf81674de74f4a60e8ac28cddbf4c83..9faae06972b32fc226cbb9450e84e86b7f6f271e 100644 (file)
@@ -31,7 +31,4 @@
 #define STATUS0_DAIFMT_MASK (~(7<<1))
 #define STATUS0_SYSCLK_MASK (~(3<<4))
 
-extern struct snd_soc_dai uda134x_dai;
-extern struct snd_soc_codec_device soc_codec_dev_uda134x;
-
 #endif
index 2f925a27dcde2353f35566aa8dd2f057ebe3a971..1a51c816e54281c962a9b029ac53c4d78349a70a 100644 (file)
 
 #include "uda1380.h"
 
-static struct snd_soc_codec *uda1380_codec;
-
 /* codec private data */
 struct uda1380_priv {
-       struct snd_soc_codec codec;
+       struct snd_soc_codec *codec;
        u16 reg_cache[UDA1380_CACHEREGNUM];
        unsigned int dac_clk;
        struct work_struct work;
@@ -135,6 +133,8 @@ static int uda1380_write(struct snd_soc_codec *codec, unsigned int reg,
 
 static void uda1380_flush_work(struct work_struct *work)
 {
+       struct uda1380_priv *uda1380 = container_of(work, struct uda1380_priv, work);
+       struct snd_soc_codec *uda1380_codec = uda1380->codec;
        int bit, reg;
 
        for_each_set_bit(bit, &uda1380_cache_dirty, UDA1380_CACHEREGNUM - 0x10) {
@@ -145,6 +145,7 @@ static void uda1380_flush_work(struct work_struct *work)
                                uda1380_read_reg_cache(uda1380_codec, reg));
                clear_bit(bit, &uda1380_cache_dirty);
        }
+
 }
 
 /* declarations of ALSA reg_elem_REAL controls */
@@ -474,8 +475,7 @@ static int uda1380_trigger(struct snd_pcm_substream *substream, int cmd,
                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct uda1380_priv *uda1380 = snd_soc_codec_get_drvdata(codec);
        int mixer = uda1380_read_reg_cache(codec, UDA1380_MIXER);
 
@@ -501,8 +501,7 @@ static int uda1380_pcm_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 clk = uda1380_read_reg_cache(codec, UDA1380_CLK);
 
        /* set WSPLL power and divider if running from this clock */
@@ -540,8 +539,7 @@ static void uda1380_pcm_shutdown(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 clk = uda1380_read_reg_cache(codec, UDA1380_CLK);
 
        /* shut down WSPLL power if running from this clock */
@@ -604,9 +602,9 @@ static struct snd_soc_dai_ops uda1380_dai_ops_capture = {
        .set_fmt        = uda1380_set_dai_fmt_capture,
 };
 
-struct snd_soc_dai uda1380_dai[] = {
+static struct snd_soc_dai_driver uda1380_dai[] = {
 {
-       .name = "UDA1380",
+       .name = "uda1380-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -622,7 +620,7 @@ struct snd_soc_dai uda1380_dai[] = {
        .ops = &uda1380_dai_ops,
 },
 { /* playback only - dual interface */
-       .name = "UDA1380",
+       .name = "uda1380-hifi-playback",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -633,7 +631,7 @@ struct snd_soc_dai uda1380_dai[] = {
        .ops = &uda1380_dai_ops_playback,
 },
 { /* capture only - dual interface*/
-       .name = "UDA1380",
+       .name = "uda1380-hifi-capture",
        .capture = {
                .stream_name = "Capture",
                .channels_min = 1,
@@ -644,21 +642,15 @@ struct snd_soc_dai uda1380_dai[] = {
        .ops = &uda1380_dai_ops_capture,
 },
 };
-EXPORT_SYMBOL_GPL(uda1380_dai);
 
-static int uda1380_suspend(struct platform_device *pdev, pm_message_t state)
+static int uda1380_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        uda1380_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int uda1380_resume(struct platform_device *pdev)
+static int uda1380_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -673,91 +665,20 @@ static int uda1380_resume(struct platform_device *pdev)
        return 0;
 }
 
-static int uda1380_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct uda1380_platform_data *pdata;
-       int ret = 0;
-
-       if (uda1380_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = uda1380_codec;
-       codec = uda1380_codec;
-       pdata = codec->dev->platform_data;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       /* power on device */
-       uda1380_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-       /* set clock input */
-       switch (pdata->dac_clk) {
-       case UDA1380_DAC_CLK_SYSCLK:
-               uda1380_write(codec, UDA1380_CLK, 0);
-               break;
-       case UDA1380_DAC_CLK_WSPLL:
-               uda1380_write(codec, UDA1380_CLK, R00_DAC_CLK);
-               break;
-       }
-
-       snd_soc_add_controls(codec, uda1380_snd_controls,
-                               ARRAY_SIZE(uda1380_snd_controls));
-       uda1380_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int uda1380_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               uda1380_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_uda1380 = {
-       .probe =        uda1380_probe,
-       .remove =       uda1380_remove,
-       .suspend =      uda1380_suspend,
-       .resume =       uda1380_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_uda1380);
-
-static int uda1380_register(struct uda1380_priv *uda1380)
+static int uda1380_probe(struct snd_soc_codec *codec)
 {
-       int ret, i;
-       struct snd_soc_codec *codec = &uda1380->codec;
-       struct uda1380_platform_data *pdata = codec->dev->platform_data;
+       struct uda1380_platform_data *pdata =codec->dev->platform_data;
+       struct uda1380_priv *uda1380 = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       if (uda1380_codec) {
-               dev_err(codec->dev, "Another UDA1380 is registered\n");
-               return -EINVAL;
-       }
+       codec->hw_write = (hw_write_t)i2c_master_send;
 
        if (!pdata || !pdata->gpio_power || !pdata->gpio_reset)
                return -EINVAL;
 
        ret = gpio_request(pdata->gpio_power, "uda1380 power");
        if (ret)
-               goto err_out;
+               return ret;
        ret = gpio_request(pdata->gpio_reset, "uda1380 reset");
        if (ret)
                goto err_gpio;
@@ -769,25 +690,6 @@ static int uda1380_register(struct uda1380_priv *uda1380)
        udelay(5);
        gpio_set_value(pdata->gpio_reset, 0);
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, uda1380);
-       codec->name = "UDA1380";
-       codec->owner = THIS_MODULE;
-       codec->read = uda1380_read_reg_cache;
-       codec->write = uda1380_write;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = uda1380_set_bias_level;
-       codec->dai = uda1380_dai;
-       codec->num_dai = ARRAY_SIZE(uda1380_dai);
-       codec->reg_cache_size = ARRAY_SIZE(uda1380_reg);
-       codec->reg_cache = &uda1380->reg_cache;
-       codec->reg_cache_step = 1;
-
-       memcpy(codec->reg_cache, uda1380_reg, sizeof(uda1380_reg));
-
        ret = uda1380_reset(codec);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
@@ -796,83 +698,84 @@ static int uda1380_register(struct uda1380_priv *uda1380)
 
        INIT_WORK(&uda1380->work, uda1380_flush_work);
 
-       for (i = 0; i < ARRAY_SIZE(uda1380_dai); i++)
-               uda1380_dai[i].dev = codec->dev;
-
-       uda1380_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_reset;
+       /* power on device */
+       uda1380_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       /* set clock input */
+       switch (pdata->dac_clk) {
+       case UDA1380_DAC_CLK_SYSCLK:
+               uda1380_write(codec, UDA1380_CLK, 0);
+               break;
+       case UDA1380_DAC_CLK_WSPLL:
+               uda1380_write(codec, UDA1380_CLK, R00_DAC_CLK);
+               break;
        }
 
-       ret = snd_soc_register_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
-               goto err_dai;
-       }
+       snd_soc_add_controls(codec, uda1380_snd_controls,
+                               ARRAY_SIZE(uda1380_snd_controls));
+       uda1380_add_widgets(codec);
 
        return 0;
 
-err_dai:
-       snd_soc_unregister_codec(codec);
 err_reset:
        gpio_set_value(pdata->gpio_power, 0);
        gpio_free(pdata->gpio_reset);
 err_gpio:
        gpio_free(pdata->gpio_power);
-err_out:
        return ret;
 }
 
-static void uda1380_unregister(struct uda1380_priv *uda1380)
+/* power down chip */
+static int uda1380_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = &uda1380->codec;
-       struct uda1380_platform_data *pdata = codec->dev->platform_data;
+       struct uda1380_platform_data *pdata =codec->dev->platform_data;
 
-       snd_soc_unregister_dais(uda1380_dai, ARRAY_SIZE(uda1380_dai));
-       snd_soc_unregister_codec(&uda1380->codec);
+       uda1380_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        gpio_set_value(pdata->gpio_power, 0);
        gpio_free(pdata->gpio_reset);
        gpio_free(pdata->gpio_power);
 
-       kfree(uda1380);
-       uda1380_codec = NULL;
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_uda1380 = {
+       .probe =        uda1380_probe,
+       .remove =       uda1380_remove,
+       .suspend =      uda1380_suspend,
+       .resume =       uda1380_resume,
+       .read = uda1380_read_reg_cache,
+       .write = uda1380_write,
+       .set_bias_level = uda1380_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(uda1380_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = uda1380_reg,
+       .reg_cache_step = 1,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int uda1380_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct uda1380_priv *uda1380;
-       struct snd_soc_codec *codec;
        int ret;
 
        uda1380 = kzalloc(sizeof(struct uda1380_priv), GFP_KERNEL);
        if (uda1380 == NULL)
                return -ENOMEM;
 
-       codec = &uda1380->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(i2c, uda1380);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
 
-       ret = uda1380_register(uda1380);
-       if (ret != 0)
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_uda1380, uda1380_dai, ARRAY_SIZE(uda1380_dai));
+       if (ret < 0)
                kfree(uda1380);
-
        return ret;
 }
 
 static int __devexit uda1380_i2c_remove(struct i2c_client *i2c)
 {
-       struct uda1380_priv *uda1380 = i2c_get_clientdata(i2c);
-       uda1380_unregister(uda1380);
+       snd_soc_unregister_codec(&i2c->dev);
+       kfree(i2c_get_clientdata(i2c));
        return 0;
 }
 
@@ -884,7 +787,7 @@ MODULE_DEVICE_TABLE(i2c, uda1380_i2c_id);
 
 static struct i2c_driver uda1380_i2c_driver = {
        .driver = {
-               .name =  "UDA1380 I2C Codec",
+               .name =  "uda1380-codec",
                .owner = THIS_MODULE,
        },
        .probe =    uda1380_i2c_probe,
index 9cefa8a54770da1c003db0e0cfb029b1a65a8baa..942e3927c72b11e033a98cda16dbf9b80b9b2dd1 100644 (file)
@@ -76,7 +76,4 @@
 #define UDA1380_DAI_PLAYBACK   1 /* playback DAI */
 #define UDA1380_DAI_CAPTURE    2 /* capture DAI */
 
-extern struct snd_soc_dai uda1380_dai[3];
-extern struct snd_soc_codec_device soc_codec_dev_uda1380;
-
 #endif /* _UDA1380_H */
index c18e261c3c7fb089cefc032dd4e67e74675570b5..0b6f056f73cc53a80ab0fedc5733641573bc4974 100644 (file)
@@ -16,9 +16,6 @@ struct wm2000_setup_data {
 
 extern int wm2000_add_controls(struct snd_soc_codec *codec);
 
-extern struct snd_soc_dai wm2000_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm2000;
-
 #define WM2000_REG_SYS_START       0x8000
 #define WM2000_REG_SPEECH_CLARITY   0x8fef
 #define WM2000_REG_SYS_WATCHDOG     0x8ff6
index 0221ca79b3ae59831a15499e263b7ca9cbf1118b..f4f1fba38eb9458176f5bda41cc93d12c87722eb 100644 (file)
@@ -1321,20 +1321,14 @@ static int wm8350_set_bias_level(struct snd_soc_codec *codec,
        return 0;
 }
 
-static int wm8350_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8350_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8350_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8350_resume(struct platform_device *pdev)
+static int wm8350_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8350_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
@@ -1489,24 +1483,74 @@ int wm8350_mic_jack_detect(struct snd_soc_codec *codec,
 }
 EXPORT_SYMBOL_GPL(wm8350_mic_jack_detect);
 
-static struct snd_soc_codec *wm8350_codec;
+#define WM8350_RATES (SNDRV_PCM_RATE_8000_96000)
+
+#define WM8350_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
+                       SNDRV_PCM_FMTBIT_S20_3LE |\
+                       SNDRV_PCM_FMTBIT_S24_LE)
+
+static struct snd_soc_dai_ops wm8350_dai_ops = {
+        .hw_params     = wm8350_pcm_hw_params,
+        .digital_mute  = wm8350_mute,
+        .trigger       = wm8350_pcm_trigger,
+        .set_fmt       = wm8350_set_dai_fmt,
+        .set_sysclk    = wm8350_set_dai_sysclk,
+        .set_pll       = wm8350_set_fll,
+        .set_clkdiv    = wm8350_set_clkdiv,
+};
+
+static struct snd_soc_dai_driver wm8350_dai = {
+       .name = "wm8350-hifi",
+       .playback = {
+               .stream_name = "Playback",
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = WM8350_RATES,
+               .formats = WM8350_FORMATS,
+       },
+       .capture = {
+                .stream_name = "Capture",
+                .channels_min = 1,
+                .channels_max = 2,
+                .rates = WM8350_RATES,
+                .formats = WM8350_FORMATS,
+        },
+       .ops = &wm8350_dai_ops,
+};
 
-static int wm8350_probe(struct platform_device *pdev)
+static  int wm8350_codec_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct wm8350 *wm8350;
+       struct wm8350 *wm8350 = dev_get_platdata(codec->dev);
        struct wm8350_data *priv;
-       int ret;
        struct wm8350_output *out1;
        struct wm8350_output *out2;
+       int ret, i;
 
-       BUG_ON(!wm8350_codec);
+       if (wm8350->codec.platform_data == NULL) {
+               dev_err(codec->dev, "No audio platform data supplied\n");
+               return -EINVAL;
+       }
+
+       priv = kzalloc(sizeof(struct wm8350_data), GFP_KERNEL);
+       if (priv == NULL)
+               return -ENOMEM;
+       snd_soc_codec_set_drvdata(codec, priv);
+
+       for (i = 0; i < ARRAY_SIZE(supply_names); i++)
+               priv->supplies[i].supply = supply_names[i];
+
+       ret = regulator_bulk_get(wm8350->dev, ARRAY_SIZE(priv->supplies),
+                                priv->supplies);
+       if (ret != 0)
+               goto err_priv;
+
+       wm8350->codec.codec = codec;
+       codec->control_data = wm8350;
 
-       socdev->card->codec = wm8350_codec;
-       codec = socdev->card->codec;
-       wm8350 = codec->control_data;
-       priv = snd_soc_codec_get_drvdata(codec);
+       /* Put the codec into reset if it wasn't already */
+       wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA);
+
+       INIT_DELAYED_WORK(&codec->delayed_work, wm8350_pga_work);
 
        /* Enable the codec */
        wm8350_set_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA);
@@ -1557,11 +1601,6 @@ static int wm8350_probe(struct platform_device *pdev)
        wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICD,
                            wm8350_mic_handler, 0, "Microphone detect", priv);
 
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create pcms\n");
-               return ret;
-       }
 
        snd_soc_add_controls(codec, wm8350_snd_controls,
                                ARRAY_SIZE(wm8350_snd_controls));
@@ -1570,14 +1609,16 @@ static int wm8350_probe(struct platform_device *pdev)
        wm8350_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
+
+err_priv:
+       kfree(priv);
+       return ret;
 }
 
-static int wm8350_remove(struct platform_device *pdev)
+static int  wm8350_codec_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-       struct wm8350 *wm8350 = codec->control_data;
        struct wm8350_data *priv = snd_soc_codec_get_drvdata(codec);
+       struct wm8350 *wm8350 = dev_get_platdata(codec->dev);
        int ret;
 
        wm8350_clear_bits(wm8350, WM8350_JACK_DETECT,
@@ -1607,134 +1648,30 @@ static int wm8350_remove(struct platform_device *pdev)
 
        wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA);
 
+       regulator_bulk_free(ARRAY_SIZE(priv->supplies), priv->supplies);
+       kfree(priv);
        return 0;
 }
 
-#define WM8350_RATES (SNDRV_PCM_RATE_8000_96000)
-
-#define WM8350_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
-                       SNDRV_PCM_FMTBIT_S20_3LE |\
-                       SNDRV_PCM_FMTBIT_S24_LE)
-
-static struct snd_soc_dai_ops wm8350_dai_ops = {
-        .hw_params     = wm8350_pcm_hw_params,
-        .digital_mute  = wm8350_mute,
-        .trigger       = wm8350_pcm_trigger,
-        .set_fmt       = wm8350_set_dai_fmt,
-        .set_sysclk    = wm8350_set_dai_sysclk,
-        .set_pll       = wm8350_set_fll,
-        .set_clkdiv    = wm8350_set_clkdiv,
-};
-
-struct snd_soc_dai wm8350_dai = {
-       .name = "WM8350",
-       .playback = {
-               .stream_name = "Playback",
-               .channels_min = 1,
-               .channels_max = 2,
-               .rates = WM8350_RATES,
-               .formats = WM8350_FORMATS,
-       },
-       .capture = {
-                .stream_name = "Capture",
-                .channels_min = 1,
-                .channels_max = 2,
-                .rates = WM8350_RATES,
-                .formats = WM8350_FORMATS,
-        },
-       .ops = &wm8350_dai_ops,
-};
-EXPORT_SYMBOL_GPL(wm8350_dai);
-
-struct snd_soc_codec_device soc_codec_dev_wm8350 = {
-       .probe =        wm8350_probe,
-       .remove =       wm8350_remove,
+static struct snd_soc_codec_driver soc_codec_dev_wm8350 = {
+       .probe =        wm8350_codec_probe,
+       .remove =       wm8350_codec_remove,
        .suspend =      wm8350_suspend,
        .resume =       wm8350_resume,
+       .read = wm8350_codec_read,
+       .write = wm8350_codec_write,
+       .set_bias_level = wm8350_set_bias_level,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8350);
 
-static __devinit int wm8350_codec_probe(struct platform_device *pdev)
+static int __devinit wm8350_probe(struct platform_device *pdev)
 {
-       struct wm8350 *wm8350 = platform_get_drvdata(pdev);
-       struct wm8350_data *priv;
-       struct snd_soc_codec *codec;
-       int ret, i;
-
-       if (wm8350->codec.platform_data == NULL) {
-               dev_err(&pdev->dev, "No audio platform data supplied\n");
-               return -EINVAL;
-       }
-
-       priv = kzalloc(sizeof(struct wm8350_data), GFP_KERNEL);
-       if (priv == NULL)
-               return -ENOMEM;
-
-       for (i = 0; i < ARRAY_SIZE(supply_names); i++)
-               priv->supplies[i].supply = supply_names[i];
-
-       ret = regulator_bulk_get(wm8350->dev, ARRAY_SIZE(priv->supplies),
-                                priv->supplies);
-       if (ret != 0)
-               goto err_priv;
-
-       codec = &priv->codec;
-       wm8350->codec.codec = codec;
-
-       wm8350_dai.dev = &pdev->dev;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-       codec->dev = &pdev->dev;
-       codec->name = "WM8350";
-       codec->owner = THIS_MODULE;
-       codec->read = wm8350_codec_read;
-       codec->write = wm8350_codec_write;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8350_set_bias_level;
-       codec->dai = &wm8350_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8350_MAX_REGISTER;
-       snd_soc_codec_set_drvdata(codec, priv);
-       codec->control_data = wm8350;
-
-       /* Put the codec into reset if it wasn't already */
-       wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA);
-
-       INIT_DELAYED_WORK(&codec->delayed_work, wm8350_pga_work);
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0)
-               goto err_supply;
-
-       wm8350_codec = codec;
-
-       ret = snd_soc_register_dai(&wm8350_dai);
-       if (ret != 0)
-               goto err_codec;
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err_supply:
-       regulator_bulk_free(ARRAY_SIZE(priv->supplies), priv->supplies);
-err_priv:
-       kfree(priv);
-       wm8350_codec = NULL;
-       return ret;
+       return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8350,
+                       &wm8350_dai, 1);
 }
 
-static int __devexit wm8350_codec_remove(struct platform_device *pdev)
+static int __devexit wm8350_remove(struct platform_device *pdev)
 {
-       struct wm8350 *wm8350 = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = wm8350->codec.codec;
-       struct wm8350_data *priv = snd_soc_codec_get_drvdata(codec);
-
-       snd_soc_unregister_dai(&wm8350_dai);
-       snd_soc_unregister_codec(codec);
-       regulator_bulk_free(ARRAY_SIZE(priv->supplies), priv->supplies);
-       kfree(priv);
-       wm8350_codec = NULL;
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
@@ -1743,8 +1680,8 @@ static struct platform_driver wm8350_codec_driver = {
                   .name = "wm8350-codec",
                   .owner = THIS_MODULE,
                   },
-       .probe = wm8350_codec_probe,
-       .remove = __devexit_p(wm8350_codec_remove),
+       .probe = wm8350_probe,
+       .remove = __devexit_p(wm8350_remove),
 };
 
 static __init int wm8350_init(void)
index 9ed0467c71db70b42db50e563b10abbf4485348e..74108eb82938ca29b3caec1156bc8dd22e4931a1 100644 (file)
@@ -15,9 +15,6 @@
 #include <sound/soc.h>
 #include <linux/mfd/wm8350/audio.h>
 
-extern struct snd_soc_dai wm8350_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8350;
-
 enum wm8350_jack {
        WM8350_JDL = 1,
        WM8350_JDR = 2,
index 8f294066b0ed3e4edfc382b992e943a6157e1af2..850299786e02d0d87f77e673bb093fffb68bcbdc 100644 (file)
@@ -65,7 +65,7 @@ static struct regulator_bulk_data power[] = {
 
 /* codec private data */
 struct wm8400_priv {
-       struct snd_soc_codec codec;
+       struct snd_soc_codec *codec;
        struct wm8400 *wm8400;
        u16 fake_register;
        unsigned int sysclk;
@@ -1163,8 +1163,7 @@ static int wm8400_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 audio1 = wm8400_read(codec, WM8400_AUDIO_INTERFACE_1);
 
        audio1 &= ~WM8400_AIF_WL_MASK;
@@ -1332,10 +1331,9 @@ static struct snd_soc_dai_ops wm8400_dai_ops = {
  * 1. ADC/DAC on Primary Interface
  * 2. ADC on Primary Interface/DAC on secondary
  */
-struct snd_soc_dai wm8400_dai = {
+static struct snd_soc_dai_driver wm8400_dai = {
 /* ADC/DAC on primary */
-       .name = "WM8400 ADC/DAC Primary",
-       .id = 1,
+       .name = "wm8400-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -1352,147 +1350,53 @@ struct snd_soc_dai wm8400_dai = {
        },
        .ops = &wm8400_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8400_dai);
 
-static int wm8400_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8400_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8400_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8400_resume(struct platform_device *pdev)
+static int wm8400_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8400_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
 }
 
-static struct snd_soc_codec *wm8400_codec;
-
-static int wm8400_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret;
-
-       if (!wm8400_codec) {
-               dev_err(&pdev->dev, "wm8400 not yet discovered\n");
-               return -ENODEV;
-       }
-       codec = wm8400_codec;
-
-       socdev->card->codec = codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create pcms\n");
-               goto pcm_err;
-       }
-
-       wm8400_add_controls(codec);
-       wm8400_add_widgets(codec);
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8400_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8400 = {
-       .probe =        wm8400_probe,
-       .remove =       wm8400_remove,
-       .suspend =      wm8400_suspend,
-       .resume =       wm8400_resume,
-};
-
 static void wm8400_probe_deferred(struct work_struct *work)
 {
        struct wm8400_priv *priv = container_of(work, struct wm8400_priv,
                                                work);
-       struct snd_soc_codec *codec = &priv->codec;
-       int ret;
+       struct snd_soc_codec *codec = priv->codec;
 
        /* charge output caps */
        wm8400_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
-       /* We're done, tell the subsystem. */
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(priv->wm8400->dev,
-                       "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm8400_dai);
-       if (ret != 0) {
-               dev_err(priv->wm8400->dev,
-                       "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       wm8400_set_bias_level(codec, SND_SOC_BIAS_OFF);
 }
 
-static int wm8400_codec_probe(struct platform_device *dev)
+static int wm8400_codec_probe(struct snd_soc_codec *codec)
 {
+       struct wm8400 *wm8400 = dev_get_platdata(codec->dev);
        struct wm8400_priv *priv;
        int ret;
        u16 reg;
-       struct snd_soc_codec *codec;
 
        priv = kzalloc(sizeof(struct wm8400_priv), GFP_KERNEL);
        if (priv == NULL)
                return -ENOMEM;
 
-       codec = &priv->codec;
        snd_soc_codec_set_drvdata(codec, priv);
-       codec->control_data = dev_get_drvdata(&dev->dev);
-       priv->wm8400 = dev_get_drvdata(&dev->dev);
+       codec->control_data = priv->wm8400 = wm8400;
+       priv->codec = codec;
 
-       ret = regulator_bulk_get(priv->wm8400->dev,
+       ret = regulator_bulk_get(wm8400->dev,
                                 ARRAY_SIZE(power), &power[0]);
        if (ret != 0) {
-               dev_err(&dev->dev, "Failed to get regulators: %d\n", ret);
+               dev_err(codec->dev, "Failed to get regulators: %d\n", ret);
                goto err;
        }
 
-       codec->dev = &dev->dev;
-       wm8400_dai.dev = &dev->dev;
-
-       codec->name = "WM8400";
-       codec->owner = THIS_MODULE;
-       codec->read = wm8400_read;
-       codec->write = wm8400_write;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8400_set_bias_level;
-       codec->dai = &wm8400_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8400_REGISTER_COUNT;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
        INIT_WORK(&priv->work, wm8400_probe_deferred);
 
        wm8400_codec_reset(codec);
@@ -1511,65 +1415,78 @@ static int wm8400_codec_probe(struct platform_device *dev)
        wm8400_write(codec, WM8400_LEFT_OUTPUT_VOLUME, 0x50 | (1<<8));
        wm8400_write(codec, WM8400_RIGHT_OUTPUT_VOLUME, 0x50 | (1<<8));
 
-       wm8400_codec = codec;
-
        if (!schedule_work(&priv->work)) {
                ret = -EINVAL;
                goto err_regulator;
        }
-
+       wm8400_add_controls(codec);
+       wm8400_add_widgets(codec);
        return 0;
 
 err_regulator:
-       wm8400_codec = NULL;
        regulator_bulk_free(ARRAY_SIZE(power), power);
 err:
        kfree(priv);
        return ret;
 }
 
-static int __exit wm8400_codec_remove(struct platform_device *dev)
+static int  wm8400_codec_remove(struct snd_soc_codec *codec)
 {
-       struct wm8400_priv *priv = snd_soc_codec_get_drvdata(wm8400_codec);
+       struct wm8400_priv *priv = snd_soc_codec_get_drvdata(codec);
        u16 reg;
 
-       snd_soc_unregister_dai(&wm8400_dai);
-       snd_soc_unregister_codec(wm8400_codec);
-
-       reg = wm8400_read(wm8400_codec, WM8400_POWER_MANAGEMENT_1);
-       wm8400_write(wm8400_codec, WM8400_POWER_MANAGEMENT_1,
+       reg = wm8400_read(codec, WM8400_POWER_MANAGEMENT_1);
+       wm8400_write(codec, WM8400_POWER_MANAGEMENT_1,
                     reg & (~WM8400_CODEC_ENA));
 
        regulator_bulk_free(ARRAY_SIZE(power), power);
        kfree(priv);
 
-       wm8400_codec = NULL;
+       return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_wm8400 = {
+       .probe =        wm8400_codec_probe,
+       .remove =       wm8400_codec_remove,
+       .suspend =      wm8400_suspend,
+       .resume =       wm8400_resume,
+       .read = wm8400_read,
+       .write = wm8400_write,
+       .set_bias_level = wm8400_set_bias_level,
+};
+
+static int __devinit wm8400_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8400,
+                       &wm8400_dai, 1);
+}
 
+static int __devexit wm8400_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
 static struct platform_driver wm8400_codec_driver = {
        .driver = {
-               .name = "wm8400-codec",
-               .owner = THIS_MODULE,
-       },
-       .probe = wm8400_codec_probe,
-       .remove = __exit_p(wm8400_codec_remove),
+                  .name = "wm8400-codec",
+                  .owner = THIS_MODULE,
+                  },
+       .probe = wm8400_probe,
+       .remove = __devexit_p(wm8400_remove),
 };
 
-static int __init wm8400_codec_init(void)
+static __init int wm8400_init(void)
 {
        return platform_driver_register(&wm8400_codec_driver);
 }
-module_init(wm8400_codec_init);
+module_init(wm8400_init);
 
-static void __exit wm8400_codec_exit(void)
+static __exit void wm8400_exit(void)
 {
        platform_driver_unregister(&wm8400_codec_driver);
 }
-module_exit(wm8400_codec_exit);
-
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8400);
+module_exit(wm8400_exit);
 
 MODULE_DESCRIPTION("ASoC WM8400 driver");
 MODULE_AUTHOR("Mark Brown");
index 79c5934d4776f2b3cda9907e7ca5c7d2d3a383fc..521adb19387087048e3d86e299d3f4b5682ba0d6 100644 (file)
@@ -56,7 +56,4 @@
 #define WM8400_BCLK_DIV_44                      (0xE << 1)
 #define WM8400_BCLK_DIV_48                      (0xF << 1)
 
-extern struct snd_soc_dai wm8400_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8400;
-
 #endif
index 0f7bcb61071ac6a12cd9fc4b82ea2350d5b469c8..d00da2001a12cbec3abf2039bb83872b710a9a1a 100644 (file)
 
 #include "wm8510.h"
 
-#define WM8510_VERSION "0.6"
-
-struct snd_soc_codec_device soc_codec_dev_wm8510;
-
 /*
  * wm8510 register cache
  * We can't read the WM8510 register space when we are
@@ -61,6 +57,11 @@ static const u16 wm8510_reg[WM8510_CACHEREGNUM] = {
 
 #define wm8510_reset(c)        snd_soc_write(c, WM8510_RESET, 0)
 
+/* codec private data */
+struct wm8510_priv {
+       enum snd_soc_control_type control_type;
+};
+
 static const char *wm8510_companding[] = { "Off", "NC", "u-law", "A-law" };
 static const char *wm8510_deemp[] = { "None", "32kHz", "44.1kHz", "48kHz" };
 static const char *wm8510_alc[] = { "ALC", "Limiter" };
@@ -403,8 +404,7 @@ static int wm8510_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 iface = snd_soc_read(codec, WM8510_IFACE) & 0x19f;
        u16 adn = snd_soc_read(codec, WM8510_ADD) & 0x1f1;
 
@@ -514,8 +514,8 @@ static struct snd_soc_dai_ops wm8510_dai_ops = {
        .set_pll        = wm8510_set_dai_pll,
 };
 
-struct snd_soc_dai wm8510_dai = {
-       .name = "WM8510 HiFi",
+static struct snd_soc_dai_driver wm8510_dai = {
+       .name = "wm8510-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -531,21 +531,15 @@ struct snd_soc_dai wm8510_dai = {
        .ops = &wm8510_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8510_dai);
 
-static int wm8510_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8510_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8510_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8510_resume(struct platform_device *pdev)
+static int wm8510_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -561,43 +555,19 @@ static int wm8510_resume(struct platform_device *pdev)
        return 0;
 }
 
-/*
- * initialise the WM8510 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int wm8510_init(struct snd_soc_device *socdev,
-                      enum snd_soc_control_type control)
+static int wm8510_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int ret = 0;
-
-       codec->name = "WM8510";
-       codec->owner = THIS_MODULE;
-       codec->set_bias_level = wm8510_set_bias_level;
-       codec->dai = &wm8510_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm8510_reg);
-       codec->reg_cache = kmemdup(wm8510_reg, sizeof(wm8510_reg), GFP_KERNEL);
-
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
+       struct wm8510_priv *wm8510 = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9,  wm8510->control_type);
        if (ret < 0) {
-               printk(KERN_ERR "wm8510: failed to set cache I/O: %d\n",
-                      ret);
-               goto err;
+               printk(KERN_ERR "wm8510: failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
        wm8510_reset(codec);
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8510: failed to create pcms\n");
-               goto err;
-       }
-
        /* power on device */
        codec->bias_level = SND_SOC_BIAS_OFF;
        wm8510_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
@@ -606,119 +576,52 @@ static int wm8510_init(struct snd_soc_device *socdev,
        wm8510_add_widgets(codec);
 
        return ret;
-
-err:
-       kfree(codec->reg_cache);
-       return ret;
 }
 
-static struct snd_soc_device *wm8510_socdev;
-
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-
-/*
- * WM8510 2 wire address is 0x1a
- */
-
-static int wm8510_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+/* power down chip */
+static int wm8510_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = wm8510_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int ret;
-
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
+       struct wm8510_priv *wm8510 = snd_soc_codec_get_drvdata(codec);
 
-       ret = wm8510_init(socdev, SND_SOC_I2C);
-       if (ret < 0)
-               pr_err("failed to initialise WM8510\n");
-
-       return ret;
-}
-
-static int wm8510_i2c_remove(struct i2c_client *client)
-{
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       kfree(codec->reg_cache);
+       wm8510_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       kfree(wm8510);
        return 0;
 }
 
-static const struct i2c_device_id wm8510_i2c_id[] = {
-       { "wm8510", 0 },
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, wm8510_i2c_id);
-
-static struct i2c_driver wm8510_i2c_driver = {
-       .driver = {
-               .name = "WM8510 I2C Codec",
-               .owner = THIS_MODULE,
-       },
-       .probe =    wm8510_i2c_probe,
-       .remove =   wm8510_i2c_remove,
-       .id_table = wm8510_i2c_id,
+static struct snd_soc_codec_driver soc_codec_dev_wm8510 = {
+       .probe =        wm8510_probe,
+       .remove =       wm8510_remove,
+       .suspend =      wm8510_suspend,
+       .resume =       wm8510_resume,
+       .set_bias_level = wm8510_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8510_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default =wm8510_reg,
 };
 
-static int wm8510_add_i2c_device(struct platform_device *pdev,
-                                const struct wm8510_setup_data *setup)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-       int ret;
-
-       ret = i2c_add_driver(&wm8510_i2c_driver);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "can't add i2c driver\n");
-               return ret;
-       }
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = setup->i2c_address;
-       strlcpy(info.type, "wm8510", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(setup->i2c_bus);
-       if (!adapter) {
-               dev_err(&pdev->dev, "can't get i2c adapter %d\n",
-                       setup->i2c_bus);
-               goto err_driver;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               goto err_driver;
-       }
-
-       return 0;
-
-err_driver:
-       i2c_del_driver(&wm8510_i2c_driver);
-       return -ENODEV;
-}
-#endif
-
 #if defined(CONFIG_SPI_MASTER)
 static int __devinit wm8510_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_device *socdev = wm8510_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8510_priv *wm8510;
        int ret;
 
-       codec->control_data = spi;
+       wm8510 = kzalloc(sizeof(struct wm8510_priv), GFP_KERNEL);
+       if (wm8510 == NULL)
+               return -ENOMEM;
 
-       ret = wm8510_init(socdev, SND_SOC_SPI);
-       if (ret < 0)
-               dev_err(&spi->dev, "failed to initialise WM8510\n");
+       wm8510->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8510);
 
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8510, &wm8510_dai, 1);
+       if (ret < 0)
+               kfree(wm8510);
        return ret;
 }
 
 static int __devexit wm8510_spi_remove(struct spi_device *spi)
 {
+       snd_soc_unregister_codec(&spi->dev);
        return 0;
 }
 
@@ -733,84 +636,79 @@ static struct spi_driver wm8510_spi_driver = {
 };
 #endif /* CONFIG_SPI_MASTER */
 
-static int wm8510_probe(struct platform_device *pdev)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8510_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct wm8510_setup_data *setup;
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       pr_info("WM8510 Audio Codec %s", WM8510_VERSION);
+       struct wm8510_priv *wm8510;
+       int ret;
 
-       setup = socdev->codec_data;
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
+       wm8510 = kzalloc(sizeof(struct wm8510_priv), GFP_KERNEL);
+       if (wm8510 == NULL)
                return -ENOMEM;
 
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
+       i2c_set_clientdata(i2c, wm8510);
+       wm8510->control_type = SND_SOC_I2C;
 
-       wm8510_socdev = socdev;
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       if (setup->i2c_address) {
-               ret = wm8510_add_i2c_device(pdev, setup);
-       }
-#endif
-#if defined(CONFIG_SPI_MASTER)
-       if (setup->spi) {
-               ret = spi_register_driver(&wm8510_spi_driver);
-               if (ret != 0)
-                       printk(KERN_ERR "can't add spi driver");
-       }
-#endif
-
-       if (ret != 0)
-               kfree(codec);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8510, &wm8510_dai, 1);
+       if (ret < 0)
+               kfree(wm8510);
        return ret;
 }
 
-/* power down chip */
-static int wm8510_remove(struct platform_device *pdev)
+static __devexit int wm8510_i2c_remove(struct i2c_client *client)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               wm8510_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       i2c_unregister_device(codec->control_data);
-       i2c_del_driver(&wm8510_i2c_driver);
-#endif
-#if defined(CONFIG_SPI_MASTER)
-       spi_unregister_driver(&wm8510_spi_driver);
-#endif
-       kfree(codec);
-
+       snd_soc_unregister_codec(&client->dev);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm8510 = {
-       .probe =        wm8510_probe,
-       .remove =       wm8510_remove,
-       .suspend =      wm8510_suspend,
-       .resume =       wm8510_resume,
+static const struct i2c_device_id wm8510_i2c_id[] = {
+       { "wm8510", 0 },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, wm8510_i2c_id);
+
+static struct i2c_driver wm8510_i2c_driver = {
+       .driver = {
+               .name = "wm8510-codec",
+               .owner = THIS_MODULE,
+       },
+       .probe =    wm8510_i2c_probe,
+       .remove =   __devexit_p(wm8510_i2c_remove),
+       .id_table = wm8510_i2c_id,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8510);
+#endif
 
 static int __init wm8510_modinit(void)
 {
-       return snd_soc_register_dai(&wm8510_dai);
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8510_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register WM8510 I2C driver: %d\n",
+                      ret);
+       }
+#endif
+#if defined(CONFIG_SPI_MASTER)
+       ret = spi_register_driver(&wm8510_spi_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register WM8510 SPI driver: %d\n",
+                      ret);
+       }
+#endif
+       return ret;
 }
 module_init(wm8510_modinit);
 
 static void __exit wm8510_exit(void)
 {
-       snd_soc_unregister_dai(&wm8510_dai);
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       i2c_del_driver(&wm8510_i2c_driver);
+#endif
+#if defined(CONFIG_SPI_MASTER)
+       spi_unregister_driver(&wm8510_spi_driver);
+#endif
 }
 module_exit(wm8510_exit);
 
index bdefcf5c69ff2a9ed57e160843710467d19d33d0..b3e26ed9f2d0f40b234977cf3a4d90f64eeafed5 100644 (file)
@@ -99,7 +99,4 @@ struct wm8510_setup_data {
        unsigned short i2c_address;
 };
 
-extern struct snd_soc_dai wm8510_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8510;
-
 #endif
index 0ad039b4adf5fd0b12e587a115f91196e921b331..712ef7c76f90bbde579229ea85716dd14f7acb10 100644 (file)
@@ -30,9 +30,6 @@
 
 #include "wm8523.h"
 
-static struct snd_soc_codec *wm8523_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8523;
-
 #define WM8523_NUM_SUPPLIES 2
 static const char *wm8523_supply_names[WM8523_NUM_SUPPLIES] = {
        "AVDD",
@@ -43,7 +40,7 @@ static const char *wm8523_supply_names[WM8523_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct wm8523_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        u16 reg_cache[WM8523_REGISTER_COUNT];
        struct regulator_bulk_data supplies[WM8523_NUM_SUPPLIES];
        unsigned int sysclk;
@@ -162,8 +159,7 @@ static int wm8523_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8523_priv *wm8523 = snd_soc_codec_get_drvdata(codec);
        int i;
        u16 aifctrl1 = snd_soc_read(codec, WM8523_AIF_CTRL1);
@@ -387,8 +383,8 @@ static struct snd_soc_dai_ops wm8523_dai_ops = {
        .set_fmt        = wm8523_set_dai_fmt,
 };
 
-struct snd_soc_dai wm8523_dai = {
-       .name = "WM8523",
+static struct snd_soc_dai_driver wm8523_dai = {
+       .name = "wm8523-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,  /* Mono modes not yet supported */
@@ -398,25 +394,17 @@ struct snd_soc_dai wm8523_dai = {
        },
        .ops = &wm8523_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8523_dai);
 
 #ifdef CONFIG_PM
-static int wm8523_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8523_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8523_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8523_resume(struct platform_device *pdev)
+static int wm8523_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8523_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
        return 0;
 }
 #else
@@ -424,93 +412,20 @@ static int wm8523_resume(struct platform_device *pdev)
 #define wm8523_resume NULL
 #endif
 
-static int wm8523_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8523_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8523_codec;
-       codec = wm8523_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8523_snd_controls,
-                            ARRAY_SIZE(wm8523_snd_controls));
-       wm8523_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-static int wm8523_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8523 = {
-       .probe =        wm8523_probe,
-       .remove =       wm8523_remove,
-       .suspend =      wm8523_suspend,
-       .resume =       wm8523_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8523);
-
-static int wm8523_register(struct wm8523_priv *wm8523,
-                          enum snd_soc_control_type control)
+static int wm8523_probe(struct snd_soc_codec *codec)
 {
-       int ret;
-       struct snd_soc_codec *codec = &wm8523->codec;
-       int i;
-
-       if (wm8523_codec) {
-               dev_err(codec->dev, "Another WM8523 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8523);
-       codec->name = "WM8523";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8523_set_bias_level;
-       codec->dai = &wm8523_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8523_REGISTER_COUNT;
-       codec->reg_cache = &wm8523->reg_cache;
-       codec->volatile_register = wm8523_volatile_register;
+       struct wm8523_priv *wm8523 = snd_soc_codec_get_drvdata(codec);
+       int ret, i;
 
+       codec->hw_write = (hw_write_t)i2c_master_send;
        wm8523->rate_constraint.list = &wm8523->rate_constraint_list[0];
        wm8523->rate_constraint.count =
                ARRAY_SIZE(wm8523->rate_constraint_list);
 
-       memcpy(codec->reg_cache, wm8523_reg, sizeof(wm8523_reg));
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, control);
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, wm8523->control_type);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        for (i = 0; i < ARRAY_SIZE(wm8523->supplies); i++)
@@ -520,7 +435,7 @@ static int wm8523_register(struct wm8523_priv *wm8523,
                                 wm8523->supplies);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(wm8523->supplies),
@@ -555,8 +470,6 @@ static int wm8523_register(struct wm8523_priv *wm8523,
                goto err_enable;
        }
 
-       wm8523_dai.dev = codec->dev;
-
        /* Change some default settings - latch VU and enable ZC */
        wm8523->reg_cache[WM8523_DAC_GAINR] |= WM8523_DACR_VU;
        wm8523->reg_cache[WM8523_DAC_CTRL3] |= WM8523_ZC;
@@ -566,69 +479,67 @@ static int wm8523_register(struct wm8523_priv *wm8523,
        /* Bias level configuration will have done an extra enable */
        regulator_bulk_disable(ARRAY_SIZE(wm8523->supplies), wm8523->supplies);
 
-       wm8523_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_enable;
-       }
-
-       ret = snd_soc_register_dai(&wm8523_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8523_snd_controls,
+                            ARRAY_SIZE(wm8523_snd_controls));
+       wm8523_add_widgets(codec);
 
        return 0;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
 err_enable:
        regulator_bulk_disable(ARRAY_SIZE(wm8523->supplies), wm8523->supplies);
 err_get:
        regulator_bulk_free(ARRAY_SIZE(wm8523->supplies), wm8523->supplies);
-err:
-       kfree(wm8523);
+
        return ret;
 }
 
-static void wm8523_unregister(struct wm8523_priv *wm8523)
+static int wm8523_remove(struct snd_soc_codec *codec)
 {
-       wm8523_set_bias_level(&wm8523->codec, SND_SOC_BIAS_OFF);
+       struct wm8523_priv *wm8523 = snd_soc_codec_get_drvdata(codec);
+
+       wm8523_set_bias_level(codec, SND_SOC_BIAS_OFF);
        regulator_bulk_free(ARRAY_SIZE(wm8523->supplies), wm8523->supplies);
-       snd_soc_unregister_dai(&wm8523_dai);
-       snd_soc_unregister_codec(&wm8523->codec);
-       kfree(wm8523);
-       wm8523_codec = NULL;
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8523 = {
+       .probe =        wm8523_probe,
+       .remove =       wm8523_remove,
+       .suspend =      wm8523_suspend,
+       .resume =       wm8523_resume,
+       .set_bias_level = wm8523_set_bias_level,
+       .reg_cache_size = WM8523_REGISTER_COUNT,
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8523_reg,
+       .volatile_register = wm8523_volatile_register,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8523_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8523_priv *wm8523;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8523 = kzalloc(sizeof(struct wm8523_priv), GFP_KERNEL);
        if (wm8523 == NULL)
                return -ENOMEM;
 
-       codec = &wm8523->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(i2c, wm8523);
-       codec->control_data = i2c;
+       wm8523->control_type = SND_SOC_I2C;
 
-       codec->dev = &i2c->dev;
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8523, &wm8523_dai, 1);
+       if (ret < 0)
+               kfree(wm8523);
+       return ret;
 
-       return wm8523_register(wm8523, SND_SOC_I2C);
 }
 
 static __devexit int wm8523_i2c_remove(struct i2c_client *client)
 {
-       struct wm8523_priv *wm8523 = i2c_get_clientdata(client);
-       wm8523_unregister(wm8523);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -640,7 +551,7 @@ MODULE_DEVICE_TABLE(i2c, wm8523_i2c_id);
 
 static struct i2c_driver wm8523_i2c_driver = {
        .driver = {
-               .name = "WM8523",
+               .name = "wm8523-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8523_i2c_probe,
index 1aa9ce3e135775ce03cce3e4d57b75e54b98167d..4d5b1eb8f2fc806d20552698cce5df6bf43b1da0 100644 (file)
 #define WM8523_ZD_COUNT_SHIFT                        0  /* ZD_COUNT - [1:0] */
 #define WM8523_ZD_COUNT_WIDTH                        2  /* ZD_COUNT - [1:0] */
 
-extern struct snd_soc_dai wm8523_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8523;
-
 #endif
index 72deeabef4fe4cf7b4fbb822054cc5e99ce1708e..af4517ed2964286f9235f4704fd085929888898c 100644 (file)
@@ -94,6 +94,8 @@
 
 #define WM8580_MAX_REGISTER                  0x35
 
+#define WM8580_DACOSR 0x40
+
 /* PLLB4 (register 7h) */
 #define WM8580_PLLB4_MCLKOUTSRC_MASK   0x60
 #define WM8580_PLLB4_MCLKOUTSRC_PLLA   0x20
 
 /* AIF control 1 (registers 9h-bh) */
 #define WM8580_AIF_RATE_MASK       0x7
-#define WM8580_AIF_RATE_128        0x0
-#define WM8580_AIF_RATE_192        0x1
-#define WM8580_AIF_RATE_256        0x2
-#define WM8580_AIF_RATE_384        0x3
-#define WM8580_AIF_RATE_512        0x4
-#define WM8580_AIF_RATE_768        0x5
-#define WM8580_AIF_RATE_1152       0x6
-
 #define WM8580_AIF_BCLKSEL_MASK   0x18
-#define WM8580_AIF_BCLKSEL_64     0x00
-#define WM8580_AIF_BCLKSEL_128    0x08
-#define WM8580_AIF_BCLKSEL_256    0x10
-#define WM8580_AIF_BCLKSEL_SYSCLK 0x18
 
 #define WM8580_AIF_MS             0x20
 
@@ -199,11 +189,12 @@ static const char *wm8580_supply_names[WM8580_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct wm8580_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        struct regulator_bulk_data supplies[WM8580_NUM_SUPPLIES];
        u16 reg_cache[WM8580_MAX_REGISTER + 1];
        struct pll_state a;
        struct pll_state b;
+       int sysclk[2];
 };
 
 static const DECLARE_TLV_DB_SCALE(dac_tlv, -12750, 50, 1);
@@ -273,8 +264,8 @@ SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 1),
 SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 1),
 SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 1),
 
-SOC_DOUBLE("ADC Mute Switch", WM8580_ADC_CONTROL1, 0, 1, 1, 0),
-SOC_SINGLE("ADC High-Pass Filter Switch", WM8580_ADC_CONTROL1, 4, 1, 0),
+SOC_DOUBLE("Capture Switch", WM8580_ADC_CONTROL1, 0, 1, 1, 1),
+SOC_SINGLE("Capture High-Pass Filter Switch", WM8580_ADC_CONTROL1, 4, 1, 0),
 };
 
 static const struct snd_soc_dapm_widget wm8580_dapm_widgets[] = {
@@ -476,6 +467,10 @@ static int wm8580_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
        return 0;
 }
 
+static const int wm8580_sysclk_ratios[] = {
+       128, 192, 256, 384, 512, 768, 1152,
+};
+
 /*
  * Set PCM DAI bit size and sample rate.
  */
@@ -484,29 +479,68 @@ static int wm8580_paif_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
-       u16 paifb = snd_soc_read(codec, WM8580_PAIF3 + dai->id);
+       struct snd_soc_codec *codec = rtd->codec;
+       struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec);
+       u16 paifa = 0;
+       u16 paifb = 0;
+       int i, ratio, osr;
 
-       paifb &= ~WM8580_AIF_LENGTH_MASK;
        /* bit size */
        switch (params_format(params)) {
        case SNDRV_PCM_FORMAT_S16_LE:
+               paifa |= 0x8;
                break;
        case SNDRV_PCM_FORMAT_S20_3LE:
+               paifa |= 0x10;
                paifb |= WM8580_AIF_LENGTH_20;
                break;
        case SNDRV_PCM_FORMAT_S24_LE:
+               paifa |= 0x10;
                paifb |= WM8580_AIF_LENGTH_24;
                break;
        case SNDRV_PCM_FORMAT_S32_LE:
+               paifa |= 0x10;
                paifb |= WM8580_AIF_LENGTH_24;
                break;
        default:
                return -EINVAL;
        }
 
-       snd_soc_write(codec, WM8580_PAIF3 + dai->id, paifb);
+       /* Look up the SYSCLK ratio; accept only exact matches */
+       ratio = wm8580->sysclk[dai->id] / params_rate(params);
+       for (i = 0; i < ARRAY_SIZE(wm8580_sysclk_ratios); i++)
+               if (ratio == wm8580_sysclk_ratios[i])
+                       break;
+       if (i == ARRAY_SIZE(wm8580_sysclk_ratios)) {
+               dev_err(codec->dev, "Invalid clock ratio %d/%d\n",
+                       wm8580->sysclk[dai->id], params_rate(params));
+               return -EINVAL;
+       }
+       paifa |= i;
+       dev_dbg(codec->dev, "Running at %dfs with %dHz clock\n",
+               wm8580_sysclk_ratios[i], wm8580->sysclk[dai->driver->id]);
+
+       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+               switch (ratio) {
+               case 128:
+               case 192:
+                       osr = WM8580_DACOSR;
+                       dev_dbg(codec->dev, "Selecting 64x OSR\n");
+                       break;
+               default:
+                       osr = 0;
+                       dev_dbg(codec->dev, "Selecting 128x OSR\n");
+                       break;
+               }
+
+               snd_soc_update_bits(codec, WM8580_PAIF3, WM8580_DACOSR, osr);
+       }
+
+       snd_soc_update_bits(codec, WM8580_PAIF1 + dai->driver->id,
+                           WM8580_AIF_RATE_MASK | WM8580_AIF_BCLKSEL_MASK,
+                           paifa);
+       snd_soc_update_bits(codec, WM8580_PAIF3 + dai->driver->id,
+                           WM8580_AIF_LENGTH_MASK, paifb);
        return 0;
 }
 
@@ -514,12 +548,14 @@ static int wm8580_set_paif_dai_fmt(struct snd_soc_dai *codec_dai,
                                      unsigned int fmt)
 {
        struct snd_soc_codec *codec = codec_dai->codec;
+       struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec);
        unsigned int aifa;
        unsigned int aifb;
        int can_invert_lrclk;
+       int sysclk;
 
-       aifa = snd_soc_read(codec, WM8580_PAIF1 + codec_dai->id);
-       aifb = snd_soc_read(codec, WM8580_PAIF3 + codec_dai->id);
+       aifa = snd_soc_read(codec, WM8580_PAIF1 + codec_dai->driver->id);
+       aifb = snd_soc_read(codec, WM8580_PAIF3 + codec_dai->driver->id);
 
        aifb &= ~(WM8580_AIF_FMT_MASK | WM8580_AIF_LRP | WM8580_AIF_BCP);
 
@@ -585,8 +621,10 @@ static int wm8580_set_paif_dai_fmt(struct snd_soc_dai *codec_dai,
                return -EINVAL;
        }
 
-       snd_soc_write(codec, WM8580_PAIF1 + codec_dai->id, aifa);
-       snd_soc_write(codec, WM8580_PAIF3 + codec_dai->id, aifb);
+       sysclk = wm8580->sysclk[codec_dai->driver->id];
+
+       snd_soc_write(codec, WM8580_PAIF1 + codec_dai->driver->id, aifa);
+       snd_soc_write(codec, WM8580_PAIF3 + codec_dai->driver->id, aifb);
 
        return 0;
 }
@@ -624,28 +662,6 @@ static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
                snd_soc_write(codec, WM8580_PLLB4, reg);
                break;
 
-       case WM8580_DAC_CLKSEL:
-               reg = snd_soc_read(codec, WM8580_CLKSEL);
-               reg &= ~WM8580_CLKSEL_DAC_CLKSEL_MASK;
-
-               switch (div) {
-               case WM8580_CLKSRC_MCLK:
-                       break;
-
-               case WM8580_CLKSRC_PLLA:
-                       reg |= WM8580_CLKSEL_DAC_CLKSEL_PLLA;
-                       break;
-
-               case WM8580_CLKSRC_PLLB:
-                       reg |= WM8580_CLKSEL_DAC_CLKSEL_PLLB;
-                       break;
-
-               default:
-                       return -EINVAL;
-               }
-               snd_soc_write(codec, WM8580_CLKSEL, reg);
-               break;
-
        case WM8580_CLKOUTSRC:
                reg = snd_soc_read(codec, WM8580_PLLB4);
                reg &= ~WM8580_PLLB4_CLKOUTSRC_MASK;
@@ -679,6 +695,55 @@ static int wm8580_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
        return 0;
 }
 
+static int wm8580_set_sysclk(struct snd_soc_dai *dai, int clk_id,
+                            unsigned int freq, int dir)
+{
+       struct snd_soc_codec *codec = dai->codec;
+       struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec);
+       int sel, sel_mask, sel_shift;
+
+       switch (dai->driver->id) {
+       case WM8580_DAI_PAIFTX:
+               sel_mask = 0x3;
+               sel_shift = 0;
+               break;
+
+       case WM8580_DAI_PAIFRX:
+               sel_mask = 0xc;
+               sel_shift = 2;
+               break;
+
+       default:
+               BUG_ON("Unknown DAI driver ID\n");
+               return -EINVAL;
+       }
+
+       switch (clk_id) {
+       case WM8580_CLKSRC_ADCMCLK:
+               if (dai->id != WM8580_DAI_PAIFTX)
+                       return -EINVAL;
+               sel = 0 << sel_shift;
+               break;
+       case WM8580_CLKSRC_PLLA:
+               sel = 1 << sel_shift;
+               break;
+       case WM8580_CLKSRC_PLLB:
+               sel = 2 << sel_shift;
+               break;
+       case WM8580_CLKSRC_MCLK:
+               sel = 3 << sel_shift;
+               break;
+       default:
+               dev_err(codec->dev, "Unknown clock %d\n", clk_id);
+               return -EINVAL;
+       }
+
+       /* We really should validate PLL settings but not yet */
+       wm8580->sysclk[dai->id] = freq;
+
+       return snd_soc_update_bits(codec, WM8580_CLKSEL, sel, sel_mask);
+}
+
 static int wm8580_digital_mute(struct snd_soc_dai *codec_dai, int mute)
 {
        struct snd_soc_codec *codec = codec_dai->codec;
@@ -732,6 +797,7 @@ static int wm8580_set_bias_level(struct snd_soc_codec *codec,
                        SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
 
 static struct snd_soc_dai_ops wm8580_dai_ops_playback = {
+       .set_sysclk     = wm8580_set_sysclk,
        .hw_params      = wm8580_paif_hw_params,
        .set_fmt        = wm8580_set_paif_dai_fmt,
        .set_clkdiv     = wm8580_set_dai_clkdiv,
@@ -740,16 +806,17 @@ static struct snd_soc_dai_ops wm8580_dai_ops_playback = {
 };
 
 static struct snd_soc_dai_ops wm8580_dai_ops_capture = {
+       .set_sysclk     = wm8580_set_sysclk,
        .hw_params      = wm8580_paif_hw_params,
        .set_fmt        = wm8580_set_paif_dai_fmt,
        .set_clkdiv     = wm8580_set_dai_clkdiv,
        .set_pll        = wm8580_set_dai_pll,
 };
 
-struct snd_soc_dai wm8580_dai[] = {
+static struct snd_soc_dai_driver wm8580_dai[] = {
        {
-               .name = "WM8580 PAIFRX",
-               .id = 0,
+               .name = "wm8580-hifi-playback",
+               .id     = WM8580_DAI_PAIFRX,
                .playback = {
                        .stream_name = "Playback",
                        .channels_min = 1,
@@ -760,8 +827,8 @@ struct snd_soc_dai wm8580_dai[] = {
                .ops = &wm8580_dai_ops_playback,
        },
        {
-               .name = "WM8580 PAIFTX",
-               .id = 1,
+               .name = "wm8580-hifi-capture",
+               .id     =       WM8580_DAI_PAIFTX,
                .capture = {
                        .stream_name = "Capture",
                        .channels_min = 2,
@@ -772,90 +839,16 @@ struct snd_soc_dai wm8580_dai[] = {
                .ops = &wm8580_dai_ops_capture,
        },
 };
-EXPORT_SYMBOL_GPL(wm8580_dai);
 
-static struct snd_soc_codec *wm8580_codec;
-
-static int wm8580_probe(struct platform_device *pdev)
+static int wm8580_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8580_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8580_codec;
-       codec = wm8580_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8580_snd_controls,
-                            ARRAY_SIZE(wm8580_snd_controls));
-       wm8580_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8580_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8580 = {
-       .probe =        wm8580_probe,
-       .remove =       wm8580_remove,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8580);
-
-static int wm8580_register(struct wm8580_priv *wm8580,
-                          enum snd_soc_control_type control)
-{
-       int ret, i;
-       struct snd_soc_codec *codec = &wm8580->codec;
-
-       if (wm8580_codec) {
-               dev_err(codec->dev, "Another WM8580 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8580);
-       codec->name = "WM8580";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8580_set_bias_level;
-       codec->dai = wm8580_dai;
-       codec->num_dai = ARRAY_SIZE(wm8580_dai);
-       codec->reg_cache_size = ARRAY_SIZE(wm8580->reg_cache);
-       codec->reg_cache = &wm8580->reg_cache;
-
-       memcpy(codec->reg_cache, wm8580_reg, sizeof(wm8580_reg));
+       struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0,i;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8580->control_type);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        for (i = 0; i < ARRAY_SIZE(wm8580->supplies); i++)
@@ -865,7 +858,7 @@ static int wm8580_register(struct wm8580_priv *wm8580,
                                 wm8580->supplies);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(wm8580->supplies),
@@ -882,74 +875,68 @@ static int wm8580_register(struct wm8580_priv *wm8580,
                goto err_regulator_enable;
        }
 
-       for (i = 0; i < ARRAY_SIZE(wm8580_dai); i++)
-               wm8580_dai[i].dev = codec->dev;
-
        wm8580_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
-       wm8580_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_regulator_enable;
-       }
-
-       ret = snd_soc_register_dais(wm8580_dai, ARRAY_SIZE(wm8580_dai));
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8580_snd_controls,
+                            ARRAY_SIZE(wm8580_snd_controls));
+       wm8580_add_widgets(codec);
 
        return 0;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
 err_regulator_enable:
        regulator_bulk_disable(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
 err_regulator_get:
        regulator_bulk_free(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
-err:
-       kfree(wm8580);
        return ret;
 }
 
-static void wm8580_unregister(struct wm8580_priv *wm8580)
+/* power down chip */
+static int wm8580_remove(struct snd_soc_codec *codec)
 {
-       wm8580_set_bias_level(&wm8580->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dais(wm8580_dai, ARRAY_SIZE(wm8580_dai));
-       snd_soc_unregister_codec(&wm8580->codec);
+       struct wm8580_priv *wm8580 = snd_soc_codec_get_drvdata(codec);
+
+       wm8580_set_bias_level(codec, SND_SOC_BIAS_OFF);
+
        regulator_bulk_disable(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
        regulator_bulk_free(ARRAY_SIZE(wm8580->supplies), wm8580->supplies);
-       kfree(wm8580);
-       wm8580_codec = NULL;
+
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8580 = {
+       .probe =        wm8580_probe,
+       .remove =       wm8580_remove,
+       .set_bias_level = wm8580_set_bias_level,
+       .reg_cache_size = sizeof(wm8580_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = &wm8580_reg,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static int wm8580_i2c_probe(struct i2c_client *i2c,
                            const struct i2c_device_id *id)
 {
        struct wm8580_priv *wm8580;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8580 = kzalloc(sizeof(struct wm8580_priv), GFP_KERNEL);
        if (wm8580 == NULL)
                return -ENOMEM;
 
-       codec = &wm8580->codec;
-
        i2c_set_clientdata(i2c, wm8580);
-       codec->control_data = i2c;
+       wm8580->control_type = SND_SOC_I2C;
 
-       codec->dev = &i2c->dev;
-
-       return wm8580_register(wm8580, SND_SOC_I2C);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8580, wm8580_dai, ARRAY_SIZE(wm8580_dai));
+       if (ret < 0)
+               kfree(wm8580);
+       return ret;
 }
 
 static int wm8580_i2c_remove(struct i2c_client *client)
 {
-       struct wm8580_priv *wm8580 = i2c_get_clientdata(client);
-       wm8580_unregister(wm8580);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -961,7 +948,7 @@ MODULE_DEVICE_TABLE(i2c, wm8580_i2c_id);
 
 static struct i2c_driver wm8580_i2c_driver = {
        .driver = {
-               .name = "wm8580",
+               .name = "wm8580-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8580_i2c_probe,
@@ -972,7 +959,7 @@ static struct i2c_driver wm8580_i2c_driver = {
 
 static int __init wm8580_modinit(void)
 {
-       int ret;
+       int ret = 0;
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8580_i2c_driver);
@@ -981,7 +968,7 @@ static int __init wm8580_modinit(void)
        }
 #endif
 
-       return 0;
+       return ret;
 }
 module_init(wm8580_modinit);
 
index 0dfb5ddde6a2a700fe4aacb878ae9def6af73777..1d34656d0dcb1b8711b2996d25857cb8c1f5d672 100644 (file)
 #define WM8580_PLLB  2
 
 #define WM8580_MCLK       1
-#define WM8580_DAC_CLKSEL 2
-#define WM8580_CLKOUTSRC  3
+#define WM8580_CLKOUTSRC  2
 
-#define WM8580_CLKSRC_MCLK 1
-#define WM8580_CLKSRC_PLLA 2
-#define WM8580_CLKSRC_PLLB 3
-#define WM8580_CLKSRC_OSC  4
-#define WM8580_CLKSRC_NONE 5
+#define WM8580_CLKSRC_MCLK    1
+#define WM8580_CLKSRC_PLLA    2
+#define WM8580_CLKSRC_PLLB    3
+#define WM8580_CLKSRC_OSC     4
+#define WM8580_CLKSRC_NONE    5
+#define WM8580_CLKSRC_ADCMCLK 6
 
 #define WM8580_DAI_PAIFRX 0
 #define WM8580_DAI_PAIFTX 1
 
-extern struct snd_soc_dai wm8580_dai[];
-extern struct snd_soc_codec_device soc_codec_dev_wm8580;
-
 #endif
 
index e2dba07f0260d77279e32b9a433220465d6071f9..f8d9c60e7fad06d65ca69ed28d68eb4d78393f56 100644 (file)
 
 #include "wm8711.h"
 
-static struct snd_soc_codec *wm8711_codec;
-
 /* codec private data */
 struct wm8711_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type bus_type;
        u16 reg_cache[WM8711_CACHEREGNUM];
        unsigned int sysclk;
 };
@@ -163,7 +161,7 @@ static int wm8711_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_codec *codec = dai->codec;
-       struct wm8711_priv *wm8711 = snd_soc_codec_get_drvdata(codec);
+       struct wm8711_priv *wm8711 =  snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8711_IFACE) & 0xfffc;
        int i = get_coeff(wm8711->sysclk, params_rate(params));
        u16 srate = (coeff_div[i].sr << 2) |
@@ -227,7 +225,7 @@ static int wm8711_set_dai_sysclk(struct snd_soc_dai *codec_dai,
                int clk_id, unsigned int freq, int dir)
 {
        struct snd_soc_codec *codec = codec_dai->codec;
-       struct wm8711_priv *wm8711 = snd_soc_codec_get_drvdata(codec);
+       struct wm8711_priv *wm8711 =  snd_soc_codec_get_drvdata(codec);
 
        switch (freq) {
        case 11289600:
@@ -338,8 +336,8 @@ static struct snd_soc_dai_ops wm8711_ops = {
        .set_fmt = wm8711_set_dai_fmt,
 };
 
-struct snd_soc_dai wm8711_dai = {
-       .name = "WM8711",
+static struct snd_soc_dai_driver wm8711_dai = {
+       .name = "wm8711-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -349,22 +347,16 @@ struct snd_soc_dai wm8711_dai = {
        },
        .ops = &wm8711_ops,
 };
-EXPORT_SYMBOL_GPL(wm8711_dai);
 
-static int wm8711_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8711_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        snd_soc_write(codec, WM8711_ACTIVE, 0x0);
        wm8711_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8711_resume(struct platform_device *pdev)
+static int wm8711_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -380,99 +372,23 @@ static int wm8711_resume(struct platform_device *pdev)
        return 0;
 }
 
-static int wm8711_probe(struct platform_device *pdev)
+static int wm8711_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8711_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8711_codec;
-       codec = wm8711_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8711_snd_controls,
-                            ARRAY_SIZE(wm8711_snd_controls));
-       wm8711_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8711_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8711 = {
-       .probe =        wm8711_probe,
-       .remove =       wm8711_remove,
-       .suspend =      wm8711_suspend,
-       .resume =       wm8711_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8711);
-
-static int wm8711_register(struct wm8711_priv *wm8711,
-                          enum snd_soc_control_type control)
-{
-       int ret;
-       struct snd_soc_codec *codec = &wm8711->codec;
-       u16 reg;
-
-       if (wm8711_codec) {
-               dev_err(codec->dev, "Another WM8711 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8711);
-       codec->name = "WM8711";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8711_set_bias_level;
-       codec->dai = &wm8711_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8711_CACHEREGNUM;
-       codec->reg_cache = &wm8711->reg_cache;
-
-       memcpy(codec->reg_cache, wm8711_reg, sizeof(wm8711_reg));
+       struct wm8711_priv *wm8711 = snd_soc_codec_get_drvdata(codec);
+       int ret, reg;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8711->bus_type);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = wm8711_reset(codec);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
+               return ret;
        }
 
-       wm8711_dai.dev = codec->dev;
-
        wm8711_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        /* Latch the update bits */
@@ -481,69 +397,62 @@ static int wm8711_register(struct wm8711_priv *wm8711,
        reg = snd_soc_read(codec, WM8711_ROUT1V);
        snd_soc_write(codec, WM8711_ROUT1V, reg | 0x0100);
 
-       wm8711_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm8711_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
+       snd_soc_add_controls(codec, wm8711_snd_controls,
+                            ARRAY_SIZE(wm8711_snd_controls));
+       wm8711_add_widgets(codec);
 
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8711);
        return ret;
+
 }
 
-static void wm8711_unregister(struct wm8711_priv *wm8711)
+/* power down chip */
+static int wm8711_remove(struct snd_soc_codec *codec)
 {
-       wm8711_set_bias_level(&wm8711->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8711_dai);
-       snd_soc_unregister_codec(&wm8711->codec);
-       kfree(wm8711);
-       wm8711_codec = NULL;
+       wm8711_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8711 = {
+       .probe =        wm8711_probe,
+       .remove =       wm8711_remove,
+       .suspend =      wm8711_suspend,
+       .resume =       wm8711_resume,
+       .set_bias_level = wm8711_set_bias_level,
+       .reg_cache_size = sizeof(wm8711_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8711_reg,
+};
+
 #if defined(CONFIG_SPI_MASTER)
 static int __devinit wm8711_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_codec *codec;
        struct wm8711_priv *wm8711;
+       int ret;
 
        wm8711 = kzalloc(sizeof(struct wm8711_priv), GFP_KERNEL);
        if (wm8711 == NULL)
                return -ENOMEM;
 
-       codec = &wm8711->codec;
-       codec->control_data = spi;
-       codec->dev = &spi->dev;
+       spi_set_drvdata(spi, wm8711);
+       wm8711->bus_type = SND_SOC_SPI;
 
-       dev_set_drvdata(&spi->dev, wm8711);
-
-       return wm8711_register(wm8711, SND_SOC_SPI);
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8711, &wm8711_dai, 1);
+       if (ret < 0)
+               kfree(wm8711);
+       return ret;
 }
 
 static int __devexit wm8711_spi_remove(struct spi_device *spi)
 {
-       struct wm8711_priv *wm8711 = dev_get_drvdata(&spi->dev);
-
-       wm8711_unregister(wm8711);
-
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
 static struct spi_driver wm8711_spi_driver = {
        .driver = {
-               .name   = "wm8711",
+               .name   = "wm8711-codec",
                .bus    = &spi_bus_type,
                .owner  = THIS_MODULE,
        },
@@ -553,31 +462,30 @@ static struct spi_driver wm8711_spi_driver = {
 #endif /* CONFIG_SPI_MASTER */
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-static __devinit int wm8711_i2c_probe(struct i2c_client *i2c,
+static __devinit int wm8711_i2c_probe(struct i2c_client *client,
                                      const struct i2c_device_id *id)
 {
        struct wm8711_priv *wm8711;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8711 = kzalloc(sizeof(struct wm8711_priv), GFP_KERNEL);
        if (wm8711 == NULL)
                return -ENOMEM;
 
-       codec = &wm8711->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
-       i2c_set_clientdata(i2c, wm8711);
-       codec->control_data = i2c;
+       i2c_set_clientdata(client, wm8711);
+       wm8711->bus_type = SND_SOC_I2C;
 
-       codec->dev = &i2c->dev;
-
-       return wm8711_register(wm8711, SND_SOC_I2C);
+       ret =  snd_soc_register_codec(&client->dev,
+                       &soc_codec_dev_wm8711, &wm8711_dai, 1);
+       if (ret < 0)
+               kfree(wm8711);
+       return ret;
 }
 
 static __devexit int wm8711_i2c_remove(struct i2c_client *client)
 {
-       struct wm8711_priv *wm8711 = i2c_get_clientdata(client);
-       wm8711_unregister(wm8711);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -589,7 +497,7 @@ MODULE_DEVICE_TABLE(i2c, wm8711_i2c_id);
 
 static struct i2c_driver wm8711_i2c_driver = {
        .driver = {
-               .name = "WM8711 I2C Codec",
+               .name = "wm8711-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8711_i2c_probe,
index 381e84a4381696699a9b796d6c9c125ddf0fa3ea..a61db985499f933e88736664510e90bfa1505e03 100644 (file)
@@ -36,7 +36,4 @@ struct wm8711_setup_data {
        unsigned short i2c_address;
 };
 
-extern struct snd_soc_dai wm8711_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8711;
-
 #endif
index 9d1df26281361ef9ed569e0b87a39d9a934f9254..7488082851191ce120a8a66fd8704b53613b8189 100644 (file)
@@ -23,7 +23,6 @@
 #include <sound/initval.h>
 #include <sound/soc.h>
 
-#include "wm8727.h"
 /*
  * Note this is a simple chip with no configuration interface, sample rate is
  * determined automatically by examining the Master clock and Bit clock ratios
@@ -33,8 +32,8 @@
                        SNDRV_PCM_RATE_192000)
 
 
-struct snd_soc_dai wm8727_dai = {
-       .name = "WM8727",
+static struct snd_soc_dai_driver wm8727_dai = {
+       .name = "wm8727-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -43,103 +42,18 @@ struct snd_soc_dai wm8727_dai = {
                .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
                },
 };
-EXPORT_SYMBOL_GPL(wm8727_dai);
 
-static struct snd_soc_codec *wm8727_codec;
+static struct snd_soc_codec_driver soc_codec_dev_wm8727;
 
-static int wm8727_soc_probe(struct platform_device *pdev)
+static __devinit int wm8727_probe(struct platform_device *pdev)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       int ret = 0;
-
-       BUG_ON(!wm8727_codec);
-
-       socdev->card->codec = wm8727_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8727: failed to create pcms\n");
-               goto pcm_err;
-       }
-
-       return ret;
-
-pcm_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
-       return ret;
-}
-
-static int wm8727_soc_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8727 = {
-       .probe =        wm8727_soc_probe,
-       .remove =       wm8727_soc_remove,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8727);
-
-
-static __devinit int wm8727_platform_probe(struct platform_device *pdev)
-{
-       struct snd_soc_codec *codec;
-       int ret;
-
-       if (wm8727_codec) {
-               dev_err(&pdev->dev, "Another WM8727 is registered\n");
-               return -EBUSY;
-       }
-
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-       wm8727_codec = codec;
-
-       platform_set_drvdata(pdev, codec);
-
-       mutex_init(&codec->mutex);
-       codec->dev = &pdev->dev;
-       codec->name = "WM8727";
-       codec->owner = THIS_MODULE;
-       codec->dai = &wm8727_dai;
-       codec->num_dai = 1;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       wm8727_dai.dev = &pdev->dev;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "Failed to register CODEC: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm8727_dai);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(codec);
-       return ret;
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_wm8727, &wm8727_dai, 1);
 }
 
-static int __devexit wm8727_platform_remove(struct platform_device *pdev)
+static int __devexit wm8727_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&wm8727_dai);
-       snd_soc_unregister_codec(platform_get_drvdata(pdev));
+       snd_soc_unregister_codec(&pdev->dev);
        return 0;
 }
 
@@ -149,8 +63,8 @@ static struct platform_driver wm8727_codec_driver = {
                        .owner = THIS_MODULE,
        },
 
-       .probe = wm8727_platform_probe,
-       .remove = __devexit_p(wm8727_platform_remove),
+       .probe = wm8727_probe,
+       .remove = __devexit_p(wm8727_remove),
 };
 
 static int __init wm8727_init(void)
diff --git a/sound/soc/codecs/wm8727.h b/sound/soc/codecs/wm8727.h
deleted file mode 100644 (file)
index ee19aa7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * wm8727.h
- *
- *  Created on: 15-Oct-2009
- *      Author: neil.jones@imgtec.com
- *
- * Copyright (C) 2009 Imagination Technologies Ltd.
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- */
-
-#ifndef WM8727_H_
-#define WM8727_H_
-
-extern struct snd_soc_dai wm8727_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8727;
-
-#endif /* WM8727_H_ */
index 34be2d2b69eff81ab96f8b243d5541a7b71f2b73..5e5a1625194c453841ecd2ce431064521595c8bf 100644 (file)
@@ -29,8 +29,6 @@
 
 #include "wm8728.h"
 
-struct snd_soc_codec_device soc_codec_dev_wm8728;
-
 /*
  * We can't read the WM8728 register space so we cache them instead.
  * Note that the defaults here aren't the physical defaults, we latch
@@ -44,6 +42,11 @@ static const u16 wm8728_reg_defaults[] = {
        0x100,
 };
 
+/* codec private data */
+struct wm8728_priv {
+       enum snd_soc_control_type control_type;
+};
+
 static const DECLARE_TLV_DB_SCALE(wm8728_tlv, -12750, 50, 1);
 
 static const struct snd_kcontrol_new wm8728_snd_controls[] = {
@@ -96,8 +99,7 @@ static int wm8728_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 dac = snd_soc_read(codec, WM8728_DACCTL);
 
        dac &= ~0x18;
@@ -210,8 +212,8 @@ static struct snd_soc_dai_ops wm8728_dai_ops = {
        .set_fmt        = wm8728_set_dai_fmt,
 };
 
-struct snd_soc_dai wm8728_dai = {
-       .name = "WM8728",
+static struct snd_soc_dai_driver wm8728_dai = {
+       .name = "wm8728-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -221,63 +223,31 @@ struct snd_soc_dai wm8728_dai = {
        },
        .ops = &wm8728_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8728_dai);
 
-static int wm8728_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8728_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8728_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8728_resume(struct platform_device *pdev)
+static int wm8728_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8728_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
 }
 
-/*
- * initialise the WM8728 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int wm8728_init(struct snd_soc_device *socdev,
-                      enum snd_soc_control_type control)
+static int wm8728_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int ret = 0;
-
-       codec->name = "WM8728";
-       codec->owner = THIS_MODULE;
-       codec->set_bias_level = wm8728_set_bias_level;
-       codec->dai = &wm8728_dai;
-       codec->num_dai = 1;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->reg_cache_size = ARRAY_SIZE(wm8728_reg_defaults);
-       codec->reg_cache = kmemdup(wm8728_reg_defaults,
-                                  sizeof(wm8728_reg_defaults),
-                                  GFP_KERNEL);
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
+       struct wm8728_priv *wm8728 = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8728->control_type);
        if (ret < 0) {
                printk(KERN_ERR "wm8728: failed to configure cache I/O: %d\n",
                       ret);
-               goto err;
-       }
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8728: failed to create pcms\n");
-               goto err;
+               return ret;
        }
 
        /* power on device */
@@ -288,128 +258,55 @@ static int wm8728_init(struct snd_soc_device *socdev,
        wm8728_add_widgets(codec);
 
        return ret;
-
-err:
-       kfree(codec->reg_cache);
-       return ret;
 }
 
-static struct snd_soc_device *wm8728_socdev;
-
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-
-/*
- * WM8728 2 wire address is determined by GPIO5
- * state during powerup.
- *    low  = 0x1a
- *    high = 0x1b
- */
-
-static int wm8728_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static int wm8728_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = wm8728_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int ret;
-
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
-
-       ret = wm8728_init(socdev, SND_SOC_I2C);
-       if (ret < 0)
-               pr_err("failed to initialise WM8728\n");
-
-       return ret;
-}
-
-static int wm8728_i2c_remove(struct i2c_client *client)
-{
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       kfree(codec->reg_cache);
+       wm8728_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static const struct i2c_device_id wm8728_i2c_id[] = {
-       { "wm8728", 0 },
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, wm8728_i2c_id);
-
-static struct i2c_driver wm8728_i2c_driver = {
-       .driver = {
-               .name = "WM8728 I2C Codec",
-               .owner = THIS_MODULE,
-       },
-       .probe =    wm8728_i2c_probe,
-       .remove =   wm8728_i2c_remove,
-       .id_table = wm8728_i2c_id,
+static struct snd_soc_codec_driver soc_codec_dev_wm8728 = {
+       .probe =        wm8728_probe,
+       .remove =       wm8728_remove,
+       .suspend =      wm8728_suspend,
+       .resume =       wm8728_resume,
+       .set_bias_level = wm8728_set_bias_level,
+       .reg_cache_size = sizeof(wm8728_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8728_reg_defaults,
 };
 
-static int wm8728_add_i2c_device(struct platform_device *pdev,
-                                const struct wm8728_setup_data *setup)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-       int ret;
-
-       ret = i2c_add_driver(&wm8728_i2c_driver);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "can't add i2c driver\n");
-               return ret;
-       }
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = setup->i2c_address;
-       strlcpy(info.type, "wm8728", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(setup->i2c_bus);
-       if (!adapter) {
-               dev_err(&pdev->dev, "can't get i2c adapter %d\n",
-                       setup->i2c_bus);
-               goto err_driver;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               goto err_driver;
-       }
-
-       return 0;
-
-err_driver:
-       i2c_del_driver(&wm8728_i2c_driver);
-       return -ENODEV;
-}
-#endif
-
 #if defined(CONFIG_SPI_MASTER)
 static int __devinit wm8728_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_device *socdev = wm8728_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8728_priv *wm8728;
        int ret;
 
-       codec->control_data = spi;
+       wm8728 = kzalloc(sizeof(struct wm8728_priv), GFP_KERNEL);
+       if (wm8728 == NULL)
+               return -ENOMEM;
 
-       ret = wm8728_init(socdev, SND_SOC_SPI);
-       if (ret < 0)
-               dev_err(&spi->dev, "failed to initialise WM8728\n");
+       wm8728->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8728);
 
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8728, &wm8728_dai, 1);
+       if (ret < 0)
+               kfree(wm8728);
        return ret;
 }
 
 static int __devexit wm8728_spi_remove(struct spi_device *spi)
 {
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
 static struct spi_driver wm8728_spi_driver = {
        .driver = {
-               .name   = "wm8728",
+               .name   = "wm8728-codec",
                .bus    = &spi_bus_type,
                .owner  = THIS_MODULE,
        },
@@ -418,85 +315,80 @@ static struct spi_driver wm8728_spi_driver = {
 };
 #endif /* CONFIG_SPI_MASTER */
 
-static int wm8728_probe(struct platform_device *pdev)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8728_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct wm8728_setup_data *setup;
-       struct snd_soc_codec *codec;
-       int ret = 0;
+       struct wm8728_priv *wm8728;
+       int ret;
 
-       setup = socdev->codec_data;
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
+       wm8728 = kzalloc(sizeof(struct wm8728_priv), GFP_KERNEL);
+       if (wm8728 == NULL)
                return -ENOMEM;
 
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
+       i2c_set_clientdata(i2c, wm8728);
+       wm8728->control_type = SND_SOC_I2C;
+
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8728, &wm8728_dai, 1);
+       if (ret < 0)
+               kfree(wm8728);
+       return ret;
+}
+
+static __devexit int wm8728_i2c_remove(struct i2c_client *client)
+{
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
+       return 0;
+}
 
-       wm8728_socdev = socdev;
-       ret = -ENODEV;
+static const struct i2c_device_id wm8728_i2c_id[] = {
+       { "wm8728", 0 },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, wm8728_i2c_id);
+
+static struct i2c_driver wm8728_i2c_driver = {
+       .driver = {
+               .name = "wm8728-codec",
+               .owner = THIS_MODULE,
+       },
+       .probe =    wm8728_i2c_probe,
+       .remove =   __devexit_p(wm8728_i2c_remove),
+       .id_table = wm8728_i2c_id,
+};
+#endif
 
+static int __init wm8728_modinit(void)
+{
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       if (setup->i2c_address) {
-               ret = wm8728_add_i2c_device(pdev, setup);
+       ret = i2c_add_driver(&wm8728_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8728 I2C driver: %d\n",
+                      ret);
        }
 #endif
 #if defined(CONFIG_SPI_MASTER)
-       if (setup->spi) {
-               ret = spi_register_driver(&wm8728_spi_driver);
-               if (ret != 0)
-                       printk(KERN_ERR "can't add spi driver");
+       ret = spi_register_driver(&wm8728_spi_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8728 SPI driver: %d\n",
+                      ret);
        }
 #endif
-
-       if (ret != 0)
-               kfree(codec);
-
        return ret;
 }
+module_init(wm8728_modinit);
 
-/* power down chip */
-static int wm8728_remove(struct platform_device *pdev)
+static void __exit wm8728_exit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               wm8728_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       i2c_unregister_device(codec->control_data);
        i2c_del_driver(&wm8728_i2c_driver);
 #endif
 #if defined(CONFIG_SPI_MASTER)
        spi_unregister_driver(&wm8728_spi_driver);
 #endif
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8728 = {
-       .probe =        wm8728_probe,
-       .remove =       wm8728_remove,
-       .suspend =      wm8728_suspend,
-       .resume =       wm8728_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8728);
-
-static int __init wm8728_modinit(void)
-{
-       return snd_soc_register_dai(&wm8728_dai);
-}
-module_init(wm8728_modinit);
-
-static void __exit wm8728_exit(void)
-{
-       snd_soc_unregister_dai(&wm8728_dai);
 }
 module_exit(wm8728_exit);
 
index d269c132474b7e0e2c44ad78182b45d21208dd7f..8aea362ffd47e2c7672937e5c5e89db4bd099c6b 100644 (file)
 #define WM8728_DACCTL    0x02
 #define WM8728_IFCTL     0x03
 
-struct wm8728_setup_data {
-       int            spi;
-       int            i2c_bus;
-       unsigned short i2c_address;
-};
-
-extern struct snd_soc_dai wm8728_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8728;
-
 #endif
index 0ab9b6355297d9116aa2f27045ac2c8005c42f4c..19844fc8cb1dfd8edf39e929853b573e68d25298 100644 (file)
@@ -32,9 +32,6 @@
 
 #include "wm8731.h"
 
-static struct snd_soc_codec *wm8731_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8731;
-
 #define WM8731_NUM_SUPPLIES 4
 static const char *wm8731_supply_names[WM8731_NUM_SUPPLIES] = {
        "AVDD",
@@ -45,7 +42,7 @@ static const char *wm8731_supply_names[WM8731_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct wm8731_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        struct regulator_bulk_data supplies[WM8731_NUM_SUPPLIES];
        u16 reg_cache[WM8731_CACHEREGNUM];
        unsigned int sysclk;
@@ -222,9 +219,7 @@ static int wm8731_hw_params(struct snd_pcm_substream *substream,
                            struct snd_pcm_hw_params *params,
                            struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = dai->codec;
        struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8731_IFACE) & 0xfff3;
        int i = get_coeff(wm8731->sysclk, params_rate(params));
@@ -252,9 +247,7 @@ static int wm8731_hw_params(struct snd_pcm_substream *substream,
 static int wm8731_pcm_prepare(struct snd_pcm_substream *substream,
                              struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = dai->codec;
 
        /* set active */
        snd_soc_write(codec, WM8731_ACTIVE, 0x0001);
@@ -265,9 +258,7 @@ static int wm8731_pcm_prepare(struct snd_pcm_substream *substream,
 static void wm8731_shutdown(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = dai->codec;
 
        /* deactivate */
        if (!codec->active) {
@@ -428,8 +419,8 @@ static struct snd_soc_dai_ops wm8731_dai_ops = {
        .set_fmt        = wm8731_set_dai_fmt,
 };
 
-struct snd_soc_dai wm8731_dai = {
-       .name = "WM8731",
+static struct snd_soc_dai_driver wm8731_dai = {
+       .name = "wm8731-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -445,24 +436,17 @@ struct snd_soc_dai wm8731_dai = {
        .ops = &wm8731_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8731_dai);
 
 #ifdef CONFIG_PM
-static int wm8731_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8731_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8731_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8731_resume(struct platform_device *pdev)
+static int wm8731_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8731_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
@@ -472,88 +456,17 @@ static int wm8731_resume(struct platform_device *pdev)
 #define wm8731_resume NULL
 #endif
 
-static int wm8731_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8731_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8731_codec;
-       codec = wm8731_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8731_snd_controls,
-                            ARRAY_SIZE(wm8731_snd_controls));
-       wm8731_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8731_remove(struct platform_device *pdev)
+static int wm8731_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8731 = {
-       .probe =        wm8731_probe,
-       .remove =       wm8731_remove,
-       .suspend =      wm8731_suspend,
-       .resume =       wm8731_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8731);
-
-static int wm8731_register(struct wm8731_priv *wm8731,
-                          enum snd_soc_control_type control)
-{
-       int ret, i;
-       struct snd_soc_codec *codec = &wm8731->codec;
-
-       if (wm8731_codec) {
-               dev_err(codec->dev, "Another WM8731 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8731);
-       codec->name = "WM8731";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8731_set_bias_level;
-       codec->dai = &wm8731_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8731_CACHEREGNUM;
-       codec->reg_cache = &wm8731->reg_cache;
+       struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0, i;
 
-       memcpy(codec->reg_cache, wm8731_reg, sizeof(wm8731_reg));
+       codec->bias_level = SND_SOC_BIAS_OFF,
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8731->control_type);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        for (i = 0; i < ARRAY_SIZE(wm8731->supplies); i++)
@@ -563,7 +476,7 @@ static int wm8731_register(struct wm8731_priv *wm8731,
                                 wm8731->supplies);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(wm8731->supplies),
@@ -579,8 +492,6 @@ static int wm8731_register(struct wm8731_priv *wm8731,
                goto err_regulator_enable;
        }
 
-       wm8731_dai.dev = codec->dev;
-
        wm8731_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        /* Latch the update bits */
@@ -592,78 +503,78 @@ static int wm8731_register(struct wm8731_priv *wm8731,
        /* Disable bypass path by default */
        snd_soc_update_bits(codec, WM8731_APANA, 0x4, 0);
 
-       wm8731_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_regulator_enable;
-       }
-
-       ret = snd_soc_register_dai(&wm8731_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8731_snd_controls,
+                            ARRAY_SIZE(wm8731_snd_controls));
+       wm8731_add_widgets(codec);
 
        /* Regulators will have been enabled by bias management */
        regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
 
        return 0;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
 err_regulator_enable:
        regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
 err_regulator_get:
        regulator_bulk_free(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
-err:
+
        kfree(wm8731);
        return ret;
 }
 
-static void wm8731_unregister(struct wm8731_priv *wm8731)
+/* power down chip */
+static int wm8731_remove(struct snd_soc_codec *codec)
 {
-       wm8731_set_bias_level(&wm8731->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8731_dai);
-       snd_soc_unregister_codec(&wm8731->codec);
+       struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
+
+       wm8731_set_bias_level(codec, SND_SOC_BIAS_OFF);
+
+       regulator_bulk_disable(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
        regulator_bulk_free(ARRAY_SIZE(wm8731->supplies), wm8731->supplies);
-       kfree(wm8731);
-       wm8731_codec = NULL;
+
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8731 = {
+       .probe =        wm8731_probe,
+       .remove =       wm8731_remove,
+       .suspend =      wm8731_suspend,
+       .resume =       wm8731_resume,
+       .set_bias_level = wm8731_set_bias_level,
+       .reg_cache_size = sizeof(wm8731_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8731_reg,
+};
+
 #if defined(CONFIG_SPI_MASTER)
 static int __devinit wm8731_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_codec *codec;
        struct wm8731_priv *wm8731;
+       int ret;
 
        wm8731 = kzalloc(sizeof(struct wm8731_priv), GFP_KERNEL);
        if (wm8731 == NULL)
                return -ENOMEM;
 
-       codec = &wm8731->codec;
-       codec->control_data = spi;
-       codec->dev = &spi->dev;
-
-       dev_set_drvdata(&spi->dev, wm8731);
+       wm8731->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8731);
 
-       return wm8731_register(wm8731, SND_SOC_SPI);
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8731, &wm8731_dai, 1);
+       if (ret < 0)
+               kfree(wm8731);
+       return ret;
 }
 
 static int __devexit wm8731_spi_remove(struct spi_device *spi)
 {
-       struct wm8731_priv *wm8731 = dev_get_drvdata(&spi->dev);
-
-       wm8731_unregister(wm8731);
-
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
 static struct spi_driver wm8731_spi_driver = {
        .driver = {
-               .name   = "wm8731",
+               .name   = "wm8731-codec",
                .bus    = &spi_bus_type,
                .owner  = THIS_MODULE,
        },
@@ -677,26 +588,26 @@ static __devinit int wm8731_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8731_priv *wm8731;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8731 = kzalloc(sizeof(struct wm8731_priv), GFP_KERNEL);
        if (wm8731 == NULL)
                return -ENOMEM;
 
-       codec = &wm8731->codec;
-
        i2c_set_clientdata(i2c, wm8731);
-       codec->control_data = i2c;
+       wm8731->control_type = SND_SOC_I2C;
 
-       codec->dev = &i2c->dev;
-
-       return wm8731_register(wm8731, SND_SOC_I2C);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8731, &wm8731_dai, 1);
+       if (ret < 0)
+               kfree(wm8731);
+       return ret;
 }
 
 static __devexit int wm8731_i2c_remove(struct i2c_client *client)
 {
-       struct wm8731_priv *wm8731 = i2c_get_clientdata(client);
-       wm8731_unregister(wm8731);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -708,7 +619,7 @@ MODULE_DEVICE_TABLE(i2c, wm8731_i2c_id);
 
 static struct i2c_driver wm8731_i2c_driver = {
        .driver = {
-               .name = "wm8731",
+               .name = "wm8731-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8731_i2c_probe,
@@ -719,7 +630,7 @@ static struct i2c_driver wm8731_i2c_driver = {
 
 static int __init wm8731_modinit(void)
 {
-       int ret;
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8731_i2c_driver);
        if (ret != 0) {
@@ -734,7 +645,7 @@ static int __init wm8731_modinit(void)
                       ret);
        }
 #endif
-       return 0;
+       return ret;
 }
 module_init(wm8731_modinit);
 
index cd7b806e8ad0b745db1116f40b1682733f8d1780..73a70e206ba9be98e27c446cc9638b56f22da46a 100644 (file)
@@ -34,7 +34,4 @@
 #define WM8731_SYSCLK  0
 #define WM8731_DAI             0
 
-extern struct snd_soc_dai wm8731_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8731;
-
 #endif
index b9ea8904ad4b2102a7f43f0b7655b0cd661290bf..782fe539662b9d840dde6543d484a25c50e100f1 100644 (file)
@@ -30,9 +30,6 @@
 
 #include "wm8741.h"
 
-static struct snd_soc_codec *wm8741_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8741;
-
 #define WM8741_NUM_SUPPLIES 2
 static const char *wm8741_supply_names[WM8741_NUM_SUPPLIES] = {
        "AVDD",
@@ -43,7 +40,7 @@ static const char *wm8741_supply_names[WM8741_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct wm8741_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        u16 reg_cache[WM8741_REGISTER_COUNT];
        struct regulator_bulk_data supplies[WM8741_NUM_SUPPLIES];
        unsigned int sysclk;
@@ -145,8 +142,7 @@ static int wm8741_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8741_FORMAT_CONTROL) & 0x1FC;
        int i;
@@ -314,7 +310,7 @@ static struct snd_soc_dai_ops wm8741_dai_ops = {
        .set_fmt        = wm8741_set_dai_fmt,
 };
 
-struct snd_soc_dai wm8741_dai = {
+static struct snd_soc_dai_driver wm8741_dai = {
        .name = "WM8741",
        .playback = {
                .stream_name = "Playback",
@@ -325,13 +321,10 @@ struct snd_soc_dai wm8741_dai = {
        },
        .ops = &wm8741_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8741_dai);
 
 #ifdef CONFIG_PM
-static int wm8741_resume(struct platform_device *pdev)
+static int wm8741_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        u16 *cache = codec->reg_cache;
        int i;
 
@@ -348,189 +341,103 @@ static int wm8741_resume(struct platform_device *pdev)
 #define wm8741_resume NULL
 #endif
 
-static int wm8741_probe(struct platform_device *pdev)
+static int wm8741_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
+       struct wm8741_priv *wm8741 = snd_soc_codec_get_drvdata(codec);
        int ret = 0;
 
-       if (wm8741_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8741->control_type);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
-       socdev->card->codec = wm8741_codec;
-       codec = wm8741_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       ret = wm8741_reset(codec);
        if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
+               dev_err(codec->dev, "Failed to issue reset\n");
+               return ret;
        }
 
+       /* Change some default settings - latch VU */
+       wm8741->reg_cache[WM8741_DACLLSB_ATTENUATION] |= WM8741_UPDATELL;
+       wm8741->reg_cache[WM8741_DACLMSB_ATTENUATION] |= WM8741_UPDATELM;
+       wm8741->reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERL;
+       wm8741->reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERM;
+
        snd_soc_add_controls(codec, wm8741_snd_controls,
                             ARRAY_SIZE(wm8741_snd_controls));
        wm8741_add_widgets(codec);
 
+       dev_dbg(codec->dev, "Successful registration\n");
        return ret;
-
-pcm_err:
-       return ret;
-}
-
-static int wm8741_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm8741 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm8741 = {
        .probe =        wm8741_probe,
-       .remove =       wm8741_remove,
        .resume =       wm8741_resume,
+       .reg_cache_size = sizeof(wm8741_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = &wm8741_reg_defaults,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8741);
 
-static int wm8741_register(struct wm8741_priv *wm8741,
-                          enum snd_soc_control_type control)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static int wm8741_i2c_probe(struct i2c_client *i2c,
+                           const struct i2c_device_id *id)
 {
-       int ret;
-       struct snd_soc_codec *codec = &wm8741->codec;
-       int i;
-
-       if (wm8741_codec) {
-               dev_err(codec->dev, "Another WM8741 is registered\n");
-               return -EINVAL;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
+       struct wm8741_priv *wm8741;
+       int ret, i;
 
-       snd_soc_codec_set_drvdata(codec, wm8741);
-       codec->name = "WM8741";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = NULL;
-       codec->dai = &wm8741_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8741_REGISTER_COUNT;
-       codec->reg_cache = &wm8741->reg_cache;
+       wm8741 = kzalloc(sizeof(struct wm8741_priv), GFP_KERNEL);
+       if (wm8741 == NULL)
+               return -ENOMEM;
 
        wm8741->rate_constraint.list = &wm8741->rate_constraint_list[0];
        wm8741->rate_constraint.count =
                ARRAY_SIZE(wm8741->rate_constraint_list);
 
-       memcpy(codec->reg_cache, wm8741_reg_defaults,
-               sizeof(wm8741->reg_cache));
-
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
        for (i = 0; i < ARRAY_SIZE(wm8741->supplies); i++)
                wm8741->supplies[i].supply = wm8741_supply_names[i];
 
-       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8741->supplies),
+       ret = regulator_bulk_get(&i2c->dev, ARRAY_SIZE(wm8741->supplies),
                                 wm8741->supplies);
        if (ret != 0) {
-               dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
+               dev_err(&i2c->dev, "Failed to request supplies: %d\n", ret);
                goto err;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(wm8741->supplies),
                                    wm8741->supplies);
        if (ret != 0) {
-               dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
+               dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret);
                goto err_get;
        }
 
-       ret = wm8741_reset(codec);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to issue reset\n");
-               goto err_enable;
-       }
-
-       wm8741_dai.dev = codec->dev;
-
-       /* Change some default settings - latch VU */
-       wm8741->reg_cache[WM8741_DACLLSB_ATTENUATION] |= WM8741_UPDATELL;
-       wm8741->reg_cache[WM8741_DACLMSB_ATTENUATION] |= WM8741_UPDATELM;
-       wm8741->reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERL;
-       wm8741->reg_cache[WM8741_DACRLSB_ATTENUATION] |= WM8741_UPDATERM;
-
-       wm8741_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               return ret;
-       }
-
-       ret = snd_soc_register_dai(&wm8741_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
-               return ret;
-       }
+       i2c_set_clientdata(i2c, wm8741);
+       wm8741->control_type = SND_SOC_I2C;
 
-       dev_dbg(codec->dev, "Successful registration\n");
-       return 0;
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8741, &wm8741_dai, 1);
+       if (ret < 0)
+               goto err_enable;
+       return ret;
 
 err_enable:
        regulator_bulk_disable(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
 
 err_get:
        regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
-
 err:
        kfree(wm8741);
        return ret;
 }
 
-static void wm8741_unregister(struct wm8741_priv *wm8741)
-{
-       regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
-
-       snd_soc_unregister_dai(&wm8741_dai);
-       snd_soc_unregister_codec(&wm8741->codec);
-       kfree(wm8741);
-       wm8741_codec = NULL;
-}
-
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-static __devinit int wm8741_i2c_probe(struct i2c_client *i2c,
-                                     const struct i2c_device_id *id)
-{
-       struct wm8741_priv *wm8741;
-       struct snd_soc_codec *codec;
-
-       wm8741 = kzalloc(sizeof(struct wm8741_priv), GFP_KERNEL);
-       if (wm8741 == NULL)
-               return -ENOMEM;
-
-       codec = &wm8741->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
-       i2c_set_clientdata(i2c, wm8741);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
-
-       return wm8741_register(wm8741, SND_SOC_I2C);
-}
-
-static __devexit int wm8741_i2c_remove(struct i2c_client *client)
+static int wm8741_i2c_remove(struct i2c_client *client)
 {
        struct wm8741_priv *wm8741 = i2c_get_clientdata(client);
-       wm8741_unregister(wm8741);
+
+       snd_soc_unregister_codec(&client->dev);
+       regulator_bulk_free(ARRAY_SIZE(wm8741->supplies), wm8741->supplies);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -540,29 +447,29 @@ static const struct i2c_device_id wm8741_i2c_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, wm8741_i2c_id);
 
-
 static struct i2c_driver wm8741_i2c_driver = {
        .driver = {
-               .name = "WM8741",
+               .name = "wm8741-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8741_i2c_probe,
-       .remove =   __devexit_p(wm8741_i2c_remove),
+       .remove =   wm8741_i2c_remove,
        .id_table = wm8741_i2c_id,
 };
 #endif
 
 static int __init wm8741_modinit(void)
 {
-       int ret;
+       int ret = 0;
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8741_i2c_driver);
        if (ret != 0) {
-               printk(KERN_ERR "Failed to register WM8741 I2C driver: %d\n",
-                      ret);
+               pr_err("Failed to register WM8741 I2C driver: %d\n", ret);
        }
 #endif
-       return 0;
+
+       return ret;
 }
 module_init(wm8741_modinit);
 
index fdef6ecd1f6f14db43fe2a59b4f53e9d937d5b98..56c1b1d4a68100f52fcf6ec61363a9140e88e63a 100644 (file)
 
 #define  WM8741_SYSCLK 0
 
-extern struct snd_soc_dai wm8741_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8741;
-
 #endif
index e2c05e3e323a0bb24010d55bf7e8800c1b1c07c0..92d4b2aef93b54a4d31af6e6f85cecd80bda4e9f 100644 (file)
@@ -52,7 +52,7 @@ static const u16 wm8750_reg[] = {
 /* codec private data */
 struct wm8750_priv {
        unsigned int sysclk;
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        u16 reg_cache[ARRAY_SIZE(wm8750_reg)];
 };
 
@@ -560,8 +560,7 @@ static int wm8750_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8750_priv *wm8750 = snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8750_IFACE) & 0x1f3;
        u16 srate = snd_soc_read(codec, WM8750_SRATE) & 0x1c0;
@@ -649,8 +648,8 @@ static struct snd_soc_dai_ops wm8750_dai_ops = {
        .set_sysclk     = wm8750_set_dai_sysclk,
 };
 
-struct snd_soc_dai wm8750_dai = {
-       .name = "WM8750",
+static struct snd_soc_dai_driver wm8750_dai = {
+       .name = "wm8750-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -665,21 +664,15 @@ struct snd_soc_dai wm8750_dai = {
                .formats = WM8750_FORMATS,},
        .ops = &wm8750_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8750_dai);
 
-static int wm8750_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8750_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8750_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8750_resume(struct platform_device *pdev)
+static int wm8750_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -698,100 +691,21 @@ static int wm8750_resume(struct platform_device *pdev)
        return 0;
 }
 
-static struct snd_soc_codec *wm8750_codec;
-
-static int wm8750_probe(struct platform_device *pdev)
+static int wm8750_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (!wm8750_codec) {
-               dev_err(&pdev->dev, "WM8750 codec not yet registered\n");
-               return -EINVAL;
-       }
-
-       socdev->card->codec = wm8750_codec;
-       codec = wm8750_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8750: failed to create pcms\n");
-               goto err;
-       }
-
-       snd_soc_add_controls(codec, wm8750_snd_controls,
-                               ARRAY_SIZE(wm8750_snd_controls));
-       wm8750_add_widgets(codec);
-
-       return 0;
-
-err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8750_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8750 = {
-       .probe          = wm8750_probe,
-       .remove         = wm8750_remove,
-       .suspend        = wm8750_suspend,
-       .resume         = wm8750_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8750);
-
-/*
- * initialise the WM8750 driver
- * register the mixer and dsp interfaces with the kernel
- */
-static int wm8750_register(struct wm8750_priv *wm8750,
-                       enum snd_soc_control_type control)
-{
-       struct snd_soc_codec *codec = &wm8750->codec;
-       int reg, ret = 0;
-
-       if (wm8750_codec) {
-               dev_err(codec->dev, "Multiple WM8750 devices not supported\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "WM8750";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_STANDBY;
-       codec->set_bias_level = wm8750_set_bias_level;
-       codec->dai = &wm8750_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm8750->reg_cache) + 1;
-       codec->reg_cache = &wm8750->reg_cache;
-       snd_soc_codec_set_drvdata(codec, wm8750);
-
-       memcpy(codec->reg_cache, wm8750_reg, sizeof(wm8750->reg_cache));
+       struct wm8750_priv *wm8750 = snd_soc_codec_get_drvdata(codec);
+       int reg, ret;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8750->control_type);
        if (ret < 0) {
                printk(KERN_ERR "wm8750: failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = wm8750_reset(codec);
        if (ret < 0) {
                printk(KERN_ERR "wm8750: failed to reset: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        /* charge output caps */
@@ -815,150 +729,131 @@ static int wm8750_register(struct wm8750_priv *wm8750,
        reg = snd_soc_read(codec, WM8750_RINVOL);
        snd_soc_write(codec, WM8750_RINVOL, reg | 0x0100);
 
-       wm8750_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dais(&wm8750_dai, 1);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8750);
+       snd_soc_add_controls(codec, wm8750_snd_controls,
+                               ARRAY_SIZE(wm8750_snd_controls));
+       wm8750_add_widgets(codec);
        return ret;
 }
 
-static void wm8750_unregister(struct wm8750_priv *wm8750)
+static int wm8750_remove(struct snd_soc_codec *codec)
 {
-       wm8750_set_bias_level(&wm8750->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dais(&wm8750_dai, 1);
-       snd_soc_unregister_codec(&wm8750->codec);
-       kfree(wm8750);
-       wm8750_codec = NULL;
+       wm8750_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-
-/*
- * WM8750 2 wire address is determined by GPIO5
- * state during powerup.
- *    low  = 0x1a
- *    high = 0x1b
- */
+static struct snd_soc_codec_driver soc_codec_dev_wm8750 = {
+       .probe =        wm8750_probe,
+       .remove =       wm8750_remove,
+       .suspend =      wm8750_suspend,
+       .resume =       wm8750_resume,
+       .set_bias_level = wm8750_set_bias_level,
+       .reg_cache_size = sizeof(wm8750_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8750_reg,
+};
 
-static int wm8750_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+#if defined(CONFIG_SPI_MASTER)
+static int __devinit wm8750_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_codec *codec;
        struct wm8750_priv *wm8750;
+       int ret;
 
        wm8750 = kzalloc(sizeof(struct wm8750_priv), GFP_KERNEL);
        if (wm8750 == NULL)
                return -ENOMEM;
 
-       codec = &wm8750->codec;
-       codec->control_data = i2c;
-       i2c_set_clientdata(i2c, wm8750);
-
-       codec->dev = &i2c->dev;
+       wm8750->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8750);
 
-       return wm8750_register(wm8750, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8750, &wm8750_dai, 1);
+       if (ret < 0)
+               kfree(wm8750);
+       return ret;
 }
 
-static int wm8750_i2c_remove(struct i2c_client *client)
+static int __devexit wm8750_spi_remove(struct spi_device *spi)
 {
-       struct wm8750_priv *wm8750 = i2c_get_clientdata(client);
-       wm8750_unregister(wm8750);
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
-static const struct i2c_device_id wm8750_i2c_id[] = {
-       { "wm8750", 0 },
-       { "wm8987", 0 }, /* WM8987 is register compatible with WM8750 */
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, wm8750_i2c_id);
-
-static struct i2c_driver wm8750_i2c_driver = {
+static struct spi_driver wm8750_spi_driver = {
        .driver = {
-               .name = "WM8750 I2C Codec",
-               .owner = THIS_MODULE,
+               .name   = "wm8750-codec",
+               .bus    = &spi_bus_type,
+               .owner  = THIS_MODULE,
        },
-       .probe =    wm8750_i2c_probe,
-       .remove =   wm8750_i2c_remove,
-       .id_table = wm8750_i2c_id,
+       .probe          = wm8750_spi_probe,
+       .remove         = __devexit_p(wm8750_spi_remove),
 };
-#endif
+#endif /* CONFIG_SPI_MASTER */
 
-#if defined(CONFIG_SPI_MASTER)
-static int __devinit wm8750_spi_probe(struct spi_device *spi)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8750_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_codec *codec;
        struct wm8750_priv *wm8750;
+       int ret;
 
        wm8750 = kzalloc(sizeof(struct wm8750_priv), GFP_KERNEL);
        if (wm8750 == NULL)
                return -ENOMEM;
 
-       codec = &wm8750->codec;
-       codec->control_data = spi;
-       codec->dev = &spi->dev;
-
-       dev_set_drvdata(&spi->dev, wm8750);
+       i2c_set_clientdata(i2c, wm8750);
+       wm8750->control_type = SND_SOC_I2C;
 
-       return wm8750_register(wm8750, SND_SOC_SPI);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8750, &wm8750_dai, 1);
+       if (ret < 0)
+               kfree(wm8750);
+       return ret;
 }
 
-static int __devexit wm8750_spi_remove(struct spi_device *spi)
+static __devexit int wm8750_i2c_remove(struct i2c_client *client)
 {
-       struct wm8750_priv *wm8750 = dev_get_drvdata(&spi->dev);
-       wm8750_unregister(wm8750);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
-static const struct spi_device_id wm8750_spi_id[] = {
+static const struct i2c_device_id wm8750_i2c_id[] = {
        { "wm8750", 0 },
        { "wm8987", 0 },
        { }
 };
-MODULE_DEVICE_TABLE(spi, wm8750_spi_id);
+MODULE_DEVICE_TABLE(i2c, wm8750_i2c_id);
 
-static struct spi_driver wm8750_spi_driver = {
+static struct i2c_driver wm8750_i2c_driver = {
        .driver = {
-               .name   = "WM8750 SPI Codec",
-               .bus    = &spi_bus_type,
-               .owner  = THIS_MODULE,
+               .name = "wm8750-codec",
+               .owner = THIS_MODULE,
        },
-       .probe          = wm8750_spi_probe,
-       .remove         = __devexit_p(wm8750_spi_remove),
-       .id_table       = wm8750_spi_id,
+       .probe =    wm8750_i2c_probe,
+       .remove =   __devexit_p(wm8750_i2c_remove),
+       .id_table = wm8750_i2c_id,
 };
 #endif
 
 static int __init wm8750_modinit(void)
 {
-       int ret;
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8750_i2c_driver);
-       if (ret != 0)
-               pr_err("Failed to register WM8750 I2C driver: %d\n", ret);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8750 I2C driver: %d\n",
+                      ret);
+       }
 #endif
 #if defined(CONFIG_SPI_MASTER)
        ret = spi_register_driver(&wm8750_spi_driver);
-       if (ret != 0)
-               pr_err("Failed to register WM8750 SPI driver: %d\n", ret);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8750 SPI driver: %d\n",
+                      ret);
+       }
 #endif
-       return 0;
+       return ret;
 }
 module_init(wm8750_modinit);
 
index 1dc100e19cfe3076019a4c564999f4e061844b4d..121427c047fbfd267cbf2fd2f44f588a6b5f6ff6 100644 (file)
 
 #define WM8750_SYSCLK  0
 
-struct wm8750_setup_data {
-       int spi;
-       int i2c_bus;
-       unsigned short i2c_address;
-};
-
-extern struct snd_soc_dai wm8750_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8750;
-
 #endif
index b59f349c52184fc9bf83a975f8e921f2fda92632..484423248c2633176431b39e2f50257c96c06166 100644 (file)
@@ -57,7 +57,7 @@ module_param(caps_charge, int, 0);
 MODULE_PARM_DESC(caps_charge, "WM8753 cap charge time (msecs)");
 
 static void wm8753_set_dai_mode(struct snd_soc_codec *codec,
-       unsigned int mode);
+               struct snd_soc_dai *dai, unsigned int hifi);
 
 /*
  * wm8753 register cache
@@ -85,10 +85,11 @@ static const u16 wm8753_reg[] = {
 
 /* codec private data */
 struct wm8753_priv {
+       enum snd_soc_control_type control_type;
        unsigned int sysclk;
        unsigned int pcmclk;
-       struct snd_soc_codec codec;
        u16 reg_cache[ARRAY_SIZE(wm8753_reg)];
+       int dai_func;
 };
 
 /*
@@ -228,6 +229,7 @@ static int wm8753_set_dai(struct snd_kcontrol *kcontrol,
 {
        struct snd_soc_codec *codec =  snd_kcontrol_chip(kcontrol);
        int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL);
+       struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
 
        if (((mode & 0xc) >> 2) == ucontrol->value.integer.value[0])
                return 0;
@@ -235,8 +237,7 @@ static int wm8753_set_dai(struct snd_kcontrol *kcontrol,
        mode &= 0xfff3;
        mode |= (ucontrol->value.integer.value[0] << 2);
 
-       wm8753_write(codec, WM8753_IOCTL, mode);
-       wm8753_set_dai_mode(codec, ucontrol->value.integer.value[0]);
+       wm8753->dai_func =  ucontrol->value.integer.value[0];
        return 1;
 }
 
@@ -904,6 +905,13 @@ static int wm8753_vdac_adc_set_dai_fmt(struct snd_soc_dai *codec_dai,
        return 0;
 }
 
+static int wm8753_pcm_startup(struct snd_pcm_substream *substream,
+                               struct snd_soc_dai *dai)
+{
+       wm8753_set_dai_mode(dai->codec, dai, 0);
+       return 0;
+}
+
 /*
  * Set PCM DAI bit size and sample rate.
  */
@@ -912,8 +920,7 @@ static int wm8753_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
        u16 voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x01f3;
        u16 srate = wm8753_read_reg_cache(codec, WM8753_SRATE1) & 0x017f;
@@ -1138,6 +1145,13 @@ static int wm8753_i2s_set_dai_fmt(struct snd_soc_dai *codec_dai,
        return 0;
 }
 
+static int wm8753_i2s_startup(struct snd_pcm_substream *substream,
+                               struct snd_soc_dai *dai)
+{
+       wm8753_set_dai_mode(dai->codec, dai, 1);
+       return 0;
+}
+
 /*
  * Set PCM DAI bit size and sample rate.
  */
@@ -1146,8 +1160,7 @@ static int wm8753_i2s_hw_params(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
        u16 srate = wm8753_read_reg_cache(codec, WM8753_SRATE1) & 0x01c0;
        u16 hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x01f3;
@@ -1240,12 +1253,12 @@ static int wm8753_mute(struct snd_soc_dai *dai, int mute)
 {
        struct snd_soc_codec *codec = dai->codec;
        u16 mute_reg = wm8753_read_reg_cache(codec, WM8753_DAC) & 0xfff7;
+       struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
 
        /* the digital mute covers the HiFi and Voice DAC's on the WM8753.
         * make sure we check if they are not both active when we mute */
-       if (mute && dai->id == 1) {
-               if (!wm8753_dai[WM8753_DAI_VOICE].playback.active ||
-                       !wm8753_dai[WM8753_DAI_HIFI].playback.active)
+       if (mute && wm8753->dai_func == 1) {
+               if (!codec->active)
                        wm8753_write(codec, WM8753_DAC, mute_reg | 0x8);
        } else {
                if (mute)
@@ -1303,6 +1316,7 @@ static int wm8753_set_bias_level(struct snd_soc_codec *codec,
  * 4. Voice disabled - HIFI over HIFI, uses voice DAI LRC for capture
  */
 static struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode1 = {
+       .startup = wm8753_i2s_startup,
        .hw_params      = wm8753_i2s_hw_params,
        .digital_mute   = wm8753_mute,
        .set_fmt        = wm8753_mode1h_set_dai_fmt,
@@ -1312,6 +1326,7 @@ static struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode1 = {
 };
 
 static struct snd_soc_dai_ops wm8753_dai_ops_voice_mode1 = {
+       .startup = wm8753_pcm_startup,
        .hw_params      = wm8753_pcm_hw_params,
        .digital_mute   = wm8753_mute,
        .set_fmt        = wm8753_mode1v_set_dai_fmt,
@@ -1321,6 +1336,7 @@ static struct snd_soc_dai_ops wm8753_dai_ops_voice_mode1 = {
 };
 
 static struct snd_soc_dai_ops wm8753_dai_ops_voice_mode2 = {
+       .startup = wm8753_pcm_startup,
        .hw_params      = wm8753_pcm_hw_params,
        .digital_mute   = wm8753_mute,
        .set_fmt        = wm8753_mode2_set_dai_fmt,
@@ -1330,6 +1346,7 @@ static struct snd_soc_dai_ops wm8753_dai_ops_voice_mode2 = {
 };
 
 static struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode3        = {
+       .startup = wm8753_i2s_startup,
        .hw_params      = wm8753_i2s_hw_params,
        .digital_mute   = wm8753_mute,
        .set_fmt        = wm8753_mode3_4_set_dai_fmt,
@@ -1339,6 +1356,7 @@ static struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode3   = {
 };
 
 static struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode4        = {
+       .startup = wm8753_i2s_startup,
        .hw_params      = wm8753_i2s_hw_params,
        .digital_mute   = wm8753_mute,
        .set_fmt        = wm8753_mode3_4_set_dai_fmt,
@@ -1347,10 +1365,9 @@ static struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode4  = {
        .set_sysclk     = wm8753_set_dai_sysclk,
 };
 
-static const struct snd_soc_dai wm8753_all_dai[] = {
+static struct snd_soc_dai_driver wm8753_all_dai[] = {
 /* DAI HiFi mode 1 */
-{      .name = "WM8753 HiFi",
-       .id = 1,
+{      .name = "wm8753-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 1,
@@ -1366,8 +1383,7 @@ static const struct snd_soc_dai wm8753_all_dai[] = {
        .ops = &wm8753_dai_ops_hifi_mode1,
 },
 /* DAI Voice mode 1 */
-{      .name = "WM8753 Voice",
-       .id = 1,
+{      .name = "wm8753-voice",
        .playback = {
                .stream_name = "Voice Playback",
                .channels_min = 1,
@@ -1383,12 +1399,10 @@ static const struct snd_soc_dai wm8753_all_dai[] = {
        .ops = &wm8753_dai_ops_voice_mode1,
 },
 /* DAI HiFi mode 2 - dummy */
-{      .name = "WM8753 HiFi",
-       .id = 2,
+{      .name = "wm8753-hifi",
 },
 /* DAI Voice mode 2 */
-{      .name = "WM8753 Voice",
-       .id = 2,
+{      .name = "wm8753-voice",
        .playback = {
                .stream_name = "Voice Playback",
                .channels_min = 1,
@@ -1404,8 +1418,7 @@ static const struct snd_soc_dai wm8753_all_dai[] = {
        .ops = &wm8753_dai_ops_voice_mode2,
 },
 /* DAI HiFi mode 3 */
-{      .name = "WM8753 HiFi",
-       .id = 3,
+{      .name = "wm8753-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 1,
@@ -1421,12 +1434,10 @@ static const struct snd_soc_dai wm8753_all_dai[] = {
        .ops = &wm8753_dai_ops_hifi_mode3,
 },
 /* DAI Voice mode 3 - dummy */
-{      .name = "WM8753 Voice",
-       .id = 3,
+{      .name = "wm8753-voice",
 },
 /* DAI HiFi mode 4 */
-{      .name = "WM8753 HiFi",
-       .id = 4,
+{      .name = "wm8753-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 1,
@@ -1442,58 +1453,31 @@ static const struct snd_soc_dai wm8753_all_dai[] = {
        .ops = &wm8753_dai_ops_hifi_mode4,
 },
 /* DAI Voice mode 4 - dummy */
-{      .name = "WM8753 Voice",
-       .id = 4,
+{      .name = "wm8753-voice",
 },
 };
 
-struct snd_soc_dai wm8753_dai[] = {
+static struct snd_soc_dai_driver wm8753_dai[] = {
        {
-               .name = "WM8753 DAI 0",
+               .name = "wm8753-aif0",
        },
        {
-               .name = "WM8753 DAI 1",
+               .name = "wm8753-aif1",
        },
 };
-EXPORT_SYMBOL_GPL(wm8753_dai);
 
-static void wm8753_set_dai_mode(struct snd_soc_codec *codec, unsigned int mode)
+static void wm8753_set_dai_mode(struct snd_soc_codec *codec,
+               struct snd_soc_dai *dai, unsigned int hifi)
 {
-       if (mode < 4) {
-               int playback_active, capture_active, codec_active, pop_wait;
-               void *private_data;
-               struct list_head list;
-
-               playback_active = wm8753_dai[0].playback.active;
-               capture_active = wm8753_dai[0].capture.active;
-               codec_active = wm8753_dai[0].active;
-               private_data = wm8753_dai[0].private_data;
-               pop_wait = wm8753_dai[0].pop_wait;
-               list = wm8753_dai[0].list;
-               wm8753_dai[0] = wm8753_all_dai[mode << 1];
-               wm8753_dai[0].playback.active = playback_active;
-               wm8753_dai[0].capture.active = capture_active;
-               wm8753_dai[0].active = codec_active;
-               wm8753_dai[0].private_data = private_data;
-               wm8753_dai[0].pop_wait = pop_wait;
-               wm8753_dai[0].list = list;
-
-               playback_active = wm8753_dai[1].playback.active;
-               capture_active = wm8753_dai[1].capture.active;
-               codec_active = wm8753_dai[1].active;
-               private_data = wm8753_dai[1].private_data;
-               pop_wait = wm8753_dai[1].pop_wait;
-               list = wm8753_dai[1].list;
-               wm8753_dai[1] = wm8753_all_dai[(mode << 1) + 1];
-               wm8753_dai[1].playback.active = playback_active;
-               wm8753_dai[1].capture.active = capture_active;
-               wm8753_dai[1].active = codec_active;
-               wm8753_dai[1].private_data = private_data;
-               wm8753_dai[1].pop_wait = pop_wait;
-               wm8753_dai[1].list = list;
+       struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
+
+       if (wm8753->dai_func < 4) {
+               if (hifi)
+                       dai->driver = &wm8753_all_dai[wm8753->dai_func << 1];
+               else
+                       dai->driver = &wm8753_all_dai[(wm8753->dai_func << 1) + 1];
        }
-       wm8753_dai[0].codec = codec;
-       wm8753_dai[1].codec = codec;
+       wm8753_write(codec, WM8753_IOCTL, wm8753->dai_func);
 }
 
 static void wm8753_work(struct work_struct *work)
@@ -1503,19 +1487,14 @@ static void wm8753_work(struct work_struct *work)
        wm8753_set_bias_level(codec, codec->bias_level);
 }
 
-static int wm8753_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8753_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8753_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8753_resume(struct platform_device *pdev)
+static int wm8753_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -1547,41 +1526,6 @@ static int wm8753_resume(struct platform_device *pdev)
        return 0;
 }
 
-static struct snd_soc_codec *wm8753_codec;
-
-static int wm8753_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (!wm8753_codec) {
-               dev_err(&pdev->dev, "WM8753 codec not yet registered\n");
-               return -EINVAL;
-       }
-
-       socdev->card->codec = wm8753_codec;
-       codec = wm8753_codec;
-
-       wm8753_set_dai_mode(codec, 0);
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8753: failed to create pcms\n");
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8753_snd_controls,
-                            ARRAY_SIZE(wm8753_snd_controls));
-       wm8753_add_widgets(codec);
-
-       return 0;
-
-pcm_err:
-       return ret;
-}
-
 /*
  * This function forces any delayed work to be queued and run.
  */
@@ -1601,62 +1545,29 @@ static int run_delayed_work(struct delayed_work *dwork)
        return ret;
 }
 
-/* power down chip */
-static int wm8753_remove(struct platform_device *pdev)
+static int wm8753_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8753 = {
-       .probe =        wm8753_probe,
-       .remove =       wm8753_remove,
-       .suspend =      wm8753_suspend,
-       .resume =       wm8753_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753);
+       struct wm8753_priv *wm8753 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0, reg;
 
-static int wm8753_register(struct wm8753_priv *wm8753)
-{
-       int ret, i;
-       struct snd_soc_codec *codec = &wm8753->codec;
-       u16 reg;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work);
 
-       if (wm8753_codec) {
-               dev_err(codec->dev, "Multiple WM8753 devices not supported\n");
-               ret = -EINVAL;
-               goto err;
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8753->control_type);
+       if (ret < 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "WM8753";
-       codec->owner = THIS_MODULE;
-       codec->read = wm8753_read_reg_cache;
-       codec->write = wm8753_write;
-       codec->bias_level = SND_SOC_BIAS_STANDBY;
-       codec->set_bias_level = wm8753_set_bias_level;
-       codec->dai = wm8753_dai;
-       codec->num_dai = 2;
-       codec->reg_cache_size = ARRAY_SIZE(wm8753->reg_cache) + 1;
-       codec->reg_cache = &wm8753->reg_cache;
-       snd_soc_codec_set_drvdata(codec, wm8753);
-
-       memcpy(codec->reg_cache, wm8753_reg, sizeof(wm8753->reg_cache));
-       INIT_DELAYED_WORK(&codec->delayed_work, wm8753_work);
-
        ret = wm8753_reset(codec);
        if (ret < 0) {
-               dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
+               dev_err(codec->dev, "Failed to issue reset: %d\n", ret);
+               return ret;
        }
 
+       wm8753_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       wm8753->dai_func = 0;
+
        /* charge output caps */
        wm8753_set_bias_level(codec, SND_SOC_BIAS_PREPARE);
        schedule_delayed_work(&codec->delayed_work,
@@ -1684,165 +1595,137 @@ static int wm8753_register(struct wm8753_priv *wm8753)
        reg = wm8753_read_reg_cache(codec, WM8753_RINVOL);
        wm8753_write(codec, WM8753_RINVOL, reg | 0x0100);
 
-       wm8753_codec = codec;
-
-       for (i = 0; i < ARRAY_SIZE(wm8753_dai); i++)
-               wm8753_dai[i].dev = codec->dev;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dais(&wm8753_dai[0], ARRAY_SIZE(wm8753_dai));
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8753_snd_controls,
+                            ARRAY_SIZE(wm8753_snd_controls));
+       wm8753_add_widgets(codec);
 
        return 0;
 
-err_codec:
        run_delayed_work(&codec->delayed_work);
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8753);
        return ret;
 }
 
-static void wm8753_unregister(struct wm8753_priv *wm8753)
+/* power down chip */
+static int wm8753_remove(struct snd_soc_codec *codec)
 {
-       wm8753_set_bias_level(&wm8753->codec, SND_SOC_BIAS_OFF);
-       run_delayed_work(&wm8753->codec.delayed_work);
-       snd_soc_unregister_dais(&wm8753_dai[0], ARRAY_SIZE(wm8753_dai));
-       snd_soc_unregister_codec(&wm8753->codec);
-       kfree(wm8753);
-       wm8753_codec = NULL;
+       run_delayed_work(&codec->delayed_work);
+       wm8753_set_bias_level(codec, SND_SOC_BIAS_OFF);
+
+       return 0;
 }
 
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static struct snd_soc_codec_driver soc_codec_dev_wm8753 = {
+       .probe =        wm8753_probe,
+       .remove =       wm8753_remove,
+       .suspend =      wm8753_suspend,
+       .resume =       wm8753_resume,
+       .set_bias_level = wm8753_set_bias_level,
+       .reg_cache_size = sizeof(wm8753_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8753_reg,
+};
 
-static int wm8753_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+#if defined(CONFIG_SPI_MASTER)
+static int __devinit wm8753_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_codec *codec;
        struct wm8753_priv *wm8753;
+       int ret;
 
        wm8753 = kzalloc(sizeof(struct wm8753_priv), GFP_KERNEL);
        if (wm8753 == NULL)
                return -ENOMEM;
 
-        codec = &wm8753->codec;
-        codec->hw_write = (hw_write_t)i2c_master_send;
-        codec->control_data = i2c;
-        i2c_set_clientdata(i2c, wm8753);
-
-        codec->dev = &i2c->dev;
+       wm8753->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8753);
 
-       return wm8753_register(wm8753);
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8753, wm8753_dai, ARRAY_SIZE(wm8753_dai));
+       if (ret < 0)
+               kfree(wm8753);
+       return ret;
 }
 
-static int wm8753_i2c_remove(struct i2c_client *client)
+static int __devexit wm8753_spi_remove(struct spi_device *spi)
 {
-        struct wm8753_priv *wm8753 = i2c_get_clientdata(client);
-        wm8753_unregister(wm8753);
-        return 0;
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
+       return 0;
 }
 
-static const struct i2c_device_id wm8753_i2c_id[] = {
-       { "wm8753", 0 },
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, wm8753_i2c_id);
-
-static struct i2c_driver wm8753_i2c_driver = {
+static struct spi_driver wm8753_spi_driver = {
        .driver = {
-               .name = "wm8753",
-               .owner = THIS_MODULE,
+               .name   = "wm8753-codec",
+               .bus    = &spi_bus_type,
+               .owner  = THIS_MODULE,
        },
-       .probe =    wm8753_i2c_probe,
-       .remove =   wm8753_i2c_remove,
-       .id_table = wm8753_i2c_id,
+       .probe          = wm8753_spi_probe,
+       .remove         = __devexit_p(wm8753_spi_remove),
 };
-#endif
-
-#if defined(CONFIG_SPI_MASTER)
-static int wm8753_spi_write(struct spi_device *spi, const char *data, int len)
-{
-       struct spi_transfer t;
-       struct spi_message m;
-       u8 msg[2];
-
-       if (len <= 0)
-               return 0;
-
-       msg[0] = data[0];
-       msg[1] = data[1];
+#endif /* CONFIG_SPI_MASTER */
 
-       spi_message_init(&m);
-       memset(&t, 0, (sizeof t));
-
-       t.tx_buf = &msg[0];
-       t.len = len;
-
-       spi_message_add_tail(&t, &m);
-       spi_sync(spi, &m);
-
-       return len;
-}
-
-static int __devinit wm8753_spi_probe(struct spi_device *spi)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8753_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_codec *codec;
        struct wm8753_priv *wm8753;
+       int ret;
 
        wm8753 = kzalloc(sizeof(struct wm8753_priv), GFP_KERNEL);
        if (wm8753 == NULL)
                return -ENOMEM;
 
-       codec = &wm8753->codec;
-       codec->control_data = spi;
-       codec->hw_write = (hw_write_t)wm8753_spi_write;
-       codec->dev = &spi->dev;
-
-       dev_set_drvdata(&spi->dev, wm8753);
+       i2c_set_clientdata(i2c, wm8753);
+       wm8753->control_type = SND_SOC_I2C;
 
-       return wm8753_register(wm8753);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8753, wm8753_dai, ARRAY_SIZE(wm8753_dai));
+       if (ret < 0)
+               kfree(wm8753);
+       return ret;
 }
 
-static int __devexit wm8753_spi_remove(struct spi_device *spi)
+static __devexit int wm8753_i2c_remove(struct i2c_client *client)
 {
-       struct wm8753_priv *wm8753 = dev_get_drvdata(&spi->dev);
-       wm8753_unregister(wm8753);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
-static struct spi_driver wm8753_spi_driver = {
+static const struct i2c_device_id wm8753_i2c_id[] = {
+       { "wm8753", 0 },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, wm8753_i2c_id);
+
+static struct i2c_driver wm8753_i2c_driver = {
        .driver = {
-               .name   = "wm8753",
-               .bus    = &spi_bus_type,
-               .owner  = THIS_MODULE,
+               .name = "wm8753-codec",
+               .owner = THIS_MODULE,
        },
-       .probe          = wm8753_spi_probe,
-       .remove         = __devexit_p(wm8753_spi_remove),
+       .probe =    wm8753_i2c_probe,
+       .remove =   __devexit_p(wm8753_i2c_remove),
+       .id_table = wm8753_i2c_id,
 };
 #endif
 
 static int __init wm8753_modinit(void)
 {
-       int ret;
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8753_i2c_driver);
-       if (ret != 0)
-               pr_err("Failed to register WM8753 I2C driver: %d\n", ret);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8753 I2C driver: %d\n",
+                      ret);
+       }
 #endif
 #if defined(CONFIG_SPI_MASTER)
        ret = spi_register_driver(&wm8753_spi_driver);
-       if (ret != 0)
-               pr_err("Failed to register WM8753 SPI driver: %d\n", ret);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8753 SPI driver: %d\n",
+                      ret);
+       }
 #endif
-       return 0;
+       return ret;
 }
 module_init(wm8753_modinit);
 
index 57b2ba244040dea6a26e806c57401cd22a27ebf3..94edac144bcbef3b94754f4d624352f230a4453c 100644 (file)
 #define WM8753_DAI_HIFI                0
 #define WM8753_DAI_VOICE               1
 
-extern struct snd_soc_dai wm8753_dai[2];
-extern struct snd_soc_codec_device soc_codec_dev_wm8753;
-
 #endif
index 4e212ed62ea609be9e1b3d45a5ac3fb6efea1a38..053030679c1a9f37c40b7065ae127e2ae1984e05 100644 (file)
 
 #include "wm8776.h"
 
-static struct snd_soc_codec *wm8776_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8776;
-
 /* codec private data */
 struct wm8776_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        u16 reg_cache[WM8776_CACHEREGNUM];
        int sysclk[2];
 };
 
-#ifdef CONFIG_SPI_MASTER
-static int wm8776_spi_write(struct spi_device *spi, const char *data, int len);
-#endif
-
 static const u16 wm8776_reg[WM8776_CACHEREGNUM] = {
        0x79, 0x79, 0x79, 0xff, 0xff,  /* 4 */
        0xff, 0x00, 0x90, 0x00, 0x00,  /* 9 */
@@ -144,7 +137,7 @@ static int wm8776_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
        struct snd_soc_codec *codec = dai->codec;
        int reg, iface, master;
 
-       switch (dai->id) {
+       switch (dai->driver->id) {
        case WM8776_DAI_DAC:
                reg = WM8776_DACIFCTRL;
                master = 0x80;
@@ -233,7 +226,7 @@ static int wm8776_hw_params(struct snd_pcm_substream *substream,
 
        iface = 0;
 
-       switch (dai->id) {
+       switch (dai->driver->id) {
        case WM8776_DAI_DAC:
                iface_reg = WM8776_DACIFCTRL;
                master = 0x80;
@@ -267,7 +260,7 @@ static int wm8776_hw_params(struct snd_pcm_substream *substream,
        /* Only need to set MCLK/LRCLK ratio if we're master */
        if (snd_soc_read(codec, WM8776_MSTRCTRL) & master) {
                for (i = 0; i < ARRAY_SIZE(mclk_ratios); i++) {
-                       if (wm8776->sysclk[dai->id] / params_rate(params)
+                       if (wm8776->sysclk[dai->driver->id] / params_rate(params)
                            == mclk_ratios[i])
                                break;
                }
@@ -275,7 +268,7 @@ static int wm8776_hw_params(struct snd_pcm_substream *substream,
                if (i == ARRAY_SIZE(mclk_ratios)) {
                        dev_err(codec->dev,
                                "Unable to configure MCLK ratio %d/%d\n",
-                               wm8776->sysclk[dai->id], params_rate(params));
+                               wm8776->sysclk[dai->driver->id], params_rate(params));
                        return -EINVAL;
                }
 
@@ -305,9 +298,9 @@ static int wm8776_set_sysclk(struct snd_soc_dai *dai,
        struct snd_soc_codec *codec = dai->codec;
        struct wm8776_priv *wm8776 = snd_soc_codec_get_drvdata(codec);
 
-       BUG_ON(dai->id >= ARRAY_SIZE(wm8776->sysclk));
+       BUG_ON(dai->driver->id >= ARRAY_SIZE(wm8776->sysclk));
 
-       wm8776->sysclk[dai->id] = freq;
+       wm8776->sysclk[dai->driver->id] = freq;
 
        return 0;
 }
@@ -357,10 +350,10 @@ static struct snd_soc_dai_ops wm8776_adc_ops = {
        .set_sysclk     = wm8776_set_sysclk,
 };
 
-struct snd_soc_dai wm8776_dai[] = {
+static struct snd_soc_dai_driver wm8776_dai[] = {
        {
-               .name = "WM8776 Playback",
-               .id = WM8776_DAI_DAC,
+               .name = "wm8776-hifi-playback",
+               .id     = WM8776_DAI_DAC,
                .playback = {
                        .stream_name = "Playback",
                        .channels_min = 2,
@@ -371,8 +364,8 @@ struct snd_soc_dai wm8776_dai[] = {
                .ops = &wm8776_dac_ops,
        },
        {
-               .name = "WM8776 Capture",
-               .id = WM8776_DAI_ADC,
+               .name = "wm8776-hifi-capture",
+               .id     = WM8776_DAI_ADC,
                .capture = {
                        .stream_name = "Capture",
                        .channels_min = 2,
@@ -383,23 +376,17 @@ struct snd_soc_dai wm8776_dai[] = {
                .ops = &wm8776_adc_ops,
        },
 };
-EXPORT_SYMBOL_GPL(wm8776_dai);
 
 #ifdef CONFIG_PM
-static int wm8776_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8776_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8776_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8776_resume(struct platform_device *pdev)
+static int wm8776_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -422,27 +409,30 @@ static int wm8776_resume(struct platform_device *pdev)
 #define wm8776_resume NULL
 #endif
 
-static int wm8776_probe(struct platform_device *pdev)
+static int wm8776_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
+       struct wm8776_priv *wm8776 = snd_soc_codec_get_drvdata(codec);
        int ret = 0;
 
-       if (wm8776_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8776->control_type);
+       if (ret < 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
-       socdev->card->codec = wm8776_codec;
-       codec = wm8776_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       ret = wm8776_reset(codec);
        if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
+               dev_err(codec->dev, "Failed to issue reset: %d\n", ret);
+               return ret;
        }
 
+       wm8776_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
+       /* Latch the update bits; right channel only since we always
+        * update both. */
+       snd_soc_update_bits(codec, WM8776_HPRVOL, 0x100, 0x100);
+       snd_soc_update_bits(codec, WM8776_DACRVOL, 0x100, 0x100);
+
        snd_soc_add_controls(codec, wm8776_snd_controls,
                             ARRAY_SIZE(wm8776_snd_controls));
        snd_soc_dapm_new_controls(codec, wm8776_dapm_widgets,
@@ -450,168 +440,56 @@ static int wm8776_probe(struct platform_device *pdev)
        snd_soc_dapm_add_routes(codec, routes, ARRAY_SIZE(routes));
 
        return ret;
-
-pcm_err:
-       return ret;
 }
 
 /* power down chip */
-static int wm8776_remove(struct platform_device *pdev)
+static int wm8776_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
+       wm8776_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm8776 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm8776 = {
        .probe =        wm8776_probe,
        .remove =       wm8776_remove,
        .suspend =      wm8776_suspend,
        .resume =       wm8776_resume,
+       .set_bias_level = wm8776_set_bias_level,
+       .reg_cache_size = sizeof(wm8776_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8776_reg,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8776);
-
-static int wm8776_register(struct wm8776_priv *wm8776,
-                          enum snd_soc_control_type control)
-{
-       int ret, i;
-       struct snd_soc_codec *codec = &wm8776->codec;
-
-       if (wm8776_codec) {
-               dev_err(codec->dev, "Another WM8776 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8776);
-       codec->name = "WM8776";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8776_set_bias_level;
-       codec->dai = wm8776_dai;
-       codec->num_dai = ARRAY_SIZE(wm8776_dai);
-       codec->reg_cache_size = WM8776_CACHEREGNUM;
-       codec->reg_cache = &wm8776->reg_cache;
-
-       memcpy(codec->reg_cache, wm8776_reg, sizeof(wm8776_reg));
-
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
-       for (i = 0; i < ARRAY_SIZE(wm8776_dai); i++)
-               wm8776_dai[i].dev = codec->dev;
-
-       ret = wm8776_reset(codec);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to issue reset: %d\n", ret);
-               goto err;
-       }
-
-       wm8776_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
-       /* Latch the update bits; right channel only since we always
-        * update both. */
-       snd_soc_update_bits(codec, WM8776_HPRVOL, 0x100, 0x100);
-       snd_soc_update_bits(codec, WM8776_DACRVOL, 0x100, 0x100);
-
-       wm8776_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dais(wm8776_dai, ARRAY_SIZE(wm8776_dai));
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8776);
-       return ret;
-}
-
-static void wm8776_unregister(struct wm8776_priv *wm8776)
-{
-       wm8776_set_bias_level(&wm8776->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dais(wm8776_dai, ARRAY_SIZE(wm8776_dai));
-       snd_soc_unregister_codec(&wm8776->codec);
-       kfree(wm8776);
-       wm8776_codec = NULL;
-}
 
 #if defined(CONFIG_SPI_MASTER)
-static int wm8776_spi_write(struct spi_device *spi, const char *data, int len)
-{
-       struct spi_transfer t;
-       struct spi_message m;
-       u8 msg[2];
-
-       if (len <= 0)
-               return 0;
-
-       msg[0] = data[0];
-       msg[1] = data[1];
-
-       spi_message_init(&m);
-       memset(&t, 0, (sizeof t));
-
-       t.tx_buf = &msg[0];
-       t.len = len;
-
-       spi_message_add_tail(&t, &m);
-       spi_sync(spi, &m);
-
-       return len;
-}
-
 static int __devinit wm8776_spi_probe(struct spi_device *spi)
 {
-       struct snd_soc_codec *codec;
        struct wm8776_priv *wm8776;
+       int ret;
 
        wm8776 = kzalloc(sizeof(struct wm8776_priv), GFP_KERNEL);
        if (wm8776 == NULL)
                return -ENOMEM;
 
-       codec = &wm8776->codec;
-       codec->control_data = spi;
-       codec->hw_write = (hw_write_t)wm8776_spi_write;
-       codec->dev = &spi->dev;
+       wm8776->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8776);
 
-       dev_set_drvdata(&spi->dev, wm8776);
-
-       return wm8776_register(wm8776, SND_SOC_SPI);
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8776, wm8776_dai, ARRAY_SIZE(wm8776_dai));
+       if (ret < 0)
+               kfree(wm8776);
+       return ret;
 }
 
 static int __devexit wm8776_spi_remove(struct spi_device *spi)
 {
-       struct wm8776_priv *wm8776 = dev_get_drvdata(&spi->dev);
-
-       wm8776_unregister(wm8776);
-
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
 static struct spi_driver wm8776_spi_driver = {
        .driver = {
-               .name   = "wm8776",
+               .name   = "wm8776-codec",
                .bus    = &spi_bus_type,
                .owner  = THIS_MODULE,
        },
@@ -625,27 +503,26 @@ static __devinit int wm8776_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8776_priv *wm8776;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8776 = kzalloc(sizeof(struct wm8776_priv), GFP_KERNEL);
        if (wm8776 == NULL)
                return -ENOMEM;
 
-       codec = &wm8776->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(i2c, wm8776);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
+       wm8776->control_type = SND_SOC_I2C;
 
-       return wm8776_register(wm8776, SND_SOC_I2C);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8776, wm8776_dai, ARRAY_SIZE(wm8776_dai));
+       if (ret < 0)
+               kfree(wm8776);
+       return ret;
 }
 
 static __devexit int wm8776_i2c_remove(struct i2c_client *client)
 {
-       struct wm8776_priv *wm8776 = i2c_get_clientdata(client);
-       wm8776_unregister(wm8776);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -657,7 +534,7 @@ MODULE_DEVICE_TABLE(i2c, wm8776_i2c_id);
 
 static struct i2c_driver wm8776_i2c_driver = {
        .driver = {
-               .name = "wm8776",
+               .name = "wm8776-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8776_i2c_probe,
@@ -668,22 +545,22 @@ static struct i2c_driver wm8776_i2c_driver = {
 
 static int __init wm8776_modinit(void)
 {
-       int ret;
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8776_i2c_driver);
        if (ret != 0) {
-               printk(KERN_ERR "Failed to register WM8776 I2C driver: %d\n",
+               printk(KERN_ERR "Failed to register wm8776 I2C driver: %d\n",
                       ret);
        }
 #endif
 #if defined(CONFIG_SPI_MASTER)
        ret = spi_register_driver(&wm8776_spi_driver);
        if (ret != 0) {
-               printk(KERN_ERR "Failed to register WM8776 SPI driver: %d\n",
+               printk(KERN_ERR "Failed to register wm8776 SPI driver: %d\n",
                       ret);
        }
 #endif
-       return 0;
+       return ret;
 }
 module_init(wm8776_modinit);
 
index 6606d25d2d835be7f9558f23981c75b4522d3c9f..4cf1c8e0bfc9e093ecc8f449de7b1db8b1a2062b 100644 (file)
@@ -45,7 +45,4 @@
 #define WM8776_DAI_DAC 0
 #define WM8776_DAI_ADC 1
 
-extern struct snd_soc_dai wm8776_dai[];
-extern struct snd_soc_codec_device soc_codec_dev_wm8776;
-
 #endif
index 5da17a704e5a9ba2d40d27a14b24a0fff701594e..1378aab5ca7562b6feaead8f87aff0c884c3d6aa 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/delay.h>
 #include <linux/pm.h>
 #include <linux/i2c.h>
+#include <linux/spi/spi.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <sound/core.h>
 
 #define WM8900_LRC_MASK 0xfc00
 
-struct snd_soc_codec_device soc_codec_dev_wm8900;
-
 struct wm8900_priv {
-       struct snd_soc_codec codec;
-
+       enum snd_soc_control_type control_type;
        u16 reg_cache[WM8900_MAXREG];
 
        u32 fll_in; /* FLL input frequency */
@@ -627,8 +625,7 @@ static int wm8900_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 reg;
 
        reg = snd_soc_read(codec, WM8900_REG_AUDIO1) & ~0x60;
@@ -1015,8 +1012,8 @@ static struct snd_soc_dai_ops wm8900_dai_ops = {
        .digital_mute   = wm8900_digital_mute,
 };
 
-struct snd_soc_dai wm8900_dai = {
-       .name = "WM8900 HiFi",
+static struct snd_soc_dai_driver wm8900_dai = {
+       .name = "wm8900-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 1,
@@ -1033,7 +1030,6 @@ struct snd_soc_dai wm8900_dai = {
         },
        .ops = &wm8900_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8900_dai);
 
 static int wm8900_set_bias_level(struct snd_soc_codec *codec,
                                 enum snd_soc_bias_level level)
@@ -1128,10 +1124,8 @@ static int wm8900_set_bias_level(struct snd_soc_codec *codec,
        return 0;
 }
 
-static int wm8900_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8900_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8900_priv *wm8900 = snd_soc_codec_get_drvdata(codec);
        int fll_out = wm8900->fll_out;
        int fll_in  = wm8900->fll_in;
@@ -1140,7 +1134,7 @@ static int wm8900_suspend(struct platform_device *pdev, pm_message_t state)
        /* Stop the FLL in an orderly fashion */
        ret = wm8900_set_fll(codec, 0, 0, 0);
        if (ret != 0) {
-               dev_err(&pdev->dev, "Failed to stop FLL\n");
+               dev_err(codec->dev, "Failed to stop FLL\n");
                return ret;
        }
 
@@ -1152,10 +1146,8 @@ static int wm8900_suspend(struct platform_device *pdev, pm_message_t state)
        return 0;
 }
 
-static int wm8900_resume(struct platform_device *pdev)
+static int wm8900_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8900_priv *wm8900 = snd_soc_codec_get_drvdata(codec);
        u16 *cache;
        int i, ret;
@@ -1176,7 +1168,7 @@ static int wm8900_resume(struct platform_device *pdev)
 
                ret = wm8900_set_fll(codec, 0, fll_in, fll_out);
                if (ret != 0) {
-                       dev_err(&pdev->dev, "Failed to restart FLL\n");
+                       dev_err(codec->dev, "Failed to restart FLL\n");
                        return ret;
                }
        }
@@ -1186,60 +1178,32 @@ static int wm8900_resume(struct platform_device *pdev)
                        snd_soc_write(codec, i, cache[i]);
                kfree(cache);
        } else
-               dev_err(&pdev->dev, "Unable to allocate register cache\n");
+               dev_err(codec->dev, "Unable to allocate register cache\n");
 
        return 0;
 }
 
-static struct snd_soc_codec *wm8900_codec;
-
-static __devinit int wm8900_i2c_probe(struct i2c_client *i2c,
-                                     const struct i2c_device_id *id)
+static int wm8900_probe(struct snd_soc_codec *codec)
 {
-       struct wm8900_priv *wm8900;
-       struct snd_soc_codec *codec;
-       unsigned int reg;
-       int ret;
-
-       wm8900 = kzalloc(sizeof(struct wm8900_priv), GFP_KERNEL);
-       if (wm8900 == NULL)
-               return -ENOMEM;
+       struct wm8900_priv *wm8900 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0, reg;
 
-       codec = &wm8900->codec;
-       snd_soc_codec_set_drvdata(codec, wm8900);
-       codec->reg_cache = &wm8900->reg_cache[0];
-       codec->reg_cache_size = WM8900_MAXREG;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "WM8900";
-       codec->owner = THIS_MODULE;
-       codec->dai = &wm8900_dai;
-       codec->num_dai = 1;
-       codec->control_data = i2c;
-       codec->set_bias_level = wm8900_set_bias_level;
-       codec->volatile_register = wm8900_volatile_register;
-       codec->dev = &i2c->dev;
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, wm8900->control_type);
        if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
        reg = snd_soc_read(codec, WM8900_REG_ID);
        if (reg != 0x8900) {
-               dev_err(&i2c->dev, "Device is not a WM8900 - ID %x\n", reg);
-               ret = -ENODEV;
-               goto err;
+               dev_err(codec->dev, "Device is not a WM8900 - ID %x\n", reg);
+               return -ENODEV;
        }
 
        /* Read back from the chip */
        reg = snd_soc_read(codec, WM8900_REG_POWER1);
        reg = (reg >> 12) & 0xf;
-       dev_info(&i2c->dev, "WM8900 revision %d\n", reg);
+       dev_info(codec->dev, "WM8900 revision %d\n", reg);
 
        wm8900_reset(codec);
 
@@ -1271,43 +1235,95 @@ static __devinit int wm8900_i2c_probe(struct i2c_client *i2c,
        /* Set the DAC and mixer output bias */
        snd_soc_write(codec, WM8900_REG_OUTBIASCTL, 0x81);
 
-       wm8900_dai.dev = &i2c->dev;
+       snd_soc_add_controls(codec, wm8900_snd_controls,
+                               ARRAY_SIZE(wm8900_snd_controls));
+       wm8900_add_widgets(codec);
 
-       wm8900_codec = codec;
+       return 0;
+}
 
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
+/* power down chip */
+static int wm8900_remove(struct snd_soc_codec *codec)
+{
+       wm8900_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
+}
 
-       ret = snd_soc_register_dai(&wm8900_dai);
-       if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+static struct snd_soc_codec_driver soc_codec_dev_wm8900 = {
+       .probe =        wm8900_probe,
+       .remove =       wm8900_remove,
+       .suspend =      wm8900_suspend,
+       .resume =       wm8900_resume,
+       .set_bias_level = wm8900_set_bias_level,
+       .volatile_register = wm8900_volatile_register,
+       .reg_cache_size = sizeof(wm8900_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8900_reg_defaults,
+};
 
-       return ret;
+#if defined(CONFIG_SPI_MASTER)
+static int __devinit wm8900_spi_probe(struct spi_device *spi)
+{
+       struct wm8900_priv *wm8900;
+       int ret;
+
+       wm8900 = kzalloc(sizeof(struct wm8900_priv), GFP_KERNEL);
+       if (wm8900 == NULL)
+               return -ENOMEM;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8900);
-       wm8900_codec = NULL;
+       wm8900->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8900);
+
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8900, &wm8900_dai, 1);
+       if (ret < 0)
+               kfree(wm8900);
        return ret;
 }
 
-static __devexit int wm8900_i2c_remove(struct i2c_client *client)
+static int __devexit wm8900_spi_remove(struct spi_device *spi)
 {
-       snd_soc_unregister_dai(&wm8900_dai);
-       snd_soc_unregister_codec(wm8900_codec);
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
+       return 0;
+}
 
-       wm8900_set_bias_level(wm8900_codec, SND_SOC_BIAS_OFF);
+static struct spi_driver wm8900_spi_driver = {
+       .driver = {
+               .name   = "wm8900-codec",
+               .bus    = &spi_bus_type,
+               .owner  = THIS_MODULE,
+       },
+       .probe          = wm8900_spi_probe,
+       .remove         = __devexit_p(wm8900_spi_remove),
+};
+#endif /* CONFIG_SPI_MASTER */
+
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8900_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
+{
+       struct wm8900_priv *wm8900;
+       int ret;
+
+       wm8900 = kzalloc(sizeof(struct wm8900_priv), GFP_KERNEL);
+       if (wm8900 == NULL)
+               return -ENOMEM;
+
+       i2c_set_clientdata(i2c, wm8900);
+       wm8900->control_type = SND_SOC_I2C;
 
-       wm8900_dai.dev = NULL;
-       kfree(snd_soc_codec_get_drvdata(wm8900_codec));
-       wm8900_codec = NULL;
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8900, &wm8900_dai, 1);
+       if (ret < 0)
+               kfree(wm8900);
+       return ret;
+}
 
+static __devexit int wm8900_i2c_remove(struct i2c_client *client)
+{
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1319,71 +1335,44 @@ MODULE_DEVICE_TABLE(i2c, wm8900_i2c_id);
 
 static struct i2c_driver wm8900_i2c_driver = {
        .driver = {
-               .name = "WM8900",
+               .name = "wm8900-codec",
                .owner = THIS_MODULE,
        },
-       .probe = wm8900_i2c_probe,
-       .remove = __devexit_p(wm8900_i2c_remove),
+       .probe =    wm8900_i2c_probe,
+       .remove =   __devexit_p(wm8900_i2c_remove),
        .id_table = wm8900_i2c_id,
 };
+#endif
 
-static int wm8900_probe(struct platform_device *pdev)
+static int __init wm8900_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
        int ret = 0;
-
-       if (!wm8900_codec) {
-               dev_err(&pdev->dev, "I2C client not yet instantiated\n");
-               return -ENODEV;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8900_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8900 I2C driver: %d\n",
+                      ret);
        }
-
-       codec = wm8900_codec;
-       socdev->card->codec = codec;
-
-       /* Register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "Failed to register new PCMs\n");
-               goto pcm_err;
+#endif
+#if defined(CONFIG_SPI_MASTER)
+       ret = spi_register_driver(&wm8900_spi_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8900 SPI driver: %d\n",
+                      ret);
        }
-
-       snd_soc_add_controls(codec, wm8900_snd_controls,
-                               ARRAY_SIZE(wm8900_snd_controls));
-       wm8900_add_widgets(codec);
-
-pcm_err:
+#endif
        return ret;
 }
-
-/* power down chip */
-static int wm8900_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8900 = {
-       .probe =        wm8900_probe,
-       .remove =       wm8900_remove,
-       .suspend =      wm8900_suspend,
-       .resume =       wm8900_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8900);
-
-static int __init wm8900_modinit(void)
-{
-       return i2c_add_driver(&wm8900_i2c_driver);
-}
 module_init(wm8900_modinit);
 
 static void __exit wm8900_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8900_i2c_driver);
+#endif
+#if defined(CONFIG_SPI_MASTER)
+       spi_unregister_driver(&wm8900_spi_driver);
+#endif
 }
 module_exit(wm8900_exit);
 
index fd15007d10c7ec22950174758a9b688247eede08..583f257e799b4719371abb641d37535f46ba2ba3 100644 (file)
@@ -52,7 +52,4 @@
 #define WM8900_DAC_CLKDIV_5_5 0x14
 #define WM8900_DAC_CLKDIV_6   0x18
 
-extern struct snd_soc_dai wm8900_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8900;
-
 #endif
index bf08282d5ee56384023d7055ff3b355d817d8e05..622b60238a824e084099b3f290dc0dda6ebf6767 100644 (file)
@@ -213,10 +213,11 @@ static u16 wm8903_reg_defaults[] = {
 };
 
 struct wm8903_priv {
-       struct snd_soc_codec codec;
+
        u16 reg_cache[ARRAY_SIZE(wm8903_reg_defaults)];
 
        int sysclk;
+       int irq;
 
        /* Reference counts */
        int class_w_users;
@@ -252,7 +253,6 @@ static int wm8903_volatile_register(unsigned int reg)
 static int wm8903_run_sequence(struct snd_soc_codec *codec, unsigned int start)
 {
        u16 reg[5];
-       struct i2c_client *i2c = codec->control_data;
        struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
 
        BUG_ON(start > 48);
@@ -262,7 +262,7 @@ static int wm8903_run_sequence(struct snd_soc_codec *codec, unsigned int start)
        snd_soc_write(codec, WM8903_WRITE_SEQUENCER_0,
                      reg[0] | WM8903_WSEQ_ENA);
 
-       dev_dbg(&i2c->dev, "Starting sequence at %d\n", start);
+       dev_dbg(codec->dev, "Starting sequence at %d\n", start);
 
        snd_soc_write(codec, WM8903_WRITE_SEQUENCER_3,
                     start | WM8903_WSEQ_START);
@@ -277,7 +277,7 @@ static int wm8903_run_sequence(struct snd_soc_codec *codec, unsigned int start)
                reg[4] = snd_soc_read(codec, WM8903_WRITE_SEQUENCER_4);
        } while (reg[4] & WM8903_WSEQ_BUSY);
 
-       dev_dbg(&i2c->dev, "Sequence complete\n");
+       dev_dbg(codec->dev, "Sequence complete\n");
 
        /* Disable the sequencer again if we enabled it */
        snd_soc_write(codec, WM8903_WRITE_SEQUENCER_0, reg[0]);
@@ -422,7 +422,6 @@ static int wm8903_class_w_put(struct snd_kcontrol *kcontrol,
        struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
        struct snd_soc_codec *codec = widget->codec;
        struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
-       struct i2c_client *i2c = codec->control_data;
        u16 reg;
        int ret;
 
@@ -431,7 +430,7 @@ static int wm8903_class_w_put(struct snd_kcontrol *kcontrol,
        /* Turn it off if we're about to enable bypass */
        if (ucontrol->value.integer.value[0]) {
                if (wm8903->class_w_users == 0) {
-                       dev_dbg(&i2c->dev, "Disabling Class W\n");
+                       dev_dbg(codec->dev, "Disabling Class W\n");
                        snd_soc_write(codec, WM8903_CLASS_W_0, reg &
                                     ~(WM8903_CP_DYN_FREQ | WM8903_CP_DYN_V));
                }
@@ -444,14 +443,14 @@ static int wm8903_class_w_put(struct snd_kcontrol *kcontrol,
        /* If we've just disabled the last bypass path turn Class W on */
        if (!ucontrol->value.integer.value[0]) {
                if (wm8903->class_w_users == 1) {
-                       dev_dbg(&i2c->dev, "Enabling Class W\n");
+                       dev_dbg(codec->dev, "Enabling Class W\n");
                        snd_soc_write(codec, WM8903_CLASS_W_0, reg |
                                     WM8903_CP_DYN_FREQ | WM8903_CP_DYN_V);
                }
                wm8903->class_w_users--;
        }
 
-       dev_dbg(&i2c->dev, "Bypass use count now %d\n",
+       dev_dbg(codec->dev, "Bypass use count now %d\n",
                wm8903->class_w_users);
 
        return ret;
@@ -935,7 +934,6 @@ static int wm8903_add_widgets(struct snd_soc_codec *codec)
 static int wm8903_set_bias_level(struct snd_soc_codec *codec,
                                 enum snd_soc_bias_level level)
 {
-       struct i2c_client *i2c = codec->control_data;
        u16 reg, reg2;
 
        switch (level) {
@@ -974,7 +972,7 @@ static int wm8903_set_bias_level(struct snd_soc_codec *codec,
                        /* By default no bypass paths are enabled so
                         * enable Class W support.
                         */
-                       dev_dbg(&i2c->dev, "Enabling Class W\n");
+                       dev_dbg(codec->dev, "Enabling Class W\n");
                        snd_soc_write(codec, WM8903_CLASS_W_0, reg |
                                     WM8903_CP_DYN_FREQ | WM8903_CP_DYN_V);
                }
@@ -1228,10 +1226,8 @@ static int wm8903_startup(struct snd_pcm_substream *substream,
                          struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
-       struct i2c_client *i2c = codec->control_data;
        struct snd_pcm_runtime *master_runtime;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -1245,7 +1241,7 @@ static int wm8903_startup(struct snd_pcm_substream *substream,
        if (wm8903->master_substream) {
                master_runtime = wm8903->master_substream->runtime;
 
-               dev_dbg(&i2c->dev, "Constraining to %d bits\n",
+               dev_dbg(codec->dev, "Constraining to %d bits\n",
                        master_runtime->sample_bits);
 
                snd_pcm_hw_constraint_minmax(substream->runtime,
@@ -1264,8 +1260,7 @@ static void wm8903_shutdown(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -1284,10 +1279,8 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec =rtd->codec;
        struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
-       struct i2c_client *i2c = codec->control_data;
        int fs = params_rate(params);
        int bclk;
        int bclk_div;
@@ -1306,7 +1299,7 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
        u16 dac_digital1 = snd_soc_read(codec, WM8903_DAC_DIGITAL_1);
 
        if (substream == wm8903->slave_substream) {
-               dev_dbg(&i2c->dev, "Ignoring hw_params for slave substream\n");
+               dev_dbg(codec->dev, "Ignoring hw_params for slave substream\n");
                return 0;
        }
 
@@ -1332,7 +1325,7 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
                switch (sample_rates[dsp_config].rate) {
                case 88200:
                case 96000:
-                       dev_err(&i2c->dev, "%dHz unsupported by ADC\n",
+                       dev_err(codec->dev, "%dHz unsupported by ADC\n",
                                fs);
                        return -EINVAL;
 
@@ -1340,7 +1333,7 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
                        break;
                }
 
-       dev_dbg(&i2c->dev, "DSP fs = %dHz\n", sample_rates[dsp_config].rate);
+       dev_dbg(codec->dev, "DSP fs = %dHz\n", sample_rates[dsp_config].rate);
        clock1 &= ~WM8903_SAMPLE_RATE_MASK;
        clock1 |= sample_rates[dsp_config].value;
 
@@ -1366,7 +1359,7 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
                return -EINVAL;
        }
 
-       dev_dbg(&i2c->dev, "MCLK = %dHz, target sample rate = %dHz\n",
+       dev_dbg(codec->dev, "MCLK = %dHz, target sample rate = %dHz\n",
                wm8903->sysclk, fs);
 
        /* We may not have an MCLK which allows us to generate exactly
@@ -1401,12 +1394,12 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
        clock1 |= clk_sys_ratios[clk_config].rate << WM8903_CLK_SYS_RATE_SHIFT;
        clock1 |= clk_sys_ratios[clk_config].mode << WM8903_CLK_SYS_MODE_SHIFT;
 
-       dev_dbg(&i2c->dev, "CLK_SYS_RATE=%x, CLK_SYS_MODE=%x div=%d\n",
+       dev_dbg(codec->dev, "CLK_SYS_RATE=%x, CLK_SYS_MODE=%x div=%d\n",
                clk_sys_ratios[clk_config].rate,
                clk_sys_ratios[clk_config].mode,
                clk_sys_ratios[clk_config].div);
 
-       dev_dbg(&i2c->dev, "Actual CLK_SYS = %dHz\n", clk_sys);
+       dev_dbg(codec->dev, "Actual CLK_SYS = %dHz\n", clk_sys);
 
        /* We may not get quite the right frequency if using
         * approximate clocks so look for the closest match that is
@@ -1428,7 +1421,7 @@ static int wm8903_hw_params(struct snd_pcm_substream *substream,
        aif2 &= ~WM8903_BCLK_DIV_MASK;
        aif3 &= ~WM8903_LRCLK_RATE_MASK;
 
-       dev_dbg(&i2c->dev, "BCLK ratio %d for %dHz - actual BCLK = %dHz\n",
+       dev_dbg(codec->dev, "BCLK ratio %d for %dHz - actual BCLK = %dHz\n",
                bclk_divs[bclk_div].ratio / 10, bclk,
                (clk_sys * 10) / bclk_divs[bclk_div].ratio);
 
@@ -1504,8 +1497,8 @@ EXPORT_SYMBOL_GPL(wm8903_mic_detect);
 
 static irqreturn_t wm8903_irq(int irq, void *data)
 {
-       struct wm8903_priv *wm8903 = data;
-       struct snd_soc_codec *codec = &wm8903->codec;
+       struct snd_soc_codec *codec = data;
+       struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
        int mic_report;
        int int_pol;
        int int_val = 0;
@@ -1586,8 +1579,8 @@ static struct snd_soc_dai_ops wm8903_dai_ops = {
        .set_sysclk     = wm8903_set_dai_sysclk,
 };
 
-struct snd_soc_dai wm8903_dai = {
-       .name = "WM8903",
+static struct snd_soc_dai_driver wm8903_dai = {
+       .name = "wm8903-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -1605,23 +1598,16 @@ struct snd_soc_dai wm8903_dai = {
        .ops = &wm8903_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8903_dai);
 
-static int wm8903_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8903_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8903_resume(struct platform_device *pdev)
+static int wm8903_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-       struct i2c_client *i2c = codec->control_data;
        int i;
        u16 *reg_cache = codec->reg_cache;
        u16 *tmp_cache = kmemdup(reg_cache, sizeof(wm8903_reg_defaults),
@@ -1637,65 +1623,37 @@ static int wm8903_resume(struct platform_device *pdev)
                                snd_soc_write(codec, i, tmp_cache[i]);
                kfree(tmp_cache);
        } else {
-               dev_err(&i2c->dev, "Failed to allocate temporary cache\n");
+               dev_err(codec->dev, "Failed to allocate temporary cache\n");
        }
 
        return 0;
 }
 
-static struct snd_soc_codec *wm8903_codec;
-
-static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
-                                     const struct i2c_device_id *id)
+static int wm8903_probe(struct snd_soc_codec *codec)
 {
-       struct wm8903_platform_data *pdata = dev_get_platdata(&i2c->dev);
-       struct wm8903_priv *wm8903;
-       struct snd_soc_codec *codec;
+       struct wm8903_platform_data *pdata = dev_get_platdata(codec->dev);
+       struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
        int ret, i;
        int trigger, irq_pol;
        u16 val;
 
-       wm8903 = kzalloc(sizeof(struct wm8903_priv), GFP_KERNEL);
-       if (wm8903 == NULL)
-               return -ENOMEM;
-
-       codec = &wm8903->codec;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->dev = &i2c->dev;
-       codec->name = "WM8903";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8903_set_bias_level;
-       codec->dai = &wm8903_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm8903->reg_cache);
-       codec->reg_cache = &wm8903->reg_cache[0];
-       snd_soc_codec_set_drvdata(codec, wm8903);
-       codec->volatile_register = wm8903_volatile_register;
        init_completion(&wm8903->wseq);
 
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
-
        ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
        if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
        val = snd_soc_read(codec, WM8903_SW_RESET_AND_ID);
        if (val != wm8903_reg_defaults[WM8903_SW_RESET_AND_ID]) {
-               dev_err(&i2c->dev,
+               dev_err(codec->dev,
                        "Device with ID register %x is not a WM8903\n", val);
                return -ENODEV;
        }
 
        val = snd_soc_read(codec, WM8903_REVISION_NUMBER);
-       dev_info(&i2c->dev, "WM8903 revision %d\n",
+       dev_info(codec->dev, "WM8903 revision %d\n",
                 val & WM8903_CHIP_REV_MASK);
 
        wm8903_reset(codec);
@@ -1721,7 +1679,7 @@ static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
                wm8903->mic_delay = pdata->micdet_delay;
        }
        
-       if (i2c->irq) {
+       if (wm8903->irq) {
                if (pdata && pdata->irq_active_low) {
                        trigger = IRQF_TRIGGER_LOW;
                        irq_pol = WM8903_IRQ_POL;
@@ -1733,13 +1691,13 @@ static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
                snd_soc_update_bits(codec, WM8903_INTERRUPT_CONTROL,
                                    WM8903_IRQ_POL, irq_pol);
                
-               ret = request_threaded_irq(i2c->irq, NULL, wm8903_irq,
+               ret = request_threaded_irq(wm8903->irq, NULL, wm8903_irq,
                                           trigger | IRQF_ONESHOT,
-                                          "wm8903", wm8903);
+                                          "wm8903", codec);
                if (ret != 0) {
-                       dev_err(&i2c->dev, "Failed to request IRQ: %d\n",
+                       dev_err(codec->dev, "Failed to request IRQ: %d\n",
                                ret);
-                       goto err;
+                       return ret;
                }
 
                /* Enable write sequencer interrupts */
@@ -1781,133 +1739,96 @@ static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
        val |= WM8903_DAC_MUTEMODE;
        snd_soc_write(codec, WM8903_DAC_DIGITAL_1, val);
 
-       wm8903_dai.dev = &i2c->dev;
-       wm8903_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
-               goto err_irq;
-       }
-
-       ret = snd_soc_register_dai(&wm8903_dai);
-       if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return ret;
+       snd_soc_add_controls(codec, wm8903_snd_controls,
+                               ARRAY_SIZE(wm8903_snd_controls));
+       wm8903_add_widgets(codec);
 
-err_codec:
-       snd_soc_unregister_codec(codec);
-err_irq:
-       if (i2c->irq)
-               free_irq(i2c->irq, wm8903);
-err:
-       wm8903_codec = NULL;
-       kfree(wm8903);
        return ret;
 }
 
-static __devexit int wm8903_i2c_remove(struct i2c_client *client)
+/* power down chip */
+static int wm8903_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       struct wm8903_priv *priv = snd_soc_codec_get_drvdata(codec);
+       wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
+}
 
-       snd_soc_unregister_dai(&wm8903_dai);
-       snd_soc_unregister_codec(codec);
+static struct snd_soc_codec_driver soc_codec_dev_wm8903 = {
+       .probe =        wm8903_probe,
+       .remove =       wm8903_remove,
+       .suspend =      wm8903_suspend,
+       .resume =       wm8903_resume,
+       .set_bias_level = wm8903_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8903_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8903_reg_defaults,
+       .volatile_register = wm8903_volatile_register,
+};
 
-       wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF);
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
+{
+       struct wm8903_priv *wm8903;
+       int ret;
 
-       if (client->irq)
-               free_irq(client->irq, priv);
+       wm8903 = kzalloc(sizeof(struct wm8903_priv), GFP_KERNEL);
+       if (wm8903 == NULL)
+               return -ENOMEM;
 
-       kfree(priv);
+       i2c_set_clientdata(i2c, wm8903);
+       wm8903->irq = i2c->irq;
 
-       wm8903_codec = NULL;
-       wm8903_dai.dev = NULL;
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8903, &wm8903_dai, 1);
+       if (ret < 0)
+               kfree(wm8903);
+       return ret;
+}
 
+static __devexit int wm8903_i2c_remove(struct i2c_client *client)
+{
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
-/* i2c codec control layer */
 static const struct i2c_device_id wm8903_i2c_id[] = {
-       { "wm8903", 0 },
-       { }
+       { "wm8903", 0 },
+       { }
 };
 MODULE_DEVICE_TABLE(i2c, wm8903_i2c_id);
 
 static struct i2c_driver wm8903_i2c_driver = {
        .driver = {
-               .name = "WM8903",
+               .name = "wm8903-codec",
                .owner = THIS_MODULE,
        },
-       .probe    = wm8903_i2c_probe,
-       .remove   = __devexit_p(wm8903_i2c_remove),
+       .probe =    wm8903_i2c_probe,
+       .remove =   __devexit_p(wm8903_i2c_remove),
        .id_table = wm8903_i2c_id,
 };
+#endif
 
-static int wm8903_probe(struct platform_device *pdev)
+static int __init wm8903_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
        int ret = 0;
-
-       if (!wm8903_codec) {
-               dev_err(&pdev->dev, "I2C device not yet probed\n");
-               goto err;
-       }
-
-       socdev->card->codec = wm8903_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(&pdev->dev, "failed to create pcms\n");
-               goto err;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8903_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8903 I2C driver: %d\n",
+                      ret);
        }
-
-       snd_soc_add_controls(socdev->card->codec, wm8903_snd_controls,
-                               ARRAY_SIZE(wm8903_snd_controls));
-       wm8903_add_widgets(socdev->card->codec);
-
+#endif
        return ret;
-
-err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8903_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8903 = {
-       .probe =        wm8903_probe,
-       .remove =       wm8903_remove,
-       .suspend =      wm8903_suspend,
-       .resume =       wm8903_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8903);
-
-static int __init wm8903_modinit(void)
-{
-       return i2c_add_driver(&wm8903_i2c_driver);
 }
 module_init(wm8903_modinit);
 
 static void __exit wm8903_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8903_i2c_driver);
+#endif
 }
 module_exit(wm8903_exit);
 
index ce384a2ad820ec3b8bbf894f1bc9a8f246184862..996435e681e5e2a8bce5ca1d84aebbc0fe907066 100644 (file)
@@ -15,9 +15,6 @@
 
 #include <linux/i2c.h>
 
-extern struct snd_soc_dai wm8903_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8903;
-
 extern int wm8903_mic_detect(struct snd_soc_codec *codec,
                             struct snd_soc_jack *jack,
                             int det, int shrt);
index f7dcabf6283c165877fd5a12cd2adcd69f245e5e..33be84e506ea7d4e2927a4e44a06e49ab648f156 100644 (file)
@@ -31,9 +31,6 @@
 
 #include "wm8904.h"
 
-static struct snd_soc_codec *wm8904_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8904;
-
 enum wm8904_type {
        WM8904,
        WM8912,
@@ -52,10 +49,11 @@ static const char *wm8904_supply_names[WM8904_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct wm8904_priv {
-       struct snd_soc_codec codec;
+
        u16 reg_cache[WM8904_MAX_REGISTER + 1];
 
        enum wm8904_type devtype;
+       void *control_data;
 
        struct regulator_bulk_data supplies[WM8904_NUM_SUPPLIES];
 
@@ -689,7 +687,7 @@ static int wm8904_put_drc_enum(struct snd_kcontrol *kcontrol,
                               struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);  
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
        struct wm8904_pdata *pdata = wm8904->pdata;
        int value = ucontrol->value.integer.value[0];
 
@@ -760,7 +758,7 @@ static int wm8904_put_retune_mobile_enum(struct snd_kcontrol *kcontrol,
                                         struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);  
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
        struct wm8904_pdata *pdata = wm8904->pdata;
        int value = ucontrol->value.integer.value[0];
 
@@ -2218,8 +2216,8 @@ static struct snd_soc_dai_ops wm8904_dai_ops = {
        .digital_mute = wm8904_digital_mute,
 };
 
-struct snd_soc_dai wm8904_dai = {
-       .name = "WM8904",
+static struct snd_soc_dai_driver wm8904_dai = {
+       .name = "wm8904-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -2237,24 +2235,17 @@ struct snd_soc_dai wm8904_dai = {
        .ops = &wm8904_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8904_dai);
 
 #ifdef CONFIG_PM
-static int wm8904_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8904_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8904_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8904_resume(struct platform_device *pdev)
+static int wm8904_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8904_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
@@ -2264,9 +2255,9 @@ static int wm8904_resume(struct platform_device *pdev)
 #define wm8904_resume NULL
 #endif
 
-static void wm8904_handle_retune_mobile_pdata(struct wm8904_priv *wm8904)
+static void wm8904_handle_retune_mobile_pdata(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = &wm8904->codec;
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
        struct wm8904_pdata *pdata = wm8904->pdata;
        struct snd_kcontrol_new control =
                SOC_ENUM_EXT("EQ Mode",
@@ -2315,20 +2306,20 @@ static void wm8904_handle_retune_mobile_pdata(struct wm8904_priv *wm8904)
        wm8904->retune_mobile_enum.max = wm8904->num_retune_mobile_texts;
        wm8904->retune_mobile_enum.texts = wm8904->retune_mobile_texts;
 
-       ret = snd_soc_add_controls(&wm8904->codec, &control, 1);
+       ret = snd_soc_add_controls(codec, &control, 1);
        if (ret != 0)
-               dev_err(wm8904->codec.dev,
+               dev_err(codec->dev,
                        "Failed to add ReTune Mobile control: %d\n", ret);
 }
 
-static void wm8904_handle_pdata(struct wm8904_priv *wm8904)
+static void wm8904_handle_pdata(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = &wm8904->codec;
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
        struct wm8904_pdata *pdata = wm8904->pdata;
        int ret, i;
 
        if (!pdata) {
-               snd_soc_add_controls(&wm8904->codec, wm8904_eq_controls,
+               snd_soc_add_controls(codec, wm8904_eq_controls,
                                     ARRAY_SIZE(wm8904_eq_controls));
                return;
        }
@@ -2344,7 +2335,7 @@ static void wm8904_handle_pdata(struct wm8904_priv *wm8904)
                wm8904->drc_texts = kmalloc(sizeof(char *)
                                            * pdata->num_drc_cfgs, GFP_KERNEL);
                if (!wm8904->drc_texts) {
-                       dev_err(wm8904->codec.dev,
+                       dev_err(codec->dev,
                                "Failed to allocate %d DRC config texts\n",
                                pdata->num_drc_cfgs);
                        return;
@@ -2356,9 +2347,9 @@ static void wm8904_handle_pdata(struct wm8904_priv *wm8904)
                wm8904->drc_enum.max = pdata->num_drc_cfgs;
                wm8904->drc_enum.texts = wm8904->drc_texts;
 
-               ret = snd_soc_add_controls(&wm8904->codec, &control, 1);
+               ret = snd_soc_add_controls(codec, &control, 1);
                if (ret != 0)
-                       dev_err(wm8904->codec.dev,
+                       dev_err(codec->dev,
                                "Failed to add DRC mode control: %d\n", ret);
 
                wm8904_set_drc(codec);
@@ -2368,89 +2359,19 @@ static void wm8904_handle_pdata(struct wm8904_priv *wm8904)
                pdata->num_retune_mobile_cfgs);
 
        if (pdata->num_retune_mobile_cfgs)
-               wm8904_handle_retune_mobile_pdata(wm8904);
+               wm8904_handle_retune_mobile_pdata(codec);
        else
-               snd_soc_add_controls(&wm8904->codec, wm8904_eq_controls,
+               snd_soc_add_controls(codec, wm8904_eq_controls,
                                     ARRAY_SIZE(wm8904_eq_controls));
 }
 
-static int wm8904_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8904_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
 
-       socdev->card->codec = wm8904_codec;
-       codec = wm8904_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       wm8904_handle_pdata(snd_soc_codec_get_drvdata(codec));
-
-       wm8904_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-static int wm8904_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8904 = {
-       .probe =        wm8904_probe,
-       .remove =       wm8904_remove,
-       .suspend =      wm8904_suspend,
-       .resume =       wm8904_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8904);
-
-static int wm8904_register(struct wm8904_priv *wm8904,
-                          enum snd_soc_control_type control)
+static int wm8904_probe(struct snd_soc_codec *codec)
 {
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
        struct wm8904_pdata *pdata = wm8904->pdata;
-       int ret;
-       struct snd_soc_codec *codec = &wm8904->codec;
-       int i;
-
-       if (wm8904_codec) {
-               dev_err(codec->dev, "Another WM8904 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
+       int ret, i;
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8904);
-       codec->name = "WM8904";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8904_set_bias_level;
-       codec->dai = &wm8904_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8904_MAX_REGISTER;
-       codec->reg_cache = &wm8904->reg_cache;
-       codec->volatile_register = wm8904_volatile_register;
        codec->cache_sync = 1;
        codec->idle_bias_off = 1;
 
@@ -2463,16 +2384,13 @@ static int wm8904_register(struct wm8904_priv *wm8904,
        default:
                dev_err(codec->dev, "Unknown device type %d\n",
                        wm8904->devtype);
-               ret = -EINVAL;
-               goto err;
+               return -EINVAL;
        }
 
-       memcpy(codec->reg_cache, wm8904_reg, sizeof(wm8904_reg));
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, control);
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        for (i = 0; i < ARRAY_SIZE(wm8904->supplies); i++)
@@ -2482,7 +2400,7 @@ static int wm8904_register(struct wm8904_priv *wm8904,
                                 wm8904->supplies);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(wm8904->supplies),
@@ -2517,8 +2435,6 @@ static int wm8904_register(struct wm8904_priv *wm8904,
                goto err_enable;
        }
 
-       wm8904_dai.dev = codec->dev;
-
        /* Change some default settings - latch VU and enable ZC */
        wm8904->reg_cache[WM8904_ADC_DIGITAL_VOLUME_LEFT] |= WM8904_ADC_VU;
        wm8904->reg_cache[WM8904_ADC_DIGITAL_VOLUME_RIGHT] |= WM8904_ADC_VU;
@@ -2563,72 +2479,68 @@ static int wm8904_register(struct wm8904_priv *wm8904,
        /* Bias level configuration will have done an extra enable */
        regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies), wm8904->supplies);
 
-       wm8904_codec = codec;
+       wm8904_handle_pdata(codec);
 
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_enable;
-       }
-
-       ret = snd_soc_register_dai(&wm8904_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+       wm8904_add_widgets(codec);
 
        return 0;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
 err_enable:
        regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies), wm8904->supplies);
 err_get:
        regulator_bulk_free(ARRAY_SIZE(wm8904->supplies), wm8904->supplies);
-err:
-       kfree(wm8904);
        return ret;
 }
 
-static void wm8904_unregister(struct wm8904_priv *wm8904)
+static int wm8904_remove(struct snd_soc_codec *codec)
 {
-       wm8904_set_bias_level(&wm8904->codec, SND_SOC_BIAS_OFF);
+       struct wm8904_priv *wm8904 = snd_soc_codec_get_drvdata(codec);
+
+       wm8904_set_bias_level(codec, SND_SOC_BIAS_OFF);
        regulator_bulk_free(ARRAY_SIZE(wm8904->supplies), wm8904->supplies);
-       snd_soc_unregister_dai(&wm8904_dai);
-       snd_soc_unregister_codec(&wm8904->codec);
-       kfree(wm8904);
-       wm8904_codec = NULL;
+
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8904 = {
+       .probe =        wm8904_probe,
+       .remove =       wm8904_remove,
+       .suspend =      wm8904_suspend,
+       .resume =       wm8904_resume,
+       .set_bias_level = wm8904_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8904_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8904_reg,
+       .volatile_register = wm8904_volatile_register,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8904_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8904_priv *wm8904;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8904 = kzalloc(sizeof(struct wm8904_priv), GFP_KERNEL);
        if (wm8904 == NULL)
                return -ENOMEM;
 
-       codec = &wm8904->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        wm8904->devtype = id->driver_data;
-
        i2c_set_clientdata(i2c, wm8904);
-       codec->control_data = i2c;
+       wm8904->control_data = i2c;
        wm8904->pdata = i2c->dev.platform_data;
 
-       codec->dev = &i2c->dev;
-
-       return wm8904_register(wm8904, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8904, &wm8904_dai, 1);
+       if (ret < 0)
+               kfree(wm8904);
+       return ret;
 }
 
 static __devexit int wm8904_i2c_remove(struct i2c_client *client)
 {
-       struct wm8904_priv *wm8904 = i2c_get_clientdata(client);
-       wm8904_unregister(wm8904);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -2641,7 +2553,7 @@ MODULE_DEVICE_TABLE(i2c, wm8904_i2c_id);
 
 static struct i2c_driver wm8904_i2c_driver = {
        .driver = {
-               .name = "WM8904",
+               .name = "wm8904-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8904_i2c_probe,
@@ -2652,15 +2564,15 @@ static struct i2c_driver wm8904_i2c_driver = {
 
 static int __init wm8904_modinit(void)
 {
-       int ret;
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8904_i2c_driver);
        if (ret != 0) {
-               printk(KERN_ERR "Failed to register WM8904 I2C driver: %d\n",
+               printk(KERN_ERR "Failed to register wm8904 I2C driver: %d\n",
                       ret);
        }
 #endif
-       return 0;
+       return ret;
 }
 module_init(wm8904_modinit);
 
index abe5059b3004e3739878d5787754b6554233f12c..9e8c84188ba761bb0eb606029e7c80f8d34e8219 100644 (file)
@@ -21,9 +21,6 @@
 #define WM8904_FLL_LRCLK         3
 #define WM8904_FLL_FREE_RUNNING  4
 
-extern struct snd_soc_dai wm8904_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8904;
-
 /*
  * Register values.
  */
index f0c11138e61002cf2c6a0f419c64de177f0e9a62..d28bf0dfdb1dd4ded519caa2943ef5dbd64cfc76 100644 (file)
@@ -44,7 +44,8 @@
 struct wm8940_priv {
        unsigned int sysclk;
        u16 reg_cache[WM8940_CACHEREGNUM];
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
 };
 
 static u16 wm8940_reg_defaults[] = {
@@ -365,8 +366,7 @@ static int wm8940_i2s_hw_params(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 iface = snd_soc_read(codec, WM8940_IFACE) & 0xFD9F;
        u16 addcntrl = snd_soc_read(codec, WM8940_ADDCNTRL) & 0xFFF1;
        u16 companding =  snd_soc_read(codec,
@@ -636,8 +636,8 @@ static struct snd_soc_dai_ops wm8940_dai_ops = {
        .set_pll = wm8940_set_dai_pll,
 };
 
-struct snd_soc_dai wm8940_dai = {
-       .name = "WM8940",
+static struct snd_soc_dai_driver wm8940_dai = {
+       .name = "wm8940-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -655,20 +655,14 @@ struct snd_soc_dai wm8940_dai = {
        .ops = &wm8940_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8940_dai);
 
-static int wm8940_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8940_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        return wm8940_set_bias_level(codec, SND_SOC_BIAS_OFF);
 }
 
-static int wm8940_resume(struct platform_device *pdev)
+static int wm8940_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        int ret;
        u8 data[3];
@@ -697,108 +691,26 @@ error_ret:
        return ret;
 }
 
-static struct snd_soc_codec *wm8940_codec;
-
-static int wm8940_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-
-       int ret = 0;
-
-       if (wm8940_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8940_codec;
-       codec = wm8940_codec;
-
-       mutex_init(&codec->mutex);
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       ret = snd_soc_add_controls(codec, wm8940_snd_controls,
-                            ARRAY_SIZE(wm8940_snd_controls));
-       if (ret)
-               goto error_free_pcms;
-       ret = wm8940_add_widgets(codec);
-       if (ret)
-               goto error_free_pcms;
-
-       return ret;
-
-error_free_pcms:
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-pcm_err:
-       return ret;
-}
-
-static int wm8940_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8940 = {
-       .probe = wm8940_probe,
-       .remove = wm8940_remove,
-       .suspend = wm8940_suspend,
-       .resume = wm8940_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8940);
-
-static int wm8940_register(struct wm8940_priv *wm8940,
-                          enum snd_soc_control_type control)
+static int wm8940_probe(struct snd_soc_codec *codec)
 {
-       struct wm8940_setup_data *pdata = wm8940->codec.dev->platform_data;
-       struct snd_soc_codec *codec = &wm8940->codec;
+       struct wm8940_priv *wm8940 = snd_soc_codec_get_drvdata(codec);
+       struct wm8940_setup_data *pdata = codec->dev->platform_data;
        int ret;
        u16 reg;
-       if (wm8940_codec) {
-               dev_err(codec->dev, "Another WM8940 is registered\n");
-               return -EINVAL;
-       }
-
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8940);
-       codec->name = "WM8940";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8940_set_bias_level;
-       codec->dai = &wm8940_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm8940_reg_defaults);
-       codec->reg_cache = &wm8940->reg_cache;
 
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, control);
+       codec->control_data = wm8940->control_data;
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, wm8940->control_type);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
                return ret;
        }
 
-       memcpy(codec->reg_cache, wm8940_reg_defaults,
-              sizeof(wm8940_reg_defaults));
-
        ret = wm8940_reset(codec);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
                return ret;
        }
 
-       wm8940_dai.dev = codec->dev;
-
        wm8940_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        ret = snd_soc_write(codec, WM8940_POWER1, 0x180);
@@ -814,64 +726,60 @@ static int wm8940_register(struct wm8940_priv *wm8940,
                        return ret;
        }
 
-
-       wm8940_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
+       ret = snd_soc_add_controls(codec, wm8940_snd_controls,
+                            ARRAY_SIZE(wm8940_snd_controls));
+       if (ret)
                return ret;
-       }
-
-       ret = snd_soc_register_dai(&wm8940_dai);
-       if (ret) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               snd_soc_unregister_codec(codec);
+       ret = wm8940_add_widgets(codec);
+       if (ret)
                return ret;
-       }
 
-       return 0;
+       return ret;
+;
 }
 
-static void wm8940_unregister(struct wm8940_priv *wm8940)
+static int wm8940_remove(struct snd_soc_codec *codec)
 {
-       wm8940_set_bias_level(&wm8940->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8940_dai);
-       snd_soc_unregister_codec(&wm8940->codec);
-       kfree(wm8940);
-       wm8940_codec = NULL;
+       wm8940_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
-static int wm8940_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static struct snd_soc_codec_driver soc_codec_dev_wm8940 = {
+       .probe =        wm8940_probe,
+       .remove =       wm8940_remove,
+       .suspend =      wm8940_suspend,
+       .resume =       wm8940_resume,
+       .set_bias_level = wm8940_set_bias_level,
+       .reg_cache_size = sizeof(wm8940_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8940_reg_defaults,
+};
+
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8940_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       int ret;
        struct wm8940_priv *wm8940;
-       struct snd_soc_codec *codec;
+       int ret;
 
-       wm8940 = kzalloc(sizeof *wm8940, GFP_KERNEL);
+       wm8940 = kzalloc(sizeof(struct wm8940_priv), GFP_KERNEL);
        if (wm8940 == NULL)
                return -ENOMEM;
 
-       codec = &wm8940->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
        i2c_set_clientdata(i2c, wm8940);
-       codec->control_data = i2c;
-       codec->dev = &i2c->dev;
+       wm8940->control_data = i2c;
 
-       ret = wm8940_register(wm8940, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8940, &wm8940_dai, 1);
        if (ret < 0)
                kfree(wm8940);
-
        return ret;
 }
 
-static int __devexit wm8940_i2c_remove(struct i2c_client *client)
+static __devexit int wm8940_i2c_remove(struct i2c_client *client)
 {
-       struct wm8940_priv *wm8940 = i2c_get_clientdata(client);
-
-       wm8940_unregister(wm8940);
-
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -883,29 +791,34 @@ MODULE_DEVICE_TABLE(i2c, wm8940_i2c_id);
 
 static struct i2c_driver wm8940_i2c_driver = {
        .driver = {
-               .name = "WM8940 I2C Codec",
+               .name = "wm8940-codec",
                .owner = THIS_MODULE,
        },
-       .probe = wm8940_i2c_probe,
-       .remove = __devexit_p(wm8940_i2c_remove),
+       .probe =    wm8940_i2c_probe,
+       .remove =   __devexit_p(wm8940_i2c_remove),
        .id_table = wm8940_i2c_id,
 };
+#endif
 
 static int __init wm8940_modinit(void)
 {
-       int ret;
-
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8940_i2c_driver);
-       if (ret)
-               printk(KERN_ERR "Failed to register WM8940 I2C driver: %d\n",
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8940 I2C driver: %d\n",
                       ret);
+       }
+#endif
        return ret;
 }
 module_init(wm8940_modinit);
 
 static void __exit wm8940_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8940_i2c_driver);
+#endif
 }
 module_exit(wm8940_exit);
 
index 8410eed3ef847958a5b54816be246f978d69535f..907fe192e9e02d04669783b0647ff1dcaff6cbab 100644 (file)
@@ -15,8 +15,6 @@ struct wm8940_setup_data {
 #define WM8940_VROI_30K 1
        unsigned int vroi:1;
 };
-extern struct snd_soc_dai wm8940_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8940;
 
 /* WM8940 register space */
 #define WM8940_SOFTRESET       0x00
index 5f025593d84d3f4b8bc47aedda98055cd900f8ca..f89ad6c9a80b9162e7040ea6fe76b434c9f743f1 100644 (file)
@@ -30,9 +30,6 @@
 
 #include "wm8955.h"
 
-static struct snd_soc_codec *wm8955_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8955;
-
 #define WM8955_NUM_SUPPLIES 4
 static const char *wm8955_supply_names[WM8955_NUM_SUPPLIES] = {
        "DCVDD",
@@ -43,7 +40,8 @@ static const char *wm8955_supply_names[WM8955_NUM_SUPPLIES] = {
 
 /* codec private data */
 struct wm8955_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+
        u16 reg_cache[WM8955_MAX_REGISTER + 1];
 
        unsigned int mclk_rate;
@@ -52,8 +50,6 @@ struct wm8955_priv {
        int fs;
 
        struct regulator_bulk_data supplies[WM8955_NUM_SUPPLIES];
-
-       struct wm8955_pdata *pdata;
 };
 
 static const u16 wm8955_reg[WM8955_MAX_REGISTER + 1] = {
@@ -870,8 +866,8 @@ static struct snd_soc_dai_ops wm8955_dai_ops = {
        .digital_mute = wm8955_digital_mute,
 };
 
-struct snd_soc_dai wm8955_dai = {
-       .name = "WM8955",
+static struct snd_soc_dai_driver wm8955_dai = {
+       .name = "wm8955-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 2,
@@ -881,24 +877,17 @@ struct snd_soc_dai wm8955_dai = {
        },
        .ops = &wm8955_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8955_dai);
 
 #ifdef CONFIG_PM
-static int wm8955_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8955_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8955_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm8955_resume(struct platform_device *pdev)
+static int wm8955_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8955_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
@@ -908,86 +897,16 @@ static int wm8955_resume(struct platform_device *pdev)
 #define wm8955_resume NULL
 #endif
 
-static int wm8955_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8955_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8955_codec;
-       codec = wm8955_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       wm8955_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-static int wm8955_remove(struct platform_device *pdev)
+static int wm8955_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8955 = {
-       .probe =        wm8955_probe,
-       .remove =       wm8955_remove,
-       .suspend =      wm8955_suspend,
-       .resume =       wm8955_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8955);
-
-static int wm8955_register(struct wm8955_priv *wm8955,
-                          enum snd_soc_control_type control)
-{
-       int ret;
-       struct snd_soc_codec *codec = &wm8955->codec;
-       int i;
-
-       if (wm8955_codec) {
-               dev_err(codec->dev, "Another WM8955 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8955);
-       codec->name = "WM8955";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8955_set_bias_level;
-       codec->dai = &wm8955_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8955_MAX_REGISTER;
-       codec->reg_cache = &wm8955->reg_cache;
-
-       memcpy(codec->reg_cache, wm8955_reg, sizeof(wm8955_reg));
+       struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
+       struct wm8955_pdata *pdata = dev_get_platdata(codec->dev);
+       int ret, i;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8955->control_type);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        for (i = 0; i < ARRAY_SIZE(wm8955->supplies); i++)
@@ -997,7 +916,7 @@ static int wm8955_register(struct wm8955_priv *wm8955,
                                 wm8955->supplies);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = regulator_bulk_enable(ARRAY_SIZE(wm8955->supplies),
@@ -1013,8 +932,6 @@ static int wm8955_register(struct wm8955_priv *wm8955,
                goto err_enable;
        }
 
-       wm8955_dai.dev = codec->dev;
-
        /* Change some default settings - latch VU and enable ZC */
        wm8955->reg_cache[WM8955_LEFT_DAC_VOLUME] |= WM8955_LDVU;
        wm8955->reg_cache[WM8955_RIGHT_DAC_VOLUME] |= WM8955_RDVU;
@@ -1028,12 +945,12 @@ static int wm8955_register(struct wm8955_priv *wm8955,
        wm8955->reg_cache[WM8955_BASS_CONTROL] |= WM8955_BB;
 
        /* Set platform data values */
-       if (wm8955->pdata) {
-               if (wm8955->pdata->out2_speaker)
+       if (pdata) {
+               if (pdata->out2_speaker)
                        wm8955->reg_cache[WM8955_ADDITIONAL_CONTROL_2]
                                |= WM8955_ROUT2INV;
 
-               if (wm8955->pdata->monoin_diff)
+               if (pdata->monoin_diff)
                        wm8955->reg_cache[WM8955_MONO_OUT_MIX_1]
                                |= WM8955_DMEN;
        }
@@ -1043,70 +960,60 @@ static int wm8955_register(struct wm8955_priv *wm8955,
        /* Bias level configuration will have done an extra enable */
        regulator_bulk_disable(ARRAY_SIZE(wm8955->supplies), wm8955->supplies);
 
-       wm8955_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_enable;
-       }
-
-       ret = snd_soc_register_dai(&wm8955_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
+       wm8955_add_widgets(codec);
        return 0;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
 err_enable:
        regulator_bulk_disable(ARRAY_SIZE(wm8955->supplies), wm8955->supplies);
 err_get:
        regulator_bulk_free(ARRAY_SIZE(wm8955->supplies), wm8955->supplies);
-err:
-       kfree(wm8955);
        return ret;
 }
 
-static void wm8955_unregister(struct wm8955_priv *wm8955)
+static int wm8955_remove(struct snd_soc_codec *codec)
 {
-       wm8955_set_bias_level(&wm8955->codec, SND_SOC_BIAS_OFF);
+       struct wm8955_priv *wm8955 = snd_soc_codec_get_drvdata(codec);
+
+       wm8955_set_bias_level(codec, SND_SOC_BIAS_OFF);
        regulator_bulk_free(ARRAY_SIZE(wm8955->supplies), wm8955->supplies);
-       snd_soc_unregister_dai(&wm8955_dai);
-       snd_soc_unregister_codec(&wm8955->codec);
-       kfree(wm8955);
-       wm8955_codec = NULL;
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8955 = {
+       .probe =        wm8955_probe,
+       .remove =       wm8955_remove,
+       .suspend =      wm8955_suspend,
+       .resume =       wm8955_resume,
+       .set_bias_level = wm8955_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8955_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8955_reg,
+};
+
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8955_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8955_priv *wm8955;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8955 = kzalloc(sizeof(struct wm8955_priv), GFP_KERNEL);
        if (wm8955 == NULL)
                return -ENOMEM;
 
-       codec = &wm8955->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(i2c, wm8955);
-       codec->control_data = i2c;
-       wm8955->pdata = i2c->dev.platform_data;
-
-       codec->dev = &i2c->dev;
 
-       return wm8955_register(wm8955, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8955, &wm8955_dai, 1);
+       if (ret < 0)
+               kfree(wm8955);
+       return ret;
 }
 
 static __devexit int wm8955_i2c_remove(struct i2c_client *client)
 {
-       struct wm8955_priv *wm8955 = i2c_get_clientdata(client);
-       wm8955_unregister(wm8955);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1118,7 +1025,7 @@ MODULE_DEVICE_TABLE(i2c, wm8955_i2c_id);
 
 static struct i2c_driver wm8955_i2c_driver = {
        .driver = {
-               .name = "wm8955",
+               .name = "wm8955-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8955_i2c_probe,
@@ -1129,7 +1036,7 @@ static struct i2c_driver wm8955_i2c_driver = {
 
 static int __init wm8955_modinit(void)
 {
-       int ret;
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8955_i2c_driver);
        if (ret != 0) {
@@ -1137,7 +1044,7 @@ static int __init wm8955_modinit(void)
                       ret);
        }
 #endif
-       return 0;
+       return ret;
 }
 module_init(wm8955_modinit);
 
index ae349c8531f61d3f6d492baea5c56d03cf357f5b..d13fd5c5fa630409d0400b48012c34cd91b8da0a 100644 (file)
@@ -15,9 +15,6 @@
 
 #define WM8955_CLK_MCLK 1
 
-extern struct snd_soc_dai wm8955_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8955;
-
 /*
  * Register values.
  */
index 3c6ee61f6c952220d05a648711eac86230b7cdfa..8d5efb333c33f260b271af07e9352b14679f0502 100644 (file)
@@ -29,8 +29,6 @@
 
 #define AUDIO_NAME "wm8960"
 
-struct snd_soc_codec_device soc_codec_dev_wm8960;
-
 /* R25 - Power 1 */
 #define WM8960_VMID_MASK 0x180
 #define WM8960_VREF      0x40
@@ -75,7 +73,10 @@ static const u16 wm8960_reg[WM8960_CACHEREGNUM] = {
 
 struct wm8960_priv {
        u16 reg_cache[WM8960_CACHEREGNUM];
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
+       int (*set_bias_level)(struct snd_soc_codec *,
+                             enum snd_soc_bias_level level);
        struct snd_soc_dapm_widget *lout1;
        struct snd_soc_dapm_widget *rout1;
        struct snd_soc_dapm_widget *out3;
@@ -507,8 +508,7 @@ static int wm8960_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8960_IFACE1) & 0xfff3;
        int i;
@@ -849,6 +849,14 @@ static int wm8960_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
        return 0;
 }
 
+static int wm8960_set_bias_level(struct snd_soc_codec *codec,
+                                enum snd_soc_bias_level level)
+{
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+
+       return wm8960->set_bias_level(codec, level);
+}
+
 #define WM8960_RATES SNDRV_PCM_RATE_8000_48000
 
 #define WM8960_FORMATS \
@@ -863,8 +871,8 @@ static struct snd_soc_dai_ops wm8960_dai_ops = {
        .set_pll = wm8960_set_dai_pll,
 };
 
-struct snd_soc_dai wm8960_dai = {
-       .name = "WM8960",
+static struct snd_soc_dai_driver wm8960_dai = {
+       .name = "wm8960-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -880,21 +888,18 @@ struct snd_soc_dai wm8960_dai = {
        .ops = &wm8960_dai_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8960_dai);
 
-static int wm8960_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8960_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
 
-       codec->set_bias_level(codec, SND_SOC_BIAS_OFF);
+       wm8960->set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8960_resume(struct platform_device *pdev)
+static int wm8960_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -906,78 +911,19 @@ static int wm8960_resume(struct platform_device *pdev)
                codec->hw_write(codec->control_data, data, 2);
        }
 
-       codec->set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
+       wm8960->set_bias_level(codec, SND_SOC_BIAS_STANDBY);
        return 0;
 }
 
-static struct snd_soc_codec *wm8960_codec;
-
-static int wm8960_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8960_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8960_codec;
-       codec = wm8960_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8960_snd_controls,
-                            ARRAY_SIZE(wm8960_snd_controls));
-       wm8960_add_widgets(codec);
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8960_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8960 = {
-       .probe =        wm8960_probe,
-       .remove =       wm8960_remove,
-       .suspend =      wm8960_suspend,
-       .resume =       wm8960_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8960);
-
-static int wm8960_register(struct wm8960_priv *wm8960,
-                          enum snd_soc_control_type control)
+static int wm8960_probe(struct snd_soc_codec *codec)
 {
-       struct wm8960_data *pdata = wm8960->codec.dev->platform_data;
-       struct snd_soc_codec *codec = &wm8960->codec;
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+       struct wm8960_data *pdata = dev_get_platdata(codec->dev);
        int ret;
        u16 reg;
 
-       if (wm8960_codec) {
-               dev_err(codec->dev, "Another WM8960 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       codec->set_bias_level = wm8960_set_bias_level_out3;
+       wm8960->set_bias_level = wm8960_set_bias_level_out3;
+       codec->control_data = wm8960->control_data;
 
        if (!pdata) {
                dev_warn(codec->dev, "No platform data supplied\n");
@@ -988,39 +934,22 @@ static int wm8960_register(struct wm8960_priv *wm8960,
                }
 
                if (pdata->capless)
-                       codec->set_bias_level = wm8960_set_bias_level_capless;
+                       wm8960->set_bias_level = wm8960_set_bias_level_capless;
        }
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8960);
-       codec->name = "WM8960";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->dai = &wm8960_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8960_CACHEREGNUM;
-       codec->reg_cache = &wm8960->reg_cache;
-
-       memcpy(codec->reg_cache, wm8960_reg, sizeof(wm8960_reg));
-
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8960->control_type);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = wm8960_reset(codec);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
+               return ret;
        }
 
-       wm8960_dai.dev = codec->dev;
-
-       codec->set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       wm8960->set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        /* Latch the update bits */
        reg = snd_soc_read(codec, WM8960_LINVOL);
@@ -1044,62 +973,58 @@ static int wm8960_register(struct wm8960_priv *wm8960,
        reg = snd_soc_read(codec, WM8960_ROUT2);
        snd_soc_write(codec, WM8960_ROUT2, reg | 0x100);
 
-       wm8960_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm8960_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8960_snd_controls,
+                                    ARRAY_SIZE(wm8960_snd_controls));
+       wm8960_add_widgets(codec);
 
        return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8960);
-       return ret;
 }
 
-static void wm8960_unregister(struct wm8960_priv *wm8960)
+/* power down chip */
+static int wm8960_remove(struct snd_soc_codec *codec)
 {
-       wm8960->codec.set_bias_level(&wm8960->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8960_dai);
-       snd_soc_unregister_codec(&wm8960->codec);
-       kfree(wm8960);
-       wm8960_codec = NULL;
+       struct wm8960_priv *wm8960 = snd_soc_codec_get_drvdata(codec);
+
+       wm8960->set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8960 = {
+       .probe =        wm8960_probe,
+       .remove =       wm8960_remove,
+       .suspend =      wm8960_suspend,
+       .resume =       wm8960_resume,
+       .set_bias_level = wm8960_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8960_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8960_reg,
+};
+
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8960_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8960_priv *wm8960;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8960 = kzalloc(sizeof(struct wm8960_priv), GFP_KERNEL);
        if (wm8960 == NULL)
                return -ENOMEM;
 
-       codec = &wm8960->codec;
-
        i2c_set_clientdata(i2c, wm8960);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
+       wm8960->control_data = i2c;
 
-       return wm8960_register(wm8960, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8960, &wm8960_dai, 1);
+       if (ret < 0)
+               kfree(wm8960);
+       return ret;
 }
 
 static __devexit int wm8960_i2c_remove(struct i2c_client *client)
 {
-       struct wm8960_priv *wm8960 = i2c_get_clientdata(client);
-       wm8960_unregister(wm8960);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1111,35 +1036,37 @@ MODULE_DEVICE_TABLE(i2c, wm8960_i2c_id);
 
 static struct i2c_driver wm8960_i2c_driver = {
        .driver = {
-               .name = "wm8960",
+               .name = "wm8960-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8960_i2c_probe,
        .remove =   __devexit_p(wm8960_i2c_remove),
        .id_table = wm8960_i2c_id,
 };
+#endif
 
 static int __init wm8960_modinit(void)
 {
-       int ret;
-
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8960_i2c_driver);
        if (ret != 0) {
                printk(KERN_ERR "Failed to register WM8960 I2C driver: %d\n",
                       ret);
        }
-
+#endif
        return ret;
 }
 module_init(wm8960_modinit);
 
 static void __exit wm8960_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8960_i2c_driver);
+#endif
 }
 module_exit(wm8960_exit);
 
-
 MODULE_DESCRIPTION("ASoC WM8960 driver");
 MODULE_AUTHOR("Liam Girdwood");
 MODULE_LICENSE("GPL");
index a5ef65481b86e036bdad252b7aba50a6f14ec2e5..2d8163d7004b86a59c4f34522bd2f1d3f74a8e24 100644 (file)
 #define WM8960_OPCLK_DIV_5_5           (4 << 0)
 #define WM8960_OPCLK_DIV_6             (5 << 0)
 
-extern struct snd_soc_dai wm8960_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8960;
-
 #endif
index 2549d3a297ab957c3bacc608089beef0c688bff2..bfc6578ed060e874f75acbb25d0746033ae22b2a 100644 (file)
@@ -288,7 +288,7 @@ static u16 wm8961_reg_defaults[] = {
 };
 
 struct wm8961_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        int sysclk;
        u16 reg_cache[WM8961_MAX_REGISTER];
 };
@@ -940,8 +940,8 @@ static struct snd_soc_dai_ops wm8961_dai_ops = {
        .set_clkdiv = wm8961_set_clkdiv,
 };
 
-struct snd_soc_dai wm8961_dai = {
-       .name = "WM8961",
+static struct snd_soc_dai_driver wm8961_dai = {
+       .name = "wm8961-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 1,
@@ -956,140 +956,22 @@ struct snd_soc_dai wm8961_dai = {
                .formats = WM8961_FORMATS,},
        .ops = &wm8961_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8961_dai);
 
-
-static struct snd_soc_codec *wm8961_codec;
-
-static int wm8961_probe(struct platform_device *pdev)
+static int wm8961_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
        int ret = 0;
-
-       if (wm8961_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8961_codec;
-       codec = wm8961_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8961_snd_controls,
-                               ARRAY_SIZE(wm8961_snd_controls));
-       snd_soc_dapm_new_controls(codec, wm8961_dapm_widgets,
-                                 ARRAY_SIZE(wm8961_dapm_widgets));
-       snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths));
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-static int wm8961_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-#ifdef CONFIG_PM
-static int wm8961_suspend(struct platform_device *pdev, pm_message_t state)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       wm8961_set_bias_level(codec, SND_SOC_BIAS_OFF);
-
-       return 0;
-}
-
-static int wm8961_resume(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-       u16 *reg_cache = codec->reg_cache;
-       int i;
-
-       for (i = 0; i < codec->reg_cache_size; i++) {
-               if (reg_cache[i] == wm8961_reg_defaults[i])
-                       continue;
-
-               if (i == WM8961_SOFTWARE_RESET)
-                       continue;
-
-               snd_soc_write(codec, i, reg_cache[i]);
-       }
-
-       wm8961_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
-       return 0;
-}
-#else
-#define wm8961_suspend NULL
-#define wm8961_resume NULL
-#endif
-
-struct snd_soc_codec_device soc_codec_dev_wm8961 = {
-       .probe =        wm8961_probe,
-       .remove =       wm8961_remove,
-       .suspend =      wm8961_suspend,
-       .resume =       wm8961_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8961);
-
-static int wm8961_register(struct wm8961_priv *wm8961)
-{
-       struct snd_soc_codec *codec = &wm8961->codec;
-       int ret;
        u16 reg;
 
-       if (wm8961_codec) {
-               dev_err(codec->dev, "Another WM8961 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8961);
-       codec->name = "WM8961";
-       codec->owner = THIS_MODULE;
-       codec->dai = &wm8961_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm8961->reg_cache);
-       codec->reg_cache = &wm8961->reg_cache;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8961_set_bias_level;
-       codec->volatile_register = wm8961_volatile_register;
-
-       memcpy(codec->reg_cache, wm8961_reg_defaults,
-              sizeof(wm8961_reg_defaults));
-
        ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
        if (ret != 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        reg = snd_soc_read(codec, WM8961_SOFTWARE_RESET);
        if (reg != 0x1801) {
                dev_err(codec->dev, "Device is not a WM8961: ID=0x%x\n", reg);
-               ret = -EINVAL;
-               goto err;
+               return -EINVAL;
        }
 
        /* This isn't volatile - readback doesn't correspond to write */
@@ -1102,7 +984,7 @@ static int wm8961_register(struct wm8961_priv *wm8961)
        ret = wm8961_reset(codec);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
+               return ret;
        }
 
        /* Enable class W */
@@ -1140,64 +1022,89 @@ static int wm8961_register(struct wm8961_priv *wm8961)
 
        wm8961_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
-       wm8961_dai.dev = codec->dev;
+       snd_soc_add_controls(codec, wm8961_snd_controls,
+                               ARRAY_SIZE(wm8961_snd_controls));
+       snd_soc_dapm_new_controls(codec, wm8961_dapm_widgets,
+                                 ARRAY_SIZE(wm8961_dapm_widgets));
+       snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths));
 
-       wm8961_codec = codec;
+       return 0;
+}
 
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
+static int wm8961_remove(struct snd_soc_codec *codec)
+{
+       wm8961_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
+}
 
-       ret = snd_soc_register_dai(&wm8961_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+#ifdef CONFIG_PM
+static int wm8961_suspend(struct snd_soc_codec *codec, pm_message_t state)
+{
+       wm8961_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8961);
-       return ret;
 }
 
-static void wm8961_unregister(struct wm8961_priv *wm8961)
+static int wm8961_resume(struct snd_soc_codec *codec)
 {
-       wm8961_set_bias_level(&wm8961->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8961_dai);
-       snd_soc_unregister_codec(&wm8961->codec);
-       kfree(wm8961);
-       wm8961_codec = NULL;
+       u16 *reg_cache = codec->reg_cache;
+       int i;
+
+       for (i = 0; i < codec->driver->reg_cache_size; i++) {
+               if (reg_cache[i] == wm8961_reg_defaults[i])
+                       continue;
+
+               if (i == WM8961_SOFTWARE_RESET)
+                       continue;
+
+               snd_soc_write(codec, i, reg_cache[i]);
+       }
+
+       wm8961_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
+       return 0;
 }
+#else
+#define wm8961_suspend NULL
+#define wm8961_resume NULL
+#endif
+
+static struct snd_soc_codec_driver soc_codec_dev_wm8961 = {
+       .probe =        wm8961_probe,
+       .remove =       wm8961_remove,
+       .suspend =      wm8961_suspend,
+       .resume =       wm8961_resume,
+       .set_bias_level = wm8961_set_bias_level,
+       .reg_cache_size = sizeof(wm8961_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8961_reg_defaults,
+       .volatile_register = wm8961_volatile_register,
+};
 
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8961_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8961_priv *wm8961;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8961 = kzalloc(sizeof(struct wm8961_priv), GFP_KERNEL);
        if (wm8961 == NULL)
                return -ENOMEM;
 
-       codec = &wm8961->codec;
-
        i2c_set_clientdata(i2c, wm8961);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
 
-       return wm8961_register(wm8961);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8961, &wm8961_dai, 1);
+       if (ret < 0)
+               kfree(wm8961);
+       return ret;
 }
 
 static __devexit int wm8961_i2c_remove(struct i2c_client *client)
 {
-       struct wm8961_priv *wm8961 = i2c_get_clientdata(client);
-       wm8961_unregister(wm8961);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1209,35 +1116,37 @@ MODULE_DEVICE_TABLE(i2c, wm8961_i2c_id);
 
 static struct i2c_driver wm8961_i2c_driver = {
        .driver = {
-               .name = "wm8961",
+               .name = "wm8961-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8961_i2c_probe,
        .remove =   __devexit_p(wm8961_i2c_remove),
        .id_table = wm8961_i2c_id,
 };
+#endif
 
 static int __init wm8961_modinit(void)
 {
-       int ret;
-
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8961_i2c_driver);
        if (ret != 0) {
-               printk(KERN_ERR "Failed to register WM8961 I2C driver: %d\n",
+               printk(KERN_ERR "Failed to register wm8961 I2C driver: %d\n",
                       ret);
        }
-
+#endif
        return ret;
 }
 module_init(wm8961_modinit);
 
 static void __exit wm8961_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8961_i2c_driver);
+#endif
 }
 module_exit(wm8961_exit);
 
-
 MODULE_DESCRIPTION("ASoC WM8961 driver");
 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
 MODULE_LICENSE("GPL");
index 5513bfd720d68c05167ffa6e6179c45eed322477..1d736e5701c85b7a2bdcb80f6efdcbf24a66822c 100644 (file)
@@ -11,9 +11,6 @@
 
 #include <sound/soc.h>
 
-extern struct snd_soc_codec_device soc_codec_dev_wm8961;
-extern struct snd_soc_dai wm8961_dai;
-
 #define WM8961_BCLK  1
 #define WM8961_LRCLK 2
 
diff --git a/sound/soc/codecs/wm8962-tables.c b/sound/soc/codecs/wm8962-tables.c
new file mode 100644 (file)
index 0000000..f21a8c1
--- /dev/null
@@ -0,0 +1,42299 @@
+/*
+ * wm8962-tables.c  --  WM8962 ASoC driver
+ *
+ * Copyright 2010 Wolfson Microelectronics, plc
+ *
+ * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include "wm8962.h"
+
+const u16 wm8962_reg[WM8962_MAX_REGISTER + 1] = {
+       0x009F,     /* R0     - Left Input volume */
+       0x049F,     /* R1     - Right Input volume */
+       0x0000,     /* R2     - HPOUTL volume */
+       0x0000,     /* R3     - HPOUTR volume */
+       0x0020,     /* R4     - Clocking1 */
+       0x0018,     /* R5     - ADC & DAC Control 1 */
+       0x2008,     /* R6     - ADC & DAC Control 2 */
+       0x000A,     /* R7     - Audio Interface 0 */
+       0x01E4,     /* R8     - Clocking2 */
+       0x0300,     /* R9     - Audio Interface 1 */
+       0x00C0,     /* R10    - Left DAC volume */
+       0x00C0,     /* R11    - Right DAC volume */
+       0x0000,     /* R12 */
+       0x0000,     /* R13 */
+       0x0040,     /* R14    - Audio Interface 2 */
+       0x6243,     /* R15    - Software Reset */
+       0x0000,     /* R16 */
+       0x007B,     /* R17    - ALC1 */
+       0x0000,     /* R18    - ALC2 */
+       0x1C32,     /* R19    - ALC3 */
+       0x3200,     /* R20    - Noise Gate */
+       0x00C0,     /* R21    - Left ADC volume */
+       0x00C0,     /* R22    - Right ADC volume */
+       0x0160,     /* R23    - Additional control(1) */
+       0x0000,     /* R24    - Additional control(2) */
+       0x0000,     /* R25    - Pwr Mgmt (1) */
+       0x0000,     /* R26    - Pwr Mgmt (2) */
+       0x0010,     /* R27    - Additional Control (3) */
+       0x0000,     /* R28    - Anti-pop */
+       0x0000,     /* R29 */
+       0x005E,     /* R30    - Clocking 3 */
+       0x0000,     /* R31    - Input mixer control (1) */
+       0x0145,     /* R32    - Left input mixer volume */
+       0x0145,     /* R33    - Right input mixer volume */
+       0x0009,     /* R34    - Input mixer control (2) */
+       0x0003,     /* R35    - Input bias control */
+       0x0000,     /* R36 */
+       0x0008,     /* R37    - Left input PGA control */
+       0x0008,     /* R38    - Right input PGA control */
+       0x0000,     /* R39 */
+       0x0000,     /* R40    - SPKOUTL volume */
+       0x0000,     /* R41    - SPKOUTR volume */
+       0x0000,     /* R42 */
+       0x0000,     /* R43 */
+       0x0000,     /* R44 */
+       0x0000,     /* R45 */
+       0x0000,     /* R46 */
+       0x0000,     /* R47    - Thermal Shutdown Status */
+       0x8027,     /* R48    - Additional Control (4) */
+       0x0010,     /* R49    - Class D Control 1 */
+       0x0000,     /* R50 */
+       0x0003,     /* R51    - Class D Control 2 */
+       0x0000,     /* R52 */
+       0x0000,     /* R53 */
+       0x0000,     /* R54 */
+       0x0000,     /* R55 */
+       0x0506,     /* R56    - Clocking 4 */
+       0x0000,     /* R57    - DAC DSP Mixing (1) */
+       0x0000,     /* R58    - DAC DSP Mixing (2) */
+       0x0000,     /* R59 */
+       0x0300,     /* R60    - DC Servo 0 */
+       0x0300,     /* R61    - DC Servo 1 */
+       0x0000,     /* R62 */
+       0x0000,     /* R63 */
+       0x0810,     /* R64    - DC Servo 4 */
+       0x0000,     /* R65 */
+       0x0000,     /* R66    - DC Servo 6 */
+       0x0000,     /* R67 */
+       0x001B,     /* R68    - Analogue PGA Bias */
+       0x0000,     /* R69    - Analogue HP 0 */
+       0x0000,     /* R70 */
+       0x01FB,     /* R71    - Analogue HP 2 */
+       0x0000,     /* R72    - Charge Pump 1 */
+       0x0000,     /* R73 */
+       0x0000,     /* R74 */
+       0x0000,     /* R75 */
+       0x0000,     /* R76 */
+       0x0000,     /* R77 */
+       0x0000,     /* R78 */
+       0x0000,     /* R79 */
+       0x0000,     /* R80 */
+       0x0000,     /* R81 */
+       0x0004,     /* R82    - Charge Pump B */
+       0x0000,     /* R83 */
+       0x0000,     /* R84 */
+       0x0000,     /* R85 */
+       0x0000,     /* R86 */
+       0x0000,     /* R87    - Write Sequencer Control 1 */
+       0x0000,     /* R88 */
+       0x0000,     /* R89 */
+       0x0000,     /* R90    - Write Sequencer Control 2 */
+       0x0000,     /* R91 */
+       0x0000,     /* R92 */
+       0x0000,     /* R93    - Write Sequencer Control 3 */
+       0x0000,     /* R94    - Control Interface */
+       0x0000,     /* R95 */
+       0x0000,     /* R96 */
+       0x0000,     /* R97 */
+       0x0000,     /* R98 */
+       0x0000,     /* R99    - Mixer Enables */
+       0x0000,     /* R100   - Headphone Mixer (1) */
+       0x0000,     /* R101   - Headphone Mixer (2) */
+       0x013F,     /* R102   - Headphone Mixer (3) */
+       0x013F,     /* R103   - Headphone Mixer (4) */
+       0x0000,     /* R104 */
+       0x0000,     /* R105   - Speaker Mixer (1) */
+       0x0000,     /* R106   - Speaker Mixer (2) */
+       0x013F,     /* R107   - Speaker Mixer (3) */
+       0x013F,     /* R108   - Speaker Mixer (4) */
+       0x0003,     /* R109   - Speaker Mixer (5) */
+       0x0002,     /* R110   - Beep Generator (1) */
+       0x0000,     /* R111 */
+       0x0000,     /* R112 */
+       0x0000,     /* R113 */
+       0x0000,     /* R114 */
+       0x0006,     /* R115   - Oscillator Trim (3) */
+       0x0026,     /* R116   - Oscillator Trim (4) */
+       0x0000,     /* R117 */
+       0x0000,     /* R118 */
+       0x0000,     /* R119   - Oscillator Trim (7) */
+       0x0000,     /* R120 */
+       0x0000,     /* R121 */
+       0x0000,     /* R122 */
+       0x0000,     /* R123 */
+       0x0011,     /* R124   - Analogue Clocking1 */
+       0x004B,     /* R125   - Analogue Clocking2 */
+       0x000D,     /* R126   - Analogue Clocking3 */
+       0x0000,     /* R127   - PLL Software Reset */
+       0x0000,     /* R128 */
+       0x0000,     /* R129   - PLL2 */
+       0x0000,     /* R130 */
+       0x0000,     /* R131   - PLL 4 */
+       0x0000,     /* R132 */
+       0x0000,     /* R133 */
+       0x0000,     /* R134 */
+       0x0000,     /* R135 */
+       0x0067,     /* R136   - PLL 9 */
+       0x001C,     /* R137   - PLL 10 */
+       0x0071,     /* R138   - PLL 11 */
+       0x00C7,     /* R139   - PLL 12 */
+       0x0067,     /* R140   - PLL 13 */
+       0x0048,     /* R141   - PLL 14 */
+       0x0022,     /* R142   - PLL 15 */
+       0x0097,     /* R143   - PLL 16 */
+       0x0000,     /* R144 */
+       0x0000,     /* R145 */
+       0x0000,     /* R146 */
+       0x0000,     /* R147 */
+       0x0000,     /* R148 */
+       0x0000,     /* R149 */
+       0x0000,     /* R150 */
+       0x0000,     /* R151 */
+       0x0000,     /* R152 */
+       0x0000,     /* R153 */
+       0x0000,     /* R154 */
+       0x000C,     /* R155   - FLL Control (1) */
+       0x0039,     /* R156   - FLL Control (2) */
+       0x0180,     /* R157   - FLL Control (3) */
+       0x0000,     /* R158 */
+       0x0032,     /* R159   - FLL Control (5) */
+       0x0018,     /* R160   - FLL Control (6) */
+       0x007D,     /* R161   - FLL Control (7) */
+       0x0008,     /* R162   - FLL Control (8) */
+       0x0000,     /* R163 */
+       0x0000,     /* R164 */
+       0x0000,     /* R165 */
+       0x0000,     /* R166 */
+       0x0000,     /* R167 */
+       0x0000,     /* R168 */
+       0x0000,     /* R169 */
+       0x0000,     /* R170 */
+       0x0000,     /* R171 */
+       0x0000,     /* R172 */
+       0x0000,     /* R173 */
+       0x0000,     /* R174 */
+       0x0000,     /* R175 */
+       0x0000,     /* R176 */
+       0x0000,     /* R177 */
+       0x0000,     /* R178 */
+       0x0000,     /* R179 */
+       0x0000,     /* R180 */
+       0x0000,     /* R181 */
+       0x0000,     /* R182 */
+       0x0000,     /* R183 */
+       0x0000,     /* R184 */
+       0x0000,     /* R185 */
+       0x0000,     /* R186 */
+       0x0000,     /* R187 */
+       0x0000,     /* R188 */
+       0x0000,     /* R189 */
+       0x0000,     /* R190 */
+       0x0000,     /* R191 */
+       0x0000,     /* R192 */
+       0x0000,     /* R193 */
+       0x0000,     /* R194 */
+       0x0000,     /* R195 */
+       0x0000,     /* R196 */
+       0x0000,     /* R197 */
+       0x0000,     /* R198 */
+       0x0000,     /* R199 */
+       0x0000,     /* R200 */
+       0x0000,     /* R201 */
+       0x0000,     /* R202 */
+       0x0000,     /* R203 */
+       0x0000,     /* R204 */
+       0x0000,     /* R205 */
+       0x0000,     /* R206 */
+       0x0000,     /* R207 */
+       0x0000,     /* R208 */
+       0x0000,     /* R209 */
+       0x0000,     /* R210 */
+       0x0000,     /* R211 */
+       0x0000,     /* R212 */
+       0x0000,     /* R213 */
+       0x0000,     /* R214 */
+       0x0000,     /* R215 */
+       0x0000,     /* R216 */
+       0x0000,     /* R217 */
+       0x0000,     /* R218 */
+       0x0000,     /* R219 */
+       0x0000,     /* R220 */
+       0x0000,     /* R221 */
+       0x0000,     /* R222 */
+       0x0000,     /* R223 */
+       0x0000,     /* R224 */
+       0x0000,     /* R225 */
+       0x0000,     /* R226 */
+       0x0000,     /* R227 */
+       0x0000,     /* R228 */
+       0x0000,     /* R229 */
+       0x0000,     /* R230 */
+       0x0000,     /* R231 */
+       0x0000,     /* R232 */
+       0x0000,     /* R233 */
+       0x0000,     /* R234 */
+       0x0000,     /* R235 */
+       0x0000,     /* R236 */
+       0x0000,     /* R237 */
+       0x0000,     /* R238 */
+       0x0000,     /* R239 */
+       0x0000,     /* R240 */
+       0x0000,     /* R241 */
+       0x0000,     /* R242 */
+       0x0000,     /* R243 */
+       0x0000,     /* R244 */
+       0x0000,     /* R245 */
+       0x0000,     /* R246 */
+       0x0000,     /* R247 */
+       0x0000,     /* R248 */
+       0x0000,     /* R249 */
+       0x0000,     /* R250 */
+       0x0000,     /* R251 */
+       0x0005,     /* R252   - General test 1 */
+       0x0000,     /* R253 */
+       0x0000,     /* R254 */
+       0x0000,     /* R255 */
+       0x0000,     /* R256   - DF1 */
+       0x0000,     /* R257   - DF2 */
+       0x0000,     /* R258   - DF3 */
+       0x0000,     /* R259   - DF4 */
+       0x0000,     /* R260   - DF5 */
+       0x0000,     /* R261   - DF6 */
+       0x0000,     /* R262   - DF7 */
+       0x0000,     /* R263 */
+       0x0000,     /* R264   - LHPF1 */
+       0x0000,     /* R265   - LHPF2 */
+       0x0000,     /* R266 */
+       0x0000,     /* R267 */
+       0x0000,     /* R268   - THREED1 */
+       0x0000,     /* R269   - THREED2 */
+       0x0000,     /* R270   - THREED3 */
+       0x0000,     /* R271   - THREED4 */
+       0x0000,     /* R272 */
+       0x0000,     /* R273 */
+       0x0000,     /* R274 */
+       0x0000,     /* R275 */
+       0x000C,     /* R276   - DRC 1 */
+       0x0925,     /* R277   - DRC 2 */
+       0x0000,     /* R278   - DRC 3 */
+       0x0000,     /* R279   - DRC 4 */
+       0x0000,     /* R280   - DRC 5 */
+       0x0000,     /* R281 */
+       0x0000,     /* R282 */
+       0x0000,     /* R283 */
+       0x0000,     /* R284 */
+       0x0000,     /* R285   - Tloopback */
+       0x0000,     /* R286 */
+       0x0000,     /* R287 */
+       0x0000,     /* R288 */
+       0x0000,     /* R289 */
+       0x0000,     /* R290 */
+       0x0000,     /* R291 */
+       0x0000,     /* R292 */
+       0x0000,     /* R293 */
+       0x0000,     /* R294 */
+       0x0000,     /* R295 */
+       0x0000,     /* R296 */
+       0x0000,     /* R297 */
+       0x0000,     /* R298 */
+       0x0000,     /* R299 */
+       0x0000,     /* R300 */
+       0x0000,     /* R301 */
+       0x0000,     /* R302 */
+       0x0000,     /* R303 */
+       0x0000,     /* R304 */
+       0x0000,     /* R305 */
+       0x0000,     /* R306 */
+       0x0000,     /* R307 */
+       0x0000,     /* R308 */
+       0x0000,     /* R309 */
+       0x0000,     /* R310 */
+       0x0000,     /* R311 */
+       0x0000,     /* R312 */
+       0x0000,     /* R313 */
+       0x0000,     /* R314 */
+       0x0000,     /* R315 */
+       0x0000,     /* R316 */
+       0x0000,     /* R317 */
+       0x0000,     /* R318 */
+       0x0000,     /* R319 */
+       0x0000,     /* R320 */
+       0x0000,     /* R321 */
+       0x0000,     /* R322 */
+       0x0000,     /* R323 */
+       0x0000,     /* R324 */
+       0x0000,     /* R325 */
+       0x0000,     /* R326 */
+       0x0000,     /* R327 */
+       0x0000,     /* R328 */
+       0x0000,     /* R329 */
+       0x0000,     /* R330 */
+       0x0000,     /* R331 */
+       0x0000,     /* R332 */
+       0x0000,     /* R333 */
+       0x0000,     /* R334 */
+       0x0004,     /* R335   - EQ1 */
+       0x6318,     /* R336   - EQ2 */
+       0x6300,     /* R337   - EQ3 */
+       0x0FCA,     /* R338   - EQ4 */
+       0x0400,     /* R339   - EQ5 */
+       0x00D8,     /* R340   - EQ6 */
+       0x1EB5,     /* R341   - EQ7 */
+       0xF145,     /* R342   - EQ8 */
+       0x0B75,     /* R343   - EQ9 */
+       0x01C5,     /* R344   - EQ10 */
+       0x1C58,     /* R345   - EQ11 */
+       0xF373,     /* R346   - EQ12 */
+       0x0A54,     /* R347   - EQ13 */
+       0x0558,     /* R348   - EQ14 */
+       0x168E,     /* R349   - EQ15 */
+       0xF829,     /* R350   - EQ16 */
+       0x07AD,     /* R351   - EQ17 */
+       0x1103,     /* R352   - EQ18 */
+       0x0564,     /* R353   - EQ19 */
+       0x0559,     /* R354   - EQ20 */
+       0x4000,     /* R355   - EQ21 */
+       0x6318,     /* R356   - EQ22 */
+       0x6300,     /* R357   - EQ23 */
+       0x0FCA,     /* R358   - EQ24 */
+       0x0400,     /* R359   - EQ25 */
+       0x00D8,     /* R360   - EQ26 */
+       0x1EB5,     /* R361   - EQ27 */
+       0xF145,     /* R362   - EQ28 */
+       0x0B75,     /* R363   - EQ29 */
+       0x01C5,     /* R364   - EQ30 */
+       0x1C58,     /* R365   - EQ31 */
+       0xF373,     /* R366   - EQ32 */
+       0x0A54,     /* R367   - EQ33 */
+       0x0558,     /* R368   - EQ34 */
+       0x168E,     /* R369   - EQ35 */
+       0xF829,     /* R370   - EQ36 */
+       0x07AD,     /* R371   - EQ37 */
+       0x1103,     /* R372   - EQ38 */
+       0x0564,     /* R373   - EQ39 */
+       0x0559,     /* R374   - EQ40 */
+       0x4000,     /* R375   - EQ41 */
+       0x0000,     /* R376 */
+       0x0000,     /* R377 */
+       0x0000,     /* R378 */
+       0x0000,     /* R379 */
+       0x0000,     /* R380 */
+       0x0000,     /* R381 */
+       0x0000,     /* R382 */
+       0x0000,     /* R383 */
+       0x0000,     /* R384 */
+       0x0000,     /* R385 */
+       0x0000,     /* R386 */
+       0x0000,     /* R387 */
+       0x0000,     /* R388 */
+       0x0000,     /* R389 */
+       0x0000,     /* R390 */
+       0x0000,     /* R391 */
+       0x0000,     /* R392 */
+       0x0000,     /* R393 */
+       0x0000,     /* R394 */
+       0x0000,     /* R395 */
+       0x0000,     /* R396 */
+       0x0000,     /* R397 */
+       0x0000,     /* R398 */
+       0x0000,     /* R399 */
+       0x0000,     /* R400 */
+       0x0000,     /* R401 */
+       0x0000,     /* R402 */
+       0x0000,     /* R403 */
+       0x0000,     /* R404 */
+       0x0000,     /* R405 */
+       0x0000,     /* R406 */
+       0x0000,     /* R407 */
+       0x0000,     /* R408 */
+       0x0000,     /* R409 */
+       0x0000,     /* R410 */
+       0x0000,     /* R411 */
+       0x0000,     /* R412 */
+       0x0000,     /* R413 */
+       0x0000,     /* R414 */
+       0x0000,     /* R415 */
+       0x0000,     /* R416 */
+       0x0000,     /* R417 */
+       0x0000,     /* R418 */
+       0x0000,     /* R419 */
+       0x0000,     /* R420 */
+       0x0000,     /* R421 */
+       0x0000,     /* R422 */
+       0x0000,     /* R423 */
+       0x0000,     /* R424 */
+       0x0000,     /* R425 */
+       0x0000,     /* R426 */
+       0x0000,     /* R427 */
+       0x0000,     /* R428 */
+       0x0000,     /* R429 */
+       0x0000,     /* R430 */
+       0x0000,     /* R431 */
+       0x0000,     /* R432 */
+       0x0000,     /* R433 */
+       0x0000,     /* R434 */
+       0x0000,     /* R435 */
+       0x0000,     /* R436 */
+       0x0000,     /* R437 */
+       0x0000,     /* R438 */
+       0x0000,     /* R439 */
+       0x0000,     /* R440 */
+       0x0000,     /* R441 */
+       0x0000,     /* R442 */
+       0x0000,     /* R443 */
+       0x0000,     /* R444 */
+       0x0000,     /* R445 */
+       0x0000,     /* R446 */
+       0x0000,     /* R447 */
+       0x0000,     /* R448 */
+       0x0000,     /* R449 */
+       0x0000,     /* R450 */
+       0x0000,     /* R451 */
+       0x0000,     /* R452 */
+       0x0000,     /* R453 */
+       0x0000,     /* R454 */
+       0x0000,     /* R455 */
+       0x0000,     /* R456 */
+       0x0000,     /* R457 */
+       0x0000,     /* R458 */
+       0x0000,     /* R459 */
+       0x0000,     /* R460 */
+       0x0000,     /* R461 */
+       0x0000,     /* R462 */
+       0x0000,     /* R463 */
+       0x0000,     /* R464 */
+       0x0000,     /* R465 */
+       0x0000,     /* R466 */
+       0x0000,     /* R467 */
+       0x0000,     /* R468 */
+       0x0000,     /* R469 */
+       0x0000,     /* R470 */
+       0x0000,     /* R471 */
+       0x0000,     /* R472 */
+       0x0000,     /* R473 */
+       0x0000,     /* R474 */
+       0x0000,     /* R475 */
+       0x0000,     /* R476 */
+       0x0000,     /* R477 */
+       0x0000,     /* R478 */
+       0x0000,     /* R479 */
+       0x0000,     /* R480 */
+       0x0000,     /* R481 */
+       0x0000,     /* R482 */
+       0x0000,     /* R483 */
+       0x0000,     /* R484 */
+       0x0000,     /* R485 */
+       0x0000,     /* R486 */
+       0x0000,     /* R487 */
+       0x0000,     /* R488 */
+       0x0000,     /* R489 */
+       0x0000,     /* R490 */
+       0x0000,     /* R491 */
+       0x0000,     /* R492 */
+       0x0000,     /* R493 */
+       0x0000,     /* R494 */
+       0x0000,     /* R495 */
+       0x0000,     /* R496 */
+       0x0000,     /* R497 */
+       0x0000,     /* R498 */
+       0x0000,     /* R499 */
+       0x0000,     /* R500 */
+       0x0000,     /* R501 */
+       0x0000,     /* R502 */
+       0x0000,     /* R503 */
+       0x0000,     /* R504 */
+       0x0000,     /* R505 */
+       0x0000,     /* R506 */
+       0x0000,     /* R507 */
+       0x0000,     /* R508 */
+       0x0000,     /* R509 */
+       0x0000,     /* R510 */
+       0x0000,     /* R511 */
+       0x0000,     /* R512 */
+       0x0000,     /* R513   - GPIO 2 */
+       0x0000,     /* R514   - GPIO 3 */
+       0x0000,     /* R515 */
+       0x8100,     /* R516   - GPIO 5 */
+       0x8100,     /* R517   - GPIO 6 */
+       0x0000,     /* R518 */
+       0x0000,     /* R519 */
+       0x0000,     /* R520 */
+       0x0000,     /* R521 */
+       0x0000,     /* R522 */
+       0x0000,     /* R523 */
+       0x0000,     /* R524 */
+       0x0000,     /* R525 */
+       0x0000,     /* R526 */
+       0x0000,     /* R527 */
+       0x0000,     /* R528 */
+       0x0000,     /* R529 */
+       0x0000,     /* R530 */
+       0x0000,     /* R531 */
+       0x0000,     /* R532 */
+       0x0000,     /* R533 */
+       0x0000,     /* R534 */
+       0x0000,     /* R535 */
+       0x0000,     /* R536 */
+       0x0000,     /* R537 */
+       0x0000,     /* R538 */
+       0x0000,     /* R539 */
+       0x0000,     /* R540 */
+       0x0000,     /* R541 */
+       0x0000,     /* R542 */
+       0x0000,     /* R543 */
+       0x0000,     /* R544 */
+       0x0000,     /* R545 */
+       0x0000,     /* R546 */
+       0x0000,     /* R547 */
+       0x0000,     /* R548 */
+       0x0000,     /* R549 */
+       0x0000,     /* R550 */
+       0x0000,     /* R551 */
+       0x0000,     /* R552 */
+       0x0000,     /* R553 */
+       0x0000,     /* R554 */
+       0x0000,     /* R555 */
+       0x0000,     /* R556 */
+       0x0000,     /* R557 */
+       0x0000,     /* R558 */
+       0x0000,     /* R559 */
+       0x0000,     /* R560   - Interrupt Status 1 */
+       0x0000,     /* R561   - Interrupt Status 2 */
+       0x0000,     /* R562 */
+       0x0000,     /* R563 */
+       0x0000,     /* R564 */
+       0x0000,     /* R565 */
+       0x0000,     /* R566 */
+       0x0000,     /* R567 */
+       0x0030,     /* R568   - Interrupt Status 1 Mask */
+       0xFFED,     /* R569   - Interrupt Status 2 Mask */
+       0x0000,     /* R570 */
+       0x0000,     /* R571 */
+       0x0000,     /* R572 */
+       0x0000,     /* R573 */
+       0x0000,     /* R574 */
+       0x0000,     /* R575 */
+       0x0000,     /* R576   - Interrupt Control */
+       0x0000,     /* R577 */
+       0x0000,     /* R578 */
+       0x0000,     /* R579 */
+       0x0000,     /* R580 */
+       0x0000,     /* R581 */
+       0x0000,     /* R582 */
+       0x0000,     /* R583 */
+       0x002D,     /* R584   - IRQ Debounce */
+       0x0000,     /* R585 */
+       0x0000,     /* R586   -  MICINT Source Pol */
+       0x0000,     /* R587 */
+       0x0000,     /* R588 */
+       0x0000,     /* R589 */
+       0x0000,     /* R590 */
+       0x0000,     /* R591 */
+       0x0000,     /* R592 */
+       0x0000,     /* R593 */
+       0x0000,     /* R594 */
+       0x0000,     /* R595 */
+       0x0000,     /* R596 */
+       0x0000,     /* R597 */
+       0x0000,     /* R598 */
+       0x0000,     /* R599 */
+       0x0000,     /* R600 */
+       0x0000,     /* R601 */
+       0x0000,     /* R602 */
+       0x0000,     /* R603 */
+       0x0000,     /* R604 */
+       0x0000,     /* R605 */
+       0x0000,     /* R606 */
+       0x0000,     /* R607 */
+       0x0000,     /* R608 */
+       0x0000,     /* R609 */
+       0x0000,     /* R610 */
+       0x0000,     /* R611 */
+       0x0000,     /* R612 */
+       0x0000,     /* R613 */
+       0x0000,     /* R614 */
+       0x0000,     /* R615 */
+       0x0000,     /* R616 */
+       0x0000,     /* R617 */
+       0x0000,     /* R618 */
+       0x0000,     /* R619 */
+       0x0000,     /* R620 */
+       0x0000,     /* R621 */
+       0x0000,     /* R622 */
+       0x0000,     /* R623 */
+       0x0000,     /* R624 */
+       0x0000,     /* R625 */
+       0x0000,     /* R626 */
+       0x0000,     /* R627 */
+       0x0000,     /* R628 */
+       0x0000,     /* R629 */
+       0x0000,     /* R630 */
+       0x0000,     /* R631 */
+       0x0000,     /* R632 */
+       0x0000,     /* R633 */
+       0x0000,     /* R634 */
+       0x0000,     /* R635 */
+       0x0000,     /* R636 */
+       0x0000,     /* R637 */
+       0x0000,     /* R638 */
+       0x0000,     /* R639 */
+       0x0000,     /* R640 */
+       0x0000,     /* R641 */
+       0x0000,     /* R642 */
+       0x0000,     /* R643 */
+       0x0000,     /* R644 */
+       0x0000,     /* R645 */
+       0x0000,     /* R646 */
+       0x0000,     /* R647 */
+       0x0000,     /* R648 */
+       0x0000,     /* R649 */
+       0x0000,     /* R650 */
+       0x0000,     /* R651 */
+       0x0000,     /* R652 */
+       0x0000,     /* R653 */
+       0x0000,     /* R654 */
+       0x0000,     /* R655 */
+       0x0000,     /* R656 */
+       0x0000,     /* R657 */
+       0x0000,     /* R658 */
+       0x0000,     /* R659 */
+       0x0000,     /* R660 */
+       0x0000,     /* R661 */
+       0x0000,     /* R662 */
+       0x0000,     /* R663 */
+       0x0000,     /* R664 */
+       0x0000,     /* R665 */
+       0x0000,     /* R666 */
+       0x0000,     /* R667 */
+       0x0000,     /* R668 */
+       0x0000,     /* R669 */
+       0x0000,     /* R670 */
+       0x0000,     /* R671 */
+       0x0000,     /* R672 */
+       0x0000,     /* R673 */
+       0x0000,     /* R674 */
+       0x0000,     /* R675 */
+       0x0000,     /* R676 */
+       0x0000,     /* R677 */
+       0x0000,     /* R678 */
+       0x0000,     /* R679 */
+       0x0000,     /* R680 */
+       0x0000,     /* R681 */
+       0x0000,     /* R682 */
+       0x0000,     /* R683 */
+       0x0000,     /* R684 */
+       0x0000,     /* R685 */
+       0x0000,     /* R686 */
+       0x0000,     /* R687 */
+       0x0000,     /* R688 */
+       0x0000,     /* R689 */
+       0x0000,     /* R690 */
+       0x0000,     /* R691 */
+       0x0000,     /* R692 */
+       0x0000,     /* R693 */
+       0x0000,     /* R694 */
+       0x0000,     /* R695 */
+       0x0000,     /* R696 */
+       0x0000,     /* R697 */
+       0x0000,     /* R698 */
+       0x0000,     /* R699 */
+       0x0000,     /* R700 */
+       0x0000,     /* R701 */
+       0x0000,     /* R702 */
+       0x0000,     /* R703 */
+       0x0000,     /* R704 */
+       0x0000,     /* R705 */
+       0x0000,     /* R706 */
+       0x0000,     /* R707 */
+       0x0000,     /* R708 */
+       0x0000,     /* R709 */
+       0x0000,     /* R710 */
+       0x0000,     /* R711 */
+       0x0000,     /* R712 */
+       0x0000,     /* R713 */
+       0x0000,     /* R714 */
+       0x0000,     /* R715 */
+       0x0000,     /* R716 */
+       0x0000,     /* R717 */
+       0x0000,     /* R718 */
+       0x0000,     /* R719 */
+       0x0000,     /* R720 */
+       0x0000,     /* R721 */
+       0x0000,     /* R722 */
+       0x0000,     /* R723 */
+       0x0000,     /* R724 */
+       0x0000,     /* R725 */
+       0x0000,     /* R726 */
+       0x0000,     /* R727 */
+       0x0000,     /* R728 */
+       0x0000,     /* R729 */
+       0x0000,     /* R730 */
+       0x0000,     /* R731 */
+       0x0000,     /* R732 */
+       0x0000,     /* R733 */
+       0x0000,     /* R734 */
+       0x0000,     /* R735 */
+       0x0000,     /* R736 */
+       0x0000,     /* R737 */
+       0x0000,     /* R738 */
+       0x0000,     /* R739 */
+       0x0000,     /* R740 */
+       0x0000,     /* R741 */
+       0x0000,     /* R742 */
+       0x0000,     /* R743 */
+       0x0000,     /* R744 */
+       0x0000,     /* R745 */
+       0x0000,     /* R746 */
+       0x0000,     /* R747 */
+       0x0000,     /* R748 */
+       0x0000,     /* R749 */
+       0x0000,     /* R750 */
+       0x0000,     /* R751 */
+       0x0000,     /* R752 */
+       0x0000,     /* R753 */
+       0x0000,     /* R754 */
+       0x0000,     /* R755 */
+       0x0000,     /* R756 */
+       0x0000,     /* R757 */
+       0x0000,     /* R758 */
+       0x0000,     /* R759 */
+       0x0000,     /* R760 */
+       0x0000,     /* R761 */
+       0x0000,     /* R762 */
+       0x0000,     /* R763 */
+       0x0000,     /* R764 */
+       0x0000,     /* R765 */
+       0x0000,     /* R766 */
+       0x0000,     /* R767 */
+       0x1C00,     /* R768   - DSP2 Power Management */
+       0x0000,     /* R769 */
+       0x0000,     /* R770 */
+       0x0000,     /* R771 */
+       0x0000,     /* R772 */
+       0x0000,     /* R773 */
+       0x0000,     /* R774 */
+       0x0000,     /* R775 */
+       0x0000,     /* R776 */
+       0x0000,     /* R777 */
+       0x0000,     /* R778 */
+       0x0000,     /* R779 */
+       0x0000,     /* R780 */
+       0x0000,     /* R781 */
+       0x0000,     /* R782 */
+       0x0000,     /* R783 */
+       0x0000,     /* R784 */
+       0x0000,     /* R785 */
+       0x0000,     /* R786 */
+       0x0000,     /* R787 */
+       0x0000,     /* R788 */
+       0x0000,     /* R789 */
+       0x0000,     /* R790 */
+       0x0000,     /* R791 */
+       0x0000,     /* R792 */
+       0x0000,     /* R793 */
+       0x0000,     /* R794 */
+       0x0000,     /* R795 */
+       0x0000,     /* R796 */
+       0x0000,     /* R797 */
+       0x0000,     /* R798 */
+       0x0000,     /* R799 */
+       0x0000,     /* R800 */
+       0x0000,     /* R801 */
+       0x0000,     /* R802 */
+       0x0000,     /* R803 */
+       0x0000,     /* R804 */
+       0x0000,     /* R805 */
+       0x0000,     /* R806 */
+       0x0000,     /* R807 */
+       0x0000,     /* R808 */
+       0x0000,     /* R809 */
+       0x0000,     /* R810 */
+       0x0000,     /* R811 */
+       0x0000,     /* R812 */
+       0x0000,     /* R813 */
+       0x0000,     /* R814 */
+       0x0000,     /* R815 */
+       0x0000,     /* R816 */
+       0x0000,     /* R817 */
+       0x0000,     /* R818 */
+       0x0000,     /* R819 */
+       0x0000,     /* R820 */
+       0x0000,     /* R821 */
+       0x0000,     /* R822 */
+       0x0000,     /* R823 */
+       0x0000,     /* R824 */
+       0x0000,     /* R825 */
+       0x0000,     /* R826 */
+       0x0000,     /* R827 */
+       0x0000,     /* R828 */
+       0x0000,     /* R829 */
+       0x0000,     /* R830 */
+       0x0000,     /* R831 */
+       0x0000,     /* R832 */
+       0x0000,     /* R833 */
+       0x0000,     /* R834 */
+       0x0000,     /* R835 */
+       0x0000,     /* R836 */
+       0x0000,     /* R837 */
+       0x0000,     /* R838 */
+       0x0000,     /* R839 */
+       0x0000,     /* R840 */
+       0x0000,     /* R841 */
+       0x0000,     /* R842 */
+       0x0000,     /* R843 */
+       0x0000,     /* R844 */
+       0x0000,     /* R845 */
+       0x0000,     /* R846 */
+       0x0000,     /* R847 */
+       0x0000,     /* R848 */
+       0x0000,     /* R849 */
+       0x0000,     /* R850 */
+       0x0000,     /* R851 */
+       0x0000,     /* R852 */
+       0x0000,     /* R853 */
+       0x0000,     /* R854 */
+       0x0000,     /* R855 */
+       0x0000,     /* R856 */
+       0x0000,     /* R857 */
+       0x0000,     /* R858 */
+       0x0000,     /* R859 */
+       0x0000,     /* R860 */
+       0x0000,     /* R861 */
+       0x0000,     /* R862 */
+       0x0000,     /* R863 */
+       0x0000,     /* R864 */
+       0x0000,     /* R865 */
+       0x0000,     /* R866 */
+       0x0000,     /* R867 */
+       0x0000,     /* R868 */
+       0x0000,     /* R869 */
+       0x0000,     /* R870 */
+       0x0000,     /* R871 */
+       0x0000,     /* R872 */
+       0x0000,     /* R873 */
+       0x0000,     /* R874 */
+       0x0000,     /* R875 */
+       0x0000,     /* R876 */
+       0x0000,     /* R877 */
+       0x0000,     /* R878 */
+       0x0000,     /* R879 */
+       0x0000,     /* R880 */
+       0x0000,     /* R881 */
+       0x0000,     /* R882 */
+       0x0000,     /* R883 */
+       0x0000,     /* R884 */
+       0x0000,     /* R885 */
+       0x0000,     /* R886 */
+       0x0000,     /* R887 */
+       0x0000,     /* R888 */
+       0x0000,     /* R889 */
+       0x0000,     /* R890 */
+       0x0000,     /* R891 */
+       0x0000,     /* R892 */
+       0x0000,     /* R893 */
+       0x0000,     /* R894 */
+       0x0000,     /* R895 */
+       0x0000,     /* R896 */
+       0x0000,     /* R897 */
+       0x0000,     /* R898 */
+       0x0000,     /* R899 */
+       0x0000,     /* R900 */
+       0x0000,     /* R901 */
+       0x0000,     /* R902 */
+       0x0000,     /* R903 */
+       0x0000,     /* R904 */
+       0x0000,     /* R905 */
+       0x0000,     /* R906 */
+       0x0000,     /* R907 */
+       0x0000,     /* R908 */
+       0x0000,     /* R909 */
+       0x0000,     /* R910 */
+       0x0000,     /* R911 */
+       0x0000,     /* R912 */
+       0x0000,     /* R913 */
+       0x0000,     /* R914 */
+       0x0000,     /* R915 */
+       0x0000,     /* R916 */
+       0x0000,     /* R917 */
+       0x0000,     /* R918 */
+       0x0000,     /* R919 */
+       0x0000,     /* R920 */
+       0x0000,     /* R921 */
+       0x0000,     /* R922 */
+       0x0000,     /* R923 */
+       0x0000,     /* R924 */
+       0x0000,     /* R925 */
+       0x0000,     /* R926 */
+       0x0000,     /* R927 */
+       0x0000,     /* R928 */
+       0x0000,     /* R929 */
+       0x0000,     /* R930 */
+       0x0000,     /* R931 */
+       0x0000,     /* R932 */
+       0x0000,     /* R933 */
+       0x0000,     /* R934 */
+       0x0000,     /* R935 */
+       0x0000,     /* R936 */
+       0x0000,     /* R937 */
+       0x0000,     /* R938 */
+       0x0000,     /* R939 */
+       0x0000,     /* R940 */
+       0x0000,     /* R941 */
+       0x0000,     /* R942 */
+       0x0000,     /* R943 */
+       0x0000,     /* R944 */
+       0x0000,     /* R945 */
+       0x0000,     /* R946 */
+       0x0000,     /* R947 */
+       0x0000,     /* R948 */
+       0x0000,     /* R949 */
+       0x0000,     /* R950 */
+       0x0000,     /* R951 */
+       0x0000,     /* R952 */
+       0x0000,     /* R953 */
+       0x0000,     /* R954 */
+       0x0000,     /* R955 */
+       0x0000,     /* R956 */
+       0x0000,     /* R957 */
+       0x0000,     /* R958 */
+       0x0000,     /* R959 */
+       0x0000,     /* R960 */
+       0x0000,     /* R961 */
+       0x0000,     /* R962 */
+       0x0000,     /* R963 */
+       0x0000,     /* R964 */
+       0x0000,     /* R965 */
+       0x0000,     /* R966 */
+       0x0000,     /* R967 */
+       0x0000,     /* R968 */
+       0x0000,     /* R969 */
+       0x0000,     /* R970 */
+       0x0000,     /* R971 */
+       0x0000,     /* R972 */
+       0x0000,     /* R973 */
+       0x0000,     /* R974 */
+       0x0000,     /* R975 */
+       0x0000,     /* R976 */
+       0x0000,     /* R977 */
+       0x0000,     /* R978 */
+       0x0000,     /* R979 */
+       0x0000,     /* R980 */
+       0x0000,     /* R981 */
+       0x0000,     /* R982 */
+       0x0000,     /* R983 */
+       0x0000,     /* R984 */
+       0x0000,     /* R985 */
+       0x0000,     /* R986 */
+       0x0000,     /* R987 */
+       0x0000,     /* R988 */
+       0x0000,     /* R989 */
+       0x0000,     /* R990 */
+       0x0000,     /* R991 */
+       0x0000,     /* R992 */
+       0x0000,     /* R993 */
+       0x0000,     /* R994 */
+       0x0000,     /* R995 */
+       0x0000,     /* R996 */
+       0x0000,     /* R997 */
+       0x0000,     /* R998 */
+       0x0000,     /* R999 */
+       0x0000,     /* R1000 */
+       0x0000,     /* R1001 */
+       0x0000,     /* R1002 */
+       0x0000,     /* R1003 */
+       0x0000,     /* R1004 */
+       0x0000,     /* R1005 */
+       0x0000,     /* R1006 */
+       0x0000,     /* R1007 */
+       0x0000,     /* R1008 */
+       0x0000,     /* R1009 */
+       0x0000,     /* R1010 */
+       0x0000,     /* R1011 */
+       0x0000,     /* R1012 */
+       0x0000,     /* R1013 */
+       0x0000,     /* R1014 */
+       0x0000,     /* R1015 */
+       0x0000,     /* R1016 */
+       0x0000,     /* R1017 */
+       0x0000,     /* R1018 */
+       0x0000,     /* R1019 */
+       0x0000,     /* R1020 */
+       0x0000,     /* R1021 */
+       0x0000,     /* R1022 */
+       0x0000,     /* R1023 */
+       0x0000,     /* R1024 */
+       0x0000,     /* R1025 */
+       0x0000,     /* R1026 */
+       0x0000,     /* R1027 */
+       0x0000,     /* R1028 */
+       0x0000,     /* R1029 */
+       0x0000,     /* R1030 */
+       0x0000,     /* R1031 */
+       0x0000,     /* R1032 */
+       0x0000,     /* R1033 */
+       0x0000,     /* R1034 */
+       0x0000,     /* R1035 */
+       0x0000,     /* R1036 */
+       0x0000,     /* R1037  - DSP2_ExecControl */
+       0x0000,     /* R1038 */
+       0x0000,     /* R1039 */
+       0x0000,     /* R1040 */
+       0x0000,     /* R1041 */
+       0x0000,     /* R1042 */
+       0x0000,     /* R1043 */
+       0x0000,     /* R1044 */
+       0x0000,     /* R1045 */
+       0x0000,     /* R1046 */
+       0x0000,     /* R1047 */
+       0x0000,     /* R1048 */
+       0x0000,     /* R1049 */
+       0x0000,     /* R1050 */
+       0x0000,     /* R1051 */
+       0x0000,     /* R1052 */
+       0x0000,     /* R1053 */
+       0x0000,     /* R1054 */
+       0x0000,     /* R1055 */
+       0x0000,     /* R1056 */
+       0x0000,     /* R1057 */
+       0x0000,     /* R1058 */
+       0x0000,     /* R1059 */
+       0x0000,     /* R1060 */
+       0x0000,     /* R1061 */
+       0x0000,     /* R1062 */
+       0x0000,     /* R1063 */
+       0x0000,     /* R1064 */
+       0x0000,     /* R1065 */
+       0x0000,     /* R1066 */
+       0x0000,     /* R1067 */
+       0x0000,     /* R1068 */
+       0x0000,     /* R1069 */
+       0x0000,     /* R1070 */
+       0x0000,     /* R1071 */
+       0x0000,     /* R1072 */
+       0x0000,     /* R1073 */
+       0x0000,     /* R1074 */
+       0x0000,     /* R1075 */
+       0x0000,     /* R1076 */
+       0x0000,     /* R1077 */
+       0x0000,     /* R1078 */
+       0x0000,     /* R1079 */
+       0x0000,     /* R1080 */
+       0x0000,     /* R1081 */
+       0x0000,     /* R1082 */
+       0x0000,     /* R1083 */
+       0x0000,     /* R1084 */
+       0x0000,     /* R1085 */
+       0x0000,     /* R1086 */
+       0x0000,     /* R1087 */
+       0x0000,     /* R1088 */
+       0x0000,     /* R1089 */
+       0x0000,     /* R1090 */
+       0x0000,     /* R1091 */
+       0x0000,     /* R1092 */
+       0x0000,     /* R1093 */
+       0x0000,     /* R1094 */
+       0x0000,     /* R1095 */
+       0x0000,     /* R1096 */
+       0x0000,     /* R1097 */
+       0x0000,     /* R1098 */
+       0x0000,     /* R1099 */
+       0x0000,     /* R1100 */
+       0x0000,     /* R1101 */
+       0x0000,     /* R1102 */
+       0x0000,     /* R1103 */
+       0x0000,     /* R1104 */
+       0x0000,     /* R1105 */
+       0x0000,     /* R1106 */
+       0x0000,     /* R1107 */
+       0x0000,     /* R1108 */
+       0x0000,     /* R1109 */
+       0x0000,     /* R1110 */
+       0x0000,     /* R1111 */
+       0x0000,     /* R1112 */
+       0x0000,     /* R1113 */
+       0x0000,     /* R1114 */
+       0x0000,     /* R1115 */
+       0x0000,     /* R1116 */
+       0x0000,     /* R1117 */
+       0x0000,     /* R1118 */
+       0x0000,     /* R1119 */
+       0x0000,     /* R1120 */
+       0x0000,     /* R1121 */
+       0x0000,     /* R1122 */
+       0x0000,     /* R1123 */
+       0x0000,     /* R1124 */
+       0x0000,     /* R1125 */
+       0x0000,     /* R1126 */
+       0x0000,     /* R1127 */
+       0x0000,     /* R1128 */
+       0x0000,     /* R1129 */
+       0x0000,     /* R1130 */
+       0x0000,     /* R1131 */
+       0x0000,     /* R1132 */
+       0x0000,     /* R1133 */
+       0x0000,     /* R1134 */
+       0x0000,     /* R1135 */
+       0x0000,     /* R1136 */
+       0x0000,     /* R1137 */
+       0x0000,     /* R1138 */
+       0x0000,     /* R1139 */
+       0x0000,     /* R1140 */
+       0x0000,     /* R1141 */
+       0x0000,     /* R1142 */
+       0x0000,     /* R1143 */
+       0x0000,     /* R1144 */
+       0x0000,     /* R1145 */
+       0x0000,     /* R1146 */
+       0x0000,     /* R1147 */
+       0x0000,     /* R1148 */
+       0x0000,     /* R1149 */
+       0x0000,     /* R1150 */
+       0x0000,     /* R1151 */
+       0x0000,     /* R1152 */
+       0x0000,     /* R1153 */
+       0x0000,     /* R1154 */
+       0x0000,     /* R1155 */
+       0x0000,     /* R1156 */
+       0x0000,     /* R1157 */
+       0x0000,     /* R1158 */
+       0x0000,     /* R1159 */
+       0x0000,     /* R1160 */
+       0x0000,     /* R1161 */
+       0x0000,     /* R1162 */
+       0x0000,     /* R1163 */
+       0x0000,     /* R1164 */
+       0x0000,     /* R1165 */
+       0x0000,     /* R1166 */
+       0x0000,     /* R1167 */
+       0x0000,     /* R1168 */
+       0x0000,     /* R1169 */
+       0x0000,     /* R1170 */
+       0x0000,     /* R1171 */
+       0x0000,     /* R1172 */
+       0x0000,     /* R1173 */
+       0x0000,     /* R1174 */
+       0x0000,     /* R1175 */
+       0x0000,     /* R1176 */
+       0x0000,     /* R1177 */
+       0x0000,     /* R1178 */
+       0x0000,     /* R1179 */
+       0x0000,     /* R1180 */
+       0x0000,     /* R1181 */
+       0x0000,     /* R1182 */
+       0x0000,     /* R1183 */
+       0x0000,     /* R1184 */
+       0x0000,     /* R1185 */
+       0x0000,     /* R1186 */
+       0x0000,     /* R1187 */
+       0x0000,     /* R1188 */
+       0x0000,     /* R1189 */
+       0x0000,     /* R1190 */
+       0x0000,     /* R1191 */
+       0x0000,     /* R1192 */
+       0x0000,     /* R1193 */
+       0x0000,     /* R1194 */
+       0x0000,     /* R1195 */
+       0x0000,     /* R1196 */
+       0x0000,     /* R1197 */
+       0x0000,     /* R1198 */
+       0x0000,     /* R1199 */
+       0x0000,     /* R1200 */
+       0x0000,     /* R1201 */
+       0x0000,     /* R1202 */
+       0x0000,     /* R1203 */
+       0x0000,     /* R1204 */
+       0x0000,     /* R1205 */
+       0x0000,     /* R1206 */
+       0x0000,     /* R1207 */
+       0x0000,     /* R1208 */
+       0x0000,     /* R1209 */
+       0x0000,     /* R1210 */
+       0x0000,     /* R1211 */
+       0x0000,     /* R1212 */
+       0x0000,     /* R1213 */
+       0x0000,     /* R1214 */
+       0x0000,     /* R1215 */
+       0x0000,     /* R1216 */
+       0x0000,     /* R1217 */
+       0x0000,     /* R1218 */
+       0x0000,     /* R1219 */
+       0x0000,     /* R1220 */
+       0x0000,     /* R1221 */
+       0x0000,     /* R1222 */
+       0x0000,     /* R1223 */
+       0x0000,     /* R1224 */
+       0x0000,     /* R1225 */
+       0x0000,     /* R1226 */
+       0x0000,     /* R1227 */
+       0x0000,     /* R1228 */
+       0x0000,     /* R1229 */
+       0x0000,     /* R1230 */
+       0x0000,     /* R1231 */
+       0x0000,     /* R1232 */
+       0x0000,     /* R1233 */
+       0x0000,     /* R1234 */
+       0x0000,     /* R1235 */
+       0x0000,     /* R1236 */
+       0x0000,     /* R1237 */
+       0x0000,     /* R1238 */
+       0x0000,     /* R1239 */
+       0x0000,     /* R1240 */
+       0x0000,     /* R1241 */
+       0x0000,     /* R1242 */
+       0x0000,     /* R1243 */
+       0x0000,     /* R1244 */
+       0x0000,     /* R1245 */
+       0x0000,     /* R1246 */
+       0x0000,     /* R1247 */
+       0x0000,     /* R1248 */
+       0x0000,     /* R1249 */
+       0x0000,     /* R1250 */
+       0x0000,     /* R1251 */
+       0x0000,     /* R1252 */
+       0x0000,     /* R1253 */
+       0x0000,     /* R1254 */
+       0x0000,     /* R1255 */
+       0x0000,     /* R1256 */
+       0x0000,     /* R1257 */
+       0x0000,     /* R1258 */
+       0x0000,     /* R1259 */
+       0x0000,     /* R1260 */
+       0x0000,     /* R1261 */
+       0x0000,     /* R1262 */
+       0x0000,     /* R1263 */
+       0x0000,     /* R1264 */
+       0x0000,     /* R1265 */
+       0x0000,     /* R1266 */
+       0x0000,     /* R1267 */
+       0x0000,     /* R1268 */
+       0x0000,     /* R1269 */
+       0x0000,     /* R1270 */
+       0x0000,     /* R1271 */
+       0x0000,     /* R1272 */
+       0x0000,     /* R1273 */
+       0x0000,     /* R1274 */
+       0x0000,     /* R1275 */
+       0x0000,     /* R1276 */
+       0x0000,     /* R1277 */
+       0x0000,     /* R1278 */
+       0x0000,     /* R1279 */
+       0x0000,     /* R1280 */
+       0x0000,     /* R1281 */
+       0x0000,     /* R1282 */
+       0x0000,     /* R1283 */
+       0x0000,     /* R1284 */
+       0x0000,     /* R1285 */
+       0x0000,     /* R1286 */
+       0x0000,     /* R1287 */
+       0x0000,     /* R1288 */
+       0x0000,     /* R1289 */
+       0x0000,     /* R1290 */
+       0x0000,     /* R1291 */
+       0x0000,     /* R1292 */
+       0x0000,     /* R1293 */
+       0x0000,     /* R1294 */
+       0x0000,     /* R1295 */
+       0x0000,     /* R1296 */
+       0x0000,     /* R1297 */
+       0x0000,     /* R1298 */
+       0x0000,     /* R1299 */
+       0x0000,     /* R1300 */
+       0x0000,     /* R1301 */
+       0x0000,     /* R1302 */
+       0x0000,     /* R1303 */
+       0x0000,     /* R1304 */
+       0x0000,     /* R1305 */
+       0x0000,     /* R1306 */
+       0x0000,     /* R1307 */
+       0x0000,     /* R1308 */
+       0x0000,     /* R1309 */
+       0x0000,     /* R1310 */
+       0x0000,     /* R1311 */
+       0x0000,     /* R1312 */
+       0x0000,     /* R1313 */
+       0x0000,     /* R1314 */
+       0x0000,     /* R1315 */
+       0x0000,     /* R1316 */
+       0x0000,     /* R1317 */
+       0x0000,     /* R1318 */
+       0x0000,     /* R1319 */
+       0x0000,     /* R1320 */
+       0x0000,     /* R1321 */
+       0x0000,     /* R1322 */
+       0x0000,     /* R1323 */
+       0x0000,     /* R1324 */
+       0x0000,     /* R1325 */
+       0x0000,     /* R1326 */
+       0x0000,     /* R1327 */
+       0x0000,     /* R1328 */
+       0x0000,     /* R1329 */
+       0x0000,     /* R1330 */
+       0x0000,     /* R1331 */
+       0x0000,     /* R1332 */
+       0x0000,     /* R1333 */
+       0x0000,     /* R1334 */
+       0x0000,     /* R1335 */
+       0x0000,     /* R1336 */
+       0x0000,     /* R1337 */
+       0x0000,     /* R1338 */
+       0x0000,     /* R1339 */
+       0x0000,     /* R1340 */
+       0x0000,     /* R1341 */
+       0x0000,     /* R1342 */
+       0x0000,     /* R1343 */
+       0x0000,     /* R1344 */
+       0x0000,     /* R1345 */
+       0x0000,     /* R1346 */
+       0x0000,     /* R1347 */
+       0x0000,     /* R1348 */
+       0x0000,     /* R1349 */
+       0x0000,     /* R1350 */
+       0x0000,     /* R1351 */
+       0x0000,     /* R1352 */
+       0x0000,     /* R1353 */
+       0x0000,     /* R1354 */
+       0x0000,     /* R1355 */
+       0x0000,     /* R1356 */
+       0x0000,     /* R1357 */
+       0x0000,     /* R1358 */
+       0x0000,     /* R1359 */
+       0x0000,     /* R1360 */
+       0x0000,     /* R1361 */
+       0x0000,     /* R1362 */
+       0x0000,     /* R1363 */
+       0x0000,     /* R1364 */
+       0x0000,     /* R1365 */
+       0x0000,     /* R1366 */
+       0x0000,     /* R1367 */
+       0x0000,     /* R1368 */
+       0x0000,     /* R1369 */
+       0x0000,     /* R1370 */
+       0x0000,     /* R1371 */
+       0x0000,     /* R1372 */
+       0x0000,     /* R1373 */
+       0x0000,     /* R1374 */
+       0x0000,     /* R1375 */
+       0x0000,     /* R1376 */
+       0x0000,     /* R1377 */
+       0x0000,     /* R1378 */
+       0x0000,     /* R1379 */
+       0x0000,     /* R1380 */
+       0x0000,     /* R1381 */
+       0x0000,     /* R1382 */
+       0x0000,     /* R1383 */
+       0x0000,     /* R1384 */
+       0x0000,     /* R1385 */
+       0x0000,     /* R1386 */
+       0x0000,     /* R1387 */
+       0x0000,     /* R1388 */
+       0x0000,     /* R1389 */
+       0x0000,     /* R1390 */
+       0x0000,     /* R1391 */
+       0x0000,     /* R1392 */
+       0x0000,     /* R1393 */
+       0x0000,     /* R1394 */
+       0x0000,     /* R1395 */
+       0x0000,     /* R1396 */
+       0x0000,     /* R1397 */
+       0x0000,     /* R1398 */
+       0x0000,     /* R1399 */
+       0x0000,     /* R1400 */
+       0x0000,     /* R1401 */
+       0x0000,     /* R1402 */
+       0x0000,     /* R1403 */
+       0x0000,     /* R1404 */
+       0x0000,     /* R1405 */
+       0x0000,     /* R1406 */
+       0x0000,     /* R1407 */
+       0x0000,     /* R1408 */
+       0x0000,     /* R1409 */
+       0x0000,     /* R1410 */
+       0x0000,     /* R1411 */
+       0x0000,     /* R1412 */
+       0x0000,     /* R1413 */
+       0x0000,     /* R1414 */
+       0x0000,     /* R1415 */
+       0x0000,     /* R1416 */
+       0x0000,     /* R1417 */
+       0x0000,     /* R1418 */
+       0x0000,     /* R1419 */
+       0x0000,     /* R1420 */
+       0x0000,     /* R1421 */
+       0x0000,     /* R1422 */
+       0x0000,     /* R1423 */
+       0x0000,     /* R1424 */
+       0x0000,     /* R1425 */
+       0x0000,     /* R1426 */
+       0x0000,     /* R1427 */
+       0x0000,     /* R1428 */
+       0x0000,     /* R1429 */
+       0x0000,     /* R1430 */
+       0x0000,     /* R1431 */
+       0x0000,     /* R1432 */
+       0x0000,     /* R1433 */
+    0x0000,     /* R1434 */
+    0x0000,     /* R1435 */
+    0x0000,     /* R1436 */
+    0x0000,     /* R1437 */
+    0x0000,     /* R1438 */
+    0x0000,     /* R1439 */
+    0x0000,     /* R1440 */
+    0x0000,     /* R1441 */
+    0x0000,     /* R1442 */
+    0x0000,     /* R1443 */
+    0x0000,     /* R1444 */
+    0x0000,     /* R1445 */
+    0x0000,     /* R1446 */
+    0x0000,     /* R1447 */
+    0x0000,     /* R1448 */
+    0x0000,     /* R1449 */
+    0x0000,     /* R1450 */
+    0x0000,     /* R1451 */
+    0x0000,     /* R1452 */
+    0x0000,     /* R1453 */
+    0x0000,     /* R1454 */
+    0x0000,     /* R1455 */
+    0x0000,     /* R1456 */
+    0x0000,     /* R1457 */
+    0x0000,     /* R1458 */
+    0x0000,     /* R1459 */
+    0x0000,     /* R1460 */
+    0x0000,     /* R1461 */
+    0x0000,     /* R1462 */
+    0x0000,     /* R1463 */
+    0x0000,     /* R1464 */
+    0x0000,     /* R1465 */
+    0x0000,     /* R1466 */
+    0x0000,     /* R1467 */
+    0x0000,     /* R1468 */
+    0x0000,     /* R1469 */
+    0x0000,     /* R1470 */
+    0x0000,     /* R1471 */
+    0x0000,     /* R1472 */
+    0x0000,     /* R1473 */
+    0x0000,     /* R1474 */
+    0x0000,     /* R1475 */
+    0x0000,     /* R1476 */
+    0x0000,     /* R1477 */
+    0x0000,     /* R1478 */
+    0x0000,     /* R1479 */
+    0x0000,     /* R1480 */
+    0x0000,     /* R1481 */
+    0x0000,     /* R1482 */
+    0x0000,     /* R1483 */
+    0x0000,     /* R1484 */
+    0x0000,     /* R1485 */
+    0x0000,     /* R1486 */
+    0x0000,     /* R1487 */
+    0x0000,     /* R1488 */
+    0x0000,     /* R1489 */
+    0x0000,     /* R1490 */
+    0x0000,     /* R1491 */
+    0x0000,     /* R1492 */
+    0x0000,     /* R1493 */
+    0x0000,     /* R1494 */
+    0x0000,     /* R1495 */
+    0x0000,     /* R1496 */
+    0x0000,     /* R1497 */
+    0x0000,     /* R1498 */
+    0x0000,     /* R1499 */
+    0x0000,     /* R1500 */
+    0x0000,     /* R1501 */
+    0x0000,     /* R1502 */
+    0x0000,     /* R1503 */
+    0x0000,     /* R1504 */
+    0x0000,     /* R1505 */
+    0x0000,     /* R1506 */
+    0x0000,     /* R1507 */
+    0x0000,     /* R1508 */
+    0x0000,     /* R1509 */
+    0x0000,     /* R1510 */
+    0x0000,     /* R1511 */
+    0x0000,     /* R1512 */
+    0x0000,     /* R1513 */
+    0x0000,     /* R1514 */
+    0x0000,     /* R1515 */
+    0x0000,     /* R1516 */
+    0x0000,     /* R1517 */
+    0x0000,     /* R1518 */
+    0x0000,     /* R1519 */
+    0x0000,     /* R1520 */
+    0x0000,     /* R1521 */
+    0x0000,     /* R1522 */
+    0x0000,     /* R1523 */
+    0x0000,     /* R1524 */
+    0x0000,     /* R1525 */
+    0x0000,     /* R1526 */
+    0x0000,     /* R1527 */
+    0x0000,     /* R1528 */
+    0x0000,     /* R1529 */
+    0x0000,     /* R1530 */
+    0x0000,     /* R1531 */
+    0x0000,     /* R1532 */
+    0x0000,     /* R1533 */
+    0x0000,     /* R1534 */
+    0x0000,     /* R1535 */
+    0x0000,     /* R1536 */
+    0x0000,     /* R1537 */
+    0x0000,     /* R1538 */
+    0x0000,     /* R1539 */
+    0x0000,     /* R1540 */
+    0x0000,     /* R1541 */
+    0x0000,     /* R1542 */
+    0x0000,     /* R1543 */
+    0x0000,     /* R1544 */
+    0x0000,     /* R1545 */
+    0x0000,     /* R1546 */
+    0x0000,     /* R1547 */
+    0x0000,     /* R1548 */
+    0x0000,     /* R1549 */
+    0x0000,     /* R1550 */
+    0x0000,     /* R1551 */
+    0x0000,     /* R1552 */
+    0x0000,     /* R1553 */
+    0x0000,     /* R1554 */
+    0x0000,     /* R1555 */
+    0x0000,     /* R1556 */
+    0x0000,     /* R1557 */
+    0x0000,     /* R1558 */
+    0x0000,     /* R1559 */
+    0x0000,     /* R1560 */
+    0x0000,     /* R1561 */
+    0x0000,     /* R1562 */
+    0x0000,     /* R1563 */
+    0x0000,     /* R1564 */
+    0x0000,     /* R1565 */
+    0x0000,     /* R1566 */
+    0x0000,     /* R1567 */
+    0x0000,     /* R1568 */
+    0x0000,     /* R1569 */
+    0x0000,     /* R1570 */
+    0x0000,     /* R1571 */
+    0x0000,     /* R1572 */
+    0x0000,     /* R1573 */
+    0x0000,     /* R1574 */
+    0x0000,     /* R1575 */
+    0x0000,     /* R1576 */
+    0x0000,     /* R1577 */
+    0x0000,     /* R1578 */
+    0x0000,     /* R1579 */
+    0x0000,     /* R1580 */
+    0x0000,     /* R1581 */
+    0x0000,     /* R1582 */
+    0x0000,     /* R1583 */
+    0x0000,     /* R1584 */
+    0x0000,     /* R1585 */
+    0x0000,     /* R1586 */
+    0x0000,     /* R1587 */
+    0x0000,     /* R1588 */
+    0x0000,     /* R1589 */
+    0x0000,     /* R1590 */
+    0x0000,     /* R1591 */
+    0x0000,     /* R1592 */
+    0x0000,     /* R1593 */
+    0x0000,     /* R1594 */
+    0x0000,     /* R1595 */
+    0x0000,     /* R1596 */
+    0x0000,     /* R1597 */
+    0x0000,     /* R1598 */
+    0x0000,     /* R1599 */
+    0x0000,     /* R1600 */
+    0x0000,     /* R1601 */
+    0x0000,     /* R1602 */
+    0x0000,     /* R1603 */
+    0x0000,     /* R1604 */
+    0x0000,     /* R1605 */
+    0x0000,     /* R1606 */
+    0x0000,     /* R1607 */
+    0x0000,     /* R1608 */
+    0x0000,     /* R1609 */
+    0x0000,     /* R1610 */
+    0x0000,     /* R1611 */
+    0x0000,     /* R1612 */
+    0x0000,     /* R1613 */
+    0x0000,     /* R1614 */
+    0x0000,     /* R1615 */
+    0x0000,     /* R1616 */
+    0x0000,     /* R1617 */
+    0x0000,     /* R1618 */
+    0x0000,     /* R1619 */
+    0x0000,     /* R1620 */
+    0x0000,     /* R1621 */
+    0x0000,     /* R1622 */
+    0x0000,     /* R1623 */
+    0x0000,     /* R1624 */
+    0x0000,     /* R1625 */
+    0x0000,     /* R1626 */
+    0x0000,     /* R1627 */
+    0x0000,     /* R1628 */
+    0x0000,     /* R1629 */
+    0x0000,     /* R1630 */
+    0x0000,     /* R1631 */
+    0x0000,     /* R1632 */
+    0x0000,     /* R1633 */
+    0x0000,     /* R1634 */
+    0x0000,     /* R1635 */
+    0x0000,     /* R1636 */
+    0x0000,     /* R1637 */
+    0x0000,     /* R1638 */
+    0x0000,     /* R1639 */
+    0x0000,     /* R1640 */
+    0x0000,     /* R1641 */
+    0x0000,     /* R1642 */
+    0x0000,     /* R1643 */
+    0x0000,     /* R1644 */
+    0x0000,     /* R1645 */
+    0x0000,     /* R1646 */
+    0x0000,     /* R1647 */
+    0x0000,     /* R1648 */
+    0x0000,     /* R1649 */
+    0x0000,     /* R1650 */
+    0x0000,     /* R1651 */
+    0x0000,     /* R1652 */
+    0x0000,     /* R1653 */
+    0x0000,     /* R1654 */
+    0x0000,     /* R1655 */
+    0x0000,     /* R1656 */
+    0x0000,     /* R1657 */
+    0x0000,     /* R1658 */
+    0x0000,     /* R1659 */
+    0x0000,     /* R1660 */
+    0x0000,     /* R1661 */
+    0x0000,     /* R1662 */
+    0x0000,     /* R1663 */
+    0x0000,     /* R1664 */
+    0x0000,     /* R1665 */
+    0x0000,     /* R1666 */
+    0x0000,     /* R1667 */
+    0x0000,     /* R1668 */
+    0x0000,     /* R1669 */
+    0x0000,     /* R1670 */
+    0x0000,     /* R1671 */
+    0x0000,     /* R1672 */
+    0x0000,     /* R1673 */
+    0x0000,     /* R1674 */
+    0x0000,     /* R1675 */
+    0x0000,     /* R1676 */
+    0x0000,     /* R1677 */
+    0x0000,     /* R1678 */
+    0x0000,     /* R1679 */
+    0x0000,     /* R1680 */
+    0x0000,     /* R1681 */
+    0x0000,     /* R1682 */
+    0x0000,     /* R1683 */
+    0x0000,     /* R1684 */
+    0x0000,     /* R1685 */
+    0x0000,     /* R1686 */
+    0x0000,     /* R1687 */
+    0x0000,     /* R1688 */
+    0x0000,     /* R1689 */
+    0x0000,     /* R1690 */
+    0x0000,     /* R1691 */
+    0x0000,     /* R1692 */
+    0x0000,     /* R1693 */
+    0x0000,     /* R1694 */
+    0x0000,     /* R1695 */
+    0x0000,     /* R1696 */
+    0x0000,     /* R1697 */
+    0x0000,     /* R1698 */
+    0x0000,     /* R1699 */
+    0x0000,     /* R1700 */
+    0x0000,     /* R1701 */
+    0x0000,     /* R1702 */
+    0x0000,     /* R1703 */
+    0x0000,     /* R1704 */
+    0x0000,     /* R1705 */
+    0x0000,     /* R1706 */
+    0x0000,     /* R1707 */
+    0x0000,     /* R1708 */
+    0x0000,     /* R1709 */
+    0x0000,     /* R1710 */
+    0x0000,     /* R1711 */
+    0x0000,     /* R1712 */
+    0x0000,     /* R1713 */
+    0x0000,     /* R1714 */
+    0x0000,     /* R1715 */
+    0x0000,     /* R1716 */
+    0x0000,     /* R1717 */
+    0x0000,     /* R1718 */
+    0x0000,     /* R1719 */
+    0x0000,     /* R1720 */
+    0x0000,     /* R1721 */
+    0x0000,     /* R1722 */
+    0x0000,     /* R1723 */
+    0x0000,     /* R1724 */
+    0x0000,     /* R1725 */
+    0x0000,     /* R1726 */
+    0x0000,     /* R1727 */
+    0x0000,     /* R1728 */
+    0x0000,     /* R1729 */
+    0x0000,     /* R1730 */
+    0x0000,     /* R1731 */
+    0x0000,     /* R1732 */
+    0x0000,     /* R1733 */
+    0x0000,     /* R1734 */
+    0x0000,     /* R1735 */
+    0x0000,     /* R1736 */
+    0x0000,     /* R1737 */
+    0x0000,     /* R1738 */
+    0x0000,     /* R1739 */
+    0x0000,     /* R1740 */
+    0x0000,     /* R1741 */
+    0x0000,     /* R1742 */
+    0x0000,     /* R1743 */
+    0x0000,     /* R1744 */
+    0x0000,     /* R1745 */
+    0x0000,     /* R1746 */
+    0x0000,     /* R1747 */
+    0x0000,     /* R1748 */
+    0x0000,     /* R1749 */
+    0x0000,     /* R1750 */
+    0x0000,     /* R1751 */
+    0x0000,     /* R1752 */
+    0x0000,     /* R1753 */
+    0x0000,     /* R1754 */
+    0x0000,     /* R1755 */
+    0x0000,     /* R1756 */
+    0x0000,     /* R1757 */
+    0x0000,     /* R1758 */
+    0x0000,     /* R1759 */
+    0x0000,     /* R1760 */
+    0x0000,     /* R1761 */
+    0x0000,     /* R1762 */
+    0x0000,     /* R1763 */
+    0x0000,     /* R1764 */
+    0x0000,     /* R1765 */
+    0x0000,     /* R1766 */
+    0x0000,     /* R1767 */
+    0x0000,     /* R1768 */
+    0x0000,     /* R1769 */
+    0x0000,     /* R1770 */
+    0x0000,     /* R1771 */
+    0x0000,     /* R1772 */
+    0x0000,     /* R1773 */
+    0x0000,     /* R1774 */
+    0x0000,     /* R1775 */
+    0x0000,     /* R1776 */
+    0x0000,     /* R1777 */
+    0x0000,     /* R1778 */
+    0x0000,     /* R1779 */
+    0x0000,     /* R1780 */
+    0x0000,     /* R1781 */
+    0x0000,     /* R1782 */
+    0x0000,     /* R1783 */
+    0x0000,     /* R1784 */
+    0x0000,     /* R1785 */
+    0x0000,     /* R1786 */
+    0x0000,     /* R1787 */
+    0x0000,     /* R1788 */
+    0x0000,     /* R1789 */
+    0x0000,     /* R1790 */
+    0x0000,     /* R1791 */
+    0x0000,     /* R1792 */
+    0x0000,     /* R1793 */
+    0x0000,     /* R1794 */
+    0x0000,     /* R1795 */
+    0x0000,     /* R1796 */
+    0x0000,     /* R1797 */
+    0x0000,     /* R1798 */
+    0x0000,     /* R1799 */
+    0x0000,     /* R1800 */
+    0x0000,     /* R1801 */
+    0x0000,     /* R1802 */
+    0x0000,     /* R1803 */
+    0x0000,     /* R1804 */
+    0x0000,     /* R1805 */
+    0x0000,     /* R1806 */
+    0x0000,     /* R1807 */
+    0x0000,     /* R1808 */
+    0x0000,     /* R1809 */
+    0x0000,     /* R1810 */
+    0x0000,     /* R1811 */
+    0x0000,     /* R1812 */
+    0x0000,     /* R1813 */
+    0x0000,     /* R1814 */
+    0x0000,     /* R1815 */
+    0x0000,     /* R1816 */
+    0x0000,     /* R1817 */
+    0x0000,     /* R1818 */
+    0x0000,     /* R1819 */
+    0x0000,     /* R1820 */
+    0x0000,     /* R1821 */
+    0x0000,     /* R1822 */
+    0x0000,     /* R1823 */
+    0x0000,     /* R1824 */
+    0x0000,     /* R1825 */
+    0x0000,     /* R1826 */
+    0x0000,     /* R1827 */
+    0x0000,     /* R1828 */
+    0x0000,     /* R1829 */
+    0x0000,     /* R1830 */
+    0x0000,     /* R1831 */
+    0x0000,     /* R1832 */
+    0x0000,     /* R1833 */
+    0x0000,     /* R1834 */
+    0x0000,     /* R1835 */
+    0x0000,     /* R1836 */
+    0x0000,     /* R1837 */
+    0x0000,     /* R1838 */
+    0x0000,     /* R1839 */
+    0x0000,     /* R1840 */
+    0x0000,     /* R1841 */
+    0x0000,     /* R1842 */
+    0x0000,     /* R1843 */
+    0x0000,     /* R1844 */
+    0x0000,     /* R1845 */
+    0x0000,     /* R1846 */
+    0x0000,     /* R1847 */
+    0x0000,     /* R1848 */
+    0x0000,     /* R1849 */
+    0x0000,     /* R1850 */
+    0x0000,     /* R1851 */
+    0x0000,     /* R1852 */
+    0x0000,     /* R1853 */
+    0x0000,     /* R1854 */
+    0x0000,     /* R1855 */
+    0x0000,     /* R1856 */
+    0x0000,     /* R1857 */
+    0x0000,     /* R1858 */
+    0x0000,     /* R1859 */
+    0x0000,     /* R1860 */
+    0x0000,     /* R1861 */
+    0x0000,     /* R1862 */
+    0x0000,     /* R1863 */
+    0x0000,     /* R1864 */
+    0x0000,     /* R1865 */
+    0x0000,     /* R1866 */
+    0x0000,     /* R1867 */
+    0x0000,     /* R1868 */
+    0x0000,     /* R1869 */
+    0x0000,     /* R1870 */
+    0x0000,     /* R1871 */
+    0x0000,     /* R1872 */
+    0x0000,     /* R1873 */
+    0x0000,     /* R1874 */
+    0x0000,     /* R1875 */
+    0x0000,     /* R1876 */
+    0x0000,     /* R1877 */
+    0x0000,     /* R1878 */
+    0x0000,     /* R1879 */
+    0x0000,     /* R1880 */
+    0x0000,     /* R1881 */
+    0x0000,     /* R1882 */
+    0x0000,     /* R1883 */
+    0x0000,     /* R1884 */
+    0x0000,     /* R1885 */
+    0x0000,     /* R1886 */
+    0x0000,     /* R1887 */
+    0x0000,     /* R1888 */
+    0x0000,     /* R1889 */
+    0x0000,     /* R1890 */
+    0x0000,     /* R1891 */
+    0x0000,     /* R1892 */
+    0x0000,     /* R1893 */
+    0x0000,     /* R1894 */
+    0x0000,     /* R1895 */
+    0x0000,     /* R1896 */
+    0x0000,     /* R1897 */
+    0x0000,     /* R1898 */
+    0x0000,     /* R1899 */
+    0x0000,     /* R1900 */
+    0x0000,     /* R1901 */
+    0x0000,     /* R1902 */
+    0x0000,     /* R1903 */
+    0x0000,     /* R1904 */
+    0x0000,     /* R1905 */
+    0x0000,     /* R1906 */
+    0x0000,     /* R1907 */
+    0x0000,     /* R1908 */
+    0x0000,     /* R1909 */
+    0x0000,     /* R1910 */
+    0x0000,     /* R1911 */
+    0x0000,     /* R1912 */
+    0x0000,     /* R1913 */
+    0x0000,     /* R1914 */
+    0x0000,     /* R1915 */
+    0x0000,     /* R1916 */
+    0x0000,     /* R1917 */
+    0x0000,     /* R1918 */
+    0x0000,     /* R1919 */
+    0x0000,     /* R1920 */
+    0x0000,     /* R1921 */
+    0x0000,     /* R1922 */
+    0x0000,     /* R1923 */
+    0x0000,     /* R1924 */
+    0x0000,     /* R1925 */
+    0x0000,     /* R1926 */
+    0x0000,     /* R1927 */
+    0x0000,     /* R1928 */
+    0x0000,     /* R1929 */
+    0x0000,     /* R1930 */
+    0x0000,     /* R1931 */
+    0x0000,     /* R1932 */
+    0x0000,     /* R1933 */
+    0x0000,     /* R1934 */
+    0x0000,     /* R1935 */
+    0x0000,     /* R1936 */
+    0x0000,     /* R1937 */
+    0x0000,     /* R1938 */
+    0x0000,     /* R1939 */
+    0x0000,     /* R1940 */
+    0x0000,     /* R1941 */
+    0x0000,     /* R1942 */
+    0x0000,     /* R1943 */
+    0x0000,     /* R1944 */
+    0x0000,     /* R1945 */
+    0x0000,     /* R1946 */
+    0x0000,     /* R1947 */
+    0x0000,     /* R1948 */
+    0x0000,     /* R1949 */
+    0x0000,     /* R1950 */
+    0x0000,     /* R1951 */
+    0x0000,     /* R1952 */
+    0x0000,     /* R1953 */
+    0x0000,     /* R1954 */
+    0x0000,     /* R1955 */
+    0x0000,     /* R1956 */
+    0x0000,     /* R1957 */
+    0x0000,     /* R1958 */
+    0x0000,     /* R1959 */
+    0x0000,     /* R1960 */
+    0x0000,     /* R1961 */
+    0x0000,     /* R1962 */
+    0x0000,     /* R1963 */
+    0x0000,     /* R1964 */
+    0x0000,     /* R1965 */
+    0x0000,     /* R1966 */
+    0x0000,     /* R1967 */
+    0x0000,     /* R1968 */
+    0x0000,     /* R1969 */
+    0x0000,     /* R1970 */
+    0x0000,     /* R1971 */
+    0x0000,     /* R1972 */
+    0x0000,     /* R1973 */
+    0x0000,     /* R1974 */
+    0x0000,     /* R1975 */
+    0x0000,     /* R1976 */
+    0x0000,     /* R1977 */
+    0x0000,     /* R1978 */
+    0x0000,     /* R1979 */
+    0x0000,     /* R1980 */
+    0x0000,     /* R1981 */
+    0x0000,     /* R1982 */
+    0x0000,     /* R1983 */
+    0x0000,     /* R1984 */
+    0x0000,     /* R1985 */
+    0x0000,     /* R1986 */
+    0x0000,     /* R1987 */
+    0x0000,     /* R1988 */
+    0x0000,     /* R1989 */
+    0x0000,     /* R1990 */
+    0x0000,     /* R1991 */
+    0x0000,     /* R1992 */
+    0x0000,     /* R1993 */
+    0x0000,     /* R1994 */
+    0x0000,     /* R1995 */
+    0x0000,     /* R1996 */
+    0x0000,     /* R1997 */
+    0x0000,     /* R1998 */
+    0x0000,     /* R1999 */
+    0x0000,     /* R2000 */
+    0x0000,     /* R2001 */
+    0x0000,     /* R2002 */
+    0x0000,     /* R2003 */
+    0x0000,     /* R2004 */
+    0x0000,     /* R2005 */
+    0x0000,     /* R2006 */
+    0x0000,     /* R2007 */
+    0x0000,     /* R2008 */
+    0x0000,     /* R2009 */
+    0x0000,     /* R2010 */
+    0x0000,     /* R2011 */
+    0x0000,     /* R2012 */
+    0x0000,     /* R2013 */
+    0x0000,     /* R2014 */
+    0x0000,     /* R2015 */
+    0x0000,     /* R2016 */
+    0x0000,     /* R2017 */
+    0x0000,     /* R2018 */
+    0x0000,     /* R2019 */
+    0x0000,     /* R2020 */
+    0x0000,     /* R2021 */
+    0x0000,     /* R2022 */
+    0x0000,     /* R2023 */
+    0x0000,     /* R2024 */
+    0x0000,     /* R2025 */
+    0x0000,     /* R2026 */
+    0x0000,     /* R2027 */
+    0x0000,     /* R2028 */
+    0x0000,     /* R2029 */
+    0x0000,     /* R2030 */
+    0x0000,     /* R2031 */
+    0x0000,     /* R2032 */
+    0x0000,     /* R2033 */
+    0x0000,     /* R2034 */
+    0x0000,     /* R2035 */
+    0x0000,     /* R2036 */
+    0x0000,     /* R2037 */
+    0x0000,     /* R2038 */
+    0x0000,     /* R2039 */
+    0x0000,     /* R2040 */
+    0x0000,     /* R2041 */
+    0x0000,     /* R2042 */
+    0x0000,     /* R2043 */
+    0x0000,     /* R2044 */
+    0x0000,     /* R2045 */
+    0x0000,     /* R2046 */
+    0x0000,     /* R2047 */
+    0x0000,     /* R2048 */
+    0x0000,     /* R2049 */
+    0x0000,     /* R2050 */
+    0x0000,     /* R2051 */
+    0x0000,     /* R2052 */
+    0x0000,     /* R2053 */
+    0x0000,     /* R2054 */
+    0x0000,     /* R2055 */
+    0x0000,     /* R2056 */
+    0x0000,     /* R2057 */
+    0x0000,     /* R2058 */
+    0x0000,     /* R2059 */
+    0x0000,     /* R2060 */
+    0x0000,     /* R2061 */
+    0x0000,     /* R2062 */
+    0x0000,     /* R2063 */
+    0x0000,     /* R2064 */
+    0x0000,     /* R2065 */
+    0x0000,     /* R2066 */
+    0x0000,     /* R2067 */
+    0x0000,     /* R2068 */
+    0x0000,     /* R2069 */
+    0x0000,     /* R2070 */
+    0x0000,     /* R2071 */
+    0x0000,     /* R2072 */
+    0x0000,     /* R2073 */
+    0x0000,     /* R2074 */
+    0x0000,     /* R2075 */
+    0x0000,     /* R2076 */
+    0x0000,     /* R2077 */
+    0x0000,     /* R2078 */
+    0x0000,     /* R2079 */
+    0x0000,     /* R2080 */
+    0x0000,     /* R2081 */
+    0x0000,     /* R2082 */
+    0x0000,     /* R2083 */
+    0x0000,     /* R2084 */
+    0x0000,     /* R2085 */
+    0x0000,     /* R2086 */
+    0x0000,     /* R2087 */
+    0x0000,     /* R2088 */
+    0x0000,     /* R2089 */
+    0x0000,     /* R2090 */
+    0x0000,     /* R2091 */
+    0x0000,     /* R2092 */
+    0x0000,     /* R2093 */
+    0x0000,     /* R2094 */
+    0x0000,     /* R2095 */
+    0x0000,     /* R2096 */
+    0x0000,     /* R2097 */
+    0x0000,     /* R2098 */
+    0x0000,     /* R2099 */
+    0x0000,     /* R2100 */
+    0x0000,     /* R2101 */
+    0x0000,     /* R2102 */
+    0x0000,     /* R2103 */
+    0x0000,     /* R2104 */
+    0x0000,     /* R2105 */
+    0x0000,     /* R2106 */
+    0x0000,     /* R2107 */
+    0x0000,     /* R2108 */
+    0x0000,     /* R2109 */
+    0x0000,     /* R2110 */
+    0x0000,     /* R2111 */
+    0x0000,     /* R2112 */
+    0x0000,     /* R2113 */
+    0x0000,     /* R2114 */
+    0x0000,     /* R2115 */
+    0x0000,     /* R2116 */
+    0x0000,     /* R2117 */
+    0x0000,     /* R2118 */
+    0x0000,     /* R2119 */
+    0x0000,     /* R2120 */
+    0x0000,     /* R2121 */
+    0x0000,     /* R2122 */
+    0x0000,     /* R2123 */
+    0x0000,     /* R2124 */
+    0x0000,     /* R2125 */
+    0x0000,     /* R2126 */
+    0x0000,     /* R2127 */
+    0x0000,     /* R2128 */
+    0x0000,     /* R2129 */
+    0x0000,     /* R2130 */
+    0x0000,     /* R2131 */
+    0x0000,     /* R2132 */
+    0x0000,     /* R2133 */
+    0x0000,     /* R2134 */
+    0x0000,     /* R2135 */
+    0x0000,     /* R2136 */
+    0x0000,     /* R2137 */
+    0x0000,     /* R2138 */
+    0x0000,     /* R2139 */
+    0x0000,     /* R2140 */
+    0x0000,     /* R2141 */
+    0x0000,     /* R2142 */
+    0x0000,     /* R2143 */
+    0x0000,     /* R2144 */
+    0x0000,     /* R2145 */
+    0x0000,     /* R2146 */
+    0x0000,     /* R2147 */
+    0x0000,     /* R2148 */
+    0x0000,     /* R2149 */
+    0x0000,     /* R2150 */
+    0x0000,     /* R2151 */
+    0x0000,     /* R2152 */
+    0x0000,     /* R2153 */
+    0x0000,     /* R2154 */
+    0x0000,     /* R2155 */
+    0x0000,     /* R2156 */
+    0x0000,     /* R2157 */
+    0x0000,     /* R2158 */
+    0x0000,     /* R2159 */
+    0x0000,     /* R2160 */
+    0x0000,     /* R2161 */
+    0x0000,     /* R2162 */
+    0x0000,     /* R2163 */
+    0x0000,     /* R2164 */
+    0x0000,     /* R2165 */
+    0x0000,     /* R2166 */
+    0x0000,     /* R2167 */
+    0x0000,     /* R2168 */
+    0x0000,     /* R2169 */
+    0x0000,     /* R2170 */
+    0x0000,     /* R2171 */
+    0x0000,     /* R2172 */
+    0x0000,     /* R2173 */
+    0x0000,     /* R2174 */
+    0x0000,     /* R2175 */
+    0x0000,     /* R2176 */
+    0x0000,     /* R2177 */
+    0x0000,     /* R2178 */
+    0x0000,     /* R2179 */
+    0x0000,     /* R2180 */
+    0x0000,     /* R2181 */
+    0x0000,     /* R2182 */
+    0x0000,     /* R2183 */
+    0x0000,     /* R2184 */
+    0x0000,     /* R2185 */
+    0x0000,     /* R2186 */
+    0x0000,     /* R2187 */
+    0x0000,     /* R2188 */
+    0x0000,     /* R2189 */
+    0x0000,     /* R2190 */
+    0x0000,     /* R2191 */
+    0x0000,     /* R2192 */
+    0x0000,     /* R2193 */
+    0x0000,     /* R2194 */
+    0x0000,     /* R2195 */
+    0x0000,     /* R2196 */
+    0x0000,     /* R2197 */
+    0x0000,     /* R2198 */
+    0x0000,     /* R2199 */
+    0x0000,     /* R2200 */
+    0x0000,     /* R2201 */
+    0x0000,     /* R2202 */
+    0x0000,     /* R2203 */
+    0x0000,     /* R2204 */
+    0x0000,     /* R2205 */
+    0x0000,     /* R2206 */
+    0x0000,     /* R2207 */
+    0x0000,     /* R2208 */
+    0x0000,     /* R2209 */
+    0x0000,     /* R2210 */
+    0x0000,     /* R2211 */
+    0x0000,     /* R2212 */
+    0x0000,     /* R2213 */
+    0x0000,     /* R2214 */
+    0x0000,     /* R2215 */
+    0x0000,     /* R2216 */
+    0x0000,     /* R2217 */
+    0x0000,     /* R2218 */
+    0x0000,     /* R2219 */
+    0x0000,     /* R2220 */
+    0x0000,     /* R2221 */
+    0x0000,     /* R2222 */
+    0x0000,     /* R2223 */
+    0x0000,     /* R2224 */
+    0x0000,     /* R2225 */
+    0x0000,     /* R2226 */
+    0x0000,     /* R2227 */
+    0x0000,     /* R2228 */
+    0x0000,     /* R2229 */
+    0x0000,     /* R2230 */
+    0x0000,     /* R2231 */
+    0x0000,     /* R2232 */
+    0x0000,     /* R2233 */
+    0x0000,     /* R2234 */
+    0x0000,     /* R2235 */
+    0x0000,     /* R2236 */
+    0x0000,     /* R2237 */
+    0x0000,     /* R2238 */
+    0x0000,     /* R2239 */
+    0x0000,     /* R2240 */
+    0x0000,     /* R2241 */
+    0x0000,     /* R2242 */
+    0x0000,     /* R2243 */
+    0x0000,     /* R2244 */
+    0x0000,     /* R2245 */
+    0x0000,     /* R2246 */
+    0x0000,     /* R2247 */
+    0x0000,     /* R2248 */
+    0x0000,     /* R2249 */
+    0x0000,     /* R2250 */
+    0x0000,     /* R2251 */
+    0x0000,     /* R2252 */
+    0x0000,     /* R2253 */
+    0x0000,     /* R2254 */
+    0x0000,     /* R2255 */
+    0x0000,     /* R2256 */
+    0x0000,     /* R2257 */
+    0x0000,     /* R2258 */
+    0x0000,     /* R2259 */
+    0x0000,     /* R2260 */
+    0x0000,     /* R2261 */
+    0x0000,     /* R2262 */
+    0x0000,     /* R2263 */
+    0x0000,     /* R2264 */
+    0x0000,     /* R2265 */
+    0x0000,     /* R2266 */
+    0x0000,     /* R2267 */
+    0x0000,     /* R2268 */
+    0x0000,     /* R2269 */
+    0x0000,     /* R2270 */
+    0x0000,     /* R2271 */
+    0x0000,     /* R2272 */
+    0x0000,     /* R2273 */
+    0x0000,     /* R2274 */
+    0x0000,     /* R2275 */
+    0x0000,     /* R2276 */
+    0x0000,     /* R2277 */
+    0x0000,     /* R2278 */
+    0x0000,     /* R2279 */
+    0x0000,     /* R2280 */
+    0x0000,     /* R2281 */
+    0x0000,     /* R2282 */
+    0x0000,     /* R2283 */
+    0x0000,     /* R2284 */
+    0x0000,     /* R2285 */
+    0x0000,     /* R2286 */
+    0x0000,     /* R2287 */
+    0x0000,     /* R2288 */
+    0x0000,     /* R2289 */
+    0x0000,     /* R2290 */
+    0x0000,     /* R2291 */
+    0x0000,     /* R2292 */
+    0x0000,     /* R2293 */
+    0x0000,     /* R2294 */
+    0x0000,     /* R2295 */
+    0x0000,     /* R2296 */
+    0x0000,     /* R2297 */
+    0x0000,     /* R2298 */
+    0x0000,     /* R2299 */
+    0x0000,     /* R2300 */
+    0x0000,     /* R2301 */
+    0x0000,     /* R2302 */
+    0x0000,     /* R2303 */
+    0x0000,     /* R2304 */
+    0x0000,     /* R2305 */
+    0x0000,     /* R2306 */
+    0x0000,     /* R2307 */
+    0x0000,     /* R2308 */
+    0x0000,     /* R2309 */
+    0x0000,     /* R2310 */
+    0x0000,     /* R2311 */
+    0x0000,     /* R2312 */
+    0x0000,     /* R2313 */
+    0x0000,     /* R2314 */
+    0x0000,     /* R2315 */
+    0x0000,     /* R2316 */
+    0x0000,     /* R2317 */
+    0x0000,     /* R2318 */
+    0x0000,     /* R2319 */
+    0x0000,     /* R2320 */
+    0x0000,     /* R2321 */
+    0x0000,     /* R2322 */
+    0x0000,     /* R2323 */
+    0x0000,     /* R2324 */
+    0x0000,     /* R2325 */
+    0x0000,     /* R2326 */
+    0x0000,     /* R2327 */
+    0x0000,     /* R2328 */
+    0x0000,     /* R2329 */
+    0x0000,     /* R2330 */
+    0x0000,     /* R2331 */
+    0x0000,     /* R2332 */
+    0x0000,     /* R2333 */
+    0x0000,     /* R2334 */
+    0x0000,     /* R2335 */
+    0x0000,     /* R2336 */
+    0x0000,     /* R2337 */
+    0x0000,     /* R2338 */
+    0x0000,     /* R2339 */
+    0x0000,     /* R2340 */
+    0x0000,     /* R2341 */
+    0x0000,     /* R2342 */
+    0x0000,     /* R2343 */
+    0x0000,     /* R2344 */
+    0x0000,     /* R2345 */
+    0x0000,     /* R2346 */
+    0x0000,     /* R2347 */
+    0x0000,     /* R2348 */
+    0x0000,     /* R2349 */
+    0x0000,     /* R2350 */
+    0x0000,     /* R2351 */
+    0x0000,     /* R2352 */
+    0x0000,     /* R2353 */
+    0x0000,     /* R2354 */
+    0x0000,     /* R2355 */
+    0x0000,     /* R2356 */
+    0x0000,     /* R2357 */
+    0x0000,     /* R2358 */
+    0x0000,     /* R2359 */
+    0x0000,     /* R2360 */
+    0x0000,     /* R2361 */
+    0x0000,     /* R2362 */
+    0x0000,     /* R2363 */
+    0x0000,     /* R2364 */
+    0x0000,     /* R2365 */
+    0x0000,     /* R2366 */
+    0x0000,     /* R2367 */
+    0x0000,     /* R2368 */
+    0x0000,     /* R2369 */
+    0x0000,     /* R2370 */
+    0x0000,     /* R2371 */
+    0x0000,     /* R2372 */
+    0x0000,     /* R2373 */
+    0x0000,     /* R2374 */
+    0x0000,     /* R2375 */
+    0x0000,     /* R2376 */
+    0x0000,     /* R2377 */
+    0x0000,     /* R2378 */
+    0x0000,     /* R2379 */
+    0x0000,     /* R2380 */
+    0x0000,     /* R2381 */
+    0x0000,     /* R2382 */
+    0x0000,     /* R2383 */
+    0x0000,     /* R2384 */
+    0x0000,     /* R2385 */
+    0x0000,     /* R2386 */
+    0x0000,     /* R2387 */
+    0x0000,     /* R2388 */
+    0x0000,     /* R2389 */
+    0x0000,     /* R2390 */
+    0x0000,     /* R2391 */
+    0x0000,     /* R2392 */
+    0x0000,     /* R2393 */
+    0x0000,     /* R2394 */
+    0x0000,     /* R2395 */
+    0x0000,     /* R2396 */
+    0x0000,     /* R2397 */
+    0x0000,     /* R2398 */
+    0x0000,     /* R2399 */
+    0x0000,     /* R2400 */
+    0x0000,     /* R2401 */
+    0x0000,     /* R2402 */
+    0x0000,     /* R2403 */
+    0x0000,     /* R2404 */
+    0x0000,     /* R2405 */
+    0x0000,     /* R2406 */
+    0x0000,     /* R2407 */
+    0x0000,     /* R2408 */
+    0x0000,     /* R2409 */
+    0x0000,     /* R2410 */
+    0x0000,     /* R2411 */
+    0x0000,     /* R2412 */
+    0x0000,     /* R2413 */
+    0x0000,     /* R2414 */
+    0x0000,     /* R2415 */
+    0x0000,     /* R2416 */
+    0x0000,     /* R2417 */
+    0x0000,     /* R2418 */
+    0x0000,     /* R2419 */
+    0x0000,     /* R2420 */
+    0x0000,     /* R2421 */
+    0x0000,     /* R2422 */
+    0x0000,     /* R2423 */
+    0x0000,     /* R2424 */
+    0x0000,     /* R2425 */
+    0x0000,     /* R2426 */
+    0x0000,     /* R2427 */
+    0x0000,     /* R2428 */
+    0x0000,     /* R2429 */
+    0x0000,     /* R2430 */
+    0x0000,     /* R2431 */
+    0x0000,     /* R2432 */
+    0x0000,     /* R2433 */
+    0x0000,     /* R2434 */
+    0x0000,     /* R2435 */
+    0x0000,     /* R2436 */
+    0x0000,     /* R2437 */
+    0x0000,     /* R2438 */
+    0x0000,     /* R2439 */
+    0x0000,     /* R2440 */
+    0x0000,     /* R2441 */
+    0x0000,     /* R2442 */
+    0x0000,     /* R2443 */
+    0x0000,     /* R2444 */
+    0x0000,     /* R2445 */
+    0x0000,     /* R2446 */
+    0x0000,     /* R2447 */
+    0x0000,     /* R2448 */
+    0x0000,     /* R2449 */
+    0x0000,     /* R2450 */
+    0x0000,     /* R2451 */
+    0x0000,     /* R2452 */
+    0x0000,     /* R2453 */
+    0x0000,     /* R2454 */
+    0x0000,     /* R2455 */
+    0x0000,     /* R2456 */
+    0x0000,     /* R2457 */
+    0x0000,     /* R2458 */
+    0x0000,     /* R2459 */
+    0x0000,     /* R2460 */
+    0x0000,     /* R2461 */
+    0x0000,     /* R2462 */
+    0x0000,     /* R2463 */
+    0x0000,     /* R2464 */
+    0x0000,     /* R2465 */
+    0x0000,     /* R2466 */
+    0x0000,     /* R2467 */
+    0x0000,     /* R2468 */
+    0x0000,     /* R2469 */
+    0x0000,     /* R2470 */
+    0x0000,     /* R2471 */
+    0x0000,     /* R2472 */
+    0x0000,     /* R2473 */
+    0x0000,     /* R2474 */
+    0x0000,     /* R2475 */
+    0x0000,     /* R2476 */
+    0x0000,     /* R2477 */
+    0x0000,     /* R2478 */
+    0x0000,     /* R2479 */
+    0x0000,     /* R2480 */
+    0x0000,     /* R2481 */
+    0x0000,     /* R2482 */
+    0x0000,     /* R2483 */
+    0x0000,     /* R2484 */
+    0x0000,     /* R2485 */
+    0x0000,     /* R2486 */
+    0x0000,     /* R2487 */
+    0x0000,     /* R2488 */
+    0x0000,     /* R2489 */
+    0x0000,     /* R2490 */
+    0x0000,     /* R2491 */
+    0x0000,     /* R2492 */
+    0x0000,     /* R2493 */
+    0x0000,     /* R2494 */
+    0x0000,     /* R2495 */
+    0x0000,     /* R2496 */
+    0x0000,     /* R2497 */
+    0x0000,     /* R2498 */
+    0x0000,     /* R2499 */
+    0x0000,     /* R2500 */
+    0x0000,     /* R2501 */
+    0x0000,     /* R2502 */
+    0x0000,     /* R2503 */
+    0x0000,     /* R2504 */
+    0x0000,     /* R2505 */
+    0x0000,     /* R2506 */
+    0x0000,     /* R2507 */
+    0x0000,     /* R2508 */
+    0x0000,     /* R2509 */
+    0x0000,     /* R2510 */
+    0x0000,     /* R2511 */
+    0x0000,     /* R2512 */
+    0x0000,     /* R2513 */
+    0x0000,     /* R2514 */
+    0x0000,     /* R2515 */
+    0x0000,     /* R2516 */
+    0x0000,     /* R2517 */
+    0x0000,     /* R2518 */
+    0x0000,     /* R2519 */
+    0x0000,     /* R2520 */
+    0x0000,     /* R2521 */
+    0x0000,     /* R2522 */
+    0x0000,     /* R2523 */
+    0x0000,     /* R2524 */
+    0x0000,     /* R2525 */
+    0x0000,     /* R2526 */
+    0x0000,     /* R2527 */
+    0x0000,     /* R2528 */
+    0x0000,     /* R2529 */
+    0x0000,     /* R2530 */
+    0x0000,     /* R2531 */
+    0x0000,     /* R2532 */
+    0x0000,     /* R2533 */
+    0x0000,     /* R2534 */
+    0x0000,     /* R2535 */
+    0x0000,     /* R2536 */
+    0x0000,     /* R2537 */
+    0x0000,     /* R2538 */
+    0x0000,     /* R2539 */
+    0x0000,     /* R2540 */
+    0x0000,     /* R2541 */
+    0x0000,     /* R2542 */
+    0x0000,     /* R2543 */
+    0x0000,     /* R2544 */
+    0x0000,     /* R2545 */
+    0x0000,     /* R2546 */
+    0x0000,     /* R2547 */
+    0x0000,     /* R2548 */
+    0x0000,     /* R2549 */
+    0x0000,     /* R2550 */
+    0x0000,     /* R2551 */
+    0x0000,     /* R2552 */
+    0x0000,     /* R2553 */
+    0x0000,     /* R2554 */
+    0x0000,     /* R2555 */
+    0x0000,     /* R2556 */
+    0x0000,     /* R2557 */
+    0x0000,     /* R2558 */
+    0x0000,     /* R2559 */
+    0x0000,     /* R2560 */
+    0x0000,     /* R2561 */
+    0x0000,     /* R2562 */
+    0x0000,     /* R2563 */
+    0x0000,     /* R2564 */
+    0x0000,     /* R2565 */
+    0x0000,     /* R2566 */
+    0x0000,     /* R2567 */
+    0x0000,     /* R2568 */
+    0x0000,     /* R2569 */
+    0x0000,     /* R2570 */
+    0x0000,     /* R2571 */
+    0x0000,     /* R2572 */
+    0x0000,     /* R2573 */
+    0x0000,     /* R2574 */
+    0x0000,     /* R2575 */
+    0x0000,     /* R2576 */
+    0x0000,     /* R2577 */
+    0x0000,     /* R2578 */
+    0x0000,     /* R2579 */
+    0x0000,     /* R2580 */
+    0x0000,     /* R2581 */
+    0x0000,     /* R2582 */
+    0x0000,     /* R2583 */
+    0x0000,     /* R2584 */
+    0x0000,     /* R2585 */
+    0x0000,     /* R2586 */
+    0x0000,     /* R2587 */
+    0x0000,     /* R2588 */
+    0x0000,     /* R2589 */
+    0x0000,     /* R2590 */
+    0x0000,     /* R2591 */
+    0x0000,     /* R2592 */
+    0x0000,     /* R2593 */
+    0x0000,     /* R2594 */
+    0x0000,     /* R2595 */
+    0x0000,     /* R2596 */
+    0x0000,     /* R2597 */
+    0x0000,     /* R2598 */
+    0x0000,     /* R2599 */
+    0x0000,     /* R2600 */
+    0x0000,     /* R2601 */
+    0x0000,     /* R2602 */
+    0x0000,     /* R2603 */
+    0x0000,     /* R2604 */
+    0x0000,     /* R2605 */
+    0x0000,     /* R2606 */
+    0x0000,     /* R2607 */
+    0x0000,     /* R2608 */
+    0x0000,     /* R2609 */
+    0x0000,     /* R2610 */
+    0x0000,     /* R2611 */
+    0x0000,     /* R2612 */
+    0x0000,     /* R2613 */
+    0x0000,     /* R2614 */
+    0x0000,     /* R2615 */
+    0x0000,     /* R2616 */
+    0x0000,     /* R2617 */
+    0x0000,     /* R2618 */
+    0x0000,     /* R2619 */
+    0x0000,     /* R2620 */
+    0x0000,     /* R2621 */
+    0x0000,     /* R2622 */
+    0x0000,     /* R2623 */
+    0x0000,     /* R2624 */
+    0x0000,     /* R2625 */
+    0x0000,     /* R2626 */
+    0x0000,     /* R2627 */
+    0x0000,     /* R2628 */
+    0x0000,     /* R2629 */
+    0x0000,     /* R2630 */
+    0x0000,     /* R2631 */
+    0x0000,     /* R2632 */
+    0x0000,     /* R2633 */
+    0x0000,     /* R2634 */
+    0x0000,     /* R2635 */
+    0x0000,     /* R2636 */
+    0x0000,     /* R2637 */
+    0x0000,     /* R2638 */
+    0x0000,     /* R2639 */
+    0x0000,     /* R2640 */
+    0x0000,     /* R2641 */
+    0x0000,     /* R2642 */
+    0x0000,     /* R2643 */
+    0x0000,     /* R2644 */
+    0x0000,     /* R2645 */
+    0x0000,     /* R2646 */
+    0x0000,     /* R2647 */
+    0x0000,     /* R2648 */
+    0x0000,     /* R2649 */
+    0x0000,     /* R2650 */
+    0x0000,     /* R2651 */
+    0x0000,     /* R2652 */
+    0x0000,     /* R2653 */
+    0x0000,     /* R2654 */
+    0x0000,     /* R2655 */
+    0x0000,     /* R2656 */
+    0x0000,     /* R2657 */
+    0x0000,     /* R2658 */
+    0x0000,     /* R2659 */
+    0x0000,     /* R2660 */
+    0x0000,     /* R2661 */
+    0x0000,     /* R2662 */
+    0x0000,     /* R2663 */
+    0x0000,     /* R2664 */
+    0x0000,     /* R2665 */
+    0x0000,     /* R2666 */
+    0x0000,     /* R2667 */
+    0x0000,     /* R2668 */
+    0x0000,     /* R2669 */
+    0x0000,     /* R2670 */
+    0x0000,     /* R2671 */
+    0x0000,     /* R2672 */
+    0x0000,     /* R2673 */
+    0x0000,     /* R2674 */
+    0x0000,     /* R2675 */
+    0x0000,     /* R2676 */
+    0x0000,     /* R2677 */
+    0x0000,     /* R2678 */
+    0x0000,     /* R2679 */
+    0x0000,     /* R2680 */
+    0x0000,     /* R2681 */
+    0x0000,     /* R2682 */
+    0x0000,     /* R2683 */
+    0x0000,     /* R2684 */
+    0x0000,     /* R2685 */
+    0x0000,     /* R2686 */
+    0x0000,     /* R2687 */
+    0x0000,     /* R2688 */
+    0x0000,     /* R2689 */
+    0x0000,     /* R2690 */
+    0x0000,     /* R2691 */
+    0x0000,     /* R2692 */
+    0x0000,     /* R2693 */
+    0x0000,     /* R2694 */
+    0x0000,     /* R2695 */
+    0x0000,     /* R2696 */
+    0x0000,     /* R2697 */
+    0x0000,     /* R2698 */
+    0x0000,     /* R2699 */
+    0x0000,     /* R2700 */
+    0x0000,     /* R2701 */
+    0x0000,     /* R2702 */
+    0x0000,     /* R2703 */
+    0x0000,     /* R2704 */
+    0x0000,     /* R2705 */
+    0x0000,     /* R2706 */
+    0x0000,     /* R2707 */
+    0x0000,     /* R2708 */
+    0x0000,     /* R2709 */
+    0x0000,     /* R2710 */
+    0x0000,     /* R2711 */
+    0x0000,     /* R2712 */
+    0x0000,     /* R2713 */
+    0x0000,     /* R2714 */
+    0x0000,     /* R2715 */
+    0x0000,     /* R2716 */
+    0x0000,     /* R2717 */
+    0x0000,     /* R2718 */
+    0x0000,     /* R2719 */
+    0x0000,     /* R2720 */
+    0x0000,     /* R2721 */
+    0x0000,     /* R2722 */
+    0x0000,     /* R2723 */
+    0x0000,     /* R2724 */
+    0x0000,     /* R2725 */
+    0x0000,     /* R2726 */
+    0x0000,     /* R2727 */
+    0x0000,     /* R2728 */
+    0x0000,     /* R2729 */
+    0x0000,     /* R2730 */
+    0x0000,     /* R2731 */
+    0x0000,     /* R2732 */
+    0x0000,     /* R2733 */
+    0x0000,     /* R2734 */
+    0x0000,     /* R2735 */
+    0x0000,     /* R2736 */
+    0x0000,     /* R2737 */
+    0x0000,     /* R2738 */
+    0x0000,     /* R2739 */
+    0x0000,     /* R2740 */
+    0x0000,     /* R2741 */
+    0x0000,     /* R2742 */
+    0x0000,     /* R2743 */
+    0x0000,     /* R2744 */
+    0x0000,     /* R2745 */
+    0x0000,     /* R2746 */
+    0x0000,     /* R2747 */
+    0x0000,     /* R2748 */
+    0x0000,     /* R2749 */
+    0x0000,     /* R2750 */
+    0x0000,     /* R2751 */
+    0x0000,     /* R2752 */
+    0x0000,     /* R2753 */
+    0x0000,     /* R2754 */
+    0x0000,     /* R2755 */
+    0x0000,     /* R2756 */
+    0x0000,     /* R2757 */
+    0x0000,     /* R2758 */
+    0x0000,     /* R2759 */
+    0x0000,     /* R2760 */
+    0x0000,     /* R2761 */
+    0x0000,     /* R2762 */
+    0x0000,     /* R2763 */
+    0x0000,     /* R2764 */
+    0x0000,     /* R2765 */
+    0x0000,     /* R2766 */
+    0x0000,     /* R2767 */
+    0x0000,     /* R2768 */
+    0x0000,     /* R2769 */
+    0x0000,     /* R2770 */
+    0x0000,     /* R2771 */
+    0x0000,     /* R2772 */
+    0x0000,     /* R2773 */
+    0x0000,     /* R2774 */
+    0x0000,     /* R2775 */
+    0x0000,     /* R2776 */
+    0x0000,     /* R2777 */
+    0x0000,     /* R2778 */
+    0x0000,     /* R2779 */
+    0x0000,     /* R2780 */
+    0x0000,     /* R2781 */
+    0x0000,     /* R2782 */
+    0x0000,     /* R2783 */
+    0x0000,     /* R2784 */
+    0x0000,     /* R2785 */
+    0x0000,     /* R2786 */
+    0x0000,     /* R2787 */
+    0x0000,     /* R2788 */
+    0x0000,     /* R2789 */
+    0x0000,     /* R2790 */
+    0x0000,     /* R2791 */
+    0x0000,     /* R2792 */
+    0x0000,     /* R2793 */
+    0x0000,     /* R2794 */
+    0x0000,     /* R2795 */
+    0x0000,     /* R2796 */
+    0x0000,     /* R2797 */
+    0x0000,     /* R2798 */
+    0x0000,     /* R2799 */
+    0x0000,     /* R2800 */
+    0x0000,     /* R2801 */
+    0x0000,     /* R2802 */
+    0x0000,     /* R2803 */
+    0x0000,     /* R2804 */
+    0x0000,     /* R2805 */
+    0x0000,     /* R2806 */
+    0x0000,     /* R2807 */
+    0x0000,     /* R2808 */
+    0x0000,     /* R2809 */
+    0x0000,     /* R2810 */
+    0x0000,     /* R2811 */
+    0x0000,     /* R2812 */
+    0x0000,     /* R2813 */
+    0x0000,     /* R2814 */
+    0x0000,     /* R2815 */
+    0x0000,     /* R2816 */
+    0x0000,     /* R2817 */
+    0x0000,     /* R2818 */
+    0x0000,     /* R2819 */
+    0x0000,     /* R2820 */
+    0x0000,     /* R2821 */
+    0x0000,     /* R2822 */
+    0x0000,     /* R2823 */
+    0x0000,     /* R2824 */
+    0x0000,     /* R2825 */
+    0x0000,     /* R2826 */
+    0x0000,     /* R2827 */
+    0x0000,     /* R2828 */
+    0x0000,     /* R2829 */
+    0x0000,     /* R2830 */
+    0x0000,     /* R2831 */
+    0x0000,     /* R2832 */
+    0x0000,     /* R2833 */
+    0x0000,     /* R2834 */
+    0x0000,     /* R2835 */
+    0x0000,     /* R2836 */
+    0x0000,     /* R2837 */
+    0x0000,     /* R2838 */
+    0x0000,     /* R2839 */
+    0x0000,     /* R2840 */
+    0x0000,     /* R2841 */
+    0x0000,     /* R2842 */
+    0x0000,     /* R2843 */
+    0x0000,     /* R2844 */
+    0x0000,     /* R2845 */
+    0x0000,     /* R2846 */
+    0x0000,     /* R2847 */
+    0x0000,     /* R2848 */
+    0x0000,     /* R2849 */
+    0x0000,     /* R2850 */
+    0x0000,     /* R2851 */
+    0x0000,     /* R2852 */
+    0x0000,     /* R2853 */
+    0x0000,     /* R2854 */
+    0x0000,     /* R2855 */
+    0x0000,     /* R2856 */
+    0x0000,     /* R2857 */
+    0x0000,     /* R2858 */
+    0x0000,     /* R2859 */
+    0x0000,     /* R2860 */
+    0x0000,     /* R2861 */
+    0x0000,     /* R2862 */
+    0x0000,     /* R2863 */
+    0x0000,     /* R2864 */
+    0x0000,     /* R2865 */
+    0x0000,     /* R2866 */
+    0x0000,     /* R2867 */
+    0x0000,     /* R2868 */
+    0x0000,     /* R2869 */
+    0x0000,     /* R2870 */
+    0x0000,     /* R2871 */
+    0x0000,     /* R2872 */
+    0x0000,     /* R2873 */
+    0x0000,     /* R2874 */
+    0x0000,     /* R2875 */
+    0x0000,     /* R2876 */
+    0x0000,     /* R2877 */
+    0x0000,     /* R2878 */
+    0x0000,     /* R2879 */
+    0x0000,     /* R2880 */
+    0x0000,     /* R2881 */
+    0x0000,     /* R2882 */
+    0x0000,     /* R2883 */
+    0x0000,     /* R2884 */
+    0x0000,     /* R2885 */
+    0x0000,     /* R2886 */
+    0x0000,     /* R2887 */
+    0x0000,     /* R2888 */
+    0x0000,     /* R2889 */
+    0x0000,     /* R2890 */
+    0x0000,     /* R2891 */
+    0x0000,     /* R2892 */
+    0x0000,     /* R2893 */
+    0x0000,     /* R2894 */
+    0x0000,     /* R2895 */
+    0x0000,     /* R2896 */
+    0x0000,     /* R2897 */
+    0x0000,     /* R2898 */
+    0x0000,     /* R2899 */
+    0x0000,     /* R2900 */
+    0x0000,     /* R2901 */
+    0x0000,     /* R2902 */
+    0x0000,     /* R2903 */
+    0x0000,     /* R2904 */
+    0x0000,     /* R2905 */
+    0x0000,     /* R2906 */
+    0x0000,     /* R2907 */
+    0x0000,     /* R2908 */
+    0x0000,     /* R2909 */
+    0x0000,     /* R2910 */
+    0x0000,     /* R2911 */
+    0x0000,     /* R2912 */
+    0x0000,     /* R2913 */
+    0x0000,     /* R2914 */
+    0x0000,     /* R2915 */
+    0x0000,     /* R2916 */
+    0x0000,     /* R2917 */
+    0x0000,     /* R2918 */
+    0x0000,     /* R2919 */
+    0x0000,     /* R2920 */
+    0x0000,     /* R2921 */
+    0x0000,     /* R2922 */
+    0x0000,     /* R2923 */
+    0x0000,     /* R2924 */
+    0x0000,     /* R2925 */
+    0x0000,     /* R2926 */
+    0x0000,     /* R2927 */
+    0x0000,     /* R2928 */
+    0x0000,     /* R2929 */
+    0x0000,     /* R2930 */
+    0x0000,     /* R2931 */
+    0x0000,     /* R2932 */
+    0x0000,     /* R2933 */
+    0x0000,     /* R2934 */
+    0x0000,     /* R2935 */
+    0x0000,     /* R2936 */
+    0x0000,     /* R2937 */
+    0x0000,     /* R2938 */
+    0x0000,     /* R2939 */
+    0x0000,     /* R2940 */
+    0x0000,     /* R2941 */
+    0x0000,     /* R2942 */
+    0x0000,     /* R2943 */
+    0x0000,     /* R2944 */
+    0x0000,     /* R2945 */
+    0x0000,     /* R2946 */
+    0x0000,     /* R2947 */
+    0x0000,     /* R2948 */
+    0x0000,     /* R2949 */
+    0x0000,     /* R2950 */
+    0x0000,     /* R2951 */
+    0x0000,     /* R2952 */
+    0x0000,     /* R2953 */
+    0x0000,     /* R2954 */
+    0x0000,     /* R2955 */
+    0x0000,     /* R2956 */
+    0x0000,     /* R2957 */
+    0x0000,     /* R2958 */
+    0x0000,     /* R2959 */
+    0x0000,     /* R2960 */
+    0x0000,     /* R2961 */
+    0x0000,     /* R2962 */
+    0x0000,     /* R2963 */
+    0x0000,     /* R2964 */
+    0x0000,     /* R2965 */
+    0x0000,     /* R2966 */
+    0x0000,     /* R2967 */
+    0x0000,     /* R2968 */
+    0x0000,     /* R2969 */
+    0x0000,     /* R2970 */
+    0x0000,     /* R2971 */
+    0x0000,     /* R2972 */
+    0x0000,     /* R2973 */
+    0x0000,     /* R2974 */
+    0x0000,     /* R2975 */
+    0x0000,     /* R2976 */
+    0x0000,     /* R2977 */
+    0x0000,     /* R2978 */
+    0x0000,     /* R2979 */
+    0x0000,     /* R2980 */
+    0x0000,     /* R2981 */
+    0x0000,     /* R2982 */
+    0x0000,     /* R2983 */
+    0x0000,     /* R2984 */
+    0x0000,     /* R2985 */
+    0x0000,     /* R2986 */
+    0x0000,     /* R2987 */
+    0x0000,     /* R2988 */
+    0x0000,     /* R2989 */
+    0x0000,     /* R2990 */
+    0x0000,     /* R2991 */
+    0x0000,     /* R2992 */
+    0x0000,     /* R2993 */
+    0x0000,     /* R2994 */
+    0x0000,     /* R2995 */
+    0x0000,     /* R2996 */
+    0x0000,     /* R2997 */
+    0x0000,     /* R2998 */
+    0x0000,     /* R2999 */
+    0x0000,     /* R3000 */
+    0x0000,     /* R3001 */
+    0x0000,     /* R3002 */
+    0x0000,     /* R3003 */
+    0x0000,     /* R3004 */
+    0x0000,     /* R3005 */
+    0x0000,     /* R3006 */
+    0x0000,     /* R3007 */
+    0x0000,     /* R3008 */
+    0x0000,     /* R3009 */
+    0x0000,     /* R3010 */
+    0x0000,     /* R3011 */
+    0x0000,     /* R3012 */
+    0x0000,     /* R3013 */
+    0x0000,     /* R3014 */
+    0x0000,     /* R3015 */
+    0x0000,     /* R3016 */
+    0x0000,     /* R3017 */
+    0x0000,     /* R3018 */
+    0x0000,     /* R3019 */
+    0x0000,     /* R3020 */
+    0x0000,     /* R3021 */
+    0x0000,     /* R3022 */
+    0x0000,     /* R3023 */
+    0x0000,     /* R3024 */
+    0x0000,     /* R3025 */
+    0x0000,     /* R3026 */
+    0x0000,     /* R3027 */
+    0x0000,     /* R3028 */
+    0x0000,     /* R3029 */
+    0x0000,     /* R3030 */
+    0x0000,     /* R3031 */
+    0x0000,     /* R3032 */
+    0x0000,     /* R3033 */
+    0x0000,     /* R3034 */
+    0x0000,     /* R3035 */
+    0x0000,     /* R3036 */
+    0x0000,     /* R3037 */
+    0x0000,     /* R3038 */
+    0x0000,     /* R3039 */
+    0x0000,     /* R3040 */
+    0x0000,     /* R3041 */
+    0x0000,     /* R3042 */
+    0x0000,     /* R3043 */
+    0x0000,     /* R3044 */
+    0x0000,     /* R3045 */
+    0x0000,     /* R3046 */
+    0x0000,     /* R3047 */
+    0x0000,     /* R3048 */
+    0x0000,     /* R3049 */
+    0x0000,     /* R3050 */
+    0x0000,     /* R3051 */
+    0x0000,     /* R3052 */
+    0x0000,     /* R3053 */
+    0x0000,     /* R3054 */
+    0x0000,     /* R3055 */
+    0x0000,     /* R3056 */
+    0x0000,     /* R3057 */
+    0x0000,     /* R3058 */
+    0x0000,     /* R3059 */
+    0x0000,     /* R3060 */
+    0x0000,     /* R3061 */
+    0x0000,     /* R3062 */
+    0x0000,     /* R3063 */
+    0x0000,     /* R3064 */
+    0x0000,     /* R3065 */
+    0x0000,     /* R3066 */
+    0x0000,     /* R3067 */
+    0x0000,     /* R3068 */
+    0x0000,     /* R3069 */
+    0x0000,     /* R3070 */
+    0x0000,     /* R3071 */
+    0x0000,     /* R3072 */
+    0x0000,     /* R3073 */
+    0x0000,     /* R3074 */
+    0x0000,     /* R3075 */
+    0x0000,     /* R3076 */
+    0x0000,     /* R3077 */
+    0x0000,     /* R3078 */
+    0x0000,     /* R3079 */
+    0x0000,     /* R3080 */
+    0x0000,     /* R3081 */
+    0x0000,     /* R3082 */
+    0x0000,     /* R3083 */
+    0x0000,     /* R3084 */
+    0x0000,     /* R3085 */
+    0x0000,     /* R3086 */
+    0x0000,     /* R3087 */
+    0x0000,     /* R3088 */
+    0x0000,     /* R3089 */
+    0x0000,     /* R3090 */
+    0x0000,     /* R3091 */
+    0x0000,     /* R3092 */
+    0x0000,     /* R3093 */
+    0x0000,     /* R3094 */
+    0x0000,     /* R3095 */
+    0x0000,     /* R3096 */
+    0x0000,     /* R3097 */
+    0x0000,     /* R3098 */
+    0x0000,     /* R3099 */
+    0x0000,     /* R3100 */
+    0x0000,     /* R3101 */
+    0x0000,     /* R3102 */
+    0x0000,     /* R3103 */
+    0x0000,     /* R3104 */
+    0x0000,     /* R3105 */
+    0x0000,     /* R3106 */
+    0x0000,     /* R3107 */
+    0x0000,     /* R3108 */
+    0x0000,     /* R3109 */
+    0x0000,     /* R3110 */
+    0x0000,     /* R3111 */
+    0x0000,     /* R3112 */
+    0x0000,     /* R3113 */
+    0x0000,     /* R3114 */
+    0x0000,     /* R3115 */
+    0x0000,     /* R3116 */
+    0x0000,     /* R3117 */
+    0x0000,     /* R3118 */
+    0x0000,     /* R3119 */
+    0x0000,     /* R3120 */
+    0x0000,     /* R3121 */
+    0x0000,     /* R3122 */
+    0x0000,     /* R3123 */
+    0x0000,     /* R3124 */
+    0x0000,     /* R3125 */
+    0x0000,     /* R3126 */
+    0x0000,     /* R3127 */
+    0x0000,     /* R3128 */
+    0x0000,     /* R3129 */
+    0x0000,     /* R3130 */
+    0x0000,     /* R3131 */
+    0x0000,     /* R3132 */
+    0x0000,     /* R3133 */
+    0x0000,     /* R3134 */
+    0x0000,     /* R3135 */
+    0x0000,     /* R3136 */
+    0x0000,     /* R3137 */
+    0x0000,     /* R3138 */
+    0x0000,     /* R3139 */
+    0x0000,     /* R3140 */
+    0x0000,     /* R3141 */
+    0x0000,     /* R3142 */
+    0x0000,     /* R3143 */
+    0x0000,     /* R3144 */
+    0x0000,     /* R3145 */
+    0x0000,     /* R3146 */
+    0x0000,     /* R3147 */
+    0x0000,     /* R3148 */
+    0x0000,     /* R3149 */
+    0x0000,     /* R3150 */
+    0x0000,     /* R3151 */
+    0x0000,     /* R3152 */
+    0x0000,     /* R3153 */
+    0x0000,     /* R3154 */
+    0x0000,     /* R3155 */
+    0x0000,     /* R3156 */
+    0x0000,     /* R3157 */
+    0x0000,     /* R3158 */
+    0x0000,     /* R3159 */
+    0x0000,     /* R3160 */
+    0x0000,     /* R3161 */
+    0x0000,     /* R3162 */
+    0x0000,     /* R3163 */
+    0x0000,     /* R3164 */
+    0x0000,     /* R3165 */
+    0x0000,     /* R3166 */
+    0x0000,     /* R3167 */
+    0x0000,     /* R3168 */
+    0x0000,     /* R3169 */
+    0x0000,     /* R3170 */
+    0x0000,     /* R3171 */
+    0x0000,     /* R3172 */
+    0x0000,     /* R3173 */
+    0x0000,     /* R3174 */
+    0x0000,     /* R3175 */
+    0x0000,     /* R3176 */
+    0x0000,     /* R3177 */
+    0x0000,     /* R3178 */
+    0x0000,     /* R3179 */
+    0x0000,     /* R3180 */
+    0x0000,     /* R3181 */
+    0x0000,     /* R3182 */
+    0x0000,     /* R3183 */
+    0x0000,     /* R3184 */
+    0x0000,     /* R3185 */
+    0x0000,     /* R3186 */
+    0x0000,     /* R3187 */
+    0x0000,     /* R3188 */
+    0x0000,     /* R3189 */
+    0x0000,     /* R3190 */
+    0x0000,     /* R3191 */
+    0x0000,     /* R3192 */
+    0x0000,     /* R3193 */
+    0x0000,     /* R3194 */
+    0x0000,     /* R3195 */
+    0x0000,     /* R3196 */
+    0x0000,     /* R3197 */
+    0x0000,     /* R3198 */
+    0x0000,     /* R3199 */
+    0x0000,     /* R3200 */
+    0x0000,     /* R3201 */
+    0x0000,     /* R3202 */
+    0x0000,     /* R3203 */
+    0x0000,     /* R3204 */
+    0x0000,     /* R3205 */
+    0x0000,     /* R3206 */
+    0x0000,     /* R3207 */
+    0x0000,     /* R3208 */
+    0x0000,     /* R3209 */
+    0x0000,     /* R3210 */
+    0x0000,     /* R3211 */
+    0x0000,     /* R3212 */
+    0x0000,     /* R3213 */
+    0x0000,     /* R3214 */
+    0x0000,     /* R3215 */
+    0x0000,     /* R3216 */
+    0x0000,     /* R3217 */
+    0x0000,     /* R3218 */
+    0x0000,     /* R3219 */
+    0x0000,     /* R3220 */
+    0x0000,     /* R3221 */
+    0x0000,     /* R3222 */
+    0x0000,     /* R3223 */
+    0x0000,     /* R3224 */
+    0x0000,     /* R3225 */
+    0x0000,     /* R3226 */
+    0x0000,     /* R3227 */
+    0x0000,     /* R3228 */
+    0x0000,     /* R3229 */
+    0x0000,     /* R3230 */
+    0x0000,     /* R3231 */
+    0x0000,     /* R3232 */
+    0x0000,     /* R3233 */
+    0x0000,     /* R3234 */
+    0x0000,     /* R3235 */
+    0x0000,     /* R3236 */
+    0x0000,     /* R3237 */
+    0x0000,     /* R3238 */
+    0x0000,     /* R3239 */
+    0x0000,     /* R3240 */
+    0x0000,     /* R3241 */
+    0x0000,     /* R3242 */
+    0x0000,     /* R3243 */
+    0x0000,     /* R3244 */
+    0x0000,     /* R3245 */
+    0x0000,     /* R3246 */
+    0x0000,     /* R3247 */
+    0x0000,     /* R3248 */
+    0x0000,     /* R3249 */
+    0x0000,     /* R3250 */
+    0x0000,     /* R3251 */
+    0x0000,     /* R3252 */
+    0x0000,     /* R3253 */
+    0x0000,     /* R3254 */
+    0x0000,     /* R3255 */
+    0x0000,     /* R3256 */
+    0x0000,     /* R3257 */
+    0x0000,     /* R3258 */
+    0x0000,     /* R3259 */
+    0x0000,     /* R3260 */
+    0x0000,     /* R3261 */
+    0x0000,     /* R3262 */
+    0x0000,     /* R3263 */
+    0x0000,     /* R3264 */
+    0x0000,     /* R3265 */
+    0x0000,     /* R3266 */
+    0x0000,     /* R3267 */
+    0x0000,     /* R3268 */
+    0x0000,     /* R3269 */
+    0x0000,     /* R3270 */
+    0x0000,     /* R3271 */
+    0x0000,     /* R3272 */
+    0x0000,     /* R3273 */
+    0x0000,     /* R3274 */
+    0x0000,     /* R3275 */
+    0x0000,     /* R3276 */
+    0x0000,     /* R3277 */
+    0x0000,     /* R3278 */
+    0x0000,     /* R3279 */
+    0x0000,     /* R3280 */
+    0x0000,     /* R3281 */
+    0x0000,     /* R3282 */
+    0x0000,     /* R3283 */
+    0x0000,     /* R3284 */
+    0x0000,     /* R3285 */
+    0x0000,     /* R3286 */
+    0x0000,     /* R3287 */
+    0x0000,     /* R3288 */
+    0x0000,     /* R3289 */
+    0x0000,     /* R3290 */
+    0x0000,     /* R3291 */
+    0x0000,     /* R3292 */
+    0x0000,     /* R3293 */
+    0x0000,     /* R3294 */
+    0x0000,     /* R3295 */
+    0x0000,     /* R3296 */
+    0x0000,     /* R3297 */
+    0x0000,     /* R3298 */
+    0x0000,     /* R3299 */
+    0x0000,     /* R3300 */
+    0x0000,     /* R3301 */
+    0x0000,     /* R3302 */
+    0x0000,     /* R3303 */
+    0x0000,     /* R3304 */
+    0x0000,     /* R3305 */
+    0x0000,     /* R3306 */
+    0x0000,     /* R3307 */
+    0x0000,     /* R3308 */
+    0x0000,     /* R3309 */
+    0x0000,     /* R3310 */
+    0x0000,     /* R3311 */
+    0x0000,     /* R3312 */
+    0x0000,     /* R3313 */
+    0x0000,     /* R3314 */
+    0x0000,     /* R3315 */
+    0x0000,     /* R3316 */
+    0x0000,     /* R3317 */
+    0x0000,     /* R3318 */
+    0x0000,     /* R3319 */
+    0x0000,     /* R3320 */
+    0x0000,     /* R3321 */
+    0x0000,     /* R3322 */
+    0x0000,     /* R3323 */
+    0x0000,     /* R3324 */
+    0x0000,     /* R3325 */
+    0x0000,     /* R3326 */
+    0x0000,     /* R3327 */
+    0x0000,     /* R3328 */
+    0x0000,     /* R3329 */
+    0x0000,     /* R3330 */
+    0x0000,     /* R3331 */
+    0x0000,     /* R3332 */
+    0x0000,     /* R3333 */
+    0x0000,     /* R3334 */
+    0x0000,     /* R3335 */
+    0x0000,     /* R3336 */
+    0x0000,     /* R3337 */
+    0x0000,     /* R3338 */
+    0x0000,     /* R3339 */
+    0x0000,     /* R3340 */
+    0x0000,     /* R3341 */
+    0x0000,     /* R3342 */
+    0x0000,     /* R3343 */
+    0x0000,     /* R3344 */
+    0x0000,     /* R3345 */
+    0x0000,     /* R3346 */
+    0x0000,     /* R3347 */
+    0x0000,     /* R3348 */
+    0x0000,     /* R3349 */
+    0x0000,     /* R3350 */
+    0x0000,     /* R3351 */
+    0x0000,     /* R3352 */
+    0x0000,     /* R3353 */
+    0x0000,     /* R3354 */
+    0x0000,     /* R3355 */
+    0x0000,     /* R3356 */
+    0x0000,     /* R3357 */
+    0x0000,     /* R3358 */
+    0x0000,     /* R3359 */
+    0x0000,     /* R3360 */
+    0x0000,     /* R3361 */
+    0x0000,     /* R3362 */
+    0x0000,     /* R3363 */
+    0x0000,     /* R3364 */
+    0x0000,     /* R3365 */
+    0x0000,     /* R3366 */
+    0x0000,     /* R3367 */
+    0x0000,     /* R3368 */
+    0x0000,     /* R3369 */
+    0x0000,     /* R3370 */
+    0x0000,     /* R3371 */
+    0x0000,     /* R3372 */
+    0x0000,     /* R3373 */
+    0x0000,     /* R3374 */
+    0x0000,     /* R3375 */
+    0x0000,     /* R3376 */
+    0x0000,     /* R3377 */
+    0x0000,     /* R3378 */
+    0x0000,     /* R3379 */
+    0x0000,     /* R3380 */
+    0x0000,     /* R3381 */
+    0x0000,     /* R3382 */
+    0x0000,     /* R3383 */
+    0x0000,     /* R3384 */
+    0x0000,     /* R3385 */
+    0x0000,     /* R3386 */
+    0x0000,     /* R3387 */
+    0x0000,     /* R3388 */
+    0x0000,     /* R3389 */
+    0x0000,     /* R3390 */
+    0x0000,     /* R3391 */
+    0x0000,     /* R3392 */
+    0x0000,     /* R3393 */
+    0x0000,     /* R3394 */
+    0x0000,     /* R3395 */
+    0x0000,     /* R3396 */
+    0x0000,     /* R3397 */
+    0x0000,     /* R3398 */
+    0x0000,     /* R3399 */
+    0x0000,     /* R3400 */
+    0x0000,     /* R3401 */
+    0x0000,     /* R3402 */
+    0x0000,     /* R3403 */
+    0x0000,     /* R3404 */
+    0x0000,     /* R3405 */
+    0x0000,     /* R3406 */
+    0x0000,     /* R3407 */
+    0x0000,     /* R3408 */
+    0x0000,     /* R3409 */
+    0x0000,     /* R3410 */
+    0x0000,     /* R3411 */
+    0x0000,     /* R3412 */
+    0x0000,     /* R3413 */
+    0x0000,     /* R3414 */
+    0x0000,     /* R3415 */
+    0x0000,     /* R3416 */
+    0x0000,     /* R3417 */
+    0x0000,     /* R3418 */
+    0x0000,     /* R3419 */
+    0x0000,     /* R3420 */
+    0x0000,     /* R3421 */
+    0x0000,     /* R3422 */
+    0x0000,     /* R3423 */
+    0x0000,     /* R3424 */
+    0x0000,     /* R3425 */
+    0x0000,     /* R3426 */
+    0x0000,     /* R3427 */
+    0x0000,     /* R3428 */
+    0x0000,     /* R3429 */
+    0x0000,     /* R3430 */
+    0x0000,     /* R3431 */
+    0x0000,     /* R3432 */
+    0x0000,     /* R3433 */
+    0x0000,     /* R3434 */
+    0x0000,     /* R3435 */
+    0x0000,     /* R3436 */
+    0x0000,     /* R3437 */
+    0x0000,     /* R3438 */
+    0x0000,     /* R3439 */
+    0x0000,     /* R3440 */
+    0x0000,     /* R3441 */
+    0x0000,     /* R3442 */
+    0x0000,     /* R3443 */
+    0x0000,     /* R3444 */
+    0x0000,     /* R3445 */
+    0x0000,     /* R3446 */
+    0x0000,     /* R3447 */
+    0x0000,     /* R3448 */
+    0x0000,     /* R3449 */
+    0x0000,     /* R3450 */
+    0x0000,     /* R3451 */
+    0x0000,     /* R3452 */
+    0x0000,     /* R3453 */
+    0x0000,     /* R3454 */
+    0x0000,     /* R3455 */
+    0x0000,     /* R3456 */
+    0x0000,     /* R3457 */
+    0x0000,     /* R3458 */
+    0x0000,     /* R3459 */
+    0x0000,     /* R3460 */
+    0x0000,     /* R3461 */
+    0x0000,     /* R3462 */
+    0x0000,     /* R3463 */
+    0x0000,     /* R3464 */
+    0x0000,     /* R3465 */
+    0x0000,     /* R3466 */
+    0x0000,     /* R3467 */
+    0x0000,     /* R3468 */
+    0x0000,     /* R3469 */
+    0x0000,     /* R3470 */
+    0x0000,     /* R3471 */
+    0x0000,     /* R3472 */
+    0x0000,     /* R3473 */
+    0x0000,     /* R3474 */
+    0x0000,     /* R3475 */
+    0x0000,     /* R3476 */
+    0x0000,     /* R3477 */
+    0x0000,     /* R3478 */
+    0x0000,     /* R3479 */
+    0x0000,     /* R3480 */
+    0x0000,     /* R3481 */
+    0x0000,     /* R3482 */
+    0x0000,     /* R3483 */
+    0x0000,     /* R3484 */
+    0x0000,     /* R3485 */
+    0x0000,     /* R3486 */
+    0x0000,     /* R3487 */
+    0x0000,     /* R3488 */
+    0x0000,     /* R3489 */
+    0x0000,     /* R3490 */
+    0x0000,     /* R3491 */
+    0x0000,     /* R3492 */
+    0x0000,     /* R3493 */
+    0x0000,     /* R3494 */
+    0x0000,     /* R3495 */
+    0x0000,     /* R3496 */
+    0x0000,     /* R3497 */
+    0x0000,     /* R3498 */
+    0x0000,     /* R3499 */
+    0x0000,     /* R3500 */
+    0x0000,     /* R3501 */
+    0x0000,     /* R3502 */
+    0x0000,     /* R3503 */
+    0x0000,     /* R3504 */
+    0x0000,     /* R3505 */
+    0x0000,     /* R3506 */
+    0x0000,     /* R3507 */
+    0x0000,     /* R3508 */
+    0x0000,     /* R3509 */
+    0x0000,     /* R3510 */
+    0x0000,     /* R3511 */
+    0x0000,     /* R3512 */
+    0x0000,     /* R3513 */
+    0x0000,     /* R3514 */
+    0x0000,     /* R3515 */
+    0x0000,     /* R3516 */
+    0x0000,     /* R3517 */
+    0x0000,     /* R3518 */
+    0x0000,     /* R3519 */
+    0x0000,     /* R3520 */
+    0x0000,     /* R3521 */
+    0x0000,     /* R3522 */
+    0x0000,     /* R3523 */
+    0x0000,     /* R3524 */
+    0x0000,     /* R3525 */
+    0x0000,     /* R3526 */
+    0x0000,     /* R3527 */
+    0x0000,     /* R3528 */
+    0x0000,     /* R3529 */
+    0x0000,     /* R3530 */
+    0x0000,     /* R3531 */
+    0x0000,     /* R3532 */
+    0x0000,     /* R3533 */
+    0x0000,     /* R3534 */
+    0x0000,     /* R3535 */
+    0x0000,     /* R3536 */
+    0x0000,     /* R3537 */
+    0x0000,     /* R3538 */
+    0x0000,     /* R3539 */
+    0x0000,     /* R3540 */
+    0x0000,     /* R3541 */
+    0x0000,     /* R3542 */
+    0x0000,     /* R3543 */
+    0x0000,     /* R3544 */
+    0x0000,     /* R3545 */
+    0x0000,     /* R3546 */
+    0x0000,     /* R3547 */
+    0x0000,     /* R3548 */
+    0x0000,     /* R3549 */
+    0x0000,     /* R3550 */
+    0x0000,     /* R3551 */
+    0x0000,     /* R3552 */
+    0x0000,     /* R3553 */
+    0x0000,     /* R3554 */
+    0x0000,     /* R3555 */
+    0x0000,     /* R3556 */
+    0x0000,     /* R3557 */
+    0x0000,     /* R3558 */
+    0x0000,     /* R3559 */
+    0x0000,     /* R3560 */
+    0x0000,     /* R3561 */
+    0x0000,     /* R3562 */
+    0x0000,     /* R3563 */
+    0x0000,     /* R3564 */
+    0x0000,     /* R3565 */
+    0x0000,     /* R3566 */
+    0x0000,     /* R3567 */
+    0x0000,     /* R3568 */
+    0x0000,     /* R3569 */
+    0x0000,     /* R3570 */
+    0x0000,     /* R3571 */
+    0x0000,     /* R3572 */
+    0x0000,     /* R3573 */
+    0x0000,     /* R3574 */
+    0x0000,     /* R3575 */
+    0x0000,     /* R3576 */
+    0x0000,     /* R3577 */
+    0x0000,     /* R3578 */
+    0x0000,     /* R3579 */
+    0x0000,     /* R3580 */
+    0x0000,     /* R3581 */
+    0x0000,     /* R3582 */
+    0x0000,     /* R3583 */
+    0x0000,     /* R3584 */
+    0x0000,     /* R3585 */
+    0x0000,     /* R3586 */
+    0x0000,     /* R3587 */
+    0x0000,     /* R3588 */
+    0x0000,     /* R3589 */
+    0x0000,     /* R3590 */
+    0x0000,     /* R3591 */
+    0x0000,     /* R3592 */
+    0x0000,     /* R3593 */
+    0x0000,     /* R3594 */
+    0x0000,     /* R3595 */
+    0x0000,     /* R3596 */
+    0x0000,     /* R3597 */
+    0x0000,     /* R3598 */
+    0x0000,     /* R3599 */
+    0x0000,     /* R3600 */
+    0x0000,     /* R3601 */
+    0x0000,     /* R3602 */
+    0x0000,     /* R3603 */
+    0x0000,     /* R3604 */
+    0x0000,     /* R3605 */
+    0x0000,     /* R3606 */
+    0x0000,     /* R3607 */
+    0x0000,     /* R3608 */
+    0x0000,     /* R3609 */
+    0x0000,     /* R3610 */
+    0x0000,     /* R3611 */
+    0x0000,     /* R3612 */
+    0x0000,     /* R3613 */
+    0x0000,     /* R3614 */
+    0x0000,     /* R3615 */
+    0x0000,     /* R3616 */
+    0x0000,     /* R3617 */
+    0x0000,     /* R3618 */
+    0x0000,     /* R3619 */
+    0x0000,     /* R3620 */
+    0x0000,     /* R3621 */
+    0x0000,     /* R3622 */
+    0x0000,     /* R3623 */
+    0x0000,     /* R3624 */
+    0x0000,     /* R3625 */
+    0x0000,     /* R3626 */
+    0x0000,     /* R3627 */
+    0x0000,     /* R3628 */
+    0x0000,     /* R3629 */
+    0x0000,     /* R3630 */
+    0x0000,     /* R3631 */
+    0x0000,     /* R3632 */
+    0x0000,     /* R3633 */
+    0x0000,     /* R3634 */
+    0x0000,     /* R3635 */
+    0x0000,     /* R3636 */
+    0x0000,     /* R3637 */
+    0x0000,     /* R3638 */
+    0x0000,     /* R3639 */
+    0x0000,     /* R3640 */
+    0x0000,     /* R3641 */
+    0x0000,     /* R3642 */
+    0x0000,     /* R3643 */
+    0x0000,     /* R3644 */
+    0x0000,     /* R3645 */
+    0x0000,     /* R3646 */
+    0x0000,     /* R3647 */
+    0x0000,     /* R3648 */
+    0x0000,     /* R3649 */
+    0x0000,     /* R3650 */
+    0x0000,     /* R3651 */
+    0x0000,     /* R3652 */
+    0x0000,     /* R3653 */
+    0x0000,     /* R3654 */
+    0x0000,     /* R3655 */
+    0x0000,     /* R3656 */
+    0x0000,     /* R3657 */
+    0x0000,     /* R3658 */
+    0x0000,     /* R3659 */
+    0x0000,     /* R3660 */
+    0x0000,     /* R3661 */
+    0x0000,     /* R3662 */
+    0x0000,     /* R3663 */
+    0x0000,     /* R3664 */
+    0x0000,     /* R3665 */
+    0x0000,     /* R3666 */
+    0x0000,     /* R3667 */
+    0x0000,     /* R3668 */
+    0x0000,     /* R3669 */
+    0x0000,     /* R3670 */
+    0x0000,     /* R3671 */
+    0x0000,     /* R3672 */
+    0x0000,     /* R3673 */
+    0x0000,     /* R3674 */
+    0x0000,     /* R3675 */
+    0x0000,     /* R3676 */
+    0x0000,     /* R3677 */
+    0x0000,     /* R3678 */
+    0x0000,     /* R3679 */
+    0x0000,     /* R3680 */
+    0x0000,     /* R3681 */
+    0x0000,     /* R3682 */
+    0x0000,     /* R3683 */
+    0x0000,     /* R3684 */
+    0x0000,     /* R3685 */
+    0x0000,     /* R3686 */
+    0x0000,     /* R3687 */
+    0x0000,     /* R3688 */
+    0x0000,     /* R3689 */
+    0x0000,     /* R3690 */
+    0x0000,     /* R3691 */
+    0x0000,     /* R3692 */
+    0x0000,     /* R3693 */
+    0x0000,     /* R3694 */
+    0x0000,     /* R3695 */
+    0x0000,     /* R3696 */
+    0x0000,     /* R3697 */
+    0x0000,     /* R3698 */
+    0x0000,     /* R3699 */
+    0x0000,     /* R3700 */
+    0x0000,     /* R3701 */
+    0x0000,     /* R3702 */
+    0x0000,     /* R3703 */
+    0x0000,     /* R3704 */
+    0x0000,     /* R3705 */
+    0x0000,     /* R3706 */
+    0x0000,     /* R3707 */
+    0x0000,     /* R3708 */
+    0x0000,     /* R3709 */
+    0x0000,     /* R3710 */
+    0x0000,     /* R3711 */
+    0x0000,     /* R3712 */
+    0x0000,     /* R3713 */
+    0x0000,     /* R3714 */
+    0x0000,     /* R3715 */
+    0x0000,     /* R3716 */
+    0x0000,     /* R3717 */
+    0x0000,     /* R3718 */
+    0x0000,     /* R3719 */
+    0x0000,     /* R3720 */
+    0x0000,     /* R3721 */
+    0x0000,     /* R3722 */
+    0x0000,     /* R3723 */
+    0x0000,     /* R3724 */
+    0x0000,     /* R3725 */
+    0x0000,     /* R3726 */
+    0x0000,     /* R3727 */
+    0x0000,     /* R3728 */
+    0x0000,     /* R3729 */
+    0x0000,     /* R3730 */
+    0x0000,     /* R3731 */
+    0x0000,     /* R3732 */
+    0x0000,     /* R3733 */
+    0x0000,     /* R3734 */
+    0x0000,     /* R3735 */
+    0x0000,     /* R3736 */
+    0x0000,     /* R3737 */
+    0x0000,     /* R3738 */
+    0x0000,     /* R3739 */
+    0x0000,     /* R3740 */
+    0x0000,     /* R3741 */
+    0x0000,     /* R3742 */
+    0x0000,     /* R3743 */
+    0x0000,     /* R3744 */
+    0x0000,     /* R3745 */
+    0x0000,     /* R3746 */
+    0x0000,     /* R3747 */
+    0x0000,     /* R3748 */
+    0x0000,     /* R3749 */
+    0x0000,     /* R3750 */
+    0x0000,     /* R3751 */
+    0x0000,     /* R3752 */
+    0x0000,     /* R3753 */
+    0x0000,     /* R3754 */
+    0x0000,     /* R3755 */
+    0x0000,     /* R3756 */
+    0x0000,     /* R3757 */
+    0x0000,     /* R3758 */
+    0x0000,     /* R3759 */
+    0x0000,     /* R3760 */
+    0x0000,     /* R3761 */
+    0x0000,     /* R3762 */
+    0x0000,     /* R3763 */
+    0x0000,     /* R3764 */
+    0x0000,     /* R3765 */
+    0x0000,     /* R3766 */
+    0x0000,     /* R3767 */
+    0x0000,     /* R3768 */
+    0x0000,     /* R3769 */
+    0x0000,     /* R3770 */
+    0x0000,     /* R3771 */
+    0x0000,     /* R3772 */
+    0x0000,     /* R3773 */
+    0x0000,     /* R3774 */
+    0x0000,     /* R3775 */
+    0x0000,     /* R3776 */
+    0x0000,     /* R3777 */
+    0x0000,     /* R3778 */
+    0x0000,     /* R3779 */
+    0x0000,     /* R3780 */
+    0x0000,     /* R3781 */
+    0x0000,     /* R3782 */
+    0x0000,     /* R3783 */
+    0x0000,     /* R3784 */
+    0x0000,     /* R3785 */
+    0x0000,     /* R3786 */
+    0x0000,     /* R3787 */
+    0x0000,     /* R3788 */
+    0x0000,     /* R3789 */
+    0x0000,     /* R3790 */
+    0x0000,     /* R3791 */
+    0x0000,     /* R3792 */
+    0x0000,     /* R3793 */
+    0x0000,     /* R3794 */
+    0x0000,     /* R3795 */
+    0x0000,     /* R3796 */
+    0x0000,     /* R3797 */
+    0x0000,     /* R3798 */
+    0x0000,     /* R3799 */
+    0x0000,     /* R3800 */
+    0x0000,     /* R3801 */
+    0x0000,     /* R3802 */
+    0x0000,     /* R3803 */
+    0x0000,     /* R3804 */
+    0x0000,     /* R3805 */
+    0x0000,     /* R3806 */
+    0x0000,     /* R3807 */
+    0x0000,     /* R3808 */
+    0x0000,     /* R3809 */
+    0x0000,     /* R3810 */
+    0x0000,     /* R3811 */
+    0x0000,     /* R3812 */
+    0x0000,     /* R3813 */
+    0x0000,     /* R3814 */
+    0x0000,     /* R3815 */
+    0x0000,     /* R3816 */
+    0x0000,     /* R3817 */
+    0x0000,     /* R3818 */
+    0x0000,     /* R3819 */
+    0x0000,     /* R3820 */
+    0x0000,     /* R3821 */
+    0x0000,     /* R3822 */
+    0x0000,     /* R3823 */
+    0x0000,     /* R3824 */
+    0x0000,     /* R3825 */
+    0x0000,     /* R3826 */
+    0x0000,     /* R3827 */
+    0x0000,     /* R3828 */
+    0x0000,     /* R3829 */
+    0x0000,     /* R3830 */
+    0x0000,     /* R3831 */
+    0x0000,     /* R3832 */
+    0x0000,     /* R3833 */
+    0x0000,     /* R3834 */
+    0x0000,     /* R3835 */
+    0x0000,     /* R3836 */
+    0x0000,     /* R3837 */
+    0x0000,     /* R3838 */
+    0x0000,     /* R3839 */
+    0x0000,     /* R3840 */
+    0x0000,     /* R3841 */
+    0x0000,     /* R3842 */
+    0x0000,     /* R3843 */
+    0x0000,     /* R3844 */
+    0x0000,     /* R3845 */
+    0x0000,     /* R3846 */
+    0x0000,     /* R3847 */
+    0x0000,     /* R3848 */
+    0x0000,     /* R3849 */
+    0x0000,     /* R3850 */
+    0x0000,     /* R3851 */
+    0x0000,     /* R3852 */
+    0x0000,     /* R3853 */
+    0x0000,     /* R3854 */
+    0x0000,     /* R3855 */
+    0x0000,     /* R3856 */
+    0x0000,     /* R3857 */
+    0x0000,     /* R3858 */
+    0x0000,     /* R3859 */
+    0x0000,     /* R3860 */
+    0x0000,     /* R3861 */
+    0x0000,     /* R3862 */
+    0x0000,     /* R3863 */
+    0x0000,     /* R3864 */
+    0x0000,     /* R3865 */
+    0x0000,     /* R3866 */
+    0x0000,     /* R3867 */
+    0x0000,     /* R3868 */
+    0x0000,     /* R3869 */
+    0x0000,     /* R3870 */
+    0x0000,     /* R3871 */
+    0x0000,     /* R3872 */
+    0x0000,     /* R3873 */
+    0x0000,     /* R3874 */
+    0x0000,     /* R3875 */
+    0x0000,     /* R3876 */
+    0x0000,     /* R3877 */
+    0x0000,     /* R3878 */
+    0x0000,     /* R3879 */
+    0x0000,     /* R3880 */
+    0x0000,     /* R3881 */
+    0x0000,     /* R3882 */
+    0x0000,     /* R3883 */
+    0x0000,     /* R3884 */
+    0x0000,     /* R3885 */
+    0x0000,     /* R3886 */
+    0x0000,     /* R3887 */
+    0x0000,     /* R3888 */
+    0x0000,     /* R3889 */
+    0x0000,     /* R3890 */
+    0x0000,     /* R3891 */
+    0x0000,     /* R3892 */
+    0x0000,     /* R3893 */
+    0x0000,     /* R3894 */
+    0x0000,     /* R3895 */
+    0x0000,     /* R3896 */
+    0x0000,     /* R3897 */
+    0x0000,     /* R3898 */
+    0x0000,     /* R3899 */
+    0x0000,     /* R3900 */
+    0x0000,     /* R3901 */
+    0x0000,     /* R3902 */
+    0x0000,     /* R3903 */
+    0x0000,     /* R3904 */
+    0x0000,     /* R3905 */
+    0x0000,     /* R3906 */
+    0x0000,     /* R3907 */
+    0x0000,     /* R3908 */
+    0x0000,     /* R3909 */
+    0x0000,     /* R3910 */
+    0x0000,     /* R3911 */
+    0x0000,     /* R3912 */
+    0x0000,     /* R3913 */
+    0x0000,     /* R3914 */
+    0x0000,     /* R3915 */
+    0x0000,     /* R3916 */
+    0x0000,     /* R3917 */
+    0x0000,     /* R3918 */
+    0x0000,     /* R3919 */
+    0x0000,     /* R3920 */
+    0x0000,     /* R3921 */
+    0x0000,     /* R3922 */
+    0x0000,     /* R3923 */
+    0x0000,     /* R3924 */
+    0x0000,     /* R3925 */
+    0x0000,     /* R3926 */
+    0x0000,     /* R3927 */
+    0x0000,     /* R3928 */
+    0x0000,     /* R3929 */
+    0x0000,     /* R3930 */
+    0x0000,     /* R3931 */
+    0x0000,     /* R3932 */
+    0x0000,     /* R3933 */
+    0x0000,     /* R3934 */
+    0x0000,     /* R3935 */
+    0x0000,     /* R3936 */
+    0x0000,     /* R3937 */
+    0x0000,     /* R3938 */
+    0x0000,     /* R3939 */
+    0x0000,     /* R3940 */
+    0x0000,     /* R3941 */
+    0x0000,     /* R3942 */
+    0x0000,     /* R3943 */
+    0x0000,     /* R3944 */
+    0x0000,     /* R3945 */
+    0x0000,     /* R3946 */
+    0x0000,     /* R3947 */
+    0x0000,     /* R3948 */
+    0x0000,     /* R3949 */
+    0x0000,     /* R3950 */
+    0x0000,     /* R3951 */
+    0x0000,     /* R3952 */
+    0x0000,     /* R3953 */
+    0x0000,     /* R3954 */
+    0x0000,     /* R3955 */
+    0x0000,     /* R3956 */
+    0x0000,     /* R3957 */
+    0x0000,     /* R3958 */
+    0x0000,     /* R3959 */
+    0x0000,     /* R3960 */
+    0x0000,     /* R3961 */
+    0x0000,     /* R3962 */
+    0x0000,     /* R3963 */
+    0x0000,     /* R3964 */
+    0x0000,     /* R3965 */
+    0x0000,     /* R3966 */
+    0x0000,     /* R3967 */
+    0x0000,     /* R3968 */
+    0x0000,     /* R3969 */
+    0x0000,     /* R3970 */
+    0x0000,     /* R3971 */
+    0x0000,     /* R3972 */
+    0x0000,     /* R3973 */
+    0x0000,     /* R3974 */
+    0x0000,     /* R3975 */
+    0x0000,     /* R3976 */
+    0x0000,     /* R3977 */
+    0x0000,     /* R3978 */
+    0x0000,     /* R3979 */
+    0x0000,     /* R3980 */
+    0x0000,     /* R3981 */
+    0x0000,     /* R3982 */
+    0x0000,     /* R3983 */
+    0x0000,     /* R3984 */
+    0x0000,     /* R3985 */
+    0x0000,     /* R3986 */
+    0x0000,     /* R3987 */
+    0x0000,     /* R3988 */
+    0x0000,     /* R3989 */
+    0x0000,     /* R3990 */
+    0x0000,     /* R3991 */
+    0x0000,     /* R3992 */
+    0x0000,     /* R3993 */
+    0x0000,     /* R3994 */
+    0x0000,     /* R3995 */
+    0x0000,     /* R3996 */
+    0x0000,     /* R3997 */
+    0x0000,     /* R3998 */
+    0x0000,     /* R3999 */
+    0x0000,     /* R4000 */
+    0x0000,     /* R4001 */
+    0x0000,     /* R4002 */
+    0x0000,     /* R4003 */
+    0x0000,     /* R4004 */
+    0x0000,     /* R4005 */
+    0x0000,     /* R4006 */
+    0x0000,     /* R4007 */
+    0x0000,     /* R4008 */
+    0x0000,     /* R4009 */
+    0x0000,     /* R4010 */
+    0x0000,     /* R4011 */
+    0x0000,     /* R4012 */
+    0x0000,     /* R4013 */
+    0x0000,     /* R4014 */
+    0x0000,     /* R4015 */
+    0x0000,     /* R4016 */
+    0x0000,     /* R4017 */
+    0x0000,     /* R4018 */
+    0x0000,     /* R4019 */
+    0x0000,     /* R4020 */
+    0x0000,     /* R4021 */
+    0x0000,     /* R4022 */
+    0x0000,     /* R4023 */
+    0x0000,     /* R4024 */
+    0x0000,     /* R4025 */
+    0x0000,     /* R4026 */
+    0x0000,     /* R4027 */
+    0x0000,     /* R4028 */
+    0x0000,     /* R4029 */
+    0x0000,     /* R4030 */
+    0x0000,     /* R4031 */
+    0x0000,     /* R4032 */
+    0x0000,     /* R4033 */
+    0x0000,     /* R4034 */
+    0x0000,     /* R4035 */
+    0x0000,     /* R4036 */
+    0x0000,     /* R4037 */
+    0x0000,     /* R4038 */
+    0x0000,     /* R4039 */
+    0x0000,     /* R4040 */
+    0x0000,     /* R4041 */
+    0x0000,     /* R4042 */
+    0x0000,     /* R4043 */
+    0x0000,     /* R4044 */
+    0x0000,     /* R4045 */
+    0x0000,     /* R4046 */
+    0x0000,     /* R4047 */
+    0x0000,     /* R4048 */
+    0x0000,     /* R4049 */
+    0x0000,     /* R4050 */
+    0x0000,     /* R4051 */
+    0x0000,     /* R4052 */
+    0x0000,     /* R4053 */
+    0x0000,     /* R4054 */
+    0x0000,     /* R4055 */
+    0x0000,     /* R4056 */
+    0x0000,     /* R4057 */
+    0x0000,     /* R4058 */
+    0x0000,     /* R4059 */
+    0x0000,     /* R4060 */
+    0x0000,     /* R4061 */
+    0x0000,     /* R4062 */
+    0x0000,     /* R4063 */
+    0x0000,     /* R4064 */
+    0x0000,     /* R4065 */
+    0x0000,     /* R4066 */
+    0x0000,     /* R4067 */
+    0x0000,     /* R4068 */
+    0x0000,     /* R4069 */
+    0x0000,     /* R4070 */
+    0x0000,     /* R4071 */
+    0x0000,     /* R4072 */
+    0x0000,     /* R4073 */
+    0x0000,     /* R4074 */
+    0x0000,     /* R4075 */
+    0x0000,     /* R4076 */
+    0x0000,     /* R4077 */
+    0x0000,     /* R4078 */
+    0x0000,     /* R4079 */
+    0x0000,     /* R4080 */
+    0x0000,     /* R4081 */
+    0x0000,     /* R4082 */
+    0x0000,     /* R4083 */
+    0x0000,     /* R4084 */
+    0x0000,     /* R4085 */
+    0x0000,     /* R4086 */
+    0x0000,     /* R4087 */
+    0x0000,     /* R4088 */
+    0x0000,     /* R4089 */
+    0x0000,     /* R4090 */
+    0x0000,     /* R4091 */
+    0x0000,     /* R4092 */
+    0x0000,     /* R4093 */
+    0x0000,     /* R4094 */
+    0x0000,     /* R4095 */
+    0x001C,     /* R4096  - Write Sequencer 0 */
+    0x0003,     /* R4097  - Write Sequencer 1 */
+    0x0103,     /* R4098  - Write Sequencer 2 */
+    0x0000,     /* R4099  - Write Sequencer 3 */
+    0x0019,     /* R4100  - Write Sequencer 4 */
+    0x0007,     /* R4101  - Write Sequencer 5 */
+    0x0206,     /* R4102  - Write Sequencer 6 */
+    0x0000,     /* R4103  - Write Sequencer 7 */
+    0x0048,     /* R4104  - Write Sequencer 8 */
+    0x0001,     /* R4105  - Write Sequencer 9 */
+    0x0000,     /* R4106  - Write Sequencer 10 */
+    0x0006,     /* R4107  - Write Sequencer 11 */
+    0x001A,     /* R4108  - Write Sequencer 12 */
+    0x000F,     /* R4109  - Write Sequencer 13 */
+    0x0305,     /* R4110  - Write Sequencer 14 */
+    0x0000,     /* R4111  - Write Sequencer 15 */
+    0x0045,     /* R4112  - Write Sequencer 16 */
+    0x0011,     /* R4113  - Write Sequencer 17 */
+    0x0400,     /* R4114  - Write Sequencer 18 */
+    0x0000,     /* R4115  - Write Sequencer 19 */
+    0x0045,     /* R4116  - Write Sequencer 20 */
+    0x0019,     /* R4117  - Write Sequencer 21 */
+    0x0401,     /* R4118  - Write Sequencer 22 */
+    0x0000,     /* R4119  - Write Sequencer 23 */
+    0x0002,     /* R4120  - Write Sequencer 24 */
+    0x0030,     /* R4121  - Write Sequencer 25 */
+    0x0600,     /* R4122  - Write Sequencer 26 */
+    0x0000,     /* R4123  - Write Sequencer 27 */
+    0x0003,     /* R4124  - Write Sequencer 28 */
+    0x0030,     /* R4125  - Write Sequencer 29 */
+    0x0600,     /* R4126  - Write Sequencer 30 */
+    0x0000,     /* R4127  - Write Sequencer 31 */
+    0x0003,     /* R4128  - Write Sequencer 32 */
+    0x0001,     /* R4129  - Write Sequencer 33 */
+    0x0008,     /* R4130  - Write Sequencer 34 */
+    0x0000,     /* R4131  - Write Sequencer 35 */
+    0x003D,     /* R4132  - Write Sequencer 36 */
+    0x0033,     /* R4133  - Write Sequencer 37 */
+    0x0502,     /* R4134  - Write Sequencer 38 */
+    0x000A,     /* R4135  - Write Sequencer 39 */
+    0x00FE,     /* R4136  - Write Sequencer 40 */
+    0x0000,     /* R4137  - Write Sequencer 41 */
+    0x0000,     /* R4138  - Write Sequencer 42 */
+    0x0000,     /* R4139  - Write Sequencer 43 */
+    0x0007,     /* R4140  - Write Sequencer 44 */
+    0x0000,     /* R4141  - Write Sequencer 45 */
+    0x0102,     /* R4142  - Write Sequencer 46 */
+    0x0000,     /* R4143  - Write Sequencer 47 */
+    0x0045,     /* R4144  - Write Sequencer 48 */
+    0x001D,     /* R4145  - Write Sequencer 49 */
+    0x0402,     /* R4146  - Write Sequencer 50 */
+    0x0000,     /* R4147  - Write Sequencer 51 */
+    0x0045,     /* R4148  - Write Sequencer 52 */
+    0x001F,     /* R4149  - Write Sequencer 53 */
+    0x0403,     /* R4150  - Write Sequencer 54 */
+    0x0000,     /* R4151  - Write Sequencer 55 */
+    0x00FE,     /* R4152  - Write Sequencer 56 */
+    0x0000,     /* R4153  - Write Sequencer 57 */
+    0x0000,     /* R4154  - Write Sequencer 58 */
+    0x0000,     /* R4155  - Write Sequencer 59 */
+    0x0005,     /* R4156  - Write Sequencer 60 */
+    0x0000,     /* R4157  - Write Sequencer 61 */
+    0x0003,     /* R4158  - Write Sequencer 62 */
+    0x0107,     /* R4159  - Write Sequencer 63 */
+    0x00FE,     /* R4160  - Write Sequencer 64 */
+    0x0000,     /* R4161  - Write Sequencer 65 */
+    0x0000,     /* R4162  - Write Sequencer 66 */
+    0x0000,     /* R4163  - Write Sequencer 67 */
+    0x00FE,     /* R4164  - Write Sequencer 68 */
+    0x0000,     /* R4165  - Write Sequencer 69 */
+    0x0000,     /* R4166  - Write Sequencer 70 */
+    0x0000,     /* R4167  - Write Sequencer 71 */
+    0x0020,     /* R4168  - Write Sequencer 72 */
+    0x0007,     /* R4169  - Write Sequencer 73 */
+    0x0203,     /* R4170  - Write Sequencer 74 */
+    0x0000,     /* R4171  - Write Sequencer 75 */
+    0x0021,     /* R4172  - Write Sequencer 76 */
+    0x0007,     /* R4173  - Write Sequencer 77 */
+    0x0203,     /* R4174  - Write Sequencer 78 */
+    0x0000,     /* R4175  - Write Sequencer 79 */
+    0x0019,     /* R4176  - Write Sequencer 80 */
+    0x0019,     /* R4177  - Write Sequencer 81 */
+    0x0401,     /* R4178  - Write Sequencer 82 */
+    0x0000,     /* R4179  - Write Sequencer 83 */
+    0x003C,     /* R4180  - Write Sequencer 84 */
+    0x0033,     /* R4181  - Write Sequencer 85 */
+    0x0502,     /* R4182  - Write Sequencer 86 */
+    0x000A,     /* R4183  - Write Sequencer 87 */
+    0x00FE,     /* R4184  - Write Sequencer 88 */
+    0x0000,     /* R4185  - Write Sequencer 89 */
+    0x0000,     /* R4186  - Write Sequencer 90 */
+    0x0000,     /* R4187  - Write Sequencer 91 */
+    0x0019,     /* R4188  - Write Sequencer 92 */
+    0x0003,     /* R4189  - Write Sequencer 93 */
+    0x0102,     /* R4190  - Write Sequencer 94 */
+    0x0000,     /* R4191  - Write Sequencer 95 */
+    0x0020,     /* R4192  - Write Sequencer 96 */
+    0x0000,     /* R4193  - Write Sequencer 97 */
+    0x0203,     /* R4194  - Write Sequencer 98 */
+    0x0000,     /* R4195  - Write Sequencer 99 */
+    0x0021,     /* R4196  - Write Sequencer 100 */
+    0x0000,     /* R4197  - Write Sequencer 101 */
+    0x0203,     /* R4198  - Write Sequencer 102 */
+    0x0100,     /* R4199  - Write Sequencer 103 */
+    0x00FE,     /* R4200  - Write Sequencer 104 */
+    0x0000,     /* R4201  - Write Sequencer 105 */
+    0x0000,     /* R4202  - Write Sequencer 106 */
+    0x0000,     /* R4203  - Write Sequencer 107 */
+    0x0005,     /* R4204  - Write Sequencer 108 */
+    0x0001,     /* R4205  - Write Sequencer 109 */
+    0x0003,     /* R4206  - Write Sequencer 110 */
+    0x0008,     /* R4207  - Write Sequencer 111 */
+    0x0000,     /* R4208  - Write Sequencer 112 */
+    0x0001,     /* R4209  - Write Sequencer 113 */
+    0x0007,     /* R4210  - Write Sequencer 114 */
+    0x0000,     /* R4211  - Write Sequencer 115 */
+    0x0001,     /* R4212  - Write Sequencer 116 */
+    0x0003,     /* R4213  - Write Sequencer 117 */
+    0x0107,     /* R4214  - Write Sequencer 118 */
+    0x0000,     /* R4215  - Write Sequencer 119 */
+    0x0045,     /* R4216  - Write Sequencer 120 */
+    0x000E,     /* R4217  - Write Sequencer 121 */
+    0x0403,     /* R4218  - Write Sequencer 122 */
+    0x0000,     /* R4219  - Write Sequencer 123 */
+    0x0060,     /* R4220  - Write Sequencer 124 */
+    0x000E,     /* R4221  - Write Sequencer 125 */
+    0x0403,     /* R4222  - Write Sequencer 126 */
+    0x0000,     /* R4223  - Write Sequencer 127 */
+    0x0002,     /* R4224  - Write Sequencer 128 */
+    0x0000,     /* R4225  - Write Sequencer 129 */
+    0x0600,     /* R4226  - Write Sequencer 130 */
+    0x0000,     /* R4227  - Write Sequencer 131 */
+    0x0003,     /* R4228  - Write Sequencer 132 */
+    0x0000,     /* R4229  - Write Sequencer 133 */
+    0x0600,     /* R4230  - Write Sequencer 134 */
+    0x0000,     /* R4231  - Write Sequencer 135 */
+    0x0003,     /* R4232  - Write Sequencer 136 */
+    0x0001,     /* R4233  - Write Sequencer 137 */
+    0x0008,     /* R4234  - Write Sequencer 138 */
+    0x0000,     /* R4235  - Write Sequencer 139 */
+    0x0028,     /* R4236  - Write Sequencer 140 */
+    0x0000,     /* R4237  - Write Sequencer 141 */
+    0x0600,     /* R4238  - Write Sequencer 142 */
+    0x0000,     /* R4239  - Write Sequencer 143 */
+    0x0029,     /* R4240  - Write Sequencer 144 */
+    0x0000,     /* R4241  - Write Sequencer 145 */
+    0x0600,     /* R4242  - Write Sequencer 146 */
+    0x0000,     /* R4243  - Write Sequencer 147 */
+    0x0029,     /* R4244  - Write Sequencer 148 */
+    0x0001,     /* R4245  - Write Sequencer 149 */
+    0x0008,     /* R4246  - Write Sequencer 150 */
+    0x0000,     /* R4247  - Write Sequencer 151 */
+    0x003C,     /* R4248  - Write Sequencer 152 */
+    0x0000,     /* R4249  - Write Sequencer 153 */
+    0x0403,     /* R4250  - Write Sequencer 154 */
+    0x0000,     /* R4251  - Write Sequencer 155 */
+    0x003D,     /* R4252  - Write Sequencer 156 */
+    0x0000,     /* R4253  - Write Sequencer 157 */
+    0x0403,     /* R4254  - Write Sequencer 158 */
+    0x0000,     /* R4255  - Write Sequencer 159 */
+    0x003E,     /* R4256  - Write Sequencer 160 */
+    0x0000,     /* R4257  - Write Sequencer 161 */
+    0x0403,     /* R4258  - Write Sequencer 162 */
+    0x0000,     /* R4259  - Write Sequencer 163 */
+    0x0045,     /* R4260  - Write Sequencer 164 */
+    0x0000,     /* R4261  - Write Sequencer 165 */
+    0x0700,     /* R4262  - Write Sequencer 166 */
+    0x0000,     /* R4263  - Write Sequencer 167 */
+    0x0060,     /* R4264  - Write Sequencer 168 */
+    0x0000,     /* R4265  - Write Sequencer 169 */
+    0x0700,     /* R4266  - Write Sequencer 170 */
+    0x0000,     /* R4267  - Write Sequencer 171 */
+    0x0031,     /* R4268  - Write Sequencer 172 */
+    0x0000,     /* R4269  - Write Sequencer 173 */
+    0x0106,     /* R4270  - Write Sequencer 174 */
+    0x0000,     /* R4271  - Write Sequencer 175 */
+    0x0063,     /* R4272  - Write Sequencer 176 */
+    0x0000,     /* R4273  - Write Sequencer 177 */
+    0x0300,     /* R4274  - Write Sequencer 178 */
+    0x0000,     /* R4275  - Write Sequencer 179 */
+    0x001A,     /* R4276  - Write Sequencer 180 */
+    0x0000,     /* R4277  - Write Sequencer 181 */
+    0x0503,     /* R4278  - Write Sequencer 182 */
+    0x0000,     /* R4279  - Write Sequencer 183 */
+    0x0048,     /* R4280  - Write Sequencer 184 */
+    0x0000,     /* R4281  - Write Sequencer 185 */
+    0x0000,     /* R4282  - Write Sequencer 186 */
+    0x0000,     /* R4283  - Write Sequencer 187 */
+    0x0019,     /* R4284  - Write Sequencer 188 */
+    0x0000,     /* R4285  - Write Sequencer 189 */
+    0x0501,     /* R4286  - Write Sequencer 190 */
+    0x0000,     /* R4287  - Write Sequencer 191 */
+    0x001C,     /* R4288  - Write Sequencer 192 */
+    0x0000,     /* R4289  - Write Sequencer 193 */
+    0x0103,     /* R4290  - Write Sequencer 194 */
+    0x0000,     /* R4291  - Write Sequencer 195 */
+    0x0019,     /* R4292  - Write Sequencer 196 */
+    0x0000,     /* R4293  - Write Sequencer 197 */
+    0x0107,     /* R4294  - Write Sequencer 198 */
+    0x0100,     /* R4295  - Write Sequencer 199 */
+    0x00FE,     /* R4296  - Write Sequencer 200 */
+    0x0000,     /* R4297  - Write Sequencer 201 */
+    0x0000,     /* R4298  - Write Sequencer 202 */
+    0x0000,     /* R4299  - Write Sequencer 203 */
+    0x00FE,     /* R4300  - Write Sequencer 204 */
+    0x0000,     /* R4301  - Write Sequencer 205 */
+    0x0000,     /* R4302  - Write Sequencer 206 */
+    0x0000,     /* R4303  - Write Sequencer 207 */
+    0x001C,     /* R4304  - Write Sequencer 208 */
+    0x0003,     /* R4305  - Write Sequencer 209 */
+    0x0103,     /* R4306  - Write Sequencer 210 */
+    0x0000,     /* R4307  - Write Sequencer 211 */
+    0x0019,     /* R4308  - Write Sequencer 212 */
+    0x0007,     /* R4309  - Write Sequencer 213 */
+    0x0206,     /* R4310  - Write Sequencer 214 */
+    0x0000,     /* R4311  - Write Sequencer 215 */
+    0x0048,     /* R4312  - Write Sequencer 216 */
+    0x0001,     /* R4313  - Write Sequencer 217 */
+    0x0000,     /* R4314  - Write Sequencer 218 */
+    0x0006,     /* R4315  - Write Sequencer 219 */
+    0x001A,     /* R4316  - Write Sequencer 220 */
+    0x000F,     /* R4317  - Write Sequencer 221 */
+    0x0305,     /* R4318  - Write Sequencer 222 */
+    0x0000,     /* R4319  - Write Sequencer 223 */
+    0x0045,     /* R4320  - Write Sequencer 224 */
+    0x0011,     /* R4321  - Write Sequencer 225 */
+    0x0400,     /* R4322  - Write Sequencer 226 */
+    0x0000,     /* R4323  - Write Sequencer 227 */
+    0x0045,     /* R4324  - Write Sequencer 228 */
+    0x0019,     /* R4325  - Write Sequencer 229 */
+    0x0401,     /* R4326  - Write Sequencer 230 */
+    0x0000,     /* R4327  - Write Sequencer 231 */
+    0x0060,     /* R4328  - Write Sequencer 232 */
+    0x0011,     /* R4329  - Write Sequencer 233 */
+    0x0400,     /* R4330  - Write Sequencer 234 */
+    0x0000,     /* R4331  - Write Sequencer 235 */
+    0x0060,     /* R4332  - Write Sequencer 236 */
+    0x0019,     /* R4333  - Write Sequencer 237 */
+    0x0401,     /* R4334  - Write Sequencer 238 */
+    0x0000,     /* R4335  - Write Sequencer 239 */
+    0x0002,     /* R4336  - Write Sequencer 240 */
+    0x0030,     /* R4337  - Write Sequencer 241 */
+    0x0600,     /* R4338  - Write Sequencer 242 */
+    0x0000,     /* R4339  - Write Sequencer 243 */
+    0x0003,     /* R4340  - Write Sequencer 244 */
+    0x0030,     /* R4341  - Write Sequencer 245 */
+    0x0600,     /* R4342  - Write Sequencer 246 */
+    0x0000,     /* R4343  - Write Sequencer 247 */
+    0x0003,     /* R4344  - Write Sequencer 248 */
+    0x0001,     /* R4345  - Write Sequencer 249 */
+    0x0008,     /* R4346  - Write Sequencer 250 */
+    0x0000,     /* R4347  - Write Sequencer 251 */
+    0x003D,     /* R4348  - Write Sequencer 252 */
+    0x0033,     /* R4349  - Write Sequencer 253 */
+    0x0502,     /* R4350  - Write Sequencer 254 */
+    0x000A,     /* R4351  - Write Sequencer 255 */
+    0x003E,     /* R4352  - Write Sequencer 256 */
+    0x0033,     /* R4353  - Write Sequencer 257 */
+    0x0502,     /* R4354  - Write Sequencer 258 */
+    0x000A,     /* R4355  - Write Sequencer 259 */
+    0x0007,     /* R4356  - Write Sequencer 260 */
+    0x0000,     /* R4357  - Write Sequencer 261 */
+    0x0102,     /* R4358  - Write Sequencer 262 */
+    0x0000,     /* R4359  - Write Sequencer 263 */
+    0x0045,     /* R4360  - Write Sequencer 264 */
+    0x001D,     /* R4361  - Write Sequencer 265 */
+    0x0402,     /* R4362  - Write Sequencer 266 */
+    0x0000,     /* R4363  - Write Sequencer 267 */
+    0x0045,     /* R4364  - Write Sequencer 268 */
+    0x001F,     /* R4365  - Write Sequencer 269 */
+    0x0403,     /* R4366  - Write Sequencer 270 */
+    0x0000,     /* R4367  - Write Sequencer 271 */
+    0x0060,     /* R4368  - Write Sequencer 272 */
+    0x001D,     /* R4369  - Write Sequencer 273 */
+    0x0402,     /* R4370  - Write Sequencer 274 */
+    0x0000,     /* R4371  - Write Sequencer 275 */
+    0x0060,     /* R4372  - Write Sequencer 276 */
+    0x001F,     /* R4373  - Write Sequencer 277 */
+    0x0403,     /* R4374  - Write Sequencer 278 */
+    0x0000,     /* R4375  - Write Sequencer 279 */
+    0x0005,     /* R4376  - Write Sequencer 280 */
+    0x0000,     /* R4377  - Write Sequencer 281 */
+    0x0003,     /* R4378  - Write Sequencer 282 */
+    0x0108,     /* R4379  - Write Sequencer 283 */
+    0x00FE,     /* R4380  - Write Sequencer 284 */
+    0x0000,     /* R4381  - Write Sequencer 285 */
+    0x0000,     /* R4382  - Write Sequencer 286 */
+    0x0000,     /* R4383  - Write Sequencer 287 */
+    0x0045,     /* R4384  - Write Sequencer 288 */
+    0x000E,     /* R4385  - Write Sequencer 289 */
+    0x0403,     /* R4386  - Write Sequencer 290 */
+    0x0000,     /* R4387  - Write Sequencer 291 */
+    0x001A,     /* R4388  - Write Sequencer 292 */
+    0x0003,     /* R4389  - Write Sequencer 293 */
+    0x0100,     /* R4390  - Write Sequencer 294 */
+    0x0000,     /* R4391  - Write Sequencer 295 */
+    0x0002,     /* R4392  - Write Sequencer 296 */
+    0x0001,     /* R4393  - Write Sequencer 297 */
+    0x0008,     /* R4394  - Write Sequencer 298 */
+    0x0000,     /* R4395  - Write Sequencer 299 */
+    0x0045,     /* R4396  - Write Sequencer 300 */
+    0x0000,     /* R4397  - Write Sequencer 301 */
+    0x0700,     /* R4398  - Write Sequencer 302 */
+    0x0000,     /* R4399  - Write Sequencer 303 */
+    0x0060,     /* R4400  - Write Sequencer 304 */
+    0x0011,     /* R4401  - Write Sequencer 305 */
+    0x0400,     /* R4402  - Write Sequencer 306 */
+    0x0000,     /* R4403  - Write Sequencer 307 */
+    0x0060,     /* R4404  - Write Sequencer 308 */
+    0x0019,     /* R4405  - Write Sequencer 309 */
+    0x0401,     /* R4406  - Write Sequencer 310 */
+    0x0000,     /* R4407  - Write Sequencer 311 */
+    0x001A,     /* R4408  - Write Sequencer 312 */
+    0x0000,     /* R4409  - Write Sequencer 313 */
+    0x0100,     /* R4410  - Write Sequencer 314 */
+    0x0000,     /* R4411  - Write Sequencer 315 */
+    0x0002,     /* R4412  - Write Sequencer 316 */
+    0x0001,     /* R4413  - Write Sequencer 317 */
+    0x0008,     /* R4414  - Write Sequencer 318 */
+    0x0000,     /* R4415  - Write Sequencer 319 */
+    0x0060,     /* R4416  - Write Sequencer 320 */
+    0x001D,     /* R4417  - Write Sequencer 321 */
+    0x0402,     /* R4418  - Write Sequencer 322 */
+    0x0000,     /* R4419  - Write Sequencer 323 */
+    0x0060,     /* R4420  - Write Sequencer 324 */
+    0x001F,     /* R4421  - Write Sequencer 325 */
+    0x0403,     /* R4422  - Write Sequencer 326 */
+    0x0000,     /* R4423  - Write Sequencer 327 */
+    0x0005,     /* R4424  - Write Sequencer 328 */
+    0x0000,     /* R4425  - Write Sequencer 329 */
+    0x0003,     /* R4426  - Write Sequencer 330 */
+    0x0100,     /* R4427  - Write Sequencer 331 */
+    0x00FE,     /* R4428  - Write Sequencer 332 */
+    0x0000,     /* R4429  - Write Sequencer 333 */
+    0x0000,     /* R4430  - Write Sequencer 334 */
+    0x0000,     /* R4431  - Write Sequencer 335 */
+    0x0060,     /* R4432  - Write Sequencer 336 */
+    0x000E,     /* R4433  - Write Sequencer 337 */
+    0x0403,     /* R4434  - Write Sequencer 338 */
+    0x0000,     /* R4435  - Write Sequencer 339 */
+    0x001A,     /* R4436  - Write Sequencer 340 */
+    0x0003,     /* R4437  - Write Sequencer 341 */
+    0x0100,     /* R4438  - Write Sequencer 342 */
+    0x0000,     /* R4439  - Write Sequencer 343 */
+    0x0002,     /* R4440  - Write Sequencer 344 */
+    0x0001,     /* R4441  - Write Sequencer 345 */
+    0x0008,     /* R4442  - Write Sequencer 346 */
+    0x0000,     /* R4443  - Write Sequencer 347 */
+    0x0060,     /* R4444  - Write Sequencer 348 */
+    0x0000,     /* R4445  - Write Sequencer 349 */
+    0x0700,     /* R4446  - Write Sequencer 350 */
+    0x0000,     /* R4447  - Write Sequencer 351 */
+    0x0045,     /* R4448  - Write Sequencer 352 */
+    0x0011,     /* R4449  - Write Sequencer 353 */
+    0x0400,     /* R4450  - Write Sequencer 354 */
+    0x0000,     /* R4451  - Write Sequencer 355 */
+    0x0045,     /* R4452  - Write Sequencer 356 */
+    0x0019,     /* R4453  - Write Sequencer 357 */
+    0x0401,     /* R4454  - Write Sequencer 358 */
+    0x0000,     /* R4455  - Write Sequencer 359 */
+    0x001A,     /* R4456  - Write Sequencer 360 */
+    0x0000,     /* R4457  - Write Sequencer 361 */
+    0x0100,     /* R4458  - Write Sequencer 362 */
+    0x0000,     /* R4459  - Write Sequencer 363 */
+    0x0002,     /* R4460  - Write Sequencer 364 */
+    0x0001,     /* R4461  - Write Sequencer 365 */
+    0x0008,     /* R4462  - Write Sequencer 366 */
+    0x0000,     /* R4463  - Write Sequencer 367 */
+    0x0045,     /* R4464  - Write Sequencer 368 */
+    0x001D,     /* R4465  - Write Sequencer 369 */
+    0x0402,     /* R4466  - Write Sequencer 370 */
+    0x0000,     /* R4467  - Write Sequencer 371 */
+    0x0045,     /* R4468  - Write Sequencer 372 */
+    0x001F,     /* R4469  - Write Sequencer 373 */
+    0x0403,     /* R4470  - Write Sequencer 374 */
+    0x0000,     /* R4471  - Write Sequencer 375 */
+    0x0005,     /* R4472  - Write Sequencer 376 */
+    0x0000,     /* R4473  - Write Sequencer 377 */
+    0x0003,     /* R4474  - Write Sequencer 378 */
+    0x0100,     /* R4475  - Write Sequencer 379 */
+    0x00FE,     /* R4476  - Write Sequencer 380 */
+    0x0000,     /* R4477  - Write Sequencer 381 */
+    0x0000,     /* R4478  - Write Sequencer 382 */
+    0x0000,     /* R4479  - Write Sequencer 383 */
+    0x00FE,     /* R4480  - Write Sequencer 384 */
+    0x0000,     /* R4481  - Write Sequencer 385 */
+    0x0000,     /* R4482  - Write Sequencer 386 */
+    0x0000,     /* R4483  - Write Sequencer 387 */
+    0x00FE,     /* R4484  - Write Sequencer 388 */
+    0x0000,     /* R4485  - Write Sequencer 389 */
+    0x0000,     /* R4486  - Write Sequencer 390 */
+    0x0000,     /* R4487  - Write Sequencer 391 */
+    0x00FE,     /* R4488  - Write Sequencer 392 */
+    0x0000,     /* R4489  - Write Sequencer 393 */
+    0x0000,     /* R4490  - Write Sequencer 394 */
+    0x0000,     /* R4491  - Write Sequencer 395 */
+    0x00FE,     /* R4492  - Write Sequencer 396 */
+    0x0000,     /* R4493  - Write Sequencer 397 */
+    0x0000,     /* R4494  - Write Sequencer 398 */
+    0x0000,     /* R4495  - Write Sequencer 399 */
+    0x0031,     /* R4496  - Write Sequencer 400 */
+    0x0001,     /* R4497  - Write Sequencer 401 */
+    0x0004,     /* R4498  - Write Sequencer 402 */
+    0x0000,     /* R4499  - Write Sequencer 403 */
+    0x0031,     /* R4500  - Write Sequencer 404 */
+    0x0007,     /* R4501  - Write Sequencer 405 */
+    0x0200,     /* R4502  - Write Sequencer 406 */
+    0x0000,     /* R4503  - Write Sequencer 407 */
+    0x0031,     /* R4504  - Write Sequencer 408 */
+    0x0000,     /* R4505  - Write Sequencer 409 */
+    0x0106,     /* R4506  - Write Sequencer 410 */
+    0x0100,     /* R4507  - Write Sequencer 411 */
+    0x00FE,     /* R4508  - Write Sequencer 412 */
+    0x0000,     /* R4509  - Write Sequencer 413 */
+    0x0000,     /* R4510  - Write Sequencer 414 */
+    0x0000,     /* R4511  - Write Sequencer 415 */
+    0x0031,     /* R4512  - Write Sequencer 416 */
+    0x0003,     /* R4513  - Write Sequencer 417 */
+    0x0106,     /* R4514  - Write Sequencer 418 */
+    0x0000,     /* R4515  - Write Sequencer 419 */
+    0x0031,     /* R4516  - Write Sequencer 420 */
+    0x0004,     /* R4517  - Write Sequencer 421 */
+    0x0200,     /* R4518  - Write Sequencer 422 */
+    0x0000,     /* R4519  - Write Sequencer 423 */
+    0x0031,     /* R4520  - Write Sequencer 424 */
+    0x0000,     /* R4521  - Write Sequencer 425 */
+    0x0004,     /* R4522  - Write Sequencer 426 */
+    0x0100,     /* R4523  - Write Sequencer 427 */
+    0x0000,     /* R4524  - Write Sequencer 428 */
+    0x0000,     /* R4525  - Write Sequencer 429 */
+    0x0000,     /* R4526  - Write Sequencer 430 */
+    0x0000,     /* R4527  - Write Sequencer 431 */
+    0x0000,     /* R4528  - Write Sequencer 432 */
+    0x0000,     /* R4529  - Write Sequencer 433 */
+    0x0000,     /* R4530  - Write Sequencer 434 */
+    0x0000,     /* R4531  - Write Sequencer 435 */
+    0x0000,     /* R4532  - Write Sequencer 436 */
+    0x0000,     /* R4533  - Write Sequencer 437 */
+    0x0000,     /* R4534  - Write Sequencer 438 */
+    0x0000,     /* R4535  - Write Sequencer 439 */
+    0x0000,     /* R4536  - Write Sequencer 440 */
+    0x0000,     /* R4537  - Write Sequencer 441 */
+    0x0000,     /* R4538  - Write Sequencer 442 */
+    0x0000,     /* R4539  - Write Sequencer 443 */
+    0x0000,     /* R4540  - Write Sequencer 444 */
+    0x0000,     /* R4541  - Write Sequencer 445 */
+    0x0000,     /* R4542  - Write Sequencer 446 */
+    0x0000,     /* R4543  - Write Sequencer 447 */
+    0x0000,     /* R4544  - Write Sequencer 448 */
+    0x0000,     /* R4545  - Write Sequencer 449 */
+    0x0000,     /* R4546  - Write Sequencer 450 */
+    0x0000,     /* R4547  - Write Sequencer 451 */
+    0x0000,     /* R4548  - Write Sequencer 452 */
+    0x0000,     /* R4549  - Write Sequencer 453 */
+    0x0000,     /* R4550  - Write Sequencer 454 */
+    0x0000,     /* R4551  - Write Sequencer 455 */
+    0x0000,     /* R4552  - Write Sequencer 456 */
+    0x0000,     /* R4553  - Write Sequencer 457 */
+    0x0000,     /* R4554  - Write Sequencer 458 */
+    0x0000,     /* R4555  - Write Sequencer 459 */
+    0x0000,     /* R4556  - Write Sequencer 460 */
+    0x0000,     /* R4557  - Write Sequencer 461 */
+    0x0000,     /* R4558  - Write Sequencer 462 */
+    0x0000,     /* R4559  - Write Sequencer 463 */
+    0x0000,     /* R4560  - Write Sequencer 464 */
+    0x0000,     /* R4561  - Write Sequencer 465 */
+    0x0000,     /* R4562  - Write Sequencer 466 */
+    0x0000,     /* R4563  - Write Sequencer 467 */
+    0x0000,     /* R4564  - Write Sequencer 468 */
+    0x0000,     /* R4565  - Write Sequencer 469 */
+    0x0000,     /* R4566  - Write Sequencer 470 */
+    0x0000,     /* R4567  - Write Sequencer 471 */
+    0x0000,     /* R4568  - Write Sequencer 472 */
+    0x0000,     /* R4569  - Write Sequencer 473 */
+    0x0000,     /* R4570  - Write Sequencer 474 */
+    0x0000,     /* R4571  - Write Sequencer 475 */
+    0x0000,     /* R4572  - Write Sequencer 476 */
+    0x0000,     /* R4573  - Write Sequencer 477 */
+    0x0000,     /* R4574  - Write Sequencer 478 */
+    0x0000,     /* R4575  - Write Sequencer 479 */
+    0x0000,     /* R4576  - Write Sequencer 480 */
+    0x0000,     /* R4577  - Write Sequencer 481 */
+    0x0000,     /* R4578  - Write Sequencer 482 */
+    0x0000,     /* R4579  - Write Sequencer 483 */
+    0x0000,     /* R4580  - Write Sequencer 484 */
+    0x0000,     /* R4581  - Write Sequencer 485 */
+    0x0000,     /* R4582  - Write Sequencer 486 */
+    0x0000,     /* R4583  - Write Sequencer 487 */
+    0x0000,     /* R4584  - Write Sequencer 488 */
+    0x0000,     /* R4585  - Write Sequencer 489 */
+    0x0000,     /* R4586  - Write Sequencer 490 */
+    0x0000,     /* R4587  - Write Sequencer 491 */
+    0x0000,     /* R4588  - Write Sequencer 492 */
+    0x0000,     /* R4589  - Write Sequencer 493 */
+    0x0000,     /* R4590  - Write Sequencer 494 */
+    0x0000,     /* R4591  - Write Sequencer 495 */
+    0x0000,     /* R4592  - Write Sequencer 496 */
+    0x0000,     /* R4593  - Write Sequencer 497 */
+    0x0000,     /* R4594  - Write Sequencer 498 */
+    0x0000,     /* R4595  - Write Sequencer 499 */
+    0x0000,     /* R4596  - Write Sequencer 500 */
+    0x0000,     /* R4597  - Write Sequencer 501 */
+    0x0000,     /* R4598  - Write Sequencer 502 */
+    0x0000,     /* R4599  - Write Sequencer 503 */
+    0x0000,     /* R4600  - Write Sequencer 504 */
+    0x0000,     /* R4601  - Write Sequencer 505 */
+    0x0000,     /* R4602  - Write Sequencer 506 */
+    0x0000,     /* R4603  - Write Sequencer 507 */
+    0x0000,     /* R4604  - Write Sequencer 508 */
+    0x0000,     /* R4605  - Write Sequencer 509 */
+    0x0000,     /* R4606  - Write Sequencer 510 */
+    0x0000,     /* R4607  - Write Sequencer 511 */
+    0x0000,     /* R4608 */
+    0x0000,     /* R4609 */
+    0x0000,     /* R4610 */
+    0x0000,     /* R4611 */
+    0x0000,     /* R4612 */
+    0x0000,     /* R4613 */
+    0x0000,     /* R4614 */
+    0x0000,     /* R4615 */
+    0x0000,     /* R4616 */
+    0x0000,     /* R4617 */
+    0x0000,     /* R4618 */
+    0x0000,     /* R4619 */
+    0x0000,     /* R4620 */
+    0x0000,     /* R4621 */
+    0x0000,     /* R4622 */
+    0x0000,     /* R4623 */
+    0x0000,     /* R4624 */
+    0x0000,     /* R4625 */
+    0x0000,     /* R4626 */
+    0x0000,     /* R4627 */
+    0x0000,     /* R4628 */
+    0x0000,     /* R4629 */
+    0x0000,     /* R4630 */
+    0x0000,     /* R4631 */
+    0x0000,     /* R4632 */
+    0x0000,     /* R4633 */
+    0x0000,     /* R4634 */
+    0x0000,     /* R4635 */
+    0x0000,     /* R4636 */
+    0x0000,     /* R4637 */
+    0x0000,     /* R4638 */
+    0x0000,     /* R4639 */
+    0x0000,     /* R4640 */
+    0x0000,     /* R4641 */
+    0x0000,     /* R4642 */
+    0x0000,     /* R4643 */
+    0x0000,     /* R4644 */
+    0x0000,     /* R4645 */
+    0x0000,     /* R4646 */
+    0x0000,     /* R4647 */
+    0x0000,     /* R4648 */
+    0x0000,     /* R4649 */
+    0x0000,     /* R4650 */
+    0x0000,     /* R4651 */
+    0x0000,     /* R4652 */
+    0x0000,     /* R4653 */
+    0x0000,     /* R4654 */
+    0x0000,     /* R4655 */
+    0x0000,     /* R4656 */
+    0x0000,     /* R4657 */
+    0x0000,     /* R4658 */
+    0x0000,     /* R4659 */
+    0x0000,     /* R4660 */
+    0x0000,     /* R4661 */
+    0x0000,     /* R4662 */
+    0x0000,     /* R4663 */
+    0x0000,     /* R4664 */
+    0x0000,     /* R4665 */
+    0x0000,     /* R4666 */
+    0x0000,     /* R4667 */
+    0x0000,     /* R4668 */
+    0x0000,     /* R4669 */
+    0x0000,     /* R4670 */
+    0x0000,     /* R4671 */
+    0x0000,     /* R4672 */
+    0x0000,     /* R4673 */
+    0x0000,     /* R4674 */
+    0x0000,     /* R4675 */
+    0x0000,     /* R4676 */
+    0x0000,     /* R4677 */
+    0x0000,     /* R4678 */
+    0x0000,     /* R4679 */
+    0x0000,     /* R4680 */
+    0x0000,     /* R4681 */
+    0x0000,     /* R4682 */
+    0x0000,     /* R4683 */
+    0x0000,     /* R4684 */
+    0x0000,     /* R4685 */
+    0x0000,     /* R4686 */
+    0x0000,     /* R4687 */
+    0x0000,     /* R4688 */
+    0x0000,     /* R4689 */
+    0x0000,     /* R4690 */
+    0x0000,     /* R4691 */
+    0x0000,     /* R4692 */
+    0x0000,     /* R4693 */
+    0x0000,     /* R4694 */
+    0x0000,     /* R4695 */
+    0x0000,     /* R4696 */
+    0x0000,     /* R4697 */
+    0x0000,     /* R4698 */
+    0x0000,     /* R4699 */
+    0x0000,     /* R4700 */
+    0x0000,     /* R4701 */
+    0x0000,     /* R4702 */
+    0x0000,     /* R4703 */
+    0x0000,     /* R4704 */
+    0x0000,     /* R4705 */
+    0x0000,     /* R4706 */
+    0x0000,     /* R4707 */
+    0x0000,     /* R4708 */
+    0x0000,     /* R4709 */
+    0x0000,     /* R4710 */
+    0x0000,     /* R4711 */
+    0x0000,     /* R4712 */
+    0x0000,     /* R4713 */
+    0x0000,     /* R4714 */
+    0x0000,     /* R4715 */
+    0x0000,     /* R4716 */
+    0x0000,     /* R4717 */
+    0x0000,     /* R4718 */
+    0x0000,     /* R4719 */
+    0x0000,     /* R4720 */
+    0x0000,     /* R4721 */
+    0x0000,     /* R4722 */
+    0x0000,     /* R4723 */
+    0x0000,     /* R4724 */
+    0x0000,     /* R4725 */
+    0x0000,     /* R4726 */
+    0x0000,     /* R4727 */
+    0x0000,     /* R4728 */
+    0x0000,     /* R4729 */
+    0x0000,     /* R4730 */
+    0x0000,     /* R4731 */
+    0x0000,     /* R4732 */
+    0x0000,     /* R4733 */
+    0x0000,     /* R4734 */
+    0x0000,     /* R4735 */
+    0x0000,     /* R4736 */
+    0x0000,     /* R4737 */
+    0x0000,     /* R4738 */
+    0x0000,     /* R4739 */
+    0x0000,     /* R4740 */
+    0x0000,     /* R4741 */
+    0x0000,     /* R4742 */
+    0x0000,     /* R4743 */
+    0x0000,     /* R4744 */
+    0x0000,     /* R4745 */
+    0x0000,     /* R4746 */
+    0x0000,     /* R4747 */
+    0x0000,     /* R4748 */
+    0x0000,     /* R4749 */
+    0x0000,     /* R4750 */
+    0x0000,     /* R4751 */
+    0x0000,     /* R4752 */
+    0x0000,     /* R4753 */
+    0x0000,     /* R4754 */
+    0x0000,     /* R4755 */
+    0x0000,     /* R4756 */
+    0x0000,     /* R4757 */
+    0x0000,     /* R4758 */
+    0x0000,     /* R4759 */
+    0x0000,     /* R4760 */
+    0x0000,     /* R4761 */
+    0x0000,     /* R4762 */
+    0x0000,     /* R4763 */
+    0x0000,     /* R4764 */
+    0x0000,     /* R4765 */
+    0x0000,     /* R4766 */
+    0x0000,     /* R4767 */
+    0x0000,     /* R4768 */
+    0x0000,     /* R4769 */
+    0x0000,     /* R4770 */
+    0x0000,     /* R4771 */
+    0x0000,     /* R4772 */
+    0x0000,     /* R4773 */
+    0x0000,     /* R4774 */
+    0x0000,     /* R4775 */
+    0x0000,     /* R4776 */
+    0x0000,     /* R4777 */
+    0x0000,     /* R4778 */
+    0x0000,     /* R4779 */
+    0x0000,     /* R4780 */
+    0x0000,     /* R4781 */
+    0x0000,     /* R4782 */
+    0x0000,     /* R4783 */
+    0x0000,     /* R4784 */
+    0x0000,     /* R4785 */
+    0x0000,     /* R4786 */
+    0x0000,     /* R4787 */
+    0x0000,     /* R4788 */
+    0x0000,     /* R4789 */
+    0x0000,     /* R4790 */
+    0x0000,     /* R4791 */
+    0x0000,     /* R4792 */
+    0x0000,     /* R4793 */
+    0x0000,     /* R4794 */
+    0x0000,     /* R4795 */
+    0x0000,     /* R4796 */
+    0x0000,     /* R4797 */
+    0x0000,     /* R4798 */
+    0x0000,     /* R4799 */
+    0x0000,     /* R4800 */
+    0x0000,     /* R4801 */
+    0x0000,     /* R4802 */
+    0x0000,     /* R4803 */
+    0x0000,     /* R4804 */
+    0x0000,     /* R4805 */
+    0x0000,     /* R4806 */
+    0x0000,     /* R4807 */
+    0x0000,     /* R4808 */
+    0x0000,     /* R4809 */
+    0x0000,     /* R4810 */
+    0x0000,     /* R4811 */
+    0x0000,     /* R4812 */
+    0x0000,     /* R4813 */
+    0x0000,     /* R4814 */
+    0x0000,     /* R4815 */
+    0x0000,     /* R4816 */
+    0x0000,     /* R4817 */
+    0x0000,     /* R4818 */
+    0x0000,     /* R4819 */
+    0x0000,     /* R4820 */
+    0x0000,     /* R4821 */
+    0x0000,     /* R4822 */
+    0x0000,     /* R4823 */
+    0x0000,     /* R4824 */
+    0x0000,     /* R4825 */
+    0x0000,     /* R4826 */
+    0x0000,     /* R4827 */
+    0x0000,     /* R4828 */
+    0x0000,     /* R4829 */
+    0x0000,     /* R4830 */
+    0x0000,     /* R4831 */
+    0x0000,     /* R4832 */
+    0x0000,     /* R4833 */
+    0x0000,     /* R4834 */
+    0x0000,     /* R4835 */
+    0x0000,     /* R4836 */
+    0x0000,     /* R4837 */
+    0x0000,     /* R4838 */
+    0x0000,     /* R4839 */
+    0x0000,     /* R4840 */
+    0x0000,     /* R4841 */
+    0x0000,     /* R4842 */
+    0x0000,     /* R4843 */
+    0x0000,     /* R4844 */
+    0x0000,     /* R4845 */
+    0x0000,     /* R4846 */
+    0x0000,     /* R4847 */
+    0x0000,     /* R4848 */
+    0x0000,     /* R4849 */
+    0x0000,     /* R4850 */
+    0x0000,     /* R4851 */
+    0x0000,     /* R4852 */
+    0x0000,     /* R4853 */
+    0x0000,     /* R4854 */
+    0x0000,     /* R4855 */
+    0x0000,     /* R4856 */
+    0x0000,     /* R4857 */
+    0x0000,     /* R4858 */
+    0x0000,     /* R4859 */
+    0x0000,     /* R4860 */
+    0x0000,     /* R4861 */
+    0x0000,     /* R4862 */
+    0x0000,     /* R4863 */
+    0x0000,     /* R4864 */
+    0x0000,     /* R4865 */
+    0x0000,     /* R4866 */
+    0x0000,     /* R4867 */
+    0x0000,     /* R4868 */
+    0x0000,     /* R4869 */
+    0x0000,     /* R4870 */
+    0x0000,     /* R4871 */
+    0x0000,     /* R4872 */
+    0x0000,     /* R4873 */
+    0x0000,     /* R4874 */
+    0x0000,     /* R4875 */
+    0x0000,     /* R4876 */
+    0x0000,     /* R4877 */
+    0x0000,     /* R4878 */
+    0x0000,     /* R4879 */
+    0x0000,     /* R4880 */
+    0x0000,     /* R4881 */
+    0x0000,     /* R4882 */
+    0x0000,     /* R4883 */
+    0x0000,     /* R4884 */
+    0x0000,     /* R4885 */
+    0x0000,     /* R4886 */
+    0x0000,     /* R4887 */
+    0x0000,     /* R4888 */
+    0x0000,     /* R4889 */
+    0x0000,     /* R4890 */
+    0x0000,     /* R4891 */
+    0x0000,     /* R4892 */
+    0x0000,     /* R4893 */
+    0x0000,     /* R4894 */
+    0x0000,     /* R4895 */
+    0x0000,     /* R4896 */
+    0x0000,     /* R4897 */
+    0x0000,     /* R4898 */
+    0x0000,     /* R4899 */
+    0x0000,     /* R4900 */
+    0x0000,     /* R4901 */
+    0x0000,     /* R4902 */
+    0x0000,     /* R4903 */
+    0x0000,     /* R4904 */
+    0x0000,     /* R4905 */
+    0x0000,     /* R4906 */
+    0x0000,     /* R4907 */
+    0x0000,     /* R4908 */
+    0x0000,     /* R4909 */
+    0x0000,     /* R4910 */
+    0x0000,     /* R4911 */
+    0x0000,     /* R4912 */
+    0x0000,     /* R4913 */
+    0x0000,     /* R4914 */
+    0x0000,     /* R4915 */
+    0x0000,     /* R4916 */
+    0x0000,     /* R4917 */
+    0x0000,     /* R4918 */
+    0x0000,     /* R4919 */
+    0x0000,     /* R4920 */
+    0x0000,     /* R4921 */
+    0x0000,     /* R4922 */
+    0x0000,     /* R4923 */
+    0x0000,     /* R4924 */
+    0x0000,     /* R4925 */
+    0x0000,     /* R4926 */
+    0x0000,     /* R4927 */
+    0x0000,     /* R4928 */
+    0x0000,     /* R4929 */
+    0x0000,     /* R4930 */
+    0x0000,     /* R4931 */
+    0x0000,     /* R4932 */
+    0x0000,     /* R4933 */
+    0x0000,     /* R4934 */
+    0x0000,     /* R4935 */
+    0x0000,     /* R4936 */
+    0x0000,     /* R4937 */
+    0x0000,     /* R4938 */
+    0x0000,     /* R4939 */
+    0x0000,     /* R4940 */
+    0x0000,     /* R4941 */
+    0x0000,     /* R4942 */
+    0x0000,     /* R4943 */
+    0x0000,     /* R4944 */
+    0x0000,     /* R4945 */
+    0x0000,     /* R4946 */
+    0x0000,     /* R4947 */
+    0x0000,     /* R4948 */
+    0x0000,     /* R4949 */
+    0x0000,     /* R4950 */
+    0x0000,     /* R4951 */
+    0x0000,     /* R4952 */
+    0x0000,     /* R4953 */
+    0x0000,     /* R4954 */
+    0x0000,     /* R4955 */
+    0x0000,     /* R4956 */
+    0x0000,     /* R4957 */
+    0x0000,     /* R4958 */
+    0x0000,     /* R4959 */
+    0x0000,     /* R4960 */
+    0x0000,     /* R4961 */
+    0x0000,     /* R4962 */
+    0x0000,     /* R4963 */
+    0x0000,     /* R4964 */
+    0x0000,     /* R4965 */
+    0x0000,     /* R4966 */
+    0x0000,     /* R4967 */
+    0x0000,     /* R4968 */
+    0x0000,     /* R4969 */
+    0x0000,     /* R4970 */
+    0x0000,     /* R4971 */
+    0x0000,     /* R4972 */
+    0x0000,     /* R4973 */
+    0x0000,     /* R4974 */
+    0x0000,     /* R4975 */
+    0x0000,     /* R4976 */
+    0x0000,     /* R4977 */
+    0x0000,     /* R4978 */
+    0x0000,     /* R4979 */
+    0x0000,     /* R4980 */
+    0x0000,     /* R4981 */
+    0x0000,     /* R4982 */
+    0x0000,     /* R4983 */
+    0x0000,     /* R4984 */
+    0x0000,     /* R4985 */
+    0x0000,     /* R4986 */
+    0x0000,     /* R4987 */
+    0x0000,     /* R4988 */
+    0x0000,     /* R4989 */
+    0x0000,     /* R4990 */
+    0x0000,     /* R4991 */
+    0x0000,     /* R4992 */
+    0x0000,     /* R4993 */
+    0x0000,     /* R4994 */
+    0x0000,     /* R4995 */
+    0x0000,     /* R4996 */
+    0x0000,     /* R4997 */
+    0x0000,     /* R4998 */
+    0x0000,     /* R4999 */
+    0x0000,     /* R5000 */
+    0x0000,     /* R5001 */
+    0x0000,     /* R5002 */
+    0x0000,     /* R5003 */
+    0x0000,     /* R5004 */
+    0x0000,     /* R5005 */
+    0x0000,     /* R5006 */
+    0x0000,     /* R5007 */
+    0x0000,     /* R5008 */
+    0x0000,     /* R5009 */
+    0x0000,     /* R5010 */
+    0x0000,     /* R5011 */
+    0x0000,     /* R5012 */
+    0x0000,     /* R5013 */
+    0x0000,     /* R5014 */
+    0x0000,     /* R5015 */
+    0x0000,     /* R5016 */
+    0x0000,     /* R5017 */
+    0x0000,     /* R5018 */
+    0x0000,     /* R5019 */
+    0x0000,     /* R5020 */
+    0x0000,     /* R5021 */
+    0x0000,     /* R5022 */
+    0x0000,     /* R5023 */
+    0x0000,     /* R5024 */
+    0x0000,     /* R5025 */
+    0x0000,     /* R5026 */
+    0x0000,     /* R5027 */
+    0x0000,     /* R5028 */
+    0x0000,     /* R5029 */
+    0x0000,     /* R5030 */
+    0x0000,     /* R5031 */
+    0x0000,     /* R5032 */
+    0x0000,     /* R5033 */
+    0x0000,     /* R5034 */
+    0x0000,     /* R5035 */
+    0x0000,     /* R5036 */
+    0x0000,     /* R5037 */
+    0x0000,     /* R5038 */
+    0x0000,     /* R5039 */
+    0x0000,     /* R5040 */
+    0x0000,     /* R5041 */
+    0x0000,     /* R5042 */
+    0x0000,     /* R5043 */
+    0x0000,     /* R5044 */
+    0x0000,     /* R5045 */
+    0x0000,     /* R5046 */
+    0x0000,     /* R5047 */
+    0x0000,     /* R5048 */
+    0x0000,     /* R5049 */
+    0x0000,     /* R5050 */
+    0x0000,     /* R5051 */
+    0x0000,     /* R5052 */
+    0x0000,     /* R5053 */
+    0x0000,     /* R5054 */
+    0x0000,     /* R5055 */
+    0x0000,     /* R5056 */
+    0x0000,     /* R5057 */
+    0x0000,     /* R5058 */
+    0x0000,     /* R5059 */
+    0x0000,     /* R5060 */
+    0x0000,     /* R5061 */
+    0x0000,     /* R5062 */
+    0x0000,     /* R5063 */
+    0x0000,     /* R5064 */
+    0x0000,     /* R5065 */
+    0x0000,     /* R5066 */
+    0x0000,     /* R5067 */
+    0x0000,     /* R5068 */
+    0x0000,     /* R5069 */
+    0x0000,     /* R5070 */
+    0x0000,     /* R5071 */
+    0x0000,     /* R5072 */
+    0x0000,     /* R5073 */
+    0x0000,     /* R5074 */
+    0x0000,     /* R5075 */
+    0x0000,     /* R5076 */
+    0x0000,     /* R5077 */
+    0x0000,     /* R5078 */
+    0x0000,     /* R5079 */
+    0x0000,     /* R5080 */
+    0x0000,     /* R5081 */
+    0x0000,     /* R5082 */
+    0x0000,     /* R5083 */
+    0x0000,     /* R5084 */
+    0x0000,     /* R5085 */
+    0x0000,     /* R5086 */
+    0x0000,     /* R5087 */
+    0x0000,     /* R5088 */
+    0x0000,     /* R5089 */
+    0x0000,     /* R5090 */
+    0x0000,     /* R5091 */
+    0x0000,     /* R5092 */
+    0x0000,     /* R5093 */
+    0x0000,     /* R5094 */
+    0x0000,     /* R5095 */
+    0x0000,     /* R5096 */
+    0x0000,     /* R5097 */
+    0x0000,     /* R5098 */
+    0x0000,     /* R5099 */
+    0x0000,     /* R5100 */
+    0x0000,     /* R5101 */
+    0x0000,     /* R5102 */
+    0x0000,     /* R5103 */
+    0x0000,     /* R5104 */
+    0x0000,     /* R5105 */
+    0x0000,     /* R5106 */
+    0x0000,     /* R5107 */
+    0x0000,     /* R5108 */
+    0x0000,     /* R5109 */
+    0x0000,     /* R5110 */
+    0x0000,     /* R5111 */
+    0x0000,     /* R5112 */
+    0x0000,     /* R5113 */
+    0x0000,     /* R5114 */
+    0x0000,     /* R5115 */
+    0x0000,     /* R5116 */
+    0x0000,     /* R5117 */
+    0x0000,     /* R5118 */
+    0x0000,     /* R5119 */
+    0x0000,     /* R5120 */
+    0x0000,     /* R5121 */
+    0x0000,     /* R5122 */
+    0x0000,     /* R5123 */
+    0x0000,     /* R5124 */
+    0x0000,     /* R5125 */
+    0x0000,     /* R5126 */
+    0x0000,     /* R5127 */
+    0x0000,     /* R5128 */
+    0x0000,     /* R5129 */
+    0x0000,     /* R5130 */
+    0x0000,     /* R5131 */
+    0x0000,     /* R5132 */
+    0x0000,     /* R5133 */
+    0x0000,     /* R5134 */
+    0x0000,     /* R5135 */
+    0x0000,     /* R5136 */
+    0x0000,     /* R5137 */
+    0x0000,     /* R5138 */
+    0x0000,     /* R5139 */
+    0x0000,     /* R5140 */
+    0x0000,     /* R5141 */
+    0x0000,     /* R5142 */
+    0x0000,     /* R5143 */
+    0x0000,     /* R5144 */
+    0x0000,     /* R5145 */
+    0x0000,     /* R5146 */
+    0x0000,     /* R5147 */
+    0x0000,     /* R5148 */
+    0x0000,     /* R5149 */
+    0x0000,     /* R5150 */
+    0x0000,     /* R5151 */
+    0x0000,     /* R5152 */
+    0x0000,     /* R5153 */
+    0x0000,     /* R5154 */
+    0x0000,     /* R5155 */
+    0x0000,     /* R5156 */
+    0x0000,     /* R5157 */
+    0x0000,     /* R5158 */
+    0x0000,     /* R5159 */
+    0x0000,     /* R5160 */
+    0x0000,     /* R5161 */
+    0x0000,     /* R5162 */
+    0x0000,     /* R5163 */
+    0x0000,     /* R5164 */
+    0x0000,     /* R5165 */
+    0x0000,     /* R5166 */
+    0x0000,     /* R5167 */
+    0x0000,     /* R5168 */
+    0x0000,     /* R5169 */
+    0x0000,     /* R5170 */
+    0x0000,     /* R5171 */
+    0x0000,     /* R5172 */
+    0x0000,     /* R5173 */
+    0x0000,     /* R5174 */
+    0x0000,     /* R5175 */
+    0x0000,     /* R5176 */
+    0x0000,     /* R5177 */
+    0x0000,     /* R5178 */
+    0x0000,     /* R5179 */
+    0x0000,     /* R5180 */
+    0x0000,     /* R5181 */
+    0x0000,     /* R5182 */
+    0x0000,     /* R5183 */
+    0x0000,     /* R5184 */
+    0x0000,     /* R5185 */
+    0x0000,     /* R5186 */
+    0x0000,     /* R5187 */
+    0x0000,     /* R5188 */
+    0x0000,     /* R5189 */
+    0x0000,     /* R5190 */
+    0x0000,     /* R5191 */
+    0x0000,     /* R5192 */
+    0x0000,     /* R5193 */
+    0x0000,     /* R5194 */
+    0x0000,     /* R5195 */
+    0x0000,     /* R5196 */
+    0x0000,     /* R5197 */
+    0x0000,     /* R5198 */
+    0x0000,     /* R5199 */
+    0x0000,     /* R5200 */
+    0x0000,     /* R5201 */
+    0x0000,     /* R5202 */
+    0x0000,     /* R5203 */
+    0x0000,     /* R5204 */
+    0x0000,     /* R5205 */
+    0x0000,     /* R5206 */
+    0x0000,     /* R5207 */
+    0x0000,     /* R5208 */
+    0x0000,     /* R5209 */
+    0x0000,     /* R5210 */
+    0x0000,     /* R5211 */
+    0x0000,     /* R5212 */
+    0x0000,     /* R5213 */
+    0x0000,     /* R5214 */
+    0x0000,     /* R5215 */
+    0x0000,     /* R5216 */
+    0x0000,     /* R5217 */
+    0x0000,     /* R5218 */
+    0x0000,     /* R5219 */
+    0x0000,     /* R5220 */
+    0x0000,     /* R5221 */
+    0x0000,     /* R5222 */
+    0x0000,     /* R5223 */
+    0x0000,     /* R5224 */
+    0x0000,     /* R5225 */
+    0x0000,     /* R5226 */
+    0x0000,     /* R5227 */
+    0x0000,     /* R5228 */
+    0x0000,     /* R5229 */
+    0x0000,     /* R5230 */
+    0x0000,     /* R5231 */
+    0x0000,     /* R5232 */
+    0x0000,     /* R5233 */
+    0x0000,     /* R5234 */
+    0x0000,     /* R5235 */
+    0x0000,     /* R5236 */
+    0x0000,     /* R5237 */
+    0x0000,     /* R5238 */
+    0x0000,     /* R5239 */
+    0x0000,     /* R5240 */
+    0x0000,     /* R5241 */
+    0x0000,     /* R5242 */
+    0x0000,     /* R5243 */
+    0x0000,     /* R5244 */
+    0x0000,     /* R5245 */
+    0x0000,     /* R5246 */
+    0x0000,     /* R5247 */
+    0x0000,     /* R5248 */
+    0x0000,     /* R5249 */
+    0x0000,     /* R5250 */
+    0x0000,     /* R5251 */
+    0x0000,     /* R5252 */
+    0x0000,     /* R5253 */
+    0x0000,     /* R5254 */
+    0x0000,     /* R5255 */
+    0x0000,     /* R5256 */
+    0x0000,     /* R5257 */
+    0x0000,     /* R5258 */
+    0x0000,     /* R5259 */
+    0x0000,     /* R5260 */
+    0x0000,     /* R5261 */
+    0x0000,     /* R5262 */
+    0x0000,     /* R5263 */
+    0x0000,     /* R5264 */
+    0x0000,     /* R5265 */
+    0x0000,     /* R5266 */
+    0x0000,     /* R5267 */
+    0x0000,     /* R5268 */
+    0x0000,     /* R5269 */
+    0x0000,     /* R5270 */
+    0x0000,     /* R5271 */
+    0x0000,     /* R5272 */
+    0x0000,     /* R5273 */
+    0x0000,     /* R5274 */
+    0x0000,     /* R5275 */
+    0x0000,     /* R5276 */
+    0x0000,     /* R5277 */
+    0x0000,     /* R5278 */
+    0x0000,     /* R5279 */
+    0x0000,     /* R5280 */
+    0x0000,     /* R5281 */
+    0x0000,     /* R5282 */
+    0x0000,     /* R5283 */
+    0x0000,     /* R5284 */
+    0x0000,     /* R5285 */
+    0x0000,     /* R5286 */
+    0x0000,     /* R5287 */
+    0x0000,     /* R5288 */
+    0x0000,     /* R5289 */
+    0x0000,     /* R5290 */
+    0x0000,     /* R5291 */
+    0x0000,     /* R5292 */
+    0x0000,     /* R5293 */
+    0x0000,     /* R5294 */
+    0x0000,     /* R5295 */
+    0x0000,     /* R5296 */
+    0x0000,     /* R5297 */
+    0x0000,     /* R5298 */
+    0x0000,     /* R5299 */
+    0x0000,     /* R5300 */
+    0x0000,     /* R5301 */
+    0x0000,     /* R5302 */
+    0x0000,     /* R5303 */
+    0x0000,     /* R5304 */
+    0x0000,     /* R5305 */
+    0x0000,     /* R5306 */
+    0x0000,     /* R5307 */
+    0x0000,     /* R5308 */
+    0x0000,     /* R5309 */
+    0x0000,     /* R5310 */
+    0x0000,     /* R5311 */
+    0x0000,     /* R5312 */
+    0x0000,     /* R5313 */
+    0x0000,     /* R5314 */
+    0x0000,     /* R5315 */
+    0x0000,     /* R5316 */
+    0x0000,     /* R5317 */
+    0x0000,     /* R5318 */
+    0x0000,     /* R5319 */
+    0x0000,     /* R5320 */
+    0x0000,     /* R5321 */
+    0x0000,     /* R5322 */
+    0x0000,     /* R5323 */
+    0x0000,     /* R5324 */
+    0x0000,     /* R5325 */
+    0x0000,     /* R5326 */
+    0x0000,     /* R5327 */
+    0x0000,     /* R5328 */
+    0x0000,     /* R5329 */
+    0x0000,     /* R5330 */
+    0x0000,     /* R5331 */
+    0x0000,     /* R5332 */
+    0x0000,     /* R5333 */
+    0x0000,     /* R5334 */
+    0x0000,     /* R5335 */
+    0x0000,     /* R5336 */
+    0x0000,     /* R5337 */
+    0x0000,     /* R5338 */
+    0x0000,     /* R5339 */
+    0x0000,     /* R5340 */
+    0x0000,     /* R5341 */
+    0x0000,     /* R5342 */
+    0x0000,     /* R5343 */
+    0x0000,     /* R5344 */
+    0x0000,     /* R5345 */
+    0x0000,     /* R5346 */
+    0x0000,     /* R5347 */
+    0x0000,     /* R5348 */
+    0x0000,     /* R5349 */
+    0x0000,     /* R5350 */
+    0x0000,     /* R5351 */
+    0x0000,     /* R5352 */
+    0x0000,     /* R5353 */
+    0x0000,     /* R5354 */
+    0x0000,     /* R5355 */
+    0x0000,     /* R5356 */
+    0x0000,     /* R5357 */
+    0x0000,     /* R5358 */
+    0x0000,     /* R5359 */
+    0x0000,     /* R5360 */
+    0x0000,     /* R5361 */
+    0x0000,     /* R5362 */
+    0x0000,     /* R5363 */
+    0x0000,     /* R5364 */
+    0x0000,     /* R5365 */
+    0x0000,     /* R5366 */
+    0x0000,     /* R5367 */
+    0x0000,     /* R5368 */
+    0x0000,     /* R5369 */
+    0x0000,     /* R5370 */
+    0x0000,     /* R5371 */
+    0x0000,     /* R5372 */
+    0x0000,     /* R5373 */
+    0x0000,     /* R5374 */
+    0x0000,     /* R5375 */
+    0x0000,     /* R5376 */
+    0x0000,     /* R5377 */
+    0x0000,     /* R5378 */
+    0x0000,     /* R5379 */
+    0x0000,     /* R5380 */
+    0x0000,     /* R5381 */
+    0x0000,     /* R5382 */
+    0x0000,     /* R5383 */
+    0x0000,     /* R5384 */
+    0x0000,     /* R5385 */
+    0x0000,     /* R5386 */
+    0x0000,     /* R5387 */
+    0x0000,     /* R5388 */
+    0x0000,     /* R5389 */
+    0x0000,     /* R5390 */
+    0x0000,     /* R5391 */
+    0x0000,     /* R5392 */
+    0x0000,     /* R5393 */
+    0x0000,     /* R5394 */
+    0x0000,     /* R5395 */
+    0x0000,     /* R5396 */
+    0x0000,     /* R5397 */
+    0x0000,     /* R5398 */
+    0x0000,     /* R5399 */
+    0x0000,     /* R5400 */
+    0x0000,     /* R5401 */
+    0x0000,     /* R5402 */
+    0x0000,     /* R5403 */
+    0x0000,     /* R5404 */
+    0x0000,     /* R5405 */
+    0x0000,     /* R5406 */
+    0x0000,     /* R5407 */
+    0x0000,     /* R5408 */
+    0x0000,     /* R5409 */
+    0x0000,     /* R5410 */
+    0x0000,     /* R5411 */
+    0x0000,     /* R5412 */
+    0x0000,     /* R5413 */
+    0x0000,     /* R5414 */
+    0x0000,     /* R5415 */
+    0x0000,     /* R5416 */
+    0x0000,     /* R5417 */
+    0x0000,     /* R5418 */
+    0x0000,     /* R5419 */
+    0x0000,     /* R5420 */
+    0x0000,     /* R5421 */
+    0x0000,     /* R5422 */
+    0x0000,     /* R5423 */
+    0x0000,     /* R5424 */
+    0x0000,     /* R5425 */
+    0x0000,     /* R5426 */
+    0x0000,     /* R5427 */
+    0x0000,     /* R5428 */
+    0x0000,     /* R5429 */
+    0x0000,     /* R5430 */
+    0x0000,     /* R5431 */
+    0x0000,     /* R5432 */
+    0x0000,     /* R5433 */
+    0x0000,     /* R5434 */
+    0x0000,     /* R5435 */
+    0x0000,     /* R5436 */
+    0x0000,     /* R5437 */
+    0x0000,     /* R5438 */
+    0x0000,     /* R5439 */
+    0x0000,     /* R5440 */
+    0x0000,     /* R5441 */
+    0x0000,     /* R5442 */
+    0x0000,     /* R5443 */
+    0x0000,     /* R5444 */
+    0x0000,     /* R5445 */
+    0x0000,     /* R5446 */
+    0x0000,     /* R5447 */
+    0x0000,     /* R5448 */
+    0x0000,     /* R5449 */
+    0x0000,     /* R5450 */
+    0x0000,     /* R5451 */
+    0x0000,     /* R5452 */
+    0x0000,     /* R5453 */
+    0x0000,     /* R5454 */
+    0x0000,     /* R5455 */
+    0x0000,     /* R5456 */
+    0x0000,     /* R5457 */
+    0x0000,     /* R5458 */
+    0x0000,     /* R5459 */
+    0x0000,     /* R5460 */
+    0x0000,     /* R5461 */
+    0x0000,     /* R5462 */
+    0x0000,     /* R5463 */
+    0x0000,     /* R5464 */
+    0x0000,     /* R5465 */
+    0x0000,     /* R5466 */
+    0x0000,     /* R5467 */
+    0x0000,     /* R5468 */
+    0x0000,     /* R5469 */
+    0x0000,     /* R5470 */
+    0x0000,     /* R5471 */
+    0x0000,     /* R5472 */
+    0x0000,     /* R5473 */
+    0x0000,     /* R5474 */
+    0x0000,     /* R5475 */
+    0x0000,     /* R5476 */
+    0x0000,     /* R5477 */
+    0x0000,     /* R5478 */
+    0x0000,     /* R5479 */
+    0x0000,     /* R5480 */
+    0x0000,     /* R5481 */
+    0x0000,     /* R5482 */
+    0x0000,     /* R5483 */
+    0x0000,     /* R5484 */
+    0x0000,     /* R5485 */
+    0x0000,     /* R5486 */
+    0x0000,     /* R5487 */
+    0x0000,     /* R5488 */
+    0x0000,     /* R5489 */
+    0x0000,     /* R5490 */
+    0x0000,     /* R5491 */
+    0x0000,     /* R5492 */
+    0x0000,     /* R5493 */
+    0x0000,     /* R5494 */
+    0x0000,     /* R5495 */
+    0x0000,     /* R5496 */
+    0x0000,     /* R5497 */
+    0x0000,     /* R5498 */
+    0x0000,     /* R5499 */
+    0x0000,     /* R5500 */
+    0x0000,     /* R5501 */
+    0x0000,     /* R5502 */
+    0x0000,     /* R5503 */
+    0x0000,     /* R5504 */
+    0x0000,     /* R5505 */
+    0x0000,     /* R5506 */
+    0x0000,     /* R5507 */
+    0x0000,     /* R5508 */
+    0x0000,     /* R5509 */
+    0x0000,     /* R5510 */
+    0x0000,     /* R5511 */
+    0x0000,     /* R5512 */
+    0x0000,     /* R5513 */
+    0x0000,     /* R5514 */
+    0x0000,     /* R5515 */
+    0x0000,     /* R5516 */
+    0x0000,     /* R5517 */
+    0x0000,     /* R5518 */
+    0x0000,     /* R5519 */
+    0x0000,     /* R5520 */
+    0x0000,     /* R5521 */
+    0x0000,     /* R5522 */
+    0x0000,     /* R5523 */
+    0x0000,     /* R5524 */
+    0x0000,     /* R5525 */
+    0x0000,     /* R5526 */
+    0x0000,     /* R5527 */
+    0x0000,     /* R5528 */
+    0x0000,     /* R5529 */
+    0x0000,     /* R5530 */
+    0x0000,     /* R5531 */
+    0x0000,     /* R5532 */
+    0x0000,     /* R5533 */
+    0x0000,     /* R5534 */
+    0x0000,     /* R5535 */
+    0x0000,     /* R5536 */
+    0x0000,     /* R5537 */
+    0x0000,     /* R5538 */
+    0x0000,     /* R5539 */
+    0x0000,     /* R5540 */
+    0x0000,     /* R5541 */
+    0x0000,     /* R5542 */
+    0x0000,     /* R5543 */
+    0x0000,     /* R5544 */
+    0x0000,     /* R5545 */
+    0x0000,     /* R5546 */
+    0x0000,     /* R5547 */
+    0x0000,     /* R5548 */
+    0x0000,     /* R5549 */
+    0x0000,     /* R5550 */
+    0x0000,     /* R5551 */
+    0x0000,     /* R5552 */
+    0x0000,     /* R5553 */
+    0x0000,     /* R5554 */
+    0x0000,     /* R5555 */
+    0x0000,     /* R5556 */
+    0x0000,     /* R5557 */
+    0x0000,     /* R5558 */
+    0x0000,     /* R5559 */
+    0x0000,     /* R5560 */
+    0x0000,     /* R5561 */
+    0x0000,     /* R5562 */
+    0x0000,     /* R5563 */
+    0x0000,     /* R5564 */
+    0x0000,     /* R5565 */
+    0x0000,     /* R5566 */
+    0x0000,     /* R5567 */
+    0x0000,     /* R5568 */
+    0x0000,     /* R5569 */
+    0x0000,     /* R5570 */
+    0x0000,     /* R5571 */
+    0x0000,     /* R5572 */
+    0x0000,     /* R5573 */
+    0x0000,     /* R5574 */
+    0x0000,     /* R5575 */
+    0x0000,     /* R5576 */
+    0x0000,     /* R5577 */
+    0x0000,     /* R5578 */
+    0x0000,     /* R5579 */
+    0x0000,     /* R5580 */
+    0x0000,     /* R5581 */
+    0x0000,     /* R5582 */
+    0x0000,     /* R5583 */
+    0x0000,     /* R5584 */
+    0x0000,     /* R5585 */
+    0x0000,     /* R5586 */
+    0x0000,     /* R5587 */
+    0x0000,     /* R5588 */
+    0x0000,     /* R5589 */
+    0x0000,     /* R5590 */
+    0x0000,     /* R5591 */
+    0x0000,     /* R5592 */
+    0x0000,     /* R5593 */
+    0x0000,     /* R5594 */
+    0x0000,     /* R5595 */
+    0x0000,     /* R5596 */
+    0x0000,     /* R5597 */
+    0x0000,     /* R5598 */
+    0x0000,     /* R5599 */
+    0x0000,     /* R5600 */
+    0x0000,     /* R5601 */
+    0x0000,     /* R5602 */
+    0x0000,     /* R5603 */
+    0x0000,     /* R5604 */
+    0x0000,     /* R5605 */
+    0x0000,     /* R5606 */
+    0x0000,     /* R5607 */
+    0x0000,     /* R5608 */
+    0x0000,     /* R5609 */
+    0x0000,     /* R5610 */
+    0x0000,     /* R5611 */
+    0x0000,     /* R5612 */
+    0x0000,     /* R5613 */
+    0x0000,     /* R5614 */
+    0x0000,     /* R5615 */
+    0x0000,     /* R5616 */
+    0x0000,     /* R5617 */
+    0x0000,     /* R5618 */
+    0x0000,     /* R5619 */
+    0x0000,     /* R5620 */
+    0x0000,     /* R5621 */
+    0x0000,     /* R5622 */
+    0x0000,     /* R5623 */
+    0x0000,     /* R5624 */
+    0x0000,     /* R5625 */
+    0x0000,     /* R5626 */
+    0x0000,     /* R5627 */
+    0x0000,     /* R5628 */
+    0x0000,     /* R5629 */
+    0x0000,     /* R5630 */
+    0x0000,     /* R5631 */
+    0x0000,     /* R5632 */
+    0x0000,     /* R5633 */
+    0x0000,     /* R5634 */
+    0x0000,     /* R5635 */
+    0x0000,     /* R5636 */
+    0x0000,     /* R5637 */
+    0x0000,     /* R5638 */
+    0x0000,     /* R5639 */
+    0x0000,     /* R5640 */
+    0x0000,     /* R5641 */
+    0x0000,     /* R5642 */
+    0x0000,     /* R5643 */
+    0x0000,     /* R5644 */
+    0x0000,     /* R5645 */
+    0x0000,     /* R5646 */
+    0x0000,     /* R5647 */
+    0x0000,     /* R5648 */
+    0x0000,     /* R5649 */
+    0x0000,     /* R5650 */
+    0x0000,     /* R5651 */
+    0x0000,     /* R5652 */
+    0x0000,     /* R5653 */
+    0x0000,     /* R5654 */
+    0x0000,     /* R5655 */
+    0x0000,     /* R5656 */
+    0x0000,     /* R5657 */
+    0x0000,     /* R5658 */
+    0x0000,     /* R5659 */
+    0x0000,     /* R5660 */
+    0x0000,     /* R5661 */
+    0x0000,     /* R5662 */
+    0x0000,     /* R5663 */
+    0x0000,     /* R5664 */
+    0x0000,     /* R5665 */
+    0x0000,     /* R5666 */
+    0x0000,     /* R5667 */
+    0x0000,     /* R5668 */
+    0x0000,     /* R5669 */
+    0x0000,     /* R5670 */
+    0x0000,     /* R5671 */
+    0x0000,     /* R5672 */
+    0x0000,     /* R5673 */
+    0x0000,     /* R5674 */
+    0x0000,     /* R5675 */
+    0x0000,     /* R5676 */
+    0x0000,     /* R5677 */
+    0x0000,     /* R5678 */
+    0x0000,     /* R5679 */
+    0x0000,     /* R5680 */
+    0x0000,     /* R5681 */
+    0x0000,     /* R5682 */
+    0x0000,     /* R5683 */
+    0x0000,     /* R5684 */
+    0x0000,     /* R5685 */
+    0x0000,     /* R5686 */
+    0x0000,     /* R5687 */
+    0x0000,     /* R5688 */
+    0x0000,     /* R5689 */
+    0x0000,     /* R5690 */
+    0x0000,     /* R5691 */
+    0x0000,     /* R5692 */
+    0x0000,     /* R5693 */
+    0x0000,     /* R5694 */
+    0x0000,     /* R5695 */
+    0x0000,     /* R5696 */
+    0x0000,     /* R5697 */
+    0x0000,     /* R5698 */
+    0x0000,     /* R5699 */
+    0x0000,     /* R5700 */
+    0x0000,     /* R5701 */
+    0x0000,     /* R5702 */
+    0x0000,     /* R5703 */
+    0x0000,     /* R5704 */
+    0x0000,     /* R5705 */
+    0x0000,     /* R5706 */
+    0x0000,     /* R5707 */
+    0x0000,     /* R5708 */
+    0x0000,     /* R5709 */
+    0x0000,     /* R5710 */
+    0x0000,     /* R5711 */
+    0x0000,     /* R5712 */
+    0x0000,     /* R5713 */
+    0x0000,     /* R5714 */
+    0x0000,     /* R5715 */
+    0x0000,     /* R5716 */
+    0x0000,     /* R5717 */
+    0x0000,     /* R5718 */
+    0x0000,     /* R5719 */
+    0x0000,     /* R5720 */
+    0x0000,     /* R5721 */
+    0x0000,     /* R5722 */
+    0x0000,     /* R5723 */
+    0x0000,     /* R5724 */
+    0x0000,     /* R5725 */
+    0x0000,     /* R5726 */
+    0x0000,     /* R5727 */
+    0x0000,     /* R5728 */
+    0x0000,     /* R5729 */
+    0x0000,     /* R5730 */
+    0x0000,     /* R5731 */
+    0x0000,     /* R5732 */
+    0x0000,     /* R5733 */
+    0x0000,     /* R5734 */
+    0x0000,     /* R5735 */
+    0x0000,     /* R5736 */
+    0x0000,     /* R5737 */
+    0x0000,     /* R5738 */
+    0x0000,     /* R5739 */
+    0x0000,     /* R5740 */
+    0x0000,     /* R5741 */
+    0x0000,     /* R5742 */
+    0x0000,     /* R5743 */
+    0x0000,     /* R5744 */
+    0x0000,     /* R5745 */
+    0x0000,     /* R5746 */
+    0x0000,     /* R5747 */
+    0x0000,     /* R5748 */
+    0x0000,     /* R5749 */
+    0x0000,     /* R5750 */
+    0x0000,     /* R5751 */
+    0x0000,     /* R5752 */
+    0x0000,     /* R5753 */
+    0x0000,     /* R5754 */
+    0x0000,     /* R5755 */
+    0x0000,     /* R5756 */
+    0x0000,     /* R5757 */
+    0x0000,     /* R5758 */
+    0x0000,     /* R5759 */
+    0x0000,     /* R5760 */
+    0x0000,     /* R5761 */
+    0x0000,     /* R5762 */
+    0x0000,     /* R5763 */
+    0x0000,     /* R5764 */
+    0x0000,     /* R5765 */
+    0x0000,     /* R5766 */
+    0x0000,     /* R5767 */
+    0x0000,     /* R5768 */
+    0x0000,     /* R5769 */
+    0x0000,     /* R5770 */
+    0x0000,     /* R5771 */
+    0x0000,     /* R5772 */
+    0x0000,     /* R5773 */
+    0x0000,     /* R5774 */
+    0x0000,     /* R5775 */
+    0x0000,     /* R5776 */
+    0x0000,     /* R5777 */
+    0x0000,     /* R5778 */
+    0x0000,     /* R5779 */
+    0x0000,     /* R5780 */
+    0x0000,     /* R5781 */
+    0x0000,     /* R5782 */
+    0x0000,     /* R5783 */
+    0x0000,     /* R5784 */
+    0x0000,     /* R5785 */
+    0x0000,     /* R5786 */
+    0x0000,     /* R5787 */
+    0x0000,     /* R5788 */
+    0x0000,     /* R5789 */
+    0x0000,     /* R5790 */
+    0x0000,     /* R5791 */
+    0x0000,     /* R5792 */
+    0x0000,     /* R5793 */
+    0x0000,     /* R5794 */
+    0x0000,     /* R5795 */
+    0x0000,     /* R5796 */
+    0x0000,     /* R5797 */
+    0x0000,     /* R5798 */
+    0x0000,     /* R5799 */
+    0x0000,     /* R5800 */
+    0x0000,     /* R5801 */
+    0x0000,     /* R5802 */
+    0x0000,     /* R5803 */
+    0x0000,     /* R5804 */
+    0x0000,     /* R5805 */
+    0x0000,     /* R5806 */
+    0x0000,     /* R5807 */
+    0x0000,     /* R5808 */
+    0x0000,     /* R5809 */
+    0x0000,     /* R5810 */
+    0x0000,     /* R5811 */
+    0x0000,     /* R5812 */
+    0x0000,     /* R5813 */
+    0x0000,     /* R5814 */
+    0x0000,     /* R5815 */
+    0x0000,     /* R5816 */
+    0x0000,     /* R5817 */
+    0x0000,     /* R5818 */
+    0x0000,     /* R5819 */
+    0x0000,     /* R5820 */
+    0x0000,     /* R5821 */
+    0x0000,     /* R5822 */
+    0x0000,     /* R5823 */
+    0x0000,     /* R5824 */
+    0x0000,     /* R5825 */
+    0x0000,     /* R5826 */
+    0x0000,     /* R5827 */
+    0x0000,     /* R5828 */
+    0x0000,     /* R5829 */
+    0x0000,     /* R5830 */
+    0x0000,     /* R5831 */
+    0x0000,     /* R5832 */
+    0x0000,     /* R5833 */
+    0x0000,     /* R5834 */
+    0x0000,     /* R5835 */
+    0x0000,     /* R5836 */
+    0x0000,     /* R5837 */
+    0x0000,     /* R5838 */
+    0x0000,     /* R5839 */
+    0x0000,     /* R5840 */
+    0x0000,     /* R5841 */
+    0x0000,     /* R5842 */
+    0x0000,     /* R5843 */
+    0x0000,     /* R5844 */
+    0x0000,     /* R5845 */
+    0x0000,     /* R5846 */
+    0x0000,     /* R5847 */
+    0x0000,     /* R5848 */
+    0x0000,     /* R5849 */
+    0x0000,     /* R5850 */
+    0x0000,     /* R5851 */
+    0x0000,     /* R5852 */
+    0x0000,     /* R5853 */
+    0x0000,     /* R5854 */
+    0x0000,     /* R5855 */
+    0x0000,     /* R5856 */
+    0x0000,     /* R5857 */
+    0x0000,     /* R5858 */
+    0x0000,     /* R5859 */
+    0x0000,     /* R5860 */
+    0x0000,     /* R5861 */
+    0x0000,     /* R5862 */
+    0x0000,     /* R5863 */
+    0x0000,     /* R5864 */
+    0x0000,     /* R5865 */
+    0x0000,     /* R5866 */
+    0x0000,     /* R5867 */
+    0x0000,     /* R5868 */
+    0x0000,     /* R5869 */
+    0x0000,     /* R5870 */
+    0x0000,     /* R5871 */
+    0x0000,     /* R5872 */
+    0x0000,     /* R5873 */
+    0x0000,     /* R5874 */
+    0x0000,     /* R5875 */
+    0x0000,     /* R5876 */
+    0x0000,     /* R5877 */
+    0x0000,     /* R5878 */
+    0x0000,     /* R5879 */
+    0x0000,     /* R5880 */
+    0x0000,     /* R5881 */
+    0x0000,     /* R5882 */
+    0x0000,     /* R5883 */
+    0x0000,     /* R5884 */
+    0x0000,     /* R5885 */
+    0x0000,     /* R5886 */
+    0x0000,     /* R5887 */
+    0x0000,     /* R5888 */
+    0x0000,     /* R5889 */
+    0x0000,     /* R5890 */
+    0x0000,     /* R5891 */
+    0x0000,     /* R5892 */
+    0x0000,     /* R5893 */
+    0x0000,     /* R5894 */
+    0x0000,     /* R5895 */
+    0x0000,     /* R5896 */
+    0x0000,     /* R5897 */
+    0x0000,     /* R5898 */
+    0x0000,     /* R5899 */
+    0x0000,     /* R5900 */
+    0x0000,     /* R5901 */
+    0x0000,     /* R5902 */
+    0x0000,     /* R5903 */
+    0x0000,     /* R5904 */
+    0x0000,     /* R5905 */
+    0x0000,     /* R5906 */
+    0x0000,     /* R5907 */
+    0x0000,     /* R5908 */
+    0x0000,     /* R5909 */
+    0x0000,     /* R5910 */
+    0x0000,     /* R5911 */
+    0x0000,     /* R5912 */
+    0x0000,     /* R5913 */
+    0x0000,     /* R5914 */
+    0x0000,     /* R5915 */
+    0x0000,     /* R5916 */
+    0x0000,     /* R5917 */
+    0x0000,     /* R5918 */
+    0x0000,     /* R5919 */
+    0x0000,     /* R5920 */
+    0x0000,     /* R5921 */
+    0x0000,     /* R5922 */
+    0x0000,     /* R5923 */
+    0x0000,     /* R5924 */
+    0x0000,     /* R5925 */
+    0x0000,     /* R5926 */
+    0x0000,     /* R5927 */
+    0x0000,     /* R5928 */
+    0x0000,     /* R5929 */
+    0x0000,     /* R5930 */
+    0x0000,     /* R5931 */
+    0x0000,     /* R5932 */
+    0x0000,     /* R5933 */
+    0x0000,     /* R5934 */
+    0x0000,     /* R5935 */
+    0x0000,     /* R5936 */
+    0x0000,     /* R5937 */
+    0x0000,     /* R5938 */
+    0x0000,     /* R5939 */
+    0x0000,     /* R5940 */
+    0x0000,     /* R5941 */
+    0x0000,     /* R5942 */
+    0x0000,     /* R5943 */
+    0x0000,     /* R5944 */
+    0x0000,     /* R5945 */
+    0x0000,     /* R5946 */
+    0x0000,     /* R5947 */
+    0x0000,     /* R5948 */
+    0x0000,     /* R5949 */
+    0x0000,     /* R5950 */
+    0x0000,     /* R5951 */
+    0x0000,     /* R5952 */
+    0x0000,     /* R5953 */
+    0x0000,     /* R5954 */
+    0x0000,     /* R5955 */
+    0x0000,     /* R5956 */
+    0x0000,     /* R5957 */
+    0x0000,     /* R5958 */
+    0x0000,     /* R5959 */
+    0x0000,     /* R5960 */
+    0x0000,     /* R5961 */
+    0x0000,     /* R5962 */
+    0x0000,     /* R5963 */
+    0x0000,     /* R5964 */
+    0x0000,     /* R5965 */
+    0x0000,     /* R5966 */
+    0x0000,     /* R5967 */
+    0x0000,     /* R5968 */
+    0x0000,     /* R5969 */
+    0x0000,     /* R5970 */
+    0x0000,     /* R5971 */
+    0x0000,     /* R5972 */
+    0x0000,     /* R5973 */
+    0x0000,     /* R5974 */
+    0x0000,     /* R5975 */
+    0x0000,     /* R5976 */
+    0x0000,     /* R5977 */
+    0x0000,     /* R5978 */
+    0x0000,     /* R5979 */
+    0x0000,     /* R5980 */
+    0x0000,     /* R5981 */
+    0x0000,     /* R5982 */
+    0x0000,     /* R5983 */
+    0x0000,     /* R5984 */
+    0x0000,     /* R5985 */
+    0x0000,     /* R5986 */
+    0x0000,     /* R5987 */
+    0x0000,     /* R5988 */
+    0x0000,     /* R5989 */
+    0x0000,     /* R5990 */
+    0x0000,     /* R5991 */
+    0x0000,     /* R5992 */
+    0x0000,     /* R5993 */
+    0x0000,     /* R5994 */
+    0x0000,     /* R5995 */
+    0x0000,     /* R5996 */
+    0x0000,     /* R5997 */
+    0x0000,     /* R5998 */
+    0x0000,     /* R5999 */
+    0x0000,     /* R6000 */
+    0x0000,     /* R6001 */
+    0x0000,     /* R6002 */
+    0x0000,     /* R6003 */
+    0x0000,     /* R6004 */
+    0x0000,     /* R6005 */
+    0x0000,     /* R6006 */
+    0x0000,     /* R6007 */
+    0x0000,     /* R6008 */
+    0x0000,     /* R6009 */
+    0x0000,     /* R6010 */
+    0x0000,     /* R6011 */
+    0x0000,     /* R6012 */
+    0x0000,     /* R6013 */
+    0x0000,     /* R6014 */
+    0x0000,     /* R6015 */
+    0x0000,     /* R6016 */
+    0x0000,     /* R6017 */
+    0x0000,     /* R6018 */
+    0x0000,     /* R6019 */
+    0x0000,     /* R6020 */
+    0x0000,     /* R6021 */
+    0x0000,     /* R6022 */
+    0x0000,     /* R6023 */
+    0x0000,     /* R6024 */
+    0x0000,     /* R6025 */
+    0x0000,     /* R6026 */
+    0x0000,     /* R6027 */
+    0x0000,     /* R6028 */
+    0x0000,     /* R6029 */
+    0x0000,     /* R6030 */
+    0x0000,     /* R6031 */
+    0x0000,     /* R6032 */
+    0x0000,     /* R6033 */
+    0x0000,     /* R6034 */
+    0x0000,     /* R6035 */
+    0x0000,     /* R6036 */
+    0x0000,     /* R6037 */
+    0x0000,     /* R6038 */
+    0x0000,     /* R6039 */
+    0x0000,     /* R6040 */
+    0x0000,     /* R6041 */
+    0x0000,     /* R6042 */
+    0x0000,     /* R6043 */
+    0x0000,     /* R6044 */
+    0x0000,     /* R6045 */
+    0x0000,     /* R6046 */
+    0x0000,     /* R6047 */
+    0x0000,     /* R6048 */
+    0x0000,     /* R6049 */
+    0x0000,     /* R6050 */
+    0x0000,     /* R6051 */
+    0x0000,     /* R6052 */
+    0x0000,     /* R6053 */
+    0x0000,     /* R6054 */
+    0x0000,     /* R6055 */
+    0x0000,     /* R6056 */
+    0x0000,     /* R6057 */
+    0x0000,     /* R6058 */
+    0x0000,     /* R6059 */
+    0x0000,     /* R6060 */
+    0x0000,     /* R6061 */
+    0x0000,     /* R6062 */
+    0x0000,     /* R6063 */
+    0x0000,     /* R6064 */
+    0x0000,     /* R6065 */
+    0x0000,     /* R6066 */
+    0x0000,     /* R6067 */
+    0x0000,     /* R6068 */
+    0x0000,     /* R6069 */
+    0x0000,     /* R6070 */
+    0x0000,     /* R6071 */
+    0x0000,     /* R6072 */
+    0x0000,     /* R6073 */
+    0x0000,     /* R6074 */
+    0x0000,     /* R6075 */
+    0x0000,     /* R6076 */
+    0x0000,     /* R6077 */
+    0x0000,     /* R6078 */
+    0x0000,     /* R6079 */
+    0x0000,     /* R6080 */
+    0x0000,     /* R6081 */
+    0x0000,     /* R6082 */
+    0x0000,     /* R6083 */
+    0x0000,     /* R6084 */
+    0x0000,     /* R6085 */
+    0x0000,     /* R6086 */
+    0x0000,     /* R6087 */
+    0x0000,     /* R6088 */
+    0x0000,     /* R6089 */
+    0x0000,     /* R6090 */
+    0x0000,     /* R6091 */
+    0x0000,     /* R6092 */
+    0x0000,     /* R6093 */
+    0x0000,     /* R6094 */
+    0x0000,     /* R6095 */
+    0x0000,     /* R6096 */
+    0x0000,     /* R6097 */
+    0x0000,     /* R6098 */
+    0x0000,     /* R6099 */
+    0x0000,     /* R6100 */
+    0x0000,     /* R6101 */
+    0x0000,     /* R6102 */
+    0x0000,     /* R6103 */
+    0x0000,     /* R6104 */
+    0x0000,     /* R6105 */
+    0x0000,     /* R6106 */
+    0x0000,     /* R6107 */
+    0x0000,     /* R6108 */
+    0x0000,     /* R6109 */
+    0x0000,     /* R6110 */
+    0x0000,     /* R6111 */
+    0x0000,     /* R6112 */
+    0x0000,     /* R6113 */
+    0x0000,     /* R6114 */
+    0x0000,     /* R6115 */
+    0x0000,     /* R6116 */
+    0x0000,     /* R6117 */
+    0x0000,     /* R6118 */
+    0x0000,     /* R6119 */
+    0x0000,     /* R6120 */
+    0x0000,     /* R6121 */
+    0x0000,     /* R6122 */
+    0x0000,     /* R6123 */
+    0x0000,     /* R6124 */
+    0x0000,     /* R6125 */
+    0x0000,     /* R6126 */
+    0x0000,     /* R6127 */
+    0x0000,     /* R6128 */
+    0x0000,     /* R6129 */
+    0x0000,     /* R6130 */
+    0x0000,     /* R6131 */
+    0x0000,     /* R6132 */
+    0x0000,     /* R6133 */
+    0x0000,     /* R6134 */
+    0x0000,     /* R6135 */
+    0x0000,     /* R6136 */
+    0x0000,     /* R6137 */
+    0x0000,     /* R6138 */
+    0x0000,     /* R6139 */
+    0x0000,     /* R6140 */
+    0x0000,     /* R6141 */
+    0x0000,     /* R6142 */
+    0x0000,     /* R6143 */
+    0x0000,     /* R6144 */
+    0x0000,     /* R6145 */
+    0x0000,     /* R6146 */
+    0x0000,     /* R6147 */
+    0x0000,     /* R6148 */
+    0x0000,     /* R6149 */
+    0x0000,     /* R6150 */
+    0x0000,     /* R6151 */
+    0x0000,     /* R6152 */
+    0x0000,     /* R6153 */
+    0x0000,     /* R6154 */
+    0x0000,     /* R6155 */
+    0x0000,     /* R6156 */
+    0x0000,     /* R6157 */
+    0x0000,     /* R6158 */
+    0x0000,     /* R6159 */
+    0x0000,     /* R6160 */
+    0x0000,     /* R6161 */
+    0x0000,     /* R6162 */
+    0x0000,     /* R6163 */
+    0x0000,     /* R6164 */
+    0x0000,     /* R6165 */
+    0x0000,     /* R6166 */
+    0x0000,     /* R6167 */
+    0x0000,     /* R6168 */
+    0x0000,     /* R6169 */
+    0x0000,     /* R6170 */
+    0x0000,     /* R6171 */
+    0x0000,     /* R6172 */
+    0x0000,     /* R6173 */
+    0x0000,     /* R6174 */
+    0x0000,     /* R6175 */
+    0x0000,     /* R6176 */
+    0x0000,     /* R6177 */
+    0x0000,     /* R6178 */
+    0x0000,     /* R6179 */
+    0x0000,     /* R6180 */
+    0x0000,     /* R6181 */
+    0x0000,     /* R6182 */
+    0x0000,     /* R6183 */
+    0x0000,     /* R6184 */
+    0x0000,     /* R6185 */
+    0x0000,     /* R6186 */
+    0x0000,     /* R6187 */
+    0x0000,     /* R6188 */
+    0x0000,     /* R6189 */
+    0x0000,     /* R6190 */
+    0x0000,     /* R6191 */
+    0x0000,     /* R6192 */
+    0x0000,     /* R6193 */
+    0x0000,     /* R6194 */
+    0x0000,     /* R6195 */
+    0x0000,     /* R6196 */
+    0x0000,     /* R6197 */
+    0x0000,     /* R6198 */
+    0x0000,     /* R6199 */
+    0x0000,     /* R6200 */
+    0x0000,     /* R6201 */
+    0x0000,     /* R6202 */
+    0x0000,     /* R6203 */
+    0x0000,     /* R6204 */
+    0x0000,     /* R6205 */
+    0x0000,     /* R6206 */
+    0x0000,     /* R6207 */
+    0x0000,     /* R6208 */
+    0x0000,     /* R6209 */
+    0x0000,     /* R6210 */
+    0x0000,     /* R6211 */
+    0x0000,     /* R6212 */
+    0x0000,     /* R6213 */
+    0x0000,     /* R6214 */
+    0x0000,     /* R6215 */
+    0x0000,     /* R6216 */
+    0x0000,     /* R6217 */
+    0x0000,     /* R6218 */
+    0x0000,     /* R6219 */
+    0x0000,     /* R6220 */
+    0x0000,     /* R6221 */
+    0x0000,     /* R6222 */
+    0x0000,     /* R6223 */
+    0x0000,     /* R6224 */
+    0x0000,     /* R6225 */
+    0x0000,     /* R6226 */
+    0x0000,     /* R6227 */
+    0x0000,     /* R6228 */
+    0x0000,     /* R6229 */
+    0x0000,     /* R6230 */
+    0x0000,     /* R6231 */
+    0x0000,     /* R6232 */
+    0x0000,     /* R6233 */
+    0x0000,     /* R6234 */
+    0x0000,     /* R6235 */
+    0x0000,     /* R6236 */
+    0x0000,     /* R6237 */
+    0x0000,     /* R6238 */
+    0x0000,     /* R6239 */
+    0x0000,     /* R6240 */
+    0x0000,     /* R6241 */
+    0x0000,     /* R6242 */
+    0x0000,     /* R6243 */
+    0x0000,     /* R6244 */
+    0x0000,     /* R6245 */
+    0x0000,     /* R6246 */
+    0x0000,     /* R6247 */
+    0x0000,     /* R6248 */
+    0x0000,     /* R6249 */
+    0x0000,     /* R6250 */
+    0x0000,     /* R6251 */
+    0x0000,     /* R6252 */
+    0x0000,     /* R6253 */
+    0x0000,     /* R6254 */
+    0x0000,     /* R6255 */
+    0x0000,     /* R6256 */
+    0x0000,     /* R6257 */
+    0x0000,     /* R6258 */
+    0x0000,     /* R6259 */
+    0x0000,     /* R6260 */
+    0x0000,     /* R6261 */
+    0x0000,     /* R6262 */
+    0x0000,     /* R6263 */
+    0x0000,     /* R6264 */
+    0x0000,     /* R6265 */
+    0x0000,     /* R6266 */
+    0x0000,     /* R6267 */
+    0x0000,     /* R6268 */
+    0x0000,     /* R6269 */
+    0x0000,     /* R6270 */
+    0x0000,     /* R6271 */
+    0x0000,     /* R6272 */
+    0x0000,     /* R6273 */
+    0x0000,     /* R6274 */
+    0x0000,     /* R6275 */
+    0x0000,     /* R6276 */
+    0x0000,     /* R6277 */
+    0x0000,     /* R6278 */
+    0x0000,     /* R6279 */
+    0x0000,     /* R6280 */
+    0x0000,     /* R6281 */
+    0x0000,     /* R6282 */
+    0x0000,     /* R6283 */
+    0x0000,     /* R6284 */
+    0x0000,     /* R6285 */
+    0x0000,     /* R6286 */
+    0x0000,     /* R6287 */
+    0x0000,     /* R6288 */
+    0x0000,     /* R6289 */
+    0x0000,     /* R6290 */
+    0x0000,     /* R6291 */
+    0x0000,     /* R6292 */
+    0x0000,     /* R6293 */
+    0x0000,     /* R6294 */
+    0x0000,     /* R6295 */
+    0x0000,     /* R6296 */
+    0x0000,     /* R6297 */
+    0x0000,     /* R6298 */
+    0x0000,     /* R6299 */
+    0x0000,     /* R6300 */
+    0x0000,     /* R6301 */
+    0x0000,     /* R6302 */
+    0x0000,     /* R6303 */
+    0x0000,     /* R6304 */
+    0x0000,     /* R6305 */
+    0x0000,     /* R6306 */
+    0x0000,     /* R6307 */
+    0x0000,     /* R6308 */
+    0x0000,     /* R6309 */
+    0x0000,     /* R6310 */
+    0x0000,     /* R6311 */
+    0x0000,     /* R6312 */
+    0x0000,     /* R6313 */
+    0x0000,     /* R6314 */
+    0x0000,     /* R6315 */
+    0x0000,     /* R6316 */
+    0x0000,     /* R6317 */
+    0x0000,     /* R6318 */
+    0x0000,     /* R6319 */
+    0x0000,     /* R6320 */
+    0x0000,     /* R6321 */
+    0x0000,     /* R6322 */
+    0x0000,     /* R6323 */
+    0x0000,     /* R6324 */
+    0x0000,     /* R6325 */
+    0x0000,     /* R6326 */
+    0x0000,     /* R6327 */
+    0x0000,     /* R6328 */
+    0x0000,     /* R6329 */
+    0x0000,     /* R6330 */
+    0x0000,     /* R6331 */
+    0x0000,     /* R6332 */
+    0x0000,     /* R6333 */
+    0x0000,     /* R6334 */
+    0x0000,     /* R6335 */
+    0x0000,     /* R6336 */
+    0x0000,     /* R6337 */
+    0x0000,     /* R6338 */
+    0x0000,     /* R6339 */
+    0x0000,     /* R6340 */
+    0x0000,     /* R6341 */
+    0x0000,     /* R6342 */
+    0x0000,     /* R6343 */
+    0x0000,     /* R6344 */
+    0x0000,     /* R6345 */
+    0x0000,     /* R6346 */
+    0x0000,     /* R6347 */
+    0x0000,     /* R6348 */
+    0x0000,     /* R6349 */
+    0x0000,     /* R6350 */
+    0x0000,     /* R6351 */
+    0x0000,     /* R6352 */
+    0x0000,     /* R6353 */
+    0x0000,     /* R6354 */
+    0x0000,     /* R6355 */
+    0x0000,     /* R6356 */
+    0x0000,     /* R6357 */
+    0x0000,     /* R6358 */
+    0x0000,     /* R6359 */
+    0x0000,     /* R6360 */
+    0x0000,     /* R6361 */
+    0x0000,     /* R6362 */
+    0x0000,     /* R6363 */
+    0x0000,     /* R6364 */
+    0x0000,     /* R6365 */
+    0x0000,     /* R6366 */
+    0x0000,     /* R6367 */
+    0x0000,     /* R6368 */
+    0x0000,     /* R6369 */
+    0x0000,     /* R6370 */
+    0x0000,     /* R6371 */
+    0x0000,     /* R6372 */
+    0x0000,     /* R6373 */
+    0x0000,     /* R6374 */
+    0x0000,     /* R6375 */
+    0x0000,     /* R6376 */
+    0x0000,     /* R6377 */
+    0x0000,     /* R6378 */
+    0x0000,     /* R6379 */
+    0x0000,     /* R6380 */
+    0x0000,     /* R6381 */
+    0x0000,     /* R6382 */
+    0x0000,     /* R6383 */
+    0x0000,     /* R6384 */
+    0x0000,     /* R6385 */
+    0x0000,     /* R6386 */
+    0x0000,     /* R6387 */
+    0x0000,     /* R6388 */
+    0x0000,     /* R6389 */
+    0x0000,     /* R6390 */
+    0x0000,     /* R6391 */
+    0x0000,     /* R6392 */
+    0x0000,     /* R6393 */
+    0x0000,     /* R6394 */
+    0x0000,     /* R6395 */
+    0x0000,     /* R6396 */
+    0x0000,     /* R6397 */
+    0x0000,     /* R6398 */
+    0x0000,     /* R6399 */
+    0x0000,     /* R6400 */
+    0x0000,     /* R6401 */
+    0x0000,     /* R6402 */
+    0x0000,     /* R6403 */
+    0x0000,     /* R6404 */
+    0x0000,     /* R6405 */
+    0x0000,     /* R6406 */
+    0x0000,     /* R6407 */
+    0x0000,     /* R6408 */
+    0x0000,     /* R6409 */
+    0x0000,     /* R6410 */
+    0x0000,     /* R6411 */
+    0x0000,     /* R6412 */
+    0x0000,     /* R6413 */
+    0x0000,     /* R6414 */
+    0x0000,     /* R6415 */
+    0x0000,     /* R6416 */
+    0x0000,     /* R6417 */
+    0x0000,     /* R6418 */
+    0x0000,     /* R6419 */
+    0x0000,     /* R6420 */
+    0x0000,     /* R6421 */
+    0x0000,     /* R6422 */
+    0x0000,     /* R6423 */
+    0x0000,     /* R6424 */
+    0x0000,     /* R6425 */
+    0x0000,     /* R6426 */
+    0x0000,     /* R6427 */
+    0x0000,     /* R6428 */
+    0x0000,     /* R6429 */
+    0x0000,     /* R6430 */
+    0x0000,     /* R6431 */
+    0x0000,     /* R6432 */
+    0x0000,     /* R6433 */
+    0x0000,     /* R6434 */
+    0x0000,     /* R6435 */
+    0x0000,     /* R6436 */
+    0x0000,     /* R6437 */
+    0x0000,     /* R6438 */
+    0x0000,     /* R6439 */
+    0x0000,     /* R6440 */
+    0x0000,     /* R6441 */
+    0x0000,     /* R6442 */
+    0x0000,     /* R6443 */
+    0x0000,     /* R6444 */
+    0x0000,     /* R6445 */
+    0x0000,     /* R6446 */
+    0x0000,     /* R6447 */
+    0x0000,     /* R6448 */
+    0x0000,     /* R6449 */
+    0x0000,     /* R6450 */
+    0x0000,     /* R6451 */
+    0x0000,     /* R6452 */
+    0x0000,     /* R6453 */
+    0x0000,     /* R6454 */
+    0x0000,     /* R6455 */
+    0x0000,     /* R6456 */
+    0x0000,     /* R6457 */
+    0x0000,     /* R6458 */
+    0x0000,     /* R6459 */
+    0x0000,     /* R6460 */
+    0x0000,     /* R6461 */
+    0x0000,     /* R6462 */
+    0x0000,     /* R6463 */
+    0x0000,     /* R6464 */
+    0x0000,     /* R6465 */
+    0x0000,     /* R6466 */
+    0x0000,     /* R6467 */
+    0x0000,     /* R6468 */
+    0x0000,     /* R6469 */
+    0x0000,     /* R6470 */
+    0x0000,     /* R6471 */
+    0x0000,     /* R6472 */
+    0x0000,     /* R6473 */
+    0x0000,     /* R6474 */
+    0x0000,     /* R6475 */
+    0x0000,     /* R6476 */
+    0x0000,     /* R6477 */
+    0x0000,     /* R6478 */
+    0x0000,     /* R6479 */
+    0x0000,     /* R6480 */
+    0x0000,     /* R6481 */
+    0x0000,     /* R6482 */
+    0x0000,     /* R6483 */
+    0x0000,     /* R6484 */
+    0x0000,     /* R6485 */
+    0x0000,     /* R6486 */
+    0x0000,     /* R6487 */
+    0x0000,     /* R6488 */
+    0x0000,     /* R6489 */
+    0x0000,     /* R6490 */
+    0x0000,     /* R6491 */
+    0x0000,     /* R6492 */
+    0x0000,     /* R6493 */
+    0x0000,     /* R6494 */
+    0x0000,     /* R6495 */
+    0x0000,     /* R6496 */
+    0x0000,     /* R6497 */
+    0x0000,     /* R6498 */
+    0x0000,     /* R6499 */
+    0x0000,     /* R6500 */
+    0x0000,     /* R6501 */
+    0x0000,     /* R6502 */
+    0x0000,     /* R6503 */
+    0x0000,     /* R6504 */
+    0x0000,     /* R6505 */
+    0x0000,     /* R6506 */
+    0x0000,     /* R6507 */
+    0x0000,     /* R6508 */
+    0x0000,     /* R6509 */
+    0x0000,     /* R6510 */
+    0x0000,     /* R6511 */
+    0x0000,     /* R6512 */
+    0x0000,     /* R6513 */
+    0x0000,     /* R6514 */
+    0x0000,     /* R6515 */
+    0x0000,     /* R6516 */
+    0x0000,     /* R6517 */
+    0x0000,     /* R6518 */
+    0x0000,     /* R6519 */
+    0x0000,     /* R6520 */
+    0x0000,     /* R6521 */
+    0x0000,     /* R6522 */
+    0x0000,     /* R6523 */
+    0x0000,     /* R6524 */
+    0x0000,     /* R6525 */
+    0x0000,     /* R6526 */
+    0x0000,     /* R6527 */
+    0x0000,     /* R6528 */
+    0x0000,     /* R6529 */
+    0x0000,     /* R6530 */
+    0x0000,     /* R6531 */
+    0x0000,     /* R6532 */
+    0x0000,     /* R6533 */
+    0x0000,     /* R6534 */
+    0x0000,     /* R6535 */
+    0x0000,     /* R6536 */
+    0x0000,     /* R6537 */
+    0x0000,     /* R6538 */
+    0x0000,     /* R6539 */
+    0x0000,     /* R6540 */
+    0x0000,     /* R6541 */
+    0x0000,     /* R6542 */
+    0x0000,     /* R6543 */
+    0x0000,     /* R6544 */
+    0x0000,     /* R6545 */
+    0x0000,     /* R6546 */
+    0x0000,     /* R6547 */
+    0x0000,     /* R6548 */
+    0x0000,     /* R6549 */
+    0x0000,     /* R6550 */
+    0x0000,     /* R6551 */
+    0x0000,     /* R6552 */
+    0x0000,     /* R6553 */
+    0x0000,     /* R6554 */
+    0x0000,     /* R6555 */
+    0x0000,     /* R6556 */
+    0x0000,     /* R6557 */
+    0x0000,     /* R6558 */
+    0x0000,     /* R6559 */
+    0x0000,     /* R6560 */
+    0x0000,     /* R6561 */
+    0x0000,     /* R6562 */
+    0x0000,     /* R6563 */
+    0x0000,     /* R6564 */
+    0x0000,     /* R6565 */
+    0x0000,     /* R6566 */
+    0x0000,     /* R6567 */
+    0x0000,     /* R6568 */
+    0x0000,     /* R6569 */
+    0x0000,     /* R6570 */
+    0x0000,     /* R6571 */
+    0x0000,     /* R6572 */
+    0x0000,     /* R6573 */
+    0x0000,     /* R6574 */
+    0x0000,     /* R6575 */
+    0x0000,     /* R6576 */
+    0x0000,     /* R6577 */
+    0x0000,     /* R6578 */
+    0x0000,     /* R6579 */
+    0x0000,     /* R6580 */
+    0x0000,     /* R6581 */
+    0x0000,     /* R6582 */
+    0x0000,     /* R6583 */
+    0x0000,     /* R6584 */
+    0x0000,     /* R6585 */
+    0x0000,     /* R6586 */
+    0x0000,     /* R6587 */
+    0x0000,     /* R6588 */
+    0x0000,     /* R6589 */
+    0x0000,     /* R6590 */
+    0x0000,     /* R6591 */
+    0x0000,     /* R6592 */
+    0x0000,     /* R6593 */
+    0x0000,     /* R6594 */
+    0x0000,     /* R6595 */
+    0x0000,     /* R6596 */
+    0x0000,     /* R6597 */
+    0x0000,     /* R6598 */
+    0x0000,     /* R6599 */
+    0x0000,     /* R6600 */
+    0x0000,     /* R6601 */
+    0x0000,     /* R6602 */
+    0x0000,     /* R6603 */
+    0x0000,     /* R6604 */
+    0x0000,     /* R6605 */
+    0x0000,     /* R6606 */
+    0x0000,     /* R6607 */
+    0x0000,     /* R6608 */
+    0x0000,     /* R6609 */
+    0x0000,     /* R6610 */
+    0x0000,     /* R6611 */
+    0x0000,     /* R6612 */
+    0x0000,     /* R6613 */
+    0x0000,     /* R6614 */
+    0x0000,     /* R6615 */
+    0x0000,     /* R6616 */
+    0x0000,     /* R6617 */
+    0x0000,     /* R6618 */
+    0x0000,     /* R6619 */
+    0x0000,     /* R6620 */
+    0x0000,     /* R6621 */
+    0x0000,     /* R6622 */
+    0x0000,     /* R6623 */
+    0x0000,     /* R6624 */
+    0x0000,     /* R6625 */
+    0x0000,     /* R6626 */
+    0x0000,     /* R6627 */
+    0x0000,     /* R6628 */
+    0x0000,     /* R6629 */
+    0x0000,     /* R6630 */
+    0x0000,     /* R6631 */
+    0x0000,     /* R6632 */
+    0x0000,     /* R6633 */
+    0x0000,     /* R6634 */
+    0x0000,     /* R6635 */
+    0x0000,     /* R6636 */
+    0x0000,     /* R6637 */
+    0x0000,     /* R6638 */
+    0x0000,     /* R6639 */
+    0x0000,     /* R6640 */
+    0x0000,     /* R6641 */
+    0x0000,     /* R6642 */
+    0x0000,     /* R6643 */
+    0x0000,     /* R6644 */
+    0x0000,     /* R6645 */
+    0x0000,     /* R6646 */
+    0x0000,     /* R6647 */
+    0x0000,     /* R6648 */
+    0x0000,     /* R6649 */
+    0x0000,     /* R6650 */
+    0x0000,     /* R6651 */
+    0x0000,     /* R6652 */
+    0x0000,     /* R6653 */
+    0x0000,     /* R6654 */
+    0x0000,     /* R6655 */
+    0x0000,     /* R6656 */
+    0x0000,     /* R6657 */
+    0x0000,     /* R6658 */
+    0x0000,     /* R6659 */
+    0x0000,     /* R6660 */
+    0x0000,     /* R6661 */
+    0x0000,     /* R6662 */
+    0x0000,     /* R6663 */
+    0x0000,     /* R6664 */
+    0x0000,     /* R6665 */
+    0x0000,     /* R6666 */
+    0x0000,     /* R6667 */
+    0x0000,     /* R6668 */
+    0x0000,     /* R6669 */
+    0x0000,     /* R6670 */
+    0x0000,     /* R6671 */
+    0x0000,     /* R6672 */
+    0x0000,     /* R6673 */
+    0x0000,     /* R6674 */
+    0x0000,     /* R6675 */
+    0x0000,     /* R6676 */
+    0x0000,     /* R6677 */
+    0x0000,     /* R6678 */
+    0x0000,     /* R6679 */
+    0x0000,     /* R6680 */
+    0x0000,     /* R6681 */
+    0x0000,     /* R6682 */
+    0x0000,     /* R6683 */
+    0x0000,     /* R6684 */
+    0x0000,     /* R6685 */
+    0x0000,     /* R6686 */
+    0x0000,     /* R6687 */
+    0x0000,     /* R6688 */
+    0x0000,     /* R6689 */
+    0x0000,     /* R6690 */
+    0x0000,     /* R6691 */
+    0x0000,     /* R6692 */
+    0x0000,     /* R6693 */
+    0x0000,     /* R6694 */
+    0x0000,     /* R6695 */
+    0x0000,     /* R6696 */
+    0x0000,     /* R6697 */
+    0x0000,     /* R6698 */
+    0x0000,     /* R6699 */
+    0x0000,     /* R6700 */
+    0x0000,     /* R6701 */
+    0x0000,     /* R6702 */
+    0x0000,     /* R6703 */
+    0x0000,     /* R6704 */
+    0x0000,     /* R6705 */
+    0x0000,     /* R6706 */
+    0x0000,     /* R6707 */
+    0x0000,     /* R6708 */
+    0x0000,     /* R6709 */
+    0x0000,     /* R6710 */
+    0x0000,     /* R6711 */
+    0x0000,     /* R6712 */
+    0x0000,     /* R6713 */
+    0x0000,     /* R6714 */
+    0x0000,     /* R6715 */
+    0x0000,     /* R6716 */
+    0x0000,     /* R6717 */
+    0x0000,     /* R6718 */
+    0x0000,     /* R6719 */
+    0x0000,     /* R6720 */
+    0x0000,     /* R6721 */
+    0x0000,     /* R6722 */
+    0x0000,     /* R6723 */
+    0x0000,     /* R6724 */
+    0x0000,     /* R6725 */
+    0x0000,     /* R6726 */
+    0x0000,     /* R6727 */
+    0x0000,     /* R6728 */
+    0x0000,     /* R6729 */
+    0x0000,     /* R6730 */
+    0x0000,     /* R6731 */
+    0x0000,     /* R6732 */
+    0x0000,     /* R6733 */
+    0x0000,     /* R6734 */
+    0x0000,     /* R6735 */
+    0x0000,     /* R6736 */
+    0x0000,     /* R6737 */
+    0x0000,     /* R6738 */
+    0x0000,     /* R6739 */
+    0x0000,     /* R6740 */
+    0x0000,     /* R6741 */
+    0x0000,     /* R6742 */
+    0x0000,     /* R6743 */
+    0x0000,     /* R6744 */
+    0x0000,     /* R6745 */
+    0x0000,     /* R6746 */
+    0x0000,     /* R6747 */
+    0x0000,     /* R6748 */
+    0x0000,     /* R6749 */
+    0x0000,     /* R6750 */
+    0x0000,     /* R6751 */
+    0x0000,     /* R6752 */
+    0x0000,     /* R6753 */
+    0x0000,     /* R6754 */
+    0x0000,     /* R6755 */
+    0x0000,     /* R6756 */
+    0x0000,     /* R6757 */
+    0x0000,     /* R6758 */
+    0x0000,     /* R6759 */
+    0x0000,     /* R6760 */
+    0x0000,     /* R6761 */
+    0x0000,     /* R6762 */
+    0x0000,     /* R6763 */
+    0x0000,     /* R6764 */
+    0x0000,     /* R6765 */
+    0x0000,     /* R6766 */
+    0x0000,     /* R6767 */
+    0x0000,     /* R6768 */
+    0x0000,     /* R6769 */
+    0x0000,     /* R6770 */
+    0x0000,     /* R6771 */
+    0x0000,     /* R6772 */
+    0x0000,     /* R6773 */
+    0x0000,     /* R6774 */
+    0x0000,     /* R6775 */
+    0x0000,     /* R6776 */
+    0x0000,     /* R6777 */
+    0x0000,     /* R6778 */
+    0x0000,     /* R6779 */
+    0x0000,     /* R6780 */
+    0x0000,     /* R6781 */
+    0x0000,     /* R6782 */
+    0x0000,     /* R6783 */
+    0x0000,     /* R6784 */
+    0x0000,     /* R6785 */
+    0x0000,     /* R6786 */
+    0x0000,     /* R6787 */
+    0x0000,     /* R6788 */
+    0x0000,     /* R6789 */
+    0x0000,     /* R6790 */
+    0x0000,     /* R6791 */
+    0x0000,     /* R6792 */
+    0x0000,     /* R6793 */
+    0x0000,     /* R6794 */
+    0x0000,     /* R6795 */
+    0x0000,     /* R6796 */
+    0x0000,     /* R6797 */
+    0x0000,     /* R6798 */
+    0x0000,     /* R6799 */
+    0x0000,     /* R6800 */
+    0x0000,     /* R6801 */
+    0x0000,     /* R6802 */
+    0x0000,     /* R6803 */
+    0x0000,     /* R6804 */
+    0x0000,     /* R6805 */
+    0x0000,     /* R6806 */
+    0x0000,     /* R6807 */
+    0x0000,     /* R6808 */
+    0x0000,     /* R6809 */
+    0x0000,     /* R6810 */
+    0x0000,     /* R6811 */
+    0x0000,     /* R6812 */
+    0x0000,     /* R6813 */
+    0x0000,     /* R6814 */
+    0x0000,     /* R6815 */
+    0x0000,     /* R6816 */
+    0x0000,     /* R6817 */
+    0x0000,     /* R6818 */
+    0x0000,     /* R6819 */
+    0x0000,     /* R6820 */
+    0x0000,     /* R6821 */
+    0x0000,     /* R6822 */
+    0x0000,     /* R6823 */
+    0x0000,     /* R6824 */
+    0x0000,     /* R6825 */
+    0x0000,     /* R6826 */
+    0x0000,     /* R6827 */
+    0x0000,     /* R6828 */
+    0x0000,     /* R6829 */
+    0x0000,     /* R6830 */
+    0x0000,     /* R6831 */
+    0x0000,     /* R6832 */
+    0x0000,     /* R6833 */
+    0x0000,     /* R6834 */
+    0x0000,     /* R6835 */
+    0x0000,     /* R6836 */
+    0x0000,     /* R6837 */
+    0x0000,     /* R6838 */
+    0x0000,     /* R6839 */
+    0x0000,     /* R6840 */
+    0x0000,     /* R6841 */
+    0x0000,     /* R6842 */
+    0x0000,     /* R6843 */
+    0x0000,     /* R6844 */
+    0x0000,     /* R6845 */
+    0x0000,     /* R6846 */
+    0x0000,     /* R6847 */
+    0x0000,     /* R6848 */
+    0x0000,     /* R6849 */
+    0x0000,     /* R6850 */
+    0x0000,     /* R6851 */
+    0x0000,     /* R6852 */
+    0x0000,     /* R6853 */
+    0x0000,     /* R6854 */
+    0x0000,     /* R6855 */
+    0x0000,     /* R6856 */
+    0x0000,     /* R6857 */
+    0x0000,     /* R6858 */
+    0x0000,     /* R6859 */
+    0x0000,     /* R6860 */
+    0x0000,     /* R6861 */
+    0x0000,     /* R6862 */
+    0x0000,     /* R6863 */
+    0x0000,     /* R6864 */
+    0x0000,     /* R6865 */
+    0x0000,     /* R6866 */
+    0x0000,     /* R6867 */
+    0x0000,     /* R6868 */
+    0x0000,     /* R6869 */
+    0x0000,     /* R6870 */
+    0x0000,     /* R6871 */
+    0x0000,     /* R6872 */
+    0x0000,     /* R6873 */
+    0x0000,     /* R6874 */
+    0x0000,     /* R6875 */
+    0x0000,     /* R6876 */
+    0x0000,     /* R6877 */
+    0x0000,     /* R6878 */
+    0x0000,     /* R6879 */
+    0x0000,     /* R6880 */
+    0x0000,     /* R6881 */
+    0x0000,     /* R6882 */
+    0x0000,     /* R6883 */
+    0x0000,     /* R6884 */
+    0x0000,     /* R6885 */
+    0x0000,     /* R6886 */
+    0x0000,     /* R6887 */
+    0x0000,     /* R6888 */
+    0x0000,     /* R6889 */
+    0x0000,     /* R6890 */
+    0x0000,     /* R6891 */
+    0x0000,     /* R6892 */
+    0x0000,     /* R6893 */
+    0x0000,     /* R6894 */
+    0x0000,     /* R6895 */
+    0x0000,     /* R6896 */
+    0x0000,     /* R6897 */
+    0x0000,     /* R6898 */
+    0x0000,     /* R6899 */
+    0x0000,     /* R6900 */
+    0x0000,     /* R6901 */
+    0x0000,     /* R6902 */
+    0x0000,     /* R6903 */
+    0x0000,     /* R6904 */
+    0x0000,     /* R6905 */
+    0x0000,     /* R6906 */
+    0x0000,     /* R6907 */
+    0x0000,     /* R6908 */
+    0x0000,     /* R6909 */
+    0x0000,     /* R6910 */
+    0x0000,     /* R6911 */
+    0x0000,     /* R6912 */
+    0x0000,     /* R6913 */
+    0x0000,     /* R6914 */
+    0x0000,     /* R6915 */
+    0x0000,     /* R6916 */
+    0x0000,     /* R6917 */
+    0x0000,     /* R6918 */
+    0x0000,     /* R6919 */
+    0x0000,     /* R6920 */
+    0x0000,     /* R6921 */
+    0x0000,     /* R6922 */
+    0x0000,     /* R6923 */
+    0x0000,     /* R6924 */
+    0x0000,     /* R6925 */
+    0x0000,     /* R6926 */
+    0x0000,     /* R6927 */
+    0x0000,     /* R6928 */
+    0x0000,     /* R6929 */
+    0x0000,     /* R6930 */
+    0x0000,     /* R6931 */
+    0x0000,     /* R6932 */
+    0x0000,     /* R6933 */
+    0x0000,     /* R6934 */
+    0x0000,     /* R6935 */
+    0x0000,     /* R6936 */
+    0x0000,     /* R6937 */
+    0x0000,     /* R6938 */
+    0x0000,     /* R6939 */
+    0x0000,     /* R6940 */
+    0x0000,     /* R6941 */
+    0x0000,     /* R6942 */
+    0x0000,     /* R6943 */
+    0x0000,     /* R6944 */
+    0x0000,     /* R6945 */
+    0x0000,     /* R6946 */
+    0x0000,     /* R6947 */
+    0x0000,     /* R6948 */
+    0x0000,     /* R6949 */
+    0x0000,     /* R6950 */
+    0x0000,     /* R6951 */
+    0x0000,     /* R6952 */
+    0x0000,     /* R6953 */
+    0x0000,     /* R6954 */
+    0x0000,     /* R6955 */
+    0x0000,     /* R6956 */
+    0x0000,     /* R6957 */
+    0x0000,     /* R6958 */
+    0x0000,     /* R6959 */
+    0x0000,     /* R6960 */
+    0x0000,     /* R6961 */
+    0x0000,     /* R6962 */
+    0x0000,     /* R6963 */
+    0x0000,     /* R6964 */
+    0x0000,     /* R6965 */
+    0x0000,     /* R6966 */
+    0x0000,     /* R6967 */
+    0x0000,     /* R6968 */
+    0x0000,     /* R6969 */
+    0x0000,     /* R6970 */
+    0x0000,     /* R6971 */
+    0x0000,     /* R6972 */
+    0x0000,     /* R6973 */
+    0x0000,     /* R6974 */
+    0x0000,     /* R6975 */
+    0x0000,     /* R6976 */
+    0x0000,     /* R6977 */
+    0x0000,     /* R6978 */
+    0x0000,     /* R6979 */
+    0x0000,     /* R6980 */
+    0x0000,     /* R6981 */
+    0x0000,     /* R6982 */
+    0x0000,     /* R6983 */
+    0x0000,     /* R6984 */
+    0x0000,     /* R6985 */
+    0x0000,     /* R6986 */
+    0x0000,     /* R6987 */
+    0x0000,     /* R6988 */
+    0x0000,     /* R6989 */
+    0x0000,     /* R6990 */
+    0x0000,     /* R6991 */
+    0x0000,     /* R6992 */
+    0x0000,     /* R6993 */
+    0x0000,     /* R6994 */
+    0x0000,     /* R6995 */
+    0x0000,     /* R6996 */
+    0x0000,     /* R6997 */
+    0x0000,     /* R6998 */
+    0x0000,     /* R6999 */
+    0x0000,     /* R7000 */
+    0x0000,     /* R7001 */
+    0x0000,     /* R7002 */
+    0x0000,     /* R7003 */
+    0x0000,     /* R7004 */
+    0x0000,     /* R7005 */
+    0x0000,     /* R7006 */
+    0x0000,     /* R7007 */
+    0x0000,     /* R7008 */
+    0x0000,     /* R7009 */
+    0x0000,     /* R7010 */
+    0x0000,     /* R7011 */
+    0x0000,     /* R7012 */
+    0x0000,     /* R7013 */
+    0x0000,     /* R7014 */
+    0x0000,     /* R7015 */
+    0x0000,     /* R7016 */
+    0x0000,     /* R7017 */
+    0x0000,     /* R7018 */
+    0x0000,     /* R7019 */
+    0x0000,     /* R7020 */
+    0x0000,     /* R7021 */
+    0x0000,     /* R7022 */
+    0x0000,     /* R7023 */
+    0x0000,     /* R7024 */
+    0x0000,     /* R7025 */
+    0x0000,     /* R7026 */
+    0x0000,     /* R7027 */
+    0x0000,     /* R7028 */
+    0x0000,     /* R7029 */
+    0x0000,     /* R7030 */
+    0x0000,     /* R7031 */
+    0x0000,     /* R7032 */
+    0x0000,     /* R7033 */
+    0x0000,     /* R7034 */
+    0x0000,     /* R7035 */
+    0x0000,     /* R7036 */
+    0x0000,     /* R7037 */
+    0x0000,     /* R7038 */
+    0x0000,     /* R7039 */
+    0x0000,     /* R7040 */
+    0x0000,     /* R7041 */
+    0x0000,     /* R7042 */
+    0x0000,     /* R7043 */
+    0x0000,     /* R7044 */
+    0x0000,     /* R7045 */
+    0x0000,     /* R7046 */
+    0x0000,     /* R7047 */
+    0x0000,     /* R7048 */
+    0x0000,     /* R7049 */
+    0x0000,     /* R7050 */
+    0x0000,     /* R7051 */
+    0x0000,     /* R7052 */
+    0x0000,     /* R7053 */
+    0x0000,     /* R7054 */
+    0x0000,     /* R7055 */
+    0x0000,     /* R7056 */
+    0x0000,     /* R7057 */
+    0x0000,     /* R7058 */
+    0x0000,     /* R7059 */
+    0x0000,     /* R7060 */
+    0x0000,     /* R7061 */
+    0x0000,     /* R7062 */
+    0x0000,     /* R7063 */
+    0x0000,     /* R7064 */
+    0x0000,     /* R7065 */
+    0x0000,     /* R7066 */
+    0x0000,     /* R7067 */
+    0x0000,     /* R7068 */
+    0x0000,     /* R7069 */
+    0x0000,     /* R7070 */
+    0x0000,     /* R7071 */
+    0x0000,     /* R7072 */
+    0x0000,     /* R7073 */
+    0x0000,     /* R7074 */
+    0x0000,     /* R7075 */
+    0x0000,     /* R7076 */
+    0x0000,     /* R7077 */
+    0x0000,     /* R7078 */
+    0x0000,     /* R7079 */
+    0x0000,     /* R7080 */
+    0x0000,     /* R7081 */
+    0x0000,     /* R7082 */
+    0x0000,     /* R7083 */
+    0x0000,     /* R7084 */
+    0x0000,     /* R7085 */
+    0x0000,     /* R7086 */
+    0x0000,     /* R7087 */
+    0x0000,     /* R7088 */
+    0x0000,     /* R7089 */
+    0x0000,     /* R7090 */
+    0x0000,     /* R7091 */
+    0x0000,     /* R7092 */
+    0x0000,     /* R7093 */
+    0x0000,     /* R7094 */
+    0x0000,     /* R7095 */
+    0x0000,     /* R7096 */
+    0x0000,     /* R7097 */
+    0x0000,     /* R7098 */
+    0x0000,     /* R7099 */
+    0x0000,     /* R7100 */
+    0x0000,     /* R7101 */
+    0x0000,     /* R7102 */
+    0x0000,     /* R7103 */
+    0x0000,     /* R7104 */
+    0x0000,     /* R7105 */
+    0x0000,     /* R7106 */
+    0x0000,     /* R7107 */
+    0x0000,     /* R7108 */
+    0x0000,     /* R7109 */
+    0x0000,     /* R7110 */
+    0x0000,     /* R7111 */
+    0x0000,     /* R7112 */
+    0x0000,     /* R7113 */
+    0x0000,     /* R7114 */
+    0x0000,     /* R7115 */
+    0x0000,     /* R7116 */
+    0x0000,     /* R7117 */
+    0x0000,     /* R7118 */
+    0x0000,     /* R7119 */
+    0x0000,     /* R7120 */
+    0x0000,     /* R7121 */
+    0x0000,     /* R7122 */
+    0x0000,     /* R7123 */
+    0x0000,     /* R7124 */
+    0x0000,     /* R7125 */
+    0x0000,     /* R7126 */
+    0x0000,     /* R7127 */
+    0x0000,     /* R7128 */
+    0x0000,     /* R7129 */
+    0x0000,     /* R7130 */
+    0x0000,     /* R7131 */
+    0x0000,     /* R7132 */
+    0x0000,     /* R7133 */
+    0x0000,     /* R7134 */
+    0x0000,     /* R7135 */
+    0x0000,     /* R7136 */
+    0x0000,     /* R7137 */
+    0x0000,     /* R7138 */
+    0x0000,     /* R7139 */
+    0x0000,     /* R7140 */
+    0x0000,     /* R7141 */
+    0x0000,     /* R7142 */
+    0x0000,     /* R7143 */
+    0x0000,     /* R7144 */
+    0x0000,     /* R7145 */
+    0x0000,     /* R7146 */
+    0x0000,     /* R7147 */
+    0x0000,     /* R7148 */
+    0x0000,     /* R7149 */
+    0x0000,     /* R7150 */
+    0x0000,     /* R7151 */
+    0x0000,     /* R7152 */
+    0x0000,     /* R7153 */
+    0x0000,     /* R7154 */
+    0x0000,     /* R7155 */
+    0x0000,     /* R7156 */
+    0x0000,     /* R7157 */
+    0x0000,     /* R7158 */
+    0x0000,     /* R7159 */
+    0x0000,     /* R7160 */
+    0x0000,     /* R7161 */
+    0x0000,     /* R7162 */
+    0x0000,     /* R7163 */
+    0x0000,     /* R7164 */
+    0x0000,     /* R7165 */
+    0x0000,     /* R7166 */
+    0x0000,     /* R7167 */
+    0x0000,     /* R7168 */
+    0x0000,     /* R7169 */
+    0x0000,     /* R7170 */
+    0x0000,     /* R7171 */
+    0x0000,     /* R7172 */
+    0x0000,     /* R7173 */
+    0x0000,     /* R7174 */
+    0x0000,     /* R7175 */
+    0x0000,     /* R7176 */
+    0x0000,     /* R7177 */
+    0x0000,     /* R7178 */
+    0x0000,     /* R7179 */
+    0x0000,     /* R7180 */
+    0x0000,     /* R7181 */
+    0x0000,     /* R7182 */
+    0x0000,     /* R7183 */
+    0x0000,     /* R7184 */
+    0x0000,     /* R7185 */
+    0x0000,     /* R7186 */
+    0x0000,     /* R7187 */
+    0x0000,     /* R7188 */
+    0x0000,     /* R7189 */
+    0x0000,     /* R7190 */
+    0x0000,     /* R7191 */
+    0x0000,     /* R7192 */
+    0x0000,     /* R7193 */
+    0x0000,     /* R7194 */
+    0x0000,     /* R7195 */
+    0x0000,     /* R7196 */
+    0x0000,     /* R7197 */
+    0x0000,     /* R7198 */
+    0x0000,     /* R7199 */
+    0x0000,     /* R7200 */
+    0x0000,     /* R7201 */
+    0x0000,     /* R7202 */
+    0x0000,     /* R7203 */
+    0x0000,     /* R7204 */
+    0x0000,     /* R7205 */
+    0x0000,     /* R7206 */
+    0x0000,     /* R7207 */
+    0x0000,     /* R7208 */
+    0x0000,     /* R7209 */
+    0x0000,     /* R7210 */
+    0x0000,     /* R7211 */
+    0x0000,     /* R7212 */
+    0x0000,     /* R7213 */
+    0x0000,     /* R7214 */
+    0x0000,     /* R7215 */
+    0x0000,     /* R7216 */
+    0x0000,     /* R7217 */
+    0x0000,     /* R7218 */
+    0x0000,     /* R7219 */
+    0x0000,     /* R7220 */
+    0x0000,     /* R7221 */
+    0x0000,     /* R7222 */
+    0x0000,     /* R7223 */
+    0x0000,     /* R7224 */
+    0x0000,     /* R7225 */
+    0x0000,     /* R7226 */
+    0x0000,     /* R7227 */
+    0x0000,     /* R7228 */
+    0x0000,     /* R7229 */
+    0x0000,     /* R7230 */
+    0x0000,     /* R7231 */
+    0x0000,     /* R7232 */
+    0x0000,     /* R7233 */
+    0x0000,     /* R7234 */
+    0x0000,     /* R7235 */
+    0x0000,     /* R7236 */
+    0x0000,     /* R7237 */
+    0x0000,     /* R7238 */
+    0x0000,     /* R7239 */
+    0x0000,     /* R7240 */
+    0x0000,     /* R7241 */
+    0x0000,     /* R7242 */
+    0x0000,     /* R7243 */
+    0x0000,     /* R7244 */
+    0x0000,     /* R7245 */
+    0x0000,     /* R7246 */
+    0x0000,     /* R7247 */
+    0x0000,     /* R7248 */
+    0x0000,     /* R7249 */
+    0x0000,     /* R7250 */
+    0x0000,     /* R7251 */
+    0x0000,     /* R7252 */
+    0x0000,     /* R7253 */
+    0x0000,     /* R7254 */
+    0x0000,     /* R7255 */
+    0x0000,     /* R7256 */
+    0x0000,     /* R7257 */
+    0x0000,     /* R7258 */
+    0x0000,     /* R7259 */
+    0x0000,     /* R7260 */
+    0x0000,     /* R7261 */
+    0x0000,     /* R7262 */
+    0x0000,     /* R7263 */
+    0x0000,     /* R7264 */
+    0x0000,     /* R7265 */
+    0x0000,     /* R7266 */
+    0x0000,     /* R7267 */
+    0x0000,     /* R7268 */
+    0x0000,     /* R7269 */
+    0x0000,     /* R7270 */
+    0x0000,     /* R7271 */
+    0x0000,     /* R7272 */
+    0x0000,     /* R7273 */
+    0x0000,     /* R7274 */
+    0x0000,     /* R7275 */
+    0x0000,     /* R7276 */
+    0x0000,     /* R7277 */
+    0x0000,     /* R7278 */
+    0x0000,     /* R7279 */
+    0x0000,     /* R7280 */
+    0x0000,     /* R7281 */
+    0x0000,     /* R7282 */
+    0x0000,     /* R7283 */
+    0x0000,     /* R7284 */
+    0x0000,     /* R7285 */
+    0x0000,     /* R7286 */
+    0x0000,     /* R7287 */
+    0x0000,     /* R7288 */
+    0x0000,     /* R7289 */
+    0x0000,     /* R7290 */
+    0x0000,     /* R7291 */
+    0x0000,     /* R7292 */
+    0x0000,     /* R7293 */
+    0x0000,     /* R7294 */
+    0x0000,     /* R7295 */
+    0x0000,     /* R7296 */
+    0x0000,     /* R7297 */
+    0x0000,     /* R7298 */
+    0x0000,     /* R7299 */
+    0x0000,     /* R7300 */
+    0x0000,     /* R7301 */
+    0x0000,     /* R7302 */
+    0x0000,     /* R7303 */
+    0x0000,     /* R7304 */
+    0x0000,     /* R7305 */
+    0x0000,     /* R7306 */
+    0x0000,     /* R7307 */
+    0x0000,     /* R7308 */
+    0x0000,     /* R7309 */
+    0x0000,     /* R7310 */
+    0x0000,     /* R7311 */
+    0x0000,     /* R7312 */
+    0x0000,     /* R7313 */
+    0x0000,     /* R7314 */
+    0x0000,     /* R7315 */
+    0x0000,     /* R7316 */
+    0x0000,     /* R7317 */
+    0x0000,     /* R7318 */
+    0x0000,     /* R7319 */
+    0x0000,     /* R7320 */
+    0x0000,     /* R7321 */
+    0x0000,     /* R7322 */
+    0x0000,     /* R7323 */
+    0x0000,     /* R7324 */
+    0x0000,     /* R7325 */
+    0x0000,     /* R7326 */
+    0x0000,     /* R7327 */
+    0x0000,     /* R7328 */
+    0x0000,     /* R7329 */
+    0x0000,     /* R7330 */
+    0x0000,     /* R7331 */
+    0x0000,     /* R7332 */
+    0x0000,     /* R7333 */
+    0x0000,     /* R7334 */
+    0x0000,     /* R7335 */
+    0x0000,     /* R7336 */
+    0x0000,     /* R7337 */
+    0x0000,     /* R7338 */
+    0x0000,     /* R7339 */
+    0x0000,     /* R7340 */
+    0x0000,     /* R7341 */
+    0x0000,     /* R7342 */
+    0x0000,     /* R7343 */
+    0x0000,     /* R7344 */
+    0x0000,     /* R7345 */
+    0x0000,     /* R7346 */
+    0x0000,     /* R7347 */
+    0x0000,     /* R7348 */
+    0x0000,     /* R7349 */
+    0x0000,     /* R7350 */
+    0x0000,     /* R7351 */
+    0x0000,     /* R7352 */
+    0x0000,     /* R7353 */
+    0x0000,     /* R7354 */
+    0x0000,     /* R7355 */
+    0x0000,     /* R7356 */
+    0x0000,     /* R7357 */
+    0x0000,     /* R7358 */
+    0x0000,     /* R7359 */
+    0x0000,     /* R7360 */
+    0x0000,     /* R7361 */
+    0x0000,     /* R7362 */
+    0x0000,     /* R7363 */
+    0x0000,     /* R7364 */
+    0x0000,     /* R7365 */
+    0x0000,     /* R7366 */
+    0x0000,     /* R7367 */
+    0x0000,     /* R7368 */
+    0x0000,     /* R7369 */
+    0x0000,     /* R7370 */
+    0x0000,     /* R7371 */
+    0x0000,     /* R7372 */
+    0x0000,     /* R7373 */
+    0x0000,     /* R7374 */
+    0x0000,     /* R7375 */
+    0x0000,     /* R7376 */
+    0x0000,     /* R7377 */
+    0x0000,     /* R7378 */
+    0x0000,     /* R7379 */
+    0x0000,     /* R7380 */
+    0x0000,     /* R7381 */
+    0x0000,     /* R7382 */
+    0x0000,     /* R7383 */
+    0x0000,     /* R7384 */
+    0x0000,     /* R7385 */
+    0x0000,     /* R7386 */
+    0x0000,     /* R7387 */
+    0x0000,     /* R7388 */
+    0x0000,     /* R7389 */
+    0x0000,     /* R7390 */
+    0x0000,     /* R7391 */
+    0x0000,     /* R7392 */
+    0x0000,     /* R7393 */
+    0x0000,     /* R7394 */
+    0x0000,     /* R7395 */
+    0x0000,     /* R7396 */
+    0x0000,     /* R7397 */
+    0x0000,     /* R7398 */
+    0x0000,     /* R7399 */
+    0x0000,     /* R7400 */
+    0x0000,     /* R7401 */
+    0x0000,     /* R7402 */
+    0x0000,     /* R7403 */
+    0x0000,     /* R7404 */
+    0x0000,     /* R7405 */
+    0x0000,     /* R7406 */
+    0x0000,     /* R7407 */
+    0x0000,     /* R7408 */
+    0x0000,     /* R7409 */
+    0x0000,     /* R7410 */
+    0x0000,     /* R7411 */
+    0x0000,     /* R7412 */
+    0x0000,     /* R7413 */
+    0x0000,     /* R7414 */
+    0x0000,     /* R7415 */
+    0x0000,     /* R7416 */
+    0x0000,     /* R7417 */
+    0x0000,     /* R7418 */
+    0x0000,     /* R7419 */
+    0x0000,     /* R7420 */
+    0x0000,     /* R7421 */
+    0x0000,     /* R7422 */
+    0x0000,     /* R7423 */
+    0x0000,     /* R7424 */
+    0x0000,     /* R7425 */
+    0x0000,     /* R7426 */
+    0x0000,     /* R7427 */
+    0x0000,     /* R7428 */
+    0x0000,     /* R7429 */
+    0x0000,     /* R7430 */
+    0x0000,     /* R7431 */
+    0x0000,     /* R7432 */
+    0x0000,     /* R7433 */
+    0x0000,     /* R7434 */
+    0x0000,     /* R7435 */
+    0x0000,     /* R7436 */
+    0x0000,     /* R7437 */
+    0x0000,     /* R7438 */
+    0x0000,     /* R7439 */
+    0x0000,     /* R7440 */
+    0x0000,     /* R7441 */
+    0x0000,     /* R7442 */
+    0x0000,     /* R7443 */
+    0x0000,     /* R7444 */
+    0x0000,     /* R7445 */
+    0x0000,     /* R7446 */
+    0x0000,     /* R7447 */
+    0x0000,     /* R7448 */
+    0x0000,     /* R7449 */
+    0x0000,     /* R7450 */
+    0x0000,     /* R7451 */
+    0x0000,     /* R7452 */
+    0x0000,     /* R7453 */
+    0x0000,     /* R7454 */
+    0x0000,     /* R7455 */
+    0x0000,     /* R7456 */
+    0x0000,     /* R7457 */
+    0x0000,     /* R7458 */
+    0x0000,     /* R7459 */
+    0x0000,     /* R7460 */
+    0x0000,     /* R7461 */
+    0x0000,     /* R7462 */
+    0x0000,     /* R7463 */
+    0x0000,     /* R7464 */
+    0x0000,     /* R7465 */
+    0x0000,     /* R7466 */
+    0x0000,     /* R7467 */
+    0x0000,     /* R7468 */
+    0x0000,     /* R7469 */
+    0x0000,     /* R7470 */
+    0x0000,     /* R7471 */
+    0x0000,     /* R7472 */
+    0x0000,     /* R7473 */
+    0x0000,     /* R7474 */
+    0x0000,     /* R7475 */
+    0x0000,     /* R7476 */
+    0x0000,     /* R7477 */
+    0x0000,     /* R7478 */
+    0x0000,     /* R7479 */
+    0x0000,     /* R7480 */
+    0x0000,     /* R7481 */
+    0x0000,     /* R7482 */
+    0x0000,     /* R7483 */
+    0x0000,     /* R7484 */
+    0x0000,     /* R7485 */
+    0x0000,     /* R7486 */
+    0x0000,     /* R7487 */
+    0x0000,     /* R7488 */
+    0x0000,     /* R7489 */
+    0x0000,     /* R7490 */
+    0x0000,     /* R7491 */
+    0x0000,     /* R7492 */
+    0x0000,     /* R7493 */
+    0x0000,     /* R7494 */
+    0x0000,     /* R7495 */
+    0x0000,     /* R7496 */
+    0x0000,     /* R7497 */
+    0x0000,     /* R7498 */
+    0x0000,     /* R7499 */
+    0x0000,     /* R7500 */
+    0x0000,     /* R7501 */
+    0x0000,     /* R7502 */
+    0x0000,     /* R7503 */
+    0x0000,     /* R7504 */
+    0x0000,     /* R7505 */
+    0x0000,     /* R7506 */
+    0x0000,     /* R7507 */
+    0x0000,     /* R7508 */
+    0x0000,     /* R7509 */
+    0x0000,     /* R7510 */
+    0x0000,     /* R7511 */
+    0x0000,     /* R7512 */
+    0x0000,     /* R7513 */
+    0x0000,     /* R7514 */
+    0x0000,     /* R7515 */
+    0x0000,     /* R7516 */
+    0x0000,     /* R7517 */
+    0x0000,     /* R7518 */
+    0x0000,     /* R7519 */
+    0x0000,     /* R7520 */
+    0x0000,     /* R7521 */
+    0x0000,     /* R7522 */
+    0x0000,     /* R7523 */
+    0x0000,     /* R7524 */
+    0x0000,     /* R7525 */
+    0x0000,     /* R7526 */
+    0x0000,     /* R7527 */
+    0x0000,     /* R7528 */
+    0x0000,     /* R7529 */
+    0x0000,     /* R7530 */
+    0x0000,     /* R7531 */
+    0x0000,     /* R7532 */
+    0x0000,     /* R7533 */
+    0x0000,     /* R7534 */
+    0x0000,     /* R7535 */
+    0x0000,     /* R7536 */
+    0x0000,     /* R7537 */
+    0x0000,     /* R7538 */
+    0x0000,     /* R7539 */
+    0x0000,     /* R7540 */
+    0x0000,     /* R7541 */
+    0x0000,     /* R7542 */
+    0x0000,     /* R7543 */
+    0x0000,     /* R7544 */
+    0x0000,     /* R7545 */
+    0x0000,     /* R7546 */
+    0x0000,     /* R7547 */
+    0x0000,     /* R7548 */
+    0x0000,     /* R7549 */
+    0x0000,     /* R7550 */
+    0x0000,     /* R7551 */
+    0x0000,     /* R7552 */
+    0x0000,     /* R7553 */
+    0x0000,     /* R7554 */
+    0x0000,     /* R7555 */
+    0x0000,     /* R7556 */
+    0x0000,     /* R7557 */
+    0x0000,     /* R7558 */
+    0x0000,     /* R7559 */
+    0x0000,     /* R7560 */
+    0x0000,     /* R7561 */
+    0x0000,     /* R7562 */
+    0x0000,     /* R7563 */
+    0x0000,     /* R7564 */
+    0x0000,     /* R7565 */
+    0x0000,     /* R7566 */
+    0x0000,     /* R7567 */
+    0x0000,     /* R7568 */
+    0x0000,     /* R7569 */
+    0x0000,     /* R7570 */
+    0x0000,     /* R7571 */
+    0x0000,     /* R7572 */
+    0x0000,     /* R7573 */
+    0x0000,     /* R7574 */
+    0x0000,     /* R7575 */
+    0x0000,     /* R7576 */
+    0x0000,     /* R7577 */
+    0x0000,     /* R7578 */
+    0x0000,     /* R7579 */
+    0x0000,     /* R7580 */
+    0x0000,     /* R7581 */
+    0x0000,     /* R7582 */
+    0x0000,     /* R7583 */
+    0x0000,     /* R7584 */
+    0x0000,     /* R7585 */
+    0x0000,     /* R7586 */
+    0x0000,     /* R7587 */
+    0x0000,     /* R7588 */
+    0x0000,     /* R7589 */
+    0x0000,     /* R7590 */
+    0x0000,     /* R7591 */
+    0x0000,     /* R7592 */
+    0x0000,     /* R7593 */
+    0x0000,     /* R7594 */
+    0x0000,     /* R7595 */
+    0x0000,     /* R7596 */
+    0x0000,     /* R7597 */
+    0x0000,     /* R7598 */
+    0x0000,     /* R7599 */
+    0x0000,     /* R7600 */
+    0x0000,     /* R7601 */
+    0x0000,     /* R7602 */
+    0x0000,     /* R7603 */
+    0x0000,     /* R7604 */
+    0x0000,     /* R7605 */
+    0x0000,     /* R7606 */
+    0x0000,     /* R7607 */
+    0x0000,     /* R7608 */
+    0x0000,     /* R7609 */
+    0x0000,     /* R7610 */
+    0x0000,     /* R7611 */
+    0x0000,     /* R7612 */
+    0x0000,     /* R7613 */
+    0x0000,     /* R7614 */
+    0x0000,     /* R7615 */
+    0x0000,     /* R7616 */
+    0x0000,     /* R7617 */
+    0x0000,     /* R7618 */
+    0x0000,     /* R7619 */
+    0x0000,     /* R7620 */
+    0x0000,     /* R7621 */
+    0x0000,     /* R7622 */
+    0x0000,     /* R7623 */
+    0x0000,     /* R7624 */
+    0x0000,     /* R7625 */
+    0x0000,     /* R7626 */
+    0x0000,     /* R7627 */
+    0x0000,     /* R7628 */
+    0x0000,     /* R7629 */
+    0x0000,     /* R7630 */
+    0x0000,     /* R7631 */
+    0x0000,     /* R7632 */
+    0x0000,     /* R7633 */
+    0x0000,     /* R7634 */
+    0x0000,     /* R7635 */
+    0x0000,     /* R7636 */
+    0x0000,     /* R7637 */
+    0x0000,     /* R7638 */
+    0x0000,     /* R7639 */
+    0x0000,     /* R7640 */
+    0x0000,     /* R7641 */
+    0x0000,     /* R7642 */
+    0x0000,     /* R7643 */
+    0x0000,     /* R7644 */
+    0x0000,     /* R7645 */
+    0x0000,     /* R7646 */
+    0x0000,     /* R7647 */
+    0x0000,     /* R7648 */
+    0x0000,     /* R7649 */
+    0x0000,     /* R7650 */
+    0x0000,     /* R7651 */
+    0x0000,     /* R7652 */
+    0x0000,     /* R7653 */
+    0x0000,     /* R7654 */
+    0x0000,     /* R7655 */
+    0x0000,     /* R7656 */
+    0x0000,     /* R7657 */
+    0x0000,     /* R7658 */
+    0x0000,     /* R7659 */
+    0x0000,     /* R7660 */
+    0x0000,     /* R7661 */
+    0x0000,     /* R7662 */
+    0x0000,     /* R7663 */
+    0x0000,     /* R7664 */
+    0x0000,     /* R7665 */
+    0x0000,     /* R7666 */
+    0x0000,     /* R7667 */
+    0x0000,     /* R7668 */
+    0x0000,     /* R7669 */
+    0x0000,     /* R7670 */
+    0x0000,     /* R7671 */
+    0x0000,     /* R7672 */
+    0x0000,     /* R7673 */
+    0x0000,     /* R7674 */
+    0x0000,     /* R7675 */
+    0x0000,     /* R7676 */
+    0x0000,     /* R7677 */
+    0x0000,     /* R7678 */
+    0x0000,     /* R7679 */
+    0x0000,     /* R7680 */
+    0x0000,     /* R7681 */
+    0x0000,     /* R7682 */
+    0x0000,     /* R7683 */
+    0x0000,     /* R7684 */
+    0x0000,     /* R7685 */
+    0x0000,     /* R7686 */
+    0x0000,     /* R7687 */
+    0x0000,     /* R7688 */
+    0x0000,     /* R7689 */
+    0x0000,     /* R7690 */
+    0x0000,     /* R7691 */
+    0x0000,     /* R7692 */
+    0x0000,     /* R7693 */
+    0x0000,     /* R7694 */
+    0x0000,     /* R7695 */
+    0x0000,     /* R7696 */
+    0x0000,     /* R7697 */
+    0x0000,     /* R7698 */
+    0x0000,     /* R7699 */
+    0x0000,     /* R7700 */
+    0x0000,     /* R7701 */
+    0x0000,     /* R7702 */
+    0x0000,     /* R7703 */
+    0x0000,     /* R7704 */
+    0x0000,     /* R7705 */
+    0x0000,     /* R7706 */
+    0x0000,     /* R7707 */
+    0x0000,     /* R7708 */
+    0x0000,     /* R7709 */
+    0x0000,     /* R7710 */
+    0x0000,     /* R7711 */
+    0x0000,     /* R7712 */
+    0x0000,     /* R7713 */
+    0x0000,     /* R7714 */
+    0x0000,     /* R7715 */
+    0x0000,     /* R7716 */
+    0x0000,     /* R7717 */
+    0x0000,     /* R7718 */
+    0x0000,     /* R7719 */
+    0x0000,     /* R7720 */
+    0x0000,     /* R7721 */
+    0x0000,     /* R7722 */
+    0x0000,     /* R7723 */
+    0x0000,     /* R7724 */
+    0x0000,     /* R7725 */
+    0x0000,     /* R7726 */
+    0x0000,     /* R7727 */
+    0x0000,     /* R7728 */
+    0x0000,     /* R7729 */
+    0x0000,     /* R7730 */
+    0x0000,     /* R7731 */
+    0x0000,     /* R7732 */
+    0x0000,     /* R7733 */
+    0x0000,     /* R7734 */
+    0x0000,     /* R7735 */
+    0x0000,     /* R7736 */
+    0x0000,     /* R7737 */
+    0x0000,     /* R7738 */
+    0x0000,     /* R7739 */
+    0x0000,     /* R7740 */
+    0x0000,     /* R7741 */
+    0x0000,     /* R7742 */
+    0x0000,     /* R7743 */
+    0x0000,     /* R7744 */
+    0x0000,     /* R7745 */
+    0x0000,     /* R7746 */
+    0x0000,     /* R7747 */
+    0x0000,     /* R7748 */
+    0x0000,     /* R7749 */
+    0x0000,     /* R7750 */
+    0x0000,     /* R7751 */
+    0x0000,     /* R7752 */
+    0x0000,     /* R7753 */
+    0x0000,     /* R7754 */
+    0x0000,     /* R7755 */
+    0x0000,     /* R7756 */
+    0x0000,     /* R7757 */
+    0x0000,     /* R7758 */
+    0x0000,     /* R7759 */
+    0x0000,     /* R7760 */
+    0x0000,     /* R7761 */
+    0x0000,     /* R7762 */
+    0x0000,     /* R7763 */
+    0x0000,     /* R7764 */
+    0x0000,     /* R7765 */
+    0x0000,     /* R7766 */
+    0x0000,     /* R7767 */
+    0x0000,     /* R7768 */
+    0x0000,     /* R7769 */
+    0x0000,     /* R7770 */
+    0x0000,     /* R7771 */
+    0x0000,     /* R7772 */
+    0x0000,     /* R7773 */
+    0x0000,     /* R7774 */
+    0x0000,     /* R7775 */
+    0x0000,     /* R7776 */
+    0x0000,     /* R7777 */
+    0x0000,     /* R7778 */
+    0x0000,     /* R7779 */
+    0x0000,     /* R7780 */
+    0x0000,     /* R7781 */
+    0x0000,     /* R7782 */
+    0x0000,     /* R7783 */
+    0x0000,     /* R7784 */
+    0x0000,     /* R7785 */
+    0x0000,     /* R7786 */
+    0x0000,     /* R7787 */
+    0x0000,     /* R7788 */
+    0x0000,     /* R7789 */
+    0x0000,     /* R7790 */
+    0x0000,     /* R7791 */
+    0x0000,     /* R7792 */
+    0x0000,     /* R7793 */
+    0x0000,     /* R7794 */
+    0x0000,     /* R7795 */
+    0x0000,     /* R7796 */
+    0x0000,     /* R7797 */
+    0x0000,     /* R7798 */
+    0x0000,     /* R7799 */
+    0x0000,     /* R7800 */
+    0x0000,     /* R7801 */
+    0x0000,     /* R7802 */
+    0x0000,     /* R7803 */
+    0x0000,     /* R7804 */
+    0x0000,     /* R7805 */
+    0x0000,     /* R7806 */
+    0x0000,     /* R7807 */
+    0x0000,     /* R7808 */
+    0x0000,     /* R7809 */
+    0x0000,     /* R7810 */
+    0x0000,     /* R7811 */
+    0x0000,     /* R7812 */
+    0x0000,     /* R7813 */
+    0x0000,     /* R7814 */
+    0x0000,     /* R7815 */
+    0x0000,     /* R7816 */
+    0x0000,     /* R7817 */
+    0x0000,     /* R7818 */
+    0x0000,     /* R7819 */
+    0x0000,     /* R7820 */
+    0x0000,     /* R7821 */
+    0x0000,     /* R7822 */
+    0x0000,     /* R7823 */
+    0x0000,     /* R7824 */
+    0x0000,     /* R7825 */
+    0x0000,     /* R7826 */
+    0x0000,     /* R7827 */
+    0x0000,     /* R7828 */
+    0x0000,     /* R7829 */
+    0x0000,     /* R7830 */
+    0x0000,     /* R7831 */
+    0x0000,     /* R7832 */
+    0x0000,     /* R7833 */
+    0x0000,     /* R7834 */
+    0x0000,     /* R7835 */
+    0x0000,     /* R7836 */
+    0x0000,     /* R7837 */
+    0x0000,     /* R7838 */
+    0x0000,     /* R7839 */
+    0x0000,     /* R7840 */
+    0x0000,     /* R7841 */
+    0x0000,     /* R7842 */
+    0x0000,     /* R7843 */
+    0x0000,     /* R7844 */
+    0x0000,     /* R7845 */
+    0x0000,     /* R7846 */
+    0x0000,     /* R7847 */
+    0x0000,     /* R7848 */
+    0x0000,     /* R7849 */
+    0x0000,     /* R7850 */
+    0x0000,     /* R7851 */
+    0x0000,     /* R7852 */
+    0x0000,     /* R7853 */
+    0x0000,     /* R7854 */
+    0x0000,     /* R7855 */
+    0x0000,     /* R7856 */
+    0x0000,     /* R7857 */
+    0x0000,     /* R7858 */
+    0x0000,     /* R7859 */
+    0x0000,     /* R7860 */
+    0x0000,     /* R7861 */
+    0x0000,     /* R7862 */
+    0x0000,     /* R7863 */
+    0x0000,     /* R7864 */
+    0x0000,     /* R7865 */
+    0x0000,     /* R7866 */
+    0x0000,     /* R7867 */
+    0x0000,     /* R7868 */
+    0x0000,     /* R7869 */
+    0x0000,     /* R7870 */
+    0x0000,     /* R7871 */
+    0x0000,     /* R7872 */
+    0x0000,     /* R7873 */
+    0x0000,     /* R7874 */
+    0x0000,     /* R7875 */
+    0x0000,     /* R7876 */
+    0x0000,     /* R7877 */
+    0x0000,     /* R7878 */
+    0x0000,     /* R7879 */
+    0x0000,     /* R7880 */
+    0x0000,     /* R7881 */
+    0x0000,     /* R7882 */
+    0x0000,     /* R7883 */
+    0x0000,     /* R7884 */
+    0x0000,     /* R7885 */
+    0x0000,     /* R7886 */
+    0x0000,     /* R7887 */
+    0x0000,     /* R7888 */
+    0x0000,     /* R7889 */
+    0x0000,     /* R7890 */
+    0x0000,     /* R7891 */
+    0x0000,     /* R7892 */
+    0x0000,     /* R7893 */
+    0x0000,     /* R7894 */
+    0x0000,     /* R7895 */
+    0x0000,     /* R7896 */
+    0x0000,     /* R7897 */
+    0x0000,     /* R7898 */
+    0x0000,     /* R7899 */
+    0x0000,     /* R7900 */
+    0x0000,     /* R7901 */
+    0x0000,     /* R7902 */
+    0x0000,     /* R7903 */
+    0x0000,     /* R7904 */
+    0x0000,     /* R7905 */
+    0x0000,     /* R7906 */
+    0x0000,     /* R7907 */
+    0x0000,     /* R7908 */
+    0x0000,     /* R7909 */
+    0x0000,     /* R7910 */
+    0x0000,     /* R7911 */
+    0x0000,     /* R7912 */
+    0x0000,     /* R7913 */
+    0x0000,     /* R7914 */
+    0x0000,     /* R7915 */
+    0x0000,     /* R7916 */
+    0x0000,     /* R7917 */
+    0x0000,     /* R7918 */
+    0x0000,     /* R7919 */
+    0x0000,     /* R7920 */
+    0x0000,     /* R7921 */
+    0x0000,     /* R7922 */
+    0x0000,     /* R7923 */
+    0x0000,     /* R7924 */
+    0x0000,     /* R7925 */
+    0x0000,     /* R7926 */
+    0x0000,     /* R7927 */
+    0x0000,     /* R7928 */
+    0x0000,     /* R7929 */
+    0x0000,     /* R7930 */
+    0x0000,     /* R7931 */
+    0x0000,     /* R7932 */
+    0x0000,     /* R7933 */
+    0x0000,     /* R7934 */
+    0x0000,     /* R7935 */
+    0x0000,     /* R7936 */
+    0x0000,     /* R7937 */
+    0x0000,     /* R7938 */
+    0x0000,     /* R7939 */
+    0x0000,     /* R7940 */
+    0x0000,     /* R7941 */
+    0x0000,     /* R7942 */
+    0x0000,     /* R7943 */
+    0x0000,     /* R7944 */
+    0x0000,     /* R7945 */
+    0x0000,     /* R7946 */
+    0x0000,     /* R7947 */
+    0x0000,     /* R7948 */
+    0x0000,     /* R7949 */
+    0x0000,     /* R7950 */
+    0x0000,     /* R7951 */
+    0x0000,     /* R7952 */
+    0x0000,     /* R7953 */
+    0x0000,     /* R7954 */
+    0x0000,     /* R7955 */
+    0x0000,     /* R7956 */
+    0x0000,     /* R7957 */
+    0x0000,     /* R7958 */
+    0x0000,     /* R7959 */
+    0x0000,     /* R7960 */
+    0x0000,     /* R7961 */
+    0x0000,     /* R7962 */
+    0x0000,     /* R7963 */
+    0x0000,     /* R7964 */
+    0x0000,     /* R7965 */
+    0x0000,     /* R7966 */
+    0x0000,     /* R7967 */
+    0x0000,     /* R7968 */
+    0x0000,     /* R7969 */
+    0x0000,     /* R7970 */
+    0x0000,     /* R7971 */
+    0x0000,     /* R7972 */
+    0x0000,     /* R7973 */
+    0x0000,     /* R7974 */
+    0x0000,     /* R7975 */
+    0x0000,     /* R7976 */
+    0x0000,     /* R7977 */
+    0x0000,     /* R7978 */
+    0x0000,     /* R7979 */
+    0x0000,     /* R7980 */
+    0x0000,     /* R7981 */
+    0x0000,     /* R7982 */
+    0x0000,     /* R7983 */
+    0x0000,     /* R7984 */
+    0x0000,     /* R7985 */
+    0x0000,     /* R7986 */
+    0x0000,     /* R7987 */
+    0x0000,     /* R7988 */
+    0x0000,     /* R7989 */
+    0x0000,     /* R7990 */
+    0x0000,     /* R7991 */
+    0x0000,     /* R7992 */
+    0x0000,     /* R7993 */
+    0x0000,     /* R7994 */
+    0x0000,     /* R7995 */
+    0x0000,     /* R7996 */
+    0x0000,     /* R7997 */
+    0x0000,     /* R7998 */
+    0x0000,     /* R7999 */
+    0x0000,     /* R8000 */
+    0x0000,     /* R8001 */
+    0x0000,     /* R8002 */
+    0x0000,     /* R8003 */
+    0x0000,     /* R8004 */
+    0x0000,     /* R8005 */
+    0x0000,     /* R8006 */
+    0x0000,     /* R8007 */
+    0x0000,     /* R8008 */
+    0x0000,     /* R8009 */
+    0x0000,     /* R8010 */
+    0x0000,     /* R8011 */
+    0x0000,     /* R8012 */
+    0x0000,     /* R8013 */
+    0x0000,     /* R8014 */
+    0x0000,     /* R8015 */
+    0x0000,     /* R8016 */
+    0x0000,     /* R8017 */
+    0x0000,     /* R8018 */
+    0x0000,     /* R8019 */
+    0x0000,     /* R8020 */
+    0x0000,     /* R8021 */
+    0x0000,     /* R8022 */
+    0x0000,     /* R8023 */
+    0x0000,     /* R8024 */
+    0x0000,     /* R8025 */
+    0x0000,     /* R8026 */
+    0x0000,     /* R8027 */
+    0x0000,     /* R8028 */
+    0x0000,     /* R8029 */
+    0x0000,     /* R8030 */
+    0x0000,     /* R8031 */
+    0x0000,     /* R8032 */
+    0x0000,     /* R8033 */
+    0x0000,     /* R8034 */
+    0x0000,     /* R8035 */
+    0x0000,     /* R8036 */
+    0x0000,     /* R8037 */
+    0x0000,     /* R8038 */
+    0x0000,     /* R8039 */
+    0x0000,     /* R8040 */
+    0x0000,     /* R8041 */
+    0x0000,     /* R8042 */
+    0x0000,     /* R8043 */
+    0x0000,     /* R8044 */
+    0x0000,     /* R8045 */
+    0x0000,     /* R8046 */
+    0x0000,     /* R8047 */
+    0x0000,     /* R8048 */
+    0x0000,     /* R8049 */
+    0x0000,     /* R8050 */
+    0x0000,     /* R8051 */
+    0x0000,     /* R8052 */
+    0x0000,     /* R8053 */
+    0x0000,     /* R8054 */
+    0x0000,     /* R8055 */
+    0x0000,     /* R8056 */
+    0x0000,     /* R8057 */
+    0x0000,     /* R8058 */
+    0x0000,     /* R8059 */
+    0x0000,     /* R8060 */
+    0x0000,     /* R8061 */
+    0x0000,     /* R8062 */
+    0x0000,     /* R8063 */
+    0x0000,     /* R8064 */
+    0x0000,     /* R8065 */
+    0x0000,     /* R8066 */
+    0x0000,     /* R8067 */
+    0x0000,     /* R8068 */
+    0x0000,     /* R8069 */
+    0x0000,     /* R8070 */
+    0x0000,     /* R8071 */
+    0x0000,     /* R8072 */
+    0x0000,     /* R8073 */
+    0x0000,     /* R8074 */
+    0x0000,     /* R8075 */
+    0x0000,     /* R8076 */
+    0x0000,     /* R8077 */
+    0x0000,     /* R8078 */
+    0x0000,     /* R8079 */
+    0x0000,     /* R8080 */
+    0x0000,     /* R8081 */
+    0x0000,     /* R8082 */
+    0x0000,     /* R8083 */
+    0x0000,     /* R8084 */
+    0x0000,     /* R8085 */
+    0x0000,     /* R8086 */
+    0x0000,     /* R8087 */
+    0x0000,     /* R8088 */
+    0x0000,     /* R8089 */
+    0x0000,     /* R8090 */
+    0x0000,     /* R8091 */
+    0x0000,     /* R8092 */
+    0x0000,     /* R8093 */
+    0x0000,     /* R8094 */
+    0x0000,     /* R8095 */
+    0x0000,     /* R8096 */
+    0x0000,     /* R8097 */
+    0x0000,     /* R8098 */
+    0x0000,     /* R8099 */
+    0x0000,     /* R8100 */
+    0x0000,     /* R8101 */
+    0x0000,     /* R8102 */
+    0x0000,     /* R8103 */
+    0x0000,     /* R8104 */
+    0x0000,     /* R8105 */
+    0x0000,     /* R8106 */
+    0x0000,     /* R8107 */
+    0x0000,     /* R8108 */
+    0x0000,     /* R8109 */
+    0x0000,     /* R8110 */
+    0x0000,     /* R8111 */
+    0x0000,     /* R8112 */
+    0x0000,     /* R8113 */
+    0x0000,     /* R8114 */
+    0x0000,     /* R8115 */
+    0x0000,     /* R8116 */
+    0x0000,     /* R8117 */
+    0x0000,     /* R8118 */
+    0x0000,     /* R8119 */
+    0x0000,     /* R8120 */
+    0x0000,     /* R8121 */
+    0x0000,     /* R8122 */
+    0x0000,     /* R8123 */
+    0x0000,     /* R8124 */
+    0x0000,     /* R8125 */
+    0x0000,     /* R8126 */
+    0x0000,     /* R8127 */
+    0x0000,     /* R8128 */
+    0x0000,     /* R8129 */
+    0x0000,     /* R8130 */
+    0x0000,     /* R8131 */
+    0x0000,     /* R8132 */
+    0x0000,     /* R8133 */
+    0x0000,     /* R8134 */
+    0x0000,     /* R8135 */
+    0x0000,     /* R8136 */
+    0x0000,     /* R8137 */
+    0x0000,     /* R8138 */
+    0x0000,     /* R8139 */
+    0x0000,     /* R8140 */
+    0x0000,     /* R8141 */
+    0x0000,     /* R8142 */
+    0x0000,     /* R8143 */
+    0x0000,     /* R8144 */
+    0x0000,     /* R8145 */
+    0x0000,     /* R8146 */
+    0x0000,     /* R8147 */
+    0x0000,     /* R8148 */
+    0x0000,     /* R8149 */
+    0x0000,     /* R8150 */
+    0x0000,     /* R8151 */
+    0x0000,     /* R8152 */
+    0x0000,     /* R8153 */
+    0x0000,     /* R8154 */
+    0x0000,     /* R8155 */
+    0x0000,     /* R8156 */
+    0x0000,     /* R8157 */
+    0x0000,     /* R8158 */
+    0x0000,     /* R8159 */
+    0x0000,     /* R8160 */
+    0x0000,     /* R8161 */
+    0x0000,     /* R8162 */
+    0x0000,     /* R8163 */
+    0x0000,     /* R8164 */
+    0x0000,     /* R8165 */
+    0x0000,     /* R8166 */
+    0x0000,     /* R8167 */
+    0x0000,     /* R8168 */
+    0x0000,     /* R8169 */
+    0x0000,     /* R8170 */
+    0x0000,     /* R8171 */
+    0x0000,     /* R8172 */
+    0x0000,     /* R8173 */
+    0x0000,     /* R8174 */
+    0x0000,     /* R8175 */
+    0x0000,     /* R8176 */
+    0x0000,     /* R8177 */
+    0x0000,     /* R8178 */
+    0x0000,     /* R8179 */
+    0x0000,     /* R8180 */
+    0x0000,     /* R8181 */
+    0x0000,     /* R8182 */
+    0x0000,     /* R8183 */
+    0x0000,     /* R8184 */
+    0x0000,     /* R8185 */
+    0x0000,     /* R8186 */
+    0x0000,     /* R8187 */
+    0x0000,     /* R8188 */
+    0x0000,     /* R8189 */
+    0x0000,     /* R8190 */
+    0x0000,     /* R8191 */
+    0x0000,     /* R8192  - DSP2 Instruction RAM 0 */
+    0x0000,     /* R8193 */
+    0x0000,     /* R8194 */
+    0x0000,     /* R8195 */
+    0x0000,     /* R8196 */
+    0x0000,     /* R8197 */
+    0x0000,     /* R8198 */
+    0x0000,     /* R8199 */
+    0x0000,     /* R8200 */
+    0x0000,     /* R8201 */
+    0x0000,     /* R8202 */
+    0x0000,     /* R8203 */
+    0x0000,     /* R8204 */
+    0x0000,     /* R8205 */
+    0x0000,     /* R8206 */
+    0x0000,     /* R8207 */
+    0x0000,     /* R8208 */
+    0x0000,     /* R8209 */
+    0x0000,     /* R8210 */
+    0x0000,     /* R8211 */
+    0x0000,     /* R8212 */
+    0x0000,     /* R8213 */
+    0x0000,     /* R8214 */
+    0x0000,     /* R8215 */
+    0x0000,     /* R8216 */
+    0x0000,     /* R8217 */
+    0x0000,     /* R8218 */
+    0x0000,     /* R8219 */
+    0x0000,     /* R8220 */
+    0x0000,     /* R8221 */
+    0x0000,     /* R8222 */
+    0x0000,     /* R8223 */
+    0x0000,     /* R8224 */
+    0x0000,     /* R8225 */
+    0x0000,     /* R8226 */
+    0x0000,     /* R8227 */
+    0x0000,     /* R8228 */
+    0x0000,     /* R8229 */
+    0x0000,     /* R8230 */
+    0x0000,     /* R8231 */
+    0x0000,     /* R8232 */
+    0x0000,     /* R8233 */
+    0x0000,     /* R8234 */
+    0x0000,     /* R8235 */
+    0x0000,     /* R8236 */
+    0x0000,     /* R8237 */
+    0x0000,     /* R8238 */
+    0x0000,     /* R8239 */
+    0x0000,     /* R8240 */
+    0x0000,     /* R8241 */
+    0x0000,     /* R8242 */
+    0x0000,     /* R8243 */
+    0x0000,     /* R8244 */
+    0x0000,     /* R8245 */
+    0x0000,     /* R8246 */
+    0x0000,     /* R8247 */
+    0x0000,     /* R8248 */
+    0x0000,     /* R8249 */
+    0x0000,     /* R8250 */
+    0x0000,     /* R8251 */
+    0x0000,     /* R8252 */
+    0x0000,     /* R8253 */
+    0x0000,     /* R8254 */
+    0x0000,     /* R8255 */
+    0x0000,     /* R8256 */
+    0x0000,     /* R8257 */
+    0x0000,     /* R8258 */
+    0x0000,     /* R8259 */
+    0x0000,     /* R8260 */
+    0x0000,     /* R8261 */
+    0x0000,     /* R8262 */
+    0x0000,     /* R8263 */
+    0x0000,     /* R8264 */
+    0x0000,     /* R8265 */
+    0x0000,     /* R8266 */
+    0x0000,     /* R8267 */
+    0x0000,     /* R8268 */
+    0x0000,     /* R8269 */
+    0x0000,     /* R8270 */
+    0x0000,     /* R8271 */
+    0x0000,     /* R8272 */
+    0x0000,     /* R8273 */
+    0x0000,     /* R8274 */
+    0x0000,     /* R8275 */
+    0x0000,     /* R8276 */
+    0x0000,     /* R8277 */
+    0x0000,     /* R8278 */
+    0x0000,     /* R8279 */
+    0x0000,     /* R8280 */
+    0x0000,     /* R8281 */
+    0x0000,     /* R8282 */
+    0x0000,     /* R8283 */
+    0x0000,     /* R8284 */
+    0x0000,     /* R8285 */
+    0x0000,     /* R8286 */
+    0x0000,     /* R8287 */
+    0x0000,     /* R8288 */
+    0x0000,     /* R8289 */
+    0x0000,     /* R8290 */
+    0x0000,     /* R8291 */
+    0x0000,     /* R8292 */
+    0x0000,     /* R8293 */
+    0x0000,     /* R8294 */
+    0x0000,     /* R8295 */
+    0x0000,     /* R8296 */
+    0x0000,     /* R8297 */
+    0x0000,     /* R8298 */
+    0x0000,     /* R8299 */
+    0x0000,     /* R8300 */
+    0x0000,     /* R8301 */
+    0x0000,     /* R8302 */
+    0x0000,     /* R8303 */
+    0x0000,     /* R8304 */
+    0x0000,     /* R8305 */
+    0x0000,     /* R8306 */
+    0x0000,     /* R8307 */
+    0x0000,     /* R8308 */
+    0x0000,     /* R8309 */
+    0x0000,     /* R8310 */
+    0x0000,     /* R8311 */
+    0x0000,     /* R8312 */
+    0x0000,     /* R8313 */
+    0x0000,     /* R8314 */
+    0x0000,     /* R8315 */
+    0x0000,     /* R8316 */
+    0x0000,     /* R8317 */
+    0x0000,     /* R8318 */
+    0x0000,     /* R8319 */
+    0x0000,     /* R8320 */
+    0x0000,     /* R8321 */
+    0x0000,     /* R8322 */
+    0x0000,     /* R8323 */
+    0x0000,     /* R8324 */
+    0x0000,     /* R8325 */
+    0x0000,     /* R8326 */
+    0x0000,     /* R8327 */
+    0x0000,     /* R8328 */
+    0x0000,     /* R8329 */
+    0x0000,     /* R8330 */
+    0x0000,     /* R8331 */
+    0x0000,     /* R8332 */
+    0x0000,     /* R8333 */
+    0x0000,     /* R8334 */
+    0x0000,     /* R8335 */
+    0x0000,     /* R8336 */
+    0x0000,     /* R8337 */
+    0x0000,     /* R8338 */
+    0x0000,     /* R8339 */
+    0x0000,     /* R8340 */
+    0x0000,     /* R8341 */
+    0x0000,     /* R8342 */
+    0x0000,     /* R8343 */
+    0x0000,     /* R8344 */
+    0x0000,     /* R8345 */
+    0x0000,     /* R8346 */
+    0x0000,     /* R8347 */
+    0x0000,     /* R8348 */
+    0x0000,     /* R8349 */
+    0x0000,     /* R8350 */
+    0x0000,     /* R8351 */
+    0x0000,     /* R8352 */
+    0x0000,     /* R8353 */
+    0x0000,     /* R8354 */
+    0x0000,     /* R8355 */
+    0x0000,     /* R8356 */
+    0x0000,     /* R8357 */
+    0x0000,     /* R8358 */
+    0x0000,     /* R8359 */
+    0x0000,     /* R8360 */
+    0x0000,     /* R8361 */
+    0x0000,     /* R8362 */
+    0x0000,     /* R8363 */
+    0x0000,     /* R8364 */
+    0x0000,     /* R8365 */
+    0x0000,     /* R8366 */
+    0x0000,     /* R8367 */
+    0x0000,     /* R8368 */
+    0x0000,     /* R8369 */
+    0x0000,     /* R8370 */
+    0x0000,     /* R8371 */
+    0x0000,     /* R8372 */
+    0x0000,     /* R8373 */
+    0x0000,     /* R8374 */
+    0x0000,     /* R8375 */
+    0x0000,     /* R8376 */
+    0x0000,     /* R8377 */
+    0x0000,     /* R8378 */
+    0x0000,     /* R8379 */
+    0x0000,     /* R8380 */
+    0x0000,     /* R8381 */
+    0x0000,     /* R8382 */
+    0x0000,     /* R8383 */
+    0x0000,     /* R8384 */
+    0x0000,     /* R8385 */
+    0x0000,     /* R8386 */
+    0x0000,     /* R8387 */
+    0x0000,     /* R8388 */
+    0x0000,     /* R8389 */
+    0x0000,     /* R8390 */
+    0x0000,     /* R8391 */
+    0x0000,     /* R8392 */
+    0x0000,     /* R8393 */
+    0x0000,     /* R8394 */
+    0x0000,     /* R8395 */
+    0x0000,     /* R8396 */
+    0x0000,     /* R8397 */
+    0x0000,     /* R8398 */
+    0x0000,     /* R8399 */
+    0x0000,     /* R8400 */
+    0x0000,     /* R8401 */
+    0x0000,     /* R8402 */
+    0x0000,     /* R8403 */
+    0x0000,     /* R8404 */
+    0x0000,     /* R8405 */
+    0x0000,     /* R8406 */
+    0x0000,     /* R8407 */
+    0x0000,     /* R8408 */
+    0x0000,     /* R8409 */
+    0x0000,     /* R8410 */
+    0x0000,     /* R8411 */
+    0x0000,     /* R8412 */
+    0x0000,     /* R8413 */
+    0x0000,     /* R8414 */
+    0x0000,     /* R8415 */
+    0x0000,     /* R8416 */
+    0x0000,     /* R8417 */
+    0x0000,     /* R8418 */
+    0x0000,     /* R8419 */
+    0x0000,     /* R8420 */
+    0x0000,     /* R8421 */
+    0x0000,     /* R8422 */
+    0x0000,     /* R8423 */
+    0x0000,     /* R8424 */
+    0x0000,     /* R8425 */
+    0x0000,     /* R8426 */
+    0x0000,     /* R8427 */
+    0x0000,     /* R8428 */
+    0x0000,     /* R8429 */
+    0x0000,     /* R8430 */
+    0x0000,     /* R8431 */
+    0x0000,     /* R8432 */
+    0x0000,     /* R8433 */
+    0x0000,     /* R8434 */
+    0x0000,     /* R8435 */
+    0x0000,     /* R8436 */
+    0x0000,     /* R8437 */
+    0x0000,     /* R8438 */
+    0x0000,     /* R8439 */
+    0x0000,     /* R8440 */
+    0x0000,     /* R8441 */
+    0x0000,     /* R8442 */
+    0x0000,     /* R8443 */
+    0x0000,     /* R8444 */
+    0x0000,     /* R8445 */
+    0x0000,     /* R8446 */
+    0x0000,     /* R8447 */
+    0x0000,     /* R8448 */
+    0x0000,     /* R8449 */
+    0x0000,     /* R8450 */
+    0x0000,     /* R8451 */
+    0x0000,     /* R8452 */
+    0x0000,     /* R8453 */
+    0x0000,     /* R8454 */
+    0x0000,     /* R8455 */
+    0x0000,     /* R8456 */
+    0x0000,     /* R8457 */
+    0x0000,     /* R8458 */
+    0x0000,     /* R8459 */
+    0x0000,     /* R8460 */
+    0x0000,     /* R8461 */
+    0x0000,     /* R8462 */
+    0x0000,     /* R8463 */
+    0x0000,     /* R8464 */
+    0x0000,     /* R8465 */
+    0x0000,     /* R8466 */
+    0x0000,     /* R8467 */
+    0x0000,     /* R8468 */
+    0x0000,     /* R8469 */
+    0x0000,     /* R8470 */
+    0x0000,     /* R8471 */
+    0x0000,     /* R8472 */
+    0x0000,     /* R8473 */
+    0x0000,     /* R8474 */
+    0x0000,     /* R8475 */
+    0x0000,     /* R8476 */
+    0x0000,     /* R8477 */
+    0x0000,     /* R8478 */
+    0x0000,     /* R8479 */
+    0x0000,     /* R8480 */
+    0x0000,     /* R8481 */
+    0x0000,     /* R8482 */
+    0x0000,     /* R8483 */
+    0x0000,     /* R8484 */
+    0x0000,     /* R8485 */
+    0x0000,     /* R8486 */
+    0x0000,     /* R8487 */
+    0x0000,     /* R8488 */
+    0x0000,     /* R8489 */
+    0x0000,     /* R8490 */
+    0x0000,     /* R8491 */
+    0x0000,     /* R8492 */
+    0x0000,     /* R8493 */
+    0x0000,     /* R8494 */
+    0x0000,     /* R8495 */
+    0x0000,     /* R8496 */
+    0x0000,     /* R8497 */
+    0x0000,     /* R8498 */
+    0x0000,     /* R8499 */
+    0x0000,     /* R8500 */
+    0x0000,     /* R8501 */
+    0x0000,     /* R8502 */
+    0x0000,     /* R8503 */
+    0x0000,     /* R8504 */
+    0x0000,     /* R8505 */
+    0x0000,     /* R8506 */
+    0x0000,     /* R8507 */
+    0x0000,     /* R8508 */
+    0x0000,     /* R8509 */
+    0x0000,     /* R8510 */
+    0x0000,     /* R8511 */
+    0x0000,     /* R8512 */
+    0x0000,     /* R8513 */
+    0x0000,     /* R8514 */
+    0x0000,     /* R8515 */
+    0x0000,     /* R8516 */
+    0x0000,     /* R8517 */
+    0x0000,     /* R8518 */
+    0x0000,     /* R8519 */
+    0x0000,     /* R8520 */
+    0x0000,     /* R8521 */
+    0x0000,     /* R8522 */
+    0x0000,     /* R8523 */
+    0x0000,     /* R8524 */
+    0x0000,     /* R8525 */
+    0x0000,     /* R8526 */
+    0x0000,     /* R8527 */
+    0x0000,     /* R8528 */
+    0x0000,     /* R8529 */
+    0x0000,     /* R8530 */
+    0x0000,     /* R8531 */
+    0x0000,     /* R8532 */
+    0x0000,     /* R8533 */
+    0x0000,     /* R8534 */
+    0x0000,     /* R8535 */
+    0x0000,     /* R8536 */
+    0x0000,     /* R8537 */
+    0x0000,     /* R8538 */
+    0x0000,     /* R8539 */
+    0x0000,     /* R8540 */
+    0x0000,     /* R8541 */
+    0x0000,     /* R8542 */
+    0x0000,     /* R8543 */
+    0x0000,     /* R8544 */
+    0x0000,     /* R8545 */
+    0x0000,     /* R8546 */
+    0x0000,     /* R8547 */
+    0x0000,     /* R8548 */
+    0x0000,     /* R8549 */
+    0x0000,     /* R8550 */
+    0x0000,     /* R8551 */
+    0x0000,     /* R8552 */
+    0x0000,     /* R8553 */
+    0x0000,     /* R8554 */
+    0x0000,     /* R8555 */
+    0x0000,     /* R8556 */
+    0x0000,     /* R8557 */
+    0x0000,     /* R8558 */
+    0x0000,     /* R8559 */
+    0x0000,     /* R8560 */
+    0x0000,     /* R8561 */
+    0x0000,     /* R8562 */
+    0x0000,     /* R8563 */
+    0x0000,     /* R8564 */
+    0x0000,     /* R8565 */
+    0x0000,     /* R8566 */
+    0x0000,     /* R8567 */
+    0x0000,     /* R8568 */
+    0x0000,     /* R8569 */
+    0x0000,     /* R8570 */
+    0x0000,     /* R8571 */
+    0x0000,     /* R8572 */
+    0x0000,     /* R8573 */
+    0x0000,     /* R8574 */
+    0x0000,     /* R8575 */
+    0x0000,     /* R8576 */
+    0x0000,     /* R8577 */
+    0x0000,     /* R8578 */
+    0x0000,     /* R8579 */
+    0x0000,     /* R8580 */
+    0x0000,     /* R8581 */
+    0x0000,     /* R8582 */
+    0x0000,     /* R8583 */
+    0x0000,     /* R8584 */
+    0x0000,     /* R8585 */
+    0x0000,     /* R8586 */
+    0x0000,     /* R8587 */
+    0x0000,     /* R8588 */
+    0x0000,     /* R8589 */
+    0x0000,     /* R8590 */
+    0x0000,     /* R8591 */
+    0x0000,     /* R8592 */
+    0x0000,     /* R8593 */
+    0x0000,     /* R8594 */
+    0x0000,     /* R8595 */
+    0x0000,     /* R8596 */
+    0x0000,     /* R8597 */
+    0x0000,     /* R8598 */
+    0x0000,     /* R8599 */
+    0x0000,     /* R8600 */
+    0x0000,     /* R8601 */
+    0x0000,     /* R8602 */
+    0x0000,     /* R8603 */
+    0x0000,     /* R8604 */
+    0x0000,     /* R8605 */
+    0x0000,     /* R8606 */
+    0x0000,     /* R8607 */
+    0x0000,     /* R8608 */
+    0x0000,     /* R8609 */
+    0x0000,     /* R8610 */
+    0x0000,     /* R8611 */
+    0x0000,     /* R8612 */
+    0x0000,     /* R8613 */
+    0x0000,     /* R8614 */
+    0x0000,     /* R8615 */
+    0x0000,     /* R8616 */
+    0x0000,     /* R8617 */
+    0x0000,     /* R8618 */
+    0x0000,     /* R8619 */
+    0x0000,     /* R8620 */
+    0x0000,     /* R8621 */
+    0x0000,     /* R8622 */
+    0x0000,     /* R8623 */
+    0x0000,     /* R8624 */
+    0x0000,     /* R8625 */
+    0x0000,     /* R8626 */
+    0x0000,     /* R8627 */
+    0x0000,     /* R8628 */
+    0x0000,     /* R8629 */
+    0x0000,     /* R8630 */
+    0x0000,     /* R8631 */
+    0x0000,     /* R8632 */
+    0x0000,     /* R8633 */
+    0x0000,     /* R8634 */
+    0x0000,     /* R8635 */
+    0x0000,     /* R8636 */
+    0x0000,     /* R8637 */
+    0x0000,     /* R8638 */
+    0x0000,     /* R8639 */
+    0x0000,     /* R8640 */
+    0x0000,     /* R8641 */
+    0x0000,     /* R8642 */
+    0x0000,     /* R8643 */
+    0x0000,     /* R8644 */
+    0x0000,     /* R8645 */
+    0x0000,     /* R8646 */
+    0x0000,     /* R8647 */
+    0x0000,     /* R8648 */
+    0x0000,     /* R8649 */
+    0x0000,     /* R8650 */
+    0x0000,     /* R8651 */
+    0x0000,     /* R8652 */
+    0x0000,     /* R8653 */
+    0x0000,     /* R8654 */
+    0x0000,     /* R8655 */
+    0x0000,     /* R8656 */
+    0x0000,     /* R8657 */
+    0x0000,     /* R8658 */
+    0x0000,     /* R8659 */
+    0x0000,     /* R8660 */
+    0x0000,     /* R8661 */
+    0x0000,     /* R8662 */
+    0x0000,     /* R8663 */
+    0x0000,     /* R8664 */
+    0x0000,     /* R8665 */
+    0x0000,     /* R8666 */
+    0x0000,     /* R8667 */
+    0x0000,     /* R8668 */
+    0x0000,     /* R8669 */
+    0x0000,     /* R8670 */
+    0x0000,     /* R8671 */
+    0x0000,     /* R8672 */
+    0x0000,     /* R8673 */
+    0x0000,     /* R8674 */
+    0x0000,     /* R8675 */
+    0x0000,     /* R8676 */
+    0x0000,     /* R8677 */
+    0x0000,     /* R8678 */
+    0x0000,     /* R8679 */
+    0x0000,     /* R8680 */
+    0x0000,     /* R8681 */
+    0x0000,     /* R8682 */
+    0x0000,     /* R8683 */
+    0x0000,     /* R8684 */
+    0x0000,     /* R8685 */
+    0x0000,     /* R8686 */
+    0x0000,     /* R8687 */
+    0x0000,     /* R8688 */
+    0x0000,     /* R8689 */
+    0x0000,     /* R8690 */
+    0x0000,     /* R8691 */
+    0x0000,     /* R8692 */
+    0x0000,     /* R8693 */
+    0x0000,     /* R8694 */
+    0x0000,     /* R8695 */
+    0x0000,     /* R8696 */
+    0x0000,     /* R8697 */
+    0x0000,     /* R8698 */
+    0x0000,     /* R8699 */
+    0x0000,     /* R8700 */
+    0x0000,     /* R8701 */
+    0x0000,     /* R8702 */
+    0x0000,     /* R8703 */
+    0x0000,     /* R8704 */
+    0x0000,     /* R8705 */
+    0x0000,     /* R8706 */
+    0x0000,     /* R8707 */
+    0x0000,     /* R8708 */
+    0x0000,     /* R8709 */
+    0x0000,     /* R8710 */
+    0x0000,     /* R8711 */
+    0x0000,     /* R8712 */
+    0x0000,     /* R8713 */
+    0x0000,     /* R8714 */
+    0x0000,     /* R8715 */
+    0x0000,     /* R8716 */
+    0x0000,     /* R8717 */
+    0x0000,     /* R8718 */
+    0x0000,     /* R8719 */
+    0x0000,     /* R8720 */
+    0x0000,     /* R8721 */
+    0x0000,     /* R8722 */
+    0x0000,     /* R8723 */
+    0x0000,     /* R8724 */
+    0x0000,     /* R8725 */
+    0x0000,     /* R8726 */
+    0x0000,     /* R8727 */
+    0x0000,     /* R8728 */
+    0x0000,     /* R8729 */
+    0x0000,     /* R8730 */
+    0x0000,     /* R8731 */
+    0x0000,     /* R8732 */
+    0x0000,     /* R8733 */
+    0x0000,     /* R8734 */
+    0x0000,     /* R8735 */
+    0x0000,     /* R8736 */
+    0x0000,     /* R8737 */
+    0x0000,     /* R8738 */
+    0x0000,     /* R8739 */
+    0x0000,     /* R8740 */
+    0x0000,     /* R8741 */
+    0x0000,     /* R8742 */
+    0x0000,     /* R8743 */
+    0x0000,     /* R8744 */
+    0x0000,     /* R8745 */
+    0x0000,     /* R8746 */
+    0x0000,     /* R8747 */
+    0x0000,     /* R8748 */
+    0x0000,     /* R8749 */
+    0x0000,     /* R8750 */
+    0x0000,     /* R8751 */
+    0x0000,     /* R8752 */
+    0x0000,     /* R8753 */
+    0x0000,     /* R8754 */
+    0x0000,     /* R8755 */
+    0x0000,     /* R8756 */
+    0x0000,     /* R8757 */
+    0x0000,     /* R8758 */
+    0x0000,     /* R8759 */
+    0x0000,     /* R8760 */
+    0x0000,     /* R8761 */
+    0x0000,     /* R8762 */
+    0x0000,     /* R8763 */
+    0x0000,     /* R8764 */
+    0x0000,     /* R8765 */
+    0x0000,     /* R8766 */
+    0x0000,     /* R8767 */
+    0x0000,     /* R8768 */
+    0x0000,     /* R8769 */
+    0x0000,     /* R8770 */
+    0x0000,     /* R8771 */
+    0x0000,     /* R8772 */
+    0x0000,     /* R8773 */
+    0x0000,     /* R8774 */
+    0x0000,     /* R8775 */
+    0x0000,     /* R8776 */
+    0x0000,     /* R8777 */
+    0x0000,     /* R8778 */
+    0x0000,     /* R8779 */
+    0x0000,     /* R8780 */
+    0x0000,     /* R8781 */
+    0x0000,     /* R8782 */
+    0x0000,     /* R8783 */
+    0x0000,     /* R8784 */
+    0x0000,     /* R8785 */
+    0x0000,     /* R8786 */
+    0x0000,     /* R8787 */
+    0x0000,     /* R8788 */
+    0x0000,     /* R8789 */
+    0x0000,     /* R8790 */
+    0x0000,     /* R8791 */
+    0x0000,     /* R8792 */
+    0x0000,     /* R8793 */
+    0x0000,     /* R8794 */
+    0x0000,     /* R8795 */
+    0x0000,     /* R8796 */
+    0x0000,     /* R8797 */
+    0x0000,     /* R8798 */
+    0x0000,     /* R8799 */
+    0x0000,     /* R8800 */
+    0x0000,     /* R8801 */
+    0x0000,     /* R8802 */
+    0x0000,     /* R8803 */
+    0x0000,     /* R8804 */
+    0x0000,     /* R8805 */
+    0x0000,     /* R8806 */
+    0x0000,     /* R8807 */
+    0x0000,     /* R8808 */
+    0x0000,     /* R8809 */
+    0x0000,     /* R8810 */
+    0x0000,     /* R8811 */
+    0x0000,     /* R8812 */
+    0x0000,     /* R8813 */
+    0x0000,     /* R8814 */
+    0x0000,     /* R8815 */
+    0x0000,     /* R8816 */
+    0x0000,     /* R8817 */
+    0x0000,     /* R8818 */
+    0x0000,     /* R8819 */
+    0x0000,     /* R8820 */
+    0x0000,     /* R8821 */
+    0x0000,     /* R8822 */
+    0x0000,     /* R8823 */
+    0x0000,     /* R8824 */
+    0x0000,     /* R8825 */
+    0x0000,     /* R8826 */
+    0x0000,     /* R8827 */
+    0x0000,     /* R8828 */
+    0x0000,     /* R8829 */
+    0x0000,     /* R8830 */
+    0x0000,     /* R8831 */
+    0x0000,     /* R8832 */
+    0x0000,     /* R8833 */
+    0x0000,     /* R8834 */
+    0x0000,     /* R8835 */
+    0x0000,     /* R8836 */
+    0x0000,     /* R8837 */
+    0x0000,     /* R8838 */
+    0x0000,     /* R8839 */
+    0x0000,     /* R8840 */
+    0x0000,     /* R8841 */
+    0x0000,     /* R8842 */
+    0x0000,     /* R8843 */
+    0x0000,     /* R8844 */
+    0x0000,     /* R8845 */
+    0x0000,     /* R8846 */
+    0x0000,     /* R8847 */
+    0x0000,     /* R8848 */
+    0x0000,     /* R8849 */
+    0x0000,     /* R8850 */
+    0x0000,     /* R8851 */
+    0x0000,     /* R8852 */
+    0x0000,     /* R8853 */
+    0x0000,     /* R8854 */
+    0x0000,     /* R8855 */
+    0x0000,     /* R8856 */
+    0x0000,     /* R8857 */
+    0x0000,     /* R8858 */
+    0x0000,     /* R8859 */
+    0x0000,     /* R8860 */
+    0x0000,     /* R8861 */
+    0x0000,     /* R8862 */
+    0x0000,     /* R8863 */
+    0x0000,     /* R8864 */
+    0x0000,     /* R8865 */
+    0x0000,     /* R8866 */
+    0x0000,     /* R8867 */
+    0x0000,     /* R8868 */
+    0x0000,     /* R8869 */
+    0x0000,     /* R8870 */
+    0x0000,     /* R8871 */
+    0x0000,     /* R8872 */
+    0x0000,     /* R8873 */
+    0x0000,     /* R8874 */
+    0x0000,     /* R8875 */
+    0x0000,     /* R8876 */
+    0x0000,     /* R8877 */
+    0x0000,     /* R8878 */
+    0x0000,     /* R8879 */
+    0x0000,     /* R8880 */
+    0x0000,     /* R8881 */
+    0x0000,     /* R8882 */
+    0x0000,     /* R8883 */
+    0x0000,     /* R8884 */
+    0x0000,     /* R8885 */
+    0x0000,     /* R8886 */
+    0x0000,     /* R8887 */
+    0x0000,     /* R8888 */
+    0x0000,     /* R8889 */
+    0x0000,     /* R8890 */
+    0x0000,     /* R8891 */
+    0x0000,     /* R8892 */
+    0x0000,     /* R8893 */
+    0x0000,     /* R8894 */
+    0x0000,     /* R8895 */
+    0x0000,     /* R8896 */
+    0x0000,     /* R8897 */
+    0x0000,     /* R8898 */
+    0x0000,     /* R8899 */
+    0x0000,     /* R8900 */
+    0x0000,     /* R8901 */
+    0x0000,     /* R8902 */
+    0x0000,     /* R8903 */
+    0x0000,     /* R8904 */
+    0x0000,     /* R8905 */
+    0x0000,     /* R8906 */
+    0x0000,     /* R8907 */
+    0x0000,     /* R8908 */
+    0x0000,     /* R8909 */
+    0x0000,     /* R8910 */
+    0x0000,     /* R8911 */
+    0x0000,     /* R8912 */
+    0x0000,     /* R8913 */
+    0x0000,     /* R8914 */
+    0x0000,     /* R8915 */
+    0x0000,     /* R8916 */
+    0x0000,     /* R8917 */
+    0x0000,     /* R8918 */
+    0x0000,     /* R8919 */
+    0x0000,     /* R8920 */
+    0x0000,     /* R8921 */
+    0x0000,     /* R8922 */
+    0x0000,     /* R8923 */
+    0x0000,     /* R8924 */
+    0x0000,     /* R8925 */
+    0x0000,     /* R8926 */
+    0x0000,     /* R8927 */
+    0x0000,     /* R8928 */
+    0x0000,     /* R8929 */
+    0x0000,     /* R8930 */
+    0x0000,     /* R8931 */
+    0x0000,     /* R8932 */
+    0x0000,     /* R8933 */
+    0x0000,     /* R8934 */
+    0x0000,     /* R8935 */
+    0x0000,     /* R8936 */
+    0x0000,     /* R8937 */
+    0x0000,     /* R8938 */
+    0x0000,     /* R8939 */
+    0x0000,     /* R8940 */
+    0x0000,     /* R8941 */
+    0x0000,     /* R8942 */
+    0x0000,     /* R8943 */
+    0x0000,     /* R8944 */
+    0x0000,     /* R8945 */
+    0x0000,     /* R8946 */
+    0x0000,     /* R8947 */
+    0x0000,     /* R8948 */
+    0x0000,     /* R8949 */
+    0x0000,     /* R8950 */
+    0x0000,     /* R8951 */
+    0x0000,     /* R8952 */
+    0x0000,     /* R8953 */
+    0x0000,     /* R8954 */
+    0x0000,     /* R8955 */
+    0x0000,     /* R8956 */
+    0x0000,     /* R8957 */
+    0x0000,     /* R8958 */
+    0x0000,     /* R8959 */
+    0x0000,     /* R8960 */
+    0x0000,     /* R8961 */
+    0x0000,     /* R8962 */
+    0x0000,     /* R8963 */
+    0x0000,     /* R8964 */
+    0x0000,     /* R8965 */
+    0x0000,     /* R8966 */
+    0x0000,     /* R8967 */
+    0x0000,     /* R8968 */
+    0x0000,     /* R8969 */
+    0x0000,     /* R8970 */
+    0x0000,     /* R8971 */
+    0x0000,     /* R8972 */
+    0x0000,     /* R8973 */
+    0x0000,     /* R8974 */
+    0x0000,     /* R8975 */
+    0x0000,     /* R8976 */
+    0x0000,     /* R8977 */
+    0x0000,     /* R8978 */
+    0x0000,     /* R8979 */
+    0x0000,     /* R8980 */
+    0x0000,     /* R8981 */
+    0x0000,     /* R8982 */
+    0x0000,     /* R8983 */
+    0x0000,     /* R8984 */
+    0x0000,     /* R8985 */
+    0x0000,     /* R8986 */
+    0x0000,     /* R8987 */
+    0x0000,     /* R8988 */
+    0x0000,     /* R8989 */
+    0x0000,     /* R8990 */
+    0x0000,     /* R8991 */
+    0x0000,     /* R8992 */
+    0x0000,     /* R8993 */
+    0x0000,     /* R8994 */
+    0x0000,     /* R8995 */
+    0x0000,     /* R8996 */
+    0x0000,     /* R8997 */
+    0x0000,     /* R8998 */
+    0x0000,     /* R8999 */
+    0x0000,     /* R9000 */
+    0x0000,     /* R9001 */
+    0x0000,     /* R9002 */
+    0x0000,     /* R9003 */
+    0x0000,     /* R9004 */
+    0x0000,     /* R9005 */
+    0x0000,     /* R9006 */
+    0x0000,     /* R9007 */
+    0x0000,     /* R9008 */
+    0x0000,     /* R9009 */
+    0x0000,     /* R9010 */
+    0x0000,     /* R9011 */
+    0x0000,     /* R9012 */
+    0x0000,     /* R9013 */
+    0x0000,     /* R9014 */
+    0x0000,     /* R9015 */
+    0x0000,     /* R9016 */
+    0x0000,     /* R9017 */
+    0x0000,     /* R9018 */
+    0x0000,     /* R9019 */
+    0x0000,     /* R9020 */
+    0x0000,     /* R9021 */
+    0x0000,     /* R9022 */
+    0x0000,     /* R9023 */
+    0x0000,     /* R9024 */
+    0x0000,     /* R9025 */
+    0x0000,     /* R9026 */
+    0x0000,     /* R9027 */
+    0x0000,     /* R9028 */
+    0x0000,     /* R9029 */
+    0x0000,     /* R9030 */
+    0x0000,     /* R9031 */
+    0x0000,     /* R9032 */
+    0x0000,     /* R9033 */
+    0x0000,     /* R9034 */
+    0x0000,     /* R9035 */
+    0x0000,     /* R9036 */
+    0x0000,     /* R9037 */
+    0x0000,     /* R9038 */
+    0x0000,     /* R9039 */
+    0x0000,     /* R9040 */
+    0x0000,     /* R9041 */
+    0x0000,     /* R9042 */
+    0x0000,     /* R9043 */
+    0x0000,     /* R9044 */
+    0x0000,     /* R9045 */
+    0x0000,     /* R9046 */
+    0x0000,     /* R9047 */
+    0x0000,     /* R9048 */
+    0x0000,     /* R9049 */
+    0x0000,     /* R9050 */
+    0x0000,     /* R9051 */
+    0x0000,     /* R9052 */
+    0x0000,     /* R9053 */
+    0x0000,     /* R9054 */
+    0x0000,     /* R9055 */
+    0x0000,     /* R9056 */
+    0x0000,     /* R9057 */
+    0x0000,     /* R9058 */
+    0x0000,     /* R9059 */
+    0x0000,     /* R9060 */
+    0x0000,     /* R9061 */
+    0x0000,     /* R9062 */
+    0x0000,     /* R9063 */
+    0x0000,     /* R9064 */
+    0x0000,     /* R9065 */
+    0x0000,     /* R9066 */
+    0x0000,     /* R9067 */
+    0x0000,     /* R9068 */
+    0x0000,     /* R9069 */
+    0x0000,     /* R9070 */
+    0x0000,     /* R9071 */
+    0x0000,     /* R9072 */
+    0x0000,     /* R9073 */
+    0x0000,     /* R9074 */
+    0x0000,     /* R9075 */
+    0x0000,     /* R9076 */
+    0x0000,     /* R9077 */
+    0x0000,     /* R9078 */
+    0x0000,     /* R9079 */
+    0x0000,     /* R9080 */
+    0x0000,     /* R9081 */
+    0x0000,     /* R9082 */
+    0x0000,     /* R9083 */
+    0x0000,     /* R9084 */
+    0x0000,     /* R9085 */
+    0x0000,     /* R9086 */
+    0x0000,     /* R9087 */
+    0x0000,     /* R9088 */
+    0x0000,     /* R9089 */
+    0x0000,     /* R9090 */
+    0x0000,     /* R9091 */
+    0x0000,     /* R9092 */
+    0x0000,     /* R9093 */
+    0x0000,     /* R9094 */
+    0x0000,     /* R9095 */
+    0x0000,     /* R9096 */
+    0x0000,     /* R9097 */
+    0x0000,     /* R9098 */
+    0x0000,     /* R9099 */
+    0x0000,     /* R9100 */
+    0x0000,     /* R9101 */
+    0x0000,     /* R9102 */
+    0x0000,     /* R9103 */
+    0x0000,     /* R9104 */
+    0x0000,     /* R9105 */
+    0x0000,     /* R9106 */
+    0x0000,     /* R9107 */
+    0x0000,     /* R9108 */
+    0x0000,     /* R9109 */
+    0x0000,     /* R9110 */
+    0x0000,     /* R9111 */
+    0x0000,     /* R9112 */
+    0x0000,     /* R9113 */
+    0x0000,     /* R9114 */
+    0x0000,     /* R9115 */
+    0x0000,     /* R9116 */
+    0x0000,     /* R9117 */
+    0x0000,     /* R9118 */
+    0x0000,     /* R9119 */
+    0x0000,     /* R9120 */
+    0x0000,     /* R9121 */
+    0x0000,     /* R9122 */
+    0x0000,     /* R9123 */
+    0x0000,     /* R9124 */
+    0x0000,     /* R9125 */
+    0x0000,     /* R9126 */
+    0x0000,     /* R9127 */
+    0x0000,     /* R9128 */
+    0x0000,     /* R9129 */
+    0x0000,     /* R9130 */
+    0x0000,     /* R9131 */
+    0x0000,     /* R9132 */
+    0x0000,     /* R9133 */
+    0x0000,     /* R9134 */
+    0x0000,     /* R9135 */
+    0x0000,     /* R9136 */
+    0x0000,     /* R9137 */
+    0x0000,     /* R9138 */
+    0x0000,     /* R9139 */
+    0x0000,     /* R9140 */
+    0x0000,     /* R9141 */
+    0x0000,     /* R9142 */
+    0x0000,     /* R9143 */
+    0x0000,     /* R9144 */
+    0x0000,     /* R9145 */
+    0x0000,     /* R9146 */
+    0x0000,     /* R9147 */
+    0x0000,     /* R9148 */
+    0x0000,     /* R9149 */
+    0x0000,     /* R9150 */
+    0x0000,     /* R9151 */
+    0x0000,     /* R9152 */
+    0x0000,     /* R9153 */
+    0x0000,     /* R9154 */
+    0x0000,     /* R9155 */
+    0x0000,     /* R9156 */
+    0x0000,     /* R9157 */
+    0x0000,     /* R9158 */
+    0x0000,     /* R9159 */
+    0x0000,     /* R9160 */
+    0x0000,     /* R9161 */
+    0x0000,     /* R9162 */
+    0x0000,     /* R9163 */
+    0x0000,     /* R9164 */
+    0x0000,     /* R9165 */
+    0x0000,     /* R9166 */
+    0x0000,     /* R9167 */
+    0x0000,     /* R9168 */
+    0x0000,     /* R9169 */
+    0x0000,     /* R9170 */
+    0x0000,     /* R9171 */
+    0x0000,     /* R9172 */
+    0x0000,     /* R9173 */
+    0x0000,     /* R9174 */
+    0x0000,     /* R9175 */
+    0x0000,     /* R9176 */
+    0x0000,     /* R9177 */
+    0x0000,     /* R9178 */
+    0x0000,     /* R9179 */
+    0x0000,     /* R9180 */
+    0x0000,     /* R9181 */
+    0x0000,     /* R9182 */
+    0x0000,     /* R9183 */
+    0x0000,     /* R9184 */
+    0x0000,     /* R9185 */
+    0x0000,     /* R9186 */
+    0x0000,     /* R9187 */
+    0x0000,     /* R9188 */
+    0x0000,     /* R9189 */
+    0x0000,     /* R9190 */
+    0x0000,     /* R9191 */
+    0x0000,     /* R9192 */
+    0x0000,     /* R9193 */
+    0x0000,     /* R9194 */
+    0x0000,     /* R9195 */
+    0x0000,     /* R9196 */
+    0x0000,     /* R9197 */
+    0x0000,     /* R9198 */
+    0x0000,     /* R9199 */
+    0x0000,     /* R9200 */
+    0x0000,     /* R9201 */
+    0x0000,     /* R9202 */
+    0x0000,     /* R9203 */
+    0x0000,     /* R9204 */
+    0x0000,     /* R9205 */
+    0x0000,     /* R9206 */
+    0x0000,     /* R9207 */
+    0x0000,     /* R9208 */
+    0x0000,     /* R9209 */
+    0x0000,     /* R9210 */
+    0x0000,     /* R9211 */
+    0x0000,     /* R9212 */
+    0x0000,     /* R9213 */
+    0x0000,     /* R9214 */
+    0x0000,     /* R9215 */
+    0x0030,     /* R9216  - DSP2 Address RAM 2 */
+    0x0000,     /* R9217  - DSP2 Address RAM 1 */
+    0x0000,     /* R9218  - DSP2 Address RAM 0 */
+    0x0000,     /* R9219 */
+    0x0000,     /* R9220 */
+    0x0000,     /* R9221 */
+    0x0000,     /* R9222 */
+    0x0000,     /* R9223 */
+    0x0000,     /* R9224 */
+    0x0000,     /* R9225 */
+    0x0000,     /* R9226 */
+    0x0000,     /* R9227 */
+    0x0000,     /* R9228 */
+    0x0000,     /* R9229 */
+    0x0000,     /* R9230 */
+    0x0000,     /* R9231 */
+    0x0000,     /* R9232 */
+    0x0000,     /* R9233 */
+    0x0000,     /* R9234 */
+    0x0000,     /* R9235 */
+    0x0000,     /* R9236 */
+    0x0000,     /* R9237 */
+    0x0000,     /* R9238 */
+    0x0000,     /* R9239 */
+    0x0000,     /* R9240 */
+    0x0000,     /* R9241 */
+    0x0000,     /* R9242 */
+    0x0000,     /* R9243 */
+    0x0000,     /* R9244 */
+    0x0000,     /* R9245 */
+    0x0000,     /* R9246 */
+    0x0000,     /* R9247 */
+    0x0000,     /* R9248 */
+    0x0000,     /* R9249 */
+    0x0000,     /* R9250 */
+    0x0000,     /* R9251 */
+    0x0000,     /* R9252 */
+    0x0000,     /* R9253 */
+    0x0000,     /* R9254 */
+    0x0000,     /* R9255 */
+    0x0000,     /* R9256 */
+    0x0000,     /* R9257 */
+    0x0000,     /* R9258 */
+    0x0000,     /* R9259 */
+    0x0000,     /* R9260 */
+    0x0000,     /* R9261 */
+    0x0000,     /* R9262 */
+    0x0000,     /* R9263 */
+    0x0000,     /* R9264 */
+    0x0000,     /* R9265 */
+    0x0000,     /* R9266 */
+    0x0000,     /* R9267 */
+    0x0000,     /* R9268 */
+    0x0000,     /* R9269 */
+    0x0000,     /* R9270 */
+    0x0000,     /* R9271 */
+    0x0000,     /* R9272 */
+    0x0000,     /* R9273 */
+    0x0000,     /* R9274 */
+    0x0000,     /* R9275 */
+    0x0000,     /* R9276 */
+    0x0000,     /* R9277 */
+    0x0000,     /* R9278 */
+    0x0000,     /* R9279 */
+    0x0000,     /* R9280 */
+    0x0000,     /* R9281 */
+    0x0000,     /* R9282 */
+    0x0000,     /* R9283 */
+    0x0000,     /* R9284 */
+    0x0000,     /* R9285 */
+    0x0000,     /* R9286 */
+    0x0000,     /* R9287 */
+    0x0000,     /* R9288 */
+    0x0000,     /* R9289 */
+    0x0000,     /* R9290 */
+    0x0000,     /* R9291 */
+    0x0000,     /* R9292 */
+    0x0000,     /* R9293 */
+    0x0000,     /* R9294 */
+    0x0000,     /* R9295 */
+    0x0000,     /* R9296 */
+    0x0000,     /* R9297 */
+    0x0000,     /* R9298 */
+    0x0000,     /* R9299 */
+    0x0000,     /* R9300 */
+    0x0000,     /* R9301 */
+    0x0000,     /* R9302 */
+    0x0000,     /* R9303 */
+    0x0000,     /* R9304 */
+    0x0000,     /* R9305 */
+    0x0000,     /* R9306 */
+    0x0000,     /* R9307 */
+    0x0000,     /* R9308 */
+    0x0000,     /* R9309 */
+    0x0000,     /* R9310 */
+    0x0000,     /* R9311 */
+    0x0000,     /* R9312 */
+    0x0000,     /* R9313 */
+    0x0000,     /* R9314 */
+    0x0000,     /* R9315 */
+    0x0000,     /* R9316 */
+    0x0000,     /* R9317 */
+    0x0000,     /* R9318 */
+    0x0000,     /* R9319 */
+    0x0000,     /* R9320 */
+    0x0000,     /* R9321 */
+    0x0000,     /* R9322 */
+    0x0000,     /* R9323 */
+    0x0000,     /* R9324 */
+    0x0000,     /* R9325 */
+    0x0000,     /* R9326 */
+    0x0000,     /* R9327 */
+    0x0000,     /* R9328 */
+    0x0000,     /* R9329 */
+    0x0000,     /* R9330 */
+    0x0000,     /* R9331 */
+    0x0000,     /* R9332 */
+    0x0000,     /* R9333 */
+    0x0000,     /* R9334 */
+    0x0000,     /* R9335 */
+    0x0000,     /* R9336 */
+    0x0000,     /* R9337 */
+    0x0000,     /* R9338 */
+    0x0000,     /* R9339 */
+    0x0000,     /* R9340 */
+    0x0000,     /* R9341 */
+    0x0000,     /* R9342 */
+    0x0000,     /* R9343 */
+    0x0000,     /* R9344 */
+    0x0000,     /* R9345 */
+    0x0000,     /* R9346 */
+    0x0000,     /* R9347 */
+    0x0000,     /* R9348 */
+    0x0000,     /* R9349 */
+    0x0000,     /* R9350 */
+    0x0000,     /* R9351 */
+    0x0000,     /* R9352 */
+    0x0000,     /* R9353 */
+    0x0000,     /* R9354 */
+    0x0000,     /* R9355 */
+    0x0000,     /* R9356 */
+    0x0000,     /* R9357 */
+    0x0000,     /* R9358 */
+    0x0000,     /* R9359 */
+    0x0000,     /* R9360 */
+    0x0000,     /* R9361 */
+    0x0000,     /* R9362 */
+    0x0000,     /* R9363 */
+    0x0000,     /* R9364 */
+    0x0000,     /* R9365 */
+    0x0000,     /* R9366 */
+    0x0000,     /* R9367 */
+    0x0000,     /* R9368 */
+    0x0000,     /* R9369 */
+    0x0000,     /* R9370 */
+    0x0000,     /* R9371 */
+    0x0000,     /* R9372 */
+    0x0000,     /* R9373 */
+    0x0000,     /* R9374 */
+    0x0000,     /* R9375 */
+    0x0000,     /* R9376 */
+    0x0000,     /* R9377 */
+    0x0000,     /* R9378 */
+    0x0000,     /* R9379 */
+    0x0000,     /* R9380 */
+    0x0000,     /* R9381 */
+    0x0000,     /* R9382 */
+    0x0000,     /* R9383 */
+    0x0000,     /* R9384 */
+    0x0000,     /* R9385 */
+    0x0000,     /* R9386 */
+    0x0000,     /* R9387 */
+    0x0000,     /* R9388 */
+    0x0000,     /* R9389 */
+    0x0000,     /* R9390 */
+    0x0000,     /* R9391 */
+    0x0000,     /* R9392 */
+    0x0000,     /* R9393 */
+    0x0000,     /* R9394 */
+    0x0000,     /* R9395 */
+    0x0000,     /* R9396 */
+    0x0000,     /* R9397 */
+    0x0000,     /* R9398 */
+    0x0000,     /* R9399 */
+    0x0000,     /* R9400 */
+    0x0000,     /* R9401 */
+    0x0000,     /* R9402 */
+    0x0000,     /* R9403 */
+    0x0000,     /* R9404 */
+    0x0000,     /* R9405 */
+    0x0000,     /* R9406 */
+    0x0000,     /* R9407 */
+    0x0000,     /* R9408 */
+    0x0000,     /* R9409 */
+    0x0000,     /* R9410 */
+    0x0000,     /* R9411 */
+    0x0000,     /* R9412 */
+    0x0000,     /* R9413 */
+    0x0000,     /* R9414 */
+    0x0000,     /* R9415 */
+    0x0000,     /* R9416 */
+    0x0000,     /* R9417 */
+    0x0000,     /* R9418 */
+    0x0000,     /* R9419 */
+    0x0000,     /* R9420 */
+    0x0000,     /* R9421 */
+    0x0000,     /* R9422 */
+    0x0000,     /* R9423 */
+    0x0000,     /* R9424 */
+    0x0000,     /* R9425 */
+    0x0000,     /* R9426 */
+    0x0000,     /* R9427 */
+    0x0000,     /* R9428 */
+    0x0000,     /* R9429 */
+    0x0000,     /* R9430 */
+    0x0000,     /* R9431 */
+    0x0000,     /* R9432 */
+    0x0000,     /* R9433 */
+    0x0000,     /* R9434 */
+    0x0000,     /* R9435 */
+    0x0000,     /* R9436 */
+    0x0000,     /* R9437 */
+    0x0000,     /* R9438 */
+    0x0000,     /* R9439 */
+    0x0000,     /* R9440 */
+    0x0000,     /* R9441 */
+    0x0000,     /* R9442 */
+    0x0000,     /* R9443 */
+    0x0000,     /* R9444 */
+    0x0000,     /* R9445 */
+    0x0000,     /* R9446 */
+    0x0000,     /* R9447 */
+    0x0000,     /* R9448 */
+    0x0000,     /* R9449 */
+    0x0000,     /* R9450 */
+    0x0000,     /* R9451 */
+    0x0000,     /* R9452 */
+    0x0000,     /* R9453 */
+    0x0000,     /* R9454 */
+    0x0000,     /* R9455 */
+    0x0000,     /* R9456 */
+    0x0000,     /* R9457 */
+    0x0000,     /* R9458 */
+    0x0000,     /* R9459 */
+    0x0000,     /* R9460 */
+    0x0000,     /* R9461 */
+    0x0000,     /* R9462 */
+    0x0000,     /* R9463 */
+    0x0000,     /* R9464 */
+    0x0000,     /* R9465 */
+    0x0000,     /* R9466 */
+    0x0000,     /* R9467 */
+    0x0000,     /* R9468 */
+    0x0000,     /* R9469 */
+    0x0000,     /* R9470 */
+    0x0000,     /* R9471 */
+    0x0000,     /* R9472 */
+    0x0000,     /* R9473 */
+    0x0000,     /* R9474 */
+    0x0000,     /* R9475 */
+    0x0000,     /* R9476 */
+    0x0000,     /* R9477 */
+    0x0000,     /* R9478 */
+    0x0000,     /* R9479 */
+    0x0000,     /* R9480 */
+    0x0000,     /* R9481 */
+    0x0000,     /* R9482 */
+    0x0000,     /* R9483 */
+    0x0000,     /* R9484 */
+    0x0000,     /* R9485 */
+    0x0000,     /* R9486 */
+    0x0000,     /* R9487 */
+    0x0000,     /* R9488 */
+    0x0000,     /* R9489 */
+    0x0000,     /* R9490 */
+    0x0000,     /* R9491 */
+    0x0000,     /* R9492 */
+    0x0000,     /* R9493 */
+    0x0000,     /* R9494 */
+    0x0000,     /* R9495 */
+    0x0000,     /* R9496 */
+    0x0000,     /* R9497 */
+    0x0000,     /* R9498 */
+    0x0000,     /* R9499 */
+    0x0000,     /* R9500 */
+    0x0000,     /* R9501 */
+    0x0000,     /* R9502 */
+    0x0000,     /* R9503 */
+    0x0000,     /* R9504 */
+    0x0000,     /* R9505 */
+    0x0000,     /* R9506 */
+    0x0000,     /* R9507 */
+    0x0000,     /* R9508 */
+    0x0000,     /* R9509 */
+    0x0000,     /* R9510 */
+    0x0000,     /* R9511 */
+    0x0000,     /* R9512 */
+    0x0000,     /* R9513 */
+    0x0000,     /* R9514 */
+    0x0000,     /* R9515 */
+    0x0000,     /* R9516 */
+    0x0000,     /* R9517 */
+    0x0000,     /* R9518 */
+    0x0000,     /* R9519 */
+    0x0000,     /* R9520 */
+    0x0000,     /* R9521 */
+    0x0000,     /* R9522 */
+    0x0000,     /* R9523 */
+    0x0000,     /* R9524 */
+    0x0000,     /* R9525 */
+    0x0000,     /* R9526 */
+    0x0000,     /* R9527 */
+    0x0000,     /* R9528 */
+    0x0000,     /* R9529 */
+    0x0000,     /* R9530 */
+    0x0000,     /* R9531 */
+    0x0000,     /* R9532 */
+    0x0000,     /* R9533 */
+    0x0000,     /* R9534 */
+    0x0000,     /* R9535 */
+    0x0000,     /* R9536 */
+    0x0000,     /* R9537 */
+    0x0000,     /* R9538 */
+    0x0000,     /* R9539 */
+    0x0000,     /* R9540 */
+    0x0000,     /* R9541 */
+    0x0000,     /* R9542 */
+    0x0000,     /* R9543 */
+    0x0000,     /* R9544 */
+    0x0000,     /* R9545 */
+    0x0000,     /* R9546 */
+    0x0000,     /* R9547 */
+    0x0000,     /* R9548 */
+    0x0000,     /* R9549 */
+    0x0000,     /* R9550 */
+    0x0000,     /* R9551 */
+    0x0000,     /* R9552 */
+    0x0000,     /* R9553 */
+    0x0000,     /* R9554 */
+    0x0000,     /* R9555 */
+    0x0000,     /* R9556 */
+    0x0000,     /* R9557 */
+    0x0000,     /* R9558 */
+    0x0000,     /* R9559 */
+    0x0000,     /* R9560 */
+    0x0000,     /* R9561 */
+    0x0000,     /* R9562 */
+    0x0000,     /* R9563 */
+    0x0000,     /* R9564 */
+    0x0000,     /* R9565 */
+    0x0000,     /* R9566 */
+    0x0000,     /* R9567 */
+    0x0000,     /* R9568 */
+    0x0000,     /* R9569 */
+    0x0000,     /* R9570 */
+    0x0000,     /* R9571 */
+    0x0000,     /* R9572 */
+    0x0000,     /* R9573 */
+    0x0000,     /* R9574 */
+    0x0000,     /* R9575 */
+    0x0000,     /* R9576 */
+    0x0000,     /* R9577 */
+    0x0000,     /* R9578 */
+    0x0000,     /* R9579 */
+    0x0000,     /* R9580 */
+    0x0000,     /* R9581 */
+    0x0000,     /* R9582 */
+    0x0000,     /* R9583 */
+    0x0000,     /* R9584 */
+    0x0000,     /* R9585 */
+    0x0000,     /* R9586 */
+    0x0000,     /* R9587 */
+    0x0000,     /* R9588 */
+    0x0000,     /* R9589 */
+    0x0000,     /* R9590 */
+    0x0000,     /* R9591 */
+    0x0000,     /* R9592 */
+    0x0000,     /* R9593 */
+    0x0000,     /* R9594 */
+    0x0000,     /* R9595 */
+    0x0000,     /* R9596 */
+    0x0000,     /* R9597 */
+    0x0000,     /* R9598 */
+    0x0000,     /* R9599 */
+    0x0000,     /* R9600 */
+    0x0000,     /* R9601 */
+    0x0000,     /* R9602 */
+    0x0000,     /* R9603 */
+    0x0000,     /* R9604 */
+    0x0000,     /* R9605 */
+    0x0000,     /* R9606 */
+    0x0000,     /* R9607 */
+    0x0000,     /* R9608 */
+    0x0000,     /* R9609 */
+    0x0000,     /* R9610 */
+    0x0000,     /* R9611 */
+    0x0000,     /* R9612 */
+    0x0000,     /* R9613 */
+    0x0000,     /* R9614 */
+    0x0000,     /* R9615 */
+    0x0000,     /* R9616 */
+    0x0000,     /* R9617 */
+    0x0000,     /* R9618 */
+    0x0000,     /* R9619 */
+    0x0000,     /* R9620 */
+    0x0000,     /* R9621 */
+    0x0000,     /* R9622 */
+    0x0000,     /* R9623 */
+    0x0000,     /* R9624 */
+    0x0000,     /* R9625 */
+    0x0000,     /* R9626 */
+    0x0000,     /* R9627 */
+    0x0000,     /* R9628 */
+    0x0000,     /* R9629 */
+    0x0000,     /* R9630 */
+    0x0000,     /* R9631 */
+    0x0000,     /* R9632 */
+    0x0000,     /* R9633 */
+    0x0000,     /* R9634 */
+    0x0000,     /* R9635 */
+    0x0000,     /* R9636 */
+    0x0000,     /* R9637 */
+    0x0000,     /* R9638 */
+    0x0000,     /* R9639 */
+    0x0000,     /* R9640 */
+    0x0000,     /* R9641 */
+    0x0000,     /* R9642 */
+    0x0000,     /* R9643 */
+    0x0000,     /* R9644 */
+    0x0000,     /* R9645 */
+    0x0000,     /* R9646 */
+    0x0000,     /* R9647 */
+    0x0000,     /* R9648 */
+    0x0000,     /* R9649 */
+    0x0000,     /* R9650 */
+    0x0000,     /* R9651 */
+    0x0000,     /* R9652 */
+    0x0000,     /* R9653 */
+    0x0000,     /* R9654 */
+    0x0000,     /* R9655 */
+    0x0000,     /* R9656 */
+    0x0000,     /* R9657 */
+    0x0000,     /* R9658 */
+    0x0000,     /* R9659 */
+    0x0000,     /* R9660 */
+    0x0000,     /* R9661 */
+    0x0000,     /* R9662 */
+    0x0000,     /* R9663 */
+    0x0000,     /* R9664 */
+    0x0000,     /* R9665 */
+    0x0000,     /* R9666 */
+    0x0000,     /* R9667 */
+    0x0000,     /* R9668 */
+    0x0000,     /* R9669 */
+    0x0000,     /* R9670 */
+    0x0000,     /* R9671 */
+    0x0000,     /* R9672 */
+    0x0000,     /* R9673 */
+    0x0000,     /* R9674 */
+    0x0000,     /* R9675 */
+    0x0000,     /* R9676 */
+    0x0000,     /* R9677 */
+    0x0000,     /* R9678 */
+    0x0000,     /* R9679 */
+    0x0000,     /* R9680 */
+    0x0000,     /* R9681 */
+    0x0000,     /* R9682 */
+    0x0000,     /* R9683 */
+    0x0000,     /* R9684 */
+    0x0000,     /* R9685 */
+    0x0000,     /* R9686 */
+    0x0000,     /* R9687 */
+    0x0000,     /* R9688 */
+    0x0000,     /* R9689 */
+    0x0000,     /* R9690 */
+    0x0000,     /* R9691 */
+    0x0000,     /* R9692 */
+    0x0000,     /* R9693 */
+    0x0000,     /* R9694 */
+    0x0000,     /* R9695 */
+    0x0000,     /* R9696 */
+    0x0000,     /* R9697 */
+    0x0000,     /* R9698 */
+    0x0000,     /* R9699 */
+    0x0000,     /* R9700 */
+    0x0000,     /* R9701 */
+    0x0000,     /* R9702 */
+    0x0000,     /* R9703 */
+    0x0000,     /* R9704 */
+    0x0000,     /* R9705 */
+    0x0000,     /* R9706 */
+    0x0000,     /* R9707 */
+    0x0000,     /* R9708 */
+    0x0000,     /* R9709 */
+    0x0000,     /* R9710 */
+    0x0000,     /* R9711 */
+    0x0000,     /* R9712 */
+    0x0000,     /* R9713 */
+    0x0000,     /* R9714 */
+    0x0000,     /* R9715 */
+    0x0000,     /* R9716 */
+    0x0000,     /* R9717 */
+    0x0000,     /* R9718 */
+    0x0000,     /* R9719 */
+    0x0000,     /* R9720 */
+    0x0000,     /* R9721 */
+    0x0000,     /* R9722 */
+    0x0000,     /* R9723 */
+    0x0000,     /* R9724 */
+    0x0000,     /* R9725 */
+    0x0000,     /* R9726 */
+    0x0000,     /* R9727 */
+    0x0000,     /* R9728 */
+    0x0000,     /* R9729 */
+    0x0000,     /* R9730 */
+    0x0000,     /* R9731 */
+    0x0000,     /* R9732 */
+    0x0000,     /* R9733 */
+    0x0000,     /* R9734 */
+    0x0000,     /* R9735 */
+    0x0000,     /* R9736 */
+    0x0000,     /* R9737 */
+    0x0000,     /* R9738 */
+    0x0000,     /* R9739 */
+    0x0000,     /* R9740 */
+    0x0000,     /* R9741 */
+    0x0000,     /* R9742 */
+    0x0000,     /* R9743 */
+    0x0000,     /* R9744 */
+    0x0000,     /* R9745 */
+    0x0000,     /* R9746 */
+    0x0000,     /* R9747 */
+    0x0000,     /* R9748 */
+    0x0000,     /* R9749 */
+    0x0000,     /* R9750 */
+    0x0000,     /* R9751 */
+    0x0000,     /* R9752 */
+    0x0000,     /* R9753 */
+    0x0000,     /* R9754 */
+    0x0000,     /* R9755 */
+    0x0000,     /* R9756 */
+    0x0000,     /* R9757 */
+    0x0000,     /* R9758 */
+    0x0000,     /* R9759 */
+    0x0000,     /* R9760 */
+    0x0000,     /* R9761 */
+    0x0000,     /* R9762 */
+    0x0000,     /* R9763 */
+    0x0000,     /* R9764 */
+    0x0000,     /* R9765 */
+    0x0000,     /* R9766 */
+    0x0000,     /* R9767 */
+    0x0000,     /* R9768 */
+    0x0000,     /* R9769 */
+    0x0000,     /* R9770 */
+    0x0000,     /* R9771 */
+    0x0000,     /* R9772 */
+    0x0000,     /* R9773 */
+    0x0000,     /* R9774 */
+    0x0000,     /* R9775 */
+    0x0000,     /* R9776 */
+    0x0000,     /* R9777 */
+    0x0000,     /* R9778 */
+    0x0000,     /* R9779 */
+    0x0000,     /* R9780 */
+    0x0000,     /* R9781 */
+    0x0000,     /* R9782 */
+    0x0000,     /* R9783 */
+    0x0000,     /* R9784 */
+    0x0000,     /* R9785 */
+    0x0000,     /* R9786 */
+    0x0000,     /* R9787 */
+    0x0000,     /* R9788 */
+    0x0000,     /* R9789 */
+    0x0000,     /* R9790 */
+    0x0000,     /* R9791 */
+    0x0000,     /* R9792 */
+    0x0000,     /* R9793 */
+    0x0000,     /* R9794 */
+    0x0000,     /* R9795 */
+    0x0000,     /* R9796 */
+    0x0000,     /* R9797 */
+    0x0000,     /* R9798 */
+    0x0000,     /* R9799 */
+    0x0000,     /* R9800 */
+    0x0000,     /* R9801 */
+    0x0000,     /* R9802 */
+    0x0000,     /* R9803 */
+    0x0000,     /* R9804 */
+    0x0000,     /* R9805 */
+    0x0000,     /* R9806 */
+    0x0000,     /* R9807 */
+    0x0000,     /* R9808 */
+    0x0000,     /* R9809 */
+    0x0000,     /* R9810 */
+    0x0000,     /* R9811 */
+    0x0000,     /* R9812 */
+    0x0000,     /* R9813 */
+    0x0000,     /* R9814 */
+    0x0000,     /* R9815 */
+    0x0000,     /* R9816 */
+    0x0000,     /* R9817 */
+    0x0000,     /* R9818 */
+    0x0000,     /* R9819 */
+    0x0000,     /* R9820 */
+    0x0000,     /* R9821 */
+    0x0000,     /* R9822 */
+    0x0000,     /* R9823 */
+    0x0000,     /* R9824 */
+    0x0000,     /* R9825 */
+    0x0000,     /* R9826 */
+    0x0000,     /* R9827 */
+    0x0000,     /* R9828 */
+    0x0000,     /* R9829 */
+    0x0000,     /* R9830 */
+    0x0000,     /* R9831 */
+    0x0000,     /* R9832 */
+    0x0000,     /* R9833 */
+    0x0000,     /* R9834 */
+    0x0000,     /* R9835 */
+    0x0000,     /* R9836 */
+    0x0000,     /* R9837 */
+    0x0000,     /* R9838 */
+    0x0000,     /* R9839 */
+    0x0000,     /* R9840 */
+    0x0000,     /* R9841 */
+    0x0000,     /* R9842 */
+    0x0000,     /* R9843 */
+    0x0000,     /* R9844 */
+    0x0000,     /* R9845 */
+    0x0000,     /* R9846 */
+    0x0000,     /* R9847 */
+    0x0000,     /* R9848 */
+    0x0000,     /* R9849 */
+    0x0000,     /* R9850 */
+    0x0000,     /* R9851 */
+    0x0000,     /* R9852 */
+    0x0000,     /* R9853 */
+    0x0000,     /* R9854 */
+    0x0000,     /* R9855 */
+    0x0000,     /* R9856 */
+    0x0000,     /* R9857 */
+    0x0000,     /* R9858 */
+    0x0000,     /* R9859 */
+    0x0000,     /* R9860 */
+    0x0000,     /* R9861 */
+    0x0000,     /* R9862 */
+    0x0000,     /* R9863 */
+    0x0000,     /* R9864 */
+    0x0000,     /* R9865 */
+    0x0000,     /* R9866 */
+    0x0000,     /* R9867 */
+    0x0000,     /* R9868 */
+    0x0000,     /* R9869 */
+    0x0000,     /* R9870 */
+    0x0000,     /* R9871 */
+    0x0000,     /* R9872 */
+    0x0000,     /* R9873 */
+    0x0000,     /* R9874 */
+    0x0000,     /* R9875 */
+    0x0000,     /* R9876 */
+    0x0000,     /* R9877 */
+    0x0000,     /* R9878 */
+    0x0000,     /* R9879 */
+    0x0000,     /* R9880 */
+    0x0000,     /* R9881 */
+    0x0000,     /* R9882 */
+    0x0000,     /* R9883 */
+    0x0000,     /* R9884 */
+    0x0000,     /* R9885 */
+    0x0000,     /* R9886 */
+    0x0000,     /* R9887 */
+    0x0000,     /* R9888 */
+    0x0000,     /* R9889 */
+    0x0000,     /* R9890 */
+    0x0000,     /* R9891 */
+    0x0000,     /* R9892 */
+    0x0000,     /* R9893 */
+    0x0000,     /* R9894 */
+    0x0000,     /* R9895 */
+    0x0000,     /* R9896 */
+    0x0000,     /* R9897 */
+    0x0000,     /* R9898 */
+    0x0000,     /* R9899 */
+    0x0000,     /* R9900 */
+    0x0000,     /* R9901 */
+    0x0000,     /* R9902 */
+    0x0000,     /* R9903 */
+    0x0000,     /* R9904 */
+    0x0000,     /* R9905 */
+    0x0000,     /* R9906 */
+    0x0000,     /* R9907 */
+    0x0000,     /* R9908 */
+    0x0000,     /* R9909 */
+    0x0000,     /* R9910 */
+    0x0000,     /* R9911 */
+    0x0000,     /* R9912 */
+    0x0000,     /* R9913 */
+    0x0000,     /* R9914 */
+    0x0000,     /* R9915 */
+    0x0000,     /* R9916 */
+    0x0000,     /* R9917 */
+    0x0000,     /* R9918 */
+    0x0000,     /* R9919 */
+    0x0000,     /* R9920 */
+    0x0000,     /* R9921 */
+    0x0000,     /* R9922 */
+    0x0000,     /* R9923 */
+    0x0000,     /* R9924 */
+    0x0000,     /* R9925 */
+    0x0000,     /* R9926 */
+    0x0000,     /* R9927 */
+    0x0000,     /* R9928 */
+    0x0000,     /* R9929 */
+    0x0000,     /* R9930 */
+    0x0000,     /* R9931 */
+    0x0000,     /* R9932 */
+    0x0000,     /* R9933 */
+    0x0000,     /* R9934 */
+    0x0000,     /* R9935 */
+    0x0000,     /* R9936 */
+    0x0000,     /* R9937 */
+    0x0000,     /* R9938 */
+    0x0000,     /* R9939 */
+    0x0000,     /* R9940 */
+    0x0000,     /* R9941 */
+    0x0000,     /* R9942 */
+    0x0000,     /* R9943 */
+    0x0000,     /* R9944 */
+    0x0000,     /* R9945 */
+    0x0000,     /* R9946 */
+    0x0000,     /* R9947 */
+    0x0000,     /* R9948 */
+    0x0000,     /* R9949 */
+    0x0000,     /* R9950 */
+    0x0000,     /* R9951 */
+    0x0000,     /* R9952 */
+    0x0000,     /* R9953 */
+    0x0000,     /* R9954 */
+    0x0000,     /* R9955 */
+    0x0000,     /* R9956 */
+    0x0000,     /* R9957 */
+    0x0000,     /* R9958 */
+    0x0000,     /* R9959 */
+    0x0000,     /* R9960 */
+    0x0000,     /* R9961 */
+    0x0000,     /* R9962 */
+    0x0000,     /* R9963 */
+    0x0000,     /* R9964 */
+    0x0000,     /* R9965 */
+    0x0000,     /* R9966 */
+    0x0000,     /* R9967 */
+    0x0000,     /* R9968 */
+    0x0000,     /* R9969 */
+    0x0000,     /* R9970 */
+    0x0000,     /* R9971 */
+    0x0000,     /* R9972 */
+    0x0000,     /* R9973 */
+    0x0000,     /* R9974 */
+    0x0000,     /* R9975 */
+    0x0000,     /* R9976 */
+    0x0000,     /* R9977 */
+    0x0000,     /* R9978 */
+    0x0000,     /* R9979 */
+    0x0000,     /* R9980 */
+    0x0000,     /* R9981 */
+    0x0000,     /* R9982 */
+    0x0000,     /* R9983 */
+    0x0000,     /* R9984 */
+    0x0000,     /* R9985 */
+    0x0000,     /* R9986 */
+    0x0000,     /* R9987 */
+    0x0000,     /* R9988 */
+    0x0000,     /* R9989 */
+    0x0000,     /* R9990 */
+    0x0000,     /* R9991 */
+    0x0000,     /* R9992 */
+    0x0000,     /* R9993 */
+    0x0000,     /* R9994 */
+    0x0000,     /* R9995 */
+    0x0000,     /* R9996 */
+    0x0000,     /* R9997 */
+    0x0000,     /* R9998 */
+    0x0000,     /* R9999 */
+    0x0000,     /* R10000 */
+    0x0000,     /* R10001 */
+    0x0000,     /* R10002 */
+    0x0000,     /* R10003 */
+    0x0000,     /* R10004 */
+    0x0000,     /* R10005 */
+    0x0000,     /* R10006 */
+    0x0000,     /* R10007 */
+    0x0000,     /* R10008 */
+    0x0000,     /* R10009 */
+    0x0000,     /* R10010 */
+    0x0000,     /* R10011 */
+    0x0000,     /* R10012 */
+    0x0000,     /* R10013 */
+    0x0000,     /* R10014 */
+    0x0000,     /* R10015 */
+    0x0000,     /* R10016 */
+    0x0000,     /* R10017 */
+    0x0000,     /* R10018 */
+    0x0000,     /* R10019 */
+    0x0000,     /* R10020 */
+    0x0000,     /* R10021 */
+    0x0000,     /* R10022 */
+    0x0000,     /* R10023 */
+    0x0000,     /* R10024 */
+    0x0000,     /* R10025 */
+    0x0000,     /* R10026 */
+    0x0000,     /* R10027 */
+    0x0000,     /* R10028 */
+    0x0000,     /* R10029 */
+    0x0000,     /* R10030 */
+    0x0000,     /* R10031 */
+    0x0000,     /* R10032 */
+    0x0000,     /* R10033 */
+    0x0000,     /* R10034 */
+    0x0000,     /* R10035 */
+    0x0000,     /* R10036 */
+    0x0000,     /* R10037 */
+    0x0000,     /* R10038 */
+    0x0000,     /* R10039 */
+    0x0000,     /* R10040 */
+    0x0000,     /* R10041 */
+    0x0000,     /* R10042 */
+    0x0000,     /* R10043 */
+    0x0000,     /* R10044 */
+    0x0000,     /* R10045 */
+    0x0000,     /* R10046 */
+    0x0000,     /* R10047 */
+    0x0000,     /* R10048 */
+    0x0000,     /* R10049 */
+    0x0000,     /* R10050 */
+    0x0000,     /* R10051 */
+    0x0000,     /* R10052 */
+    0x0000,     /* R10053 */
+    0x0000,     /* R10054 */
+    0x0000,     /* R10055 */
+    0x0000,     /* R10056 */
+    0x0000,     /* R10057 */
+    0x0000,     /* R10058 */
+    0x0000,     /* R10059 */
+    0x0000,     /* R10060 */
+    0x0000,     /* R10061 */
+    0x0000,     /* R10062 */
+    0x0000,     /* R10063 */
+    0x0000,     /* R10064 */
+    0x0000,     /* R10065 */
+    0x0000,     /* R10066 */
+    0x0000,     /* R10067 */
+    0x0000,     /* R10068 */
+    0x0000,     /* R10069 */
+    0x0000,     /* R10070 */
+    0x0000,     /* R10071 */
+    0x0000,     /* R10072 */
+    0x0000,     /* R10073 */
+    0x0000,     /* R10074 */
+    0x0000,     /* R10075 */
+    0x0000,     /* R10076 */
+    0x0000,     /* R10077 */
+    0x0000,     /* R10078 */
+    0x0000,     /* R10079 */
+    0x0000,     /* R10080 */
+    0x0000,     /* R10081 */
+    0x0000,     /* R10082 */
+    0x0000,     /* R10083 */
+    0x0000,     /* R10084 */
+    0x0000,     /* R10085 */
+    0x0000,     /* R10086 */
+    0x0000,     /* R10087 */
+    0x0000,     /* R10088 */
+    0x0000,     /* R10089 */
+    0x0000,     /* R10090 */
+    0x0000,     /* R10091 */
+    0x0000,     /* R10092 */
+    0x0000,     /* R10093 */
+    0x0000,     /* R10094 */
+    0x0000,     /* R10095 */
+    0x0000,     /* R10096 */
+    0x0000,     /* R10097 */
+    0x0000,     /* R10098 */
+    0x0000,     /* R10099 */
+    0x0000,     /* R10100 */
+    0x0000,     /* R10101 */
+    0x0000,     /* R10102 */
+    0x0000,     /* R10103 */
+    0x0000,     /* R10104 */
+    0x0000,     /* R10105 */
+    0x0000,     /* R10106 */
+    0x0000,     /* R10107 */
+    0x0000,     /* R10108 */
+    0x0000,     /* R10109 */
+    0x0000,     /* R10110 */
+    0x0000,     /* R10111 */
+    0x0000,     /* R10112 */
+    0x0000,     /* R10113 */
+    0x0000,     /* R10114 */
+    0x0000,     /* R10115 */
+    0x0000,     /* R10116 */
+    0x0000,     /* R10117 */
+    0x0000,     /* R10118 */
+    0x0000,     /* R10119 */
+    0x0000,     /* R10120 */
+    0x0000,     /* R10121 */
+    0x0000,     /* R10122 */
+    0x0000,     /* R10123 */
+    0x0000,     /* R10124 */
+    0x0000,     /* R10125 */
+    0x0000,     /* R10126 */
+    0x0000,     /* R10127 */
+    0x0000,     /* R10128 */
+    0x0000,     /* R10129 */
+    0x0000,     /* R10130 */
+    0x0000,     /* R10131 */
+    0x0000,     /* R10132 */
+    0x0000,     /* R10133 */
+    0x0000,     /* R10134 */
+    0x0000,     /* R10135 */
+    0x0000,     /* R10136 */
+    0x0000,     /* R10137 */
+    0x0000,     /* R10138 */
+    0x0000,     /* R10139 */
+    0x0000,     /* R10140 */
+    0x0000,     /* R10141 */
+    0x0000,     /* R10142 */
+    0x0000,     /* R10143 */
+    0x0000,     /* R10144 */
+    0x0000,     /* R10145 */
+    0x0000,     /* R10146 */
+    0x0000,     /* R10147 */
+    0x0000,     /* R10148 */
+    0x0000,     /* R10149 */
+    0x0000,     /* R10150 */
+    0x0000,     /* R10151 */
+    0x0000,     /* R10152 */
+    0x0000,     /* R10153 */
+    0x0000,     /* R10154 */
+    0x0000,     /* R10155 */
+    0x0000,     /* R10156 */
+    0x0000,     /* R10157 */
+    0x0000,     /* R10158 */
+    0x0000,     /* R10159 */
+    0x0000,     /* R10160 */
+    0x0000,     /* R10161 */
+    0x0000,     /* R10162 */
+    0x0000,     /* R10163 */
+    0x0000,     /* R10164 */
+    0x0000,     /* R10165 */
+    0x0000,     /* R10166 */
+    0x0000,     /* R10167 */
+    0x0000,     /* R10168 */
+    0x0000,     /* R10169 */
+    0x0000,     /* R10170 */
+    0x0000,     /* R10171 */
+    0x0000,     /* R10172 */
+    0x0000,     /* R10173 */
+    0x0000,     /* R10174 */
+    0x0000,     /* R10175 */
+    0x0000,     /* R10176 */
+    0x0000,     /* R10177 */
+    0x0000,     /* R10178 */
+    0x0000,     /* R10179 */
+    0x0000,     /* R10180 */
+    0x0000,     /* R10181 */
+    0x0000,     /* R10182 */
+    0x0000,     /* R10183 */
+    0x0000,     /* R10184 */
+    0x0000,     /* R10185 */
+    0x0000,     /* R10186 */
+    0x0000,     /* R10187 */
+    0x0000,     /* R10188 */
+    0x0000,     /* R10189 */
+    0x0000,     /* R10190 */
+    0x0000,     /* R10191 */
+    0x0000,     /* R10192 */
+    0x0000,     /* R10193 */
+    0x0000,     /* R10194 */
+    0x0000,     /* R10195 */
+    0x0000,     /* R10196 */
+    0x0000,     /* R10197 */
+    0x0000,     /* R10198 */
+    0x0000,     /* R10199 */
+    0x0000,     /* R10200 */
+    0x0000,     /* R10201 */
+    0x0000,     /* R10202 */
+    0x0000,     /* R10203 */
+    0x0000,     /* R10204 */
+    0x0000,     /* R10205 */
+    0x0000,     /* R10206 */
+    0x0000,     /* R10207 */
+    0x0000,     /* R10208 */
+    0x0000,     /* R10209 */
+    0x0000,     /* R10210 */
+    0x0000,     /* R10211 */
+    0x0000,     /* R10212 */
+    0x0000,     /* R10213 */
+    0x0000,     /* R10214 */
+    0x0000,     /* R10215 */
+    0x0000,     /* R10216 */
+    0x0000,     /* R10217 */
+    0x0000,     /* R10218 */
+    0x0000,     /* R10219 */
+    0x0000,     /* R10220 */
+    0x0000,     /* R10221 */
+    0x0000,     /* R10222 */
+    0x0000,     /* R10223 */
+    0x0000,     /* R10224 */
+    0x0000,     /* R10225 */
+    0x0000,     /* R10226 */
+    0x0000,     /* R10227 */
+    0x0000,     /* R10228 */
+    0x0000,     /* R10229 */
+    0x0000,     /* R10230 */
+    0x0000,     /* R10231 */
+    0x0000,     /* R10232 */
+    0x0000,     /* R10233 */
+    0x0000,     /* R10234 */
+    0x0000,     /* R10235 */
+    0x0000,     /* R10236 */
+    0x0000,     /* R10237 */
+    0x0000,     /* R10238 */
+    0x0000,     /* R10239 */
+    0x0000,     /* R10240 */
+    0x0000,     /* R10241 */
+    0x0000,     /* R10242 */
+    0x0000,     /* R10243 */
+    0x0000,     /* R10244 */
+    0x0000,     /* R10245 */
+    0x0000,     /* R10246 */
+    0x0000,     /* R10247 */
+    0x0000,     /* R10248 */
+    0x0000,     /* R10249 */
+    0x0000,     /* R10250 */
+    0x0000,     /* R10251 */
+    0x0000,     /* R10252 */
+    0x0000,     /* R10253 */
+    0x0000,     /* R10254 */
+    0x0000,     /* R10255 */
+    0x0000,     /* R10256 */
+    0x0000,     /* R10257 */
+    0x0000,     /* R10258 */
+    0x0000,     /* R10259 */
+    0x0000,     /* R10260 */
+    0x0000,     /* R10261 */
+    0x0000,     /* R10262 */
+    0x0000,     /* R10263 */
+    0x0000,     /* R10264 */
+    0x0000,     /* R10265 */
+    0x0000,     /* R10266 */
+    0x0000,     /* R10267 */
+    0x0000,     /* R10268 */
+    0x0000,     /* R10269 */
+    0x0000,     /* R10270 */
+    0x0000,     /* R10271 */
+    0x0000,     /* R10272 */
+    0x0000,     /* R10273 */
+    0x0000,     /* R10274 */
+    0x0000,     /* R10275 */
+    0x0000,     /* R10276 */
+    0x0000,     /* R10277 */
+    0x0000,     /* R10278 */
+    0x0000,     /* R10279 */
+    0x0000,     /* R10280 */
+    0x0000,     /* R10281 */
+    0x0000,     /* R10282 */
+    0x0000,     /* R10283 */
+    0x0000,     /* R10284 */
+    0x0000,     /* R10285 */
+    0x0000,     /* R10286 */
+    0x0000,     /* R10287 */
+    0x0000,     /* R10288 */
+    0x0000,     /* R10289 */
+    0x0000,     /* R10290 */
+    0x0000,     /* R10291 */
+    0x0000,     /* R10292 */
+    0x0000,     /* R10293 */
+    0x0000,     /* R10294 */
+    0x0000,     /* R10295 */
+    0x0000,     /* R10296 */
+    0x0000,     /* R10297 */
+    0x0000,     /* R10298 */
+    0x0000,     /* R10299 */
+    0x0000,     /* R10300 */
+    0x0000,     /* R10301 */
+    0x0000,     /* R10302 */
+    0x0000,     /* R10303 */
+    0x0000,     /* R10304 */
+    0x0000,     /* R10305 */
+    0x0000,     /* R10306 */
+    0x0000,     /* R10307 */
+    0x0000,     /* R10308 */
+    0x0000,     /* R10309 */
+    0x0000,     /* R10310 */
+    0x0000,     /* R10311 */
+    0x0000,     /* R10312 */
+    0x0000,     /* R10313 */
+    0x0000,     /* R10314 */
+    0x0000,     /* R10315 */
+    0x0000,     /* R10316 */
+    0x0000,     /* R10317 */
+    0x0000,     /* R10318 */
+    0x0000,     /* R10319 */
+    0x0000,     /* R10320 */
+    0x0000,     /* R10321 */
+    0x0000,     /* R10322 */
+    0x0000,     /* R10323 */
+    0x0000,     /* R10324 */
+    0x0000,     /* R10325 */
+    0x0000,     /* R10326 */
+    0x0000,     /* R10327 */
+    0x0000,     /* R10328 */
+    0x0000,     /* R10329 */
+    0x0000,     /* R10330 */
+    0x0000,     /* R10331 */
+    0x0000,     /* R10332 */
+    0x0000,     /* R10333 */
+    0x0000,     /* R10334 */
+    0x0000,     /* R10335 */
+    0x0000,     /* R10336 */
+    0x0000,     /* R10337 */
+    0x0000,     /* R10338 */
+    0x0000,     /* R10339 */
+    0x0000,     /* R10340 */
+    0x0000,     /* R10341 */
+    0x0000,     /* R10342 */
+    0x0000,     /* R10343 */
+    0x0000,     /* R10344 */
+    0x0000,     /* R10345 */
+    0x0000,     /* R10346 */
+    0x0000,     /* R10347 */
+    0x0000,     /* R10348 */
+    0x0000,     /* R10349 */
+    0x0000,     /* R10350 */
+    0x0000,     /* R10351 */
+    0x0000,     /* R10352 */
+    0x0000,     /* R10353 */
+    0x0000,     /* R10354 */
+    0x0000,     /* R10355 */
+    0x0000,     /* R10356 */
+    0x0000,     /* R10357 */
+    0x0000,     /* R10358 */
+    0x0000,     /* R10359 */
+    0x0000,     /* R10360 */
+    0x0000,     /* R10361 */
+    0x0000,     /* R10362 */
+    0x0000,     /* R10363 */
+    0x0000,     /* R10364 */
+    0x0000,     /* R10365 */
+    0x0000,     /* R10366 */
+    0x0000,     /* R10367 */
+    0x0000,     /* R10368 */
+    0x0000,     /* R10369 */
+    0x0000,     /* R10370 */
+    0x0000,     /* R10371 */
+    0x0000,     /* R10372 */
+    0x0000,     /* R10373 */
+    0x0000,     /* R10374 */
+    0x0000,     /* R10375 */
+    0x0000,     /* R10376 */
+    0x0000,     /* R10377 */
+    0x0000,     /* R10378 */
+    0x0000,     /* R10379 */
+    0x0000,     /* R10380 */
+    0x0000,     /* R10381 */
+    0x0000,     /* R10382 */
+    0x0000,     /* R10383 */
+    0x0000,     /* R10384 */
+    0x0000,     /* R10385 */
+    0x0000,     /* R10386 */
+    0x0000,     /* R10387 */
+    0x0000,     /* R10388 */
+    0x0000,     /* R10389 */
+    0x0000,     /* R10390 */
+    0x0000,     /* R10391 */
+    0x0000,     /* R10392 */
+    0x0000,     /* R10393 */
+    0x0000,     /* R10394 */
+    0x0000,     /* R10395 */
+    0x0000,     /* R10396 */
+    0x0000,     /* R10397 */
+    0x0000,     /* R10398 */
+    0x0000,     /* R10399 */
+    0x0000,     /* R10400 */
+    0x0000,     /* R10401 */
+    0x0000,     /* R10402 */
+    0x0000,     /* R10403 */
+    0x0000,     /* R10404 */
+    0x0000,     /* R10405 */
+    0x0000,     /* R10406 */
+    0x0000,     /* R10407 */
+    0x0000,     /* R10408 */
+    0x0000,     /* R10409 */
+    0x0000,     /* R10410 */
+    0x0000,     /* R10411 */
+    0x0000,     /* R10412 */
+    0x0000,     /* R10413 */
+    0x0000,     /* R10414 */
+    0x0000,     /* R10415 */
+    0x0000,     /* R10416 */
+    0x0000,     /* R10417 */
+    0x0000,     /* R10418 */
+    0x0000,     /* R10419 */
+    0x0000,     /* R10420 */
+    0x0000,     /* R10421 */
+    0x0000,     /* R10422 */
+    0x0000,     /* R10423 */
+    0x0000,     /* R10424 */
+    0x0000,     /* R10425 */
+    0x0000,     /* R10426 */
+    0x0000,     /* R10427 */
+    0x0000,     /* R10428 */
+    0x0000,     /* R10429 */
+    0x0000,     /* R10430 */
+    0x0000,     /* R10431 */
+    0x0000,     /* R10432 */
+    0x0000,     /* R10433 */
+    0x0000,     /* R10434 */
+    0x0000,     /* R10435 */
+    0x0000,     /* R10436 */
+    0x0000,     /* R10437 */
+    0x0000,     /* R10438 */
+    0x0000,     /* R10439 */
+    0x0000,     /* R10440 */
+    0x0000,     /* R10441 */
+    0x0000,     /* R10442 */
+    0x0000,     /* R10443 */
+    0x0000,     /* R10444 */
+    0x0000,     /* R10445 */
+    0x0000,     /* R10446 */
+    0x0000,     /* R10447 */
+    0x0000,     /* R10448 */
+    0x0000,     /* R10449 */
+    0x0000,     /* R10450 */
+    0x0000,     /* R10451 */
+    0x0000,     /* R10452 */
+    0x0000,     /* R10453 */
+    0x0000,     /* R10454 */
+    0x0000,     /* R10455 */
+    0x0000,     /* R10456 */
+    0x0000,     /* R10457 */
+    0x0000,     /* R10458 */
+    0x0000,     /* R10459 */
+    0x0000,     /* R10460 */
+    0x0000,     /* R10461 */
+    0x0000,     /* R10462 */
+    0x0000,     /* R10463 */
+    0x0000,     /* R10464 */
+    0x0000,     /* R10465 */
+    0x0000,     /* R10466 */
+    0x0000,     /* R10467 */
+    0x0000,     /* R10468 */
+    0x0000,     /* R10469 */
+    0x0000,     /* R10470 */
+    0x0000,     /* R10471 */
+    0x0000,     /* R10472 */
+    0x0000,     /* R10473 */
+    0x0000,     /* R10474 */
+    0x0000,     /* R10475 */
+    0x0000,     /* R10476 */
+    0x0000,     /* R10477 */
+    0x0000,     /* R10478 */
+    0x0000,     /* R10479 */
+    0x0000,     /* R10480 */
+    0x0000,     /* R10481 */
+    0x0000,     /* R10482 */
+    0x0000,     /* R10483 */
+    0x0000,     /* R10484 */
+    0x0000,     /* R10485 */
+    0x0000,     /* R10486 */
+    0x0000,     /* R10487 */
+    0x0000,     /* R10488 */
+    0x0000,     /* R10489 */
+    0x0000,     /* R10490 */
+    0x0000,     /* R10491 */
+    0x0000,     /* R10492 */
+    0x0000,     /* R10493 */
+    0x0000,     /* R10494 */
+    0x0000,     /* R10495 */
+    0x0000,     /* R10496 */
+    0x0000,     /* R10497 */
+    0x0000,     /* R10498 */
+    0x0000,     /* R10499 */
+    0x0000,     /* R10500 */
+    0x0000,     /* R10501 */
+    0x0000,     /* R10502 */
+    0x0000,     /* R10503 */
+    0x0000,     /* R10504 */
+    0x0000,     /* R10505 */
+    0x0000,     /* R10506 */
+    0x0000,     /* R10507 */
+    0x0000,     /* R10508 */
+    0x0000,     /* R10509 */
+    0x0000,     /* R10510 */
+    0x0000,     /* R10511 */
+    0x0000,     /* R10512 */
+    0x0000,     /* R10513 */
+    0x0000,     /* R10514 */
+    0x0000,     /* R10515 */
+    0x0000,     /* R10516 */
+    0x0000,     /* R10517 */
+    0x0000,     /* R10518 */
+    0x0000,     /* R10519 */
+    0x0000,     /* R10520 */
+    0x0000,     /* R10521 */
+    0x0000,     /* R10522 */
+    0x0000,     /* R10523 */
+    0x0000,     /* R10524 */
+    0x0000,     /* R10525 */
+    0x0000,     /* R10526 */
+    0x0000,     /* R10527 */
+    0x0000,     /* R10528 */
+    0x0000,     /* R10529 */
+    0x0000,     /* R10530 */
+    0x0000,     /* R10531 */
+    0x0000,     /* R10532 */
+    0x0000,     /* R10533 */
+    0x0000,     /* R10534 */
+    0x0000,     /* R10535 */
+    0x0000,     /* R10536 */
+    0x0000,     /* R10537 */
+    0x0000,     /* R10538 */
+    0x0000,     /* R10539 */
+    0x0000,     /* R10540 */
+    0x0000,     /* R10541 */
+    0x0000,     /* R10542 */
+    0x0000,     /* R10543 */
+    0x0000,     /* R10544 */
+    0x0000,     /* R10545 */
+    0x0000,     /* R10546 */
+    0x0000,     /* R10547 */
+    0x0000,     /* R10548 */
+    0x0000,     /* R10549 */
+    0x0000,     /* R10550 */
+    0x0000,     /* R10551 */
+    0x0000,     /* R10552 */
+    0x0000,     /* R10553 */
+    0x0000,     /* R10554 */
+    0x0000,     /* R10555 */
+    0x0000,     /* R10556 */
+    0x0000,     /* R10557 */
+    0x0000,     /* R10558 */
+    0x0000,     /* R10559 */
+    0x0000,     /* R10560 */
+    0x0000,     /* R10561 */
+    0x0000,     /* R10562 */
+    0x0000,     /* R10563 */
+    0x0000,     /* R10564 */
+    0x0000,     /* R10565 */
+    0x0000,     /* R10566 */
+    0x0000,     /* R10567 */
+    0x0000,     /* R10568 */
+    0x0000,     /* R10569 */
+    0x0000,     /* R10570 */
+    0x0000,     /* R10571 */
+    0x0000,     /* R10572 */
+    0x0000,     /* R10573 */
+    0x0000,     /* R10574 */
+    0x0000,     /* R10575 */
+    0x0000,     /* R10576 */
+    0x0000,     /* R10577 */
+    0x0000,     /* R10578 */
+    0x0000,     /* R10579 */
+    0x0000,     /* R10580 */
+    0x0000,     /* R10581 */
+    0x0000,     /* R10582 */
+    0x0000,     /* R10583 */
+    0x0000,     /* R10584 */
+    0x0000,     /* R10585 */
+    0x0000,     /* R10586 */
+    0x0000,     /* R10587 */
+    0x0000,     /* R10588 */
+    0x0000,     /* R10589 */
+    0x0000,     /* R10590 */
+    0x0000,     /* R10591 */
+    0x0000,     /* R10592 */
+    0x0000,     /* R10593 */
+    0x0000,     /* R10594 */
+    0x0000,     /* R10595 */
+    0x0000,     /* R10596 */
+    0x0000,     /* R10597 */
+    0x0000,     /* R10598 */
+    0x0000,     /* R10599 */
+    0x0000,     /* R10600 */
+    0x0000,     /* R10601 */
+    0x0000,     /* R10602 */
+    0x0000,     /* R10603 */
+    0x0000,     /* R10604 */
+    0x0000,     /* R10605 */
+    0x0000,     /* R10606 */
+    0x0000,     /* R10607 */
+    0x0000,     /* R10608 */
+    0x0000,     /* R10609 */
+    0x0000,     /* R10610 */
+    0x0000,     /* R10611 */
+    0x0000,     /* R10612 */
+    0x0000,     /* R10613 */
+    0x0000,     /* R10614 */
+    0x0000,     /* R10615 */
+    0x0000,     /* R10616 */
+    0x0000,     /* R10617 */
+    0x0000,     /* R10618 */
+    0x0000,     /* R10619 */
+    0x0000,     /* R10620 */
+    0x0000,     /* R10621 */
+    0x0000,     /* R10622 */
+    0x0000,     /* R10623 */
+    0x0000,     /* R10624 */
+    0x0000,     /* R10625 */
+    0x0000,     /* R10626 */
+    0x0000,     /* R10627 */
+    0x0000,     /* R10628 */
+    0x0000,     /* R10629 */
+    0x0000,     /* R10630 */
+    0x0000,     /* R10631 */
+    0x0000,     /* R10632 */
+    0x0000,     /* R10633 */
+    0x0000,     /* R10634 */
+    0x0000,     /* R10635 */
+    0x0000,     /* R10636 */
+    0x0000,     /* R10637 */
+    0x0000,     /* R10638 */
+    0x0000,     /* R10639 */
+    0x0000,     /* R10640 */
+    0x0000,     /* R10641 */
+    0x0000,     /* R10642 */
+    0x0000,     /* R10643 */
+    0x0000,     /* R10644 */
+    0x0000,     /* R10645 */
+    0x0000,     /* R10646 */
+    0x0000,     /* R10647 */
+    0x0000,     /* R10648 */
+    0x0000,     /* R10649 */
+    0x0000,     /* R10650 */
+    0x0000,     /* R10651 */
+    0x0000,     /* R10652 */
+    0x0000,     /* R10653 */
+    0x0000,     /* R10654 */
+    0x0000,     /* R10655 */
+    0x0000,     /* R10656 */
+    0x0000,     /* R10657 */
+    0x0000,     /* R10658 */
+    0x0000,     /* R10659 */
+    0x0000,     /* R10660 */
+    0x0000,     /* R10661 */
+    0x0000,     /* R10662 */
+    0x0000,     /* R10663 */
+    0x0000,     /* R10664 */
+    0x0000,     /* R10665 */
+    0x0000,     /* R10666 */
+    0x0000,     /* R10667 */
+    0x0000,     /* R10668 */
+    0x0000,     /* R10669 */
+    0x0000,     /* R10670 */
+    0x0000,     /* R10671 */
+    0x0000,     /* R10672 */
+    0x0000,     /* R10673 */
+    0x0000,     /* R10674 */
+    0x0000,     /* R10675 */
+    0x0000,     /* R10676 */
+    0x0000,     /* R10677 */
+    0x0000,     /* R10678 */
+    0x0000,     /* R10679 */
+    0x0000,     /* R10680 */
+    0x0000,     /* R10681 */
+    0x0000,     /* R10682 */
+    0x0000,     /* R10683 */
+    0x0000,     /* R10684 */
+    0x0000,     /* R10685 */
+    0x0000,     /* R10686 */
+    0x0000,     /* R10687 */
+    0x0000,     /* R10688 */
+    0x0000,     /* R10689 */
+    0x0000,     /* R10690 */
+    0x0000,     /* R10691 */
+    0x0000,     /* R10692 */
+    0x0000,     /* R10693 */
+    0x0000,     /* R10694 */
+    0x0000,     /* R10695 */
+    0x0000,     /* R10696 */
+    0x0000,     /* R10697 */
+    0x0000,     /* R10698 */
+    0x0000,     /* R10699 */
+    0x0000,     /* R10700 */
+    0x0000,     /* R10701 */
+    0x0000,     /* R10702 */
+    0x0000,     /* R10703 */
+    0x0000,     /* R10704 */
+    0x0000,     /* R10705 */
+    0x0000,     /* R10706 */
+    0x0000,     /* R10707 */
+    0x0000,     /* R10708 */
+    0x0000,     /* R10709 */
+    0x0000,     /* R10710 */
+    0x0000,     /* R10711 */
+    0x0000,     /* R10712 */
+    0x0000,     /* R10713 */
+    0x0000,     /* R10714 */
+    0x0000,     /* R10715 */
+    0x0000,     /* R10716 */
+    0x0000,     /* R10717 */
+    0x0000,     /* R10718 */
+    0x0000,     /* R10719 */
+    0x0000,     /* R10720 */
+    0x0000,     /* R10721 */
+    0x0000,     /* R10722 */
+    0x0000,     /* R10723 */
+    0x0000,     /* R10724 */
+    0x0000,     /* R10725 */
+    0x0000,     /* R10726 */
+    0x0000,     /* R10727 */
+    0x0000,     /* R10728 */
+    0x0000,     /* R10729 */
+    0x0000,     /* R10730 */
+    0x0000,     /* R10731 */
+    0x0000,     /* R10732 */
+    0x0000,     /* R10733 */
+    0x0000,     /* R10734 */
+    0x0000,     /* R10735 */
+    0x0000,     /* R10736 */
+    0x0000,     /* R10737 */
+    0x0000,     /* R10738 */
+    0x0000,     /* R10739 */
+    0x0000,     /* R10740 */
+    0x0000,     /* R10741 */
+    0x0000,     /* R10742 */
+    0x0000,     /* R10743 */
+    0x0000,     /* R10744 */
+    0x0000,     /* R10745 */
+    0x0000,     /* R10746 */
+    0x0000,     /* R10747 */
+    0x0000,     /* R10748 */
+    0x0000,     /* R10749 */
+    0x0000,     /* R10750 */
+    0x0000,     /* R10751 */
+    0x0000,     /* R10752 */
+    0x0000,     /* R10753 */
+    0x0000,     /* R10754 */
+    0x0000,     /* R10755 */
+    0x0000,     /* R10756 */
+    0x0000,     /* R10757 */
+    0x0000,     /* R10758 */
+    0x0000,     /* R10759 */
+    0x0000,     /* R10760 */
+    0x0000,     /* R10761 */
+    0x0000,     /* R10762 */
+    0x0000,     /* R10763 */
+    0x0000,     /* R10764 */
+    0x0000,     /* R10765 */
+    0x0000,     /* R10766 */
+    0x0000,     /* R10767 */
+    0x0000,     /* R10768 */
+    0x0000,     /* R10769 */
+    0x0000,     /* R10770 */
+    0x0000,     /* R10771 */
+    0x0000,     /* R10772 */
+    0x0000,     /* R10773 */
+    0x0000,     /* R10774 */
+    0x0000,     /* R10775 */
+    0x0000,     /* R10776 */
+    0x0000,     /* R10777 */
+    0x0000,     /* R10778 */
+    0x0000,     /* R10779 */
+    0x0000,     /* R10780 */
+    0x0000,     /* R10781 */
+    0x0000,     /* R10782 */
+    0x0000,     /* R10783 */
+    0x0000,     /* R10784 */
+    0x0000,     /* R10785 */
+    0x0000,     /* R10786 */
+    0x0000,     /* R10787 */
+    0x0000,     /* R10788 */
+    0x0000,     /* R10789 */
+    0x0000,     /* R10790 */
+    0x0000,     /* R10791 */
+    0x0000,     /* R10792 */
+    0x0000,     /* R10793 */
+    0x0000,     /* R10794 */
+    0x0000,     /* R10795 */
+    0x0000,     /* R10796 */
+    0x0000,     /* R10797 */
+    0x0000,     /* R10798 */
+    0x0000,     /* R10799 */
+    0x0000,     /* R10800 */
+    0x0000,     /* R10801 */
+    0x0000,     /* R10802 */
+    0x0000,     /* R10803 */
+    0x0000,     /* R10804 */
+    0x0000,     /* R10805 */
+    0x0000,     /* R10806 */
+    0x0000,     /* R10807 */
+    0x0000,     /* R10808 */
+    0x0000,     /* R10809 */
+    0x0000,     /* R10810 */
+    0x0000,     /* R10811 */
+    0x0000,     /* R10812 */
+    0x0000,     /* R10813 */
+    0x0000,     /* R10814 */
+    0x0000,     /* R10815 */
+    0x0000,     /* R10816 */
+    0x0000,     /* R10817 */
+    0x0000,     /* R10818 */
+    0x0000,     /* R10819 */
+    0x0000,     /* R10820 */
+    0x0000,     /* R10821 */
+    0x0000,     /* R10822 */
+    0x0000,     /* R10823 */
+    0x0000,     /* R10824 */
+    0x0000,     /* R10825 */
+    0x0000,     /* R10826 */
+    0x0000,     /* R10827 */
+    0x0000,     /* R10828 */
+    0x0000,     /* R10829 */
+    0x0000,     /* R10830 */
+    0x0000,     /* R10831 */
+    0x0000,     /* R10832 */
+    0x0000,     /* R10833 */
+    0x0000,     /* R10834 */
+    0x0000,     /* R10835 */
+    0x0000,     /* R10836 */
+    0x0000,     /* R10837 */
+    0x0000,     /* R10838 */
+    0x0000,     /* R10839 */
+    0x0000,     /* R10840 */
+    0x0000,     /* R10841 */
+    0x0000,     /* R10842 */
+    0x0000,     /* R10843 */
+    0x0000,     /* R10844 */
+    0x0000,     /* R10845 */
+    0x0000,     /* R10846 */
+    0x0000,     /* R10847 */
+    0x0000,     /* R10848 */
+    0x0000,     /* R10849 */
+    0x0000,     /* R10850 */
+    0x0000,     /* R10851 */
+    0x0000,     /* R10852 */
+    0x0000,     /* R10853 */
+    0x0000,     /* R10854 */
+    0x0000,     /* R10855 */
+    0x0000,     /* R10856 */
+    0x0000,     /* R10857 */
+    0x0000,     /* R10858 */
+    0x0000,     /* R10859 */
+    0x0000,     /* R10860 */
+    0x0000,     /* R10861 */
+    0x0000,     /* R10862 */
+    0x0000,     /* R10863 */
+    0x0000,     /* R10864 */
+    0x0000,     /* R10865 */
+    0x0000,     /* R10866 */
+    0x0000,     /* R10867 */
+    0x0000,     /* R10868 */
+    0x0000,     /* R10869 */
+    0x0000,     /* R10870 */
+    0x0000,     /* R10871 */
+    0x0000,     /* R10872 */
+    0x0000,     /* R10873 */
+    0x0000,     /* R10874 */
+    0x0000,     /* R10875 */
+    0x0000,     /* R10876 */
+    0x0000,     /* R10877 */
+    0x0000,     /* R10878 */
+    0x0000,     /* R10879 */
+    0x0000,     /* R10880 */
+    0x0000,     /* R10881 */
+    0x0000,     /* R10882 */
+    0x0000,     /* R10883 */
+    0x0000,     /* R10884 */
+    0x0000,     /* R10885 */
+    0x0000,     /* R10886 */
+    0x0000,     /* R10887 */
+    0x0000,     /* R10888 */
+    0x0000,     /* R10889 */
+    0x0000,     /* R10890 */
+    0x0000,     /* R10891 */
+    0x0000,     /* R10892 */
+    0x0000,     /* R10893 */
+    0x0000,     /* R10894 */
+    0x0000,     /* R10895 */
+    0x0000,     /* R10896 */
+    0x0000,     /* R10897 */
+    0x0000,     /* R10898 */
+    0x0000,     /* R10899 */
+    0x0000,     /* R10900 */
+    0x0000,     /* R10901 */
+    0x0000,     /* R10902 */
+    0x0000,     /* R10903 */
+    0x0000,     /* R10904 */
+    0x0000,     /* R10905 */
+    0x0000,     /* R10906 */
+    0x0000,     /* R10907 */
+    0x0000,     /* R10908 */
+    0x0000,     /* R10909 */
+    0x0000,     /* R10910 */
+    0x0000,     /* R10911 */
+    0x0000,     /* R10912 */
+    0x0000,     /* R10913 */
+    0x0000,     /* R10914 */
+    0x0000,     /* R10915 */
+    0x0000,     /* R10916 */
+    0x0000,     /* R10917 */
+    0x0000,     /* R10918 */
+    0x0000,     /* R10919 */
+    0x0000,     /* R10920 */
+    0x0000,     /* R10921 */
+    0x0000,     /* R10922 */
+    0x0000,     /* R10923 */
+    0x0000,     /* R10924 */
+    0x0000,     /* R10925 */
+    0x0000,     /* R10926 */
+    0x0000,     /* R10927 */
+    0x0000,     /* R10928 */
+    0x0000,     /* R10929 */
+    0x0000,     /* R10930 */
+    0x0000,     /* R10931 */
+    0x0000,     /* R10932 */
+    0x0000,     /* R10933 */
+    0x0000,     /* R10934 */
+    0x0000,     /* R10935 */
+    0x0000,     /* R10936 */
+    0x0000,     /* R10937 */
+    0x0000,     /* R10938 */
+    0x0000,     /* R10939 */
+    0x0000,     /* R10940 */
+    0x0000,     /* R10941 */
+    0x0000,     /* R10942 */
+    0x0000,     /* R10943 */
+    0x0000,     /* R10944 */
+    0x0000,     /* R10945 */
+    0x0000,     /* R10946 */
+    0x0000,     /* R10947 */
+    0x0000,     /* R10948 */
+    0x0000,     /* R10949 */
+    0x0000,     /* R10950 */
+    0x0000,     /* R10951 */
+    0x0000,     /* R10952 */
+    0x0000,     /* R10953 */
+    0x0000,     /* R10954 */
+    0x0000,     /* R10955 */
+    0x0000,     /* R10956 */
+    0x0000,     /* R10957 */
+    0x0000,     /* R10958 */
+    0x0000,     /* R10959 */
+    0x0000,     /* R10960 */
+    0x0000,     /* R10961 */
+    0x0000,     /* R10962 */
+    0x0000,     /* R10963 */
+    0x0000,     /* R10964 */
+    0x0000,     /* R10965 */
+    0x0000,     /* R10966 */
+    0x0000,     /* R10967 */
+    0x0000,     /* R10968 */
+    0x0000,     /* R10969 */
+    0x0000,     /* R10970 */
+    0x0000,     /* R10971 */
+    0x0000,     /* R10972 */
+    0x0000,     /* R10973 */
+    0x0000,     /* R10974 */
+    0x0000,     /* R10975 */
+    0x0000,     /* R10976 */
+    0x0000,     /* R10977 */
+    0x0000,     /* R10978 */
+    0x0000,     /* R10979 */
+    0x0000,     /* R10980 */
+    0x0000,     /* R10981 */
+    0x0000,     /* R10982 */
+    0x0000,     /* R10983 */
+    0x0000,     /* R10984 */
+    0x0000,     /* R10985 */
+    0x0000,     /* R10986 */
+    0x0000,     /* R10987 */
+    0x0000,     /* R10988 */
+    0x0000,     /* R10989 */
+    0x0000,     /* R10990 */
+    0x0000,     /* R10991 */
+    0x0000,     /* R10992 */
+    0x0000,     /* R10993 */
+    0x0000,     /* R10994 */
+    0x0000,     /* R10995 */
+    0x0000,     /* R10996 */
+    0x0000,     /* R10997 */
+    0x0000,     /* R10998 */
+    0x0000,     /* R10999 */
+    0x0000,     /* R11000 */
+    0x0000,     /* R11001 */
+    0x0000,     /* R11002 */
+    0x0000,     /* R11003 */
+    0x0000,     /* R11004 */
+    0x0000,     /* R11005 */
+    0x0000,     /* R11006 */
+    0x0000,     /* R11007 */
+    0x0000,     /* R11008 */
+    0x0000,     /* R11009 */
+    0x0000,     /* R11010 */
+    0x0000,     /* R11011 */
+    0x0000,     /* R11012 */
+    0x0000,     /* R11013 */
+    0x0000,     /* R11014 */
+    0x0000,     /* R11015 */
+    0x0000,     /* R11016 */
+    0x0000,     /* R11017 */
+    0x0000,     /* R11018 */
+    0x0000,     /* R11019 */
+    0x0000,     /* R11020 */
+    0x0000,     /* R11021 */
+    0x0000,     /* R11022 */
+    0x0000,     /* R11023 */
+    0x0000,     /* R11024 */
+    0x0000,     /* R11025 */
+    0x0000,     /* R11026 */
+    0x0000,     /* R11027 */
+    0x0000,     /* R11028 */
+    0x0000,     /* R11029 */
+    0x0000,     /* R11030 */
+    0x0000,     /* R11031 */
+    0x0000,     /* R11032 */
+    0x0000,     /* R11033 */
+    0x0000,     /* R11034 */
+    0x0000,     /* R11035 */
+    0x0000,     /* R11036 */
+    0x0000,     /* R11037 */
+    0x0000,     /* R11038 */
+    0x0000,     /* R11039 */
+    0x0000,     /* R11040 */
+    0x0000,     /* R11041 */
+    0x0000,     /* R11042 */
+    0x0000,     /* R11043 */
+    0x0000,     /* R11044 */
+    0x0000,     /* R11045 */
+    0x0000,     /* R11046 */
+    0x0000,     /* R11047 */
+    0x0000,     /* R11048 */
+    0x0000,     /* R11049 */
+    0x0000,     /* R11050 */
+    0x0000,     /* R11051 */
+    0x0000,     /* R11052 */
+    0x0000,     /* R11053 */
+    0x0000,     /* R11054 */
+    0x0000,     /* R11055 */
+    0x0000,     /* R11056 */
+    0x0000,     /* R11057 */
+    0x0000,     /* R11058 */
+    0x0000,     /* R11059 */
+    0x0000,     /* R11060 */
+    0x0000,     /* R11061 */
+    0x0000,     /* R11062 */
+    0x0000,     /* R11063 */
+    0x0000,     /* R11064 */
+    0x0000,     /* R11065 */
+    0x0000,     /* R11066 */
+    0x0000,     /* R11067 */
+    0x0000,     /* R11068 */
+    0x0000,     /* R11069 */
+    0x0000,     /* R11070 */
+    0x0000,     /* R11071 */
+    0x0000,     /* R11072 */
+    0x0000,     /* R11073 */
+    0x0000,     /* R11074 */
+    0x0000,     /* R11075 */
+    0x0000,     /* R11076 */
+    0x0000,     /* R11077 */
+    0x0000,     /* R11078 */
+    0x0000,     /* R11079 */
+    0x0000,     /* R11080 */
+    0x0000,     /* R11081 */
+    0x0000,     /* R11082 */
+    0x0000,     /* R11083 */
+    0x0000,     /* R11084 */
+    0x0000,     /* R11085 */
+    0x0000,     /* R11086 */
+    0x0000,     /* R11087 */
+    0x0000,     /* R11088 */
+    0x0000,     /* R11089 */
+    0x0000,     /* R11090 */
+    0x0000,     /* R11091 */
+    0x0000,     /* R11092 */
+    0x0000,     /* R11093 */
+    0x0000,     /* R11094 */
+    0x0000,     /* R11095 */
+    0x0000,     /* R11096 */
+    0x0000,     /* R11097 */
+    0x0000,     /* R11098 */
+    0x0000,     /* R11099 */
+    0x0000,     /* R11100 */
+    0x0000,     /* R11101 */
+    0x0000,     /* R11102 */
+    0x0000,     /* R11103 */
+    0x0000,     /* R11104 */
+    0x0000,     /* R11105 */
+    0x0000,     /* R11106 */
+    0x0000,     /* R11107 */
+    0x0000,     /* R11108 */
+    0x0000,     /* R11109 */
+    0x0000,     /* R11110 */
+    0x0000,     /* R11111 */
+    0x0000,     /* R11112 */
+    0x0000,     /* R11113 */
+    0x0000,     /* R11114 */
+    0x0000,     /* R11115 */
+    0x0000,     /* R11116 */
+    0x0000,     /* R11117 */
+    0x0000,     /* R11118 */
+    0x0000,     /* R11119 */
+    0x0000,     /* R11120 */
+    0x0000,     /* R11121 */
+    0x0000,     /* R11122 */
+    0x0000,     /* R11123 */
+    0x0000,     /* R11124 */
+    0x0000,     /* R11125 */
+    0x0000,     /* R11126 */
+    0x0000,     /* R11127 */
+    0x0000,     /* R11128 */
+    0x0000,     /* R11129 */
+    0x0000,     /* R11130 */
+    0x0000,     /* R11131 */
+    0x0000,     /* R11132 */
+    0x0000,     /* R11133 */
+    0x0000,     /* R11134 */
+    0x0000,     /* R11135 */
+    0x0000,     /* R11136 */
+    0x0000,     /* R11137 */
+    0x0000,     /* R11138 */
+    0x0000,     /* R11139 */
+    0x0000,     /* R11140 */
+    0x0000,     /* R11141 */
+    0x0000,     /* R11142 */
+    0x0000,     /* R11143 */
+    0x0000,     /* R11144 */
+    0x0000,     /* R11145 */
+    0x0000,     /* R11146 */
+    0x0000,     /* R11147 */
+    0x0000,     /* R11148 */
+    0x0000,     /* R11149 */
+    0x0000,     /* R11150 */
+    0x0000,     /* R11151 */
+    0x0000,     /* R11152 */
+    0x0000,     /* R11153 */
+    0x0000,     /* R11154 */
+    0x0000,     /* R11155 */
+    0x0000,     /* R11156 */
+    0x0000,     /* R11157 */
+    0x0000,     /* R11158 */
+    0x0000,     /* R11159 */
+    0x0000,     /* R11160 */
+    0x0000,     /* R11161 */
+    0x0000,     /* R11162 */
+    0x0000,     /* R11163 */
+    0x0000,     /* R11164 */
+    0x0000,     /* R11165 */
+    0x0000,     /* R11166 */
+    0x0000,     /* R11167 */
+    0x0000,     /* R11168 */
+    0x0000,     /* R11169 */
+    0x0000,     /* R11170 */
+    0x0000,     /* R11171 */
+    0x0000,     /* R11172 */
+    0x0000,     /* R11173 */
+    0x0000,     /* R11174 */
+    0x0000,     /* R11175 */
+    0x0000,     /* R11176 */
+    0x0000,     /* R11177 */
+    0x0000,     /* R11178 */
+    0x0000,     /* R11179 */
+    0x0000,     /* R11180 */
+    0x0000,     /* R11181 */
+    0x0000,     /* R11182 */
+    0x0000,     /* R11183 */
+    0x0000,     /* R11184 */
+    0x0000,     /* R11185 */
+    0x0000,     /* R11186 */
+    0x0000,     /* R11187 */
+    0x0000,     /* R11188 */
+    0x0000,     /* R11189 */
+    0x0000,     /* R11190 */
+    0x0000,     /* R11191 */
+    0x0000,     /* R11192 */
+    0x0000,     /* R11193 */
+    0x0000,     /* R11194 */
+    0x0000,     /* R11195 */
+    0x0000,     /* R11196 */
+    0x0000,     /* R11197 */
+    0x0000,     /* R11198 */
+    0x0000,     /* R11199 */
+    0x0000,     /* R11200 */
+    0x0000,     /* R11201 */
+    0x0000,     /* R11202 */
+    0x0000,     /* R11203 */
+    0x0000,     /* R11204 */
+    0x0000,     /* R11205 */
+    0x0000,     /* R11206 */
+    0x0000,     /* R11207 */
+    0x0000,     /* R11208 */
+    0x0000,     /* R11209 */
+    0x0000,     /* R11210 */
+    0x0000,     /* R11211 */
+    0x0000,     /* R11212 */
+    0x0000,     /* R11213 */
+    0x0000,     /* R11214 */
+    0x0000,     /* R11215 */
+    0x0000,     /* R11216 */
+    0x0000,     /* R11217 */
+    0x0000,     /* R11218 */
+    0x0000,     /* R11219 */
+    0x0000,     /* R11220 */
+    0x0000,     /* R11221 */
+    0x0000,     /* R11222 */
+    0x0000,     /* R11223 */
+    0x0000,     /* R11224 */
+    0x0000,     /* R11225 */
+    0x0000,     /* R11226 */
+    0x0000,     /* R11227 */
+    0x0000,     /* R11228 */
+    0x0000,     /* R11229 */
+    0x0000,     /* R11230 */
+    0x0000,     /* R11231 */
+    0x0000,     /* R11232 */
+    0x0000,     /* R11233 */
+    0x0000,     /* R11234 */
+    0x0000,     /* R11235 */
+    0x0000,     /* R11236 */
+    0x0000,     /* R11237 */
+    0x0000,     /* R11238 */
+    0x0000,     /* R11239 */
+    0x0000,     /* R11240 */
+    0x0000,     /* R11241 */
+    0x0000,     /* R11242 */
+    0x0000,     /* R11243 */
+    0x0000,     /* R11244 */
+    0x0000,     /* R11245 */
+    0x0000,     /* R11246 */
+    0x0000,     /* R11247 */
+    0x0000,     /* R11248 */
+    0x0000,     /* R11249 */
+    0x0000,     /* R11250 */
+    0x0000,     /* R11251 */
+    0x0000,     /* R11252 */
+    0x0000,     /* R11253 */
+    0x0000,     /* R11254 */
+    0x0000,     /* R11255 */
+    0x0000,     /* R11256 */
+    0x0000,     /* R11257 */
+    0x0000,     /* R11258 */
+    0x0000,     /* R11259 */
+    0x0000,     /* R11260 */
+    0x0000,     /* R11261 */
+    0x0000,     /* R11262 */
+    0x0000,     /* R11263 */
+    0x0000,     /* R11264 */
+    0x0000,     /* R11265 */
+    0x0000,     /* R11266 */
+    0x0000,     /* R11267 */
+    0x0000,     /* R11268 */
+    0x0000,     /* R11269 */
+    0x0000,     /* R11270 */
+    0x0000,     /* R11271 */
+    0x0000,     /* R11272 */
+    0x0000,     /* R11273 */
+    0x0000,     /* R11274 */
+    0x0000,     /* R11275 */
+    0x0000,     /* R11276 */
+    0x0000,     /* R11277 */
+    0x0000,     /* R11278 */
+    0x0000,     /* R11279 */
+    0x0000,     /* R11280 */
+    0x0000,     /* R11281 */
+    0x0000,     /* R11282 */
+    0x0000,     /* R11283 */
+    0x0000,     /* R11284 */
+    0x0000,     /* R11285 */
+    0x0000,     /* R11286 */
+    0x0000,     /* R11287 */
+    0x0000,     /* R11288 */
+    0x0000,     /* R11289 */
+    0x0000,     /* R11290 */
+    0x0000,     /* R11291 */
+    0x0000,     /* R11292 */
+    0x0000,     /* R11293 */
+    0x0000,     /* R11294 */
+    0x0000,     /* R11295 */
+    0x0000,     /* R11296 */
+    0x0000,     /* R11297 */
+    0x0000,     /* R11298 */
+    0x0000,     /* R11299 */
+    0x0000,     /* R11300 */
+    0x0000,     /* R11301 */
+    0x0000,     /* R11302 */
+    0x0000,     /* R11303 */
+    0x0000,     /* R11304 */
+    0x0000,     /* R11305 */
+    0x0000,     /* R11306 */
+    0x0000,     /* R11307 */
+    0x0000,     /* R11308 */
+    0x0000,     /* R11309 */
+    0x0000,     /* R11310 */
+    0x0000,     /* R11311 */
+    0x0000,     /* R11312 */
+    0x0000,     /* R11313 */
+    0x0000,     /* R11314 */
+    0x0000,     /* R11315 */
+    0x0000,     /* R11316 */
+    0x0000,     /* R11317 */
+    0x0000,     /* R11318 */
+    0x0000,     /* R11319 */
+    0x0000,     /* R11320 */
+    0x0000,     /* R11321 */
+    0x0000,     /* R11322 */
+    0x0000,     /* R11323 */
+    0x0000,     /* R11324 */
+    0x0000,     /* R11325 */
+    0x0000,     /* R11326 */
+    0x0000,     /* R11327 */
+    0x0000,     /* R11328 */
+    0x0000,     /* R11329 */
+    0x0000,     /* R11330 */
+    0x0000,     /* R11331 */
+    0x0000,     /* R11332 */
+    0x0000,     /* R11333 */
+    0x0000,     /* R11334 */
+    0x0000,     /* R11335 */
+    0x0000,     /* R11336 */
+    0x0000,     /* R11337 */
+    0x0000,     /* R11338 */
+    0x0000,     /* R11339 */
+    0x0000,     /* R11340 */
+    0x0000,     /* R11341 */
+    0x0000,     /* R11342 */
+    0x0000,     /* R11343 */
+    0x0000,     /* R11344 */
+    0x0000,     /* R11345 */
+    0x0000,     /* R11346 */
+    0x0000,     /* R11347 */
+    0x0000,     /* R11348 */
+    0x0000,     /* R11349 */
+    0x0000,     /* R11350 */
+    0x0000,     /* R11351 */
+    0x0000,     /* R11352 */
+    0x0000,     /* R11353 */
+    0x0000,     /* R11354 */
+    0x0000,     /* R11355 */
+    0x0000,     /* R11356 */
+    0x0000,     /* R11357 */
+    0x0000,     /* R11358 */
+    0x0000,     /* R11359 */
+    0x0000,     /* R11360 */
+    0x0000,     /* R11361 */
+    0x0000,     /* R11362 */
+    0x0000,     /* R11363 */
+    0x0000,     /* R11364 */
+    0x0000,     /* R11365 */
+    0x0000,     /* R11366 */
+    0x0000,     /* R11367 */
+    0x0000,     /* R11368 */
+    0x0000,     /* R11369 */
+    0x0000,     /* R11370 */
+    0x0000,     /* R11371 */
+    0x0000,     /* R11372 */
+    0x0000,     /* R11373 */
+    0x0000,     /* R11374 */
+    0x0000,     /* R11375 */
+    0x0000,     /* R11376 */
+    0x0000,     /* R11377 */
+    0x0000,     /* R11378 */
+    0x0000,     /* R11379 */
+    0x0000,     /* R11380 */
+    0x0000,     /* R11381 */
+    0x0000,     /* R11382 */
+    0x0000,     /* R11383 */
+    0x0000,     /* R11384 */
+    0x0000,     /* R11385 */
+    0x0000,     /* R11386 */
+    0x0000,     /* R11387 */
+    0x0000,     /* R11388 */
+    0x0000,     /* R11389 */
+    0x0000,     /* R11390 */
+    0x0000,     /* R11391 */
+    0x0000,     /* R11392 */
+    0x0000,     /* R11393 */
+    0x0000,     /* R11394 */
+    0x0000,     /* R11395 */
+    0x0000,     /* R11396 */
+    0x0000,     /* R11397 */
+    0x0000,     /* R11398 */
+    0x0000,     /* R11399 */
+    0x0000,     /* R11400 */
+    0x0000,     /* R11401 */
+    0x0000,     /* R11402 */
+    0x0000,     /* R11403 */
+    0x0000,     /* R11404 */
+    0x0000,     /* R11405 */
+    0x0000,     /* R11406 */
+    0x0000,     /* R11407 */
+    0x0000,     /* R11408 */
+    0x0000,     /* R11409 */
+    0x0000,     /* R11410 */
+    0x0000,     /* R11411 */
+    0x0000,     /* R11412 */
+    0x0000,     /* R11413 */
+    0x0000,     /* R11414 */
+    0x0000,     /* R11415 */
+    0x0000,     /* R11416 */
+    0x0000,     /* R11417 */
+    0x0000,     /* R11418 */
+    0x0000,     /* R11419 */
+    0x0000,     /* R11420 */
+    0x0000,     /* R11421 */
+    0x0000,     /* R11422 */
+    0x0000,     /* R11423 */
+    0x0000,     /* R11424 */
+    0x0000,     /* R11425 */
+    0x0000,     /* R11426 */
+    0x0000,     /* R11427 */
+    0x0000,     /* R11428 */
+    0x0000,     /* R11429 */
+    0x0000,     /* R11430 */
+    0x0000,     /* R11431 */
+    0x0000,     /* R11432 */
+    0x0000,     /* R11433 */
+    0x0000,     /* R11434 */
+    0x0000,     /* R11435 */
+    0x0000,     /* R11436 */
+    0x0000,     /* R11437 */
+    0x0000,     /* R11438 */
+    0x0000,     /* R11439 */
+    0x0000,     /* R11440 */
+    0x0000,     /* R11441 */
+    0x0000,     /* R11442 */
+    0x0000,     /* R11443 */
+    0x0000,     /* R11444 */
+    0x0000,     /* R11445 */
+    0x0000,     /* R11446 */
+    0x0000,     /* R11447 */
+    0x0000,     /* R11448 */
+    0x0000,     /* R11449 */
+    0x0000,     /* R11450 */
+    0x0000,     /* R11451 */
+    0x0000,     /* R11452 */
+    0x0000,     /* R11453 */
+    0x0000,     /* R11454 */
+    0x0000,     /* R11455 */
+    0x0000,     /* R11456 */
+    0x0000,     /* R11457 */
+    0x0000,     /* R11458 */
+    0x0000,     /* R11459 */
+    0x0000,     /* R11460 */
+    0x0000,     /* R11461 */
+    0x0000,     /* R11462 */
+    0x0000,     /* R11463 */
+    0x0000,     /* R11464 */
+    0x0000,     /* R11465 */
+    0x0000,     /* R11466 */
+    0x0000,     /* R11467 */
+    0x0000,     /* R11468 */
+    0x0000,     /* R11469 */
+    0x0000,     /* R11470 */
+    0x0000,     /* R11471 */
+    0x0000,     /* R11472 */
+    0x0000,     /* R11473 */
+    0x0000,     /* R11474 */
+    0x0000,     /* R11475 */
+    0x0000,     /* R11476 */
+    0x0000,     /* R11477 */
+    0x0000,     /* R11478 */
+    0x0000,     /* R11479 */
+    0x0000,     /* R11480 */
+    0x0000,     /* R11481 */
+    0x0000,     /* R11482 */
+    0x0000,     /* R11483 */
+    0x0000,     /* R11484 */
+    0x0000,     /* R11485 */
+    0x0000,     /* R11486 */
+    0x0000,     /* R11487 */
+    0x0000,     /* R11488 */
+    0x0000,     /* R11489 */
+    0x0000,     /* R11490 */
+    0x0000,     /* R11491 */
+    0x0000,     /* R11492 */
+    0x0000,     /* R11493 */
+    0x0000,     /* R11494 */
+    0x0000,     /* R11495 */
+    0x0000,     /* R11496 */
+    0x0000,     /* R11497 */
+    0x0000,     /* R11498 */
+    0x0000,     /* R11499 */
+    0x0000,     /* R11500 */
+    0x0000,     /* R11501 */
+    0x0000,     /* R11502 */
+    0x0000,     /* R11503 */
+    0x0000,     /* R11504 */
+    0x0000,     /* R11505 */
+    0x0000,     /* R11506 */
+    0x0000,     /* R11507 */
+    0x0000,     /* R11508 */
+    0x0000,     /* R11509 */
+    0x0000,     /* R11510 */
+    0x0000,     /* R11511 */
+    0x0000,     /* R11512 */
+    0x0000,     /* R11513 */
+    0x0000,     /* R11514 */
+    0x0000,     /* R11515 */
+    0x0000,     /* R11516 */
+    0x0000,     /* R11517 */
+    0x0000,     /* R11518 */
+    0x0000,     /* R11519 */
+    0x0000,     /* R11520 */
+    0x0000,     /* R11521 */
+    0x0000,     /* R11522 */
+    0x0000,     /* R11523 */
+    0x0000,     /* R11524 */
+    0x0000,     /* R11525 */
+    0x0000,     /* R11526 */
+    0x0000,     /* R11527 */
+    0x0000,     /* R11528 */
+    0x0000,     /* R11529 */
+    0x0000,     /* R11530 */
+    0x0000,     /* R11531 */
+    0x0000,     /* R11532 */
+    0x0000,     /* R11533 */
+    0x0000,     /* R11534 */
+    0x0000,     /* R11535 */
+    0x0000,     /* R11536 */
+    0x0000,     /* R11537 */
+    0x0000,     /* R11538 */
+    0x0000,     /* R11539 */
+    0x0000,     /* R11540 */
+    0x0000,     /* R11541 */
+    0x0000,     /* R11542 */
+    0x0000,     /* R11543 */
+    0x0000,     /* R11544 */
+    0x0000,     /* R11545 */
+    0x0000,     /* R11546 */
+    0x0000,     /* R11547 */
+    0x0000,     /* R11548 */
+    0x0000,     /* R11549 */
+    0x0000,     /* R11550 */
+    0x0000,     /* R11551 */
+    0x0000,     /* R11552 */
+    0x0000,     /* R11553 */
+    0x0000,     /* R11554 */
+    0x0000,     /* R11555 */
+    0x0000,     /* R11556 */
+    0x0000,     /* R11557 */
+    0x0000,     /* R11558 */
+    0x0000,     /* R11559 */
+    0x0000,     /* R11560 */
+    0x0000,     /* R11561 */
+    0x0000,     /* R11562 */
+    0x0000,     /* R11563 */
+    0x0000,     /* R11564 */
+    0x0000,     /* R11565 */
+    0x0000,     /* R11566 */
+    0x0000,     /* R11567 */
+    0x0000,     /* R11568 */
+    0x0000,     /* R11569 */
+    0x0000,     /* R11570 */
+    0x0000,     /* R11571 */
+    0x0000,     /* R11572 */
+    0x0000,     /* R11573 */
+    0x0000,     /* R11574 */
+    0x0000,     /* R11575 */
+    0x0000,     /* R11576 */
+    0x0000,     /* R11577 */
+    0x0000,     /* R11578 */
+    0x0000,     /* R11579 */
+    0x0000,     /* R11580 */
+    0x0000,     /* R11581 */
+    0x0000,     /* R11582 */
+    0x0000,     /* R11583 */
+    0x0000,     /* R11584 */
+    0x0000,     /* R11585 */
+    0x0000,     /* R11586 */
+    0x0000,     /* R11587 */
+    0x0000,     /* R11588 */
+    0x0000,     /* R11589 */
+    0x0000,     /* R11590 */
+    0x0000,     /* R11591 */
+    0x0000,     /* R11592 */
+    0x0000,     /* R11593 */
+    0x0000,     /* R11594 */
+    0x0000,     /* R11595 */
+    0x0000,     /* R11596 */
+    0x0000,     /* R11597 */
+    0x0000,     /* R11598 */
+    0x0000,     /* R11599 */
+    0x0000,     /* R11600 */
+    0x0000,     /* R11601 */
+    0x0000,     /* R11602 */
+    0x0000,     /* R11603 */
+    0x0000,     /* R11604 */
+    0x0000,     /* R11605 */
+    0x0000,     /* R11606 */
+    0x0000,     /* R11607 */
+    0x0000,     /* R11608 */
+    0x0000,     /* R11609 */
+    0x0000,     /* R11610 */
+    0x0000,     /* R11611 */
+    0x0000,     /* R11612 */
+    0x0000,     /* R11613 */
+    0x0000,     /* R11614 */
+    0x0000,     /* R11615 */
+    0x0000,     /* R11616 */
+    0x0000,     /* R11617 */
+    0x0000,     /* R11618 */
+    0x0000,     /* R11619 */
+    0x0000,     /* R11620 */
+    0x0000,     /* R11621 */
+    0x0000,     /* R11622 */
+    0x0000,     /* R11623 */
+    0x0000,     /* R11624 */
+    0x0000,     /* R11625 */
+    0x0000,     /* R11626 */
+    0x0000,     /* R11627 */
+    0x0000,     /* R11628 */
+    0x0000,     /* R11629 */
+    0x0000,     /* R11630 */
+    0x0000,     /* R11631 */
+    0x0000,     /* R11632 */
+    0x0000,     /* R11633 */
+    0x0000,     /* R11634 */
+    0x0000,     /* R11635 */
+    0x0000,     /* R11636 */
+    0x0000,     /* R11637 */
+    0x0000,     /* R11638 */
+    0x0000,     /* R11639 */
+    0x0000,     /* R11640 */
+    0x0000,     /* R11641 */
+    0x0000,     /* R11642 */
+    0x0000,     /* R11643 */
+    0x0000,     /* R11644 */
+    0x0000,     /* R11645 */
+    0x0000,     /* R11646 */
+    0x0000,     /* R11647 */
+    0x0000,     /* R11648 */
+    0x0000,     /* R11649 */
+    0x0000,     /* R11650 */
+    0x0000,     /* R11651 */
+    0x0000,     /* R11652 */
+    0x0000,     /* R11653 */
+    0x0000,     /* R11654 */
+    0x0000,     /* R11655 */
+    0x0000,     /* R11656 */
+    0x0000,     /* R11657 */
+    0x0000,     /* R11658 */
+    0x0000,     /* R11659 */
+    0x0000,     /* R11660 */
+    0x0000,     /* R11661 */
+    0x0000,     /* R11662 */
+    0x0000,     /* R11663 */
+    0x0000,     /* R11664 */
+    0x0000,     /* R11665 */
+    0x0000,     /* R11666 */
+    0x0000,     /* R11667 */
+    0x0000,     /* R11668 */
+    0x0000,     /* R11669 */
+    0x0000,     /* R11670 */
+    0x0000,     /* R11671 */
+    0x0000,     /* R11672 */
+    0x0000,     /* R11673 */
+    0x0000,     /* R11674 */
+    0x0000,     /* R11675 */
+    0x0000,     /* R11676 */
+    0x0000,     /* R11677 */
+    0x0000,     /* R11678 */
+    0x0000,     /* R11679 */
+    0x0000,     /* R11680 */
+    0x0000,     /* R11681 */
+    0x0000,     /* R11682 */
+    0x0000,     /* R11683 */
+    0x0000,     /* R11684 */
+    0x0000,     /* R11685 */
+    0x0000,     /* R11686 */
+    0x0000,     /* R11687 */
+    0x0000,     /* R11688 */
+    0x0000,     /* R11689 */
+    0x0000,     /* R11690 */
+    0x0000,     /* R11691 */
+    0x0000,     /* R11692 */
+    0x0000,     /* R11693 */
+    0x0000,     /* R11694 */
+    0x0000,     /* R11695 */
+    0x0000,     /* R11696 */
+    0x0000,     /* R11697 */
+    0x0000,     /* R11698 */
+    0x0000,     /* R11699 */
+    0x0000,     /* R11700 */
+    0x0000,     /* R11701 */
+    0x0000,     /* R11702 */
+    0x0000,     /* R11703 */
+    0x0000,     /* R11704 */
+    0x0000,     /* R11705 */
+    0x0000,     /* R11706 */
+    0x0000,     /* R11707 */
+    0x0000,     /* R11708 */
+    0x0000,     /* R11709 */
+    0x0000,     /* R11710 */
+    0x0000,     /* R11711 */
+    0x0000,     /* R11712 */
+    0x0000,     /* R11713 */
+    0x0000,     /* R11714 */
+    0x0000,     /* R11715 */
+    0x0000,     /* R11716 */
+    0x0000,     /* R11717 */
+    0x0000,     /* R11718 */
+    0x0000,     /* R11719 */
+    0x0000,     /* R11720 */
+    0x0000,     /* R11721 */
+    0x0000,     /* R11722 */
+    0x0000,     /* R11723 */
+    0x0000,     /* R11724 */
+    0x0000,     /* R11725 */
+    0x0000,     /* R11726 */
+    0x0000,     /* R11727 */
+    0x0000,     /* R11728 */
+    0x0000,     /* R11729 */
+    0x0000,     /* R11730 */
+    0x0000,     /* R11731 */
+    0x0000,     /* R11732 */
+    0x0000,     /* R11733 */
+    0x0000,     /* R11734 */
+    0x0000,     /* R11735 */
+    0x0000,     /* R11736 */
+    0x0000,     /* R11737 */
+    0x0000,     /* R11738 */
+    0x0000,     /* R11739 */
+    0x0000,     /* R11740 */
+    0x0000,     /* R11741 */
+    0x0000,     /* R11742 */
+    0x0000,     /* R11743 */
+    0x0000,     /* R11744 */
+    0x0000,     /* R11745 */
+    0x0000,     /* R11746 */
+    0x0000,     /* R11747 */
+    0x0000,     /* R11748 */
+    0x0000,     /* R11749 */
+    0x0000,     /* R11750 */
+    0x0000,     /* R11751 */
+    0x0000,     /* R11752 */
+    0x0000,     /* R11753 */
+    0x0000,     /* R11754 */
+    0x0000,     /* R11755 */
+    0x0000,     /* R11756 */
+    0x0000,     /* R11757 */
+    0x0000,     /* R11758 */
+    0x0000,     /* R11759 */
+    0x0000,     /* R11760 */
+    0x0000,     /* R11761 */
+    0x0000,     /* R11762 */
+    0x0000,     /* R11763 */
+    0x0000,     /* R11764 */
+    0x0000,     /* R11765 */
+    0x0000,     /* R11766 */
+    0x0000,     /* R11767 */
+    0x0000,     /* R11768 */
+    0x0000,     /* R11769 */
+    0x0000,     /* R11770 */
+    0x0000,     /* R11771 */
+    0x0000,     /* R11772 */
+    0x0000,     /* R11773 */
+    0x0000,     /* R11774 */
+    0x0000,     /* R11775 */
+    0x0000,     /* R11776 */
+    0x0000,     /* R11777 */
+    0x0000,     /* R11778 */
+    0x0000,     /* R11779 */
+    0x0000,     /* R11780 */
+    0x0000,     /* R11781 */
+    0x0000,     /* R11782 */
+    0x0000,     /* R11783 */
+    0x0000,     /* R11784 */
+    0x0000,     /* R11785 */
+    0x0000,     /* R11786 */
+    0x0000,     /* R11787 */
+    0x0000,     /* R11788 */
+    0x0000,     /* R11789 */
+    0x0000,     /* R11790 */
+    0x0000,     /* R11791 */
+    0x0000,     /* R11792 */
+    0x0000,     /* R11793 */
+    0x0000,     /* R11794 */
+    0x0000,     /* R11795 */
+    0x0000,     /* R11796 */
+    0x0000,     /* R11797 */
+    0x0000,     /* R11798 */
+    0x0000,     /* R11799 */
+    0x0000,     /* R11800 */
+    0x0000,     /* R11801 */
+    0x0000,     /* R11802 */
+    0x0000,     /* R11803 */
+    0x0000,     /* R11804 */
+    0x0000,     /* R11805 */
+    0x0000,     /* R11806 */
+    0x0000,     /* R11807 */
+    0x0000,     /* R11808 */
+    0x0000,     /* R11809 */
+    0x0000,     /* R11810 */
+    0x0000,     /* R11811 */
+    0x0000,     /* R11812 */
+    0x0000,     /* R11813 */
+    0x0000,     /* R11814 */
+    0x0000,     /* R11815 */
+    0x0000,     /* R11816 */
+    0x0000,     /* R11817 */
+    0x0000,     /* R11818 */
+    0x0000,     /* R11819 */
+    0x0000,     /* R11820 */
+    0x0000,     /* R11821 */
+    0x0000,     /* R11822 */
+    0x0000,     /* R11823 */
+    0x0000,     /* R11824 */
+    0x0000,     /* R11825 */
+    0x0000,     /* R11826 */
+    0x0000,     /* R11827 */
+    0x0000,     /* R11828 */
+    0x0000,     /* R11829 */
+    0x0000,     /* R11830 */
+    0x0000,     /* R11831 */
+    0x0000,     /* R11832 */
+    0x0000,     /* R11833 */
+    0x0000,     /* R11834 */
+    0x0000,     /* R11835 */
+    0x0000,     /* R11836 */
+    0x0000,     /* R11837 */
+    0x0000,     /* R11838 */
+    0x0000,     /* R11839 */
+    0x0000,     /* R11840 */
+    0x0000,     /* R11841 */
+    0x0000,     /* R11842 */
+    0x0000,     /* R11843 */
+    0x0000,     /* R11844 */
+    0x0000,     /* R11845 */
+    0x0000,     /* R11846 */
+    0x0000,     /* R11847 */
+    0x0000,     /* R11848 */
+    0x0000,     /* R11849 */
+    0x0000,     /* R11850 */
+    0x0000,     /* R11851 */
+    0x0000,     /* R11852 */
+    0x0000,     /* R11853 */
+    0x0000,     /* R11854 */
+    0x0000,     /* R11855 */
+    0x0000,     /* R11856 */
+    0x0000,     /* R11857 */
+    0x0000,     /* R11858 */
+    0x0000,     /* R11859 */
+    0x0000,     /* R11860 */
+    0x0000,     /* R11861 */
+    0x0000,     /* R11862 */
+    0x0000,     /* R11863 */
+    0x0000,     /* R11864 */
+    0x0000,     /* R11865 */
+    0x0000,     /* R11866 */
+    0x0000,     /* R11867 */
+    0x0000,     /* R11868 */
+    0x0000,     /* R11869 */
+    0x0000,     /* R11870 */
+    0x0000,     /* R11871 */
+    0x0000,     /* R11872 */
+    0x0000,     /* R11873 */
+    0x0000,     /* R11874 */
+    0x0000,     /* R11875 */
+    0x0000,     /* R11876 */
+    0x0000,     /* R11877 */
+    0x0000,     /* R11878 */
+    0x0000,     /* R11879 */
+    0x0000,     /* R11880 */
+    0x0000,     /* R11881 */
+    0x0000,     /* R11882 */
+    0x0000,     /* R11883 */
+    0x0000,     /* R11884 */
+    0x0000,     /* R11885 */
+    0x0000,     /* R11886 */
+    0x0000,     /* R11887 */
+    0x0000,     /* R11888 */
+    0x0000,     /* R11889 */
+    0x0000,     /* R11890 */
+    0x0000,     /* R11891 */
+    0x0000,     /* R11892 */
+    0x0000,     /* R11893 */
+    0x0000,     /* R11894 */
+    0x0000,     /* R11895 */
+    0x0000,     /* R11896 */
+    0x0000,     /* R11897 */
+    0x0000,     /* R11898 */
+    0x0000,     /* R11899 */
+    0x0000,     /* R11900 */
+    0x0000,     /* R11901 */
+    0x0000,     /* R11902 */
+    0x0000,     /* R11903 */
+    0x0000,     /* R11904 */
+    0x0000,     /* R11905 */
+    0x0000,     /* R11906 */
+    0x0000,     /* R11907 */
+    0x0000,     /* R11908 */
+    0x0000,     /* R11909 */
+    0x0000,     /* R11910 */
+    0x0000,     /* R11911 */
+    0x0000,     /* R11912 */
+    0x0000,     /* R11913 */
+    0x0000,     /* R11914 */
+    0x0000,     /* R11915 */
+    0x0000,     /* R11916 */
+    0x0000,     /* R11917 */
+    0x0000,     /* R11918 */
+    0x0000,     /* R11919 */
+    0x0000,     /* R11920 */
+    0x0000,     /* R11921 */
+    0x0000,     /* R11922 */
+    0x0000,     /* R11923 */
+    0x0000,     /* R11924 */
+    0x0000,     /* R11925 */
+    0x0000,     /* R11926 */
+    0x0000,     /* R11927 */
+    0x0000,     /* R11928 */
+    0x0000,     /* R11929 */
+    0x0000,     /* R11930 */
+    0x0000,     /* R11931 */
+    0x0000,     /* R11932 */
+    0x0000,     /* R11933 */
+    0x0000,     /* R11934 */
+    0x0000,     /* R11935 */
+    0x0000,     /* R11936 */
+    0x0000,     /* R11937 */
+    0x0000,     /* R11938 */
+    0x0000,     /* R11939 */
+    0x0000,     /* R11940 */
+    0x0000,     /* R11941 */
+    0x0000,     /* R11942 */
+    0x0000,     /* R11943 */
+    0x0000,     /* R11944 */
+    0x0000,     /* R11945 */
+    0x0000,     /* R11946 */
+    0x0000,     /* R11947 */
+    0x0000,     /* R11948 */
+    0x0000,     /* R11949 */
+    0x0000,     /* R11950 */
+    0x0000,     /* R11951 */
+    0x0000,     /* R11952 */
+    0x0000,     /* R11953 */
+    0x0000,     /* R11954 */
+    0x0000,     /* R11955 */
+    0x0000,     /* R11956 */
+    0x0000,     /* R11957 */
+    0x0000,     /* R11958 */
+    0x0000,     /* R11959 */
+    0x0000,     /* R11960 */
+    0x0000,     /* R11961 */
+    0x0000,     /* R11962 */
+    0x0000,     /* R11963 */
+    0x0000,     /* R11964 */
+    0x0000,     /* R11965 */
+    0x0000,     /* R11966 */
+    0x0000,     /* R11967 */
+    0x0000,     /* R11968 */
+    0x0000,     /* R11969 */
+    0x0000,     /* R11970 */
+    0x0000,     /* R11971 */
+    0x0000,     /* R11972 */
+    0x0000,     /* R11973 */
+    0x0000,     /* R11974 */
+    0x0000,     /* R11975 */
+    0x0000,     /* R11976 */
+    0x0000,     /* R11977 */
+    0x0000,     /* R11978 */
+    0x0000,     /* R11979 */
+    0x0000,     /* R11980 */
+    0x0000,     /* R11981 */
+    0x0000,     /* R11982 */
+    0x0000,     /* R11983 */
+    0x0000,     /* R11984 */
+    0x0000,     /* R11985 */
+    0x0000,     /* R11986 */
+    0x0000,     /* R11987 */
+    0x0000,     /* R11988 */
+    0x0000,     /* R11989 */
+    0x0000,     /* R11990 */
+    0x0000,     /* R11991 */
+    0x0000,     /* R11992 */
+    0x0000,     /* R11993 */
+    0x0000,     /* R11994 */
+    0x0000,     /* R11995 */
+    0x0000,     /* R11996 */
+    0x0000,     /* R11997 */
+    0x0000,     /* R11998 */
+    0x0000,     /* R11999 */
+    0x0000,     /* R12000 */
+    0x0000,     /* R12001 */
+    0x0000,     /* R12002 */
+    0x0000,     /* R12003 */
+    0x0000,     /* R12004 */
+    0x0000,     /* R12005 */
+    0x0000,     /* R12006 */
+    0x0000,     /* R12007 */
+    0x0000,     /* R12008 */
+    0x0000,     /* R12009 */
+    0x0000,     /* R12010 */
+    0x0000,     /* R12011 */
+    0x0000,     /* R12012 */
+    0x0000,     /* R12013 */
+    0x0000,     /* R12014 */
+    0x0000,     /* R12015 */
+    0x0000,     /* R12016 */
+    0x0000,     /* R12017 */
+    0x0000,     /* R12018 */
+    0x0000,     /* R12019 */
+    0x0000,     /* R12020 */
+    0x0000,     /* R12021 */
+    0x0000,     /* R12022 */
+    0x0000,     /* R12023 */
+    0x0000,     /* R12024 */
+    0x0000,     /* R12025 */
+    0x0000,     /* R12026 */
+    0x0000,     /* R12027 */
+    0x0000,     /* R12028 */
+    0x0000,     /* R12029 */
+    0x0000,     /* R12030 */
+    0x0000,     /* R12031 */
+    0x0000,     /* R12032 */
+    0x0000,     /* R12033 */
+    0x0000,     /* R12034 */
+    0x0000,     /* R12035 */
+    0x0000,     /* R12036 */
+    0x0000,     /* R12037 */
+    0x0000,     /* R12038 */
+    0x0000,     /* R12039 */
+    0x0000,     /* R12040 */
+    0x0000,     /* R12041 */
+    0x0000,     /* R12042 */
+    0x0000,     /* R12043 */
+    0x0000,     /* R12044 */
+    0x0000,     /* R12045 */
+    0x0000,     /* R12046 */
+    0x0000,     /* R12047 */
+    0x0000,     /* R12048 */
+    0x0000,     /* R12049 */
+    0x0000,     /* R12050 */
+    0x0000,     /* R12051 */
+    0x0000,     /* R12052 */
+    0x0000,     /* R12053 */
+    0x0000,     /* R12054 */
+    0x0000,     /* R12055 */
+    0x0000,     /* R12056 */
+    0x0000,     /* R12057 */
+    0x0000,     /* R12058 */
+    0x0000,     /* R12059 */
+    0x0000,     /* R12060 */
+    0x0000,     /* R12061 */
+    0x0000,     /* R12062 */
+    0x0000,     /* R12063 */
+    0x0000,     /* R12064 */
+    0x0000,     /* R12065 */
+    0x0000,     /* R12066 */
+    0x0000,     /* R12067 */
+    0x0000,     /* R12068 */
+    0x0000,     /* R12069 */
+    0x0000,     /* R12070 */
+    0x0000,     /* R12071 */
+    0x0000,     /* R12072 */
+    0x0000,     /* R12073 */
+    0x0000,     /* R12074 */
+    0x0000,     /* R12075 */
+    0x0000,     /* R12076 */
+    0x0000,     /* R12077 */
+    0x0000,     /* R12078 */
+    0x0000,     /* R12079 */
+    0x0000,     /* R12080 */
+    0x0000,     /* R12081 */
+    0x0000,     /* R12082 */
+    0x0000,     /* R12083 */
+    0x0000,     /* R12084 */
+    0x0000,     /* R12085 */
+    0x0000,     /* R12086 */
+    0x0000,     /* R12087 */
+    0x0000,     /* R12088 */
+    0x0000,     /* R12089 */
+    0x0000,     /* R12090 */
+    0x0000,     /* R12091 */
+    0x0000,     /* R12092 */
+    0x0000,     /* R12093 */
+    0x0000,     /* R12094 */
+    0x0000,     /* R12095 */
+    0x0000,     /* R12096 */
+    0x0000,     /* R12097 */
+    0x0000,     /* R12098 */
+    0x0000,     /* R12099 */
+    0x0000,     /* R12100 */
+    0x0000,     /* R12101 */
+    0x0000,     /* R12102 */
+    0x0000,     /* R12103 */
+    0x0000,     /* R12104 */
+    0x0000,     /* R12105 */
+    0x0000,     /* R12106 */
+    0x0000,     /* R12107 */
+    0x0000,     /* R12108 */
+    0x0000,     /* R12109 */
+    0x0000,     /* R12110 */
+    0x0000,     /* R12111 */
+    0x0000,     /* R12112 */
+    0x0000,     /* R12113 */
+    0x0000,     /* R12114 */
+    0x0000,     /* R12115 */
+    0x0000,     /* R12116 */
+    0x0000,     /* R12117 */
+    0x0000,     /* R12118 */
+    0x0000,     /* R12119 */
+    0x0000,     /* R12120 */
+    0x0000,     /* R12121 */
+    0x0000,     /* R12122 */
+    0x0000,     /* R12123 */
+    0x0000,     /* R12124 */
+    0x0000,     /* R12125 */
+    0x0000,     /* R12126 */
+    0x0000,     /* R12127 */
+    0x0000,     /* R12128 */
+    0x0000,     /* R12129 */
+    0x0000,     /* R12130 */
+    0x0000,     /* R12131 */
+    0x0000,     /* R12132 */
+    0x0000,     /* R12133 */
+    0x0000,     /* R12134 */
+    0x0000,     /* R12135 */
+    0x0000,     /* R12136 */
+    0x0000,     /* R12137 */
+    0x0000,     /* R12138 */
+    0x0000,     /* R12139 */
+    0x0000,     /* R12140 */
+    0x0000,     /* R12141 */
+    0x0000,     /* R12142 */
+    0x0000,     /* R12143 */
+    0x0000,     /* R12144 */
+    0x0000,     /* R12145 */
+    0x0000,     /* R12146 */
+    0x0000,     /* R12147 */
+    0x0000,     /* R12148 */
+    0x0000,     /* R12149 */
+    0x0000,     /* R12150 */
+    0x0000,     /* R12151 */
+    0x0000,     /* R12152 */
+    0x0000,     /* R12153 */
+    0x0000,     /* R12154 */
+    0x0000,     /* R12155 */
+    0x0000,     /* R12156 */
+    0x0000,     /* R12157 */
+    0x0000,     /* R12158 */
+    0x0000,     /* R12159 */
+    0x0000,     /* R12160 */
+    0x0000,     /* R12161 */
+    0x0000,     /* R12162 */
+    0x0000,     /* R12163 */
+    0x0000,     /* R12164 */
+    0x0000,     /* R12165 */
+    0x0000,     /* R12166 */
+    0x0000,     /* R12167 */
+    0x0000,     /* R12168 */
+    0x0000,     /* R12169 */
+    0x0000,     /* R12170 */
+    0x0000,     /* R12171 */
+    0x0000,     /* R12172 */
+    0x0000,     /* R12173 */
+    0x0000,     /* R12174 */
+    0x0000,     /* R12175 */
+    0x0000,     /* R12176 */
+    0x0000,     /* R12177 */
+    0x0000,     /* R12178 */
+    0x0000,     /* R12179 */
+    0x0000,     /* R12180 */
+    0x0000,     /* R12181 */
+    0x0000,     /* R12182 */
+    0x0000,     /* R12183 */
+    0x0000,     /* R12184 */
+    0x0000,     /* R12185 */
+    0x0000,     /* R12186 */
+    0x0000,     /* R12187 */
+    0x0000,     /* R12188 */
+    0x0000,     /* R12189 */
+    0x0000,     /* R12190 */
+    0x0000,     /* R12191 */
+    0x0000,     /* R12192 */
+    0x0000,     /* R12193 */
+    0x0000,     /* R12194 */
+    0x0000,     /* R12195 */
+    0x0000,     /* R12196 */
+    0x0000,     /* R12197 */
+    0x0000,     /* R12198 */
+    0x0000,     /* R12199 */
+    0x0000,     /* R12200 */
+    0x0000,     /* R12201 */
+    0x0000,     /* R12202 */
+    0x0000,     /* R12203 */
+    0x0000,     /* R12204 */
+    0x0000,     /* R12205 */
+    0x0000,     /* R12206 */
+    0x0000,     /* R12207 */
+    0x0000,     /* R12208 */
+    0x0000,     /* R12209 */
+    0x0000,     /* R12210 */
+    0x0000,     /* R12211 */
+    0x0000,     /* R12212 */
+    0x0000,     /* R12213 */
+    0x0000,     /* R12214 */
+    0x0000,     /* R12215 */
+    0x0000,     /* R12216 */
+    0x0000,     /* R12217 */
+    0x0000,     /* R12218 */
+    0x0000,     /* R12219 */
+    0x0000,     /* R12220 */
+    0x0000,     /* R12221 */
+    0x0000,     /* R12222 */
+    0x0000,     /* R12223 */
+    0x0000,     /* R12224 */
+    0x0000,     /* R12225 */
+    0x0000,     /* R12226 */
+    0x0000,     /* R12227 */
+    0x0000,     /* R12228 */
+    0x0000,     /* R12229 */
+    0x0000,     /* R12230 */
+    0x0000,     /* R12231 */
+    0x0000,     /* R12232 */
+    0x0000,     /* R12233 */
+    0x0000,     /* R12234 */
+    0x0000,     /* R12235 */
+    0x0000,     /* R12236 */
+    0x0000,     /* R12237 */
+    0x0000,     /* R12238 */
+    0x0000,     /* R12239 */
+    0x0000,     /* R12240 */
+    0x0000,     /* R12241 */
+    0x0000,     /* R12242 */
+    0x0000,     /* R12243 */
+    0x0000,     /* R12244 */
+    0x0000,     /* R12245 */
+    0x0000,     /* R12246 */
+    0x0000,     /* R12247 */
+    0x0000,     /* R12248 */
+    0x0000,     /* R12249 */
+    0x0000,     /* R12250 */
+    0x0000,     /* R12251 */
+    0x0000,     /* R12252 */
+    0x0000,     /* R12253 */
+    0x0000,     /* R12254 */
+    0x0000,     /* R12255 */
+    0x0000,     /* R12256 */
+    0x0000,     /* R12257 */
+    0x0000,     /* R12258 */
+    0x0000,     /* R12259 */
+    0x0000,     /* R12260 */
+    0x0000,     /* R12261 */
+    0x0000,     /* R12262 */
+    0x0000,     /* R12263 */
+    0x0000,     /* R12264 */
+    0x0000,     /* R12265 */
+    0x0000,     /* R12266 */
+    0x0000,     /* R12267 */
+    0x0000,     /* R12268 */
+    0x0000,     /* R12269 */
+    0x0000,     /* R12270 */
+    0x0000,     /* R12271 */
+    0x0000,     /* R12272 */
+    0x0000,     /* R12273 */
+    0x0000,     /* R12274 */
+    0x0000,     /* R12275 */
+    0x0000,     /* R12276 */
+    0x0000,     /* R12277 */
+    0x0000,     /* R12278 */
+    0x0000,     /* R12279 */
+    0x0000,     /* R12280 */
+    0x0000,     /* R12281 */
+    0x0000,     /* R12282 */
+    0x0000,     /* R12283 */
+    0x0000,     /* R12284 */
+    0x0000,     /* R12285 */
+    0x0000,     /* R12286 */
+    0x0000,     /* R12287 */
+    0x0000,     /* R12288 - DSP2 Data1 RAM 1 */
+    0x0000,     /* R12289 - DSP2 Data1 RAM 0 */
+    0x0000,     /* R12290 */
+    0x0000,     /* R12291 */
+    0x0000,     /* R12292 */
+    0x0000,     /* R12293 */
+    0x0000,     /* R12294 */
+    0x0000,     /* R12295 */
+    0x0000,     /* R12296 */
+    0x0000,     /* R12297 */
+    0x0000,     /* R12298 */
+    0x0000,     /* R12299 */
+    0x0000,     /* R12300 */
+    0x0000,     /* R12301 */
+    0x0000,     /* R12302 */
+    0x0000,     /* R12303 */
+    0x0000,     /* R12304 */
+    0x0000,     /* R12305 */
+    0x0000,     /* R12306 */
+    0x0000,     /* R12307 */
+    0x0000,     /* R12308 */
+    0x0000,     /* R12309 */
+    0x0000,     /* R12310 */
+    0x0000,     /* R12311 */
+    0x0000,     /* R12312 */
+    0x0000,     /* R12313 */
+    0x0000,     /* R12314 */
+    0x0000,     /* R12315 */
+    0x0000,     /* R12316 */
+    0x0000,     /* R12317 */
+    0x0000,     /* R12318 */
+    0x0000,     /* R12319 */
+    0x0000,     /* R12320 */
+    0x0000,     /* R12321 */
+    0x0000,     /* R12322 */
+    0x0000,     /* R12323 */
+    0x0000,     /* R12324 */
+    0x0000,     /* R12325 */
+    0x0000,     /* R12326 */
+    0x0000,     /* R12327 */
+    0x0000,     /* R12328 */
+    0x0000,     /* R12329 */
+    0x0000,     /* R12330 */
+    0x0000,     /* R12331 */
+    0x0000,     /* R12332 */
+    0x0000,     /* R12333 */
+    0x0000,     /* R12334 */
+    0x0000,     /* R12335 */
+    0x0000,     /* R12336 */
+    0x0000,     /* R12337 */
+    0x0000,     /* R12338 */
+    0x0000,     /* R12339 */
+    0x0000,     /* R12340 */
+    0x0000,     /* R12341 */
+    0x0000,     /* R12342 */
+    0x0000,     /* R12343 */
+    0x0000,     /* R12344 */
+    0x0000,     /* R12345 */
+    0x0000,     /* R12346 */
+    0x0000,     /* R12347 */
+    0x0000,     /* R12348 */
+    0x0000,     /* R12349 */
+    0x0000,     /* R12350 */
+    0x0000,     /* R12351 */
+    0x0000,     /* R12352 */
+    0x0000,     /* R12353 */
+    0x0000,     /* R12354 */
+    0x0000,     /* R12355 */
+    0x0000,     /* R12356 */
+    0x0000,     /* R12357 */
+    0x0000,     /* R12358 */
+    0x0000,     /* R12359 */
+    0x0000,     /* R12360 */
+    0x0000,     /* R12361 */
+    0x0000,     /* R12362 */
+    0x0000,     /* R12363 */
+    0x0000,     /* R12364 */
+    0x0000,     /* R12365 */
+    0x0000,     /* R12366 */
+    0x0000,     /* R12367 */
+    0x0000,     /* R12368 */
+    0x0000,     /* R12369 */
+    0x0000,     /* R12370 */
+    0x0000,     /* R12371 */
+    0x0000,     /* R12372 */
+    0x0000,     /* R12373 */
+    0x0000,     /* R12374 */
+    0x0000,     /* R12375 */
+    0x0000,     /* R12376 */
+    0x0000,     /* R12377 */
+    0x0000,     /* R12378 */
+    0x0000,     /* R12379 */
+    0x0000,     /* R12380 */
+    0x0000,     /* R12381 */
+    0x0000,     /* R12382 */
+    0x0000,     /* R12383 */
+    0x0000,     /* R12384 */
+    0x0000,     /* R12385 */
+    0x0000,     /* R12386 */
+    0x0000,     /* R12387 */
+    0x0000,     /* R12388 */
+    0x0000,     /* R12389 */
+    0x0000,     /* R12390 */
+    0x0000,     /* R12391 */
+    0x0000,     /* R12392 */
+    0x0000,     /* R12393 */
+    0x0000,     /* R12394 */
+    0x0000,     /* R12395 */
+    0x0000,     /* R12396 */
+    0x0000,     /* R12397 */
+    0x0000,     /* R12398 */
+    0x0000,     /* R12399 */
+    0x0000,     /* R12400 */
+    0x0000,     /* R12401 */
+    0x0000,     /* R12402 */
+    0x0000,     /* R12403 */
+    0x0000,     /* R12404 */
+    0x0000,     /* R12405 */
+    0x0000,     /* R12406 */
+    0x0000,     /* R12407 */
+    0x0000,     /* R12408 */
+    0x0000,     /* R12409 */
+    0x0000,     /* R12410 */
+    0x0000,     /* R12411 */
+    0x0000,     /* R12412 */
+    0x0000,     /* R12413 */
+    0x0000,     /* R12414 */
+    0x0000,     /* R12415 */
+    0x0000,     /* R12416 */
+    0x0000,     /* R12417 */
+    0x0000,     /* R12418 */
+    0x0000,     /* R12419 */
+    0x0000,     /* R12420 */
+    0x0000,     /* R12421 */
+    0x0000,     /* R12422 */
+    0x0000,     /* R12423 */
+    0x0000,     /* R12424 */
+    0x0000,     /* R12425 */
+    0x0000,     /* R12426 */
+    0x0000,     /* R12427 */
+    0x0000,     /* R12428 */
+    0x0000,     /* R12429 */
+    0x0000,     /* R12430 */
+    0x0000,     /* R12431 */
+    0x0000,     /* R12432 */
+    0x0000,     /* R12433 */
+    0x0000,     /* R12434 */
+    0x0000,     /* R12435 */
+    0x0000,     /* R12436 */
+    0x0000,     /* R12437 */
+    0x0000,     /* R12438 */
+    0x0000,     /* R12439 */
+    0x0000,     /* R12440 */
+    0x0000,     /* R12441 */
+    0x0000,     /* R12442 */
+    0x0000,     /* R12443 */
+    0x0000,     /* R12444 */
+    0x0000,     /* R12445 */
+    0x0000,     /* R12446 */
+    0x0000,     /* R12447 */
+    0x0000,     /* R12448 */
+    0x0000,     /* R12449 */
+    0x0000,     /* R12450 */
+    0x0000,     /* R12451 */
+    0x0000,     /* R12452 */
+    0x0000,     /* R12453 */
+    0x0000,     /* R12454 */
+    0x0000,     /* R12455 */
+    0x0000,     /* R12456 */
+    0x0000,     /* R12457 */
+    0x0000,     /* R12458 */
+    0x0000,     /* R12459 */
+    0x0000,     /* R12460 */
+    0x0000,     /* R12461 */
+    0x0000,     /* R12462 */
+    0x0000,     /* R12463 */
+    0x0000,     /* R12464 */
+    0x0000,     /* R12465 */
+    0x0000,     /* R12466 */
+    0x0000,     /* R12467 */
+    0x0000,     /* R12468 */
+    0x0000,     /* R12469 */
+    0x0000,     /* R12470 */
+    0x0000,     /* R12471 */
+    0x0000,     /* R12472 */
+    0x0000,     /* R12473 */
+    0x0000,     /* R12474 */
+    0x0000,     /* R12475 */
+    0x0000,     /* R12476 */
+    0x0000,     /* R12477 */
+    0x0000,     /* R12478 */
+    0x0000,     /* R12479 */
+    0x0000,     /* R12480 */
+    0x0000,     /* R12481 */
+    0x0000,     /* R12482 */
+    0x0000,     /* R12483 */
+    0x0000,     /* R12484 */
+    0x0000,     /* R12485 */
+    0x0000,     /* R12486 */
+    0x0000,     /* R12487 */
+    0x0000,     /* R12488 */
+    0x0000,     /* R12489 */
+    0x0000,     /* R12490 */
+    0x0000,     /* R12491 */
+    0x0000,     /* R12492 */
+    0x0000,     /* R12493 */
+    0x0000,     /* R12494 */
+    0x0000,     /* R12495 */
+    0x0000,     /* R12496 */
+    0x0000,     /* R12497 */
+    0x0000,     /* R12498 */
+    0x0000,     /* R12499 */
+    0x0000,     /* R12500 */
+    0x0000,     /* R12501 */
+    0x0000,     /* R12502 */
+    0x0000,     /* R12503 */
+    0x0000,     /* R12504 */
+    0x0000,     /* R12505 */
+    0x0000,     /* R12506 */
+    0x0000,     /* R12507 */
+    0x0000,     /* R12508 */
+    0x0000,     /* R12509 */
+    0x0000,     /* R12510 */
+    0x0000,     /* R12511 */
+    0x0000,     /* R12512 */
+    0x0000,     /* R12513 */
+    0x0000,     /* R12514 */
+    0x0000,     /* R12515 */
+    0x0000,     /* R12516 */
+    0x0000,     /* R12517 */
+    0x0000,     /* R12518 */
+    0x0000,     /* R12519 */
+    0x0000,     /* R12520 */
+    0x0000,     /* R12521 */
+    0x0000,     /* R12522 */
+    0x0000,     /* R12523 */
+    0x0000,     /* R12524 */
+    0x0000,     /* R12525 */
+    0x0000,     /* R12526 */
+    0x0000,     /* R12527 */
+    0x0000,     /* R12528 */
+    0x0000,     /* R12529 */
+    0x0000,     /* R12530 */
+    0x0000,     /* R12531 */
+    0x0000,     /* R12532 */
+    0x0000,     /* R12533 */
+    0x0000,     /* R12534 */
+    0x0000,     /* R12535 */
+    0x0000,     /* R12536 */
+    0x0000,     /* R12537 */
+    0x0000,     /* R12538 */
+    0x0000,     /* R12539 */
+    0x0000,     /* R12540 */
+    0x0000,     /* R12541 */
+    0x0000,     /* R12542 */
+    0x0000,     /* R12543 */
+    0x0000,     /* R12544 */
+    0x0000,     /* R12545 */
+    0x0000,     /* R12546 */
+    0x0000,     /* R12547 */
+    0x0000,     /* R12548 */
+    0x0000,     /* R12549 */
+    0x0000,     /* R12550 */
+    0x0000,     /* R12551 */
+    0x0000,     /* R12552 */
+    0x0000,     /* R12553 */
+    0x0000,     /* R12554 */
+    0x0000,     /* R12555 */
+    0x0000,     /* R12556 */
+    0x0000,     /* R12557 */
+    0x0000,     /* R12558 */
+    0x0000,     /* R12559 */
+    0x0000,     /* R12560 */
+    0x0000,     /* R12561 */
+    0x0000,     /* R12562 */
+    0x0000,     /* R12563 */
+    0x0000,     /* R12564 */
+    0x0000,     /* R12565 */
+    0x0000,     /* R12566 */
+    0x0000,     /* R12567 */
+    0x0000,     /* R12568 */
+    0x0000,     /* R12569 */
+    0x0000,     /* R12570 */
+    0x0000,     /* R12571 */
+    0x0000,     /* R12572 */
+    0x0000,     /* R12573 */
+    0x0000,     /* R12574 */
+    0x0000,     /* R12575 */
+    0x0000,     /* R12576 */
+    0x0000,     /* R12577 */
+    0x0000,     /* R12578 */
+    0x0000,     /* R12579 */
+    0x0000,     /* R12580 */
+    0x0000,     /* R12581 */
+    0x0000,     /* R12582 */
+    0x0000,     /* R12583 */
+    0x0000,     /* R12584 */
+    0x0000,     /* R12585 */
+    0x0000,     /* R12586 */
+    0x0000,     /* R12587 */
+    0x0000,     /* R12588 */
+    0x0000,     /* R12589 */
+    0x0000,     /* R12590 */
+    0x0000,     /* R12591 */
+    0x0000,     /* R12592 */
+    0x0000,     /* R12593 */
+    0x0000,     /* R12594 */
+    0x0000,     /* R12595 */
+    0x0000,     /* R12596 */
+    0x0000,     /* R12597 */
+    0x0000,     /* R12598 */
+    0x0000,     /* R12599 */
+    0x0000,     /* R12600 */
+    0x0000,     /* R12601 */
+    0x0000,     /* R12602 */
+    0x0000,     /* R12603 */
+    0x0000,     /* R12604 */
+    0x0000,     /* R12605 */
+    0x0000,     /* R12606 */
+    0x0000,     /* R12607 */
+    0x0000,     /* R12608 */
+    0x0000,     /* R12609 */
+    0x0000,     /* R12610 */
+    0x0000,     /* R12611 */
+    0x0000,     /* R12612 */
+    0x0000,     /* R12613 */
+    0x0000,     /* R12614 */
+    0x0000,     /* R12615 */
+    0x0000,     /* R12616 */
+    0x0000,     /* R12617 */
+    0x0000,     /* R12618 */
+    0x0000,     /* R12619 */
+    0x0000,     /* R12620 */
+    0x0000,     /* R12621 */
+    0x0000,     /* R12622 */
+    0x0000,     /* R12623 */
+    0x0000,     /* R12624 */
+    0x0000,     /* R12625 */
+    0x0000,     /* R12626 */
+    0x0000,     /* R12627 */
+    0x0000,     /* R12628 */
+    0x0000,     /* R12629 */
+    0x0000,     /* R12630 */
+    0x0000,     /* R12631 */
+    0x0000,     /* R12632 */
+    0x0000,     /* R12633 */
+    0x0000,     /* R12634 */
+    0x0000,     /* R12635 */
+    0x0000,     /* R12636 */
+    0x0000,     /* R12637 */
+    0x0000,     /* R12638 */
+    0x0000,     /* R12639 */
+    0x0000,     /* R12640 */
+    0x0000,     /* R12641 */
+    0x0000,     /* R12642 */
+    0x0000,     /* R12643 */
+    0x0000,     /* R12644 */
+    0x0000,     /* R12645 */
+    0x0000,     /* R12646 */
+    0x0000,     /* R12647 */
+    0x0000,     /* R12648 */
+    0x0000,     /* R12649 */
+    0x0000,     /* R12650 */
+    0x0000,     /* R12651 */
+    0x0000,     /* R12652 */
+    0x0000,     /* R12653 */
+    0x0000,     /* R12654 */
+    0x0000,     /* R12655 */
+    0x0000,     /* R12656 */
+    0x0000,     /* R12657 */
+    0x0000,     /* R12658 */
+    0x0000,     /* R12659 */
+    0x0000,     /* R12660 */
+    0x0000,     /* R12661 */
+    0x0000,     /* R12662 */
+    0x0000,     /* R12663 */
+    0x0000,     /* R12664 */
+    0x0000,     /* R12665 */
+    0x0000,     /* R12666 */
+    0x0000,     /* R12667 */
+    0x0000,     /* R12668 */
+    0x0000,     /* R12669 */
+    0x0000,     /* R12670 */
+    0x0000,     /* R12671 */
+    0x0000,     /* R12672 */
+    0x0000,     /* R12673 */
+    0x0000,     /* R12674 */
+    0x0000,     /* R12675 */
+    0x0000,     /* R12676 */
+    0x0000,     /* R12677 */
+    0x0000,     /* R12678 */
+    0x0000,     /* R12679 */
+    0x0000,     /* R12680 */
+    0x0000,     /* R12681 */
+    0x0000,     /* R12682 */
+    0x0000,     /* R12683 */
+    0x0000,     /* R12684 */
+    0x0000,     /* R12685 */
+    0x0000,     /* R12686 */
+    0x0000,     /* R12687 */
+    0x0000,     /* R12688 */
+    0x0000,     /* R12689 */
+    0x0000,     /* R12690 */
+    0x0000,     /* R12691 */
+    0x0000,     /* R12692 */
+    0x0000,     /* R12693 */
+    0x0000,     /* R12694 */
+    0x0000,     /* R12695 */
+    0x0000,     /* R12696 */
+    0x0000,     /* R12697 */
+    0x0000,     /* R12698 */
+    0x0000,     /* R12699 */
+    0x0000,     /* R12700 */
+    0x0000,     /* R12701 */
+    0x0000,     /* R12702 */
+    0x0000,     /* R12703 */
+    0x0000,     /* R12704 */
+    0x0000,     /* R12705 */
+    0x0000,     /* R12706 */
+    0x0000,     /* R12707 */
+    0x0000,     /* R12708 */
+    0x0000,     /* R12709 */
+    0x0000,     /* R12710 */
+    0x0000,     /* R12711 */
+    0x0000,     /* R12712 */
+    0x0000,     /* R12713 */
+    0x0000,     /* R12714 */
+    0x0000,     /* R12715 */
+    0x0000,     /* R12716 */
+    0x0000,     /* R12717 */
+    0x0000,     /* R12718 */
+    0x0000,     /* R12719 */
+    0x0000,     /* R12720 */
+    0x0000,     /* R12721 */
+    0x0000,     /* R12722 */
+    0x0000,     /* R12723 */
+    0x0000,     /* R12724 */
+    0x0000,     /* R12725 */
+    0x0000,     /* R12726 */
+    0x0000,     /* R12727 */
+    0x0000,     /* R12728 */
+    0x0000,     /* R12729 */
+    0x0000,     /* R12730 */
+    0x0000,     /* R12731 */
+    0x0000,     /* R12732 */
+    0x0000,     /* R12733 */
+    0x0000,     /* R12734 */
+    0x0000,     /* R12735 */
+    0x0000,     /* R12736 */
+    0x0000,     /* R12737 */
+    0x0000,     /* R12738 */
+    0x0000,     /* R12739 */
+    0x0000,     /* R12740 */
+    0x0000,     /* R12741 */
+    0x0000,     /* R12742 */
+    0x0000,     /* R12743 */
+    0x0000,     /* R12744 */
+    0x0000,     /* R12745 */
+    0x0000,     /* R12746 */
+    0x0000,     /* R12747 */
+    0x0000,     /* R12748 */
+    0x0000,     /* R12749 */
+    0x0000,     /* R12750 */
+    0x0000,     /* R12751 */
+    0x0000,     /* R12752 */
+    0x0000,     /* R12753 */
+    0x0000,     /* R12754 */
+    0x0000,     /* R12755 */
+    0x0000,     /* R12756 */
+    0x0000,     /* R12757 */
+    0x0000,     /* R12758 */
+    0x0000,     /* R12759 */
+    0x0000,     /* R12760 */
+    0x0000,     /* R12761 */
+    0x0000,     /* R12762 */
+    0x0000,     /* R12763 */
+    0x0000,     /* R12764 */
+    0x0000,     /* R12765 */
+    0x0000,     /* R12766 */
+    0x0000,     /* R12767 */
+    0x0000,     /* R12768 */
+    0x0000,     /* R12769 */
+    0x0000,     /* R12770 */
+    0x0000,     /* R12771 */
+    0x0000,     /* R12772 */
+    0x0000,     /* R12773 */
+    0x0000,     /* R12774 */
+    0x0000,     /* R12775 */
+    0x0000,     /* R12776 */
+    0x0000,     /* R12777 */
+    0x0000,     /* R12778 */
+    0x0000,     /* R12779 */
+    0x0000,     /* R12780 */
+    0x0000,     /* R12781 */
+    0x0000,     /* R12782 */
+    0x0000,     /* R12783 */
+    0x0000,     /* R12784 */
+    0x0000,     /* R12785 */
+    0x0000,     /* R12786 */
+    0x0000,     /* R12787 */
+    0x0000,     /* R12788 */
+    0x0000,     /* R12789 */
+    0x0000,     /* R12790 */
+    0x0000,     /* R12791 */
+    0x0000,     /* R12792 */
+    0x0000,     /* R12793 */
+    0x0000,     /* R12794 */
+    0x0000,     /* R12795 */
+    0x0000,     /* R12796 */
+    0x0000,     /* R12797 */
+    0x0000,     /* R12798 */
+    0x0000,     /* R12799 */
+    0x0000,     /* R12800 */
+    0x0000,     /* R12801 */
+    0x0000,     /* R12802 */
+    0x0000,     /* R12803 */
+    0x0000,     /* R12804 */
+    0x0000,     /* R12805 */
+    0x0000,     /* R12806 */
+    0x0000,     /* R12807 */
+    0x0000,     /* R12808 */
+    0x0000,     /* R12809 */
+    0x0000,     /* R12810 */
+    0x0000,     /* R12811 */
+    0x0000,     /* R12812 */
+    0x0000,     /* R12813 */
+    0x0000,     /* R12814 */
+    0x0000,     /* R12815 */
+    0x0000,     /* R12816 */
+    0x0000,     /* R12817 */
+    0x0000,     /* R12818 */
+    0x0000,     /* R12819 */
+    0x0000,     /* R12820 */
+    0x0000,     /* R12821 */
+    0x0000,     /* R12822 */
+    0x0000,     /* R12823 */
+    0x0000,     /* R12824 */
+    0x0000,     /* R12825 */
+    0x0000,     /* R12826 */
+    0x0000,     /* R12827 */
+    0x0000,     /* R12828 */
+    0x0000,     /* R12829 */
+    0x0000,     /* R12830 */
+    0x0000,     /* R12831 */
+    0x0000,     /* R12832 */
+    0x0000,     /* R12833 */
+    0x0000,     /* R12834 */
+    0x0000,     /* R12835 */
+    0x0000,     /* R12836 */
+    0x0000,     /* R12837 */
+    0x0000,     /* R12838 */
+    0x0000,     /* R12839 */
+    0x0000,     /* R12840 */
+    0x0000,     /* R12841 */
+    0x0000,     /* R12842 */
+    0x0000,     /* R12843 */
+    0x0000,     /* R12844 */
+    0x0000,     /* R12845 */
+    0x0000,     /* R12846 */
+    0x0000,     /* R12847 */
+    0x0000,     /* R12848 */
+    0x0000,     /* R12849 */
+    0x0000,     /* R12850 */
+    0x0000,     /* R12851 */
+    0x0000,     /* R12852 */
+    0x0000,     /* R12853 */
+    0x0000,     /* R12854 */
+    0x0000,     /* R12855 */
+    0x0000,     /* R12856 */
+    0x0000,     /* R12857 */
+    0x0000,     /* R12858 */
+    0x0000,     /* R12859 */
+    0x0000,     /* R12860 */
+    0x0000,     /* R12861 */
+    0x0000,     /* R12862 */
+    0x0000,     /* R12863 */
+    0x0000,     /* R12864 */
+    0x0000,     /* R12865 */
+    0x0000,     /* R12866 */
+    0x0000,     /* R12867 */
+    0x0000,     /* R12868 */
+    0x0000,     /* R12869 */
+    0x0000,     /* R12870 */
+    0x0000,     /* R12871 */
+    0x0000,     /* R12872 */
+    0x0000,     /* R12873 */
+    0x0000,     /* R12874 */
+    0x0000,     /* R12875 */
+    0x0000,     /* R12876 */
+    0x0000,     /* R12877 */
+    0x0000,     /* R12878 */
+    0x0000,     /* R12879 */
+    0x0000,     /* R12880 */
+    0x0000,     /* R12881 */
+    0x0000,     /* R12882 */
+    0x0000,     /* R12883 */
+    0x0000,     /* R12884 */
+    0x0000,     /* R12885 */
+    0x0000,     /* R12886 */
+    0x0000,     /* R12887 */
+    0x0000,     /* R12888 */
+    0x0000,     /* R12889 */
+    0x0000,     /* R12890 */
+    0x0000,     /* R12891 */
+    0x0000,     /* R12892 */
+    0x0000,     /* R12893 */
+    0x0000,     /* R12894 */
+    0x0000,     /* R12895 */
+    0x0000,     /* R12896 */
+    0x0000,     /* R12897 */
+    0x0000,     /* R12898 */
+    0x0000,     /* R12899 */
+    0x0000,     /* R12900 */
+    0x0000,     /* R12901 */
+    0x0000,     /* R12902 */
+    0x0000,     /* R12903 */
+    0x0000,     /* R12904 */
+    0x0000,     /* R12905 */
+    0x0000,     /* R12906 */
+    0x0000,     /* R12907 */
+    0x0000,     /* R12908 */
+    0x0000,     /* R12909 */
+    0x0000,     /* R12910 */
+    0x0000,     /* R12911 */
+    0x0000,     /* R12912 */
+    0x0000,     /* R12913 */
+    0x0000,     /* R12914 */
+    0x0000,     /* R12915 */
+    0x0000,     /* R12916 */
+    0x0000,     /* R12917 */
+    0x0000,     /* R12918 */
+    0x0000,     /* R12919 */
+    0x0000,     /* R12920 */
+    0x0000,     /* R12921 */
+    0x0000,     /* R12922 */
+    0x0000,     /* R12923 */
+    0x0000,     /* R12924 */
+    0x0000,     /* R12925 */
+    0x0000,     /* R12926 */
+    0x0000,     /* R12927 */
+    0x0000,     /* R12928 */
+    0x0000,     /* R12929 */
+    0x0000,     /* R12930 */
+    0x0000,     /* R12931 */
+    0x0000,     /* R12932 */
+    0x0000,     /* R12933 */
+    0x0000,     /* R12934 */
+    0x0000,     /* R12935 */
+    0x0000,     /* R12936 */
+    0x0000,     /* R12937 */
+    0x0000,     /* R12938 */
+    0x0000,     /* R12939 */
+    0x0000,     /* R12940 */
+    0x0000,     /* R12941 */
+    0x0000,     /* R12942 */
+    0x0000,     /* R12943 */
+    0x0000,     /* R12944 */
+    0x0000,     /* R12945 */
+    0x0000,     /* R12946 */
+    0x0000,     /* R12947 */
+    0x0000,     /* R12948 */
+    0x0000,     /* R12949 */
+    0x0000,     /* R12950 */
+    0x0000,     /* R12951 */
+    0x0000,     /* R12952 */
+    0x0000,     /* R12953 */
+    0x0000,     /* R12954 */
+    0x0000,     /* R12955 */
+    0x0000,     /* R12956 */
+    0x0000,     /* R12957 */
+    0x0000,     /* R12958 */
+    0x0000,     /* R12959 */
+    0x0000,     /* R12960 */
+    0x0000,     /* R12961 */
+    0x0000,     /* R12962 */
+    0x0000,     /* R12963 */
+    0x0000,     /* R12964 */
+    0x0000,     /* R12965 */
+    0x0000,     /* R12966 */
+    0x0000,     /* R12967 */
+    0x0000,     /* R12968 */
+    0x0000,     /* R12969 */
+    0x0000,     /* R12970 */
+    0x0000,     /* R12971 */
+    0x0000,     /* R12972 */
+    0x0000,     /* R12973 */
+    0x0000,     /* R12974 */
+    0x0000,     /* R12975 */
+    0x0000,     /* R12976 */
+    0x0000,     /* R12977 */
+    0x0000,     /* R12978 */
+    0x0000,     /* R12979 */
+    0x0000,     /* R12980 */
+    0x0000,     /* R12981 */
+    0x0000,     /* R12982 */
+    0x0000,     /* R12983 */
+    0x0000,     /* R12984 */
+    0x0000,     /* R12985 */
+    0x0000,     /* R12986 */
+    0x0000,     /* R12987 */
+    0x0000,     /* R12988 */
+    0x0000,     /* R12989 */
+    0x0000,     /* R12990 */
+    0x0000,     /* R12991 */
+    0x0000,     /* R12992 */
+    0x0000,     /* R12993 */
+    0x0000,     /* R12994 */
+    0x0000,     /* R12995 */
+    0x0000,     /* R12996 */
+    0x0000,     /* R12997 */
+    0x0000,     /* R12998 */
+    0x0000,     /* R12999 */
+    0x0000,     /* R13000 */
+    0x0000,     /* R13001 */
+    0x0000,     /* R13002 */
+    0x0000,     /* R13003 */
+    0x0000,     /* R13004 */
+    0x0000,     /* R13005 */
+    0x0000,     /* R13006 */
+    0x0000,     /* R13007 */
+    0x0000,     /* R13008 */
+    0x0000,     /* R13009 */
+    0x0000,     /* R13010 */
+    0x0000,     /* R13011 */
+    0x0000,     /* R13012 */
+    0x0000,     /* R13013 */
+    0x0000,     /* R13014 */
+    0x0000,     /* R13015 */
+    0x0000,     /* R13016 */
+    0x0000,     /* R13017 */
+    0x0000,     /* R13018 */
+    0x0000,     /* R13019 */
+    0x0000,     /* R13020 */
+    0x0000,     /* R13021 */
+    0x0000,     /* R13022 */
+    0x0000,     /* R13023 */
+    0x0000,     /* R13024 */
+    0x0000,     /* R13025 */
+    0x0000,     /* R13026 */
+    0x0000,     /* R13027 */
+    0x0000,     /* R13028 */
+    0x0000,     /* R13029 */
+    0x0000,     /* R13030 */
+    0x0000,     /* R13031 */
+    0x0000,     /* R13032 */
+    0x0000,     /* R13033 */
+    0x0000,     /* R13034 */
+    0x0000,     /* R13035 */
+    0x0000,     /* R13036 */
+    0x0000,     /* R13037 */
+    0x0000,     /* R13038 */
+    0x0000,     /* R13039 */
+    0x0000,     /* R13040 */
+    0x0000,     /* R13041 */
+    0x0000,     /* R13042 */
+    0x0000,     /* R13043 */
+    0x0000,     /* R13044 */
+    0x0000,     /* R13045 */
+    0x0000,     /* R13046 */
+    0x0000,     /* R13047 */
+    0x0000,     /* R13048 */
+    0x0000,     /* R13049 */
+    0x0000,     /* R13050 */
+    0x0000,     /* R13051 */
+    0x0000,     /* R13052 */
+    0x0000,     /* R13053 */
+    0x0000,     /* R13054 */
+    0x0000,     /* R13055 */
+    0x0000,     /* R13056 */
+    0x0000,     /* R13057 */
+    0x0000,     /* R13058 */
+    0x0000,     /* R13059 */
+    0x0000,     /* R13060 */
+    0x0000,     /* R13061 */
+    0x0000,     /* R13062 */
+    0x0000,     /* R13063 */
+    0x0000,     /* R13064 */
+    0x0000,     /* R13065 */
+    0x0000,     /* R13066 */
+    0x0000,     /* R13067 */
+    0x0000,     /* R13068 */
+    0x0000,     /* R13069 */
+    0x0000,     /* R13070 */
+    0x0000,     /* R13071 */
+    0x0000,     /* R13072 */
+    0x0000,     /* R13073 */
+    0x0000,     /* R13074 */
+    0x0000,     /* R13075 */
+    0x0000,     /* R13076 */
+    0x0000,     /* R13077 */
+    0x0000,     /* R13078 */
+    0x0000,     /* R13079 */
+    0x0000,     /* R13080 */
+    0x0000,     /* R13081 */
+    0x0000,     /* R13082 */
+    0x0000,     /* R13083 */
+    0x0000,     /* R13084 */
+    0x0000,     /* R13085 */
+    0x0000,     /* R13086 */
+    0x0000,     /* R13087 */
+    0x0000,     /* R13088 */
+    0x0000,     /* R13089 */
+    0x0000,     /* R13090 */
+    0x0000,     /* R13091 */
+    0x0000,     /* R13092 */
+    0x0000,     /* R13093 */
+    0x0000,     /* R13094 */
+    0x0000,     /* R13095 */
+    0x0000,     /* R13096 */
+    0x0000,     /* R13097 */
+    0x0000,     /* R13098 */
+    0x0000,     /* R13099 */
+    0x0000,     /* R13100 */
+    0x0000,     /* R13101 */
+    0x0000,     /* R13102 */
+    0x0000,     /* R13103 */
+    0x0000,     /* R13104 */
+    0x0000,     /* R13105 */
+    0x0000,     /* R13106 */
+    0x0000,     /* R13107 */
+    0x0000,     /* R13108 */
+    0x0000,     /* R13109 */
+    0x0000,     /* R13110 */
+    0x0000,     /* R13111 */
+    0x0000,     /* R13112 */
+    0x0000,     /* R13113 */
+    0x0000,     /* R13114 */
+    0x0000,     /* R13115 */
+    0x0000,     /* R13116 */
+    0x0000,     /* R13117 */
+    0x0000,     /* R13118 */
+    0x0000,     /* R13119 */
+    0x0000,     /* R13120 */
+    0x0000,     /* R13121 */
+    0x0000,     /* R13122 */
+    0x0000,     /* R13123 */
+    0x0000,     /* R13124 */
+    0x0000,     /* R13125 */
+    0x0000,     /* R13126 */
+    0x0000,     /* R13127 */
+    0x0000,     /* R13128 */
+    0x0000,     /* R13129 */
+    0x0000,     /* R13130 */
+    0x0000,     /* R13131 */
+    0x0000,     /* R13132 */
+    0x0000,     /* R13133 */
+    0x0000,     /* R13134 */
+    0x0000,     /* R13135 */
+    0x0000,     /* R13136 */
+    0x0000,     /* R13137 */
+    0x0000,     /* R13138 */
+    0x0000,     /* R13139 */
+    0x0000,     /* R13140 */
+    0x0000,     /* R13141 */
+    0x0000,     /* R13142 */
+    0x0000,     /* R13143 */
+    0x0000,     /* R13144 */
+    0x0000,     /* R13145 */
+    0x0000,     /* R13146 */
+    0x0000,     /* R13147 */
+    0x0000,     /* R13148 */
+    0x0000,     /* R13149 */
+    0x0000,     /* R13150 */
+    0x0000,     /* R13151 */
+    0x0000,     /* R13152 */
+    0x0000,     /* R13153 */
+    0x0000,     /* R13154 */
+    0x0000,     /* R13155 */
+    0x0000,     /* R13156 */
+    0x0000,     /* R13157 */
+    0x0000,     /* R13158 */
+    0x0000,     /* R13159 */
+    0x0000,     /* R13160 */
+    0x0000,     /* R13161 */
+    0x0000,     /* R13162 */
+    0x0000,     /* R13163 */
+    0x0000,     /* R13164 */
+    0x0000,     /* R13165 */
+    0x0000,     /* R13166 */
+    0x0000,     /* R13167 */
+    0x0000,     /* R13168 */
+    0x0000,     /* R13169 */
+    0x0000,     /* R13170 */
+    0x0000,     /* R13171 */
+    0x0000,     /* R13172 */
+    0x0000,     /* R13173 */
+    0x0000,     /* R13174 */
+    0x0000,     /* R13175 */
+    0x0000,     /* R13176 */
+    0x0000,     /* R13177 */
+    0x0000,     /* R13178 */
+    0x0000,     /* R13179 */
+    0x0000,     /* R13180 */
+    0x0000,     /* R13181 */
+    0x0000,     /* R13182 */
+    0x0000,     /* R13183 */
+    0x0000,     /* R13184 */
+    0x0000,     /* R13185 */
+    0x0000,     /* R13186 */
+    0x0000,     /* R13187 */
+    0x0000,     /* R13188 */
+    0x0000,     /* R13189 */
+    0x0000,     /* R13190 */
+    0x0000,     /* R13191 */
+    0x0000,     /* R13192 */
+    0x0000,     /* R13193 */
+    0x0000,     /* R13194 */
+    0x0000,     /* R13195 */
+    0x0000,     /* R13196 */
+    0x0000,     /* R13197 */
+    0x0000,     /* R13198 */
+    0x0000,     /* R13199 */
+    0x0000,     /* R13200 */
+    0x0000,     /* R13201 */
+    0x0000,     /* R13202 */
+    0x0000,     /* R13203 */
+    0x0000,     /* R13204 */
+    0x0000,     /* R13205 */
+    0x0000,     /* R13206 */
+    0x0000,     /* R13207 */
+    0x0000,     /* R13208 */
+    0x0000,     /* R13209 */
+    0x0000,     /* R13210 */
+    0x0000,     /* R13211 */
+    0x0000,     /* R13212 */
+    0x0000,     /* R13213 */
+    0x0000,     /* R13214 */
+    0x0000,     /* R13215 */
+    0x0000,     /* R13216 */
+    0x0000,     /* R13217 */
+    0x0000,     /* R13218 */
+    0x0000,     /* R13219 */
+    0x0000,     /* R13220 */
+    0x0000,     /* R13221 */
+    0x0000,     /* R13222 */
+    0x0000,     /* R13223 */
+    0x0000,     /* R13224 */
+    0x0000,     /* R13225 */
+    0x0000,     /* R13226 */
+    0x0000,     /* R13227 */
+    0x0000,     /* R13228 */
+    0x0000,     /* R13229 */
+    0x0000,     /* R13230 */
+    0x0000,     /* R13231 */
+    0x0000,     /* R13232 */
+    0x0000,     /* R13233 */
+    0x0000,     /* R13234 */
+    0x0000,     /* R13235 */
+    0x0000,     /* R13236 */
+    0x0000,     /* R13237 */
+    0x0000,     /* R13238 */
+    0x0000,     /* R13239 */
+    0x0000,     /* R13240 */
+    0x0000,     /* R13241 */
+    0x0000,     /* R13242 */
+    0x0000,     /* R13243 */
+    0x0000,     /* R13244 */
+    0x0000,     /* R13245 */
+    0x0000,     /* R13246 */
+    0x0000,     /* R13247 */
+    0x0000,     /* R13248 */
+    0x0000,     /* R13249 */
+    0x0000,     /* R13250 */
+    0x0000,     /* R13251 */
+    0x0000,     /* R13252 */
+    0x0000,     /* R13253 */
+    0x0000,     /* R13254 */
+    0x0000,     /* R13255 */
+    0x0000,     /* R13256 */
+    0x0000,     /* R13257 */
+    0x0000,     /* R13258 */
+    0x0000,     /* R13259 */
+    0x0000,     /* R13260 */
+    0x0000,     /* R13261 */
+    0x0000,     /* R13262 */
+    0x0000,     /* R13263 */
+    0x0000,     /* R13264 */
+    0x0000,     /* R13265 */
+    0x0000,     /* R13266 */
+    0x0000,     /* R13267 */
+    0x0000,     /* R13268 */
+    0x0000,     /* R13269 */
+    0x0000,     /* R13270 */
+    0x0000,     /* R13271 */
+    0x0000,     /* R13272 */
+    0x0000,     /* R13273 */
+    0x0000,     /* R13274 */
+    0x0000,     /* R13275 */
+    0x0000,     /* R13276 */
+    0x0000,     /* R13277 */
+    0x0000,     /* R13278 */
+    0x0000,     /* R13279 */
+    0x0000,     /* R13280 */
+    0x0000,     /* R13281 */
+    0x0000,     /* R13282 */
+    0x0000,     /* R13283 */
+    0x0000,     /* R13284 */
+    0x0000,     /* R13285 */
+    0x0000,     /* R13286 */
+    0x0000,     /* R13287 */
+    0x0000,     /* R13288 */
+    0x0000,     /* R13289 */
+    0x0000,     /* R13290 */
+    0x0000,     /* R13291 */
+    0x0000,     /* R13292 */
+    0x0000,     /* R13293 */
+    0x0000,     /* R13294 */
+    0x0000,     /* R13295 */
+    0x0000,     /* R13296 */
+    0x0000,     /* R13297 */
+    0x0000,     /* R13298 */
+    0x0000,     /* R13299 */
+    0x0000,     /* R13300 */
+    0x0000,     /* R13301 */
+    0x0000,     /* R13302 */
+    0x0000,     /* R13303 */
+    0x0000,     /* R13304 */
+    0x0000,     /* R13305 */
+    0x0000,     /* R13306 */
+    0x0000,     /* R13307 */
+    0x0000,     /* R13308 */
+    0x0000,     /* R13309 */
+    0x0000,     /* R13310 */
+    0x0000,     /* R13311 */
+    0x0000,     /* R13312 - DSP2 Data2 RAM 1 */
+    0x0000,     /* R13313 - DSP2 Data2 RAM 0 */
+    0x0000,     /* R13314 */
+    0x0000,     /* R13315 */
+    0x0000,     /* R13316 */
+    0x0000,     /* R13317 */
+    0x0000,     /* R13318 */
+    0x0000,     /* R13319 */
+    0x0000,     /* R13320 */
+    0x0000,     /* R13321 */
+    0x0000,     /* R13322 */
+    0x0000,     /* R13323 */
+    0x0000,     /* R13324 */
+    0x0000,     /* R13325 */
+    0x0000,     /* R13326 */
+    0x0000,     /* R13327 */
+    0x0000,     /* R13328 */
+    0x0000,     /* R13329 */
+    0x0000,     /* R13330 */
+    0x0000,     /* R13331 */
+    0x0000,     /* R13332 */
+    0x0000,     /* R13333 */
+    0x0000,     /* R13334 */
+    0x0000,     /* R13335 */
+    0x0000,     /* R13336 */
+    0x0000,     /* R13337 */
+    0x0000,     /* R13338 */
+    0x0000,     /* R13339 */
+    0x0000,     /* R13340 */
+    0x0000,     /* R13341 */
+    0x0000,     /* R13342 */
+    0x0000,     /* R13343 */
+    0x0000,     /* R13344 */
+    0x0000,     /* R13345 */
+    0x0000,     /* R13346 */
+    0x0000,     /* R13347 */
+    0x0000,     /* R13348 */
+    0x0000,     /* R13349 */
+    0x0000,     /* R13350 */
+    0x0000,     /* R13351 */
+    0x0000,     /* R13352 */
+    0x0000,     /* R13353 */
+    0x0000,     /* R13354 */
+    0x0000,     /* R13355 */
+    0x0000,     /* R13356 */
+    0x0000,     /* R13357 */
+    0x0000,     /* R13358 */
+    0x0000,     /* R13359 */
+    0x0000,     /* R13360 */
+    0x0000,     /* R13361 */
+    0x0000,     /* R13362 */
+    0x0000,     /* R13363 */
+    0x0000,     /* R13364 */
+    0x0000,     /* R13365 */
+    0x0000,     /* R13366 */
+    0x0000,     /* R13367 */
+    0x0000,     /* R13368 */
+    0x0000,     /* R13369 */
+    0x0000,     /* R13370 */
+    0x0000,     /* R13371 */
+    0x0000,     /* R13372 */
+    0x0000,     /* R13373 */
+    0x0000,     /* R13374 */
+    0x0000,     /* R13375 */
+    0x0000,     /* R13376 */
+    0x0000,     /* R13377 */
+    0x0000,     /* R13378 */
+    0x0000,     /* R13379 */
+    0x0000,     /* R13380 */
+    0x0000,     /* R13381 */
+    0x0000,     /* R13382 */
+    0x0000,     /* R13383 */
+    0x0000,     /* R13384 */
+    0x0000,     /* R13385 */
+    0x0000,     /* R13386 */
+    0x0000,     /* R13387 */
+    0x0000,     /* R13388 */
+    0x0000,     /* R13389 */
+    0x0000,     /* R13390 */
+    0x0000,     /* R13391 */
+    0x0000,     /* R13392 */
+    0x0000,     /* R13393 */
+    0x0000,     /* R13394 */
+    0x0000,     /* R13395 */
+    0x0000,     /* R13396 */
+    0x0000,     /* R13397 */
+    0x0000,     /* R13398 */
+    0x0000,     /* R13399 */
+    0x0000,     /* R13400 */
+    0x0000,     /* R13401 */
+    0x0000,     /* R13402 */
+    0x0000,     /* R13403 */
+    0x0000,     /* R13404 */
+    0x0000,     /* R13405 */
+    0x0000,     /* R13406 */
+    0x0000,     /* R13407 */
+    0x0000,     /* R13408 */
+    0x0000,     /* R13409 */
+    0x0000,     /* R13410 */
+    0x0000,     /* R13411 */
+    0x0000,     /* R13412 */
+    0x0000,     /* R13413 */
+    0x0000,     /* R13414 */
+    0x0000,     /* R13415 */
+    0x0000,     /* R13416 */
+    0x0000,     /* R13417 */
+    0x0000,     /* R13418 */
+    0x0000,     /* R13419 */
+    0x0000,     /* R13420 */
+    0x0000,     /* R13421 */
+    0x0000,     /* R13422 */
+    0x0000,     /* R13423 */
+    0x0000,     /* R13424 */
+    0x0000,     /* R13425 */
+    0x0000,     /* R13426 */
+    0x0000,     /* R13427 */
+    0x0000,     /* R13428 */
+    0x0000,     /* R13429 */
+    0x0000,     /* R13430 */
+    0x0000,     /* R13431 */
+    0x0000,     /* R13432 */
+    0x0000,     /* R13433 */
+    0x0000,     /* R13434 */
+    0x0000,     /* R13435 */
+    0x0000,     /* R13436 */
+    0x0000,     /* R13437 */
+    0x0000,     /* R13438 */
+    0x0000,     /* R13439 */
+    0x0000,     /* R13440 */
+    0x0000,     /* R13441 */
+    0x0000,     /* R13442 */
+    0x0000,     /* R13443 */
+    0x0000,     /* R13444 */
+    0x0000,     /* R13445 */
+    0x0000,     /* R13446 */
+    0x0000,     /* R13447 */
+    0x0000,     /* R13448 */
+    0x0000,     /* R13449 */
+    0x0000,     /* R13450 */
+    0x0000,     /* R13451 */
+    0x0000,     /* R13452 */
+    0x0000,     /* R13453 */
+    0x0000,     /* R13454 */
+    0x0000,     /* R13455 */
+    0x0000,     /* R13456 */
+    0x0000,     /* R13457 */
+    0x0000,     /* R13458 */
+    0x0000,     /* R13459 */
+    0x0000,     /* R13460 */
+    0x0000,     /* R13461 */
+    0x0000,     /* R13462 */
+    0x0000,     /* R13463 */
+    0x0000,     /* R13464 */
+    0x0000,     /* R13465 */
+    0x0000,     /* R13466 */
+    0x0000,     /* R13467 */
+    0x0000,     /* R13468 */
+    0x0000,     /* R13469 */
+    0x0000,     /* R13470 */
+    0x0000,     /* R13471 */
+    0x0000,     /* R13472 */
+    0x0000,     /* R13473 */
+    0x0000,     /* R13474 */
+    0x0000,     /* R13475 */
+    0x0000,     /* R13476 */
+    0x0000,     /* R13477 */
+    0x0000,     /* R13478 */
+    0x0000,     /* R13479 */
+    0x0000,     /* R13480 */
+    0x0000,     /* R13481 */
+    0x0000,     /* R13482 */
+    0x0000,     /* R13483 */
+    0x0000,     /* R13484 */
+    0x0000,     /* R13485 */
+    0x0000,     /* R13486 */
+    0x0000,     /* R13487 */
+    0x0000,     /* R13488 */
+    0x0000,     /* R13489 */
+    0x0000,     /* R13490 */
+    0x0000,     /* R13491 */
+    0x0000,     /* R13492 */
+    0x0000,     /* R13493 */
+    0x0000,     /* R13494 */
+    0x0000,     /* R13495 */
+    0x0000,     /* R13496 */
+    0x0000,     /* R13497 */
+    0x0000,     /* R13498 */
+    0x0000,     /* R13499 */
+    0x0000,     /* R13500 */
+    0x0000,     /* R13501 */
+    0x0000,     /* R13502 */
+    0x0000,     /* R13503 */
+    0x0000,     /* R13504 */
+    0x0000,     /* R13505 */
+    0x0000,     /* R13506 */
+    0x0000,     /* R13507 */
+    0x0000,     /* R13508 */
+    0x0000,     /* R13509 */
+    0x0000,     /* R13510 */
+    0x0000,     /* R13511 */
+    0x0000,     /* R13512 */
+    0x0000,     /* R13513 */
+    0x0000,     /* R13514 */
+    0x0000,     /* R13515 */
+    0x0000,     /* R13516 */
+    0x0000,     /* R13517 */
+    0x0000,     /* R13518 */
+    0x0000,     /* R13519 */
+    0x0000,     /* R13520 */
+    0x0000,     /* R13521 */
+    0x0000,     /* R13522 */
+    0x0000,     /* R13523 */
+    0x0000,     /* R13524 */
+    0x0000,     /* R13525 */
+    0x0000,     /* R13526 */
+    0x0000,     /* R13527 */
+    0x0000,     /* R13528 */
+    0x0000,     /* R13529 */
+    0x0000,     /* R13530 */
+    0x0000,     /* R13531 */
+    0x0000,     /* R13532 */
+    0x0000,     /* R13533 */
+    0x0000,     /* R13534 */
+    0x0000,     /* R13535 */
+    0x0000,     /* R13536 */
+    0x0000,     /* R13537 */
+    0x0000,     /* R13538 */
+    0x0000,     /* R13539 */
+    0x0000,     /* R13540 */
+    0x0000,     /* R13541 */
+    0x0000,     /* R13542 */
+    0x0000,     /* R13543 */
+    0x0000,     /* R13544 */
+    0x0000,     /* R13545 */
+    0x0000,     /* R13546 */
+    0x0000,     /* R13547 */
+    0x0000,     /* R13548 */
+    0x0000,     /* R13549 */
+    0x0000,     /* R13550 */
+    0x0000,     /* R13551 */
+    0x0000,     /* R13552 */
+    0x0000,     /* R13553 */
+    0x0000,     /* R13554 */
+    0x0000,     /* R13555 */
+    0x0000,     /* R13556 */
+    0x0000,     /* R13557 */
+    0x0000,     /* R13558 */
+    0x0000,     /* R13559 */
+    0x0000,     /* R13560 */
+    0x0000,     /* R13561 */
+    0x0000,     /* R13562 */
+    0x0000,     /* R13563 */
+    0x0000,     /* R13564 */
+    0x0000,     /* R13565 */
+    0x0000,     /* R13566 */
+    0x0000,     /* R13567 */
+    0x0000,     /* R13568 */
+    0x0000,     /* R13569 */
+    0x0000,     /* R13570 */
+    0x0000,     /* R13571 */
+    0x0000,     /* R13572 */
+    0x0000,     /* R13573 */
+    0x0000,     /* R13574 */
+    0x0000,     /* R13575 */
+    0x0000,     /* R13576 */
+    0x0000,     /* R13577 */
+    0x0000,     /* R13578 */
+    0x0000,     /* R13579 */
+    0x0000,     /* R13580 */
+    0x0000,     /* R13581 */
+    0x0000,     /* R13582 */
+    0x0000,     /* R13583 */
+    0x0000,     /* R13584 */
+    0x0000,     /* R13585 */
+    0x0000,     /* R13586 */
+    0x0000,     /* R13587 */
+    0x0000,     /* R13588 */
+    0x0000,     /* R13589 */
+    0x0000,     /* R13590 */
+    0x0000,     /* R13591 */
+    0x0000,     /* R13592 */
+    0x0000,     /* R13593 */
+    0x0000,     /* R13594 */
+    0x0000,     /* R13595 */
+    0x0000,     /* R13596 */
+    0x0000,     /* R13597 */
+    0x0000,     /* R13598 */
+    0x0000,     /* R13599 */
+    0x0000,     /* R13600 */
+    0x0000,     /* R13601 */
+    0x0000,     /* R13602 */
+    0x0000,     /* R13603 */
+    0x0000,     /* R13604 */
+    0x0000,     /* R13605 */
+    0x0000,     /* R13606 */
+    0x0000,     /* R13607 */
+    0x0000,     /* R13608 */
+    0x0000,     /* R13609 */
+    0x0000,     /* R13610 */
+    0x0000,     /* R13611 */
+    0x0000,     /* R13612 */
+    0x0000,     /* R13613 */
+    0x0000,     /* R13614 */
+    0x0000,     /* R13615 */
+    0x0000,     /* R13616 */
+    0x0000,     /* R13617 */
+    0x0000,     /* R13618 */
+    0x0000,     /* R13619 */
+    0x0000,     /* R13620 */
+    0x0000,     /* R13621 */
+    0x0000,     /* R13622 */
+    0x0000,     /* R13623 */
+    0x0000,     /* R13624 */
+    0x0000,     /* R13625 */
+    0x0000,     /* R13626 */
+    0x0000,     /* R13627 */
+    0x0000,     /* R13628 */
+    0x0000,     /* R13629 */
+    0x0000,     /* R13630 */
+    0x0000,     /* R13631 */
+    0x0000,     /* R13632 */
+    0x0000,     /* R13633 */
+    0x0000,     /* R13634 */
+    0x0000,     /* R13635 */
+    0x0000,     /* R13636 */
+    0x0000,     /* R13637 */
+    0x0000,     /* R13638 */
+    0x0000,     /* R13639 */
+    0x0000,     /* R13640 */
+    0x0000,     /* R13641 */
+    0x0000,     /* R13642 */
+    0x0000,     /* R13643 */
+    0x0000,     /* R13644 */
+    0x0000,     /* R13645 */
+    0x0000,     /* R13646 */
+    0x0000,     /* R13647 */
+    0x0000,     /* R13648 */
+    0x0000,     /* R13649 */
+    0x0000,     /* R13650 */
+    0x0000,     /* R13651 */
+    0x0000,     /* R13652 */
+    0x0000,     /* R13653 */
+    0x0000,     /* R13654 */
+    0x0000,     /* R13655 */
+    0x0000,     /* R13656 */
+    0x0000,     /* R13657 */
+    0x0000,     /* R13658 */
+    0x0000,     /* R13659 */
+    0x0000,     /* R13660 */
+    0x0000,     /* R13661 */
+    0x0000,     /* R13662 */
+    0x0000,     /* R13663 */
+    0x0000,     /* R13664 */
+    0x0000,     /* R13665 */
+    0x0000,     /* R13666 */
+    0x0000,     /* R13667 */
+    0x0000,     /* R13668 */
+    0x0000,     /* R13669 */
+    0x0000,     /* R13670 */
+    0x0000,     /* R13671 */
+    0x0000,     /* R13672 */
+    0x0000,     /* R13673 */
+    0x0000,     /* R13674 */
+    0x0000,     /* R13675 */
+    0x0000,     /* R13676 */
+    0x0000,     /* R13677 */
+    0x0000,     /* R13678 */
+    0x0000,     /* R13679 */
+    0x0000,     /* R13680 */
+    0x0000,     /* R13681 */
+    0x0000,     /* R13682 */
+    0x0000,     /* R13683 */
+    0x0000,     /* R13684 */
+    0x0000,     /* R13685 */
+    0x0000,     /* R13686 */
+    0x0000,     /* R13687 */
+    0x0000,     /* R13688 */
+    0x0000,     /* R13689 */
+    0x0000,     /* R13690 */
+    0x0000,     /* R13691 */
+    0x0000,     /* R13692 */
+    0x0000,     /* R13693 */
+    0x0000,     /* R13694 */
+    0x0000,     /* R13695 */
+    0x0000,     /* R13696 */
+    0x0000,     /* R13697 */
+    0x0000,     /* R13698 */
+    0x0000,     /* R13699 */
+    0x0000,     /* R13700 */
+    0x0000,     /* R13701 */
+    0x0000,     /* R13702 */
+    0x0000,     /* R13703 */
+    0x0000,     /* R13704 */
+    0x0000,     /* R13705 */
+    0x0000,     /* R13706 */
+    0x0000,     /* R13707 */
+    0x0000,     /* R13708 */
+    0x0000,     /* R13709 */
+    0x0000,     /* R13710 */
+    0x0000,     /* R13711 */
+    0x0000,     /* R13712 */
+    0x0000,     /* R13713 */
+    0x0000,     /* R13714 */
+    0x0000,     /* R13715 */
+    0x0000,     /* R13716 */
+    0x0000,     /* R13717 */
+    0x0000,     /* R13718 */
+    0x0000,     /* R13719 */
+    0x0000,     /* R13720 */
+    0x0000,     /* R13721 */
+    0x0000,     /* R13722 */
+    0x0000,     /* R13723 */
+    0x0000,     /* R13724 */
+    0x0000,     /* R13725 */
+    0x0000,     /* R13726 */
+    0x0000,     /* R13727 */
+    0x0000,     /* R13728 */
+    0x0000,     /* R13729 */
+    0x0000,     /* R13730 */
+    0x0000,     /* R13731 */
+    0x0000,     /* R13732 */
+    0x0000,     /* R13733 */
+    0x0000,     /* R13734 */
+    0x0000,     /* R13735 */
+    0x0000,     /* R13736 */
+    0x0000,     /* R13737 */
+    0x0000,     /* R13738 */
+    0x0000,     /* R13739 */
+    0x0000,     /* R13740 */
+    0x0000,     /* R13741 */
+    0x0000,     /* R13742 */
+    0x0000,     /* R13743 */
+    0x0000,     /* R13744 */
+    0x0000,     /* R13745 */
+    0x0000,     /* R13746 */
+    0x0000,     /* R13747 */
+    0x0000,     /* R13748 */
+    0x0000,     /* R13749 */
+    0x0000,     /* R13750 */
+    0x0000,     /* R13751 */
+    0x0000,     /* R13752 */
+    0x0000,     /* R13753 */
+    0x0000,     /* R13754 */
+    0x0000,     /* R13755 */
+    0x0000,     /* R13756 */
+    0x0000,     /* R13757 */
+    0x0000,     /* R13758 */
+    0x0000,     /* R13759 */
+    0x0000,     /* R13760 */
+    0x0000,     /* R13761 */
+    0x0000,     /* R13762 */
+    0x0000,     /* R13763 */
+    0x0000,     /* R13764 */
+    0x0000,     /* R13765 */
+    0x0000,     /* R13766 */
+    0x0000,     /* R13767 */
+    0x0000,     /* R13768 */
+    0x0000,     /* R13769 */
+    0x0000,     /* R13770 */
+    0x0000,     /* R13771 */
+    0x0000,     /* R13772 */
+    0x0000,     /* R13773 */
+    0x0000,     /* R13774 */
+    0x0000,     /* R13775 */
+    0x0000,     /* R13776 */
+    0x0000,     /* R13777 */
+    0x0000,     /* R13778 */
+    0x0000,     /* R13779 */
+    0x0000,     /* R13780 */
+    0x0000,     /* R13781 */
+    0x0000,     /* R13782 */
+    0x0000,     /* R13783 */
+    0x0000,     /* R13784 */
+    0x0000,     /* R13785 */
+    0x0000,     /* R13786 */
+    0x0000,     /* R13787 */
+    0x0000,     /* R13788 */
+    0x0000,     /* R13789 */
+    0x0000,     /* R13790 */
+    0x0000,     /* R13791 */
+    0x0000,     /* R13792 */
+    0x0000,     /* R13793 */
+    0x0000,     /* R13794 */
+    0x0000,     /* R13795 */
+    0x0000,     /* R13796 */
+    0x0000,     /* R13797 */
+    0x0000,     /* R13798 */
+    0x0000,     /* R13799 */
+    0x0000,     /* R13800 */
+    0x0000,     /* R13801 */
+    0x0000,     /* R13802 */
+    0x0000,     /* R13803 */
+    0x0000,     /* R13804 */
+    0x0000,     /* R13805 */
+    0x0000,     /* R13806 */
+    0x0000,     /* R13807 */
+    0x0000,     /* R13808 */
+    0x0000,     /* R13809 */
+    0x0000,     /* R13810 */
+    0x0000,     /* R13811 */
+    0x0000,     /* R13812 */
+    0x0000,     /* R13813 */
+    0x0000,     /* R13814 */
+    0x0000,     /* R13815 */
+    0x0000,     /* R13816 */
+    0x0000,     /* R13817 */
+    0x0000,     /* R13818 */
+    0x0000,     /* R13819 */
+    0x0000,     /* R13820 */
+    0x0000,     /* R13821 */
+    0x0000,     /* R13822 */
+    0x0000,     /* R13823 */
+    0x0000,     /* R13824 */
+    0x0000,     /* R13825 */
+    0x0000,     /* R13826 */
+    0x0000,     /* R13827 */
+    0x0000,     /* R13828 */
+    0x0000,     /* R13829 */
+    0x0000,     /* R13830 */
+    0x0000,     /* R13831 */
+    0x0000,     /* R13832 */
+    0x0000,     /* R13833 */
+    0x0000,     /* R13834 */
+    0x0000,     /* R13835 */
+    0x0000,     /* R13836 */
+    0x0000,     /* R13837 */
+    0x0000,     /* R13838 */
+    0x0000,     /* R13839 */
+    0x0000,     /* R13840 */
+    0x0000,     /* R13841 */
+    0x0000,     /* R13842 */
+    0x0000,     /* R13843 */
+    0x0000,     /* R13844 */
+    0x0000,     /* R13845 */
+    0x0000,     /* R13846 */
+    0x0000,     /* R13847 */
+    0x0000,     /* R13848 */
+    0x0000,     /* R13849 */
+    0x0000,     /* R13850 */
+    0x0000,     /* R13851 */
+    0x0000,     /* R13852 */
+    0x0000,     /* R13853 */
+    0x0000,     /* R13854 */
+    0x0000,     /* R13855 */
+    0x0000,     /* R13856 */
+    0x0000,     /* R13857 */
+    0x0000,     /* R13858 */
+    0x0000,     /* R13859 */
+    0x0000,     /* R13860 */
+    0x0000,     /* R13861 */
+    0x0000,     /* R13862 */
+    0x0000,     /* R13863 */
+    0x0000,     /* R13864 */
+    0x0000,     /* R13865 */
+    0x0000,     /* R13866 */
+    0x0000,     /* R13867 */
+    0x0000,     /* R13868 */
+    0x0000,     /* R13869 */
+    0x0000,     /* R13870 */
+    0x0000,     /* R13871 */
+    0x0000,     /* R13872 */
+    0x0000,     /* R13873 */
+    0x0000,     /* R13874 */
+    0x0000,     /* R13875 */
+    0x0000,     /* R13876 */
+    0x0000,     /* R13877 */
+    0x0000,     /* R13878 */
+    0x0000,     /* R13879 */
+    0x0000,     /* R13880 */
+    0x0000,     /* R13881 */
+    0x0000,     /* R13882 */
+    0x0000,     /* R13883 */
+    0x0000,     /* R13884 */
+    0x0000,     /* R13885 */
+    0x0000,     /* R13886 */
+    0x0000,     /* R13887 */
+    0x0000,     /* R13888 */
+    0x0000,     /* R13889 */
+    0x0000,     /* R13890 */
+    0x0000,     /* R13891 */
+    0x0000,     /* R13892 */
+    0x0000,     /* R13893 */
+    0x0000,     /* R13894 */
+    0x0000,     /* R13895 */
+    0x0000,     /* R13896 */
+    0x0000,     /* R13897 */
+    0x0000,     /* R13898 */
+    0x0000,     /* R13899 */
+    0x0000,     /* R13900 */
+    0x0000,     /* R13901 */
+    0x0000,     /* R13902 */
+    0x0000,     /* R13903 */
+    0x0000,     /* R13904 */
+    0x0000,     /* R13905 */
+    0x0000,     /* R13906 */
+    0x0000,     /* R13907 */
+    0x0000,     /* R13908 */
+    0x0000,     /* R13909 */
+    0x0000,     /* R13910 */
+    0x0000,     /* R13911 */
+    0x0000,     /* R13912 */
+    0x0000,     /* R13913 */
+    0x0000,     /* R13914 */
+    0x0000,     /* R13915 */
+    0x0000,     /* R13916 */
+    0x0000,     /* R13917 */
+    0x0000,     /* R13918 */
+    0x0000,     /* R13919 */
+    0x0000,     /* R13920 */
+    0x0000,     /* R13921 */
+    0x0000,     /* R13922 */
+    0x0000,     /* R13923 */
+    0x0000,     /* R13924 */
+    0x0000,     /* R13925 */
+    0x0000,     /* R13926 */
+    0x0000,     /* R13927 */
+    0x0000,     /* R13928 */
+    0x0000,     /* R13929 */
+    0x0000,     /* R13930 */
+    0x0000,     /* R13931 */
+    0x0000,     /* R13932 */
+    0x0000,     /* R13933 */
+    0x0000,     /* R13934 */
+    0x0000,     /* R13935 */
+    0x0000,     /* R13936 */
+    0x0000,     /* R13937 */
+    0x0000,     /* R13938 */
+    0x0000,     /* R13939 */
+    0x0000,     /* R13940 */
+    0x0000,     /* R13941 */
+    0x0000,     /* R13942 */
+    0x0000,     /* R13943 */
+    0x0000,     /* R13944 */
+    0x0000,     /* R13945 */
+    0x0000,     /* R13946 */
+    0x0000,     /* R13947 */
+    0x0000,     /* R13948 */
+    0x0000,     /* R13949 */
+    0x0000,     /* R13950 */
+    0x0000,     /* R13951 */
+    0x0000,     /* R13952 */
+    0x0000,     /* R13953 */
+    0x0000,     /* R13954 */
+    0x0000,     /* R13955 */
+    0x0000,     /* R13956 */
+    0x0000,     /* R13957 */
+    0x0000,     /* R13958 */
+    0x0000,     /* R13959 */
+    0x0000,     /* R13960 */
+    0x0000,     /* R13961 */
+    0x0000,     /* R13962 */
+    0x0000,     /* R13963 */
+    0x0000,     /* R13964 */
+    0x0000,     /* R13965 */
+    0x0000,     /* R13966 */
+    0x0000,     /* R13967 */
+    0x0000,     /* R13968 */
+    0x0000,     /* R13969 */
+    0x0000,     /* R13970 */
+    0x0000,     /* R13971 */
+    0x0000,     /* R13972 */
+    0x0000,     /* R13973 */
+    0x0000,     /* R13974 */
+    0x0000,     /* R13975 */
+    0x0000,     /* R13976 */
+    0x0000,     /* R13977 */
+    0x0000,     /* R13978 */
+    0x0000,     /* R13979 */
+    0x0000,     /* R13980 */
+    0x0000,     /* R13981 */
+    0x0000,     /* R13982 */
+    0x0000,     /* R13983 */
+    0x0000,     /* R13984 */
+    0x0000,     /* R13985 */
+    0x0000,     /* R13986 */
+    0x0000,     /* R13987 */
+    0x0000,     /* R13988 */
+    0x0000,     /* R13989 */
+    0x0000,     /* R13990 */
+    0x0000,     /* R13991 */
+    0x0000,     /* R13992 */
+    0x0000,     /* R13993 */
+    0x0000,     /* R13994 */
+    0x0000,     /* R13995 */
+    0x0000,     /* R13996 */
+    0x0000,     /* R13997 */
+    0x0000,     /* R13998 */
+    0x0000,     /* R13999 */
+    0x0000,     /* R14000 */
+    0x0000,     /* R14001 */
+    0x0000,     /* R14002 */
+    0x0000,     /* R14003 */
+    0x0000,     /* R14004 */
+    0x0000,     /* R14005 */
+    0x0000,     /* R14006 */
+    0x0000,     /* R14007 */
+    0x0000,     /* R14008 */
+    0x0000,     /* R14009 */
+    0x0000,     /* R14010 */
+    0x0000,     /* R14011 */
+    0x0000,     /* R14012 */
+    0x0000,     /* R14013 */
+    0x0000,     /* R14014 */
+    0x0000,     /* R14015 */
+    0x0000,     /* R14016 */
+    0x0000,     /* R14017 */
+    0x0000,     /* R14018 */
+    0x0000,     /* R14019 */
+    0x0000,     /* R14020 */
+    0x0000,     /* R14021 */
+    0x0000,     /* R14022 */
+    0x0000,     /* R14023 */
+    0x0000,     /* R14024 */
+    0x0000,     /* R14025 */
+    0x0000,     /* R14026 */
+    0x0000,     /* R14027 */
+    0x0000,     /* R14028 */
+    0x0000,     /* R14029 */
+    0x0000,     /* R14030 */
+    0x0000,     /* R14031 */
+    0x0000,     /* R14032 */
+    0x0000,     /* R14033 */
+    0x0000,     /* R14034 */
+    0x0000,     /* R14035 */
+    0x0000,     /* R14036 */
+    0x0000,     /* R14037 */
+    0x0000,     /* R14038 */
+    0x0000,     /* R14039 */
+    0x0000,     /* R14040 */
+    0x0000,     /* R14041 */
+    0x0000,     /* R14042 */
+    0x0000,     /* R14043 */
+    0x0000,     /* R14044 */
+    0x0000,     /* R14045 */
+    0x0000,     /* R14046 */
+    0x0000,     /* R14047 */
+    0x0000,     /* R14048 */
+    0x0000,     /* R14049 */
+    0x0000,     /* R14050 */
+    0x0000,     /* R14051 */
+    0x0000,     /* R14052 */
+    0x0000,     /* R14053 */
+    0x0000,     /* R14054 */
+    0x0000,     /* R14055 */
+    0x0000,     /* R14056 */
+    0x0000,     /* R14057 */
+    0x0000,     /* R14058 */
+    0x0000,     /* R14059 */
+    0x0000,     /* R14060 */
+    0x0000,     /* R14061 */
+    0x0000,     /* R14062 */
+    0x0000,     /* R14063 */
+    0x0000,     /* R14064 */
+    0x0000,     /* R14065 */
+    0x0000,     /* R14066 */
+    0x0000,     /* R14067 */
+    0x0000,     /* R14068 */
+    0x0000,     /* R14069 */
+    0x0000,     /* R14070 */
+    0x0000,     /* R14071 */
+    0x0000,     /* R14072 */
+    0x0000,     /* R14073 */
+    0x0000,     /* R14074 */
+    0x0000,     /* R14075 */
+    0x0000,     /* R14076 */
+    0x0000,     /* R14077 */
+    0x0000,     /* R14078 */
+    0x0000,     /* R14079 */
+    0x0000,     /* R14080 */
+    0x0000,     /* R14081 */
+    0x0000,     /* R14082 */
+    0x0000,     /* R14083 */
+    0x0000,     /* R14084 */
+    0x0000,     /* R14085 */
+    0x0000,     /* R14086 */
+    0x0000,     /* R14087 */
+    0x0000,     /* R14088 */
+    0x0000,     /* R14089 */
+    0x0000,     /* R14090 */
+    0x0000,     /* R14091 */
+    0x0000,     /* R14092 */
+    0x0000,     /* R14093 */
+    0x0000,     /* R14094 */
+    0x0000,     /* R14095 */
+    0x0000,     /* R14096 */
+    0x0000,     /* R14097 */
+    0x0000,     /* R14098 */
+    0x0000,     /* R14099 */
+    0x0000,     /* R14100 */
+    0x0000,     /* R14101 */
+    0x0000,     /* R14102 */
+    0x0000,     /* R14103 */
+    0x0000,     /* R14104 */
+    0x0000,     /* R14105 */
+    0x0000,     /* R14106 */
+    0x0000,     /* R14107 */
+    0x0000,     /* R14108 */
+    0x0000,     /* R14109 */
+    0x0000,     /* R14110 */
+    0x0000,     /* R14111 */
+    0x0000,     /* R14112 */
+    0x0000,     /* R14113 */
+    0x0000,     /* R14114 */
+    0x0000,     /* R14115 */
+    0x0000,     /* R14116 */
+    0x0000,     /* R14117 */
+    0x0000,     /* R14118 */
+    0x0000,     /* R14119 */
+    0x0000,     /* R14120 */
+    0x0000,     /* R14121 */
+    0x0000,     /* R14122 */
+    0x0000,     /* R14123 */
+    0x0000,     /* R14124 */
+    0x0000,     /* R14125 */
+    0x0000,     /* R14126 */
+    0x0000,     /* R14127 */
+    0x0000,     /* R14128 */
+    0x0000,     /* R14129 */
+    0x0000,     /* R14130 */
+    0x0000,     /* R14131 */
+    0x0000,     /* R14132 */
+    0x0000,     /* R14133 */
+    0x0000,     /* R14134 */
+    0x0000,     /* R14135 */
+    0x0000,     /* R14136 */
+    0x0000,     /* R14137 */
+    0x0000,     /* R14138 */
+    0x0000,     /* R14139 */
+    0x0000,     /* R14140 */
+    0x0000,     /* R14141 */
+    0x0000,     /* R14142 */
+    0x0000,     /* R14143 */
+    0x0000,     /* R14144 */
+    0x0000,     /* R14145 */
+    0x0000,     /* R14146 */
+    0x0000,     /* R14147 */
+    0x0000,     /* R14148 */
+    0x0000,     /* R14149 */
+    0x0000,     /* R14150 */
+    0x0000,     /* R14151 */
+    0x0000,     /* R14152 */
+    0x0000,     /* R14153 */
+    0x0000,     /* R14154 */
+    0x0000,     /* R14155 */
+    0x0000,     /* R14156 */
+    0x0000,     /* R14157 */
+    0x0000,     /* R14158 */
+    0x0000,     /* R14159 */
+    0x0000,     /* R14160 */
+    0x0000,     /* R14161 */
+    0x0000,     /* R14162 */
+    0x0000,     /* R14163 */
+    0x0000,     /* R14164 */
+    0x0000,     /* R14165 */
+    0x0000,     /* R14166 */
+    0x0000,     /* R14167 */
+    0x0000,     /* R14168 */
+    0x0000,     /* R14169 */
+    0x0000,     /* R14170 */
+    0x0000,     /* R14171 */
+    0x0000,     /* R14172 */
+    0x0000,     /* R14173 */
+    0x0000,     /* R14174 */
+    0x0000,     /* R14175 */
+    0x0000,     /* R14176 */
+    0x0000,     /* R14177 */
+    0x0000,     /* R14178 */
+    0x0000,     /* R14179 */
+    0x0000,     /* R14180 */
+    0x0000,     /* R14181 */
+    0x0000,     /* R14182 */
+    0x0000,     /* R14183 */
+    0x0000,     /* R14184 */
+    0x0000,     /* R14185 */
+    0x0000,     /* R14186 */
+    0x0000,     /* R14187 */
+    0x0000,     /* R14188 */
+    0x0000,     /* R14189 */
+    0x0000,     /* R14190 */
+    0x0000,     /* R14191 */
+    0x0000,     /* R14192 */
+    0x0000,     /* R14193 */
+    0x0000,     /* R14194 */
+    0x0000,     /* R14195 */
+    0x0000,     /* R14196 */
+    0x0000,     /* R14197 */
+    0x0000,     /* R14198 */
+    0x0000,     /* R14199 */
+    0x0000,     /* R14200 */
+    0x0000,     /* R14201 */
+    0x0000,     /* R14202 */
+    0x0000,     /* R14203 */
+    0x0000,     /* R14204 */
+    0x0000,     /* R14205 */
+    0x0000,     /* R14206 */
+    0x0000,     /* R14207 */
+    0x0000,     /* R14208 */
+    0x0000,     /* R14209 */
+    0x0000,     /* R14210 */
+    0x0000,     /* R14211 */
+    0x0000,     /* R14212 */
+    0x0000,     /* R14213 */
+    0x0000,     /* R14214 */
+    0x0000,     /* R14215 */
+    0x0000,     /* R14216 */
+    0x0000,     /* R14217 */
+    0x0000,     /* R14218 */
+    0x0000,     /* R14219 */
+    0x0000,     /* R14220 */
+    0x0000,     /* R14221 */
+    0x0000,     /* R14222 */
+    0x0000,     /* R14223 */
+    0x0000,     /* R14224 */
+    0x0000,     /* R14225 */
+    0x0000,     /* R14226 */
+    0x0000,     /* R14227 */
+    0x0000,     /* R14228 */
+    0x0000,     /* R14229 */
+    0x0000,     /* R14230 */
+    0x0000,     /* R14231 */
+    0x0000,     /* R14232 */
+    0x0000,     /* R14233 */
+    0x0000,     /* R14234 */
+    0x0000,     /* R14235 */
+    0x0000,     /* R14236 */
+    0x0000,     /* R14237 */
+    0x0000,     /* R14238 */
+    0x0000,     /* R14239 */
+    0x0000,     /* R14240 */
+    0x0000,     /* R14241 */
+    0x0000,     /* R14242 */
+    0x0000,     /* R14243 */
+    0x0000,     /* R14244 */
+    0x0000,     /* R14245 */
+    0x0000,     /* R14246 */
+    0x0000,     /* R14247 */
+    0x0000,     /* R14248 */
+    0x0000,     /* R14249 */
+    0x0000,     /* R14250 */
+    0x0000,     /* R14251 */
+    0x0000,     /* R14252 */
+    0x0000,     /* R14253 */
+    0x0000,     /* R14254 */
+    0x0000,     /* R14255 */
+    0x0000,     /* R14256 */
+    0x0000,     /* R14257 */
+    0x0000,     /* R14258 */
+    0x0000,     /* R14259 */
+    0x0000,     /* R14260 */
+    0x0000,     /* R14261 */
+    0x0000,     /* R14262 */
+    0x0000,     /* R14263 */
+    0x0000,     /* R14264 */
+    0x0000,     /* R14265 */
+    0x0000,     /* R14266 */
+    0x0000,     /* R14267 */
+    0x0000,     /* R14268 */
+    0x0000,     /* R14269 */
+    0x0000,     /* R14270 */
+    0x0000,     /* R14271 */
+    0x0000,     /* R14272 */
+    0x0000,     /* R14273 */
+    0x0000,     /* R14274 */
+    0x0000,     /* R14275 */
+    0x0000,     /* R14276 */
+    0x0000,     /* R14277 */
+    0x0000,     /* R14278 */
+    0x0000,     /* R14279 */
+    0x0000,     /* R14280 */
+    0x0000,     /* R14281 */
+    0x0000,     /* R14282 */
+    0x0000,     /* R14283 */
+    0x0000,     /* R14284 */
+    0x0000,     /* R14285 */
+    0x0000,     /* R14286 */
+    0x0000,     /* R14287 */
+    0x0000,     /* R14288 */
+    0x0000,     /* R14289 */
+    0x0000,     /* R14290 */
+    0x0000,     /* R14291 */
+    0x0000,     /* R14292 */
+    0x0000,     /* R14293 */
+    0x0000,     /* R14294 */
+    0x0000,     /* R14295 */
+    0x0000,     /* R14296 */
+    0x0000,     /* R14297 */
+    0x0000,     /* R14298 */
+    0x0000,     /* R14299 */
+    0x0000,     /* R14300 */
+    0x0000,     /* R14301 */
+    0x0000,     /* R14302 */
+    0x0000,     /* R14303 */
+    0x0000,     /* R14304 */
+    0x0000,     /* R14305 */
+    0x0000,     /* R14306 */
+    0x0000,     /* R14307 */
+    0x0000,     /* R14308 */
+    0x0000,     /* R14309 */
+    0x0000,     /* R14310 */
+    0x0000,     /* R14311 */
+    0x0000,     /* R14312 */
+    0x0000,     /* R14313 */
+    0x0000,     /* R14314 */
+    0x0000,     /* R14315 */
+    0x0000,     /* R14316 */
+    0x0000,     /* R14317 */
+    0x0000,     /* R14318 */
+    0x0000,     /* R14319 */
+    0x0000,     /* R14320 */
+    0x0000,     /* R14321 */
+    0x0000,     /* R14322 */
+    0x0000,     /* R14323 */
+    0x0000,     /* R14324 */
+    0x0000,     /* R14325 */
+    0x0000,     /* R14326 */
+    0x0000,     /* R14327 */
+    0x0000,     /* R14328 */
+    0x0000,     /* R14329 */
+    0x0000,     /* R14330 */
+    0x0000,     /* R14331 */
+    0x0000,     /* R14332 */
+    0x0000,     /* R14333 */
+    0x0000,     /* R14334 */
+    0x0000,     /* R14335 */
+    0x0000,     /* R14336 - DSP2 Data3 RAM 1 */
+    0x0000,     /* R14337 - DSP2 Data3 RAM 0 */
+    0x0000,     /* R14338 */
+    0x0000,     /* R14339 */
+    0x0000,     /* R14340 */
+    0x0000,     /* R14341 */
+    0x0000,     /* R14342 */
+    0x0000,     /* R14343 */
+    0x0000,     /* R14344 */
+    0x0000,     /* R14345 */
+    0x0000,     /* R14346 */
+    0x0000,     /* R14347 */
+    0x0000,     /* R14348 */
+    0x0000,     /* R14349 */
+    0x0000,     /* R14350 */
+    0x0000,     /* R14351 */
+    0x0000,     /* R14352 */
+    0x0000,     /* R14353 */
+    0x0000,     /* R14354 */
+    0x0000,     /* R14355 */
+    0x0000,     /* R14356 */
+    0x0000,     /* R14357 */
+    0x0000,     /* R14358 */
+    0x0000,     /* R14359 */
+    0x0000,     /* R14360 */
+    0x0000,     /* R14361 */
+    0x0000,     /* R14362 */
+    0x0000,     /* R14363 */
+    0x0000,     /* R14364 */
+    0x0000,     /* R14365 */
+    0x0000,     /* R14366 */
+    0x0000,     /* R14367 */
+    0x0000,     /* R14368 */
+    0x0000,     /* R14369 */
+    0x0000,     /* R14370 */
+    0x0000,     /* R14371 */
+    0x0000,     /* R14372 */
+    0x0000,     /* R14373 */
+    0x0000,     /* R14374 */
+    0x0000,     /* R14375 */
+    0x0000,     /* R14376 */
+    0x0000,     /* R14377 */
+    0x0000,     /* R14378 */
+    0x0000,     /* R14379 */
+    0x0000,     /* R14380 */
+    0x0000,     /* R14381 */
+    0x0000,     /* R14382 */
+    0x0000,     /* R14383 */
+    0x0000,     /* R14384 */
+    0x0000,     /* R14385 */
+    0x0000,     /* R14386 */
+    0x0000,     /* R14387 */
+    0x0000,     /* R14388 */
+    0x0000,     /* R14389 */
+    0x0000,     /* R14390 */
+    0x0000,     /* R14391 */
+    0x0000,     /* R14392 */
+    0x0000,     /* R14393 */
+    0x0000,     /* R14394 */
+    0x0000,     /* R14395 */
+    0x0000,     /* R14396 */
+    0x0000,     /* R14397 */
+    0x0000,     /* R14398 */
+    0x0000,     /* R14399 */
+    0x0000,     /* R14400 */
+    0x0000,     /* R14401 */
+    0x0000,     /* R14402 */
+    0x0000,     /* R14403 */
+    0x0000,     /* R14404 */
+    0x0000,     /* R14405 */
+    0x0000,     /* R14406 */
+    0x0000,     /* R14407 */
+    0x0000,     /* R14408 */
+    0x0000,     /* R14409 */
+    0x0000,     /* R14410 */
+    0x0000,     /* R14411 */
+    0x0000,     /* R14412 */
+    0x0000,     /* R14413 */
+    0x0000,     /* R14414 */
+    0x0000,     /* R14415 */
+    0x0000,     /* R14416 */
+    0x0000,     /* R14417 */
+    0x0000,     /* R14418 */
+    0x0000,     /* R14419 */
+    0x0000,     /* R14420 */
+    0x0000,     /* R14421 */
+    0x0000,     /* R14422 */
+    0x0000,     /* R14423 */
+    0x0000,     /* R14424 */
+    0x0000,     /* R14425 */
+    0x0000,     /* R14426 */
+    0x0000,     /* R14427 */
+    0x0000,     /* R14428 */
+    0x0000,     /* R14429 */
+    0x0000,     /* R14430 */
+    0x0000,     /* R14431 */
+    0x0000,     /* R14432 */
+    0x0000,     /* R14433 */
+    0x0000,     /* R14434 */
+    0x0000,     /* R14435 */
+    0x0000,     /* R14436 */
+    0x0000,     /* R14437 */
+    0x0000,     /* R14438 */
+    0x0000,     /* R14439 */
+    0x0000,     /* R14440 */
+    0x0000,     /* R14441 */
+    0x0000,     /* R14442 */
+    0x0000,     /* R14443 */
+    0x0000,     /* R14444 */
+    0x0000,     /* R14445 */
+    0x0000,     /* R14446 */
+    0x0000,     /* R14447 */
+    0x0000,     /* R14448 */
+    0x0000,     /* R14449 */
+    0x0000,     /* R14450 */
+    0x0000,     /* R14451 */
+    0x0000,     /* R14452 */
+    0x0000,     /* R14453 */
+    0x0000,     /* R14454 */
+    0x0000,     /* R14455 */
+    0x0000,     /* R14456 */
+    0x0000,     /* R14457 */
+    0x0000,     /* R14458 */
+    0x0000,     /* R14459 */
+    0x0000,     /* R14460 */
+    0x0000,     /* R14461 */
+    0x0000,     /* R14462 */
+    0x0000,     /* R14463 */
+    0x0000,     /* R14464 */
+    0x0000,     /* R14465 */
+    0x0000,     /* R14466 */
+    0x0000,     /* R14467 */
+    0x0000,     /* R14468 */
+    0x0000,     /* R14469 */
+    0x0000,     /* R14470 */
+    0x0000,     /* R14471 */
+    0x0000,     /* R14472 */
+    0x0000,     /* R14473 */
+    0x0000,     /* R14474 */
+    0x0000,     /* R14475 */
+    0x0000,     /* R14476 */
+    0x0000,     /* R14477 */
+    0x0000,     /* R14478 */
+    0x0000,     /* R14479 */
+    0x0000,     /* R14480 */
+    0x0000,     /* R14481 */
+    0x0000,     /* R14482 */
+    0x0000,     /* R14483 */
+    0x0000,     /* R14484 */
+    0x0000,     /* R14485 */
+    0x0000,     /* R14486 */
+    0x0000,     /* R14487 */
+    0x0000,     /* R14488 */
+    0x0000,     /* R14489 */
+    0x0000,     /* R14490 */
+    0x0000,     /* R14491 */
+    0x0000,     /* R14492 */
+    0x0000,     /* R14493 */
+    0x0000,     /* R14494 */
+    0x0000,     /* R14495 */
+    0x0000,     /* R14496 */
+    0x0000,     /* R14497 */
+    0x0000,     /* R14498 */
+    0x0000,     /* R14499 */
+    0x0000,     /* R14500 */
+    0x0000,     /* R14501 */
+    0x0000,     /* R14502 */
+    0x0000,     /* R14503 */
+    0x0000,     /* R14504 */
+    0x0000,     /* R14505 */
+    0x0000,     /* R14506 */
+    0x0000,     /* R14507 */
+    0x0000,     /* R14508 */
+    0x0000,     /* R14509 */
+    0x0000,     /* R14510 */
+    0x0000,     /* R14511 */
+    0x0000,     /* R14512 */
+    0x0000,     /* R14513 */
+    0x0000,     /* R14514 */
+    0x0000,     /* R14515 */
+    0x0000,     /* R14516 */
+    0x0000,     /* R14517 */
+    0x0000,     /* R14518 */
+    0x0000,     /* R14519 */
+    0x0000,     /* R14520 */
+    0x0000,     /* R14521 */
+    0x0000,     /* R14522 */
+    0x0000,     /* R14523 */
+    0x0000,     /* R14524 */
+    0x0000,     /* R14525 */
+    0x0000,     /* R14526 */
+    0x0000,     /* R14527 */
+    0x0000,     /* R14528 */
+    0x0000,     /* R14529 */
+    0x0000,     /* R14530 */
+    0x0000,     /* R14531 */
+    0x0000,     /* R14532 */
+    0x0000,     /* R14533 */
+    0x0000,     /* R14534 */
+    0x0000,     /* R14535 */
+    0x0000,     /* R14536 */
+    0x0000,     /* R14537 */
+    0x0000,     /* R14538 */
+    0x0000,     /* R14539 */
+    0x0000,     /* R14540 */
+    0x0000,     /* R14541 */
+    0x0000,     /* R14542 */
+    0x0000,     /* R14543 */
+    0x0000,     /* R14544 */
+    0x0000,     /* R14545 */
+    0x0000,     /* R14546 */
+    0x0000,     /* R14547 */
+    0x0000,     /* R14548 */
+    0x0000,     /* R14549 */
+    0x0000,     /* R14550 */
+    0x0000,     /* R14551 */
+    0x0000,     /* R14552 */
+    0x0000,     /* R14553 */
+    0x0000,     /* R14554 */
+    0x0000,     /* R14555 */
+    0x0000,     /* R14556 */
+    0x0000,     /* R14557 */
+    0x0000,     /* R14558 */
+    0x0000,     /* R14559 */
+    0x0000,     /* R14560 */
+    0x0000,     /* R14561 */
+    0x0000,     /* R14562 */
+    0x0000,     /* R14563 */
+    0x0000,     /* R14564 */
+    0x0000,     /* R14565 */
+    0x0000,     /* R14566 */
+    0x0000,     /* R14567 */
+    0x0000,     /* R14568 */
+    0x0000,     /* R14569 */
+    0x0000,     /* R14570 */
+    0x0000,     /* R14571 */
+    0x0000,     /* R14572 */
+    0x0000,     /* R14573 */
+    0x0000,     /* R14574 */
+    0x0000,     /* R14575 */
+    0x0000,     /* R14576 */
+    0x0000,     /* R14577 */
+    0x0000,     /* R14578 */
+    0x0000,     /* R14579 */
+    0x0000,     /* R14580 */
+    0x0000,     /* R14581 */
+    0x0000,     /* R14582 */
+    0x0000,     /* R14583 */
+    0x0000,     /* R14584 */
+    0x0000,     /* R14585 */
+    0x0000,     /* R14586 */
+    0x0000,     /* R14587 */
+    0x0000,     /* R14588 */
+    0x0000,     /* R14589 */
+    0x0000,     /* R14590 */
+    0x0000,     /* R14591 */
+    0x0000,     /* R14592 */
+    0x0000,     /* R14593 */
+    0x0000,     /* R14594 */
+    0x0000,     /* R14595 */
+    0x0000,     /* R14596 */
+    0x0000,     /* R14597 */
+    0x0000,     /* R14598 */
+    0x0000,     /* R14599 */
+    0x0000,     /* R14600 */
+    0x0000,     /* R14601 */
+    0x0000,     /* R14602 */
+    0x0000,     /* R14603 */
+    0x0000,     /* R14604 */
+    0x0000,     /* R14605 */
+    0x0000,     /* R14606 */
+    0x0000,     /* R14607 */
+    0x0000,     /* R14608 */
+    0x0000,     /* R14609 */
+    0x0000,     /* R14610 */
+    0x0000,     /* R14611 */
+    0x0000,     /* R14612 */
+    0x0000,     /* R14613 */
+    0x0000,     /* R14614 */
+    0x0000,     /* R14615 */
+    0x0000,     /* R14616 */
+    0x0000,     /* R14617 */
+    0x0000,     /* R14618 */
+    0x0000,     /* R14619 */
+    0x0000,     /* R14620 */
+    0x0000,     /* R14621 */
+    0x0000,     /* R14622 */
+    0x0000,     /* R14623 */
+    0x0000,     /* R14624 */
+    0x0000,     /* R14625 */
+    0x0000,     /* R14626 */
+    0x0000,     /* R14627 */
+    0x0000,     /* R14628 */
+    0x0000,     /* R14629 */
+    0x0000,     /* R14630 */
+    0x0000,     /* R14631 */
+    0x0000,     /* R14632 */
+    0x0000,     /* R14633 */
+    0x0000,     /* R14634 */
+    0x0000,     /* R14635 */
+    0x0000,     /* R14636 */
+    0x0000,     /* R14637 */
+    0x0000,     /* R14638 */
+    0x0000,     /* R14639 */
+    0x0000,     /* R14640 */
+    0x0000,     /* R14641 */
+    0x0000,     /* R14642 */
+    0x0000,     /* R14643 */
+    0x0000,     /* R14644 */
+    0x0000,     /* R14645 */
+    0x0000,     /* R14646 */
+    0x0000,     /* R14647 */
+    0x0000,     /* R14648 */
+    0x0000,     /* R14649 */
+    0x0000,     /* R14650 */
+    0x0000,     /* R14651 */
+    0x0000,     /* R14652 */
+    0x0000,     /* R14653 */
+    0x0000,     /* R14654 */
+    0x0000,     /* R14655 */
+    0x0000,     /* R14656 */
+    0x0000,     /* R14657 */
+    0x0000,     /* R14658 */
+    0x0000,     /* R14659 */
+    0x0000,     /* R14660 */
+    0x0000,     /* R14661 */
+    0x0000,     /* R14662 */
+    0x0000,     /* R14663 */
+    0x0000,     /* R14664 */
+    0x0000,     /* R14665 */
+    0x0000,     /* R14666 */
+    0x0000,     /* R14667 */
+    0x0000,     /* R14668 */
+    0x0000,     /* R14669 */
+    0x0000,     /* R14670 */
+    0x0000,     /* R14671 */
+    0x0000,     /* R14672 */
+    0x0000,     /* R14673 */
+    0x0000,     /* R14674 */
+    0x0000,     /* R14675 */
+    0x0000,     /* R14676 */
+    0x0000,     /* R14677 */
+    0x0000,     /* R14678 */
+    0x0000,     /* R14679 */
+    0x0000,     /* R14680 */
+    0x0000,     /* R14681 */
+    0x0000,     /* R14682 */
+    0x0000,     /* R14683 */
+    0x0000,     /* R14684 */
+    0x0000,     /* R14685 */
+    0x0000,     /* R14686 */
+    0x0000,     /* R14687 */
+    0x0000,     /* R14688 */
+    0x0000,     /* R14689 */
+    0x0000,     /* R14690 */
+    0x0000,     /* R14691 */
+    0x0000,     /* R14692 */
+    0x0000,     /* R14693 */
+    0x0000,     /* R14694 */
+    0x0000,     /* R14695 */
+    0x0000,     /* R14696 */
+    0x0000,     /* R14697 */
+    0x0000,     /* R14698 */
+    0x0000,     /* R14699 */
+    0x0000,     /* R14700 */
+    0x0000,     /* R14701 */
+    0x0000,     /* R14702 */
+    0x0000,     /* R14703 */
+    0x0000,     /* R14704 */
+    0x0000,     /* R14705 */
+    0x0000,     /* R14706 */
+    0x0000,     /* R14707 */
+    0x0000,     /* R14708 */
+    0x0000,     /* R14709 */
+    0x0000,     /* R14710 */
+    0x0000,     /* R14711 */
+    0x0000,     /* R14712 */
+    0x0000,     /* R14713 */
+    0x0000,     /* R14714 */
+    0x0000,     /* R14715 */
+    0x0000,     /* R14716 */
+    0x0000,     /* R14717 */
+    0x0000,     /* R14718 */
+    0x0000,     /* R14719 */
+    0x0000,     /* R14720 */
+    0x0000,     /* R14721 */
+    0x0000,     /* R14722 */
+    0x0000,     /* R14723 */
+    0x0000,     /* R14724 */
+    0x0000,     /* R14725 */
+    0x0000,     /* R14726 */
+    0x0000,     /* R14727 */
+    0x0000,     /* R14728 */
+    0x0000,     /* R14729 */
+    0x0000,     /* R14730 */
+    0x0000,     /* R14731 */
+    0x0000,     /* R14732 */
+    0x0000,     /* R14733 */
+    0x0000,     /* R14734 */
+    0x0000,     /* R14735 */
+    0x0000,     /* R14736 */
+    0x0000,     /* R14737 */
+    0x0000,     /* R14738 */
+    0x0000,     /* R14739 */
+    0x0000,     /* R14740 */
+    0x0000,     /* R14741 */
+    0x0000,     /* R14742 */
+    0x0000,     /* R14743 */
+    0x0000,     /* R14744 */
+    0x0000,     /* R14745 */
+    0x0000,     /* R14746 */
+    0x0000,     /* R14747 */
+    0x0000,     /* R14748 */
+    0x0000,     /* R14749 */
+    0x0000,     /* R14750 */
+    0x0000,     /* R14751 */
+    0x0000,     /* R14752 */
+    0x0000,     /* R14753 */
+    0x0000,     /* R14754 */
+    0x0000,     /* R14755 */
+    0x0000,     /* R14756 */
+    0x0000,     /* R14757 */
+    0x0000,     /* R14758 */
+    0x0000,     /* R14759 */
+    0x0000,     /* R14760 */
+    0x0000,     /* R14761 */
+    0x0000,     /* R14762 */
+    0x0000,     /* R14763 */
+    0x0000,     /* R14764 */
+    0x0000,     /* R14765 */
+    0x0000,     /* R14766 */
+    0x0000,     /* R14767 */
+    0x0000,     /* R14768 */
+    0x0000,     /* R14769 */
+    0x0000,     /* R14770 */
+    0x0000,     /* R14771 */
+    0x0000,     /* R14772 */
+    0x0000,     /* R14773 */
+    0x0000,     /* R14774 */
+    0x0000,     /* R14775 */
+    0x0000,     /* R14776 */
+    0x0000,     /* R14777 */
+    0x0000,     /* R14778 */
+    0x0000,     /* R14779 */
+    0x0000,     /* R14780 */
+    0x0000,     /* R14781 */
+    0x0000,     /* R14782 */
+    0x0000,     /* R14783 */
+    0x0000,     /* R14784 */
+    0x0000,     /* R14785 */
+    0x0000,     /* R14786 */
+    0x0000,     /* R14787 */
+    0x0000,     /* R14788 */
+    0x0000,     /* R14789 */
+    0x0000,     /* R14790 */
+    0x0000,     /* R14791 */
+    0x0000,     /* R14792 */
+    0x0000,     /* R14793 */
+    0x0000,     /* R14794 */
+    0x0000,     /* R14795 */
+    0x0000,     /* R14796 */
+    0x0000,     /* R14797 */
+    0x0000,     /* R14798 */
+    0x0000,     /* R14799 */
+    0x0000,     /* R14800 */
+    0x0000,     /* R14801 */
+    0x0000,     /* R14802 */
+    0x0000,     /* R14803 */
+    0x0000,     /* R14804 */
+    0x0000,     /* R14805 */
+    0x0000,     /* R14806 */
+    0x0000,     /* R14807 */
+    0x0000,     /* R14808 */
+    0x0000,     /* R14809 */
+    0x0000,     /* R14810 */
+    0x0000,     /* R14811 */
+    0x0000,     /* R14812 */
+    0x0000,     /* R14813 */
+    0x0000,     /* R14814 */
+    0x0000,     /* R14815 */
+    0x0000,     /* R14816 */
+    0x0000,     /* R14817 */
+    0x0000,     /* R14818 */
+    0x0000,     /* R14819 */
+    0x0000,     /* R14820 */
+    0x0000,     /* R14821 */
+    0x0000,     /* R14822 */
+    0x0000,     /* R14823 */
+    0x0000,     /* R14824 */
+    0x0000,     /* R14825 */
+    0x0000,     /* R14826 */
+    0x0000,     /* R14827 */
+    0x0000,     /* R14828 */
+    0x0000,     /* R14829 */
+    0x0000,     /* R14830 */
+    0x0000,     /* R14831 */
+    0x0000,     /* R14832 */
+    0x0000,     /* R14833 */
+    0x0000,     /* R14834 */
+    0x0000,     /* R14835 */
+    0x0000,     /* R14836 */
+    0x0000,     /* R14837 */
+    0x0000,     /* R14838 */
+    0x0000,     /* R14839 */
+    0x0000,     /* R14840 */
+    0x0000,     /* R14841 */
+    0x0000,     /* R14842 */
+    0x0000,     /* R14843 */
+    0x0000,     /* R14844 */
+    0x0000,     /* R14845 */
+    0x0000,     /* R14846 */
+    0x0000,     /* R14847 */
+    0x0000,     /* R14848 */
+    0x0000,     /* R14849 */
+    0x0000,     /* R14850 */
+    0x0000,     /* R14851 */
+    0x0000,     /* R14852 */
+    0x0000,     /* R14853 */
+    0x0000,     /* R14854 */
+    0x0000,     /* R14855 */
+    0x0000,     /* R14856 */
+    0x0000,     /* R14857 */
+    0x0000,     /* R14858 */
+    0x0000,     /* R14859 */
+    0x0000,     /* R14860 */
+    0x0000,     /* R14861 */
+    0x0000,     /* R14862 */
+    0x0000,     /* R14863 */
+    0x0000,     /* R14864 */
+    0x0000,     /* R14865 */
+    0x0000,     /* R14866 */
+    0x0000,     /* R14867 */
+    0x0000,     /* R14868 */
+    0x0000,     /* R14869 */
+    0x0000,     /* R14870 */
+    0x0000,     /* R14871 */
+    0x0000,     /* R14872 */
+    0x0000,     /* R14873 */
+    0x0000,     /* R14874 */
+    0x0000,     /* R14875 */
+    0x0000,     /* R14876 */
+    0x0000,     /* R14877 */
+    0x0000,     /* R14878 */
+    0x0000,     /* R14879 */
+    0x0000,     /* R14880 */
+    0x0000,     /* R14881 */
+    0x0000,     /* R14882 */
+    0x0000,     /* R14883 */
+    0x0000,     /* R14884 */
+    0x0000,     /* R14885 */
+    0x0000,     /* R14886 */
+    0x0000,     /* R14887 */
+    0x0000,     /* R14888 */
+    0x0000,     /* R14889 */
+    0x0000,     /* R14890 */
+    0x0000,     /* R14891 */
+    0x0000,     /* R14892 */
+    0x0000,     /* R14893 */
+    0x0000,     /* R14894 */
+    0x0000,     /* R14895 */
+    0x0000,     /* R14896 */
+    0x0000,     /* R14897 */
+    0x0000,     /* R14898 */
+    0x0000,     /* R14899 */
+    0x0000,     /* R14900 */
+    0x0000,     /* R14901 */
+    0x0000,     /* R14902 */
+    0x0000,     /* R14903 */
+    0x0000,     /* R14904 */
+    0x0000,     /* R14905 */
+    0x0000,     /* R14906 */
+    0x0000,     /* R14907 */
+    0x0000,     /* R14908 */
+    0x0000,     /* R14909 */
+    0x0000,     /* R14910 */
+    0x0000,     /* R14911 */
+    0x0000,     /* R14912 */
+    0x0000,     /* R14913 */
+    0x0000,     /* R14914 */
+    0x0000,     /* R14915 */
+    0x0000,     /* R14916 */
+    0x0000,     /* R14917 */
+    0x0000,     /* R14918 */
+    0x0000,     /* R14919 */
+    0x0000,     /* R14920 */
+    0x0000,     /* R14921 */
+    0x0000,     /* R14922 */
+    0x0000,     /* R14923 */
+    0x0000,     /* R14924 */
+    0x0000,     /* R14925 */
+    0x0000,     /* R14926 */
+    0x0000,     /* R14927 */
+    0x0000,     /* R14928 */
+    0x0000,     /* R14929 */
+    0x0000,     /* R14930 */
+    0x0000,     /* R14931 */
+    0x0000,     /* R14932 */
+    0x0000,     /* R14933 */
+    0x0000,     /* R14934 */
+    0x0000,     /* R14935 */
+    0x0000,     /* R14936 */
+    0x0000,     /* R14937 */
+    0x0000,     /* R14938 */
+    0x0000,     /* R14939 */
+    0x0000,     /* R14940 */
+    0x0000,     /* R14941 */
+    0x0000,     /* R14942 */
+    0x0000,     /* R14943 */
+    0x0000,     /* R14944 */
+    0x0000,     /* R14945 */
+    0x0000,     /* R14946 */
+    0x0000,     /* R14947 */
+    0x0000,     /* R14948 */
+    0x0000,     /* R14949 */
+    0x0000,     /* R14950 */
+    0x0000,     /* R14951 */
+    0x0000,     /* R14952 */
+    0x0000,     /* R14953 */
+    0x0000,     /* R14954 */
+    0x0000,     /* R14955 */
+    0x0000,     /* R14956 */
+    0x0000,     /* R14957 */
+    0x0000,     /* R14958 */
+    0x0000,     /* R14959 */
+    0x0000,     /* R14960 */
+    0x0000,     /* R14961 */
+    0x0000,     /* R14962 */
+    0x0000,     /* R14963 */
+    0x0000,     /* R14964 */
+    0x0000,     /* R14965 */
+    0x0000,     /* R14966 */
+    0x0000,     /* R14967 */
+    0x0000,     /* R14968 */
+    0x0000,     /* R14969 */
+    0x0000,     /* R14970 */
+    0x0000,     /* R14971 */
+    0x0000,     /* R14972 */
+    0x0000,     /* R14973 */
+    0x0000,     /* R14974 */
+    0x0000,     /* R14975 */
+    0x0000,     /* R14976 */
+    0x0000,     /* R14977 */
+    0x0000,     /* R14978 */
+    0x0000,     /* R14979 */
+    0x0000,     /* R14980 */
+    0x0000,     /* R14981 */
+    0x0000,     /* R14982 */
+    0x0000,     /* R14983 */
+    0x0000,     /* R14984 */
+    0x0000,     /* R14985 */
+    0x0000,     /* R14986 */
+    0x0000,     /* R14987 */
+    0x0000,     /* R14988 */
+    0x0000,     /* R14989 */
+    0x0000,     /* R14990 */
+    0x0000,     /* R14991 */
+    0x0000,     /* R14992 */
+    0x0000,     /* R14993 */
+    0x0000,     /* R14994 */
+    0x0000,     /* R14995 */
+    0x0000,     /* R14996 */
+    0x0000,     /* R14997 */
+    0x0000,     /* R14998 */
+    0x0000,     /* R14999 */
+    0x0000,     /* R15000 */
+    0x0000,     /* R15001 */
+    0x0000,     /* R15002 */
+    0x0000,     /* R15003 */
+    0x0000,     /* R15004 */
+    0x0000,     /* R15005 */
+    0x0000,     /* R15006 */
+    0x0000,     /* R15007 */
+    0x0000,     /* R15008 */
+    0x0000,     /* R15009 */
+    0x0000,     /* R15010 */
+    0x0000,     /* R15011 */
+    0x0000,     /* R15012 */
+    0x0000,     /* R15013 */
+    0x0000,     /* R15014 */
+    0x0000,     /* R15015 */
+    0x0000,     /* R15016 */
+    0x0000,     /* R15017 */
+    0x0000,     /* R15018 */
+    0x0000,     /* R15019 */
+    0x0000,     /* R15020 */
+    0x0000,     /* R15021 */
+    0x0000,     /* R15022 */
+    0x0000,     /* R15023 */
+    0x0000,     /* R15024 */
+    0x0000,     /* R15025 */
+    0x0000,     /* R15026 */
+    0x0000,     /* R15027 */
+    0x0000,     /* R15028 */
+    0x0000,     /* R15029 */
+    0x0000,     /* R15030 */
+    0x0000,     /* R15031 */
+    0x0000,     /* R15032 */
+    0x0000,     /* R15033 */
+    0x0000,     /* R15034 */
+    0x0000,     /* R15035 */
+    0x0000,     /* R15036 */
+    0x0000,     /* R15037 */
+    0x0000,     /* R15038 */
+    0x0000,     /* R15039 */
+    0x0000,     /* R15040 */
+    0x0000,     /* R15041 */
+    0x0000,     /* R15042 */
+    0x0000,     /* R15043 */
+    0x0000,     /* R15044 */
+    0x0000,     /* R15045 */
+    0x0000,     /* R15046 */
+    0x0000,     /* R15047 */
+    0x0000,     /* R15048 */
+    0x0000,     /* R15049 */
+    0x0000,     /* R15050 */
+    0x0000,     /* R15051 */
+    0x0000,     /* R15052 */
+    0x0000,     /* R15053 */
+    0x0000,     /* R15054 */
+    0x0000,     /* R15055 */
+    0x0000,     /* R15056 */
+    0x0000,     /* R15057 */
+    0x0000,     /* R15058 */
+    0x0000,     /* R15059 */
+    0x0000,     /* R15060 */
+    0x0000,     /* R15061 */
+    0x0000,     /* R15062 */
+    0x0000,     /* R15063 */
+    0x0000,     /* R15064 */
+    0x0000,     /* R15065 */
+    0x0000,     /* R15066 */
+    0x0000,     /* R15067 */
+    0x0000,     /* R15068 */
+    0x0000,     /* R15069 */
+    0x0000,     /* R15070 */
+    0x0000,     /* R15071 */
+    0x0000,     /* R15072 */
+    0x0000,     /* R15073 */
+    0x0000,     /* R15074 */
+    0x0000,     /* R15075 */
+    0x0000,     /* R15076 */
+    0x0000,     /* R15077 */
+    0x0000,     /* R15078 */
+    0x0000,     /* R15079 */
+    0x0000,     /* R15080 */
+    0x0000,     /* R15081 */
+    0x0000,     /* R15082 */
+    0x0000,     /* R15083 */
+    0x0000,     /* R15084 */
+    0x0000,     /* R15085 */
+    0x0000,     /* R15086 */
+    0x0000,     /* R15087 */
+    0x0000,     /* R15088 */
+    0x0000,     /* R15089 */
+    0x0000,     /* R15090 */
+    0x0000,     /* R15091 */
+    0x0000,     /* R15092 */
+    0x0000,     /* R15093 */
+    0x0000,     /* R15094 */
+    0x0000,     /* R15095 */
+    0x0000,     /* R15096 */
+    0x0000,     /* R15097 */
+    0x0000,     /* R15098 */
+    0x0000,     /* R15099 */
+    0x0000,     /* R15100 */
+    0x0000,     /* R15101 */
+    0x0000,     /* R15102 */
+    0x0000,     /* R15103 */
+    0x0000,     /* R15104 */
+    0x0000,     /* R15105 */
+    0x0000,     /* R15106 */
+    0x0000,     /* R15107 */
+    0x0000,     /* R15108 */
+    0x0000,     /* R15109 */
+    0x0000,     /* R15110 */
+    0x0000,     /* R15111 */
+    0x0000,     /* R15112 */
+    0x0000,     /* R15113 */
+    0x0000,     /* R15114 */
+    0x0000,     /* R15115 */
+    0x0000,     /* R15116 */
+    0x0000,     /* R15117 */
+    0x0000,     /* R15118 */
+    0x0000,     /* R15119 */
+    0x0000,     /* R15120 */
+    0x0000,     /* R15121 */
+    0x0000,     /* R15122 */
+    0x0000,     /* R15123 */
+    0x0000,     /* R15124 */
+    0x0000,     /* R15125 */
+    0x0000,     /* R15126 */
+    0x0000,     /* R15127 */
+    0x0000,     /* R15128 */
+    0x0000,     /* R15129 */
+    0x0000,     /* R15130 */
+    0x0000,     /* R15131 */
+    0x0000,     /* R15132 */
+    0x0000,     /* R15133 */
+    0x0000,     /* R15134 */
+    0x0000,     /* R15135 */
+    0x0000,     /* R15136 */
+    0x0000,     /* R15137 */
+    0x0000,     /* R15138 */
+    0x0000,     /* R15139 */
+    0x0000,     /* R15140 */
+    0x0000,     /* R15141 */
+    0x0000,     /* R15142 */
+    0x0000,     /* R15143 */
+    0x0000,     /* R15144 */
+    0x0000,     /* R15145 */
+    0x0000,     /* R15146 */
+    0x0000,     /* R15147 */
+    0x0000,     /* R15148 */
+    0x0000,     /* R15149 */
+    0x0000,     /* R15150 */
+    0x0000,     /* R15151 */
+    0x0000,     /* R15152 */
+    0x0000,     /* R15153 */
+    0x0000,     /* R15154 */
+    0x0000,     /* R15155 */
+    0x0000,     /* R15156 */
+    0x0000,     /* R15157 */
+    0x0000,     /* R15158 */
+    0x0000,     /* R15159 */
+    0x0000,     /* R15160 */
+    0x0000,     /* R15161 */
+    0x0000,     /* R15162 */
+    0x0000,     /* R15163 */
+    0x0000,     /* R15164 */
+    0x0000,     /* R15165 */
+    0x0000,     /* R15166 */
+    0x0000,     /* R15167 */
+    0x0000,     /* R15168 */
+    0x0000,     /* R15169 */
+    0x0000,     /* R15170 */
+    0x0000,     /* R15171 */
+    0x0000,     /* R15172 */
+    0x0000,     /* R15173 */
+    0x0000,     /* R15174 */
+    0x0000,     /* R15175 */
+    0x0000,     /* R15176 */
+    0x0000,     /* R15177 */
+    0x0000,     /* R15178 */
+    0x0000,     /* R15179 */
+    0x0000,     /* R15180 */
+    0x0000,     /* R15181 */
+    0x0000,     /* R15182 */
+    0x0000,     /* R15183 */
+    0x0000,     /* R15184 */
+    0x0000,     /* R15185 */
+    0x0000,     /* R15186 */
+    0x0000,     /* R15187 */
+    0x0000,     /* R15188 */
+    0x0000,     /* R15189 */
+    0x0000,     /* R15190 */
+    0x0000,     /* R15191 */
+    0x0000,     /* R15192 */
+    0x0000,     /* R15193 */
+    0x0000,     /* R15194 */
+    0x0000,     /* R15195 */
+    0x0000,     /* R15196 */
+    0x0000,     /* R15197 */
+    0x0000,     /* R15198 */
+    0x0000,     /* R15199 */
+    0x0000,     /* R15200 */
+    0x0000,     /* R15201 */
+    0x0000,     /* R15202 */
+    0x0000,     /* R15203 */
+    0x0000,     /* R15204 */
+    0x0000,     /* R15205 */
+    0x0000,     /* R15206 */
+    0x0000,     /* R15207 */
+    0x0000,     /* R15208 */
+    0x0000,     /* R15209 */
+    0x0000,     /* R15210 */
+    0x0000,     /* R15211 */
+    0x0000,     /* R15212 */
+    0x0000,     /* R15213 */
+    0x0000,     /* R15214 */
+    0x0000,     /* R15215 */
+    0x0000,     /* R15216 */
+    0x0000,     /* R15217 */
+    0x0000,     /* R15218 */
+    0x0000,     /* R15219 */
+    0x0000,     /* R15220 */
+    0x0000,     /* R15221 */
+    0x0000,     /* R15222 */
+    0x0000,     /* R15223 */
+    0x0000,     /* R15224 */
+    0x0000,     /* R15225 */
+    0x0000,     /* R15226 */
+    0x0000,     /* R15227 */
+    0x0000,     /* R15228 */
+    0x0000,     /* R15229 */
+    0x0000,     /* R15230 */
+    0x0000,     /* R15231 */
+    0x0000,     /* R15232 */
+    0x0000,     /* R15233 */
+    0x0000,     /* R15234 */
+    0x0000,     /* R15235 */
+    0x0000,     /* R15236 */
+    0x0000,     /* R15237 */
+    0x0000,     /* R15238 */
+    0x0000,     /* R15239 */
+    0x0000,     /* R15240 */
+    0x0000,     /* R15241 */
+    0x0000,     /* R15242 */
+    0x0000,     /* R15243 */
+    0x0000,     /* R15244 */
+    0x0000,     /* R15245 */
+    0x0000,     /* R15246 */
+    0x0000,     /* R15247 */
+    0x0000,     /* R15248 */
+    0x0000,     /* R15249 */
+    0x0000,     /* R15250 */
+    0x0000,     /* R15251 */
+    0x0000,     /* R15252 */
+    0x0000,     /* R15253 */
+    0x0000,     /* R15254 */
+    0x0000,     /* R15255 */
+    0x0000,     /* R15256 */
+    0x0000,     /* R15257 */
+    0x0000,     /* R15258 */
+    0x0000,     /* R15259 */
+    0x0000,     /* R15260 */
+    0x0000,     /* R15261 */
+    0x0000,     /* R15262 */
+    0x0000,     /* R15263 */
+    0x0000,     /* R15264 */
+    0x0000,     /* R15265 */
+    0x0000,     /* R15266 */
+    0x0000,     /* R15267 */
+    0x0000,     /* R15268 */
+    0x0000,     /* R15269 */
+    0x0000,     /* R15270 */
+    0x0000,     /* R15271 */
+    0x0000,     /* R15272 */
+    0x0000,     /* R15273 */
+    0x0000,     /* R15274 */
+    0x0000,     /* R15275 */
+    0x0000,     /* R15276 */
+    0x0000,     /* R15277 */
+    0x0000,     /* R15278 */
+    0x0000,     /* R15279 */
+    0x0000,     /* R15280 */
+    0x0000,     /* R15281 */
+    0x0000,     /* R15282 */
+    0x0000,     /* R15283 */
+    0x0000,     /* R15284 */
+    0x0000,     /* R15285 */
+    0x0000,     /* R15286 */
+    0x0000,     /* R15287 */
+    0x0000,     /* R15288 */
+    0x0000,     /* R15289 */
+    0x0000,     /* R15290 */
+    0x0000,     /* R15291 */
+    0x0000,     /* R15292 */
+    0x0000,     /* R15293 */
+    0x0000,     /* R15294 */
+    0x0000,     /* R15295 */
+    0x0000,     /* R15296 */
+    0x0000,     /* R15297 */
+    0x0000,     /* R15298 */
+    0x0000,     /* R15299 */
+    0x0000,     /* R15300 */
+    0x0000,     /* R15301 */
+    0x0000,     /* R15302 */
+    0x0000,     /* R15303 */
+    0x0000,     /* R15304 */
+    0x0000,     /* R15305 */
+    0x0000,     /* R15306 */
+    0x0000,     /* R15307 */
+    0x0000,     /* R15308 */
+    0x0000,     /* R15309 */
+    0x0000,     /* R15310 */
+    0x0000,     /* R15311 */
+    0x0000,     /* R15312 */
+    0x0000,     /* R15313 */
+    0x0000,     /* R15314 */
+    0x0000,     /* R15315 */
+    0x0000,     /* R15316 */
+    0x0000,     /* R15317 */
+    0x0000,     /* R15318 */
+    0x0000,     /* R15319 */
+    0x0000,     /* R15320 */
+    0x0000,     /* R15321 */
+    0x0000,     /* R15322 */
+    0x0000,     /* R15323 */
+    0x0000,     /* R15324 */
+    0x0000,     /* R15325 */
+    0x0000,     /* R15326 */
+    0x0000,     /* R15327 */
+    0x0000,     /* R15328 */
+    0x0000,     /* R15329 */
+    0x0000,     /* R15330 */
+    0x0000,     /* R15331 */
+    0x0000,     /* R15332 */
+    0x0000,     /* R15333 */
+    0x0000,     /* R15334 */
+    0x0000,     /* R15335 */
+    0x0000,     /* R15336 */
+    0x0000,     /* R15337 */
+    0x0000,     /* R15338 */
+    0x0000,     /* R15339 */
+    0x0000,     /* R15340 */
+    0x0000,     /* R15341 */
+    0x0000,     /* R15342 */
+    0x0000,     /* R15343 */
+    0x0000,     /* R15344 */
+    0x0000,     /* R15345 */
+    0x0000,     /* R15346 */
+    0x0000,     /* R15347 */
+    0x0000,     /* R15348 */
+    0x0000,     /* R15349 */
+    0x0000,     /* R15350 */
+    0x0000,     /* R15351 */
+    0x0000,     /* R15352 */
+    0x0000,     /* R15353 */
+    0x0000,     /* R15354 */
+    0x0000,     /* R15355 */
+    0x0000,     /* R15356 */
+    0x0000,     /* R15357 */
+    0x0000,     /* R15358 */
+    0x0000,     /* R15359 */
+    0x000A,     /* R15360 - DSP2 Coeff RAM 0 */
+    0x0000,     /* R15361 */
+    0x0000,     /* R15362 */
+    0x0000,     /* R15363 */
+    0x0000,     /* R15364 */
+    0x0000,     /* R15365 */
+    0x0000,     /* R15366 */
+    0x0000,     /* R15367 */
+    0x0000,     /* R15368 */
+    0x0000,     /* R15369 */
+    0x0000,     /* R15370 */
+    0x0000,     /* R15371 */
+    0x0000,     /* R15372 */
+    0x0000,     /* R15373 */
+    0x0000,     /* R15374 */
+    0x0000,     /* R15375 */
+    0x0000,     /* R15376 */
+    0x0000,     /* R15377 */
+    0x0000,     /* R15378 */
+    0x0000,     /* R15379 */
+    0x0000,     /* R15380 */
+    0x0000,     /* R15381 */
+    0x0000,     /* R15382 */
+    0x0000,     /* R15383 */
+    0x0000,     /* R15384 */
+    0x0000,     /* R15385 */
+    0x0000,     /* R15386 */
+    0x0000,     /* R15387 */
+    0x0000,     /* R15388 */
+    0x0000,     /* R15389 */
+    0x0000,     /* R15390 */
+    0x0000,     /* R15391 */
+    0x0000,     /* R15392 */
+    0x0000,     /* R15393 */
+    0x0000,     /* R15394 */
+    0x0000,     /* R15395 */
+    0x0000,     /* R15396 */
+    0x0000,     /* R15397 */
+    0x0000,     /* R15398 */
+    0x0000,     /* R15399 */
+    0x0000,     /* R15400 */
+    0x0000,     /* R15401 */
+    0x0000,     /* R15402 */
+    0x0000,     /* R15403 */
+    0x0000,     /* R15404 */
+    0x0000,     /* R15405 */
+    0x0000,     /* R15406 */
+    0x0000,     /* R15407 */
+    0x0000,     /* R15408 */
+    0x0000,     /* R15409 */
+    0x0000,     /* R15410 */
+    0x0000,     /* R15411 */
+    0x0000,     /* R15412 */
+    0x0000,     /* R15413 */
+    0x0000,     /* R15414 */
+    0x0000,     /* R15415 */
+    0x0000,     /* R15416 */
+    0x0000,     /* R15417 */
+    0x0000,     /* R15418 */
+    0x0000,     /* R15419 */
+    0x0000,     /* R15420 */
+    0x0000,     /* R15421 */
+    0x0000,     /* R15422 */
+    0x0000,     /* R15423 */
+    0x0000,     /* R15424 */
+    0x0000,     /* R15425 */
+    0x0000,     /* R15426 */
+    0x0000,     /* R15427 */
+    0x0000,     /* R15428 */
+    0x0000,     /* R15429 */
+    0x0000,     /* R15430 */
+    0x0000,     /* R15431 */
+    0x0000,     /* R15432 */
+    0x0000,     /* R15433 */
+    0x0000,     /* R15434 */
+    0x0000,     /* R15435 */
+    0x0000,     /* R15436 */
+    0x0000,     /* R15437 */
+    0x0000,     /* R15438 */
+    0x0000,     /* R15439 */
+    0x0000,     /* R15440 */
+    0x0000,     /* R15441 */
+    0x0000,     /* R15442 */
+    0x0000,     /* R15443 */
+    0x0000,     /* R15444 */
+    0x0000,     /* R15445 */
+    0x0000,     /* R15446 */
+    0x0000,     /* R15447 */
+    0x0000,     /* R15448 */
+    0x0000,     /* R15449 */
+    0x0000,     /* R15450 */
+    0x0000,     /* R15451 */
+    0x0000,     /* R15452 */
+    0x0000,     /* R15453 */
+    0x0000,     /* R15454 */
+    0x0000,     /* R15455 */
+    0x0000,     /* R15456 */
+    0x0000,     /* R15457 */
+    0x0000,     /* R15458 */
+    0x0000,     /* R15459 */
+    0x0000,     /* R15460 */
+    0x0000,     /* R15461 */
+    0x0000,     /* R15462 */
+    0x0000,     /* R15463 */
+    0x0000,     /* R15464 */
+    0x0000,     /* R15465 */
+    0x0000,     /* R15466 */
+    0x0000,     /* R15467 */
+    0x0000,     /* R15468 */
+    0x0000,     /* R15469 */
+    0x0000,     /* R15470 */
+    0x0000,     /* R15471 */
+    0x0000,     /* R15472 */
+    0x0000,     /* R15473 */
+    0x0000,     /* R15474 */
+    0x0000,     /* R15475 */
+    0x0000,     /* R15476 */
+    0x0000,     /* R15477 */
+    0x0000,     /* R15478 */
+    0x0000,     /* R15479 */
+    0x0000,     /* R15480 */
+    0x0000,     /* R15481 */
+    0x0000,     /* R15482 */
+    0x0000,     /* R15483 */
+    0x0000,     /* R15484 */
+    0x0000,     /* R15485 */
+    0x0000,     /* R15486 */
+    0x0000,     /* R15487 */
+    0x0000,     /* R15488 */
+    0x0000,     /* R15489 */
+    0x0000,     /* R15490 */
+    0x0000,     /* R15491 */
+    0x0000,     /* R15492 */
+    0x0000,     /* R15493 */
+    0x0000,     /* R15494 */
+    0x0000,     /* R15495 */
+    0x0000,     /* R15496 */
+    0x0000,     /* R15497 */
+    0x0000,     /* R15498 */
+    0x0000,     /* R15499 */
+    0x0000,     /* R15500 */
+    0x0000,     /* R15501 */
+    0x0000,     /* R15502 */
+    0x0000,     /* R15503 */
+    0x0000,     /* R15504 */
+    0x0000,     /* R15505 */
+    0x0000,     /* R15506 */
+    0x0000,     /* R15507 */
+    0x0000,     /* R15508 */
+    0x0000,     /* R15509 */
+    0x0000,     /* R15510 */
+    0x0000,     /* R15511 */
+    0x0000,     /* R15512 */
+    0x0000,     /* R15513 */
+    0x0000,     /* R15514 */
+    0x0000,     /* R15515 */
+    0x0000,     /* R15516 */
+    0x0000,     /* R15517 */
+    0x0000,     /* R15518 */
+    0x0000,     /* R15519 */
+    0x0000,     /* R15520 */
+    0x0000,     /* R15521 */
+    0x0000,     /* R15522 */
+    0x0000,     /* R15523 */
+    0x0000,     /* R15524 */
+    0x0000,     /* R15525 */
+    0x0000,     /* R15526 */
+    0x0000,     /* R15527 */
+    0x0000,     /* R15528 */
+    0x0000,     /* R15529 */
+    0x0000,     /* R15530 */
+    0x0000,     /* R15531 */
+    0x0000,     /* R15532 */
+    0x0000,     /* R15533 */
+    0x0000,     /* R15534 */
+    0x0000,     /* R15535 */
+    0x0000,     /* R15536 */
+    0x0000,     /* R15537 */
+    0x0000,     /* R15538 */
+    0x0000,     /* R15539 */
+    0x0000,     /* R15540 */
+    0x0000,     /* R15541 */
+    0x0000,     /* R15542 */
+    0x0000,     /* R15543 */
+    0x0000,     /* R15544 */
+    0x0000,     /* R15545 */
+    0x0000,     /* R15546 */
+    0x0000,     /* R15547 */
+    0x0000,     /* R15548 */
+    0x0000,     /* R15549 */
+    0x0000,     /* R15550 */
+    0x0000,     /* R15551 */
+    0x0000,     /* R15552 */
+    0x0000,     /* R15553 */
+    0x0000,     /* R15554 */
+    0x0000,     /* R15555 */
+    0x0000,     /* R15556 */
+    0x0000,     /* R15557 */
+    0x0000,     /* R15558 */
+    0x0000,     /* R15559 */
+    0x0000,     /* R15560 */
+    0x0000,     /* R15561 */
+    0x0000,     /* R15562 */
+    0x0000,     /* R15563 */
+    0x0000,     /* R15564 */
+    0x0000,     /* R15565 */
+    0x0000,     /* R15566 */
+    0x0000,     /* R15567 */
+    0x0000,     /* R15568 */
+    0x0000,     /* R15569 */
+    0x0000,     /* R15570 */
+    0x0000,     /* R15571 */
+    0x0000,     /* R15572 */
+    0x0000,     /* R15573 */
+    0x0000,     /* R15574 */
+    0x0000,     /* R15575 */
+    0x0000,     /* R15576 */
+    0x0000,     /* R15577 */
+    0x0000,     /* R15578 */
+    0x0000,     /* R15579 */
+    0x0000,     /* R15580 */
+    0x0000,     /* R15581 */
+    0x0000,     /* R15582 */
+    0x0000,     /* R15583 */
+    0x0000,     /* R15584 */
+    0x0000,     /* R15585 */
+    0x0000,     /* R15586 */
+    0x0000,     /* R15587 */
+    0x0000,     /* R15588 */
+    0x0000,     /* R15589 */
+    0x0000,     /* R15590 */
+    0x0000,     /* R15591 */
+    0x0000,     /* R15592 */
+    0x0000,     /* R15593 */
+    0x0000,     /* R15594 */
+    0x0000,     /* R15595 */
+    0x0000,     /* R15596 */
+    0x0000,     /* R15597 */
+    0x0000,     /* R15598 */
+    0x0000,     /* R15599 */
+    0x0000,     /* R15600 */
+    0x0000,     /* R15601 */
+    0x0000,     /* R15602 */
+    0x0000,     /* R15603 */
+    0x0000,     /* R15604 */
+    0x0000,     /* R15605 */
+    0x0000,     /* R15606 */
+    0x0000,     /* R15607 */
+    0x0000,     /* R15608 */
+    0x0000,     /* R15609 */
+    0x0000,     /* R15610 */
+    0x0000,     /* R15611 */
+    0x0000,     /* R15612 */
+    0x0000,     /* R15613 */
+    0x0000,     /* R15614 */
+    0x0000,     /* R15615 */
+    0x0000,     /* R15616 */
+    0x0000,     /* R15617 */
+    0x0000,     /* R15618 */
+    0x0000,     /* R15619 */
+    0x0000,     /* R15620 */
+    0x0000,     /* R15621 */
+    0x0000,     /* R15622 */
+    0x0000,     /* R15623 */
+    0x0000,     /* R15624 */
+    0x0000,     /* R15625 */
+    0x0000,     /* R15626 */
+    0x0000,     /* R15627 */
+    0x0000,     /* R15628 */
+    0x0000,     /* R15629 */
+    0x0000,     /* R15630 */
+    0x0000,     /* R15631 */
+    0x0000,     /* R15632 */
+    0x0000,     /* R15633 */
+    0x0000,     /* R15634 */
+    0x0000,     /* R15635 */
+    0x0000,     /* R15636 */
+    0x0000,     /* R15637 */
+    0x0000,     /* R15638 */
+    0x0000,     /* R15639 */
+    0x0000,     /* R15640 */
+    0x0000,     /* R15641 */
+    0x0000,     /* R15642 */
+    0x0000,     /* R15643 */
+    0x0000,     /* R15644 */
+    0x0000,     /* R15645 */
+    0x0000,     /* R15646 */
+    0x0000,     /* R15647 */
+    0x0000,     /* R15648 */
+    0x0000,     /* R15649 */
+    0x0000,     /* R15650 */
+    0x0000,     /* R15651 */
+    0x0000,     /* R15652 */
+    0x0000,     /* R15653 */
+    0x0000,     /* R15654 */
+    0x0000,     /* R15655 */
+    0x0000,     /* R15656 */
+    0x0000,     /* R15657 */
+    0x0000,     /* R15658 */
+    0x0000,     /* R15659 */
+    0x0000,     /* R15660 */
+    0x0000,     /* R15661 */
+    0x0000,     /* R15662 */
+    0x0000,     /* R15663 */
+    0x0000,     /* R15664 */
+    0x0000,     /* R15665 */
+    0x0000,     /* R15666 */
+    0x0000,     /* R15667 */
+    0x0000,     /* R15668 */
+    0x0000,     /* R15669 */
+    0x0000,     /* R15670 */
+    0x0000,     /* R15671 */
+    0x0000,     /* R15672 */
+    0x0000,     /* R15673 */
+    0x0000,     /* R15674 */
+    0x0000,     /* R15675 */
+    0x0000,     /* R15676 */
+    0x0000,     /* R15677 */
+    0x0000,     /* R15678 */
+    0x0000,     /* R15679 */
+    0x0000,     /* R15680 */
+    0x0000,     /* R15681 */
+    0x0000,     /* R15682 */
+    0x0000,     /* R15683 */
+    0x0000,     /* R15684 */
+    0x0000,     /* R15685 */
+    0x0000,     /* R15686 */
+    0x0000,     /* R15687 */
+    0x0000,     /* R15688 */
+    0x0000,     /* R15689 */
+    0x0000,     /* R15690 */
+    0x0000,     /* R15691 */
+    0x0000,     /* R15692 */
+    0x0000,     /* R15693 */
+    0x0000,     /* R15694 */
+    0x0000,     /* R15695 */
+    0x0000,     /* R15696 */
+    0x0000,     /* R15697 */
+    0x0000,     /* R15698 */
+    0x0000,     /* R15699 */
+    0x0000,     /* R15700 */
+    0x0000,     /* R15701 */
+    0x0000,     /* R15702 */
+    0x0000,     /* R15703 */
+    0x0000,     /* R15704 */
+    0x0000,     /* R15705 */
+    0x0000,     /* R15706 */
+    0x0000,     /* R15707 */
+    0x0000,     /* R15708 */
+    0x0000,     /* R15709 */
+    0x0000,     /* R15710 */
+    0x0000,     /* R15711 */
+    0x0000,     /* R15712 */
+    0x0000,     /* R15713 */
+    0x0000,     /* R15714 */
+    0x0000,     /* R15715 */
+    0x0000,     /* R15716 */
+    0x0000,     /* R15717 */
+    0x0000,     /* R15718 */
+    0x0000,     /* R15719 */
+    0x0000,     /* R15720 */
+    0x0000,     /* R15721 */
+    0x0000,     /* R15722 */
+    0x0000,     /* R15723 */
+    0x0000,     /* R15724 */
+    0x0000,     /* R15725 */
+    0x0000,     /* R15726 */
+    0x0000,     /* R15727 */
+    0x0000,     /* R15728 */
+    0x0000,     /* R15729 */
+    0x0000,     /* R15730 */
+    0x0000,     /* R15731 */
+    0x0000,     /* R15732 */
+    0x0000,     /* R15733 */
+    0x0000,     /* R15734 */
+    0x0000,     /* R15735 */
+    0x0000,     /* R15736 */
+    0x0000,     /* R15737 */
+    0x0000,     /* R15738 */
+    0x0000,     /* R15739 */
+    0x0000,     /* R15740 */
+    0x0000,     /* R15741 */
+    0x0000,     /* R15742 */
+    0x0000,     /* R15743 */
+    0x0000,     /* R15744 */
+    0x0000,     /* R15745 */
+    0x0000,     /* R15746 */
+    0x0000,     /* R15747 */
+    0x0000,     /* R15748 */
+    0x0000,     /* R15749 */
+    0x0000,     /* R15750 */
+    0x0000,     /* R15751 */
+    0x0000,     /* R15752 */
+    0x0000,     /* R15753 */
+    0x0000,     /* R15754 */
+    0x0000,     /* R15755 */
+    0x0000,     /* R15756 */
+    0x0000,     /* R15757 */
+    0x0000,     /* R15758 */
+    0x0000,     /* R15759 */
+    0x0000,     /* R15760 */
+    0x0000,     /* R15761 */
+    0x0000,     /* R15762 */
+    0x0000,     /* R15763 */
+    0x0000,     /* R15764 */
+    0x0000,     /* R15765 */
+    0x0000,     /* R15766 */
+    0x0000,     /* R15767 */
+    0x0000,     /* R15768 */
+    0x0000,     /* R15769 */
+    0x0000,     /* R15770 */
+    0x0000,     /* R15771 */
+    0x0000,     /* R15772 */
+    0x0000,     /* R15773 */
+    0x0000,     /* R15774 */
+    0x0000,     /* R15775 */
+    0x0000,     /* R15776 */
+    0x0000,     /* R15777 */
+    0x0000,     /* R15778 */
+    0x0000,     /* R15779 */
+    0x0000,     /* R15780 */
+    0x0000,     /* R15781 */
+    0x0000,     /* R15782 */
+    0x0000,     /* R15783 */
+    0x0000,     /* R15784 */
+    0x0000,     /* R15785 */
+    0x0000,     /* R15786 */
+    0x0000,     /* R15787 */
+    0x0000,     /* R15788 */
+    0x0000,     /* R15789 */
+    0x0000,     /* R15790 */
+    0x0000,     /* R15791 */
+    0x0000,     /* R15792 */
+    0x0000,     /* R15793 */
+    0x0000,     /* R15794 */
+    0x0000,     /* R15795 */
+    0x0000,     /* R15796 */
+    0x0000,     /* R15797 */
+    0x0000,     /* R15798 */
+    0x0000,     /* R15799 */
+    0x0000,     /* R15800 */
+    0x0000,     /* R15801 */
+    0x0000,     /* R15802 */
+    0x0000,     /* R15803 */
+    0x0000,     /* R15804 */
+    0x0000,     /* R15805 */
+    0x0000,     /* R15806 */
+    0x0000,     /* R15807 */
+    0x0000,     /* R15808 */
+    0x0000,     /* R15809 */
+    0x0000,     /* R15810 */
+    0x0000,     /* R15811 */
+    0x0000,     /* R15812 */
+    0x0000,     /* R15813 */
+    0x0000,     /* R15814 */
+    0x0000,     /* R15815 */
+    0x0000,     /* R15816 */
+    0x0000,     /* R15817 */
+    0x0000,     /* R15818 */
+    0x0000,     /* R15819 */
+    0x0000,     /* R15820 */
+    0x0000,     /* R15821 */
+    0x0000,     /* R15822 */
+    0x0000,     /* R15823 */
+    0x0000,     /* R15824 */
+    0x0000,     /* R15825 */
+    0x0000,     /* R15826 */
+    0x0000,     /* R15827 */
+    0x0000,     /* R15828 */
+    0x0000,     /* R15829 */
+    0x0000,     /* R15830 */
+    0x0000,     /* R15831 */
+    0x0000,     /* R15832 */
+    0x0000,     /* R15833 */
+    0x0000,     /* R15834 */
+    0x0000,     /* R15835 */
+    0x0000,     /* R15836 */
+    0x0000,     /* R15837 */
+    0x0000,     /* R15838 */
+    0x0000,     /* R15839 */
+    0x0000,     /* R15840 */
+    0x0000,     /* R15841 */
+    0x0000,     /* R15842 */
+    0x0000,     /* R15843 */
+    0x0000,     /* R15844 */
+    0x0000,     /* R15845 */
+    0x0000,     /* R15846 */
+    0x0000,     /* R15847 */
+    0x0000,     /* R15848 */
+    0x0000,     /* R15849 */
+    0x0000,     /* R15850 */
+    0x0000,     /* R15851 */
+    0x0000,     /* R15852 */
+    0x0000,     /* R15853 */
+    0x0000,     /* R15854 */
+    0x0000,     /* R15855 */
+    0x0000,     /* R15856 */
+    0x0000,     /* R15857 */
+    0x0000,     /* R15858 */
+    0x0000,     /* R15859 */
+    0x0000,     /* R15860 */
+    0x0000,     /* R15861 */
+    0x0000,     /* R15862 */
+    0x0000,     /* R15863 */
+    0x0000,     /* R15864 */
+    0x0000,     /* R15865 */
+    0x0000,     /* R15866 */
+    0x0000,     /* R15867 */
+    0x0000,     /* R15868 */
+    0x0000,     /* R15869 */
+    0x0000,     /* R15870 */
+    0x0000,     /* R15871 */
+    0x0000,     /* R15872 */
+    0x0000,     /* R15873 */
+    0x0000,     /* R15874 */
+    0x0000,     /* R15875 */
+    0x0000,     /* R15876 */
+    0x0000,     /* R15877 */
+    0x0000,     /* R15878 */
+    0x0000,     /* R15879 */
+    0x0000,     /* R15880 */
+    0x0000,     /* R15881 */
+    0x0000,     /* R15882 */
+    0x0000,     /* R15883 */
+    0x0000,     /* R15884 */
+    0x0000,     /* R15885 */
+    0x0000,     /* R15886 */
+    0x0000,     /* R15887 */
+    0x0000,     /* R15888 */
+    0x0000,     /* R15889 */
+    0x0000,     /* R15890 */
+    0x0000,     /* R15891 */
+    0x0000,     /* R15892 */
+    0x0000,     /* R15893 */
+    0x0000,     /* R15894 */
+    0x0000,     /* R15895 */
+    0x0000,     /* R15896 */
+    0x0000,     /* R15897 */
+    0x0000,     /* R15898 */
+    0x0000,     /* R15899 */
+    0x0000,     /* R15900 */
+    0x0000,     /* R15901 */
+    0x0000,     /* R15902 */
+    0x0000,     /* R15903 */
+    0x0000,     /* R15904 */
+    0x0000,     /* R15905 */
+    0x0000,     /* R15906 */
+    0x0000,     /* R15907 */
+    0x0000,     /* R15908 */
+    0x0000,     /* R15909 */
+    0x0000,     /* R15910 */
+    0x0000,     /* R15911 */
+    0x0000,     /* R15912 */
+    0x0000,     /* R15913 */
+    0x0000,     /* R15914 */
+    0x0000,     /* R15915 */
+    0x0000,     /* R15916 */
+    0x0000,     /* R15917 */
+    0x0000,     /* R15918 */
+    0x0000,     /* R15919 */
+    0x0000,     /* R15920 */
+    0x0000,     /* R15921 */
+    0x0000,     /* R15922 */
+    0x0000,     /* R15923 */
+    0x0000,     /* R15924 */
+    0x0000,     /* R15925 */
+    0x0000,     /* R15926 */
+    0x0000,     /* R15927 */
+    0x0000,     /* R15928 */
+    0x0000,     /* R15929 */
+    0x0000,     /* R15930 */
+    0x0000,     /* R15931 */
+    0x0000,     /* R15932 */
+    0x0000,     /* R15933 */
+    0x0000,     /* R15934 */
+    0x0000,     /* R15935 */
+    0x0000,     /* R15936 */
+    0x0000,     /* R15937 */
+    0x0000,     /* R15938 */
+    0x0000,     /* R15939 */
+    0x0000,     /* R15940 */
+    0x0000,     /* R15941 */
+    0x0000,     /* R15942 */
+    0x0000,     /* R15943 */
+    0x0000,     /* R15944 */
+    0x0000,     /* R15945 */
+    0x0000,     /* R15946 */
+    0x0000,     /* R15947 */
+    0x0000,     /* R15948 */
+    0x0000,     /* R15949 */
+    0x0000,     /* R15950 */
+    0x0000,     /* R15951 */
+    0x0000,     /* R15952 */
+    0x0000,     /* R15953 */
+    0x0000,     /* R15954 */
+    0x0000,     /* R15955 */
+    0x0000,     /* R15956 */
+    0x0000,     /* R15957 */
+    0x0000,     /* R15958 */
+    0x0000,     /* R15959 */
+    0x0000,     /* R15960 */
+    0x0000,     /* R15961 */
+    0x0000,     /* R15962 */
+    0x0000,     /* R15963 */
+    0x0000,     /* R15964 */
+    0x0000,     /* R15965 */
+    0x0000,     /* R15966 */
+    0x0000,     /* R15967 */
+    0x0000,     /* R15968 */
+    0x0000,     /* R15969 */
+    0x0000,     /* R15970 */
+    0x0000,     /* R15971 */
+    0x0000,     /* R15972 */
+    0x0000,     /* R15973 */
+    0x0000,     /* R15974 */
+    0x0000,     /* R15975 */
+    0x0000,     /* R15976 */
+    0x0000,     /* R15977 */
+    0x0000,     /* R15978 */
+    0x0000,     /* R15979 */
+    0x0000,     /* R15980 */
+    0x0000,     /* R15981 */
+    0x0000,     /* R15982 */
+    0x0000,     /* R15983 */
+    0x0000,     /* R15984 */
+    0x0000,     /* R15985 */
+    0x0000,     /* R15986 */
+    0x0000,     /* R15987 */
+    0x0000,     /* R15988 */
+    0x0000,     /* R15989 */
+    0x0000,     /* R15990 */
+    0x0000,     /* R15991 */
+    0x0000,     /* R15992 */
+    0x0000,     /* R15993 */
+    0x0000,     /* R15994 */
+    0x0000,     /* R15995 */
+    0x0000,     /* R15996 */
+    0x0000,     /* R15997 */
+    0x0000,     /* R15998 */
+    0x0000,     /* R15999 */
+    0x0000,     /* R16000 */
+    0x0000,     /* R16001 */
+    0x0000,     /* R16002 */
+    0x0000,     /* R16003 */
+    0x0000,     /* R16004 */
+    0x0000,     /* R16005 */
+    0x0000,     /* R16006 */
+    0x0000,     /* R16007 */
+    0x0000,     /* R16008 */
+    0x0000,     /* R16009 */
+    0x0000,     /* R16010 */
+    0x0000,     /* R16011 */
+    0x0000,     /* R16012 */
+    0x0000,     /* R16013 */
+    0x0000,     /* R16014 */
+    0x0000,     /* R16015 */
+    0x0000,     /* R16016 */
+    0x0000,     /* R16017 */
+    0x0000,     /* R16018 */
+    0x0000,     /* R16019 */
+    0x0000,     /* R16020 */
+    0x0000,     /* R16021 */
+    0x0000,     /* R16022 */
+    0x0000,     /* R16023 */
+    0x0000,     /* R16024 */
+    0x0000,     /* R16025 */
+    0x0000,     /* R16026 */
+    0x0000,     /* R16027 */
+    0x0000,     /* R16028 */
+    0x0000,     /* R16029 */
+    0x0000,     /* R16030 */
+    0x0000,     /* R16031 */
+    0x0000,     /* R16032 */
+    0x0000,     /* R16033 */
+    0x0000,     /* R16034 */
+    0x0000,     /* R16035 */
+    0x0000,     /* R16036 */
+    0x0000,     /* R16037 */
+    0x0000,     /* R16038 */
+    0x0000,     /* R16039 */
+    0x0000,     /* R16040 */
+    0x0000,     /* R16041 */
+    0x0000,     /* R16042 */
+    0x0000,     /* R16043 */
+    0x0000,     /* R16044 */
+    0x0000,     /* R16045 */
+    0x0000,     /* R16046 */
+    0x0000,     /* R16047 */
+    0x0000,     /* R16048 */
+    0x0000,     /* R16049 */
+    0x0000,     /* R16050 */
+    0x0000,     /* R16051 */
+    0x0000,     /* R16052 */
+    0x0000,     /* R16053 */
+    0x0000,     /* R16054 */
+    0x0000,     /* R16055 */
+    0x0000,     /* R16056 */
+    0x0000,     /* R16057 */
+    0x0000,     /* R16058 */
+    0x0000,     /* R16059 */
+    0x0000,     /* R16060 */
+    0x0000,     /* R16061 */
+    0x0000,     /* R16062 */
+    0x0000,     /* R16063 */
+    0x0000,     /* R16064 */
+    0x0000,     /* R16065 */
+    0x0000,     /* R16066 */
+    0x0000,     /* R16067 */
+    0x0000,     /* R16068 */
+    0x0000,     /* R16069 */
+    0x0000,     /* R16070 */
+    0x0000,     /* R16071 */
+    0x0000,     /* R16072 */
+    0x0000,     /* R16073 */
+    0x0000,     /* R16074 */
+    0x0000,     /* R16075 */
+    0x0000,     /* R16076 */
+    0x0000,     /* R16077 */
+    0x0000,     /* R16078 */
+    0x0000,     /* R16079 */
+    0x0000,     /* R16080 */
+    0x0000,     /* R16081 */
+    0x0000,     /* R16082 */
+    0x0000,     /* R16083 */
+    0x0000,     /* R16084 */
+    0x0000,     /* R16085 */
+    0x0000,     /* R16086 */
+    0x0000,     /* R16087 */
+    0x0000,     /* R16088 */
+    0x0000,     /* R16089 */
+    0x0000,     /* R16090 */
+    0x0000,     /* R16091 */
+    0x0000,     /* R16092 */
+    0x0000,     /* R16093 */
+    0x0000,     /* R16094 */
+    0x0000,     /* R16095 */
+    0x0000,     /* R16096 */
+    0x0000,     /* R16097 */
+    0x0000,     /* R16098 */
+    0x0000,     /* R16099 */
+    0x0000,     /* R16100 */
+    0x0000,     /* R16101 */
+    0x0000,     /* R16102 */
+    0x0000,     /* R16103 */
+    0x0000,     /* R16104 */
+    0x0000,     /* R16105 */
+    0x0000,     /* R16106 */
+    0x0000,     /* R16107 */
+    0x0000,     /* R16108 */
+    0x0000,     /* R16109 */
+    0x0000,     /* R16110 */
+    0x0000,     /* R16111 */
+    0x0000,     /* R16112 */
+    0x0000,     /* R16113 */
+    0x0000,     /* R16114 */
+    0x0000,     /* R16115 */
+    0x0000,     /* R16116 */
+    0x0000,     /* R16117 */
+    0x0000,     /* R16118 */
+    0x0000,     /* R16119 */
+    0x0000,     /* R16120 */
+    0x0000,     /* R16121 */
+    0x0000,     /* R16122 */
+    0x0000,     /* R16123 */
+    0x0000,     /* R16124 */
+    0x0000,     /* R16125 */
+    0x0000,     /* R16126 */
+    0x0000,     /* R16127 */
+    0x0000,     /* R16128 */
+    0x0000,     /* R16129 */
+    0x0000,     /* R16130 */
+    0x0000,     /* R16131 */
+    0x0000,     /* R16132 */
+    0x0000,     /* R16133 */
+    0x0000,     /* R16134 */
+    0x0000,     /* R16135 */
+    0x0000,     /* R16136 */
+    0x0000,     /* R16137 */
+    0x0000,     /* R16138 */
+    0x0000,     /* R16139 */
+    0x0000,     /* R16140 */
+    0x0000,     /* R16141 */
+    0x0000,     /* R16142 */
+    0x0000,     /* R16143 */
+    0x0000,     /* R16144 */
+    0x0000,     /* R16145 */
+    0x0000,     /* R16146 */
+    0x0000,     /* R16147 */
+    0x0000,     /* R16148 */
+    0x0000,     /* R16149 */
+    0x0000,     /* R16150 */
+    0x0000,     /* R16151 */
+    0x0000,     /* R16152 */
+    0x0000,     /* R16153 */
+    0x0000,     /* R16154 */
+    0x0000,     /* R16155 */
+    0x0000,     /* R16156 */
+    0x0000,     /* R16157 */
+    0x0000,     /* R16158 */
+    0x0000,     /* R16159 */
+    0x0000,     /* R16160 */
+    0x0000,     /* R16161 */
+    0x0000,     /* R16162 */
+    0x0000,     /* R16163 */
+    0x0000,     /* R16164 */
+    0x0000,     /* R16165 */
+    0x0000,     /* R16166 */
+    0x0000,     /* R16167 */
+    0x0000,     /* R16168 */
+    0x0000,     /* R16169 */
+    0x0000,     /* R16170 */
+    0x0000,     /* R16171 */
+    0x0000,     /* R16172 */
+    0x0000,     /* R16173 */
+    0x0000,     /* R16174 */
+    0x0000,     /* R16175 */
+    0x0000,     /* R16176 */
+    0x0000,     /* R16177 */
+    0x0000,     /* R16178 */
+    0x0000,     /* R16179 */
+    0x0000,     /* R16180 */
+    0x0000,     /* R16181 */
+    0x0000,     /* R16182 */
+    0x0000,     /* R16183 */
+    0x0000,     /* R16184 */
+    0x0000,     /* R16185 */
+    0x0000,     /* R16186 */
+    0x0000,     /* R16187 */
+    0x0000,     /* R16188 */
+    0x0000,     /* R16189 */
+    0x0000,     /* R16190 */
+    0x0000,     /* R16191 */
+    0x0000,     /* R16192 */
+    0x0000,     /* R16193 */
+    0x0000,     /* R16194 */
+    0x0000,     /* R16195 */
+    0x0000,     /* R16196 */
+    0x0000,     /* R16197 */
+    0x0000,     /* R16198 */
+    0x0000,     /* R16199 */
+    0x0000,     /* R16200 */
+    0x0000,     /* R16201 */
+    0x0000,     /* R16202 */
+    0x0000,     /* R16203 */
+    0x0000,     /* R16204 */
+    0x0000,     /* R16205 */
+    0x0000,     /* R16206 */
+    0x0000,     /* R16207 */
+    0x0000,     /* R16208 */
+    0x0000,     /* R16209 */
+    0x0000,     /* R16210 */
+    0x0000,     /* R16211 */
+    0x0000,     /* R16212 */
+    0x0000,     /* R16213 */
+    0x0000,     /* R16214 */
+    0x0000,     /* R16215 */
+    0x0000,     /* R16216 */
+    0x0000,     /* R16217 */
+    0x0000,     /* R16218 */
+    0x0000,     /* R16219 */
+    0x0000,     /* R16220 */
+    0x0000,     /* R16221 */
+    0x0000,     /* R16222 */
+    0x0000,     /* R16223 */
+    0x0000,     /* R16224 */
+    0x0000,     /* R16225 */
+    0x0000,     /* R16226 */
+    0x0000,     /* R16227 */
+    0x0000,     /* R16228 */
+    0x0000,     /* R16229 */
+    0x0000,     /* R16230 */
+    0x0000,     /* R16231 */
+    0x0000,     /* R16232 */
+    0x0000,     /* R16233 */
+    0x0000,     /* R16234 */
+    0x0000,     /* R16235 */
+    0x0000,     /* R16236 */
+    0x0000,     /* R16237 */
+    0x0000,     /* R16238 */
+    0x0000,     /* R16239 */
+    0x0000,     /* R16240 */
+    0x0000,     /* R16241 */
+    0x0000,     /* R16242 */
+    0x0000,     /* R16243 */
+    0x0000,     /* R16244 */
+    0x0000,     /* R16245 */
+    0x0000,     /* R16246 */
+    0x0000,     /* R16247 */
+    0x0000,     /* R16248 */
+    0x0000,     /* R16249 */
+    0x0000,     /* R16250 */
+    0x0000,     /* R16251 */
+    0x0000,     /* R16252 */
+    0x0000,     /* R16253 */
+    0x0000,     /* R16254 */
+    0x0000,     /* R16255 */
+    0x0000,     /* R16256 */
+    0x0000,     /* R16257 */
+    0x0000,     /* R16258 */
+    0x0000,     /* R16259 */
+    0x0000,     /* R16260 */
+    0x0000,     /* R16261 */
+    0x0000,     /* R16262 */
+    0x0000,     /* R16263 */
+    0x0000,     /* R16264 */
+    0x0000,     /* R16265 */
+    0x0000,     /* R16266 */
+    0x0000,     /* R16267 */
+    0x0000,     /* R16268 */
+    0x0000,     /* R16269 */
+    0x0000,     /* R16270 */
+    0x0000,     /* R16271 */
+    0x0000,     /* R16272 */
+    0x0000,     /* R16273 */
+    0x0000,     /* R16274 */
+    0x0000,     /* R16275 */
+    0x0000,     /* R16276 */
+    0x0000,     /* R16277 */
+    0x0000,     /* R16278 */
+    0x0000,     /* R16279 */
+    0x0000,     /* R16280 */
+    0x0000,     /* R16281 */
+    0x0000,     /* R16282 */
+    0x0000,     /* R16283 */
+    0x0000,     /* R16284 */
+    0x0000,     /* R16285 */
+    0x0000,     /* R16286 */
+    0x0000,     /* R16287 */
+    0x0000,     /* R16288 */
+    0x0000,     /* R16289 */
+    0x0000,     /* R16290 */
+    0x0000,     /* R16291 */
+    0x0000,     /* R16292 */
+    0x0000,     /* R16293 */
+    0x0000,     /* R16294 */
+    0x0000,     /* R16295 */
+    0x0000,     /* R16296 */
+    0x0000,     /* R16297 */
+    0x0000,     /* R16298 */
+    0x0000,     /* R16299 */
+    0x0000,     /* R16300 */
+    0x0000,     /* R16301 */
+    0x0000,     /* R16302 */
+    0x0000,     /* R16303 */
+    0x0000,     /* R16304 */
+    0x0000,     /* R16305 */
+    0x0000,     /* R16306 */
+    0x0000,     /* R16307 */
+    0x0000,     /* R16308 */
+    0x0000,     /* R16309 */
+    0x0000,     /* R16310 */
+    0x0000,     /* R16311 */
+    0x0000,     /* R16312 */
+    0x0000,     /* R16313 */
+    0x0000,     /* R16314 */
+    0x0000,     /* R16315 */
+    0x0000,     /* R16316 */
+    0x0000,     /* R16317 */
+    0x0000,     /* R16318 */
+    0x0000,     /* R16319 */
+    0x0000,     /* R16320 */
+    0x0000,     /* R16321 */
+    0x0000,     /* R16322 */
+    0x0000,     /* R16323 */
+    0x0000,     /* R16324 */
+    0x0000,     /* R16325 */
+    0x0000,     /* R16326 */
+    0x0000,     /* R16327 */
+    0x0000,     /* R16328 */
+    0x0000,     /* R16329 */
+    0x0000,     /* R16330 */
+    0x0000,     /* R16331 */
+    0x0000,     /* R16332 */
+    0x0000,     /* R16333 */
+    0x0000,     /* R16334 */
+    0x0000,     /* R16335 */
+    0x0000,     /* R16336 */
+    0x0000,     /* R16337 */
+    0x0000,     /* R16338 */
+    0x0000,     /* R16339 */
+    0x0000,     /* R16340 */
+    0x0000,     /* R16341 */
+    0x0000,     /* R16342 */
+    0x0000,     /* R16343 */
+    0x0000,     /* R16344 */
+    0x0000,     /* R16345 */
+    0x0000,     /* R16346 */
+    0x0000,     /* R16347 */
+    0x0000,     /* R16348 */
+    0x0000,     /* R16349 */
+    0x0000,     /* R16350 */
+    0x0000,     /* R16351 */
+    0x0000,     /* R16352 */
+    0x0000,     /* R16353 */
+    0x0000,     /* R16354 */
+    0x0000,     /* R16355 */
+    0x0000,     /* R16356 */
+    0x0000,     /* R16357 */
+    0x0000,     /* R16358 */
+    0x0000,     /* R16359 */
+    0x0000,     /* R16360 */
+    0x0000,     /* R16361 */
+    0x0000,     /* R16362 */
+    0x0000,     /* R16363 */
+    0x0000,     /* R16364 */
+    0x0000,     /* R16365 */
+    0x0000,     /* R16366 */
+    0x0000,     /* R16367 */
+    0x0000,     /* R16368 */
+    0x0000,     /* R16369 */
+    0x0000,     /* R16370 */
+    0x0000,     /* R16371 */
+    0x0000,     /* R16372 */
+    0x0000,     /* R16373 */
+    0x0000,     /* R16374 */
+    0x0000,     /* R16375 */
+    0x0000,     /* R16376 */
+    0x0000,     /* R16377 */
+    0x0000,     /* R16378 */
+    0x0000,     /* R16379 */
+    0x0000,     /* R16380 */
+    0x0000,     /* R16381 */
+    0x0000,     /* R16382 */
+    0x0000,     /* R16383 */
+    0x0000,     /* R16384 - RETUNEADC_SHARED_COEFF_1 */
+    0x0000,     /* R16385 - RETUNEADC_SHARED_COEFF_0 */
+    0x0000,     /* R16386 - RETUNEDAC_SHARED_COEFF_1 */
+    0x0000,     /* R16387 - RETUNEDAC_SHARED_COEFF_0 */
+    0x0000,     /* R16388 - SOUNDSTAGE_ENABLES_1 */
+    0x0000,     /* R16389 - SOUNDSTAGE_ENABLES_0 */
+    0x0000,     /* R16390 */
+    0x0000,     /* R16391 */
+    0x0000,     /* R16392 */
+    0x0000,     /* R16393 */
+    0x0000,     /* R16394 */
+    0x0000,     /* R16395 */
+    0x0000,     /* R16396 */
+    0x0000,     /* R16397 */
+    0x0000,     /* R16398 */
+    0x0000,     /* R16399 */
+    0x0000,     /* R16400 */
+    0x0000,     /* R16401 */
+    0x0000,     /* R16402 */
+    0x0000,     /* R16403 */
+    0x0000,     /* R16404 */
+    0x0000,     /* R16405 */
+    0x0000,     /* R16406 */
+    0x0000,     /* R16407 */
+    0x0000,     /* R16408 */
+    0x0000,     /* R16409 */
+    0x0000,     /* R16410 */
+    0x0000,     /* R16411 */
+    0x0000,     /* R16412 */
+    0x0000,     /* R16413 */
+    0x0000,     /* R16414 */
+    0x0000,     /* R16415 */
+    0x0000,     /* R16416 */
+    0x0000,     /* R16417 */
+    0x0000,     /* R16418 */
+    0x0000,     /* R16419 */
+    0x0000,     /* R16420 */
+    0x0000,     /* R16421 */
+    0x0000,     /* R16422 */
+    0x0000,     /* R16423 */
+    0x0000,     /* R16424 */
+    0x0000,     /* R16425 */
+    0x0000,     /* R16426 */
+    0x0000,     /* R16427 */
+    0x0000,     /* R16428 */
+    0x0000,     /* R16429 */
+    0x0000,     /* R16430 */
+    0x0000,     /* R16431 */
+    0x0000,     /* R16432 */
+    0x0000,     /* R16433 */
+    0x0000,     /* R16434 */
+    0x0000,     /* R16435 */
+    0x0000,     /* R16436 */
+    0x0000,     /* R16437 */
+    0x0000,     /* R16438 */
+    0x0000,     /* R16439 */
+    0x0000,     /* R16440 */
+    0x0000,     /* R16441 */
+    0x0000,     /* R16442 */
+    0x0000,     /* R16443 */
+    0x0000,     /* R16444 */
+    0x0000,     /* R16445 */
+    0x0000,     /* R16446 */
+    0x0000,     /* R16447 */
+    0x0000,     /* R16448 */
+    0x0000,     /* R16449 */
+    0x0000,     /* R16450 */
+    0x0000,     /* R16451 */
+    0x0000,     /* R16452 */
+    0x0000,     /* R16453 */
+    0x0000,     /* R16454 */
+    0x0000,     /* R16455 */
+    0x0000,     /* R16456 */
+    0x0000,     /* R16457 */
+    0x0000,     /* R16458 */
+    0x0000,     /* R16459 */
+    0x0000,     /* R16460 */
+    0x0000,     /* R16461 */
+    0x0000,     /* R16462 */
+    0x0000,     /* R16463 */
+    0x0000,     /* R16464 */
+    0x0000,     /* R16465 */
+    0x0000,     /* R16466 */
+    0x0000,     /* R16467 */
+    0x0000,     /* R16468 */
+    0x0000,     /* R16469 */
+    0x0000,     /* R16470 */
+    0x0000,     /* R16471 */
+    0x0000,     /* R16472 */
+    0x0000,     /* R16473 */
+    0x0000,     /* R16474 */
+    0x0000,     /* R16475 */
+    0x0000,     /* R16476 */
+    0x0000,     /* R16477 */
+    0x0000,     /* R16478 */
+    0x0000,     /* R16479 */
+    0x0000,     /* R16480 */
+    0x0000,     /* R16481 */
+    0x0000,     /* R16482 */
+    0x0000,     /* R16483 */
+    0x0000,     /* R16484 */
+    0x0000,     /* R16485 */
+    0x0000,     /* R16486 */
+    0x0000,     /* R16487 */
+    0x0000,     /* R16488 */
+    0x0000,     /* R16489 */
+    0x0000,     /* R16490 */
+    0x0000,     /* R16491 */
+    0x0000,     /* R16492 */
+    0x0000,     /* R16493 */
+    0x0000,     /* R16494 */
+    0x0000,     /* R16495 */
+    0x0000,     /* R16496 */
+    0x0000,     /* R16497 */
+    0x0000,     /* R16498 */
+    0x0000,     /* R16499 */
+    0x0000,     /* R16500 */
+    0x0000,     /* R16501 */
+    0x0000,     /* R16502 */
+    0x0000,     /* R16503 */
+    0x0000,     /* R16504 */
+    0x0000,     /* R16505 */
+    0x0000,     /* R16506 */
+    0x0000,     /* R16507 */
+    0x0000,     /* R16508 */
+    0x0000,     /* R16509 */
+    0x0000,     /* R16510 */
+    0x0000,     /* R16511 */
+    0x0000,     /* R16512 */
+    0x0000,     /* R16513 */
+    0x0000,     /* R16514 */
+    0x0000,     /* R16515 */
+    0x0000,     /* R16516 */
+    0x0000,     /* R16517 */
+    0x0000,     /* R16518 */
+    0x0000,     /* R16519 */
+    0x0000,     /* R16520 */
+    0x0000,     /* R16521 */
+    0x0000,     /* R16522 */
+    0x0000,     /* R16523 */
+    0x0000,     /* R16524 */
+    0x0000,     /* R16525 */
+    0x0000,     /* R16526 */
+    0x0000,     /* R16527 */
+    0x0000,     /* R16528 */
+    0x0000,     /* R16529 */
+    0x0000,     /* R16530 */
+    0x0000,     /* R16531 */
+    0x0000,     /* R16532 */
+    0x0000,     /* R16533 */
+    0x0000,     /* R16534 */
+    0x0000,     /* R16535 */
+    0x0000,     /* R16536 */
+    0x0000,     /* R16537 */
+    0x0000,     /* R16538 */
+    0x0000,     /* R16539 */
+    0x0000,     /* R16540 */
+    0x0000,     /* R16541 */
+    0x0000,     /* R16542 */
+    0x0000,     /* R16543 */
+    0x0000,     /* R16544 */
+    0x0000,     /* R16545 */
+    0x0000,     /* R16546 */
+    0x0000,     /* R16547 */
+    0x0000,     /* R16548 */
+    0x0000,     /* R16549 */
+    0x0000,     /* R16550 */
+    0x0000,     /* R16551 */
+    0x0000,     /* R16552 */
+    0x0000,     /* R16553 */
+    0x0000,     /* R16554 */
+    0x0000,     /* R16555 */
+    0x0000,     /* R16556 */
+    0x0000,     /* R16557 */
+    0x0000,     /* R16558 */
+    0x0000,     /* R16559 */
+    0x0000,     /* R16560 */
+    0x0000,     /* R16561 */
+    0x0000,     /* R16562 */
+    0x0000,     /* R16563 */
+    0x0000,     /* R16564 */
+    0x0000,     /* R16565 */
+    0x0000,     /* R16566 */
+    0x0000,     /* R16567 */
+    0x0000,     /* R16568 */
+    0x0000,     /* R16569 */
+    0x0000,     /* R16570 */
+    0x0000,     /* R16571 */
+    0x0000,     /* R16572 */
+    0x0000,     /* R16573 */
+    0x0000,     /* R16574 */
+    0x0000,     /* R16575 */
+    0x0000,     /* R16576 */
+    0x0000,     /* R16577 */
+    0x0000,     /* R16578 */
+    0x0000,     /* R16579 */
+    0x0000,     /* R16580 */
+    0x0000,     /* R16581 */
+    0x0000,     /* R16582 */
+    0x0000,     /* R16583 */
+    0x0000,     /* R16584 */
+    0x0000,     /* R16585 */
+    0x0000,     /* R16586 */
+    0x0000,     /* R16587 */
+    0x0000,     /* R16588 */
+    0x0000,     /* R16589 */
+    0x0000,     /* R16590 */
+    0x0000,     /* R16591 */
+    0x0000,     /* R16592 */
+    0x0000,     /* R16593 */
+    0x0000,     /* R16594 */
+    0x0000,     /* R16595 */
+    0x0000,     /* R16596 */
+    0x0000,     /* R16597 */
+    0x0000,     /* R16598 */
+    0x0000,     /* R16599 */
+    0x0000,     /* R16600 */
+    0x0000,     /* R16601 */
+    0x0000,     /* R16602 */
+    0x0000,     /* R16603 */
+    0x0000,     /* R16604 */
+    0x0000,     /* R16605 */
+    0x0000,     /* R16606 */
+    0x0000,     /* R16607 */
+    0x0000,     /* R16608 */
+    0x0000,     /* R16609 */
+    0x0000,     /* R16610 */
+    0x0000,     /* R16611 */
+    0x0000,     /* R16612 */
+    0x0000,     /* R16613 */
+    0x0000,     /* R16614 */
+    0x0000,     /* R16615 */
+    0x0000,     /* R16616 */
+    0x0000,     /* R16617 */
+    0x0000,     /* R16618 */
+    0x0000,     /* R16619 */
+    0x0000,     /* R16620 */
+    0x0000,     /* R16621 */
+    0x0000,     /* R16622 */
+    0x0000,     /* R16623 */
+    0x0000,     /* R16624 */
+    0x0000,     /* R16625 */
+    0x0000,     /* R16626 */
+    0x0000,     /* R16627 */
+    0x0000,     /* R16628 */
+    0x0000,     /* R16629 */
+    0x0000,     /* R16630 */
+    0x0000,     /* R16631 */
+    0x0000,     /* R16632 */
+    0x0000,     /* R16633 */
+    0x0000,     /* R16634 */
+    0x0000,     /* R16635 */
+    0x0000,     /* R16636 */
+    0x0000,     /* R16637 */
+    0x0000,     /* R16638 */
+    0x0000,     /* R16639 */
+    0x0000,     /* R16640 */
+    0x0000,     /* R16641 */
+    0x0000,     /* R16642 */
+    0x0000,     /* R16643 */
+    0x0000,     /* R16644 */
+    0x0000,     /* R16645 */
+    0x0000,     /* R16646 */
+    0x0000,     /* R16647 */
+    0x0000,     /* R16648 */
+    0x0000,     /* R16649 */
+    0x0000,     /* R16650 */
+    0x0000,     /* R16651 */
+    0x0000,     /* R16652 */
+    0x0000,     /* R16653 */
+    0x0000,     /* R16654 */
+    0x0000,     /* R16655 */
+    0x0000,     /* R16656 */
+    0x0000,     /* R16657 */
+    0x0000,     /* R16658 */
+    0x0000,     /* R16659 */
+    0x0000,     /* R16660 */
+    0x0000,     /* R16661 */
+    0x0000,     /* R16662 */
+    0x0000,     /* R16663 */
+    0x0000,     /* R16664 */
+    0x0000,     /* R16665 */
+    0x0000,     /* R16666 */
+    0x0000,     /* R16667 */
+    0x0000,     /* R16668 */
+    0x0000,     /* R16669 */
+    0x0000,     /* R16670 */
+    0x0000,     /* R16671 */
+    0x0000,     /* R16672 */
+    0x0000,     /* R16673 */
+    0x0000,     /* R16674 */
+    0x0000,     /* R16675 */
+    0x0000,     /* R16676 */
+    0x0000,     /* R16677 */
+    0x0000,     /* R16678 */
+    0x0000,     /* R16679 */
+    0x0000,     /* R16680 */
+    0x0000,     /* R16681 */
+    0x0000,     /* R16682 */
+    0x0000,     /* R16683 */
+    0x0000,     /* R16684 */
+    0x0000,     /* R16685 */
+    0x0000,     /* R16686 */
+    0x0000,     /* R16687 */
+    0x0000,     /* R16688 */
+    0x0000,     /* R16689 */
+    0x0000,     /* R16690 */
+    0x0000,     /* R16691 */
+    0x0000,     /* R16692 */
+    0x0000,     /* R16693 */
+    0x0000,     /* R16694 */
+    0x0000,     /* R16695 */
+    0x0000,     /* R16696 */
+    0x0000,     /* R16697 */
+    0x0000,     /* R16698 */
+    0x0000,     /* R16699 */
+    0x0000,     /* R16700 */
+    0x0000,     /* R16701 */
+    0x0000,     /* R16702 */
+    0x0000,     /* R16703 */
+    0x0000,     /* R16704 */
+    0x0000,     /* R16705 */
+    0x0000,     /* R16706 */
+    0x0000,     /* R16707 */
+    0x0000,     /* R16708 */
+    0x0000,     /* R16709 */
+    0x0000,     /* R16710 */
+    0x0000,     /* R16711 */
+    0x0000,     /* R16712 */
+    0x0000,     /* R16713 */
+    0x0000,     /* R16714 */
+    0x0000,     /* R16715 */
+    0x0000,     /* R16716 */
+    0x0000,     /* R16717 */
+    0x0000,     /* R16718 */
+    0x0000,     /* R16719 */
+    0x0000,     /* R16720 */
+    0x0000,     /* R16721 */
+    0x0000,     /* R16722 */
+    0x0000,     /* R16723 */
+    0x0000,     /* R16724 */
+    0x0000,     /* R16725 */
+    0x0000,     /* R16726 */
+    0x0000,     /* R16727 */
+    0x0000,     /* R16728 */
+    0x0000,     /* R16729 */
+    0x0000,     /* R16730 */
+    0x0000,     /* R16731 */
+    0x0000,     /* R16732 */
+    0x0000,     /* R16733 */
+    0x0000,     /* R16734 */
+    0x0000,     /* R16735 */
+    0x0000,     /* R16736 */
+    0x0000,     /* R16737 */
+    0x0000,     /* R16738 */
+    0x0000,     /* R16739 */
+    0x0000,     /* R16740 */
+    0x0000,     /* R16741 */
+    0x0000,     /* R16742 */
+    0x0000,     /* R16743 */
+    0x0000,     /* R16744 */
+    0x0000,     /* R16745 */
+    0x0000,     /* R16746 */
+    0x0000,     /* R16747 */
+    0x0000,     /* R16748 */
+    0x0000,     /* R16749 */
+    0x0000,     /* R16750 */
+    0x0000,     /* R16751 */
+    0x0000,     /* R16752 */
+    0x0000,     /* R16753 */
+    0x0000,     /* R16754 */
+    0x0000,     /* R16755 */
+    0x0000,     /* R16756 */
+    0x0000,     /* R16757 */
+    0x0000,     /* R16758 */
+    0x0000,     /* R16759 */
+    0x0000,     /* R16760 */
+    0x0000,     /* R16761 */
+    0x0000,     /* R16762 */
+    0x0000,     /* R16763 */
+    0x0000,     /* R16764 */
+    0x0000,     /* R16765 */
+    0x0000,     /* R16766 */
+    0x0000,     /* R16767 */
+    0x0000,     /* R16768 */
+    0x0000,     /* R16769 */
+    0x0000,     /* R16770 */
+    0x0000,     /* R16771 */
+    0x0000,     /* R16772 */
+    0x0000,     /* R16773 */
+    0x0000,     /* R16774 */
+    0x0000,     /* R16775 */
+    0x0000,     /* R16776 */
+    0x0000,     /* R16777 */
+    0x0000,     /* R16778 */
+    0x0000,     /* R16779 */
+    0x0000,     /* R16780 */
+    0x0000,     /* R16781 */
+    0x0000,     /* R16782 */
+    0x0000,     /* R16783 */
+    0x0000,     /* R16784 */
+    0x0000,     /* R16785 */
+    0x0000,     /* R16786 */
+    0x0000,     /* R16787 */
+    0x0000,     /* R16788 */
+    0x0000,     /* R16789 */
+    0x0000,     /* R16790 */
+    0x0000,     /* R16791 */
+    0x0000,     /* R16792 */
+    0x0000,     /* R16793 */
+    0x0000,     /* R16794 */
+    0x0000,     /* R16795 */
+    0x0000,     /* R16796 */
+    0x0000,     /* R16797 */
+    0x0000,     /* R16798 */
+    0x0000,     /* R16799 */
+    0x0000,     /* R16800 */
+    0x0000,     /* R16801 */
+    0x0000,     /* R16802 */
+    0x0000,     /* R16803 */
+    0x0000,     /* R16804 */
+    0x0000,     /* R16805 */
+    0x0000,     /* R16806 */
+    0x0000,     /* R16807 */
+    0x0000,     /* R16808 */
+    0x0000,     /* R16809 */
+    0x0000,     /* R16810 */
+    0x0000,     /* R16811 */
+    0x0000,     /* R16812 */
+    0x0000,     /* R16813 */
+    0x0000,     /* R16814 */
+    0x0000,     /* R16815 */
+    0x0000,     /* R16816 */
+    0x0000,     /* R16817 */
+    0x0000,     /* R16818 */
+    0x0000,     /* R16819 */
+    0x0000,     /* R16820 */
+    0x0000,     /* R16821 */
+    0x0000,     /* R16822 */
+    0x0000,     /* R16823 */
+    0x0000,     /* R16824 */
+    0x0000,     /* R16825 */
+    0x0000,     /* R16826 */
+    0x0000,     /* R16827 */
+    0x0000,     /* R16828 */
+    0x0000,     /* R16829 */
+    0x0000,     /* R16830 */
+    0x0000,     /* R16831 */
+    0x0000,     /* R16832 */
+    0x0000,     /* R16833 */
+    0x0000,     /* R16834 */
+    0x0000,     /* R16835 */
+    0x0000,     /* R16836 */
+    0x0000,     /* R16837 */
+    0x0000,     /* R16838 */
+    0x0000,     /* R16839 */
+    0x0000,     /* R16840 */
+    0x0000,     /* R16841 */
+    0x0000,     /* R16842 */
+    0x0000,     /* R16843 */
+    0x0000,     /* R16844 */
+    0x0000,     /* R16845 */
+    0x0000,     /* R16846 */
+    0x0000,     /* R16847 */
+    0x0000,     /* R16848 */
+    0x0000,     /* R16849 */
+    0x0000,     /* R16850 */
+    0x0000,     /* R16851 */
+    0x0000,     /* R16852 */
+    0x0000,     /* R16853 */
+    0x0000,     /* R16854 */
+    0x0000,     /* R16855 */
+    0x0000,     /* R16856 */
+    0x0000,     /* R16857 */
+    0x0000,     /* R16858 */
+    0x0000,     /* R16859 */
+    0x0000,     /* R16860 */
+    0x0000,     /* R16861 */
+    0x0000,     /* R16862 */
+    0x0000,     /* R16863 */
+    0x0000,     /* R16864 */
+    0x0000,     /* R16865 */
+    0x0000,     /* R16866 */
+    0x0000,     /* R16867 */
+    0x0000,     /* R16868 */
+    0x0000,     /* R16869 */
+    0x0000,     /* R16870 */
+    0x0000,     /* R16871 */
+    0x0000,     /* R16872 */
+    0x0000,     /* R16873 */
+    0x0000,     /* R16874 */
+    0x0000,     /* R16875 */
+    0x0000,     /* R16876 */
+    0x0000,     /* R16877 */
+    0x0000,     /* R16878 */
+    0x0000,     /* R16879 */
+    0x0000,     /* R16880 */
+    0x0000,     /* R16881 */
+    0x0000,     /* R16882 */
+    0x0000,     /* R16883 */
+    0x0000,     /* R16884 */
+    0x0000,     /* R16885 */
+    0x0000,     /* R16886 */
+    0x0000,     /* R16887 */
+    0x0000,     /* R16888 */
+    0x0000,     /* R16889 */
+    0x0000,     /* R16890 */
+    0x0000,     /* R16891 */
+    0x0000,     /* R16892 */
+    0x0000,     /* R16893 */
+    0x0000,     /* R16894 */
+    0x0000,     /* R16895 */
+    0x0002,     /* R16896 - HDBASS_AI_1 */
+    0xBD12,     /* R16897 - HDBASS_AI_0 */
+    0x007C,     /* R16898 - HDBASS_AR_1 */
+    0x586C,     /* R16899 - HDBASS_AR_0 */
+    0x0053,     /* R16900 - HDBASS_B_1 */
+    0x8121,     /* R16901 - HDBASS_B_0 */
+    0x003F,     /* R16902 - HDBASS_K_1 */
+    0x8BD8,     /* R16903 - HDBASS_K_0 */
+    0x0032,     /* R16904 - HDBASS_N1_1 */
+    0xF52D,     /* R16905 - HDBASS_N1_0 */
+    0x0065,     /* R16906 - HDBASS_N2_1 */
+    0xAC8C,     /* R16907 - HDBASS_N2_0 */
+    0x006B,     /* R16908 - HDBASS_N3_1 */
+    0xE087,     /* R16909 - HDBASS_N3_0 */
+    0x0072,     /* R16910 - HDBASS_N4_1 */
+    0x1483,     /* R16911 - HDBASS_N4_0 */
+    0x0072,     /* R16912 - HDBASS_N5_1 */
+    0x1483,     /* R16913 - HDBASS_N5_0 */
+    0x0043,     /* R16914 - HDBASS_X1_1 */
+    0x3525,     /* R16915 - HDBASS_X1_0 */
+    0x0006,     /* R16916 - HDBASS_X2_1 */
+    0x6A4A,     /* R16917 - HDBASS_X2_0 */
+    0x0043,     /* R16918 - HDBASS_X3_1 */
+    0x6079,     /* R16919 - HDBASS_X3_0 */
+    0x0008,     /* R16920 - HDBASS_ATK_1 */
+    0x0000,     /* R16921 - HDBASS_ATK_0 */
+    0x0001,     /* R16922 - HDBASS_DCY_1 */
+    0x0000,     /* R16923 - HDBASS_DCY_0 */
+    0x0059,     /* R16924 - HDBASS_PG_1 */
+    0x999A,     /* R16925 - HDBASS_PG_0 */
+    0x0000,     /* R16926 */
+    0x0000,     /* R16927 */
+    0x0000,     /* R16928 */
+    0x0000,     /* R16929 */
+    0x0000,     /* R16930 */
+    0x0000,     /* R16931 */
+    0x0000,     /* R16932 */
+    0x0000,     /* R16933 */
+    0x0000,     /* R16934 */
+    0x0000,     /* R16935 */
+    0x0000,     /* R16936 */
+    0x0000,     /* R16937 */
+    0x0000,     /* R16938 */
+    0x0000,     /* R16939 */
+    0x0000,     /* R16940 */
+    0x0000,     /* R16941 */
+    0x0000,     /* R16942 */
+    0x0000,     /* R16943 */
+    0x0000,     /* R16944 */
+    0x0000,     /* R16945 */
+    0x0000,     /* R16946 */
+    0x0000,     /* R16947 */
+    0x0000,     /* R16948 */
+    0x0000,     /* R16949 */
+    0x0000,     /* R16950 */
+    0x0000,     /* R16951 */
+    0x0000,     /* R16952 */
+    0x0000,     /* R16953 */
+    0x0000,     /* R16954 */
+    0x0000,     /* R16955 */
+    0x0000,     /* R16956 */
+    0x0000,     /* R16957 */
+    0x0000,     /* R16958 */
+    0x0000,     /* R16959 */
+    0x0000,     /* R16960 */
+    0x0000,     /* R16961 */
+    0x0000,     /* R16962 */
+    0x0000,     /* R16963 */
+    0x0000,     /* R16964 */
+    0x0000,     /* R16965 */
+    0x0000,     /* R16966 */
+    0x0000,     /* R16967 */
+    0x0000,     /* R16968 */
+    0x0000,     /* R16969 */
+    0x0000,     /* R16970 */
+    0x0000,     /* R16971 */
+    0x0000,     /* R16972 */
+    0x0000,     /* R16973 */
+    0x0000,     /* R16974 */
+    0x0000,     /* R16975 */
+    0x0000,     /* R16976 */
+    0x0000,     /* R16977 */
+    0x0000,     /* R16978 */
+    0x0000,     /* R16979 */
+    0x0000,     /* R16980 */
+    0x0000,     /* R16981 */
+    0x0000,     /* R16982 */
+    0x0000,     /* R16983 */
+    0x0000,     /* R16984 */
+    0x0000,     /* R16985 */
+    0x0000,     /* R16986 */
+    0x0000,     /* R16987 */
+    0x0000,     /* R16988 */
+    0x0000,     /* R16989 */
+    0x0000,     /* R16990 */
+    0x0000,     /* R16991 */
+    0x0000,     /* R16992 */
+    0x0000,     /* R16993 */
+    0x0000,     /* R16994 */
+    0x0000,     /* R16995 */
+    0x0000,     /* R16996 */
+    0x0000,     /* R16997 */
+    0x0000,     /* R16998 */
+    0x0000,     /* R16999 */
+    0x0000,     /* R17000 */
+    0x0000,     /* R17001 */
+    0x0000,     /* R17002 */
+    0x0000,     /* R17003 */
+    0x0000,     /* R17004 */
+    0x0000,     /* R17005 */
+    0x0000,     /* R17006 */
+    0x0000,     /* R17007 */
+    0x0000,     /* R17008 */
+    0x0000,     /* R17009 */
+    0x0000,     /* R17010 */
+    0x0000,     /* R17011 */
+    0x0000,     /* R17012 */
+    0x0000,     /* R17013 */
+    0x0000,     /* R17014 */
+    0x0000,     /* R17015 */
+    0x0000,     /* R17016 */
+    0x0000,     /* R17017 */
+    0x0000,     /* R17018 */
+    0x0000,     /* R17019 */
+    0x0000,     /* R17020 */
+    0x0000,     /* R17021 */
+    0x0000,     /* R17022 */
+    0x0000,     /* R17023 */
+    0x0000,     /* R17024 */
+    0x0000,     /* R17025 */
+    0x0000,     /* R17026 */
+    0x0000,     /* R17027 */
+    0x0000,     /* R17028 */
+    0x0000,     /* R17029 */
+    0x0000,     /* R17030 */
+    0x0000,     /* R17031 */
+    0x0000,     /* R17032 */
+    0x0000,     /* R17033 */
+    0x0000,     /* R17034 */
+    0x0000,     /* R17035 */
+    0x0000,     /* R17036 */
+    0x0000,     /* R17037 */
+    0x0000,     /* R17038 */
+    0x0000,     /* R17039 */
+    0x0000,     /* R17040 */
+    0x0000,     /* R17041 */
+    0x0000,     /* R17042 */
+    0x0000,     /* R17043 */
+    0x0000,     /* R17044 */
+    0x0000,     /* R17045 */
+    0x0000,     /* R17046 */
+    0x0000,     /* R17047 */
+    0x0000,     /* R17048 */
+    0x0000,     /* R17049 */
+    0x0000,     /* R17050 */
+    0x0000,     /* R17051 */
+    0x0000,     /* R17052 */
+    0x0000,     /* R17053 */
+    0x0000,     /* R17054 */
+    0x0000,     /* R17055 */
+    0x0000,     /* R17056 */
+    0x0000,     /* R17057 */
+    0x0000,     /* R17058 */
+    0x0000,     /* R17059 */
+    0x0000,     /* R17060 */
+    0x0000,     /* R17061 */
+    0x0000,     /* R17062 */
+    0x0000,     /* R17063 */
+    0x0000,     /* R17064 */
+    0x0000,     /* R17065 */
+    0x0000,     /* R17066 */
+    0x0000,     /* R17067 */
+    0x0000,     /* R17068 */
+    0x0000,     /* R17069 */
+    0x0000,     /* R17070 */
+    0x0000,     /* R17071 */
+    0x0000,     /* R17072 */
+    0x0000,     /* R17073 */
+    0x0000,     /* R17074 */
+    0x0000,     /* R17075 */
+    0x0000,     /* R17076 */
+    0x0000,     /* R17077 */
+    0x0000,     /* R17078 */
+    0x0000,     /* R17079 */
+    0x0000,     /* R17080 */
+    0x0000,     /* R17081 */
+    0x0000,     /* R17082 */
+    0x0000,     /* R17083 */
+    0x0000,     /* R17084 */
+    0x0000,     /* R17085 */
+    0x0000,     /* R17086 */
+    0x0000,     /* R17087 */
+    0x0000,     /* R17088 */
+    0x0000,     /* R17089 */
+    0x0000,     /* R17090 */
+    0x0000,     /* R17091 */
+    0x0000,     /* R17092 */
+    0x0000,     /* R17093 */
+    0x0000,     /* R17094 */
+    0x0000,     /* R17095 */
+    0x0000,     /* R17096 */
+    0x0000,     /* R17097 */
+    0x0000,     /* R17098 */
+    0x0000,     /* R17099 */
+    0x0000,     /* R17100 */
+    0x0000,     /* R17101 */
+    0x0000,     /* R17102 */
+    0x0000,     /* R17103 */
+    0x0000,     /* R17104 */
+    0x0000,     /* R17105 */
+    0x0000,     /* R17106 */
+    0x0000,     /* R17107 */
+    0x0000,     /* R17108 */
+    0x0000,     /* R17109 */
+    0x0000,     /* R17110 */
+    0x0000,     /* R17111 */
+    0x0000,     /* R17112 */
+    0x0000,     /* R17113 */
+    0x0000,     /* R17114 */
+    0x0000,     /* R17115 */
+    0x0000,     /* R17116 */
+    0x0000,     /* R17117 */
+    0x0000,     /* R17118 */
+    0x0000,     /* R17119 */
+    0x0000,     /* R17120 */
+    0x0000,     /* R17121 */
+    0x0000,     /* R17122 */
+    0x0000,     /* R17123 */
+    0x0000,     /* R17124 */
+    0x0000,     /* R17125 */
+    0x0000,     /* R17126 */
+    0x0000,     /* R17127 */
+    0x0000,     /* R17128 */
+    0x0000,     /* R17129 */
+    0x0000,     /* R17130 */
+    0x0000,     /* R17131 */
+    0x0000,     /* R17132 */
+    0x0000,     /* R17133 */
+    0x0000,     /* R17134 */
+    0x0000,     /* R17135 */
+    0x0000,     /* R17136 */
+    0x0000,     /* R17137 */
+    0x0000,     /* R17138 */
+    0x0000,     /* R17139 */
+    0x0000,     /* R17140 */
+    0x0000,     /* R17141 */
+    0x0000,     /* R17142 */
+    0x0000,     /* R17143 */
+    0x0000,     /* R17144 */
+    0x0000,     /* R17145 */
+    0x0000,     /* R17146 */
+    0x0000,     /* R17147 */
+    0x0000,     /* R17148 */
+    0x0000,     /* R17149 */
+    0x0000,     /* R17150 */
+    0x0000,     /* R17151 */
+    0x0000,     /* R17152 */
+    0x0000,     /* R17153 */
+    0x0000,     /* R17154 */
+    0x0000,     /* R17155 */
+    0x0000,     /* R17156 */
+    0x0000,     /* R17157 */
+    0x0000,     /* R17158 */
+    0x0000,     /* R17159 */
+    0x0000,     /* R17160 */
+    0x0000,     /* R17161 */
+    0x0000,     /* R17162 */
+    0x0000,     /* R17163 */
+    0x0000,     /* R17164 */
+    0x0000,     /* R17165 */
+    0x0000,     /* R17166 */
+    0x0000,     /* R17167 */
+    0x0000,     /* R17168 */
+    0x0000,     /* R17169 */
+    0x0000,     /* R17170 */
+    0x0000,     /* R17171 */
+    0x0000,     /* R17172 */
+    0x0000,     /* R17173 */
+    0x0000,     /* R17174 */
+    0x0000,     /* R17175 */
+    0x0000,     /* R17176 */
+    0x0000,     /* R17177 */
+    0x0000,     /* R17178 */
+    0x0000,     /* R17179 */
+    0x0000,     /* R17180 */
+    0x0000,     /* R17181 */
+    0x0000,     /* R17182 */
+    0x0000,     /* R17183 */
+    0x0000,     /* R17184 */
+    0x0000,     /* R17185 */
+    0x0000,     /* R17186 */
+    0x0000,     /* R17187 */
+    0x0000,     /* R17188 */
+    0x0000,     /* R17189 */
+    0x0000,     /* R17190 */
+    0x0000,     /* R17191 */
+    0x0000,     /* R17192 */
+    0x0000,     /* R17193 */
+    0x0000,     /* R17194 */
+    0x0000,     /* R17195 */
+    0x0000,     /* R17196 */
+    0x0000,     /* R17197 */
+    0x0000,     /* R17198 */
+    0x0000,     /* R17199 */
+    0x0000,     /* R17200 */
+    0x0000,     /* R17201 */
+    0x0000,     /* R17202 */
+    0x0000,     /* R17203 */
+    0x0000,     /* R17204 */
+    0x0000,     /* R17205 */
+    0x0000,     /* R17206 */
+    0x0000,     /* R17207 */
+    0x0000,     /* R17208 */
+    0x0000,     /* R17209 */
+    0x0000,     /* R17210 */
+    0x0000,     /* R17211 */
+    0x0000,     /* R17212 */
+    0x0000,     /* R17213 */
+    0x0000,     /* R17214 */
+    0x0000,     /* R17215 */
+    0x0000,     /* R17216 */
+    0x0000,     /* R17217 */
+    0x0000,     /* R17218 */
+    0x0000,     /* R17219 */
+    0x0000,     /* R17220 */
+    0x0000,     /* R17221 */
+    0x0000,     /* R17222 */
+    0x0000,     /* R17223 */
+    0x0000,     /* R17224 */
+    0x0000,     /* R17225 */
+    0x0000,     /* R17226 */
+    0x0000,     /* R17227 */
+    0x0000,     /* R17228 */
+    0x0000,     /* R17229 */
+    0x0000,     /* R17230 */
+    0x0000,     /* R17231 */
+    0x0000,     /* R17232 */
+    0x0000,     /* R17233 */
+    0x0000,     /* R17234 */
+    0x0000,     /* R17235 */
+    0x0000,     /* R17236 */
+    0x0000,     /* R17237 */
+    0x0000,     /* R17238 */
+    0x0000,     /* R17239 */
+    0x0000,     /* R17240 */
+    0x0000,     /* R17241 */
+    0x0000,     /* R17242 */
+    0x0000,     /* R17243 */
+    0x0000,     /* R17244 */
+    0x0000,     /* R17245 */
+    0x0000,     /* R17246 */
+    0x0000,     /* R17247 */
+    0x0000,     /* R17248 */
+    0x0000,     /* R17249 */
+    0x0000,     /* R17250 */
+    0x0000,     /* R17251 */
+    0x0000,     /* R17252 */
+    0x0000,     /* R17253 */
+    0x0000,     /* R17254 */
+    0x0000,     /* R17255 */
+    0x0000,     /* R17256 */
+    0x0000,     /* R17257 */
+    0x0000,     /* R17258 */
+    0x0000,     /* R17259 */
+    0x0000,     /* R17260 */
+    0x0000,     /* R17261 */
+    0x0000,     /* R17262 */
+    0x0000,     /* R17263 */
+    0x0000,     /* R17264 */
+    0x0000,     /* R17265 */
+    0x0000,     /* R17266 */
+    0x0000,     /* R17267 */
+    0x0000,     /* R17268 */
+    0x0000,     /* R17269 */
+    0x0000,     /* R17270 */
+    0x0000,     /* R17271 */
+    0x0000,     /* R17272 */
+    0x0000,     /* R17273 */
+    0x0000,     /* R17274 */
+    0x0000,     /* R17275 */
+    0x0000,     /* R17276 */
+    0x0000,     /* R17277 */
+    0x0000,     /* R17278 */
+    0x0000,     /* R17279 */
+    0x0000,     /* R17280 */
+    0x0000,     /* R17281 */
+    0x0000,     /* R17282 */
+    0x0000,     /* R17283 */
+    0x0000,     /* R17284 */
+    0x0000,     /* R17285 */
+    0x0000,     /* R17286 */
+    0x0000,     /* R17287 */
+    0x0000,     /* R17288 */
+    0x0000,     /* R17289 */
+    0x0000,     /* R17290 */
+    0x0000,     /* R17291 */
+    0x0000,     /* R17292 */
+    0x0000,     /* R17293 */
+    0x0000,     /* R17294 */
+    0x0000,     /* R17295 */
+    0x0000,     /* R17296 */
+    0x0000,     /* R17297 */
+    0x0000,     /* R17298 */
+    0x0000,     /* R17299 */
+    0x0000,     /* R17300 */
+    0x0000,     /* R17301 */
+    0x0000,     /* R17302 */
+    0x0000,     /* R17303 */
+    0x0000,     /* R17304 */
+    0x0000,     /* R17305 */
+    0x0000,     /* R17306 */
+    0x0000,     /* R17307 */
+    0x0000,     /* R17308 */
+    0x0000,     /* R17309 */
+    0x0000,     /* R17310 */
+    0x0000,     /* R17311 */
+    0x0000,     /* R17312 */
+    0x0000,     /* R17313 */
+    0x0000,     /* R17314 */
+    0x0000,     /* R17315 */
+    0x0000,     /* R17316 */
+    0x0000,     /* R17317 */
+    0x0000,     /* R17318 */
+    0x0000,     /* R17319 */
+    0x0000,     /* R17320 */
+    0x0000,     /* R17321 */
+    0x0000,     /* R17322 */
+    0x0000,     /* R17323 */
+    0x0000,     /* R17324 */
+    0x0000,     /* R17325 */
+    0x0000,     /* R17326 */
+    0x0000,     /* R17327 */
+    0x0000,     /* R17328 */
+    0x0000,     /* R17329 */
+    0x0000,     /* R17330 */
+    0x0000,     /* R17331 */
+    0x0000,     /* R17332 */
+    0x0000,     /* R17333 */
+    0x0000,     /* R17334 */
+    0x0000,     /* R17335 */
+    0x0000,     /* R17336 */
+    0x0000,     /* R17337 */
+    0x0000,     /* R17338 */
+    0x0000,     /* R17339 */
+    0x0000,     /* R17340 */
+    0x0000,     /* R17341 */
+    0x0000,     /* R17342 */
+    0x0000,     /* R17343 */
+    0x0000,     /* R17344 */
+    0x0000,     /* R17345 */
+    0x0000,     /* R17346 */
+    0x0000,     /* R17347 */
+    0x0000,     /* R17348 */
+    0x0000,     /* R17349 */
+    0x0000,     /* R17350 */
+    0x0000,     /* R17351 */
+    0x0000,     /* R17352 */
+    0x0000,     /* R17353 */
+    0x0000,     /* R17354 */
+    0x0000,     /* R17355 */
+    0x0000,     /* R17356 */
+    0x0000,     /* R17357 */
+    0x0000,     /* R17358 */
+    0x0000,     /* R17359 */
+    0x0000,     /* R17360 */
+    0x0000,     /* R17361 */
+    0x0000,     /* R17362 */
+    0x0000,     /* R17363 */
+    0x0000,     /* R17364 */
+    0x0000,     /* R17365 */
+    0x0000,     /* R17366 */
+    0x0000,     /* R17367 */
+    0x0000,     /* R17368 */
+    0x0000,     /* R17369 */
+    0x0000,     /* R17370 */
+    0x0000,     /* R17371 */
+    0x0000,     /* R17372 */
+    0x0000,     /* R17373 */
+    0x0000,     /* R17374 */
+    0x0000,     /* R17375 */
+    0x0000,     /* R17376 */
+    0x0000,     /* R17377 */
+    0x0000,     /* R17378 */
+    0x0000,     /* R17379 */
+    0x0000,     /* R17380 */
+    0x0000,     /* R17381 */
+    0x0000,     /* R17382 */
+    0x0000,     /* R17383 */
+    0x0000,     /* R17384 */
+    0x0000,     /* R17385 */
+    0x0000,     /* R17386 */
+    0x0000,     /* R17387 */
+    0x0000,     /* R17388 */
+    0x0000,     /* R17389 */
+    0x0000,     /* R17390 */
+    0x0000,     /* R17391 */
+    0x0000,     /* R17392 */
+    0x0000,     /* R17393 */
+    0x0000,     /* R17394 */
+    0x0000,     /* R17395 */
+    0x0000,     /* R17396 */
+    0x0000,     /* R17397 */
+    0x0000,     /* R17398 */
+    0x0000,     /* R17399 */
+    0x0000,     /* R17400 */
+    0x0000,     /* R17401 */
+    0x0000,     /* R17402 */
+    0x0000,     /* R17403 */
+    0x0000,     /* R17404 */
+    0x0000,     /* R17405 */
+    0x0000,     /* R17406 */
+    0x0000,     /* R17407 */
+    0x0083,     /* R17408 - HPF_C_1 */
+    0x98AD,     /* R17409 - HPF_C_0 */
+    0x0000,     /* R17410 */
+    0x0000,     /* R17411 */
+    0x0000,     /* R17412 */
+    0x0000,     /* R17413 */
+    0x0000,     /* R17414 */
+    0x0000,     /* R17415 */
+    0x0000,     /* R17416 */
+    0x0000,     /* R17417 */
+    0x0000,     /* R17418 */
+    0x0000,     /* R17419 */
+    0x0000,     /* R17420 */
+    0x0000,     /* R17421 */
+    0x0000,     /* R17422 */
+    0x0000,     /* R17423 */
+    0x0000,     /* R17424 */
+    0x0000,     /* R17425 */
+    0x0000,     /* R17426 */
+    0x0000,     /* R17427 */
+    0x0000,     /* R17428 */
+    0x0000,     /* R17429 */
+    0x0000,     /* R17430 */
+    0x0000,     /* R17431 */
+    0x0000,     /* R17432 */
+    0x0000,     /* R17433 */
+    0x0000,     /* R17434 */
+    0x0000,     /* R17435 */
+    0x0000,     /* R17436 */
+    0x0000,     /* R17437 */
+    0x0000,     /* R17438 */
+    0x0000,     /* R17439 */
+    0x0000,     /* R17440 */
+    0x0000,     /* R17441 */
+    0x0000,     /* R17442 */
+    0x0000,     /* R17443 */
+    0x0000,     /* R17444 */
+    0x0000,     /* R17445 */
+    0x0000,     /* R17446 */
+    0x0000,     /* R17447 */
+    0x0000,     /* R17448 */
+    0x0000,     /* R17449 */
+    0x0000,     /* R17450 */
+    0x0000,     /* R17451 */
+    0x0000,     /* R17452 */
+    0x0000,     /* R17453 */
+    0x0000,     /* R17454 */
+    0x0000,     /* R17455 */
+    0x0000,     /* R17456 */
+    0x0000,     /* R17457 */
+    0x0000,     /* R17458 */
+    0x0000,     /* R17459 */
+    0x0000,     /* R17460 */
+    0x0000,     /* R17461 */
+    0x0000,     /* R17462 */
+    0x0000,     /* R17463 */
+    0x0000,     /* R17464 */
+    0x0000,     /* R17465 */
+    0x0000,     /* R17466 */
+    0x0000,     /* R17467 */
+    0x0000,     /* R17468 */
+    0x0000,     /* R17469 */
+    0x0000,     /* R17470 */
+    0x0000,     /* R17471 */
+    0x0000,     /* R17472 */
+    0x0000,     /* R17473 */
+    0x0000,     /* R17474 */
+    0x0000,     /* R17475 */
+    0x0000,     /* R17476 */
+    0x0000,     /* R17477 */
+    0x0000,     /* R17478 */
+    0x0000,     /* R17479 */
+    0x0000,     /* R17480 */
+    0x0000,     /* R17481 */
+    0x0000,     /* R17482 */
+    0x0000,     /* R17483 */
+    0x0000,     /* R17484 */
+    0x0000,     /* R17485 */
+    0x0000,     /* R17486 */
+    0x0000,     /* R17487 */
+    0x0000,     /* R17488 */
+    0x0000,     /* R17489 */
+    0x0000,     /* R17490 */
+    0x0000,     /* R17491 */
+    0x0000,     /* R17492 */
+    0x0000,     /* R17493 */
+    0x0000,     /* R17494 */
+    0x0000,     /* R17495 */
+    0x0000,     /* R17496 */
+    0x0000,     /* R17497 */
+    0x0000,     /* R17498 */
+    0x0000,     /* R17499 */
+    0x0000,     /* R17500 */
+    0x0000,     /* R17501 */
+    0x0000,     /* R17502 */
+    0x0000,     /* R17503 */
+    0x0000,     /* R17504 */
+    0x0000,     /* R17505 */
+    0x0000,     /* R17506 */
+    0x0000,     /* R17507 */
+    0x0000,     /* R17508 */
+    0x0000,     /* R17509 */
+    0x0000,     /* R17510 */
+    0x0000,     /* R17511 */
+    0x0000,     /* R17512 */
+    0x0000,     /* R17513 */
+    0x0000,     /* R17514 */
+    0x0000,     /* R17515 */
+    0x0000,     /* R17516 */
+    0x0000,     /* R17517 */
+    0x0000,     /* R17518 */
+    0x0000,     /* R17519 */
+    0x0000,     /* R17520 */
+    0x0000,     /* R17521 */
+    0x0000,     /* R17522 */
+    0x0000,     /* R17523 */
+    0x0000,     /* R17524 */
+    0x0000,     /* R17525 */
+    0x0000,     /* R17526 */
+    0x0000,     /* R17527 */
+    0x0000,     /* R17528 */
+    0x0000,     /* R17529 */
+    0x0000,     /* R17530 */
+    0x0000,     /* R17531 */
+    0x0000,     /* R17532 */
+    0x0000,     /* R17533 */
+    0x0000,     /* R17534 */
+    0x0000,     /* R17535 */
+    0x0000,     /* R17536 */
+    0x0000,     /* R17537 */
+    0x0000,     /* R17538 */
+    0x0000,     /* R17539 */
+    0x0000,     /* R17540 */
+    0x0000,     /* R17541 */
+    0x0000,     /* R17542 */
+    0x0000,     /* R17543 */
+    0x0000,     /* R17544 */
+    0x0000,     /* R17545 */
+    0x0000,     /* R17546 */
+    0x0000,     /* R17547 */
+    0x0000,     /* R17548 */
+    0x0000,     /* R17549 */
+    0x0000,     /* R17550 */
+    0x0000,     /* R17551 */
+    0x0000,     /* R17552 */
+    0x0000,     /* R17553 */
+    0x0000,     /* R17554 */
+    0x0000,     /* R17555 */
+    0x0000,     /* R17556 */
+    0x0000,     /* R17557 */
+    0x0000,     /* R17558 */
+    0x0000,     /* R17559 */
+    0x0000,     /* R17560 */
+    0x0000,     /* R17561 */
+    0x0000,     /* R17562 */
+    0x0000,     /* R17563 */
+    0x0000,     /* R17564 */
+    0x0000,     /* R17565 */
+    0x0000,     /* R17566 */
+    0x0000,     /* R17567 */
+    0x0000,     /* R17568 */
+    0x0000,     /* R17569 */
+    0x0000,     /* R17570 */
+    0x0000,     /* R17571 */
+    0x0000,     /* R17572 */
+    0x0000,     /* R17573 */
+    0x0000,     /* R17574 */
+    0x0000,     /* R17575 */
+    0x0000,     /* R17576 */
+    0x0000,     /* R17577 */
+    0x0000,     /* R17578 */
+    0x0000,     /* R17579 */
+    0x0000,     /* R17580 */
+    0x0000,     /* R17581 */
+    0x0000,     /* R17582 */
+    0x0000,     /* R17583 */
+    0x0000,     /* R17584 */
+    0x0000,     /* R17585 */
+    0x0000,     /* R17586 */
+    0x0000,     /* R17587 */
+    0x0000,     /* R17588 */
+    0x0000,     /* R17589 */
+    0x0000,     /* R17590 */
+    0x0000,     /* R17591 */
+    0x0000,     /* R17592 */
+    0x0000,     /* R17593 */
+    0x0000,     /* R17594 */
+    0x0000,     /* R17595 */
+    0x0000,     /* R17596 */
+    0x0000,     /* R17597 */
+    0x0000,     /* R17598 */
+    0x0000,     /* R17599 */
+    0x0000,     /* R17600 */
+    0x0000,     /* R17601 */
+    0x0000,     /* R17602 */
+    0x0000,     /* R17603 */
+    0x0000,     /* R17604 */
+    0x0000,     /* R17605 */
+    0x0000,     /* R17606 */
+    0x0000,     /* R17607 */
+    0x0000,     /* R17608 */
+    0x0000,     /* R17609 */
+    0x0000,     /* R17610 */
+    0x0000,     /* R17611 */
+    0x0000,     /* R17612 */
+    0x0000,     /* R17613 */
+    0x0000,     /* R17614 */
+    0x0000,     /* R17615 */
+    0x0000,     /* R17616 */
+    0x0000,     /* R17617 */
+    0x0000,     /* R17618 */
+    0x0000,     /* R17619 */
+    0x0000,     /* R17620 */
+    0x0000,     /* R17621 */
+    0x0000,     /* R17622 */
+    0x0000,     /* R17623 */
+    0x0000,     /* R17624 */
+    0x0000,     /* R17625 */
+    0x0000,     /* R17626 */
+    0x0000,     /* R17627 */
+    0x0000,     /* R17628 */
+    0x0000,     /* R17629 */
+    0x0000,     /* R17630 */
+    0x0000,     /* R17631 */
+    0x0000,     /* R17632 */
+    0x0000,     /* R17633 */
+    0x0000,     /* R17634 */
+    0x0000,     /* R17635 */
+    0x0000,     /* R17636 */
+    0x0000,     /* R17637 */
+    0x0000,     /* R17638 */
+    0x0000,     /* R17639 */
+    0x0000,     /* R17640 */
+    0x0000,     /* R17641 */
+    0x0000,     /* R17642 */
+    0x0000,     /* R17643 */
+    0x0000,     /* R17644 */
+    0x0000,     /* R17645 */
+    0x0000,     /* R17646 */
+    0x0000,     /* R17647 */
+    0x0000,     /* R17648 */
+    0x0000,     /* R17649 */
+    0x0000,     /* R17650 */
+    0x0000,     /* R17651 */
+    0x0000,     /* R17652 */
+    0x0000,     /* R17653 */
+    0x0000,     /* R17654 */
+    0x0000,     /* R17655 */
+    0x0000,     /* R17656 */
+    0x0000,     /* R17657 */
+    0x0000,     /* R17658 */
+    0x0000,     /* R17659 */
+    0x0000,     /* R17660 */
+    0x0000,     /* R17661 */
+    0x0000,     /* R17662 */
+    0x0000,     /* R17663 */
+    0x0000,     /* R17664 */
+    0x0000,     /* R17665 */
+    0x0000,     /* R17666 */
+    0x0000,     /* R17667 */
+    0x0000,     /* R17668 */
+    0x0000,     /* R17669 */
+    0x0000,     /* R17670 */
+    0x0000,     /* R17671 */
+    0x0000,     /* R17672 */
+    0x0000,     /* R17673 */
+    0x0000,     /* R17674 */
+    0x0000,     /* R17675 */
+    0x0000,     /* R17676 */
+    0x0000,     /* R17677 */
+    0x0000,     /* R17678 */
+    0x0000,     /* R17679 */
+    0x0000,     /* R17680 */
+    0x0000,     /* R17681 */
+    0x0000,     /* R17682 */
+    0x0000,     /* R17683 */
+    0x0000,     /* R17684 */
+    0x0000,     /* R17685 */
+    0x0000,     /* R17686 */
+    0x0000,     /* R17687 */
+    0x0000,     /* R17688 */
+    0x0000,     /* R17689 */
+    0x0000,     /* R17690 */
+    0x0000,     /* R17691 */
+    0x0000,     /* R17692 */
+    0x0000,     /* R17693 */
+    0x0000,     /* R17694 */
+    0x0000,     /* R17695 */
+    0x0000,     /* R17696 */
+    0x0000,     /* R17697 */
+    0x0000,     /* R17698 */
+    0x0000,     /* R17699 */
+    0x0000,     /* R17700 */
+    0x0000,     /* R17701 */
+    0x0000,     /* R17702 */
+    0x0000,     /* R17703 */
+    0x0000,     /* R17704 */
+    0x0000,     /* R17705 */
+    0x0000,     /* R17706 */
+    0x0000,     /* R17707 */
+    0x0000,     /* R17708 */
+    0x0000,     /* R17709 */
+    0x0000,     /* R17710 */
+    0x0000,     /* R17711 */
+    0x0000,     /* R17712 */
+    0x0000,     /* R17713 */
+    0x0000,     /* R17714 */
+    0x0000,     /* R17715 */
+    0x0000,     /* R17716 */
+    0x0000,     /* R17717 */
+    0x0000,     /* R17718 */
+    0x0000,     /* R17719 */
+    0x0000,     /* R17720 */
+    0x0000,     /* R17721 */
+    0x0000,     /* R17722 */
+    0x0000,     /* R17723 */
+    0x0000,     /* R17724 */
+    0x0000,     /* R17725 */
+    0x0000,     /* R17726 */
+    0x0000,     /* R17727 */
+    0x0000,     /* R17728 */
+    0x0000,     /* R17729 */
+    0x0000,     /* R17730 */
+    0x0000,     /* R17731 */
+    0x0000,     /* R17732 */
+    0x0000,     /* R17733 */
+    0x0000,     /* R17734 */
+    0x0000,     /* R17735 */
+    0x0000,     /* R17736 */
+    0x0000,     /* R17737 */
+    0x0000,     /* R17738 */
+    0x0000,     /* R17739 */
+    0x0000,     /* R17740 */
+    0x0000,     /* R17741 */
+    0x0000,     /* R17742 */
+    0x0000,     /* R17743 */
+    0x0000,     /* R17744 */
+    0x0000,     /* R17745 */
+    0x0000,     /* R17746 */
+    0x0000,     /* R17747 */
+    0x0000,     /* R17748 */
+    0x0000,     /* R17749 */
+    0x0000,     /* R17750 */
+    0x0000,     /* R17751 */
+    0x0000,     /* R17752 */
+    0x0000,     /* R17753 */
+    0x0000,     /* R17754 */
+    0x0000,     /* R17755 */
+    0x0000,     /* R17756 */
+    0x0000,     /* R17757 */
+    0x0000,     /* R17758 */
+    0x0000,     /* R17759 */
+    0x0000,     /* R17760 */
+    0x0000,     /* R17761 */
+    0x0000,     /* R17762 */
+    0x0000,     /* R17763 */
+    0x0000,     /* R17764 */
+    0x0000,     /* R17765 */
+    0x0000,     /* R17766 */
+    0x0000,     /* R17767 */
+    0x0000,     /* R17768 */
+    0x0000,     /* R17769 */
+    0x0000,     /* R17770 */
+    0x0000,     /* R17771 */
+    0x0000,     /* R17772 */
+    0x0000,     /* R17773 */
+    0x0000,     /* R17774 */
+    0x0000,     /* R17775 */
+    0x0000,     /* R17776 */
+    0x0000,     /* R17777 */
+    0x0000,     /* R17778 */
+    0x0000,     /* R17779 */
+    0x0000,     /* R17780 */
+    0x0000,     /* R17781 */
+    0x0000,     /* R17782 */
+    0x0000,     /* R17783 */
+    0x0000,     /* R17784 */
+    0x0000,     /* R17785 */
+    0x0000,     /* R17786 */
+    0x0000,     /* R17787 */
+    0x0000,     /* R17788 */
+    0x0000,     /* R17789 */
+    0x0000,     /* R17790 */
+    0x0000,     /* R17791 */
+    0x0000,     /* R17792 */
+    0x0000,     /* R17793 */
+    0x0000,     /* R17794 */
+    0x0000,     /* R17795 */
+    0x0000,     /* R17796 */
+    0x0000,     /* R17797 */
+    0x0000,     /* R17798 */
+    0x0000,     /* R17799 */
+    0x0000,     /* R17800 */
+    0x0000,     /* R17801 */
+    0x0000,     /* R17802 */
+    0x0000,     /* R17803 */
+    0x0000,     /* R17804 */
+    0x0000,     /* R17805 */
+    0x0000,     /* R17806 */
+    0x0000,     /* R17807 */
+    0x0000,     /* R17808 */
+    0x0000,     /* R17809 */
+    0x0000,     /* R17810 */
+    0x0000,     /* R17811 */
+    0x0000,     /* R17812 */
+    0x0000,     /* R17813 */
+    0x0000,     /* R17814 */
+    0x0000,     /* R17815 */
+    0x0000,     /* R17816 */
+    0x0000,     /* R17817 */
+    0x0000,     /* R17818 */
+    0x0000,     /* R17819 */
+    0x0000,     /* R17820 */
+    0x0000,     /* R17821 */
+    0x0000,     /* R17822 */
+    0x0000,     /* R17823 */
+    0x0000,     /* R17824 */
+    0x0000,     /* R17825 */
+    0x0000,     /* R17826 */
+    0x0000,     /* R17827 */
+    0x0000,     /* R17828 */
+    0x0000,     /* R17829 */
+    0x0000,     /* R17830 */
+    0x0000,     /* R17831 */
+    0x0000,     /* R17832 */
+    0x0000,     /* R17833 */
+    0x0000,     /* R17834 */
+    0x0000,     /* R17835 */
+    0x0000,     /* R17836 */
+    0x0000,     /* R17837 */
+    0x0000,     /* R17838 */
+    0x0000,     /* R17839 */
+    0x0000,     /* R17840 */
+    0x0000,     /* R17841 */
+    0x0000,     /* R17842 */
+    0x0000,     /* R17843 */
+    0x0000,     /* R17844 */
+    0x0000,     /* R17845 */
+    0x0000,     /* R17846 */
+    0x0000,     /* R17847 */
+    0x0000,     /* R17848 */
+    0x0000,     /* R17849 */
+    0x0000,     /* R17850 */
+    0x0000,     /* R17851 */
+    0x0000,     /* R17852 */
+    0x0000,     /* R17853 */
+    0x0000,     /* R17854 */
+    0x0000,     /* R17855 */
+    0x0000,     /* R17856 */
+    0x0000,     /* R17857 */
+    0x0000,     /* R17858 */
+    0x0000,     /* R17859 */
+    0x0000,     /* R17860 */
+    0x0000,     /* R17861 */
+    0x0000,     /* R17862 */
+    0x0000,     /* R17863 */
+    0x0000,     /* R17864 */
+    0x0000,     /* R17865 */
+    0x0000,     /* R17866 */
+    0x0000,     /* R17867 */
+    0x0000,     /* R17868 */
+    0x0000,     /* R17869 */
+    0x0000,     /* R17870 */
+    0x0000,     /* R17871 */
+    0x0000,     /* R17872 */
+    0x0000,     /* R17873 */
+    0x0000,     /* R17874 */
+    0x0000,     /* R17875 */
+    0x0000,     /* R17876 */
+    0x0000,     /* R17877 */
+    0x0000,     /* R17878 */
+    0x0000,     /* R17879 */
+    0x0000,     /* R17880 */
+    0x0000,     /* R17881 */
+    0x0000,     /* R17882 */
+    0x0000,     /* R17883 */
+    0x0000,     /* R17884 */
+    0x0000,     /* R17885 */
+    0x0000,     /* R17886 */
+    0x0000,     /* R17887 */
+    0x0000,     /* R17888 */
+    0x0000,     /* R17889 */
+    0x0000,     /* R17890 */
+    0x0000,     /* R17891 */
+    0x0000,     /* R17892 */
+    0x0000,     /* R17893 */
+    0x0000,     /* R17894 */
+    0x0000,     /* R17895 */
+    0x0000,     /* R17896 */
+    0x0000,     /* R17897 */
+    0x0000,     /* R17898 */
+    0x0000,     /* R17899 */
+    0x0000,     /* R17900 */
+    0x0000,     /* R17901 */
+    0x0000,     /* R17902 */
+    0x0000,     /* R17903 */
+    0x0000,     /* R17904 */
+    0x0000,     /* R17905 */
+    0x0000,     /* R17906 */
+    0x0000,     /* R17907 */
+    0x0000,     /* R17908 */
+    0x0000,     /* R17909 */
+    0x0000,     /* R17910 */
+    0x0000,     /* R17911 */
+    0x0000,     /* R17912 */
+    0x0000,     /* R17913 */
+    0x0000,     /* R17914 */
+    0x0000,     /* R17915 */
+    0x0000,     /* R17916 */
+    0x0000,     /* R17917 */
+    0x0000,     /* R17918 */
+    0x0000,     /* R17919 */
+    0x007F,     /* R17920 - ADCL_RETUNE_C1_1 */
+    0xFFFF,     /* R17921 - ADCL_RETUNE_C1_0 */
+    0x0000,     /* R17922 - ADCL_RETUNE_C2_1 */
+    0x0000,     /* R17923 - ADCL_RETUNE_C2_0 */
+    0x0000,     /* R17924 - ADCL_RETUNE_C3_1 */
+    0x0000,     /* R17925 - ADCL_RETUNE_C3_0 */
+    0x0000,     /* R17926 - ADCL_RETUNE_C4_1 */
+    0x0000,     /* R17927 - ADCL_RETUNE_C4_0 */
+    0x0000,     /* R17928 - ADCL_RETUNE_C5_1 */
+    0x0000,     /* R17929 - ADCL_RETUNE_C5_0 */
+    0x0000,     /* R17930 - ADCL_RETUNE_C6_1 */
+    0x0000,     /* R17931 - ADCL_RETUNE_C6_0 */
+    0x0000,     /* R17932 - ADCL_RETUNE_C7_1 */
+    0x0000,     /* R17933 - ADCL_RETUNE_C7_0 */
+    0x0000,     /* R17934 - ADCL_RETUNE_C8_1 */
+    0x0000,     /* R17935 - ADCL_RETUNE_C8_0 */
+    0x0000,     /* R17936 - ADCL_RETUNE_C9_1 */
+    0x0000,     /* R17937 - ADCL_RETUNE_C9_0 */
+    0x0000,     /* R17938 - ADCL_RETUNE_C10_1 */
+    0x0000,     /* R17939 - ADCL_RETUNE_C10_0 */
+    0x0000,     /* R17940 - ADCL_RETUNE_C11_1 */
+    0x0000,     /* R17941 - ADCL_RETUNE_C11_0 */
+    0x0000,     /* R17942 - ADCL_RETUNE_C12_1 */
+    0x0000,     /* R17943 - ADCL_RETUNE_C12_0 */
+    0x0000,     /* R17944 - ADCL_RETUNE_C13_1 */
+    0x0000,     /* R17945 - ADCL_RETUNE_C13_0 */
+    0x0000,     /* R17946 - ADCL_RETUNE_C14_1 */
+    0x0000,     /* R17947 - ADCL_RETUNE_C14_0 */
+    0x0000,     /* R17948 - ADCL_RETUNE_C15_1 */
+    0x0000,     /* R17949 - ADCL_RETUNE_C15_0 */
+    0x0000,     /* R17950 - ADCL_RETUNE_C16_1 */
+    0x0000,     /* R17951 - ADCL_RETUNE_C16_0 */
+    0x0000,     /* R17952 - ADCL_RETUNE_C17_1 */
+    0x0000,     /* R17953 - ADCL_RETUNE_C17_0 */
+    0x0000,     /* R17954 - ADCL_RETUNE_C18_1 */
+    0x0000,     /* R17955 - ADCL_RETUNE_C18_0 */
+    0x0000,     /* R17956 - ADCL_RETUNE_C19_1 */
+    0x0000,     /* R17957 - ADCL_RETUNE_C19_0 */
+    0x0000,     /* R17958 - ADCL_RETUNE_C20_1 */
+    0x0000,     /* R17959 - ADCL_RETUNE_C20_0 */
+    0x0000,     /* R17960 - ADCL_RETUNE_C21_1 */
+    0x0000,     /* R17961 - ADCL_RETUNE_C21_0 */
+    0x0000,     /* R17962 - ADCL_RETUNE_C22_1 */
+    0x0000,     /* R17963 - ADCL_RETUNE_C22_0 */
+    0x0000,     /* R17964 - ADCL_RETUNE_C23_1 */
+    0x0000,     /* R17965 - ADCL_RETUNE_C23_0 */
+    0x0000,     /* R17966 - ADCL_RETUNE_C24_1 */
+    0x0000,     /* R17967 - ADCL_RETUNE_C24_0 */
+    0x0000,     /* R17968 - ADCL_RETUNE_C25_1 */
+    0x0000,     /* R17969 - ADCL_RETUNE_C25_0 */
+    0x0000,     /* R17970 - ADCL_RETUNE_C26_1 */
+    0x0000,     /* R17971 - ADCL_RETUNE_C26_0 */
+    0x0000,     /* R17972 - ADCL_RETUNE_C27_1 */
+    0x0000,     /* R17973 - ADCL_RETUNE_C27_0 */
+    0x0000,     /* R17974 - ADCL_RETUNE_C28_1 */
+    0x0000,     /* R17975 - ADCL_RETUNE_C28_0 */
+    0x0000,     /* R17976 - ADCL_RETUNE_C29_1 */
+    0x0000,     /* R17977 - ADCL_RETUNE_C29_0 */
+    0x0000,     /* R17978 - ADCL_RETUNE_C30_1 */
+    0x0000,     /* R17979 - ADCL_RETUNE_C30_0 */
+    0x0000,     /* R17980 - ADCL_RETUNE_C31_1 */
+    0x0000,     /* R17981 - ADCL_RETUNE_C31_0 */
+    0x0000,     /* R17982 - ADCL_RETUNE_C32_1 */
+    0x0000,     /* R17983 - ADCL_RETUNE_C32_0 */
+    0x0000,     /* R17984 */
+    0x0000,     /* R17985 */
+    0x0000,     /* R17986 */
+    0x0000,     /* R17987 */
+    0x0000,     /* R17988 */
+    0x0000,     /* R17989 */
+    0x0000,     /* R17990 */
+    0x0000,     /* R17991 */
+    0x0000,     /* R17992 */
+    0x0000,     /* R17993 */
+    0x0000,     /* R17994 */
+    0x0000,     /* R17995 */
+    0x0000,     /* R17996 */
+    0x0000,     /* R17997 */
+    0x0000,     /* R17998 */
+    0x0000,     /* R17999 */
+    0x0000,     /* R18000 */
+    0x0000,     /* R18001 */
+    0x0000,     /* R18002 */
+    0x0000,     /* R18003 */
+    0x0000,     /* R18004 */
+    0x0000,     /* R18005 */
+    0x0000,     /* R18006 */
+    0x0000,     /* R18007 */
+    0x0000,     /* R18008 */
+    0x0000,     /* R18009 */
+    0x0000,     /* R18010 */
+    0x0000,     /* R18011 */
+    0x0000,     /* R18012 */
+    0x0000,     /* R18013 */
+    0x0000,     /* R18014 */
+    0x0000,     /* R18015 */
+    0x0000,     /* R18016 */
+    0x0000,     /* R18017 */
+    0x0000,     /* R18018 */
+    0x0000,     /* R18019 */
+    0x0000,     /* R18020 */
+    0x0000,     /* R18021 */
+    0x0000,     /* R18022 */
+    0x0000,     /* R18023 */
+    0x0000,     /* R18024 */
+    0x0000,     /* R18025 */
+    0x0000,     /* R18026 */
+    0x0000,     /* R18027 */
+    0x0000,     /* R18028 */
+    0x0000,     /* R18029 */
+    0x0000,     /* R18030 */
+    0x0000,     /* R18031 */
+    0x0000,     /* R18032 */
+    0x0000,     /* R18033 */
+    0x0000,     /* R18034 */
+    0x0000,     /* R18035 */
+    0x0000,     /* R18036 */
+    0x0000,     /* R18037 */
+    0x0000,     /* R18038 */
+    0x0000,     /* R18039 */
+    0x0000,     /* R18040 */
+    0x0000,     /* R18041 */
+    0x0000,     /* R18042 */
+    0x0000,     /* R18043 */
+    0x0000,     /* R18044 */
+    0x0000,     /* R18045 */
+    0x0000,     /* R18046 */
+    0x0000,     /* R18047 */
+    0x0000,     /* R18048 */
+    0x0000,     /* R18049 */
+    0x0000,     /* R18050 */
+    0x0000,     /* R18051 */
+    0x0000,     /* R18052 */
+    0x0000,     /* R18053 */
+    0x0000,     /* R18054 */
+    0x0000,     /* R18055 */
+    0x0000,     /* R18056 */
+    0x0000,     /* R18057 */
+    0x0000,     /* R18058 */
+    0x0000,     /* R18059 */
+    0x0000,     /* R18060 */
+    0x0000,     /* R18061 */
+    0x0000,     /* R18062 */
+    0x0000,     /* R18063 */
+    0x0000,     /* R18064 */
+    0x0000,     /* R18065 */
+    0x0000,     /* R18066 */
+    0x0000,     /* R18067 */
+    0x0000,     /* R18068 */
+    0x0000,     /* R18069 */
+    0x0000,     /* R18070 */
+    0x0000,     /* R18071 */
+    0x0000,     /* R18072 */
+    0x0000,     /* R18073 */
+    0x0000,     /* R18074 */
+    0x0000,     /* R18075 */
+    0x0000,     /* R18076 */
+    0x0000,     /* R18077 */
+    0x0000,     /* R18078 */
+    0x0000,     /* R18079 */
+    0x0000,     /* R18080 */
+    0x0000,     /* R18081 */
+    0x0000,     /* R18082 */
+    0x0000,     /* R18083 */
+    0x0000,     /* R18084 */
+    0x0000,     /* R18085 */
+    0x0000,     /* R18086 */
+    0x0000,     /* R18087 */
+    0x0000,     /* R18088 */
+    0x0000,     /* R18089 */
+    0x0000,     /* R18090 */
+    0x0000,     /* R18091 */
+    0x0000,     /* R18092 */
+    0x0000,     /* R18093 */
+    0x0000,     /* R18094 */
+    0x0000,     /* R18095 */
+    0x0000,     /* R18096 */
+    0x0000,     /* R18097 */
+    0x0000,     /* R18098 */
+    0x0000,     /* R18099 */
+    0x0000,     /* R18100 */
+    0x0000,     /* R18101 */
+    0x0000,     /* R18102 */
+    0x0000,     /* R18103 */
+    0x0000,     /* R18104 */
+    0x0000,     /* R18105 */
+    0x0000,     /* R18106 */
+    0x0000,     /* R18107 */
+    0x0000,     /* R18108 */
+    0x0000,     /* R18109 */
+    0x0000,     /* R18110 */
+    0x0000,     /* R18111 */
+    0x0000,     /* R18112 */
+    0x0000,     /* R18113 */
+    0x0000,     /* R18114 */
+    0x0000,     /* R18115 */
+    0x0000,     /* R18116 */
+    0x0000,     /* R18117 */
+    0x0000,     /* R18118 */
+    0x0000,     /* R18119 */
+    0x0000,     /* R18120 */
+    0x0000,     /* R18121 */
+    0x0000,     /* R18122 */
+    0x0000,     /* R18123 */
+    0x0000,     /* R18124 */
+    0x0000,     /* R18125 */
+    0x0000,     /* R18126 */
+    0x0000,     /* R18127 */
+    0x0000,     /* R18128 */
+    0x0000,     /* R18129 */
+    0x0000,     /* R18130 */
+    0x0000,     /* R18131 */
+    0x0000,     /* R18132 */
+    0x0000,     /* R18133 */
+    0x0000,     /* R18134 */
+    0x0000,     /* R18135 */
+    0x0000,     /* R18136 */
+    0x0000,     /* R18137 */
+    0x0000,     /* R18138 */
+    0x0000,     /* R18139 */
+    0x0000,     /* R18140 */
+    0x0000,     /* R18141 */
+    0x0000,     /* R18142 */
+    0x0000,     /* R18143 */
+    0x0000,     /* R18144 */
+    0x0000,     /* R18145 */
+    0x0000,     /* R18146 */
+    0x0000,     /* R18147 */
+    0x0000,     /* R18148 */
+    0x0000,     /* R18149 */
+    0x0000,     /* R18150 */
+    0x0000,     /* R18151 */
+    0x0000,     /* R18152 */
+    0x0000,     /* R18153 */
+    0x0000,     /* R18154 */
+    0x0000,     /* R18155 */
+    0x0000,     /* R18156 */
+    0x0000,     /* R18157 */
+    0x0000,     /* R18158 */
+    0x0000,     /* R18159 */
+    0x0000,     /* R18160 */
+    0x0000,     /* R18161 */
+    0x0000,     /* R18162 */
+    0x0000,     /* R18163 */
+    0x0000,     /* R18164 */
+    0x0000,     /* R18165 */
+    0x0000,     /* R18166 */
+    0x0000,     /* R18167 */
+    0x0000,     /* R18168 */
+    0x0000,     /* R18169 */
+    0x0000,     /* R18170 */
+    0x0000,     /* R18171 */
+    0x0000,     /* R18172 */
+    0x0000,     /* R18173 */
+    0x0000,     /* R18174 */
+    0x0000,     /* R18175 */
+    0x0000,     /* R18176 */
+    0x0000,     /* R18177 */
+    0x0000,     /* R18178 */
+    0x0000,     /* R18179 */
+    0x0000,     /* R18180 */
+    0x0000,     /* R18181 */
+    0x0000,     /* R18182 */
+    0x0000,     /* R18183 */
+    0x0000,     /* R18184 */
+    0x0000,     /* R18185 */
+    0x0000,     /* R18186 */
+    0x0000,     /* R18187 */
+    0x0000,     /* R18188 */
+    0x0000,     /* R18189 */
+    0x0000,     /* R18190 */
+    0x0000,     /* R18191 */
+    0x0000,     /* R18192 */
+    0x0000,     /* R18193 */
+    0x0000,     /* R18194 */
+    0x0000,     /* R18195 */
+    0x0000,     /* R18196 */
+    0x0000,     /* R18197 */
+    0x0000,     /* R18198 */
+    0x0000,     /* R18199 */
+    0x0000,     /* R18200 */
+    0x0000,     /* R18201 */
+    0x0000,     /* R18202 */
+    0x0000,     /* R18203 */
+    0x0000,     /* R18204 */
+    0x0000,     /* R18205 */
+    0x0000,     /* R18206 */
+    0x0000,     /* R18207 */
+    0x0000,     /* R18208 */
+    0x0000,     /* R18209 */
+    0x0000,     /* R18210 */
+    0x0000,     /* R18211 */
+    0x0000,     /* R18212 */
+    0x0000,     /* R18213 */
+    0x0000,     /* R18214 */
+    0x0000,     /* R18215 */
+    0x0000,     /* R18216 */
+    0x0000,     /* R18217 */
+    0x0000,     /* R18218 */
+    0x0000,     /* R18219 */
+    0x0000,     /* R18220 */
+    0x0000,     /* R18221 */
+    0x0000,     /* R18222 */
+    0x0000,     /* R18223 */
+    0x0000,     /* R18224 */
+    0x0000,     /* R18225 */
+    0x0000,     /* R18226 */
+    0x0000,     /* R18227 */
+    0x0000,     /* R18228 */
+    0x0000,     /* R18229 */
+    0x0000,     /* R18230 */
+    0x0000,     /* R18231 */
+    0x0000,     /* R18232 */
+    0x0000,     /* R18233 */
+    0x0000,     /* R18234 */
+    0x0000,     /* R18235 */
+    0x0000,     /* R18236 */
+    0x0000,     /* R18237 */
+    0x0000,     /* R18238 */
+    0x0000,     /* R18239 */
+    0x0000,     /* R18240 */
+    0x0000,     /* R18241 */
+    0x0000,     /* R18242 */
+    0x0000,     /* R18243 */
+    0x0000,     /* R18244 */
+    0x0000,     /* R18245 */
+    0x0000,     /* R18246 */
+    0x0000,     /* R18247 */
+    0x0000,     /* R18248 */
+    0x0000,     /* R18249 */
+    0x0000,     /* R18250 */
+    0x0000,     /* R18251 */
+    0x0000,     /* R18252 */
+    0x0000,     /* R18253 */
+    0x0000,     /* R18254 */
+    0x0000,     /* R18255 */
+    0x0000,     /* R18256 */
+    0x0000,     /* R18257 */
+    0x0000,     /* R18258 */
+    0x0000,     /* R18259 */
+    0x0000,     /* R18260 */
+    0x0000,     /* R18261 */
+    0x0000,     /* R18262 */
+    0x0000,     /* R18263 */
+    0x0000,     /* R18264 */
+    0x0000,     /* R18265 */
+    0x0000,     /* R18266 */
+    0x0000,     /* R18267 */
+    0x0000,     /* R18268 */
+    0x0000,     /* R18269 */
+    0x0000,     /* R18270 */
+    0x0000,     /* R18271 */
+    0x0000,     /* R18272 */
+    0x0000,     /* R18273 */
+    0x0000,     /* R18274 */
+    0x0000,     /* R18275 */
+    0x0000,     /* R18276 */
+    0x0000,     /* R18277 */
+    0x0000,     /* R18278 */
+    0x0000,     /* R18279 */
+    0x0000,     /* R18280 */
+    0x0000,     /* R18281 */
+    0x0000,     /* R18282 */
+    0x0000,     /* R18283 */
+    0x0000,     /* R18284 */
+    0x0000,     /* R18285 */
+    0x0000,     /* R18286 */
+    0x0000,     /* R18287 */
+    0x0000,     /* R18288 */
+    0x0000,     /* R18289 */
+    0x0000,     /* R18290 */
+    0x0000,     /* R18291 */
+    0x0000,     /* R18292 */
+    0x0000,     /* R18293 */
+    0x0000,     /* R18294 */
+    0x0000,     /* R18295 */
+    0x0000,     /* R18296 */
+    0x0000,     /* R18297 */
+    0x0000,     /* R18298 */
+    0x0000,     /* R18299 */
+    0x0000,     /* R18300 */
+    0x0000,     /* R18301 */
+    0x0000,     /* R18302 */
+    0x0000,     /* R18303 */
+    0x0000,     /* R18304 */
+    0x0000,     /* R18305 */
+    0x0000,     /* R18306 */
+    0x0000,     /* R18307 */
+    0x0000,     /* R18308 */
+    0x0000,     /* R18309 */
+    0x0000,     /* R18310 */
+    0x0000,     /* R18311 */
+    0x0000,     /* R18312 */
+    0x0000,     /* R18313 */
+    0x0000,     /* R18314 */
+    0x0000,     /* R18315 */
+    0x0000,     /* R18316 */
+    0x0000,     /* R18317 */
+    0x0000,     /* R18318 */
+    0x0000,     /* R18319 */
+    0x0000,     /* R18320 */
+    0x0000,     /* R18321 */
+    0x0000,     /* R18322 */
+    0x0000,     /* R18323 */
+    0x0000,     /* R18324 */
+    0x0000,     /* R18325 */
+    0x0000,     /* R18326 */
+    0x0000,     /* R18327 */
+    0x0000,     /* R18328 */
+    0x0000,     /* R18329 */
+    0x0000,     /* R18330 */
+    0x0000,     /* R18331 */
+    0x0000,     /* R18332 */
+    0x0000,     /* R18333 */
+    0x0000,     /* R18334 */
+    0x0000,     /* R18335 */
+    0x0000,     /* R18336 */
+    0x0000,     /* R18337 */
+    0x0000,     /* R18338 */
+    0x0000,     /* R18339 */
+    0x0000,     /* R18340 */
+    0x0000,     /* R18341 */
+    0x0000,     /* R18342 */
+    0x0000,     /* R18343 */
+    0x0000,     /* R18344 */
+    0x0000,     /* R18345 */
+    0x0000,     /* R18346 */
+    0x0000,     /* R18347 */
+    0x0000,     /* R18348 */
+    0x0000,     /* R18349 */
+    0x0000,     /* R18350 */
+    0x0000,     /* R18351 */
+    0x0000,     /* R18352 */
+    0x0000,     /* R18353 */
+    0x0000,     /* R18354 */
+    0x0000,     /* R18355 */
+    0x0000,     /* R18356 */
+    0x0000,     /* R18357 */
+    0x0000,     /* R18358 */
+    0x0000,     /* R18359 */
+    0x0000,     /* R18360 */
+    0x0000,     /* R18361 */
+    0x0000,     /* R18362 */
+    0x0000,     /* R18363 */
+    0x0000,     /* R18364 */
+    0x0000,     /* R18365 */
+    0x0000,     /* R18366 */
+    0x0000,     /* R18367 */
+    0x0000,     /* R18368 */
+    0x0000,     /* R18369 */
+    0x0000,     /* R18370 */
+    0x0000,     /* R18371 */
+    0x0000,     /* R18372 */
+    0x0000,     /* R18373 */
+    0x0000,     /* R18374 */
+    0x0000,     /* R18375 */
+    0x0000,     /* R18376 */
+    0x0000,     /* R18377 */
+    0x0000,     /* R18378 */
+    0x0000,     /* R18379 */
+    0x0000,     /* R18380 */
+    0x0000,     /* R18381 */
+    0x0000,     /* R18382 */
+    0x0000,     /* R18383 */
+    0x0000,     /* R18384 */
+    0x0000,     /* R18385 */
+    0x0000,     /* R18386 */
+    0x0000,     /* R18387 */
+    0x0000,     /* R18388 */
+    0x0000,     /* R18389 */
+    0x0000,     /* R18390 */
+    0x0000,     /* R18391 */
+    0x0000,     /* R18392 */
+    0x0000,     /* R18393 */
+    0x0000,     /* R18394 */
+    0x0000,     /* R18395 */
+    0x0000,     /* R18396 */
+    0x0000,     /* R18397 */
+    0x0000,     /* R18398 */
+    0x0000,     /* R18399 */
+    0x0000,     /* R18400 */
+    0x0000,     /* R18401 */
+    0x0000,     /* R18402 */
+    0x0000,     /* R18403 */
+    0x0000,     /* R18404 */
+    0x0000,     /* R18405 */
+    0x0000,     /* R18406 */
+    0x0000,     /* R18407 */
+    0x0000,     /* R18408 */
+    0x0000,     /* R18409 */
+    0x0000,     /* R18410 */
+    0x0000,     /* R18411 */
+    0x0000,     /* R18412 */
+    0x0000,     /* R18413 */
+    0x0000,     /* R18414 */
+    0x0000,     /* R18415 */
+    0x0000,     /* R18416 */
+    0x0000,     /* R18417 */
+    0x0000,     /* R18418 */
+    0x0000,     /* R18419 */
+    0x0000,     /* R18420 */
+    0x0000,     /* R18421 */
+    0x0000,     /* R18422 */
+    0x0000,     /* R18423 */
+    0x0000,     /* R18424 */
+    0x0000,     /* R18425 */
+    0x0000,     /* R18426 */
+    0x0000,     /* R18427 */
+    0x0000,     /* R18428 */
+    0x0000,     /* R18429 */
+    0x0000,     /* R18430 */
+    0x0000,     /* R18431 */
+    0x0020,     /* R18432 - RETUNEADC_PG2_1 */
+    0x0000,     /* R18433 - RETUNEADC_PG2_0 */
+    0x0040,     /* R18434 - RETUNEADC_PG_1 */
+    0x0000,     /* R18435 - RETUNEADC_PG_0 */
+    0x0000,     /* R18436 */
+    0x0000,     /* R18437 */
+    0x0000,     /* R18438 */
+    0x0000,     /* R18439 */
+    0x0000,     /* R18440 */
+    0x0000,     /* R18441 */
+    0x0000,     /* R18442 */
+    0x0000,     /* R18443 */
+    0x0000,     /* R18444 */
+    0x0000,     /* R18445 */
+    0x0000,     /* R18446 */
+    0x0000,     /* R18447 */
+    0x0000,     /* R18448 */
+    0x0000,     /* R18449 */
+    0x0000,     /* R18450 */
+    0x0000,     /* R18451 */
+    0x0000,     /* R18452 */
+    0x0000,     /* R18453 */
+    0x0000,     /* R18454 */
+    0x0000,     /* R18455 */
+    0x0000,     /* R18456 */
+    0x0000,     /* R18457 */
+    0x0000,     /* R18458 */
+    0x0000,     /* R18459 */
+    0x0000,     /* R18460 */
+    0x0000,     /* R18461 */
+    0x0000,     /* R18462 */
+    0x0000,     /* R18463 */
+    0x0000,     /* R18464 */
+    0x0000,     /* R18465 */
+    0x0000,     /* R18466 */
+    0x0000,     /* R18467 */
+    0x0000,     /* R18468 */
+    0x0000,     /* R18469 */
+    0x0000,     /* R18470 */
+    0x0000,     /* R18471 */
+    0x0000,     /* R18472 */
+    0x0000,     /* R18473 */
+    0x0000,     /* R18474 */
+    0x0000,     /* R18475 */
+    0x0000,     /* R18476 */
+    0x0000,     /* R18477 */
+    0x0000,     /* R18478 */
+    0x0000,     /* R18479 */
+    0x0000,     /* R18480 */
+    0x0000,     /* R18481 */
+    0x0000,     /* R18482 */
+    0x0000,     /* R18483 */
+    0x0000,     /* R18484 */
+    0x0000,     /* R18485 */
+    0x0000,     /* R18486 */
+    0x0000,     /* R18487 */
+    0x0000,     /* R18488 */
+    0x0000,     /* R18489 */
+    0x0000,     /* R18490 */
+    0x0000,     /* R18491 */
+    0x0000,     /* R18492 */
+    0x0000,     /* R18493 */
+    0x0000,     /* R18494 */
+    0x0000,     /* R18495 */
+    0x0000,     /* R18496 */
+    0x0000,     /* R18497 */
+    0x0000,     /* R18498 */
+    0x0000,     /* R18499 */
+    0x0000,     /* R18500 */
+    0x0000,     /* R18501 */
+    0x0000,     /* R18502 */
+    0x0000,     /* R18503 */
+    0x0000,     /* R18504 */
+    0x0000,     /* R18505 */
+    0x0000,     /* R18506 */
+    0x0000,     /* R18507 */
+    0x0000,     /* R18508 */
+    0x0000,     /* R18509 */
+    0x0000,     /* R18510 */
+    0x0000,     /* R18511 */
+    0x0000,     /* R18512 */
+    0x0000,     /* R18513 */
+    0x0000,     /* R18514 */
+    0x0000,     /* R18515 */
+    0x0000,     /* R18516 */
+    0x0000,     /* R18517 */
+    0x0000,     /* R18518 */
+    0x0000,     /* R18519 */
+    0x0000,     /* R18520 */
+    0x0000,     /* R18521 */
+    0x0000,     /* R18522 */
+    0x0000,     /* R18523 */
+    0x0000,     /* R18524 */
+    0x0000,     /* R18525 */
+    0x0000,     /* R18526 */
+    0x0000,     /* R18527 */
+    0x0000,     /* R18528 */
+    0x0000,     /* R18529 */
+    0x0000,     /* R18530 */
+    0x0000,     /* R18531 */
+    0x0000,     /* R18532 */
+    0x0000,     /* R18533 */
+    0x0000,     /* R18534 */
+    0x0000,     /* R18535 */
+    0x0000,     /* R18536 */
+    0x0000,     /* R18537 */
+    0x0000,     /* R18538 */
+    0x0000,     /* R18539 */
+    0x0000,     /* R18540 */
+    0x0000,     /* R18541 */
+    0x0000,     /* R18542 */
+    0x0000,     /* R18543 */
+    0x0000,     /* R18544 */
+    0x0000,     /* R18545 */
+    0x0000,     /* R18546 */
+    0x0000,     /* R18547 */
+    0x0000,     /* R18548 */
+    0x0000,     /* R18549 */
+    0x0000,     /* R18550 */
+    0x0000,     /* R18551 */
+    0x0000,     /* R18552 */
+    0x0000,     /* R18553 */
+    0x0000,     /* R18554 */
+    0x0000,     /* R18555 */
+    0x0000,     /* R18556 */
+    0x0000,     /* R18557 */
+    0x0000,     /* R18558 */
+    0x0000,     /* R18559 */
+    0x0000,     /* R18560 */
+    0x0000,     /* R18561 */
+    0x0000,     /* R18562 */
+    0x0000,     /* R18563 */
+    0x0000,     /* R18564 */
+    0x0000,     /* R18565 */
+    0x0000,     /* R18566 */
+    0x0000,     /* R18567 */
+    0x0000,     /* R18568 */
+    0x0000,     /* R18569 */
+    0x0000,     /* R18570 */
+    0x0000,     /* R18571 */
+    0x0000,     /* R18572 */
+    0x0000,     /* R18573 */
+    0x0000,     /* R18574 */
+    0x0000,     /* R18575 */
+    0x0000,     /* R18576 */
+    0x0000,     /* R18577 */
+    0x0000,     /* R18578 */
+    0x0000,     /* R18579 */
+    0x0000,     /* R18580 */
+    0x0000,     /* R18581 */
+    0x0000,     /* R18582 */
+    0x0000,     /* R18583 */
+    0x0000,     /* R18584 */
+    0x0000,     /* R18585 */
+    0x0000,     /* R18586 */
+    0x0000,     /* R18587 */
+    0x0000,     /* R18588 */
+    0x0000,     /* R18589 */
+    0x0000,     /* R18590 */
+    0x0000,     /* R18591 */
+    0x0000,     /* R18592 */
+    0x0000,     /* R18593 */
+    0x0000,     /* R18594 */
+    0x0000,     /* R18595 */
+    0x0000,     /* R18596 */
+    0x0000,     /* R18597 */
+    0x0000,     /* R18598 */
+    0x0000,     /* R18599 */
+    0x0000,     /* R18600 */
+    0x0000,     /* R18601 */
+    0x0000,     /* R18602 */
+    0x0000,     /* R18603 */
+    0x0000,     /* R18604 */
+    0x0000,     /* R18605 */
+    0x0000,     /* R18606 */
+    0x0000,     /* R18607 */
+    0x0000,     /* R18608 */
+    0x0000,     /* R18609 */
+    0x0000,     /* R18610 */
+    0x0000,     /* R18611 */
+    0x0000,     /* R18612 */
+    0x0000,     /* R18613 */
+    0x0000,     /* R18614 */
+    0x0000,     /* R18615 */
+    0x0000,     /* R18616 */
+    0x0000,     /* R18617 */
+    0x0000,     /* R18618 */
+    0x0000,     /* R18619 */
+    0x0000,     /* R18620 */
+    0x0000,     /* R18621 */
+    0x0000,     /* R18622 */
+    0x0000,     /* R18623 */
+    0x0000,     /* R18624 */
+    0x0000,     /* R18625 */
+    0x0000,     /* R18626 */
+    0x0000,     /* R18627 */
+    0x0000,     /* R18628 */
+    0x0000,     /* R18629 */
+    0x0000,     /* R18630 */
+    0x0000,     /* R18631 */
+    0x0000,     /* R18632 */
+    0x0000,     /* R18633 */
+    0x0000,     /* R18634 */
+    0x0000,     /* R18635 */
+    0x0000,     /* R18636 */
+    0x0000,     /* R18637 */
+    0x0000,     /* R18638 */
+    0x0000,     /* R18639 */
+    0x0000,     /* R18640 */
+    0x0000,     /* R18641 */
+    0x0000,     /* R18642 */
+    0x0000,     /* R18643 */
+    0x0000,     /* R18644 */
+    0x0000,     /* R18645 */
+    0x0000,     /* R18646 */
+    0x0000,     /* R18647 */
+    0x0000,     /* R18648 */
+    0x0000,     /* R18649 */
+    0x0000,     /* R18650 */
+    0x0000,     /* R18651 */
+    0x0000,     /* R18652 */
+    0x0000,     /* R18653 */
+    0x0000,     /* R18654 */
+    0x0000,     /* R18655 */
+    0x0000,     /* R18656 */
+    0x0000,     /* R18657 */
+    0x0000,     /* R18658 */
+    0x0000,     /* R18659 */
+    0x0000,     /* R18660 */
+    0x0000,     /* R18661 */
+    0x0000,     /* R18662 */
+    0x0000,     /* R18663 */
+    0x0000,     /* R18664 */
+    0x0000,     /* R18665 */
+    0x0000,     /* R18666 */
+    0x0000,     /* R18667 */
+    0x0000,     /* R18668 */
+    0x0000,     /* R18669 */
+    0x0000,     /* R18670 */
+    0x0000,     /* R18671 */
+    0x0000,     /* R18672 */
+    0x0000,     /* R18673 */
+    0x0000,     /* R18674 */
+    0x0000,     /* R18675 */
+    0x0000,     /* R18676 */
+    0x0000,     /* R18677 */
+    0x0000,     /* R18678 */
+    0x0000,     /* R18679 */
+    0x0000,     /* R18680 */
+    0x0000,     /* R18681 */
+    0x0000,     /* R18682 */
+    0x0000,     /* R18683 */
+    0x0000,     /* R18684 */
+    0x0000,     /* R18685 */
+    0x0000,     /* R18686 */
+    0x0000,     /* R18687 */
+    0x0000,     /* R18688 */
+    0x0000,     /* R18689 */
+    0x0000,     /* R18690 */
+    0x0000,     /* R18691 */
+    0x0000,     /* R18692 */
+    0x0000,     /* R18693 */
+    0x0000,     /* R18694 */
+    0x0000,     /* R18695 */
+    0x0000,     /* R18696 */
+    0x0000,     /* R18697 */
+    0x0000,     /* R18698 */
+    0x0000,     /* R18699 */
+    0x0000,     /* R18700 */
+    0x0000,     /* R18701 */
+    0x0000,     /* R18702 */
+    0x0000,     /* R18703 */
+    0x0000,     /* R18704 */
+    0x0000,     /* R18705 */
+    0x0000,     /* R18706 */
+    0x0000,     /* R18707 */
+    0x0000,     /* R18708 */
+    0x0000,     /* R18709 */
+    0x0000,     /* R18710 */
+    0x0000,     /* R18711 */
+    0x0000,     /* R18712 */
+    0x0000,     /* R18713 */
+    0x0000,     /* R18714 */
+    0x0000,     /* R18715 */
+    0x0000,     /* R18716 */
+    0x0000,     /* R18717 */
+    0x0000,     /* R18718 */
+    0x0000,     /* R18719 */
+    0x0000,     /* R18720 */
+    0x0000,     /* R18721 */
+    0x0000,     /* R18722 */
+    0x0000,     /* R18723 */
+    0x0000,     /* R18724 */
+    0x0000,     /* R18725 */
+    0x0000,     /* R18726 */
+    0x0000,     /* R18727 */
+    0x0000,     /* R18728 */
+    0x0000,     /* R18729 */
+    0x0000,     /* R18730 */
+    0x0000,     /* R18731 */
+    0x0000,     /* R18732 */
+    0x0000,     /* R18733 */
+    0x0000,     /* R18734 */
+    0x0000,     /* R18735 */
+    0x0000,     /* R18736 */
+    0x0000,     /* R18737 */
+    0x0000,     /* R18738 */
+    0x0000,     /* R18739 */
+    0x0000,     /* R18740 */
+    0x0000,     /* R18741 */
+    0x0000,     /* R18742 */
+    0x0000,     /* R18743 */
+    0x0000,     /* R18744 */
+    0x0000,     /* R18745 */
+    0x0000,     /* R18746 */
+    0x0000,     /* R18747 */
+    0x0000,     /* R18748 */
+    0x0000,     /* R18749 */
+    0x0000,     /* R18750 */
+    0x0000,     /* R18751 */
+    0x0000,     /* R18752 */
+    0x0000,     /* R18753 */
+    0x0000,     /* R18754 */
+    0x0000,     /* R18755 */
+    0x0000,     /* R18756 */
+    0x0000,     /* R18757 */
+    0x0000,     /* R18758 */
+    0x0000,     /* R18759 */
+    0x0000,     /* R18760 */
+    0x0000,     /* R18761 */
+    0x0000,     /* R18762 */
+    0x0000,     /* R18763 */
+    0x0000,     /* R18764 */
+    0x0000,     /* R18765 */
+    0x0000,     /* R18766 */
+    0x0000,     /* R18767 */
+    0x0000,     /* R18768 */
+    0x0000,     /* R18769 */
+    0x0000,     /* R18770 */
+    0x0000,     /* R18771 */
+    0x0000,     /* R18772 */
+    0x0000,     /* R18773 */
+    0x0000,     /* R18774 */
+    0x0000,     /* R18775 */
+    0x0000,     /* R18776 */
+    0x0000,     /* R18777 */
+    0x0000,     /* R18778 */
+    0x0000,     /* R18779 */
+    0x0000,     /* R18780 */
+    0x0000,     /* R18781 */
+    0x0000,     /* R18782 */
+    0x0000,     /* R18783 */
+    0x0000,     /* R18784 */
+    0x0000,     /* R18785 */
+    0x0000,     /* R18786 */
+    0x0000,     /* R18787 */
+    0x0000,     /* R18788 */
+    0x0000,     /* R18789 */
+    0x0000,     /* R18790 */
+    0x0000,     /* R18791 */
+    0x0000,     /* R18792 */
+    0x0000,     /* R18793 */
+    0x0000,     /* R18794 */
+    0x0000,     /* R18795 */
+    0x0000,     /* R18796 */
+    0x0000,     /* R18797 */
+    0x0000,     /* R18798 */
+    0x0000,     /* R18799 */
+    0x0000,     /* R18800 */
+    0x0000,     /* R18801 */
+    0x0000,     /* R18802 */
+    0x0000,     /* R18803 */
+    0x0000,     /* R18804 */
+    0x0000,     /* R18805 */
+    0x0000,     /* R18806 */
+    0x0000,     /* R18807 */
+    0x0000,     /* R18808 */
+    0x0000,     /* R18809 */
+    0x0000,     /* R18810 */
+    0x0000,     /* R18811 */
+    0x0000,     /* R18812 */
+    0x0000,     /* R18813 */
+    0x0000,     /* R18814 */
+    0x0000,     /* R18815 */
+    0x0000,     /* R18816 */
+    0x0000,     /* R18817 */
+    0x0000,     /* R18818 */
+    0x0000,     /* R18819 */
+    0x0000,     /* R18820 */
+    0x0000,     /* R18821 */
+    0x0000,     /* R18822 */
+    0x0000,     /* R18823 */
+    0x0000,     /* R18824 */
+    0x0000,     /* R18825 */
+    0x0000,     /* R18826 */
+    0x0000,     /* R18827 */
+    0x0000,     /* R18828 */
+    0x0000,     /* R18829 */
+    0x0000,     /* R18830 */
+    0x0000,     /* R18831 */
+    0x0000,     /* R18832 */
+    0x0000,     /* R18833 */
+    0x0000,     /* R18834 */
+    0x0000,     /* R18835 */
+    0x0000,     /* R18836 */
+    0x0000,     /* R18837 */
+    0x0000,     /* R18838 */
+    0x0000,     /* R18839 */
+    0x0000,     /* R18840 */
+    0x0000,     /* R18841 */
+    0x0000,     /* R18842 */
+    0x0000,     /* R18843 */
+    0x0000,     /* R18844 */
+    0x0000,     /* R18845 */
+    0x0000,     /* R18846 */
+    0x0000,     /* R18847 */
+    0x0000,     /* R18848 */
+    0x0000,     /* R18849 */
+    0x0000,     /* R18850 */
+    0x0000,     /* R18851 */
+    0x0000,     /* R18852 */
+    0x0000,     /* R18853 */
+    0x0000,     /* R18854 */
+    0x0000,     /* R18855 */
+    0x0000,     /* R18856 */
+    0x0000,     /* R18857 */
+    0x0000,     /* R18858 */
+    0x0000,     /* R18859 */
+    0x0000,     /* R18860 */
+    0x0000,     /* R18861 */
+    0x0000,     /* R18862 */
+    0x0000,     /* R18863 */
+    0x0000,     /* R18864 */
+    0x0000,     /* R18865 */
+    0x0000,     /* R18866 */
+    0x0000,     /* R18867 */
+    0x0000,     /* R18868 */
+    0x0000,     /* R18869 */
+    0x0000,     /* R18870 */
+    0x0000,     /* R18871 */
+    0x0000,     /* R18872 */
+    0x0000,     /* R18873 */
+    0x0000,     /* R18874 */
+    0x0000,     /* R18875 */
+    0x0000,     /* R18876 */
+    0x0000,     /* R18877 */
+    0x0000,     /* R18878 */
+    0x0000,     /* R18879 */
+    0x0000,     /* R18880 */
+    0x0000,     /* R18881 */
+    0x0000,     /* R18882 */
+    0x0000,     /* R18883 */
+    0x0000,     /* R18884 */
+    0x0000,     /* R18885 */
+    0x0000,     /* R18886 */
+    0x0000,     /* R18887 */
+    0x0000,     /* R18888 */
+    0x0000,     /* R18889 */
+    0x0000,     /* R18890 */
+    0x0000,     /* R18891 */
+    0x0000,     /* R18892 */
+    0x0000,     /* R18893 */
+    0x0000,     /* R18894 */
+    0x0000,     /* R18895 */
+    0x0000,     /* R18896 */
+    0x0000,     /* R18897 */
+    0x0000,     /* R18898 */
+    0x0000,     /* R18899 */
+    0x0000,     /* R18900 */
+    0x0000,     /* R18901 */
+    0x0000,     /* R18902 */
+    0x0000,     /* R18903 */
+    0x0000,     /* R18904 */
+    0x0000,     /* R18905 */
+    0x0000,     /* R18906 */
+    0x0000,     /* R18907 */
+    0x0000,     /* R18908 */
+    0x0000,     /* R18909 */
+    0x0000,     /* R18910 */
+    0x0000,     /* R18911 */
+    0x0000,     /* R18912 */
+    0x0000,     /* R18913 */
+    0x0000,     /* R18914 */
+    0x0000,     /* R18915 */
+    0x0000,     /* R18916 */
+    0x0000,     /* R18917 */
+    0x0000,     /* R18918 */
+    0x0000,     /* R18919 */
+    0x0000,     /* R18920 */
+    0x0000,     /* R18921 */
+    0x0000,     /* R18922 */
+    0x0000,     /* R18923 */
+    0x0000,     /* R18924 */
+    0x0000,     /* R18925 */
+    0x0000,     /* R18926 */
+    0x0000,     /* R18927 */
+    0x0000,     /* R18928 */
+    0x0000,     /* R18929 */
+    0x0000,     /* R18930 */
+    0x0000,     /* R18931 */
+    0x0000,     /* R18932 */
+    0x0000,     /* R18933 */
+    0x0000,     /* R18934 */
+    0x0000,     /* R18935 */
+    0x0000,     /* R18936 */
+    0x0000,     /* R18937 */
+    0x0000,     /* R18938 */
+    0x0000,     /* R18939 */
+    0x0000,     /* R18940 */
+    0x0000,     /* R18941 */
+    0x0000,     /* R18942 */
+    0x0000,     /* R18943 */
+    0x007F,     /* R18944 - ADCR_RETUNE_C1_1 */
+    0xFFFF,     /* R18945 - ADCR_RETUNE_C1_0 */
+    0x0000,     /* R18946 - ADCR_RETUNE_C2_1 */
+    0x0000,     /* R18947 - ADCR_RETUNE_C2_0 */
+    0x0000,     /* R18948 - ADCR_RETUNE_C3_1 */
+    0x0000,     /* R18949 - ADCR_RETUNE_C3_0 */
+    0x0000,     /* R18950 - ADCR_RETUNE_C4_1 */
+    0x0000,     /* R18951 - ADCR_RETUNE_C4_0 */
+    0x0000,     /* R18952 - ADCR_RETUNE_C5_1 */
+    0x0000,     /* R18953 - ADCR_RETUNE_C5_0 */
+    0x0000,     /* R18954 - ADCR_RETUNE_C6_1 */
+    0x0000,     /* R18955 - ADCR_RETUNE_C6_0 */
+    0x0000,     /* R18956 - ADCR_RETUNE_C7_1 */
+    0x0000,     /* R18957 - ADCR_RETUNE_C7_0 */
+    0x0000,     /* R18958 - ADCR_RETUNE_C8_1 */
+    0x0000,     /* R18959 - ADCR_RETUNE_C8_0 */
+    0x0000,     /* R18960 - ADCR_RETUNE_C9_1 */
+    0x0000,     /* R18961 - ADCR_RETUNE_C9_0 */
+    0x0000,     /* R18962 - ADCR_RETUNE_C10_1 */
+    0x0000,     /* R18963 - ADCR_RETUNE_C10_0 */
+    0x0000,     /* R18964 - ADCR_RETUNE_C11_1 */
+    0x0000,     /* R18965 - ADCR_RETUNE_C11_0 */
+    0x0000,     /* R18966 - ADCR_RETUNE_C12_1 */
+    0x0000,     /* R18967 - ADCR_RETUNE_C12_0 */
+    0x0000,     /* R18968 - ADCR_RETUNE_C13_1 */
+    0x0000,     /* R18969 - ADCR_RETUNE_C13_0 */
+    0x0000,     /* R18970 - ADCR_RETUNE_C14_1 */
+    0x0000,     /* R18971 - ADCR_RETUNE_C14_0 */
+    0x0000,     /* R18972 - ADCR_RETUNE_C15_1 */
+    0x0000,     /* R18973 - ADCR_RETUNE_C15_0 */
+    0x0000,     /* R18974 - ADCR_RETUNE_C16_1 */
+    0x0000,     /* R18975 - ADCR_RETUNE_C16_0 */
+    0x0000,     /* R18976 - ADCR_RETUNE_C17_1 */
+    0x0000,     /* R18977 - ADCR_RETUNE_C17_0 */
+    0x0000,     /* R18978 - ADCR_RETUNE_C18_1 */
+    0x0000,     /* R18979 - ADCR_RETUNE_C18_0 */
+    0x0000,     /* R18980 - ADCR_RETUNE_C19_1 */
+    0x0000,     /* R18981 - ADCR_RETUNE_C19_0 */
+    0x0000,     /* R18982 - ADCR_RETUNE_C20_1 */
+    0x0000,     /* R18983 - ADCR_RETUNE_C20_0 */
+    0x0000,     /* R18984 - ADCR_RETUNE_C21_1 */
+    0x0000,     /* R18985 - ADCR_RETUNE_C21_0 */
+    0x0000,     /* R18986 - ADCR_RETUNE_C22_1 */
+    0x0000,     /* R18987 - ADCR_RETUNE_C22_0 */
+    0x0000,     /* R18988 - ADCR_RETUNE_C23_1 */
+    0x0000,     /* R18989 - ADCR_RETUNE_C23_0 */
+    0x0000,     /* R18990 - ADCR_RETUNE_C24_1 */
+    0x0000,     /* R18991 - ADCR_RETUNE_C24_0 */
+    0x0000,     /* R18992 - ADCR_RETUNE_C25_1 */
+    0x0000,     /* R18993 - ADCR_RETUNE_C25_0 */
+    0x0000,     /* R18994 - ADCR_RETUNE_C26_1 */
+    0x0000,     /* R18995 - ADCR_RETUNE_C26_0 */
+    0x0000,     /* R18996 - ADCR_RETUNE_C27_1 */
+    0x0000,     /* R18997 - ADCR_RETUNE_C27_0 */
+    0x0000,     /* R18998 - ADCR_RETUNE_C28_1 */
+    0x0000,     /* R18999 - ADCR_RETUNE_C28_0 */
+    0x0000,     /* R19000 - ADCR_RETUNE_C29_1 */
+    0x0000,     /* R19001 - ADCR_RETUNE_C29_0 */
+    0x0000,     /* R19002 - ADCR_RETUNE_C30_1 */
+    0x0000,     /* R19003 - ADCR_RETUNE_C30_0 */
+    0x0000,     /* R19004 - ADCR_RETUNE_C31_1 */
+    0x0000,     /* R19005 - ADCR_RETUNE_C31_0 */
+    0x0000,     /* R19006 - ADCR_RETUNE_C32_1 */
+    0x0000,     /* R19007 - ADCR_RETUNE_C32_0 */
+    0x0000,     /* R19008 */
+    0x0000,     /* R19009 */
+    0x0000,     /* R19010 */
+    0x0000,     /* R19011 */
+    0x0000,     /* R19012 */
+    0x0000,     /* R19013 */
+    0x0000,     /* R19014 */
+    0x0000,     /* R19015 */
+    0x0000,     /* R19016 */
+    0x0000,     /* R19017 */
+    0x0000,     /* R19018 */
+    0x0000,     /* R19019 */
+    0x0000,     /* R19020 */
+    0x0000,     /* R19021 */
+    0x0000,     /* R19022 */
+    0x0000,     /* R19023 */
+    0x0000,     /* R19024 */
+    0x0000,     /* R19025 */
+    0x0000,     /* R19026 */
+    0x0000,     /* R19027 */
+    0x0000,     /* R19028 */
+    0x0000,     /* R19029 */
+    0x0000,     /* R19030 */
+    0x0000,     /* R19031 */
+    0x0000,     /* R19032 */
+    0x0000,     /* R19033 */
+    0x0000,     /* R19034 */
+    0x0000,     /* R19035 */
+    0x0000,     /* R19036 */
+    0x0000,     /* R19037 */
+    0x0000,     /* R19038 */
+    0x0000,     /* R19039 */
+    0x0000,     /* R19040 */
+    0x0000,     /* R19041 */
+    0x0000,     /* R19042 */
+    0x0000,     /* R19043 */
+    0x0000,     /* R19044 */
+    0x0000,     /* R19045 */
+    0x0000,     /* R19046 */
+    0x0000,     /* R19047 */
+    0x0000,     /* R19048 */
+    0x0000,     /* R19049 */
+    0x0000,     /* R19050 */
+    0x0000,     /* R19051 */
+    0x0000,     /* R19052 */
+    0x0000,     /* R19053 */
+    0x0000,     /* R19054 */
+    0x0000,     /* R19055 */
+    0x0000,     /* R19056 */
+    0x0000,     /* R19057 */
+    0x0000,     /* R19058 */
+    0x0000,     /* R19059 */
+    0x0000,     /* R19060 */
+    0x0000,     /* R19061 */
+    0x0000,     /* R19062 */
+    0x0000,     /* R19063 */
+    0x0000,     /* R19064 */
+    0x0000,     /* R19065 */
+    0x0000,     /* R19066 */
+    0x0000,     /* R19067 */
+    0x0000,     /* R19068 */
+    0x0000,     /* R19069 */
+    0x0000,     /* R19070 */
+    0x0000,     /* R19071 */
+    0x0000,     /* R19072 */
+    0x0000,     /* R19073 */
+    0x0000,     /* R19074 */
+    0x0000,     /* R19075 */
+    0x0000,     /* R19076 */
+    0x0000,     /* R19077 */
+    0x0000,     /* R19078 */
+    0x0000,     /* R19079 */
+    0x0000,     /* R19080 */
+    0x0000,     /* R19081 */
+    0x0000,     /* R19082 */
+    0x0000,     /* R19083 */
+    0x0000,     /* R19084 */
+    0x0000,     /* R19085 */
+    0x0000,     /* R19086 */
+    0x0000,     /* R19087 */
+    0x0000,     /* R19088 */
+    0x0000,     /* R19089 */
+    0x0000,     /* R19090 */
+    0x0000,     /* R19091 */
+    0x0000,     /* R19092 */
+    0x0000,     /* R19093 */
+    0x0000,     /* R19094 */
+    0x0000,     /* R19095 */
+    0x0000,     /* R19096 */
+    0x0000,     /* R19097 */
+    0x0000,     /* R19098 */
+    0x0000,     /* R19099 */
+    0x0000,     /* R19100 */
+    0x0000,     /* R19101 */
+    0x0000,     /* R19102 */
+    0x0000,     /* R19103 */
+    0x0000,     /* R19104 */
+    0x0000,     /* R19105 */
+    0x0000,     /* R19106 */
+    0x0000,     /* R19107 */
+    0x0000,     /* R19108 */
+    0x0000,     /* R19109 */
+    0x0000,     /* R19110 */
+    0x0000,     /* R19111 */
+    0x0000,     /* R19112 */
+    0x0000,     /* R19113 */
+    0x0000,     /* R19114 */
+    0x0000,     /* R19115 */
+    0x0000,     /* R19116 */
+    0x0000,     /* R19117 */
+    0x0000,     /* R19118 */
+    0x0000,     /* R19119 */
+    0x0000,     /* R19120 */
+    0x0000,     /* R19121 */
+    0x0000,     /* R19122 */
+    0x0000,     /* R19123 */
+    0x0000,     /* R19124 */
+    0x0000,     /* R19125 */
+    0x0000,     /* R19126 */
+    0x0000,     /* R19127 */
+    0x0000,     /* R19128 */
+    0x0000,     /* R19129 */
+    0x0000,     /* R19130 */
+    0x0000,     /* R19131 */
+    0x0000,     /* R19132 */
+    0x0000,     /* R19133 */
+    0x0000,     /* R19134 */
+    0x0000,     /* R19135 */
+    0x0000,     /* R19136 */
+    0x0000,     /* R19137 */
+    0x0000,     /* R19138 */
+    0x0000,     /* R19139 */
+    0x0000,     /* R19140 */
+    0x0000,     /* R19141 */
+    0x0000,     /* R19142 */
+    0x0000,     /* R19143 */
+    0x0000,     /* R19144 */
+    0x0000,     /* R19145 */
+    0x0000,     /* R19146 */
+    0x0000,     /* R19147 */
+    0x0000,     /* R19148 */
+    0x0000,     /* R19149 */
+    0x0000,     /* R19150 */
+    0x0000,     /* R19151 */
+    0x0000,     /* R19152 */
+    0x0000,     /* R19153 */
+    0x0000,     /* R19154 */
+    0x0000,     /* R19155 */
+    0x0000,     /* R19156 */
+    0x0000,     /* R19157 */
+    0x0000,     /* R19158 */
+    0x0000,     /* R19159 */
+    0x0000,     /* R19160 */
+    0x0000,     /* R19161 */
+    0x0000,     /* R19162 */
+    0x0000,     /* R19163 */
+    0x0000,     /* R19164 */
+    0x0000,     /* R19165 */
+    0x0000,     /* R19166 */
+    0x0000,     /* R19167 */
+    0x0000,     /* R19168 */
+    0x0000,     /* R19169 */
+    0x0000,     /* R19170 */
+    0x0000,     /* R19171 */
+    0x0000,     /* R19172 */
+    0x0000,     /* R19173 */
+    0x0000,     /* R19174 */
+    0x0000,     /* R19175 */
+    0x0000,     /* R19176 */
+    0x0000,     /* R19177 */
+    0x0000,     /* R19178 */
+    0x0000,     /* R19179 */
+    0x0000,     /* R19180 */
+    0x0000,     /* R19181 */
+    0x0000,     /* R19182 */
+    0x0000,     /* R19183 */
+    0x0000,     /* R19184 */
+    0x0000,     /* R19185 */
+    0x0000,     /* R19186 */
+    0x0000,     /* R19187 */
+    0x0000,     /* R19188 */
+    0x0000,     /* R19189 */
+    0x0000,     /* R19190 */
+    0x0000,     /* R19191 */
+    0x0000,     /* R19192 */
+    0x0000,     /* R19193 */
+    0x0000,     /* R19194 */
+    0x0000,     /* R19195 */
+    0x0000,     /* R19196 */
+    0x0000,     /* R19197 */
+    0x0000,     /* R19198 */
+    0x0000,     /* R19199 */
+    0x0000,     /* R19200 */
+    0x0000,     /* R19201 */
+    0x0000,     /* R19202 */
+    0x0000,     /* R19203 */
+    0x0000,     /* R19204 */
+    0x0000,     /* R19205 */
+    0x0000,     /* R19206 */
+    0x0000,     /* R19207 */
+    0x0000,     /* R19208 */
+    0x0000,     /* R19209 */
+    0x0000,     /* R19210 */
+    0x0000,     /* R19211 */
+    0x0000,     /* R19212 */
+    0x0000,     /* R19213 */
+    0x0000,     /* R19214 */
+    0x0000,     /* R19215 */
+    0x0000,     /* R19216 */
+    0x0000,     /* R19217 */
+    0x0000,     /* R19218 */
+    0x0000,     /* R19219 */
+    0x0000,     /* R19220 */
+    0x0000,     /* R19221 */
+    0x0000,     /* R19222 */
+    0x0000,     /* R19223 */
+    0x0000,     /* R19224 */
+    0x0000,     /* R19225 */
+    0x0000,     /* R19226 */
+    0x0000,     /* R19227 */
+    0x0000,     /* R19228 */
+    0x0000,     /* R19229 */
+    0x0000,     /* R19230 */
+    0x0000,     /* R19231 */
+    0x0000,     /* R19232 */
+    0x0000,     /* R19233 */
+    0x0000,     /* R19234 */
+    0x0000,     /* R19235 */
+    0x0000,     /* R19236 */
+    0x0000,     /* R19237 */
+    0x0000,     /* R19238 */
+    0x0000,     /* R19239 */
+    0x0000,     /* R19240 */
+    0x0000,     /* R19241 */
+    0x0000,     /* R19242 */
+    0x0000,     /* R19243 */
+    0x0000,     /* R19244 */
+    0x0000,     /* R19245 */
+    0x0000,     /* R19246 */
+    0x0000,     /* R19247 */
+    0x0000,     /* R19248 */
+    0x0000,     /* R19249 */
+    0x0000,     /* R19250 */
+    0x0000,     /* R19251 */
+    0x0000,     /* R19252 */
+    0x0000,     /* R19253 */
+    0x0000,     /* R19254 */
+    0x0000,     /* R19255 */
+    0x0000,     /* R19256 */
+    0x0000,     /* R19257 */
+    0x0000,     /* R19258 */
+    0x0000,     /* R19259 */
+    0x0000,     /* R19260 */
+    0x0000,     /* R19261 */
+    0x0000,     /* R19262 */
+    0x0000,     /* R19263 */
+    0x0000,     /* R19264 */
+    0x0000,     /* R19265 */
+    0x0000,     /* R19266 */
+    0x0000,     /* R19267 */
+    0x0000,     /* R19268 */
+    0x0000,     /* R19269 */
+    0x0000,     /* R19270 */
+    0x0000,     /* R19271 */
+    0x0000,     /* R19272 */
+    0x0000,     /* R19273 */
+    0x0000,     /* R19274 */
+    0x0000,     /* R19275 */
+    0x0000,     /* R19276 */
+    0x0000,     /* R19277 */
+    0x0000,     /* R19278 */
+    0x0000,     /* R19279 */
+    0x0000,     /* R19280 */
+    0x0000,     /* R19281 */
+    0x0000,     /* R19282 */
+    0x0000,     /* R19283 */
+    0x0000,     /* R19284 */
+    0x0000,     /* R19285 */
+    0x0000,     /* R19286 */
+    0x0000,     /* R19287 */
+    0x0000,     /* R19288 */
+    0x0000,     /* R19289 */
+    0x0000,     /* R19290 */
+    0x0000,     /* R19291 */
+    0x0000,     /* R19292 */
+    0x0000,     /* R19293 */
+    0x0000,     /* R19294 */
+    0x0000,     /* R19295 */
+    0x0000,     /* R19296 */
+    0x0000,     /* R19297 */
+    0x0000,     /* R19298 */
+    0x0000,     /* R19299 */
+    0x0000,     /* R19300 */
+    0x0000,     /* R19301 */
+    0x0000,     /* R19302 */
+    0x0000,     /* R19303 */
+    0x0000,     /* R19304 */
+    0x0000,     /* R19305 */
+    0x0000,     /* R19306 */
+    0x0000,     /* R19307 */
+    0x0000,     /* R19308 */
+    0x0000,     /* R19309 */
+    0x0000,     /* R19310 */
+    0x0000,     /* R19311 */
+    0x0000,     /* R19312 */
+    0x0000,     /* R19313 */
+    0x0000,     /* R19314 */
+    0x0000,     /* R19315 */
+    0x0000,     /* R19316 */
+    0x0000,     /* R19317 */
+    0x0000,     /* R19318 */
+    0x0000,     /* R19319 */
+    0x0000,     /* R19320 */
+    0x0000,     /* R19321 */
+    0x0000,     /* R19322 */
+    0x0000,     /* R19323 */
+    0x0000,     /* R19324 */
+    0x0000,     /* R19325 */
+    0x0000,     /* R19326 */
+    0x0000,     /* R19327 */
+    0x0000,     /* R19328 */
+    0x0000,     /* R19329 */
+    0x0000,     /* R19330 */
+    0x0000,     /* R19331 */
+    0x0000,     /* R19332 */
+    0x0000,     /* R19333 */
+    0x0000,     /* R19334 */
+    0x0000,     /* R19335 */
+    0x0000,     /* R19336 */
+    0x0000,     /* R19337 */
+    0x0000,     /* R19338 */
+    0x0000,     /* R19339 */
+    0x0000,     /* R19340 */
+    0x0000,     /* R19341 */
+    0x0000,     /* R19342 */
+    0x0000,     /* R19343 */
+    0x0000,     /* R19344 */
+    0x0000,     /* R19345 */
+    0x0000,     /* R19346 */
+    0x0000,     /* R19347 */
+    0x0000,     /* R19348 */
+    0x0000,     /* R19349 */
+    0x0000,     /* R19350 */
+    0x0000,     /* R19351 */
+    0x0000,     /* R19352 */
+    0x0000,     /* R19353 */
+    0x0000,     /* R19354 */
+    0x0000,     /* R19355 */
+    0x0000,     /* R19356 */
+    0x0000,     /* R19357 */
+    0x0000,     /* R19358 */
+    0x0000,     /* R19359 */
+    0x0000,     /* R19360 */
+    0x0000,     /* R19361 */
+    0x0000,     /* R19362 */
+    0x0000,     /* R19363 */
+    0x0000,     /* R19364 */
+    0x0000,     /* R19365 */
+    0x0000,     /* R19366 */
+    0x0000,     /* R19367 */
+    0x0000,     /* R19368 */
+    0x0000,     /* R19369 */
+    0x0000,     /* R19370 */
+    0x0000,     /* R19371 */
+    0x0000,     /* R19372 */
+    0x0000,     /* R19373 */
+    0x0000,     /* R19374 */
+    0x0000,     /* R19375 */
+    0x0000,     /* R19376 */
+    0x0000,     /* R19377 */
+    0x0000,     /* R19378 */
+    0x0000,     /* R19379 */
+    0x0000,     /* R19380 */
+    0x0000,     /* R19381 */
+    0x0000,     /* R19382 */
+    0x0000,     /* R19383 */
+    0x0000,     /* R19384 */
+    0x0000,     /* R19385 */
+    0x0000,     /* R19386 */
+    0x0000,     /* R19387 */
+    0x0000,     /* R19388 */
+    0x0000,     /* R19389 */
+    0x0000,     /* R19390 */
+    0x0000,     /* R19391 */
+    0x0000,     /* R19392 */
+    0x0000,     /* R19393 */
+    0x0000,     /* R19394 */
+    0x0000,     /* R19395 */
+    0x0000,     /* R19396 */
+    0x0000,     /* R19397 */
+    0x0000,     /* R19398 */
+    0x0000,     /* R19399 */
+    0x0000,     /* R19400 */
+    0x0000,     /* R19401 */
+    0x0000,     /* R19402 */
+    0x0000,     /* R19403 */
+    0x0000,     /* R19404 */
+    0x0000,     /* R19405 */
+    0x0000,     /* R19406 */
+    0x0000,     /* R19407 */
+    0x0000,     /* R19408 */
+    0x0000,     /* R19409 */
+    0x0000,     /* R19410 */
+    0x0000,     /* R19411 */
+    0x0000,     /* R19412 */
+    0x0000,     /* R19413 */
+    0x0000,     /* R19414 */
+    0x0000,     /* R19415 */
+    0x0000,     /* R19416 */
+    0x0000,     /* R19417 */
+    0x0000,     /* R19418 */
+    0x0000,     /* R19419 */
+    0x0000,     /* R19420 */
+    0x0000,     /* R19421 */
+    0x0000,     /* R19422 */
+    0x0000,     /* R19423 */
+    0x0000,     /* R19424 */
+    0x0000,     /* R19425 */
+    0x0000,     /* R19426 */
+    0x0000,     /* R19427 */
+    0x0000,     /* R19428 */
+    0x0000,     /* R19429 */
+    0x0000,     /* R19430 */
+    0x0000,     /* R19431 */
+    0x0000,     /* R19432 */
+    0x0000,     /* R19433 */
+    0x0000,     /* R19434 */
+    0x0000,     /* R19435 */
+    0x0000,     /* R19436 */
+    0x0000,     /* R19437 */
+    0x0000,     /* R19438 */
+    0x0000,     /* R19439 */
+    0x0000,     /* R19440 */
+    0x0000,     /* R19441 */
+    0x0000,     /* R19442 */
+    0x0000,     /* R19443 */
+    0x0000,     /* R19444 */
+    0x0000,     /* R19445 */
+    0x0000,     /* R19446 */
+    0x0000,     /* R19447 */
+    0x0000,     /* R19448 */
+    0x0000,     /* R19449 */
+    0x0000,     /* R19450 */
+    0x0000,     /* R19451 */
+    0x0000,     /* R19452 */
+    0x0000,     /* R19453 */
+    0x0000,     /* R19454 */
+    0x0000,     /* R19455 */
+    0x007F,     /* R19456 - DACL_RETUNE_C1_1 */
+    0xFFFF,     /* R19457 - DACL_RETUNE_C1_0 */
+    0x0000,     /* R19458 - DACL_RETUNE_C2_1 */
+    0x0000,     /* R19459 - DACL_RETUNE_C2_0 */
+    0x0000,     /* R19460 - DACL_RETUNE_C3_1 */
+    0x0000,     /* R19461 - DACL_RETUNE_C3_0 */
+    0x0000,     /* R19462 - DACL_RETUNE_C4_1 */
+    0x0000,     /* R19463 - DACL_RETUNE_C4_0 */
+    0x0000,     /* R19464 - DACL_RETUNE_C5_1 */
+    0x0000,     /* R19465 - DACL_RETUNE_C5_0 */
+    0x0000,     /* R19466 - DACL_RETUNE_C6_1 */
+    0x0000,     /* R19467 - DACL_RETUNE_C6_0 */
+    0x0000,     /* R19468 - DACL_RETUNE_C7_1 */
+    0x0000,     /* R19469 - DACL_RETUNE_C7_0 */
+    0x0000,     /* R19470 - DACL_RETUNE_C8_1 */
+    0x0000,     /* R19471 - DACL_RETUNE_C8_0 */
+    0x0000,     /* R19472 - DACL_RETUNE_C9_1 */
+    0x0000,     /* R19473 - DACL_RETUNE_C9_0 */
+    0x0000,     /* R19474 - DACL_RETUNE_C10_1 */
+    0x0000,     /* R19475 - DACL_RETUNE_C10_0 */
+    0x0000,     /* R19476 - DACL_RETUNE_C11_1 */
+    0x0000,     /* R19477 - DACL_RETUNE_C11_0 */
+    0x0000,     /* R19478 - DACL_RETUNE_C12_1 */
+    0x0000,     /* R19479 - DACL_RETUNE_C12_0 */
+    0x0000,     /* R19480 - DACL_RETUNE_C13_1 */
+    0x0000,     /* R19481 - DACL_RETUNE_C13_0 */
+    0x0000,     /* R19482 - DACL_RETUNE_C14_1 */
+    0x0000,     /* R19483 - DACL_RETUNE_C14_0 */
+    0x0000,     /* R19484 - DACL_RETUNE_C15_1 */
+    0x0000,     /* R19485 - DACL_RETUNE_C15_0 */
+    0x0000,     /* R19486 - DACL_RETUNE_C16_1 */
+    0x0000,     /* R19487 - DACL_RETUNE_C16_0 */
+    0x0000,     /* R19488 - DACL_RETUNE_C17_1 */
+    0x0000,     /* R19489 - DACL_RETUNE_C17_0 */
+    0x0000,     /* R19490 - DACL_RETUNE_C18_1 */
+    0x0000,     /* R19491 - DACL_RETUNE_C18_0 */
+    0x0000,     /* R19492 - DACL_RETUNE_C19_1 */
+    0x0000,     /* R19493 - DACL_RETUNE_C19_0 */
+    0x0000,     /* R19494 - DACL_RETUNE_C20_1 */
+    0x0000,     /* R19495 - DACL_RETUNE_C20_0 */
+    0x0000,     /* R19496 - DACL_RETUNE_C21_1 */
+    0x0000,     /* R19497 - DACL_RETUNE_C21_0 */
+    0x0000,     /* R19498 - DACL_RETUNE_C22_1 */
+    0x0000,     /* R19499 - DACL_RETUNE_C22_0 */
+    0x0000,     /* R19500 - DACL_RETUNE_C23_1 */
+    0x0000,     /* R19501 - DACL_RETUNE_C23_0 */
+    0x0000,     /* R19502 - DACL_RETUNE_C24_1 */
+    0x0000,     /* R19503 - DACL_RETUNE_C24_0 */
+    0x0000,     /* R19504 - DACL_RETUNE_C25_1 */
+    0x0000,     /* R19505 - DACL_RETUNE_C25_0 */
+    0x0000,     /* R19506 - DACL_RETUNE_C26_1 */
+    0x0000,     /* R19507 - DACL_RETUNE_C26_0 */
+    0x0000,     /* R19508 - DACL_RETUNE_C27_1 */
+    0x0000,     /* R19509 - DACL_RETUNE_C27_0 */
+    0x0000,     /* R19510 - DACL_RETUNE_C28_1 */
+    0x0000,     /* R19511 - DACL_RETUNE_C28_0 */
+    0x0000,     /* R19512 - DACL_RETUNE_C29_1 */
+    0x0000,     /* R19513 - DACL_RETUNE_C29_0 */
+    0x0000,     /* R19514 - DACL_RETUNE_C30_1 */
+    0x0000,     /* R19515 - DACL_RETUNE_C30_0 */
+    0x0000,     /* R19516 - DACL_RETUNE_C31_1 */
+    0x0000,     /* R19517 - DACL_RETUNE_C31_0 */
+    0x0000,     /* R19518 - DACL_RETUNE_C32_1 */
+    0x0000,     /* R19519 - DACL_RETUNE_C32_0 */
+    0x0000,     /* R19520 */
+    0x0000,     /* R19521 */
+    0x0000,     /* R19522 */
+    0x0000,     /* R19523 */
+    0x0000,     /* R19524 */
+    0x0000,     /* R19525 */
+    0x0000,     /* R19526 */
+    0x0000,     /* R19527 */
+    0x0000,     /* R19528 */
+    0x0000,     /* R19529 */
+    0x0000,     /* R19530 */
+    0x0000,     /* R19531 */
+    0x0000,     /* R19532 */
+    0x0000,     /* R19533 */
+    0x0000,     /* R19534 */
+    0x0000,     /* R19535 */
+    0x0000,     /* R19536 */
+    0x0000,     /* R19537 */
+    0x0000,     /* R19538 */
+    0x0000,     /* R19539 */
+    0x0000,     /* R19540 */
+    0x0000,     /* R19541 */
+    0x0000,     /* R19542 */
+    0x0000,     /* R19543 */
+    0x0000,     /* R19544 */
+    0x0000,     /* R19545 */
+    0x0000,     /* R19546 */
+    0x0000,     /* R19547 */
+    0x0000,     /* R19548 */
+    0x0000,     /* R19549 */
+    0x0000,     /* R19550 */
+    0x0000,     /* R19551 */
+    0x0000,     /* R19552 */
+    0x0000,     /* R19553 */
+    0x0000,     /* R19554 */
+    0x0000,     /* R19555 */
+    0x0000,     /* R19556 */
+    0x0000,     /* R19557 */
+    0x0000,     /* R19558 */
+    0x0000,     /* R19559 */
+    0x0000,     /* R19560 */
+    0x0000,     /* R19561 */
+    0x0000,     /* R19562 */
+    0x0000,     /* R19563 */
+    0x0000,     /* R19564 */
+    0x0000,     /* R19565 */
+    0x0000,     /* R19566 */
+    0x0000,     /* R19567 */
+    0x0000,     /* R19568 */
+    0x0000,     /* R19569 */
+    0x0000,     /* R19570 */
+    0x0000,     /* R19571 */
+    0x0000,     /* R19572 */
+    0x0000,     /* R19573 */
+    0x0000,     /* R19574 */
+    0x0000,     /* R19575 */
+    0x0000,     /* R19576 */
+    0x0000,     /* R19577 */
+    0x0000,     /* R19578 */
+    0x0000,     /* R19579 */
+    0x0000,     /* R19580 */
+    0x0000,     /* R19581 */
+    0x0000,     /* R19582 */
+    0x0000,     /* R19583 */
+    0x0000,     /* R19584 */
+    0x0000,     /* R19585 */
+    0x0000,     /* R19586 */
+    0x0000,     /* R19587 */
+    0x0000,     /* R19588 */
+    0x0000,     /* R19589 */
+    0x0000,     /* R19590 */
+    0x0000,     /* R19591 */
+    0x0000,     /* R19592 */
+    0x0000,     /* R19593 */
+    0x0000,     /* R19594 */
+    0x0000,     /* R19595 */
+    0x0000,     /* R19596 */
+    0x0000,     /* R19597 */
+    0x0000,     /* R19598 */
+    0x0000,     /* R19599 */
+    0x0000,     /* R19600 */
+    0x0000,     /* R19601 */
+    0x0000,     /* R19602 */
+    0x0000,     /* R19603 */
+    0x0000,     /* R19604 */
+    0x0000,     /* R19605 */
+    0x0000,     /* R19606 */
+    0x0000,     /* R19607 */
+    0x0000,     /* R19608 */
+    0x0000,     /* R19609 */
+    0x0000,     /* R19610 */
+    0x0000,     /* R19611 */
+    0x0000,     /* R19612 */
+    0x0000,     /* R19613 */
+    0x0000,     /* R19614 */
+    0x0000,     /* R19615 */
+    0x0000,     /* R19616 */
+    0x0000,     /* R19617 */
+    0x0000,     /* R19618 */
+    0x0000,     /* R19619 */
+    0x0000,     /* R19620 */
+    0x0000,     /* R19621 */
+    0x0000,     /* R19622 */
+    0x0000,     /* R19623 */
+    0x0000,     /* R19624 */
+    0x0000,     /* R19625 */
+    0x0000,     /* R19626 */
+    0x0000,     /* R19627 */
+    0x0000,     /* R19628 */
+    0x0000,     /* R19629 */
+    0x0000,     /* R19630 */
+    0x0000,     /* R19631 */
+    0x0000,     /* R19632 */
+    0x0000,     /* R19633 */
+    0x0000,     /* R19634 */
+    0x0000,     /* R19635 */
+    0x0000,     /* R19636 */
+    0x0000,     /* R19637 */
+    0x0000,     /* R19638 */
+    0x0000,     /* R19639 */
+    0x0000,     /* R19640 */
+    0x0000,     /* R19641 */
+    0x0000,     /* R19642 */
+    0x0000,     /* R19643 */
+    0x0000,     /* R19644 */
+    0x0000,     /* R19645 */
+    0x0000,     /* R19646 */
+    0x0000,     /* R19647 */
+    0x0000,     /* R19648 */
+    0x0000,     /* R19649 */
+    0x0000,     /* R19650 */
+    0x0000,     /* R19651 */
+    0x0000,     /* R19652 */
+    0x0000,     /* R19653 */
+    0x0000,     /* R19654 */
+    0x0000,     /* R19655 */
+    0x0000,     /* R19656 */
+    0x0000,     /* R19657 */
+    0x0000,     /* R19658 */
+    0x0000,     /* R19659 */
+    0x0000,     /* R19660 */
+    0x0000,     /* R19661 */
+    0x0000,     /* R19662 */
+    0x0000,     /* R19663 */
+    0x0000,     /* R19664 */
+    0x0000,     /* R19665 */
+    0x0000,     /* R19666 */
+    0x0000,     /* R19667 */
+    0x0000,     /* R19668 */
+    0x0000,     /* R19669 */
+    0x0000,     /* R19670 */
+    0x0000,     /* R19671 */
+    0x0000,     /* R19672 */
+    0x0000,     /* R19673 */
+    0x0000,     /* R19674 */
+    0x0000,     /* R19675 */
+    0x0000,     /* R19676 */
+    0x0000,     /* R19677 */
+    0x0000,     /* R19678 */
+    0x0000,     /* R19679 */
+    0x0000,     /* R19680 */
+    0x0000,     /* R19681 */
+    0x0000,     /* R19682 */
+    0x0000,     /* R19683 */
+    0x0000,     /* R19684 */
+    0x0000,     /* R19685 */
+    0x0000,     /* R19686 */
+    0x0000,     /* R19687 */
+    0x0000,     /* R19688 */
+    0x0000,     /* R19689 */
+    0x0000,     /* R19690 */
+    0x0000,     /* R19691 */
+    0x0000,     /* R19692 */
+    0x0000,     /* R19693 */
+    0x0000,     /* R19694 */
+    0x0000,     /* R19695 */
+    0x0000,     /* R19696 */
+    0x0000,     /* R19697 */
+    0x0000,     /* R19698 */
+    0x0000,     /* R19699 */
+    0x0000,     /* R19700 */
+    0x0000,     /* R19701 */
+    0x0000,     /* R19702 */
+    0x0000,     /* R19703 */
+    0x0000,     /* R19704 */
+    0x0000,     /* R19705 */
+    0x0000,     /* R19706 */
+    0x0000,     /* R19707 */
+    0x0000,     /* R19708 */
+    0x0000,     /* R19709 */
+    0x0000,     /* R19710 */
+    0x0000,     /* R19711 */
+    0x0000,     /* R19712 */
+    0x0000,     /* R19713 */
+    0x0000,     /* R19714 */
+    0x0000,     /* R19715 */
+    0x0000,     /* R19716 */
+    0x0000,     /* R19717 */
+    0x0000,     /* R19718 */
+    0x0000,     /* R19719 */
+    0x0000,     /* R19720 */
+    0x0000,     /* R19721 */
+    0x0000,     /* R19722 */
+    0x0000,     /* R19723 */
+    0x0000,     /* R19724 */
+    0x0000,     /* R19725 */
+    0x0000,     /* R19726 */
+    0x0000,     /* R19727 */
+    0x0000,     /* R19728 */
+    0x0000,     /* R19729 */
+    0x0000,     /* R19730 */
+    0x0000,     /* R19731 */
+    0x0000,     /* R19732 */
+    0x0000,     /* R19733 */
+    0x0000,     /* R19734 */
+    0x0000,     /* R19735 */
+    0x0000,     /* R19736 */
+    0x0000,     /* R19737 */
+    0x0000,     /* R19738 */
+    0x0000,     /* R19739 */
+    0x0000,     /* R19740 */
+    0x0000,     /* R19741 */
+    0x0000,     /* R19742 */
+    0x0000,     /* R19743 */
+    0x0000,     /* R19744 */
+    0x0000,     /* R19745 */
+    0x0000,     /* R19746 */
+    0x0000,     /* R19747 */
+    0x0000,     /* R19748 */
+    0x0000,     /* R19749 */
+    0x0000,     /* R19750 */
+    0x0000,     /* R19751 */
+    0x0000,     /* R19752 */
+    0x0000,     /* R19753 */
+    0x0000,     /* R19754 */
+    0x0000,     /* R19755 */
+    0x0000,     /* R19756 */
+    0x0000,     /* R19757 */
+    0x0000,     /* R19758 */
+    0x0000,     /* R19759 */
+    0x0000,     /* R19760 */
+    0x0000,     /* R19761 */
+    0x0000,     /* R19762 */
+    0x0000,     /* R19763 */
+    0x0000,     /* R19764 */
+    0x0000,     /* R19765 */
+    0x0000,     /* R19766 */
+    0x0000,     /* R19767 */
+    0x0000,     /* R19768 */
+    0x0000,     /* R19769 */
+    0x0000,     /* R19770 */
+    0x0000,     /* R19771 */
+    0x0000,     /* R19772 */
+    0x0000,     /* R19773 */
+    0x0000,     /* R19774 */
+    0x0000,     /* R19775 */
+    0x0000,     /* R19776 */
+    0x0000,     /* R19777 */
+    0x0000,     /* R19778 */
+    0x0000,     /* R19779 */
+    0x0000,     /* R19780 */
+    0x0000,     /* R19781 */
+    0x0000,     /* R19782 */
+    0x0000,     /* R19783 */
+    0x0000,     /* R19784 */
+    0x0000,     /* R19785 */
+    0x0000,     /* R19786 */
+    0x0000,     /* R19787 */
+    0x0000,     /* R19788 */
+    0x0000,     /* R19789 */
+    0x0000,     /* R19790 */
+    0x0000,     /* R19791 */
+    0x0000,     /* R19792 */
+    0x0000,     /* R19793 */
+    0x0000,     /* R19794 */
+    0x0000,     /* R19795 */
+    0x0000,     /* R19796 */
+    0x0000,     /* R19797 */
+    0x0000,     /* R19798 */
+    0x0000,     /* R19799 */
+    0x0000,     /* R19800 */
+    0x0000,     /* R19801 */
+    0x0000,     /* R19802 */
+    0x0000,     /* R19803 */
+    0x0000,     /* R19804 */
+    0x0000,     /* R19805 */
+    0x0000,     /* R19806 */
+    0x0000,     /* R19807 */
+    0x0000,     /* R19808 */
+    0x0000,     /* R19809 */
+    0x0000,     /* R19810 */
+    0x0000,     /* R19811 */
+    0x0000,     /* R19812 */
+    0x0000,     /* R19813 */
+    0x0000,     /* R19814 */
+    0x0000,     /* R19815 */
+    0x0000,     /* R19816 */
+    0x0000,     /* R19817 */
+    0x0000,     /* R19818 */
+    0x0000,     /* R19819 */
+    0x0000,     /* R19820 */
+    0x0000,     /* R19821 */
+    0x0000,     /* R19822 */
+    0x0000,     /* R19823 */
+    0x0000,     /* R19824 */
+    0x0000,     /* R19825 */
+    0x0000,     /* R19826 */
+    0x0000,     /* R19827 */
+    0x0000,     /* R19828 */
+    0x0000,     /* R19829 */
+    0x0000,     /* R19830 */
+    0x0000,     /* R19831 */
+    0x0000,     /* R19832 */
+    0x0000,     /* R19833 */
+    0x0000,     /* R19834 */
+    0x0000,     /* R19835 */
+    0x0000,     /* R19836 */
+    0x0000,     /* R19837 */
+    0x0000,     /* R19838 */
+    0x0000,     /* R19839 */
+    0x0000,     /* R19840 */
+    0x0000,     /* R19841 */
+    0x0000,     /* R19842 */
+    0x0000,     /* R19843 */
+    0x0000,     /* R19844 */
+    0x0000,     /* R19845 */
+    0x0000,     /* R19846 */
+    0x0000,     /* R19847 */
+    0x0000,     /* R19848 */
+    0x0000,     /* R19849 */
+    0x0000,     /* R19850 */
+    0x0000,     /* R19851 */
+    0x0000,     /* R19852 */
+    0x0000,     /* R19853 */
+    0x0000,     /* R19854 */
+    0x0000,     /* R19855 */
+    0x0000,     /* R19856 */
+    0x0000,     /* R19857 */
+    0x0000,     /* R19858 */
+    0x0000,     /* R19859 */
+    0x0000,     /* R19860 */
+    0x0000,     /* R19861 */
+    0x0000,     /* R19862 */
+    0x0000,     /* R19863 */
+    0x0000,     /* R19864 */
+    0x0000,     /* R19865 */
+    0x0000,     /* R19866 */
+    0x0000,     /* R19867 */
+    0x0000,     /* R19868 */
+    0x0000,     /* R19869 */
+    0x0000,     /* R19870 */
+    0x0000,     /* R19871 */
+    0x0000,     /* R19872 */
+    0x0000,     /* R19873 */
+    0x0000,     /* R19874 */
+    0x0000,     /* R19875 */
+    0x0000,     /* R19876 */
+    0x0000,     /* R19877 */
+    0x0000,     /* R19878 */
+    0x0000,     /* R19879 */
+    0x0000,     /* R19880 */
+    0x0000,     /* R19881 */
+    0x0000,     /* R19882 */
+    0x0000,     /* R19883 */
+    0x0000,     /* R19884 */
+    0x0000,     /* R19885 */
+    0x0000,     /* R19886 */
+    0x0000,     /* R19887 */
+    0x0000,     /* R19888 */
+    0x0000,     /* R19889 */
+    0x0000,     /* R19890 */
+    0x0000,     /* R19891 */
+    0x0000,     /* R19892 */
+    0x0000,     /* R19893 */
+    0x0000,     /* R19894 */
+    0x0000,     /* R19895 */
+    0x0000,     /* R19896 */
+    0x0000,     /* R19897 */
+    0x0000,     /* R19898 */
+    0x0000,     /* R19899 */
+    0x0000,     /* R19900 */
+    0x0000,     /* R19901 */
+    0x0000,     /* R19902 */
+    0x0000,     /* R19903 */
+    0x0000,     /* R19904 */
+    0x0000,     /* R19905 */
+    0x0000,     /* R19906 */
+    0x0000,     /* R19907 */
+    0x0000,     /* R19908 */
+    0x0000,     /* R19909 */
+    0x0000,     /* R19910 */
+    0x0000,     /* R19911 */
+    0x0000,     /* R19912 */
+    0x0000,     /* R19913 */
+    0x0000,     /* R19914 */
+    0x0000,     /* R19915 */
+    0x0000,     /* R19916 */
+    0x0000,     /* R19917 */
+    0x0000,     /* R19918 */
+    0x0000,     /* R19919 */
+    0x0000,     /* R19920 */
+    0x0000,     /* R19921 */
+    0x0000,     /* R19922 */
+    0x0000,     /* R19923 */
+    0x0000,     /* R19924 */
+    0x0000,     /* R19925 */
+    0x0000,     /* R19926 */
+    0x0000,     /* R19927 */
+    0x0000,     /* R19928 */
+    0x0000,     /* R19929 */
+    0x0000,     /* R19930 */
+    0x0000,     /* R19931 */
+    0x0000,     /* R19932 */
+    0x0000,     /* R19933 */
+    0x0000,     /* R19934 */
+    0x0000,     /* R19935 */
+    0x0000,     /* R19936 */
+    0x0000,     /* R19937 */
+    0x0000,     /* R19938 */
+    0x0000,     /* R19939 */
+    0x0000,     /* R19940 */
+    0x0000,     /* R19941 */
+    0x0000,     /* R19942 */
+    0x0000,     /* R19943 */
+    0x0000,     /* R19944 */
+    0x0000,     /* R19945 */
+    0x0000,     /* R19946 */
+    0x0000,     /* R19947 */
+    0x0000,     /* R19948 */
+    0x0000,     /* R19949 */
+    0x0000,     /* R19950 */
+    0x0000,     /* R19951 */
+    0x0000,     /* R19952 */
+    0x0000,     /* R19953 */
+    0x0000,     /* R19954 */
+    0x0000,     /* R19955 */
+    0x0000,     /* R19956 */
+    0x0000,     /* R19957 */
+    0x0000,     /* R19958 */
+    0x0000,     /* R19959 */
+    0x0000,     /* R19960 */
+    0x0000,     /* R19961 */
+    0x0000,     /* R19962 */
+    0x0000,     /* R19963 */
+    0x0000,     /* R19964 */
+    0x0000,     /* R19965 */
+    0x0000,     /* R19966 */
+    0x0000,     /* R19967 */
+    0x0020,     /* R19968 - RETUNEDAC_PG2_1 */
+    0x0000,     /* R19969 - RETUNEDAC_PG2_0 */
+    0x0040,     /* R19970 - RETUNEDAC_PG_1 */
+    0x0000,     /* R19971 - RETUNEDAC_PG_0 */
+    0x0000,     /* R19972 */
+    0x0000,     /* R19973 */
+    0x0000,     /* R19974 */
+    0x0000,     /* R19975 */
+    0x0000,     /* R19976 */
+    0x0000,     /* R19977 */
+    0x0000,     /* R19978 */
+    0x0000,     /* R19979 */
+    0x0000,     /* R19980 */
+    0x0000,     /* R19981 */
+    0x0000,     /* R19982 */
+    0x0000,     /* R19983 */
+    0x0000,     /* R19984 */
+    0x0000,     /* R19985 */
+    0x0000,     /* R19986 */
+    0x0000,     /* R19987 */
+    0x0000,     /* R19988 */
+    0x0000,     /* R19989 */
+    0x0000,     /* R19990 */
+    0x0000,     /* R19991 */
+    0x0000,     /* R19992 */
+    0x0000,     /* R19993 */
+    0x0000,     /* R19994 */
+    0x0000,     /* R19995 */
+    0x0000,     /* R19996 */
+    0x0000,     /* R19997 */
+    0x0000,     /* R19998 */
+    0x0000,     /* R19999 */
+    0x0000,     /* R20000 */
+    0x0000,     /* R20001 */
+    0x0000,     /* R20002 */
+    0x0000,     /* R20003 */
+    0x0000,     /* R20004 */
+    0x0000,     /* R20005 */
+    0x0000,     /* R20006 */
+    0x0000,     /* R20007 */
+    0x0000,     /* R20008 */
+    0x0000,     /* R20009 */
+    0x0000,     /* R20010 */
+    0x0000,     /* R20011 */
+    0x0000,     /* R20012 */
+    0x0000,     /* R20013 */
+    0x0000,     /* R20014 */
+    0x0000,     /* R20015 */
+    0x0000,     /* R20016 */
+    0x0000,     /* R20017 */
+    0x0000,     /* R20018 */
+    0x0000,     /* R20019 */
+    0x0000,     /* R20020 */
+    0x0000,     /* R20021 */
+    0x0000,     /* R20022 */
+    0x0000,     /* R20023 */
+    0x0000,     /* R20024 */
+    0x0000,     /* R20025 */
+    0x0000,     /* R20026 */
+    0x0000,     /* R20027 */
+    0x0000,     /* R20028 */
+    0x0000,     /* R20029 */
+    0x0000,     /* R20030 */
+    0x0000,     /* R20031 */
+    0x0000,     /* R20032 */
+    0x0000,     /* R20033 */
+    0x0000,     /* R20034 */
+    0x0000,     /* R20035 */
+    0x0000,     /* R20036 */
+    0x0000,     /* R20037 */
+    0x0000,     /* R20038 */
+    0x0000,     /* R20039 */
+    0x0000,     /* R20040 */
+    0x0000,     /* R20041 */
+    0x0000,     /* R20042 */
+    0x0000,     /* R20043 */
+    0x0000,     /* R20044 */
+    0x0000,     /* R20045 */
+    0x0000,     /* R20046 */
+    0x0000,     /* R20047 */
+    0x0000,     /* R20048 */
+    0x0000,     /* R20049 */
+    0x0000,     /* R20050 */
+    0x0000,     /* R20051 */
+    0x0000,     /* R20052 */
+    0x0000,     /* R20053 */
+    0x0000,     /* R20054 */
+    0x0000,     /* R20055 */
+    0x0000,     /* R20056 */
+    0x0000,     /* R20057 */
+    0x0000,     /* R20058 */
+    0x0000,     /* R20059 */
+    0x0000,     /* R20060 */
+    0x0000,     /* R20061 */
+    0x0000,     /* R20062 */
+    0x0000,     /* R20063 */
+    0x0000,     /* R20064 */
+    0x0000,     /* R20065 */
+    0x0000,     /* R20066 */
+    0x0000,     /* R20067 */
+    0x0000,     /* R20068 */
+    0x0000,     /* R20069 */
+    0x0000,     /* R20070 */
+    0x0000,     /* R20071 */
+    0x0000,     /* R20072 */
+    0x0000,     /* R20073 */
+    0x0000,     /* R20074 */
+    0x0000,     /* R20075 */
+    0x0000,     /* R20076 */
+    0x0000,     /* R20077 */
+    0x0000,     /* R20078 */
+    0x0000,     /* R20079 */
+    0x0000,     /* R20080 */
+    0x0000,     /* R20081 */
+    0x0000,     /* R20082 */
+    0x0000,     /* R20083 */
+    0x0000,     /* R20084 */
+    0x0000,     /* R20085 */
+    0x0000,     /* R20086 */
+    0x0000,     /* R20087 */
+    0x0000,     /* R20088 */
+    0x0000,     /* R20089 */
+    0x0000,     /* R20090 */
+    0x0000,     /* R20091 */
+    0x0000,     /* R20092 */
+    0x0000,     /* R20093 */
+    0x0000,     /* R20094 */
+    0x0000,     /* R20095 */
+    0x0000,     /* R20096 */
+    0x0000,     /* R20097 */
+    0x0000,     /* R20098 */
+    0x0000,     /* R20099 */
+    0x0000,     /* R20100 */
+    0x0000,     /* R20101 */
+    0x0000,     /* R20102 */
+    0x0000,     /* R20103 */
+    0x0000,     /* R20104 */
+    0x0000,     /* R20105 */
+    0x0000,     /* R20106 */
+    0x0000,     /* R20107 */
+    0x0000,     /* R20108 */
+    0x0000,     /* R20109 */
+    0x0000,     /* R20110 */
+    0x0000,     /* R20111 */
+    0x0000,     /* R20112 */
+    0x0000,     /* R20113 */
+    0x0000,     /* R20114 */
+    0x0000,     /* R20115 */
+    0x0000,     /* R20116 */
+    0x0000,     /* R20117 */
+    0x0000,     /* R20118 */
+    0x0000,     /* R20119 */
+    0x0000,     /* R20120 */
+    0x0000,     /* R20121 */
+    0x0000,     /* R20122 */
+    0x0000,     /* R20123 */
+    0x0000,     /* R20124 */
+    0x0000,     /* R20125 */
+    0x0000,     /* R20126 */
+    0x0000,     /* R20127 */
+    0x0000,     /* R20128 */
+    0x0000,     /* R20129 */
+    0x0000,     /* R20130 */
+    0x0000,     /* R20131 */
+    0x0000,     /* R20132 */
+    0x0000,     /* R20133 */
+    0x0000,     /* R20134 */
+    0x0000,     /* R20135 */
+    0x0000,     /* R20136 */
+    0x0000,     /* R20137 */
+    0x0000,     /* R20138 */
+    0x0000,     /* R20139 */
+    0x0000,     /* R20140 */
+    0x0000,     /* R20141 */
+    0x0000,     /* R20142 */
+    0x0000,     /* R20143 */
+    0x0000,     /* R20144 */
+    0x0000,     /* R20145 */
+    0x0000,     /* R20146 */
+    0x0000,     /* R20147 */
+    0x0000,     /* R20148 */
+    0x0000,     /* R20149 */
+    0x0000,     /* R20150 */
+    0x0000,     /* R20151 */
+    0x0000,     /* R20152 */
+    0x0000,     /* R20153 */
+    0x0000,     /* R20154 */
+    0x0000,     /* R20155 */
+    0x0000,     /* R20156 */
+    0x0000,     /* R20157 */
+    0x0000,     /* R20158 */
+    0x0000,     /* R20159 */
+    0x0000,     /* R20160 */
+    0x0000,     /* R20161 */
+    0x0000,     /* R20162 */
+    0x0000,     /* R20163 */
+    0x0000,     /* R20164 */
+    0x0000,     /* R20165 */
+    0x0000,     /* R20166 */
+    0x0000,     /* R20167 */
+    0x0000,     /* R20168 */
+    0x0000,     /* R20169 */
+    0x0000,     /* R20170 */
+    0x0000,     /* R20171 */
+    0x0000,     /* R20172 */
+    0x0000,     /* R20173 */
+    0x0000,     /* R20174 */
+    0x0000,     /* R20175 */
+    0x0000,     /* R20176 */
+    0x0000,     /* R20177 */
+    0x0000,     /* R20178 */
+    0x0000,     /* R20179 */
+    0x0000,     /* R20180 */
+    0x0000,     /* R20181 */
+    0x0000,     /* R20182 */
+    0x0000,     /* R20183 */
+    0x0000,     /* R20184 */
+    0x0000,     /* R20185 */
+    0x0000,     /* R20186 */
+    0x0000,     /* R20187 */
+    0x0000,     /* R20188 */
+    0x0000,     /* R20189 */
+    0x0000,     /* R20190 */
+    0x0000,     /* R20191 */
+    0x0000,     /* R20192 */
+    0x0000,     /* R20193 */
+    0x0000,     /* R20194 */
+    0x0000,     /* R20195 */
+    0x0000,     /* R20196 */
+    0x0000,     /* R20197 */
+    0x0000,     /* R20198 */
+    0x0000,     /* R20199 */
+    0x0000,     /* R20200 */
+    0x0000,     /* R20201 */
+    0x0000,     /* R20202 */
+    0x0000,     /* R20203 */
+    0x0000,     /* R20204 */
+    0x0000,     /* R20205 */
+    0x0000,     /* R20206 */
+    0x0000,     /* R20207 */
+    0x0000,     /* R20208 */
+    0x0000,     /* R20209 */
+    0x0000,     /* R20210 */
+    0x0000,     /* R20211 */
+    0x0000,     /* R20212 */
+    0x0000,     /* R20213 */
+    0x0000,     /* R20214 */
+    0x0000,     /* R20215 */
+    0x0000,     /* R20216 */
+    0x0000,     /* R20217 */
+    0x0000,     /* R20218 */
+    0x0000,     /* R20219 */
+    0x0000,     /* R20220 */
+    0x0000,     /* R20221 */
+    0x0000,     /* R20222 */
+    0x0000,     /* R20223 */
+    0x0000,     /* R20224 */
+    0x0000,     /* R20225 */
+    0x0000,     /* R20226 */
+    0x0000,     /* R20227 */
+    0x0000,     /* R20228 */
+    0x0000,     /* R20229 */
+    0x0000,     /* R20230 */
+    0x0000,     /* R20231 */
+    0x0000,     /* R20232 */
+    0x0000,     /* R20233 */
+    0x0000,     /* R20234 */
+    0x0000,     /* R20235 */
+    0x0000,     /* R20236 */
+    0x0000,     /* R20237 */
+    0x0000,     /* R20238 */
+    0x0000,     /* R20239 */
+    0x0000,     /* R20240 */
+    0x0000,     /* R20241 */
+    0x0000,     /* R20242 */
+    0x0000,     /* R20243 */
+    0x0000,     /* R20244 */
+    0x0000,     /* R20245 */
+    0x0000,     /* R20246 */
+    0x0000,     /* R20247 */
+    0x0000,     /* R20248 */
+    0x0000,     /* R20249 */
+    0x0000,     /* R20250 */
+    0x0000,     /* R20251 */
+    0x0000,     /* R20252 */
+    0x0000,     /* R20253 */
+    0x0000,     /* R20254 */
+    0x0000,     /* R20255 */
+    0x0000,     /* R20256 */
+    0x0000,     /* R20257 */
+    0x0000,     /* R20258 */
+    0x0000,     /* R20259 */
+    0x0000,     /* R20260 */
+    0x0000,     /* R20261 */
+    0x0000,     /* R20262 */
+    0x0000,     /* R20263 */
+    0x0000,     /* R20264 */
+    0x0000,     /* R20265 */
+    0x0000,     /* R20266 */
+    0x0000,     /* R20267 */
+    0x0000,     /* R20268 */
+    0x0000,     /* R20269 */
+    0x0000,     /* R20270 */
+    0x0000,     /* R20271 */
+    0x0000,     /* R20272 */
+    0x0000,     /* R20273 */
+    0x0000,     /* R20274 */
+    0x0000,     /* R20275 */
+    0x0000,     /* R20276 */
+    0x0000,     /* R20277 */
+    0x0000,     /* R20278 */
+    0x0000,     /* R20279 */
+    0x0000,     /* R20280 */
+    0x0000,     /* R20281 */
+    0x0000,     /* R20282 */
+    0x0000,     /* R20283 */
+    0x0000,     /* R20284 */
+    0x0000,     /* R20285 */
+    0x0000,     /* R20286 */
+    0x0000,     /* R20287 */
+    0x0000,     /* R20288 */
+    0x0000,     /* R20289 */
+    0x0000,     /* R20290 */
+    0x0000,     /* R20291 */
+    0x0000,     /* R20292 */
+    0x0000,     /* R20293 */
+    0x0000,     /* R20294 */
+    0x0000,     /* R20295 */
+    0x0000,     /* R20296 */
+    0x0000,     /* R20297 */
+    0x0000,     /* R20298 */
+    0x0000,     /* R20299 */
+    0x0000,     /* R20300 */
+    0x0000,     /* R20301 */
+    0x0000,     /* R20302 */
+    0x0000,     /* R20303 */
+    0x0000,     /* R20304 */
+    0x0000,     /* R20305 */
+    0x0000,     /* R20306 */
+    0x0000,     /* R20307 */
+    0x0000,     /* R20308 */
+    0x0000,     /* R20309 */
+    0x0000,     /* R20310 */
+    0x0000,     /* R20311 */
+    0x0000,     /* R20312 */
+    0x0000,     /* R20313 */
+    0x0000,     /* R20314 */
+    0x0000,     /* R20315 */
+    0x0000,     /* R20316 */
+    0x0000,     /* R20317 */
+    0x0000,     /* R20318 */
+    0x0000,     /* R20319 */
+    0x0000,     /* R20320 */
+    0x0000,     /* R20321 */
+    0x0000,     /* R20322 */
+    0x0000,     /* R20323 */
+    0x0000,     /* R20324 */
+    0x0000,     /* R20325 */
+    0x0000,     /* R20326 */
+    0x0000,     /* R20327 */
+    0x0000,     /* R20328 */
+    0x0000,     /* R20329 */
+    0x0000,     /* R20330 */
+    0x0000,     /* R20331 */
+    0x0000,     /* R20332 */
+    0x0000,     /* R20333 */
+    0x0000,     /* R20334 */
+    0x0000,     /* R20335 */
+    0x0000,     /* R20336 */
+    0x0000,     /* R20337 */
+    0x0000,     /* R20338 */
+    0x0000,     /* R20339 */
+    0x0000,     /* R20340 */
+    0x0000,     /* R20341 */
+    0x0000,     /* R20342 */
+    0x0000,     /* R20343 */
+    0x0000,     /* R20344 */
+    0x0000,     /* R20345 */
+    0x0000,     /* R20346 */
+    0x0000,     /* R20347 */
+    0x0000,     /* R20348 */
+    0x0000,     /* R20349 */
+    0x0000,     /* R20350 */
+    0x0000,     /* R20351 */
+    0x0000,     /* R20352 */
+    0x0000,     /* R20353 */
+    0x0000,     /* R20354 */
+    0x0000,     /* R20355 */
+    0x0000,     /* R20356 */
+    0x0000,     /* R20357 */
+    0x0000,     /* R20358 */
+    0x0000,     /* R20359 */
+    0x0000,     /* R20360 */
+    0x0000,     /* R20361 */
+    0x0000,     /* R20362 */
+    0x0000,     /* R20363 */
+    0x0000,     /* R20364 */
+    0x0000,     /* R20365 */
+    0x0000,     /* R20366 */
+    0x0000,     /* R20367 */
+    0x0000,     /* R20368 */
+    0x0000,     /* R20369 */
+    0x0000,     /* R20370 */
+    0x0000,     /* R20371 */
+    0x0000,     /* R20372 */
+    0x0000,     /* R20373 */
+    0x0000,     /* R20374 */
+    0x0000,     /* R20375 */
+    0x0000,     /* R20376 */
+    0x0000,     /* R20377 */
+    0x0000,     /* R20378 */
+    0x0000,     /* R20379 */
+    0x0000,     /* R20380 */
+    0x0000,     /* R20381 */
+    0x0000,     /* R20382 */
+    0x0000,     /* R20383 */
+    0x0000,     /* R20384 */
+    0x0000,     /* R20385 */
+    0x0000,     /* R20386 */
+    0x0000,     /* R20387 */
+    0x0000,     /* R20388 */
+    0x0000,     /* R20389 */
+    0x0000,     /* R20390 */
+    0x0000,     /* R20391 */
+    0x0000,     /* R20392 */
+    0x0000,     /* R20393 */
+    0x0000,     /* R20394 */
+    0x0000,     /* R20395 */
+    0x0000,     /* R20396 */
+    0x0000,     /* R20397 */
+    0x0000,     /* R20398 */
+    0x0000,     /* R20399 */
+    0x0000,     /* R20400 */
+    0x0000,     /* R20401 */
+    0x0000,     /* R20402 */
+    0x0000,     /* R20403 */
+    0x0000,     /* R20404 */
+    0x0000,     /* R20405 */
+    0x0000,     /* R20406 */
+    0x0000,     /* R20407 */
+    0x0000,     /* R20408 */
+    0x0000,     /* R20409 */
+    0x0000,     /* R20410 */
+    0x0000,     /* R20411 */
+    0x0000,     /* R20412 */
+    0x0000,     /* R20413 */
+    0x0000,     /* R20414 */
+    0x0000,     /* R20415 */
+    0x0000,     /* R20416 */
+    0x0000,     /* R20417 */
+    0x0000,     /* R20418 */
+    0x0000,     /* R20419 */
+    0x0000,     /* R20420 */
+    0x0000,     /* R20421 */
+    0x0000,     /* R20422 */
+    0x0000,     /* R20423 */
+    0x0000,     /* R20424 */
+    0x0000,     /* R20425 */
+    0x0000,     /* R20426 */
+    0x0000,     /* R20427 */
+    0x0000,     /* R20428 */
+    0x0000,     /* R20429 */
+    0x0000,     /* R20430 */
+    0x0000,     /* R20431 */
+    0x0000,     /* R20432 */
+    0x0000,     /* R20433 */
+    0x0000,     /* R20434 */
+    0x0000,     /* R20435 */
+    0x0000,     /* R20436 */
+    0x0000,     /* R20437 */
+    0x0000,     /* R20438 */
+    0x0000,     /* R20439 */
+    0x0000,     /* R20440 */
+    0x0000,     /* R20441 */
+    0x0000,     /* R20442 */
+    0x0000,     /* R20443 */
+    0x0000,     /* R20444 */
+    0x0000,     /* R20445 */
+    0x0000,     /* R20446 */
+    0x0000,     /* R20447 */
+    0x0000,     /* R20448 */
+    0x0000,     /* R20449 */
+    0x0000,     /* R20450 */
+    0x0000,     /* R20451 */
+    0x0000,     /* R20452 */
+    0x0000,     /* R20453 */
+    0x0000,     /* R20454 */
+    0x0000,     /* R20455 */
+    0x0000,     /* R20456 */
+    0x0000,     /* R20457 */
+    0x0000,     /* R20458 */
+    0x0000,     /* R20459 */
+    0x0000,     /* R20460 */
+    0x0000,     /* R20461 */
+    0x0000,     /* R20462 */
+    0x0000,     /* R20463 */
+    0x0000,     /* R20464 */
+    0x0000,     /* R20465 */
+    0x0000,     /* R20466 */
+    0x0000,     /* R20467 */
+    0x0000,     /* R20468 */
+    0x0000,     /* R20469 */
+    0x0000,     /* R20470 */
+    0x0000,     /* R20471 */
+    0x0000,     /* R20472 */
+    0x0000,     /* R20473 */
+    0x0000,     /* R20474 */
+    0x0000,     /* R20475 */
+    0x0000,     /* R20476 */
+    0x0000,     /* R20477 */
+    0x0000,     /* R20478 */
+    0x0000,     /* R20479 */
+    0x007F,     /* R20480 - DACR_RETUNE_C1_1 */
+    0xFFFF,     /* R20481 - DACR_RETUNE_C1_0 */
+    0x0000,     /* R20482 - DACR_RETUNE_C2_1 */
+    0x0000,     /* R20483 - DACR_RETUNE_C2_0 */
+    0x0000,     /* R20484 - DACR_RETUNE_C3_1 */
+    0x0000,     /* R20485 - DACR_RETUNE_C3_0 */
+    0x0000,     /* R20486 - DACR_RETUNE_C4_1 */
+    0x0000,     /* R20487 - DACR_RETUNE_C4_0 */
+    0x0000,     /* R20488 - DACR_RETUNE_C5_1 */
+    0x0000,     /* R20489 - DACR_RETUNE_C5_0 */
+    0x0000,     /* R20490 - DACR_RETUNE_C6_1 */
+    0x0000,     /* R20491 - DACR_RETUNE_C6_0 */
+    0x0000,     /* R20492 - DACR_RETUNE_C7_1 */
+    0x0000,     /* R20493 - DACR_RETUNE_C7_0 */
+    0x0000,     /* R20494 - DACR_RETUNE_C8_1 */
+    0x0000,     /* R20495 - DACR_RETUNE_C8_0 */
+    0x0000,     /* R20496 - DACR_RETUNE_C9_1 */
+    0x0000,     /* R20497 - DACR_RETUNE_C9_0 */
+    0x0000,     /* R20498 - DACR_RETUNE_C10_1 */
+    0x0000,     /* R20499 - DACR_RETUNE_C10_0 */
+    0x0000,     /* R20500 - DACR_RETUNE_C11_1 */
+    0x0000,     /* R20501 - DACR_RETUNE_C11_0 */
+    0x0000,     /* R20502 - DACR_RETUNE_C12_1 */
+    0x0000,     /* R20503 - DACR_RETUNE_C12_0 */
+    0x0000,     /* R20504 - DACR_RETUNE_C13_1 */
+    0x0000,     /* R20505 - DACR_RETUNE_C13_0 */
+    0x0000,     /* R20506 - DACR_RETUNE_C14_1 */
+    0x0000,     /* R20507 - DACR_RETUNE_C14_0 */
+    0x0000,     /* R20508 - DACR_RETUNE_C15_1 */
+    0x0000,     /* R20509 - DACR_RETUNE_C15_0 */
+    0x0000,     /* R20510 - DACR_RETUNE_C16_1 */
+    0x0000,     /* R20511 - DACR_RETUNE_C16_0 */
+    0x0000,     /* R20512 - DACR_RETUNE_C17_1 */
+    0x0000,     /* R20513 - DACR_RETUNE_C17_0 */
+    0x0000,     /* R20514 - DACR_RETUNE_C18_1 */
+    0x0000,     /* R20515 - DACR_RETUNE_C18_0 */
+    0x0000,     /* R20516 - DACR_RETUNE_C19_1 */
+    0x0000,     /* R20517 - DACR_RETUNE_C19_0 */
+    0x0000,     /* R20518 - DACR_RETUNE_C20_1 */
+    0x0000,     /* R20519 - DACR_RETUNE_C20_0 */
+    0x0000,     /* R20520 - DACR_RETUNE_C21_1 */
+    0x0000,     /* R20521 - DACR_RETUNE_C21_0 */
+    0x0000,     /* R20522 - DACR_RETUNE_C22_1 */
+    0x0000,     /* R20523 - DACR_RETUNE_C22_0 */
+    0x0000,     /* R20524 - DACR_RETUNE_C23_1 */
+    0x0000,     /* R20525 - DACR_RETUNE_C23_0 */
+    0x0000,     /* R20526 - DACR_RETUNE_C24_1 */
+    0x0000,     /* R20527 - DACR_RETUNE_C24_0 */
+    0x0000,     /* R20528 - DACR_RETUNE_C25_1 */
+    0x0000,     /* R20529 - DACR_RETUNE_C25_0 */
+    0x0000,     /* R20530 - DACR_RETUNE_C26_1 */
+    0x0000,     /* R20531 - DACR_RETUNE_C26_0 */
+    0x0000,     /* R20532 - DACR_RETUNE_C27_1 */
+    0x0000,     /* R20533 - DACR_RETUNE_C27_0 */
+    0x0000,     /* R20534 - DACR_RETUNE_C28_1 */
+    0x0000,     /* R20535 - DACR_RETUNE_C28_0 */
+    0x0000,     /* R20536 - DACR_RETUNE_C29_1 */
+    0x0000,     /* R20537 - DACR_RETUNE_C29_0 */
+    0x0000,     /* R20538 - DACR_RETUNE_C30_1 */
+    0x0000,     /* R20539 - DACR_RETUNE_C30_0 */
+    0x0000,     /* R20540 - DACR_RETUNE_C31_1 */
+    0x0000,     /* R20541 - DACR_RETUNE_C31_0 */
+    0x0000,     /* R20542 - DACR_RETUNE_C32_1 */
+    0x0000,     /* R20543 - DACR_RETUNE_C32_0 */
+    0x0000,     /* R20544 */
+    0x0000,     /* R20545 */
+    0x0000,     /* R20546 */
+    0x0000,     /* R20547 */
+    0x0000,     /* R20548 */
+    0x0000,     /* R20549 */
+    0x0000,     /* R20550 */
+    0x0000,     /* R20551 */
+    0x0000,     /* R20552 */
+    0x0000,     /* R20553 */
+    0x0000,     /* R20554 */
+    0x0000,     /* R20555 */
+    0x0000,     /* R20556 */
+    0x0000,     /* R20557 */
+    0x0000,     /* R20558 */
+    0x0000,     /* R20559 */
+    0x0000,     /* R20560 */
+    0x0000,     /* R20561 */
+    0x0000,     /* R20562 */
+    0x0000,     /* R20563 */
+    0x0000,     /* R20564 */
+    0x0000,     /* R20565 */
+    0x0000,     /* R20566 */
+    0x0000,     /* R20567 */
+    0x0000,     /* R20568 */
+    0x0000,     /* R20569 */
+    0x0000,     /* R20570 */
+    0x0000,     /* R20571 */
+    0x0000,     /* R20572 */
+    0x0000,     /* R20573 */
+    0x0000,     /* R20574 */
+    0x0000,     /* R20575 */
+    0x0000,     /* R20576 */
+    0x0000,     /* R20577 */
+    0x0000,     /* R20578 */
+    0x0000,     /* R20579 */
+    0x0000,     /* R20580 */
+    0x0000,     /* R20581 */
+    0x0000,     /* R20582 */
+    0x0000,     /* R20583 */
+    0x0000,     /* R20584 */
+    0x0000,     /* R20585 */
+    0x0000,     /* R20586 */
+    0x0000,     /* R20587 */
+    0x0000,     /* R20588 */
+    0x0000,     /* R20589 */
+    0x0000,     /* R20590 */
+    0x0000,     /* R20591 */
+    0x0000,     /* R20592 */
+    0x0000,     /* R20593 */
+    0x0000,     /* R20594 */
+    0x0000,     /* R20595 */
+    0x0000,     /* R20596 */
+    0x0000,     /* R20597 */
+    0x0000,     /* R20598 */
+    0x0000,     /* R20599 */
+    0x0000,     /* R20600 */
+    0x0000,     /* R20601 */
+    0x0000,     /* R20602 */
+    0x0000,     /* R20603 */
+    0x0000,     /* R20604 */
+    0x0000,     /* R20605 */
+    0x0000,     /* R20606 */
+    0x0000,     /* R20607 */
+    0x0000,     /* R20608 */
+    0x0000,     /* R20609 */
+    0x0000,     /* R20610 */
+    0x0000,     /* R20611 */
+    0x0000,     /* R20612 */
+    0x0000,     /* R20613 */
+    0x0000,     /* R20614 */
+    0x0000,     /* R20615 */
+    0x0000,     /* R20616 */
+    0x0000,     /* R20617 */
+    0x0000,     /* R20618 */
+    0x0000,     /* R20619 */
+    0x0000,     /* R20620 */
+    0x0000,     /* R20621 */
+    0x0000,     /* R20622 */
+    0x0000,     /* R20623 */
+    0x0000,     /* R20624 */
+    0x0000,     /* R20625 */
+    0x0000,     /* R20626 */
+    0x0000,     /* R20627 */
+    0x0000,     /* R20628 */
+    0x0000,     /* R20629 */
+    0x0000,     /* R20630 */
+    0x0000,     /* R20631 */
+    0x0000,     /* R20632 */
+    0x0000,     /* R20633 */
+    0x0000,     /* R20634 */
+    0x0000,     /* R20635 */
+    0x0000,     /* R20636 */
+    0x0000,     /* R20637 */
+    0x0000,     /* R20638 */
+    0x0000,     /* R20639 */
+    0x0000,     /* R20640 */
+    0x0000,     /* R20641 */
+    0x0000,     /* R20642 */
+    0x0000,     /* R20643 */
+    0x0000,     /* R20644 */
+    0x0000,     /* R20645 */
+    0x0000,     /* R20646 */
+    0x0000,     /* R20647 */
+    0x0000,     /* R20648 */
+    0x0000,     /* R20649 */
+    0x0000,     /* R20650 */
+    0x0000,     /* R20651 */
+    0x0000,     /* R20652 */
+    0x0000,     /* R20653 */
+    0x0000,     /* R20654 */
+    0x0000,     /* R20655 */
+    0x0000,     /* R20656 */
+    0x0000,     /* R20657 */
+    0x0000,     /* R20658 */
+    0x0000,     /* R20659 */
+    0x0000,     /* R20660 */
+    0x0000,     /* R20661 */
+    0x0000,     /* R20662 */
+    0x0000,     /* R20663 */
+    0x0000,     /* R20664 */
+    0x0000,     /* R20665 */
+    0x0000,     /* R20666 */
+    0x0000,     /* R20667 */
+    0x0000,     /* R20668 */
+    0x0000,     /* R20669 */
+    0x0000,     /* R20670 */
+    0x0000,     /* R20671 */
+    0x0000,     /* R20672 */
+    0x0000,     /* R20673 */
+    0x0000,     /* R20674 */
+    0x0000,     /* R20675 */
+    0x0000,     /* R20676 */
+    0x0000,     /* R20677 */
+    0x0000,     /* R20678 */
+    0x0000,     /* R20679 */
+    0x0000,     /* R20680 */
+    0x0000,     /* R20681 */
+    0x0000,     /* R20682 */
+    0x0000,     /* R20683 */
+    0x0000,     /* R20684 */
+    0x0000,     /* R20685 */
+    0x0000,     /* R20686 */
+    0x0000,     /* R20687 */
+    0x0000,     /* R20688 */
+    0x0000,     /* R20689 */
+    0x0000,     /* R20690 */
+    0x0000,     /* R20691 */
+    0x0000,     /* R20692 */
+    0x0000,     /* R20693 */
+    0x0000,     /* R20694 */
+    0x0000,     /* R20695 */
+    0x0000,     /* R20696 */
+    0x0000,     /* R20697 */
+    0x0000,     /* R20698 */
+    0x0000,     /* R20699 */
+    0x0000,     /* R20700 */
+    0x0000,     /* R20701 */
+    0x0000,     /* R20702 */
+    0x0000,     /* R20703 */
+    0x0000,     /* R20704 */
+    0x0000,     /* R20705 */
+    0x0000,     /* R20706 */
+    0x0000,     /* R20707 */
+    0x0000,     /* R20708 */
+    0x0000,     /* R20709 */
+    0x0000,     /* R20710 */
+    0x0000,     /* R20711 */
+    0x0000,     /* R20712 */
+    0x0000,     /* R20713 */
+    0x0000,     /* R20714 */
+    0x0000,     /* R20715 */
+    0x0000,     /* R20716 */
+    0x0000,     /* R20717 */
+    0x0000,     /* R20718 */
+    0x0000,     /* R20719 */
+    0x0000,     /* R20720 */
+    0x0000,     /* R20721 */
+    0x0000,     /* R20722 */
+    0x0000,     /* R20723 */
+    0x0000,     /* R20724 */
+    0x0000,     /* R20725 */
+    0x0000,     /* R20726 */
+    0x0000,     /* R20727 */
+    0x0000,     /* R20728 */
+    0x0000,     /* R20729 */
+    0x0000,     /* R20730 */
+    0x0000,     /* R20731 */
+    0x0000,     /* R20732 */
+    0x0000,     /* R20733 */
+    0x0000,     /* R20734 */
+    0x0000,     /* R20735 */
+    0x0000,     /* R20736 */
+    0x0000,     /* R20737 */
+    0x0000,     /* R20738 */
+    0x0000,     /* R20739 */
+    0x0000,     /* R20740 */
+    0x0000,     /* R20741 */
+    0x0000,     /* R20742 */
+    0x0000,     /* R20743 */
+    0x0000,     /* R20744 */
+    0x0000,     /* R20745 */
+    0x0000,     /* R20746 */
+    0x0000,     /* R20747 */
+    0x0000,     /* R20748 */
+    0x0000,     /* R20749 */
+    0x0000,     /* R20750 */
+    0x0000,     /* R20751 */
+    0x0000,     /* R20752 */
+    0x0000,     /* R20753 */
+    0x0000,     /* R20754 */
+    0x0000,     /* R20755 */
+    0x0000,     /* R20756 */
+    0x0000,     /* R20757 */
+    0x0000,     /* R20758 */
+    0x0000,     /* R20759 */
+    0x0000,     /* R20760 */
+    0x0000,     /* R20761 */
+    0x0000,     /* R20762 */
+    0x0000,     /* R20763 */
+    0x0000,     /* R20764 */
+    0x0000,     /* R20765 */
+    0x0000,     /* R20766 */
+    0x0000,     /* R20767 */
+    0x0000,     /* R20768 */
+    0x0000,     /* R20769 */
+    0x0000,     /* R20770 */
+    0x0000,     /* R20771 */
+    0x0000,     /* R20772 */
+    0x0000,     /* R20773 */
+    0x0000,     /* R20774 */
+    0x0000,     /* R20775 */
+    0x0000,     /* R20776 */
+    0x0000,     /* R20777 */
+    0x0000,     /* R20778 */
+    0x0000,     /* R20779 */
+    0x0000,     /* R20780 */
+    0x0000,     /* R20781 */
+    0x0000,     /* R20782 */
+    0x0000,     /* R20783 */
+    0x0000,     /* R20784 */
+    0x0000,     /* R20785 */
+    0x0000,     /* R20786 */
+    0x0000,     /* R20787 */
+    0x0000,     /* R20788 */
+    0x0000,     /* R20789 */
+    0x0000,     /* R20790 */
+    0x0000,     /* R20791 */
+    0x0000,     /* R20792 */
+    0x0000,     /* R20793 */
+    0x0000,     /* R20794 */
+    0x0000,     /* R20795 */
+    0x0000,     /* R20796 */
+    0x0000,     /* R20797 */
+    0x0000,     /* R20798 */
+    0x0000,     /* R20799 */
+    0x0000,     /* R20800 */
+    0x0000,     /* R20801 */
+    0x0000,     /* R20802 */
+    0x0000,     /* R20803 */
+    0x0000,     /* R20804 */
+    0x0000,     /* R20805 */
+    0x0000,     /* R20806 */
+    0x0000,     /* R20807 */
+    0x0000,     /* R20808 */
+    0x0000,     /* R20809 */
+    0x0000,     /* R20810 */
+    0x0000,     /* R20811 */
+    0x0000,     /* R20812 */
+    0x0000,     /* R20813 */
+    0x0000,     /* R20814 */
+    0x0000,     /* R20815 */
+    0x0000,     /* R20816 */
+    0x0000,     /* R20817 */
+    0x0000,     /* R20818 */
+    0x0000,     /* R20819 */
+    0x0000,     /* R20820 */
+    0x0000,     /* R20821 */
+    0x0000,     /* R20822 */
+    0x0000,     /* R20823 */
+    0x0000,     /* R20824 */
+    0x0000,     /* R20825 */
+    0x0000,     /* R20826 */
+    0x0000,     /* R20827 */
+    0x0000,     /* R20828 */
+    0x0000,     /* R20829 */
+    0x0000,     /* R20830 */
+    0x0000,     /* R20831 */
+    0x0000,     /* R20832 */
+    0x0000,     /* R20833 */
+    0x0000,     /* R20834 */
+    0x0000,     /* R20835 */
+    0x0000,     /* R20836 */
+    0x0000,     /* R20837 */
+    0x0000,     /* R20838 */
+    0x0000,     /* R20839 */
+    0x0000,     /* R20840 */
+    0x0000,     /* R20841 */
+    0x0000,     /* R20842 */
+    0x0000,     /* R20843 */
+    0x0000,     /* R20844 */
+    0x0000,     /* R20845 */
+    0x0000,     /* R20846 */
+    0x0000,     /* R20847 */
+    0x0000,     /* R20848 */
+    0x0000,     /* R20849 */
+    0x0000,     /* R20850 */
+    0x0000,     /* R20851 */
+    0x0000,     /* R20852 */
+    0x0000,     /* R20853 */
+    0x0000,     /* R20854 */
+    0x0000,     /* R20855 */
+    0x0000,     /* R20856 */
+    0x0000,     /* R20857 */
+    0x0000,     /* R20858 */
+    0x0000,     /* R20859 */
+    0x0000,     /* R20860 */
+    0x0000,     /* R20861 */
+    0x0000,     /* R20862 */
+    0x0000,     /* R20863 */
+    0x0000,     /* R20864 */
+    0x0000,     /* R20865 */
+    0x0000,     /* R20866 */
+    0x0000,     /* R20867 */
+    0x0000,     /* R20868 */
+    0x0000,     /* R20869 */
+    0x0000,     /* R20870 */
+    0x0000,     /* R20871 */
+    0x0000,     /* R20872 */
+    0x0000,     /* R20873 */
+    0x0000,     /* R20874 */
+    0x0000,     /* R20875 */
+    0x0000,     /* R20876 */
+    0x0000,     /* R20877 */
+    0x0000,     /* R20878 */
+    0x0000,     /* R20879 */
+    0x0000,     /* R20880 */
+    0x0000,     /* R20881 */
+    0x0000,     /* R20882 */
+    0x0000,     /* R20883 */
+    0x0000,     /* R20884 */
+    0x0000,     /* R20885 */
+    0x0000,     /* R20886 */
+    0x0000,     /* R20887 */
+    0x0000,     /* R20888 */
+    0x0000,     /* R20889 */
+    0x0000,     /* R20890 */
+    0x0000,     /* R20891 */
+    0x0000,     /* R20892 */
+    0x0000,     /* R20893 */
+    0x0000,     /* R20894 */
+    0x0000,     /* R20895 */
+    0x0000,     /* R20896 */
+    0x0000,     /* R20897 */
+    0x0000,     /* R20898 */
+    0x0000,     /* R20899 */
+    0x0000,     /* R20900 */
+    0x0000,     /* R20901 */
+    0x0000,     /* R20902 */
+    0x0000,     /* R20903 */
+    0x0000,     /* R20904 */
+    0x0000,     /* R20905 */
+    0x0000,     /* R20906 */
+    0x0000,     /* R20907 */
+    0x0000,     /* R20908 */
+    0x0000,     /* R20909 */
+    0x0000,     /* R20910 */
+    0x0000,     /* R20911 */
+    0x0000,     /* R20912 */
+    0x0000,     /* R20913 */
+    0x0000,     /* R20914 */
+    0x0000,     /* R20915 */
+    0x0000,     /* R20916 */
+    0x0000,     /* R20917 */
+    0x0000,     /* R20918 */
+    0x0000,     /* R20919 */
+    0x0000,     /* R20920 */
+    0x0000,     /* R20921 */
+    0x0000,     /* R20922 */
+    0x0000,     /* R20923 */
+    0x0000,     /* R20924 */
+    0x0000,     /* R20925 */
+    0x0000,     /* R20926 */
+    0x0000,     /* R20927 */
+    0x0000,     /* R20928 */
+    0x0000,     /* R20929 */
+    0x0000,     /* R20930 */
+    0x0000,     /* R20931 */
+    0x0000,     /* R20932 */
+    0x0000,     /* R20933 */
+    0x0000,     /* R20934 */
+    0x0000,     /* R20935 */
+    0x0000,     /* R20936 */
+    0x0000,     /* R20937 */
+    0x0000,     /* R20938 */
+    0x0000,     /* R20939 */
+    0x0000,     /* R20940 */
+    0x0000,     /* R20941 */
+    0x0000,     /* R20942 */
+    0x0000,     /* R20943 */
+    0x0000,     /* R20944 */
+    0x0000,     /* R20945 */
+    0x0000,     /* R20946 */
+    0x0000,     /* R20947 */
+    0x0000,     /* R20948 */
+    0x0000,     /* R20949 */
+    0x0000,     /* R20950 */
+    0x0000,     /* R20951 */
+    0x0000,     /* R20952 */
+    0x0000,     /* R20953 */
+    0x0000,     /* R20954 */
+    0x0000,     /* R20955 */
+    0x0000,     /* R20956 */
+    0x0000,     /* R20957 */
+    0x0000,     /* R20958 */
+    0x0000,     /* R20959 */
+    0x0000,     /* R20960 */
+    0x0000,     /* R20961 */
+    0x0000,     /* R20962 */
+    0x0000,     /* R20963 */
+    0x0000,     /* R20964 */
+    0x0000,     /* R20965 */
+    0x0000,     /* R20966 */
+    0x0000,     /* R20967 */
+    0x0000,     /* R20968 */
+    0x0000,     /* R20969 */
+    0x0000,     /* R20970 */
+    0x0000,     /* R20971 */
+    0x0000,     /* R20972 */
+    0x0000,     /* R20973 */
+    0x0000,     /* R20974 */
+    0x0000,     /* R20975 */
+    0x0000,     /* R20976 */
+    0x0000,     /* R20977 */
+    0x0000,     /* R20978 */
+    0x0000,     /* R20979 */
+    0x0000,     /* R20980 */
+    0x0000,     /* R20981 */
+    0x0000,     /* R20982 */
+    0x0000,     /* R20983 */
+    0x0000,     /* R20984 */
+    0x0000,     /* R20985 */
+    0x0000,     /* R20986 */
+    0x0000,     /* R20987 */
+    0x0000,     /* R20988 */
+    0x0000,     /* R20989 */
+    0x0000,     /* R20990 */
+    0x0000,     /* R20991 */
+    0x008C,     /* R20992 - VSS_XHD2_1 */
+    0x0200,     /* R20993 - VSS_XHD2_0 */
+    0x0035,     /* R20994 - VSS_XHD3_1 */
+    0x0700,     /* R20995 - VSS_XHD3_0 */
+    0x003A,     /* R20996 - VSS_XHN1_1 */
+    0x4100,     /* R20997 - VSS_XHN1_0 */
+    0x008B,     /* R20998 - VSS_XHN2_1 */
+    0x7D00,     /* R20999 - VSS_XHN2_0 */
+    0x003A,     /* R21000 - VSS_XHN3_1 */
+    0x4100,     /* R21001 - VSS_XHN3_0 */
+    0x008C,     /* R21002 - VSS_XLA_1 */
+    0xFEE8,     /* R21003 - VSS_XLA_0 */
+    0x0078,     /* R21004 - VSS_XLB_1 */
+    0x0000,     /* R21005 - VSS_XLB_0 */
+    0x003F,     /* R21006 - VSS_XLG_1 */
+    0xB260,     /* R21007 - VSS_XLG_0 */
+    0x002D,     /* R21008 - VSS_PG2_1 */
+    0x1818,     /* R21009 - VSS_PG2_0 */
+    0x0020,     /* R21010 - VSS_PG_1 */
+    0x0000,     /* R21011 - VSS_PG_0 */
+    0x00F1,     /* R21012 - VSS_XTD1_1 */
+    0x8340,     /* R21013 - VSS_XTD1_0 */
+    0x00FB,     /* R21014 - VSS_XTD2_1 */
+    0x8300,     /* R21015 - VSS_XTD2_0 */
+    0x00EE,     /* R21016 - VSS_XTD3_1 */
+    0xAEC0,     /* R21017 - VSS_XTD3_0 */
+    0x00FB,     /* R21018 - VSS_XTD4_1 */
+    0xAC40,     /* R21019 - VSS_XTD4_0 */
+    0x00F1,     /* R21020 - VSS_XTD5_1 */
+    0x7F80,     /* R21021 - VSS_XTD5_0 */
+    0x00F4,     /* R21022 - VSS_XTD6_1 */
+    0x3B40,     /* R21023 - VSS_XTD6_0 */
+    0x00F5,     /* R21024 - VSS_XTD7_1 */
+    0xFB00,     /* R21025 - VSS_XTD7_0 */
+    0x00EA,     /* R21026 - VSS_XTD8_1 */
+    0x10C0,     /* R21027 - VSS_XTD8_0 */
+    0x00FC,     /* R21028 - VSS_XTD9_1 */
+    0xC580,     /* R21029 - VSS_XTD9_0 */
+    0x00E2,     /* R21030 - VSS_XTD10_1 */
+    0x75C0,     /* R21031 - VSS_XTD10_0 */
+    0x0004,     /* R21032 - VSS_XTD11_1 */
+    0xB480,     /* R21033 - VSS_XTD11_0 */
+    0x00D4,     /* R21034 - VSS_XTD12_1 */
+    0xF980,     /* R21035 - VSS_XTD12_0 */
+    0x0004,     /* R21036 - VSS_XTD13_1 */
+    0x9140,     /* R21037 - VSS_XTD13_0 */
+    0x00D8,     /* R21038 - VSS_XTD14_1 */
+    0xA480,     /* R21039 - VSS_XTD14_0 */
+    0x0002,     /* R21040 - VSS_XTD15_1 */
+    0x3DC0,     /* R21041 - VSS_XTD15_0 */
+    0x00CF,     /* R21042 - VSS_XTD16_1 */
+    0x7A80,     /* R21043 - VSS_XTD16_0 */
+    0x00DC,     /* R21044 - VSS_XTD17_1 */
+    0x0600,     /* R21045 - VSS_XTD17_0 */
+    0x00F2,     /* R21046 - VSS_XTD18_1 */
+    0xDAC0,     /* R21047 - VSS_XTD18_0 */
+    0x00BA,     /* R21048 - VSS_XTD19_1 */
+    0xF340,     /* R21049 - VSS_XTD19_0 */
+    0x000A,     /* R21050 - VSS_XTD20_1 */
+    0x7940,     /* R21051 - VSS_XTD20_0 */
+    0x001C,     /* R21052 - VSS_XTD21_1 */
+    0x0680,     /* R21053 - VSS_XTD21_0 */
+    0x00FD,     /* R21054 - VSS_XTD22_1 */
+    0x2D00,     /* R21055 - VSS_XTD22_0 */
+    0x001C,     /* R21056 - VSS_XTD23_1 */
+    0xE840,     /* R21057 - VSS_XTD23_0 */
+    0x000D,     /* R21058 - VSS_XTD24_1 */
+    0xDC40,     /* R21059 - VSS_XTD24_0 */
+    0x00FC,     /* R21060 - VSS_XTD25_1 */
+    0x9D00,     /* R21061 - VSS_XTD25_0 */
+    0x0009,     /* R21062 - VSS_XTD26_1 */
+    0x5580,     /* R21063 - VSS_XTD26_0 */
+    0x00FE,     /* R21064 - VSS_XTD27_1 */
+    0x7E80,     /* R21065 - VSS_XTD27_0 */
+    0x000E,     /* R21066 - VSS_XTD28_1 */
+    0xAB40,     /* R21067 - VSS_XTD28_0 */
+    0x00F9,     /* R21068 - VSS_XTD29_1 */
+    0x9880,     /* R21069 - VSS_XTD29_0 */
+    0x0009,     /* R21070 - VSS_XTD30_1 */
+    0x87C0,     /* R21071 - VSS_XTD30_0 */
+    0x00FD,     /* R21072 - VSS_XTD31_1 */
+    0x2C40,     /* R21073 - VSS_XTD31_0 */
+    0x0009,     /* R21074 - VSS_XTD32_1 */
+    0x4800,     /* R21075 - VSS_XTD32_0 */
+    0x0003,     /* R21076 - VSS_XTS1_1 */
+    0x5F40,     /* R21077 - VSS_XTS1_0 */
+    0x0000,     /* R21078 - VSS_XTS2_1 */
+    0x8700,     /* R21079 - VSS_XTS2_0 */
+    0x00FA,     /* R21080 - VSS_XTS3_1 */
+    0xE4C0,     /* R21081 - VSS_XTS3_0 */
+    0x0000,     /* R21082 - VSS_XTS4_1 */
+    0x0B40,     /* R21083 - VSS_XTS4_0 */
+    0x0004,     /* R21084 - VSS_XTS5_1 */
+    0xE180,     /* R21085 - VSS_XTS5_0 */
+    0x0001,     /* R21086 - VSS_XTS6_1 */
+    0x1F40,     /* R21087 - VSS_XTS6_0 */
+    0x00F8,     /* R21088 - VSS_XTS7_1 */
+    0xB000,     /* R21089 - VSS_XTS7_0 */
+    0x00FB,     /* R21090 - VSS_XTS8_1 */
+    0xCBC0,     /* R21091 - VSS_XTS8_0 */
+    0x0004,     /* R21092 - VSS_XTS9_1 */
+    0xF380,     /* R21093 - VSS_XTS9_0 */
+    0x0007,     /* R21094 - VSS_XTS10_1 */
+    0xDF40,     /* R21095 - VSS_XTS10_0 */
+    0x00FF,     /* R21096 - VSS_XTS11_1 */
+    0x0700,     /* R21097 - VSS_XTS11_0 */
+    0x00EF,     /* R21098 - VSS_XTS12_1 */
+    0xD700,     /* R21099 - VSS_XTS12_0 */
+    0x00FB,     /* R21100 - VSS_XTS13_1 */
+    0xAF40,     /* R21101 - VSS_XTS13_0 */
+    0x0010,     /* R21102 - VSS_XTS14_1 */
+    0x8A80,     /* R21103 - VSS_XTS14_0 */
+    0x0011,     /* R21104 - VSS_XTS15_1 */
+    0x07C0,     /* R21105 - VSS_XTS15_0 */
+    0x00E0,     /* R21106 - VSS_XTS16_1 */
+    0x0800,     /* R21107 - VSS_XTS16_0 */
+    0x00D2,     /* R21108 - VSS_XTS17_1 */
+    0x7600,     /* R21109 - VSS_XTS17_0 */
+    0x0020,     /* R21110 - VSS_XTS18_1 */
+    0xCF40,     /* R21111 - VSS_XTS18_0 */
+    0x0030,     /* R21112 - VSS_XTS19_1 */
+    0x2340,     /* R21113 - VSS_XTS19_0 */
+    0x00FD,     /* R21114 - VSS_XTS20_1 */
+    0x69C0,     /* R21115 - VSS_XTS20_0 */
+    0x0028,     /* R21116 - VSS_XTS21_1 */
+    0x3500,     /* R21117 - VSS_XTS21_0 */
+    0x0006,     /* R21118 - VSS_XTS22_1 */
+    0x3300,     /* R21119 - VSS_XTS22_0 */
+    0x00D9,     /* R21120 - VSS_XTS23_1 */
+    0xF6C0,     /* R21121 - VSS_XTS23_0 */
+    0x00F3,     /* R21122 - VSS_XTS24_1 */
+    0x3340,     /* R21123 - VSS_XTS24_0 */
+    0x000F,     /* R21124 - VSS_XTS25_1 */
+    0x4200,     /* R21125 - VSS_XTS25_0 */
+    0x0004,     /* R21126 - VSS_XTS26_1 */
+    0x0C80,     /* R21127 - VSS_XTS26_0 */
+    0x00FB,     /* R21128 - VSS_XTS27_1 */
+    0x3F80,     /* R21129 - VSS_XTS27_0 */
+    0x00F7,     /* R21130 - VSS_XTS28_1 */
+    0x57C0,     /* R21131 - VSS_XTS28_0 */
+    0x0003,     /* R21132 - VSS_XTS29_1 */
+    0x5400,     /* R21133 - VSS_XTS29_0 */
+    0x0000,     /* R21134 - VSS_XTS30_1 */
+    0xC6C0,     /* R21135 - VSS_XTS30_0 */
+    0x0003,     /* R21136 - VSS_XTS31_1 */
+    0x12C0,     /* R21137 - VSS_XTS31_0 */
+    0x00FD,     /* R21138 - VSS_XTS32_1 */
+    0x8580,     /* R21139 - VSS_XTS32_0 */
+};
+
+const struct wm8962_reg_access wm8962_reg_access[WM8962_MAX_REGISTER + 1] = {
+       { 0x00FF, 0x01FF, 0x0000 }, /* R0     - Left Input volume */
+       { 0xFEFF, 0x01FF, 0xFFFF }, /* R1     - Right Input volume */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R2     - HPOUTL volume */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R3     - HPOUTR volume */
+       { 0x07FE, 0x07FE, 0xFFFF }, /* R4     - Clocking1 */
+       { 0x007F, 0x007F, 0x0000 }, /* R5     - ADC & DAC Control 1 */
+       { 0x37ED, 0x37ED, 0x0000 }, /* R6     - ADC & DAC Control 2 */
+       { 0x1FFF, 0x1FFF, 0x0000 }, /* R7     - Audio Interface 0 */
+       { 0x0FEF, 0x0FEF, 0xFFFF }, /* R8     - Clocking2 */
+       { 0x0B9F, 0x039F, 0x0000 }, /* R9     - Audio Interface 1 */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R10    - Left DAC volume */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R11    - Right DAC volume */
+       { 0x0000, 0x0000, 0x0000 }, /* R12 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13 */
+       { 0x07FF, 0x07FF, 0x0000 }, /* R14    - Audio Interface 2 */
+       { 0xFFFF, 0xFFFF, 0xFFFF }, /* R15    - Software Reset */
+       { 0x0000, 0x0000, 0x0000 }, /* R16 */
+       { 0x07FF, 0x07FF, 0x0000 }, /* R17    - ALC1 */
+       { 0xF8FF, 0x00FF, 0xFFFF }, /* R18    - ALC2 */
+       { 0x1DFF, 0x1DFF, 0x0000 }, /* R19    - ALC3 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20    - Noise Gate */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R21    - Left ADC volume */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R22    - Right ADC volume */
+       { 0x0161, 0x0161, 0x0000 }, /* R23    - Additional control(1) */
+       { 0x0008, 0x0008, 0x0000 }, /* R24    - Additional control(2) */
+       { 0x07FE, 0x07FE, 0x0000 }, /* R25    - Pwr Mgmt (1) */
+       { 0x01FB, 0x01FB, 0x0000 }, /* R26    - Pwr Mgmt (2) */
+       { 0x0017, 0x0017, 0x0000 }, /* R27    - Additional Control (3) */
+       { 0x001C, 0x001C, 0x0000 }, /* R28    - Anti-pop */
+       { 0x0000, 0x0000, 0x0000 }, /* R29 */
+       { 0xFFFE, 0xFFFE, 0x0000 }, /* R30    - Clocking 3 */
+       { 0x000F, 0x000F, 0x0000 }, /* R31    - Input mixer control (1) */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R32    - Left input mixer volume */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R33    - Right input mixer volume */
+       { 0x003F, 0x003F, 0x0000 }, /* R34    - Input mixer control (2) */
+       { 0x003F, 0x003F, 0x0000 }, /* R35    - Input bias control */
+       { 0x0000, 0x0000, 0x0000 }, /* R36 */
+       { 0x001F, 0x001F, 0x0000 }, /* R37    - Left input PGA control */
+       { 0x001F, 0x001F, 0x0000 }, /* R38    - Right input PGA control */
+       { 0x0000, 0x0000, 0x0000 }, /* R39 */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R40    - SPKOUTL volume */
+       { 0x00FF, 0x01FF, 0x0000 }, /* R41    - SPKOUTR volume */
+       { 0x0000, 0x0000, 0x0000 }, /* R42 */
+       { 0x0000, 0x0000, 0x0000 }, /* R43 */
+       { 0x0000, 0x0000, 0x0000 }, /* R44 */
+       { 0x0000, 0x0000, 0x0000 }, /* R45 */
+       { 0x0000, 0x0000, 0x0000 }, /* R46 */
+       { 0x000F, 0x0000, 0x0000 }, /* R47    - Thermal Shutdown Status */
+       { 0x7EC7, 0x7E07, 0x0000 }, /* R48    - Additional Control (4) */
+       { 0x00D3, 0x00D7, 0xFFFF }, /* R49    - Class D Control 1 */
+       { 0x0000, 0x0000, 0x0000 }, /* R50 */
+       { 0x0047, 0x0047, 0x0000 }, /* R51    - Class D Control 2 */
+       { 0x0000, 0x0000, 0x0000 }, /* R52 */
+       { 0x0000, 0x0000, 0x0000 }, /* R53 */
+       { 0x0000, 0x0000, 0x0000 }, /* R54 */
+       { 0x0000, 0x0000, 0x0000 }, /* R55 */
+       { 0x001E, 0x001E, 0x0000 }, /* R56    - Clocking 4 */
+       { 0x02FC, 0x02FC, 0x0000 }, /* R57    - DAC DSP Mixing (1) */
+       { 0x00FC, 0x00FC, 0x0000 }, /* R58    - DAC DSP Mixing (2) */
+       { 0x0000, 0x0000, 0x0000 }, /* R59 */
+       { 0x00CC, 0x00CC, 0x0000 }, /* R60    - DC Servo 0 */
+       { 0x00DD, 0x00DD, 0x0000 }, /* R61    - DC Servo 1 */
+       { 0x0000, 0x0000, 0x0000 }, /* R62 */
+       { 0x0000, 0x0000, 0x0000 }, /* R63 */
+       { 0x3F80, 0x3F80, 0x0000 }, /* R64    - DC Servo 4 */
+       { 0x0000, 0x0000, 0x0000 }, /* R65 */
+       { 0x0780, 0x0000, 0xFFFF }, /* R66    - DC Servo 6 */
+       { 0x0000, 0x0000, 0x0000 }, /* R67 */
+       { 0x0007, 0x0007, 0x0000 }, /* R68    - Analogue PGA Bias */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R69    - Analogue HP 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R70 */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R71    - Analogue HP 2 */
+       { 0x0001, 0x0001, 0x0000 }, /* R72    - Charge Pump 1 */
+       { 0x0000, 0x0000, 0x0000 }, /* R73 */
+       { 0x0000, 0x0000, 0x0000 }, /* R74 */
+       { 0x0000, 0x0000, 0x0000 }, /* R75 */
+       { 0x0000, 0x0000, 0x0000 }, /* R76 */
+       { 0x0000, 0x0000, 0x0000 }, /* R77 */
+       { 0x0000, 0x0000, 0x0000 }, /* R78 */
+       { 0x0000, 0x0000, 0x0000 }, /* R79 */
+       { 0x0000, 0x0000, 0x0000 }, /* R80 */
+       { 0x0000, 0x0000, 0x0000 }, /* R81 */
+       { 0x0001, 0x0001, 0x0000 }, /* R82    - Charge Pump B */
+       { 0x0000, 0x0000, 0x0000 }, /* R83 */
+       { 0x0000, 0x0000, 0x0000 }, /* R84 */
+       { 0x0000, 0x0000, 0x0000 }, /* R85 */
+       { 0x0000, 0x0000, 0x0000 }, /* R86 */
+       { 0x00A0, 0x00A0, 0x0000 }, /* R87    - Write Sequencer Control 1 */
+       { 0x0000, 0x0000, 0x0000 }, /* R88 */
+       { 0x0000, 0x0000, 0x0000 }, /* R89 */
+       { 0x007F, 0x01FF, 0x0000 }, /* R90    - Write Sequencer Control 2 */
+       { 0x0000, 0x0000, 0x0000 }, /* R91 */
+       { 0x0000, 0x0000, 0x0000 }, /* R92 */
+       { 0x03F9, 0x0000, 0x0000 }, /* R93    - Write Sequencer Control 3 */
+       { 0x0070, 0x0070, 0x0000 }, /* R94    - Control Interface */
+       { 0x0000, 0x0000, 0x0000 }, /* R95 */
+       { 0x0000, 0x0000, 0x0000 }, /* R96 */
+       { 0x0000, 0x0000, 0x0000 }, /* R97 */
+       { 0x0000, 0x0000, 0x0000 }, /* R98 */
+       { 0x000F, 0x000F, 0x0000 }, /* R99    - Mixer Enables */
+       { 0x00BF, 0x00BF, 0x0000 }, /* R100   - Headphone Mixer (1) */
+       { 0x00BF, 0x00BF, 0x0000 }, /* R101   - Headphone Mixer (2) */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R102   - Headphone Mixer (3) */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R103   - Headphone Mixer (4) */
+       { 0x0000, 0x0000, 0x0000 }, /* R104 */
+       { 0x00BF, 0x00BF, 0x0000 }, /* R105   - Speaker Mixer (1) */
+       { 0x00BF, 0x00BF, 0x0000 }, /* R106   - Speaker Mixer (2) */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R107   - Speaker Mixer (3) */
+       { 0x01FF, 0x01FF, 0x0000 }, /* R108   - Speaker Mixer (4) */
+       { 0x00F0, 0x00F0, 0x0000 }, /* R109   - Speaker Mixer (5) */
+       { 0x00F7, 0x00F7, 0x0000 }, /* R110   - Beep Generator (1) */
+       { 0x0000, 0x0000, 0x0000 }, /* R111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R114 */
+       { 0x001F, 0x001F, 0x0000 }, /* R115   - Oscillator Trim (3) */
+       { 0x001F, 0x001F, 0x0000 }, /* R116   - Oscillator Trim (4) */
+       { 0x0000, 0x0000, 0x0000 }, /* R117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R118 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R119   - Oscillator Trim (7) */
+       { 0x0000, 0x0000, 0x0000 }, /* R120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R123 */
+       { 0x0079, 0x0079, 0x0000 }, /* R124   - Analogue Clocking1 */
+       { 0x00DF, 0x00DF, 0x0000 }, /* R125   - Analogue Clocking2 */
+       { 0x000D, 0x000D, 0x0000 }, /* R126   - Analogue Clocking3 */
+       { 0x0000, 0xFFFF, 0x0000 }, /* R127   - PLL Software Reset */
+       { 0x0000, 0x0000, 0x0000 }, /* R128 */
+       { 0x00B0, 0x00B0, 0x0000 }, /* R129   - PLL2 */
+       { 0x0000, 0x0000, 0x0000 }, /* R130 */
+       { 0x0003, 0x0003, 0x0000 }, /* R131   - PLL 4 */
+       { 0x0000, 0x0000, 0x0000 }, /* R132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R135 */
+       { 0x005F, 0x005F, 0x0000 }, /* R136   - PLL 9 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R137   - PLL 10 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R138   - PLL 11 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R139   - PLL 12 */
+       { 0x005F, 0x005F, 0x0000 }, /* R140   - PLL 13 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R141   - PLL 14 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R142   - PLL 15 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R143   - PLL 16 */
+       { 0x0000, 0x0000, 0x0000 }, /* R144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R154 */
+       { 0x0067, 0x0067, 0x0000 }, /* R155   - FLL Control (1) */
+       { 0x01FB, 0x01FB, 0x0000 }, /* R156   - FLL Control (2) */
+       { 0x0007, 0x0007, 0x0000 }, /* R157   - FLL Control (3) */
+       { 0x0000, 0x0000, 0x0000 }, /* R158 */
+       { 0x007F, 0x007F, 0x0000 }, /* R159   - FLL Control (5) */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R160   - FLL Control (6) */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R161   - FLL Control (7) */
+       { 0x03FF, 0x03FF, 0x0000 }, /* R162   - FLL Control (8) */
+       { 0x0000, 0x0000, 0x0000 }, /* R163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R251 */
+       { 0x0005, 0x0005, 0x0000 }, /* R252   - General test 1 */
+       { 0x0000, 0x0000, 0x0000 }, /* R253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R255 */
+       { 0x000F, 0x000F, 0x0000 }, /* R256   - DF1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R257   - DF2 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R258   - DF3 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R259   - DF4 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R260   - DF5 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R261   - DF6 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R262   - DF7 */
+       { 0x0000, 0x0000, 0x0000 }, /* R263 */
+       { 0x0003, 0x0003, 0x0000 }, /* R264   - LHPF1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R265   - LHPF2 */
+       { 0x0000, 0x0000, 0x0000 }, /* R266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R267 */
+       { 0x0077, 0x0077, 0x0000 }, /* R268   - THREED1 */
+       { 0xFFFC, 0xFFFC, 0x0000 }, /* R269   - THREED2 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R270   - THREED3 */
+       { 0xFFFC, 0xFFFC, 0x0000 }, /* R271   - THREED4 */
+       { 0x0000, 0x0000, 0x0000 }, /* R272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R275 */
+       { 0x7FFF, 0x7FFF, 0x0000 }, /* R276   - DRC 1 */
+       { 0x1FFF, 0x1FFF, 0x0000 }, /* R277   - DRC 2 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R278   - DRC 3 */
+       { 0x07FF, 0x07FF, 0x0000 }, /* R279   - DRC 4 */
+       { 0x03FF, 0x03FF, 0x0000 }, /* R280   - DRC 5 */
+       { 0x0000, 0x0000, 0x0000 }, /* R281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R284 */
+       { 0x0003, 0x0003, 0x0000 }, /* R285   - Tloopback */
+       { 0x0000, 0x0000, 0x0000 }, /* R286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R334 */
+       { 0x0007, 0x0007, 0x0000 }, /* R335   - EQ1 */
+       { 0xFFFE, 0xFFFE, 0x0000 }, /* R336   - EQ2 */
+       { 0xFFC0, 0xFFC0, 0x0000 }, /* R337   - EQ3 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R338   - EQ4 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R339   - EQ5 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R340   - EQ6 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R341   - EQ7 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R342   - EQ8 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R343   - EQ9 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R344   - EQ10 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R345   - EQ11 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R346   - EQ12 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R347   - EQ13 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R348   - EQ14 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R349   - EQ15 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R350   - EQ16 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R351   - EQ17 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R352   - EQ18 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R353   - EQ19 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R354   - EQ20 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R355   - EQ21 */
+       { 0xFFFE, 0xFFFE, 0x0000 }, /* R356   - EQ22 */
+       { 0xFFC0, 0xFFC0, 0x0000 }, /* R357   - EQ23 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R358   - EQ24 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R359   - EQ25 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R360   - EQ26 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R361   - EQ27 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R362   - EQ28 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R363   - EQ29 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R364   - EQ30 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R365   - EQ31 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R366   - EQ32 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R367   - EQ33 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R368   - EQ34 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R369   - EQ35 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R370   - EQ36 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R371   - EQ37 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R372   - EQ38 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R373   - EQ39 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R374   - EQ40 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R375   - EQ41 */
+       { 0x0000, 0x0000, 0x0000 }, /* R376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R512 */
+       { 0x045F, 0x045F, 0x0000 }, /* R513   - GPIO 2 */
+       { 0x045F, 0x045F, 0x0000 }, /* R514   - GPIO 3 */
+       { 0x0000, 0x0000, 0x0000 }, /* R515 */
+       { 0xE75F, 0xE75F, 0x0000 }, /* R516   - GPIO 5 */
+       { 0xE75F, 0xE75F, 0x0000 }, /* R517   - GPIO 6 */
+       { 0x0000, 0x0000, 0x0000 }, /* R518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R559 */
+       { 0x0030, 0x0030, 0xFFFF }, /* R560   - Interrupt Status 1 */
+       { 0xFFED, 0xFFED, 0xFFFF }, /* R561   - Interrupt Status 2 */
+       { 0x0000, 0x0000, 0x0000 }, /* R562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R567 */
+       { 0x0030, 0x0030, 0x0000 }, /* R568   - Interrupt Status 1 Mask */
+       { 0xFFED, 0xFFED, 0x0000 }, /* R569   - Interrupt Status 2 Mask */
+       { 0x0000, 0x0000, 0x0000 }, /* R570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R575 */
+       { 0x0001, 0x0001, 0x0000 }, /* R576   - Interrupt Control */
+       { 0x0000, 0x0000, 0x0000 }, /* R577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R583 */
+       { 0x002D, 0x002D, 0x0000 }, /* R584   - IRQ Debounce */
+       { 0x0000, 0x0000, 0x0000 }, /* R585 */
+       { 0xC000, 0xC000, 0x0000 }, /* R586   -  MICINT Source Pol */
+       { 0x0000, 0x0000, 0x0000 }, /* R587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R767 */
+       { 0x0001, 0x0001, 0x0000 }, /* R768   - DSP2 Power Management */
+       { 0x0000, 0x0000, 0x0000 }, /* R769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1036 */
+       { 0x0000, 0x003F, 0x0000 }, /* R1037  - DSP2_ExecControl */
+       { 0x0000, 0x0000, 0x0000 }, /* R1038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R1999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R2999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R3999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4095 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4096  - Write Sequencer 0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4097  - Write Sequencer 1 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4098  - Write Sequencer 2 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4099  - Write Sequencer 3 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4100  - Write Sequencer 4 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4101  - Write Sequencer 5 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4102  - Write Sequencer 6 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4103  - Write Sequencer 7 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4104  - Write Sequencer 8 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4105  - Write Sequencer 9 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4106  - Write Sequencer 10 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4107  - Write Sequencer 11 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4108  - Write Sequencer 12 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4109  - Write Sequencer 13 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4110  - Write Sequencer 14 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4111  - Write Sequencer 15 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4112  - Write Sequencer 16 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4113  - Write Sequencer 17 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4114  - Write Sequencer 18 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4115  - Write Sequencer 19 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4116  - Write Sequencer 20 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4117  - Write Sequencer 21 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4118  - Write Sequencer 22 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4119  - Write Sequencer 23 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4120  - Write Sequencer 24 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4121  - Write Sequencer 25 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4122  - Write Sequencer 26 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4123  - Write Sequencer 27 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4124  - Write Sequencer 28 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4125  - Write Sequencer 29 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4126  - Write Sequencer 30 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4127  - Write Sequencer 31 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4128  - Write Sequencer 32 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4129  - Write Sequencer 33 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4130  - Write Sequencer 34 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4131  - Write Sequencer 35 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4132  - Write Sequencer 36 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4133  - Write Sequencer 37 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4134  - Write Sequencer 38 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4135  - Write Sequencer 39 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4136  - Write Sequencer 40 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4137  - Write Sequencer 41 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4138  - Write Sequencer 42 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4139  - Write Sequencer 43 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4140  - Write Sequencer 44 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4141  - Write Sequencer 45 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4142  - Write Sequencer 46 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4143  - Write Sequencer 47 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4144  - Write Sequencer 48 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4145  - Write Sequencer 49 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4146  - Write Sequencer 50 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4147  - Write Sequencer 51 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4148  - Write Sequencer 52 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4149  - Write Sequencer 53 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4150  - Write Sequencer 54 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4151  - Write Sequencer 55 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4152  - Write Sequencer 56 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4153  - Write Sequencer 57 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4154  - Write Sequencer 58 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4155  - Write Sequencer 59 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4156  - Write Sequencer 60 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4157  - Write Sequencer 61 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4158  - Write Sequencer 62 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4159  - Write Sequencer 63 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4160  - Write Sequencer 64 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4161  - Write Sequencer 65 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4162  - Write Sequencer 66 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4163  - Write Sequencer 67 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4164  - Write Sequencer 68 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4165  - Write Sequencer 69 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4166  - Write Sequencer 70 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4167  - Write Sequencer 71 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4168  - Write Sequencer 72 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4169  - Write Sequencer 73 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4170  - Write Sequencer 74 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4171  - Write Sequencer 75 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4172  - Write Sequencer 76 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4173  - Write Sequencer 77 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4174  - Write Sequencer 78 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4175  - Write Sequencer 79 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4176  - Write Sequencer 80 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4177  - Write Sequencer 81 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4178  - Write Sequencer 82 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4179  - Write Sequencer 83 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4180  - Write Sequencer 84 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4181  - Write Sequencer 85 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4182  - Write Sequencer 86 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4183  - Write Sequencer 87 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4184  - Write Sequencer 88 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4185  - Write Sequencer 89 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4186  - Write Sequencer 90 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4187  - Write Sequencer 91 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4188  - Write Sequencer 92 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4189  - Write Sequencer 93 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4190  - Write Sequencer 94 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4191  - Write Sequencer 95 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4192  - Write Sequencer 96 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4193  - Write Sequencer 97 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4194  - Write Sequencer 98 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4195  - Write Sequencer 99 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4196  - Write Sequencer 100 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4197  - Write Sequencer 101 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4198  - Write Sequencer 102 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4199  - Write Sequencer 103 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4200  - Write Sequencer 104 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4201  - Write Sequencer 105 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4202  - Write Sequencer 106 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4203  - Write Sequencer 107 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4204  - Write Sequencer 108 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4205  - Write Sequencer 109 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4206  - Write Sequencer 110 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4207  - Write Sequencer 111 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4208  - Write Sequencer 112 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4209  - Write Sequencer 113 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4210  - Write Sequencer 114 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4211  - Write Sequencer 115 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4212  - Write Sequencer 116 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4213  - Write Sequencer 117 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4214  - Write Sequencer 118 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4215  - Write Sequencer 119 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4216  - Write Sequencer 120 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4217  - Write Sequencer 121 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4218  - Write Sequencer 122 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4219  - Write Sequencer 123 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4220  - Write Sequencer 124 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4221  - Write Sequencer 125 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4222  - Write Sequencer 126 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4223  - Write Sequencer 127 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4224  - Write Sequencer 128 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4225  - Write Sequencer 129 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4226  - Write Sequencer 130 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4227  - Write Sequencer 131 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4228  - Write Sequencer 132 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4229  - Write Sequencer 133 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4230  - Write Sequencer 134 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4231  - Write Sequencer 135 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4232  - Write Sequencer 136 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4233  - Write Sequencer 137 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4234  - Write Sequencer 138 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4235  - Write Sequencer 139 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4236  - Write Sequencer 140 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4237  - Write Sequencer 141 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4238  - Write Sequencer 142 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4239  - Write Sequencer 143 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4240  - Write Sequencer 144 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4241  - Write Sequencer 145 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4242  - Write Sequencer 146 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4243  - Write Sequencer 147 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4244  - Write Sequencer 148 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4245  - Write Sequencer 149 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4246  - Write Sequencer 150 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4247  - Write Sequencer 151 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4248  - Write Sequencer 152 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4249  - Write Sequencer 153 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4250  - Write Sequencer 154 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4251  - Write Sequencer 155 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4252  - Write Sequencer 156 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4253  - Write Sequencer 157 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4254  - Write Sequencer 158 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4255  - Write Sequencer 159 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4256  - Write Sequencer 160 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4257  - Write Sequencer 161 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4258  - Write Sequencer 162 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4259  - Write Sequencer 163 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4260  - Write Sequencer 164 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4261  - Write Sequencer 165 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4262  - Write Sequencer 166 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4263  - Write Sequencer 167 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4264  - Write Sequencer 168 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4265  - Write Sequencer 169 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4266  - Write Sequencer 170 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4267  - Write Sequencer 171 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4268  - Write Sequencer 172 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4269  - Write Sequencer 173 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4270  - Write Sequencer 174 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4271  - Write Sequencer 175 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4272  - Write Sequencer 176 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4273  - Write Sequencer 177 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4274  - Write Sequencer 178 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4275  - Write Sequencer 179 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4276  - Write Sequencer 180 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4277  - Write Sequencer 181 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4278  - Write Sequencer 182 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4279  - Write Sequencer 183 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4280  - Write Sequencer 184 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4281  - Write Sequencer 185 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4282  - Write Sequencer 186 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4283  - Write Sequencer 187 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4284  - Write Sequencer 188 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4285  - Write Sequencer 189 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4286  - Write Sequencer 190 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4287  - Write Sequencer 191 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4288  - Write Sequencer 192 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4289  - Write Sequencer 193 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4290  - Write Sequencer 194 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4291  - Write Sequencer 195 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4292  - Write Sequencer 196 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4293  - Write Sequencer 197 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4294  - Write Sequencer 198 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4295  - Write Sequencer 199 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4296  - Write Sequencer 200 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4297  - Write Sequencer 201 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4298  - Write Sequencer 202 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4299  - Write Sequencer 203 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4300  - Write Sequencer 204 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4301  - Write Sequencer 205 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4302  - Write Sequencer 206 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4303  - Write Sequencer 207 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4304  - Write Sequencer 208 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4305  - Write Sequencer 209 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4306  - Write Sequencer 210 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4307  - Write Sequencer 211 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4308  - Write Sequencer 212 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4309  - Write Sequencer 213 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4310  - Write Sequencer 214 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4311  - Write Sequencer 215 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4312  - Write Sequencer 216 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4313  - Write Sequencer 217 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4314  - Write Sequencer 218 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4315  - Write Sequencer 219 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4316  - Write Sequencer 220 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4317  - Write Sequencer 221 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4318  - Write Sequencer 222 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4319  - Write Sequencer 223 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4320  - Write Sequencer 224 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4321  - Write Sequencer 225 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4322  - Write Sequencer 226 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4323  - Write Sequencer 227 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4324  - Write Sequencer 228 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4325  - Write Sequencer 229 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4326  - Write Sequencer 230 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4327  - Write Sequencer 231 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4328  - Write Sequencer 232 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4329  - Write Sequencer 233 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4330  - Write Sequencer 234 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4331  - Write Sequencer 235 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4332  - Write Sequencer 236 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4333  - Write Sequencer 237 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4334  - Write Sequencer 238 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4335  - Write Sequencer 239 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4336  - Write Sequencer 240 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4337  - Write Sequencer 241 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4338  - Write Sequencer 242 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4339  - Write Sequencer 243 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4340  - Write Sequencer 244 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4341  - Write Sequencer 245 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4342  - Write Sequencer 246 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4343  - Write Sequencer 247 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4344  - Write Sequencer 248 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4345  - Write Sequencer 249 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4346  - Write Sequencer 250 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4347  - Write Sequencer 251 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4348  - Write Sequencer 252 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4349  - Write Sequencer 253 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4350  - Write Sequencer 254 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4351  - Write Sequencer 255 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4352  - Write Sequencer 256 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4353  - Write Sequencer 257 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4354  - Write Sequencer 258 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4355  - Write Sequencer 259 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4356  - Write Sequencer 260 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4357  - Write Sequencer 261 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4358  - Write Sequencer 262 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4359  - Write Sequencer 263 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4360  - Write Sequencer 264 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4361  - Write Sequencer 265 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4362  - Write Sequencer 266 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4363  - Write Sequencer 267 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4364  - Write Sequencer 268 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4365  - Write Sequencer 269 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4366  - Write Sequencer 270 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4367  - Write Sequencer 271 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4368  - Write Sequencer 272 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4369  - Write Sequencer 273 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4370  - Write Sequencer 274 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4371  - Write Sequencer 275 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4372  - Write Sequencer 276 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4373  - Write Sequencer 277 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4374  - Write Sequencer 278 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4375  - Write Sequencer 279 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4376  - Write Sequencer 280 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4377  - Write Sequencer 281 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4378  - Write Sequencer 282 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4379  - Write Sequencer 283 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4380  - Write Sequencer 284 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4381  - Write Sequencer 285 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4382  - Write Sequencer 286 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4383  - Write Sequencer 287 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4384  - Write Sequencer 288 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4385  - Write Sequencer 289 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4386  - Write Sequencer 290 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4387  - Write Sequencer 291 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4388  - Write Sequencer 292 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4389  - Write Sequencer 293 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4390  - Write Sequencer 294 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4391  - Write Sequencer 295 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4392  - Write Sequencer 296 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4393  - Write Sequencer 297 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4394  - Write Sequencer 298 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4395  - Write Sequencer 299 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4396  - Write Sequencer 300 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4397  - Write Sequencer 301 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4398  - Write Sequencer 302 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4399  - Write Sequencer 303 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4400  - Write Sequencer 304 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4401  - Write Sequencer 305 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4402  - Write Sequencer 306 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4403  - Write Sequencer 307 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4404  - Write Sequencer 308 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4405  - Write Sequencer 309 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4406  - Write Sequencer 310 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4407  - Write Sequencer 311 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4408  - Write Sequencer 312 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4409  - Write Sequencer 313 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4410  - Write Sequencer 314 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4411  - Write Sequencer 315 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4412  - Write Sequencer 316 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4413  - Write Sequencer 317 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4414  - Write Sequencer 318 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4415  - Write Sequencer 319 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4416  - Write Sequencer 320 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4417  - Write Sequencer 321 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4418  - Write Sequencer 322 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4419  - Write Sequencer 323 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4420  - Write Sequencer 324 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4421  - Write Sequencer 325 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4422  - Write Sequencer 326 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4423  - Write Sequencer 327 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4424  - Write Sequencer 328 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4425  - Write Sequencer 329 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4426  - Write Sequencer 330 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4427  - Write Sequencer 331 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4428  - Write Sequencer 332 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4429  - Write Sequencer 333 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4430  - Write Sequencer 334 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4431  - Write Sequencer 335 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4432  - Write Sequencer 336 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4433  - Write Sequencer 337 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4434  - Write Sequencer 338 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4435  - Write Sequencer 339 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4436  - Write Sequencer 340 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4437  - Write Sequencer 341 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4438  - Write Sequencer 342 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4439  - Write Sequencer 343 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4440  - Write Sequencer 344 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4441  - Write Sequencer 345 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4442  - Write Sequencer 346 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4443  - Write Sequencer 347 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4444  - Write Sequencer 348 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4445  - Write Sequencer 349 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4446  - Write Sequencer 350 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4447  - Write Sequencer 351 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4448  - Write Sequencer 352 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4449  - Write Sequencer 353 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4450  - Write Sequencer 354 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4451  - Write Sequencer 355 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4452  - Write Sequencer 356 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4453  - Write Sequencer 357 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4454  - Write Sequencer 358 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4455  - Write Sequencer 359 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4456  - Write Sequencer 360 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4457  - Write Sequencer 361 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4458  - Write Sequencer 362 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4459  - Write Sequencer 363 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4460  - Write Sequencer 364 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4461  - Write Sequencer 365 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4462  - Write Sequencer 366 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4463  - Write Sequencer 367 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4464  - Write Sequencer 368 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4465  - Write Sequencer 369 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4466  - Write Sequencer 370 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4467  - Write Sequencer 371 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4468  - Write Sequencer 372 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4469  - Write Sequencer 373 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4470  - Write Sequencer 374 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4471  - Write Sequencer 375 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4472  - Write Sequencer 376 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4473  - Write Sequencer 377 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4474  - Write Sequencer 378 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4475  - Write Sequencer 379 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4476  - Write Sequencer 380 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4477  - Write Sequencer 381 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4478  - Write Sequencer 382 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4479  - Write Sequencer 383 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4480  - Write Sequencer 384 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4481  - Write Sequencer 385 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4482  - Write Sequencer 386 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4483  - Write Sequencer 387 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4484  - Write Sequencer 388 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4485  - Write Sequencer 389 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4486  - Write Sequencer 390 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4487  - Write Sequencer 391 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4488  - Write Sequencer 392 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4489  - Write Sequencer 393 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4490  - Write Sequencer 394 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4491  - Write Sequencer 395 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4492  - Write Sequencer 396 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4493  - Write Sequencer 397 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4494  - Write Sequencer 398 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4495  - Write Sequencer 399 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4496  - Write Sequencer 400 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4497  - Write Sequencer 401 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4498  - Write Sequencer 402 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4499  - Write Sequencer 403 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4500  - Write Sequencer 404 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4501  - Write Sequencer 405 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4502  - Write Sequencer 406 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4503  - Write Sequencer 407 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4504  - Write Sequencer 408 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4505  - Write Sequencer 409 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4506  - Write Sequencer 410 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4507  - Write Sequencer 411 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4508  - Write Sequencer 412 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4509  - Write Sequencer 413 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4510  - Write Sequencer 414 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4511  - Write Sequencer 415 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4512  - Write Sequencer 416 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4513  - Write Sequencer 417 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4514  - Write Sequencer 418 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4515  - Write Sequencer 419 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4516  - Write Sequencer 420 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4517  - Write Sequencer 421 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4518  - Write Sequencer 422 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4519  - Write Sequencer 423 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4520  - Write Sequencer 424 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4521  - Write Sequencer 425 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4522  - Write Sequencer 426 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4523  - Write Sequencer 427 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4524  - Write Sequencer 428 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4525  - Write Sequencer 429 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4526  - Write Sequencer 430 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4527  - Write Sequencer 431 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4528  - Write Sequencer 432 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4529  - Write Sequencer 433 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4530  - Write Sequencer 434 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4531  - Write Sequencer 435 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4532  - Write Sequencer 436 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4533  - Write Sequencer 437 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4534  - Write Sequencer 438 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4535  - Write Sequencer 439 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4536  - Write Sequencer 440 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4537  - Write Sequencer 441 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4538  - Write Sequencer 442 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4539  - Write Sequencer 443 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4540  - Write Sequencer 444 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4541  - Write Sequencer 445 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4542  - Write Sequencer 446 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4543  - Write Sequencer 447 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4544  - Write Sequencer 448 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4545  - Write Sequencer 449 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4546  - Write Sequencer 450 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4547  - Write Sequencer 451 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4548  - Write Sequencer 452 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4549  - Write Sequencer 453 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4550  - Write Sequencer 454 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4551  - Write Sequencer 455 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4552  - Write Sequencer 456 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4553  - Write Sequencer 457 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4554  - Write Sequencer 458 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4555  - Write Sequencer 459 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4556  - Write Sequencer 460 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4557  - Write Sequencer 461 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4558  - Write Sequencer 462 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4559  - Write Sequencer 463 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4560  - Write Sequencer 464 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4561  - Write Sequencer 465 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4562  - Write Sequencer 466 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4563  - Write Sequencer 467 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4564  - Write Sequencer 468 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4565  - Write Sequencer 469 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4566  - Write Sequencer 470 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4567  - Write Sequencer 471 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4568  - Write Sequencer 472 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4569  - Write Sequencer 473 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4570  - Write Sequencer 474 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4571  - Write Sequencer 475 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4572  - Write Sequencer 476 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4573  - Write Sequencer 477 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4574  - Write Sequencer 478 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4575  - Write Sequencer 479 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4576  - Write Sequencer 480 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4577  - Write Sequencer 481 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4578  - Write Sequencer 482 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4579  - Write Sequencer 483 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4580  - Write Sequencer 484 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4581  - Write Sequencer 485 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4582  - Write Sequencer 486 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4583  - Write Sequencer 487 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4584  - Write Sequencer 488 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4585  - Write Sequencer 489 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4586  - Write Sequencer 490 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4587  - Write Sequencer 491 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4588  - Write Sequencer 492 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4589  - Write Sequencer 493 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4590  - Write Sequencer 494 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4591  - Write Sequencer 495 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4592  - Write Sequencer 496 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4593  - Write Sequencer 497 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4594  - Write Sequencer 498 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4595  - Write Sequencer 499 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4596  - Write Sequencer 500 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4597  - Write Sequencer 501 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4598  - Write Sequencer 502 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4599  - Write Sequencer 503 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4600  - Write Sequencer 504 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4601  - Write Sequencer 505 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4602  - Write Sequencer 506 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4603  - Write Sequencer 507 */
+       { 0x3FFF, 0x3FFF, 0x0000 }, /* R4604  - Write Sequencer 508 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R4605  - Write Sequencer 509 */
+       { 0x070F, 0x070F, 0x0000 }, /* R4606  - Write Sequencer 510 */
+       { 0x010F, 0x010F, 0x0000 }, /* R4607  - Write Sequencer 511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R4999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R5999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R6999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R7999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8191 */
+       { 0x03FF, 0x03FF, 0x0000 }, /* R8192  - DSP2 Instruction RAM 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R8999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9215 */
+       { 0x003F, 0x003F, 0x0000 }, /* R9216  - DSP2 Address RAM 2 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R9217  - DSP2 Address RAM 1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R9218  - DSP2 Address RAM 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R9999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R10999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R11999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12287 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R12288 - DSP2 Data1 RAM 1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R12289 - DSP2 Data1 RAM 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R12999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13311 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R13312 - DSP2 Data2 RAM 1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R13313 - DSP2 Data2 RAM 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R13999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14335 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R14336 - DSP2 Data3 RAM 1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R14337 - DSP2 Data3 RAM 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R14999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15359 */
+       { 0x07FF, 0x07FF, 0x0000 }, /* R15360 - DSP2 Coeff RAM 0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R15999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16383 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16384 - RETUNEADC_SHARED_COEFF_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16385 - RETUNEADC_SHARED_COEFF_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16386 - RETUNEDAC_SHARED_COEFF_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16387 - RETUNEDAC_SHARED_COEFF_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16388 - SOUNDSTAGE_ENABLES_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16389 - SOUNDSTAGE_ENABLES_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16895 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16896 - HDBASS_AI_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16897 - HDBASS_AI_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16898 - HDBASS_AR_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16899 - HDBASS_AR_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16900 - HDBASS_B_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16901 - HDBASS_B_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16902 - HDBASS_K_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16903 - HDBASS_K_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16904 - HDBASS_N1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16905 - HDBASS_N1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16906 - HDBASS_N2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16907 - HDBASS_N2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16908 - HDBASS_N3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16909 - HDBASS_N3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16910 - HDBASS_N4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16911 - HDBASS_N4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16912 - HDBASS_N5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16913 - HDBASS_N5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16914 - HDBASS_X1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16915 - HDBASS_X1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16916 - HDBASS_X2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16917 - HDBASS_X2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16918 - HDBASS_X3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16919 - HDBASS_X3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16920 - HDBASS_ATK_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16921 - HDBASS_ATK_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16922 - HDBASS_DCY_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16923 - HDBASS_DCY_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R16924 - HDBASS_PG_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R16925 - HDBASS_PG_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R16999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17407 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17408 - HPF_C_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17409 - HPF_C_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17919 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17920 - ADCL_RETUNE_C1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17921 - ADCL_RETUNE_C1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17922 - ADCL_RETUNE_C2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17923 - ADCL_RETUNE_C2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17924 - ADCL_RETUNE_C3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17925 - ADCL_RETUNE_C3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17926 - ADCL_RETUNE_C4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17927 - ADCL_RETUNE_C4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17928 - ADCL_RETUNE_C5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17929 - ADCL_RETUNE_C5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17930 - ADCL_RETUNE_C6_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17931 - ADCL_RETUNE_C6_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17932 - ADCL_RETUNE_C7_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17933 - ADCL_RETUNE_C7_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17934 - ADCL_RETUNE_C8_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17935 - ADCL_RETUNE_C8_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17936 - ADCL_RETUNE_C9_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17937 - ADCL_RETUNE_C9_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17938 - ADCL_RETUNE_C10_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17939 - ADCL_RETUNE_C10_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17940 - ADCL_RETUNE_C11_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17941 - ADCL_RETUNE_C11_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17942 - ADCL_RETUNE_C12_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17943 - ADCL_RETUNE_C12_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17944 - ADCL_RETUNE_C13_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17945 - ADCL_RETUNE_C13_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17946 - ADCL_RETUNE_C14_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17947 - ADCL_RETUNE_C14_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17948 - ADCL_RETUNE_C15_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17949 - ADCL_RETUNE_C15_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17950 - ADCL_RETUNE_C16_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17951 - ADCL_RETUNE_C16_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17952 - ADCL_RETUNE_C17_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17953 - ADCL_RETUNE_C17_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17954 - ADCL_RETUNE_C18_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17955 - ADCL_RETUNE_C18_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17956 - ADCL_RETUNE_C19_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17957 - ADCL_RETUNE_C19_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17958 - ADCL_RETUNE_C20_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17959 - ADCL_RETUNE_C20_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17960 - ADCL_RETUNE_C21_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17961 - ADCL_RETUNE_C21_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17962 - ADCL_RETUNE_C22_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17963 - ADCL_RETUNE_C22_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17964 - ADCL_RETUNE_C23_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17965 - ADCL_RETUNE_C23_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17966 - ADCL_RETUNE_C24_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17967 - ADCL_RETUNE_C24_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17968 - ADCL_RETUNE_C25_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17969 - ADCL_RETUNE_C25_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17970 - ADCL_RETUNE_C26_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17971 - ADCL_RETUNE_C26_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17972 - ADCL_RETUNE_C27_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17973 - ADCL_RETUNE_C27_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17974 - ADCL_RETUNE_C28_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17975 - ADCL_RETUNE_C28_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17976 - ADCL_RETUNE_C29_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17977 - ADCL_RETUNE_C29_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17978 - ADCL_RETUNE_C30_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17979 - ADCL_RETUNE_C30_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17980 - ADCL_RETUNE_C31_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17981 - ADCL_RETUNE_C31_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R17982 - ADCL_RETUNE_C32_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R17983 - ADCL_RETUNE_C32_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R17999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18431 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18432 - RETUNEADC_PG2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18433 - RETUNEADC_PG2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18434 - RETUNEADC_PG_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18435 - RETUNEADC_PG_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18479 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18480 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18481 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18482 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18483 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18484 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18485 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18486 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18487 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18488 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18489 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18490 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18491 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18492 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18493 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18494 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18495 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18496 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18497 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18498 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18499 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18500 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18501 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18502 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18503 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18504 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18505 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18506 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18507 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18508 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18509 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18510 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18511 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18512 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18513 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18514 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18515 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18516 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18517 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18518 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18519 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R18943 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18944 - ADCR_RETUNE_C1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18945 - ADCR_RETUNE_C1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18946 - ADCR_RETUNE_C2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18947 - ADCR_RETUNE_C2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18948 - ADCR_RETUNE_C3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18949 - ADCR_RETUNE_C3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18950 - ADCR_RETUNE_C4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18951 - ADCR_RETUNE_C4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18952 - ADCR_RETUNE_C5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18953 - ADCR_RETUNE_C5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18954 - ADCR_RETUNE_C6_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18955 - ADCR_RETUNE_C6_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18956 - ADCR_RETUNE_C7_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18957 - ADCR_RETUNE_C7_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18958 - ADCR_RETUNE_C8_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18959 - ADCR_RETUNE_C8_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18960 - ADCR_RETUNE_C9_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18961 - ADCR_RETUNE_C9_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18962 - ADCR_RETUNE_C10_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18963 - ADCR_RETUNE_C10_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18964 - ADCR_RETUNE_C11_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18965 - ADCR_RETUNE_C11_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18966 - ADCR_RETUNE_C12_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18967 - ADCR_RETUNE_C12_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18968 - ADCR_RETUNE_C13_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18969 - ADCR_RETUNE_C13_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18970 - ADCR_RETUNE_C14_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18971 - ADCR_RETUNE_C14_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18972 - ADCR_RETUNE_C15_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18973 - ADCR_RETUNE_C15_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18974 - ADCR_RETUNE_C16_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18975 - ADCR_RETUNE_C16_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18976 - ADCR_RETUNE_C17_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18977 - ADCR_RETUNE_C17_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18978 - ADCR_RETUNE_C18_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18979 - ADCR_RETUNE_C18_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18980 - ADCR_RETUNE_C19_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18981 - ADCR_RETUNE_C19_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18982 - ADCR_RETUNE_C20_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18983 - ADCR_RETUNE_C20_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18984 - ADCR_RETUNE_C21_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18985 - ADCR_RETUNE_C21_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18986 - ADCR_RETUNE_C22_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18987 - ADCR_RETUNE_C22_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18988 - ADCR_RETUNE_C23_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18989 - ADCR_RETUNE_C23_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18990 - ADCR_RETUNE_C24_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18991 - ADCR_RETUNE_C24_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18992 - ADCR_RETUNE_C25_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18993 - ADCR_RETUNE_C25_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18994 - ADCR_RETUNE_C26_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18995 - ADCR_RETUNE_C26_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18996 - ADCR_RETUNE_C27_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18997 - ADCR_RETUNE_C27_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R18998 - ADCR_RETUNE_C28_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R18999 - ADCR_RETUNE_C28_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19000 - ADCR_RETUNE_C29_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19001 - ADCR_RETUNE_C29_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19002 - ADCR_RETUNE_C30_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19003 - ADCR_RETUNE_C30_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19004 - ADCR_RETUNE_C31_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19005 - ADCR_RETUNE_C31_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19006 - ADCR_RETUNE_C32_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19007 - ADCR_RETUNE_C32_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19455 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19456 - DACL_RETUNE_C1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19457 - DACL_RETUNE_C1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19458 - DACL_RETUNE_C2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19459 - DACL_RETUNE_C2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19460 - DACL_RETUNE_C3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19461 - DACL_RETUNE_C3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19462 - DACL_RETUNE_C4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19463 - DACL_RETUNE_C4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19464 - DACL_RETUNE_C5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19465 - DACL_RETUNE_C5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19466 - DACL_RETUNE_C6_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19467 - DACL_RETUNE_C6_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19468 - DACL_RETUNE_C7_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19469 - DACL_RETUNE_C7_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19470 - DACL_RETUNE_C8_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19471 - DACL_RETUNE_C8_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19472 - DACL_RETUNE_C9_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19473 - DACL_RETUNE_C9_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19474 - DACL_RETUNE_C10_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19475 - DACL_RETUNE_C10_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19476 - DACL_RETUNE_C11_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19477 - DACL_RETUNE_C11_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19478 - DACL_RETUNE_C12_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19479 - DACL_RETUNE_C12_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19480 - DACL_RETUNE_C13_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19481 - DACL_RETUNE_C13_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19482 - DACL_RETUNE_C14_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19483 - DACL_RETUNE_C14_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19484 - DACL_RETUNE_C15_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19485 - DACL_RETUNE_C15_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19486 - DACL_RETUNE_C16_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19487 - DACL_RETUNE_C16_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19488 - DACL_RETUNE_C17_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19489 - DACL_RETUNE_C17_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19490 - DACL_RETUNE_C18_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19491 - DACL_RETUNE_C18_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19492 - DACL_RETUNE_C19_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19493 - DACL_RETUNE_C19_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19494 - DACL_RETUNE_C20_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19495 - DACL_RETUNE_C20_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19496 - DACL_RETUNE_C21_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19497 - DACL_RETUNE_C21_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19498 - DACL_RETUNE_C22_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19499 - DACL_RETUNE_C22_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19500 - DACL_RETUNE_C23_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19501 - DACL_RETUNE_C23_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19502 - DACL_RETUNE_C24_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19503 - DACL_RETUNE_C24_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19504 - DACL_RETUNE_C25_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19505 - DACL_RETUNE_C25_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19506 - DACL_RETUNE_C26_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19507 - DACL_RETUNE_C26_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19508 - DACL_RETUNE_C27_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19509 - DACL_RETUNE_C27_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19510 - DACL_RETUNE_C28_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19511 - DACL_RETUNE_C28_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19512 - DACL_RETUNE_C29_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19513 - DACL_RETUNE_C29_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19514 - DACL_RETUNE_C30_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19515 - DACL_RETUNE_C30_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19516 - DACL_RETUNE_C31_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19517 - DACL_RETUNE_C31_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19518 - DACL_RETUNE_C32_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19519 - DACL_RETUNE_C32_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19520 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19521 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19522 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19523 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19524 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19525 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19526 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19527 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19528 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19529 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19530 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19531 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19532 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19533 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19534 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19535 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19536 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19537 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19538 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19539 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19540 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19541 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19542 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19543 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19967 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19968 - RETUNEDAC_PG2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19969 - RETUNEDAC_PG2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R19970 - RETUNEDAC_PG_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R19971 - RETUNEDAC_PG_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19991 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19992 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19993 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19994 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19995 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19996 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19997 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19998 */
+       { 0x0000, 0x0000, 0x0000 }, /* R19999 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20000 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20001 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20002 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20003 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20004 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20005 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20006 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20007 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20008 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20009 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20010 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20011 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20012 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20013 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20014 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20015 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20016 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20017 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20018 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20019 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20020 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20021 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20022 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20023 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20024 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20025 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20026 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20027 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20028 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20029 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20030 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20031 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20032 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20033 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20034 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20035 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20036 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20037 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20038 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20039 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20040 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20041 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20042 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20043 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20044 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20045 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20046 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20047 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20048 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20049 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20050 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20051 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20052 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20053 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20054 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20055 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20056 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20057 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20058 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20059 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20060 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20061 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20062 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20063 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20064 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20065 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20066 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20067 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20068 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20069 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20070 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20071 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20072 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20073 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20074 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20075 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20076 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20077 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20078 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20079 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20080 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20081 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20082 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20083 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20084 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20085 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20086 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20087 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20088 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20089 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20090 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20091 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20092 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20093 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20094 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20095 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20096 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20097 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20098 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20099 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20100 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20101 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20102 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20103 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20104 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20105 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20106 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20107 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20108 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20109 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20110 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20111 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20112 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20113 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20114 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20115 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20116 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20117 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20118 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20119 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20120 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20121 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20122 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20123 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20124 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20125 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20126 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20127 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20128 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20129 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20130 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20131 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20132 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20133 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20134 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20135 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20136 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20137 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20138 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20139 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20140 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20141 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20142 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20143 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20144 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20145 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20146 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20147 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20148 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20149 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20150 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20151 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20152 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20153 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20154 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20155 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20156 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20157 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20158 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20159 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20160 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20161 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20162 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20163 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20164 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20165 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20166 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20167 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20168 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20169 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20170 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20171 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20172 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20173 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20174 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20175 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20176 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20177 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20178 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20179 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20180 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20181 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20182 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20183 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20184 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20185 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20186 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20187 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20188 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20189 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20190 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20191 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20192 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20193 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20194 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20195 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20196 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20197 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20198 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20199 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20200 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20201 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20202 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20203 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20204 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20205 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20206 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20207 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20208 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20209 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20210 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20211 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20212 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20213 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20214 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20215 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20216 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20217 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20218 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20219 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20220 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20221 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20222 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20223 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20224 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20225 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20226 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20227 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20228 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20229 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20230 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20231 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20232 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20233 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20234 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20235 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20236 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20237 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20238 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20239 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20240 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20241 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20242 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20243 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20244 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20245 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20246 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20247 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20248 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20249 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20250 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20251 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20252 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20253 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20254 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20255 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20256 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20257 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20258 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20259 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20260 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20261 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20262 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20263 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20264 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20265 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20266 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20267 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20268 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20269 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20270 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20271 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20272 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20273 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20274 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20275 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20276 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20277 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20278 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20279 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20280 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20281 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20282 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20283 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20284 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20285 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20286 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20287 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20288 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20289 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20290 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20291 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20292 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20293 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20294 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20295 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20296 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20297 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20298 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20299 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20300 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20301 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20302 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20303 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20304 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20305 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20306 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20307 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20308 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20309 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20310 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20311 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20312 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20313 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20314 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20315 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20316 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20317 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20318 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20319 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20320 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20321 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20322 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20323 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20324 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20325 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20326 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20327 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20328 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20329 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20330 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20331 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20332 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20333 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20334 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20335 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20336 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20337 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20338 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20339 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20340 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20341 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20342 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20343 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20344 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20345 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20346 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20347 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20348 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20349 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20350 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20351 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20352 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20353 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20354 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20355 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20356 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20357 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20358 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20359 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20360 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20361 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20362 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20363 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20364 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20365 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20366 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20367 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20368 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20369 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20370 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20371 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20372 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20373 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20374 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20375 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20376 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20377 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20378 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20379 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20380 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20381 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20382 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20383 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20384 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20385 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20386 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20387 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20388 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20389 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20390 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20391 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20392 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20393 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20394 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20395 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20396 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20397 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20398 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20399 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20400 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20401 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20402 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20403 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20404 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20405 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20406 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20407 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20408 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20409 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20410 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20411 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20412 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20413 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20414 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20415 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20416 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20417 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20418 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20419 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20420 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20421 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20422 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20423 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20424 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20425 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20426 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20427 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20428 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20429 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20430 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20431 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20432 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20433 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20434 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20435 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20436 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20437 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20438 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20439 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20440 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20441 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20442 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20443 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20444 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20445 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20446 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20447 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20448 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20449 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20450 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20451 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20452 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20453 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20454 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20455 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20456 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20457 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20458 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20459 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20460 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20461 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20462 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20463 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20464 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20465 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20466 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20467 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20468 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20469 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20470 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20471 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20472 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20473 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20474 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20475 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20476 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20477 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20478 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20479 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20480 - DACR_RETUNE_C1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20481 - DACR_RETUNE_C1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20482 - DACR_RETUNE_C2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20483 - DACR_RETUNE_C2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20484 - DACR_RETUNE_C3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20485 - DACR_RETUNE_C3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20486 - DACR_RETUNE_C4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20487 - DACR_RETUNE_C4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20488 - DACR_RETUNE_C5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20489 - DACR_RETUNE_C5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20490 - DACR_RETUNE_C6_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20491 - DACR_RETUNE_C6_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20492 - DACR_RETUNE_C7_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20493 - DACR_RETUNE_C7_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20494 - DACR_RETUNE_C8_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20495 - DACR_RETUNE_C8_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20496 - DACR_RETUNE_C9_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20497 - DACR_RETUNE_C9_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20498 - DACR_RETUNE_C10_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20499 - DACR_RETUNE_C10_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20500 - DACR_RETUNE_C11_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20501 - DACR_RETUNE_C11_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20502 - DACR_RETUNE_C12_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20503 - DACR_RETUNE_C12_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20504 - DACR_RETUNE_C13_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20505 - DACR_RETUNE_C13_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20506 - DACR_RETUNE_C14_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20507 - DACR_RETUNE_C14_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20508 - DACR_RETUNE_C15_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20509 - DACR_RETUNE_C15_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20510 - DACR_RETUNE_C16_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20511 - DACR_RETUNE_C16_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20512 - DACR_RETUNE_C17_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20513 - DACR_RETUNE_C17_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20514 - DACR_RETUNE_C18_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20515 - DACR_RETUNE_C18_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20516 - DACR_RETUNE_C19_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20517 - DACR_RETUNE_C19_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20518 - DACR_RETUNE_C20_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20519 - DACR_RETUNE_C20_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20520 - DACR_RETUNE_C21_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20521 - DACR_RETUNE_C21_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20522 - DACR_RETUNE_C22_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20523 - DACR_RETUNE_C22_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20524 - DACR_RETUNE_C23_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20525 - DACR_RETUNE_C23_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20526 - DACR_RETUNE_C24_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20527 - DACR_RETUNE_C24_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20528 - DACR_RETUNE_C25_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20529 - DACR_RETUNE_C25_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20530 - DACR_RETUNE_C26_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20531 - DACR_RETUNE_C26_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20532 - DACR_RETUNE_C27_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20533 - DACR_RETUNE_C27_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20534 - DACR_RETUNE_C28_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20535 - DACR_RETUNE_C28_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20536 - DACR_RETUNE_C29_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20537 - DACR_RETUNE_C29_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20538 - DACR_RETUNE_C30_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20539 - DACR_RETUNE_C30_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20540 - DACR_RETUNE_C31_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20541 - DACR_RETUNE_C31_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20542 - DACR_RETUNE_C32_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20543 - DACR_RETUNE_C32_0 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20544 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20545 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20546 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20547 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20548 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20549 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20550 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20551 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20552 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20553 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20554 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20555 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20556 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20557 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20558 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20559 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20560 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20561 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20562 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20563 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20564 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20565 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20566 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20567 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20568 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20569 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20570 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20571 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20572 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20573 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20574 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20575 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20576 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20577 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20578 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20579 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20580 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20581 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20582 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20583 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20584 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20585 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20586 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20587 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20588 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20589 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20590 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20591 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20592 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20593 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20594 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20595 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20596 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20597 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20598 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20599 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20600 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20601 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20602 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20603 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20604 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20605 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20606 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20607 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20608 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20609 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20610 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20611 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20612 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20613 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20614 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20615 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20616 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20617 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20618 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20619 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20620 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20621 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20622 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20623 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20624 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20625 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20626 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20627 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20628 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20629 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20630 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20631 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20632 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20633 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20634 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20635 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20636 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20637 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20638 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20639 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20640 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20641 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20642 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20643 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20644 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20645 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20646 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20647 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20648 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20649 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20650 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20651 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20652 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20653 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20654 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20655 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20656 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20657 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20658 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20659 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20660 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20661 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20662 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20663 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20664 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20665 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20666 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20667 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20668 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20669 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20670 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20671 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20672 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20673 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20674 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20675 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20676 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20677 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20678 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20679 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20680 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20681 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20682 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20683 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20684 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20685 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20686 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20687 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20688 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20689 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20690 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20691 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20692 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20693 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20694 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20695 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20696 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20697 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20698 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20699 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20700 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20701 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20702 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20703 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20704 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20705 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20706 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20707 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20708 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20709 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20710 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20711 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20712 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20713 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20714 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20715 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20716 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20717 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20718 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20719 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20720 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20721 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20722 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20723 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20724 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20725 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20726 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20727 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20728 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20729 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20730 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20731 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20732 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20733 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20734 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20735 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20736 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20737 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20738 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20739 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20740 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20741 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20742 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20743 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20744 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20745 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20746 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20747 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20748 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20749 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20750 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20751 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20752 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20753 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20754 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20755 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20756 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20757 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20758 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20759 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20760 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20761 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20762 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20763 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20764 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20765 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20766 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20767 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20768 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20769 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20770 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20771 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20772 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20773 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20774 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20775 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20776 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20777 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20778 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20779 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20780 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20781 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20782 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20783 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20784 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20785 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20786 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20787 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20788 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20789 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20790 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20791 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20792 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20793 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20794 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20795 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20796 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20797 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20798 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20799 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20800 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20801 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20802 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20803 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20804 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20805 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20806 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20807 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20808 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20809 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20810 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20811 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20812 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20813 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20814 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20815 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20816 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20817 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20818 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20819 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20820 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20821 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20822 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20823 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20824 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20825 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20826 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20827 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20828 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20829 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20830 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20831 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20832 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20833 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20834 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20835 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20836 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20837 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20838 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20839 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20840 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20841 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20842 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20843 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20844 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20845 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20846 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20847 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20848 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20849 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20850 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20851 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20852 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20853 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20854 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20855 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20856 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20857 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20858 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20859 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20860 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20861 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20862 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20863 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20864 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20865 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20866 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20867 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20868 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20869 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20870 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20871 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20872 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20873 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20874 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20875 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20876 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20877 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20878 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20879 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20880 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20881 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20882 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20883 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20884 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20885 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20886 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20887 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20888 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20889 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20890 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20891 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20892 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20893 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20894 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20895 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20896 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20897 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20898 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20899 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20900 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20901 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20902 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20903 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20904 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20905 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20906 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20907 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20908 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20909 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20910 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20911 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20912 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20913 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20914 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20915 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20916 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20917 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20918 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20919 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20920 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20921 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20922 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20923 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20924 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20925 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20926 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20927 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20928 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20929 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20930 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20931 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20932 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20933 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20934 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20935 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20936 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20937 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20938 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20939 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20940 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20941 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20942 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20943 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20944 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20945 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20946 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20947 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20948 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20949 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20950 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20951 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20952 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20953 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20954 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20955 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20956 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20957 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20958 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20959 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20960 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20961 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20962 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20963 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20964 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20965 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20966 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20967 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20968 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20969 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20970 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20971 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20972 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20973 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20974 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20975 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20976 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20977 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20978 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20979 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20980 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20981 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20982 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20983 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20984 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20985 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20986 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20987 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20988 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20989 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20990 */
+       { 0x0000, 0x0000, 0x0000 }, /* R20991 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20992 - VSS_XHD2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20993 - VSS_XHD2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20994 - VSS_XHD3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20995 - VSS_XHD3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20996 - VSS_XHN1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20997 - VSS_XHN1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R20998 - VSS_XHN2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R20999 - VSS_XHN2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21000 - VSS_XHN3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21001 - VSS_XHN3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21002 - VSS_XLA_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21003 - VSS_XLA_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21004 - VSS_XLB_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21005 - VSS_XLB_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21006 - VSS_XLG_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21007 - VSS_XLG_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21008 - VSS_PG2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21009 - VSS_PG2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21010 - VSS_PG_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21011 - VSS_PG_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21012 - VSS_XTD1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21013 - VSS_XTD1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21014 - VSS_XTD2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21015 - VSS_XTD2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21016 - VSS_XTD3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21017 - VSS_XTD3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21018 - VSS_XTD4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21019 - VSS_XTD4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21020 - VSS_XTD5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21021 - VSS_XTD5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21022 - VSS_XTD6_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21023 - VSS_XTD6_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21024 - VSS_XTD7_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21025 - VSS_XTD7_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21026 - VSS_XTD8_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21027 - VSS_XTD8_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21028 - VSS_XTD9_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21029 - VSS_XTD9_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21030 - VSS_XTD10_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21031 - VSS_XTD10_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21032 - VSS_XTD11_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21033 - VSS_XTD11_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21034 - VSS_XTD12_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21035 - VSS_XTD12_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21036 - VSS_XTD13_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21037 - VSS_XTD13_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21038 - VSS_XTD14_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21039 - VSS_XTD14_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21040 - VSS_XTD15_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21041 - VSS_XTD15_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21042 - VSS_XTD16_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21043 - VSS_XTD16_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21044 - VSS_XTD17_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21045 - VSS_XTD17_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21046 - VSS_XTD18_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21047 - VSS_XTD18_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21048 - VSS_XTD19_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21049 - VSS_XTD19_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21050 - VSS_XTD20_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21051 - VSS_XTD20_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21052 - VSS_XTD21_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21053 - VSS_XTD21_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21054 - VSS_XTD22_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21055 - VSS_XTD22_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21056 - VSS_XTD23_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21057 - VSS_XTD23_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21058 - VSS_XTD24_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21059 - VSS_XTD24_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21060 - VSS_XTD25_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21061 - VSS_XTD25_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21062 - VSS_XTD26_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21063 - VSS_XTD26_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21064 - VSS_XTD27_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21065 - VSS_XTD27_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21066 - VSS_XTD28_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21067 - VSS_XTD28_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21068 - VSS_XTD29_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21069 - VSS_XTD29_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21070 - VSS_XTD30_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21071 - VSS_XTD30_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21072 - VSS_XTD31_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21073 - VSS_XTD31_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21074 - VSS_XTD32_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21075 - VSS_XTD32_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21076 - VSS_XTS1_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21077 - VSS_XTS1_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21078 - VSS_XTS2_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21079 - VSS_XTS2_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21080 - VSS_XTS3_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21081 - VSS_XTS3_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21082 - VSS_XTS4_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21083 - VSS_XTS4_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21084 - VSS_XTS5_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21085 - VSS_XTS5_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21086 - VSS_XTS6_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21087 - VSS_XTS6_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21088 - VSS_XTS7_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21089 - VSS_XTS7_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21090 - VSS_XTS8_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21091 - VSS_XTS8_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21092 - VSS_XTS9_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21093 - VSS_XTS9_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21094 - VSS_XTS10_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21095 - VSS_XTS10_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21096 - VSS_XTS11_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21097 - VSS_XTS11_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21098 - VSS_XTS12_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21099 - VSS_XTS12_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21100 - VSS_XTS13_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21101 - VSS_XTS13_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21102 - VSS_XTS14_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21103 - VSS_XTS14_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21104 - VSS_XTS15_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21105 - VSS_XTS15_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21106 - VSS_XTS16_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21107 - VSS_XTS16_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21108 - VSS_XTS17_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21109 - VSS_XTS17_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21110 - VSS_XTS18_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21111 - VSS_XTS18_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21112 - VSS_XTS19_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21113 - VSS_XTS19_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21114 - VSS_XTS20_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21115 - VSS_XTS20_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21116 - VSS_XTS21_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21117 - VSS_XTS21_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21118 - VSS_XTS22_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21119 - VSS_XTS22_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21120 - VSS_XTS23_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21121 - VSS_XTS23_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21122 - VSS_XTS24_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21123 - VSS_XTS24_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21124 - VSS_XTS25_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21125 - VSS_XTS25_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21126 - VSS_XTS26_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21127 - VSS_XTS26_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21128 - VSS_XTS27_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21129 - VSS_XTS27_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21130 - VSS_XTS28_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21131 - VSS_XTS28_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21132 - VSS_XTS29_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21133 - VSS_XTS29_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21134 - VSS_XTS30_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21135 - VSS_XTS30_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21136 - VSS_XTS31_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21137 - VSS_XTS31_0 */
+       { 0x00FF, 0x00FF, 0x0000 }, /* R21138 - VSS_XTS32_1 */
+       { 0xFFFF, 0xFFFF, 0x0000 }, /* R21139 - VSS_XTS32_0 */
+};
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
new file mode 100644 (file)
index 0000000..58ba2d3
--- /dev/null
@@ -0,0 +1,1859 @@
+/*
+ * wm8962.c  --  WM8962 ALSA SoC Audio driver
+ *
+ * Copyright 2010 Wolfson Microelectronics plc
+ *
+ * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/gcd.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/slab.h>
+#include <linux/workqueue.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/initval.h>
+#include <sound/tlv.h>
+#include <sound/wm8962.h>
+
+#include "wm8962.h"
+
+#define WM8962_NUM_SUPPLIES 8
+static const char *wm8962_supply_names[WM8962_NUM_SUPPLIES] = {
+       "DCVDD",
+       "DBVDD",
+       "AVDD",
+       "CPVDD",
+       "MICVDD",
+       "PLLVDD",
+       "SPKVDD1",
+       "SPKVDD2",
+};
+
+/* codec private data */
+struct wm8962_priv {
+       struct snd_soc_codec *codec;
+
+       u16 reg_cache[WM8962_MAX_REGISTER + 1];
+
+       int sysclk;
+       int sysclk_rate;
+
+       int bclk;  /* Desired BCLK */
+       int lrclk;
+
+       int fll_src;
+       int fll_fref;
+       int fll_fout;
+
+       struct regulator_bulk_data supplies[WM8962_NUM_SUPPLIES];
+       struct notifier_block disable_nb[WM8962_NUM_SUPPLIES];
+
+#if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
+       struct input_dev *beep;
+       struct work_struct beep_work;
+       int beep_rate;
+#endif
+};
+
+/* We can't use the same notifier block for more than one supply and
+ * there's no way I can see to get from a callback to the caller
+ * except container_of().
+ */
+#define WM8962_REGULATOR_EVENT(n) \
+static int wm8962_regulator_event_##n(struct notifier_block *nb, \
+                                   unsigned long event, void *data)    \
+{ \
+       struct wm8962_priv *wm8962 = container_of(nb, struct wm8962_priv, \
+                                                 disable_nb[n]); \
+       if (event & REGULATOR_EVENT_DISABLE) { \
+               wm8962->codec->cache_sync = 1; \
+       } \
+       return 0; \
+}
+
+WM8962_REGULATOR_EVENT(0)
+WM8962_REGULATOR_EVENT(1)
+WM8962_REGULATOR_EVENT(2)
+WM8962_REGULATOR_EVENT(3)
+WM8962_REGULATOR_EVENT(4)
+WM8962_REGULATOR_EVENT(5)
+WM8962_REGULATOR_EVENT(6)
+WM8962_REGULATOR_EVENT(7)
+
+static int wm8962_volatile_register(unsigned int reg)
+{
+       if (wm8962_reg_access[reg].vol)
+               return 1;
+       else
+               return 0;
+}
+
+static int wm8962_readable_register(unsigned int reg)
+{
+       if (wm8962_reg_access[reg].read)
+               return 1;
+       else
+               return 0;
+}
+
+static int wm8962_reset(struct snd_soc_codec *codec)
+{
+       return snd_soc_write(codec, WM8962_SOFTWARE_RESET, 0);
+}
+
+static const DECLARE_TLV_DB_SCALE(inpga_tlv, -2325, 75, 0);
+static const DECLARE_TLV_DB_SCALE(mixin_tlv, -1500, 300, 0);
+static const unsigned int mixinpga_tlv[] = {
+       TLV_DB_RANGE_HEAD(7),
+       0, 1, TLV_DB_SCALE_ITEM(0, 600, 0),
+       2, 2, TLV_DB_SCALE_ITEM(1300, 1300, 0),
+       3, 4, TLV_DB_SCALE_ITEM(1800, 200, 0),
+       5, 5, TLV_DB_SCALE_ITEM(2400, 0, 0),
+       6, 7, TLV_DB_SCALE_ITEM(2700, 300, 0),
+};
+static const DECLARE_TLV_DB_SCALE(beep_tlv, -9600, 600, 1);
+static const DECLARE_TLV_DB_SCALE(digital_tlv, -7200, 75, 1);
+static const DECLARE_TLV_DB_SCALE(st_tlv, -3600, 300, 0);
+static const DECLARE_TLV_DB_SCALE(inmix_tlv, -600, 600, 0);
+static const DECLARE_TLV_DB_SCALE(bypass_tlv, -1500, 300, 0);
+static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1);
+static const DECLARE_TLV_DB_SCALE(hp_tlv, -700, 100, 0);
+static const unsigned int classd_tlv[] = {
+       TLV_DB_RANGE_HEAD(7),
+       0, 6, TLV_DB_SCALE_ITEM(0, 150, 0),
+       7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0),
+};
+
+/* The VU bits for the headphones are in a different register to the mute
+ * bits and only take effect on the PGA if it is actually powered.
+ */
+static int wm8962_put_hp_sw(struct snd_kcontrol *kcontrol,
+                           struct snd_ctl_elem_value *ucontrol)
+{
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       u16 *reg_cache = wm8962->reg_cache;
+       int ret;
+
+       /* Apply the update (if any) */
+        ret = snd_soc_put_volsw(kcontrol, ucontrol);
+       if (ret == 0)
+               return 0;
+
+       /* If the left PGA is enabled hit that VU bit... */
+       if (reg_cache[WM8962_PWR_MGMT_2] & WM8962_HPOUTL_PGA_ENA)
+               return snd_soc_write(codec, WM8962_HPOUTL_VOLUME,
+                                    reg_cache[WM8962_HPOUTL_VOLUME]);
+
+       /* ...otherwise the right.  The VU is stereo. */
+       if (reg_cache[WM8962_PWR_MGMT_2] & WM8962_HPOUTR_PGA_ENA)
+               return snd_soc_write(codec, WM8962_HPOUTR_VOLUME,
+                                    reg_cache[WM8962_HPOUTR_VOLUME]);
+
+       return 0;
+}
+
+/* The VU bits for the speakers are in a different register to the mute
+ * bits and only take effect on the PGA if it is actually powered.
+ */
+static int wm8962_put_spk_sw(struct snd_kcontrol *kcontrol,
+                           struct snd_ctl_elem_value *ucontrol)
+{
+       struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       u16 *reg_cache = wm8962->reg_cache;
+       int ret;
+
+       /* Apply the update (if any) */
+        ret = snd_soc_put_volsw(kcontrol, ucontrol);
+       if (ret == 0)
+               return 0;
+
+       /* If the left PGA is enabled hit that VU bit... */
+       if (reg_cache[WM8962_PWR_MGMT_2] & WM8962_SPKOUTL_PGA_ENA)
+               return snd_soc_write(codec, WM8962_SPKOUTL_VOLUME,
+                                    reg_cache[WM8962_SPKOUTL_VOLUME]);
+
+       /* ...otherwise the right.  The VU is stereo. */
+       if (reg_cache[WM8962_PWR_MGMT_2] & WM8962_SPKOUTR_PGA_ENA)
+               return snd_soc_write(codec, WM8962_SPKOUTR_VOLUME,
+                                    reg_cache[WM8962_SPKOUTR_VOLUME]);
+
+       return 0;
+}
+
+static const struct snd_kcontrol_new wm8962_snd_controls[] = {
+SOC_DOUBLE("Input Mixer Switch", WM8962_INPUT_MIXER_CONTROL_1, 3, 2, 1, 1),
+
+SOC_SINGLE_TLV("MIXINL IN2L Volume", WM8962_LEFT_INPUT_MIXER_VOLUME, 6, 7, 0,
+              mixin_tlv),
+SOC_SINGLE_TLV("MIXINL PGA Volume", WM8962_LEFT_INPUT_MIXER_VOLUME, 3, 7, 0,
+              mixinpga_tlv),
+SOC_SINGLE_TLV("MIXINL IN3L Volume", WM8962_LEFT_INPUT_MIXER_VOLUME, 0, 7, 0,
+              mixin_tlv),
+
+SOC_SINGLE_TLV("MIXINR IN2R Volume", WM8962_RIGHT_INPUT_MIXER_VOLUME, 6, 7, 0,
+              mixin_tlv),
+SOC_SINGLE_TLV("MIXINR PGA Volume", WM8962_RIGHT_INPUT_MIXER_VOLUME, 3, 7, 0,
+              mixinpga_tlv),
+SOC_SINGLE_TLV("MIXINR IN3R Volume", WM8962_RIGHT_INPUT_MIXER_VOLUME, 0, 7, 0,
+              mixin_tlv),
+
+SOC_DOUBLE_R_TLV("Digital Capture Volume", WM8962_LEFT_ADC_VOLUME,
+                WM8962_RIGHT_ADC_VOLUME, 1, 127, 0, digital_tlv),
+SOC_DOUBLE_R_TLV("Capture Volume", WM8962_LEFT_INPUT_VOLUME,
+                WM8962_RIGHT_INPUT_VOLUME, 0, 63, 0, inpga_tlv),
+SOC_DOUBLE_R("Capture Switch", WM8962_LEFT_INPUT_VOLUME,
+            WM8962_RIGHT_INPUT_VOLUME, 7, 1, 1),
+SOC_DOUBLE_R("Capture ZC Switch", WM8962_LEFT_INPUT_VOLUME,
+            WM8962_RIGHT_INPUT_VOLUME, 6, 1, 1),
+
+SOC_DOUBLE_R_TLV("Sidetone Volume", WM8962_DAC_DSP_MIXING_1,
+                WM8962_DAC_DSP_MIXING_2, 4, 12, 0, st_tlv),
+
+SOC_DOUBLE_R_TLV("Digital Playback Volume", WM8962_LEFT_DAC_VOLUME,
+                WM8962_RIGHT_DAC_VOLUME, 1, 127, 0, digital_tlv),
+SOC_SINGLE("DAC High Performance Switch", WM8962_ADC_DAC_CONTROL_2, 0, 1, 0),
+
+SOC_SINGLE("ADC High Performance Switch", WM8962_ADDITIONAL_CONTROL_1,
+          5, 1, 0),
+
+SOC_SINGLE_TLV("Beep Volume", WM8962_BEEP_GENERATOR_1, 4, 15, 0, beep_tlv),
+
+SOC_DOUBLE_R_TLV("Headphone Volume", WM8962_HPOUTL_VOLUME,
+                WM8962_HPOUTR_VOLUME, 0, 127, 0, out_tlv),
+SOC_DOUBLE_EXT("Headphone Switch", WM8962_PWR_MGMT_2, 1, 0, 1, 1,
+              snd_soc_get_volsw, wm8962_put_hp_sw),
+SOC_DOUBLE_R("Headphone ZC Switch", WM8962_HPOUTL_VOLUME, WM8962_HPOUTR_VOLUME,
+            7, 1, 0),
+SOC_DOUBLE_TLV("Headphone Aux Volume", WM8962_ANALOGUE_HP_2, 3, 6, 7, 0,
+              hp_tlv),
+
+SOC_DOUBLE_R("Headphone Mixer Switch", WM8962_HEADPHONE_MIXER_3,
+            WM8962_HEADPHONE_MIXER_4, 8, 1, 1),
+
+SOC_SINGLE_TLV("HPMIXL IN4L Volume", WM8962_HEADPHONE_MIXER_3,
+              3, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("HPMIXL IN4R Volume", WM8962_HEADPHONE_MIXER_3,
+              0, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("HPMIXL MIXINL Volume", WM8962_HEADPHONE_MIXER_3,
+              7, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("HPMIXL MIXINR Volume", WM8962_HEADPHONE_MIXER_3,
+              6, 1, 1, inmix_tlv),
+
+SOC_SINGLE_TLV("HPMIXR IN4L Volume", WM8962_HEADPHONE_MIXER_4,
+              3, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("HPMIXR IN4R Volume", WM8962_HEADPHONE_MIXER_4,
+              0, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("HPMIXR MIXINL Volume", WM8962_HEADPHONE_MIXER_4,
+              7, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("HPMIXR MIXINR Volume", WM8962_HEADPHONE_MIXER_4,
+              6, 1, 1, inmix_tlv),
+
+SOC_SINGLE_TLV("Speaker Boost Volume", WM8962_CLASS_D_CONTROL_2, 0, 7, 0,
+              classd_tlv),
+};
+
+static const struct snd_kcontrol_new wm8962_spk_mono_controls[] = {
+SOC_SINGLE_TLV("Speaker Volume", WM8962_SPKOUTL_VOLUME, 0, 127, 0, out_tlv),
+SOC_SINGLE_EXT("Speaker Switch", WM8962_CLASS_D_CONTROL_1, 1, 1, 1,
+              snd_soc_get_volsw, wm8962_put_spk_sw),
+SOC_SINGLE("Speaker ZC Switch", WM8962_SPKOUTL_VOLUME, 7, 1, 0),
+
+SOC_SINGLE("Speaker Mixer Switch", WM8962_SPEAKER_MIXER_3, 8, 1, 1),
+SOC_SINGLE_TLV("Speaker Mixer IN4L Volume", WM8962_SPEAKER_MIXER_3,
+              3, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("Speaker Mixer IN4R Volume", WM8962_SPEAKER_MIXER_3,
+              0, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("Speaker Mixer MIXINL Volume", WM8962_SPEAKER_MIXER_3,
+              7, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("Speaker Mixer MIXINR Volume", WM8962_SPEAKER_MIXER_3,
+              6, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("Speaker Mixer DACL Volume", WM8962_SPEAKER_MIXER_5,
+              7, 1, 0, inmix_tlv),
+SOC_SINGLE_TLV("Speaker Mixer DACR Volume", WM8962_SPEAKER_MIXER_5,
+              6, 1, 0, inmix_tlv),
+};
+
+static const struct snd_kcontrol_new wm8962_spk_stereo_controls[] = {
+SOC_DOUBLE_R_TLV("Speaker Volume", WM8962_SPKOUTL_VOLUME,
+                WM8962_SPKOUTR_VOLUME, 0, 127, 0, out_tlv),
+SOC_DOUBLE_EXT("Speaker Switch", WM8962_CLASS_D_CONTROL_1, 1, 0, 1, 1,
+              snd_soc_get_volsw, wm8962_put_spk_sw),
+SOC_DOUBLE_R("Speaker ZC Switch", WM8962_SPKOUTL_VOLUME, WM8962_SPKOUTR_VOLUME,
+            7, 1, 0),
+
+SOC_DOUBLE_R("Speaker Mixer Switch", WM8962_SPEAKER_MIXER_3,
+            WM8962_SPEAKER_MIXER_4, 8, 1, 1),
+
+SOC_SINGLE_TLV("SPKOUTL Mixer IN4L Volume", WM8962_SPEAKER_MIXER_3,
+              3, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("SPKOUTL Mixer IN4R Volume", WM8962_SPEAKER_MIXER_3,
+              0, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("SPKOUTL Mixer MIXINL Volume", WM8962_SPEAKER_MIXER_3,
+              7, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("SPKOUTL Mixer MIXINR Volume", WM8962_SPEAKER_MIXER_3,
+              6, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("SPKOUTL Mixer DACL Volume", WM8962_SPEAKER_MIXER_5,
+              7, 1, 0, inmix_tlv),
+SOC_SINGLE_TLV("SPKOUTL Mixer DACR Volume", WM8962_SPEAKER_MIXER_5,
+              6, 1, 0, inmix_tlv),
+
+SOC_SINGLE_TLV("SPKOUTR Mixer IN4L Volume", WM8962_SPEAKER_MIXER_4,
+              3, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("SPKOUTR Mixer IN4R Volume", WM8962_SPEAKER_MIXER_4,
+              0, 7, 0, bypass_tlv),
+SOC_SINGLE_TLV("SPKOUTR Mixer MIXINL Volume", WM8962_SPEAKER_MIXER_4,
+              7, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("SPKOUTR Mixer MIXINR Volume", WM8962_SPEAKER_MIXER_4,
+              6, 1, 1, inmix_tlv),
+SOC_SINGLE_TLV("SPKOUTR Mixer DACL Volume", WM8962_SPEAKER_MIXER_5,
+              5, 1, 0, inmix_tlv),
+SOC_SINGLE_TLV("SPKOUTR Mixer DACR Volume", WM8962_SPEAKER_MIXER_5,
+              4, 1, 0, inmix_tlv),
+};
+
+static int sysclk_event(struct snd_soc_dapm_widget *w,
+                       struct snd_kcontrol *kcontrol, int event)
+{
+       struct snd_soc_codec *codec = w->codec;
+       int src;
+       int fll;
+
+       src = snd_soc_read(codec, WM8962_CLOCKING2) & WM8962_SYSCLK_SRC_MASK;
+
+       switch (src) {
+       case 0:      /* MCLK */
+               fll = 0;
+               break;
+       case 0x200:  /* FLL */
+               fll = 1;
+               break;
+       default:
+               dev_err(codec->dev, "Unknown SYSCLK source %x\n", src);
+               return -EINVAL;
+       }
+
+       switch (event) {
+       case SND_SOC_DAPM_PRE_PMU:
+               if (fll)
+                       snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
+                                           WM8962_FLL_ENA, WM8962_FLL_ENA);
+               break;
+
+       case SND_SOC_DAPM_POST_PMD:
+               if (fll)
+                       snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
+                                           WM8962_FLL_ENA, 0);
+               break;
+
+       default:
+               BUG();
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int cp_event(struct snd_soc_dapm_widget *w,
+                   struct snd_kcontrol *kcontrol, int event)
+{
+       switch (event) {
+       case SND_SOC_DAPM_POST_PMU:
+               msleep(5);
+               break;
+
+       default:
+               BUG();
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static int hp_event(struct snd_soc_dapm_widget *w,
+                   struct snd_kcontrol *kcontrol, int event)
+{
+       struct snd_soc_codec *codec = w->codec;
+       int timeout;
+       int reg;
+       int expected = (WM8962_DCS_STARTUP_DONE_HP1L |
+                       WM8962_DCS_STARTUP_DONE_HP1R);
+
+       switch (event) {
+       case SND_SOC_DAPM_POST_PMU:
+               snd_soc_update_bits(codec, WM8962_ANALOGUE_HP_0,
+                                   WM8962_HP1L_ENA | WM8962_HP1R_ENA,
+                                   WM8962_HP1L_ENA | WM8962_HP1R_ENA);
+               udelay(20);
+
+               snd_soc_update_bits(codec, WM8962_ANALOGUE_HP_0,
+                                   WM8962_HP1L_ENA_DLY | WM8962_HP1R_ENA_DLY,
+                                   WM8962_HP1L_ENA_DLY | WM8962_HP1R_ENA_DLY);
+
+               /* Start the DC servo */
+               snd_soc_update_bits(codec, WM8962_DC_SERVO_1,
+                                   WM8962_HP1L_DCS_ENA | WM8962_HP1R_DCS_ENA |
+                                   WM8962_HP1L_DCS_STARTUP |
+                                   WM8962_HP1R_DCS_STARTUP,
+                                   WM8962_HP1L_DCS_ENA | WM8962_HP1R_DCS_ENA |
+                                   WM8962_HP1L_DCS_STARTUP |
+                                   WM8962_HP1R_DCS_STARTUP);
+
+               /* Wait for it to complete, should be well under 100ms */
+               timeout = 0;
+               do {
+                       msleep(1);
+                       reg = snd_soc_read(codec, WM8962_DC_SERVO_6);
+                       if (reg < 0) {
+                               dev_err(codec->dev,
+                                       "Failed to read DCS status: %d\n",
+                                       reg);
+                               continue;
+                       }
+                       dev_dbg(codec->dev, "DCS status: %x\n", reg);
+               } while (++timeout < 200 && (reg & expected) != expected);
+
+               if ((reg & expected) != expected)
+                       dev_err(codec->dev, "DC servo timed out\n");
+               else
+                       dev_dbg(codec->dev, "DC servo complete after %dms\n",
+                               timeout);
+
+               snd_soc_update_bits(codec, WM8962_ANALOGUE_HP_0,
+                                   WM8962_HP1L_ENA_OUTP |
+                                   WM8962_HP1R_ENA_OUTP,
+                                   WM8962_HP1L_ENA_OUTP |
+                                   WM8962_HP1R_ENA_OUTP);
+               udelay(20);
+
+               snd_soc_update_bits(codec, WM8962_ANALOGUE_HP_0,
+                                   WM8962_HP1L_RMV_SHORT |
+                                   WM8962_HP1R_RMV_SHORT,
+                                   WM8962_HP1L_RMV_SHORT |
+                                   WM8962_HP1R_RMV_SHORT);
+               break;
+
+       case SND_SOC_DAPM_PRE_PMD:
+               snd_soc_update_bits(codec, WM8962_ANALOGUE_HP_0,
+                                   WM8962_HP1L_RMV_SHORT |
+                                   WM8962_HP1R_RMV_SHORT, 0);
+
+               udelay(20);
+
+               snd_soc_update_bits(codec, WM8962_DC_SERVO_1,
+                                   WM8962_HP1L_DCS_ENA | WM8962_HP1R_DCS_ENA |
+                                   WM8962_HP1L_DCS_STARTUP |
+                                   WM8962_HP1R_DCS_STARTUP,
+                                   0);
+
+               snd_soc_update_bits(codec, WM8962_ANALOGUE_HP_0,
+                                   WM8962_HP1L_ENA | WM8962_HP1R_ENA |
+                                   WM8962_HP1L_ENA_DLY | WM8962_HP1R_ENA_DLY |
+                                   WM8962_HP1L_ENA_OUTP |
+                                   WM8962_HP1R_ENA_OUTP, 0);
+                                   
+               break;
+
+       default:
+               BUG();
+               return -EINVAL;
+       
+       }
+
+       return 0;
+}
+
+/* VU bits for the output PGAs only take effect while the PGA is powered */
+static int out_pga_event(struct snd_soc_dapm_widget *w,
+                        struct snd_kcontrol *kcontrol, int event)
+{
+       struct snd_soc_codec *codec = w->codec;
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       u16 *reg_cache = wm8962->reg_cache;
+       int reg;
+
+       switch (w->shift) {
+       case WM8962_HPOUTR_PGA_ENA_SHIFT:
+               reg = WM8962_HPOUTR_VOLUME;
+               break;
+       case WM8962_HPOUTL_PGA_ENA_SHIFT:
+               reg = WM8962_HPOUTL_VOLUME;
+               break;
+       case WM8962_SPKOUTR_PGA_ENA_SHIFT:
+               reg = WM8962_SPKOUTR_VOLUME;
+               break;
+       case WM8962_SPKOUTL_PGA_ENA_SHIFT:
+               reg = WM8962_SPKOUTL_VOLUME;
+               break;
+       default:
+               BUG();
+               return -EINVAL;
+       }
+
+       switch (event) {
+       case SND_SOC_DAPM_POST_PMU:
+               return snd_soc_write(codec, reg, reg_cache[reg]);
+       default:
+               BUG();
+               return -EINVAL;
+       }
+}
+
+static const char *st_text[] = { "None", "Right", "Left" };
+
+static const struct soc_enum str_enum =
+       SOC_ENUM_SINGLE(WM8962_DAC_DSP_MIXING_1, 2, 3, st_text);
+
+static const struct snd_kcontrol_new str_mux =
+       SOC_DAPM_ENUM("Right Sidetone", str_enum);
+
+static const struct soc_enum stl_enum =
+       SOC_ENUM_SINGLE(WM8962_DAC_DSP_MIXING_2, 2, 3, st_text);
+
+static const struct snd_kcontrol_new stl_mux =
+       SOC_DAPM_ENUM("Left Sidetone", stl_enum);
+
+static const char *outmux_text[] = { "DAC", "Mixer" };
+
+static const struct soc_enum spkoutr_enum =
+       SOC_ENUM_SINGLE(WM8962_SPEAKER_MIXER_2, 7, 2, outmux_text);
+
+static const struct snd_kcontrol_new spkoutr_mux =
+       SOC_DAPM_ENUM("SPKOUTR Mux", spkoutr_enum);
+
+static const struct soc_enum spkoutl_enum =
+       SOC_ENUM_SINGLE(WM8962_SPEAKER_MIXER_1, 7, 2, outmux_text);
+
+static const struct snd_kcontrol_new spkoutl_mux =
+       SOC_DAPM_ENUM("SPKOUTL Mux", spkoutl_enum);
+
+static const struct soc_enum hpoutr_enum =
+       SOC_ENUM_SINGLE(WM8962_HEADPHONE_MIXER_2, 7, 2, outmux_text);
+
+static const struct snd_kcontrol_new hpoutr_mux =
+       SOC_DAPM_ENUM("HPOUTR Mux", hpoutr_enum);
+
+static const struct soc_enum hpoutl_enum =
+       SOC_ENUM_SINGLE(WM8962_HEADPHONE_MIXER_1, 7, 2, outmux_text);
+
+static const struct snd_kcontrol_new hpoutl_mux =
+       SOC_DAPM_ENUM("HPOUTL Mux", hpoutl_enum);
+
+static const struct snd_kcontrol_new inpgal[] = {
+SOC_DAPM_SINGLE("IN1L Switch", WM8962_LEFT_INPUT_PGA_CONTROL, 3, 1, 0),
+SOC_DAPM_SINGLE("IN2L Switch", WM8962_LEFT_INPUT_PGA_CONTROL, 2, 1, 0),
+SOC_DAPM_SINGLE("IN3L Switch", WM8962_LEFT_INPUT_PGA_CONTROL, 1, 1, 0),
+SOC_DAPM_SINGLE("IN4L Switch", WM8962_LEFT_INPUT_PGA_CONTROL, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new inpgar[] = {
+SOC_DAPM_SINGLE("IN1R Switch", WM8962_RIGHT_INPUT_PGA_CONTROL, 3, 1, 0),
+SOC_DAPM_SINGLE("IN2R Switch", WM8962_RIGHT_INPUT_PGA_CONTROL, 2, 1, 0),
+SOC_DAPM_SINGLE("IN3R Switch", WM8962_RIGHT_INPUT_PGA_CONTROL, 1, 1, 0),
+SOC_DAPM_SINGLE("IN4R Switch", WM8962_RIGHT_INPUT_PGA_CONTROL, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new mixinl[] = {
+SOC_DAPM_SINGLE("IN2L Switch", WM8962_INPUT_MIXER_CONTROL_2, 5, 1, 0),
+SOC_DAPM_SINGLE("IN3L Switch", WM8962_INPUT_MIXER_CONTROL_2, 4, 1, 0),
+SOC_DAPM_SINGLE("PGA Switch", WM8962_INPUT_MIXER_CONTROL_2, 3, 1, 0),
+};
+
+static const struct snd_kcontrol_new mixinr[] = {
+SOC_DAPM_SINGLE("IN2R Switch", WM8962_INPUT_MIXER_CONTROL_2, 2, 1, 0),
+SOC_DAPM_SINGLE("IN3R Switch", WM8962_INPUT_MIXER_CONTROL_2, 1, 1, 0),
+SOC_DAPM_SINGLE("PGA Switch", WM8962_INPUT_MIXER_CONTROL_2, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new hpmixl[] = {
+SOC_DAPM_SINGLE("DACL Switch", WM8962_HEADPHONE_MIXER_1, 5, 1, 0),
+SOC_DAPM_SINGLE("DACR Switch", WM8962_HEADPHONE_MIXER_1, 4, 1, 0),
+SOC_DAPM_SINGLE("MIXINL Switch", WM8962_HEADPHONE_MIXER_1, 3, 1, 0),
+SOC_DAPM_SINGLE("MIXINR Switch", WM8962_HEADPHONE_MIXER_1, 2, 1, 0),
+SOC_DAPM_SINGLE("IN4L Switch", WM8962_HEADPHONE_MIXER_1, 1, 1, 0),
+SOC_DAPM_SINGLE("IN4R Switch", WM8962_HEADPHONE_MIXER_1, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new hpmixr[] = {
+SOC_DAPM_SINGLE("DACL Switch", WM8962_HEADPHONE_MIXER_2, 5, 1, 0),
+SOC_DAPM_SINGLE("DACR Switch", WM8962_HEADPHONE_MIXER_2, 4, 1, 0),
+SOC_DAPM_SINGLE("MIXINL Switch", WM8962_HEADPHONE_MIXER_2, 3, 1, 0),
+SOC_DAPM_SINGLE("MIXINR Switch", WM8962_HEADPHONE_MIXER_2, 2, 1, 0),
+SOC_DAPM_SINGLE("IN4L Switch", WM8962_HEADPHONE_MIXER_2, 1, 1, 0),
+SOC_DAPM_SINGLE("IN4R Switch", WM8962_HEADPHONE_MIXER_2, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new spkmixl[] = {
+SOC_DAPM_SINGLE("DACL Switch", WM8962_SPEAKER_MIXER_1, 5, 1, 0),
+SOC_DAPM_SINGLE("DACR Switch", WM8962_SPEAKER_MIXER_1, 4, 1, 0),
+SOC_DAPM_SINGLE("MIXINL Switch", WM8962_SPEAKER_MIXER_1, 3, 1, 0),
+SOC_DAPM_SINGLE("MIXINR Switch", WM8962_SPEAKER_MIXER_1, 2, 1, 0),
+SOC_DAPM_SINGLE("IN4L Switch", WM8962_SPEAKER_MIXER_1, 1, 1, 0),
+SOC_DAPM_SINGLE("IN4R Switch", WM8962_SPEAKER_MIXER_1, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new spkmixr[] = {
+SOC_DAPM_SINGLE("DACL Switch", WM8962_SPEAKER_MIXER_2, 5, 1, 0),
+SOC_DAPM_SINGLE("DACR Switch", WM8962_SPEAKER_MIXER_2, 4, 1, 0),
+SOC_DAPM_SINGLE("MIXINL Switch", WM8962_SPEAKER_MIXER_2, 3, 1, 0),
+SOC_DAPM_SINGLE("MIXINR Switch", WM8962_SPEAKER_MIXER_2, 2, 1, 0),
+SOC_DAPM_SINGLE("IN4L Switch", WM8962_SPEAKER_MIXER_2, 1, 1, 0),
+SOC_DAPM_SINGLE("IN4R Switch", WM8962_SPEAKER_MIXER_2, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget wm8962_dapm_widgets[] = {
+SND_SOC_DAPM_INPUT("IN1L"),
+SND_SOC_DAPM_INPUT("IN1R"),
+SND_SOC_DAPM_INPUT("IN2L"),
+SND_SOC_DAPM_INPUT("IN2R"),
+SND_SOC_DAPM_INPUT("IN3L"),
+SND_SOC_DAPM_INPUT("IN3R"),
+SND_SOC_DAPM_INPUT("IN4L"),
+SND_SOC_DAPM_INPUT("IN4R"),
+SND_SOC_DAPM_INPUT("Beep"),
+
+SND_SOC_DAPM_SUPPLY("Class G", WM8962_CHARGE_PUMP_B, 0, 1, NULL, 0),
+SND_SOC_DAPM_SUPPLY("SYSCLK", WM8962_CLOCKING2, 5, 0, sysclk_event,
+                   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
+SND_SOC_DAPM_SUPPLY("Charge Pump", WM8962_CHARGE_PUMP_1, 0, 0, cp_event,
+                   SND_SOC_DAPM_POST_PMU),
+SND_SOC_DAPM_SUPPLY("TOCLK", WM8962_ADDITIONAL_CONTROL_1, 0, 0, NULL, 0),
+
+SND_SOC_DAPM_MIXER("INPGAL", WM8962_LEFT_INPUT_PGA_CONTROL, 4, 0,
+                  inpgal, ARRAY_SIZE(inpgal)),
+SND_SOC_DAPM_MIXER("INPGAR", WM8962_RIGHT_INPUT_PGA_CONTROL, 4, 0,
+                  inpgar, ARRAY_SIZE(inpgar)),
+SND_SOC_DAPM_MIXER("MIXINL", WM8962_PWR_MGMT_1, 5, 0,
+                  mixinl, ARRAY_SIZE(mixinl)),
+SND_SOC_DAPM_MIXER("MIXINR", WM8962_PWR_MGMT_1, 4, 0,
+                  mixinr, ARRAY_SIZE(mixinr)),
+
+SND_SOC_DAPM_ADC("ADCL", "Capture", WM8962_PWR_MGMT_1, 3, 0),
+SND_SOC_DAPM_ADC("ADCR", "Capture", WM8962_PWR_MGMT_1, 2, 0),
+
+SND_SOC_DAPM_MUX("STL", SND_SOC_NOPM, 0, 0, &stl_mux),
+SND_SOC_DAPM_MUX("STR", SND_SOC_NOPM, 0, 0, &str_mux),
+
+SND_SOC_DAPM_DAC("DACL", "Playback", WM8962_PWR_MGMT_2, 8, 0),
+SND_SOC_DAPM_DAC("DACR", "Playback", WM8962_PWR_MGMT_2, 7, 0),
+
+SND_SOC_DAPM_PGA("Left Bypass", SND_SOC_NOPM, 0, 0, NULL, 0),
+SND_SOC_DAPM_PGA("Right Bypass", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+SND_SOC_DAPM_MIXER("HPMIXL", WM8962_MIXER_ENABLES, 3, 0,
+                  hpmixl, ARRAY_SIZE(hpmixl)),
+SND_SOC_DAPM_MIXER("HPMIXR", WM8962_MIXER_ENABLES, 2, 0,
+                  hpmixr, ARRAY_SIZE(hpmixr)),
+
+SND_SOC_DAPM_MUX_E("HPOUTL PGA", WM8962_PWR_MGMT_2, 6, 0, &hpoutl_mux,
+                  out_pga_event, SND_SOC_DAPM_POST_PMU),
+SND_SOC_DAPM_MUX_E("HPOUTR PGA", WM8962_PWR_MGMT_2, 5, 0, &hpoutr_mux,
+                  out_pga_event, SND_SOC_DAPM_POST_PMU),
+
+SND_SOC_DAPM_PGA_E("HPOUT", SND_SOC_NOPM, 0, 0, NULL, 0, hp_event,
+                  SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
+
+SND_SOC_DAPM_OUTPUT("HPOUTL"),
+SND_SOC_DAPM_OUTPUT("HPOUTR"),
+};
+
+static const struct snd_soc_dapm_widget wm8962_dapm_spk_mono_widgets[] = {
+SND_SOC_DAPM_MIXER("Speaker Mixer", WM8962_MIXER_ENABLES, 1, 0,
+                  spkmixl, ARRAY_SIZE(spkmixl)),
+SND_SOC_DAPM_MUX_E("Speaker PGA", WM8962_PWR_MGMT_2, 4, 0, &spkoutl_mux,
+                  out_pga_event, SND_SOC_DAPM_POST_PMU),
+SND_SOC_DAPM_PGA("Speaker Output", WM8962_CLASS_D_CONTROL_1, 7, 0, NULL, 0),
+SND_SOC_DAPM_OUTPUT("SPKOUT"),
+};
+
+static const struct snd_soc_dapm_widget wm8962_dapm_spk_stereo_widgets[] = {
+SND_SOC_DAPM_MIXER("SPKOUTL Mixer", WM8962_MIXER_ENABLES, 1, 0,
+                  spkmixl, ARRAY_SIZE(spkmixl)),
+SND_SOC_DAPM_MIXER("SPKOUTR Mixer", WM8962_MIXER_ENABLES, 0, 0,
+                  spkmixr, ARRAY_SIZE(spkmixr)),
+
+SND_SOC_DAPM_MUX_E("SPKOUTL PGA", WM8962_PWR_MGMT_2, 4, 0, &spkoutl_mux,
+                  out_pga_event, SND_SOC_DAPM_POST_PMU),
+SND_SOC_DAPM_MUX_E("SPKOUTR PGA", WM8962_PWR_MGMT_2, 3, 0, &spkoutr_mux,
+                  out_pga_event, SND_SOC_DAPM_POST_PMU),
+
+SND_SOC_DAPM_PGA("SPKOUTR Output", WM8962_CLASS_D_CONTROL_1, 7, 0, NULL, 0),
+SND_SOC_DAPM_PGA("SPKOUTL Output", WM8962_CLASS_D_CONTROL_1, 6, 0, NULL, 0),
+
+SND_SOC_DAPM_OUTPUT("SPKOUTL"),
+SND_SOC_DAPM_OUTPUT("SPKOUTR"),
+};
+
+static const struct snd_soc_dapm_route wm8962_intercon[] = {
+       { "INPGAL", "IN1L Switch", "IN1L" },
+       { "INPGAL", "IN2L Switch", "IN2L" },
+       { "INPGAL", "IN3L Switch", "IN3L" },
+       { "INPGAL", "IN4L Switch", "IN4L" },
+
+       { "INPGAR", "IN1R Switch", "IN1R" },
+       { "INPGAR", "IN2R Switch", "IN2R" },
+       { "INPGAR", "IN3R Switch", "IN3R" },
+       { "INPGAR", "IN4R Switch", "IN4R" },
+
+       { "MIXINL", "IN2L Switch", "IN2L" },
+       { "MIXINL", "IN3L Switch", "IN3L" },
+       { "MIXINL", "PGA Switch", "INPGAL" },
+
+       { "MIXINR", "IN2R Switch", "IN2R" },
+       { "MIXINR", "IN3R Switch", "IN3R" },
+       { "MIXINR", "PGA Switch", "INPGAR" },
+
+       { "ADCL", NULL, "SYSCLK" },
+       { "ADCL", NULL, "TOCLK" },
+       { "ADCL", NULL, "MIXINL" },
+
+       { "ADCR", NULL, "SYSCLK" },
+       { "ADCR", NULL, "TOCLK" },
+       { "ADCR", NULL, "MIXINR" },
+
+       { "STL", "Left", "ADCL" },
+       { "STL", "Right", "ADCR" },
+
+       { "STR", "Left", "ADCL" },
+       { "STR", "Right", "ADCR" },
+
+       { "DACL", NULL, "SYSCLK" },
+       { "DACL", NULL, "TOCLK" },
+       { "DACL", NULL, "Beep" },
+       { "DACL", NULL, "STL" },
+
+       { "DACR", NULL, "SYSCLK" },
+       { "DACR", NULL, "TOCLK" },
+       { "DACR", NULL, "Beep" },
+       { "DACR", NULL, "STR" },
+
+       { "HPMIXL", "IN4L Switch", "IN4L" },
+       { "HPMIXL", "IN4R Switch", "IN4R" },
+       { "HPMIXL", "DACL Switch", "DACL" },
+       { "HPMIXL", "DACR Switch", "DACR" },
+       { "HPMIXL", "MIXINL Switch", "MIXINL" },
+       { "HPMIXL", "MIXINR Switch", "MIXINR" },
+
+       { "HPMIXR", "IN4L Switch", "IN4L" },
+       { "HPMIXR", "IN4R Switch", "IN4R" },
+       { "HPMIXR", "DACL Switch", "DACL" },
+       { "HPMIXR", "DACR Switch", "DACR" },
+       { "HPMIXR", "MIXINL Switch", "MIXINL" },
+       { "HPMIXR", "MIXINR Switch", "MIXINR" },
+
+       { "Left Bypass", NULL, "HPMIXL" },
+       { "Left Bypass", NULL, "Class G" },
+
+       { "Right Bypass", NULL, "HPMIXR" },
+       { "Right Bypass", NULL, "Class G" },
+
+       { "HPOUTL PGA", "Mixer", "Left Bypass" },
+       { "HPOUTL PGA", "DAC", "DACL" },
+
+       { "HPOUTR PGA", "Mixer", "Right Bypass" },
+       { "HPOUTR PGA", "DAC", "DACR" },
+
+       { "HPOUT", NULL, "HPOUTL PGA" },
+       { "HPOUT", NULL, "HPOUTR PGA" },
+       { "HPOUT", NULL, "Charge Pump" },
+       { "HPOUT", NULL, "SYSCLK" },
+       { "HPOUT", NULL, "TOCLK" },
+
+       { "HPOUTL", NULL, "HPOUT" },
+       { "HPOUTR", NULL, "HPOUT" },
+};
+
+static const struct snd_soc_dapm_route wm8962_spk_mono_intercon[] = {
+       { "Speaker Mixer", "IN4L Switch", "IN4L" },
+       { "Speaker Mixer", "IN4R Switch", "IN4R" },
+       { "Speaker Mixer", "DACL Switch", "DACL" },
+       { "Speaker Mixer", "DACR Switch", "DACR" },
+       { "Speaker Mixer", "MIXINL Switch", "MIXINL" },
+       { "Speaker Mixer", "MIXINR Switch", "MIXINR" },
+
+       { "Speaker PGA", "Mixer", "Speaker Mixer" },
+       { "Speaker PGA", "DAC", "DACL" },
+
+       { "Speaker Output", NULL, "Speaker PGA" },
+       { "Speaker Output", NULL, "SYSCLK" },
+       { "Speaker Output", NULL, "TOCLK" },
+
+       { "SPKOUT", NULL, "Speaker Output" },
+};
+
+static const struct snd_soc_dapm_route wm8962_spk_stereo_intercon[] = {
+       { "SPKOUTL Mixer", "IN4L Switch", "IN4L" },
+       { "SPKOUTL Mixer", "IN4R Switch", "IN4R" },
+       { "SPKOUTL Mixer", "DACL Switch", "DACL" },
+       { "SPKOUTL Mixer", "DACR Switch", "DACR" },
+       { "SPKOUTL Mixer", "MIXINL Switch", "MIXINL" },
+       { "SPKOUTL Mixer", "MIXINR Switch", "MIXINR" },
+
+       { "SPKOUTR Mixer", "IN4L Switch", "IN4L" },
+       { "SPKOUTR Mixer", "IN4R Switch", "IN4R" },
+       { "SPKOUTR Mixer", "DACL Switch", "DACL" },
+       { "SPKOUTR Mixer", "DACR Switch", "DACR" },
+       { "SPKOUTR Mixer", "MIXINL Switch", "MIXINL" },
+       { "SPKOUTR Mixer", "MIXINR Switch", "MIXINR" },
+
+       { "SPKOUTL PGA", "Mixer", "SPKOUTL Mixer" },
+       { "SPKOUTL PGA", "DAC", "DACL" },
+
+       { "SPKOUTR PGA", "Mixer", "SPKOUTR Mixer" },
+       { "SPKOUTR PGA", "DAC", "DACR" },
+
+       { "SPKOUTL Output", NULL, "SPKOUTL PGA" },
+       { "SPKOUTL Output", NULL, "SYSCLK" },
+       { "SPKOUTL Output", NULL, "TOCLK" },
+
+       { "SPKOUTR Output", NULL, "SPKOUTR PGA" },
+       { "SPKOUTR Output", NULL, "SYSCLK" },
+       { "SPKOUTR Output", NULL, "TOCLK" },
+
+       { "SPKOUTL", NULL, "SPKOUTL Output" },
+       { "SPKOUTR", NULL, "SPKOUTR Output" },
+};
+
+static int wm8962_add_widgets(struct snd_soc_codec *codec)
+{
+       struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
+
+       snd_soc_add_controls(codec, wm8962_snd_controls,
+                            ARRAY_SIZE(wm8962_snd_controls));
+       if (pdata && pdata->spk_mono)
+               snd_soc_add_controls(codec, wm8962_spk_mono_controls,
+                                    ARRAY_SIZE(wm8962_spk_mono_controls));
+       else
+               snd_soc_add_controls(codec, wm8962_spk_stereo_controls,
+                                    ARRAY_SIZE(wm8962_spk_stereo_controls));
+
+
+       snd_soc_dapm_new_controls(codec, wm8962_dapm_widgets,
+                                 ARRAY_SIZE(wm8962_dapm_widgets));
+       if (pdata && pdata->spk_mono)
+               snd_soc_dapm_new_controls(codec, wm8962_dapm_spk_mono_widgets,
+                                         ARRAY_SIZE(wm8962_dapm_spk_mono_widgets));
+       else
+               snd_soc_dapm_new_controls(codec, wm8962_dapm_spk_stereo_widgets,
+                                         ARRAY_SIZE(wm8962_dapm_spk_stereo_widgets));
+
+       snd_soc_dapm_add_routes(codec, wm8962_intercon,
+                               ARRAY_SIZE(wm8962_intercon));
+       if (pdata && pdata->spk_mono)
+               snd_soc_dapm_add_routes(codec, wm8962_spk_mono_intercon,
+                                       ARRAY_SIZE(wm8962_spk_mono_intercon));
+       else
+               snd_soc_dapm_add_routes(codec, wm8962_spk_stereo_intercon,
+                                       ARRAY_SIZE(wm8962_spk_stereo_intercon));
+
+
+       snd_soc_dapm_disable_pin(codec, "Beep");
+
+       return 0;
+}
+
+static void wm8962_sync_cache(struct snd_soc_codec *codec)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int i;
+
+       if (!codec->cache_sync)
+               return;
+
+       dev_dbg(codec->dev, "Syncing cache\n");
+
+       codec->cache_only = 0;
+
+       /* Sync back cached values if they're different from the
+        * hardware default.
+        */
+       for (i = 1; i < ARRAY_SIZE(wm8962->reg_cache); i++) {
+               if (i == WM8962_SOFTWARE_RESET)
+                       continue;
+               if (wm8962->reg_cache[i] == wm8962_reg[i])
+                       continue;
+
+               snd_soc_write(codec, i, wm8962->reg_cache[i]);
+       }
+
+       codec->cache_sync = 0;
+}
+
+/* -1 for reserved values */
+static const int bclk_divs[] = {
+       1, -1, 2, 3, 4, -1, 6, 8, -1, 12, 16, 24, -1, 32, 32, 32
+};
+
+static void wm8962_configure_bclk(struct snd_soc_codec *codec)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int dspclk, i;
+       int clocking2 = 0;
+       int aif2 = 0;
+
+       /* If the CODEC is powered on we can configure BCLK */
+       if (codec->bias_level != SND_SOC_BIAS_OFF) {
+               dev_dbg(codec->dev, "Bias is off, can't configure BCLK\n");
+               return;
+       }
+
+       if (!wm8962->bclk) {
+               dev_dbg(codec->dev, "No BCLK rate configured\n");
+               return;
+       }
+
+       dspclk = snd_soc_read(codec, WM8962_CLOCKING1);
+       if (dspclk < 0) {
+               dev_err(codec->dev, "Failed to read DSPCLK: %d\n", dspclk);
+               return;
+       }
+
+       dspclk = (dspclk & WM8962_DSPCLK_DIV_MASK) >> WM8962_DSPCLK_DIV_SHIFT;
+       switch (dspclk) {
+       case 0:
+               dspclk = wm8962->sysclk_rate;
+               break;
+       case 1:
+               dspclk = wm8962->sysclk_rate / 2;
+               break;
+       case 2:
+               dspclk = wm8962->sysclk_rate / 4;
+               break;
+       default:
+               dev_warn(codec->dev, "Unknown DSPCLK divisor read back\n");
+               dspclk = wm8962->sysclk;
+       }
+
+       dev_dbg(codec->dev, "DSPCLK is %dHz, BCLK %d\n", dspclk, wm8962->bclk);
+
+       /* We're expecting an exact match */
+       for (i = 0; i < ARRAY_SIZE(bclk_divs); i++) {
+               if (bclk_divs[i] < 0)
+                       continue;
+
+               if (dspclk / bclk_divs[i] == wm8962->bclk) {
+                       dev_dbg(codec->dev, "Selected BCLK_DIV %d for %dHz\n",
+                               bclk_divs[i], wm8962->bclk);
+                       clocking2 |= i;
+                       break;
+               }
+       }
+       if (i == ARRAY_SIZE(bclk_divs)) {
+               dev_err(codec->dev, "Unsupported BCLK ratio %d\n",
+                       dspclk / wm8962->bclk);
+               return;
+       }
+
+       aif2 |= wm8962->bclk / wm8962->lrclk;
+       dev_dbg(codec->dev, "Selected LRCLK divisor %d for %dHz\n",
+               wm8962->bclk / wm8962->lrclk, wm8962->lrclk);
+
+       snd_soc_update_bits(codec, WM8962_CLOCKING2,
+                           WM8962_BCLK_DIV_MASK, clocking2);
+       snd_soc_update_bits(codec, WM8962_AUDIO_INTERFACE_2,
+                           WM8962_AIF_RATE_MASK, aif2);
+}
+
+static int wm8962_set_bias_level(struct snd_soc_codec *codec,
+                                enum snd_soc_bias_level level)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int ret;
+
+       if (level == codec->bias_level)
+               return 0;
+
+       switch (level) {
+       case SND_SOC_BIAS_ON:
+               break;
+
+       case SND_SOC_BIAS_PREPARE:
+               /* VMID 2*50k */
+               snd_soc_update_bits(codec, WM8962_PWR_MGMT_1,
+                                   WM8962_VMID_SEL_MASK, 0x80);
+               break;
+
+       case SND_SOC_BIAS_STANDBY:
+               if (codec->bias_level == SND_SOC_BIAS_OFF) {
+                       ret = regulator_bulk_enable(ARRAY_SIZE(wm8962->supplies),
+                                                   wm8962->supplies);
+                       if (ret != 0) {
+                               dev_err(codec->dev,
+                                       "Failed to enable supplies: %d\n",
+                                       ret);
+                               return ret;
+                       }
+
+                       wm8962_sync_cache(codec);
+
+                       snd_soc_update_bits(codec, WM8962_ANTI_POP,
+                                           WM8962_STARTUP_BIAS_ENA |
+                                           WM8962_VMID_BUF_ENA,
+                                           WM8962_STARTUP_BIAS_ENA |
+                                           WM8962_VMID_BUF_ENA);
+
+                       /* Bias enable at 2*50k for ramp */
+                       snd_soc_update_bits(codec, WM8962_PWR_MGMT_1,
+                                           WM8962_VMID_SEL_MASK |
+                                           WM8962_BIAS_ENA,
+                                           WM8962_BIAS_ENA | 0x180);
+
+                       msleep(5);
+
+                       snd_soc_update_bits(codec, WM8962_CLOCKING2,
+                                           WM8962_CLKREG_OVD,
+                                           WM8962_CLKREG_OVD);
+
+                       wm8962_configure_bclk(codec);
+               }
+
+               /* VMID 2*250k */
+               snd_soc_update_bits(codec, WM8962_PWR_MGMT_1,
+                                   WM8962_VMID_SEL_MASK, 0x100);
+               break;
+
+       case SND_SOC_BIAS_OFF:
+               snd_soc_update_bits(codec, WM8962_PWR_MGMT_1,
+                                   WM8962_VMID_SEL_MASK | WM8962_BIAS_ENA, 0);
+
+               snd_soc_update_bits(codec, WM8962_ANTI_POP,
+                                   WM8962_STARTUP_BIAS_ENA |
+                                   WM8962_VMID_BUF_ENA, 0);
+
+               regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies),
+                                      wm8962->supplies);
+               break;
+       }
+       codec->bias_level = level;
+       return 0;
+}
+
+static const struct {
+       int rate;
+       int reg;
+} sr_vals[] = {
+       { 48000, 0 },
+       { 44100, 0 },
+       { 32000, 1 },
+       { 22050, 2 },
+       { 24000, 2 },
+       { 16000, 3 },
+       { 11025, 4 },
+       { 12000, 4 },
+       { 8000,  5 },
+       { 88200, 6 },
+       { 96000, 6 },
+};
+
+static const int sysclk_rates[] = {
+       64, 128, 192, 256, 384, 512, 768, 1024, 1408, 1536,
+};
+
+static int wm8962_hw_params(struct snd_pcm_substream *substream,
+                           struct snd_pcm_hw_params *params,
+                           struct snd_soc_dai *dai)
+{
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_codec *codec = rtd->codec;
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int rate = params_rate(params);
+       int i;
+       int aif0 = 0;
+       int adctl3 = 0;
+       int clocking4 = 0;
+
+       wm8962->bclk = snd_soc_params_to_bclk(params);
+       wm8962->lrclk = params_rate(params);
+
+       for (i = 0; i < ARRAY_SIZE(sr_vals); i++) {
+               if (sr_vals[i].rate == rate) {
+                       adctl3 |= sr_vals[i].reg;
+                       break;
+               }
+       }
+       if (i == ARRAY_SIZE(sr_vals)) {
+               dev_err(codec->dev, "Unsupported rate %dHz\n", rate);
+               return -EINVAL;
+       }
+
+       if (rate % 8000 == 0)
+               adctl3 |= WM8962_SAMPLE_RATE_INT_MODE;
+
+       for (i = 0; i < ARRAY_SIZE(sysclk_rates); i++) {
+               if (sysclk_rates[i] == wm8962->sysclk_rate / rate) {
+                       clocking4 |= i << WM8962_SYSCLK_RATE_SHIFT;
+                       break;
+               }
+       }
+       if (i == ARRAY_SIZE(sysclk_rates)) {
+               dev_err(codec->dev, "Unsupported sysclk ratio %d\n",
+                       wm8962->sysclk_rate / rate);
+               return -EINVAL;
+       }
+
+       switch (params_format(params)) {
+       case SNDRV_PCM_FORMAT_S16_LE:
+               break;
+       case SNDRV_PCM_FORMAT_S20_3LE:
+               aif0 |= 0x40;
+               break;
+       case SNDRV_PCM_FORMAT_S24_LE:
+               aif0 |= 0x80;
+               break;
+       case SNDRV_PCM_FORMAT_S32_LE:
+               aif0 |= 0xc0;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       snd_soc_update_bits(codec, WM8962_AUDIO_INTERFACE_0,
+                           WM8962_WL_MASK, aif0);
+       snd_soc_update_bits(codec, WM8962_ADDITIONAL_CONTROL_3,
+                           WM8962_SAMPLE_RATE_INT_MODE |
+                           WM8962_SAMPLE_RATE_MASK, adctl3);
+       snd_soc_update_bits(codec, WM8962_CLOCKING_4,
+                           WM8962_SYSCLK_RATE_MASK, clocking4);
+
+       wm8962_configure_bclk(codec);
+
+       return 0;
+}
+
+static int wm8962_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
+                                unsigned int freq, int dir)
+{
+       struct snd_soc_codec *codec = dai->codec;
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int src;
+
+       switch (clk_id) {
+       case WM8962_SYSCLK_MCLK:
+               wm8962->sysclk = WM8962_SYSCLK_MCLK;
+               src = 0;
+               break;
+       case WM8962_SYSCLK_FLL:
+               wm8962->sysclk = WM8962_SYSCLK_FLL;
+               src = 1 << WM8962_SYSCLK_SRC_SHIFT;
+               WARN_ON(freq != wm8962->fll_fout);
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       snd_soc_update_bits(codec, WM8962_CLOCKING2, WM8962_SYSCLK_SRC_MASK,
+                           src);
+
+       wm8962->sysclk_rate = freq;
+
+       return 0;
+}
+
+static int wm8962_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+       struct snd_soc_codec *codec = dai->codec;
+       int aif0 = 0;
+
+       switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+       case SND_SOC_DAIFMT_DSP_A:
+               aif0 |= WM8962_LRCLK_INV;
+       case SND_SOC_DAIFMT_DSP_B:
+               aif0 |= 3;
+
+               switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+               case SND_SOC_DAIFMT_NB_NF:
+               case SND_SOC_DAIFMT_IB_NF:
+                       break;
+               default:
+                       return -EINVAL;
+               }
+               break;
+
+       case SND_SOC_DAIFMT_RIGHT_J:
+               break;
+       case SND_SOC_DAIFMT_LEFT_J:
+               aif0 |= 1;
+               break;
+       case SND_SOC_DAIFMT_I2S:
+               aif0 |= 2;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+       case SND_SOC_DAIFMT_NB_NF:
+               break;
+       case SND_SOC_DAIFMT_IB_NF:
+               aif0 |= WM8962_BCLK_INV;
+               break;
+       case SND_SOC_DAIFMT_NB_IF:
+               aif0 |= WM8962_LRCLK_INV;
+               break;
+       case SND_SOC_DAIFMT_IB_IF:
+               aif0 |= WM8962_BCLK_INV | WM8962_LRCLK_INV;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+       case SND_SOC_DAIFMT_CBM_CFM:
+               aif0 |= WM8962_MSTR;
+               break;
+       case SND_SOC_DAIFMT_CBS_CFS:
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       snd_soc_update_bits(codec, WM8962_AUDIO_INTERFACE_0,
+                           WM8962_FMT_MASK | WM8962_BCLK_INV | WM8962_MSTR |
+                           WM8962_LRCLK_INV, aif0);
+
+       return 0;
+}
+
+struct _fll_div {
+       u16 fll_fratio;
+       u16 fll_outdiv;
+       u16 fll_refclk_div;
+       u16 n;
+       u16 theta;
+       u16 lambda;
+};
+
+/* The size in bits of the FLL divide multiplied by 10
+ * to allow rounding later */
+#define FIXED_FLL_SIZE ((1 << 16) * 10)
+
+static struct {
+       unsigned int min;
+       unsigned int max;
+       u16 fll_fratio;
+       int ratio;
+} fll_fratios[] = {
+       {       0,    64000, 4, 16 },
+       {   64000,   128000, 3,  8 },
+       {  128000,   256000, 2,  4 },
+       {  256000,  1000000, 1,  2 },
+       { 1000000, 13500000, 0,  1 },
+};
+
+static int fll_factors(struct _fll_div *fll_div, unsigned int Fref,
+                      unsigned int Fout)
+{
+       unsigned int target;
+       unsigned int div;
+       unsigned int fratio, gcd_fll;
+       int i;
+
+       /* Fref must be <=13.5MHz */
+       div = 1;
+       fll_div->fll_refclk_div = 0;
+       while ((Fref / div) > 13500000) {
+               div *= 2;
+               fll_div->fll_refclk_div++;
+
+               if (div > 4) {
+                       pr_err("Can't scale %dMHz input down to <=13.5MHz\n",
+                              Fref);
+                       return -EINVAL;
+               }
+       }
+
+       pr_debug("FLL Fref=%u Fout=%u\n", Fref, Fout);
+
+       /* Apply the division for our remaining calculations */
+       Fref /= div;
+
+       /* Fvco should be 90-100MHz; don't check the upper bound */
+       div = 2;
+       while (Fout * div < 90000000) {
+               div++;
+               if (div > 64) {
+                       pr_err("Unable to find FLL_OUTDIV for Fout=%uHz\n",
+                              Fout);
+                       return -EINVAL;
+               }
+       }
+       target = Fout * div;
+       fll_div->fll_outdiv = div - 1;
+
+       pr_debug("FLL Fvco=%dHz\n", target);
+
+       /* Find an appropraite FLL_FRATIO and factor it out of the target */
+       for (i = 0; i < ARRAY_SIZE(fll_fratios); i++) {
+               if (fll_fratios[i].min <= Fref && Fref <= fll_fratios[i].max) {
+                       fll_div->fll_fratio = fll_fratios[i].fll_fratio;
+                       fratio = fll_fratios[i].ratio;
+                       break;
+               }
+       }
+       if (i == ARRAY_SIZE(fll_fratios)) {
+               pr_err("Unable to find FLL_FRATIO for Fref=%uHz\n", Fref);
+               return -EINVAL;
+       }
+
+       fll_div->n = target / (fratio * Fref);
+
+       if (target % Fref == 0) {
+               fll_div->theta = 0;
+               fll_div->lambda = 0;
+       } else {
+               gcd_fll = gcd(target, fratio * Fref);
+
+               fll_div->theta = (target - (fll_div->n * fratio * Fref))
+                       / gcd_fll;
+               fll_div->lambda = (fratio * Fref) / gcd_fll;
+       }
+
+       pr_debug("FLL N=%x THETA=%x LAMBDA=%x\n",
+                fll_div->n, fll_div->theta, fll_div->lambda);
+       pr_debug("FLL_FRATIO=%x FLL_OUTDIV=%x FLL_REFCLK_DIV=%x\n",
+                fll_div->fll_fratio, fll_div->fll_outdiv,
+                fll_div->fll_refclk_div);
+
+       return 0;
+}
+
+static int wm8962_set_fll(struct snd_soc_dai *dai, int fll_id, int source,
+                         unsigned int Fref, unsigned int Fout)
+{
+       struct snd_soc_codec *codec = dai->codec;
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       struct _fll_div fll_div;
+       int ret;
+       int fll1 = snd_soc_read(codec, WM8962_FLL_CONTROL_1);
+
+       /* Any change? */
+       if (source == wm8962->fll_src && Fref == wm8962->fll_fref &&
+           Fout == wm8962->fll_fout)
+               return 0;
+
+       if (Fout == 0) {
+               dev_dbg(codec->dev, "FLL disabled\n");
+
+               wm8962->fll_fref = 0;
+               wm8962->fll_fout = 0;
+
+               snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
+                                   WM8962_FLL_ENA, 0);
+
+               return 0;
+       }
+
+       ret = fll_factors(&fll_div, Fref, Fout);
+       if (ret != 0)
+               return ret;
+
+       switch (fll_id) {
+       case WM8962_FLL_MCLK:
+       case WM8962_FLL_BCLK:
+       case WM8962_FLL_OSC:
+               fll1 |= (fll_id - 1) << WM8962_FLL_REFCLK_SRC_SHIFT;
+               break;
+       case WM8962_FLL_INT:
+               snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
+                                   WM8962_FLL_OSC_ENA, WM8962_FLL_OSC_ENA);
+               snd_soc_update_bits(codec, WM8962_FLL_CONTROL_5,
+                                   WM8962_FLL_FRC_NCO, WM8962_FLL_FRC_NCO);
+               break;
+       default:
+               dev_err(codec->dev, "Unknown FLL source %d\n", ret);
+               return -EINVAL;
+       }
+
+       if (fll_div.theta || fll_div.lambda)
+               fll1 |= WM8962_FLL_FRAC;
+
+       /* Stop the FLL while we reconfigure */
+       snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1, WM8962_FLL_ENA, 0);
+
+       snd_soc_update_bits(codec, WM8962_FLL_CONTROL_2,
+                           WM8962_FLL_OUTDIV_MASK |
+                           WM8962_FLL_REFCLK_DIV_MASK,
+                           (fll_div.fll_outdiv << WM8962_FLL_OUTDIV_SHIFT) |
+                           (fll_div.fll_refclk_div));
+
+       snd_soc_update_bits(codec, WM8962_FLL_CONTROL_3,
+                           WM8962_FLL_FRATIO_MASK, fll_div.fll_fratio);
+
+       snd_soc_write(codec, WM8962_FLL_CONTROL_6, fll_div.theta);
+       snd_soc_write(codec, WM8962_FLL_CONTROL_7, fll_div.lambda);
+       snd_soc_write(codec, WM8962_FLL_CONTROL_8, fll_div.n);
+
+       snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
+                           WM8962_FLL_FRAC | WM8962_FLL_REFCLK_SRC_MASK |
+                           WM8962_FLL_ENA, fll1);
+
+       dev_dbg(codec->dev, "FLL configured for %dHz->%dHz\n", Fref, Fout);
+
+       wm8962->fll_fref = Fref;
+       wm8962->fll_fout = Fout;
+       wm8962->fll_src = source;
+
+       return 0;
+}
+
+static int wm8962_mute(struct snd_soc_dai *dai, int mute)
+{
+       struct snd_soc_codec *codec = dai->codec;
+       int val;
+
+       if (mute)
+               val = WM8962_DAC_MUTE;
+       else
+               val = 0;
+
+       return snd_soc_update_bits(codec, WM8962_ADC_DAC_CONTROL_1,
+                                  WM8962_DAC_MUTE, val);
+}
+
+#define WM8962_RATES SNDRV_PCM_RATE_8000_96000
+
+#define WM8962_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
+                       SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops wm8962_dai_ops = {
+       .hw_params = wm8962_hw_params,
+       .set_sysclk = wm8962_set_dai_sysclk,
+       .set_fmt = wm8962_set_dai_fmt,
+       .set_pll = wm8962_set_fll,
+       .digital_mute = wm8962_mute,
+};
+
+static struct snd_soc_dai_driver wm8962_dai = {
+       .name = "wm8962",
+       .playback = {
+               .stream_name = "Playback",
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = WM8962_RATES,
+               .formats = WM8962_FORMATS,
+       },
+       .capture = {
+               .stream_name = "Capture",
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = WM8962_RATES,
+               .formats = WM8962_FORMATS,
+       },
+       .ops = &wm8962_dai_ops,
+       .symmetric_rates = 1,
+};
+
+#ifdef CONFIG_PM
+static int wm8962_resume(struct snd_soc_codec *codec)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       u16 *reg_cache = codec->reg_cache;
+       int i;
+
+       /* Restore the registers */
+       for (i = 1; i < ARRAY_SIZE(wm8962->reg_cache); i++) {
+               switch (i) {
+               case WM8962_SOFTWARE_RESET:
+                       continue;
+               default:
+                       break;
+               }
+
+               if (reg_cache[i] != wm8962_reg[i])
+                       snd_soc_write(codec, i, reg_cache[i]);
+       }
+
+       return 0;
+}
+#else
+#define wm8962_resume NULL
+#endif
+
+#if defined(CONFIG_INPUT) || defined(CONFIG_INPUT_MODULE)
+static int beep_rates[] = {
+       500, 1000, 2000, 4000,
+};
+
+static void wm8962_beep_work(struct work_struct *work)
+{
+       struct wm8962_priv *wm8962 =
+               container_of(work, struct wm8962_priv, beep_work);
+       struct snd_soc_codec *codec = wm8962->codec;
+       int i;
+       int reg = 0;
+       int best = 0;
+
+       if (wm8962->beep_rate) {
+               for (i = 0; i < ARRAY_SIZE(beep_rates); i++) {
+                       if (abs(wm8962->beep_rate - beep_rates[i]) <
+                           abs(wm8962->beep_rate - beep_rates[best]))
+                               best = i;
+               }
+
+               dev_dbg(codec->dev, "Set beep rate %dHz for requested %dHz\n",
+                       beep_rates[best], wm8962->beep_rate);
+
+               reg = WM8962_BEEP_ENA | (best << WM8962_BEEP_RATE_SHIFT);
+
+               snd_soc_dapm_enable_pin(codec, "Beep");
+       } else {
+               dev_dbg(codec->dev, "Disabling beep\n");
+               snd_soc_dapm_disable_pin(codec, "Beep");
+       }
+
+       snd_soc_update_bits(codec, WM8962_BEEP_GENERATOR_1,
+                           WM8962_BEEP_ENA | WM8962_BEEP_RATE_MASK, reg);
+
+       snd_soc_dapm_sync(codec);
+}
+
+/* For usability define a way of injecting beep events for the device -
+ * many systems will not have a keyboard.
+ */
+static int wm8962_beep_event(struct input_dev *dev, unsigned int type,
+                            unsigned int code, int hz)
+{
+       struct snd_soc_codec *codec = input_get_drvdata(dev);
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+
+       dev_dbg(codec->dev, "Beep event %x %x\n", code, hz);
+
+       switch (code) {
+       case SND_BELL:
+               if (hz)
+                       hz = 1000;
+       case SND_TONE:
+               break;
+       default:
+               return -1;
+       }
+
+       /* Kick the beep from a workqueue */
+       wm8962->beep_rate = hz;
+       schedule_work(&wm8962->beep_work);
+       return 0;
+}
+
+static ssize_t wm8962_beep_set(struct device *dev,
+                              struct device_attribute *attr,
+                              const char *buf, size_t count)
+{
+       struct wm8962_priv *wm8962 = dev_get_drvdata(dev);
+       long int time;
+
+       strict_strtol(buf, 10, &time);
+
+       input_event(wm8962->beep, EV_SND, SND_TONE, time);
+
+       return count;
+}
+
+static DEVICE_ATTR(beep, 0200, NULL, wm8962_beep_set);
+
+static void wm8962_init_beep(struct snd_soc_codec *codec)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int ret;
+
+       wm8962->beep = input_allocate_device();
+       if (!wm8962->beep) {
+               dev_err(codec->dev, "Failed to allocate beep device\n");
+               return;
+       }
+
+       INIT_WORK(&wm8962->beep_work, wm8962_beep_work);
+       wm8962->beep_rate = 0;
+
+       wm8962->beep->name = "WM8962 Beep Generator";
+       wm8962->beep->phys = dev_name(codec->dev);
+       wm8962->beep->id.bustype = BUS_I2C;
+
+       wm8962->beep->evbit[0] = BIT_MASK(EV_SND);
+       wm8962->beep->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE);
+       wm8962->beep->event = wm8962_beep_event;
+       wm8962->beep->dev.parent = codec->dev;
+       input_set_drvdata(wm8962->beep, codec);
+
+       ret = input_register_device(wm8962->beep);
+       if (ret != 0) {
+               input_free_device(wm8962->beep);
+               wm8962->beep = NULL;
+               dev_err(codec->dev, "Failed to register beep device\n");
+       }
+
+       ret = device_create_file(codec->dev, &dev_attr_beep);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to create keyclick file: %d\n",
+                       ret);
+       }
+}
+
+static void wm8962_free_beep(struct snd_soc_codec *codec)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+
+       device_remove_file(codec->dev, &dev_attr_beep);
+       input_unregister_device(wm8962->beep);
+       cancel_work_sync(&wm8962->beep_work);
+       wm8962->beep = NULL;
+
+       snd_soc_update_bits(codec, WM8962_BEEP_GENERATOR_1, WM8962_BEEP_ENA,0);
+}
+#else
+static void wm8962_init_beep(struct snd_soc_codec *codec)
+{
+}
+
+static void wm8962_free_beep(struct snd_soc_codec *codec)
+{
+}
+#endif
+
+static int wm8962_probe(struct snd_soc_codec *codec)
+{
+       int ret;
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       struct wm8962_pdata *pdata = dev_get_platdata(codec->dev);
+       int i;
+
+       wm8962->codec = codec;
+
+       codec->cache_sync = 1;
+       codec->idle_bias_off = 1;
+
+       ret = snd_soc_codec_set_cache_io(codec, 16, 16, SND_SOC_I2C);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               goto err;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(wm8962->supplies); i++)
+               wm8962->supplies[i].supply = wm8962_supply_names[i];
+
+       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8962->supplies),
+                                wm8962->supplies);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
+               goto err;
+       }
+
+       wm8962->disable_nb[0].notifier_call = wm8962_regulator_event_0;
+       wm8962->disable_nb[1].notifier_call = wm8962_regulator_event_1;
+       wm8962->disable_nb[2].notifier_call = wm8962_regulator_event_2;
+       wm8962->disable_nb[3].notifier_call = wm8962_regulator_event_3;
+       wm8962->disable_nb[4].notifier_call = wm8962_regulator_event_4;
+       wm8962->disable_nb[5].notifier_call = wm8962_regulator_event_5;
+       wm8962->disable_nb[6].notifier_call = wm8962_regulator_event_6;
+       wm8962->disable_nb[7].notifier_call = wm8962_regulator_event_7;
+
+       /* This should really be moved into the regulator core */
+       for (i = 0; i < ARRAY_SIZE(wm8962->supplies); i++) {
+               ret = regulator_register_notifier(wm8962->supplies[i].consumer,
+                                                 &wm8962->disable_nb[i]);
+               if (ret != 0) {
+                       dev_err(codec->dev,
+                               "Failed to register regulator notifier: %d\n",
+                               ret);
+               }
+       }
+
+       ret = regulator_bulk_enable(ARRAY_SIZE(wm8962->supplies),
+                                   wm8962->supplies);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
+               goto err_get;
+       }
+
+       ret = snd_soc_read(codec, WM8962_SOFTWARE_RESET);
+       if (ret < 0) {
+               dev_err(codec->dev, "Failed to read ID register\n");
+               goto err_enable;
+       }
+       if (ret != wm8962_reg[WM8962_SOFTWARE_RESET]) {
+               dev_err(codec->dev, "Device is not a WM8962, ID %x != %x\n",
+                       ret, wm8962_reg[WM8962_SOFTWARE_RESET]);
+               ret = -EINVAL;
+               goto err_enable;
+       }
+
+       ret = snd_soc_read(codec, WM8962_RIGHT_INPUT_VOLUME);
+       if (ret < 0) {
+               dev_err(codec->dev, "Failed to read device revision: %d\n",
+                       ret);
+               goto err_enable;
+       }
+       
+       dev_info(codec->dev, "customer id %x revision %c\n",
+                (ret & WM8962_CUST_ID_MASK) >> WM8962_CUST_ID_SHIFT,
+                ((ret & WM8962_CHIP_REV_MASK) >> WM8962_CHIP_REV_SHIFT)
+                + 'A');
+
+       ret = wm8962_reset(codec);
+       if (ret < 0) {
+               dev_err(codec->dev, "Failed to issue reset\n");
+               goto err_enable;
+       }
+
+       /* SYSCLK defaults to on; make sure it is off so we can safely
+        * write to registers if the device is declocked.
+        */
+       snd_soc_update_bits(codec, WM8962_CLOCKING2, WM8962_SYSCLK_ENA, 0);
+
+       regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies), wm8962->supplies);
+
+       if (pdata) {
+               /* Apply static configuration for GPIOs */
+               for (i = 0; i < ARRAY_SIZE(pdata->gpio_init); i++)
+                       if (pdata->gpio_init[i])
+                               snd_soc_write(codec, 0x200 + i,
+                                             pdata->gpio_init[i] & 0xffff);
+
+               /* Put the speakers into mono mode? */
+               if (pdata->spk_mono)
+                       wm8962->reg_cache[WM8962_CLASS_D_CONTROL_2]
+                               |= WM8962_SPK_MONO;
+       }
+
+       /* Latch volume update bits */
+       wm8962->reg_cache[WM8962_LEFT_INPUT_VOLUME] |= WM8962_IN_VU;
+       wm8962->reg_cache[WM8962_RIGHT_INPUT_VOLUME] |= WM8962_IN_VU;
+       wm8962->reg_cache[WM8962_LEFT_ADC_VOLUME] |= WM8962_ADC_VU;
+       wm8962->reg_cache[WM8962_RIGHT_ADC_VOLUME] |= WM8962_ADC_VU;    
+       wm8962->reg_cache[WM8962_LEFT_DAC_VOLUME] |= WM8962_DAC_VU;
+       wm8962->reg_cache[WM8962_RIGHT_DAC_VOLUME] |= WM8962_DAC_VU;
+       wm8962->reg_cache[WM8962_SPKOUTL_VOLUME] |= WM8962_SPKOUT_VU;
+       wm8962->reg_cache[WM8962_SPKOUTR_VOLUME] |= WM8962_SPKOUT_VU;
+       wm8962->reg_cache[WM8962_HPOUTL_VOLUME] |= WM8962_HPOUT_VU;
+       wm8962->reg_cache[WM8962_HPOUTR_VOLUME] |= WM8962_HPOUT_VU;
+
+       snd_soc_add_controls(codec, wm8962_snd_controls,
+                            ARRAY_SIZE(wm8962_snd_controls));
+       wm8962_add_widgets(codec);
+
+       wm8962_init_beep(codec);
+
+       return 0;
+
+err_enable:
+       regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies), wm8962->supplies);
+err_get:
+       regulator_bulk_free(ARRAY_SIZE(wm8962->supplies), wm8962->supplies);
+err:
+       kfree(wm8962);
+       return ret;
+}
+
+static int wm8962_remove(struct snd_soc_codec *codec)
+{
+       struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
+       int i;
+
+       wm8962_free_beep(codec);
+       for (i = 0; i < ARRAY_SIZE(wm8962->supplies); i++)
+               regulator_unregister_notifier(wm8962->supplies[i].consumer,
+                                             &wm8962->disable_nb[i]);
+       regulator_bulk_free(ARRAY_SIZE(wm8962->supplies), wm8962->supplies);
+
+       return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_wm8962 = {
+       .probe =        wm8962_probe,
+       .remove =       wm8962_remove,
+       .resume =       wm8962_resume,
+       .set_bias_level = wm8962_set_bias_level,
+       .reg_cache_size = WM8962_MAX_REGISTER,
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8962_reg,
+       .volatile_register = wm8962_volatile_register,
+       .readable_register = wm8962_readable_register,
+};
+
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8962_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
+{
+       struct wm8962_priv *wm8962;
+       int ret;
+
+       wm8962 = kzalloc(sizeof(struct wm8962_priv), GFP_KERNEL);
+       if (wm8962 == NULL)
+               return -ENOMEM;
+
+       i2c_set_clientdata(i2c, wm8962);
+
+       ret = snd_soc_register_codec(&i2c->dev,
+                                    &soc_codec_dev_wm8962, &wm8962_dai, 1);
+       if (ret < 0)
+               kfree(wm8962);
+
+       return ret;
+}
+
+static __devexit int wm8962_i2c_remove(struct i2c_client *client)
+{
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
+       return 0;
+}
+
+static const struct i2c_device_id wm8962_i2c_id[] = {
+       { "wm8962", 0 },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, wm8962_i2c_id);
+
+static struct i2c_driver wm8962_i2c_driver = {
+       .driver = {
+               .name = "WM8962",
+               .owner = THIS_MODULE,
+       },
+       .probe =    wm8962_i2c_probe,
+       .remove =   __devexit_p(wm8962_i2c_remove),
+       .id_table = wm8962_i2c_id,
+};
+#endif
+
+static int __init wm8962_modinit(void)
+{
+       int ret;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8962_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register WM8962 I2C driver: %d\n",
+                      ret);
+       }
+#endif
+       return 0;
+}
+module_init(wm8962_modinit);
+
+static void __exit wm8962_exit(void)
+{
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       i2c_del_driver(&wm8962_i2c_driver);
+#endif
+}
+module_exit(wm8962_exit);
+
+MODULE_DESCRIPTION("ASoC WM8962 driver");
+MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/wm8962.h b/sound/soc/codecs/wm8962.h
new file mode 100644 (file)
index 0000000..6145399
--- /dev/null
@@ -0,0 +1,3787 @@
+/*
+ * wm8962.h  --  WM8962 ASoC driver
+ *
+ * Copyright 2010 Wolfson Microelectronics, plc
+ *
+ * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _WM8962_H
+#define _WM8962_H
+
+#include <asm/types.h>
+
+#define WM8962_SYSCLK_MCLK 1
+#define WM8962_SYSCLK_FLL  2
+#define WM8962_SYSCLK_PLL3 3
+
+#define WM8962_FLL  1
+
+#define WM8962_FLL_MCLK 1
+#define WM8962_FLL_BCLK 2
+#define WM8962_FLL_OSC  3
+#define WM8962_FLL_INT  4
+
+/*
+ * Register values.
+ */
+#define WM8962_LEFT_INPUT_VOLUME                0x00
+#define WM8962_RIGHT_INPUT_VOLUME               0x01
+#define WM8962_HPOUTL_VOLUME                    0x02
+#define WM8962_HPOUTR_VOLUME                    0x03
+#define WM8962_CLOCKING1                        0x04
+#define WM8962_ADC_DAC_CONTROL_1                0x05
+#define WM8962_ADC_DAC_CONTROL_2                0x06
+#define WM8962_AUDIO_INTERFACE_0                0x07
+#define WM8962_CLOCKING2                        0x08
+#define WM8962_AUDIO_INTERFACE_1                0x09
+#define WM8962_LEFT_DAC_VOLUME                  0x0A
+#define WM8962_RIGHT_DAC_VOLUME                 0x0B
+#define WM8962_AUDIO_INTERFACE_2                0x0E
+#define WM8962_SOFTWARE_RESET                   0x0F
+#define WM8962_ALC1                             0x11
+#define WM8962_ALC2                             0x12
+#define WM8962_ALC3                             0x13
+#define WM8962_NOISE_GATE                       0x14
+#define WM8962_LEFT_ADC_VOLUME                  0x15
+#define WM8962_RIGHT_ADC_VOLUME                 0x16
+#define WM8962_ADDITIONAL_CONTROL_1             0x17
+#define WM8962_ADDITIONAL_CONTROL_2             0x18
+#define WM8962_PWR_MGMT_1                       0x19
+#define WM8962_PWR_MGMT_2                       0x1A
+#define WM8962_ADDITIONAL_CONTROL_3             0x1B
+#define WM8962_ANTI_POP                         0x1C
+#define WM8962_CLOCKING_3                       0x1E
+#define WM8962_INPUT_MIXER_CONTROL_1            0x1F
+#define WM8962_LEFT_INPUT_MIXER_VOLUME          0x20
+#define WM8962_RIGHT_INPUT_MIXER_VOLUME         0x21
+#define WM8962_INPUT_MIXER_CONTROL_2            0x22
+#define WM8962_INPUT_BIAS_CONTROL               0x23
+#define WM8962_LEFT_INPUT_PGA_CONTROL           0x25
+#define WM8962_RIGHT_INPUT_PGA_CONTROL          0x26
+#define WM8962_SPKOUTL_VOLUME                   0x28
+#define WM8962_SPKOUTR_VOLUME                   0x29
+#define WM8962_THERMAL_SHUTDOWN_STATUS          0x2F
+#define WM8962_ADDITIONAL_CONTROL_4             0x30
+#define WM8962_CLASS_D_CONTROL_1                0x31
+#define WM8962_CLASS_D_CONTROL_2                0x33
+#define WM8962_CLOCKING_4                       0x38
+#define WM8962_DAC_DSP_MIXING_1                 0x39
+#define WM8962_DAC_DSP_MIXING_2                 0x3A
+#define WM8962_DC_SERVO_0                       0x3C
+#define WM8962_DC_SERVO_1                       0x3D
+#define WM8962_DC_SERVO_4                       0x40
+#define WM8962_DC_SERVO_6                       0x42
+#define WM8962_ANALOGUE_PGA_BIAS                0x44
+#define WM8962_ANALOGUE_HP_0                    0x45
+#define WM8962_ANALOGUE_HP_2                    0x47
+#define WM8962_CHARGE_PUMP_1                    0x48
+#define WM8962_CHARGE_PUMP_B                    0x52
+#define WM8962_WRITE_SEQUENCER_CONTROL_1        0x57
+#define WM8962_WRITE_SEQUENCER_CONTROL_2        0x5A
+#define WM8962_WRITE_SEQUENCER_CONTROL_3        0x5D
+#define WM8962_CONTROL_INTERFACE                0x5E
+#define WM8962_MIXER_ENABLES                    0x63
+#define WM8962_HEADPHONE_MIXER_1                0x64
+#define WM8962_HEADPHONE_MIXER_2                0x65
+#define WM8962_HEADPHONE_MIXER_3                0x66
+#define WM8962_HEADPHONE_MIXER_4                0x67
+#define WM8962_SPEAKER_MIXER_1                  0x69
+#define WM8962_SPEAKER_MIXER_2                  0x6A
+#define WM8962_SPEAKER_MIXER_3                  0x6B
+#define WM8962_SPEAKER_MIXER_4                  0x6C
+#define WM8962_SPEAKER_MIXER_5                  0x6D
+#define WM8962_BEEP_GENERATOR_1                 0x6E
+#define WM8962_OSCILLATOR_TRIM_3                0x73
+#define WM8962_OSCILLATOR_TRIM_4                0x74
+#define WM8962_OSCILLATOR_TRIM_7                0x77
+#define WM8962_ANALOGUE_CLOCKING1               0x7C
+#define WM8962_ANALOGUE_CLOCKING2               0x7D
+#define WM8962_ANALOGUE_CLOCKING3               0x7E
+#define WM8962_PLL_SOFTWARE_RESET               0x7F
+#define WM8962_PLL2                             0x81
+#define WM8962_PLL_4                            0x83
+#define WM8962_PLL_9                            0x88
+#define WM8962_PLL_10                           0x89
+#define WM8962_PLL_11                           0x8A
+#define WM8962_PLL_12                           0x8B
+#define WM8962_PLL_13                           0x8C
+#define WM8962_PLL_14                           0x8D
+#define WM8962_PLL_15                           0x8E
+#define WM8962_PLL_16                           0x8F
+#define WM8962_FLL_CONTROL_1                    0x9B
+#define WM8962_FLL_CONTROL_2                    0x9C
+#define WM8962_FLL_CONTROL_3                    0x9D
+#define WM8962_FLL_CONTROL_5                    0x9F
+#define WM8962_FLL_CONTROL_6                    0xA0
+#define WM8962_FLL_CONTROL_7                    0xA1
+#define WM8962_FLL_CONTROL_8                    0xA2
+#define WM8962_GENERAL_TEST_1                   0xFC
+#define WM8962_DF1                              0x100
+#define WM8962_DF2                              0x101
+#define WM8962_DF3                              0x102
+#define WM8962_DF4                              0x103
+#define WM8962_DF5                              0x104
+#define WM8962_DF6                              0x105
+#define WM8962_DF7                              0x106
+#define WM8962_LHPF1                            0x108
+#define WM8962_LHPF2                            0x109
+#define WM8962_THREED1                          0x10C
+#define WM8962_THREED2                          0x10D
+#define WM8962_THREED3                          0x10E
+#define WM8962_THREED4                          0x10F
+#define WM8962_DRC_1                            0x114
+#define WM8962_DRC_2                            0x115
+#define WM8962_DRC_3                            0x116
+#define WM8962_DRC_4                            0x117
+#define WM8962_DRC_5                            0x118
+#define WM8962_TLOOPBACK                        0x11D
+#define WM8962_EQ1                              0x14F
+#define WM8962_EQ2                              0x150
+#define WM8962_EQ3                              0x151
+#define WM8962_EQ4                              0x152
+#define WM8962_EQ5                              0x153
+#define WM8962_EQ6                              0x154
+#define WM8962_EQ7                              0x155
+#define WM8962_EQ8                              0x156
+#define WM8962_EQ9                              0x157
+#define WM8962_EQ10                             0x158
+#define WM8962_EQ11                             0x159
+#define WM8962_EQ12                             0x15A
+#define WM8962_EQ13                             0x15B
+#define WM8962_EQ14                             0x15C
+#define WM8962_EQ15                             0x15D
+#define WM8962_EQ16                             0x15E
+#define WM8962_EQ17                             0x15F
+#define WM8962_EQ18                             0x160
+#define WM8962_EQ19                             0x161
+#define WM8962_EQ20                             0x162
+#define WM8962_EQ21                             0x163
+#define WM8962_EQ22                             0x164
+#define WM8962_EQ23                             0x165
+#define WM8962_EQ24                             0x166
+#define WM8962_EQ25                             0x167
+#define WM8962_EQ26                             0x168
+#define WM8962_EQ27                             0x169
+#define WM8962_EQ28                             0x16A
+#define WM8962_EQ29                             0x16B
+#define WM8962_EQ30                             0x16C
+#define WM8962_EQ31                             0x16D
+#define WM8962_EQ32                             0x16E
+#define WM8962_EQ33                             0x16F
+#define WM8962_EQ34                             0x170
+#define WM8962_EQ35                             0x171
+#define WM8962_EQ36                             0x172
+#define WM8962_EQ37                             0x173
+#define WM8962_EQ38                             0x174
+#define WM8962_EQ39                             0x175
+#define WM8962_EQ40                             0x176
+#define WM8962_EQ41                             0x177
+#define WM8962_GPIO_2                           0x201
+#define WM8962_GPIO_3                           0x202
+#define WM8962_GPIO_5                           0x204
+#define WM8962_GPIO_6                           0x205
+#define WM8962_INTERRUPT_STATUS_1               0x230
+#define WM8962_INTERRUPT_STATUS_2               0x231
+#define WM8962_INTERRUPT_STATUS_1_MASK          0x238
+#define WM8962_INTERRUPT_STATUS_2_MASK          0x239
+#define WM8962_INTERRUPT_CONTROL                0x240
+#define WM8962_IRQ_DEBOUNCE                     0x248
+#define WM8962_MICINT_SOURCE_POL                0x24A
+#define WM8962_DSP2_POWER_MANAGEMENT            0x300
+#define WM8962_DSP2_EXECCONTROL                 0x40D
+#define WM8962_WRITE_SEQUENCER_0                0x1000
+#define WM8962_WRITE_SEQUENCER_1                0x1001
+#define WM8962_WRITE_SEQUENCER_2                0x1002
+#define WM8962_WRITE_SEQUENCER_3                0x1003
+#define WM8962_WRITE_SEQUENCER_4                0x1004
+#define WM8962_WRITE_SEQUENCER_5                0x1005
+#define WM8962_WRITE_SEQUENCER_6                0x1006
+#define WM8962_WRITE_SEQUENCER_7                0x1007
+#define WM8962_WRITE_SEQUENCER_8                0x1008
+#define WM8962_WRITE_SEQUENCER_9                0x1009
+#define WM8962_WRITE_SEQUENCER_10               0x100A
+#define WM8962_WRITE_SEQUENCER_11               0x100B
+#define WM8962_WRITE_SEQUENCER_12               0x100C
+#define WM8962_WRITE_SEQUENCER_13               0x100D
+#define WM8962_WRITE_SEQUENCER_14               0x100E
+#define WM8962_WRITE_SEQUENCER_15               0x100F
+#define WM8962_WRITE_SEQUENCER_16               0x1010
+#define WM8962_WRITE_SEQUENCER_17               0x1011
+#define WM8962_WRITE_SEQUENCER_18               0x1012
+#define WM8962_WRITE_SEQUENCER_19               0x1013
+#define WM8962_WRITE_SEQUENCER_20               0x1014
+#define WM8962_WRITE_SEQUENCER_21               0x1015
+#define WM8962_WRITE_SEQUENCER_22               0x1016
+#define WM8962_WRITE_SEQUENCER_23               0x1017
+#define WM8962_WRITE_SEQUENCER_24               0x1018
+#define WM8962_WRITE_SEQUENCER_25               0x1019
+#define WM8962_WRITE_SEQUENCER_26               0x101A
+#define WM8962_WRITE_SEQUENCER_27               0x101B
+#define WM8962_WRITE_SEQUENCER_28               0x101C
+#define WM8962_WRITE_SEQUENCER_29               0x101D
+#define WM8962_WRITE_SEQUENCER_30               0x101E
+#define WM8962_WRITE_SEQUENCER_31               0x101F
+#define WM8962_WRITE_SEQUENCER_32               0x1020
+#define WM8962_WRITE_SEQUENCER_33               0x1021
+#define WM8962_WRITE_SEQUENCER_34               0x1022
+#define WM8962_WRITE_SEQUENCER_35               0x1023
+#define WM8962_WRITE_SEQUENCER_36               0x1024
+#define WM8962_WRITE_SEQUENCER_37               0x1025
+#define WM8962_WRITE_SEQUENCER_38               0x1026
+#define WM8962_WRITE_SEQUENCER_39               0x1027
+#define WM8962_WRITE_SEQUENCER_40               0x1028
+#define WM8962_WRITE_SEQUENCER_41               0x1029
+#define WM8962_WRITE_SEQUENCER_42               0x102A
+#define WM8962_WRITE_SEQUENCER_43               0x102B
+#define WM8962_WRITE_SEQUENCER_44               0x102C
+#define WM8962_WRITE_SEQUENCER_45               0x102D
+#define WM8962_WRITE_SEQUENCER_46               0x102E
+#define WM8962_WRITE_SEQUENCER_47               0x102F
+#define WM8962_WRITE_SEQUENCER_48               0x1030
+#define WM8962_WRITE_SEQUENCER_49               0x1031
+#define WM8962_WRITE_SEQUENCER_50               0x1032
+#define WM8962_WRITE_SEQUENCER_51               0x1033
+#define WM8962_WRITE_SEQUENCER_52               0x1034
+#define WM8962_WRITE_SEQUENCER_53               0x1035
+#define WM8962_WRITE_SEQUENCER_54               0x1036
+#define WM8962_WRITE_SEQUENCER_55               0x1037
+#define WM8962_WRITE_SEQUENCER_56               0x1038
+#define WM8962_WRITE_SEQUENCER_57               0x1039
+#define WM8962_WRITE_SEQUENCER_58               0x103A
+#define WM8962_WRITE_SEQUENCER_59               0x103B
+#define WM8962_WRITE_SEQUENCER_60               0x103C
+#define WM8962_WRITE_SEQUENCER_61               0x103D
+#define WM8962_WRITE_SEQUENCER_62               0x103E
+#define WM8962_WRITE_SEQUENCER_63               0x103F
+#define WM8962_WRITE_SEQUENCER_64               0x1040
+#define WM8962_WRITE_SEQUENCER_65               0x1041
+#define WM8962_WRITE_SEQUENCER_66               0x1042
+#define WM8962_WRITE_SEQUENCER_67               0x1043
+#define WM8962_WRITE_SEQUENCER_68               0x1044
+#define WM8962_WRITE_SEQUENCER_69               0x1045
+#define WM8962_WRITE_SEQUENCER_70               0x1046
+#define WM8962_WRITE_SEQUENCER_71               0x1047
+#define WM8962_WRITE_SEQUENCER_72               0x1048
+#define WM8962_WRITE_SEQUENCER_73               0x1049
+#define WM8962_WRITE_SEQUENCER_74               0x104A
+#define WM8962_WRITE_SEQUENCER_75               0x104B
+#define WM8962_WRITE_SEQUENCER_76               0x104C
+#define WM8962_WRITE_SEQUENCER_77               0x104D
+#define WM8962_WRITE_SEQUENCER_78               0x104E
+#define WM8962_WRITE_SEQUENCER_79               0x104F
+#define WM8962_WRITE_SEQUENCER_80               0x1050
+#define WM8962_WRITE_SEQUENCER_81               0x1051
+#define WM8962_WRITE_SEQUENCER_82               0x1052
+#define WM8962_WRITE_SEQUENCER_83               0x1053
+#define WM8962_WRITE_SEQUENCER_84               0x1054
+#define WM8962_WRITE_SEQUENCER_85               0x1055
+#define WM8962_WRITE_SEQUENCER_86               0x1056
+#define WM8962_WRITE_SEQUENCER_87               0x1057
+#define WM8962_WRITE_SEQUENCER_88               0x1058
+#define WM8962_WRITE_SEQUENCER_89               0x1059
+#define WM8962_WRITE_SEQUENCER_90               0x105A
+#define WM8962_WRITE_SEQUENCER_91               0x105B
+#define WM8962_WRITE_SEQUENCER_92               0x105C
+#define WM8962_WRITE_SEQUENCER_93               0x105D
+#define WM8962_WRITE_SEQUENCER_94               0x105E
+#define WM8962_WRITE_SEQUENCER_95               0x105F
+#define WM8962_WRITE_SEQUENCER_96               0x1060
+#define WM8962_WRITE_SEQUENCER_97               0x1061
+#define WM8962_WRITE_SEQUENCER_98               0x1062
+#define WM8962_WRITE_SEQUENCER_99               0x1063
+#define WM8962_WRITE_SEQUENCER_100              0x1064
+#define WM8962_WRITE_SEQUENCER_101              0x1065
+#define WM8962_WRITE_SEQUENCER_102              0x1066
+#define WM8962_WRITE_SEQUENCER_103              0x1067
+#define WM8962_WRITE_SEQUENCER_104              0x1068
+#define WM8962_WRITE_SEQUENCER_105              0x1069
+#define WM8962_WRITE_SEQUENCER_106              0x106A
+#define WM8962_WRITE_SEQUENCER_107              0x106B
+#define WM8962_WRITE_SEQUENCER_108              0x106C
+#define WM8962_WRITE_SEQUENCER_109              0x106D
+#define WM8962_WRITE_SEQUENCER_110              0x106E
+#define WM8962_WRITE_SEQUENCER_111              0x106F
+#define WM8962_WRITE_SEQUENCER_112              0x1070
+#define WM8962_WRITE_SEQUENCER_113              0x1071
+#define WM8962_WRITE_SEQUENCER_114              0x1072
+#define WM8962_WRITE_SEQUENCER_115              0x1073
+#define WM8962_WRITE_SEQUENCER_116              0x1074
+#define WM8962_WRITE_SEQUENCER_117              0x1075
+#define WM8962_WRITE_SEQUENCER_118              0x1076
+#define WM8962_WRITE_SEQUENCER_119              0x1077
+#define WM8962_WRITE_SEQUENCER_120              0x1078
+#define WM8962_WRITE_SEQUENCER_121              0x1079
+#define WM8962_WRITE_SEQUENCER_122              0x107A
+#define WM8962_WRITE_SEQUENCER_123              0x107B
+#define WM8962_WRITE_SEQUENCER_124              0x107C
+#define WM8962_WRITE_SEQUENCER_125              0x107D
+#define WM8962_WRITE_SEQUENCER_126              0x107E
+#define WM8962_WRITE_SEQUENCER_127              0x107F
+#define WM8962_WRITE_SEQUENCER_128              0x1080
+#define WM8962_WRITE_SEQUENCER_129              0x1081
+#define WM8962_WRITE_SEQUENCER_130              0x1082
+#define WM8962_WRITE_SEQUENCER_131              0x1083
+#define WM8962_WRITE_SEQUENCER_132              0x1084
+#define WM8962_WRITE_SEQUENCER_133              0x1085
+#define WM8962_WRITE_SEQUENCER_134              0x1086
+#define WM8962_WRITE_SEQUENCER_135              0x1087
+#define WM8962_WRITE_SEQUENCER_136              0x1088
+#define WM8962_WRITE_SEQUENCER_137              0x1089
+#define WM8962_WRITE_SEQUENCER_138              0x108A
+#define WM8962_WRITE_SEQUENCER_139              0x108B
+#define WM8962_WRITE_SEQUENCER_140              0x108C
+#define WM8962_WRITE_SEQUENCER_141              0x108D
+#define WM8962_WRITE_SEQUENCER_142              0x108E
+#define WM8962_WRITE_SEQUENCER_143              0x108F
+#define WM8962_WRITE_SEQUENCER_144              0x1090
+#define WM8962_WRITE_SEQUENCER_145              0x1091
+#define WM8962_WRITE_SEQUENCER_146              0x1092
+#define WM8962_WRITE_SEQUENCER_147              0x1093
+#define WM8962_WRITE_SEQUENCER_148              0x1094
+#define WM8962_WRITE_SEQUENCER_149              0x1095
+#define WM8962_WRITE_SEQUENCER_150              0x1096
+#define WM8962_WRITE_SEQUENCER_151              0x1097
+#define WM8962_WRITE_SEQUENCER_152              0x1098
+#define WM8962_WRITE_SEQUENCER_153              0x1099
+#define WM8962_WRITE_SEQUENCER_154              0x109A
+#define WM8962_WRITE_SEQUENCER_155              0x109B
+#define WM8962_WRITE_SEQUENCER_156              0x109C
+#define WM8962_WRITE_SEQUENCER_157              0x109D
+#define WM8962_WRITE_SEQUENCER_158              0x109E
+#define WM8962_WRITE_SEQUENCER_159              0x109F
+#define WM8962_WRITE_SEQUENCER_160              0x10A0
+#define WM8962_WRITE_SEQUENCER_161              0x10A1
+#define WM8962_WRITE_SEQUENCER_162              0x10A2
+#define WM8962_WRITE_SEQUENCER_163              0x10A3
+#define WM8962_WRITE_SEQUENCER_164              0x10A4
+#define WM8962_WRITE_SEQUENCER_165              0x10A5
+#define WM8962_WRITE_SEQUENCER_166              0x10A6
+#define WM8962_WRITE_SEQUENCER_167              0x10A7
+#define WM8962_WRITE_SEQUENCER_168              0x10A8
+#define WM8962_WRITE_SEQUENCER_169              0x10A9
+#define WM8962_WRITE_SEQUENCER_170              0x10AA
+#define WM8962_WRITE_SEQUENCER_171              0x10AB
+#define WM8962_WRITE_SEQUENCER_172              0x10AC
+#define WM8962_WRITE_SEQUENCER_173              0x10AD
+#define WM8962_WRITE_SEQUENCER_174              0x10AE
+#define WM8962_WRITE_SEQUENCER_175              0x10AF
+#define WM8962_WRITE_SEQUENCER_176              0x10B0
+#define WM8962_WRITE_SEQUENCER_177              0x10B1
+#define WM8962_WRITE_SEQUENCER_178              0x10B2
+#define WM8962_WRITE_SEQUENCER_179              0x10B3
+#define WM8962_WRITE_SEQUENCER_180              0x10B4
+#define WM8962_WRITE_SEQUENCER_181              0x10B5
+#define WM8962_WRITE_SEQUENCER_182              0x10B6
+#define WM8962_WRITE_SEQUENCER_183              0x10B7
+#define WM8962_WRITE_SEQUENCER_184              0x10B8
+#define WM8962_WRITE_SEQUENCER_185              0x10B9
+#define WM8962_WRITE_SEQUENCER_186              0x10BA
+#define WM8962_WRITE_SEQUENCER_187              0x10BB
+#define WM8962_WRITE_SEQUENCER_188              0x10BC
+#define WM8962_WRITE_SEQUENCER_189              0x10BD
+#define WM8962_WRITE_SEQUENCER_190              0x10BE
+#define WM8962_WRITE_SEQUENCER_191              0x10BF
+#define WM8962_WRITE_SEQUENCER_192              0x10C0
+#define WM8962_WRITE_SEQUENCER_193              0x10C1
+#define WM8962_WRITE_SEQUENCER_194              0x10C2
+#define WM8962_WRITE_SEQUENCER_195              0x10C3
+#define WM8962_WRITE_SEQUENCER_196              0x10C4
+#define WM8962_WRITE_SEQUENCER_197              0x10C5
+#define WM8962_WRITE_SEQUENCER_198              0x10C6
+#define WM8962_WRITE_SEQUENCER_199              0x10C7
+#define WM8962_WRITE_SEQUENCER_200              0x10C8
+#define WM8962_WRITE_SEQUENCER_201              0x10C9
+#define WM8962_WRITE_SEQUENCER_202              0x10CA
+#define WM8962_WRITE_SEQUENCER_203              0x10CB
+#define WM8962_WRITE_SEQUENCER_204              0x10CC
+#define WM8962_WRITE_SEQUENCER_205              0x10CD
+#define WM8962_WRITE_SEQUENCER_206              0x10CE
+#define WM8962_WRITE_SEQUENCER_207              0x10CF
+#define WM8962_WRITE_SEQUENCER_208              0x10D0
+#define WM8962_WRITE_SEQUENCER_209              0x10D1
+#define WM8962_WRITE_SEQUENCER_210              0x10D2
+#define WM8962_WRITE_SEQUENCER_211              0x10D3
+#define WM8962_WRITE_SEQUENCER_212              0x10D4
+#define WM8962_WRITE_SEQUENCER_213              0x10D5
+#define WM8962_WRITE_SEQUENCER_214              0x10D6
+#define WM8962_WRITE_SEQUENCER_215              0x10D7
+#define WM8962_WRITE_SEQUENCER_216              0x10D8
+#define WM8962_WRITE_SEQUENCER_217              0x10D9
+#define WM8962_WRITE_SEQUENCER_218              0x10DA
+#define WM8962_WRITE_SEQUENCER_219              0x10DB
+#define WM8962_WRITE_SEQUENCER_220              0x10DC
+#define WM8962_WRITE_SEQUENCER_221              0x10DD
+#define WM8962_WRITE_SEQUENCER_222              0x10DE
+#define WM8962_WRITE_SEQUENCER_223              0x10DF
+#define WM8962_WRITE_SEQUENCER_224              0x10E0
+#define WM8962_WRITE_SEQUENCER_225              0x10E1
+#define WM8962_WRITE_SEQUENCER_226              0x10E2
+#define WM8962_WRITE_SEQUENCER_227              0x10E3
+#define WM8962_WRITE_SEQUENCER_228              0x10E4
+#define WM8962_WRITE_SEQUENCER_229              0x10E5
+#define WM8962_WRITE_SEQUENCER_230              0x10E6
+#define WM8962_WRITE_SEQUENCER_231              0x10E7
+#define WM8962_WRITE_SEQUENCER_232              0x10E8
+#define WM8962_WRITE_SEQUENCER_233              0x10E9
+#define WM8962_WRITE_SEQUENCER_234              0x10EA
+#define WM8962_WRITE_SEQUENCER_235              0x10EB
+#define WM8962_WRITE_SEQUENCER_236              0x10EC
+#define WM8962_WRITE_SEQUENCER_237              0x10ED
+#define WM8962_WRITE_SEQUENCER_238              0x10EE
+#define WM8962_WRITE_SEQUENCER_239              0x10EF
+#define WM8962_WRITE_SEQUENCER_240              0x10F0
+#define WM8962_WRITE_SEQUENCER_241              0x10F1
+#define WM8962_WRITE_SEQUENCER_242              0x10F2
+#define WM8962_WRITE_SEQUENCER_243              0x10F3
+#define WM8962_WRITE_SEQUENCER_244              0x10F4
+#define WM8962_WRITE_SEQUENCER_245              0x10F5
+#define WM8962_WRITE_SEQUENCER_246              0x10F6
+#define WM8962_WRITE_SEQUENCER_247              0x10F7
+#define WM8962_WRITE_SEQUENCER_248              0x10F8
+#define WM8962_WRITE_SEQUENCER_249              0x10F9
+#define WM8962_WRITE_SEQUENCER_250              0x10FA
+#define WM8962_WRITE_SEQUENCER_251              0x10FB
+#define WM8962_WRITE_SEQUENCER_252              0x10FC
+#define WM8962_WRITE_SEQUENCER_253              0x10FD
+#define WM8962_WRITE_SEQUENCER_254              0x10FE
+#define WM8962_WRITE_SEQUENCER_255              0x10FF
+#define WM8962_WRITE_SEQUENCER_256              0x1100
+#define WM8962_WRITE_SEQUENCER_257              0x1101
+#define WM8962_WRITE_SEQUENCER_258              0x1102
+#define WM8962_WRITE_SEQUENCER_259              0x1103
+#define WM8962_WRITE_SEQUENCER_260              0x1104
+#define WM8962_WRITE_SEQUENCER_261              0x1105
+#define WM8962_WRITE_SEQUENCER_262              0x1106
+#define WM8962_WRITE_SEQUENCER_263              0x1107
+#define WM8962_WRITE_SEQUENCER_264              0x1108
+#define WM8962_WRITE_SEQUENCER_265              0x1109
+#define WM8962_WRITE_SEQUENCER_266              0x110A
+#define WM8962_WRITE_SEQUENCER_267              0x110B
+#define WM8962_WRITE_SEQUENCER_268              0x110C
+#define WM8962_WRITE_SEQUENCER_269              0x110D
+#define WM8962_WRITE_SEQUENCER_270              0x110E
+#define WM8962_WRITE_SEQUENCER_271              0x110F
+#define WM8962_WRITE_SEQUENCER_272              0x1110
+#define WM8962_WRITE_SEQUENCER_273              0x1111
+#define WM8962_WRITE_SEQUENCER_274              0x1112
+#define WM8962_WRITE_SEQUENCER_275              0x1113
+#define WM8962_WRITE_SEQUENCER_276              0x1114
+#define WM8962_WRITE_SEQUENCER_277              0x1115
+#define WM8962_WRITE_SEQUENCER_278              0x1116
+#define WM8962_WRITE_SEQUENCER_279              0x1117
+#define WM8962_WRITE_SEQUENCER_280              0x1118
+#define WM8962_WRITE_SEQUENCER_281              0x1119
+#define WM8962_WRITE_SEQUENCER_282              0x111A
+#define WM8962_WRITE_SEQUENCER_283              0x111B
+#define WM8962_WRITE_SEQUENCER_284              0x111C
+#define WM8962_WRITE_SEQUENCER_285              0x111D
+#define WM8962_WRITE_SEQUENCER_286              0x111E
+#define WM8962_WRITE_SEQUENCER_287              0x111F
+#define WM8962_WRITE_SEQUENCER_288              0x1120
+#define WM8962_WRITE_SEQUENCER_289              0x1121
+#define WM8962_WRITE_SEQUENCER_290              0x1122
+#define WM8962_WRITE_SEQUENCER_291              0x1123
+#define WM8962_WRITE_SEQUENCER_292              0x1124
+#define WM8962_WRITE_SEQUENCER_293              0x1125
+#define WM8962_WRITE_SEQUENCER_294              0x1126
+#define WM8962_WRITE_SEQUENCER_295              0x1127
+#define WM8962_WRITE_SEQUENCER_296              0x1128
+#define WM8962_WRITE_SEQUENCER_297              0x1129
+#define WM8962_WRITE_SEQUENCER_298              0x112A
+#define WM8962_WRITE_SEQUENCER_299              0x112B
+#define WM8962_WRITE_SEQUENCER_300              0x112C
+#define WM8962_WRITE_SEQUENCER_301              0x112D
+#define WM8962_WRITE_SEQUENCER_302              0x112E
+#define WM8962_WRITE_SEQUENCER_303              0x112F
+#define WM8962_WRITE_SEQUENCER_304              0x1130
+#define WM8962_WRITE_SEQUENCER_305              0x1131
+#define WM8962_WRITE_SEQUENCER_306              0x1132
+#define WM8962_WRITE_SEQUENCER_307              0x1133
+#define WM8962_WRITE_SEQUENCER_308              0x1134
+#define WM8962_WRITE_SEQUENCER_309              0x1135
+#define WM8962_WRITE_SEQUENCER_310              0x1136
+#define WM8962_WRITE_SEQUENCER_311              0x1137
+#define WM8962_WRITE_SEQUENCER_312              0x1138
+#define WM8962_WRITE_SEQUENCER_313              0x1139
+#define WM8962_WRITE_SEQUENCER_314              0x113A
+#define WM8962_WRITE_SEQUENCER_315              0x113B
+#define WM8962_WRITE_SEQUENCER_316              0x113C
+#define WM8962_WRITE_SEQUENCER_317              0x113D
+#define WM8962_WRITE_SEQUENCER_318              0x113E
+#define WM8962_WRITE_SEQUENCER_319              0x113F
+#define WM8962_WRITE_SEQUENCER_320              0x1140
+#define WM8962_WRITE_SEQUENCER_321              0x1141
+#define WM8962_WRITE_SEQUENCER_322              0x1142
+#define WM8962_WRITE_SEQUENCER_323              0x1143
+#define WM8962_WRITE_SEQUENCER_324              0x1144
+#define WM8962_WRITE_SEQUENCER_325              0x1145
+#define WM8962_WRITE_SEQUENCER_326              0x1146
+#define WM8962_WRITE_SEQUENCER_327              0x1147
+#define WM8962_WRITE_SEQUENCER_328              0x1148
+#define WM8962_WRITE_SEQUENCER_329              0x1149
+#define WM8962_WRITE_SEQUENCER_330              0x114A
+#define WM8962_WRITE_SEQUENCER_331              0x114B
+#define WM8962_WRITE_SEQUENCER_332              0x114C
+#define WM8962_WRITE_SEQUENCER_333              0x114D
+#define WM8962_WRITE_SEQUENCER_334              0x114E
+#define WM8962_WRITE_SEQUENCER_335              0x114F
+#define WM8962_WRITE_SEQUENCER_336              0x1150
+#define WM8962_WRITE_SEQUENCER_337              0x1151
+#define WM8962_WRITE_SEQUENCER_338              0x1152
+#define WM8962_WRITE_SEQUENCER_339              0x1153
+#define WM8962_WRITE_SEQUENCER_340              0x1154
+#define WM8962_WRITE_SEQUENCER_341              0x1155
+#define WM8962_WRITE_SEQUENCER_342              0x1156
+#define WM8962_WRITE_SEQUENCER_343              0x1157
+#define WM8962_WRITE_SEQUENCER_344              0x1158
+#define WM8962_WRITE_SEQUENCER_345              0x1159
+#define WM8962_WRITE_SEQUENCER_346              0x115A
+#define WM8962_WRITE_SEQUENCER_347              0x115B
+#define WM8962_WRITE_SEQUENCER_348              0x115C
+#define WM8962_WRITE_SEQUENCER_349              0x115D
+#define WM8962_WRITE_SEQUENCER_350              0x115E
+#define WM8962_WRITE_SEQUENCER_351              0x115F
+#define WM8962_WRITE_SEQUENCER_352              0x1160
+#define WM8962_WRITE_SEQUENCER_353              0x1161
+#define WM8962_WRITE_SEQUENCER_354              0x1162
+#define WM8962_WRITE_SEQUENCER_355              0x1163
+#define WM8962_WRITE_SEQUENCER_356              0x1164
+#define WM8962_WRITE_SEQUENCER_357              0x1165
+#define WM8962_WRITE_SEQUENCER_358              0x1166
+#define WM8962_WRITE_SEQUENCER_359              0x1167
+#define WM8962_WRITE_SEQUENCER_360              0x1168
+#define WM8962_WRITE_SEQUENCER_361              0x1169
+#define WM8962_WRITE_SEQUENCER_362              0x116A
+#define WM8962_WRITE_SEQUENCER_363              0x116B
+#define WM8962_WRITE_SEQUENCER_364              0x116C
+#define WM8962_WRITE_SEQUENCER_365              0x116D
+#define WM8962_WRITE_SEQUENCER_366              0x116E
+#define WM8962_WRITE_SEQUENCER_367              0x116F
+#define WM8962_WRITE_SEQUENCER_368              0x1170
+#define WM8962_WRITE_SEQUENCER_369              0x1171
+#define WM8962_WRITE_SEQUENCER_370              0x1172
+#define WM8962_WRITE_SEQUENCER_371              0x1173
+#define WM8962_WRITE_SEQUENCER_372              0x1174
+#define WM8962_WRITE_SEQUENCER_373              0x1175
+#define WM8962_WRITE_SEQUENCER_374              0x1176
+#define WM8962_WRITE_SEQUENCER_375              0x1177
+#define WM8962_WRITE_SEQUENCER_376              0x1178
+#define WM8962_WRITE_SEQUENCER_377              0x1179
+#define WM8962_WRITE_SEQUENCER_378              0x117A
+#define WM8962_WRITE_SEQUENCER_379              0x117B
+#define WM8962_WRITE_SEQUENCER_380              0x117C
+#define WM8962_WRITE_SEQUENCER_381              0x117D
+#define WM8962_WRITE_SEQUENCER_382              0x117E
+#define WM8962_WRITE_SEQUENCER_383              0x117F
+#define WM8962_WRITE_SEQUENCER_384              0x1180
+#define WM8962_WRITE_SEQUENCER_385              0x1181
+#define WM8962_WRITE_SEQUENCER_386              0x1182
+#define WM8962_WRITE_SEQUENCER_387              0x1183
+#define WM8962_WRITE_SEQUENCER_388              0x1184
+#define WM8962_WRITE_SEQUENCER_389              0x1185
+#define WM8962_WRITE_SEQUENCER_390              0x1186
+#define WM8962_WRITE_SEQUENCER_391              0x1187
+#define WM8962_WRITE_SEQUENCER_392              0x1188
+#define WM8962_WRITE_SEQUENCER_393              0x1189
+#define WM8962_WRITE_SEQUENCER_394              0x118A
+#define WM8962_WRITE_SEQUENCER_395              0x118B
+#define WM8962_WRITE_SEQUENCER_396              0x118C
+#define WM8962_WRITE_SEQUENCER_397              0x118D
+#define WM8962_WRITE_SEQUENCER_398              0x118E
+#define WM8962_WRITE_SEQUENCER_399              0x118F
+#define WM8962_WRITE_SEQUENCER_400              0x1190
+#define WM8962_WRITE_SEQUENCER_401              0x1191
+#define WM8962_WRITE_SEQUENCER_402              0x1192
+#define WM8962_WRITE_SEQUENCER_403              0x1193
+#define WM8962_WRITE_SEQUENCER_404              0x1194
+#define WM8962_WRITE_SEQUENCER_405              0x1195
+#define WM8962_WRITE_SEQUENCER_406              0x1196
+#define WM8962_WRITE_SEQUENCER_407              0x1197
+#define WM8962_WRITE_SEQUENCER_408              0x1198
+#define WM8962_WRITE_SEQUENCER_409              0x1199
+#define WM8962_WRITE_SEQUENCER_410              0x119A
+#define WM8962_WRITE_SEQUENCER_411              0x119B
+#define WM8962_WRITE_SEQUENCER_412              0x119C
+#define WM8962_WRITE_SEQUENCER_413              0x119D
+#define WM8962_WRITE_SEQUENCER_414              0x119E
+#define WM8962_WRITE_SEQUENCER_415              0x119F
+#define WM8962_WRITE_SEQUENCER_416              0x11A0
+#define WM8962_WRITE_SEQUENCER_417              0x11A1
+#define WM8962_WRITE_SEQUENCER_418              0x11A2
+#define WM8962_WRITE_SEQUENCER_419              0x11A3
+#define WM8962_WRITE_SEQUENCER_420              0x11A4
+#define WM8962_WRITE_SEQUENCER_421              0x11A5
+#define WM8962_WRITE_SEQUENCER_422              0x11A6
+#define WM8962_WRITE_SEQUENCER_423              0x11A7
+#define WM8962_WRITE_SEQUENCER_424              0x11A8
+#define WM8962_WRITE_SEQUENCER_425              0x11A9
+#define WM8962_WRITE_SEQUENCER_426              0x11AA
+#define WM8962_WRITE_SEQUENCER_427              0x11AB
+#define WM8962_WRITE_SEQUENCER_428              0x11AC
+#define WM8962_WRITE_SEQUENCER_429              0x11AD
+#define WM8962_WRITE_SEQUENCER_430              0x11AE
+#define WM8962_WRITE_SEQUENCER_431              0x11AF
+#define WM8962_WRITE_SEQUENCER_432              0x11B0
+#define WM8962_WRITE_SEQUENCER_433              0x11B1
+#define WM8962_WRITE_SEQUENCER_434              0x11B2
+#define WM8962_WRITE_SEQUENCER_435              0x11B3
+#define WM8962_WRITE_SEQUENCER_436              0x11B4
+#define WM8962_WRITE_SEQUENCER_437              0x11B5
+#define WM8962_WRITE_SEQUENCER_438              0x11B6
+#define WM8962_WRITE_SEQUENCER_439              0x11B7
+#define WM8962_WRITE_SEQUENCER_440              0x11B8
+#define WM8962_WRITE_SEQUENCER_441              0x11B9
+#define WM8962_WRITE_SEQUENCER_442              0x11BA
+#define WM8962_WRITE_SEQUENCER_443              0x11BB
+#define WM8962_WRITE_SEQUENCER_444              0x11BC
+#define WM8962_WRITE_SEQUENCER_445              0x11BD
+#define WM8962_WRITE_SEQUENCER_446              0x11BE
+#define WM8962_WRITE_SEQUENCER_447              0x11BF
+#define WM8962_WRITE_SEQUENCER_448              0x11C0
+#define WM8962_WRITE_SEQUENCER_449              0x11C1
+#define WM8962_WRITE_SEQUENCER_450              0x11C2
+#define WM8962_WRITE_SEQUENCER_451              0x11C3
+#define WM8962_WRITE_SEQUENCER_452              0x11C4
+#define WM8962_WRITE_SEQUENCER_453              0x11C5
+#define WM8962_WRITE_SEQUENCER_454              0x11C6
+#define WM8962_WRITE_SEQUENCER_455              0x11C7
+#define WM8962_WRITE_SEQUENCER_456              0x11C8
+#define WM8962_WRITE_SEQUENCER_457              0x11C9
+#define WM8962_WRITE_SEQUENCER_458              0x11CA
+#define WM8962_WRITE_SEQUENCER_459              0x11CB
+#define WM8962_WRITE_SEQUENCER_460              0x11CC
+#define WM8962_WRITE_SEQUENCER_461              0x11CD
+#define WM8962_WRITE_SEQUENCER_462              0x11CE
+#define WM8962_WRITE_SEQUENCER_463              0x11CF
+#define WM8962_WRITE_SEQUENCER_464              0x11D0
+#define WM8962_WRITE_SEQUENCER_465              0x11D1
+#define WM8962_WRITE_SEQUENCER_466              0x11D2
+#define WM8962_WRITE_SEQUENCER_467              0x11D3
+#define WM8962_WRITE_SEQUENCER_468              0x11D4
+#define WM8962_WRITE_SEQUENCER_469              0x11D5
+#define WM8962_WRITE_SEQUENCER_470              0x11D6
+#define WM8962_WRITE_SEQUENCER_471              0x11D7
+#define WM8962_WRITE_SEQUENCER_472              0x11D8
+#define WM8962_WRITE_SEQUENCER_473              0x11D9
+#define WM8962_WRITE_SEQUENCER_474              0x11DA
+#define WM8962_WRITE_SEQUENCER_475              0x11DB
+#define WM8962_WRITE_SEQUENCER_476              0x11DC
+#define WM8962_WRITE_SEQUENCER_477              0x11DD
+#define WM8962_WRITE_SEQUENCER_478              0x11DE
+#define WM8962_WRITE_SEQUENCER_479              0x11DF
+#define WM8962_WRITE_SEQUENCER_480              0x11E0
+#define WM8962_WRITE_SEQUENCER_481              0x11E1
+#define WM8962_WRITE_SEQUENCER_482              0x11E2
+#define WM8962_WRITE_SEQUENCER_483              0x11E3
+#define WM8962_WRITE_SEQUENCER_484              0x11E4
+#define WM8962_WRITE_SEQUENCER_485              0x11E5
+#define WM8962_WRITE_SEQUENCER_486              0x11E6
+#define WM8962_WRITE_SEQUENCER_487              0x11E7
+#define WM8962_WRITE_SEQUENCER_488              0x11E8
+#define WM8962_WRITE_SEQUENCER_489              0x11E9
+#define WM8962_WRITE_SEQUENCER_490              0x11EA
+#define WM8962_WRITE_SEQUENCER_491              0x11EB
+#define WM8962_WRITE_SEQUENCER_492              0x11EC
+#define WM8962_WRITE_SEQUENCER_493              0x11ED
+#define WM8962_WRITE_SEQUENCER_494              0x11EE
+#define WM8962_WRITE_SEQUENCER_495              0x11EF
+#define WM8962_WRITE_SEQUENCER_496              0x11F0
+#define WM8962_WRITE_SEQUENCER_497              0x11F1
+#define WM8962_WRITE_SEQUENCER_498              0x11F2
+#define WM8962_WRITE_SEQUENCER_499              0x11F3
+#define WM8962_WRITE_SEQUENCER_500              0x11F4
+#define WM8962_WRITE_SEQUENCER_501              0x11F5
+#define WM8962_WRITE_SEQUENCER_502              0x11F6
+#define WM8962_WRITE_SEQUENCER_503              0x11F7
+#define WM8962_WRITE_SEQUENCER_504              0x11F8
+#define WM8962_WRITE_SEQUENCER_505              0x11F9
+#define WM8962_WRITE_SEQUENCER_506              0x11FA
+#define WM8962_WRITE_SEQUENCER_507              0x11FB
+#define WM8962_WRITE_SEQUENCER_508              0x11FC
+#define WM8962_WRITE_SEQUENCER_509              0x11FD
+#define WM8962_WRITE_SEQUENCER_510              0x11FE
+#define WM8962_WRITE_SEQUENCER_511              0x11FF
+#define WM8962_DSP2_INSTRUCTION_RAM_0           0x2000
+#define WM8962_DSP2_ADDRESS_RAM_2               0x2400
+#define WM8962_DSP2_ADDRESS_RAM_1               0x2401
+#define WM8962_DSP2_ADDRESS_RAM_0               0x2402
+#define WM8962_DSP2_DATA1_RAM_1                 0x3000
+#define WM8962_DSP2_DATA1_RAM_0                 0x3001
+#define WM8962_DSP2_DATA2_RAM_1                 0x3400
+#define WM8962_DSP2_DATA2_RAM_0                 0x3401
+#define WM8962_DSP2_DATA3_RAM_1                 0x3800
+#define WM8962_DSP2_DATA3_RAM_0                 0x3801
+#define WM8962_DSP2_COEFF_RAM_0                 0x3C00
+#define WM8962_RETUNEADC_SHARED_COEFF_1         0x4000
+#define WM8962_RETUNEADC_SHARED_COEFF_0         0x4001
+#define WM8962_RETUNEDAC_SHARED_COEFF_1         0x4002
+#define WM8962_RETUNEDAC_SHARED_COEFF_0         0x4003
+#define WM8962_SOUNDSTAGE_ENABLES_1             0x4004
+#define WM8962_SOUNDSTAGE_ENABLES_0             0x4005
+#define WM8962_HDBASS_AI_1                      0x4200
+#define WM8962_HDBASS_AI_0                      0x4201
+#define WM8962_HDBASS_AR_1                      0x4202
+#define WM8962_HDBASS_AR_0                      0x4203
+#define WM8962_HDBASS_B_1                       0x4204
+#define WM8962_HDBASS_B_0                       0x4205
+#define WM8962_HDBASS_K_1                       0x4206
+#define WM8962_HDBASS_K_0                       0x4207
+#define WM8962_HDBASS_N1_1                      0x4208
+#define WM8962_HDBASS_N1_0                      0x4209
+#define WM8962_HDBASS_N2_1                      0x420A
+#define WM8962_HDBASS_N2_0                      0x420B
+#define WM8962_HDBASS_N3_1                      0x420C
+#define WM8962_HDBASS_N3_0                      0x420D
+#define WM8962_HDBASS_N4_1                      0x420E
+#define WM8962_HDBASS_N4_0                      0x420F
+#define WM8962_HDBASS_N5_1                      0x4210
+#define WM8962_HDBASS_N5_0                      0x4211
+#define WM8962_HDBASS_X1_1                      0x4212
+#define WM8962_HDBASS_X1_0                      0x4213
+#define WM8962_HDBASS_X2_1                      0x4214
+#define WM8962_HDBASS_X2_0                      0x4215
+#define WM8962_HDBASS_X3_1                      0x4216
+#define WM8962_HDBASS_X3_0                      0x4217
+#define WM8962_HDBASS_ATK_1                     0x4218
+#define WM8962_HDBASS_ATK_0                     0x4219
+#define WM8962_HDBASS_DCY_1                     0x421A
+#define WM8962_HDBASS_DCY_0                     0x421B
+#define WM8962_HDBASS_PG_1                      0x421C
+#define WM8962_HDBASS_PG_0                      0x421D
+#define WM8962_HPF_C_1                          0x4400
+#define WM8962_HPF_C_0                          0x4401
+#define WM8962_ADCL_RETUNE_C1_1                 0x4600
+#define WM8962_ADCL_RETUNE_C1_0                 0x4601
+#define WM8962_ADCL_RETUNE_C2_1                 0x4602
+#define WM8962_ADCL_RETUNE_C2_0                 0x4603
+#define WM8962_ADCL_RETUNE_C3_1                 0x4604
+#define WM8962_ADCL_RETUNE_C3_0                 0x4605
+#define WM8962_ADCL_RETUNE_C4_1                 0x4606
+#define WM8962_ADCL_RETUNE_C4_0                 0x4607
+#define WM8962_ADCL_RETUNE_C5_1                 0x4608
+#define WM8962_ADCL_RETUNE_C5_0                 0x4609
+#define WM8962_ADCL_RETUNE_C6_1                 0x460A
+#define WM8962_ADCL_RETUNE_C6_0                 0x460B
+#define WM8962_ADCL_RETUNE_C7_1                 0x460C
+#define WM8962_ADCL_RETUNE_C7_0                 0x460D
+#define WM8962_ADCL_RETUNE_C8_1                 0x460E
+#define WM8962_ADCL_RETUNE_C8_0                 0x460F
+#define WM8962_ADCL_RETUNE_C9_1                 0x4610
+#define WM8962_ADCL_RETUNE_C9_0                 0x4611
+#define WM8962_ADCL_RETUNE_C10_1                0x4612
+#define WM8962_ADCL_RETUNE_C10_0                0x4613
+#define WM8962_ADCL_RETUNE_C11_1                0x4614
+#define WM8962_ADCL_RETUNE_C11_0                0x4615
+#define WM8962_ADCL_RETUNE_C12_1                0x4616
+#define WM8962_ADCL_RETUNE_C12_0                0x4617
+#define WM8962_ADCL_RETUNE_C13_1                0x4618
+#define WM8962_ADCL_RETUNE_C13_0                0x4619
+#define WM8962_ADCL_RETUNE_C14_1                0x461A
+#define WM8962_ADCL_RETUNE_C14_0                0x461B
+#define WM8962_ADCL_RETUNE_C15_1                0x461C
+#define WM8962_ADCL_RETUNE_C15_0                0x461D
+#define WM8962_ADCL_RETUNE_C16_1                0x461E
+#define WM8962_ADCL_RETUNE_C16_0                0x461F
+#define WM8962_ADCL_RETUNE_C17_1                0x4620
+#define WM8962_ADCL_RETUNE_C17_0                0x4621
+#define WM8962_ADCL_RETUNE_C18_1                0x4622
+#define WM8962_ADCL_RETUNE_C18_0                0x4623
+#define WM8962_ADCL_RETUNE_C19_1                0x4624
+#define WM8962_ADCL_RETUNE_C19_0                0x4625
+#define WM8962_ADCL_RETUNE_C20_1                0x4626
+#define WM8962_ADCL_RETUNE_C20_0                0x4627
+#define WM8962_ADCL_RETUNE_C21_1                0x4628
+#define WM8962_ADCL_RETUNE_C21_0                0x4629
+#define WM8962_ADCL_RETUNE_C22_1                0x462A
+#define WM8962_ADCL_RETUNE_C22_0                0x462B
+#define WM8962_ADCL_RETUNE_C23_1                0x462C
+#define WM8962_ADCL_RETUNE_C23_0                0x462D
+#define WM8962_ADCL_RETUNE_C24_1                0x462E
+#define WM8962_ADCL_RETUNE_C24_0                0x462F
+#define WM8962_ADCL_RETUNE_C25_1                0x4630
+#define WM8962_ADCL_RETUNE_C25_0                0x4631
+#define WM8962_ADCL_RETUNE_C26_1                0x4632
+#define WM8962_ADCL_RETUNE_C26_0                0x4633
+#define WM8962_ADCL_RETUNE_C27_1                0x4634
+#define WM8962_ADCL_RETUNE_C27_0                0x4635
+#define WM8962_ADCL_RETUNE_C28_1                0x4636
+#define WM8962_ADCL_RETUNE_C28_0                0x4637
+#define WM8962_ADCL_RETUNE_C29_1                0x4638
+#define WM8962_ADCL_RETUNE_C29_0                0x4639
+#define WM8962_ADCL_RETUNE_C30_1                0x463A
+#define WM8962_ADCL_RETUNE_C30_0                0x463B
+#define WM8962_ADCL_RETUNE_C31_1                0x463C
+#define WM8962_ADCL_RETUNE_C31_0                0x463D
+#define WM8962_ADCL_RETUNE_C32_1                0x463E
+#define WM8962_ADCL_RETUNE_C32_0                0x463F
+#define WM8962_RETUNEADC_PG2_1                  0x4800
+#define WM8962_RETUNEADC_PG2_0                  0x4801
+#define WM8962_RETUNEADC_PG_1                   0x4802
+#define WM8962_RETUNEADC_PG_0                   0x4803
+#define WM8962_ADCR_RETUNE_C1_1                 0x4A00
+#define WM8962_ADCR_RETUNE_C1_0                 0x4A01
+#define WM8962_ADCR_RETUNE_C2_1                 0x4A02
+#define WM8962_ADCR_RETUNE_C2_0                 0x4A03
+#define WM8962_ADCR_RETUNE_C3_1                 0x4A04
+#define WM8962_ADCR_RETUNE_C3_0                 0x4A05
+#define WM8962_ADCR_RETUNE_C4_1                 0x4A06
+#define WM8962_ADCR_RETUNE_C4_0                 0x4A07
+#define WM8962_ADCR_RETUNE_C5_1                 0x4A08
+#define WM8962_ADCR_RETUNE_C5_0                 0x4A09
+#define WM8962_ADCR_RETUNE_C6_1                 0x4A0A
+#define WM8962_ADCR_RETUNE_C6_0                 0x4A0B
+#define WM8962_ADCR_RETUNE_C7_1                 0x4A0C
+#define WM8962_ADCR_RETUNE_C7_0                 0x4A0D
+#define WM8962_ADCR_RETUNE_C8_1                 0x4A0E
+#define WM8962_ADCR_RETUNE_C8_0                 0x4A0F
+#define WM8962_ADCR_RETUNE_C9_1                 0x4A10
+#define WM8962_ADCR_RETUNE_C9_0                 0x4A11
+#define WM8962_ADCR_RETUNE_C10_1                0x4A12
+#define WM8962_ADCR_RETUNE_C10_0                0x4A13
+#define WM8962_ADCR_RETUNE_C11_1                0x4A14
+#define WM8962_ADCR_RETUNE_C11_0                0x4A15
+#define WM8962_ADCR_RETUNE_C12_1                0x4A16
+#define WM8962_ADCR_RETUNE_C12_0                0x4A17
+#define WM8962_ADCR_RETUNE_C13_1                0x4A18
+#define WM8962_ADCR_RETUNE_C13_0                0x4A19
+#define WM8962_ADCR_RETUNE_C14_1                0x4A1A
+#define WM8962_ADCR_RETUNE_C14_0                0x4A1B
+#define WM8962_ADCR_RETUNE_C15_1                0x4A1C
+#define WM8962_ADCR_RETUNE_C15_0                0x4A1D
+#define WM8962_ADCR_RETUNE_C16_1                0x4A1E
+#define WM8962_ADCR_RETUNE_C16_0                0x4A1F
+#define WM8962_ADCR_RETUNE_C17_1                0x4A20
+#define WM8962_ADCR_RETUNE_C17_0                0x4A21
+#define WM8962_ADCR_RETUNE_C18_1                0x4A22
+#define WM8962_ADCR_RETUNE_C18_0                0x4A23
+#define WM8962_ADCR_RETUNE_C19_1                0x4A24
+#define WM8962_ADCR_RETUNE_C19_0                0x4A25
+#define WM8962_ADCR_RETUNE_C20_1                0x4A26
+#define WM8962_ADCR_RETUNE_C20_0                0x4A27
+#define WM8962_ADCR_RETUNE_C21_1                0x4A28
+#define WM8962_ADCR_RETUNE_C21_0                0x4A29
+#define WM8962_ADCR_RETUNE_C22_1                0x4A2A
+#define WM8962_ADCR_RETUNE_C22_0                0x4A2B
+#define WM8962_ADCR_RETUNE_C23_1                0x4A2C
+#define WM8962_ADCR_RETUNE_C23_0                0x4A2D
+#define WM8962_ADCR_RETUNE_C24_1                0x4A2E
+#define WM8962_ADCR_RETUNE_C24_0                0x4A2F
+#define WM8962_ADCR_RETUNE_C25_1                0x4A30
+#define WM8962_ADCR_RETUNE_C25_0                0x4A31
+#define WM8962_ADCR_RETUNE_C26_1                0x4A32
+#define WM8962_ADCR_RETUNE_C26_0                0x4A33
+#define WM8962_ADCR_RETUNE_C27_1                0x4A34
+#define WM8962_ADCR_RETUNE_C27_0                0x4A35
+#define WM8962_ADCR_RETUNE_C28_1                0x4A36
+#define WM8962_ADCR_RETUNE_C28_0                0x4A37
+#define WM8962_ADCR_RETUNE_C29_1                0x4A38
+#define WM8962_ADCR_RETUNE_C29_0                0x4A39
+#define WM8962_ADCR_RETUNE_C30_1                0x4A3A
+#define WM8962_ADCR_RETUNE_C30_0                0x4A3B
+#define WM8962_ADCR_RETUNE_C31_1                0x4A3C
+#define WM8962_ADCR_RETUNE_C31_0                0x4A3D
+#define WM8962_ADCR_RETUNE_C32_1                0x4A3E
+#define WM8962_ADCR_RETUNE_C32_0                0x4A3F
+#define WM8962_DACL_RETUNE_C1_1                 0x4C00
+#define WM8962_DACL_RETUNE_C1_0                 0x4C01
+#define WM8962_DACL_RETUNE_C2_1                 0x4C02
+#define WM8962_DACL_RETUNE_C2_0                 0x4C03
+#define WM8962_DACL_RETUNE_C3_1                 0x4C04
+#define WM8962_DACL_RETUNE_C3_0                 0x4C05
+#define WM8962_DACL_RETUNE_C4_1                 0x4C06
+#define WM8962_DACL_RETUNE_C4_0                 0x4C07
+#define WM8962_DACL_RETUNE_C5_1                 0x4C08
+#define WM8962_DACL_RETUNE_C5_0                 0x4C09
+#define WM8962_DACL_RETUNE_C6_1                 0x4C0A
+#define WM8962_DACL_RETUNE_C6_0                 0x4C0B
+#define WM8962_DACL_RETUNE_C7_1                 0x4C0C
+#define WM8962_DACL_RETUNE_C7_0                 0x4C0D
+#define WM8962_DACL_RETUNE_C8_1                 0x4C0E
+#define WM8962_DACL_RETUNE_C8_0                 0x4C0F
+#define WM8962_DACL_RETUNE_C9_1                 0x4C10
+#define WM8962_DACL_RETUNE_C9_0                 0x4C11
+#define WM8962_DACL_RETUNE_C10_1                0x4C12
+#define WM8962_DACL_RETUNE_C10_0                0x4C13
+#define WM8962_DACL_RETUNE_C11_1                0x4C14
+#define WM8962_DACL_RETUNE_C11_0                0x4C15
+#define WM8962_DACL_RETUNE_C12_1                0x4C16
+#define WM8962_DACL_RETUNE_C12_0                0x4C17
+#define WM8962_DACL_RETUNE_C13_1                0x4C18
+#define WM8962_DACL_RETUNE_C13_0                0x4C19
+#define WM8962_DACL_RETUNE_C14_1                0x4C1A
+#define WM8962_DACL_RETUNE_C14_0                0x4C1B
+#define WM8962_DACL_RETUNE_C15_1                0x4C1C
+#define WM8962_DACL_RETUNE_C15_0                0x4C1D
+#define WM8962_DACL_RETUNE_C16_1                0x4C1E
+#define WM8962_DACL_RETUNE_C16_0                0x4C1F
+#define WM8962_DACL_RETUNE_C17_1                0x4C20
+#define WM8962_DACL_RETUNE_C17_0                0x4C21
+#define WM8962_DACL_RETUNE_C18_1                0x4C22
+#define WM8962_DACL_RETUNE_C18_0                0x4C23
+#define WM8962_DACL_RETUNE_C19_1                0x4C24
+#define WM8962_DACL_RETUNE_C19_0                0x4C25
+#define WM8962_DACL_RETUNE_C20_1                0x4C26
+#define WM8962_DACL_RETUNE_C20_0                0x4C27
+#define WM8962_DACL_RETUNE_C21_1                0x4C28
+#define WM8962_DACL_RETUNE_C21_0                0x4C29
+#define WM8962_DACL_RETUNE_C22_1                0x4C2A
+#define WM8962_DACL_RETUNE_C22_0                0x4C2B
+#define WM8962_DACL_RETUNE_C23_1                0x4C2C
+#define WM8962_DACL_RETUNE_C23_0                0x4C2D
+#define WM8962_DACL_RETUNE_C24_1                0x4C2E
+#define WM8962_DACL_RETUNE_C24_0                0x4C2F
+#define WM8962_DACL_RETUNE_C25_1                0x4C30
+#define WM8962_DACL_RETUNE_C25_0                0x4C31
+#define WM8962_DACL_RETUNE_C26_1                0x4C32
+#define WM8962_DACL_RETUNE_C26_0                0x4C33
+#define WM8962_DACL_RETUNE_C27_1                0x4C34
+#define WM8962_DACL_RETUNE_C27_0                0x4C35
+#define WM8962_DACL_RETUNE_C28_1                0x4C36
+#define WM8962_DACL_RETUNE_C28_0                0x4C37
+#define WM8962_DACL_RETUNE_C29_1                0x4C38
+#define WM8962_DACL_RETUNE_C29_0                0x4C39
+#define WM8962_DACL_RETUNE_C30_1                0x4C3A
+#define WM8962_DACL_RETUNE_C30_0                0x4C3B
+#define WM8962_DACL_RETUNE_C31_1                0x4C3C
+#define WM8962_DACL_RETUNE_C31_0                0x4C3D
+#define WM8962_DACL_RETUNE_C32_1                0x4C3E
+#define WM8962_DACL_RETUNE_C32_0                0x4C3F
+#define WM8962_RETUNEDAC_PG2_1                  0x4E00
+#define WM8962_RETUNEDAC_PG2_0                  0x4E01
+#define WM8962_RETUNEDAC_PG_1                   0x4E02
+#define WM8962_RETUNEDAC_PG_0                   0x4E03
+#define WM8962_DACR_RETUNE_C1_1                 0x5000
+#define WM8962_DACR_RETUNE_C1_0                 0x5001
+#define WM8962_DACR_RETUNE_C2_1                 0x5002
+#define WM8962_DACR_RETUNE_C2_0                 0x5003
+#define WM8962_DACR_RETUNE_C3_1                 0x5004
+#define WM8962_DACR_RETUNE_C3_0                 0x5005
+#define WM8962_DACR_RETUNE_C4_1                 0x5006
+#define WM8962_DACR_RETUNE_C4_0                 0x5007
+#define WM8962_DACR_RETUNE_C5_1                 0x5008
+#define WM8962_DACR_RETUNE_C5_0                 0x5009
+#define WM8962_DACR_RETUNE_C6_1                 0x500A
+#define WM8962_DACR_RETUNE_C6_0                 0x500B
+#define WM8962_DACR_RETUNE_C7_1                 0x500C
+#define WM8962_DACR_RETUNE_C7_0                 0x500D
+#define WM8962_DACR_RETUNE_C8_1                 0x500E
+#define WM8962_DACR_RETUNE_C8_0                 0x500F
+#define WM8962_DACR_RETUNE_C9_1                 0x5010
+#define WM8962_DACR_RETUNE_C9_0                 0x5011
+#define WM8962_DACR_RETUNE_C10_1                0x5012
+#define WM8962_DACR_RETUNE_C10_0                0x5013
+#define WM8962_DACR_RETUNE_C11_1                0x5014
+#define WM8962_DACR_RETUNE_C11_0                0x5015
+#define WM8962_DACR_RETUNE_C12_1                0x5016
+#define WM8962_DACR_RETUNE_C12_0                0x5017
+#define WM8962_DACR_RETUNE_C13_1                0x5018
+#define WM8962_DACR_RETUNE_C13_0                0x5019
+#define WM8962_DACR_RETUNE_C14_1                0x501A
+#define WM8962_DACR_RETUNE_C14_0                0x501B
+#define WM8962_DACR_RETUNE_C15_1                0x501C
+#define WM8962_DACR_RETUNE_C15_0                0x501D
+#define WM8962_DACR_RETUNE_C16_1                0x501E
+#define WM8962_DACR_RETUNE_C16_0                0x501F
+#define WM8962_DACR_RETUNE_C17_1                0x5020
+#define WM8962_DACR_RETUNE_C17_0                0x5021
+#define WM8962_DACR_RETUNE_C18_1                0x5022
+#define WM8962_DACR_RETUNE_C18_0                0x5023
+#define WM8962_DACR_RETUNE_C19_1                0x5024
+#define WM8962_DACR_RETUNE_C19_0                0x5025
+#define WM8962_DACR_RETUNE_C20_1                0x5026
+#define WM8962_DACR_RETUNE_C20_0                0x5027
+#define WM8962_DACR_RETUNE_C21_1                0x5028
+#define WM8962_DACR_RETUNE_C21_0                0x5029
+#define WM8962_DACR_RETUNE_C22_1                0x502A
+#define WM8962_DACR_RETUNE_C22_0                0x502B
+#define WM8962_DACR_RETUNE_C23_1                0x502C
+#define WM8962_DACR_RETUNE_C23_0                0x502D
+#define WM8962_DACR_RETUNE_C24_1                0x502E
+#define WM8962_DACR_RETUNE_C24_0                0x502F
+#define WM8962_DACR_RETUNE_C25_1                0x5030
+#define WM8962_DACR_RETUNE_C25_0                0x5031
+#define WM8962_DACR_RETUNE_C26_1                0x5032
+#define WM8962_DACR_RETUNE_C26_0                0x5033
+#define WM8962_DACR_RETUNE_C27_1                0x5034
+#define WM8962_DACR_RETUNE_C27_0                0x5035
+#define WM8962_DACR_RETUNE_C28_1                0x5036
+#define WM8962_DACR_RETUNE_C28_0                0x5037
+#define WM8962_DACR_RETUNE_C29_1                0x5038
+#define WM8962_DACR_RETUNE_C29_0                0x5039
+#define WM8962_DACR_RETUNE_C30_1                0x503A
+#define WM8962_DACR_RETUNE_C30_0                0x503B
+#define WM8962_DACR_RETUNE_C31_1                0x503C
+#define WM8962_DACR_RETUNE_C31_0                0x503D
+#define WM8962_DACR_RETUNE_C32_1                0x503E
+#define WM8962_DACR_RETUNE_C32_0                0x503F
+#define WM8962_VSS_XHD2_1                       0x5200
+#define WM8962_VSS_XHD2_0                       0x5201
+#define WM8962_VSS_XHD3_1                       0x5202
+#define WM8962_VSS_XHD3_0                       0x5203
+#define WM8962_VSS_XHN1_1                       0x5204
+#define WM8962_VSS_XHN1_0                       0x5205
+#define WM8962_VSS_XHN2_1                       0x5206
+#define WM8962_VSS_XHN2_0                       0x5207
+#define WM8962_VSS_XHN3_1                       0x5208
+#define WM8962_VSS_XHN3_0                       0x5209
+#define WM8962_VSS_XLA_1                        0x520A
+#define WM8962_VSS_XLA_0                        0x520B
+#define WM8962_VSS_XLB_1                        0x520C
+#define WM8962_VSS_XLB_0                        0x520D
+#define WM8962_VSS_XLG_1                        0x520E
+#define WM8962_VSS_XLG_0                        0x520F
+#define WM8962_VSS_PG2_1                        0x5210
+#define WM8962_VSS_PG2_0                        0x5211
+#define WM8962_VSS_PG_1                         0x5212
+#define WM8962_VSS_PG_0                         0x5213
+#define WM8962_VSS_XTD1_1                       0x5214
+#define WM8962_VSS_XTD1_0                       0x5215
+#define WM8962_VSS_XTD2_1                       0x5216
+#define WM8962_VSS_XTD2_0                       0x5217
+#define WM8962_VSS_XTD3_1                       0x5218
+#define WM8962_VSS_XTD3_0                       0x5219
+#define WM8962_VSS_XTD4_1                       0x521A
+#define WM8962_VSS_XTD4_0                       0x521B
+#define WM8962_VSS_XTD5_1                       0x521C
+#define WM8962_VSS_XTD5_0                       0x521D
+#define WM8962_VSS_XTD6_1                       0x521E
+#define WM8962_VSS_XTD6_0                       0x521F
+#define WM8962_VSS_XTD7_1                       0x5220
+#define WM8962_VSS_XTD7_0                       0x5221
+#define WM8962_VSS_XTD8_1                       0x5222
+#define WM8962_VSS_XTD8_0                       0x5223
+#define WM8962_VSS_XTD9_1                       0x5224
+#define WM8962_VSS_XTD9_0                       0x5225
+#define WM8962_VSS_XTD10_1                      0x5226
+#define WM8962_VSS_XTD10_0                      0x5227
+#define WM8962_VSS_XTD11_1                      0x5228
+#define WM8962_VSS_XTD11_0                      0x5229
+#define WM8962_VSS_XTD12_1                      0x522A
+#define WM8962_VSS_XTD12_0                      0x522B
+#define WM8962_VSS_XTD13_1                      0x522C
+#define WM8962_VSS_XTD13_0                      0x522D
+#define WM8962_VSS_XTD14_1                      0x522E
+#define WM8962_VSS_XTD14_0                      0x522F
+#define WM8962_VSS_XTD15_1                      0x5230
+#define WM8962_VSS_XTD15_0                      0x5231
+#define WM8962_VSS_XTD16_1                      0x5232
+#define WM8962_VSS_XTD16_0                      0x5233
+#define WM8962_VSS_XTD17_1                      0x5234
+#define WM8962_VSS_XTD17_0                      0x5235
+#define WM8962_VSS_XTD18_1                      0x5236
+#define WM8962_VSS_XTD18_0                      0x5237
+#define WM8962_VSS_XTD19_1                      0x5238
+#define WM8962_VSS_XTD19_0                      0x5239
+#define WM8962_VSS_XTD20_1                      0x523A
+#define WM8962_VSS_XTD20_0                      0x523B
+#define WM8962_VSS_XTD21_1                      0x523C
+#define WM8962_VSS_XTD21_0                      0x523D
+#define WM8962_VSS_XTD22_1                      0x523E
+#define WM8962_VSS_XTD22_0                      0x523F
+#define WM8962_VSS_XTD23_1                      0x5240
+#define WM8962_VSS_XTD23_0                      0x5241
+#define WM8962_VSS_XTD24_1                      0x5242
+#define WM8962_VSS_XTD24_0                      0x5243
+#define WM8962_VSS_XTD25_1                      0x5244
+#define WM8962_VSS_XTD25_0                      0x5245
+#define WM8962_VSS_XTD26_1                      0x5246
+#define WM8962_VSS_XTD26_0                      0x5247
+#define WM8962_VSS_XTD27_1                      0x5248
+#define WM8962_VSS_XTD27_0                      0x5249
+#define WM8962_VSS_XTD28_1                      0x524A
+#define WM8962_VSS_XTD28_0                      0x524B
+#define WM8962_VSS_XTD29_1                      0x524C
+#define WM8962_VSS_XTD29_0                      0x524D
+#define WM8962_VSS_XTD30_1                      0x524E
+#define WM8962_VSS_XTD30_0                      0x524F
+#define WM8962_VSS_XTD31_1                      0x5250
+#define WM8962_VSS_XTD31_0                      0x5251
+#define WM8962_VSS_XTD32_1                      0x5252
+#define WM8962_VSS_XTD32_0                      0x5253
+#define WM8962_VSS_XTS1_1                       0x5254
+#define WM8962_VSS_XTS1_0                       0x5255
+#define WM8962_VSS_XTS2_1                       0x5256
+#define WM8962_VSS_XTS2_0                       0x5257
+#define WM8962_VSS_XTS3_1                       0x5258
+#define WM8962_VSS_XTS3_0                       0x5259
+#define WM8962_VSS_XTS4_1                       0x525A
+#define WM8962_VSS_XTS4_0                       0x525B
+#define WM8962_VSS_XTS5_1                       0x525C
+#define WM8962_VSS_XTS5_0                       0x525D
+#define WM8962_VSS_XTS6_1                       0x525E
+#define WM8962_VSS_XTS6_0                       0x525F
+#define WM8962_VSS_XTS7_1                       0x5260
+#define WM8962_VSS_XTS7_0                       0x5261
+#define WM8962_VSS_XTS8_1                       0x5262
+#define WM8962_VSS_XTS8_0                       0x5263
+#define WM8962_VSS_XTS9_1                       0x5264
+#define WM8962_VSS_XTS9_0                       0x5265
+#define WM8962_VSS_XTS10_1                      0x5266
+#define WM8962_VSS_XTS10_0                      0x5267
+#define WM8962_VSS_XTS11_1                      0x5268
+#define WM8962_VSS_XTS11_0                      0x5269
+#define WM8962_VSS_XTS12_1                      0x526A
+#define WM8962_VSS_XTS12_0                      0x526B
+#define WM8962_VSS_XTS13_1                      0x526C
+#define WM8962_VSS_XTS13_0                      0x526D
+#define WM8962_VSS_XTS14_1                      0x526E
+#define WM8962_VSS_XTS14_0                      0x526F
+#define WM8962_VSS_XTS15_1                      0x5270
+#define WM8962_VSS_XTS15_0                      0x5271
+#define WM8962_VSS_XTS16_1                      0x5272
+#define WM8962_VSS_XTS16_0                      0x5273
+#define WM8962_VSS_XTS17_1                      0x5274
+#define WM8962_VSS_XTS17_0                      0x5275
+#define WM8962_VSS_XTS18_1                      0x5276
+#define WM8962_VSS_XTS18_0                      0x5277
+#define WM8962_VSS_XTS19_1                      0x5278
+#define WM8962_VSS_XTS19_0                      0x5279
+#define WM8962_VSS_XTS20_1                      0x527A
+#define WM8962_VSS_XTS20_0                      0x527B
+#define WM8962_VSS_XTS21_1                      0x527C
+#define WM8962_VSS_XTS21_0                      0x527D
+#define WM8962_VSS_XTS22_1                      0x527E
+#define WM8962_VSS_XTS22_0                      0x527F
+#define WM8962_VSS_XTS23_1                      0x5280
+#define WM8962_VSS_XTS23_0                      0x5281
+#define WM8962_VSS_XTS24_1                      0x5282
+#define WM8962_VSS_XTS24_0                      0x5283
+#define WM8962_VSS_XTS25_1                      0x5284
+#define WM8962_VSS_XTS25_0                      0x5285
+#define WM8962_VSS_XTS26_1                      0x5286
+#define WM8962_VSS_XTS26_0                      0x5287
+#define WM8962_VSS_XTS27_1                      0x5288
+#define WM8962_VSS_XTS27_0                      0x5289
+#define WM8962_VSS_XTS28_1                      0x528A
+#define WM8962_VSS_XTS28_0                      0x528B
+#define WM8962_VSS_XTS29_1                      0x528C
+#define WM8962_VSS_XTS29_0                      0x528D
+#define WM8962_VSS_XTS30_1                      0x528E
+#define WM8962_VSS_XTS30_0                      0x528F
+#define WM8962_VSS_XTS31_1                      0x5290
+#define WM8962_VSS_XTS31_0                      0x5291
+#define WM8962_VSS_XTS32_1                      0x5292
+#define WM8962_VSS_XTS32_0                      0x5293
+
+#define WM8962_REGISTER_COUNT                   1138
+#define WM8962_MAX_REGISTER                     0x5293
+
+/*
+ * Field Definitions.
+ */
+
+/*
+ * R0 (0x00) - Left Input volume
+ */
+#define WM8962_IN_VU                            0x0100  /* IN_VU */
+#define WM8962_IN_VU_MASK                       0x0100  /* IN_VU */
+#define WM8962_IN_VU_SHIFT                           8  /* IN_VU */
+#define WM8962_IN_VU_WIDTH                           1  /* IN_VU */
+#define WM8962_INPGAL_MUTE                      0x0080  /* INPGAL_MUTE */
+#define WM8962_INPGAL_MUTE_MASK                 0x0080  /* INPGAL_MUTE */
+#define WM8962_INPGAL_MUTE_SHIFT                     7  /* INPGAL_MUTE */
+#define WM8962_INPGAL_MUTE_WIDTH                     1  /* INPGAL_MUTE */
+#define WM8962_INL_ZC                           0x0040  /* INL_ZC */
+#define WM8962_INL_ZC_MASK                      0x0040  /* INL_ZC */
+#define WM8962_INL_ZC_SHIFT                          6  /* INL_ZC */
+#define WM8962_INL_ZC_WIDTH                          1  /* INL_ZC */
+#define WM8962_INL_VOL_MASK                     0x003F  /* INL_VOL - [5:0] */
+#define WM8962_INL_VOL_SHIFT                         0  /* INL_VOL - [5:0] */
+#define WM8962_INL_VOL_WIDTH                         6  /* INL_VOL - [5:0] */
+
+/*
+ * R1 (0x01) - Right Input volume
+ */
+#define WM8962_CUST_ID_MASK                     0xF000  /* CUST_ID - [15:12] */
+#define WM8962_CUST_ID_SHIFT                        12  /* CUST_ID - [15:12] */
+#define WM8962_CUST_ID_WIDTH                         4  /* CUST_ID - [15:12] */
+#define WM8962_CHIP_REV_MASK                    0x0E00  /* CHIP_REV - [11:9] */
+#define WM8962_CHIP_REV_SHIFT                        9  /* CHIP_REV - [11:9] */
+#define WM8962_CHIP_REV_WIDTH                        3  /* CHIP_REV - [11:9] */
+#define WM8962_IN_VU                            0x0100  /* IN_VU */
+#define WM8962_IN_VU_MASK                       0x0100  /* IN_VU */
+#define WM8962_IN_VU_SHIFT                           8  /* IN_VU */
+#define WM8962_IN_VU_WIDTH                           1  /* IN_VU */
+#define WM8962_INPGAR_MUTE                      0x0080  /* INPGAR_MUTE */
+#define WM8962_INPGAR_MUTE_MASK                 0x0080  /* INPGAR_MUTE */
+#define WM8962_INPGAR_MUTE_SHIFT                     7  /* INPGAR_MUTE */
+#define WM8962_INPGAR_MUTE_WIDTH                     1  /* INPGAR_MUTE */
+#define WM8962_INR_ZC                           0x0040  /* INR_ZC */
+#define WM8962_INR_ZC_MASK                      0x0040  /* INR_ZC */
+#define WM8962_INR_ZC_SHIFT                          6  /* INR_ZC */
+#define WM8962_INR_ZC_WIDTH                          1  /* INR_ZC */
+#define WM8962_INR_VOL_MASK                     0x003F  /* INR_VOL - [5:0] */
+#define WM8962_INR_VOL_SHIFT                         0  /* INR_VOL - [5:0] */
+#define WM8962_INR_VOL_WIDTH                         6  /* INR_VOL - [5:0] */
+
+/*
+ * R2 (0x02) - HPOUTL volume
+ */
+#define WM8962_HPOUT_VU                         0x0100  /* HPOUT_VU */
+#define WM8962_HPOUT_VU_MASK                    0x0100  /* HPOUT_VU */
+#define WM8962_HPOUT_VU_SHIFT                        8  /* HPOUT_VU */
+#define WM8962_HPOUT_VU_WIDTH                        1  /* HPOUT_VU */
+#define WM8962_HPOUTL_ZC                        0x0080  /* HPOUTL_ZC */
+#define WM8962_HPOUTL_ZC_MASK                   0x0080  /* HPOUTL_ZC */
+#define WM8962_HPOUTL_ZC_SHIFT                       7  /* HPOUTL_ZC */
+#define WM8962_HPOUTL_ZC_WIDTH                       1  /* HPOUTL_ZC */
+#define WM8962_HPOUTL_VOL_MASK                  0x007F  /* HPOUTL_VOL - [6:0] */
+#define WM8962_HPOUTL_VOL_SHIFT                      0  /* HPOUTL_VOL - [6:0] */
+#define WM8962_HPOUTL_VOL_WIDTH                      7  /* HPOUTL_VOL - [6:0] */
+
+/*
+ * R3 (0x03) - HPOUTR volume
+ */
+#define WM8962_HPOUT_VU                         0x0100  /* HPOUT_VU */
+#define WM8962_HPOUT_VU_MASK                    0x0100  /* HPOUT_VU */
+#define WM8962_HPOUT_VU_SHIFT                        8  /* HPOUT_VU */
+#define WM8962_HPOUT_VU_WIDTH                        1  /* HPOUT_VU */
+#define WM8962_HPOUTR_ZC                        0x0080  /* HPOUTR_ZC */
+#define WM8962_HPOUTR_ZC_MASK                   0x0080  /* HPOUTR_ZC */
+#define WM8962_HPOUTR_ZC_SHIFT                       7  /* HPOUTR_ZC */
+#define WM8962_HPOUTR_ZC_WIDTH                       1  /* HPOUTR_ZC */
+#define WM8962_HPOUTR_VOL_MASK                  0x007F  /* HPOUTR_VOL - [6:0] */
+#define WM8962_HPOUTR_VOL_SHIFT                      0  /* HPOUTR_VOL - [6:0] */
+#define WM8962_HPOUTR_VOL_WIDTH                      7  /* HPOUTR_VOL - [6:0] */
+
+/*
+ * R4 (0x04) - Clocking1
+ */
+#define WM8962_DSPCLK_DIV_MASK                  0x0600  /* DSPCLK_DIV - [10:9] */
+#define WM8962_DSPCLK_DIV_SHIFT                      9  /* DSPCLK_DIV - [10:9] */
+#define WM8962_DSPCLK_DIV_WIDTH                      2  /* DSPCLK_DIV - [10:9] */
+#define WM8962_ADCSYS_CLK_DIV_MASK              0x01C0  /* ADCSYS_CLK_DIV - [8:6] */
+#define WM8962_ADCSYS_CLK_DIV_SHIFT                  6  /* ADCSYS_CLK_DIV - [8:6] */
+#define WM8962_ADCSYS_CLK_DIV_WIDTH                  3  /* ADCSYS_CLK_DIV - [8:6] */
+#define WM8962_DACSYS_CLK_DIV_MASK              0x0038  /* DACSYS_CLK_DIV - [5:3] */
+#define WM8962_DACSYS_CLK_DIV_SHIFT                  3  /* DACSYS_CLK_DIV - [5:3] */
+#define WM8962_DACSYS_CLK_DIV_WIDTH                  3  /* DACSYS_CLK_DIV - [5:3] */
+#define WM8962_MCLKDIV_MASK                     0x0006  /* MCLKDIV - [2:1] */
+#define WM8962_MCLKDIV_SHIFT                         1  /* MCLKDIV - [2:1] */
+#define WM8962_MCLKDIV_WIDTH                         2  /* MCLKDIV - [2:1] */
+
+/*
+ * R5 (0x05) - ADC & DAC Control 1
+ */
+#define WM8962_ADCR_DAT_INV                     0x0040  /* ADCR_DAT_INV */
+#define WM8962_ADCR_DAT_INV_MASK                0x0040  /* ADCR_DAT_INV */
+#define WM8962_ADCR_DAT_INV_SHIFT                    6  /* ADCR_DAT_INV */
+#define WM8962_ADCR_DAT_INV_WIDTH                    1  /* ADCR_DAT_INV */
+#define WM8962_ADCL_DAT_INV                     0x0020  /* ADCL_DAT_INV */
+#define WM8962_ADCL_DAT_INV_MASK                0x0020  /* ADCL_DAT_INV */
+#define WM8962_ADCL_DAT_INV_SHIFT                    5  /* ADCL_DAT_INV */
+#define WM8962_ADCL_DAT_INV_WIDTH                    1  /* ADCL_DAT_INV */
+#define WM8962_DAC_MUTE_RAMP                    0x0010  /* DAC_MUTE_RAMP */
+#define WM8962_DAC_MUTE_RAMP_MASK               0x0010  /* DAC_MUTE_RAMP */
+#define WM8962_DAC_MUTE_RAMP_SHIFT                   4  /* DAC_MUTE_RAMP */
+#define WM8962_DAC_MUTE_RAMP_WIDTH                   1  /* DAC_MUTE_RAMP */
+#define WM8962_DAC_MUTE                         0x0008  /* DAC_MUTE */
+#define WM8962_DAC_MUTE_MASK                    0x0008  /* DAC_MUTE */
+#define WM8962_DAC_MUTE_SHIFT                        3  /* DAC_MUTE */
+#define WM8962_DAC_MUTE_WIDTH                        1  /* DAC_MUTE */
+#define WM8962_DAC_DEEMP_MASK                   0x0006  /* DAC_DEEMP - [2:1] */
+#define WM8962_DAC_DEEMP_SHIFT                       1  /* DAC_DEEMP - [2:1] */
+#define WM8962_DAC_DEEMP_WIDTH                       2  /* DAC_DEEMP - [2:1] */
+#define WM8962_ADC_HPF_DIS                      0x0001  /* ADC_HPF_DIS */
+#define WM8962_ADC_HPF_DIS_MASK                 0x0001  /* ADC_HPF_DIS */
+#define WM8962_ADC_HPF_DIS_SHIFT                     0  /* ADC_HPF_DIS */
+#define WM8962_ADC_HPF_DIS_WIDTH                     1  /* ADC_HPF_DIS */
+
+/*
+ * R6 (0x06) - ADC & DAC Control 2
+ */
+#define WM8962_ADC_HPF_SR_MASK                  0x3000  /* ADC_HPF_SR - [13:12] */
+#define WM8962_ADC_HPF_SR_SHIFT                     12  /* ADC_HPF_SR - [13:12] */
+#define WM8962_ADC_HPF_SR_WIDTH                      2  /* ADC_HPF_SR - [13:12] */
+#define WM8962_ADC_HPF_MODE                     0x0400  /* ADC_HPF_MODE */
+#define WM8962_ADC_HPF_MODE_MASK                0x0400  /* ADC_HPF_MODE */
+#define WM8962_ADC_HPF_MODE_SHIFT                   10  /* ADC_HPF_MODE */
+#define WM8962_ADC_HPF_MODE_WIDTH                    1  /* ADC_HPF_MODE */
+#define WM8962_ADC_HPF_CUT_MASK                 0x0380  /* ADC_HPF_CUT - [9:7] */
+#define WM8962_ADC_HPF_CUT_SHIFT                     7  /* ADC_HPF_CUT - [9:7] */
+#define WM8962_ADC_HPF_CUT_WIDTH                     3  /* ADC_HPF_CUT - [9:7] */
+#define WM8962_DACR_DAT_INV                     0x0040  /* DACR_DAT_INV */
+#define WM8962_DACR_DAT_INV_MASK                0x0040  /* DACR_DAT_INV */
+#define WM8962_DACR_DAT_INV_SHIFT                    6  /* DACR_DAT_INV */
+#define WM8962_DACR_DAT_INV_WIDTH                    1  /* DACR_DAT_INV */
+#define WM8962_DACL_DAT_INV                     0x0020  /* DACL_DAT_INV */
+#define WM8962_DACL_DAT_INV_MASK                0x0020  /* DACL_DAT_INV */
+#define WM8962_DACL_DAT_INV_SHIFT                    5  /* DACL_DAT_INV */
+#define WM8962_DACL_DAT_INV_WIDTH                    1  /* DACL_DAT_INV */
+#define WM8962_DAC_UNMUTE_RAMP                  0x0008  /* DAC_UNMUTE_RAMP */
+#define WM8962_DAC_UNMUTE_RAMP_MASK             0x0008  /* DAC_UNMUTE_RAMP */
+#define WM8962_DAC_UNMUTE_RAMP_SHIFT                 3  /* DAC_UNMUTE_RAMP */
+#define WM8962_DAC_UNMUTE_RAMP_WIDTH                 1  /* DAC_UNMUTE_RAMP */
+#define WM8962_DAC_MUTERATE                     0x0004  /* DAC_MUTERATE */
+#define WM8962_DAC_MUTERATE_MASK                0x0004  /* DAC_MUTERATE */
+#define WM8962_DAC_MUTERATE_SHIFT                    2  /* DAC_MUTERATE */
+#define WM8962_DAC_MUTERATE_WIDTH                    1  /* DAC_MUTERATE */
+#define WM8962_DAC_HP                           0x0001  /* DAC_HP */
+#define WM8962_DAC_HP_MASK                      0x0001  /* DAC_HP */
+#define WM8962_DAC_HP_SHIFT                          0  /* DAC_HP */
+#define WM8962_DAC_HP_WIDTH                          1  /* DAC_HP */
+
+/*
+ * R7 (0x07) - Audio Interface 0
+ */
+#define WM8962_AIFDAC_TDM_MODE                  0x1000  /* AIFDAC_TDM_MODE */
+#define WM8962_AIFDAC_TDM_MODE_MASK             0x1000  /* AIFDAC_TDM_MODE */
+#define WM8962_AIFDAC_TDM_MODE_SHIFT                12  /* AIFDAC_TDM_MODE */
+#define WM8962_AIFDAC_TDM_MODE_WIDTH                 1  /* AIFDAC_TDM_MODE */
+#define WM8962_AIFDAC_TDM_SLOT                  0x0800  /* AIFDAC_TDM_SLOT */
+#define WM8962_AIFDAC_TDM_SLOT_MASK             0x0800  /* AIFDAC_TDM_SLOT */
+#define WM8962_AIFDAC_TDM_SLOT_SHIFT                11  /* AIFDAC_TDM_SLOT */
+#define WM8962_AIFDAC_TDM_SLOT_WIDTH                 1  /* AIFDAC_TDM_SLOT */
+#define WM8962_AIFADC_TDM_MODE                  0x0400  /* AIFADC_TDM_MODE */
+#define WM8962_AIFADC_TDM_MODE_MASK             0x0400  /* AIFADC_TDM_MODE */
+#define WM8962_AIFADC_TDM_MODE_SHIFT                10  /* AIFADC_TDM_MODE */
+#define WM8962_AIFADC_TDM_MODE_WIDTH                 1  /* AIFADC_TDM_MODE */
+#define WM8962_AIFADC_TDM_SLOT                  0x0200  /* AIFADC_TDM_SLOT */
+#define WM8962_AIFADC_TDM_SLOT_MASK             0x0200  /* AIFADC_TDM_SLOT */
+#define WM8962_AIFADC_TDM_SLOT_SHIFT                 9  /* AIFADC_TDM_SLOT */
+#define WM8962_AIFADC_TDM_SLOT_WIDTH                 1  /* AIFADC_TDM_SLOT */
+#define WM8962_ADC_LRSWAP                       0x0100  /* ADC_LRSWAP */
+#define WM8962_ADC_LRSWAP_MASK                  0x0100  /* ADC_LRSWAP */
+#define WM8962_ADC_LRSWAP_SHIFT                      8  /* ADC_LRSWAP */
+#define WM8962_ADC_LRSWAP_WIDTH                      1  /* ADC_LRSWAP */
+#define WM8962_BCLK_INV                         0x0080  /* BCLK_INV */
+#define WM8962_BCLK_INV_MASK                    0x0080  /* BCLK_INV */
+#define WM8962_BCLK_INV_SHIFT                        7  /* BCLK_INV */
+#define WM8962_BCLK_INV_WIDTH                        1  /* BCLK_INV */
+#define WM8962_MSTR                             0x0040  /* MSTR */
+#define WM8962_MSTR_MASK                        0x0040  /* MSTR */
+#define WM8962_MSTR_SHIFT                            6  /* MSTR */
+#define WM8962_MSTR_WIDTH                            1  /* MSTR */
+#define WM8962_DAC_LRSWAP                       0x0020  /* DAC_LRSWAP */
+#define WM8962_DAC_LRSWAP_MASK                  0x0020  /* DAC_LRSWAP */
+#define WM8962_DAC_LRSWAP_SHIFT                      5  /* DAC_LRSWAP */
+#define WM8962_DAC_LRSWAP_WIDTH                      1  /* DAC_LRSWAP */
+#define WM8962_LRCLK_INV                        0x0010  /* LRCLK_INV */
+#define WM8962_LRCLK_INV_MASK                   0x0010  /* LRCLK_INV */
+#define WM8962_LRCLK_INV_SHIFT                       4  /* LRCLK_INV */
+#define WM8962_LRCLK_INV_WIDTH                       1  /* LRCLK_INV */
+#define WM8962_WL_MASK                          0x000C  /* WL - [3:2] */
+#define WM8962_WL_SHIFT                              2  /* WL - [3:2] */
+#define WM8962_WL_WIDTH                              2  /* WL - [3:2] */
+#define WM8962_FMT_MASK                         0x0003  /* FMT - [1:0] */
+#define WM8962_FMT_SHIFT                             0  /* FMT - [1:0] */
+#define WM8962_FMT_WIDTH                             2  /* FMT - [1:0] */
+
+/*
+ * R8 (0x08) - Clocking2
+ */
+#define WM8962_CLKREG_OVD                       0x0800  /* CLKREG_OVD */
+#define WM8962_CLKREG_OVD_MASK                  0x0800  /* CLKREG_OVD */
+#define WM8962_CLKREG_OVD_SHIFT                     11  /* CLKREG_OVD */
+#define WM8962_CLKREG_OVD_WIDTH                      1  /* CLKREG_OVD */
+#define WM8962_SYSCLK_SRC_MASK                  0x0600  /* SYSCLK_SRC - [10:9] */
+#define WM8962_SYSCLK_SRC_SHIFT                      9  /* SYSCLK_SRC - [10:9] */
+#define WM8962_SYSCLK_SRC_WIDTH                      2  /* SYSCLK_SRC - [10:9] */
+#define WM8962_CLASSD_CLK_DIV_MASK              0x01C0  /* CLASSD_CLK_DIV - [8:6] */
+#define WM8962_CLASSD_CLK_DIV_SHIFT                  6  /* CLASSD_CLK_DIV - [8:6] */
+#define WM8962_CLASSD_CLK_DIV_WIDTH                  3  /* CLASSD_CLK_DIV - [8:6] */
+#define WM8962_SYSCLK_ENA                       0x0020  /* SYSCLK_ENA */
+#define WM8962_SYSCLK_ENA_MASK                  0x0020  /* SYSCLK_ENA */
+#define WM8962_SYSCLK_ENA_SHIFT                      5  /* SYSCLK_ENA */
+#define WM8962_SYSCLK_ENA_WIDTH                      1  /* SYSCLK_ENA */
+#define WM8962_BCLK_DIV_MASK                    0x000F  /* BCLK_DIV - [3:0] */
+#define WM8962_BCLK_DIV_SHIFT                        0  /* BCLK_DIV - [3:0] */
+#define WM8962_BCLK_DIV_WIDTH                        4  /* BCLK_DIV - [3:0] */
+
+/*
+ * R9 (0x09) - Audio Interface 1
+ */
+#define WM8962_AUTOMUTE_STS                     0x0800  /* AUTOMUTE_STS */
+#define WM8962_AUTOMUTE_STS_MASK                0x0800  /* AUTOMUTE_STS */
+#define WM8962_AUTOMUTE_STS_SHIFT                   11  /* AUTOMUTE_STS */
+#define WM8962_AUTOMUTE_STS_WIDTH                    1  /* AUTOMUTE_STS */
+#define WM8962_DAC_AUTOMUTE_SAMPLES_MASK        0x0300  /* DAC_AUTOMUTE_SAMPLES - [9:8] */
+#define WM8962_DAC_AUTOMUTE_SAMPLES_SHIFT            8  /* DAC_AUTOMUTE_SAMPLES - [9:8] */
+#define WM8962_DAC_AUTOMUTE_SAMPLES_WIDTH            2  /* DAC_AUTOMUTE_SAMPLES - [9:8] */
+#define WM8962_DAC_AUTOMUTE                     0x0080  /* DAC_AUTOMUTE */
+#define WM8962_DAC_AUTOMUTE_MASK                0x0080  /* DAC_AUTOMUTE */
+#define WM8962_DAC_AUTOMUTE_SHIFT                    7  /* DAC_AUTOMUTE */
+#define WM8962_DAC_AUTOMUTE_WIDTH                    1  /* DAC_AUTOMUTE */
+#define WM8962_DAC_COMP                         0x0010  /* DAC_COMP */
+#define WM8962_DAC_COMP_MASK                    0x0010  /* DAC_COMP */
+#define WM8962_DAC_COMP_SHIFT                        4  /* DAC_COMP */
+#define WM8962_DAC_COMP_WIDTH                        1  /* DAC_COMP */
+#define WM8962_DAC_COMPMODE                     0x0008  /* DAC_COMPMODE */
+#define WM8962_DAC_COMPMODE_MASK                0x0008  /* DAC_COMPMODE */
+#define WM8962_DAC_COMPMODE_SHIFT                    3  /* DAC_COMPMODE */
+#define WM8962_DAC_COMPMODE_WIDTH                    1  /* DAC_COMPMODE */
+#define WM8962_ADC_COMP                         0x0004  /* ADC_COMP */
+#define WM8962_ADC_COMP_MASK                    0x0004  /* ADC_COMP */
+#define WM8962_ADC_COMP_SHIFT                        2  /* ADC_COMP */
+#define WM8962_ADC_COMP_WIDTH                        1  /* ADC_COMP */
+#define WM8962_ADC_COMPMODE                     0x0002  /* ADC_COMPMODE */
+#define WM8962_ADC_COMPMODE_MASK                0x0002  /* ADC_COMPMODE */
+#define WM8962_ADC_COMPMODE_SHIFT                    1  /* ADC_COMPMODE */
+#define WM8962_ADC_COMPMODE_WIDTH                    1  /* ADC_COMPMODE */
+#define WM8962_LOOPBACK                         0x0001  /* LOOPBACK */
+#define WM8962_LOOPBACK_MASK                    0x0001  /* LOOPBACK */
+#define WM8962_LOOPBACK_SHIFT                        0  /* LOOPBACK */
+#define WM8962_LOOPBACK_WIDTH                        1  /* LOOPBACK */
+
+/*
+ * R10 (0x0A) - Left DAC volume
+ */
+#define WM8962_DAC_VU                           0x0100  /* DAC_VU */
+#define WM8962_DAC_VU_MASK                      0x0100  /* DAC_VU */
+#define WM8962_DAC_VU_SHIFT                          8  /* DAC_VU */
+#define WM8962_DAC_VU_WIDTH                          1  /* DAC_VU */
+#define WM8962_DACL_VOL_MASK                    0x00FF  /* DACL_VOL - [7:0] */
+#define WM8962_DACL_VOL_SHIFT                        0  /* DACL_VOL - [7:0] */
+#define WM8962_DACL_VOL_WIDTH                        8  /* DACL_VOL - [7:0] */
+
+/*
+ * R11 (0x0B) - Right DAC volume
+ */
+#define WM8962_DAC_VU                           0x0100  /* DAC_VU */
+#define WM8962_DAC_VU_MASK                      0x0100  /* DAC_VU */
+#define WM8962_DAC_VU_SHIFT                          8  /* DAC_VU */
+#define WM8962_DAC_VU_WIDTH                          1  /* DAC_VU */
+#define WM8962_DACR_VOL_MASK                    0x00FF  /* DACR_VOL - [7:0] */
+#define WM8962_DACR_VOL_SHIFT                        0  /* DACR_VOL - [7:0] */
+#define WM8962_DACR_VOL_WIDTH                        8  /* DACR_VOL - [7:0] */
+
+/*
+ * R14 (0x0E) - Audio Interface 2
+ */
+#define WM8962_AIF_RATE_MASK                    0x07FF  /* AIF_RATE - [10:0] */
+#define WM8962_AIF_RATE_SHIFT                        0  /* AIF_RATE - [10:0] */
+#define WM8962_AIF_RATE_WIDTH                       11  /* AIF_RATE - [10:0] */
+
+/*
+ * R15 (0x0F) - Software Reset
+ */
+#define WM8962_SW_RESET_MASK                    0xFFFF  /* SW_RESET - [15:0] */
+#define WM8962_SW_RESET_SHIFT                        0  /* SW_RESET - [15:0] */
+#define WM8962_SW_RESET_WIDTH                       16  /* SW_RESET - [15:0] */
+
+/*
+ * R17 (0x11) - ALC1
+ */
+#define WM8962_ALC_INACTIVE_ENA                 0x0400  /* ALC_INACTIVE_ENA */
+#define WM8962_ALC_INACTIVE_ENA_MASK            0x0400  /* ALC_INACTIVE_ENA */
+#define WM8962_ALC_INACTIVE_ENA_SHIFT               10  /* ALC_INACTIVE_ENA */
+#define WM8962_ALC_INACTIVE_ENA_WIDTH                1  /* ALC_INACTIVE_ENA */
+#define WM8962_ALC_LVL_MODE                     0x0200  /* ALC_LVL_MODE */
+#define WM8962_ALC_LVL_MODE_MASK                0x0200  /* ALC_LVL_MODE */
+#define WM8962_ALC_LVL_MODE_SHIFT                    9  /* ALC_LVL_MODE */
+#define WM8962_ALC_LVL_MODE_WIDTH                    1  /* ALC_LVL_MODE */
+#define WM8962_ALCL_ENA                         0x0100  /* ALCL_ENA */
+#define WM8962_ALCL_ENA_MASK                    0x0100  /* ALCL_ENA */
+#define WM8962_ALCL_ENA_SHIFT                        8  /* ALCL_ENA */
+#define WM8962_ALCL_ENA_WIDTH                        1  /* ALCL_ENA */
+#define WM8962_ALCR_ENA                         0x0080  /* ALCR_ENA */
+#define WM8962_ALCR_ENA_MASK                    0x0080  /* ALCR_ENA */
+#define WM8962_ALCR_ENA_SHIFT                        7  /* ALCR_ENA */
+#define WM8962_ALCR_ENA_WIDTH                        1  /* ALCR_ENA */
+#define WM8962_ALC_MAXGAIN_MASK                 0x0070  /* ALC_MAXGAIN - [6:4] */
+#define WM8962_ALC_MAXGAIN_SHIFT                     4  /* ALC_MAXGAIN - [6:4] */
+#define WM8962_ALC_MAXGAIN_WIDTH                     3  /* ALC_MAXGAIN - [6:4] */
+#define WM8962_ALC_LVL_MASK                     0x000F  /* ALC_LVL - [3:0] */
+#define WM8962_ALC_LVL_SHIFT                         0  /* ALC_LVL - [3:0] */
+#define WM8962_ALC_LVL_WIDTH                         4  /* ALC_LVL - [3:0] */
+
+/*
+ * R18 (0x12) - ALC2
+ */
+#define WM8962_ALC_LOCK_STS                     0x8000  /* ALC_LOCK_STS */
+#define WM8962_ALC_LOCK_STS_MASK                0x8000  /* ALC_LOCK_STS */
+#define WM8962_ALC_LOCK_STS_SHIFT                   15  /* ALC_LOCK_STS */
+#define WM8962_ALC_LOCK_STS_WIDTH                    1  /* ALC_LOCK_STS */
+#define WM8962_ALC_THRESH_STS                   0x4000  /* ALC_THRESH_STS */
+#define WM8962_ALC_THRESH_STS_MASK              0x4000  /* ALC_THRESH_STS */
+#define WM8962_ALC_THRESH_STS_SHIFT                 14  /* ALC_THRESH_STS */
+#define WM8962_ALC_THRESH_STS_WIDTH                  1  /* ALC_THRESH_STS */
+#define WM8962_ALC_SAT_STS                      0x2000  /* ALC_SAT_STS */
+#define WM8962_ALC_SAT_STS_MASK                 0x2000  /* ALC_SAT_STS */
+#define WM8962_ALC_SAT_STS_SHIFT                    13  /* ALC_SAT_STS */
+#define WM8962_ALC_SAT_STS_WIDTH                     1  /* ALC_SAT_STS */
+#define WM8962_ALC_PKOVR_STS                    0x1000  /* ALC_PKOVR_STS */
+#define WM8962_ALC_PKOVR_STS_MASK               0x1000  /* ALC_PKOVR_STS */
+#define WM8962_ALC_PKOVR_STS_SHIFT                  12  /* ALC_PKOVR_STS */
+#define WM8962_ALC_PKOVR_STS_WIDTH                   1  /* ALC_PKOVR_STS */
+#define WM8962_ALC_NGATE_STS                    0x0800  /* ALC_NGATE_STS */
+#define WM8962_ALC_NGATE_STS_MASK               0x0800  /* ALC_NGATE_STS */
+#define WM8962_ALC_NGATE_STS_SHIFT                  11  /* ALC_NGATE_STS */
+#define WM8962_ALC_NGATE_STS_WIDTH                   1  /* ALC_NGATE_STS */
+#define WM8962_ALC_ZC                           0x0080  /* ALC_ZC */
+#define WM8962_ALC_ZC_MASK                      0x0080  /* ALC_ZC */
+#define WM8962_ALC_ZC_SHIFT                          7  /* ALC_ZC */
+#define WM8962_ALC_ZC_WIDTH                          1  /* ALC_ZC */
+#define WM8962_ALC_MINGAIN_MASK                 0x0070  /* ALC_MINGAIN - [6:4] */
+#define WM8962_ALC_MINGAIN_SHIFT                     4  /* ALC_MINGAIN - [6:4] */
+#define WM8962_ALC_MINGAIN_WIDTH                     3  /* ALC_MINGAIN - [6:4] */
+#define WM8962_ALC_HLD_MASK                     0x000F  /* ALC_HLD - [3:0] */
+#define WM8962_ALC_HLD_SHIFT                         0  /* ALC_HLD - [3:0] */
+#define WM8962_ALC_HLD_WIDTH                         4  /* ALC_HLD - [3:0] */
+
+/*
+ * R19 (0x13) - ALC3
+ */
+#define WM8962_ALC_NGATE_GAIN_MASK              0x1C00  /* ALC_NGATE_GAIN - [12:10] */
+#define WM8962_ALC_NGATE_GAIN_SHIFT                 10  /* ALC_NGATE_GAIN - [12:10] */
+#define WM8962_ALC_NGATE_GAIN_WIDTH                  3  /* ALC_NGATE_GAIN - [12:10] */
+#define WM8962_ALC_MODE                         0x0100  /* ALC_MODE */
+#define WM8962_ALC_MODE_MASK                    0x0100  /* ALC_MODE */
+#define WM8962_ALC_MODE_SHIFT                        8  /* ALC_MODE */
+#define WM8962_ALC_MODE_WIDTH                        1  /* ALC_MODE */
+#define WM8962_ALC_DCY_MASK                     0x00F0  /* ALC_DCY - [7:4] */
+#define WM8962_ALC_DCY_SHIFT                         4  /* ALC_DCY - [7:4] */
+#define WM8962_ALC_DCY_WIDTH                         4  /* ALC_DCY - [7:4] */
+#define WM8962_ALC_ATK_MASK                     0x000F  /* ALC_ATK - [3:0] */
+#define WM8962_ALC_ATK_SHIFT                         0  /* ALC_ATK - [3:0] */
+#define WM8962_ALC_ATK_WIDTH                         4  /* ALC_ATK - [3:0] */
+
+/*
+ * R20 (0x14) - Noise Gate
+ */
+#define WM8962_ALC_NGATE_DCY_MASK               0xF000  /* ALC_NGATE_DCY - [15:12] */
+#define WM8962_ALC_NGATE_DCY_SHIFT                  12  /* ALC_NGATE_DCY - [15:12] */
+#define WM8962_ALC_NGATE_DCY_WIDTH                   4  /* ALC_NGATE_DCY - [15:12] */
+#define WM8962_ALC_NGATE_ATK_MASK               0x0F00  /* ALC_NGATE_ATK - [11:8] */
+#define WM8962_ALC_NGATE_ATK_SHIFT                   8  /* ALC_NGATE_ATK - [11:8] */
+#define WM8962_ALC_NGATE_ATK_WIDTH                   4  /* ALC_NGATE_ATK - [11:8] */
+#define WM8962_ALC_NGATE_THR_MASK               0x00F8  /* ALC_NGATE_THR - [7:3] */
+#define WM8962_ALC_NGATE_THR_SHIFT                   3  /* ALC_NGATE_THR - [7:3] */
+#define WM8962_ALC_NGATE_THR_WIDTH                   5  /* ALC_NGATE_THR - [7:3] */
+#define WM8962_ALC_NGATE_MODE_MASK              0x0006  /* ALC_NGATE_MODE - [2:1] */
+#define WM8962_ALC_NGATE_MODE_SHIFT                  1  /* ALC_NGATE_MODE - [2:1] */
+#define WM8962_ALC_NGATE_MODE_WIDTH                  2  /* ALC_NGATE_MODE - [2:1] */
+#define WM8962_ALC_NGATE_ENA                    0x0001  /* ALC_NGATE_ENA */
+#define WM8962_ALC_NGATE_ENA_MASK               0x0001  /* ALC_NGATE_ENA */
+#define WM8962_ALC_NGATE_ENA_SHIFT                   0  /* ALC_NGATE_ENA */
+#define WM8962_ALC_NGATE_ENA_WIDTH                   1  /* ALC_NGATE_ENA */
+
+/*
+ * R21 (0x15) - Left ADC volume
+ */
+#define WM8962_ADC_VU                           0x0100  /* ADC_VU */
+#define WM8962_ADC_VU_MASK                      0x0100  /* ADC_VU */
+#define WM8962_ADC_VU_SHIFT                          8  /* ADC_VU */
+#define WM8962_ADC_VU_WIDTH                          1  /* ADC_VU */
+#define WM8962_ADCL_VOL_MASK                    0x00FF  /* ADCL_VOL - [7:0] */
+#define WM8962_ADCL_VOL_SHIFT                        0  /* ADCL_VOL - [7:0] */
+#define WM8962_ADCL_VOL_WIDTH                        8  /* ADCL_VOL - [7:0] */
+
+/*
+ * R22 (0x16) - Right ADC volume
+ */
+#define WM8962_ADC_VU                           0x0100  /* ADC_VU */
+#define WM8962_ADC_VU_MASK                      0x0100  /* ADC_VU */
+#define WM8962_ADC_VU_SHIFT                          8  /* ADC_VU */
+#define WM8962_ADC_VU_WIDTH                          1  /* ADC_VU */
+#define WM8962_ADCR_VOL_MASK                    0x00FF  /* ADCR_VOL - [7:0] */
+#define WM8962_ADCR_VOL_SHIFT                        0  /* ADCR_VOL - [7:0] */
+#define WM8962_ADCR_VOL_WIDTH                        8  /* ADCR_VOL - [7:0] */
+
+/*
+ * R23 (0x17) - Additional control(1)
+ */
+#define WM8962_THERR_ACT                        0x0100  /* THERR_ACT */
+#define WM8962_THERR_ACT_MASK                   0x0100  /* THERR_ACT */
+#define WM8962_THERR_ACT_SHIFT                       8  /* THERR_ACT */
+#define WM8962_THERR_ACT_WIDTH                       1  /* THERR_ACT */
+#define WM8962_ADC_BIAS                         0x0040  /* ADC_BIAS */
+#define WM8962_ADC_BIAS_MASK                    0x0040  /* ADC_BIAS */
+#define WM8962_ADC_BIAS_SHIFT                        6  /* ADC_BIAS */
+#define WM8962_ADC_BIAS_WIDTH                        1  /* ADC_BIAS */
+#define WM8962_ADC_HP                           0x0020  /* ADC_HP */
+#define WM8962_ADC_HP_MASK                      0x0020  /* ADC_HP */
+#define WM8962_ADC_HP_SHIFT                          5  /* ADC_HP */
+#define WM8962_ADC_HP_WIDTH                          1  /* ADC_HP */
+#define WM8962_TOCLK_ENA                        0x0001  /* TOCLK_ENA */
+#define WM8962_TOCLK_ENA_MASK                   0x0001  /* TOCLK_ENA */
+#define WM8962_TOCLK_ENA_SHIFT                       0  /* TOCLK_ENA */
+#define WM8962_TOCLK_ENA_WIDTH                       1  /* TOCLK_ENA */
+
+/*
+ * R24 (0x18) - Additional control(2)
+ */
+#define WM8962_AIF_TRI                          0x0008  /* AIF_TRI */
+#define WM8962_AIF_TRI_MASK                     0x0008  /* AIF_TRI */
+#define WM8962_AIF_TRI_SHIFT                         3  /* AIF_TRI */
+#define WM8962_AIF_TRI_WIDTH                         1  /* AIF_TRI */
+
+/*
+ * R25 (0x19) - Pwr Mgmt (1)
+ */
+#define WM8962_DMIC_ENA                         0x0400  /* DMIC_ENA */
+#define WM8962_DMIC_ENA_MASK                    0x0400  /* DMIC_ENA */
+#define WM8962_DMIC_ENA_SHIFT                       10  /* DMIC_ENA */
+#define WM8962_DMIC_ENA_WIDTH                        1  /* DMIC_ENA */
+#define WM8962_OPCLK_ENA                        0x0200  /* OPCLK_ENA */
+#define WM8962_OPCLK_ENA_MASK                   0x0200  /* OPCLK_ENA */
+#define WM8962_OPCLK_ENA_SHIFT                       9  /* OPCLK_ENA */
+#define WM8962_OPCLK_ENA_WIDTH                       1  /* OPCLK_ENA */
+#define WM8962_VMID_SEL_MASK                    0x0180  /* VMID_SEL - [8:7] */
+#define WM8962_VMID_SEL_SHIFT                        7  /* VMID_SEL - [8:7] */
+#define WM8962_VMID_SEL_WIDTH                        2  /* VMID_SEL - [8:7] */
+#define WM8962_BIAS_ENA                         0x0040  /* BIAS_ENA */
+#define WM8962_BIAS_ENA_MASK                    0x0040  /* BIAS_ENA */
+#define WM8962_BIAS_ENA_SHIFT                        6  /* BIAS_ENA */
+#define WM8962_BIAS_ENA_WIDTH                        1  /* BIAS_ENA */
+#define WM8962_INL_ENA                          0x0020  /* INL_ENA */
+#define WM8962_INL_ENA_MASK                     0x0020  /* INL_ENA */
+#define WM8962_INL_ENA_SHIFT                         5  /* INL_ENA */
+#define WM8962_INL_ENA_WIDTH                         1  /* INL_ENA */
+#define WM8962_INR_ENA                          0x0010  /* INR_ENA */
+#define WM8962_INR_ENA_MASK                     0x0010  /* INR_ENA */
+#define WM8962_INR_ENA_SHIFT                         4  /* INR_ENA */
+#define WM8962_INR_ENA_WIDTH                         1  /* INR_ENA */
+#define WM8962_ADCL_ENA                         0x0008  /* ADCL_ENA */
+#define WM8962_ADCL_ENA_MASK                    0x0008  /* ADCL_ENA */
+#define WM8962_ADCL_ENA_SHIFT                        3  /* ADCL_ENA */
+#define WM8962_ADCL_ENA_WIDTH                        1  /* ADCL_ENA */
+#define WM8962_ADCR_ENA                         0x0004  /* ADCR_ENA */
+#define WM8962_ADCR_ENA_MASK                    0x0004  /* ADCR_ENA */
+#define WM8962_ADCR_ENA_SHIFT                        2  /* ADCR_ENA */
+#define WM8962_ADCR_ENA_WIDTH                        1  /* ADCR_ENA */
+#define WM8962_MICBIAS_ENA                      0x0002  /* MICBIAS_ENA */
+#define WM8962_MICBIAS_ENA_MASK                 0x0002  /* MICBIAS_ENA */
+#define WM8962_MICBIAS_ENA_SHIFT                     1  /* MICBIAS_ENA */
+#define WM8962_MICBIAS_ENA_WIDTH                     1  /* MICBIAS_ENA */
+
+/*
+ * R26 (0x1A) - Pwr Mgmt (2)
+ */
+#define WM8962_DACL_ENA                         0x0100  /* DACL_ENA */
+#define WM8962_DACL_ENA_MASK                    0x0100  /* DACL_ENA */
+#define WM8962_DACL_ENA_SHIFT                        8  /* DACL_ENA */
+#define WM8962_DACL_ENA_WIDTH                        1  /* DACL_ENA */
+#define WM8962_DACR_ENA                         0x0080  /* DACR_ENA */
+#define WM8962_DACR_ENA_MASK                    0x0080  /* DACR_ENA */
+#define WM8962_DACR_ENA_SHIFT                        7  /* DACR_ENA */
+#define WM8962_DACR_ENA_WIDTH                        1  /* DACR_ENA */
+#define WM8962_HPOUTL_PGA_ENA                   0x0040  /* HPOUTL_PGA_ENA */
+#define WM8962_HPOUTL_PGA_ENA_MASK              0x0040  /* HPOUTL_PGA_ENA */
+#define WM8962_HPOUTL_PGA_ENA_SHIFT                  6  /* HPOUTL_PGA_ENA */
+#define WM8962_HPOUTL_PGA_ENA_WIDTH                  1  /* HPOUTL_PGA_ENA */
+#define WM8962_HPOUTR_PGA_ENA                   0x0020  /* HPOUTR_PGA_ENA */
+#define WM8962_HPOUTR_PGA_ENA_MASK              0x0020  /* HPOUTR_PGA_ENA */
+#define WM8962_HPOUTR_PGA_ENA_SHIFT                  5  /* HPOUTR_PGA_ENA */
+#define WM8962_HPOUTR_PGA_ENA_WIDTH                  1  /* HPOUTR_PGA_ENA */
+#define WM8962_SPKOUTL_PGA_ENA                  0x0010  /* SPKOUTL_PGA_ENA */
+#define WM8962_SPKOUTL_PGA_ENA_MASK             0x0010  /* SPKOUTL_PGA_ENA */
+#define WM8962_SPKOUTL_PGA_ENA_SHIFT                 4  /* SPKOUTL_PGA_ENA */
+#define WM8962_SPKOUTL_PGA_ENA_WIDTH                 1  /* SPKOUTL_PGA_ENA */
+#define WM8962_SPKOUTR_PGA_ENA                  0x0008  /* SPKOUTR_PGA_ENA */
+#define WM8962_SPKOUTR_PGA_ENA_MASK             0x0008  /* SPKOUTR_PGA_ENA */
+#define WM8962_SPKOUTR_PGA_ENA_SHIFT                 3  /* SPKOUTR_PGA_ENA */
+#define WM8962_SPKOUTR_PGA_ENA_WIDTH                 1  /* SPKOUTR_PGA_ENA */
+#define WM8962_HPOUTL_PGA_MUTE                  0x0002  /* HPOUTL_PGA_MUTE */
+#define WM8962_HPOUTL_PGA_MUTE_MASK             0x0002  /* HPOUTL_PGA_MUTE */
+#define WM8962_HPOUTL_PGA_MUTE_SHIFT                 1  /* HPOUTL_PGA_MUTE */
+#define WM8962_HPOUTL_PGA_MUTE_WIDTH                 1  /* HPOUTL_PGA_MUTE */
+#define WM8962_HPOUTR_PGA_MUTE                  0x0001  /* HPOUTR_PGA_MUTE */
+#define WM8962_HPOUTR_PGA_MUTE_MASK             0x0001  /* HPOUTR_PGA_MUTE */
+#define WM8962_HPOUTR_PGA_MUTE_SHIFT                 0  /* HPOUTR_PGA_MUTE */
+#define WM8962_HPOUTR_PGA_MUTE_WIDTH                 1  /* HPOUTR_PGA_MUTE */
+
+/*
+ * R27 (0x1B) - Additional Control (3)
+ */
+#define WM8962_SAMPLE_RATE_INT_MODE             0x0010  /* SAMPLE_RATE_INT_MODE */
+#define WM8962_SAMPLE_RATE_INT_MODE_MASK        0x0010  /* SAMPLE_RATE_INT_MODE */
+#define WM8962_SAMPLE_RATE_INT_MODE_SHIFT            4  /* SAMPLE_RATE_INT_MODE */
+#define WM8962_SAMPLE_RATE_INT_MODE_WIDTH            1  /* SAMPLE_RATE_INT_MODE */
+#define WM8962_SAMPLE_RATE_MASK                 0x0007  /* SAMPLE_RATE - [2:0] */
+#define WM8962_SAMPLE_RATE_SHIFT                     0  /* SAMPLE_RATE - [2:0] */
+#define WM8962_SAMPLE_RATE_WIDTH                     3  /* SAMPLE_RATE - [2:0] */
+
+/*
+ * R28 (0x1C) - Anti-pop
+ */
+#define WM8962_STARTUP_BIAS_ENA                 0x0010  /* STARTUP_BIAS_ENA */
+#define WM8962_STARTUP_BIAS_ENA_MASK            0x0010  /* STARTUP_BIAS_ENA */
+#define WM8962_STARTUP_BIAS_ENA_SHIFT                4  /* STARTUP_BIAS_ENA */
+#define WM8962_STARTUP_BIAS_ENA_WIDTH                1  /* STARTUP_BIAS_ENA */
+#define WM8962_VMID_BUF_ENA                     0x0008  /* VMID_BUF_ENA */
+#define WM8962_VMID_BUF_ENA_MASK                0x0008  /* VMID_BUF_ENA */
+#define WM8962_VMID_BUF_ENA_SHIFT                    3  /* VMID_BUF_ENA */
+#define WM8962_VMID_BUF_ENA_WIDTH                    1  /* VMID_BUF_ENA */
+#define WM8962_VMID_RAMP                        0x0004  /* VMID_RAMP */
+#define WM8962_VMID_RAMP_MASK                   0x0004  /* VMID_RAMP */
+#define WM8962_VMID_RAMP_SHIFT                       2  /* VMID_RAMP */
+#define WM8962_VMID_RAMP_WIDTH                       1  /* VMID_RAMP */
+
+/*
+ * R30 (0x1E) - Clocking 3
+ */
+#define WM8962_DBCLK_DIV_MASK                   0xE000  /* DBCLK_DIV - [15:13] */
+#define WM8962_DBCLK_DIV_SHIFT                      13  /* DBCLK_DIV - [15:13] */
+#define WM8962_DBCLK_DIV_WIDTH                       3  /* DBCLK_DIV - [15:13] */
+#define WM8962_OPCLK_DIV_MASK                   0x1C00  /* OPCLK_DIV - [12:10] */
+#define WM8962_OPCLK_DIV_SHIFT                      10  /* OPCLK_DIV - [12:10] */
+#define WM8962_OPCLK_DIV_WIDTH                       3  /* OPCLK_DIV - [12:10] */
+#define WM8962_TOCLK_DIV_MASK                   0x0380  /* TOCLK_DIV - [9:7] */
+#define WM8962_TOCLK_DIV_SHIFT                       7  /* TOCLK_DIV - [9:7] */
+#define WM8962_TOCLK_DIV_WIDTH                       3  /* TOCLK_DIV - [9:7] */
+#define WM8962_F256KCLK_DIV_MASK                0x007E  /* F256KCLK_DIV - [6:1] */
+#define WM8962_F256KCLK_DIV_SHIFT                    1  /* F256KCLK_DIV - [6:1] */
+#define WM8962_F256KCLK_DIV_WIDTH                    6  /* F256KCLK_DIV - [6:1] */
+
+/*
+ * R31 (0x1F) - Input mixer control (1)
+ */
+#define WM8962_MIXINL_MUTE                      0x0008  /* MIXINL_MUTE */
+#define WM8962_MIXINL_MUTE_MASK                 0x0008  /* MIXINL_MUTE */
+#define WM8962_MIXINL_MUTE_SHIFT                     3  /* MIXINL_MUTE */
+#define WM8962_MIXINL_MUTE_WIDTH                     1  /* MIXINL_MUTE */
+#define WM8962_MIXINR_MUTE                      0x0004  /* MIXINR_MUTE */
+#define WM8962_MIXINR_MUTE_MASK                 0x0004  /* MIXINR_MUTE */
+#define WM8962_MIXINR_MUTE_SHIFT                     2  /* MIXINR_MUTE */
+#define WM8962_MIXINR_MUTE_WIDTH                     1  /* MIXINR_MUTE */
+#define WM8962_MIXINL_ENA                       0x0002  /* MIXINL_ENA */
+#define WM8962_MIXINL_ENA_MASK                  0x0002  /* MIXINL_ENA */
+#define WM8962_MIXINL_ENA_SHIFT                      1  /* MIXINL_ENA */
+#define WM8962_MIXINL_ENA_WIDTH                      1  /* MIXINL_ENA */
+#define WM8962_MIXINR_ENA                       0x0001  /* MIXINR_ENA */
+#define WM8962_MIXINR_ENA_MASK                  0x0001  /* MIXINR_ENA */
+#define WM8962_MIXINR_ENA_SHIFT                      0  /* MIXINR_ENA */
+#define WM8962_MIXINR_ENA_WIDTH                      1  /* MIXINR_ENA */
+
+/*
+ * R32 (0x20) - Left input mixer volume
+ */
+#define WM8962_IN2L_MIXINL_VOL_MASK             0x01C0  /* IN2L_MIXINL_VOL - [8:6] */
+#define WM8962_IN2L_MIXINL_VOL_SHIFT                 6  /* IN2L_MIXINL_VOL - [8:6] */
+#define WM8962_IN2L_MIXINL_VOL_WIDTH                 3  /* IN2L_MIXINL_VOL - [8:6] */
+#define WM8962_INPGAL_MIXINL_VOL_MASK           0x0038  /* INPGAL_MIXINL_VOL - [5:3] */
+#define WM8962_INPGAL_MIXINL_VOL_SHIFT               3  /* INPGAL_MIXINL_VOL - [5:3] */
+#define WM8962_INPGAL_MIXINL_VOL_WIDTH               3  /* INPGAL_MIXINL_VOL - [5:3] */
+#define WM8962_IN3L_MIXINL_VOL_MASK             0x0007  /* IN3L_MIXINL_VOL - [2:0] */
+#define WM8962_IN3L_MIXINL_VOL_SHIFT                 0  /* IN3L_MIXINL_VOL - [2:0] */
+#define WM8962_IN3L_MIXINL_VOL_WIDTH                 3  /* IN3L_MIXINL_VOL - [2:0] */
+
+/*
+ * R33 (0x21) - Right input mixer volume
+ */
+#define WM8962_IN2R_MIXINR_VOL_MASK             0x01C0  /* IN2R_MIXINR_VOL - [8:6] */
+#define WM8962_IN2R_MIXINR_VOL_SHIFT                 6  /* IN2R_MIXINR_VOL - [8:6] */
+#define WM8962_IN2R_MIXINR_VOL_WIDTH                 3  /* IN2R_MIXINR_VOL - [8:6] */
+#define WM8962_INPGAR_MIXINR_VOL_MASK           0x0038  /* INPGAR_MIXINR_VOL - [5:3] */
+#define WM8962_INPGAR_MIXINR_VOL_SHIFT               3  /* INPGAR_MIXINR_VOL - [5:3] */
+#define WM8962_INPGAR_MIXINR_VOL_WIDTH               3  /* INPGAR_MIXINR_VOL - [5:3] */
+#define WM8962_IN3R_MIXINR_VOL_MASK             0x0007  /* IN3R_MIXINR_VOL - [2:0] */
+#define WM8962_IN3R_MIXINR_VOL_SHIFT                 0  /* IN3R_MIXINR_VOL - [2:0] */
+#define WM8962_IN3R_MIXINR_VOL_WIDTH                 3  /* IN3R_MIXINR_VOL - [2:0] */
+
+/*
+ * R34 (0x22) - Input mixer control (2)
+ */
+#define WM8962_IN2L_TO_MIXINL                   0x0020  /* IN2L_TO_MIXINL */
+#define WM8962_IN2L_TO_MIXINL_MASK              0x0020  /* IN2L_TO_MIXINL */
+#define WM8962_IN2L_TO_MIXINL_SHIFT                  5  /* IN2L_TO_MIXINL */
+#define WM8962_IN2L_TO_MIXINL_WIDTH                  1  /* IN2L_TO_MIXINL */
+#define WM8962_IN3L_TO_MIXINL                   0x0010  /* IN3L_TO_MIXINL */
+#define WM8962_IN3L_TO_MIXINL_MASK              0x0010  /* IN3L_TO_MIXINL */
+#define WM8962_IN3L_TO_MIXINL_SHIFT                  4  /* IN3L_TO_MIXINL */
+#define WM8962_IN3L_TO_MIXINL_WIDTH                  1  /* IN3L_TO_MIXINL */
+#define WM8962_INPGAL_TO_MIXINL                 0x0008  /* INPGAL_TO_MIXINL */
+#define WM8962_INPGAL_TO_MIXINL_MASK            0x0008  /* INPGAL_TO_MIXINL */
+#define WM8962_INPGAL_TO_MIXINL_SHIFT                3  /* INPGAL_TO_MIXINL */
+#define WM8962_INPGAL_TO_MIXINL_WIDTH                1  /* INPGAL_TO_MIXINL */
+#define WM8962_IN2R_TO_MIXINR                   0x0004  /* IN2R_TO_MIXINR */
+#define WM8962_IN2R_TO_MIXINR_MASK              0x0004  /* IN2R_TO_MIXINR */
+#define WM8962_IN2R_TO_MIXINR_SHIFT                  2  /* IN2R_TO_MIXINR */
+#define WM8962_IN2R_TO_MIXINR_WIDTH                  1  /* IN2R_TO_MIXINR */
+#define WM8962_IN3R_TO_MIXINR                   0x0002  /* IN3R_TO_MIXINR */
+#define WM8962_IN3R_TO_MIXINR_MASK              0x0002  /* IN3R_TO_MIXINR */
+#define WM8962_IN3R_TO_MIXINR_SHIFT                  1  /* IN3R_TO_MIXINR */
+#define WM8962_IN3R_TO_MIXINR_WIDTH                  1  /* IN3R_TO_MIXINR */
+#define WM8962_INPGAR_TO_MIXINR                 0x0001  /* INPGAR_TO_MIXINR */
+#define WM8962_INPGAR_TO_MIXINR_MASK            0x0001  /* INPGAR_TO_MIXINR */
+#define WM8962_INPGAR_TO_MIXINR_SHIFT                0  /* INPGAR_TO_MIXINR */
+#define WM8962_INPGAR_TO_MIXINR_WIDTH                1  /* INPGAR_TO_MIXINR */
+
+/*
+ * R35 (0x23) - Input bias control
+ */
+#define WM8962_MIXIN_BIAS_MASK                  0x0038  /* MIXIN_BIAS - [5:3] */
+#define WM8962_MIXIN_BIAS_SHIFT                      3  /* MIXIN_BIAS - [5:3] */
+#define WM8962_MIXIN_BIAS_WIDTH                      3  /* MIXIN_BIAS - [5:3] */
+#define WM8962_INPGA_BIAS_MASK                  0x0007  /* INPGA_BIAS - [2:0] */
+#define WM8962_INPGA_BIAS_SHIFT                      0  /* INPGA_BIAS - [2:0] */
+#define WM8962_INPGA_BIAS_WIDTH                      3  /* INPGA_BIAS - [2:0] */
+
+/*
+ * R37 (0x25) - Left input PGA control
+ */
+#define WM8962_INPGAL_ENA                       0x0010  /* INPGAL_ENA */
+#define WM8962_INPGAL_ENA_MASK                  0x0010  /* INPGAL_ENA */
+#define WM8962_INPGAL_ENA_SHIFT                      4  /* INPGAL_ENA */
+#define WM8962_INPGAL_ENA_WIDTH                      1  /* INPGAL_ENA */
+#define WM8962_IN1L_TO_INPGAL                   0x0008  /* IN1L_TO_INPGAL */
+#define WM8962_IN1L_TO_INPGAL_MASK              0x0008  /* IN1L_TO_INPGAL */
+#define WM8962_IN1L_TO_INPGAL_SHIFT                  3  /* IN1L_TO_INPGAL */
+#define WM8962_IN1L_TO_INPGAL_WIDTH                  1  /* IN1L_TO_INPGAL */
+#define WM8962_IN2L_TO_INPGAL                   0x0004  /* IN2L_TO_INPGAL */
+#define WM8962_IN2L_TO_INPGAL_MASK              0x0004  /* IN2L_TO_INPGAL */
+#define WM8962_IN2L_TO_INPGAL_SHIFT                  2  /* IN2L_TO_INPGAL */
+#define WM8962_IN2L_TO_INPGAL_WIDTH                  1  /* IN2L_TO_INPGAL */
+#define WM8962_IN3L_TO_INPGAL                   0x0002  /* IN3L_TO_INPGAL */
+#define WM8962_IN3L_TO_INPGAL_MASK              0x0002  /* IN3L_TO_INPGAL */
+#define WM8962_IN3L_TO_INPGAL_SHIFT                  1  /* IN3L_TO_INPGAL */
+#define WM8962_IN3L_TO_INPGAL_WIDTH                  1  /* IN3L_TO_INPGAL */
+#define WM8962_IN4L_TO_INPGAL                   0x0001  /* IN4L_TO_INPGAL */
+#define WM8962_IN4L_TO_INPGAL_MASK              0x0001  /* IN4L_TO_INPGAL */
+#define WM8962_IN4L_TO_INPGAL_SHIFT                  0  /* IN4L_TO_INPGAL */
+#define WM8962_IN4L_TO_INPGAL_WIDTH                  1  /* IN4L_TO_INPGAL */
+
+/*
+ * R38 (0x26) - Right input PGA control
+ */
+#define WM8962_INPGAR_ENA                       0x0010  /* INPGAR_ENA */
+#define WM8962_INPGAR_ENA_MASK                  0x0010  /* INPGAR_ENA */
+#define WM8962_INPGAR_ENA_SHIFT                      4  /* INPGAR_ENA */
+#define WM8962_INPGAR_ENA_WIDTH                      1  /* INPGAR_ENA */
+#define WM8962_IN1R_TO_INPGAR                   0x0008  /* IN1R_TO_INPGAR */
+#define WM8962_IN1R_TO_INPGAR_MASK              0x0008  /* IN1R_TO_INPGAR */
+#define WM8962_IN1R_TO_INPGAR_SHIFT                  3  /* IN1R_TO_INPGAR */
+#define WM8962_IN1R_TO_INPGAR_WIDTH                  1  /* IN1R_TO_INPGAR */
+#define WM8962_IN2R_TO_INPGAR                   0x0004  /* IN2R_TO_INPGAR */
+#define WM8962_IN2R_TO_INPGAR_MASK              0x0004  /* IN2R_TO_INPGAR */
+#define WM8962_IN2R_TO_INPGAR_SHIFT                  2  /* IN2R_TO_INPGAR */
+#define WM8962_IN2R_TO_INPGAR_WIDTH                  1  /* IN2R_TO_INPGAR */
+#define WM8962_IN3R_TO_INPGAR                   0x0002  /* IN3R_TO_INPGAR */
+#define WM8962_IN3R_TO_INPGAR_MASK              0x0002  /* IN3R_TO_INPGAR */
+#define WM8962_IN3R_TO_INPGAR_SHIFT                  1  /* IN3R_TO_INPGAR */
+#define WM8962_IN3R_TO_INPGAR_WIDTH                  1  /* IN3R_TO_INPGAR */
+#define WM8962_IN4R_TO_INPGAR                   0x0001  /* IN4R_TO_INPGAR */
+#define WM8962_IN4R_TO_INPGAR_MASK              0x0001  /* IN4R_TO_INPGAR */
+#define WM8962_IN4R_TO_INPGAR_SHIFT                  0  /* IN4R_TO_INPGAR */
+#define WM8962_IN4R_TO_INPGAR_WIDTH                  1  /* IN4R_TO_INPGAR */
+
+/*
+ * R40 (0x28) - SPKOUTL volume
+ */
+#define WM8962_SPKOUT_VU                        0x0100  /* SPKOUT_VU */
+#define WM8962_SPKOUT_VU_MASK                   0x0100  /* SPKOUT_VU */
+#define WM8962_SPKOUT_VU_SHIFT                       8  /* SPKOUT_VU */
+#define WM8962_SPKOUT_VU_WIDTH                       1  /* SPKOUT_VU */
+#define WM8962_SPKOUTL_ZC                       0x0080  /* SPKOUTL_ZC */
+#define WM8962_SPKOUTL_ZC_MASK                  0x0080  /* SPKOUTL_ZC */
+#define WM8962_SPKOUTL_ZC_SHIFT                      7  /* SPKOUTL_ZC */
+#define WM8962_SPKOUTL_ZC_WIDTH                      1  /* SPKOUTL_ZC */
+#define WM8962_SPKOUTL_VOL_MASK                 0x007F  /* SPKOUTL_VOL - [6:0] */
+#define WM8962_SPKOUTL_VOL_SHIFT                     0  /* SPKOUTL_VOL - [6:0] */
+#define WM8962_SPKOUTL_VOL_WIDTH                     7  /* SPKOUTL_VOL - [6:0] */
+
+/*
+ * R41 (0x29) - SPKOUTR volume
+ */
+#define WM8962_SPKOUTR_ZC                       0x0080  /* SPKOUTR_ZC */
+#define WM8962_SPKOUTR_ZC_MASK                  0x0080  /* SPKOUTR_ZC */
+#define WM8962_SPKOUTR_ZC_SHIFT                      7  /* SPKOUTR_ZC */
+#define WM8962_SPKOUTR_ZC_WIDTH                      1  /* SPKOUTR_ZC */
+#define WM8962_SPKOUTR_VOL_MASK                 0x007F  /* SPKOUTR_VOL - [6:0] */
+#define WM8962_SPKOUTR_VOL_SHIFT                     0  /* SPKOUTR_VOL - [6:0] */
+#define WM8962_SPKOUTR_VOL_WIDTH                     7  /* SPKOUTR_VOL - [6:0] */
+
+/*
+ * R47 (0x2F) - Thermal Shutdown Status
+ */
+#define WM8962_TEMP_ERR_HP                      0x0008  /* TEMP_ERR_HP */
+#define WM8962_TEMP_ERR_HP_MASK                 0x0008  /* TEMP_ERR_HP */
+#define WM8962_TEMP_ERR_HP_SHIFT                     3  /* TEMP_ERR_HP */
+#define WM8962_TEMP_ERR_HP_WIDTH                     1  /* TEMP_ERR_HP */
+#define WM8962_TEMP_WARN_HP                     0x0004  /* TEMP_WARN_HP */
+#define WM8962_TEMP_WARN_HP_MASK                0x0004  /* TEMP_WARN_HP */
+#define WM8962_TEMP_WARN_HP_SHIFT                    2  /* TEMP_WARN_HP */
+#define WM8962_TEMP_WARN_HP_WIDTH                    1  /* TEMP_WARN_HP */
+#define WM8962_TEMP_ERR_SPK                     0x0002  /* TEMP_ERR_SPK */
+#define WM8962_TEMP_ERR_SPK_MASK                0x0002  /* TEMP_ERR_SPK */
+#define WM8962_TEMP_ERR_SPK_SHIFT                    1  /* TEMP_ERR_SPK */
+#define WM8962_TEMP_ERR_SPK_WIDTH                    1  /* TEMP_ERR_SPK */
+#define WM8962_TEMP_WARN_SPK                    0x0001  /* TEMP_WARN_SPK */
+#define WM8962_TEMP_WARN_SPK_MASK               0x0001  /* TEMP_WARN_SPK */
+#define WM8962_TEMP_WARN_SPK_SHIFT                   0  /* TEMP_WARN_SPK */
+#define WM8962_TEMP_WARN_SPK_WIDTH                   1  /* TEMP_WARN_SPK */
+
+/*
+ * R48 (0x30) - Additional Control (4)
+ */
+#define WM8962_MICDET_THR_MASK                  0x7000  /* MICDET_THR - [14:12] */
+#define WM8962_MICDET_THR_SHIFT                     12  /* MICDET_THR - [14:12] */
+#define WM8962_MICDET_THR_WIDTH                      3  /* MICDET_THR - [14:12] */
+#define WM8962_MICSHORT_THR_MASK                0x0C00  /* MICSHORT_THR - [11:10] */
+#define WM8962_MICSHORT_THR_SHIFT                   10  /* MICSHORT_THR - [11:10] */
+#define WM8962_MICSHORT_THR_WIDTH                    2  /* MICSHORT_THR - [11:10] */
+#define WM8962_MICDET_ENA                       0x0200  /* MICDET_ENA */
+#define WM8962_MICDET_ENA_MASK                  0x0200  /* MICDET_ENA */
+#define WM8962_MICDET_ENA_SHIFT                      9  /* MICDET_ENA */
+#define WM8962_MICDET_ENA_WIDTH                      1  /* MICDET_ENA */
+#define WM8962_MICDET_STS                       0x0080  /* MICDET_STS */
+#define WM8962_MICDET_STS_MASK                  0x0080  /* MICDET_STS */
+#define WM8962_MICDET_STS_SHIFT                      7  /* MICDET_STS */
+#define WM8962_MICDET_STS_WIDTH                      1  /* MICDET_STS */
+#define WM8962_MICSHORT_STS                     0x0040  /* MICSHORT_STS */
+#define WM8962_MICSHORT_STS_MASK                0x0040  /* MICSHORT_STS */
+#define WM8962_MICSHORT_STS_SHIFT                    6  /* MICSHORT_STS */
+#define WM8962_MICSHORT_STS_WIDTH                    1  /* MICSHORT_STS */
+#define WM8962_TEMP_ENA_HP                      0x0004  /* TEMP_ENA_HP */
+#define WM8962_TEMP_ENA_HP_MASK                 0x0004  /* TEMP_ENA_HP */
+#define WM8962_TEMP_ENA_HP_SHIFT                     2  /* TEMP_ENA_HP */
+#define WM8962_TEMP_ENA_HP_WIDTH                     1  /* TEMP_ENA_HP */
+#define WM8962_TEMP_ENA_SPK                     0x0002  /* TEMP_ENA_SPK */
+#define WM8962_TEMP_ENA_SPK_MASK                0x0002  /* TEMP_ENA_SPK */
+#define WM8962_TEMP_ENA_SPK_SHIFT                    1  /* TEMP_ENA_SPK */
+#define WM8962_TEMP_ENA_SPK_WIDTH                    1  /* TEMP_ENA_SPK */
+#define WM8962_MICBIAS_LVL                      0x0001  /* MICBIAS_LVL */
+#define WM8962_MICBIAS_LVL_MASK                 0x0001  /* MICBIAS_LVL */
+#define WM8962_MICBIAS_LVL_SHIFT                     0  /* MICBIAS_LVL */
+#define WM8962_MICBIAS_LVL_WIDTH                     1  /* MICBIAS_LVL */
+
+/*
+ * R49 (0x31) - Class D Control 1
+ */
+#define WM8962_SPKOUTR_ENA                      0x0080  /* SPKOUTR_ENA */
+#define WM8962_SPKOUTR_ENA_MASK                 0x0080  /* SPKOUTR_ENA */
+#define WM8962_SPKOUTR_ENA_SHIFT                     7  /* SPKOUTR_ENA */
+#define WM8962_SPKOUTR_ENA_WIDTH                     1  /* SPKOUTR_ENA */
+#define WM8962_SPKOUTL_ENA                      0x0040  /* SPKOUTL_ENA */
+#define WM8962_SPKOUTL_ENA_MASK                 0x0040  /* SPKOUTL_ENA */
+#define WM8962_SPKOUTL_ENA_SHIFT                     6  /* SPKOUTL_ENA */
+#define WM8962_SPKOUTL_ENA_WIDTH                     1  /* SPKOUTL_ENA */
+#define WM8962_SPKOUTL_PGA_MUTE                 0x0002  /* SPKOUTL_PGA_MUTE */
+#define WM8962_SPKOUTL_PGA_MUTE_MASK            0x0002  /* SPKOUTL_PGA_MUTE */
+#define WM8962_SPKOUTL_PGA_MUTE_SHIFT                1  /* SPKOUTL_PGA_MUTE */
+#define WM8962_SPKOUTL_PGA_MUTE_WIDTH                1  /* SPKOUTL_PGA_MUTE */
+#define WM8962_SPKOUTR_PGA_MUTE                 0x0001  /* SPKOUTR_PGA_MUTE */
+#define WM8962_SPKOUTR_PGA_MUTE_MASK            0x0001  /* SPKOUTR_PGA_MUTE */
+#define WM8962_SPKOUTR_PGA_MUTE_SHIFT                0  /* SPKOUTR_PGA_MUTE */
+#define WM8962_SPKOUTR_PGA_MUTE_WIDTH                1  /* SPKOUTR_PGA_MUTE */
+
+/*
+ * R51 (0x33) - Class D Control 2
+ */
+#define WM8962_SPK_MONO                         0x0040  /* SPK_MONO */
+#define WM8962_SPK_MONO_MASK                    0x0040  /* SPK_MONO */
+#define WM8962_SPK_MONO_SHIFT                        6  /* SPK_MONO */
+#define WM8962_SPK_MONO_WIDTH                        1  /* SPK_MONO */
+#define WM8962_CLASSD_VOL_MASK                  0x0007  /* CLASSD_VOL - [2:0] */
+#define WM8962_CLASSD_VOL_SHIFT                      0  /* CLASSD_VOL - [2:0] */
+#define WM8962_CLASSD_VOL_WIDTH                      3  /* CLASSD_VOL - [2:0] */
+
+/*
+ * R56 (0x38) - Clocking 4
+ */
+#define WM8962_SYSCLK_RATE_MASK                 0x001E  /* SYSCLK_RATE - [4:1] */
+#define WM8962_SYSCLK_RATE_SHIFT                     1  /* SYSCLK_RATE - [4:1] */
+#define WM8962_SYSCLK_RATE_WIDTH                     4  /* SYSCLK_RATE - [4:1] */
+
+/*
+ * R57 (0x39) - DAC DSP Mixing (1)
+ */
+#define WM8962_DAC_MONOMIX                      0x0200  /* DAC_MONOMIX */
+#define WM8962_DAC_MONOMIX_MASK                 0x0200  /* DAC_MONOMIX */
+#define WM8962_DAC_MONOMIX_SHIFT                     9  /* DAC_MONOMIX */
+#define WM8962_DAC_MONOMIX_WIDTH                     1  /* DAC_MONOMIX */
+#define WM8962_ADCR_DAC_SVOL_MASK               0x00F0  /* ADCR_DAC_SVOL - [7:4] */
+#define WM8962_ADCR_DAC_SVOL_SHIFT                   4  /* ADCR_DAC_SVOL - [7:4] */
+#define WM8962_ADCR_DAC_SVOL_WIDTH                   4  /* ADCR_DAC_SVOL - [7:4] */
+#define WM8962_ADC_TO_DACR_MASK                 0x000C  /* ADC_TO_DACR - [3:2] */
+#define WM8962_ADC_TO_DACR_SHIFT                     2  /* ADC_TO_DACR - [3:2] */
+#define WM8962_ADC_TO_DACR_WIDTH                     2  /* ADC_TO_DACR - [3:2] */
+
+/*
+ * R58 (0x3A) - DAC DSP Mixing (2)
+ */
+#define WM8962_ADCL_DAC_SVOL_MASK               0x00F0  /* ADCL_DAC_SVOL - [7:4] */
+#define WM8962_ADCL_DAC_SVOL_SHIFT                   4  /* ADCL_DAC_SVOL - [7:4] */
+#define WM8962_ADCL_DAC_SVOL_WIDTH                   4  /* ADCL_DAC_SVOL - [7:4] */
+#define WM8962_ADC_TO_DACL_MASK                 0x000C  /* ADC_TO_DACL - [3:2] */
+#define WM8962_ADC_TO_DACL_SHIFT                     2  /* ADC_TO_DACL - [3:2] */
+#define WM8962_ADC_TO_DACL_WIDTH                     2  /* ADC_TO_DACL - [3:2] */
+
+/*
+ * R60 (0x3C) - DC Servo 0
+ */
+#define WM8962_INL_DCS_ENA                      0x0080  /* INL_DCS_ENA */
+#define WM8962_INL_DCS_ENA_MASK                 0x0080  /* INL_DCS_ENA */
+#define WM8962_INL_DCS_ENA_SHIFT                     7  /* INL_DCS_ENA */
+#define WM8962_INL_DCS_ENA_WIDTH                     1  /* INL_DCS_ENA */
+#define WM8962_INL_DCS_STARTUP                  0x0040  /* INL_DCS_STARTUP */
+#define WM8962_INL_DCS_STARTUP_MASK             0x0040  /* INL_DCS_STARTUP */
+#define WM8962_INL_DCS_STARTUP_SHIFT                 6  /* INL_DCS_STARTUP */
+#define WM8962_INL_DCS_STARTUP_WIDTH                 1  /* INL_DCS_STARTUP */
+#define WM8962_INR_DCS_ENA                      0x0008  /* INR_DCS_ENA */
+#define WM8962_INR_DCS_ENA_MASK                 0x0008  /* INR_DCS_ENA */
+#define WM8962_INR_DCS_ENA_SHIFT                     3  /* INR_DCS_ENA */
+#define WM8962_INR_DCS_ENA_WIDTH                     1  /* INR_DCS_ENA */
+#define WM8962_INR_DCS_STARTUP                  0x0004  /* INR_DCS_STARTUP */
+#define WM8962_INR_DCS_STARTUP_MASK             0x0004  /* INR_DCS_STARTUP */
+#define WM8962_INR_DCS_STARTUP_SHIFT                 2  /* INR_DCS_STARTUP */
+#define WM8962_INR_DCS_STARTUP_WIDTH                 1  /* INR_DCS_STARTUP */
+
+/*
+ * R61 (0x3D) - DC Servo 1
+ */
+#define WM8962_HP1L_DCS_ENA                     0x0080  /* HP1L_DCS_ENA */
+#define WM8962_HP1L_DCS_ENA_MASK                0x0080  /* HP1L_DCS_ENA */
+#define WM8962_HP1L_DCS_ENA_SHIFT                    7  /* HP1L_DCS_ENA */
+#define WM8962_HP1L_DCS_ENA_WIDTH                    1  /* HP1L_DCS_ENA */
+#define WM8962_HP1L_DCS_STARTUP                 0x0040  /* HP1L_DCS_STARTUP */
+#define WM8962_HP1L_DCS_STARTUP_MASK            0x0040  /* HP1L_DCS_STARTUP */
+#define WM8962_HP1L_DCS_STARTUP_SHIFT                6  /* HP1L_DCS_STARTUP */
+#define WM8962_HP1L_DCS_STARTUP_WIDTH                1  /* HP1L_DCS_STARTUP */
+#define WM8962_HP1L_DCS_SYNC                    0x0010  /* HP1L_DCS_SYNC */
+#define WM8962_HP1L_DCS_SYNC_MASK               0x0010  /* HP1L_DCS_SYNC */
+#define WM8962_HP1L_DCS_SYNC_SHIFT                   4  /* HP1L_DCS_SYNC */
+#define WM8962_HP1L_DCS_SYNC_WIDTH                   1  /* HP1L_DCS_SYNC */
+#define WM8962_HP1R_DCS_ENA                     0x0008  /* HP1R_DCS_ENA */
+#define WM8962_HP1R_DCS_ENA_MASK                0x0008  /* HP1R_DCS_ENA */
+#define WM8962_HP1R_DCS_ENA_SHIFT                    3  /* HP1R_DCS_ENA */
+#define WM8962_HP1R_DCS_ENA_WIDTH                    1  /* HP1R_DCS_ENA */
+#define WM8962_HP1R_DCS_STARTUP                 0x0004  /* HP1R_DCS_STARTUP */
+#define WM8962_HP1R_DCS_STARTUP_MASK            0x0004  /* HP1R_DCS_STARTUP */
+#define WM8962_HP1R_DCS_STARTUP_SHIFT                2  /* HP1R_DCS_STARTUP */
+#define WM8962_HP1R_DCS_STARTUP_WIDTH                1  /* HP1R_DCS_STARTUP */
+#define WM8962_HP1R_DCS_SYNC                    0x0001  /* HP1R_DCS_SYNC */
+#define WM8962_HP1R_DCS_SYNC_MASK               0x0001  /* HP1R_DCS_SYNC */
+#define WM8962_HP1R_DCS_SYNC_SHIFT                   0  /* HP1R_DCS_SYNC */
+#define WM8962_HP1R_DCS_SYNC_WIDTH                   1  /* HP1R_DCS_SYNC */
+
+/*
+ * R64 (0x40) - DC Servo 4
+ */
+#define WM8962_HP1_DCS_SYNC_STEPS_MASK          0x3F80  /* HP1_DCS_SYNC_STEPS - [13:7] */
+#define WM8962_HP1_DCS_SYNC_STEPS_SHIFT              7  /* HP1_DCS_SYNC_STEPS - [13:7] */
+#define WM8962_HP1_DCS_SYNC_STEPS_WIDTH              7  /* HP1_DCS_SYNC_STEPS - [13:7] */
+
+/*
+ * R66 (0x42) - DC Servo 6
+ */
+#define WM8962_DCS_STARTUP_DONE_INL             0x0400  /* DCS_STARTUP_DONE_INL */
+#define WM8962_DCS_STARTUP_DONE_INL_MASK        0x0400  /* DCS_STARTUP_DONE_INL */
+#define WM8962_DCS_STARTUP_DONE_INL_SHIFT           10  /* DCS_STARTUP_DONE_INL */
+#define WM8962_DCS_STARTUP_DONE_INL_WIDTH            1  /* DCS_STARTUP_DONE_INL */
+#define WM8962_DCS_STARTUP_DONE_INR             0x0200  /* DCS_STARTUP_DONE_INR */
+#define WM8962_DCS_STARTUP_DONE_INR_MASK        0x0200  /* DCS_STARTUP_DONE_INR */
+#define WM8962_DCS_STARTUP_DONE_INR_SHIFT            9  /* DCS_STARTUP_DONE_INR */
+#define WM8962_DCS_STARTUP_DONE_INR_WIDTH            1  /* DCS_STARTUP_DONE_INR */
+#define WM8962_DCS_STARTUP_DONE_HP1L            0x0100  /* DCS_STARTUP_DONE_HP1L */
+#define WM8962_DCS_STARTUP_DONE_HP1L_MASK       0x0100  /* DCS_STARTUP_DONE_HP1L */
+#define WM8962_DCS_STARTUP_DONE_HP1L_SHIFT           8  /* DCS_STARTUP_DONE_HP1L */
+#define WM8962_DCS_STARTUP_DONE_HP1L_WIDTH           1  /* DCS_STARTUP_DONE_HP1L */
+#define WM8962_DCS_STARTUP_DONE_HP1R            0x0080  /* DCS_STARTUP_DONE_HP1R */
+#define WM8962_DCS_STARTUP_DONE_HP1R_MASK       0x0080  /* DCS_STARTUP_DONE_HP1R */
+#define WM8962_DCS_STARTUP_DONE_HP1R_SHIFT           7  /* DCS_STARTUP_DONE_HP1R */
+#define WM8962_DCS_STARTUP_DONE_HP1R_WIDTH           1  /* DCS_STARTUP_DONE_HP1R */
+
+/*
+ * R68 (0x44) - Analogue PGA Bias
+ */
+#define WM8962_HP_PGAS_BIAS_MASK                0x0007  /* HP_PGAS_BIAS - [2:0] */
+#define WM8962_HP_PGAS_BIAS_SHIFT                    0  /* HP_PGAS_BIAS - [2:0] */
+#define WM8962_HP_PGAS_BIAS_WIDTH                    3  /* HP_PGAS_BIAS - [2:0] */
+
+/*
+ * R69 (0x45) - Analogue HP 0
+ */
+#define WM8962_HP1L_RMV_SHORT                   0x0080  /* HP1L_RMV_SHORT */
+#define WM8962_HP1L_RMV_SHORT_MASK              0x0080  /* HP1L_RMV_SHORT */
+#define WM8962_HP1L_RMV_SHORT_SHIFT                  7  /* HP1L_RMV_SHORT */
+#define WM8962_HP1L_RMV_SHORT_WIDTH                  1  /* HP1L_RMV_SHORT */
+#define WM8962_HP1L_ENA_OUTP                    0x0040  /* HP1L_ENA_OUTP */
+#define WM8962_HP1L_ENA_OUTP_MASK               0x0040  /* HP1L_ENA_OUTP */
+#define WM8962_HP1L_ENA_OUTP_SHIFT                   6  /* HP1L_ENA_OUTP */
+#define WM8962_HP1L_ENA_OUTP_WIDTH                   1  /* HP1L_ENA_OUTP */
+#define WM8962_HP1L_ENA_DLY                     0x0020  /* HP1L_ENA_DLY */
+#define WM8962_HP1L_ENA_DLY_MASK                0x0020  /* HP1L_ENA_DLY */
+#define WM8962_HP1L_ENA_DLY_SHIFT                    5  /* HP1L_ENA_DLY */
+#define WM8962_HP1L_ENA_DLY_WIDTH                    1  /* HP1L_ENA_DLY */
+#define WM8962_HP1L_ENA                         0x0010  /* HP1L_ENA */
+#define WM8962_HP1L_ENA_MASK                    0x0010  /* HP1L_ENA */
+#define WM8962_HP1L_ENA_SHIFT                        4  /* HP1L_ENA */
+#define WM8962_HP1L_ENA_WIDTH                        1  /* HP1L_ENA */
+#define WM8962_HP1R_RMV_SHORT                   0x0008  /* HP1R_RMV_SHORT */
+#define WM8962_HP1R_RMV_SHORT_MASK              0x0008  /* HP1R_RMV_SHORT */
+#define WM8962_HP1R_RMV_SHORT_SHIFT                  3  /* HP1R_RMV_SHORT */
+#define WM8962_HP1R_RMV_SHORT_WIDTH                  1  /* HP1R_RMV_SHORT */
+#define WM8962_HP1R_ENA_OUTP                    0x0004  /* HP1R_ENA_OUTP */
+#define WM8962_HP1R_ENA_OUTP_MASK               0x0004  /* HP1R_ENA_OUTP */
+#define WM8962_HP1R_ENA_OUTP_SHIFT                   2  /* HP1R_ENA_OUTP */
+#define WM8962_HP1R_ENA_OUTP_WIDTH                   1  /* HP1R_ENA_OUTP */
+#define WM8962_HP1R_ENA_DLY                     0x0002  /* HP1R_ENA_DLY */
+#define WM8962_HP1R_ENA_DLY_MASK                0x0002  /* HP1R_ENA_DLY */
+#define WM8962_HP1R_ENA_DLY_SHIFT                    1  /* HP1R_ENA_DLY */
+#define WM8962_HP1R_ENA_DLY_WIDTH                    1  /* HP1R_ENA_DLY */
+#define WM8962_HP1R_ENA                         0x0001  /* HP1R_ENA */
+#define WM8962_HP1R_ENA_MASK                    0x0001  /* HP1R_ENA */
+#define WM8962_HP1R_ENA_SHIFT                        0  /* HP1R_ENA */
+#define WM8962_HP1R_ENA_WIDTH                        1  /* HP1R_ENA */
+
+/*
+ * R71 (0x47) - Analogue HP 2
+ */
+#define WM8962_HP1L_VOL_MASK                    0x01C0  /* HP1L_VOL - [8:6] */
+#define WM8962_HP1L_VOL_SHIFT                        6  /* HP1L_VOL - [8:6] */
+#define WM8962_HP1L_VOL_WIDTH                        3  /* HP1L_VOL - [8:6] */
+#define WM8962_HP1R_VOL_MASK                    0x0038  /* HP1R_VOL - [5:3] */
+#define WM8962_HP1R_VOL_SHIFT                        3  /* HP1R_VOL - [5:3] */
+#define WM8962_HP1R_VOL_WIDTH                        3  /* HP1R_VOL - [5:3] */
+#define WM8962_HP_BIAS_BOOST_MASK               0x0007  /* HP_BIAS_BOOST - [2:0] */
+#define WM8962_HP_BIAS_BOOST_SHIFT                   0  /* HP_BIAS_BOOST - [2:0] */
+#define WM8962_HP_BIAS_BOOST_WIDTH                   3  /* HP_BIAS_BOOST - [2:0] */
+
+/*
+ * R72 (0x48) - Charge Pump 1
+ */
+#define WM8962_CP_ENA                           0x0001  /* CP_ENA */
+#define WM8962_CP_ENA_MASK                      0x0001  /* CP_ENA */
+#define WM8962_CP_ENA_SHIFT                          0  /* CP_ENA */
+#define WM8962_CP_ENA_WIDTH                          1  /* CP_ENA */
+
+/*
+ * R82 (0x52) - Charge Pump B
+ */
+#define WM8962_CP_DYN_PWR                       0x0001  /* CP_DYN_PWR */
+#define WM8962_CP_DYN_PWR_MASK                  0x0001  /* CP_DYN_PWR */
+#define WM8962_CP_DYN_PWR_SHIFT                      0  /* CP_DYN_PWR */
+#define WM8962_CP_DYN_PWR_WIDTH                      1  /* CP_DYN_PWR */
+
+/*
+ * R87 (0x57) - Write Sequencer Control 1
+ */
+#define WM8962_WSEQ_AUTOSEQ_ENA                 0x0080  /* WSEQ_AUTOSEQ_ENA */
+#define WM8962_WSEQ_AUTOSEQ_ENA_MASK            0x0080  /* WSEQ_AUTOSEQ_ENA */
+#define WM8962_WSEQ_AUTOSEQ_ENA_SHIFT                7  /* WSEQ_AUTOSEQ_ENA */
+#define WM8962_WSEQ_AUTOSEQ_ENA_WIDTH                1  /* WSEQ_AUTOSEQ_ENA */
+#define WM8962_WSEQ_ENA                         0x0020  /* WSEQ_ENA */
+#define WM8962_WSEQ_ENA_MASK                    0x0020  /* WSEQ_ENA */
+#define WM8962_WSEQ_ENA_SHIFT                        5  /* WSEQ_ENA */
+#define WM8962_WSEQ_ENA_WIDTH                        1  /* WSEQ_ENA */
+
+/*
+ * R90 (0x5A) - Write Sequencer Control 2
+ */
+#define WM8962_WSEQ_ABORT                       0x0100  /* WSEQ_ABORT */
+#define WM8962_WSEQ_ABORT_MASK                  0x0100  /* WSEQ_ABORT */
+#define WM8962_WSEQ_ABORT_SHIFT                      8  /* WSEQ_ABORT */
+#define WM8962_WSEQ_ABORT_WIDTH                      1  /* WSEQ_ABORT */
+#define WM8962_WSEQ_START                       0x0080  /* WSEQ_START */
+#define WM8962_WSEQ_START_MASK                  0x0080  /* WSEQ_START */
+#define WM8962_WSEQ_START_SHIFT                      7  /* WSEQ_START */
+#define WM8962_WSEQ_START_WIDTH                      1  /* WSEQ_START */
+#define WM8962_WSEQ_START_INDEX_MASK            0x007F  /* WSEQ_START_INDEX - [6:0] */
+#define WM8962_WSEQ_START_INDEX_SHIFT                0  /* WSEQ_START_INDEX - [6:0] */
+#define WM8962_WSEQ_START_INDEX_WIDTH                7  /* WSEQ_START_INDEX - [6:0] */
+
+/*
+ * R93 (0x5D) - Write Sequencer Control 3
+ */
+#define WM8962_WSEQ_CURRENT_INDEX_MASK          0x03F8  /* WSEQ_CURRENT_INDEX - [9:3] */
+#define WM8962_WSEQ_CURRENT_INDEX_SHIFT              3  /* WSEQ_CURRENT_INDEX - [9:3] */
+#define WM8962_WSEQ_CURRENT_INDEX_WIDTH              7  /* WSEQ_CURRENT_INDEX - [9:3] */
+#define WM8962_WSEQ_BUSY                        0x0001  /* WSEQ_BUSY */
+#define WM8962_WSEQ_BUSY_MASK                   0x0001  /* WSEQ_BUSY */
+#define WM8962_WSEQ_BUSY_SHIFT                       0  /* WSEQ_BUSY */
+#define WM8962_WSEQ_BUSY_WIDTH                       1  /* WSEQ_BUSY */
+
+/*
+ * R94 (0x5E) - Control Interface
+ */
+#define WM8962_SPI_CONTRD                       0x0040  /* SPI_CONTRD */
+#define WM8962_SPI_CONTRD_MASK                  0x0040  /* SPI_CONTRD */
+#define WM8962_SPI_CONTRD_SHIFT                      6  /* SPI_CONTRD */
+#define WM8962_SPI_CONTRD_WIDTH                      1  /* SPI_CONTRD */
+#define WM8962_SPI_4WIRE                        0x0020  /* SPI_4WIRE */
+#define WM8962_SPI_4WIRE_MASK                   0x0020  /* SPI_4WIRE */
+#define WM8962_SPI_4WIRE_SHIFT                       5  /* SPI_4WIRE */
+#define WM8962_SPI_4WIRE_WIDTH                       1  /* SPI_4WIRE */
+#define WM8962_SPI_CFG                          0x0010  /* SPI_CFG */
+#define WM8962_SPI_CFG_MASK                     0x0010  /* SPI_CFG */
+#define WM8962_SPI_CFG_SHIFT                         4  /* SPI_CFG */
+#define WM8962_SPI_CFG_WIDTH                         1  /* SPI_CFG */
+
+/*
+ * R99 (0x63) - Mixer Enables
+ */
+#define WM8962_HPMIXL_ENA                       0x0008  /* HPMIXL_ENA */
+#define WM8962_HPMIXL_ENA_MASK                  0x0008  /* HPMIXL_ENA */
+#define WM8962_HPMIXL_ENA_SHIFT                      3  /* HPMIXL_ENA */
+#define WM8962_HPMIXL_ENA_WIDTH                      1  /* HPMIXL_ENA */
+#define WM8962_HPMIXR_ENA                       0x0004  /* HPMIXR_ENA */
+#define WM8962_HPMIXR_ENA_MASK                  0x0004  /* HPMIXR_ENA */
+#define WM8962_HPMIXR_ENA_SHIFT                      2  /* HPMIXR_ENA */
+#define WM8962_HPMIXR_ENA_WIDTH                      1  /* HPMIXR_ENA */
+#define WM8962_SPKMIXL_ENA                      0x0002  /* SPKMIXL_ENA */
+#define WM8962_SPKMIXL_ENA_MASK                 0x0002  /* SPKMIXL_ENA */
+#define WM8962_SPKMIXL_ENA_SHIFT                     1  /* SPKMIXL_ENA */
+#define WM8962_SPKMIXL_ENA_WIDTH                     1  /* SPKMIXL_ENA */
+#define WM8962_SPKMIXR_ENA                      0x0001  /* SPKMIXR_ENA */
+#define WM8962_SPKMIXR_ENA_MASK                 0x0001  /* SPKMIXR_ENA */
+#define WM8962_SPKMIXR_ENA_SHIFT                     0  /* SPKMIXR_ENA */
+#define WM8962_SPKMIXR_ENA_WIDTH                     1  /* SPKMIXR_ENA */
+
+/*
+ * R100 (0x64) - Headphone Mixer (1)
+ */
+#define WM8962_HPMIXL_TO_HPOUTL_PGA             0x0080  /* HPMIXL_TO_HPOUTL_PGA */
+#define WM8962_HPMIXL_TO_HPOUTL_PGA_MASK        0x0080  /* HPMIXL_TO_HPOUTL_PGA */
+#define WM8962_HPMIXL_TO_HPOUTL_PGA_SHIFT            7  /* HPMIXL_TO_HPOUTL_PGA */
+#define WM8962_HPMIXL_TO_HPOUTL_PGA_WIDTH            1  /* HPMIXL_TO_HPOUTL_PGA */
+#define WM8962_DACL_TO_HPMIXL                   0x0020  /* DACL_TO_HPMIXL */
+#define WM8962_DACL_TO_HPMIXL_MASK              0x0020  /* DACL_TO_HPMIXL */
+#define WM8962_DACL_TO_HPMIXL_SHIFT                  5  /* DACL_TO_HPMIXL */
+#define WM8962_DACL_TO_HPMIXL_WIDTH                  1  /* DACL_TO_HPMIXL */
+#define WM8962_DACR_TO_HPMIXL                   0x0010  /* DACR_TO_HPMIXL */
+#define WM8962_DACR_TO_HPMIXL_MASK              0x0010  /* DACR_TO_HPMIXL */
+#define WM8962_DACR_TO_HPMIXL_SHIFT                  4  /* DACR_TO_HPMIXL */
+#define WM8962_DACR_TO_HPMIXL_WIDTH                  1  /* DACR_TO_HPMIXL */
+#define WM8962_MIXINL_TO_HPMIXL                 0x0008  /* MIXINL_TO_HPMIXL */
+#define WM8962_MIXINL_TO_HPMIXL_MASK            0x0008  /* MIXINL_TO_HPMIXL */
+#define WM8962_MIXINL_TO_HPMIXL_SHIFT                3  /* MIXINL_TO_HPMIXL */
+#define WM8962_MIXINL_TO_HPMIXL_WIDTH                1  /* MIXINL_TO_HPMIXL */
+#define WM8962_MIXINR_TO_HPMIXL                 0x0004  /* MIXINR_TO_HPMIXL */
+#define WM8962_MIXINR_TO_HPMIXL_MASK            0x0004  /* MIXINR_TO_HPMIXL */
+#define WM8962_MIXINR_TO_HPMIXL_SHIFT                2  /* MIXINR_TO_HPMIXL */
+#define WM8962_MIXINR_TO_HPMIXL_WIDTH                1  /* MIXINR_TO_HPMIXL */
+#define WM8962_IN4L_TO_HPMIXL                   0x0002  /* IN4L_TO_HPMIXL */
+#define WM8962_IN4L_TO_HPMIXL_MASK              0x0002  /* IN4L_TO_HPMIXL */
+#define WM8962_IN4L_TO_HPMIXL_SHIFT                  1  /* IN4L_TO_HPMIXL */
+#define WM8962_IN4L_TO_HPMIXL_WIDTH                  1  /* IN4L_TO_HPMIXL */
+#define WM8962_IN4R_TO_HPMIXL                   0x0001  /* IN4R_TO_HPMIXL */
+#define WM8962_IN4R_TO_HPMIXL_MASK              0x0001  /* IN4R_TO_HPMIXL */
+#define WM8962_IN4R_TO_HPMIXL_SHIFT                  0  /* IN4R_TO_HPMIXL */
+#define WM8962_IN4R_TO_HPMIXL_WIDTH                  1  /* IN4R_TO_HPMIXL */
+
+/*
+ * R101 (0x65) - Headphone Mixer (2)
+ */
+#define WM8962_HPMIXR_TO_HPOUTR_PGA             0x0080  /* HPMIXR_TO_HPOUTR_PGA */
+#define WM8962_HPMIXR_TO_HPOUTR_PGA_MASK        0x0080  /* HPMIXR_TO_HPOUTR_PGA */
+#define WM8962_HPMIXR_TO_HPOUTR_PGA_SHIFT            7  /* HPMIXR_TO_HPOUTR_PGA */
+#define WM8962_HPMIXR_TO_HPOUTR_PGA_WIDTH            1  /* HPMIXR_TO_HPOUTR_PGA */
+#define WM8962_DACL_TO_HPMIXR                   0x0020  /* DACL_TO_HPMIXR */
+#define WM8962_DACL_TO_HPMIXR_MASK              0x0020  /* DACL_TO_HPMIXR */
+#define WM8962_DACL_TO_HPMIXR_SHIFT                  5  /* DACL_TO_HPMIXR */
+#define WM8962_DACL_TO_HPMIXR_WIDTH                  1  /* DACL_TO_HPMIXR */
+#define WM8962_DACR_TO_HPMIXR                   0x0010  /* DACR_TO_HPMIXR */
+#define WM8962_DACR_TO_HPMIXR_MASK              0x0010  /* DACR_TO_HPMIXR */
+#define WM8962_DACR_TO_HPMIXR_SHIFT                  4  /* DACR_TO_HPMIXR */
+#define WM8962_DACR_TO_HPMIXR_WIDTH                  1  /* DACR_TO_HPMIXR */
+#define WM8962_MIXINL_TO_HPMIXR                 0x0008  /* MIXINL_TO_HPMIXR */
+#define WM8962_MIXINL_TO_HPMIXR_MASK            0x0008  /* MIXINL_TO_HPMIXR */
+#define WM8962_MIXINL_TO_HPMIXR_SHIFT                3  /* MIXINL_TO_HPMIXR */
+#define WM8962_MIXINL_TO_HPMIXR_WIDTH                1  /* MIXINL_TO_HPMIXR */
+#define WM8962_MIXINR_TO_HPMIXR                 0x0004  /* MIXINR_TO_HPMIXR */
+#define WM8962_MIXINR_TO_HPMIXR_MASK            0x0004  /* MIXINR_TO_HPMIXR */
+#define WM8962_MIXINR_TO_HPMIXR_SHIFT                2  /* MIXINR_TO_HPMIXR */
+#define WM8962_MIXINR_TO_HPMIXR_WIDTH                1  /* MIXINR_TO_HPMIXR */
+#define WM8962_IN4L_TO_HPMIXR                   0x0002  /* IN4L_TO_HPMIXR */
+#define WM8962_IN4L_TO_HPMIXR_MASK              0x0002  /* IN4L_TO_HPMIXR */
+#define WM8962_IN4L_TO_HPMIXR_SHIFT                  1  /* IN4L_TO_HPMIXR */
+#define WM8962_IN4L_TO_HPMIXR_WIDTH                  1  /* IN4L_TO_HPMIXR */
+#define WM8962_IN4R_TO_HPMIXR                   0x0001  /* IN4R_TO_HPMIXR */
+#define WM8962_IN4R_TO_HPMIXR_MASK              0x0001  /* IN4R_TO_HPMIXR */
+#define WM8962_IN4R_TO_HPMIXR_SHIFT                  0  /* IN4R_TO_HPMIXR */
+#define WM8962_IN4R_TO_HPMIXR_WIDTH                  1  /* IN4R_TO_HPMIXR */
+
+/*
+ * R102 (0x66) - Headphone Mixer (3)
+ */
+#define WM8962_HPMIXL_MUTE                      0x0100  /* HPMIXL_MUTE */
+#define WM8962_HPMIXL_MUTE_MASK                 0x0100  /* HPMIXL_MUTE */
+#define WM8962_HPMIXL_MUTE_SHIFT                     8  /* HPMIXL_MUTE */
+#define WM8962_HPMIXL_MUTE_WIDTH                     1  /* HPMIXL_MUTE */
+#define WM8962_MIXINL_HPMIXL_VOL                0x0080  /* MIXINL_HPMIXL_VOL */
+#define WM8962_MIXINL_HPMIXL_VOL_MASK           0x0080  /* MIXINL_HPMIXL_VOL */
+#define WM8962_MIXINL_HPMIXL_VOL_SHIFT               7  /* MIXINL_HPMIXL_VOL */
+#define WM8962_MIXINL_HPMIXL_VOL_WIDTH               1  /* MIXINL_HPMIXL_VOL */
+#define WM8962_MIXINR_HPMIXL_VOL                0x0040  /* MIXINR_HPMIXL_VOL */
+#define WM8962_MIXINR_HPMIXL_VOL_MASK           0x0040  /* MIXINR_HPMIXL_VOL */
+#define WM8962_MIXINR_HPMIXL_VOL_SHIFT               6  /* MIXINR_HPMIXL_VOL */
+#define WM8962_MIXINR_HPMIXL_VOL_WIDTH               1  /* MIXINR_HPMIXL_VOL */
+#define WM8962_IN4L_HPMIXL_VOL_MASK             0x0038  /* IN4L_HPMIXL_VOL - [5:3] */
+#define WM8962_IN4L_HPMIXL_VOL_SHIFT                 3  /* IN4L_HPMIXL_VOL - [5:3] */
+#define WM8962_IN4L_HPMIXL_VOL_WIDTH                 3  /* IN4L_HPMIXL_VOL - [5:3] */
+#define WM8962_IN4R_HPMIXL_VOL_MASK             0x0007  /* IN4R_HPMIXL_VOL - [2:0] */
+#define WM8962_IN4R_HPMIXL_VOL_SHIFT                 0  /* IN4R_HPMIXL_VOL - [2:0] */
+#define WM8962_IN4R_HPMIXL_VOL_WIDTH                 3  /* IN4R_HPMIXL_VOL - [2:0] */
+
+/*
+ * R103 (0x67) - Headphone Mixer (4)
+ */
+#define WM8962_HPMIXR_MUTE                      0x0100  /* HPMIXR_MUTE */
+#define WM8962_HPMIXR_MUTE_MASK                 0x0100  /* HPMIXR_MUTE */
+#define WM8962_HPMIXR_MUTE_SHIFT                     8  /* HPMIXR_MUTE */
+#define WM8962_HPMIXR_MUTE_WIDTH                     1  /* HPMIXR_MUTE */
+#define WM8962_MIXINL_HPMIXR_VOL                0x0080  /* MIXINL_HPMIXR_VOL */
+#define WM8962_MIXINL_HPMIXR_VOL_MASK           0x0080  /* MIXINL_HPMIXR_VOL */
+#define WM8962_MIXINL_HPMIXR_VOL_SHIFT               7  /* MIXINL_HPMIXR_VOL */
+#define WM8962_MIXINL_HPMIXR_VOL_WIDTH               1  /* MIXINL_HPMIXR_VOL */
+#define WM8962_MIXINR_HPMIXR_VOL                0x0040  /* MIXINR_HPMIXR_VOL */
+#define WM8962_MIXINR_HPMIXR_VOL_MASK           0x0040  /* MIXINR_HPMIXR_VOL */
+#define WM8962_MIXINR_HPMIXR_VOL_SHIFT               6  /* MIXINR_HPMIXR_VOL */
+#define WM8962_MIXINR_HPMIXR_VOL_WIDTH               1  /* MIXINR_HPMIXR_VOL */
+#define WM8962_IN4L_HPMIXR_VOL_MASK             0x0038  /* IN4L_HPMIXR_VOL - [5:3] */
+#define WM8962_IN4L_HPMIXR_VOL_SHIFT                 3  /* IN4L_HPMIXR_VOL - [5:3] */
+#define WM8962_IN4L_HPMIXR_VOL_WIDTH                 3  /* IN4L_HPMIXR_VOL - [5:3] */
+#define WM8962_IN4R_HPMIXR_VOL_MASK             0x0007  /* IN4R_HPMIXR_VOL - [2:0] */
+#define WM8962_IN4R_HPMIXR_VOL_SHIFT                 0  /* IN4R_HPMIXR_VOL - [2:0] */
+#define WM8962_IN4R_HPMIXR_VOL_WIDTH                 3  /* IN4R_HPMIXR_VOL - [2:0] */
+
+/*
+ * R105 (0x69) - Speaker Mixer (1)
+ */
+#define WM8962_SPKMIXL_TO_SPKOUTL_PGA           0x0080  /* SPKMIXL_TO_SPKOUTL_PGA */
+#define WM8962_SPKMIXL_TO_SPKOUTL_PGA_MASK      0x0080  /* SPKMIXL_TO_SPKOUTL_PGA */
+#define WM8962_SPKMIXL_TO_SPKOUTL_PGA_SHIFT          7  /* SPKMIXL_TO_SPKOUTL_PGA */
+#define WM8962_SPKMIXL_TO_SPKOUTL_PGA_WIDTH          1  /* SPKMIXL_TO_SPKOUTL_PGA */
+#define WM8962_DACL_TO_SPKMIXL                  0x0020  /* DACL_TO_SPKMIXL */
+#define WM8962_DACL_TO_SPKMIXL_MASK             0x0020  /* DACL_TO_SPKMIXL */
+#define WM8962_DACL_TO_SPKMIXL_SHIFT                 5  /* DACL_TO_SPKMIXL */
+#define WM8962_DACL_TO_SPKMIXL_WIDTH                 1  /* DACL_TO_SPKMIXL */
+#define WM8962_DACR_TO_SPKMIXL                  0x0010  /* DACR_TO_SPKMIXL */
+#define WM8962_DACR_TO_SPKMIXL_MASK             0x0010  /* DACR_TO_SPKMIXL */
+#define WM8962_DACR_TO_SPKMIXL_SHIFT                 4  /* DACR_TO_SPKMIXL */
+#define WM8962_DACR_TO_SPKMIXL_WIDTH                 1  /* DACR_TO_SPKMIXL */
+#define WM8962_MIXINL_TO_SPKMIXL                0x0008  /* MIXINL_TO_SPKMIXL */
+#define WM8962_MIXINL_TO_SPKMIXL_MASK           0x0008  /* MIXINL_TO_SPKMIXL */
+#define WM8962_MIXINL_TO_SPKMIXL_SHIFT               3  /* MIXINL_TO_SPKMIXL */
+#define WM8962_MIXINL_TO_SPKMIXL_WIDTH               1  /* MIXINL_TO_SPKMIXL */
+#define WM8962_MIXINR_TO_SPKMIXL                0x0004  /* MIXINR_TO_SPKMIXL */
+#define WM8962_MIXINR_TO_SPKMIXL_MASK           0x0004  /* MIXINR_TO_SPKMIXL */
+#define WM8962_MIXINR_TO_SPKMIXL_SHIFT               2  /* MIXINR_TO_SPKMIXL */
+#define WM8962_MIXINR_TO_SPKMIXL_WIDTH               1  /* MIXINR_TO_SPKMIXL */
+#define WM8962_IN4L_TO_SPKMIXL                  0x0002  /* IN4L_TO_SPKMIXL */
+#define WM8962_IN4L_TO_SPKMIXL_MASK             0x0002  /* IN4L_TO_SPKMIXL */
+#define WM8962_IN4L_TO_SPKMIXL_SHIFT                 1  /* IN4L_TO_SPKMIXL */
+#define WM8962_IN4L_TO_SPKMIXL_WIDTH                 1  /* IN4L_TO_SPKMIXL */
+#define WM8962_IN4R_TO_SPKMIXL                  0x0001  /* IN4R_TO_SPKMIXL */
+#define WM8962_IN4R_TO_SPKMIXL_MASK             0x0001  /* IN4R_TO_SPKMIXL */
+#define WM8962_IN4R_TO_SPKMIXL_SHIFT                 0  /* IN4R_TO_SPKMIXL */
+#define WM8962_IN4R_TO_SPKMIXL_WIDTH                 1  /* IN4R_TO_SPKMIXL */
+
+/*
+ * R106 (0x6A) - Speaker Mixer (2)
+ */
+#define WM8962_SPKMIXR_TO_SPKOUTR_PGA           0x0080  /* SPKMIXR_TO_SPKOUTR_PGA */
+#define WM8962_SPKMIXR_TO_SPKOUTR_PGA_MASK      0x0080  /* SPKMIXR_TO_SPKOUTR_PGA */
+#define WM8962_SPKMIXR_TO_SPKOUTR_PGA_SHIFT          7  /* SPKMIXR_TO_SPKOUTR_PGA */
+#define WM8962_SPKMIXR_TO_SPKOUTR_PGA_WIDTH          1  /* SPKMIXR_TO_SPKOUTR_PGA */
+#define WM8962_DACL_TO_SPKMIXR                  0x0020  /* DACL_TO_SPKMIXR */
+#define WM8962_DACL_TO_SPKMIXR_MASK             0x0020  /* DACL_TO_SPKMIXR */
+#define WM8962_DACL_TO_SPKMIXR_SHIFT                 5  /* DACL_TO_SPKMIXR */
+#define WM8962_DACL_TO_SPKMIXR_WIDTH                 1  /* DACL_TO_SPKMIXR */
+#define WM8962_DACR_TO_SPKMIXR                  0x0010  /* DACR_TO_SPKMIXR */
+#define WM8962_DACR_TO_SPKMIXR_MASK             0x0010  /* DACR_TO_SPKMIXR */
+#define WM8962_DACR_TO_SPKMIXR_SHIFT                 4  /* DACR_TO_SPKMIXR */
+#define WM8962_DACR_TO_SPKMIXR_WIDTH                 1  /* DACR_TO_SPKMIXR */
+#define WM8962_MIXINL_TO_SPKMIXR                0x0008  /* MIXINL_TO_SPKMIXR */
+#define WM8962_MIXINL_TO_SPKMIXR_MASK           0x0008  /* MIXINL_TO_SPKMIXR */
+#define WM8962_MIXINL_TO_SPKMIXR_SHIFT               3  /* MIXINL_TO_SPKMIXR */
+#define WM8962_MIXINL_TO_SPKMIXR_WIDTH               1  /* MIXINL_TO_SPKMIXR */
+#define WM8962_MIXINR_TO_SPKMIXR                0x0004  /* MIXINR_TO_SPKMIXR */
+#define WM8962_MIXINR_TO_SPKMIXR_MASK           0x0004  /* MIXINR_TO_SPKMIXR */
+#define WM8962_MIXINR_TO_SPKMIXR_SHIFT               2  /* MIXINR_TO_SPKMIXR */
+#define WM8962_MIXINR_TO_SPKMIXR_WIDTH               1  /* MIXINR_TO_SPKMIXR */
+#define WM8962_IN4L_TO_SPKMIXR                  0x0002  /* IN4L_TO_SPKMIXR */
+#define WM8962_IN4L_TO_SPKMIXR_MASK             0x0002  /* IN4L_TO_SPKMIXR */
+#define WM8962_IN4L_TO_SPKMIXR_SHIFT                 1  /* IN4L_TO_SPKMIXR */
+#define WM8962_IN4L_TO_SPKMIXR_WIDTH                 1  /* IN4L_TO_SPKMIXR */
+#define WM8962_IN4R_TO_SPKMIXR                  0x0001  /* IN4R_TO_SPKMIXR */
+#define WM8962_IN4R_TO_SPKMIXR_MASK             0x0001  /* IN4R_TO_SPKMIXR */
+#define WM8962_IN4R_TO_SPKMIXR_SHIFT                 0  /* IN4R_TO_SPKMIXR */
+#define WM8962_IN4R_TO_SPKMIXR_WIDTH                 1  /* IN4R_TO_SPKMIXR */
+
+/*
+ * R107 (0x6B) - Speaker Mixer (3)
+ */
+#define WM8962_SPKMIXL_MUTE                     0x0100  /* SPKMIXL_MUTE */
+#define WM8962_SPKMIXL_MUTE_MASK                0x0100  /* SPKMIXL_MUTE */
+#define WM8962_SPKMIXL_MUTE_SHIFT                    8  /* SPKMIXL_MUTE */
+#define WM8962_SPKMIXL_MUTE_WIDTH                    1  /* SPKMIXL_MUTE */
+#define WM8962_MIXINL_SPKMIXL_VOL               0x0080  /* MIXINL_SPKMIXL_VOL */
+#define WM8962_MIXINL_SPKMIXL_VOL_MASK          0x0080  /* MIXINL_SPKMIXL_VOL */
+#define WM8962_MIXINL_SPKMIXL_VOL_SHIFT              7  /* MIXINL_SPKMIXL_VOL */
+#define WM8962_MIXINL_SPKMIXL_VOL_WIDTH              1  /* MIXINL_SPKMIXL_VOL */
+#define WM8962_MIXINR_SPKMIXL_VOL               0x0040  /* MIXINR_SPKMIXL_VOL */
+#define WM8962_MIXINR_SPKMIXL_VOL_MASK          0x0040  /* MIXINR_SPKMIXL_VOL */
+#define WM8962_MIXINR_SPKMIXL_VOL_SHIFT              6  /* MIXINR_SPKMIXL_VOL */
+#define WM8962_MIXINR_SPKMIXL_VOL_WIDTH              1  /* MIXINR_SPKMIXL_VOL */
+#define WM8962_IN4L_SPKMIXL_VOL_MASK            0x0038  /* IN4L_SPKMIXL_VOL - [5:3] */
+#define WM8962_IN4L_SPKMIXL_VOL_SHIFT                3  /* IN4L_SPKMIXL_VOL - [5:3] */
+#define WM8962_IN4L_SPKMIXL_VOL_WIDTH                3  /* IN4L_SPKMIXL_VOL - [5:3] */
+#define WM8962_IN4R_SPKMIXL_VOL_MASK            0x0007  /* IN4R_SPKMIXL_VOL - [2:0] */
+#define WM8962_IN4R_SPKMIXL_VOL_SHIFT                0  /* IN4R_SPKMIXL_VOL - [2:0] */
+#define WM8962_IN4R_SPKMIXL_VOL_WIDTH                3  /* IN4R_SPKMIXL_VOL - [2:0] */
+
+/*
+ * R108 (0x6C) - Speaker Mixer (4)
+ */
+#define WM8962_SPKMIXR_MUTE                     0x0100  /* SPKMIXR_MUTE */
+#define WM8962_SPKMIXR_MUTE_MASK                0x0100  /* SPKMIXR_MUTE */
+#define WM8962_SPKMIXR_MUTE_SHIFT                    8  /* SPKMIXR_MUTE */
+#define WM8962_SPKMIXR_MUTE_WIDTH                    1  /* SPKMIXR_MUTE */
+#define WM8962_MIXINL_SPKMIXR_VOL               0x0080  /* MIXINL_SPKMIXR_VOL */
+#define WM8962_MIXINL_SPKMIXR_VOL_MASK          0x0080  /* MIXINL_SPKMIXR_VOL */
+#define WM8962_MIXINL_SPKMIXR_VOL_SHIFT              7  /* MIXINL_SPKMIXR_VOL */
+#define WM8962_MIXINL_SPKMIXR_VOL_WIDTH              1  /* MIXINL_SPKMIXR_VOL */
+#define WM8962_MIXINR_SPKMIXR_VOL               0x0040  /* MIXINR_SPKMIXR_VOL */
+#define WM8962_MIXINR_SPKMIXR_VOL_MASK          0x0040  /* MIXINR_SPKMIXR_VOL */
+#define WM8962_MIXINR_SPKMIXR_VOL_SHIFT              6  /* MIXINR_SPKMIXR_VOL */
+#define WM8962_MIXINR_SPKMIXR_VOL_WIDTH              1  /* MIXINR_SPKMIXR_VOL */
+#define WM8962_IN4L_SPKMIXR_VOL_MASK            0x0038  /* IN4L_SPKMIXR_VOL - [5:3] */
+#define WM8962_IN4L_SPKMIXR_VOL_SHIFT                3  /* IN4L_SPKMIXR_VOL - [5:3] */
+#define WM8962_IN4L_SPKMIXR_VOL_WIDTH                3  /* IN4L_SPKMIXR_VOL - [5:3] */
+#define WM8962_IN4R_SPKMIXR_VOL_MASK            0x0007  /* IN4R_SPKMIXR_VOL - [2:0] */
+#define WM8962_IN4R_SPKMIXR_VOL_SHIFT                0  /* IN4R_SPKMIXR_VOL - [2:0] */
+#define WM8962_IN4R_SPKMIXR_VOL_WIDTH                3  /* IN4R_SPKMIXR_VOL - [2:0] */
+
+/*
+ * R109 (0x6D) - Speaker Mixer (5)
+ */
+#define WM8962_DACL_SPKMIXL_VOL                 0x0080  /* DACL_SPKMIXL_VOL */
+#define WM8962_DACL_SPKMIXL_VOL_MASK            0x0080  /* DACL_SPKMIXL_VOL */
+#define WM8962_DACL_SPKMIXL_VOL_SHIFT                7  /* DACL_SPKMIXL_VOL */
+#define WM8962_DACL_SPKMIXL_VOL_WIDTH                1  /* DACL_SPKMIXL_VOL */
+#define WM8962_DACR_SPKMIXL_VOL                 0x0040  /* DACR_SPKMIXL_VOL */
+#define WM8962_DACR_SPKMIXL_VOL_MASK            0x0040  /* DACR_SPKMIXL_VOL */
+#define WM8962_DACR_SPKMIXL_VOL_SHIFT                6  /* DACR_SPKMIXL_VOL */
+#define WM8962_DACR_SPKMIXL_VOL_WIDTH                1  /* DACR_SPKMIXL_VOL */
+#define WM8962_DACL_SPKMIXR_VOL                 0x0020  /* DACL_SPKMIXR_VOL */
+#define WM8962_DACL_SPKMIXR_VOL_MASK            0x0020  /* DACL_SPKMIXR_VOL */
+#define WM8962_DACL_SPKMIXR_VOL_SHIFT                5  /* DACL_SPKMIXR_VOL */
+#define WM8962_DACL_SPKMIXR_VOL_WIDTH                1  /* DACL_SPKMIXR_VOL */
+#define WM8962_DACR_SPKMIXR_VOL                 0x0010  /* DACR_SPKMIXR_VOL */
+#define WM8962_DACR_SPKMIXR_VOL_MASK            0x0010  /* DACR_SPKMIXR_VOL */
+#define WM8962_DACR_SPKMIXR_VOL_SHIFT                4  /* DACR_SPKMIXR_VOL */
+#define WM8962_DACR_SPKMIXR_VOL_WIDTH                1  /* DACR_SPKMIXR_VOL */
+
+/*
+ * R110 (0x6E) - Beep Generator (1)
+ */
+#define WM8962_BEEP_GAIN_MASK                   0x00F0  /* BEEP_GAIN - [7:4] */
+#define WM8962_BEEP_GAIN_SHIFT                       4  /* BEEP_GAIN - [7:4] */
+#define WM8962_BEEP_GAIN_WIDTH                       4  /* BEEP_GAIN - [7:4] */
+#define WM8962_BEEP_RATE_MASK                   0x0006  /* BEEP_RATE - [2:1] */
+#define WM8962_BEEP_RATE_SHIFT                       1  /* BEEP_RATE - [2:1] */
+#define WM8962_BEEP_RATE_WIDTH                       2  /* BEEP_RATE - [2:1] */
+#define WM8962_BEEP_ENA                         0x0001  /* BEEP_ENA */
+#define WM8962_BEEP_ENA_MASK                    0x0001  /* BEEP_ENA */
+#define WM8962_BEEP_ENA_SHIFT                        0  /* BEEP_ENA */
+#define WM8962_BEEP_ENA_WIDTH                        1  /* BEEP_ENA */
+
+/*
+ * R115 (0x73) - Oscillator Trim (3)
+ */
+#define WM8962_OSC_TRIM_XTI_MASK                0x001F  /* OSC_TRIM_XTI - [4:0] */
+#define WM8962_OSC_TRIM_XTI_SHIFT                    0  /* OSC_TRIM_XTI - [4:0] */
+#define WM8962_OSC_TRIM_XTI_WIDTH                    5  /* OSC_TRIM_XTI - [4:0] */
+
+/*
+ * R116 (0x74) - Oscillator Trim (4)
+ */
+#define WM8962_OSC_TRIM_XTO_MASK                0x001F  /* OSC_TRIM_XTO - [4:0] */
+#define WM8962_OSC_TRIM_XTO_SHIFT                    0  /* OSC_TRIM_XTO - [4:0] */
+#define WM8962_OSC_TRIM_XTO_WIDTH                    5  /* OSC_TRIM_XTO - [4:0] */
+
+/*
+ * R119 (0x77) - Oscillator Trim (7)
+ */
+#define WM8962_XTO_CAP_SEL_MASK                 0x00F0  /* XTO_CAP_SEL - [7:4] */
+#define WM8962_XTO_CAP_SEL_SHIFT                     4  /* XTO_CAP_SEL - [7:4] */
+#define WM8962_XTO_CAP_SEL_WIDTH                     4  /* XTO_CAP_SEL - [7:4] */
+#define WM8962_XTI_CAP_SEL_MASK                 0x000F  /* XTI_CAP_SEL - [3:0] */
+#define WM8962_XTI_CAP_SEL_SHIFT                     0  /* XTI_CAP_SEL - [3:0] */
+#define WM8962_XTI_CAP_SEL_WIDTH                     4  /* XTI_CAP_SEL - [3:0] */
+
+/*
+ * R124 (0x7C) - Analogue Clocking1
+ */
+#define WM8962_CLKOUT2_SEL_MASK                 0x0060  /* CLKOUT2_SEL - [6:5] */
+#define WM8962_CLKOUT2_SEL_SHIFT                     5  /* CLKOUT2_SEL - [6:5] */
+#define WM8962_CLKOUT2_SEL_WIDTH                     2  /* CLKOUT2_SEL - [6:5] */
+#define WM8962_CLKOUT3_SEL_MASK                 0x0018  /* CLKOUT3_SEL - [4:3] */
+#define WM8962_CLKOUT3_SEL_SHIFT                     3  /* CLKOUT3_SEL - [4:3] */
+#define WM8962_CLKOUT3_SEL_WIDTH                     2  /* CLKOUT3_SEL - [4:3] */
+#define WM8962_CLKOUT5_SEL                      0x0001  /* CLKOUT5_SEL */
+#define WM8962_CLKOUT5_SEL_MASK                 0x0001  /* CLKOUT5_SEL */
+#define WM8962_CLKOUT5_SEL_SHIFT                     0  /* CLKOUT5_SEL */
+#define WM8962_CLKOUT5_SEL_WIDTH                     1  /* CLKOUT5_SEL */
+
+/*
+ * R125 (0x7D) - Analogue Clocking2
+ */
+#define WM8962_PLL2_OUTDIV                      0x0080  /* PLL2_OUTDIV */
+#define WM8962_PLL2_OUTDIV_MASK                 0x0080  /* PLL2_OUTDIV */
+#define WM8962_PLL2_OUTDIV_SHIFT                     7  /* PLL2_OUTDIV */
+#define WM8962_PLL2_OUTDIV_WIDTH                     1  /* PLL2_OUTDIV */
+#define WM8962_PLL3_OUTDIV                      0x0040  /* PLL3_OUTDIV */
+#define WM8962_PLL3_OUTDIV_MASK                 0x0040  /* PLL3_OUTDIV */
+#define WM8962_PLL3_OUTDIV_SHIFT                     6  /* PLL3_OUTDIV */
+#define WM8962_PLL3_OUTDIV_WIDTH                     1  /* PLL3_OUTDIV */
+#define WM8962_PLL_SYSCLK_DIV_MASK              0x0018  /* PLL_SYSCLK_DIV - [4:3] */
+#define WM8962_PLL_SYSCLK_DIV_SHIFT                  3  /* PLL_SYSCLK_DIV - [4:3] */
+#define WM8962_PLL_SYSCLK_DIV_WIDTH                  2  /* PLL_SYSCLK_DIV - [4:3] */
+#define WM8962_CLKOUT3_DIV                      0x0004  /* CLKOUT3_DIV */
+#define WM8962_CLKOUT3_DIV_MASK                 0x0004  /* CLKOUT3_DIV */
+#define WM8962_CLKOUT3_DIV_SHIFT                     2  /* CLKOUT3_DIV */
+#define WM8962_CLKOUT3_DIV_WIDTH                     1  /* CLKOUT3_DIV */
+#define WM8962_CLKOUT2_DIV                      0x0002  /* CLKOUT2_DIV */
+#define WM8962_CLKOUT2_DIV_MASK                 0x0002  /* CLKOUT2_DIV */
+#define WM8962_CLKOUT2_DIV_SHIFT                     1  /* CLKOUT2_DIV */
+#define WM8962_CLKOUT2_DIV_WIDTH                     1  /* CLKOUT2_DIV */
+#define WM8962_CLKOUT5_DIV                      0x0001  /* CLKOUT5_DIV */
+#define WM8962_CLKOUT5_DIV_MASK                 0x0001  /* CLKOUT5_DIV */
+#define WM8962_CLKOUT5_DIV_SHIFT                     0  /* CLKOUT5_DIV */
+#define WM8962_CLKOUT5_DIV_WIDTH                     1  /* CLKOUT5_DIV */
+
+/*
+ * R126 (0x7E) - Analogue Clocking3
+ */
+#define WM8962_CLKOUT2_OE                       0x0008  /* CLKOUT2_OE */
+#define WM8962_CLKOUT2_OE_MASK                  0x0008  /* CLKOUT2_OE */
+#define WM8962_CLKOUT2_OE_SHIFT                      3  /* CLKOUT2_OE */
+#define WM8962_CLKOUT2_OE_WIDTH                      1  /* CLKOUT2_OE */
+#define WM8962_CLKOUT3_OE                       0x0004  /* CLKOUT3_OE */
+#define WM8962_CLKOUT3_OE_MASK                  0x0004  /* CLKOUT3_OE */
+#define WM8962_CLKOUT3_OE_SHIFT                      2  /* CLKOUT3_OE */
+#define WM8962_CLKOUT3_OE_WIDTH                      1  /* CLKOUT3_OE */
+#define WM8962_CLKOUT5_OE                       0x0001  /* CLKOUT5_OE */
+#define WM8962_CLKOUT5_OE_MASK                  0x0001  /* CLKOUT5_OE */
+#define WM8962_CLKOUT5_OE_SHIFT                      0  /* CLKOUT5_OE */
+#define WM8962_CLKOUT5_OE_WIDTH                      1  /* CLKOUT5_OE */
+
+/*
+ * R127 (0x7F) - PLL Software Reset
+ */
+#define WM8962_SW_RESET_PLL_MASK                0xFFFF  /* SW_RESET_PLL - [15:0] */
+#define WM8962_SW_RESET_PLL_SHIFT                    0  /* SW_RESET_PLL - [15:0] */
+#define WM8962_SW_RESET_PLL_WIDTH                   16  /* SW_RESET_PLL - [15:0] */
+
+/*
+ * R129 (0x81) - PLL2
+ */
+#define WM8962_OSC_ENA                          0x0080  /* OSC_ENA */
+#define WM8962_OSC_ENA_MASK                     0x0080  /* OSC_ENA */
+#define WM8962_OSC_ENA_SHIFT                         7  /* OSC_ENA */
+#define WM8962_OSC_ENA_WIDTH                         1  /* OSC_ENA */
+#define WM8962_PLL2_ENA                         0x0020  /* PLL2_ENA */
+#define WM8962_PLL2_ENA_MASK                    0x0020  /* PLL2_ENA */
+#define WM8962_PLL2_ENA_SHIFT                        5  /* PLL2_ENA */
+#define WM8962_PLL2_ENA_WIDTH                        1  /* PLL2_ENA */
+#define WM8962_PLL3_ENA                         0x0010  /* PLL3_ENA */
+#define WM8962_PLL3_ENA_MASK                    0x0010  /* PLL3_ENA */
+#define WM8962_PLL3_ENA_SHIFT                        4  /* PLL3_ENA */
+#define WM8962_PLL3_ENA_WIDTH                        1  /* PLL3_ENA */
+
+/*
+ * R131 (0x83) - PLL 4
+ */
+#define WM8962_PLL_CLK_SRC                      0x0002  /* PLL_CLK_SRC */
+#define WM8962_PLL_CLK_SRC_MASK                 0x0002  /* PLL_CLK_SRC */
+#define WM8962_PLL_CLK_SRC_SHIFT                     1  /* PLL_CLK_SRC */
+#define WM8962_PLL_CLK_SRC_WIDTH                     1  /* PLL_CLK_SRC */
+#define WM8962_FLL_TO_PLL3                      0x0001  /* FLL_TO_PLL3 */
+#define WM8962_FLL_TO_PLL3_MASK                 0x0001  /* FLL_TO_PLL3 */
+#define WM8962_FLL_TO_PLL3_SHIFT                     0  /* FLL_TO_PLL3 */
+#define WM8962_FLL_TO_PLL3_WIDTH                     1  /* FLL_TO_PLL3 */
+
+/*
+ * R136 (0x88) - PLL 9
+ */
+#define WM8962_PLL2_FRAC                        0x0040  /* PLL2_FRAC */
+#define WM8962_PLL2_FRAC_MASK                   0x0040  /* PLL2_FRAC */
+#define WM8962_PLL2_FRAC_SHIFT                       6  /* PLL2_FRAC */
+#define WM8962_PLL2_FRAC_WIDTH                       1  /* PLL2_FRAC */
+#define WM8962_PLL2_N_MASK                      0x001F  /* PLL2_N - [4:0] */
+#define WM8962_PLL2_N_SHIFT                          0  /* PLL2_N - [4:0] */
+#define WM8962_PLL2_N_WIDTH                          5  /* PLL2_N - [4:0] */
+
+/*
+ * R137 (0x89) - PLL 10
+ */
+#define WM8962_PLL2_K_MASK                      0x00FF  /* PLL2_K - [7:0] */
+#define WM8962_PLL2_K_SHIFT                          0  /* PLL2_K - [7:0] */
+#define WM8962_PLL2_K_WIDTH                          8  /* PLL2_K - [7:0] */
+
+/*
+ * R138 (0x8A) - PLL 11
+ */
+#define WM8962_PLL2_K_MASK                      0x00FF  /* PLL2_K - [7:0] */
+#define WM8962_PLL2_K_SHIFT                          0  /* PLL2_K - [7:0] */
+#define WM8962_PLL2_K_WIDTH                          8  /* PLL2_K - [7:0] */
+
+/*
+ * R139 (0x8B) - PLL 12
+ */
+#define WM8962_PLL2_K_MASK                      0x00FF  /* PLL2_K - [7:0] */
+#define WM8962_PLL2_K_SHIFT                          0  /* PLL2_K - [7:0] */
+#define WM8962_PLL2_K_WIDTH                          8  /* PLL2_K - [7:0] */
+
+/*
+ * R140 (0x8C) - PLL 13
+ */
+#define WM8962_PLL3_FRAC                        0x0040  /* PLL3_FRAC */
+#define WM8962_PLL3_FRAC_MASK                   0x0040  /* PLL3_FRAC */
+#define WM8962_PLL3_FRAC_SHIFT                       6  /* PLL3_FRAC */
+#define WM8962_PLL3_FRAC_WIDTH                       1  /* PLL3_FRAC */
+#define WM8962_PLL3_N_MASK                      0x001F  /* PLL3_N - [4:0] */
+#define WM8962_PLL3_N_SHIFT                          0  /* PLL3_N - [4:0] */
+#define WM8962_PLL3_N_WIDTH                          5  /* PLL3_N - [4:0] */
+
+/*
+ * R141 (0x8D) - PLL 14
+ */
+#define WM8962_PLL3_K_MASK                      0x00FF  /* PLL3_K - [7:0] */
+#define WM8962_PLL3_K_SHIFT                          0  /* PLL3_K - [7:0] */
+#define WM8962_PLL3_K_WIDTH                          8  /* PLL3_K - [7:0] */
+
+/*
+ * R142 (0x8E) - PLL 15
+ */
+#define WM8962_PLL3_K_MASK                      0x00FF  /* PLL3_K - [7:0] */
+#define WM8962_PLL3_K_SHIFT                          0  /* PLL3_K - [7:0] */
+#define WM8962_PLL3_K_WIDTH                          8  /* PLL3_K - [7:0] */
+
+/*
+ * R143 (0x8F) - PLL 16
+ */
+#define WM8962_PLL3_K_MASK                      0x00FF  /* PLL3_K - [7:0] */
+#define WM8962_PLL3_K_SHIFT                          0  /* PLL3_K - [7:0] */
+#define WM8962_PLL3_K_WIDTH                          8  /* PLL3_K - [7:0] */
+
+/*
+ * R155 (0x9B) - FLL Control (1)
+ */
+#define WM8962_FLL_REFCLK_SRC_MASK              0x0060  /* FLL_REFCLK_SRC - [6:5] */
+#define WM8962_FLL_REFCLK_SRC_SHIFT                  5  /* FLL_REFCLK_SRC - [6:5] */
+#define WM8962_FLL_REFCLK_SRC_WIDTH                  2  /* FLL_REFCLK_SRC - [6:5] */
+#define WM8962_FLL_FRAC                         0x0004  /* FLL_FRAC */
+#define WM8962_FLL_FRAC_MASK                    0x0004  /* FLL_FRAC */
+#define WM8962_FLL_FRAC_SHIFT                        2  /* FLL_FRAC */
+#define WM8962_FLL_FRAC_WIDTH                        1  /* FLL_FRAC */
+#define WM8962_FLL_OSC_ENA                      0x0002  /* FLL_OSC_ENA */
+#define WM8962_FLL_OSC_ENA_MASK                 0x0002  /* FLL_OSC_ENA */
+#define WM8962_FLL_OSC_ENA_SHIFT                     1  /* FLL_OSC_ENA */
+#define WM8962_FLL_OSC_ENA_WIDTH                     1  /* FLL_OSC_ENA */
+#define WM8962_FLL_ENA                          0x0001  /* FLL_ENA */
+#define WM8962_FLL_ENA_MASK                     0x0001  /* FLL_ENA */
+#define WM8962_FLL_ENA_SHIFT                         0  /* FLL_ENA */
+#define WM8962_FLL_ENA_WIDTH                         1  /* FLL_ENA */
+
+/*
+ * R156 (0x9C) - FLL Control (2)
+ */
+#define WM8962_FLL_OUTDIV_MASK                  0x01F8  /* FLL_OUTDIV - [8:3] */
+#define WM8962_FLL_OUTDIV_SHIFT                      3  /* FLL_OUTDIV - [8:3] */
+#define WM8962_FLL_OUTDIV_WIDTH                      6  /* FLL_OUTDIV - [8:3] */
+#define WM8962_FLL_REFCLK_DIV_MASK              0x0003  /* FLL_REFCLK_DIV - [1:0] */
+#define WM8962_FLL_REFCLK_DIV_SHIFT                  0  /* FLL_REFCLK_DIV - [1:0] */
+#define WM8962_FLL_REFCLK_DIV_WIDTH                  2  /* FLL_REFCLK_DIV - [1:0] */
+
+/*
+ * R157 (0x9D) - FLL Control (3)
+ */
+#define WM8962_FLL_FRATIO_MASK                  0x0007  /* FLL_FRATIO - [2:0] */
+#define WM8962_FLL_FRATIO_SHIFT                      0  /* FLL_FRATIO - [2:0] */
+#define WM8962_FLL_FRATIO_WIDTH                      3  /* FLL_FRATIO - [2:0] */
+
+/*
+ * R159 (0x9F) - FLL Control (5)
+ */
+#define WM8962_FLL_FRC_NCO_VAL_MASK             0x007E  /* FLL_FRC_NCO_VAL - [6:1] */
+#define WM8962_FLL_FRC_NCO_VAL_SHIFT                 1  /* FLL_FRC_NCO_VAL - [6:1] */
+#define WM8962_FLL_FRC_NCO_VAL_WIDTH                 6  /* FLL_FRC_NCO_VAL - [6:1] */
+#define WM8962_FLL_FRC_NCO                      0x0001  /* FLL_FRC_NCO */
+#define WM8962_FLL_FRC_NCO_MASK                 0x0001  /* FLL_FRC_NCO */
+#define WM8962_FLL_FRC_NCO_SHIFT                     0  /* FLL_FRC_NCO */
+#define WM8962_FLL_FRC_NCO_WIDTH                     1  /* FLL_FRC_NCO */
+
+/*
+ * R160 (0xA0) - FLL Control (6)
+ */
+#define WM8962_FLL_THETA_MASK                   0xFFFF  /* FLL_THETA - [15:0] */
+#define WM8962_FLL_THETA_SHIFT                       0  /* FLL_THETA - [15:0] */
+#define WM8962_FLL_THETA_WIDTH                      16  /* FLL_THETA - [15:0] */
+
+/*
+ * R161 (0xA1) - FLL Control (7)
+ */
+#define WM8962_FLL_LAMBDA_MASK                  0xFFFF  /* FLL_LAMBDA - [15:0] */
+#define WM8962_FLL_LAMBDA_SHIFT                      0  /* FLL_LAMBDA - [15:0] */
+#define WM8962_FLL_LAMBDA_WIDTH                     16  /* FLL_LAMBDA - [15:0] */
+
+/*
+ * R162 (0xA2) - FLL Control (8)
+ */
+#define WM8962_FLL_N_MASK                       0x03FF  /* FLL_N - [9:0] */
+#define WM8962_FLL_N_SHIFT                           0  /* FLL_N - [9:0] */
+#define WM8962_FLL_N_WIDTH                          10  /* FLL_N - [9:0] */
+
+/*
+ * R252 (0xFC) - General test 1
+ */
+#define WM8962_REG_SYNC                         0x0004  /* REG_SYNC */
+#define WM8962_REG_SYNC_MASK                    0x0004  /* REG_SYNC */
+#define WM8962_REG_SYNC_SHIFT                        2  /* REG_SYNC */
+#define WM8962_REG_SYNC_WIDTH                        1  /* REG_SYNC */
+#define WM8962_AUTO_INC                         0x0001  /* AUTO_INC */
+#define WM8962_AUTO_INC_MASK                    0x0001  /* AUTO_INC */
+#define WM8962_AUTO_INC_SHIFT                        0  /* AUTO_INC */
+#define WM8962_AUTO_INC_WIDTH                        1  /* AUTO_INC */
+
+/*
+ * R256 (0x100) - DF1
+ */
+#define WM8962_DRC_DF1_ENA                      0x0008  /* DRC_DF1_ENA */
+#define WM8962_DRC_DF1_ENA_MASK                 0x0008  /* DRC_DF1_ENA */
+#define WM8962_DRC_DF1_ENA_SHIFT                     3  /* DRC_DF1_ENA */
+#define WM8962_DRC_DF1_ENA_WIDTH                     1  /* DRC_DF1_ENA */
+#define WM8962_DF1_SHARED_COEFF                 0x0004  /* DF1_SHARED_COEFF */
+#define WM8962_DF1_SHARED_COEFF_MASK            0x0004  /* DF1_SHARED_COEFF */
+#define WM8962_DF1_SHARED_COEFF_SHIFT                2  /* DF1_SHARED_COEFF */
+#define WM8962_DF1_SHARED_COEFF_WIDTH                1  /* DF1_SHARED_COEFF */
+#define WM8962_DF1_SHARED_COEFF_SEL             0x0002  /* DF1_SHARED_COEFF_SEL */
+#define WM8962_DF1_SHARED_COEFF_SEL_MASK        0x0002  /* DF1_SHARED_COEFF_SEL */
+#define WM8962_DF1_SHARED_COEFF_SEL_SHIFT            1  /* DF1_SHARED_COEFF_SEL */
+#define WM8962_DF1_SHARED_COEFF_SEL_WIDTH            1  /* DF1_SHARED_COEFF_SEL */
+#define WM8962_DF1_ENA                          0x0001  /* DF1_ENA */
+#define WM8962_DF1_ENA_MASK                     0x0001  /* DF1_ENA */
+#define WM8962_DF1_ENA_SHIFT                         0  /* DF1_ENA */
+#define WM8962_DF1_ENA_WIDTH                         1  /* DF1_ENA */
+
+/*
+ * R257 (0x101) - DF2
+ */
+#define WM8962_DF1_COEFF_L0_MASK                0xFFFF  /* DF1_COEFF_L0 - [15:0] */
+#define WM8962_DF1_COEFF_L0_SHIFT                    0  /* DF1_COEFF_L0 - [15:0] */
+#define WM8962_DF1_COEFF_L0_WIDTH                   16  /* DF1_COEFF_L0 - [15:0] */
+
+/*
+ * R258 (0x102) - DF3
+ */
+#define WM8962_DF1_COEFF_L1_MASK                0xFFFF  /* DF1_COEFF_L1 - [15:0] */
+#define WM8962_DF1_COEFF_L1_SHIFT                    0  /* DF1_COEFF_L1 - [15:0] */
+#define WM8962_DF1_COEFF_L1_WIDTH                   16  /* DF1_COEFF_L1 - [15:0] */
+
+/*
+ * R259 (0x103) - DF4
+ */
+#define WM8962_DF1_COEFF_L2_MASK                0xFFFF  /* DF1_COEFF_L2 - [15:0] */
+#define WM8962_DF1_COEFF_L2_SHIFT                    0  /* DF1_COEFF_L2 - [15:0] */
+#define WM8962_DF1_COEFF_L2_WIDTH                   16  /* DF1_COEFF_L2 - [15:0] */
+
+/*
+ * R260 (0x104) - DF5
+ */
+#define WM8962_DF1_COEFF_R0_MASK                0xFFFF  /* DF1_COEFF_R0 - [15:0] */
+#define WM8962_DF1_COEFF_R0_SHIFT                    0  /* DF1_COEFF_R0 - [15:0] */
+#define WM8962_DF1_COEFF_R0_WIDTH                   16  /* DF1_COEFF_R0 - [15:0] */
+
+/*
+ * R261 (0x105) - DF6
+ */
+#define WM8962_DF1_COEFF_R1_MASK                0xFFFF  /* DF1_COEFF_R1 - [15:0] */
+#define WM8962_DF1_COEFF_R1_SHIFT                    0  /* DF1_COEFF_R1 - [15:0] */
+#define WM8962_DF1_COEFF_R1_WIDTH                   16  /* DF1_COEFF_R1 - [15:0] */
+
+/*
+ * R262 (0x106) - DF7
+ */
+#define WM8962_DF1_COEFF_R2_MASK                0xFFFF  /* DF1_COEFF_R2 - [15:0] */
+#define WM8962_DF1_COEFF_R2_SHIFT                    0  /* DF1_COEFF_R2 - [15:0] */
+#define WM8962_DF1_COEFF_R2_WIDTH                   16  /* DF1_COEFF_R2 - [15:0] */
+
+/*
+ * R264 (0x108) - LHPF1
+ */
+#define WM8962_LHPF_MODE                        0x0002  /* LHPF_MODE */
+#define WM8962_LHPF_MODE_MASK                   0x0002  /* LHPF_MODE */
+#define WM8962_LHPF_MODE_SHIFT                       1  /* LHPF_MODE */
+#define WM8962_LHPF_MODE_WIDTH                       1  /* LHPF_MODE */
+#define WM8962_LHPF_ENA                         0x0001  /* LHPF_ENA */
+#define WM8962_LHPF_ENA_MASK                    0x0001  /* LHPF_ENA */
+#define WM8962_LHPF_ENA_SHIFT                        0  /* LHPF_ENA */
+#define WM8962_LHPF_ENA_WIDTH                        1  /* LHPF_ENA */
+
+/*
+ * R265 (0x109) - LHPF2
+ */
+#define WM8962_LHPF_COEFF_MASK                  0xFFFF  /* LHPF_COEFF - [15:0] */
+#define WM8962_LHPF_COEFF_SHIFT                      0  /* LHPF_COEFF - [15:0] */
+#define WM8962_LHPF_COEFF_WIDTH                     16  /* LHPF_COEFF - [15:0] */
+
+/*
+ * R268 (0x10C) - THREED1
+ */
+#define WM8962_ADC_MONOMIX                      0x0040  /* ADC_MONOMIX */
+#define WM8962_ADC_MONOMIX_MASK                 0x0040  /* ADC_MONOMIX */
+#define WM8962_ADC_MONOMIX_SHIFT                     6  /* ADC_MONOMIX */
+#define WM8962_ADC_MONOMIX_WIDTH                     1  /* ADC_MONOMIX */
+#define WM8962_THREED_SIGN_L                    0x0020  /* THREED_SIGN_L */
+#define WM8962_THREED_SIGN_L_MASK               0x0020  /* THREED_SIGN_L */
+#define WM8962_THREED_SIGN_L_SHIFT                   5  /* THREED_SIGN_L */
+#define WM8962_THREED_SIGN_L_WIDTH                   1  /* THREED_SIGN_L */
+#define WM8962_THREED_SIGN_R                    0x0010  /* THREED_SIGN_R */
+#define WM8962_THREED_SIGN_R_MASK               0x0010  /* THREED_SIGN_R */
+#define WM8962_THREED_SIGN_R_SHIFT                   4  /* THREED_SIGN_R */
+#define WM8962_THREED_SIGN_R_WIDTH                   1  /* THREED_SIGN_R */
+#define WM8962_THREED_LHPF_MODE                 0x0004  /* THREED_LHPF_MODE */
+#define WM8962_THREED_LHPF_MODE_MASK            0x0004  /* THREED_LHPF_MODE */
+#define WM8962_THREED_LHPF_MODE_SHIFT                2  /* THREED_LHPF_MODE */
+#define WM8962_THREED_LHPF_MODE_WIDTH                1  /* THREED_LHPF_MODE */
+#define WM8962_THREED_LHPF_ENA                  0x0002  /* THREED_LHPF_ENA */
+#define WM8962_THREED_LHPF_ENA_MASK             0x0002  /* THREED_LHPF_ENA */
+#define WM8962_THREED_LHPF_ENA_SHIFT                 1  /* THREED_LHPF_ENA */
+#define WM8962_THREED_LHPF_ENA_WIDTH                 1  /* THREED_LHPF_ENA */
+#define WM8962_THREED_ENA                       0x0001  /* THREED_ENA */
+#define WM8962_THREED_ENA_MASK                  0x0001  /* THREED_ENA */
+#define WM8962_THREED_ENA_SHIFT                      0  /* THREED_ENA */
+#define WM8962_THREED_ENA_WIDTH                      1  /* THREED_ENA */
+
+/*
+ * R269 (0x10D) - THREED2
+ */
+#define WM8962_THREED_FGAINL_MASK               0xF800  /* THREED_FGAINL - [15:11] */
+#define WM8962_THREED_FGAINL_SHIFT                  11  /* THREED_FGAINL - [15:11] */
+#define WM8962_THREED_FGAINL_WIDTH                   5  /* THREED_FGAINL - [15:11] */
+#define WM8962_THREED_CGAINL_MASK               0x07C0  /* THREED_CGAINL - [10:6] */
+#define WM8962_THREED_CGAINL_SHIFT                   6  /* THREED_CGAINL - [10:6] */
+#define WM8962_THREED_CGAINL_WIDTH                   5  /* THREED_CGAINL - [10:6] */
+#define WM8962_THREED_DELAYL_MASK               0x003C  /* THREED_DELAYL - [5:2] */
+#define WM8962_THREED_DELAYL_SHIFT                   2  /* THREED_DELAYL - [5:2] */
+#define WM8962_THREED_DELAYL_WIDTH                   4  /* THREED_DELAYL - [5:2] */
+
+/*
+ * R270 (0x10E) - THREED3
+ */
+#define WM8962_THREED_LHPF_COEFF_MASK           0xFFFF  /* THREED_LHPF_COEFF - [15:0] */
+#define WM8962_THREED_LHPF_COEFF_SHIFT               0  /* THREED_LHPF_COEFF - [15:0] */
+#define WM8962_THREED_LHPF_COEFF_WIDTH              16  /* THREED_LHPF_COEFF - [15:0] */
+
+/*
+ * R271 (0x10F) - THREED4
+ */
+#define WM8962_THREED_FGAINR_MASK               0xF800  /* THREED_FGAINR - [15:11] */
+#define WM8962_THREED_FGAINR_SHIFT                  11  /* THREED_FGAINR - [15:11] */
+#define WM8962_THREED_FGAINR_WIDTH                   5  /* THREED_FGAINR - [15:11] */
+#define WM8962_THREED_CGAINR_MASK               0x07C0  /* THREED_CGAINR - [10:6] */
+#define WM8962_THREED_CGAINR_SHIFT                   6  /* THREED_CGAINR - [10:6] */
+#define WM8962_THREED_CGAINR_WIDTH                   5  /* THREED_CGAINR - [10:6] */
+#define WM8962_THREED_DELAYR_MASK               0x003C  /* THREED_DELAYR - [5:2] */
+#define WM8962_THREED_DELAYR_SHIFT                   2  /* THREED_DELAYR - [5:2] */
+#define WM8962_THREED_DELAYR_WIDTH                   4  /* THREED_DELAYR - [5:2] */
+
+/*
+ * R276 (0x114) - DRC 1
+ */
+#define WM8962_DRC_SIG_DET_RMS_MASK             0x7C00  /* DRC_SIG_DET_RMS - [14:10] */
+#define WM8962_DRC_SIG_DET_RMS_SHIFT                10  /* DRC_SIG_DET_RMS - [14:10] */
+#define WM8962_DRC_SIG_DET_RMS_WIDTH                 5  /* DRC_SIG_DET_RMS - [14:10] */
+#define WM8962_DRC_SIG_DET_PK_MASK              0x0300  /* DRC_SIG_DET_PK - [9:8] */
+#define WM8962_DRC_SIG_DET_PK_SHIFT                  8  /* DRC_SIG_DET_PK - [9:8] */
+#define WM8962_DRC_SIG_DET_PK_WIDTH                  2  /* DRC_SIG_DET_PK - [9:8] */
+#define WM8962_DRC_NG_ENA                       0x0080  /* DRC_NG_ENA */
+#define WM8962_DRC_NG_ENA_MASK                  0x0080  /* DRC_NG_ENA */
+#define WM8962_DRC_NG_ENA_SHIFT                      7  /* DRC_NG_ENA */
+#define WM8962_DRC_NG_ENA_WIDTH                      1  /* DRC_NG_ENA */
+#define WM8962_DRC_SIG_DET_MODE                 0x0040  /* DRC_SIG_DET_MODE */
+#define WM8962_DRC_SIG_DET_MODE_MASK            0x0040  /* DRC_SIG_DET_MODE */
+#define WM8962_DRC_SIG_DET_MODE_SHIFT                6  /* DRC_SIG_DET_MODE */
+#define WM8962_DRC_SIG_DET_MODE_WIDTH                1  /* DRC_SIG_DET_MODE */
+#define WM8962_DRC_SIG_DET                      0x0020  /* DRC_SIG_DET */
+#define WM8962_DRC_SIG_DET_MASK                 0x0020  /* DRC_SIG_DET */
+#define WM8962_DRC_SIG_DET_SHIFT                     5  /* DRC_SIG_DET */
+#define WM8962_DRC_SIG_DET_WIDTH                     1  /* DRC_SIG_DET */
+#define WM8962_DRC_KNEE2_OP_ENA                 0x0010  /* DRC_KNEE2_OP_ENA */
+#define WM8962_DRC_KNEE2_OP_ENA_MASK            0x0010  /* DRC_KNEE2_OP_ENA */
+#define WM8962_DRC_KNEE2_OP_ENA_SHIFT                4  /* DRC_KNEE2_OP_ENA */
+#define WM8962_DRC_KNEE2_OP_ENA_WIDTH                1  /* DRC_KNEE2_OP_ENA */
+#define WM8962_DRC_QR                           0x0008  /* DRC_QR */
+#define WM8962_DRC_QR_MASK                      0x0008  /* DRC_QR */
+#define WM8962_DRC_QR_SHIFT                          3  /* DRC_QR */
+#define WM8962_DRC_QR_WIDTH                          1  /* DRC_QR */
+#define WM8962_DRC_ANTICLIP                     0x0004  /* DRC_ANTICLIP */
+#define WM8962_DRC_ANTICLIP_MASK                0x0004  /* DRC_ANTICLIP */
+#define WM8962_DRC_ANTICLIP_SHIFT                    2  /* DRC_ANTICLIP */
+#define WM8962_DRC_ANTICLIP_WIDTH                    1  /* DRC_ANTICLIP */
+#define WM8962_DRC_MODE                         0x0002  /* DRC_MODE */
+#define WM8962_DRC_MODE_MASK                    0x0002  /* DRC_MODE */
+#define WM8962_DRC_MODE_SHIFT                        1  /* DRC_MODE */
+#define WM8962_DRC_MODE_WIDTH                        1  /* DRC_MODE */
+#define WM8962_DRC_ENA                          0x0001  /* DRC_ENA */
+#define WM8962_DRC_ENA_MASK                     0x0001  /* DRC_ENA */
+#define WM8962_DRC_ENA_SHIFT                         0  /* DRC_ENA */
+#define WM8962_DRC_ENA_WIDTH                         1  /* DRC_ENA */
+
+/*
+ * R277 (0x115) - DRC 2
+ */
+#define WM8962_DRC_ATK_MASK                     0x1E00  /* DRC_ATK - [12:9] */
+#define WM8962_DRC_ATK_SHIFT                         9  /* DRC_ATK - [12:9] */
+#define WM8962_DRC_ATK_WIDTH                         4  /* DRC_ATK - [12:9] */
+#define WM8962_DRC_DCY_MASK                     0x01E0  /* DRC_DCY - [8:5] */
+#define WM8962_DRC_DCY_SHIFT                         5  /* DRC_DCY - [8:5] */
+#define WM8962_DRC_DCY_WIDTH                         4  /* DRC_DCY - [8:5] */
+#define WM8962_DRC_MINGAIN_MASK                 0x001C  /* DRC_MINGAIN - [4:2] */
+#define WM8962_DRC_MINGAIN_SHIFT                     2  /* DRC_MINGAIN - [4:2] */
+#define WM8962_DRC_MINGAIN_WIDTH                     3  /* DRC_MINGAIN - [4:2] */
+#define WM8962_DRC_MAXGAIN_MASK                 0x0003  /* DRC_MAXGAIN - [1:0] */
+#define WM8962_DRC_MAXGAIN_SHIFT                     0  /* DRC_MAXGAIN - [1:0] */
+#define WM8962_DRC_MAXGAIN_WIDTH                     2  /* DRC_MAXGAIN - [1:0] */
+
+/*
+ * R278 (0x116) - DRC 3
+ */
+#define WM8962_DRC_NG_MINGAIN_MASK              0xF000  /* DRC_NG_MINGAIN - [15:12] */
+#define WM8962_DRC_NG_MINGAIN_SHIFT                 12  /* DRC_NG_MINGAIN - [15:12] */
+#define WM8962_DRC_NG_MINGAIN_WIDTH                  4  /* DRC_NG_MINGAIN - [15:12] */
+#define WM8962_DRC_QR_THR_MASK                  0x0C00  /* DRC_QR_THR - [11:10] */
+#define WM8962_DRC_QR_THR_SHIFT                     10  /* DRC_QR_THR - [11:10] */
+#define WM8962_DRC_QR_THR_WIDTH                      2  /* DRC_QR_THR - [11:10] */
+#define WM8962_DRC_QR_DCY_MASK                  0x0300  /* DRC_QR_DCY - [9:8] */
+#define WM8962_DRC_QR_DCY_SHIFT                      8  /* DRC_QR_DCY - [9:8] */
+#define WM8962_DRC_QR_DCY_WIDTH                      2  /* DRC_QR_DCY - [9:8] */
+#define WM8962_DRC_NG_EXP_MASK                  0x00C0  /* DRC_NG_EXP - [7:6] */
+#define WM8962_DRC_NG_EXP_SHIFT                      6  /* DRC_NG_EXP - [7:6] */
+#define WM8962_DRC_NG_EXP_WIDTH                      2  /* DRC_NG_EXP - [7:6] */
+#define WM8962_DRC_HI_COMP_MASK                 0x0038  /* DRC_HI_COMP - [5:3] */
+#define WM8962_DRC_HI_COMP_SHIFT                     3  /* DRC_HI_COMP - [5:3] */
+#define WM8962_DRC_HI_COMP_WIDTH                     3  /* DRC_HI_COMP - [5:3] */
+#define WM8962_DRC_LO_COMP_MASK                 0x0007  /* DRC_LO_COMP - [2:0] */
+#define WM8962_DRC_LO_COMP_SHIFT                     0  /* DRC_LO_COMP - [2:0] */
+#define WM8962_DRC_LO_COMP_WIDTH                     3  /* DRC_LO_COMP - [2:0] */
+
+/*
+ * R279 (0x117) - DRC 4
+ */
+#define WM8962_DRC_KNEE_IP_MASK                 0x07E0  /* DRC_KNEE_IP - [10:5] */
+#define WM8962_DRC_KNEE_IP_SHIFT                     5  /* DRC_KNEE_IP - [10:5] */
+#define WM8962_DRC_KNEE_IP_WIDTH                     6  /* DRC_KNEE_IP - [10:5] */
+#define WM8962_DRC_KNEE_OP_MASK                 0x001F  /* DRC_KNEE_OP - [4:0] */
+#define WM8962_DRC_KNEE_OP_SHIFT                     0  /* DRC_KNEE_OP - [4:0] */
+#define WM8962_DRC_KNEE_OP_WIDTH                     5  /* DRC_KNEE_OP - [4:0] */
+
+/*
+ * R280 (0x118) - DRC 5
+ */
+#define WM8962_DRC_KNEE2_IP_MASK                0x03E0  /* DRC_KNEE2_IP - [9:5] */
+#define WM8962_DRC_KNEE2_IP_SHIFT                    5  /* DRC_KNEE2_IP - [9:5] */
+#define WM8962_DRC_KNEE2_IP_WIDTH                    5  /* DRC_KNEE2_IP - [9:5] */
+#define WM8962_DRC_KNEE2_OP_MASK                0x001F  /* DRC_KNEE2_OP - [4:0] */
+#define WM8962_DRC_KNEE2_OP_SHIFT                    0  /* DRC_KNEE2_OP - [4:0] */
+#define WM8962_DRC_KNEE2_OP_WIDTH                    5  /* DRC_KNEE2_OP - [4:0] */
+
+/*
+ * R285 (0x11D) - Tloopback
+ */
+#define WM8962_TLB_ENA                          0x0002  /* TLB_ENA */
+#define WM8962_TLB_ENA_MASK                     0x0002  /* TLB_ENA */
+#define WM8962_TLB_ENA_SHIFT                         1  /* TLB_ENA */
+#define WM8962_TLB_ENA_WIDTH                         1  /* TLB_ENA */
+#define WM8962_TLB_MODE                         0x0001  /* TLB_MODE */
+#define WM8962_TLB_MODE_MASK                    0x0001  /* TLB_MODE */
+#define WM8962_TLB_MODE_SHIFT                        0  /* TLB_MODE */
+#define WM8962_TLB_MODE_WIDTH                        1  /* TLB_MODE */
+
+/*
+ * R335 (0x14F) - EQ1
+ */
+#define WM8962_EQ_SHARED_COEFF                  0x0004  /* EQ_SHARED_COEFF */
+#define WM8962_EQ_SHARED_COEFF_MASK             0x0004  /* EQ_SHARED_COEFF */
+#define WM8962_EQ_SHARED_COEFF_SHIFT                 2  /* EQ_SHARED_COEFF */
+#define WM8962_EQ_SHARED_COEFF_WIDTH                 1  /* EQ_SHARED_COEFF */
+#define WM8962_EQ_SHARED_COEFF_SEL              0x0002  /* EQ_SHARED_COEFF_SEL */
+#define WM8962_EQ_SHARED_COEFF_SEL_MASK         0x0002  /* EQ_SHARED_COEFF_SEL */
+#define WM8962_EQ_SHARED_COEFF_SEL_SHIFT             1  /* EQ_SHARED_COEFF_SEL */
+#define WM8962_EQ_SHARED_COEFF_SEL_WIDTH             1  /* EQ_SHARED_COEFF_SEL */
+#define WM8962_EQ_ENA                           0x0001  /* EQ_ENA */
+#define WM8962_EQ_ENA_MASK                      0x0001  /* EQ_ENA */
+#define WM8962_EQ_ENA_SHIFT                          0  /* EQ_ENA */
+#define WM8962_EQ_ENA_WIDTH                          1  /* EQ_ENA */
+
+/*
+ * R336 (0x150) - EQ2
+ */
+#define WM8962_EQL_B1_GAIN_MASK                 0xF800  /* EQL_B1_GAIN - [15:11] */
+#define WM8962_EQL_B1_GAIN_SHIFT                    11  /* EQL_B1_GAIN - [15:11] */
+#define WM8962_EQL_B1_GAIN_WIDTH                     5  /* EQL_B1_GAIN - [15:11] */
+#define WM8962_EQL_B2_GAIN_MASK                 0x07C0  /* EQL_B2_GAIN - [10:6] */
+#define WM8962_EQL_B2_GAIN_SHIFT                     6  /* EQL_B2_GAIN - [10:6] */
+#define WM8962_EQL_B2_GAIN_WIDTH                     5  /* EQL_B2_GAIN - [10:6] */
+#define WM8962_EQL_B3_GAIN_MASK                 0x003E  /* EQL_B3_GAIN - [5:1] */
+#define WM8962_EQL_B3_GAIN_SHIFT                     1  /* EQL_B3_GAIN - [5:1] */
+#define WM8962_EQL_B3_GAIN_WIDTH                     5  /* EQL_B3_GAIN - [5:1] */
+
+/*
+ * R337 (0x151) - EQ3
+ */
+#define WM8962_EQL_B4_GAIN_MASK                 0xF800  /* EQL_B4_GAIN - [15:11] */
+#define WM8962_EQL_B4_GAIN_SHIFT                    11  /* EQL_B4_GAIN - [15:11] */
+#define WM8962_EQL_B4_GAIN_WIDTH                     5  /* EQL_B4_GAIN - [15:11] */
+#define WM8962_EQL_B5_GAIN_MASK                 0x07C0  /* EQL_B5_GAIN - [10:6] */
+#define WM8962_EQL_B5_GAIN_SHIFT                     6  /* EQL_B5_GAIN - [10:6] */
+#define WM8962_EQL_B5_GAIN_WIDTH                     5  /* EQL_B5_GAIN - [10:6] */
+
+/*
+ * R338 (0x152) - EQ4
+ */
+#define WM8962_EQL_B1_A_MASK                    0xFFFF  /* EQL_B1_A - [15:0] */
+#define WM8962_EQL_B1_A_SHIFT                        0  /* EQL_B1_A - [15:0] */
+#define WM8962_EQL_B1_A_WIDTH                       16  /* EQL_B1_A - [15:0] */
+
+/*
+ * R339 (0x153) - EQ5
+ */
+#define WM8962_EQL_B1_B_MASK                    0xFFFF  /* EQL_B1_B - [15:0] */
+#define WM8962_EQL_B1_B_SHIFT                        0  /* EQL_B1_B - [15:0] */
+#define WM8962_EQL_B1_B_WIDTH                       16  /* EQL_B1_B - [15:0] */
+
+/*
+ * R340 (0x154) - EQ6
+ */
+#define WM8962_EQL_B1_PG_MASK                   0xFFFF  /* EQL_B1_PG - [15:0] */
+#define WM8962_EQL_B1_PG_SHIFT                       0  /* EQL_B1_PG - [15:0] */
+#define WM8962_EQL_B1_PG_WIDTH                      16  /* EQL_B1_PG - [15:0] */
+
+/*
+ * R341 (0x155) - EQ7
+ */
+#define WM8962_EQL_B2_A_MASK                    0xFFFF  /* EQL_B2_A - [15:0] */
+#define WM8962_EQL_B2_A_SHIFT                        0  /* EQL_B2_A - [15:0] */
+#define WM8962_EQL_B2_A_WIDTH                       16  /* EQL_B2_A - [15:0] */
+
+/*
+ * R342 (0x156) - EQ8
+ */
+#define WM8962_EQL_B2_B_MASK                    0xFFFF  /* EQL_B2_B - [15:0] */
+#define WM8962_EQL_B2_B_SHIFT                        0  /* EQL_B2_B - [15:0] */
+#define WM8962_EQL_B2_B_WIDTH                       16  /* EQL_B2_B - [15:0] */
+
+/*
+ * R343 (0x157) - EQ9
+ */
+#define WM8962_EQL_B2_C_MASK                    0xFFFF  /* EQL_B2_C - [15:0] */
+#define WM8962_EQL_B2_C_SHIFT                        0  /* EQL_B2_C - [15:0] */
+#define WM8962_EQL_B2_C_WIDTH                       16  /* EQL_B2_C - [15:0] */
+
+/*
+ * R344 (0x158) - EQ10
+ */
+#define WM8962_EQL_B2_PG_MASK                   0xFFFF  /* EQL_B2_PG - [15:0] */
+#define WM8962_EQL_B2_PG_SHIFT                       0  /* EQL_B2_PG - [15:0] */
+#define WM8962_EQL_B2_PG_WIDTH                      16  /* EQL_B2_PG - [15:0] */
+
+/*
+ * R345 (0x159) - EQ11
+ */
+#define WM8962_EQL_B3_A_MASK                    0xFFFF  /* EQL_B3_A - [15:0] */
+#define WM8962_EQL_B3_A_SHIFT                        0  /* EQL_B3_A - [15:0] */
+#define WM8962_EQL_B3_A_WIDTH                       16  /* EQL_B3_A - [15:0] */
+
+/*
+ * R346 (0x15A) - EQ12
+ */
+#define WM8962_EQL_B3_B_MASK                    0xFFFF  /* EQL_B3_B - [15:0] */
+#define WM8962_EQL_B3_B_SHIFT                        0  /* EQL_B3_B - [15:0] */
+#define WM8962_EQL_B3_B_WIDTH                       16  /* EQL_B3_B - [15:0] */
+
+/*
+ * R347 (0x15B) - EQ13
+ */
+#define WM8962_EQL_B3_C_MASK                    0xFFFF  /* EQL_B3_C - [15:0] */
+#define WM8962_EQL_B3_C_SHIFT                        0  /* EQL_B3_C - [15:0] */
+#define WM8962_EQL_B3_C_WIDTH                       16  /* EQL_B3_C - [15:0] */
+
+/*
+ * R348 (0x15C) - EQ14
+ */
+#define WM8962_EQL_B3_PG_MASK                   0xFFFF  /* EQL_B3_PG - [15:0] */
+#define WM8962_EQL_B3_PG_SHIFT                       0  /* EQL_B3_PG - [15:0] */
+#define WM8962_EQL_B3_PG_WIDTH                      16  /* EQL_B3_PG - [15:0] */
+
+/*
+ * R349 (0x15D) - EQ15
+ */
+#define WM8962_EQL_B4_A_MASK                    0xFFFF  /* EQL_B4_A - [15:0] */
+#define WM8962_EQL_B4_A_SHIFT                        0  /* EQL_B4_A - [15:0] */
+#define WM8962_EQL_B4_A_WIDTH                       16  /* EQL_B4_A - [15:0] */
+
+/*
+ * R350 (0x15E) - EQ16
+ */
+#define WM8962_EQL_B4_B_MASK                    0xFFFF  /* EQL_B4_B - [15:0] */
+#define WM8962_EQL_B4_B_SHIFT                        0  /* EQL_B4_B - [15:0] */
+#define WM8962_EQL_B4_B_WIDTH                       16  /* EQL_B4_B - [15:0] */
+
+/*
+ * R351 (0x15F) - EQ17
+ */
+#define WM8962_EQL_B4_C_MASK                    0xFFFF  /* EQL_B4_C - [15:0] */
+#define WM8962_EQL_B4_C_SHIFT                        0  /* EQL_B4_C - [15:0] */
+#define WM8962_EQL_B4_C_WIDTH                       16  /* EQL_B4_C - [15:0] */
+
+/*
+ * R352 (0x160) - EQ18
+ */
+#define WM8962_EQL_B4_PG_MASK                   0xFFFF  /* EQL_B4_PG - [15:0] */
+#define WM8962_EQL_B4_PG_SHIFT                       0  /* EQL_B4_PG - [15:0] */
+#define WM8962_EQL_B4_PG_WIDTH                      16  /* EQL_B4_PG - [15:0] */
+
+/*
+ * R353 (0x161) - EQ19
+ */
+#define WM8962_EQL_B5_A_MASK                    0xFFFF  /* EQL_B5_A - [15:0] */
+#define WM8962_EQL_B5_A_SHIFT                        0  /* EQL_B5_A - [15:0] */
+#define WM8962_EQL_B5_A_WIDTH                       16  /* EQL_B5_A - [15:0] */
+
+/*
+ * R354 (0x162) - EQ20
+ */
+#define WM8962_EQL_B5_B_MASK                    0xFFFF  /* EQL_B5_B - [15:0] */
+#define WM8962_EQL_B5_B_SHIFT                        0  /* EQL_B5_B - [15:0] */
+#define WM8962_EQL_B5_B_WIDTH                       16  /* EQL_B5_B - [15:0] */
+
+/*
+ * R355 (0x163) - EQ21
+ */
+#define WM8962_EQL_B5_PG_MASK                   0xFFFF  /* EQL_B5_PG - [15:0] */
+#define WM8962_EQL_B5_PG_SHIFT                       0  /* EQL_B5_PG - [15:0] */
+#define WM8962_EQL_B5_PG_WIDTH                      16  /* EQL_B5_PG - [15:0] */
+
+/*
+ * R356 (0x164) - EQ22
+ */
+#define WM8962_EQR_B1_GAIN_MASK                 0xF800  /* EQR_B1_GAIN - [15:11] */
+#define WM8962_EQR_B1_GAIN_SHIFT                    11  /* EQR_B1_GAIN - [15:11] */
+#define WM8962_EQR_B1_GAIN_WIDTH                     5  /* EQR_B1_GAIN - [15:11] */
+#define WM8962_EQR_B2_GAIN_MASK                 0x07C0  /* EQR_B2_GAIN - [10:6] */
+#define WM8962_EQR_B2_GAIN_SHIFT                     6  /* EQR_B2_GAIN - [10:6] */
+#define WM8962_EQR_B2_GAIN_WIDTH                     5  /* EQR_B2_GAIN - [10:6] */
+#define WM8962_EQR_B3_GAIN_MASK                 0x003E  /* EQR_B3_GAIN - [5:1] */
+#define WM8962_EQR_B3_GAIN_SHIFT                     1  /* EQR_B3_GAIN - [5:1] */
+#define WM8962_EQR_B3_GAIN_WIDTH                     5  /* EQR_B3_GAIN - [5:1] */
+
+/*
+ * R357 (0x165) - EQ23
+ */
+#define WM8962_EQR_B4_GAIN_MASK                 0xF800  /* EQR_B4_GAIN - [15:11] */
+#define WM8962_EQR_B4_GAIN_SHIFT                    11  /* EQR_B4_GAIN - [15:11] */
+#define WM8962_EQR_B4_GAIN_WIDTH                     5  /* EQR_B4_GAIN - [15:11] */
+#define WM8962_EQR_B5_GAIN_MASK                 0x07C0  /* EQR_B5_GAIN - [10:6] */
+#define WM8962_EQR_B5_GAIN_SHIFT                     6  /* EQR_B5_GAIN - [10:6] */
+#define WM8962_EQR_B5_GAIN_WIDTH                     5  /* EQR_B5_GAIN - [10:6] */
+
+/*
+ * R358 (0x166) - EQ24
+ */
+#define WM8962_EQR_B1_A_MASK                    0xFFFF  /* EQR_B1_A - [15:0] */
+#define WM8962_EQR_B1_A_SHIFT                        0  /* EQR_B1_A - [15:0] */
+#define WM8962_EQR_B1_A_WIDTH                       16  /* EQR_B1_A - [15:0] */
+
+/*
+ * R359 (0x167) - EQ25
+ */
+#define WM8962_EQR_B1_B_MASK                    0xFFFF  /* EQR_B1_B - [15:0] */
+#define WM8962_EQR_B1_B_SHIFT                        0  /* EQR_B1_B - [15:0] */
+#define WM8962_EQR_B1_B_WIDTH                       16  /* EQR_B1_B - [15:0] */
+
+/*
+ * R360 (0x168) - EQ26
+ */
+#define WM8962_EQR_B1_PG_MASK                   0xFFFF  /* EQR_B1_PG - [15:0] */
+#define WM8962_EQR_B1_PG_SHIFT                       0  /* EQR_B1_PG - [15:0] */
+#define WM8962_EQR_B1_PG_WIDTH                      16  /* EQR_B1_PG - [15:0] */
+
+/*
+ * R361 (0x169) - EQ27
+ */
+#define WM8962_EQR_B2_A_MASK                    0xFFFF  /* EQR_B2_A - [15:0] */
+#define WM8962_EQR_B2_A_SHIFT                        0  /* EQR_B2_A - [15:0] */
+#define WM8962_EQR_B2_A_WIDTH                       16  /* EQR_B2_A - [15:0] */
+
+/*
+ * R362 (0x16A) - EQ28
+ */
+#define WM8962_EQR_B2_B_MASK                    0xFFFF  /* EQR_B2_B - [15:0] */
+#define WM8962_EQR_B2_B_SHIFT                        0  /* EQR_B2_B - [15:0] */
+#define WM8962_EQR_B2_B_WIDTH                       16  /* EQR_B2_B - [15:0] */
+
+/*
+ * R363 (0x16B) - EQ29
+ */
+#define WM8962_EQR_B2_C_MASK                    0xFFFF  /* EQR_B2_C - [15:0] */
+#define WM8962_EQR_B2_C_SHIFT                        0  /* EQR_B2_C - [15:0] */
+#define WM8962_EQR_B2_C_WIDTH                       16  /* EQR_B2_C - [15:0] */
+
+/*
+ * R364 (0x16C) - EQ30
+ */
+#define WM8962_EQR_B2_PG_MASK                   0xFFFF  /* EQR_B2_PG - [15:0] */
+#define WM8962_EQR_B2_PG_SHIFT                       0  /* EQR_B2_PG - [15:0] */
+#define WM8962_EQR_B2_PG_WIDTH                      16  /* EQR_B2_PG - [15:0] */
+
+/*
+ * R365 (0x16D) - EQ31
+ */
+#define WM8962_EQR_B3_A_MASK                    0xFFFF  /* EQR_B3_A - [15:0] */
+#define WM8962_EQR_B3_A_SHIFT                        0  /* EQR_B3_A - [15:0] */
+#define WM8962_EQR_B3_A_WIDTH                       16  /* EQR_B3_A - [15:0] */
+
+/*
+ * R366 (0x16E) - EQ32
+ */
+#define WM8962_EQR_B3_B_MASK                    0xFFFF  /* EQR_B3_B - [15:0] */
+#define WM8962_EQR_B3_B_SHIFT                        0  /* EQR_B3_B - [15:0] */
+#define WM8962_EQR_B3_B_WIDTH                       16  /* EQR_B3_B - [15:0] */
+
+/*
+ * R367 (0x16F) - EQ33
+ */
+#define WM8962_EQR_B3_C_MASK                    0xFFFF  /* EQR_B3_C - [15:0] */
+#define WM8962_EQR_B3_C_SHIFT                        0  /* EQR_B3_C - [15:0] */
+#define WM8962_EQR_B3_C_WIDTH                       16  /* EQR_B3_C - [15:0] */
+
+/*
+ * R368 (0x170) - EQ34
+ */
+#define WM8962_EQR_B3_PG_MASK                   0xFFFF  /* EQR_B3_PG - [15:0] */
+#define WM8962_EQR_B3_PG_SHIFT                       0  /* EQR_B3_PG - [15:0] */
+#define WM8962_EQR_B3_PG_WIDTH                      16  /* EQR_B3_PG - [15:0] */
+
+/*
+ * R369 (0x171) - EQ35
+ */
+#define WM8962_EQR_B4_A_MASK                    0xFFFF  /* EQR_B4_A - [15:0] */
+#define WM8962_EQR_B4_A_SHIFT                        0  /* EQR_B4_A - [15:0] */
+#define WM8962_EQR_B4_A_WIDTH                       16  /* EQR_B4_A - [15:0] */
+
+/*
+ * R370 (0x172) - EQ36
+ */
+#define WM8962_EQR_B4_B_MASK                    0xFFFF  /* EQR_B4_B - [15:0] */
+#define WM8962_EQR_B4_B_SHIFT                        0  /* EQR_B4_B - [15:0] */
+#define WM8962_EQR_B4_B_WIDTH                       16  /* EQR_B4_B - [15:0] */
+
+/*
+ * R371 (0x173) - EQ37
+ */
+#define WM8962_EQR_B4_C_MASK                    0xFFFF  /* EQR_B4_C - [15:0] */
+#define WM8962_EQR_B4_C_SHIFT                        0  /* EQR_B4_C - [15:0] */
+#define WM8962_EQR_B4_C_WIDTH                       16  /* EQR_B4_C - [15:0] */
+
+/*
+ * R372 (0x174) - EQ38
+ */
+#define WM8962_EQR_B4_PG_MASK                   0xFFFF  /* EQR_B4_PG - [15:0] */
+#define WM8962_EQR_B4_PG_SHIFT                       0  /* EQR_B4_PG - [15:0] */
+#define WM8962_EQR_B4_PG_WIDTH                      16  /* EQR_B4_PG - [15:0] */
+
+/*
+ * R373 (0x175) - EQ39
+ */
+#define WM8962_EQR_B5_A_MASK                    0xFFFF  /* EQR_B5_A - [15:0] */
+#define WM8962_EQR_B5_A_SHIFT                        0  /* EQR_B5_A - [15:0] */
+#define WM8962_EQR_B5_A_WIDTH                       16  /* EQR_B5_A - [15:0] */
+
+/*
+ * R374 (0x176) - EQ40
+ */
+#define WM8962_EQR_B5_B_MASK                    0xFFFF  /* EQR_B5_B - [15:0] */
+#define WM8962_EQR_B5_B_SHIFT                        0  /* EQR_B5_B - [15:0] */
+#define WM8962_EQR_B5_B_WIDTH                       16  /* EQR_B5_B - [15:0] */
+
+/*
+ * R375 (0x177) - EQ41
+ */
+#define WM8962_EQR_B5_PG_MASK                   0xFFFF  /* EQR_B5_PG - [15:0] */
+#define WM8962_EQR_B5_PG_SHIFT                       0  /* EQR_B5_PG - [15:0] */
+#define WM8962_EQR_B5_PG_WIDTH                      16  /* EQR_B5_PG - [15:0] */
+
+/*
+ * R513 (0x201) - GPIO 2
+ */
+#define WM8962_GP2_POL                          0x0400  /* GP2_POL */
+#define WM8962_GP2_POL_MASK                     0x0400  /* GP2_POL */
+#define WM8962_GP2_POL_SHIFT                        10  /* GP2_POL */
+#define WM8962_GP2_POL_WIDTH                         1  /* GP2_POL */
+#define WM8962_GP2_LVL                          0x0040  /* GP2_LVL */
+#define WM8962_GP2_LVL_MASK                     0x0040  /* GP2_LVL */
+#define WM8962_GP2_LVL_SHIFT                         6  /* GP2_LVL */
+#define WM8962_GP2_LVL_WIDTH                         1  /* GP2_LVL */
+#define WM8962_GP2_FN_MASK                      0x001F  /* GP2_FN - [4:0] */
+#define WM8962_GP2_FN_SHIFT                          0  /* GP2_FN - [4:0] */
+#define WM8962_GP2_FN_WIDTH                          5  /* GP2_FN - [4:0] */
+
+/*
+ * R514 (0x202) - GPIO 3
+ */
+#define WM8962_GP3_POL                          0x0400  /* GP3_POL */
+#define WM8962_GP3_POL_MASK                     0x0400  /* GP3_POL */
+#define WM8962_GP3_POL_SHIFT                        10  /* GP3_POL */
+#define WM8962_GP3_POL_WIDTH                         1  /* GP3_POL */
+#define WM8962_GP3_LVL                          0x0040  /* GP3_LVL */
+#define WM8962_GP3_LVL_MASK                     0x0040  /* GP3_LVL */
+#define WM8962_GP3_LVL_SHIFT                         6  /* GP3_LVL */
+#define WM8962_GP3_LVL_WIDTH                         1  /* GP3_LVL */
+#define WM8962_GP3_FN_MASK                      0x001F  /* GP3_FN - [4:0] */
+#define WM8962_GP3_FN_SHIFT                          0  /* GP3_FN - [4:0] */
+#define WM8962_GP3_FN_WIDTH                          5  /* GP3_FN - [4:0] */
+
+/*
+ * R516 (0x204) - GPIO 5
+ */
+#define WM8962_GP5_DIR                          0x8000  /* GP5_DIR */
+#define WM8962_GP5_DIR_MASK                     0x8000  /* GP5_DIR */
+#define WM8962_GP5_DIR_SHIFT                        15  /* GP5_DIR */
+#define WM8962_GP5_DIR_WIDTH                         1  /* GP5_DIR */
+#define WM8962_GP5_PU                           0x4000  /* GP5_PU */
+#define WM8962_GP5_PU_MASK                      0x4000  /* GP5_PU */
+#define WM8962_GP5_PU_SHIFT                         14  /* GP5_PU */
+#define WM8962_GP5_PU_WIDTH                          1  /* GP5_PU */
+#define WM8962_GP5_PD                           0x2000  /* GP5_PD */
+#define WM8962_GP5_PD_MASK                      0x2000  /* GP5_PD */
+#define WM8962_GP5_PD_SHIFT                         13  /* GP5_PD */
+#define WM8962_GP5_PD_WIDTH                          1  /* GP5_PD */
+#define WM8962_GP5_POL                          0x0400  /* GP5_POL */
+#define WM8962_GP5_POL_MASK                     0x0400  /* GP5_POL */
+#define WM8962_GP5_POL_SHIFT                        10  /* GP5_POL */
+#define WM8962_GP5_POL_WIDTH                         1  /* GP5_POL */
+#define WM8962_GP5_OP_CFG                       0x0200  /* GP5_OP_CFG */
+#define WM8962_GP5_OP_CFG_MASK                  0x0200  /* GP5_OP_CFG */
+#define WM8962_GP5_OP_CFG_SHIFT                      9  /* GP5_OP_CFG */
+#define WM8962_GP5_OP_CFG_WIDTH                      1  /* GP5_OP_CFG */
+#define WM8962_GP5_DB                           0x0100  /* GP5_DB */
+#define WM8962_GP5_DB_MASK                      0x0100  /* GP5_DB */
+#define WM8962_GP5_DB_SHIFT                          8  /* GP5_DB */
+#define WM8962_GP5_DB_WIDTH                          1  /* GP5_DB */
+#define WM8962_GP5_LVL                          0x0040  /* GP5_LVL */
+#define WM8962_GP5_LVL_MASK                     0x0040  /* GP5_LVL */
+#define WM8962_GP5_LVL_SHIFT                         6  /* GP5_LVL */
+#define WM8962_GP5_LVL_WIDTH                         1  /* GP5_LVL */
+#define WM8962_GP5_FN_MASK                      0x001F  /* GP5_FN - [4:0] */
+#define WM8962_GP5_FN_SHIFT                          0  /* GP5_FN - [4:0] */
+#define WM8962_GP5_FN_WIDTH                          5  /* GP5_FN - [4:0] */
+
+/*
+ * R517 (0x205) - GPIO 6
+ */
+#define WM8962_GP6_DIR                          0x8000  /* GP6_DIR */
+#define WM8962_GP6_DIR_MASK                     0x8000  /* GP6_DIR */
+#define WM8962_GP6_DIR_SHIFT                        15  /* GP6_DIR */
+#define WM8962_GP6_DIR_WIDTH                         1  /* GP6_DIR */
+#define WM8962_GP6_PU                           0x4000  /* GP6_PU */
+#define WM8962_GP6_PU_MASK                      0x4000  /* GP6_PU */
+#define WM8962_GP6_PU_SHIFT                         14  /* GP6_PU */
+#define WM8962_GP6_PU_WIDTH                          1  /* GP6_PU */
+#define WM8962_GP6_PD                           0x2000  /* GP6_PD */
+#define WM8962_GP6_PD_MASK                      0x2000  /* GP6_PD */
+#define WM8962_GP6_PD_SHIFT                         13  /* GP6_PD */
+#define WM8962_GP6_PD_WIDTH                          1  /* GP6_PD */
+#define WM8962_GP6_POL                          0x0400  /* GP6_POL */
+#define WM8962_GP6_POL_MASK                     0x0400  /* GP6_POL */
+#define WM8962_GP6_POL_SHIFT                        10  /* GP6_POL */
+#define WM8962_GP6_POL_WIDTH                         1  /* GP6_POL */
+#define WM8962_GP6_OP_CFG                       0x0200  /* GP6_OP_CFG */
+#define WM8962_GP6_OP_CFG_MASK                  0x0200  /* GP6_OP_CFG */
+#define WM8962_GP6_OP_CFG_SHIFT                      9  /* GP6_OP_CFG */
+#define WM8962_GP6_OP_CFG_WIDTH                      1  /* GP6_OP_CFG */
+#define WM8962_GP6_DB                           0x0100  /* GP6_DB */
+#define WM8962_GP6_DB_MASK                      0x0100  /* GP6_DB */
+#define WM8962_GP6_DB_SHIFT                          8  /* GP6_DB */
+#define WM8962_GP6_DB_WIDTH                          1  /* GP6_DB */
+#define WM8962_GP6_LVL                          0x0040  /* GP6_LVL */
+#define WM8962_GP6_LVL_MASK                     0x0040  /* GP6_LVL */
+#define WM8962_GP6_LVL_SHIFT                         6  /* GP6_LVL */
+#define WM8962_GP6_LVL_WIDTH                         1  /* GP6_LVL */
+#define WM8962_GP6_FN_MASK                      0x001F  /* GP6_FN - [4:0] */
+#define WM8962_GP6_FN_SHIFT                          0  /* GP6_FN - [4:0] */
+#define WM8962_GP6_FN_WIDTH                          5  /* GP6_FN - [4:0] */
+
+/*
+ * R560 (0x230) - Interrupt Status 1
+ */
+#define WM8962_GP6_EINT                         0x0020  /* GP6_EINT */
+#define WM8962_GP6_EINT_MASK                    0x0020  /* GP6_EINT */
+#define WM8962_GP6_EINT_SHIFT                        5  /* GP6_EINT */
+#define WM8962_GP6_EINT_WIDTH                        1  /* GP6_EINT */
+#define WM8962_GP5_EINT                         0x0010  /* GP5_EINT */
+#define WM8962_GP5_EINT_MASK                    0x0010  /* GP5_EINT */
+#define WM8962_GP5_EINT_SHIFT                        4  /* GP5_EINT */
+#define WM8962_GP5_EINT_WIDTH                        1  /* GP5_EINT */
+
+/*
+ * R561 (0x231) - Interrupt Status 2
+ */
+#define WM8962_MICSCD_EINT                      0x8000  /* MICSCD_EINT */
+#define WM8962_MICSCD_EINT_MASK                 0x8000  /* MICSCD_EINT */
+#define WM8962_MICSCD_EINT_SHIFT                    15  /* MICSCD_EINT */
+#define WM8962_MICSCD_EINT_WIDTH                     1  /* MICSCD_EINT */
+#define WM8962_MICD_EINT                        0x4000  /* MICD_EINT */
+#define WM8962_MICD_EINT_MASK                   0x4000  /* MICD_EINT */
+#define WM8962_MICD_EINT_SHIFT                      14  /* MICD_EINT */
+#define WM8962_MICD_EINT_WIDTH                       1  /* MICD_EINT */
+#define WM8962_FIFOS_ERR_EINT                   0x2000  /* FIFOS_ERR_EINT */
+#define WM8962_FIFOS_ERR_EINT_MASK              0x2000  /* FIFOS_ERR_EINT */
+#define WM8962_FIFOS_ERR_EINT_SHIFT                 13  /* FIFOS_ERR_EINT */
+#define WM8962_FIFOS_ERR_EINT_WIDTH                  1  /* FIFOS_ERR_EINT */
+#define WM8962_ALC_LOCK_EINT                    0x1000  /* ALC_LOCK_EINT */
+#define WM8962_ALC_LOCK_EINT_MASK               0x1000  /* ALC_LOCK_EINT */
+#define WM8962_ALC_LOCK_EINT_SHIFT                  12  /* ALC_LOCK_EINT */
+#define WM8962_ALC_LOCK_EINT_WIDTH                   1  /* ALC_LOCK_EINT */
+#define WM8962_ALC_THRESH_EINT                  0x0800  /* ALC_THRESH_EINT */
+#define WM8962_ALC_THRESH_EINT_MASK             0x0800  /* ALC_THRESH_EINT */
+#define WM8962_ALC_THRESH_EINT_SHIFT                11  /* ALC_THRESH_EINT */
+#define WM8962_ALC_THRESH_EINT_WIDTH                 1  /* ALC_THRESH_EINT */
+#define WM8962_ALC_SAT_EINT                     0x0400  /* ALC_SAT_EINT */
+#define WM8962_ALC_SAT_EINT_MASK                0x0400  /* ALC_SAT_EINT */
+#define WM8962_ALC_SAT_EINT_SHIFT                   10  /* ALC_SAT_EINT */
+#define WM8962_ALC_SAT_EINT_WIDTH                    1  /* ALC_SAT_EINT */
+#define WM8962_ALC_PKOVR_EINT                   0x0200  /* ALC_PKOVR_EINT */
+#define WM8962_ALC_PKOVR_EINT_MASK              0x0200  /* ALC_PKOVR_EINT */
+#define WM8962_ALC_PKOVR_EINT_SHIFT                  9  /* ALC_PKOVR_EINT */
+#define WM8962_ALC_PKOVR_EINT_WIDTH                  1  /* ALC_PKOVR_EINT */
+#define WM8962_ALC_NGATE_EINT                   0x0100  /* ALC_NGATE_EINT */
+#define WM8962_ALC_NGATE_EINT_MASK              0x0100  /* ALC_NGATE_EINT */
+#define WM8962_ALC_NGATE_EINT_SHIFT                  8  /* ALC_NGATE_EINT */
+#define WM8962_ALC_NGATE_EINT_WIDTH                  1  /* ALC_NGATE_EINT */
+#define WM8962_WSEQ_DONE_EINT                   0x0080  /* WSEQ_DONE_EINT */
+#define WM8962_WSEQ_DONE_EINT_MASK              0x0080  /* WSEQ_DONE_EINT */
+#define WM8962_WSEQ_DONE_EINT_SHIFT                  7  /* WSEQ_DONE_EINT */
+#define WM8962_WSEQ_DONE_EINT_WIDTH                  1  /* WSEQ_DONE_EINT */
+#define WM8962_DRC_ACTDET_EINT                  0x0040  /* DRC_ACTDET_EINT */
+#define WM8962_DRC_ACTDET_EINT_MASK             0x0040  /* DRC_ACTDET_EINT */
+#define WM8962_DRC_ACTDET_EINT_SHIFT                 6  /* DRC_ACTDET_EINT */
+#define WM8962_DRC_ACTDET_EINT_WIDTH                 1  /* DRC_ACTDET_EINT */
+#define WM8962_FLL_LOCK_EINT                    0x0020  /* FLL_LOCK_EINT */
+#define WM8962_FLL_LOCK_EINT_MASK               0x0020  /* FLL_LOCK_EINT */
+#define WM8962_FLL_LOCK_EINT_SHIFT                   5  /* FLL_LOCK_EINT */
+#define WM8962_FLL_LOCK_EINT_WIDTH                   1  /* FLL_LOCK_EINT */
+#define WM8962_PLL3_LOCK_EINT                   0x0008  /* PLL3_LOCK_EINT */
+#define WM8962_PLL3_LOCK_EINT_MASK              0x0008  /* PLL3_LOCK_EINT */
+#define WM8962_PLL3_LOCK_EINT_SHIFT                  3  /* PLL3_LOCK_EINT */
+#define WM8962_PLL3_LOCK_EINT_WIDTH                  1  /* PLL3_LOCK_EINT */
+#define WM8962_PLL2_LOCK_EINT                   0x0004  /* PLL2_LOCK_EINT */
+#define WM8962_PLL2_LOCK_EINT_MASK              0x0004  /* PLL2_LOCK_EINT */
+#define WM8962_PLL2_LOCK_EINT_SHIFT                  2  /* PLL2_LOCK_EINT */
+#define WM8962_PLL2_LOCK_EINT_WIDTH                  1  /* PLL2_LOCK_EINT */
+#define WM8962_TEMP_SHUT_EINT                   0x0001  /* TEMP_SHUT_EINT */
+#define WM8962_TEMP_SHUT_EINT_MASK              0x0001  /* TEMP_SHUT_EINT */
+#define WM8962_TEMP_SHUT_EINT_SHIFT                  0  /* TEMP_SHUT_EINT */
+#define WM8962_TEMP_SHUT_EINT_WIDTH                  1  /* TEMP_SHUT_EINT */
+
+/*
+ * R568 (0x238) - Interrupt Status 1 Mask
+ */
+#define WM8962_IM_GP6_EINT                      0x0020  /* IM_GP6_EINT */
+#define WM8962_IM_GP6_EINT_MASK                 0x0020  /* IM_GP6_EINT */
+#define WM8962_IM_GP6_EINT_SHIFT                     5  /* IM_GP6_EINT */
+#define WM8962_IM_GP6_EINT_WIDTH                     1  /* IM_GP6_EINT */
+#define WM8962_IM_GP5_EINT                      0x0010  /* IM_GP5_EINT */
+#define WM8962_IM_GP5_EINT_MASK                 0x0010  /* IM_GP5_EINT */
+#define WM8962_IM_GP5_EINT_SHIFT                     4  /* IM_GP5_EINT */
+#define WM8962_IM_GP5_EINT_WIDTH                     1  /* IM_GP5_EINT */
+
+/*
+ * R569 (0x239) - Interrupt Status 2 Mask
+ */
+#define WM8962_IM_MICSCD_EINT                   0x8000  /* IM_MICSCD_EINT */
+#define WM8962_IM_MICSCD_EINT_MASK              0x8000  /* IM_MICSCD_EINT */
+#define WM8962_IM_MICSCD_EINT_SHIFT                 15  /* IM_MICSCD_EINT */
+#define WM8962_IM_MICSCD_EINT_WIDTH                  1  /* IM_MICSCD_EINT */
+#define WM8962_IM_MICD_EINT                     0x4000  /* IM_MICD_EINT */
+#define WM8962_IM_MICD_EINT_MASK                0x4000  /* IM_MICD_EINT */
+#define WM8962_IM_MICD_EINT_SHIFT                   14  /* IM_MICD_EINT */
+#define WM8962_IM_MICD_EINT_WIDTH                    1  /* IM_MICD_EINT */
+#define WM8962_IM_FIFOS_ERR_EINT                0x2000  /* IM_FIFOS_ERR_EINT */
+#define WM8962_IM_FIFOS_ERR_EINT_MASK           0x2000  /* IM_FIFOS_ERR_EINT */
+#define WM8962_IM_FIFOS_ERR_EINT_SHIFT              13  /* IM_FIFOS_ERR_EINT */
+#define WM8962_IM_FIFOS_ERR_EINT_WIDTH               1  /* IM_FIFOS_ERR_EINT */
+#define WM8962_IM_ALC_LOCK_EINT                 0x1000  /* IM_ALC_LOCK_EINT */
+#define WM8962_IM_ALC_LOCK_EINT_MASK            0x1000  /* IM_ALC_LOCK_EINT */
+#define WM8962_IM_ALC_LOCK_EINT_SHIFT               12  /* IM_ALC_LOCK_EINT */
+#define WM8962_IM_ALC_LOCK_EINT_WIDTH                1  /* IM_ALC_LOCK_EINT */
+#define WM8962_IM_ALC_THRESH_EINT               0x0800  /* IM_ALC_THRESH_EINT */
+#define WM8962_IM_ALC_THRESH_EINT_MASK          0x0800  /* IM_ALC_THRESH_EINT */
+#define WM8962_IM_ALC_THRESH_EINT_SHIFT             11  /* IM_ALC_THRESH_EINT */
+#define WM8962_IM_ALC_THRESH_EINT_WIDTH              1  /* IM_ALC_THRESH_EINT */
+#define WM8962_IM_ALC_SAT_EINT                  0x0400  /* IM_ALC_SAT_EINT */
+#define WM8962_IM_ALC_SAT_EINT_MASK             0x0400  /* IM_ALC_SAT_EINT */
+#define WM8962_IM_ALC_SAT_EINT_SHIFT                10  /* IM_ALC_SAT_EINT */
+#define WM8962_IM_ALC_SAT_EINT_WIDTH                 1  /* IM_ALC_SAT_EINT */
+#define WM8962_IM_ALC_PKOVR_EINT                0x0200  /* IM_ALC_PKOVR_EINT */
+#define WM8962_IM_ALC_PKOVR_EINT_MASK           0x0200  /* IM_ALC_PKOVR_EINT */
+#define WM8962_IM_ALC_PKOVR_EINT_SHIFT               9  /* IM_ALC_PKOVR_EINT */
+#define WM8962_IM_ALC_PKOVR_EINT_WIDTH               1  /* IM_ALC_PKOVR_EINT */
+#define WM8962_IM_ALC_NGATE_EINT                0x0100  /* IM_ALC_NGATE_EINT */
+#define WM8962_IM_ALC_NGATE_EINT_MASK           0x0100  /* IM_ALC_NGATE_EINT */
+#define WM8962_IM_ALC_NGATE_EINT_SHIFT               8  /* IM_ALC_NGATE_EINT */
+#define WM8962_IM_ALC_NGATE_EINT_WIDTH               1  /* IM_ALC_NGATE_EINT */
+#define WM8962_IM_WSEQ_DONE_EINT                0x0080  /* IM_WSEQ_DONE_EINT */
+#define WM8962_IM_WSEQ_DONE_EINT_MASK           0x0080  /* IM_WSEQ_DONE_EINT */
+#define WM8962_IM_WSEQ_DONE_EINT_SHIFT               7  /* IM_WSEQ_DONE_EINT */
+#define WM8962_IM_WSEQ_DONE_EINT_WIDTH               1  /* IM_WSEQ_DONE_EINT */
+#define WM8962_IM_DRC_ACTDET_EINT               0x0040  /* IM_DRC_ACTDET_EINT */
+#define WM8962_IM_DRC_ACTDET_EINT_MASK          0x0040  /* IM_DRC_ACTDET_EINT */
+#define WM8962_IM_DRC_ACTDET_EINT_SHIFT              6  /* IM_DRC_ACTDET_EINT */
+#define WM8962_IM_DRC_ACTDET_EINT_WIDTH              1  /* IM_DRC_ACTDET_EINT */
+#define WM8962_IM_FLL_LOCK_EINT                 0x0020  /* IM_FLL_LOCK_EINT */
+#define WM8962_IM_FLL_LOCK_EINT_MASK            0x0020  /* IM_FLL_LOCK_EINT */
+#define WM8962_IM_FLL_LOCK_EINT_SHIFT                5  /* IM_FLL_LOCK_EINT */
+#define WM8962_IM_FLL_LOCK_EINT_WIDTH                1  /* IM_FLL_LOCK_EINT */
+#define WM8962_IM_PLL3_LOCK_EINT                0x0008  /* IM_PLL3_LOCK_EINT */
+#define WM8962_IM_PLL3_LOCK_EINT_MASK           0x0008  /* IM_PLL3_LOCK_EINT */
+#define WM8962_IM_PLL3_LOCK_EINT_SHIFT               3  /* IM_PLL3_LOCK_EINT */
+#define WM8962_IM_PLL3_LOCK_EINT_WIDTH               1  /* IM_PLL3_LOCK_EINT */
+#define WM8962_IM_PLL2_LOCK_EINT                0x0004  /* IM_PLL2_LOCK_EINT */
+#define WM8962_IM_PLL2_LOCK_EINT_MASK           0x0004  /* IM_PLL2_LOCK_EINT */
+#define WM8962_IM_PLL2_LOCK_EINT_SHIFT               2  /* IM_PLL2_LOCK_EINT */
+#define WM8962_IM_PLL2_LOCK_EINT_WIDTH               1  /* IM_PLL2_LOCK_EINT */
+#define WM8962_IM_TEMP_SHUT_EINT                0x0001  /* IM_TEMP_SHUT_EINT */
+#define WM8962_IM_TEMP_SHUT_EINT_MASK           0x0001  /* IM_TEMP_SHUT_EINT */
+#define WM8962_IM_TEMP_SHUT_EINT_SHIFT               0  /* IM_TEMP_SHUT_EINT */
+#define WM8962_IM_TEMP_SHUT_EINT_WIDTH               1  /* IM_TEMP_SHUT_EINT */
+
+/*
+ * R576 (0x240) - Interrupt Control
+ */
+#define WM8962_IRQ_POL                          0x0001  /* IRQ_POL */
+#define WM8962_IRQ_POL_MASK                     0x0001  /* IRQ_POL */
+#define WM8962_IRQ_POL_SHIFT                         0  /* IRQ_POL */
+#define WM8962_IRQ_POL_WIDTH                         1  /* IRQ_POL */
+
+/*
+ * R584 (0x248) - IRQ Debounce
+ */
+#define WM8962_FLL_LOCK_DB                      0x0020  /* FLL_LOCK_DB */
+#define WM8962_FLL_LOCK_DB_MASK                 0x0020  /* FLL_LOCK_DB */
+#define WM8962_FLL_LOCK_DB_SHIFT                     5  /* FLL_LOCK_DB */
+#define WM8962_FLL_LOCK_DB_WIDTH                     1  /* FLL_LOCK_DB */
+#define WM8962_PLL3_LOCK_DB                     0x0008  /* PLL3_LOCK_DB */
+#define WM8962_PLL3_LOCK_DB_MASK                0x0008  /* PLL3_LOCK_DB */
+#define WM8962_PLL3_LOCK_DB_SHIFT                    3  /* PLL3_LOCK_DB */
+#define WM8962_PLL3_LOCK_DB_WIDTH                    1  /* PLL3_LOCK_DB */
+#define WM8962_PLL2_LOCK_DB                     0x0004  /* PLL2_LOCK_DB */
+#define WM8962_PLL2_LOCK_DB_MASK                0x0004  /* PLL2_LOCK_DB */
+#define WM8962_PLL2_LOCK_DB_SHIFT                    2  /* PLL2_LOCK_DB */
+#define WM8962_PLL2_LOCK_DB_WIDTH                    1  /* PLL2_LOCK_DB */
+#define WM8962_TEMP_SHUT_DB                     0x0001  /* TEMP_SHUT_DB */
+#define WM8962_TEMP_SHUT_DB_MASK                0x0001  /* TEMP_SHUT_DB */
+#define WM8962_TEMP_SHUT_DB_SHIFT                    0  /* TEMP_SHUT_DB */
+#define WM8962_TEMP_SHUT_DB_WIDTH                    1  /* TEMP_SHUT_DB */
+
+/*
+ * R586 (0x24A) -  MICINT Source Pol
+ */
+#define WM8962_MICSCD_IRQ_POL                   0x8000  /* MICSCD_IRQ_POL */
+#define WM8962_MICSCD_IRQ_POL_MASK              0x8000  /* MICSCD_IRQ_POL */
+#define WM8962_MICSCD_IRQ_POL_SHIFT                 15  /* MICSCD_IRQ_POL */
+#define WM8962_MICSCD_IRQ_POL_WIDTH                  1  /* MICSCD_IRQ_POL */
+#define WM8962_MICD_IRQ_POL                     0x4000  /* MICD_IRQ_POL */
+#define WM8962_MICD_IRQ_POL_MASK                0x4000  /* MICD_IRQ_POL */
+#define WM8962_MICD_IRQ_POL_SHIFT                   14  /* MICD_IRQ_POL */
+#define WM8962_MICD_IRQ_POL_WIDTH                    1  /* MICD_IRQ_POL */
+
+/*
+ * R768 (0x300) - DSP2 Power Management
+ */
+#define WM8962_DSP2_ENA                         0x0001  /* DSP2_ENA */
+#define WM8962_DSP2_ENA_MASK                    0x0001  /* DSP2_ENA */
+#define WM8962_DSP2_ENA_SHIFT                        0  /* DSP2_ENA */
+#define WM8962_DSP2_ENA_WIDTH                        1  /* DSP2_ENA */
+
+/*
+ * R1037 (0x40D) - DSP2_ExecControl
+ */
+#define WM8962_DSP2_STOPC                       0x0020  /* DSP2_STOPC */
+#define WM8962_DSP2_STOPC_MASK                  0x0020  /* DSP2_STOPC */
+#define WM8962_DSP2_STOPC_SHIFT                      5  /* DSP2_STOPC */
+#define WM8962_DSP2_STOPC_WIDTH                      1  /* DSP2_STOPC */
+#define WM8962_DSP2_STOPS                       0x0010  /* DSP2_STOPS */
+#define WM8962_DSP2_STOPS_MASK                  0x0010  /* DSP2_STOPS */
+#define WM8962_DSP2_STOPS_SHIFT                      4  /* DSP2_STOPS */
+#define WM8962_DSP2_STOPS_WIDTH                      1  /* DSP2_STOPS */
+#define WM8962_DSP2_STOPI                       0x0008  /* DSP2_STOPI */
+#define WM8962_DSP2_STOPI_MASK                  0x0008  /* DSP2_STOPI */
+#define WM8962_DSP2_STOPI_SHIFT                      3  /* DSP2_STOPI */
+#define WM8962_DSP2_STOPI_WIDTH                      1  /* DSP2_STOPI */
+#define WM8962_DSP2_STOP                        0x0004  /* DSP2_STOP */
+#define WM8962_DSP2_STOP_MASK                   0x0004  /* DSP2_STOP */
+#define WM8962_DSP2_STOP_SHIFT                       2  /* DSP2_STOP */
+#define WM8962_DSP2_STOP_WIDTH                       1  /* DSP2_STOP */
+#define WM8962_DSP2_RUNR                        0x0002  /* DSP2_RUNR */
+#define WM8962_DSP2_RUNR_MASK                   0x0002  /* DSP2_RUNR */
+#define WM8962_DSP2_RUNR_SHIFT                       1  /* DSP2_RUNR */
+#define WM8962_DSP2_RUNR_WIDTH                       1  /* DSP2_RUNR */
+#define WM8962_DSP2_RUN                         0x0001  /* DSP2_RUN */
+#define WM8962_DSP2_RUN_MASK                    0x0001  /* DSP2_RUN */
+#define WM8962_DSP2_RUN_SHIFT                        0  /* DSP2_RUN */
+#define WM8962_DSP2_RUN_WIDTH                        1  /* DSP2_RUN */
+
+/*
+ * R8192 (0x2000) - DSP2 Instruction RAM 0
+ */
+#define WM8962_DSP2_INSTR_RAM_1024_10_9_0_MASK  0x03FF  /* DSP2_INSTR_RAM_1024_10_9_0 - [9:0] */
+#define WM8962_DSP2_INSTR_RAM_1024_10_9_0_SHIFT      0  /* DSP2_INSTR_RAM_1024_10_9_0 - [9:0] */
+#define WM8962_DSP2_INSTR_RAM_1024_10_9_0_WIDTH     10  /* DSP2_INSTR_RAM_1024_10_9_0 - [9:0] */
+
+/*
+ * R9216 (0x2400) - DSP2 Address RAM 2
+ */
+#define WM8962_DSP2_ADDR_RAM_1024_38_37_32_MASK 0x003F  /* DSP2_ADDR_RAM_1024_38_37_32 - [5:0] */
+#define WM8962_DSP2_ADDR_RAM_1024_38_37_32_SHIFT      0  /* DSP2_ADDR_RAM_1024_38_37_32 - [5:0] */
+#define WM8962_DSP2_ADDR_RAM_1024_38_37_32_WIDTH      6  /* DSP2_ADDR_RAM_1024_38_37_32 - [5:0] */
+
+/*
+ * R9217 (0x2401) - DSP2 Address RAM 1
+ */
+#define WM8962_DSP2_ADDR_RAM_1024_38_31_16_MASK 0xFFFF  /* DSP2_ADDR_RAM_1024_38_31_16 - [15:0] */
+#define WM8962_DSP2_ADDR_RAM_1024_38_31_16_SHIFT      0  /* DSP2_ADDR_RAM_1024_38_31_16 - [15:0] */
+#define WM8962_DSP2_ADDR_RAM_1024_38_31_16_WIDTH     16  /* DSP2_ADDR_RAM_1024_38_31_16 - [15:0] */
+
+/*
+ * R9218 (0x2402) - DSP2 Address RAM 0
+ */
+#define WM8962_DSP2_ADDR_RAM_1024_38_15_0_MASK  0xFFFF  /* DSP2_ADDR_RAM_1024_38_15_0 - [15:0] */
+#define WM8962_DSP2_ADDR_RAM_1024_38_15_0_SHIFT      0  /* DSP2_ADDR_RAM_1024_38_15_0 - [15:0] */
+#define WM8962_DSP2_ADDR_RAM_1024_38_15_0_WIDTH     16  /* DSP2_ADDR_RAM_1024_38_15_0 - [15:0] */
+
+/*
+ * R12288 (0x3000) - DSP2 Data1 RAM 1
+ */
+#define WM8962_DSP2_DATA1_RAM_384_24_23_16_MASK 0x00FF  /* DSP2_DATA1_RAM_384_24_23_16 - [7:0] */
+#define WM8962_DSP2_DATA1_RAM_384_24_23_16_SHIFT      0  /* DSP2_DATA1_RAM_384_24_23_16 - [7:0] */
+#define WM8962_DSP2_DATA1_RAM_384_24_23_16_WIDTH      8  /* DSP2_DATA1_RAM_384_24_23_16 - [7:0] */
+
+/*
+ * R12289 (0x3001) - DSP2 Data1 RAM 0
+ */
+#define WM8962_DSP2_DATA1_RAM_384_24_15_0_MASK  0xFFFF  /* DSP2_DATA1_RAM_384_24_15_0 - [15:0] */
+#define WM8962_DSP2_DATA1_RAM_384_24_15_0_SHIFT      0  /* DSP2_DATA1_RAM_384_24_15_0 - [15:0] */
+#define WM8962_DSP2_DATA1_RAM_384_24_15_0_WIDTH     16  /* DSP2_DATA1_RAM_384_24_15_0 - [15:0] */
+
+/*
+ * R13312 (0x3400) - DSP2 Data2 RAM 1
+ */
+#define WM8962_DSP2_DATA2_RAM_384_24_23_16_MASK 0x00FF  /* DSP2_DATA2_RAM_384_24_23_16 - [7:0] */
+#define WM8962_DSP2_DATA2_RAM_384_24_23_16_SHIFT      0  /* DSP2_DATA2_RAM_384_24_23_16 - [7:0] */
+#define WM8962_DSP2_DATA2_RAM_384_24_23_16_WIDTH      8  /* DSP2_DATA2_RAM_384_24_23_16 - [7:0] */
+
+/*
+ * R13313 (0x3401) - DSP2 Data2 RAM 0
+ */
+#define WM8962_DSP2_DATA2_RAM_384_24_15_0_MASK  0xFFFF  /* DSP2_DATA2_RAM_384_24_15_0 - [15:0] */
+#define WM8962_DSP2_DATA2_RAM_384_24_15_0_SHIFT      0  /* DSP2_DATA2_RAM_384_24_15_0 - [15:0] */
+#define WM8962_DSP2_DATA2_RAM_384_24_15_0_WIDTH     16  /* DSP2_DATA2_RAM_384_24_15_0 - [15:0] */
+
+/*
+ * R14336 (0x3800) - DSP2 Data3 RAM 1
+ */
+#define WM8962_DSP2_DATA3_RAM_384_24_23_16_MASK 0x00FF  /* DSP2_DATA3_RAM_384_24_23_16 - [7:0] */
+#define WM8962_DSP2_DATA3_RAM_384_24_23_16_SHIFT      0  /* DSP2_DATA3_RAM_384_24_23_16 - [7:0] */
+#define WM8962_DSP2_DATA3_RAM_384_24_23_16_WIDTH      8  /* DSP2_DATA3_RAM_384_24_23_16 - [7:0] */
+
+/*
+ * R14337 (0x3801) - DSP2 Data3 RAM 0
+ */
+#define WM8962_DSP2_DATA3_RAM_384_24_15_0_MASK  0xFFFF  /* DSP2_DATA3_RAM_384_24_15_0 - [15:0] */
+#define WM8962_DSP2_DATA3_RAM_384_24_15_0_SHIFT      0  /* DSP2_DATA3_RAM_384_24_15_0 - [15:0] */
+#define WM8962_DSP2_DATA3_RAM_384_24_15_0_WIDTH     16  /* DSP2_DATA3_RAM_384_24_15_0 - [15:0] */
+
+/*
+ * R15360 (0x3C00) - DSP2 Coeff RAM 0
+ */
+#define WM8962_DSP2_CMAP_RAM_384_11_10_0_MASK   0x07FF  /* DSP2_CMAP_RAM_384_11_10_0 - [10:0] */
+#define WM8962_DSP2_CMAP_RAM_384_11_10_0_SHIFT       0  /* DSP2_CMAP_RAM_384_11_10_0 - [10:0] */
+#define WM8962_DSP2_CMAP_RAM_384_11_10_0_WIDTH      11  /* DSP2_CMAP_RAM_384_11_10_0 - [10:0] */
+
+/*
+ * R16384 (0x4000) - RETUNEADC_SHARED_COEFF_1
+ */
+#define WM8962_ADC_RETUNE_SCV                   0x0080  /* ADC_RETUNE_SCV */
+#define WM8962_ADC_RETUNE_SCV_MASK              0x0080  /* ADC_RETUNE_SCV */
+#define WM8962_ADC_RETUNE_SCV_SHIFT                  7  /* ADC_RETUNE_SCV */
+#define WM8962_ADC_RETUNE_SCV_WIDTH                  1  /* ADC_RETUNE_SCV */
+#define WM8962_RETUNEADC_SHARED_COEFF_22_16_MASK 0x007F  /* RETUNEADC_SHARED_COEFF_22_16 - [6:0] */
+#define WM8962_RETUNEADC_SHARED_COEFF_22_16_SHIFT      0  /* RETUNEADC_SHARED_COEFF_22_16 - [6:0] */
+#define WM8962_RETUNEADC_SHARED_COEFF_22_16_WIDTH      7  /* RETUNEADC_SHARED_COEFF_22_16 - [6:0] */
+
+/*
+ * R16385 (0x4001) - RETUNEADC_SHARED_COEFF_0
+ */
+#define WM8962_RETUNEADC_SHARED_COEFF_15_00_MASK 0xFFFF  /* RETUNEADC_SHARED_COEFF_15_00 - [15:0] */
+#define WM8962_RETUNEADC_SHARED_COEFF_15_00_SHIFT      0  /* RETUNEADC_SHARED_COEFF_15_00 - [15:0] */
+#define WM8962_RETUNEADC_SHARED_COEFF_15_00_WIDTH     16  /* RETUNEADC_SHARED_COEFF_15_00 - [15:0] */
+
+/*
+ * R16386 (0x4002) - RETUNEDAC_SHARED_COEFF_1
+ */
+#define WM8962_DAC_RETUNE_SCV                   0x0080  /* DAC_RETUNE_SCV */
+#define WM8962_DAC_RETUNE_SCV_MASK              0x0080  /* DAC_RETUNE_SCV */
+#define WM8962_DAC_RETUNE_SCV_SHIFT                  7  /* DAC_RETUNE_SCV */
+#define WM8962_DAC_RETUNE_SCV_WIDTH                  1  /* DAC_RETUNE_SCV */
+#define WM8962_RETUNEDAC_SHARED_COEFF_23_16_MASK 0x007F  /* RETUNEDAC_SHARED_COEFF_23_16 - [6:0] */
+#define WM8962_RETUNEDAC_SHARED_COEFF_23_16_SHIFT      0  /* RETUNEDAC_SHARED_COEFF_23_16 - [6:0] */
+#define WM8962_RETUNEDAC_SHARED_COEFF_23_16_WIDTH      7  /* RETUNEDAC_SHARED_COEFF_23_16 - [6:0] */
+
+/*
+ * R16387 (0x4003) - RETUNEDAC_SHARED_COEFF_0
+ */
+#define WM8962_RETUNEDAC_SHARED_COEFF_15_00_MASK 0xFFFF  /* RETUNEDAC_SHARED_COEFF_15_00 - [15:0] */
+#define WM8962_RETUNEDAC_SHARED_COEFF_15_00_SHIFT      0  /* RETUNEDAC_SHARED_COEFF_15_00 - [15:0] */
+#define WM8962_RETUNEDAC_SHARED_COEFF_15_00_WIDTH     16  /* RETUNEDAC_SHARED_COEFF_15_00 - [15:0] */
+
+/*
+ * R16388 (0x4004) - SOUNDSTAGE_ENABLES_1
+ */
+#define WM8962_SOUNDSTAGE_ENABLES_23_16_MASK    0x00FF  /* SOUNDSTAGE_ENABLES_23_16 - [7:0] */
+#define WM8962_SOUNDSTAGE_ENABLES_23_16_SHIFT        0  /* SOUNDSTAGE_ENABLES_23_16 - [7:0] */
+#define WM8962_SOUNDSTAGE_ENABLES_23_16_WIDTH        8  /* SOUNDSTAGE_ENABLES_23_16 - [7:0] */
+
+/*
+ * R16389 (0x4005) - SOUNDSTAGE_ENABLES_0
+ */
+#define WM8962_SOUNDSTAGE_ENABLES_15_06_MASK    0xFFC0  /* SOUNDSTAGE_ENABLES_15_06 - [15:6] */
+#define WM8962_SOUNDSTAGE_ENABLES_15_06_SHIFT        6  /* SOUNDSTAGE_ENABLES_15_06 - [15:6] */
+#define WM8962_SOUNDSTAGE_ENABLES_15_06_WIDTH       10  /* SOUNDSTAGE_ENABLES_15_06 - [15:6] */
+#define WM8962_RTN_ADC_ENA                      0x0020  /* RTN_ADC_ENA */
+#define WM8962_RTN_ADC_ENA_MASK                 0x0020  /* RTN_ADC_ENA */
+#define WM8962_RTN_ADC_ENA_SHIFT                     5  /* RTN_ADC_ENA */
+#define WM8962_RTN_ADC_ENA_WIDTH                     1  /* RTN_ADC_ENA */
+#define WM8962_RTN_DAC_ENA                      0x0010  /* RTN_DAC_ENA */
+#define WM8962_RTN_DAC_ENA_MASK                 0x0010  /* RTN_DAC_ENA */
+#define WM8962_RTN_DAC_ENA_SHIFT                     4  /* RTN_DAC_ENA */
+#define WM8962_RTN_DAC_ENA_WIDTH                     1  /* RTN_DAC_ENA */
+#define WM8962_HDBASS_ENA                       0x0008  /* HDBASS_ENA */
+#define WM8962_HDBASS_ENA_MASK                  0x0008  /* HDBASS_ENA */
+#define WM8962_HDBASS_ENA_SHIFT                      3  /* HDBASS_ENA */
+#define WM8962_HDBASS_ENA_WIDTH                      1  /* HDBASS_ENA */
+#define WM8962_HPF2_ENA                         0x0004  /* HPF2_ENA */
+#define WM8962_HPF2_ENA_MASK                    0x0004  /* HPF2_ENA */
+#define WM8962_HPF2_ENA_SHIFT                        2  /* HPF2_ENA */
+#define WM8962_HPF2_ENA_WIDTH                        1  /* HPF2_ENA */
+#define WM8962_HPF1_ENA                         0x0002  /* HPF1_ENA */
+#define WM8962_HPF1_ENA_MASK                    0x0002  /* HPF1_ENA */
+#define WM8962_HPF1_ENA_SHIFT                        1  /* HPF1_ENA */
+#define WM8962_HPF1_ENA_WIDTH                        1  /* HPF1_ENA */
+#define WM8962_VSS_ENA                          0x0001  /* VSS_ENA */
+#define WM8962_VSS_ENA_MASK                     0x0001  /* VSS_ENA */
+#define WM8962_VSS_ENA_SHIFT                         0  /* VSS_ENA */
+#define WM8962_VSS_ENA_WIDTH                         1  /* VSS_ENA */
+
+extern const u16 wm8962_reg[WM8962_MAX_REGISTER + 1];
+
+struct wm8962_reg_access {
+       u16 read;
+       u16 write;
+       u16 vol;
+};
+
+extern
+const struct wm8962_reg_access wm8962_reg_access[WM8962_MAX_REGISTER + 1];
+
+#endif
index a99620f335d2ab7fe7ace8dc37a5e1b6b637c61e..63f6dbf5d07021887084e57541591bf1fa570fb3 100644 (file)
 
 #include "wm8971.h"
 
-#define WM8971_VERSION "0.9"
-
 #define        WM8971_REG_COUNT                43
 
 static struct workqueue_struct *wm8971_workq = NULL;
 
 /* codec private data */
 struct wm8971_priv {
+       enum snd_soc_control_type control_type;
        unsigned int sysclk;
 };
 
@@ -492,8 +491,7 @@ static int wm8971_pcm_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8971_priv *wm8971 = snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8971_IFACE) & 0x1f3;
        u16 srate = snd_soc_read(codec, WM8971_SRATE) & 0x1c0;
@@ -573,8 +571,8 @@ static struct snd_soc_dai_ops wm8971_dai_ops = {
        .set_sysclk     = wm8971_set_dai_sysclk,
 };
 
-struct snd_soc_dai wm8971_dai = {
-       .name = "WM8971",
+static struct snd_soc_dai_driver wm8971_dai = {
+       .name = "wm8971-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -589,7 +587,6 @@ struct snd_soc_dai wm8971_dai = {
                .formats = WM8971_FORMATS,},
        .ops = &wm8971_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8971_dai);
 
 static void wm8971_work(struct work_struct *work)
 {
@@ -598,19 +595,14 @@ static void wm8971_work(struct work_struct *work)
        wm8971_set_bias_level(codec, codec->bias_level);
 }
 
-static int wm8971_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8971_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8971_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8971_resume(struct platform_device *pdev)
+static int wm8971_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -639,37 +631,24 @@ static int wm8971_resume(struct platform_device *pdev)
        return 0;
 }
 
-static int wm8971_init(struct snd_soc_device *socdev,
-                      enum snd_soc_control_type control)
+static int wm8971_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-       int reg, ret = 0;
-
-       codec->name = "WM8971";
-       codec->owner = THIS_MODULE;
-       codec->set_bias_level = wm8971_set_bias_level;
-       codec->dai = &wm8971_dai;
-       codec->reg_cache_size = ARRAY_SIZE(wm8971_reg);
-       codec->num_dai = 1;
-       codec->reg_cache = kmemdup(wm8971_reg, sizeof(wm8971_reg), GFP_KERNEL);
-
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
+       struct wm8971_priv *wm8971 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0;
+       u16 reg;
 
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8971->control_type);
        if (ret < 0) {
                printk(KERN_ERR "wm8971: failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
-       wm8971_reset(codec);
+       INIT_DELAYED_WORK(&codec->delayed_work, wm8971_work);
+       wm8971_workq = create_workqueue("wm8971");
+       if (wm8971_workq == NULL)
+               return -ENOMEM;
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8971: failed to create pcms\n");
-               goto err;
-       }
+       wm8971_reset(codec);
 
        /* charge output caps - set vmid to 5k for quick power up */
        reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e;
@@ -704,40 +683,54 @@ static int wm8971_init(struct snd_soc_device *socdev,
        wm8971_add_widgets(codec);
 
        return ret;
-
-err:
-       kfree(codec->reg_cache);
-       return ret;
 }
 
-/* If the i2c layer weren't so broken, we could pass this kind of data
-   around */
-static struct snd_soc_device *wm8971_socdev;
 
-#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
+/* power down chip */
+static int wm8971_remove(struct snd_soc_codec *codec)
+{
+       wm8971_set_bias_level(codec, SND_SOC_BIAS_OFF);
+
+       if (wm8971_workq)
+               destroy_workqueue(wm8971_workq);
+       return 0;
+}
 
-static int wm8971_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static struct snd_soc_codec_driver soc_codec_dev_wm8971 = {
+       .probe =        wm8971_probe,
+       .remove =       wm8971_remove,
+       .suspend =      wm8971_suspend,
+       .resume =       wm8971_resume,
+       .set_bias_level = wm8971_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8971_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8971_reg,
+};
+
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8971_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = wm8971_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8971_priv *wm8971;
        int ret;
 
-       i2c_set_clientdata(i2c, codec);
+       wm8971 = kzalloc(sizeof(struct wm8971_priv), GFP_KERNEL);
+       if (wm8971 == NULL)
+               return -ENOMEM;
 
-       codec->control_data = i2c;
+       i2c_set_clientdata(i2c, wm8971);
 
-       ret = wm8971_init(socdev, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8971, &wm8971_dai, 1);
        if (ret < 0)
-               pr_err("failed to initialise WM8971\n");
-
+               kfree(wm8971);
        return ret;
 }
 
-static int wm8971_i2c_remove(struct i2c_client *client)
+static __devexit int wm8971_i2c_remove(struct i2c_client *client)
 {
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       kfree(codec->reg_cache);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -749,148 +742,34 @@ MODULE_DEVICE_TABLE(i2c, wm8971_i2c_id);
 
 static struct i2c_driver wm8971_i2c_driver = {
        .driver = {
-               .name = "WM8971 I2C Codec",
+               .name = "wm8971-codec",
                .owner = THIS_MODULE,
        },
-       .probe    = wm8971_i2c_probe,
-       .remove   = wm8971_i2c_remove,
+       .probe =    wm8971_i2c_probe,
+       .remove =   __devexit_p(wm8971_i2c_remove),
        .id_table = wm8971_i2c_id,
 };
-
-static int wm8971_add_i2c_device(struct platform_device *pdev,
-                                const struct wm8971_setup_data *setup)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-       int ret;
-
-       ret = i2c_add_driver(&wm8971_i2c_driver);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "can't add i2c driver\n");
-               return ret;
-       }
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = setup->i2c_address;
-       strlcpy(info.type, "wm8971", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(setup->i2c_bus);
-       if (!adapter) {
-               dev_err(&pdev->dev, "can't get i2c adapter %d\n",
-                       setup->i2c_bus);
-               goto err_driver;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               goto err_driver;
-       }
-
-       return 0;
-
-err_driver:
-       i2c_del_driver(&wm8971_i2c_driver);
-       return -ENODEV;
-}
-
 #endif
 
-static int wm8971_probe(struct platform_device *pdev)
+static int __init wm8971_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct wm8971_setup_data *setup;
-       struct snd_soc_codec *codec;
-       struct wm8971_priv *wm8971;
        int ret = 0;
-
-       pr_info("WM8971 Audio Codec %s", WM8971_VERSION);
-
-       setup = socdev->codec_data;
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-
-       wm8971 = kzalloc(sizeof(struct wm8971_priv), GFP_KERNEL);
-       if (wm8971 == NULL) {
-               kfree(codec);
-               return -ENOMEM;
-       }
-
-       snd_soc_codec_set_drvdata(codec, wm8971);
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-       wm8971_socdev = socdev;
-
-       INIT_DELAYED_WORK(&codec->delayed_work, wm8971_work);
-       wm8971_workq = create_workqueue("wm8971");
-       if (wm8971_workq == NULL) {
-               kfree(snd_soc_codec_get_drvdata(codec));
-               kfree(codec);
-               return -ENOMEM;
-       }
-
-#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-       if (setup->i2c_address) {
-               ret = wm8971_add_i2c_device(pdev, setup);
-       }
-#endif
-       /* Add other interfaces here */
-
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8971_i2c_driver);
        if (ret != 0) {
-               destroy_workqueue(wm8971_workq);
-               kfree(snd_soc_codec_get_drvdata(codec));
-               kfree(codec);
+               printk(KERN_ERR "Failed to register WM8971 I2C driver: %d\n",
+                      ret);
        }
-
-       return ret;
-}
-
-/* power down chip */
-static int wm8971_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               wm8971_set_bias_level(codec, SND_SOC_BIAS_OFF);
-       if (wm8971_workq)
-               destroy_workqueue(wm8971_workq);
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-       i2c_unregister_device(codec->control_data);
-       i2c_del_driver(&wm8971_i2c_driver);
 #endif
-       kfree(snd_soc_codec_get_drvdata(codec));
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8971 = {
-       .probe =        wm8971_probe,
-       .remove =       wm8971_remove,
-       .suspend =      wm8971_suspend,
-       .resume =       wm8971_resume,
-};
-
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8971);
-
-static int __init wm8971_modinit(void)
-{
-       return snd_soc_register_dai(&wm8971_dai);
+       return ret;
 }
 module_init(wm8971_modinit);
 
 static void __exit wm8971_exit(void)
 {
-       snd_soc_unregister_dai(&wm8971_dai);
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       i2c_del_driver(&wm8971_i2c_driver);
+#endif
 }
 module_exit(wm8971_exit);
 
index ef4f08f9f344b0a5b7146a4015a3686afebbab87..f31c38fddfc45eaedb118ed02279aed81aaa2775 100644 (file)
 
 #define WM8971_SYSCLK  0
 
-struct wm8971_setup_data {
-       int i2c_bus;
-       unsigned short i2c_address;
-};
-
-extern struct snd_soc_dai wm8971_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8971;
-
 #endif
index 1468fe10cbbe54d57ce5d072b5406261487d2bc8..e61728b7339fda9d1f64a367f4811f694d944256 100644 (file)
@@ -51,12 +51,10 @@ static const u16 wm8974_reg[WM8974_CACHEREGNUM] = {
 #define WM8974_POWER1_BUFIOEN 0x04
 
 struct wm8974_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        u16 reg_cache[WM8974_CACHEREGNUM];
 };
 
-static struct snd_soc_codec *wm8974_codec;
-
 #define wm8974_reset(c)        snd_soc_write(c, WM8974_RESET, 0)
 
 static const char *wm8974_companding[] = {"Off", "NC", "u-law", "A-law" };
@@ -566,8 +564,8 @@ static struct snd_soc_dai_ops wm8974_ops = {
        .set_pll = wm8974_set_dai_pll,
 };
 
-struct snd_soc_dai wm8974_dai = {
-       .name = "WM8974 HiFi",
+static struct snd_soc_dai_driver wm8974_dai = {
+       .name = "wm8974-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -583,21 +581,15 @@ struct snd_soc_dai wm8974_dai = {
        .ops = &wm8974_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8974_dai);
 
-static int wm8974_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8974_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8974_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8974_resume(struct platform_device *pdev)
+static int wm8974_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -613,156 +605,73 @@ static int wm8974_resume(struct platform_device *pdev)
        return 0;
 }
 
-static int wm8974_probe(struct platform_device *pdev)
+static int wm8974_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
+       struct wm8974_priv *wm8974 = snd_soc_codec_get_drvdata(codec);
        int ret = 0;
 
-       if (wm8974_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, SND_SOC_I2C);
+       if (ret < 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
-       socdev->card->codec = wm8974_codec;
-       codec = wm8974_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       ret = wm8974_reset(codec);
        if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
+               dev_err(codec->dev, "Failed to issue reset\n");
+               return ret;
        }
 
+       wm8974_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
        snd_soc_add_controls(codec, wm8974_snd_controls,
                             ARRAY_SIZE(wm8974_snd_controls));
        wm8974_add_widgets(codec);
 
        return ret;
-
-pcm_err:
-       return ret;
 }
 
 /* power down chip */
-static int wm8974_remove(struct platform_device *pdev)
+static int wm8974_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
+       wm8974_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm8974 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm8974 = {
        .probe =        wm8974_probe,
        .remove =       wm8974_remove,
        .suspend =      wm8974_suspend,
        .resume =       wm8974_resume,
+       .set_bias_level = wm8974_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8974_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8974_reg,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8974);
-
-static __devinit int wm8974_register(struct wm8974_priv *wm8974)
-{
-       int ret;
-       struct snd_soc_codec *codec = &wm8974->codec;
-
-       if (wm8974_codec) {
-               dev_err(codec->dev, "Another WM8974 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8974);
-       codec->name = "WM8974";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8974_set_bias_level;
-       codec->dai = &wm8974_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8974_CACHEREGNUM;
-       codec->reg_cache = &wm8974->reg_cache;
-
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, SND_SOC_I2C);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
-       memcpy(codec->reg_cache, wm8974_reg, sizeof(wm8974_reg));
-
-       ret = wm8974_reset(codec);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
-       }
-
-       wm8974_dai.dev = codec->dev;
-
-       wm8974_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
-       wm8974_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm8974_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8974);
-       return ret;
-}
-
-static __devexit void wm8974_unregister(struct wm8974_priv *wm8974)
-{
-       wm8974_set_bias_level(&wm8974->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8974_dai);
-       snd_soc_unregister_codec(&wm8974->codec);
-       kfree(wm8974);
-       wm8974_codec = NULL;
-}
 
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8974_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm8974_priv *wm8974;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8974 = kzalloc(sizeof(struct wm8974_priv), GFP_KERNEL);
        if (wm8974 == NULL)
                return -ENOMEM;
 
-       codec = &wm8974->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(i2c, wm8974);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
 
-       return wm8974_register(wm8974);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8974, &wm8974_dai, 1);
+       if (ret < 0)
+               kfree(wm8974);
+       return ret;
 }
 
 static __devexit int wm8974_i2c_remove(struct i2c_client *client)
 {
-       struct wm8974_priv *wm8974 = i2c_get_clientdata(client);
-       wm8974_unregister(wm8974);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -774,23 +683,34 @@ MODULE_DEVICE_TABLE(i2c, wm8974_i2c_id);
 
 static struct i2c_driver wm8974_i2c_driver = {
        .driver = {
-               .name = "WM8974",
+               .name = "wm8974-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8974_i2c_probe,
        .remove =   __devexit_p(wm8974_i2c_remove),
        .id_table = wm8974_i2c_id,
 };
+#endif
 
 static int __init wm8974_modinit(void)
 {
-       return i2c_add_driver(&wm8974_i2c_driver);
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8974_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register wm8974 I2C driver: %d\n",
+                      ret);
+       }
+#endif
+       return ret;
 }
 module_init(wm8974_modinit);
 
 static void __exit wm8974_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8974_i2c_driver);
+#endif
 }
 module_exit(wm8974_exit);
 
index 896a7f0f3fc4b189e0537bb6f7765639e2957b65..3c94e7bb55a6b21e12170c736e95b75e8cf80b7a 100644 (file)
@@ -83,7 +83,4 @@
 #define WM8974_MCLKDIV_8       (6 << 5)
 #define WM8974_MCLKDIV_12      (7 << 5)
 
-extern struct snd_soc_dai wm8974_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8974;
-
 #endif
index 8a1ad778e7e345d42780fec7baccbb6e0f9b984e..676a4306cc87e29bfa978da4f40454fcbeb1419c 100644 (file)
@@ -31,8 +31,6 @@
 
 #include "wm8978.h"
 
-static struct snd_soc_codec *wm8978_codec;
-
 /* wm8978 register cache. Note that register 0 is not included in the cache. */
 static const u16 wm8978_reg[WM8978_CACHEREGNUM] = {
        0x0000, 0x0000, 0x0000, 0x0000, /* 0x00...0x03 */
@@ -54,7 +52,8 @@ static const u16 wm8978_reg[WM8978_CACHEREGNUM] = {
 
 /* codec private data */
 struct wm8978_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        unsigned int f_pllout;
        unsigned int f_mclk;
        unsigned int f_256fs;
@@ -374,8 +373,8 @@ struct wm8978_pll_div {
 
 #define FIXED_PLL_SIZE (1 << 24)
 
-static void pll_factors(struct wm8978_pll_div *pll_div, unsigned int target,
-                       unsigned int source)
+static void pll_factors(struct snd_soc_codec *codec,
+               struct wm8978_pll_div *pll_div, unsigned int target, unsigned int source)
 {
        u64 k_part;
        unsigned int k, n_div, n_mod;
@@ -390,7 +389,7 @@ static void pll_factors(struct wm8978_pll_div *pll_div, unsigned int target,
        }
 
        if (n_div < 6 || n_div > 12)
-               dev_warn(wm8978_codec->dev,
+               dev_warn(codec->dev,
                         "WM8978 N value exceeds recommended range! N = %u\n",
                         n_div);
 
@@ -505,7 +504,7 @@ static int wm8978_configure_pll(struct snd_soc_codec *codec)
        dev_dbg(codec->dev, "%s: f_MCLK=%uHz, f_PLLOUT=%uHz\n", __func__,
                wm8978->f_mclk, wm8978->f_pllout);
 
-       pll_factors(&pll_div, f2, wm8978->f_mclk);
+       pll_factors(codec, &pll_div, f2, wm8978->f_mclk);
 
        dev_dbg(codec->dev, "%s: calculated PLL N=0x%x, K=0x%x, div2=%d\n",
                __func__, pll_div.n, pll_div.k, pll_div.div2);
@@ -690,8 +689,7 @@ static int wm8978_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8978_priv *wm8978 = snd_soc_codec_get_drvdata(codec);
        /* Word length mask = 0x60 */
        u16 iface_ctl = snd_soc_read(codec, WM8978_AUDIO_INTERFACE) & ~0x60;
@@ -875,9 +873,8 @@ static struct snd_soc_dai_ops wm8978_dai_ops = {
 };
 
 /* Also supports 12kHz */
-struct snd_soc_dai wm8978_dai = {
-       .name = "WM8978 HiFi",
-       .id = 1,
+static struct snd_soc_dai_driver wm8978_dai = {
+       .name = "wm8978-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -894,13 +891,9 @@ struct snd_soc_dai wm8978_dai = {
        },
        .ops = &wm8978_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8978_dai);
 
-static int wm8978_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8978_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8978_set_bias_level(codec, SND_SOC_BIAS_OFF);
        /* Also switch PLL off */
        snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1, 0);
@@ -908,10 +901,8 @@ static int wm8978_suspend(struct platform_device *pdev, pm_message_t state)
        return 0;
 }
 
-static int wm8978_resume(struct platform_device *pdev)
+static int wm8978_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8978_priv *wm8978 = snd_soc_codec_get_drvdata(codec);
        int i;
        u16 *cache = codec->reg_cache;
@@ -933,54 +924,6 @@ static int wm8978_resume(struct platform_device *pdev)
        return 0;
 }
 
-static int wm8978_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8978_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8978_codec;
-       codec = wm8978_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8978_snd_controls,
-                            ARRAY_SIZE(wm8978_snd_controls));
-       wm8978_add_widgets(codec);
-
-pcm_err:
-       return ret;
-}
-
-/* power down chip */
-static int wm8978_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8978 = {
-       .probe          = wm8978_probe,
-       .remove         = wm8978_remove,
-       .suspend        = wm8978_suspend,
-       .resume         = wm8978_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8978);
-
 /*
  * These registers contain an "update" bit - bit 8. This means, for example,
  * that one can write new DAC digital volume for both channels, but only when
@@ -1000,44 +943,23 @@ static const int update_reg[] = {
        WM8978_ROUT2_SPK_CONTROL,
 };
 
-static __devinit int wm8978_register(struct wm8978_priv *wm8978)
+static int wm8978_probe(struct snd_soc_codec *codec)
 {
-       int ret, i;
-       struct snd_soc_codec *codec = &wm8978->codec;
-
-       if (wm8978_codec) {
-               dev_err(codec->dev, "Another WM8978 is registered\n");
-               return -EINVAL;
-       }
+       struct wm8978_priv *wm8978 = snd_soc_codec_get_drvdata(codec);
+       int ret = 0, i;
 
        /*
         * Set default system clock to PLL, it is more precise, this is also the
         * default hardware setting
         */
        wm8978->sysclk = WM8978_PLL;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8978);
-       codec->name = "WM8978";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8978_set_bias_level;
-       codec->dai = &wm8978_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = WM8978_CACHEREGNUM;
-       codec->reg_cache = &wm8978->reg_cache;
-
+       codec->control_data = wm8978->control_data;
        ret = snd_soc_codec_set_cache_io(codec, 7, 9, SND_SOC_I2C);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
-       memcpy(codec->reg_cache, wm8978_reg, sizeof(wm8978_reg));
-
        /*
         * Set the update bit in all registers, that have one. This way all
         * writes to those registers will also cause the update bit to be
@@ -1050,74 +972,61 @@ static __devinit int wm8978_register(struct wm8978_priv *wm8978)
        ret = snd_soc_write(codec, WM8978_RESET, 0);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
+               return ret;
        }
 
-       wm8978_dai.dev = codec->dev;
-
        wm8978_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
-       wm8978_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm8978_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8978_snd_controls,
+                            ARRAY_SIZE(wm8978_snd_controls));
+       wm8978_add_widgets(codec);
 
        return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       return ret;
 }
 
-static __devexit void wm8978_unregister(struct wm8978_priv *wm8978)
+/* power down chip */
+static int wm8978_remove(struct snd_soc_codec *codec)
 {
-       wm8978_set_bias_level(&wm8978->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8978_dai);
-       snd_soc_unregister_codec(&wm8978->codec);
-       wm8978_codec = NULL;
+       wm8978_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8978 = {
+       .probe =        wm8978_probe,
+       .remove =       wm8978_remove,
+       .suspend =      wm8978_suspend,
+       .resume =       wm8978_resume,
+       .set_bias_level = wm8978_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8978_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8978_reg,
+};
+
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm8978_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
-       int ret;
        struct wm8978_priv *wm8978;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8978 = kzalloc(sizeof(struct wm8978_priv), GFP_KERNEL);
        if (wm8978 == NULL)
                return -ENOMEM;
 
-       codec = &wm8978->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-
        i2c_set_clientdata(i2c, wm8978);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
+       wm8978->control_data = i2c;
 
-       ret = wm8978_register(wm8978);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8978, &wm8978_dai, 1);
        if (ret < 0)
                kfree(wm8978);
-
        return ret;
 }
 
 static __devexit int wm8978_i2c_remove(struct i2c_client *client)
 {
-       struct wm8978_priv *wm8978 = i2c_get_clientdata(client);
-       wm8978_unregister(wm8978);
-       kfree(wm8978);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1129,23 +1038,34 @@ MODULE_DEVICE_TABLE(i2c, wm8978_i2c_id);
 
 static struct i2c_driver wm8978_i2c_driver = {
        .driver = {
-               .name = "WM8978",
+               .name = "WM8978-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8978_i2c_probe,
        .remove =   __devexit_p(wm8978_i2c_remove),
        .id_table = wm8978_i2c_id,
 };
+#endif
 
 static int __init wm8978_modinit(void)
 {
-       return i2c_add_driver(&wm8978_i2c_driver);
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+       ret = i2c_add_driver(&wm8978_i2c_driver);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register WM8978 I2C driver: %d\n",
+                      ret);
+       }
+#endif
+       return ret;
 }
 module_init(wm8978_modinit);
 
 static void __exit wm8978_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8978_i2c_driver);
+#endif
 }
 module_exit(wm8978_exit);
 
index 56ec83270917db070872ea5a9756e83b9bf16220..c75525b7f154c9fe25e88a91cb55e99d7e0b37c2 100644 (file)
@@ -80,7 +80,4 @@ enum wm8978_sysclk_src {
        WM8978_MCLK
 };
 
-extern struct snd_soc_dai wm8978_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8978;
-
 #endif /* __WM8978_H__ */
index 19ad590ca0b390065850ce4ab8b0e4e2fd5d841a..d070a58e4f8ed5b8ab73aa2c17be1967e24348d8 100644 (file)
@@ -52,7 +52,7 @@ static const u16 wm8988_reg[] = {
 /* codec private data */
 struct wm8988_priv {
        unsigned int sysclk;
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        struct snd_pcm_hw_constraint_list *sysclk_constraints;
        u16 reg_cache[WM8988_NUM_REG];
 };
@@ -608,8 +608,7 @@ static int wm8988_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        struct wm8988_priv *wm8988 = snd_soc_codec_get_drvdata(codec);
        u16 iface = snd_soc_read(codec, WM8988_IFACE) & 0x1f3;
        u16 srate = snd_soc_read(codec, WM8988_SRATE) & 0x180;
@@ -711,8 +710,8 @@ static struct snd_soc_dai_ops wm8988_ops = {
        .digital_mute = wm8988_mute,
 };
 
-struct snd_soc_dai wm8988_dai = {
-       .name = "WM8988",
+static struct snd_soc_dai_driver wm8988_dai = {
+       .name = "wm8988-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -730,21 +729,15 @@ struct snd_soc_dai wm8988_dai = {
        .ops = &wm8988_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8988_dai);
 
-static int wm8988_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8988_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8988_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8988_resume(struct platform_device *pdev)
+static int wm8988_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -763,99 +756,22 @@ static int wm8988_resume(struct platform_device *pdev)
        return 0;
 }
 
-static struct snd_soc_codec *wm8988_codec;
-
-static int wm8988_probe(struct platform_device *pdev)
+static int wm8988_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
+       struct wm8988_priv *wm8988 = snd_soc_codec_get_drvdata(codec);
        int ret = 0;
-
-       if (wm8988_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8988_codec;
-       codec = wm8988_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
-       }
-
-       snd_soc_add_controls(codec, wm8988_snd_controls,
-                               ARRAY_SIZE(wm8988_snd_controls));
-       snd_soc_dapm_new_controls(codec, wm8988_dapm_widgets,
-                                 ARRAY_SIZE(wm8988_dapm_widgets));
-       snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
-
-       return ret;
-
-pcm_err:
-       return ret;
-}
-
-static int wm8988_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8988 = {
-       .probe =        wm8988_probe,
-       .remove =       wm8988_remove,
-       .suspend =      wm8988_suspend,
-       .resume =       wm8988_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8988);
-
-static int wm8988_register(struct wm8988_priv *wm8988,
-                          enum snd_soc_control_type control)
-{
-       struct snd_soc_codec *codec = &wm8988->codec;
-       int ret;
        u16 reg;
 
-       if (wm8988_codec) {
-               dev_err(codec->dev, "Another WM8988 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm8988);
-       codec->name = "WM8988";
-       codec->owner = THIS_MODULE;
-       codec->dai = &wm8988_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm8988->reg_cache);
-       codec->reg_cache = &wm8988->reg_cache;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8988_set_bias_level;
-
-       memcpy(codec->reg_cache, wm8988_reg,
-              sizeof(wm8988_reg));
-
-       ret = snd_soc_codec_set_cache_io(codec, 7, 9, control);
+       ret = snd_soc_codec_set_cache_io(codec, 7, 9, wm8988->control_type);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
+               return ret;
        }
 
        ret = wm8988_reset(codec);
        if (ret < 0) {
                dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
+               return ret;
        }
 
        /* set the update bits (we always update left then right) */
@@ -870,139 +786,133 @@ static int wm8988_register(struct wm8988_priv *wm8988,
        reg = snd_soc_read(codec, WM8988_RINVOL);
        snd_soc_write(codec, WM8988_RINVOL, reg | 0x0100);
 
-       wm8988_set_bias_level(&wm8988->codec, SND_SOC_BIAS_STANDBY);
-
-       wm8988_dai.dev = codec->dev;
-
-       wm8988_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
+       wm8988_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
-       ret = snd_soc_register_dai(&wm8988_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
+       snd_soc_add_controls(codec, wm8988_snd_controls,
+                               ARRAY_SIZE(wm8988_snd_controls));
+       snd_soc_dapm_new_controls(codec, wm8988_dapm_widgets,
+                                 ARRAY_SIZE(wm8988_dapm_widgets));
+       snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
 
        return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm8988);
-       return ret;
 }
 
-static void wm8988_unregister(struct wm8988_priv *wm8988)
+static int wm8988_remove(struct snd_soc_codec *codec)
 {
-       wm8988_set_bias_level(&wm8988->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm8988_dai);
-       snd_soc_unregister_codec(&wm8988->codec);
-       kfree(wm8988);
-       wm8988_codec = NULL;
+       wm8988_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
-#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-static int wm8988_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static struct snd_soc_codec_driver soc_codec_dev_wm8988 = {
+       .probe =        wm8988_probe,
+       .remove =       wm8988_remove,
+       .suspend =      wm8988_suspend,
+       .resume =       wm8988_resume,
+       .set_bias_level = wm8988_set_bias_level,
+       .reg_cache_size = sizeof(wm8988_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8988_reg,
+};
+
+#if defined(CONFIG_SPI_MASTER)
+static int __devinit wm8988_spi_probe(struct spi_device *spi)
 {
        struct wm8988_priv *wm8988;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8988 = kzalloc(sizeof(struct wm8988_priv), GFP_KERNEL);
        if (wm8988 == NULL)
                return -ENOMEM;
 
-       codec = &wm8988->codec;
-
-       i2c_set_clientdata(i2c, wm8988);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
+       wm8988->control_type = SND_SOC_SPI;
+       spi_set_drvdata(spi, wm8988);
 
-       return wm8988_register(wm8988, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&spi->dev,
+                       &soc_codec_dev_wm8988, &wm8988_dai, 1);
+       if (ret < 0)
+               kfree(wm8988);
+       return ret;
 }
 
-static int wm8988_i2c_remove(struct i2c_client *client)
+static int __devexit wm8988_spi_remove(struct spi_device *spi)
 {
-       struct wm8988_priv *wm8988 = i2c_get_clientdata(client);
-       wm8988_unregister(wm8988);
+       snd_soc_unregister_codec(&spi->dev);
+       kfree(spi_get_drvdata(spi));
        return 0;
 }
 
-static const struct i2c_device_id wm8988_i2c_id[] = {
-       { "wm8988", 0 },
-       { }
-};
-MODULE_DEVICE_TABLE(i2c, wm8988_i2c_id);
-
-static struct i2c_driver wm8988_i2c_driver = {
+static struct spi_driver wm8988_spi_driver = {
        .driver = {
-               .name = "WM8988",
-               .owner = THIS_MODULE,
+               .name   = "wm8988-codec",
+               .bus    = &spi_bus_type,
+               .owner  = THIS_MODULE,
        },
-       .probe = wm8988_i2c_probe,
-       .remove = wm8988_i2c_remove,
-       .id_table = wm8988_i2c_id,
+       .probe          = wm8988_spi_probe,
+       .remove         = __devexit_p(wm8988_spi_remove),
 };
-#endif
+#endif /* CONFIG_SPI_MASTER */
 
-#if defined(CONFIG_SPI_MASTER)
-static int __devinit wm8988_spi_probe(struct spi_device *spi)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8988_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
        struct wm8988_priv *wm8988;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm8988 = kzalloc(sizeof(struct wm8988_priv), GFP_KERNEL);
        if (wm8988 == NULL)
                return -ENOMEM;
 
-       codec = &wm8988->codec;
-       codec->control_data = spi;
-       codec->dev = &spi->dev;
-
-       dev_set_drvdata(&spi->dev, wm8988);
+       i2c_set_clientdata(i2c, wm8988);
+       wm8988->control_type = SND_SOC_I2C;
 
-       return wm8988_register(wm8988, SND_SOC_SPI);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8988, &wm8988_dai, 1);
+       if (ret < 0)
+               kfree(wm8988);
+       return ret;
 }
 
-static int __devexit wm8988_spi_remove(struct spi_device *spi)
+static __devexit int wm8988_i2c_remove(struct i2c_client *client)
 {
-       struct wm8988_priv *wm8988 = dev_get_drvdata(&spi->dev);
-
-       wm8988_unregister(wm8988);
-
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
-static struct spi_driver wm8988_spi_driver = {
+static const struct i2c_device_id wm8988_i2c_id[] = {
+       { "wm8988", 0 },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, wm8988_i2c_id);
+
+static struct i2c_driver wm8988_i2c_driver = {
        .driver = {
-               .name   = "wm8988",
-               .bus    = &spi_bus_type,
-               .owner  = THIS_MODULE,
+               .name = "wm8988-codec",
+               .owner = THIS_MODULE,
        },
-       .probe          = wm8988_spi_probe,
-       .remove         = __devexit_p(wm8988_spi_remove),
+       .probe =    wm8988_i2c_probe,
+       .remove =   __devexit_p(wm8988_i2c_remove),
+       .id_table = wm8988_i2c_id,
 };
 #endif
 
 static int __init wm8988_modinit(void)
 {
-       int ret;
-
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8988_i2c_driver);
-       if (ret != 0)
-               pr_err("WM8988: Unable to register I2C driver: %d\n", ret);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register WM8988 I2C driver: %d\n",
+                      ret);
+       }
 #endif
 #if defined(CONFIG_SPI_MASTER)
        ret = spi_register_driver(&wm8988_spi_driver);
-       if (ret != 0)
-               pr_err("WM8988: Unable to register SPI driver: %d\n", ret);
+       if (ret != 0) {
+               printk(KERN_ERR "Failed to register WM8988 SPI driver: %d\n",
+                      ret);
+       }
 #endif
        return ret;
 }
index 4552d37fdd415a3a68a91143f24d97f3bda929e8..5c04024e5f9f8c22b28bd09752237562c6092fba 100644 (file)
@@ -54,7 +54,4 @@
 
 #define WM8988_SYSCLK  0
 
-extern struct snd_soc_dai wm8988_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8988;
-
 #endif
index dd8d909788c1fe2b305d5b6af4f5eb4f58062cbd..0ffecbd1e33bc25db7f9bd583f9c4f9d0ed3231f 100644 (file)
@@ -32,6 +32,7 @@
 
 /* codec private data */
 struct wm8990_priv {
+       enum snd_soc_control_type control_type;
        unsigned int sysclk;
        unsigned int pcmclk;
 };
@@ -1114,8 +1115,7 @@ static int wm8990_hw_params(struct snd_pcm_substream *substream,
                            struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 audio1 = snd_soc_read(codec, WM8990_AUDIO_INTERFACE_1);
 
        audio1 &= ~WM8990_AIF_WL_MASK;
@@ -1293,10 +1293,9 @@ static struct snd_soc_dai_ops wm8990_dai_ops = {
        .set_sysclk     = wm8990_set_dai_sysclk,
 };
 
-struct snd_soc_dai wm8990_dai = {
+static struct snd_soc_dai_driver wm8990_dai = {
 /* ADC/DAC on primary */
-       .name = "WM8990 ADC/DAC Primary",
-       .id = 1,
+       .name = "wm8990-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -1311,21 +1310,15 @@ struct snd_soc_dai wm8990_dai = {
                .formats = WM8990_FORMATS,},
        .ops = &wm8990_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm8990_dai);
 
-static int wm8990_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8990_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm8990_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm8990_resume(struct platform_device *pdev)
+static int wm8990_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i;
        u8 data[2];
        u16 *cache = codec->reg_cache;
@@ -1347,38 +1340,19 @@ static int wm8990_resume(struct platform_device *pdev)
  * initialise the WM8990 driver
  * register the mixer and dsp interfaces with the kernel
  */
-static int wm8990_init(struct snd_soc_device *socdev)
+static int wm8990_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
+       int ret;
        u16 reg;
-       int ret = 0;
-
-       codec->name = "WM8990";
-       codec->owner = THIS_MODULE;
-       codec->set_bias_level = wm8990_set_bias_level;
-       codec->dai = &wm8990_dai;
-       codec->num_dai = 2;
-       codec->reg_cache_size = ARRAY_SIZE(wm8990_reg);
-       codec->reg_cache = kmemdup(wm8990_reg, sizeof(wm8990_reg), GFP_KERNEL);
-
-       if (codec->reg_cache == NULL)
-               return -ENOMEM;
 
        ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
        if (ret < 0) {
                printk(KERN_ERR "wm8990: failed to set cache I/O: %d\n", ret);
-               goto pcm_err;
+               return ret;
        }
 
        wm8990_reset(codec);
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               printk(KERN_ERR "wm8990: failed to create pcms\n");
-               goto pcm_err;
-       }
-
        /* charge output caps */
        codec->bias_level = SND_SOC_BIAS_OFF;
        wm8990_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
@@ -1400,47 +1374,51 @@ static int wm8990_init(struct snd_soc_device *socdev)
                                ARRAY_SIZE(wm8990_snd_controls));
        wm8990_add_widgets(codec);
 
-       return ret;
+       return 0;
+}
 
-pcm_err:
-       kfree(codec->reg_cache);
-       return ret;
+/* power down chip */
+static int wm8990_remove(struct snd_soc_codec *codec)
+{
+       wm8990_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       return 0;
 }
 
-/* If the i2c layer weren't so broken, we could pass this kind of data
-   around */
-static struct snd_soc_device *wm8990_socdev;
+static struct snd_soc_codec_driver soc_codec_dev_wm8990 = {
+       .probe =        wm8990_probe,
+       .remove =       wm8990_remove,
+       .suspend =      wm8990_suspend,
+       .resume =       wm8990_resume,
+       .set_bias_level = wm8990_set_bias_level,
+       .reg_cache_size = ARRAY_SIZE(wm8990_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8990_reg,
+};
 
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-
-/*
- * WM891 2 wire address is determined by GPIO5
- * state during powerup.
- *    low  = 0x34
- *    high = 0x36
- */
-
-static int wm8990_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+static __devinit int wm8990_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
-       struct snd_soc_device *socdev = wm8990_socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct wm8990_priv *wm8990;
        int ret;
 
-       i2c_set_clientdata(i2c, codec);
-       codec->control_data = i2c;
+       wm8990 = kzalloc(sizeof(struct wm8990_priv), GFP_KERNEL);
+       if (wm8990 == NULL)
+               return -ENOMEM;
 
-       ret = wm8990_init(socdev);
-       if (ret < 0)
-               pr_err("failed to initialise WM8990\n");
+       i2c_set_clientdata(i2c, wm8990);
 
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8990, &wm8990_dai, 1);
+       if (ret < 0)
+               kfree(wm8990);
        return ret;
 }
 
-static int wm8990_i2c_remove(struct i2c_client *client)
+static __devexit int wm8990_i2c_remove(struct i2c_client *client)
 {
-       struct snd_soc_codec *codec = i2c_get_clientdata(client);
-       kfree(codec->reg_cache);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1452,134 +1430,34 @@ MODULE_DEVICE_TABLE(i2c, wm8990_i2c_id);
 
 static struct i2c_driver wm8990_i2c_driver = {
        .driver = {
-               .name = "WM8990 I2C Codec",
+               .name = "wm8990-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm8990_i2c_probe,
-       .remove =   wm8990_i2c_remove,
+       .remove =   __devexit_p(wm8990_i2c_remove),
        .id_table = wm8990_i2c_id,
 };
-
-static int wm8990_add_i2c_device(struct platform_device *pdev,
-                                const struct wm8990_setup_data *setup)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-       int ret;
-
-       ret = i2c_add_driver(&wm8990_i2c_driver);
-       if (ret != 0) {
-               dev_err(&pdev->dev, "can't add i2c driver\n");
-               return ret;
-       }
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = setup->i2c_address;
-       strlcpy(info.type, "wm8990", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(setup->i2c_bus);
-       if (!adapter) {
-               dev_err(&pdev->dev, "can't get i2c adapter %d\n",
-                       setup->i2c_bus);
-               goto err_driver;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               dev_err(&pdev->dev, "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               goto err_driver;
-       }
-
-       return 0;
-
-err_driver:
-       i2c_del_driver(&wm8990_i2c_driver);
-       return -ENODEV;
-}
 #endif
 
-static int wm8990_probe(struct platform_device *pdev)
+static int __init wm8990_modinit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct wm8990_setup_data *setup;
-       struct snd_soc_codec *codec;
-       struct wm8990_priv *wm8990;
-       int ret;
-
-       setup = socdev->codec_data;
-       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-       if (codec == NULL)
-               return -ENOMEM;
-
-       wm8990 = kzalloc(sizeof(struct wm8990_priv), GFP_KERNEL);
-       if (wm8990 == NULL) {
-               kfree(codec);
-               return -ENOMEM;
-       }
-
-       snd_soc_codec_set_drvdata(codec, wm8990);
-       socdev->card->codec = codec;
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-       wm8990_socdev = socdev;
-
-       ret = -ENODEV;
-
+       int ret = 0;
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       if (setup->i2c_address) {
-               codec->hw_write = (hw_write_t)i2c_master_send;
-               ret = wm8990_add_i2c_device(pdev, setup);
-       }
-#endif
-
+       ret = i2c_add_driver(&wm8990_i2c_driver);
        if (ret != 0) {
-               kfree(snd_soc_codec_get_drvdata(codec));
-               kfree(codec);
+               printk(KERN_ERR "Failed to register wm8990 I2C driver: %d\n",
+                      ret);
        }
+#endif
        return ret;
 }
+module_init(wm8990_modinit);
 
-/* power down chip */
-static int wm8990_remove(struct platform_device *pdev)
+static void __exit wm8990_exit(void)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec->control_data)
-               wm8990_set_bias_level(codec, SND_SOC_BIAS_OFF);
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
-       i2c_unregister_device(codec->control_data);
        i2c_del_driver(&wm8990_i2c_driver);
 #endif
-       kfree(snd_soc_codec_get_drvdata(codec));
-       kfree(codec);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8990 = {
-       .probe =        wm8990_probe,
-       .remove =       wm8990_remove,
-       .suspend =      wm8990_suspend,
-       .resume =       wm8990_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8990);
-
-static int __init wm8990_modinit(void)
-{
-       return snd_soc_register_dai(&wm8990_dai);
-}
-module_init(wm8990_modinit);
-
-static void __exit wm8990_exit(void)
-{
-       snd_soc_unregister_dai(&wm8990_dai);
 }
 module_exit(wm8990_exit);
 
index 7114ddc88b4ba5fb6c2dff17712b7b05c36ac39c..77c98a4bfe9cdf34876e30866e73046d50748c85 100644 (file)
 #define WM8990_INMIXR_PWR_BIT                  2
 #define WM8990_AINRMUX_PWR_BIT                 3
 
-struct wm8990_setup_data {
-       unsigned i2c_bus;
-       unsigned short i2c_address;
-};
-
 #define WM8990_MCLK_DIV 0
 #define WM8990_DACCLK_DIV 1
 #define WM8990_ADCCLK_DIV 2
 #define WM8990_BCLK_DIV 3
 
-extern struct snd_soc_dai wm8990_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8990;
-
 #endif /* __WM8990REGISTERDEFS_H__ */
 /*------------------------------ END OF FILE ---------------------------------*/
index d8d300c6175fb2b48db37207885f9110b2a8768c..a3fd6b935804406deb93c352ee5432ba899d9c57 100644 (file)
@@ -229,7 +229,7 @@ struct wm8993_priv {
        u16 reg_cache[WM8993_REGISTER_COUNT];
        struct regulator_bulk_data supplies[WM8993_NUM_SUPPLIES];
        struct wm8993_platform_data pdata;
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
        int master;
        int sysclk_source;
        int tdm_slots;
@@ -367,10 +367,9 @@ static int fll_factors(struct _fll_div *fll_div, unsigned int Fref,
        return 0;
 }
 
-static int wm8993_set_fll(struct snd_soc_dai *dai, int fll_id, int source,
+static int _wm8993_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
                          unsigned int Fref, unsigned int Fout)
 {
-       struct snd_soc_codec *codec = dai->codec;
        struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec);
        u16 reg1, reg4, reg5;
        struct _fll_div fll_div;
@@ -456,6 +455,12 @@ static int wm8993_set_fll(struct snd_soc_dai *dai, int fll_id, int source,
        return 0;
 }
 
+static int wm8993_set_fll(struct snd_soc_dai *dai, int fll_id, int source,
+                         unsigned int Fref, unsigned int Fout)
+{
+       return _wm8993_set_fll(dai->codec, fll_id, source, Fref, Fout);
+}
+
 static int configure_clock(struct snd_soc_codec *codec)
 {
        struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec);
@@ -1394,8 +1399,8 @@ static struct snd_soc_dai_ops wm8993_ops = {
                        SNDRV_PCM_FMTBIT_S24_LE |\
                        SNDRV_PCM_FMTBIT_S32_LE)
 
-struct snd_soc_dai wm8993_dai = {
-       .name = "WM8993",
+static struct snd_soc_dai_driver wm8993_dai = {
+       .name = "wm8993-hifi",
        .playback = {
                .stream_name = "Playback",
                .channels_min = 1,
@@ -1413,32 +1418,81 @@ struct snd_soc_dai wm8993_dai = {
        .ops = &wm8993_ops,
        .symmetric_rates = 1,
 };
-EXPORT_SYMBOL_GPL(wm8993_dai);
-
-static struct snd_soc_codec *wm8993_codec;
 
-static int wm8993_probe(struct platform_device *pdev)
+static int wm8993_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct wm8993_priv *wm8993;
-       int ret = 0;
+       struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec);
+       int ret, i, val;
+
+       wm8993->hubs_data.hp_startup_mode = 1;
+       wm8993->hubs_data.dcs_codes = -2;
+
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
+       }
+
+       for (i = 0; i < ARRAY_SIZE(wm8993->supplies); i++)
+               wm8993->supplies[i].supply = wm8993_supply_names[i];
 
-       if (!wm8993_codec) {
-               dev_err(&pdev->dev, "I2C device not yet probed\n");
-               goto err;
+       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8993->supplies),
+                                wm8993->supplies);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
+               return ret;
        }
 
-       socdev->card->codec = wm8993_codec;
-       codec = wm8993_codec;
-       wm8993 = snd_soc_codec_get_drvdata(codec);
+       ret = regulator_bulk_enable(ARRAY_SIZE(wm8993->supplies),
+                                   wm8993->supplies);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
+               goto err_get;
+       }
 
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms\n");
-               goto err;
+       val = snd_soc_read(codec, WM8993_SOFTWARE_RESET);
+       if (val != wm8993_reg_defaults[WM8993_SOFTWARE_RESET]) {
+               dev_err(codec->dev, "Invalid ID register value %x\n", val);
+               ret = -EINVAL;
+               goto err_enable;
        }
 
+       ret = snd_soc_write(codec, WM8993_SOFTWARE_RESET, 0xffff);
+       if (ret != 0)
+               goto err_enable;
+
+       codec->cache_only = 1;
+
+       /* By default we're using the output mixers */
+       wm8993->class_w_users = 2;
+
+       /* Latch volume update bits and default ZC on */
+       snd_soc_update_bits(codec, WM8993_RIGHT_DAC_DIGITAL_VOLUME,
+                           WM8993_DAC_VU, WM8993_DAC_VU);
+       snd_soc_update_bits(codec, WM8993_RIGHT_ADC_DIGITAL_VOLUME,
+                           WM8993_ADC_VU, WM8993_ADC_VU);
+
+       /* Manualy manage the HPOUT sequencing for independent stereo
+        * control. */
+       snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0,
+                           WM8993_HPOUT1_AUTO_PU, 0);
+
+       /* Use automatic clock configuration */
+       snd_soc_update_bits(codec, WM8993_CLOCKING_4, WM8993_SR_MODE, 0);
+
+       wm_hubs_handle_analogue_pdata(codec, wm8993->pdata.lineout1_diff,
+                                     wm8993->pdata.lineout2_diff,
+                                     wm8993->pdata.lineout1fb,
+                                     wm8993->pdata.lineout2fb,
+                                     wm8993->pdata.jd_scthr,
+                                     wm8993->pdata.jd_thr,
+                                     wm8993->pdata.micbias1_lvl,
+                                     wm8993->pdata.micbias2_lvl);
+
+       ret = wm8993_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+       if (ret != 0)
+               goto err_enable;
+
        snd_soc_add_controls(codec, wm8993_snd_controls,
                             ARRAY_SIZE(wm8993_snd_controls));
        if (wm8993->pdata.num_retune_configs != 0) {
@@ -1457,36 +1511,36 @@ static int wm8993_probe(struct platform_device *pdev)
        wm_hubs_add_analogue_routes(codec, wm8993->pdata.lineout1_diff,
                                    wm8993->pdata.lineout2_diff);
 
-       return ret;
+       return 0;
 
-err:
+err_enable:
+       regulator_bulk_disable(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
+err_get:
+       regulator_bulk_free(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
        return ret;
 }
 
-static int wm8993_remove(struct platform_device *pdev)
+static int wm8993_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec);
 
+       wm8993_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       regulator_bulk_free(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
        return 0;
 }
 
 #ifdef CONFIG_PM
-static int wm8993_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8993_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec);
        int fll_fout = wm8993->fll_fout;
        int fll_fref  = wm8993->fll_fref;
        int ret;
 
        /* Stop the FLL in an orderly fashion */
-       ret = wm8993_set_fll(codec->dai, 0, 0, 0, 0);
+       ret = _wm8993_set_fll(codec, 0, 0, 0, 0);
        if (ret != 0) {
-               dev_err(&pdev->dev, "Failed to stop FLL\n");
+               dev_err(codec->dev, "Failed to stop FLL\n");
                return ret;
        }
 
@@ -1498,10 +1552,8 @@ static int wm8993_suspend(struct platform_device *pdev, pm_message_t state)
        return 0;
 }
 
-static int wm8993_resume(struct platform_device *pdev)
+static int wm8993_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8993_priv *wm8993 = snd_soc_codec_get_drvdata(codec);
        int ret;
 
@@ -1515,7 +1567,7 @@ static int wm8993_resume(struct platform_device *pdev)
                wm8993->fll_fref = 0;
                wm8993->fll_fout = 0;
 
-               ret = wm8993_set_fll(codec->dai, 0, wm8993->fll_src,
+               ret = _wm8993_set_fll(codec, 0, wm8993->fll_src,
                                     fll_fref, fll_fout);
                if (ret != 0)
                        dev_err(codec->dev, "Failed to restart FLL\n");
@@ -1528,162 +1580,42 @@ static int wm8993_resume(struct platform_device *pdev)
 #define wm8993_resume NULL
 #endif
 
-struct snd_soc_codec_device soc_codec_dev_wm8993 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm8993 = {
        .probe =        wm8993_probe,
        .remove =       wm8993_remove,
        .suspend =      wm8993_suspend,
        .resume =       wm8993_resume,
+       .set_bias_level = wm8993_set_bias_level,
+       .reg_cache_size = sizeof(wm8993_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm8993_reg_defaults,
+       .volatile_register = wm8993_volatile,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8993);
 
-static int wm8993_i2c_probe(struct i2c_client *i2c,
-                           const struct i2c_device_id *id)
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
+static __devinit int wm8993_i2c_probe(struct i2c_client *i2c,
+                                     const struct i2c_device_id *id)
 {
        struct wm8993_priv *wm8993;
-       struct snd_soc_codec *codec;
-       unsigned int val;
        int ret;
-       int i;
-
-       if (wm8993_codec) {
-               dev_err(&i2c->dev, "A WM8993 is already registered\n");
-               return -EINVAL;
-       }
 
        wm8993 = kzalloc(sizeof(struct wm8993_priv), GFP_KERNEL);
        if (wm8993 == NULL)
                return -ENOMEM;
 
-       codec = &wm8993->codec;
-       if (i2c->dev.platform_data)
-               memcpy(&wm8993->pdata, i2c->dev.platform_data,
-                      sizeof(wm8993->pdata));
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->name = "WM8993";
-       codec->volatile_register = wm8993_volatile;
-       codec->reg_cache = wm8993->reg_cache;
-       codec->reg_cache_size = ARRAY_SIZE(wm8993->reg_cache);
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8993_set_bias_level;
-       codec->dai = &wm8993_dai;
-       codec->num_dai = 1;
-       snd_soc_codec_set_drvdata(codec, wm8993);
-
-       wm8993->hubs_data.hp_startup_mode = 1;
-       wm8993->hubs_data.dcs_codes = -2;
-
-       memcpy(wm8993->reg_cache, wm8993_reg_defaults,
-              sizeof(wm8993->reg_cache));
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
        i2c_set_clientdata(i2c, wm8993);
-       codec->control_data = i2c;
-       wm8993_codec = codec;
-
-       codec->dev = &i2c->dev;
-
-       for (i = 0; i < ARRAY_SIZE(wm8993->supplies); i++)
-               wm8993->supplies[i].supply = wm8993_supply_names[i];
-
-       ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(wm8993->supplies),
-                                wm8993->supplies);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to request supplies: %d\n", ret);
-               goto err;
-       }
-
-       ret = regulator_bulk_enable(ARRAY_SIZE(wm8993->supplies),
-                                   wm8993->supplies);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to enable supplies: %d\n", ret);
-               goto err_get;
-       }
-
-       val = snd_soc_read(codec, WM8993_SOFTWARE_RESET);
-       if (val != wm8993_reg_defaults[WM8993_SOFTWARE_RESET]) {
-               dev_err(codec->dev, "Invalid ID register value %x\n", val);
-               ret = -EINVAL;
-               goto err_enable;
-       }
-
-       ret = snd_soc_write(codec, WM8993_SOFTWARE_RESET, 0xffff);
-       if (ret != 0)
-               goto err_enable;
-
-       codec->cache_only = 1;
-
-       /* By default we're using the output mixers */
-       wm8993->class_w_users = 2;
-
-       /* Latch volume update bits and default ZC on */
-       snd_soc_update_bits(codec, WM8993_RIGHT_DAC_DIGITAL_VOLUME,
-                           WM8993_DAC_VU, WM8993_DAC_VU);
-       snd_soc_update_bits(codec, WM8993_RIGHT_ADC_DIGITAL_VOLUME,
-                           WM8993_ADC_VU, WM8993_ADC_VU);
 
-       /* Manualy manage the HPOUT sequencing for independent stereo
-        * control. */
-       snd_soc_update_bits(codec, WM8993_ANALOGUE_HP_0,
-                           WM8993_HPOUT1_AUTO_PU, 0);
-
-       /* Use automatic clock configuration */
-       snd_soc_update_bits(codec, WM8993_CLOCKING_4, WM8993_SR_MODE, 0);
-
-       wm_hubs_handle_analogue_pdata(codec, wm8993->pdata.lineout1_diff,
-                                     wm8993->pdata.lineout2_diff,
-                                     wm8993->pdata.lineout1fb,
-                                     wm8993->pdata.lineout2fb,
-                                     wm8993->pdata.jd_scthr,
-                                     wm8993->pdata.jd_thr,
-                                     wm8993->pdata.micbias1_lvl,
-                                     wm8993->pdata.micbias2_lvl);
-                            
-       ret = wm8993_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-       if (ret != 0)
-               goto err_enable;
-
-       wm8993_dai.dev = codec->dev;
-
-       ret = snd_soc_register_dai(&wm8993_dai);
-       if (ret != 0)
-               goto err_bias;
-
-       ret = snd_soc_register_codec(codec);
-
-       return 0;
-
-err_bias:
-       wm8993_set_bias_level(codec, SND_SOC_BIAS_OFF);
-err_enable:
-       regulator_bulk_disable(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
-err_get:
-       regulator_bulk_free(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
-err:
-       wm8993_codec = NULL;
-       kfree(wm8993);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm8993, &wm8993_dai, 1);
+       if (ret < 0)
+               kfree(wm8993);
        return ret;
 }
 
-static int wm8993_i2c_remove(struct i2c_client *client)
+static __devexit int wm8993_i2c_remove(struct i2c_client *client)
 {
-       struct wm8993_priv *wm8993 = i2c_get_clientdata(client);
-
-       snd_soc_unregister_codec(&wm8993->codec);
-       snd_soc_unregister_dai(&wm8993_dai);
-
-       wm8993_set_bias_level(&wm8993->codec, SND_SOC_BIAS_OFF);
-       regulator_bulk_free(ARRAY_SIZE(wm8993->supplies), wm8993->supplies);
-       kfree(wm8993);
-
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1695,30 +1627,34 @@ MODULE_DEVICE_TABLE(i2c, wm8993_i2c_id);
 
 static struct i2c_driver wm8993_i2c_driver = {
        .driver = {
-               .name = "WM8993",
+               .name = "wm8993-codec",
                .owner = THIS_MODULE,
        },
-       .probe = wm8993_i2c_probe,
-       .remove = wm8993_i2c_remove,
+       .probe =    wm8993_i2c_probe,
+       .remove =   __devexit_p(wm8993_i2c_remove),
        .id_table = wm8993_i2c_id,
 };
-
+#endif
 
 static int __init wm8993_modinit(void)
 {
-       int ret;
-
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm8993_i2c_driver);
-       if (ret != 0)
-               pr_err("WM8993: Unable to register I2C driver: %d\n", ret);
-
+       if (ret != 0) {
+               pr_err("WM8993: Unable to register I2C driver: %d\n",
+                      ret);
+       }
+#endif
        return ret;
 }
 module_init(wm8993_modinit);
 
 static void __exit wm8993_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm8993_i2c_driver);
+#endif
 }
 module_exit(wm8993_exit);
 
index 30e71ca88dad1a790a59a6bad2730634f922b7ec..2184617b96117bfabac14cc7411eb24d2dadb317 100644 (file)
@@ -1,9 +1,6 @@
 #ifndef WM8993_H
 #define WM8993_H
 
-extern struct snd_soc_dai wm8993_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8993;
-
 #define WM8993_SYSCLK_MCLK     1
 #define WM8993_SYSCLK_FLL      2
 
index 522249d5c2b463d9917e751bc0cac0fa9711c1da..76a066e908ed6311780b2a246c9200c149247317 100644 (file)
@@ -36,9 +36,6 @@
 #include "wm8994.h"
 #include "wm_hubs.h"
 
-static struct snd_soc_codec *wm8994_codec;
-struct snd_soc_codec_device soc_codec_dev_wm8994;
-
 struct fll_config {
        int src;
        int in;
@@ -71,7 +68,9 @@ struct wm8994_micdet {
 /* codec private data */
 struct wm8994_priv {
        struct wm_hubs_data hubs;
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
+       struct snd_soc_codec *codec;
        u16 reg_cache[WM8994_REG_CACHE_SIZE + 1];
        int sysclk[2];
        int sysclk_rate[2];
@@ -1902,8 +1901,6 @@ static int wm8994_put_drc_sw(struct snd_kcontrol *kcontrol,
        return snd_soc_put_volsw(kcontrol, ucontrol);
 }
 
-
-
 static void wm8994_set_drc(struct snd_soc_codec *codec, int drc)
 {
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
@@ -1942,7 +1939,7 @@ static int wm8994_put_drc_enum(struct snd_kcontrol *kcontrol,
                               struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);  
+       struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
        struct wm8994_pdata *pdata = wm8994->pdata;
        int drc = wm8994_get_drc(kcontrol->id.name);
        int value = ucontrol->value.integer.value[0];
@@ -2045,7 +2042,7 @@ static int wm8994_put_retune_mobile_enum(struct snd_kcontrol *kcontrol,
                                         struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);  
+       struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
        struct wm8994_pdata *pdata = wm8994->pdata;
        int block = wm8994_get_retune_mobile_block(kcontrol->id.name);
        int value = ucontrol->value.integer.value[0];
@@ -2067,7 +2064,7 @@ static int wm8994_get_retune_mobile_enum(struct snd_kcontrol *kcontrol,
                                         struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
+       struct wm8994_priv *wm8994 =snd_soc_codec_get_drvdata(codec);
        int block = wm8994_get_retune_mobile_block(kcontrol->id.name);
 
        ucontrol->value.enumerated.item[0] = wm8994->retune_mobile_cfg[block];
@@ -2881,10 +2878,9 @@ static int wm8994_get_fll_config(struct fll_div *fll,
        return 0;
 }
 
-static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
+static int _wm8994_set_fll(struct snd_soc_codec *codec, int id, int src,
                          unsigned int freq_in, unsigned int freq_out)
 {
-       struct snd_soc_codec *codec = dai->codec;
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
        int reg_offset, ret;
        struct fll_div fll;
@@ -2995,8 +2991,15 @@ static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
        return 0;
 }
 
+
 static int opclk_divs[] = { 10, 20, 30, 40, 55, 60, 80, 120, 160 };
 
+static int wm8994_set_fll(struct snd_soc_dai *dai, int id, int src,
+                         unsigned int freq_in, unsigned int freq_out)
+{
+       return _wm8994_set_fll(dai->codec, id, src, freq_in, freq_out);
+}
+
 static int wm8994_set_dai_sysclk(struct snd_soc_dai *dai,
                int clk_id, unsigned int freq, int dir)
 {
@@ -3515,10 +3518,9 @@ static struct snd_soc_dai_ops wm8994_aif3_dai_ops = {
        .set_tristate   = wm8994_set_tristate,
 };
 
-struct snd_soc_dai wm8994_dai[] = {
+static struct snd_soc_dai_driver wm8994_dai[] = {
        {
-               .name = "WM8994 AIF1",
-               .id = 1,
+               .name = "wm8994-aif1",
                .playback = {
                        .stream_name = "AIF1 Playback",
                        .channels_min = 2,
@@ -3536,8 +3538,7 @@ struct snd_soc_dai wm8994_dai[] = {
                .ops = &wm8994_aif1_dai_ops,
        },
        {
-               .name = "WM8994 AIF2",
-               .id = 2,
+               .name = "wm8994-aif2",
                .playback = {
                        .stream_name = "AIF2 Playback",
                        .channels_min = 2,
@@ -3555,8 +3556,7 @@ struct snd_soc_dai wm8994_dai[] = {
                .ops = &wm8994_aif2_dai_ops,
        },
        {
-               .name = "WM8994 AIF3",
-               .id = 3,
+               .name = "wm8994-aif3",
                .playback = {
                        .stream_name = "AIF3 Playback",
                        .channels_min = 2,
@@ -3574,20 +3574,17 @@ struct snd_soc_dai wm8994_dai[] = {
                .ops = &wm8994_aif3_dai_ops,
        }
 };
-EXPORT_SYMBOL_GPL(wm8994_dai);
 
 #ifdef CONFIG_PM
-static int wm8994_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm8994_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
        int i, ret;
 
        for (i = 0; i < ARRAY_SIZE(wm8994->fll); i++) {
                memcpy(&wm8994->fll_suspend[i], &wm8994->fll[i],
                       sizeof(struct fll_config));
-               ret = wm8994_set_fll(&codec->dai[0], i + 1, 0, 0, 0);
+               ret = _wm8994_set_fll(codec, i + 1, 0, 0, 0);
                if (ret < 0)
                        dev_warn(codec->dev, "Failed to stop FLL%d: %d\n",
                                 i + 1, ret);
@@ -3598,10 +3595,8 @@ static int wm8994_suspend(struct platform_device *pdev, pm_message_t state)
        return 0;
 }
 
-static int wm8994_resume(struct platform_device *pdev)
+static int wm8994_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
        u16 *reg_cache = codec->reg_cache;
        int i, ret;
@@ -3630,7 +3625,7 @@ static int wm8994_resume(struct platform_device *pdev)
                if (!wm8994->fll_suspend[i].out)
                        continue;
 
-               ret = wm8994_set_fll(&codec->dai[0], i + 1,
+               ret = _wm8994_set_fll(codec, i + 1,
                                     wm8994->fll_suspend[i].src,
                                     wm8994->fll_suspend[i].in,
                                     wm8994->fll_suspend[i].out);
@@ -3648,7 +3643,7 @@ static int wm8994_resume(struct platform_device *pdev)
 
 static void wm8994_handle_retune_mobile_pdata(struct wm8994_priv *wm8994)
 {
-       struct snd_soc_codec *codec = &wm8994->codec;
+       struct snd_soc_codec *codec = wm8994->codec;
        struct wm8994_pdata *pdata = wm8994->pdata;
        struct snd_kcontrol_new controls[] = {
                SOC_ENUM_EXT("AIF1.1 EQ Mode",
@@ -3706,16 +3701,16 @@ static void wm8994_handle_retune_mobile_pdata(struct wm8994_priv *wm8994)
        wm8994->retune_mobile_enum.max = wm8994->num_retune_mobile_texts;
        wm8994->retune_mobile_enum.texts = wm8994->retune_mobile_texts;
 
-       ret = snd_soc_add_controls(&wm8994->codec, controls,
+       ret = snd_soc_add_controls(wm8994->codec, controls,
                                   ARRAY_SIZE(controls));
        if (ret != 0)
-               dev_err(wm8994->codec.dev,
+               dev_err(wm8994->codec->dev,
                        "Failed to add ReTune Mobile controls: %d\n", ret);
 }
 
 static void wm8994_handle_pdata(struct wm8994_priv *wm8994)
 {
-       struct snd_soc_codec *codec = &wm8994->codec;
+       struct snd_soc_codec *codec = wm8994->codec;
        struct wm8994_pdata *pdata = wm8994->pdata;
        int ret, i;
 
@@ -3747,7 +3742,7 @@ static void wm8994_handle_pdata(struct wm8994_priv *wm8994)
                wm8994->drc_texts = kmalloc(sizeof(char *)
                                            * pdata->num_drc_cfgs, GFP_KERNEL);
                if (!wm8994->drc_texts) {
-                       dev_err(wm8994->codec.dev,
+                       dev_err(wm8994->codec->dev,
                                "Failed to allocate %d DRC config texts\n",
                                pdata->num_drc_cfgs);
                        return;
@@ -3759,10 +3754,10 @@ static void wm8994_handle_pdata(struct wm8994_priv *wm8994)
                wm8994->drc_enum.max = pdata->num_drc_cfgs;
                wm8994->drc_enum.texts = wm8994->drc_texts;
 
-               ret = snd_soc_add_controls(&wm8994->codec, controls,
+               ret = snd_soc_add_controls(wm8994->codec, controls,
                                           ARRAY_SIZE(controls));
                if (ret != 0)
-                       dev_err(wm8994->codec.dev,
+                       dev_err(wm8994->codec->dev,
                                "Failed to add DRC mode controls: %d\n", ret);
 
                for (i = 0; i < WM8994_NUM_DRC; i++)
@@ -3775,62 +3770,10 @@ static void wm8994_handle_pdata(struct wm8994_priv *wm8994)
        if (pdata->num_retune_mobile_cfgs)
                wm8994_handle_retune_mobile_pdata(wm8994);
        else
-               snd_soc_add_controls(&wm8994->codec, wm8994_eq_controls,
+               snd_soc_add_controls(wm8994->codec, wm8994_eq_controls,
                                     ARRAY_SIZE(wm8994_eq_controls));
 }
 
-static int wm8994_probe(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
-
-       if (wm8994_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
-       }
-
-       socdev->card->codec = wm8994_codec;
-       codec = wm8994_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               return ret;
-       }
-
-       wm8994_handle_pdata(snd_soc_codec_get_drvdata(codec));
-
-       wm_hubs_add_analogue_controls(codec);
-       snd_soc_add_controls(codec, wm8994_snd_controls,
-                            ARRAY_SIZE(wm8994_snd_controls));
-       snd_soc_dapm_new_controls(codec, wm8994_dapm_widgets,
-                                 ARRAY_SIZE(wm8994_dapm_widgets));
-       wm_hubs_add_analogue_routes(codec, 0, 0);
-       snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon));
-
-       return 0;
-}
-
-static int wm8994_remove(struct platform_device *pdev)
-{
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
-       return 0;
-}
-
-struct snd_soc_codec_device soc_codec_dev_wm8994 = {
-       .probe =        wm8994_probe,
-       .remove =       wm8994_remove,
-       .suspend =      wm8994_suspend,
-       .resume =       wm8994_resume,
-};
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm8994);
-
 /**
  * wm8994_mic_detect - Enable microphone detection via the WM8994 IRQ
  *
@@ -3889,7 +3832,7 @@ EXPORT_SYMBOL_GPL(wm8994_mic_detect);
 static irqreturn_t wm8994_mic_irq(int irq, void *data)
 {
        struct wm8994_priv *priv = data;
-       struct snd_soc_codec *codec = &priv->codec;
+       struct snd_soc_codec *codec = priv->codec;
        int reg;
        int report;
 
@@ -3921,46 +3864,20 @@ static irqreturn_t wm8994_mic_irq(int irq, void *data)
        return IRQ_HANDLED;
 }
 
-static int wm8994_codec_probe(struct platform_device *pdev)
+static int wm8994_codec_probe(struct snd_soc_codec *codec)
 {
-       int ret;
        struct wm8994_priv *wm8994;
-       struct snd_soc_codec *codec;
-       int i;
+       int ret, i;
 
-       if (wm8994_codec) {
-               dev_err(&pdev->dev, "Another WM8994 is registered\n");
-               return -EINVAL;
-       }
+       codec->control_data = dev_get_drvdata(codec->dev->parent);
 
        wm8994 = kzalloc(sizeof(struct wm8994_priv), GFP_KERNEL);
-       if (!wm8994) {
-               dev_err(&pdev->dev, "Failed to allocate private data\n");
+       if (wm8994 == NULL)
                return -ENOMEM;
-       }
-
-       codec = &wm8994->codec;
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
        snd_soc_codec_set_drvdata(codec, wm8994);
-       codec->control_data = dev_get_drvdata(pdev->dev.parent);
-       codec->name = "WM8994";
-       codec->owner = THIS_MODULE;
-       codec->read = wm8994_read;
-       codec->write = wm8994_write;
-       codec->readable_register = wm8994_readable;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm8994_set_bias_level;
-       codec->dai = &wm8994_dai[0];
-       codec->num_dai = 3;
-       codec->reg_cache_size = WM8994_MAX_REGISTER;
-       codec->reg_cache = &wm8994->reg_cache;
-       codec->dev = &pdev->dev;
-
-       wm8994->pdata = pdev->dev.parent->platform_data;
+
+       wm8994->pdata = dev_get_platdata(codec->dev->parent);
+       wm8994->codec = codec;
 
        /* Fill the cache with physical values we inherited; don't reset */
        ret = wm8994_bulk_read(codec->control_data, 0,
@@ -3996,25 +3913,25 @@ static int wm8994_codec_probe(struct platform_device *pdev)
        ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_MIC1_DET,
                                 wm8994_mic_irq, "Mic 1 detect", wm8994);
        if (ret != 0)
-               dev_warn(&pdev->dev,
+               dev_warn(codec->dev,
                         "Failed to request Mic1 detect IRQ: %d\n", ret);
 
        ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_MIC1_SHRT,
                                 wm8994_mic_irq, "Mic 1 short", wm8994);
        if (ret != 0)
-               dev_warn(&pdev->dev,
+               dev_warn(codec->dev,
                         "Failed to request Mic1 short IRQ: %d\n", ret);
 
        ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_MIC2_DET,
                                 wm8994_mic_irq, "Mic 2 detect", wm8994);
        if (ret != 0)
-               dev_warn(&pdev->dev,
+               dev_warn(codec->dev,
                         "Failed to request Mic2 detect IRQ: %d\n", ret);
 
        ret = wm8994_request_irq(codec->control_data, WM8994_IRQ_MIC2_SHRT,
                                 wm8994_mic_irq, "Mic 2 short", wm8994);
        if (ret != 0)
-               dev_warn(&pdev->dev,
+               dev_warn(codec->dev,
                         "Failed to request Mic2 short IRQ: %d\n", ret);
 
        /* Remember if AIFnLRCLK is configured as a GPIO.  This should be
@@ -4045,13 +3962,8 @@ static int wm8994_codec_probe(struct platform_device *pdev)
                wm8994->lrclk_shared[1] = 0;
        }
 
-       for (i = 0; i < ARRAY_SIZE(wm8994_dai); i++)
-               wm8994_dai[i].dev = codec->dev;
-
        wm8994_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
-       wm8994_codec = codec;
-
        /* Latch volume updates (right only; we always do left then right). */
        snd_soc_update_bits(codec, WM8994_AIF1_DAC1_RIGHT_VOLUME,
                            WM8994_AIF1DAC1_VU, WM8994_AIF1DAC1_VU);
@@ -4088,24 +4000,18 @@ static int wm8994_codec_probe(struct platform_device *pdev)
 
        wm8994_update_class_w(codec);
 
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err_irq;
-       }
+       wm8994_handle_pdata(wm8994);
 
-       ret = snd_soc_register_dais(wm8994_dai, ARRAY_SIZE(wm8994_dai));
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAIs: %d\n", ret);
-               goto err_codec;
-       }
-
-       platform_set_drvdata(pdev, wm8994);
+       wm_hubs_add_analogue_controls(codec);
+       snd_soc_add_controls(codec, wm8994_snd_controls,
+                            ARRAY_SIZE(wm8994_snd_controls));
+       snd_soc_dapm_new_controls(codec, wm8994_dapm_widgets,
+                                 ARRAY_SIZE(wm8994_dapm_widgets));
+       wm_hubs_add_analogue_routes(codec, 0, 0);
+       snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon));
 
        return 0;
 
-err_codec:
-       snd_soc_unregister_codec(codec);
 err_irq:
        wm8994_free_irq(codec->control_data, WM8994_IRQ_MIC2_SHRT, wm8994);
        wm8994_free_irq(codec->control_data, WM8994_IRQ_MIC2_DET, wm8994);
@@ -4116,31 +4022,50 @@ err:
        return ret;
 }
 
-static int __devexit wm8994_codec_remove(struct platform_device *pdev)
+static int  wm8994_codec_remove(struct snd_soc_codec *codec)
 {
-       struct wm8994_priv *wm8994 = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = &wm8994->codec;
+       struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
 
        wm8994_set_bias_level(codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dais(wm8994_dai, ARRAY_SIZE(wm8994_dai));
-       snd_soc_unregister_codec(&wm8994->codec);
+
        wm8994_free_irq(codec->control_data, WM8994_IRQ_MIC2_SHRT, wm8994);
        wm8994_free_irq(codec->control_data, WM8994_IRQ_MIC2_DET, wm8994);
        wm8994_free_irq(codec->control_data, WM8994_IRQ_MIC1_SHRT, wm8994);
        wm8994_free_irq(codec->control_data, WM8994_IRQ_MIC1_DET, wm8994);
        kfree(wm8994);
-       wm8994_codec = NULL;
 
        return 0;
 }
 
+static struct snd_soc_codec_driver soc_codec_dev_wm8994 = {
+       .probe =        wm8994_codec_probe,
+       .remove =       wm8994_codec_remove,
+       .suspend =      wm8994_suspend,
+       .resume =       wm8994_resume,
+       .read = wm8994_read,
+       .write = wm8994_write,
+       .set_bias_level = wm8994_set_bias_level,
+};
+
+static int __devinit wm8994_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wm8994,
+                       wm8994_dai, ARRAY_SIZE(wm8994_dai));
+}
+
+static int __devexit wm8994_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
 static struct platform_driver wm8994_codec_driver = {
        .driver = {
                   .name = "wm8994-codec",
                   .owner = THIS_MODULE,
                   },
-       .probe = wm8994_codec_probe,
-       .remove = __devexit_p(wm8994_codec_remove),
+       .probe = wm8994_probe,
+       .remove = __devexit_p(wm8994_remove),
 };
 
 static __init int wm8994_init(void)
index 2e0ca67a8df7ad8f83c83c822190ae09d9395acf..d8dce260c430c31fa7544a63d5202a01aab10566 100644 (file)
@@ -11,9 +11,6 @@
 
 #include <sound/soc.h>
 
-extern struct snd_soc_codec_device soc_codec_dev_wm8994;
-extern struct snd_soc_dai wm8994_dai[];
-
 /* Sources for AIF1/2 SYSCLK - use with set_dai_sysclk() */
 #define WM8994_SYSCLK_MCLK1 1
 #define WM8994_SYSCLK_MCLK2 2
index 76b37ff6c264915c3c4fdc470ebdfe2c3ec1cc0a..00249d5b67934b7a2dfba99a0176398b06e30f83 100644 (file)
@@ -156,7 +156,8 @@ static struct {
 };
 
 struct wm9081_priv {
-       struct snd_soc_codec codec;
+       enum snd_soc_control_type control_type;
+       void *control_data;
        u16 reg_cache[WM9081_MAX_REGISTER + 1];
        int sysclk_source;
        int mclk_rate;
@@ -1212,8 +1213,8 @@ static struct snd_soc_dai_ops wm9081_dai_ops = {
 /* We report two channels because the CODEC processes a stereo signal, even
  * though it is only capable of handling a mono output.
  */
-struct snd_soc_dai wm9081_dai = {
-       .name = "WM9081",
+static struct snd_soc_dai_driver wm9081_dai = {
+       .name = "wm9081-hifi",
        .playback = {
                .stream_name = "HiFi Playback",
                .channels_min = 1,
@@ -1223,34 +1224,42 @@ struct snd_soc_dai wm9081_dai = {
        },
        .ops = &wm9081_dai_ops,
 };
-EXPORT_SYMBOL_GPL(wm9081_dai);
 
-
-static struct snd_soc_codec *wm9081_codec;
-
-static int wm9081_probe(struct platform_device *pdev)
+static int wm9081_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       struct wm9081_priv *wm9081;
-       int ret = 0;
+       struct wm9081_priv *wm9081 = snd_soc_codec_get_drvdata(codec);
+       int ret;
+       u16 reg;
 
-       if (wm9081_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
+       codec->control_data = wm9081->control_data;
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, wm9081->control_type);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
-       socdev->card->codec = wm9081_codec;
-       codec = wm9081_codec;
-       wm9081 = snd_soc_codec_get_drvdata(codec);
+       reg = snd_soc_read(codec, WM9081_SOFTWARE_RESET);
+       if (reg != 0x9081) {
+               dev_err(codec->dev, "Device is not a WM9081: ID=0x%x\n", reg);
+               ret = -EINVAL;
+               return ret;
+       }
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
+       ret = wm9081_reset(codec);
        if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
+               dev_err(codec->dev, "Failed to issue reset\n");
+               return ret;
        }
 
+       wm9081_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
+       /* Enable zero cross by default */
+       reg = snd_soc_read(codec, WM9081_ANALOGUE_LINEOUT);
+       snd_soc_write(codec, WM9081_ANALOGUE_LINEOUT, reg | WM9081_LINEOUTZC);
+       reg = snd_soc_read(codec, WM9081_ANALOGUE_SPEAKER_PGA);
+       snd_soc_write(codec, WM9081_ANALOGUE_SPEAKER_PGA,
+                    reg | WM9081_SPKPGAZC);
+
        snd_soc_add_controls(codec, wm9081_snd_controls,
                             ARRAY_SIZE(wm9081_snd_controls));
        if (!wm9081->retune) {
@@ -1265,40 +1274,28 @@ static int wm9081_probe(struct platform_device *pdev)
        snd_soc_dapm_add_routes(codec, audio_paths, ARRAY_SIZE(audio_paths));
 
        return ret;
-
-pcm_err:
-       return ret;
 }
 
-static int wm9081_remove(struct platform_device *pdev)
+static int wm9081_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
-
+       wm9081_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
 #ifdef CONFIG_PM
-static int wm9081_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm9081_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm9081_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm9081_resume(struct platform_device *pdev)
+static int wm9081_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        u16 *reg_cache = codec->reg_cache;
        int i;
 
-       for (i = 0; i < codec->reg_cache_size; i++) {
+       for (i = 0; i < codec->driver->reg_cache_size; i++) {
                if (i == WM9081_SOFTWARE_RESET)
                        continue;
 
@@ -1314,133 +1311,43 @@ static int wm9081_resume(struct platform_device *pdev)
 #define wm9081_resume NULL
 #endif
 
-struct snd_soc_codec_device soc_codec_dev_wm9081 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm9081 = {
        .probe =        wm9081_probe,
        .remove =       wm9081_remove,
        .suspend =      wm9081_suspend,
        .resume =       wm9081_resume,
+       .set_bias_level = wm9081_set_bias_level,
+       .reg_cache_size = sizeof(wm9081_reg_defaults),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm9081_reg_defaults,
+       .volatile_register = wm9081_volatile_register,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm9081);
-
-static int wm9081_register(struct wm9081_priv *wm9081,
-                          enum snd_soc_control_type control)
-{
-       struct snd_soc_codec *codec = &wm9081->codec;
-       int ret;
-       u16 reg;
-
-       if (wm9081_codec) {
-               dev_err(codec->dev, "Another WM9081 is registered\n");
-               ret = -EINVAL;
-               goto err;
-       }
-
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       snd_soc_codec_set_drvdata(codec, wm9081);
-       codec->name = "WM9081";
-       codec->owner = THIS_MODULE;
-       codec->dai = &wm9081_dai;
-       codec->num_dai = 1;
-       codec->reg_cache_size = ARRAY_SIZE(wm9081->reg_cache);
-       codec->reg_cache = &wm9081->reg_cache;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm9081_set_bias_level;
-       codec->volatile_register = wm9081_volatile_register;
-
-       memcpy(codec->reg_cache, wm9081_reg_defaults,
-              sizeof(wm9081_reg_defaults));
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, control);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
-       reg = snd_soc_read(codec, WM9081_SOFTWARE_RESET);
-       if (reg != 0x9081) {
-               dev_err(codec->dev, "Device is not a WM9081: ID=0x%x\n", reg);
-               ret = -EINVAL;
-               goto err;
-       }
-
-       ret = wm9081_reset(codec);
-       if (ret < 0) {
-               dev_err(codec->dev, "Failed to issue reset\n");
-               goto err;
-       }
-
-       wm9081_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
-       /* Enable zero cross by default */
-       reg = snd_soc_read(codec, WM9081_ANALOGUE_LINEOUT);
-       snd_soc_write(codec, WM9081_ANALOGUE_LINEOUT, reg | WM9081_LINEOUTZC);
-       reg = snd_soc_read(codec, WM9081_ANALOGUE_SPEAKER_PGA);
-       snd_soc_write(codec, WM9081_ANALOGUE_SPEAKER_PGA,
-                    reg | WM9081_SPKPGAZC);
-
-       wm9081_dai.dev = codec->dev;
-
-       wm9081_codec = codec;
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register codec: %d\n", ret);
-               goto err;
-       }
-
-       ret = snd_soc_register_dai(&wm9081_dai);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to register DAI: %d\n", ret);
-               goto err_codec;
-       }
-
-       return 0;
-
-err_codec:
-       snd_soc_unregister_codec(codec);
-err:
-       kfree(wm9081);
-       return ret;
-}
-
-static void wm9081_unregister(struct wm9081_priv *wm9081)
-{
-       wm9081_set_bias_level(&wm9081->codec, SND_SOC_BIAS_OFF);
-       snd_soc_unregister_dai(&wm9081_dai);
-       snd_soc_unregister_codec(&wm9081->codec);
-       kfree(wm9081);
-       wm9081_codec = NULL;
-}
 
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
 static __devinit int wm9081_i2c_probe(struct i2c_client *i2c,
                                      const struct i2c_device_id *id)
 {
        struct wm9081_priv *wm9081;
-       struct snd_soc_codec *codec;
+       int ret;
 
        wm9081 = kzalloc(sizeof(struct wm9081_priv), GFP_KERNEL);
        if (wm9081 == NULL)
                return -ENOMEM;
 
-       codec = &wm9081->codec;
-       codec->hw_write = (hw_write_t)i2c_master_send;
-       wm9081->retune = i2c->dev.platform_data;
-
        i2c_set_clientdata(i2c, wm9081);
-       codec->control_data = i2c;
-
-       codec->dev = &i2c->dev;
+       wm9081->control_data = i2c;
 
-       return wm9081_register(wm9081, SND_SOC_I2C);
+       ret = snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm9081, &wm9081_dai, 1);
+       if (ret < 0)
+               kfree(wm9081);
+       return ret;
 }
 
 static __devexit int wm9081_i2c_remove(struct i2c_client *client)
 {
-       struct wm9081_priv *wm9081 = i2c_get_clientdata(client);
-       wm9081_unregister(wm9081);
+       snd_soc_unregister_codec(&client->dev);
+       kfree(i2c_get_clientdata(client));
        return 0;
 }
 
@@ -1452,31 +1359,34 @@ MODULE_DEVICE_TABLE(i2c, wm9081_i2c_id);
 
 static struct i2c_driver wm9081_i2c_driver = {
        .driver = {
-               .name = "wm9081",
+               .name = "wm9081-codec",
                .owner = THIS_MODULE,
        },
        .probe =    wm9081_i2c_probe,
        .remove =   __devexit_p(wm9081_i2c_remove),
        .id_table = wm9081_i2c_id,
 };
+#endif
 
 static int __init wm9081_modinit(void)
 {
-       int ret;
-
+       int ret = 0;
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        ret = i2c_add_driver(&wm9081_i2c_driver);
        if (ret != 0) {
                printk(KERN_ERR "Failed to register WM9081 I2C driver: %d\n",
                       ret);
        }
-
+#endif
        return ret;
 }
 module_init(wm9081_modinit);
 
 static void __exit wm9081_exit(void)
 {
+#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
        i2c_del_driver(&wm9081_i2c_driver);
+#endif
 }
 module_exit(wm9081_exit);
 
index 42d3bc757021f554b1f94f44b02e01f4d4496142..871cccb066dcbeba2f6b83a265ffaed86135e19f 100644 (file)
@@ -15,9 +15,6 @@
 
 #include <sound/soc.h>
 
-extern struct snd_soc_dai wm9081_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm9081;
-
 /*
  * SYSCLK sources
  */
index 1592250daec0ff0eda0896536d2a8d1234951b17..7a1825418ee49a47d0d4bcbbb8ce8b28d298b143 100644 (file)
@@ -34,8 +34,6 @@
 
 #include "wm9090.h"
 
-static struct snd_soc_codec *wm9090_codec;
-
 static const u16 wm9090_reg_defaults[] = {
        0x9093,     /* R0   - Software Reset */
        0x0006,     /* R1   - Power Management (1) */
@@ -142,15 +140,10 @@ static const u16 wm9090_reg_defaults[] = {
 
 /* This struct is used to save the context */
 struct wm9090_priv {
-       /* We're not really registering as a CODEC since ASoC core
-        * does not yet support multiple CODECs but having the CODEC
-        * structure means we can reuse some of the ASoC core
-        * features.
-        */
-       struct snd_soc_codec codec;
        struct mutex mutex;
        u16 reg_cache[WM9090_MAX_REGISTER + 1];
        struct wm9090_platform_data pdata;
+       void *control_data;
 };
 
 static int wm9090_volatile(unsigned int reg)
@@ -523,7 +516,7 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec,
        case SND_SOC_BIAS_STANDBY:
                if (codec->bias_level == SND_SOC_BIAS_OFF) {
                        /* Restore the register cache */
-                       for (i = 1; i < codec->reg_cache_size; i++) {
+                       for (i = 1; i < codec->driver->reg_cache_size; i++) {
                                if (reg_cache[i] == wm9090_reg_defaults[i])
                                        continue;
                                if (wm9090_volatile(i))
@@ -556,51 +549,67 @@ static int wm9090_set_bias_level(struct snd_soc_codec *codec,
        return 0;
 }
 
-static int wm9090_probe(struct platform_device *pdev)
+static int wm9090_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
-       int ret = 0;
+       struct wm9090_priv *wm9090 = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       if (wm9090_codec == NULL) {
-               dev_err(&pdev->dev, "Codec device not registered\n");
-               return -ENODEV;
+       codec->control_data = wm9090->control_data;
+       ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
+       if (ret != 0) {
+               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+               return ret;
        }
 
-       socdev->card->codec = wm9090_codec;
-       codec = wm9090_codec;
-
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0) {
-               dev_err(codec->dev, "failed to create pcms: %d\n", ret);
-               goto pcm_err;
+       ret = snd_soc_read(codec, WM9090_SOFTWARE_RESET);
+       if (ret < 0)
+               return ret;
+       if (ret != wm9090_reg_defaults[WM9090_SOFTWARE_RESET]) {
+               dev_err(codec->dev, "Device is not a WM9090, ID=%x\n", ret);
+               return -EINVAL;
        }
 
+       ret = snd_soc_write(codec, WM9090_SOFTWARE_RESET, 0);
+       if (ret < 0)
+               return ret;
+
+       /* Configure some defaults; they will be written out when we
+        * bring the bias up.
+        */
+       wm9090->reg_cache[WM9090_IN1_LINE_INPUT_A_VOLUME] |= WM9090_IN1_VU
+               | WM9090_IN1A_ZC;
+       wm9090->reg_cache[WM9090_IN1_LINE_INPUT_B_VOLUME] |= WM9090_IN1_VU
+               | WM9090_IN1B_ZC;
+       wm9090->reg_cache[WM9090_IN2_LINE_INPUT_A_VOLUME] |= WM9090_IN2_VU
+               | WM9090_IN2A_ZC;
+       wm9090->reg_cache[WM9090_IN2_LINE_INPUT_B_VOLUME] |= WM9090_IN2_VU
+               | WM9090_IN2B_ZC;
+       wm9090->reg_cache[WM9090_SPEAKER_VOLUME_LEFT] |=
+               WM9090_SPKOUT_VU | WM9090_SPKOUTL_ZC;
+       wm9090->reg_cache[WM9090_LEFT_OUTPUT_VOLUME] |=
+               WM9090_HPOUT1_VU | WM9090_HPOUT1L_ZC;
+       wm9090->reg_cache[WM9090_RIGHT_OUTPUT_VOLUME] |=
+               WM9090_HPOUT1_VU | WM9090_HPOUT1R_ZC;
+
+       wm9090->reg_cache[WM9090_CLOCKING_1] |= WM9090_TOCLK_ENA;
+
+       wm9090_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
        wm9090_add_controls(codec);
 
        return 0;
-
-pcm_err:
-       return ret;
 }
 
 #ifdef CONFIG_PM
-static int wm9090_suspend(struct platform_device *pdev, pm_message_t state)
+static int wm9090_suspend(struct snd_soc_codec *codec, pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm9090_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-static int wm9090_resume(struct platform_device *pdev)
+static int wm9090_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm9090_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
 
        return 0;
@@ -610,29 +619,29 @@ static int wm9090_resume(struct platform_device *pdev)
 #define wm9090_resume NULL
 #endif
 
-static int wm9090_remove(struct platform_device *pdev)
+static int wm9090_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-
-       snd_soc_free_pcms(socdev);
-       snd_soc_dapm_free(socdev);
+       wm9090_set_bias_level(codec, SND_SOC_BIAS_OFF);
 
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm9090 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm9090 = {
        .probe =        wm9090_probe,
        .remove =       wm9090_remove,
        .suspend =      wm9090_suspend,
        .resume =       wm9090_resume,
+       .set_bias_level = wm9090_set_bias_level,
+       .reg_cache_size = (WM9090_MAX_REGISTER + 1),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_default = wm9090_reg_defaults,
+       .volatile_register = wm9090_volatile,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm9090);
 
 static int wm9090_i2c_probe(struct i2c_client *i2c,
                            const struct i2c_device_id *id)
 {
        struct wm9090_priv *wm9090;
-       struct snd_soc_codec *codec;
        int ret;
 
        wm9090 = kzalloc(sizeof(*wm9090), GFP_KERNEL);
@@ -640,102 +649,28 @@ static int wm9090_i2c_probe(struct i2c_client *i2c,
                dev_err(&i2c->dev, "Can not allocate memory\n");
                return -ENOMEM;
        }
-       codec = &wm9090->codec;
 
        if (i2c->dev.platform_data)
                memcpy(&wm9090->pdata, i2c->dev.platform_data,
                       sizeof(wm9090->pdata));
 
-       wm9090_codec = codec;
-
        i2c_set_clientdata(i2c, wm9090);
+       wm9090->control_data = i2c;
+       mutex_init(&wm9090->mutex);
 
-       mutex_init(&codec->mutex);
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
-       codec->control_data = i2c;
-       snd_soc_codec_set_drvdata(codec, wm9090);
-       codec->dev = &i2c->dev;
-       codec->name = "WM9090";
-       codec->owner = THIS_MODULE;
-       codec->bias_level = SND_SOC_BIAS_OFF;
-       codec->set_bias_level = wm9090_set_bias_level,
-       codec->reg_cache_size = WM9090_MAX_REGISTER + 1;
-       codec->reg_cache = &wm9090->reg_cache;
-       codec->volatile_register = wm9090_volatile;
-
-       ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
-       if (ret != 0) {
-               dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
-               goto err;
-       }
-
-       memcpy(&wm9090->reg_cache, wm9090_reg_defaults,
-              sizeof(wm9090->reg_cache));
-
-       ret = snd_soc_read(codec, WM9090_SOFTWARE_RESET);
-       if (ret < 0)
-               goto err;
-       if (ret != wm9090_reg_defaults[WM9090_SOFTWARE_RESET]) {
-               dev_err(&i2c->dev, "Device is not a WM9090, ID=%x\n", ret);
-               ret = -EINVAL;
-               goto err;
-       }
-
-       ret = snd_soc_write(codec, WM9090_SOFTWARE_RESET, 0);
+       ret =  snd_soc_register_codec(&i2c->dev,
+                       &soc_codec_dev_wm9090,  NULL, 0);
        if (ret < 0)
-               goto err;
-
-       /* Configure some defaults; they will be written out when we
-        * bring the bias up.
-        */
-       wm9090->reg_cache[WM9090_IN1_LINE_INPUT_A_VOLUME] |= WM9090_IN1_VU
-               | WM9090_IN1A_ZC;
-       wm9090->reg_cache[WM9090_IN1_LINE_INPUT_B_VOLUME] |= WM9090_IN1_VU
-               | WM9090_IN1B_ZC;
-       wm9090->reg_cache[WM9090_IN2_LINE_INPUT_A_VOLUME] |= WM9090_IN2_VU
-               | WM9090_IN2A_ZC;
-       wm9090->reg_cache[WM9090_IN2_LINE_INPUT_B_VOLUME] |= WM9090_IN2_VU
-               | WM9090_IN2B_ZC;
-       wm9090->reg_cache[WM9090_SPEAKER_VOLUME_LEFT] |=
-               WM9090_SPKOUT_VU | WM9090_SPKOUTL_ZC;
-       wm9090->reg_cache[WM9090_LEFT_OUTPUT_VOLUME] |= 
-               WM9090_HPOUT1_VU | WM9090_HPOUT1L_ZC;
-       wm9090->reg_cache[WM9090_RIGHT_OUTPUT_VOLUME] |=
-               WM9090_HPOUT1_VU | WM9090_HPOUT1R_ZC;
-
-       wm9090->reg_cache[WM9090_CLOCKING_1] |= WM9090_TOCLK_ENA;
-
-       wm9090_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
-
-       ret = snd_soc_register_codec(codec);
-       if (ret != 0) {
-               dev_err(&i2c->dev, "Failed to register CODEC: %d\n", ret);
-               goto err_bias;
-       }
-
-       return 0;
-
-err_bias:
-       wm9090_set_bias_level(codec, SND_SOC_BIAS_OFF);
-err:
-       kfree(wm9090);
-       i2c_set_clientdata(i2c, NULL);
-       wm9090_codec = NULL;
-
+               kfree(wm9090);
        return ret;
 }
 
 static int wm9090_i2c_remove(struct i2c_client *i2c)
 {
        struct wm9090_priv *wm9090 = i2c_get_clientdata(i2c);
-       struct snd_soc_codec *codec = &wm9090->codec;
 
-       snd_soc_unregister_codec(codec);
-       wm9090_set_bias_level(codec, SND_SOC_BIAS_OFF);
+       snd_soc_unregister_codec(&i2c->dev);
        kfree(wm9090);
-       wm9090_codec = NULL;
 
        return 0;
 }
@@ -748,7 +683,7 @@ MODULE_DEVICE_TABLE(i2c, wm9090_id);
 
 static struct i2c_driver wm9090_i2c_driver = {
        .driver = {
-               .name = "wm9090",
+               .name = "wm9090-codec",
                .owner = THIS_MODULE,
        },
        .probe = wm9090_i2c_probe,
index b08eab932a5b795ed037f7dac8843f88fa2eb172..29b9d9fc70b4cc20501d2529cfcbcc6c949dffdb 100644 (file)
@@ -23,8 +23,6 @@
 #ifndef __WM9090_H
 #define __WM9090_H
 
-extern struct snd_soc_codec_device soc_codec_dev_wm9090;
-
 /*
  * Register values.
  */
index 8793341849d1bafdc2e13f1c7564bd655cf440fe..e4d8f5339c51e2ad5cc887fdcfe3e3d8a884be79 100644 (file)
@@ -248,8 +248,7 @@ static int ac97_prepare(struct snd_pcm_substream *substream,
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        int reg;
        u16 vra;
 
@@ -273,9 +272,9 @@ static struct snd_soc_dai_ops wm9705_dai_ops = {
        .prepare        = ac97_prepare,
 };
 
-struct snd_soc_dai wm9705_dai[] = {
+static struct snd_soc_dai_driver wm9705_dai[] = {
        {
-               .name = "AC97 HiFi",
+               .name = "wm9705-hifi",
                .ac97_control = 1,
                .playback = {
                        .stream_name = "HiFi Playback",
@@ -294,7 +293,7 @@ struct snd_soc_dai wm9705_dai[] = {
                .ops = &wm9705_dai_ops,
        },
        {
-               .name = "AC97 Aux",
+               .name = "wm9705-aux",
                .playback = {
                        .stream_name = "Aux Playback",
                        .channels_min = 1,
@@ -304,7 +303,6 @@ struct snd_soc_dai wm9705_dai[] = {
                },
        }
 };
-EXPORT_SYMBOL_GPL(wm9705_dai);
 
 static int wm9705_reset(struct snd_soc_codec *codec)
 {
@@ -318,20 +316,15 @@ static int wm9705_reset(struct snd_soc_codec *codec)
 }
 
 #ifdef CONFIG_PM
-static int wm9705_soc_suspend(struct platform_device *pdev, pm_message_t msg)
+static int wm9705_soc_suspend(struct snd_soc_codec *codec, pm_message_t msg)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        soc_ac97_ops.write(codec->ac97, AC97_POWERDOWN, 0xffff);
 
        return 0;
 }
 
-static int wm9705_soc_resume(struct platform_device *pdev)
+static int wm9705_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i, ret;
        u16 *cache = codec->reg_cache;
 
@@ -352,49 +345,18 @@ static int wm9705_soc_resume(struct platform_device *pdev)
 #define wm9705_soc_resume NULL
 #endif
 
-static int wm9705_soc_probe(struct platform_device *pdev)
+static int wm9705_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
        int ret = 0;
 
        printk(KERN_INFO "WM9705 SoC Audio Codec\n");
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec),
-                                     GFP_KERNEL);
-       if (socdev->card->codec == NULL)
-               return -ENOMEM;
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->reg_cache = kmemdup(wm9705_reg, sizeof(wm9705_reg), GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto cache_err;
-       }
-       codec->reg_cache_size = sizeof(wm9705_reg);
-       codec->reg_cache_step = 2;
-
-       codec->name = "WM9705";
-       codec->owner = THIS_MODULE;
-       codec->dai = wm9705_dai;
-       codec->num_dai = ARRAY_SIZE(wm9705_dai);
-       codec->write = ac97_write;
-       codec->read = ac97_read;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
        ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
        if (ret < 0) {
                printk(KERN_ERR "wm9705: failed to register AC97 codec\n");
-               goto codec_err;
+               return ret;
        }
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto pcm_err;
-
        ret = wm9705_reset(codec);
        if (ret)
                goto reset_err;
@@ -406,40 +368,62 @@ static int wm9705_soc_probe(struct platform_device *pdev)
        return 0;
 
 reset_err:
-       snd_soc_free_pcms(socdev);
-pcm_err:
        snd_soc_free_ac97_codec(codec);
-codec_err:
-       kfree(codec->reg_cache);
-cache_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
        return ret;
 }
 
-static int wm9705_soc_remove(struct platform_device *pdev)
+static int wm9705_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec == NULL)
-               return 0;
-
-       snd_soc_dapm_free(socdev);
-       snd_soc_free_pcms(socdev);
        snd_soc_free_ac97_codec(codec);
-       kfree(codec->reg_cache);
-       kfree(codec);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm9705 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm9705 = {
        .probe =        wm9705_soc_probe,
        .remove =       wm9705_soc_remove,
        .suspend =      wm9705_soc_suspend,
        .resume =       wm9705_soc_resume,
+       .read = ac97_read,
+       .write = ac97_write,
+       .reg_cache_size = sizeof(wm9705_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_step = 2,
+       .reg_cache_default = wm9705_reg,
+};
+
+static __devinit int wm9705_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_wm9705, wm9705_dai, ARRAY_SIZE(wm9705_dai));
+}
+
+static int __devexit wm9705_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver wm9705_codec_driver = {
+       .driver = {
+                       .name = "wm9705-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = wm9705_probe,
+       .remove = __devexit_p(wm9705_remove),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm9705);
+
+static int __init wm9705_init(void)
+{
+       return platform_driver_register(&wm9705_codec_driver);
+}
+module_init(wm9705_init);
+
+static void __exit wm9705_exit(void)
+{
+       platform_driver_unregister(&wm9705_codec_driver);
+}
+module_exit(wm9705_exit);
 
 MODULE_DESCRIPTION("ASoC WM9705 driver");
 MODULE_AUTHOR("Ian Molton");
index d380f110f9e29c311f4ecbe83986fa6750ccb03b..23ea9ce473593b09e1ad753d271dc55f732c73df 100644 (file)
@@ -8,7 +8,4 @@
 #define WM9705_DAI_AC97_HIFI   0
 #define WM9705_DAI_AC97_AUX    1
 
-extern struct snd_soc_dai wm9705_dai[2];
-extern struct snd_soc_codec_device soc_codec_dev_wm9705;
-
 #endif
index 28790a2ffe8dab5c5663059bebadf4a491b3fdc2..f8f37ae3091045dc60856ce1ff11d5571988a1f8 100644 (file)
@@ -478,8 +478,7 @@ static int ac97_prepare(struct snd_pcm_substream *substream,
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec =rtd->codec;
        int reg;
        u16 vra;
 
@@ -499,8 +498,7 @@ static int ac97_aux_prepare(struct snd_pcm_substream *substream,
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_codec *codec = socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
        u16 vra, xsle;
 
        vra = ac97_read(codec, AC97_EXTENDED_STATUS);
@@ -526,9 +524,9 @@ static struct snd_soc_dai_ops wm9712_dai_ops_aux = {
        .prepare        = ac97_aux_prepare,
 };
 
-struct snd_soc_dai wm9712_dai[] = {
+struct snd_soc_dai_driver wm9712_dai[] = {
 {
-       .name = "AC97 HiFi",
+       .name = "wm9712-hifi",
        .ac97_control = 1,
        .playback = {
                .stream_name = "HiFi Playback",
@@ -545,7 +543,7 @@ struct snd_soc_dai wm9712_dai[] = {
        .ops = &wm9712_dai_ops_hifi,
 },
 {
-       .name = "AC97 Aux",
+       .name = "wm9712-aux",
        .playback = {
                .stream_name = "Aux Playback",
                .channels_min = 1,
@@ -555,7 +553,6 @@ struct snd_soc_dai wm9712_dai[] = {
        .ops = &wm9712_dai_ops_aux,
 }
 };
-EXPORT_SYMBOL_GPL(wm9712_dai);
 
 static int wm9712_set_bias_level(struct snd_soc_codec *codec,
                                 enum snd_soc_bias_level level)
@@ -597,20 +594,15 @@ err:
        return -EIO;
 }
 
-static int wm9712_soc_suspend(struct platform_device *pdev,
+static int wm9712_soc_suspend(struct snd_soc_codec *codec,
        pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
        wm9712_set_bias_level(codec, SND_SOC_BIAS_OFF);
        return 0;
 }
 
-static int wm9712_soc_resume(struct platform_device *pdev)
+static int wm9712_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        int i, ret;
        u16 *cache = codec->reg_cache;
 
@@ -635,51 +627,18 @@ static int wm9712_soc_resume(struct platform_device *pdev)
        return ret;
 }
 
-static int wm9712_soc_probe(struct platform_device *pdev)
+static int wm9712_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
        int ret = 0;
 
        printk(KERN_INFO "WM9711/WM9712 SoC Audio Codec %s\n", WM9712_VERSION);
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec),
-                                     GFP_KERNEL);
-       if (socdev->card->codec == NULL)
-               return -ENOMEM;
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->reg_cache = kmemdup(wm9712_reg, sizeof(wm9712_reg), GFP_KERNEL);
-
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto cache_err;
-       }
-       codec->reg_cache_size = sizeof(wm9712_reg);
-       codec->reg_cache_step = 2;
-
-       codec->name = "WM9712";
-       codec->owner = THIS_MODULE;
-       codec->dai = wm9712_dai;
-       codec->num_dai = ARRAY_SIZE(wm9712_dai);
-       codec->write = ac97_write;
-       codec->read = ac97_read;
-       codec->set_bias_level = wm9712_set_bias_level;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
-
        ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
        if (ret < 0) {
                printk(KERN_ERR "wm9712: failed to register AC97 codec\n");
-               goto codec_err;
+               return ret;
        }
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto pcm_err;
-
        ret = wm9712_reset(codec, 0);
        if (ret < 0) {
                printk(KERN_ERR "Failed to reset WM9712: AC97 link error\n");
@@ -697,42 +656,63 @@ static int wm9712_soc_probe(struct platform_device *pdev)
        return 0;
 
 reset_err:
-       snd_soc_free_pcms(socdev);
-pcm_err:
        snd_soc_free_ac97_codec(codec);
-
-codec_err:
-       kfree(codec->reg_cache);
-
-cache_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
        return ret;
 }
 
-static int wm9712_soc_remove(struct platform_device *pdev)
+static int wm9712_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec == NULL)
-               return 0;
-
-       snd_soc_dapm_free(socdev);
-       snd_soc_free_pcms(socdev);
        snd_soc_free_ac97_codec(codec);
-       kfree(codec->reg_cache);
-       kfree(codec);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm9712 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm9712 = {
        .probe =        wm9712_soc_probe,
        .remove =       wm9712_soc_remove,
        .suspend =      wm9712_soc_suspend,
        .resume =       wm9712_soc_resume,
+       .read = ac97_read,
+       .write = ac97_write,
+       .set_bias_level = wm9712_set_bias_level,
+       .reg_cache_size = sizeof(wm9712_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_step = 2,
+       .reg_cache_default = wm9712_reg,
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm9712);
+
+static __devinit int wm9712_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_wm9712, wm9712_dai, ARRAY_SIZE(wm9712_dai));
+}
+
+static int __devexit wm9712_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver wm9712_codec_driver = {
+       .driver = {
+                       .name = "wm9712-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = wm9712_probe,
+       .remove = __devexit_p(wm9712_remove),
+};
+
+static int __init wm9712_init(void)
+{
+       return platform_driver_register(&wm9712_codec_driver);
+}
+module_init(wm9712_init);
+
+static void __exit wm9712_exit(void)
+{
+       platform_driver_unregister(&wm9712_codec_driver);
+}
+module_exit(wm9712_exit);
 
 MODULE_DESCRIPTION("ASoC WM9711/WM9712 driver");
 MODULE_AUTHOR("Liam Girdwood");
index d29e8a18ca6d2abc6aa67d1c717f571978703a82..fb69c3aa4ed01d1f554c1f27b8267d5a0806be24 100644 (file)
@@ -8,7 +8,4 @@
 #define WM9712_DAI_AC97_HIFI   0
 #define WM9712_DAI_AC97_AUX            1
 
-extern struct snd_soc_dai wm9712_dai[2];
-extern struct snd_soc_codec_device soc_codec_dev_wm9712;
-
 #endif
index 34e0c91092fa1f2cd7e03c0905a0b30fd404250c..463917e762b5d3453d443c9eda7c71db50acee94 100644 (file)
@@ -1057,9 +1057,9 @@ static struct snd_soc_dai_ops wm9713_dai_ops_voice = {
        .set_tristate   = wm9713_set_dai_tristate,
 };
 
-struct snd_soc_dai wm9713_dai[] = {
+static struct snd_soc_dai_driver wm9713_dai[] = {
 {
-       .name = "AC97 HiFi",
+       .name = "wm9713-hifi",
        .ac97_control = 1,
        .playback = {
                .stream_name = "HiFi Playback",
@@ -1076,7 +1076,7 @@ struct snd_soc_dai wm9713_dai[] = {
        .ops = &wm9713_dai_ops_hifi,
        },
        {
-       .name = "AC97 Aux",
+       .name = "wm9713-aux",
        .playback = {
                .stream_name = "Aux Playback",
                .channels_min = 1,
@@ -1086,7 +1086,7 @@ struct snd_soc_dai wm9713_dai[] = {
        .ops = &wm9713_dai_ops_aux,
        },
        {
-       .name = "WM9713 Voice",
+       .name = "wm9713-voice",
        .playback = {
                .stream_name = "Voice Playback",
                .channels_min = 1,
@@ -1103,7 +1103,6 @@ struct snd_soc_dai wm9713_dai[] = {
        .symmetric_rates = 1,
        },
 };
-EXPORT_SYMBOL_GPL(wm9713_dai);
 
 int wm9713_reset(struct snd_soc_codec *codec, int try_warm)
 {
@@ -1152,11 +1151,9 @@ static int wm9713_set_bias_level(struct snd_soc_codec *codec,
        return 0;
 }
 
-static int wm9713_soc_suspend(struct platform_device *pdev,
+static int wm9713_soc_suspend(struct snd_soc_codec *codec,
        pm_message_t state)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        u16 reg;
 
        /* Disable everything except touchpanel - that will be handled
@@ -1171,10 +1168,8 @@ static int wm9713_soc_suspend(struct platform_device *pdev,
        return 0;
 }
 
-static int wm9713_soc_resume(struct platform_device *pdev)
+static int wm9713_soc_resume(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct wm9713_priv *wm9713 = snd_soc_codec_get_drvdata(codec);
        int i, ret;
        u16 *cache = codec->reg_cache;
@@ -1204,53 +1199,20 @@ static int wm9713_soc_resume(struct platform_device *pdev)
        return ret;
 }
 
-static int wm9713_soc_probe(struct platform_device *pdev)
+static int wm9713_soc_probe(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec;
+       struct wm9713_priv *wm9713;
        int ret = 0, reg;
 
-       socdev->card->codec = kzalloc(sizeof(struct snd_soc_codec),
-                                     GFP_KERNEL);
-       if (socdev->card->codec == NULL)
+       wm9713 = kzalloc(sizeof(struct wm9713_priv), GFP_KERNEL);
+       if (wm9713 == NULL)
                return -ENOMEM;
-       codec = socdev->card->codec;
-       mutex_init(&codec->mutex);
-
-       codec->reg_cache = kmemdup(wm9713_reg, sizeof(wm9713_reg), GFP_KERNEL);
-       if (codec->reg_cache == NULL) {
-               ret = -ENOMEM;
-               goto cache_err;
-       }
-       codec->reg_cache_size = sizeof(wm9713_reg);
-       codec->reg_cache_step = 2;
-
-       snd_soc_codec_set_drvdata(codec, kzalloc(sizeof(struct wm9713_priv),
-                                                GFP_KERNEL));
-       if (snd_soc_codec_get_drvdata(codec) == NULL) {
-               ret = -ENOMEM;
-               goto priv_err;
-       }
-
-       codec->name = "WM9713";
-       codec->owner = THIS_MODULE;
-       codec->dai = wm9713_dai;
-       codec->num_dai = ARRAY_SIZE(wm9713_dai);
-       codec->write = ac97_write;
-       codec->read = ac97_read;
-       codec->set_bias_level = wm9713_set_bias_level;
-       INIT_LIST_HEAD(&codec->dapm_widgets);
-       INIT_LIST_HEAD(&codec->dapm_paths);
+       snd_soc_codec_set_drvdata(codec, wm9713);
 
        ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
        if (ret < 0)
                goto codec_err;
 
-       /* register pcms */
-       ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-       if (ret < 0)
-               goto pcm_err;
-
        /* do a cold reset for the controller and then try
         * a warm reset followed by an optional cold reset for codec */
        wm9713_reset(codec, 0);
@@ -1273,46 +1235,67 @@ static int wm9713_soc_probe(struct platform_device *pdev)
        return 0;
 
 reset_err:
-       snd_soc_free_pcms(socdev);
-pcm_err:
        snd_soc_free_ac97_codec(codec);
-
 codec_err:
-       kfree(snd_soc_codec_get_drvdata(codec));
-
-priv_err:
-       kfree(codec->reg_cache);
-
-cache_err:
-       kfree(socdev->card->codec);
-       socdev->card->codec = NULL;
+       kfree(wm9713);
        return ret;
 }
 
-static int wm9713_soc_remove(struct platform_device *pdev)
+static int wm9713_soc_remove(struct snd_soc_codec *codec)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       if (codec == NULL)
-               return 0;
-
-       snd_soc_dapm_free(socdev);
-       snd_soc_free_pcms(socdev);
+       struct wm9713_priv *wm9713 = snd_soc_codec_get_drvdata(codec);
        snd_soc_free_ac97_codec(codec);
-       kfree(snd_soc_codec_get_drvdata(codec));
-       kfree(codec->reg_cache);
-       kfree(codec);
+       kfree(wm9713);
        return 0;
 }
 
-struct snd_soc_codec_device soc_codec_dev_wm9713 = {
+static struct snd_soc_codec_driver soc_codec_dev_wm9713 = {
        .probe =        wm9713_soc_probe,
        .remove =       wm9713_soc_remove,
        .suspend =      wm9713_soc_suspend,
        .resume =       wm9713_soc_resume,
+       .read = ac97_read,
+       .write = ac97_write,
+       .set_bias_level = wm9713_set_bias_level,
+       .reg_cache_size = sizeof(wm9713_reg),
+       .reg_word_size = sizeof(u16),
+       .reg_cache_step = 2,
+       .reg_cache_default = wm9713_reg,
+};
+
+static __devinit int wm9713_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_codec(&pdev->dev,
+                       &soc_codec_dev_wm9713, wm9713_dai, ARRAY_SIZE(wm9713_dai));
+}
+
+static int __devexit wm9713_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_codec(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver wm9713_codec_driver = {
+       .driver = {
+                       .name = "wm9713-codec",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = wm9713_probe,
+       .remove = __devexit_p(wm9713_remove),
 };
-EXPORT_SYMBOL_GPL(soc_codec_dev_wm9713);
+
+static int __init wm9713_init(void)
+{
+       return platform_driver_register(&wm9713_codec_driver);
+}
+module_init(wm9713_init);
+
+static void __exit wm9713_exit(void)
+{
+       platform_driver_unregister(&wm9713_codec_driver);
+}
+module_exit(wm9713_exit);
 
 MODULE_DESCRIPTION("ASoC WM9713/WM9714 driver");
 MODULE_AUTHOR("Liam Girdwood");
index 63b8d81756e3a50daaeffd777da56539a6f2ad9f..793da863a03d94096aa130f5f88757ef5f23eb9c 100644 (file)
@@ -45,9 +45,6 @@
 #define WM9713_DAI_AC97_AUX            1
 #define WM9713_DAI_PCM_VOICE   2
 
-extern struct snd_soc_codec_device soc_codec_dev_wm9713;
-extern struct snd_soc_dai wm9713_dai[3];
-
 int wm9713_reset(struct snd_soc_codec *codec,  int try_warm);
 
 #endif
index 97f74d6a33e6b56cc87ec542b259bcf4c59c91cb..2b07b17a6b2d68f3173380bc16de4eb07b921689 100644 (file)
 #include <mach/mux.h>
 
 #include "../codecs/tlv320aic3x.h"
-#include "../codecs/cq93vc.h"
-#include "../codecs/spdif_transciever.h"
 #include "davinci-pcm.h"
 #include "davinci-i2s.h"
 #include "davinci-mcasp.h"
-#include "davinci-vcif.h"
 
 #define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \
                SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF)
@@ -41,8 +38,8 @@ static int evm_hw_params(struct snd_pcm_substream *substream,
                         struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret = 0;
        unsigned sysclk;
 
@@ -87,7 +84,7 @@ static int evm_spdif_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        /* set cpu DAI configuration */
        return snd_soc_dai_set_fmt(cpu_dai, AUDIO_FORMAT);
@@ -132,8 +129,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
 };
 
 /* Logic for a aic3x as connected on a davinci-evm */
-static int evm_aic3x_init(struct snd_soc_codec *codec)
+static int evm_aic3x_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        /* Add davinci-evm specific widgets */
        snd_soc_dapm_new_controls(codec, aic3x_dapm_widgets,
                                  ARRAY_SIZE(aic3x_dapm_widgets));
@@ -161,8 +160,10 @@ static int evm_aic3x_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link evm_dai = {
        .name = "TLV320AIC3X",
        .stream_name = "AIC3X",
-       .cpu_dai = &davinci_i2s_dai,
-       .codec_dai = &aic3x_dai,
+       .cpu_dai_name = "davinci-mcasp.0",
+       .codec_dai_name = "tlv320aic3x-hifi",
+       .codec_name = "tlv320aic3x-codec.0-001a",
+       .platform_name = "davinci-pcm-audio",
        .init = evm_aic3x_init,
        .ops = &evm_ops,
 };
@@ -171,40 +172,49 @@ static struct snd_soc_dai_link dm365_evm_dai = {
 #ifdef CONFIG_SND_DM365_AIC3X_CODEC
        .name = "TLV320AIC3X",
        .stream_name = "AIC3X",
-       .cpu_dai = &davinci_i2s_dai,
-       .codec_dai = &aic3x_dai,
+       .cpu_dai_name = "davinci-i2s",
+       .codec_dai_name = "tlv320aic3x-hifi",
        .init = evm_aic3x_init,
+       .codec_name = "tlv320aic3x-codec.0-001a",
        .ops = &evm_ops,
 #elif defined(CONFIG_SND_DM365_VOICE_CODEC)
        .name = "Voice Codec - CQ93VC",
        .stream_name = "CQ93",
-       .cpu_dai = &davinci_vcif_dai,
-       .codec_dai = &cq93vc_dai,
+       .cpu_dai_name = "davinci-vcif",
+       .codec_dai_name = "cq93vc-hifi",
+       .codec_name = "cq93vc-codec",
 #endif
+       .platform_name = "davinci-pcm-audio",
 };
 
 static struct snd_soc_dai_link dm6467_evm_dai[] = {
        {
                .name = "TLV320AIC3X",
                .stream_name = "AIC3X",
-               .cpu_dai = &davinci_mcasp_dai[DAVINCI_MCASP_I2S_DAI],
-               .codec_dai = &aic3x_dai,
+               .cpu_dai_name= "davinci-mcasp.0",
+               .codec_dai_name = "tlv320aic3x-hifi",
+               .platform_name ="davinci-pcm-audio",
+               .codec_name = "tlv320aic3x-codec.0-001a",
                .init = evm_aic3x_init,
                .ops = &evm_ops,
        },
        {
                .name = "McASP",
                .stream_name = "spdif",
-               .cpu_dai = &davinci_mcasp_dai[DAVINCI_MCASP_DIT_DAI],
-               .codec_dai = &dit_stub_dai,
+               .cpu_dai_name= "davinci-mcasp.1",
+               .codec_dai_name = "dit-hifi",
+               .codec_name = "spdif_dit",
+               .platform_name = "davinci-pcm-audio",
                .ops = &evm_spdif_ops,
        },
 };
 static struct snd_soc_dai_link da8xx_evm_dai = {
        .name = "TLV320AIC3X",
        .stream_name = "AIC3X",
-       .cpu_dai = &davinci_mcasp_dai[DAVINCI_MCASP_I2S_DAI],
-       .codec_dai = &aic3x_dai,
+       .cpu_dai_name= "davinci-mcasp.0",
+       .codec_dai_name = "tlv320aic3x-hifi",
+       .codec_name = "tlv320aic3x-codec.0-001a",
+       .platform_name = "davinci-pcm-audio",
        .init = evm_aic3x_init,
        .ops = &evm_ops,
 };
@@ -212,7 +222,6 @@ static struct snd_soc_dai_link da8xx_evm_dai = {
 /* davinci dm6446, dm355 evm audio machine driver */
 static struct snd_soc_card snd_soc_card_evm = {
        .name = "DaVinci EVM",
-       .platform = &davinci_soc_platform,
        .dai_link = &evm_dai,
        .num_links = 1,
 };
@@ -220,16 +229,13 @@ static struct snd_soc_card snd_soc_card_evm = {
 /* davinci dm365 evm audio machine driver */
 static struct snd_soc_card dm365_snd_soc_card_evm = {
        .name = "DaVinci DM365 EVM",
-       .platform = &davinci_soc_platform,
        .dai_link = &dm365_evm_dai,
        .num_links = 1,
 };
 
-
 /* davinci dm6467 evm audio machine driver */
 static struct snd_soc_card dm6467_snd_soc_card_evm = {
        .name = "DaVinci DM6467 EVM",
-       .platform = &davinci_soc_platform,
        .dai_link = dm6467_evm_dai,
        .num_links = ARRAY_SIZE(dm6467_evm_dai),
 };
@@ -237,82 +243,40 @@ static struct snd_soc_card dm6467_snd_soc_card_evm = {
 static struct snd_soc_card da830_snd_soc_card = {
        .name = "DA830/OMAP-L137 EVM",
        .dai_link = &da8xx_evm_dai,
-       .platform = &davinci_soc_platform,
        .num_links = 1,
 };
 
 static struct snd_soc_card da850_snd_soc_card = {
        .name = "DA850/OMAP-L138 EVM",
        .dai_link = &da8xx_evm_dai,
-       .platform = &davinci_soc_platform,
        .num_links = 1,
 };
 
-static struct aic3x_setup_data aic3x_setup;
-
-/* evm audio subsystem */
-static struct snd_soc_device evm_snd_devdata = {
-       .card = &snd_soc_card_evm,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &aic3x_setup,
-};
-
-/* evm audio subsystem */
-static struct snd_soc_device dm365_evm_snd_devdata = {
-       .card = &dm365_snd_soc_card_evm,
-#ifdef CONFIG_SND_DM365_AIC3X_CODEC
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &aic3x_setup,
-#elif defined(CONFIG_SND_DM365_VOICE_CODEC)
-       .codec_dev = &soc_codec_dev_cq93vc,
-#endif
-};
-
-/* evm audio subsystem */
-static struct snd_soc_device dm6467_evm_snd_devdata = {
-       .card = &dm6467_snd_soc_card_evm,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &aic3x_setup,
-};
-
-/* evm audio subsystem */
-static struct snd_soc_device da830_evm_snd_devdata = {
-       .card = &da830_snd_soc_card,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &aic3x_setup,
-};
-
-static struct snd_soc_device da850_evm_snd_devdata = {
-       .card           = &da850_snd_soc_card,
-       .codec_dev      = &soc_codec_dev_aic3x,
-       .codec_data     = &aic3x_setup,
-};
-
 static struct platform_device *evm_snd_device;
 
 static int __init evm_init(void)
 {
-       struct snd_soc_device *evm_snd_dev_data;
+       struct snd_soc_card *evm_snd_dev_data;
        int index;
        int ret;
 
        if (machine_is_davinci_evm()) {
-               evm_snd_dev_data = &evm_snd_devdata;
+               evm_snd_dev_data = &snd_soc_card_evm;
                index = 0;
        } else if (machine_is_davinci_dm355_evm()) {
-               evm_snd_dev_data = &evm_snd_devdata;
+               evm_snd_dev_data = &snd_soc_card_evm;
                index = 1;
        } else if (machine_is_davinci_dm365_evm()) {
-               evm_snd_dev_data = &dm365_evm_snd_devdata;
+               evm_snd_dev_data = &dm365_snd_soc_card_evm;
                index = 0;
        } else if (machine_is_davinci_dm6467_evm()) {
-               evm_snd_dev_data = &dm6467_evm_snd_devdata;
+               evm_snd_dev_data = &dm6467_snd_soc_card_evm;
                index = 0;
        } else if (machine_is_davinci_da830_evm()) {
-               evm_snd_dev_data = &da830_evm_snd_devdata;
+               evm_snd_dev_data = &da830_snd_soc_card;
                index = 1;
        } else if (machine_is_davinci_da850_evm()) {
-               evm_snd_dev_data = &da850_evm_snd_devdata;
+               evm_snd_dev_data = &da850_snd_soc_card;
                index = 0;
        } else
                return -EINVAL;
@@ -322,7 +286,6 @@ static int __init evm_init(void)
                return -ENOMEM;
 
        platform_set_drvdata(evm_snd_device, evm_snd_dev_data);
-       evm_snd_dev_data->dev = &evm_snd_device->dev;
        ret = platform_device_add(evm_snd_device);
        if (ret)
                platform_device_put(evm_snd_device);
index 9e8932abf158b7f8d22660081fd73183a73a4469..9f8b6c55686668dd4fcbcd4965ed81d7b77cb31d 100644 (file)
@@ -183,8 +183,7 @@ static void davinci_mcbsp_start(struct davinci_mcbsp_dev *dev,
                struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_platform *platform = socdev->card->platform;
+       struct snd_soc_platform *platform = rtd->platform;
        int playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
        u32 spcr;
        u32 mask = playback ? DAVINCI_MCBSP_SPCR_XRST : DAVINCI_MCBSP_SPCR_RRST;
@@ -205,8 +204,8 @@ static void davinci_mcbsp_start(struct davinci_mcbsp_dev *dev,
        if (playback) {
                /* Stop the DMA to avoid data loss */
                /* while the transmitter is out of reset to handle XSYNCERR */
-               if (platform->pcm_ops->trigger) {
-                       int ret = platform->pcm_ops->trigger(substream,
+               if (platform->driver->ops->trigger) {
+                       int ret = platform->driver->ops->trigger(substream,
                                SNDRV_PCM_TRIGGER_STOP);
                        if (ret < 0)
                                printk(KERN_DEBUG "Playback DMA stop failed\n");
@@ -227,8 +226,8 @@ static void davinci_mcbsp_start(struct davinci_mcbsp_dev *dev,
                toggle_clock(dev, playback);
 
                /* Restart the DMA */
-               if (platform->pcm_ops->trigger) {
-                       int ret = platform->pcm_ops->trigger(substream,
+               if (platform->driver->ops->trigger) {
+                       int ret = platform->driver->ops->trigger(substream,
                                SNDRV_PCM_TRIGGER_START);
                        if (ret < 0)
                                printk(KERN_DEBUG "Playback DMA start failed\n");
@@ -263,7 +262,7 @@ static void davinci_mcbsp_stop(struct davinci_mcbsp_dev *dev, int playback)
 static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                                   unsigned int fmt)
 {
-       struct davinci_mcbsp_dev *dev = cpu_dai->private_data;
+       struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
        unsigned int pcr;
        unsigned int srgr;
        /* Attention srgr is updated by hw_params! */
@@ -404,7 +403,7 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 static int davinci_i2s_dai_set_clkdiv(struct snd_soc_dai *cpu_dai,
                                int div_id, int div)
 {
-       struct davinci_mcbsp_dev *dev = cpu_dai->private_data;
+       struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
 
        if (div_id != DAVINCI_MCBSP_CLKGDV)
                return -ENODEV;
@@ -417,7 +416,7 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *dai)
 {
-       struct davinci_mcbsp_dev *dev = dai->private_data;
+       struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(dai);
        struct davinci_pcm_dma_params *dma_params =
                                        &dev->dma_params[substream->stream];
        struct snd_interval *i = NULL;
@@ -427,6 +426,9 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
        snd_pcm_format_t fmt;
        unsigned element_cnt = 1;
 
+       dai->capture_dma_data = dev->dma_params;
+       dai->playback_dma_data = dev->dma_params;
+
        /* general line settings */
        spcr = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SPCR_REG);
        if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
@@ -569,7 +571,7 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
 static int davinci_i2s_prepare(struct snd_pcm_substream *substream,
                struct snd_soc_dai *dai)
 {
-       struct davinci_mcbsp_dev *dev = dai->private_data;
+       struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(dai);
        int playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
        davinci_mcbsp_stop(dev, playback);
        if ((dev->pcr & DAVINCI_MCBSP_PCR_FSXM) == 0) {
@@ -582,7 +584,7 @@ static int davinci_i2s_prepare(struct snd_pcm_substream *substream,
 static int davinci_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
                               struct snd_soc_dai *dai)
 {
-       struct davinci_mcbsp_dev *dev = dai->private_data;
+       struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(dai);
        int ret = 0;
        int playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
        if ((dev->pcr & DAVINCI_MCBSP_PCR_FSXM) == 0)
@@ -608,7 +610,7 @@ static int davinci_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
 static void davinci_i2s_shutdown(struct snd_pcm_substream *substream,
                struct snd_soc_dai *dai)
 {
-       struct davinci_mcbsp_dev *dev = dai->private_data;
+       struct davinci_mcbsp_dev *dev = snd_soc_dai_get_drvdata(dai);
        int playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
        davinci_mcbsp_stop(dev, playback);
 }
@@ -625,9 +627,7 @@ static struct snd_soc_dai_ops davinci_i2s_dai_ops = {
 
 };
 
-struct snd_soc_dai davinci_i2s_dai = {
-       .name = "davinci-i2s",
-       .id = 0,
+static struct snd_soc_dai_driver davinci_i2s_dai = {
        .playback = {
                .channels_min = 2,
                .channels_max = 2,
@@ -641,7 +641,6 @@ struct snd_soc_dai davinci_i2s_dai = {
        .ops = &davinci_i2s_dai_ops,
 
 };
-EXPORT_SYMBOL_GPL(davinci_i2s_dai);
 
 static int davinci_i2s_probe(struct platform_device *pdev)
 {
@@ -720,10 +719,9 @@ static int davinci_i2s_probe(struct platform_device *pdev)
        dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].channel = res->start;
        dev->dev = &pdev->dev;
 
-       davinci_i2s_dai.private_data = dev;
-       davinci_i2s_dai.capture.dma_data = dev->dma_params;
-       davinci_i2s_dai.playback.dma_data = dev->dma_params;
-       ret = snd_soc_register_dai(&davinci_i2s_dai);
+       dev_set_drvdata(&pdev->dev, dev);
+
+       ret = snd_soc_register_dai(&pdev->dev, &davinci_i2s_dai);
        if (ret != 0)
                goto err_free_mem;
 
@@ -739,10 +737,10 @@ err_release_region:
 
 static int davinci_i2s_remove(struct platform_device *pdev)
 {
-       struct davinci_mcbsp_dev *dev = davinci_i2s_dai.private_data;
+       struct davinci_mcbsp_dev *dev = dev_get_drvdata(&pdev->dev);
        struct resource *mem;
 
-       snd_soc_unregister_dai(&davinci_i2s_dai);
+       snd_soc_unregister_dai(&pdev->dev);
        clk_disable(dev->clk);
        clk_put(dev->clk);
        dev->clk = NULL;
@@ -757,7 +755,7 @@ static struct platform_driver davinci_mcbsp_driver = {
        .probe          = davinci_i2s_probe,
        .remove         = davinci_i2s_remove,
        .driver         = {
-               .name   = "davinci-asp",
+               .name   = "davinci-i2s",
                .owner  = THIS_MODULE,
        },
 };
index 0b1e77b8c27992294ccf364c1038164485cc87ab..48dac3e2521a90a992aae255c4336eafc220ba9a 100644 (file)
@@ -17,6 +17,4 @@ enum davinci_mcbsp_div {
        DAVINCI_MCBSP_CLKGDV,              /* Sample rate generator divider */
 };
 
-extern struct snd_soc_dai davinci_i2s_dai;
-
 #endif
index b24720894af64a183a68aec1925a77419b5d0ad5..c8e97dcbfff4df849f13d539784ce0d2f3bb6ce7 100644 (file)
@@ -422,7 +422,7 @@ static void davinci_mcasp_stop(struct davinci_audio_dev *dev, int stream)
 static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                                         unsigned int fmt)
 {
-       struct davinci_audio_dev *dev = cpu_dai->private_data;
+       struct davinci_audio_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
        void __iomem *base = dev->base;
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
@@ -709,12 +709,15 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
                                        struct snd_pcm_hw_params *params,
                                        struct snd_soc_dai *cpu_dai)
 {
-       struct davinci_audio_dev *dev = cpu_dai->private_data;
+       struct davinci_audio_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
        struct davinci_pcm_dma_params *dma_params =
                                        &dev->dma_params[substream->stream];
        int word_length;
        u8 fifo_level;
 
+       cpu_dai->capture_dma_data = dev->dma_params;
+       cpu_dai->playback_dma_data = dev->dma_params;
+
        davinci_hw_common_param(dev, substream->stream);
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                fifo_level = dev->txnumevt;
@@ -761,8 +764,7 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
 static int davinci_mcasp_trigger(struct snd_pcm_substream *substream,
                                     int cmd, struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct davinci_audio_dev *dev = rtd->dai->cpu_dai->private_data;
+       struct davinci_audio_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
        int ret = 0;
 
        switch (cmd) {
@@ -804,10 +806,9 @@ static struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
 
 };
 
-struct snd_soc_dai davinci_mcasp_dai[] = {
+static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
        {
-               .name           = "davinci-i2s",
-               .id             = 0,
+               .name           = "davinci-mcasp.0",
                .playback       = {
                        .channels_min   = 2,
                        .channels_max   = 2,
@@ -828,8 +829,7 @@ struct snd_soc_dai davinci_mcasp_dai[] = {
 
        },
        {
-               .name           = "davinci-dit",
-               .id             = 1,
+               "davinci-mcasp.1",
                .playback       = {
                        .channels_min   = 1,
                        .channels_max   = 384,
@@ -840,7 +840,6 @@ struct snd_soc_dai davinci_mcasp_dai[] = {
        },
 
 };
-EXPORT_SYMBOL_GPL(davinci_mcasp_dai);
 
 static int davinci_mcasp_probe(struct platform_device *pdev)
 {
@@ -917,11 +916,8 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
        }
 
        dma_data->channel = res->start;
-       davinci_mcasp_dai[pdata->op_mode].private_data = dev;
-       davinci_mcasp_dai[pdata->op_mode].capture.dma_data = dev->dma_params;
-       davinci_mcasp_dai[pdata->op_mode].playback.dma_data = dev->dma_params;
-       davinci_mcasp_dai[pdata->op_mode].dev = &pdev->dev;
-       ret = snd_soc_register_dai(&davinci_mcasp_dai[pdata->op_mode]);
+       dev_set_drvdata(&pdev->dev, dev);
+       ret = snd_soc_register_dai(&pdev->dev, &davinci_mcasp_dai[pdata->op_mode]);
 
        if (ret != 0)
                goto err_release_region;
@@ -937,12 +933,10 @@ err_release_data:
 
 static int davinci_mcasp_remove(struct platform_device *pdev)
 {
-       struct snd_platform_data *pdata = pdev->dev.platform_data;
-       struct davinci_audio_dev *dev;
+       struct davinci_audio_dev *dev = dev_get_drvdata(&pdev->dev);
        struct resource *mem;
 
-       snd_soc_unregister_dai(&davinci_mcasp_dai[pdata->op_mode]);
-       dev = davinci_mcasp_dai[pdata->op_mode].private_data;
+       snd_soc_unregister_dai(&pdev->dev);
        clk_disable(dev->clk);
        clk_put(dev->clk);
        dev->clk = NULL;
index e755b5121ec728be29aed547b662c02994b2dc50..4681acc636061300efe053f56e214fc0eff1b98b 100644 (file)
@@ -22,8 +22,6 @@
 #include <mach/asp.h>
 #include "davinci-pcm.h"
 
-extern struct snd_soc_dai davinci_mcasp_dai[];
-
 #define DAVINCI_MCASP_RATES    SNDRV_PCM_RATE_8000_96000
 #define DAVINCI_MCASP_I2S_DAI  0
 #define DAVINCI_MCASP_DIT_DAI  1
index a7124116d2e01aea6832f158db798a8e16c93bfd..9d35b8c1a624338afcfa27a4282482515d2cb32a 100644 (file)
@@ -653,7 +653,7 @@ static int davinci_pcm_open(struct snd_pcm_substream *substream)
        struct davinci_pcm_dma_params *pa;
        struct davinci_pcm_dma_params *params;
 
-       pa = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       pa = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
        if (!pa)
                return -ENODEV;
        params = &pa[substream->stream];
@@ -821,7 +821,7 @@ static int davinci_pcm_new(struct snd_card *card,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = 0xffffffff;
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = davinci_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK,
                        pcm_hardware_playback.buffer_bytes_max);
@@ -829,7 +829,7 @@ static int davinci_pcm_new(struct snd_card *card,
                        return ret;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = davinci_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE,
                        pcm_hardware_capture.buffer_bytes_max);
@@ -840,25 +840,44 @@ static int davinci_pcm_new(struct snd_card *card,
        return 0;
 }
 
-struct snd_soc_platform davinci_soc_platform = {
-       .name =         "davinci-audio",
-       .pcm_ops =      &davinci_pcm_ops,
+static struct snd_soc_platform_driver davinci_soc_platform = {
+       .ops =          &davinci_pcm_ops,
        .pcm_new =      davinci_pcm_new,
        .pcm_free =     davinci_pcm_free,
 };
-EXPORT_SYMBOL_GPL(davinci_soc_platform);
 
-static int __init davinci_soc_platform_init(void)
+static int __devinit davinci_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&davinci_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &davinci_soc_platform);
 }
-module_init(davinci_soc_platform_init);
 
-static void __exit davinci_soc_platform_exit(void)
+static int __devexit davinci_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&davinci_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver davinci_pcm_driver = {
+       .driver = {
+                       .name = "davinci-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = davinci_soc_platform_probe,
+       .remove = __devexit_p(davinci_soc_platform_remove),
+};
+
+static int __init snd_davinci_pcm_init(void)
+{
+       return platform_driver_register(&davinci_pcm_driver);
+}
+module_init(snd_davinci_pcm_init);
+
+static void __exit snd_davinci_pcm_exit(void)
+{
+       platform_driver_unregister(&davinci_pcm_driver);
 }
-module_exit(davinci_soc_platform_exit);
+module_exit(snd_davinci_pcm_exit);
 
 MODULE_AUTHOR("Vladimir Barinov");
 MODULE_DESCRIPTION("TI DAVINCI PCM DMA module");
index b799a02333d83b10a896d639ce1c73679ab06bec..c0d6c9be4b4d605b12bdf6145a8fde5319cd2bf6 100644 (file)
@@ -28,7 +28,4 @@ struct davinci_pcm_dma_params {
        unsigned int fifo_level;
 };
 
-
-extern struct snd_soc_platform davinci_soc_platform;
-
 #endif
index 40eccfe9e358c2f2bc05574d3cdeb87f6fa7bffc..997c54f3693cb46e8b749417d5553e4fb206a0b0 100644 (file)
@@ -29,7 +29,6 @@
 #include <asm/plat-sffsdr/sffsdr-fpga.h>
 #endif
 
-#include <mach/mcbsp.h>
 #include <mach/edma.h>
 
 #include "../codecs/pcm3008.h"
@@ -48,7 +47,7 @@ static int sffsdr_hw_params(struct snd_pcm_substream *substream,
                            struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int fs;
        int ret = 0;
 
@@ -85,15 +84,16 @@ static struct snd_soc_ops sffsdr_ops = {
 static struct snd_soc_dai_link sffsdr_dai = {
        .name = "PCM3008", /* Codec name */
        .stream_name = "PCM3008 HiFi",
-       .cpu_dai = &davinci_i2s_dai,
-       .codec_dai = &pcm3008_dai,
+       .cpu_dai_name = "davinci-asp.0",
+       .codec_dai_name = "pcm3008-hifi",
+       .codec_name = "pcm3008-codec",
+       .platform_name = "davinci-pcm-audio",
        .ops = &sffsdr_ops,
 };
 
 /* davinci-sffsdr audio machine driver */
 static struct snd_soc_card snd_soc_sffsdr = {
        .name = "DaVinci SFFSDR",
-       .platform = &davinci_soc_platform,
        .dai_link = &sffsdr_dai,
        .num_links = 1,
 };
@@ -106,11 +106,12 @@ static struct pcm3008_setup_data sffsdr_pcm3008_setup = {
        .pdda_pin = GPIO(38),
 };
 
-/* sffsdr audio subsystem */
-static struct snd_soc_device sffsdr_snd_devdata = {
-       .card = &snd_soc_sffsdr,
-       .codec_dev = &soc_codec_dev_pcm3008,
-       .codec_data = &sffsdr_pcm3008_setup,
+struct platform_device pcm3008_codec = {
+               .name = "pcm3008-codec",
+               .id = 0,
+               .dev = {
+                               .platform_data = &sffsdr_pcm3008_setup,
+               },
 };
 
 static struct resource sffsdr_snd_resources[] = {
@@ -135,14 +136,15 @@ static int __init sffsdr_init(void)
        if (!machine_is_sffsdr())
                return -EINVAL;
 
+       platform_device_register(&pcm3008_codec);
+
        sffsdr_snd_device = platform_device_alloc("soc-audio", 0);
        if (!sffsdr_snd_device) {
                printk(KERN_ERR "platform device allocation failed\n");
                return -ENOMEM;
        }
 
-       platform_set_drvdata(sffsdr_snd_device, &sffsdr_snd_devdata);
-       sffsdr_snd_devdata.dev = &sffsdr_snd_device->dev;
+       platform_set_drvdata(sffsdr_snd_device, &snd_soc_sffsdr);
        platform_device_add_data(sffsdr_snd_device, &sffsdr_snd_data,
                                 sizeof(sffsdr_snd_data));
 
@@ -168,6 +170,7 @@ error:
 static void __exit sffsdr_exit(void)
 {
        platform_device_unregister(sffsdr_snd_device);
+       platform_device_unregister(&pcm3008_codec);
 }
 
 module_init(sffsdr_init);
index 48678533da7af1641f56c6b3e2dcfca67d8dbedc..ea232f6a2c21912e408a69ea2d1f8df28e4552dd 100644 (file)
@@ -36,7 +36,6 @@
 
 #include "davinci-pcm.h"
 #include "davinci-i2s.h"
-#include "davinci-vcif.h"
 
 #define MOD_REG_BIT(val, mask, set) do { \
        if (set) { \
@@ -55,7 +54,7 @@ static void davinci_vcif_start(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct davinci_vcif_dev *davinci_vcif_dev =
-                                       rtd->dai->cpu_dai->private_data;
+                       snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct davinci_vc *davinci_vc = davinci_vcif_dev->davinci_vc;
        u32 w;
 
@@ -74,7 +73,7 @@ static void davinci_vcif_stop(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct davinci_vcif_dev *davinci_vcif_dev =
-                                       rtd->dai->cpu_dai->private_data;
+                       snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct davinci_vc *davinci_vc = davinci_vcif_dev->davinci_vc;
        u32 w;
 
@@ -92,12 +91,15 @@ static int davinci_vcif_hw_params(struct snd_pcm_substream *substream,
                                  struct snd_pcm_hw_params *params,
                                  struct snd_soc_dai *dai)
 {
-       struct davinci_vcif_dev *davinci_vcif_dev = dai->private_data;
+       struct davinci_vcif_dev *davinci_vcif_dev = snd_soc_dai_get_drvdata(dai);
        struct davinci_vc *davinci_vc = davinci_vcif_dev->davinci_vc;
        struct davinci_pcm_dma_params *dma_params =
                        &davinci_vcif_dev->dma_params[substream->stream];
        u32 w;
 
+       dai->capture_dma_data = davinci_vcif_dev->dma_params;
+       dai->playback_dma_data = davinci_vcif_dev->dma_params;
+
        /* Restart the codec before setup */
        davinci_vcif_stop(substream);
        davinci_vcif_start(substream);
@@ -179,8 +181,7 @@ static struct snd_soc_dai_ops davinci_vcif_dai_ops = {
        .hw_params      = davinci_vcif_hw_params,
 };
 
-struct snd_soc_dai davinci_vcif_dai = {
-       .name = "davinci-vcif",
+static struct snd_soc_dai_driver davinci_vcif_dai = {
        .playback = {
                .channels_min = 1,
                .channels_max = 2,
@@ -194,7 +195,6 @@ struct snd_soc_dai davinci_vcif_dai = {
        .ops = &davinci_vcif_dai_ops,
 
 };
-EXPORT_SYMBOL_GPL(davinci_vcif_dai);
 
 static int davinci_vcif_probe(struct platform_device *pdev)
 {
@@ -222,12 +222,9 @@ static int davinci_vcif_probe(struct platform_device *pdev)
        davinci_vcif_dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].dma_addr =
                                        davinci_vc->davinci_vcif.dma_rx_addr;
 
-       davinci_vcif_dai.dev = &pdev->dev;
-       davinci_vcif_dai.capture.dma_data = davinci_vcif_dev->dma_params;
-       davinci_vcif_dai.playback.dma_data = davinci_vcif_dev->dma_params;
-       davinci_vcif_dai.private_data = davinci_vcif_dev;
+       dev_set_drvdata(&pdev->dev, davinci_vcif_dev);
 
-       ret = snd_soc_register_dai(&davinci_vcif_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &davinci_vcif_dai);
        if (ret != 0) {
                dev_err(&pdev->dev, "could not register dai\n");
                goto fail;
@@ -243,7 +240,7 @@ fail:
 
 static int davinci_vcif_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&davinci_vcif_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        return 0;
 }
@@ -252,7 +249,7 @@ static struct platform_driver davinci_vcif_driver = {
        .probe          = davinci_vcif_probe,
        .remove         = davinci_vcif_remove,
        .driver         = {
-               .name   = "davinci_vcif",
+               .name   = "davinci-vcif",
                .owner  = THIS_MODULE,
        },
 };
diff --git a/sound/soc/davinci/davinci-vcif.h b/sound/soc/davinci/davinci-vcif.h
deleted file mode 100644 (file)
index 571c994..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * ALSA SoC Voice Codec Interface for TI DAVINCI processor
- *
- * Copyright (C) 2010 Texas Instruments.
- *
- * Author: Miguel Aguilar <miguel.aguilar@ridgerun.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _DAVINCI_VCIF_H
-#define _DAVINCI_VCIF_H
-
-extern struct snd_soc_dai davinci_vcif_dai;
-
-#endif
index 00b946632184a359cd5157ab8fceca38d1e40f43..4f48733596134c2e0fe68825b494ce798cbb6767 100644 (file)
@@ -31,7 +31,6 @@
 #include <mach/dma.h>
 
 #include "ep93xx-pcm.h"
-#include "ep93xx-i2s.h"
 
 #define EP93XX_I2S_TXCLKCFG            0x00
 #define EP93XX_I2S_RXCLKCFG            0x04
@@ -145,8 +144,8 @@ static int ep93xx_i2s_startup(struct snd_pcm_substream *substream,
                              struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct ep93xx_i2s_info *info = rtd->dai->cpu_dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai);
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        snd_soc_dai_set_dma_data(cpu_dai, substream,
                                 &info->dma_params[substream->stream]);
@@ -156,8 +155,7 @@ static int ep93xx_i2s_startup(struct snd_pcm_substream *substream,
 static void ep93xx_i2s_shutdown(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct ep93xx_i2s_info *info = rtd->dai->cpu_dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai);
 
        ep93xx_i2s_disable(info, substream->stream);
 }
@@ -165,7 +163,7 @@ static void ep93xx_i2s_shutdown(struct snd_pcm_substream *substream,
 static int ep93xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                                  unsigned int fmt)
 {
-       struct ep93xx_i2s_info *info = cpu_dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai);
        unsigned int clk_cfg, lin_ctrl;
 
        clk_cfg  = ep93xx_i2s_read_reg(info, EP93XX_I2S_RXCLKCFG);
@@ -242,9 +240,7 @@ static int ep93xx_i2s_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params,
                                struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct ep93xx_i2s_info *info = cpu_dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai);
        unsigned word_len, div, sdiv, lrdiv;
        int found = 0, err;
 
@@ -302,7 +298,7 @@ out:
 static int ep93xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
                                 unsigned int freq, int dir)
 {
-       struct ep93xx_i2s_info *info = cpu_dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(cpu_dai);
 
        if (dir == SND_SOC_CLOCK_IN || clk_id != 0)
                return -EINVAL;
@@ -313,7 +309,7 @@ static int ep93xx_i2s_set_sysclk(struct snd_soc_dai *cpu_dai, int clk_id,
 #ifdef CONFIG_PM
 static int ep93xx_i2s_suspend(struct snd_soc_dai *dai)
 {
-       struct ep93xx_i2s_info *info = dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai);
 
        if (!dai->active)
                return;
@@ -324,7 +320,7 @@ static int ep93xx_i2s_suspend(struct snd_soc_dai *dai)
 
 static int ep93xx_i2s_resume(struct snd_soc_dai *dai)
 {
-       struct ep93xx_i2s_info *info = dai->private_data;
+       struct ep93xx_i2s_info *info = snd_soc_dai_get_drvdata(dai);
 
        if (!dai->active)
                return;
@@ -349,9 +345,7 @@ static struct snd_soc_dai_ops ep93xx_i2s_dai_ops = {
                            SNDRV_PCM_FMTBIT_S24_LE | \
                            SNDRV_PCM_FMTBIT_S32_LE)
 
-struct snd_soc_dai ep93xx_i2s_dai = {
-       .name           = "ep93xx-i2s",
-       .id             = 0,
+static struct snd_soc_dai_driver ep93xx_i2s_dai = {
        .symmetric_rates= 1,
        .suspend        = ep93xx_i2s_suspend,
        .resume         = ep93xx_i2s_resume,
@@ -369,7 +363,6 @@ struct snd_soc_dai ep93xx_i2s_dai = {
        },
        .ops            = &ep93xx_i2s_dai_ops,
 };
-EXPORT_SYMBOL_GPL(ep93xx_i2s_dai);
 
 static int ep93xx_i2s_probe(struct platform_device *pdev)
 {
@@ -383,8 +376,7 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
                goto fail;
        }
 
-       ep93xx_i2s_dai.dev = &pdev->dev;
-       ep93xx_i2s_dai.private_data = info;
+       dev_set_drvdata(&pdev->dev, info);
        info->dma_params = ep93xx_i2s_dma_params;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -424,7 +416,7 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
                goto fail_put_sclk;
        }
 
-       err = snd_soc_register_dai(&ep93xx_i2s_dai);
+       err = snd_soc_register_dai(&pdev->dev, &ep93xx_i2s_dai);
        if (err)
                goto fail_put_lrclk;
 
@@ -447,9 +439,9 @@ fail:
 
 static int __devexit ep93xx_i2s_remove(struct platform_device *pdev)
 {
-       struct ep93xx_i2s_info *info = ep93xx_i2s_dai.private_data;
+       struct ep93xx_i2s_info *info = dev_get_drvdata(&pdev->dev);
 
-       snd_soc_unregister_dai(&ep93xx_i2s_dai);
+       snd_soc_unregister_dai(&pdev->dev);
        clk_put(info->lrclk);
        clk_put(info->sclk);
        clk_put(info->mclk);
diff --git a/sound/soc/ep93xx/ep93xx-i2s.h b/sound/soc/ep93xx/ep93xx-i2s.h
deleted file mode 100644 (file)
index 3bd4ebf..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * linux/sound/soc/ep93xx-i2s.h
- * EP93xx I2S driver
- *
- * Copyright (C) 2010 Ryan Mallon <ryan@bluewatersys.com>
- *  
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-#ifndef _EP93XX_SND_SOC_I2S_H
-#define _EP93XX_SND_SOC_I2S_H
-
-extern struct snd_soc_dai ep93xx_i2s_dai;
-
-#endif /* _EP93XX_SND_SOC_I2S_H */
index 4ba9384007916c454081a821cd1fcacab27d76f9..2f121ddbe4bb50d04ced8fb32db30bf54437b864 100644 (file)
@@ -95,7 +95,7 @@ static void ep93xx_pcm_buffer_finished(void *cookie,
 static int ep93xx_pcm_open(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *soc_rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = soc_rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = soc_rtd->cpu_dai;
        struct ep93xx_pcm_dma_params *dma_params;
        struct ep93xx_runtime_data *rtd;    
        int ret;
@@ -276,14 +276,14 @@ static int ep93xx_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = 0xffffffff;
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = ep93xx_pcm_preallocate_dma_buffer(pcm,
                                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        return ret;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = ep93xx_pcm_preallocate_dma_buffer(pcm,
                                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -293,22 +293,41 @@ static int ep93xx_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
        return 0;
 }
 
-struct snd_soc_platform ep93xx_soc_platform = {
-       .name           = "ep93xx-audio",
-       .pcm_ops        = &ep93xx_pcm_ops,
+static struct snd_soc_platform_driver ep93xx_soc_platform = {
+       .ops            = &ep93xx_pcm_ops,
        .pcm_new        = &ep93xx_pcm_new,
        .pcm_free       = &ep93xx_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(ep93xx_soc_platform);
+
+static int __devinit ep93xx_soc_platform_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_platform(&pdev->dev, &ep93xx_soc_platform);
+}
+
+static int __devexit ep93xx_soc_platform_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver ep93xx_pcm_driver = {
+       .driver = {
+                       .name = "ep93xx-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = ep93xx_soc_platform_probe,
+       .remove = __devexit_p(ep93xx_soc_platform_remove),
+};
 
 static int __init ep93xx_soc_platform_init(void)
 {
-       return snd_soc_register_platform(&ep93xx_soc_platform);
+       return platform_driver_register(&ep93xx_pcm_driver);
 }
 
 static void __exit ep93xx_soc_platform_exit(void)
 {
-       snd_soc_unregister_platform(&ep93xx_soc_platform);
+       platform_driver_unregister(&ep93xx_pcm_driver);
 }
 
 module_init(ep93xx_soc_platform_init);
index 4ffdd3f62fe9fbc02a40a8078209e0befca3be0a..111e1121ecb83119576c6b9ad3cdf552a426be1e 100644 (file)
@@ -17,6 +17,4 @@ struct ep93xx_pcm_dma_params {
        int     dma_port;
 };
 
-extern struct snd_soc_platform ep93xx_soc_platform;
-
 #endif /* _EP93XX_SND_SOC_PCM_H */
index 64955340ff75c9a66f830888cc847cd55c42818a..28ab5ff772acda6a82e7a17794aa988fd20aabfa 100644 (file)
@@ -22,7 +22,6 @@
 
 #include "../codecs/tlv320aic23.h"
 #include "ep93xx-pcm.h"
-#include "ep93xx-i2s.h"
 
 #define CODEC_CLOCK 5644800
 
@@ -30,8 +29,8 @@ static int snappercl15_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int err;
 
        err = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
@@ -77,8 +76,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"MICIN", NULL, "Mic Jack"},
 };
 
-static int snappercl15_tlv320aic23_init(struct snd_soc_codec *codec)
+static int snappercl15_tlv320aic23_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_new_controls(codec, tlv320aic23_dapm_widgets,
                                  ARRAY_SIZE(tlv320aic23_dapm_widgets));
 
@@ -89,24 +90,20 @@ static int snappercl15_tlv320aic23_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link snappercl15_dai = {
        .name           = "tlv320aic23",
        .stream_name    = "AIC23",
-       .cpu_dai        = &ep93xx_i2s_dai,
-       .codec_dai      = &tlv320aic23_dai,
+       .cpu_dai_name   = "ep93xx-i2s",
+       .codec_dai_name = "tlv320aic23-hifi",
+       .codec_name     = "tlv320aic23-codec.0-001a",
+       .platform_name  =  "ep93xx-pcm-audio",
        .init           = snappercl15_tlv320aic23_init,
        .ops            = &snappercl15_ops,
 };
 
 static struct snd_soc_card snd_soc_snappercl15 = {
        .name           = "Snapper CL15",
-       .platform       = &ep93xx_soc_platform,
        .dai_link       = &snappercl15_dai,
        .num_links      = 1,
 };
 
-static struct snd_soc_device snappercl15_snd_devdata = {
-       .card           = &snd_soc_snappercl15,
-       .codec_dev      = &soc_codec_dev_tlv320aic23,
-};
-
 static struct platform_device *snappercl15_snd_device;
 
 static int __init snappercl15_init(void)
@@ -126,8 +123,7 @@ static int __init snappercl15_init(void)
        if (!snappercl15_snd_device)
                return -ENOMEM;
        
-       platform_set_drvdata(snappercl15_snd_device, &snappercl15_snd_devdata);
-       snappercl15_snd_devdata.dev = &snappercl15_snd_device->dev;
+       platform_set_drvdata(snappercl15_snd_device, &snd_soc_snappercl15);
        ret = platform_device_add(snappercl15_snd_device);
        if (ret)
                platform_device_put(snappercl15_snd_device);
index 8cb65ccad35fb8cfcf96caac60cd2b0e1adb468e..98186870038843aa48d9db2bf78941ef2c953461 100644 (file)
@@ -1,6 +1,3 @@
-config SND_SOC_OF_SIMPLE
-       tristate
-       
 config SND_MPC52xx_DMA
        tristate
 
index a83a73967ec666a14409bb8f64c3b540c8b0f401..7e472a53fcd3b76dc31439f626b5b5f71567d3c0 100644 (file)
@@ -1,6 +1,3 @@
-# Simple machine driver that extracts configuration from the OF device tree
-obj-$(CONFIG_SND_SOC_OF_SIMPLE) += soc-of-simple.o
-
 # MPC8610 HPCD Machine Support
 snd-soc-mpc8610-hpcd-objs := mpc8610_hpcd.o
 obj-$(CONFIG_SND_SOC_MPC8610_HPCD) += snd-soc-mpc8610-hpcd.o
index 1a5b8e0d6a34d986fcfb62c5ac0c7cdc6ad9f2b7..53251e6b5bd509303dc17500e8f4d64feeea7021 100644 (file)
@@ -24,7 +24,6 @@
 #include <sound/pcm_params.h>
 #include <sound/initval.h>
 #include <sound/soc.h>
-#include <sound/soc-of-simple.h>
 
 #include "mpc5200_dma.h"
 #include "mpc5200_psc_ac97.h"
 
 #define DRV_NAME "efika-audio-fabric"
 
-static struct snd_soc_device device;
 static struct snd_soc_card card;
 
 static struct snd_soc_dai_link efika_fabric_dai[] = {
 {
        .name = "AC97",
        .stream_name = "AC97 Analog",
-       .codec_dai = &stac9766_dai[STAC9766_DAI_AC97_ANALOG],
-       .cpu_dai = &psc_ac97_dai[MPC5200_AC97_NORMAL],
+       .codec_dai_name = "stac9766-hifi-analog",
+       .cpu_dai_name = "mpc5200-psc-ac97.0",
+       .platform_name = "mpc5200-pcm-audio",
+       .codec_name = "stac9766-codec",
 },
 {
        .name = "AC97",
        .stream_name = "AC97 IEC958",
-       .codec_dai = &stac9766_dai[STAC9766_DAI_AC97_DIGITAL],
-       .cpu_dai = &psc_ac97_dai[MPC5200_AC97_SPDIF],
+       .codec_dai_name = "stac9766-hifi-IEC958",
+       .cpu_dai_name = "mpc5200-psc-ac97.1",
+       .platform_name = "mpc5200-pcm-audio",
+       .codec_name = "stac9766-codec",
 },
 };
 
@@ -58,13 +60,10 @@ static __init int efika_fabric_init(void)
        if (!of_machine_is_compatible("bplan,efika"))
                return -ENODEV;
 
-       card.platform = &mpc5200_audio_dma_platform;
        card.name = "Efika";
        card.dai_link = efika_fabric_dai;
        card.num_links = ARRAY_SIZE(efika_fabric_dai);
 
-       device.card = &card;
-       device.codec_dev = &soc_codec_dev_stac9766;
 
        pdev = platform_device_alloc("soc-audio", 1);
        if (!pdev) {
@@ -72,8 +71,7 @@ static __init int efika_fabric_init(void)
                return -ENODEV;
        }
 
-       platform_set_drvdata(pdev, &device);
-       device.dev = &pdev->dev;
+       platform_set_drvdata(pdev, &card);
 
        rc = platform_device_add(pdev);
        if (rc) {
index 410c7496a18dd295cec46770176ba960ca46686b..57774cb91ae3889ab6c09f71cd29572a096dfa11 100644 (file)
@@ -3,10 +3,11 @@
  *
  * Author: Timur Tabi <timur@freescale.com>
  *
- * Copyright 2007-2008 Freescale Semiconductor, Inc.  This file is licensed
- * under the terms of the GNU General Public License version 2.  This
- * program is licensed "as is" without any warranty of any kind, whether
- * express or implied.
+ * Copyright 2007-2010 Freescale Semiconductor, Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
  *
  * This driver implements ASoC support for the Elo DMA controller, which is
  * the DMA controller on Freescale 83xx, 85xx, and 86xx SOCs. In ALSA terms,
@@ -20,6 +21,8 @@
 #include <linux/interrupt.h>
 #include <linux/delay.h>
 #include <linux/gfp.h>
+#include <linux/of_platform.h>
+#include <linux/list.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -29,6 +32,7 @@
 #include <asm/io.h>
 
 #include "fsl_dma.h"
+#include "fsl_ssi.h"   /* For the offset of stx0 and srx0 */
 
 /*
  * The formats that the DMA controller supports, which is anything
 #define FSLDMA_PCM_RATES (SNDRV_PCM_RATE_5512 | SNDRV_PCM_RATE_8000_192000 | \
                          SNDRV_PCM_RATE_CONTINUOUS)
 
-/* DMA global data.  This structure is used by fsl_dma_open() to determine
- * which DMA channels to assign to a substream.  Unfortunately, ASoC V1 does
- * not allow the machine driver to provide this information to the PCM
- * driver in advance, and there's no way to differentiate between the two
- * DMA controllers.  So for now, this driver only supports one SSI device
- * using two DMA channels.  We cannot support multiple DMA devices.
- *
- * ssi_stx_phys: bus address of SSI STX register
- * ssi_srx_phys: bus address of SSI SRX register
- * dma_channel: pointer to the DMA channel's registers
- * irq: IRQ for this DMA channel
- * assigned: set to 1 if that DMA channel is assigned to a substream
- */
-static struct {
+struct dma_object {
+       struct snd_soc_platform_driver dai;
        dma_addr_t ssi_stx_phys;
        dma_addr_t ssi_srx_phys;
-       struct ccsr_dma_channel __iomem *dma_channel[2];
-       unsigned int irq[2];
-       unsigned int assigned[2];
-} dma_global_data;
+       struct ccsr_dma_channel __iomem *channel;
+       unsigned int irq;
+       bool assigned;
+       char path[1];
+};
 
 /*
  * The number of DMA links to use.  Two is the bare minimum, but if you
@@ -88,8 +81,6 @@ static struct {
  * structure.
  *
  * @link[]: array of link descriptors
- * @controller_id: which DMA controller (0, 1, ...)
- * @channel_id: which DMA channel on the controller (0, 1, 2, ...)
  * @dma_channel: pointer to the DMA channel's registers
  * @irq: IRQ for this DMA channel
  * @substream: pointer to the substream object, needed by the ISR
@@ -104,8 +95,6 @@ static struct {
  */
 struct fsl_dma_private {
        struct fsl_dma_link_descriptor link[NUM_DMA_LINKS];
-       unsigned int controller_id;
-       unsigned int channel_id;
        struct ccsr_dma_channel __iomem *dma_channel;
        unsigned int irq;
        struct snd_pcm_substream *substream;
@@ -185,13 +174,23 @@ static void fsl_dma_update_pointers(struct fsl_dma_private *dma_private)
        struct fsl_dma_link_descriptor *link =
                &dma_private->link[dma_private->current_link];
 
-       /* Update our link descriptors to point to the next period */
-       if (dma_private->substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-               link->source_addr =
-                       cpu_to_be32(dma_private->dma_buf_next);
-       else
-               link->dest_addr =
-                       cpu_to_be32(dma_private->dma_buf_next);
+       /* Update our link descriptors to point to the next period. On a 36-bit
+        * system, we also need to update the ESAD bits.  We also set (keep) the
+        * snoop bits.  See the comments in fsl_dma_hw_params() about snooping.
+        */
+       if (dma_private->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+               link->source_addr = cpu_to_be32(dma_private->dma_buf_next);
+#ifdef CONFIG_PHYS_64BIT
+               link->source_attr = cpu_to_be32(CCSR_DMA_ATR_SNOOP |
+                       upper_32_bits(dma_private->dma_buf_next));
+#endif
+       } else {
+               link->dest_addr = cpu_to_be32(dma_private->dma_buf_next);
+#ifdef CONFIG_PHYS_64BIT
+               link->dest_attr = cpu_to_be32(CCSR_DMA_ATR_SNOOP |
+                       upper_32_bits(dma_private->dma_buf_next));
+#endif
+       }
 
        /* Update our variables for next time */
        dma_private->dma_buf_next += dma_private->period_size;
@@ -212,6 +211,9 @@ static void fsl_dma_update_pointers(struct fsl_dma_private *dma_private)
 static irqreturn_t fsl_dma_isr(int irq, void *dev_id)
 {
        struct fsl_dma_private *dma_private = dev_id;
+       struct snd_pcm_substream *substream = dma_private->substream;
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct device *dev = rtd->platform->dev;
        struct ccsr_dma_channel __iomem *dma_channel = dma_private->dma_channel;
        irqreturn_t ret = IRQ_NONE;
        u32 sr, sr2 = 0;
@@ -222,11 +224,8 @@ static irqreturn_t fsl_dma_isr(int irq, void *dev_id)
        sr = in_be32(&dma_channel->sr);
 
        if (sr & CCSR_DMA_SR_TE) {
-               dev_err(dma_private->substream->pcm->card->dev,
-                       "DMA transmit error (controller=%u channel=%u irq=%u\n",
-                       dma_private->controller_id,
-                       dma_private->channel_id, irq);
-               fsl_dma_abort_stream(dma_private->substream);
+               dev_err(dev, "dma transmit error\n");
+               fsl_dma_abort_stream(substream);
                sr2 |= CCSR_DMA_SR_TE;
                ret = IRQ_HANDLED;
        }
@@ -235,11 +234,8 @@ static irqreturn_t fsl_dma_isr(int irq, void *dev_id)
                ret = IRQ_HANDLED;
 
        if (sr & CCSR_DMA_SR_PE) {
-               dev_err(dma_private->substream->pcm->card->dev,
-                       "DMA%u programming error (channel=%u irq=%u)\n",
-                       dma_private->controller_id,
-                       dma_private->channel_id, irq);
-               fsl_dma_abort_stream(dma_private->substream);
+               dev_err(dev, "dma programming error\n");
+               fsl_dma_abort_stream(substream);
                sr2 |= CCSR_DMA_SR_PE;
                ret = IRQ_HANDLED;
        }
@@ -253,8 +249,6 @@ static irqreturn_t fsl_dma_isr(int irq, void *dev_id)
                ret = IRQ_HANDLED;
 
        if (sr & CCSR_DMA_SR_EOSI) {
-               struct snd_pcm_substream *substream = dma_private->substream;
-
                /* Tell ALSA we completed a period. */
                snd_pcm_period_elapsed(substream);
 
@@ -288,11 +282,19 @@ static irqreturn_t fsl_dma_isr(int irq, void *dev_id)
  * This function is called when the codec driver calls snd_soc_new_pcms(),
  * once for each .dai_link in the machine driver's snd_soc_card
  * structure.
+ *
+ * snd_dma_alloc_pages() is just a front-end to dma_alloc_coherent(), which
+ * (currently) always allocates the DMA buffer in lowmem, even if GFP_HIGHMEM
+ * is specified. Therefore, any DMA buffers we allocate will always be in low
+ * memory, but we support for 36-bit physical addresses anyway.
+ *
+ * Regardless of where the memory is actually allocated, since the device can
+ * technically DMA to any 36-bit address, we do need to set the DMA mask to 36.
  */
 static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
        struct snd_pcm *pcm)
 {
-       static u64 fsl_dma_dmamask = DMA_BIT_MASK(32);
+       static u64 fsl_dma_dmamask = DMA_BIT_MASK(36);
        int ret;
 
        if (!card->dev->dma_mask)
@@ -305,10 +307,8 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
                fsl_dma_hardware.buffer_bytes_max,
                &pcm->streams[0].substream->dma_buffer);
        if (ret) {
-               dev_err(card->dev,
-                       "Can't allocate playback DMA buffer (size=%u)\n",
-                       fsl_dma_hardware.buffer_bytes_max);
-               return -ENOMEM;
+               dev_err(card->dev, "can't allocate playback dma buffer\n");
+               return ret;
        }
 
        ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
@@ -316,10 +316,8 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
                &pcm->streams[1].substream->dma_buffer);
        if (ret) {
                snd_dma_free_pages(&pcm->streams[0].substream->dma_buffer);
-               dev_err(card->dev,
-                       "Can't allocate capture DMA buffer (size=%u)\n",
-                       fsl_dma_hardware.buffer_bytes_max);
-               return -ENOMEM;
+               dev_err(card->dev, "can't allocate capture dma buffer\n");
+               return ret;
        }
 
        return 0;
@@ -390,6 +388,10 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
 static int fsl_dma_open(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct device *dev = rtd->platform->dev;
+       struct dma_object *dma =
+               container_of(rtd->platform->driver, struct dma_object, dai);
        struct fsl_dma_private *dma_private;
        struct ccsr_dma_channel __iomem *dma_channel;
        dma_addr_t ld_buf_phys;
@@ -407,52 +409,44 @@ static int fsl_dma_open(struct snd_pcm_substream *substream)
        ret = snd_pcm_hw_constraint_integer(runtime,
                SNDRV_PCM_HW_PARAM_PERIODS);
        if (ret < 0) {
-               dev_err(substream->pcm->card->dev, "invalid buffer size\n");
+               dev_err(dev, "invalid buffer size\n");
                return ret;
        }
 
        channel = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1;
 
-       if (dma_global_data.assigned[channel]) {
-               dev_err(substream->pcm->card->dev,
-                       "DMA channel already assigned\n");
+       if (dma->assigned) {
+               dev_err(dev, "dma channel already assigned\n");
                return -EBUSY;
        }
 
-       dma_private = dma_alloc_coherent(substream->pcm->card->dev,
-               sizeof(struct fsl_dma_private), &ld_buf_phys, GFP_KERNEL);
+       dma_private = dma_alloc_coherent(dev, sizeof(struct fsl_dma_private),
+                                        &ld_buf_phys, GFP_KERNEL);
        if (!dma_private) {
-               dev_err(substream->pcm->card->dev,
-                       "can't allocate DMA private data\n");
+               dev_err(dev, "can't allocate dma private data\n");
                return -ENOMEM;
        }
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-               dma_private->ssi_sxx_phys = dma_global_data.ssi_stx_phys;
+               dma_private->ssi_sxx_phys = dma->ssi_stx_phys;
        else
-               dma_private->ssi_sxx_phys = dma_global_data.ssi_srx_phys;
+               dma_private->ssi_sxx_phys = dma->ssi_srx_phys;
 
-       dma_private->dma_channel = dma_global_data.dma_channel[channel];
-       dma_private->irq = dma_global_data.irq[channel];
+       dma_private->dma_channel = dma->channel;
+       dma_private->irq = dma->irq;
        dma_private->substream = substream;
        dma_private->ld_buf_phys = ld_buf_phys;
        dma_private->dma_buf_phys = substream->dma_buffer.addr;
 
-       /* We only support one DMA controller for now */
-       dma_private->controller_id = 0;
-       dma_private->channel_id = channel;
-
        ret = request_irq(dma_private->irq, fsl_dma_isr, 0, "DMA", dma_private);
        if (ret) {
-               dev_err(substream->pcm->card->dev,
-                       "can't register ISR for IRQ %u (ret=%i)\n",
+               dev_err(dev, "can't register ISR for IRQ %u (ret=%i)\n",
                        dma_private->irq, ret);
-               dma_free_coherent(substream->pcm->card->dev,
-                       sizeof(struct fsl_dma_private),
+               dma_free_coherent(dev, sizeof(struct fsl_dma_private),
                        dma_private, dma_private->ld_buf_phys);
                return ret;
        }
 
-       dma_global_data.assigned[channel] = 1;
+       dma->assigned = 1;
 
        snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
        snd_soc_set_runtime_hwparams(substream, &fsl_dma_hardware);
@@ -546,6 +540,8 @@ static int fsl_dma_hw_params(struct snd_pcm_substream *substream,
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct fsl_dma_private *dma_private = runtime->private_data;
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct device *dev = rtd->platform->dev;
 
        /* Number of bits per sample */
        unsigned int sample_size =
@@ -606,8 +602,7 @@ static int fsl_dma_hw_params(struct snd_pcm_substream *substream,
                break;
        default:
                /* We should never get here */
-               dev_err(substream->pcm->card->dev,
-                       "unsupported sample size %u\n", sample_size);
+               dev_err(dev, "unsupported sample size %u\n", sample_size);
                return -EINVAL;
        }
 
@@ -631,12 +626,7 @@ static int fsl_dma_hw_params(struct snd_pcm_substream *substream,
 
                link->count = cpu_to_be32(period_size);
 
-               /* Even though the DMA controller supports 36-bit addressing,
-                * for simplicity we allow only 32-bit addresses for the audio
-                * buffer itself.  This was enforced in fsl_dma_new() with the
-                * DMA mask.
-                *
-                * The snoop bit tells the DMA controller whether it should tell
+               /* The snoop bit tells the DMA controller whether it should tell
                 * the ECM to snoop during a read or write to an address. For
                 * audio, we use DMA to transfer data between memory and an I/O
                 * device (the SSI's STX0 or SRX0 register). Snooping is only
@@ -651,20 +641,24 @@ static int fsl_dma_hw_params(struct snd_pcm_substream *substream,
                 * flush out the data for the previous period.  So if you
                 * increased period_bytes_min to a large enough size, you might
                 * get more performance by not snooping, and you'll still be
-                * okay.
+                * okay.  You'll need to update fsl_dma_update_pointers() also.
                 */
                if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                        link->source_addr = cpu_to_be32(temp_addr);
-                       link->source_attr = cpu_to_be32(CCSR_DMA_ATR_SNOOP);
+                       link->source_attr = cpu_to_be32(CCSR_DMA_ATR_SNOOP |
+                               upper_32_bits(temp_addr));
 
                        link->dest_addr = cpu_to_be32(ssi_sxx_phys);
-                       link->dest_attr = cpu_to_be32(CCSR_DMA_ATR_NOSNOOP);
+                       link->dest_attr = cpu_to_be32(CCSR_DMA_ATR_NOSNOOP |
+                               upper_32_bits(ssi_sxx_phys));
                } else {
                        link->source_addr = cpu_to_be32(ssi_sxx_phys);
-                       link->source_attr = cpu_to_be32(CCSR_DMA_ATR_NOSNOOP);
+                       link->source_attr = cpu_to_be32(CCSR_DMA_ATR_NOSNOOP |
+                               upper_32_bits(ssi_sxx_phys));
 
                        link->dest_addr = cpu_to_be32(temp_addr);
-                       link->dest_attr = cpu_to_be32(CCSR_DMA_ATR_SNOOP);
+                       link->dest_attr = cpu_to_be32(CCSR_DMA_ATR_SNOOP |
+                               upper_32_bits(temp_addr));
                }
 
                temp_addr += period_size;
@@ -689,14 +683,29 @@ static snd_pcm_uframes_t fsl_dma_pointer(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct fsl_dma_private *dma_private = runtime->private_data;
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct device *dev = rtd->platform->dev;
        struct ccsr_dma_channel __iomem *dma_channel = dma_private->dma_channel;
        dma_addr_t position;
        snd_pcm_uframes_t frames;
 
-       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+       /* Obtain the current DMA pointer, but don't read the ESAD bits if we
+        * only have 32-bit DMA addresses.  This function is typically called
+        * in interrupt context, so we need to optimize it.
+        */
+       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                position = in_be32(&dma_channel->sar);
-       else
+#ifdef CONFIG_PHYS_64BIT
+               position |= (u64)(in_be32(&dma_channel->satr) &
+                                 CCSR_DMA_ATR_ESAD_MASK) << 32;
+#endif
+       } else {
                position = in_be32(&dma_channel->dar);
+#ifdef CONFIG_PHYS_64BIT
+               position |= (u64)(in_be32(&dma_channel->datr) &
+                                 CCSR_DMA_ATR_ESAD_MASK) << 32;
+#endif
+       }
 
        /*
         * When capture is started, the SSI immediately starts to fill its FIFO.
@@ -710,8 +719,7 @@ static snd_pcm_uframes_t fsl_dma_pointer(struct snd_pcm_substream *substream)
 
        if ((position < dma_private->dma_buf_phys) ||
            (position > dma_private->dma_buf_end)) {
-               dev_err(substream->pcm->card->dev,
-                       "dma pointer is out of range, halting stream\n");
+               dev_err(dev, "dma pointer is out of range, halting stream\n");
                return SNDRV_PCM_POS_XRUN;
        }
 
@@ -772,26 +780,28 @@ static int fsl_dma_close(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct fsl_dma_private *dma_private = runtime->private_data;
-       int dir = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1;
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct device *dev = rtd->platform->dev;
+       struct dma_object *dma =
+               container_of(rtd->platform->driver, struct dma_object, dai);
 
        if (dma_private) {
                if (dma_private->irq)
                        free_irq(dma_private->irq, dma_private);
 
                if (dma_private->ld_buf_phys) {
-                       dma_unmap_single(substream->pcm->card->dev,
-                               dma_private->ld_buf_phys,
-                               sizeof(dma_private->link), DMA_TO_DEVICE);
+                       dma_unmap_single(dev, dma_private->ld_buf_phys,
+                                        sizeof(dma_private->link),
+                                        DMA_TO_DEVICE);
                }
 
                /* Deallocate the fsl_dma_private structure */
-               dma_free_coherent(substream->pcm->card->dev,
-                       sizeof(struct fsl_dma_private),
-                       dma_private, dma_private->ld_buf_phys);
+               dma_free_coherent(dev, sizeof(struct fsl_dma_private),
+                                 dma_private, dma_private->ld_buf_phys);
                substream->runtime->private_data = NULL;
        }
 
-       dma_global_data.assigned[dir] = 0;
+       dma->assigned = 0;
 
        return 0;
 }
@@ -814,6 +824,37 @@ static void fsl_dma_free_dma_buffers(struct snd_pcm *pcm)
        }
 }
 
+/**
+ * find_ssi_node -- returns the SSI node that points to his DMA channel node
+ *
+ * Although this DMA driver attempts to operate independently of the other
+ * devices, it still needs to determine some information about the SSI device
+ * that it's working with.  Unfortunately, the device tree does not contain
+ * a pointer from the DMA channel node to the SSI node -- the pointer goes the
+ * other way.  So we need to scan the device tree for SSI nodes until we find
+ * the one that points to the given DMA channel node.  It's ugly, but at least
+ * it's contained in this one function.
+ */
+static struct device_node *find_ssi_node(struct device_node *dma_channel_np)
+{
+       struct device_node *ssi_np, *np;
+
+       for_each_compatible_node(ssi_np, NULL, "fsl,mpc8610-ssi") {
+               /* Check each DMA phandle to see if it points to us.  We
+                * assume that device_node pointers are a valid comparison.
+                */
+               np = of_parse_phandle(ssi_np, "fsl,playback-dma", 0);
+               if (np == dma_channel_np)
+                       return ssi_np;
+
+               np = of_parse_phandle(ssi_np, "fsl,capture-dma", 0);
+               if (np == dma_channel_np)
+                       return ssi_np;
+       }
+
+       return NULL;
+}
+
 static struct snd_pcm_ops fsl_dma_ops = {
        .open           = fsl_dma_open,
        .close          = fsl_dma_close,
@@ -823,59 +864,102 @@ static struct snd_pcm_ops fsl_dma_ops = {
        .pointer        = fsl_dma_pointer,
 };
 
-struct snd_soc_platform fsl_soc_platform = {
-       .name           = "fsl-dma",
-       .pcm_ops        = &fsl_dma_ops,
-       .pcm_new        = fsl_dma_new,
-       .pcm_free       = fsl_dma_free_dma_buffers,
-};
-EXPORT_SYMBOL_GPL(fsl_soc_platform);
+static int __devinit fsl_soc_dma_probe(struct of_device *of_dev,
+                                      const struct of_device_id *match)
+ {
+       struct dma_object *dma;
+       struct device_node *np = of_dev->dev.of_node;
+       struct device_node *ssi_np;
+       struct resource res;
+       int ret;
 
-/**
- * fsl_dma_configure: store the DMA parameters from the fabric driver.
- *
- * This function is called by the ASoC fabric driver to give us the DMA and
- * SSI channel information.
- *
- * Unfortunately, ASoC V1 does make it possible to determine the DMA/SSI
- * data when a substream is created, so for now we need to store this data
- * into a global variable.  This means that we can only support one DMA
- * controller, and hence only one SSI.
- */
-int fsl_dma_configure(struct fsl_dma_info *dma_info)
+       /* Find the SSI node that points to us. */
+       ssi_np = find_ssi_node(np);
+       if (!ssi_np) {
+               dev_err(&of_dev->dev, "cannot find parent SSI node\n");
+               return -ENODEV;
+       }
+
+       ret = of_address_to_resource(ssi_np, 0, &res);
+       of_node_put(ssi_np);
+       if (ret) {
+               dev_err(&of_dev->dev, "could not determine device resources\n");
+               return ret;
+       }
+
+       dma = kzalloc(sizeof(*dma) + strlen(np->full_name), GFP_KERNEL);
+       if (!dma) {
+               dev_err(&of_dev->dev, "could not allocate dma object\n");
+               return -ENOMEM;
+       }
+
+       strcpy(dma->path, np->full_name);
+       dma->dai.ops = &fsl_dma_ops;
+       dma->dai.pcm_new = fsl_dma_new;
+       dma->dai.pcm_free = fsl_dma_free_dma_buffers;
+
+       /* Store the SSI-specific information that we need */
+       dma->ssi_stx_phys = res.start + offsetof(struct ccsr_ssi, stx0);
+       dma->ssi_srx_phys = res.start + offsetof(struct ccsr_ssi, srx0);
+
+       ret = snd_soc_register_platform(&of_dev->dev, &dma->dai);
+       if (ret) {
+               dev_err(&of_dev->dev, "could not register platform\n");
+               kfree(dma);
+               return ret;
+       }
+
+       dma->channel = of_iomap(np, 0);
+       dma->irq = irq_of_parse_and_map(np, 0);
+
+       dev_set_drvdata(&of_dev->dev, dma);
+
+       return 0;
+}
+
+static int __devexit fsl_soc_dma_remove(struct of_device *of_dev)
 {
-       static int initialized;
+       struct dma_object *dma = dev_get_drvdata(&of_dev->dev);
 
-       /* We only support one DMA controller for now */
-       if (initialized)
-               return 0;
+       snd_soc_unregister_platform(&of_dev->dev);
+       iounmap(dma->channel);
+       irq_dispose_mapping(dma->irq);
+       kfree(dma);
 
-       dma_global_data.ssi_stx_phys = dma_info->ssi_stx_phys;
-       dma_global_data.ssi_srx_phys = dma_info->ssi_srx_phys;
-       dma_global_data.dma_channel[0] = dma_info->dma_channel[0];
-       dma_global_data.dma_channel[1] = dma_info->dma_channel[1];
-       dma_global_data.irq[0] = dma_info->dma_irq[0];
-       dma_global_data.irq[1] = dma_info->dma_irq[1];
-       dma_global_data.assigned[0] = 0;
-       dma_global_data.assigned[1] = 0;
-
-       initialized = 1;
-       return 1;
+       return 0;
 }
-EXPORT_SYMBOL_GPL(fsl_dma_configure);
 
-static int __init fsl_soc_platform_init(void)
+static const struct of_device_id fsl_soc_dma_ids[] = {
+       { .compatible = "fsl,ssi-dma-channel", },
+       {}
+};
+MODULE_DEVICE_TABLE(of, fsl_soc_dma_ids);
+
+static struct of_platform_driver fsl_soc_dma_driver = {
+       .driver = {
+               .name = "fsl-pcm-audio",
+               .owner = THIS_MODULE,
+               .of_match_table = fsl_soc_dma_ids,
+       },
+       .probe = fsl_soc_dma_probe,
+       .remove = __devexit_p(fsl_soc_dma_remove),
+};
+
+static int __init fsl_soc_dma_init(void)
 {
-       return snd_soc_register_platform(&fsl_soc_platform);
+       pr_info("Freescale Elo DMA ASoC PCM Driver\n");
+
+       return of_register_platform_driver(&fsl_soc_dma_driver);
 }
-module_init(fsl_soc_platform_init);
 
-static void __exit fsl_soc_platform_exit(void)
+static void __exit fsl_soc_dma_exit(void)
 {
-       snd_soc_unregister_platform(&fsl_soc_platform);
+       of_unregister_platform_driver(&fsl_soc_dma_driver);
 }
-module_exit(fsl_soc_platform_exit);
+
+module_init(fsl_soc_dma_init);
+module_exit(fsl_soc_dma_exit);
 
 MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
-MODULE_DESCRIPTION("Freescale Elo DMA ASoC PCM module");
-MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Freescale Elo DMA ASoC PCM Driver");
+MODULE_LICENSE("GPL v2");
index 385d4a42603cf3b681ab12c6f050ccd3e11f7bb0..78fee97e80362eab8035b5eee0bc5df44ce8499b 100644 (file)
@@ -126,24 +126,4 @@ struct fsl_dma_link_descriptor {
        u8 res[4];      /* Reserved */
 } __attribute__ ((aligned(32), packed));
 
-/* DMA information needed to create a snd_soc_dai object
- *
- * ssi_stx_phys: bus address of SSI STX register to use
- * ssi_srx_phys: bus address of SSI SRX register to use
- * dma[0]: points to the DMA channel to use for playback
- * dma[1]: points to the DMA channel to use for capture
- * dma_irq[0]: IRQ of the DMA channel to use for playback
- * dma_irq[1]: IRQ of the DMA channel to use for capture
- */
-struct fsl_dma_info {
-       dma_addr_t ssi_stx_phys;
-       dma_addr_t ssi_srx_phys;
-       struct ccsr_dma_channel __iomem *dma_channel[2];
-       unsigned int dma_irq[2];
-};
-
-extern struct snd_soc_platform fsl_soc_platform;
-
-int fsl_dma_configure(struct fsl_dma_info *dma_info);
-
 #endif
index 762c1b8e8e4e078e48efede6dfc52b5a81eb4fc4..7939c337ed9db2ebc8f63a7d4cafc37bfe8d9a42 100644 (file)
@@ -3,10 +3,11 @@
  *
  * Author: Timur Tabi <timur@freescale.com>
  *
- * Copyright 2007-2008 Freescale Semiconductor, Inc.  This file is licensed
- * under the terms of the GNU General Public License version 2.  This
- * program is licensed "as is" without any warranty of any kind, whether
- * express or implied.
+ * Copyright 2007-2010 Freescale Semiconductor, Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
  */
 
 #include <linux/init.h>
@@ -15,6 +16,7 @@
 #include <linux/device.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
+#include <linux/of_platform.h>
 
 #include <sound/core.h>
 #include <sound/pcm.h>
@@ -22,8 +24,6 @@
 #include <sound/initval.h>
 #include <sound/soc.h>
 
-#include <asm/immap_86xx.h>
-
 #include "fsl_ssi.h"
 
 /**
 /**
  * fsl_ssi_private: per-SSI private data
  *
- * @name: short name for this device ("SSI0", "SSI1", etc)
  * @ssi: pointer to the SSI's registers
  * @ssi_phys: physical address of the SSI registers
  * @irq: IRQ of this SSI
  * @first_stream: pointer to the stream that was opened first
  * @second_stream: pointer to second stream
- * @dev: struct device pointer
  * @playback: the number of playback streams opened
  * @capture: the number of capture streams opened
  * @asynchronous: 0=synchronous mode, 1=asynchronous mode
  * @cpu_dai: the CPU DAI for this device
  * @dev_attr: the sysfs device attribute structure
  * @stats: SSI statistics
+ * @name: name for this device
  */
 struct fsl_ssi_private {
-       char name[8];
        struct ccsr_ssi __iomem *ssi;
        dma_addr_t ssi_phys;
        unsigned int irq;
        struct snd_pcm_substream *first_stream;
        struct snd_pcm_substream *second_stream;
-       struct device *dev;
        unsigned int playback;
        unsigned int capture;
        int asynchronous;
-       struct snd_soc_dai cpu_dai;
+       struct snd_soc_dai_driver cpu_dai_drv;
        struct device_attribute dev_attr;
+       struct platform_device *pdev;
 
        struct {
                unsigned int rfrc;
@@ -122,6 +120,8 @@ struct fsl_ssi_private {
                unsigned int tfe1;
                unsigned int tfe0;
        } stats;
+
+       char name[1];
 };
 
 /**
@@ -280,7 +280,7 @@ static int fsl_ssi_startup(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct fsl_ssi_private *ssi_private = rtd->dai->cpu_dai->private_data;
+       struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(rtd->cpu_dai);
 
        /*
         * If this is the first stream opened, then request the IRQ
@@ -290,6 +290,7 @@ static int fsl_ssi_startup(struct snd_pcm_substream *substream,
                struct ccsr_ssi __iomem *ssi = ssi_private->ssi;
                int ret;
 
+               /* The 'name' should not have any slashes in it. */
                ret = request_irq(ssi_private->irq, fsl_ssi_isr, 0,
                                  ssi_private->name, ssi_private);
                if (ret < 0) {
@@ -422,7 +423,7 @@ static int fsl_ssi_startup(struct snd_pcm_substream *substream,
 static int fsl_ssi_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *cpu_dai)
 {
-       struct fsl_ssi_private *ssi_private = cpu_dai->private_data;
+       struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(cpu_dai);
 
        if (substream == ssi_private->first_stream) {
                struct ccsr_ssi __iomem *ssi = ssi_private->ssi;
@@ -458,7 +459,7 @@ static int fsl_ssi_trigger(struct snd_pcm_substream *substream, int cmd,
                           struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct fsl_ssi_private *ssi_private = rtd->dai->cpu_dai->private_data;
+       struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct ccsr_ssi __iomem *ssi = ssi_private->ssi;
 
        switch (cmd) {
@@ -497,7 +498,7 @@ static void fsl_ssi_shutdown(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct fsl_ssi_private *ssi_private = rtd->dai->cpu_dai->private_data;
+       struct fsl_ssi_private *ssi_private = snd_soc_dai_get_drvdata(rtd->cpu_dai);
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                ssi_private->playback--;
@@ -523,56 +524,15 @@ static void fsl_ssi_shutdown(struct snd_pcm_substream *substream,
        }
 }
 
-/**
- * fsl_ssi_set_sysclk: set the clock frequency and direction
- *
- * This function is called by the machine driver to tell us what the clock
- * frequency and direction are.
- *
- * Currently, we only support operating as a clock slave (SND_SOC_CLOCK_IN),
- * and we don't care about the frequency.  Return an error if the direction
- * is not SND_SOC_CLOCK_IN.
- *
- * @clk_id: reserved, should be zero
- * @freq: the frequency of the given clock ID, currently ignored
- * @dir: SND_SOC_CLOCK_IN (clock slave) or SND_SOC_CLOCK_OUT (clock master)
- */
-static int fsl_ssi_set_sysclk(struct snd_soc_dai *cpu_dai,
-                             int clk_id, unsigned int freq, int dir)
-{
-
-       return (dir == SND_SOC_CLOCK_IN) ? 0 : -EINVAL;
-}
-
-/**
- * fsl_ssi_set_fmt: set the serial format.
- *
- * This function is called by the machine driver to tell us what serial
- * format to use.
- *
- * Currently, we only support I2S mode.  Return an error if the format is
- * not SND_SOC_DAIFMT_I2S.
- *
- * @format: one of SND_SOC_DAIFMT_xxx
- */
-static int fsl_ssi_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int format)
-{
-       return (format == SND_SOC_DAIFMT_I2S) ? 0 : -EINVAL;
-}
-
-/**
- * fsl_ssi_dai_template: template CPU DAI for the SSI
- */
 static struct snd_soc_dai_ops fsl_ssi_dai_ops = {
        .startup        = fsl_ssi_startup,
        .hw_params      = fsl_ssi_hw_params,
        .shutdown       = fsl_ssi_shutdown,
        .trigger        = fsl_ssi_trigger,
-       .set_sysclk     = fsl_ssi_set_sysclk,
-       .set_fmt        = fsl_ssi_set_fmt,
 };
 
-static struct snd_soc_dai fsl_ssi_dai_template = {
+/* Template for the CPU dai driver structure */
+static struct snd_soc_dai_driver fsl_ssi_dai_template = {
        .playback = {
                /* The SSI does not support monaural audio. */
                .channels_min = 2,
@@ -640,95 +600,186 @@ static ssize_t fsl_sysfs_ssi_show(struct device *dev,
 }
 
 /**
- * fsl_ssi_create_dai: create a snd_soc_dai structure
- *
- * This function is called by the machine driver to create a snd_soc_dai
- * structure.  The function creates an ssi_private object, which contains
- * the snd_soc_dai.  It also creates the sysfs statistics device.
+ * Make every character in a string lower-case
  */
-struct snd_soc_dai *fsl_ssi_create_dai(struct fsl_ssi_info *ssi_info)
+static void make_lowercase(char *s)
+{
+       char *p = s;
+       char c;
+
+       while ((c = *p)) {
+               if ((c >= 'A') && (c <= 'Z'))
+                       *p = c + ('a' - 'A');
+               p++;
+       }
+}
+
+static int __devinit fsl_ssi_probe(struct of_device *of_dev,
+                                  const struct of_device_id *match)
 {
-       struct snd_soc_dai *fsl_ssi_dai;
        struct fsl_ssi_private *ssi_private;
        int ret = 0;
-       struct device_attribute *dev_attr;
+       struct device_attribute *dev_attr = NULL;
+       struct device_node *np = of_dev->dev.of_node;
+       const char *p, *sprop;
+       struct resource res;
+       char name[64];
+
+       /* SSIs that are not connected on the board should have a
+        *      status = "disabled"
+        * property in their device tree nodes.
+        */
+       if (!of_device_is_available(np))
+               return -ENODEV;
+
+       /* Check for a codec-handle property. */
+       if (!of_get_property(np, "codec-handle", NULL)) {
+               dev_err(&of_dev->dev, "missing codec-handle property\n");
+               return -ENODEV;
+       }
+
+       /* We only support the SSI in "I2S Slave" mode */
+       sprop = of_get_property(np, "fsl,mode", NULL);
+       if (!sprop || strcmp(sprop, "i2s-slave")) {
+               dev_notice(&of_dev->dev, "mode %s is unsupported\n", sprop);
+               return -ENODEV;
+       }
 
-       ssi_private = kzalloc(sizeof(struct fsl_ssi_private), GFP_KERNEL);
+       /* The DAI name is the last part of the full name of the node. */
+       p = strrchr(np->full_name, '/') + 1;
+       ssi_private = kzalloc(sizeof(struct fsl_ssi_private) + strlen(p),
+                             GFP_KERNEL);
        if (!ssi_private) {
-               dev_err(ssi_info->dev, "could not allocate DAI object\n");
-               return NULL;
+               dev_err(&of_dev->dev, "could not allocate DAI object\n");
+               return -ENOMEM;
        }
-       memcpy(&ssi_private->cpu_dai, &fsl_ssi_dai_template,
-              sizeof(struct snd_soc_dai));
 
-       fsl_ssi_dai = &ssi_private->cpu_dai;
-       dev_attr = &ssi_private->dev_attr;
+       strcpy(ssi_private->name, p);
 
-       sprintf(ssi_private->name, "ssi%u", (u8) ssi_info->id);
-       ssi_private->ssi = ssi_info->ssi;
-       ssi_private->ssi_phys = ssi_info->ssi_phys;
-       ssi_private->irq = ssi_info->irq;
-       ssi_private->dev = ssi_info->dev;
-       ssi_private->asynchronous = ssi_info->asynchronous;
+       /* Initialize this copy of the CPU DAI driver structure */
+       memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_dai_template,
+              sizeof(fsl_ssi_dai_template));
+       ssi_private->cpu_dai_drv.name = ssi_private->name;
+
+       /* Get the addresses and IRQ */
+       ret = of_address_to_resource(np, 0, &res);
+       if (ret) {
+               dev_err(&of_dev->dev, "could not determine device resources\n");
+               kfree(ssi_private);
+               return ret;
+       }
+       ssi_private->ssi = ioremap(res.start, 1 + res.end - res.start);
+       ssi_private->ssi_phys = res.start;
+       ssi_private->irq = irq_of_parse_and_map(np, 0);
 
-       dev_set_drvdata(ssi_private->dev, fsl_ssi_dai);
+       /* Are the RX and the TX clocks locked? */
+       if (of_find_property(np, "fsl,ssi-asynchronous", NULL))
+               ssi_private->asynchronous = 1;
+       else
+               ssi_private->cpu_dai_drv.symmetric_rates = 1;
 
        /* Initialize the the device_attribute structure */
-       dev_attr->attr.name = "ssi-stats";
+       dev_attr = &ssi_private->dev_attr;
+       dev_attr->attr.name = "statistics";
        dev_attr->attr.mode = S_IRUGO;
        dev_attr->show = fsl_sysfs_ssi_show;
 
-       ret = device_create_file(ssi_private->dev, dev_attr);
+       ret = device_create_file(&of_dev->dev, dev_attr);
        if (ret) {
-               dev_err(ssi_info->dev, "could not create sysfs %s file\n",
+               dev_err(&of_dev->dev, "could not create sysfs %s file\n",
                        ssi_private->dev_attr.attr.name);
-               kfree(fsl_ssi_dai);
-               return NULL;
+               goto error;
        }
 
-       fsl_ssi_dai->private_data = ssi_private;
-       fsl_ssi_dai->name = ssi_private->name;
-       fsl_ssi_dai->id = ssi_info->id;
-       fsl_ssi_dai->dev = ssi_info->dev;
-       fsl_ssi_dai->symmetric_rates = 1;
+       /* Register with ASoC */
+       dev_set_drvdata(&of_dev->dev, ssi_private);
+
+       ret = snd_soc_register_dai(&of_dev->dev, &ssi_private->cpu_dai_drv);
+       if (ret) {
+               dev_err(&of_dev->dev, "failed to register DAI: %d\n", ret);
+               goto error;
+       }
 
-       ret = snd_soc_register_dai(fsl_ssi_dai);
-       if (ret != 0) {
-               dev_err(ssi_info->dev, "failed to register DAI: %d\n", ret);
-               kfree(fsl_ssi_dai);
-               return NULL;
+       /* Trigger the machine driver's probe function.  The platform driver
+        * name of the machine driver is taken from the /model property of the
+        * device tree.  We also pass the address of the CPU DAI driver
+        * structure.
+        */
+       sprop = of_get_property(of_find_node_by_path("/"), "model", NULL);
+       /* Sometimes the model name has a "fsl," prefix, so we strip that. */
+       p = strrchr(sprop, ',');
+       if (p)
+               sprop = p + 1;
+       snprintf(name, sizeof(name), "snd-soc-%s", sprop);
+       make_lowercase(name);
+
+       ssi_private->pdev =
+               platform_device_register_data(&of_dev->dev, name, 0, NULL, 0);
+       if (IS_ERR(ssi_private->pdev)) {
+               ret = PTR_ERR(ssi_private->pdev);
+               dev_err(&of_dev->dev, "failed to register platform: %d\n", ret);
+               goto error;
        }
 
-       return fsl_ssi_dai;
+       return 0;
+
+error:
+       snd_soc_unregister_dai(&of_dev->dev);
+       dev_set_drvdata(&of_dev->dev, NULL);
+       if (dev_attr)
+               device_remove_file(&of_dev->dev, dev_attr);
+       irq_dispose_mapping(ssi_private->irq);
+       iounmap(ssi_private->ssi);
+       kfree(ssi_private);
+
+       return ret;
 }
-EXPORT_SYMBOL_GPL(fsl_ssi_create_dai);
 
-/**
- * fsl_ssi_destroy_dai: destroy the snd_soc_dai object
- *
- * This function undoes the operations of fsl_ssi_create_dai()
- */
-void fsl_ssi_destroy_dai(struct snd_soc_dai *fsl_ssi_dai)
+static int fsl_ssi_remove(struct of_device *of_dev)
 {
-       struct fsl_ssi_private *ssi_private =
-       container_of(fsl_ssi_dai, struct fsl_ssi_private, cpu_dai);
-
-       device_remove_file(ssi_private->dev, &ssi_private->dev_attr);
+       struct fsl_ssi_private *ssi_private = dev_get_drvdata(&of_dev->dev);
 
-       snd_soc_unregister_dai(&ssi_private->cpu_dai);
+       platform_device_unregister(ssi_private->pdev);
+       snd_soc_unregister_dai(&of_dev->dev);
+       device_remove_file(&of_dev->dev, &ssi_private->dev_attr);
 
        kfree(ssi_private);
+       dev_set_drvdata(&of_dev->dev, NULL);
+
+       return 0;
 }
-EXPORT_SYMBOL_GPL(fsl_ssi_destroy_dai);
+
+static const struct of_device_id fsl_ssi_ids[] = {
+       { .compatible = "fsl,mpc8610-ssi", },
+       {}
+};
+MODULE_DEVICE_TABLE(of, fsl_ssi_ids);
+
+static struct of_platform_driver fsl_ssi_driver = {
+       .driver = {
+               .name = "fsl-ssi-dai",
+               .owner = THIS_MODULE,
+               .of_match_table = fsl_ssi_ids,
+       },
+       .probe = fsl_ssi_probe,
+       .remove = fsl_ssi_remove,
+};
 
 static int __init fsl_ssi_init(void)
 {
        printk(KERN_INFO "Freescale Synchronous Serial Interface (SSI) ASoC Driver\n");
 
-       return 0;
+       return of_register_platform_driver(&fsl_ssi_driver);
 }
+
+static void __exit fsl_ssi_exit(void)
+{
+       of_unregister_platform_driver(&fsl_ssi_driver);
+}
+
 module_init(fsl_ssi_init);
+module_exit(fsl_ssi_exit);
 
 MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
 MODULE_DESCRIPTION("Freescale Synchronous Serial Interface (SSI) ASoC Driver");
-MODULE_LICENSE("GPL");
+MODULE_LICENSE("GPL v2");
index eade01feaab69f0d69ea82c13466307d52158a14..217300029b5ba44463ccf4423c09093a602bac1d 100644 (file)
@@ -196,31 +196,5 @@ struct ccsr_ssi {
 #define CCSR_SSI_SOR_WAIT(x) (((x) & 3) << CCSR_SSI_SOR_WAIT_SHIFT)
 #define CCSR_SSI_SOR_SYNRST            0x00000001
 
-/* Instantiation data for an SSI interface
- *
- * This structure contains all the information that the the SSI driver needs
- * to instantiate an SSI interface with ALSA.  The machine driver should
- * create this structure, fill it in, call fsl_ssi_create_dai(), and then
- * delete the structure.
- *
- * id: which SSI this is (0, 1, etc. )
- * ssi: pointer to the SSI's registers
- * ssi_phys: physical address of the SSI registers
- * irq: IRQ of this SSI
- * dev: struct device, used to create the sysfs statistics file
- * asynchronous: 0=synchronous mode, 1=asynchronous mode
-*/
-struct fsl_ssi_info {
-       unsigned int id;
-       struct ccsr_ssi __iomem *ssi;
-       dma_addr_t ssi_phys;
-       unsigned int irq;
-       struct device *dev;
-       int asynchronous;
-};
-
-struct snd_soc_dai *fsl_ssi_create_dai(struct fsl_ssi_info *ssi_info);
-void fsl_ssi_destroy_dai(struct snd_soc_dai *fsl_ssi_dai);
-
 #endif
 
index 1d4e7164e80af1c4dfd98c057e42b88f52e448f1..dce6b551cd7816be84c5dbd77db74be4c88e8315 100644 (file)
@@ -9,6 +9,8 @@
 #include <linux/module.h>
 #include <linux/of_device.h>
 #include <linux/slab.h>
+#include <linux/of_device.h>
+#include <linux/of_platform.h>
 
 #include <sound/soc.h>
 
@@ -107,7 +109,7 @@ static int psc_dma_hw_free(struct snd_pcm_substream *substream)
 static int psc_dma_trigger(struct snd_pcm_substream *substream, int cmd)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma);
        struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
@@ -212,7 +214,7 @@ static int psc_dma_open(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct psc_dma_stream *s;
        int rc;
 
@@ -239,7 +241,7 @@ static int psc_dma_open(struct snd_pcm_substream *substream)
 static int psc_dma_close(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct psc_dma_stream *s;
 
        dev_dbg(psc_dma->dev, "psc_dma_close(substream=%p)\n", substream);
@@ -264,7 +266,7 @@ static snd_pcm_uframes_t
 psc_dma_pointer(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct psc_dma_stream *s;
        dma_addr_t count;
 
@@ -302,11 +304,11 @@ static int psc_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
                           struct snd_pcm *pcm)
 {
        struct snd_soc_pcm_runtime *rtd = pcm->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        size_t size = psc_dma_hardware.buffer_bytes_max;
        int rc = 0;
 
-       dev_dbg(rtd->socdev->dev, "psc_dma_new(card=%p, dai=%p, pcm=%p)\n",
+       dev_dbg(rtd->platform->dev, "psc_dma_new(card=%p, dai=%p, pcm=%p)\n",
                card, dai, pcm);
 
        if (!card->dev->dma_mask)
@@ -328,8 +330,8 @@ static int psc_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
                        goto capture_alloc_err;
        }
 
-       if (rtd->socdev->card->codec->ac97)
-               rtd->socdev->card->codec->ac97->private_data = psc_dma;
+       if (rtd->codec->ac97)
+               rtd->codec->ac97->private_data = psc_dma;
 
        return 0;
 
@@ -349,7 +351,7 @@ static void psc_dma_free(struct snd_pcm *pcm)
        struct snd_pcm_substream *substream;
        int stream;
 
-       dev_dbg(rtd->socdev->dev, "psc_dma_free(pcm=%p)\n", pcm);
+       dev_dbg(rtd->platform->dev, "psc_dma_free(pcm=%p)\n", pcm);
 
        for (stream = 0; stream < 2; stream++) {
                substream = pcm->streams[stream].substream;
@@ -361,15 +363,14 @@ static void psc_dma_free(struct snd_pcm *pcm)
        }
 }
 
-struct snd_soc_platform mpc5200_audio_dma_platform = {
-       .name           = "mpc5200-psc-audio",
-       .pcm_ops        = &psc_dma_ops,
+static struct snd_soc_platform_driver mpc5200_audio_dma_platform = {
+       .ops            = &psc_dma_ops,
        .pcm_new        = &psc_dma_new,
        .pcm_free       = &psc_dma_free,
 };
-EXPORT_SYMBOL_GPL(mpc5200_audio_dma_platform);
 
-int mpc5200_audio_dma_create(struct of_device *op)
+static int mpc5200_hpcd_probe(struct of_device *op,
+               const struct of_device_id *match)
 {
        phys_addr_t fifo;
        struct psc_dma *psc_dma;
@@ -475,7 +476,7 @@ int mpc5200_audio_dma_create(struct of_device *op)
        dev_set_drvdata(&op->dev, psc_dma);
 
        /* Tell the ASoC OF helpers about it */
-       return snd_soc_register_platform(&mpc5200_audio_dma_platform);
+       return snd_soc_register_platform(&op->dev, &mpc5200_audio_dma_platform);
 out_irq:
        free_irq(psc_dma->irq, psc_dma);
        free_irq(psc_dma->capture.irq, &psc_dma->capture);
@@ -486,15 +487,14 @@ out_unmap:
        iounmap(regs);
        return ret;
 }
-EXPORT_SYMBOL_GPL(mpc5200_audio_dma_create);
 
-int mpc5200_audio_dma_destroy(struct of_device *op)
+static int mpc5200_hpcd_remove(struct of_device *op)
 {
        struct psc_dma *psc_dma = dev_get_drvdata(&op->dev);
 
        dev_dbg(&op->dev, "mpc5200_audio_dma_destroy()\n");
 
-       snd_soc_unregister_platform(&mpc5200_audio_dma_platform);
+       snd_soc_unregister_platform(&op->dev);
 
        bcom_gen_bd_rx_release(psc_dma->capture.bcom_task);
        bcom_gen_bd_tx_release(psc_dma->playback.bcom_task);
@@ -510,7 +510,35 @@ int mpc5200_audio_dma_destroy(struct of_device *op)
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(mpc5200_audio_dma_destroy);
+
+static struct of_device_id mpc5200_hpcd_match[] = {
+       {
+               .compatible = "fsl,mpc5200-pcm",
+       },
+       {}
+};
+MODULE_DEVICE_TABLE(of, mpc5200_hpcd_match);
+
+static struct of_platform_driver mpc5200_hpcd_of_driver = {
+       .owner          = THIS_MODULE,
+       .name           = "mpc5200-pcm-audio",
+       .match_table    = mpc5200_hpcd_match,
+       .probe          = mpc5200_hpcd_probe,
+       .remove         = mpc5200_hpcd_remove,
+};
+
+static int __init mpc5200_hpcd_init(void)
+{
+       return of_register_platform_driver(&mpc5200_hpcd_of_driver);
+}
+
+static void __exit mpc5200_hpcd_exit(void)
+{
+       of_unregister_platform_driver(&mpc5200_hpcd_of_driver);
+}
+
+module_init(mpc5200_hpcd_init);
+module_exit(mpc5200_hpcd_exit);
 
 MODULE_AUTHOR("Grant Likely <grant.likely@secretlab.ca>");
 MODULE_DESCRIPTION("Freescale MPC5200 PSC in DMA mode ASoC Driver");
index 22208b373fb90fd64bd294d4f8eeb6a90ab841b1..7472531bc2a45d741fe47ef35353c7e7f5d00647 100644 (file)
@@ -81,9 +81,4 @@ to_psc_dma_stream(struct snd_pcm_substream *substream, struct psc_dma *psc_dma)
        return &psc_dma->playback;
 }
 
-int mpc5200_audio_dma_create(struct of_device *op);
-int mpc5200_audio_dma_destroy(struct of_device *op);
-
-extern struct snd_soc_platform mpc5200_audio_dma_platform;
-
 #endif /* __SOUND_SOC_FSL_MPC5200_DMA_H__ */
index e2ee220bfb7ea86dcd322da92a5025c0ce026f7e..11706c128c08e6eb215c1d3911fdb8fcdfa380c2 100644 (file)
@@ -129,7 +129,7 @@ static int psc_ac97_hw_analog_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *cpu_dai)
 {
-       struct psc_dma *psc_dma = cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
        struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma);
 
        dev_dbg(psc_dma->dev, "%s(substream=%p) p_size=%i p_bytes=%i"
@@ -152,7 +152,7 @@ static int psc_ac97_hw_digital_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *cpu_dai)
 {
-       struct psc_dma *psc_dma = cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
 
        dev_dbg(psc_dma->dev, "%s(substream=%p)\n", __func__, substream);
 
@@ -167,8 +167,7 @@ static int psc_ac97_hw_digital_params(struct snd_pcm_substream *substream,
 static int psc_ac97_trigger(struct snd_pcm_substream *substream, int cmd,
                                                        struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(dai);
        struct psc_dma_stream *s = to_psc_dma_stream(substream, psc_dma);
 
        switch (cmd) {
@@ -193,10 +192,9 @@ static int psc_ac97_trigger(struct snd_pcm_substream *substream, int cmd,
        return 0;
 }
 
-static int psc_ac97_probe(struct platform_device *pdev,
-                                       struct snd_soc_dai *cpu_dai)
+static int psc_ac97_probe(struct snd_soc_dai *cpu_dai)
 {
-       struct psc_dma *psc_dma = cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
        struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
 
        /* Go */
@@ -223,9 +221,8 @@ static struct snd_soc_dai_ops psc_ac97_digital_ops = {
        .hw_params      = psc_ac97_hw_digital_params,
 };
 
-struct snd_soc_dai psc_ac97_dai[] = {
+static struct snd_soc_dai_driver psc_ac97_dai[] = {
 {
-       .name   = "AC97",
        .ac97_control = 1,
        .probe  = psc_ac97_probe,
        .playback = {
@@ -243,7 +240,6 @@ struct snd_soc_dai psc_ac97_dai[] = {
        .ops = &psc_ac97_analog_ops,
 },
 {
-       .name   = "SPDIF",
        .ac97_control = 1,
        .playback = {
                .channels_min   = 1,
@@ -254,7 +250,6 @@ struct snd_soc_dai psc_ac97_dai[] = {
        },
        .ops = &psc_ac97_digital_ops,
 } };
-EXPORT_SYMBOL_GPL(psc_ac97_dai);
 
 
 
@@ -266,18 +261,11 @@ EXPORT_SYMBOL_GPL(psc_ac97_dai);
 static int __devinit psc_ac97_of_probe(struct of_device *op,
                                      const struct of_device_id *match)
 {
-       int rc, i;
+       int rc;
        struct snd_ac97 ac97;
        struct mpc52xx_psc __iomem *regs;
 
-       rc = mpc5200_audio_dma_create(op);
-       if (rc != 0)
-               return rc;
-
-       for (i = 0; i < ARRAY_SIZE(psc_ac97_dai); i++)
-               psc_ac97_dai[i].dev = &op->dev;
-
-       rc = snd_soc_register_dais(psc_ac97_dai, ARRAY_SIZE(psc_ac97_dai));
+       rc = snd_soc_register_dais(&op->dev, psc_ac97_dai, ARRAY_SIZE(psc_ac97_dai));
        if (rc != 0) {
                dev_err(&op->dev, "Failed to register DAI\n");
                return rc;
@@ -287,9 +275,6 @@ static int __devinit psc_ac97_of_probe(struct of_device *op,
        regs = psc_dma->psc_regs;
        ac97.private_data = psc_dma;
 
-       for (i = 0; i < ARRAY_SIZE(psc_ac97_dai); i++)
-               psc_ac97_dai[i].private_data = psc_dma;
-
        psc_dma->imr = 0;
        out_be16(&psc_dma->psc_regs->isr_imr.imr, psc_dma->imr);
 
@@ -305,7 +290,8 @@ static int __devinit psc_ac97_of_probe(struct of_device *op,
 
 static int __devexit psc_ac97_of_remove(struct of_device *op)
 {
-       return mpc5200_audio_dma_destroy(op);
+       snd_soc_unregister_dais(&op->dev, ARRAY_SIZE(psc_ac97_dai));
+       return 0;
 }
 
 /* Match table for of_platform binding */
index 4bc18c35c369f41fb5f7b582ed94432a8e241fbd..e881e784b27041ffe1ead098aa581e43ac18b8cd 100644 (file)
@@ -7,8 +7,6 @@
 #ifndef __SOUND_SOC_FSL_MPC52xx_PSC_AC97_H__
 #define __SOUND_SOC_FSL_MPC52xx_PSC_AC97_H__
 
-extern struct snd_soc_dai psc_ac97_dai[];
-
 #define MPC5200_AC97_NORMAL 0
 #define MPC5200_AC97_SPDIF 1
 
index 676841cbae9895a21fbcc15aa34ddef0a8c27c96..5b9f2c73f031ce85beab138aa20af89044ec6f31 100644 (file)
@@ -40,7 +40,7 @@ static int psc_i2s_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct psc_dma *psc_dma = rtd->dai->cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        u32 mode;
 
        dev_dbg(psc_dma->dev, "%s(substream=%p) p_size=%i p_bytes=%i"
@@ -88,7 +88,7 @@ static int psc_i2s_hw_params(struct snd_pcm_substream *substream,
 static int psc_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
                              int clk_id, unsigned int freq, int dir)
 {
-       struct psc_dma *psc_dma = cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
        dev_dbg(psc_dma->dev, "psc_i2s_set_sysclk(cpu_dai=%p, dir=%i)\n",
                                cpu_dai, dir);
        return (dir == SND_SOC_CLOCK_IN) ? 0 : -EINVAL;
@@ -107,7 +107,7 @@ static int psc_i2s_set_sysclk(struct snd_soc_dai *cpu_dai,
  */
 static int psc_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int format)
 {
-       struct psc_dma *psc_dma = cpu_dai->private_data;
+       struct psc_dma *psc_dma = snd_soc_dai_get_drvdata(cpu_dai);
        dev_dbg(psc_dma->dev, "psc_i2s_set_fmt(cpu_dai=%p, format=%i)\n",
                                cpu_dai, format);
        return (format == SND_SOC_DAIFMT_I2S) ? 0 : -EINVAL;
@@ -129,8 +129,7 @@ static struct snd_soc_dai_ops psc_i2s_dai_ops = {
        .set_fmt        = psc_i2s_set_fmt,
 };
 
-struct snd_soc_dai psc_i2s_dai[] = {{
-       .name   = "I2S",
+static struct snd_soc_dai_driver psc_i2s_dai[] = {{
        .playback = {
                .channels_min = 2,
                .channels_max = 2,
@@ -145,7 +144,6 @@ struct snd_soc_dai psc_i2s_dai[] = {{
        },
        .ops = &psc_i2s_dai_ops,
 } };
-EXPORT_SYMBOL_GPL(psc_i2s_dai);
 
 /* ---------------------------------------------------------------------
  * OF platform bus binding code:
@@ -159,11 +157,7 @@ static int __devinit psc_i2s_of_probe(struct of_device *op,
        struct psc_dma *psc_dma;
        struct mpc52xx_psc __iomem *regs;
 
-       rc = mpc5200_audio_dma_create(op);
-       if (rc != 0)
-               return rc;
-
-       rc = snd_soc_register_dais(psc_i2s_dai, ARRAY_SIZE(psc_i2s_dai));
+       rc = snd_soc_register_dais(&op->dev, psc_i2s_dai, ARRAY_SIZE(psc_i2s_dai));
        if (rc != 0) {
                pr_err("Failed to register DAI\n");
                return 0;
@@ -207,7 +201,8 @@ static int __devinit psc_i2s_of_probe(struct of_device *op,
 
 static int __devexit psc_i2s_of_remove(struct of_device *op)
 {
-       return mpc5200_audio_dma_destroy(op);
+       snd_soc_unregister_dais(&op->dev, ARRAY_SIZE(psc_i2s_dai));
+       return 0;
 }
 
 /* Match table for of_platform binding */
index 6a2764ee8203980b25b07227f3aba9978c72e286..38339c158ed94678377f08e2ae1a9e6dea59c9c5 100644 (file)
@@ -1,85 +1,96 @@
 /**
- * Freescale MPC8610HPCD ALSA SoC Fabric driver
+ * Freescale MPC8610HPCD ALSA SoC Machine driver
  *
  * Author: Timur Tabi <timur@freescale.com>
  *
- * Copyright 2007-2008 Freescale Semiconductor, Inc.  This file is licensed
- * under the terms of the GNU General Public License version 2.  This
- * program is licensed "as is" without any warranty of any kind, whether
- * express or implied.
+ * Copyright 2007-2010 Freescale Semiconductor, Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2.  This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
  */
 
-#include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/of_device.h>
-#include <linux/of_platform.h>
 #include <sound/soc.h>
-#include <asm/immap_86xx.h>
+#include <asm/fsl_guts.h>
 
-#include "../codecs/cs4270.h"
 #include "fsl_dma.h"
 #include "fsl_ssi.h"
 
+/* There's only one global utilities register */
+static phys_addr_t guts_phys;
+
+#define DAI_NAME_SIZE  32
+
 /**
- * mpc8610_hpcd_data: fabric-specific ASoC device data
+ * mpc8610_hpcd_data: machine-specific ASoC device data
  *
  * This structure contains data for a single sound platform device on an
  * MPC8610 HPCD.  Some of the data is taken from the device tree.
  */
 struct mpc8610_hpcd_data {
-       struct snd_soc_device sound_devdata;
-       struct snd_soc_dai_link dai;
-       struct snd_soc_card machine;
+       struct snd_soc_dai_link dai[2];
+       struct snd_soc_card card;
        unsigned int dai_format;
        unsigned int codec_clk_direction;
        unsigned int cpu_clk_direction;
        unsigned int clk_frequency;
-       struct ccsr_guts __iomem *guts;
-       struct ccsr_ssi __iomem *ssi;
-       unsigned int ssi_id;            /* 0 = SSI1, 1 = SSI2, etc */
-       unsigned int ssi_irq;
-       unsigned int dma_id;            /* 0 = DMA1, 1 = DMA2, etc */
-       unsigned int dma_irq[2];
-       struct ccsr_dma_channel __iomem *dma[2];
+       unsigned int ssi_id;            /* 0 = SSI1, 1 = SSI2, etc */
+       unsigned int dma_id[2];         /* 0 = DMA1, 1 = DMA2, etc */
        unsigned int dma_channel_id[2]; /* 0 = ch 0, 1 = ch 1, etc*/
+       char codec_dai_name[DAI_NAME_SIZE];
+       char codec_name[DAI_NAME_SIZE];
+       char platform_name[2][DAI_NAME_SIZE]; /* One for each DMA channel */
 };
 
 /**
- * mpc8610_hpcd_machine_probe: initalize the board
+ * mpc8610_hpcd_machine_probe: initialize the board
  *
- * This function is called when platform_device_add() is called.  It is used
- * to initialize the board-specific hardware.
+ * This function is used to initialize the board-specific hardware.
  *
  * Here we program the DMACR and PMUXCR registers.
  */
 static int mpc8610_hpcd_machine_probe(struct platform_device *sound_device)
 {
+       struct snd_soc_card *card = platform_get_drvdata(sound_device);
        struct mpc8610_hpcd_data *machine_data =
-               sound_device->dev.platform_data;
+               container_of(card, struct mpc8610_hpcd_data, card);
+       struct ccsr_guts_86xx __iomem *guts;
 
-       /* Program the signal routing between the SSI and the DMA */
-       guts_set_dmacr(machine_data->guts, machine_data->dma_id,
-               machine_data->dma_channel_id[0], CCSR_GUTS_DMACR_DEV_SSI);
-       guts_set_dmacr(machine_data->guts, machine_data->dma_id,
-               machine_data->dma_channel_id[1], CCSR_GUTS_DMACR_DEV_SSI);
+       guts = ioremap(guts_phys, sizeof(struct ccsr_guts_86xx));
+       if (!guts) {
+               dev_err(card->dev, "could not map global utilities\n");
+               return -ENOMEM;
+       }
 
-       guts_set_pmuxcr_dma(machine_data->guts, machine_data->dma_id,
-               machine_data->dma_channel_id[0], 0);
-       guts_set_pmuxcr_dma(machine_data->guts, machine_data->dma_id,
-               machine_data->dma_channel_id[1], 0);
+       /* Program the signal routing between the SSI and the DMA */
+       guts_set_dmacr(guts, machine_data->dma_id[0],
+                      machine_data->dma_channel_id[0],
+                      CCSR_GUTS_DMACR_DEV_SSI);
+       guts_set_dmacr(guts, machine_data->dma_id[1],
+                      machine_data->dma_channel_id[1],
+                      CCSR_GUTS_DMACR_DEV_SSI);
+
+       guts_set_pmuxcr_dma(guts, machine_data->dma_id[0],
+                           machine_data->dma_channel_id[0], 0);
+       guts_set_pmuxcr_dma(guts, machine_data->dma_id[1],
+                           machine_data->dma_channel_id[1], 0);
 
        switch (machine_data->ssi_id) {
        case 0:
-               clrsetbits_be32(&machine_data->guts->pmuxcr,
+               clrsetbits_be32(&guts->pmuxcr,
                        CCSR_GUTS_PMUXCR_SSI1_MASK, CCSR_GUTS_PMUXCR_SSI1_SSI);
                break;
        case 1:
-               clrsetbits_be32(&machine_data->guts->pmuxcr,
+               clrsetbits_be32(&guts->pmuxcr,
                        CCSR_GUTS_PMUXCR_SSI2_MASK, CCSR_GUTS_PMUXCR_SSI2_SSI);
                break;
        }
 
+       iounmap(guts);
+
        return 0;
 }
 
@@ -93,38 +104,15 @@ static int mpc8610_hpcd_machine_probe(struct platform_device *sound_device)
 static int mpc8610_hpcd_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct mpc8610_hpcd_data *machine_data =
-               rtd->socdev->dev->platform_data;
+               container_of(rtd->card, struct mpc8610_hpcd_data, card);
+       struct device *dev = rtd->card->dev;
        int ret = 0;
 
-       /* Tell the CPU driver what the serial protocol is. */
-       ret = snd_soc_dai_set_fmt(cpu_dai, machine_data->dai_format);
-       if (ret < 0) {
-               dev_err(substream->pcm->card->dev,
-                       "could not set CPU driver audio format\n");
-               return ret;
-       }
-
        /* Tell the codec driver what the serial protocol is. */
-       ret = snd_soc_dai_set_fmt(codec_dai, machine_data->dai_format);
+       ret = snd_soc_dai_set_fmt(rtd->codec_dai, machine_data->dai_format);
        if (ret < 0) {
-               dev_err(substream->pcm->card->dev,
-                       "could not set codec driver audio format\n");
-               return ret;
-       }
-
-       /*
-        * Tell the CPU driver what the clock frequency is, and whether it's a
-        * slave or master.
-        */
-       ret = snd_soc_dai_set_sysclk(cpu_dai, 0,
-                                       machine_data->clk_frequency,
-                                       machine_data->cpu_clk_direction);
-       if (ret < 0) {
-               dev_err(substream->pcm->card->dev,
-                       "could not set CPU driver clock parameters\n");
+               dev_err(dev, "could not set codec driver audio format\n");
                return ret;
        }
 
@@ -132,12 +120,11 @@ static int mpc8610_hpcd_startup(struct snd_pcm_substream *substream)
         * Tell the codec driver what the MCLK frequency is, and whether it's
         * a slave or master.
         */
-       ret = snd_soc_dai_set_sysclk(codec_dai, 0,
-                                       machine_data->clk_frequency,
-                                       machine_data->codec_clk_direction);
+       ret = snd_soc_dai_set_sysclk(rtd->codec_dai, 0,
+                                    machine_data->clk_frequency,
+                                    machine_data->codec_clk_direction);
        if (ret < 0) {
-               dev_err(substream->pcm->card->dev,
-                       "could not set codec driver clock params\n");
+               dev_err(dev, "could not set codec driver clock params\n");
                return ret;
        }
 
@@ -150,116 +137,254 @@ static int mpc8610_hpcd_startup(struct snd_pcm_substream *substream)
  * This function is called to remove the sound device for one SSI.  We
  * de-program the DMACR and PMUXCR register.
  */
-int mpc8610_hpcd_machine_remove(struct platform_device *sound_device)
+static int mpc8610_hpcd_machine_remove(struct platform_device *sound_device)
 {
+       struct snd_soc_card *card = platform_get_drvdata(sound_device);
        struct mpc8610_hpcd_data *machine_data =
-               sound_device->dev.platform_data;
+               container_of(card, struct mpc8610_hpcd_data, card);
+       struct ccsr_guts_86xx __iomem *guts;
+
+       guts = ioremap(guts_phys, sizeof(struct ccsr_guts_86xx));
+       if (!guts) {
+               dev_err(card->dev, "could not map global utilities\n");
+               return -ENOMEM;
+       }
 
        /* Restore the signal routing */
 
-       guts_set_dmacr(machine_data->guts, machine_data->dma_id,
-               machine_data->dma_channel_id[0], 0);
-       guts_set_dmacr(machine_data->guts, machine_data->dma_id,
-               machine_data->dma_channel_id[1], 0);
+       guts_set_dmacr(guts, machine_data->dma_id[0],
+                      machine_data->dma_channel_id[0], 0);
+       guts_set_dmacr(guts, machine_data->dma_id[1],
+                      machine_data->dma_channel_id[1], 0);
 
        switch (machine_data->ssi_id) {
        case 0:
-               clrsetbits_be32(&machine_data->guts->pmuxcr,
+               clrsetbits_be32(&guts->pmuxcr,
                        CCSR_GUTS_PMUXCR_SSI1_MASK, CCSR_GUTS_PMUXCR_SSI1_LA);
                break;
        case 1:
-               clrsetbits_be32(&machine_data->guts->pmuxcr,
+               clrsetbits_be32(&guts->pmuxcr,
                        CCSR_GUTS_PMUXCR_SSI2_MASK, CCSR_GUTS_PMUXCR_SSI2_LA);
                break;
        }
 
+       iounmap(guts);
+
        return 0;
 }
 
 /**
- * mpc8610_hpcd_ops: ASoC fabric driver operations
+ * mpc8610_hpcd_ops: ASoC machine driver operations
  */
 static struct snd_soc_ops mpc8610_hpcd_ops = {
        .startup = mpc8610_hpcd_startup,
 };
 
 /**
- * mpc8610_hpcd_probe: OF probe function for the fabric driver
+ * get_node_by_phandle_name - get a node by its phandle name
  *
- * This function gets called when an SSI node is found in the device tree.
+ * This function takes a node, the name of a property in that node, and a
+ * compatible string.  Assuming the property is a phandle to another node,
+ * it returns that node, (optionally) if that node is compatible.
  *
- * Although this is a fabric driver, the SSI node is the "master" node with
- * respect to audio hardware connections.  Therefore, we create a new ASoC
- * device for each new SSI node that has a codec attached.
+ * If the property is not a phandle, or the node it points to is not compatible
+ * with the specific string, then NULL is returned.
+ */
+static struct device_node *get_node_by_phandle_name(struct device_node *np,
+                                              const char *name,
+                                              const char *compatible)
+{
+       const phandle *ph;
+       int len;
+
+       ph = of_get_property(np, name, &len);
+       if (!ph || (len != sizeof(phandle)))
+               return NULL;
+
+       np = of_find_node_by_phandle(*ph);
+       if (!np)
+               return NULL;
+
+       if (compatible && !of_device_is_compatible(np, compatible)) {
+               of_node_put(np);
+               return NULL;
+       }
+
+       return np;
+}
+
+/**
+ * get_parent_cell_index -- return the cell-index of the parent of a node
  *
- * FIXME: Currently, we only support one DMA controller, so if there are
- * multiple SSI nodes with codecs, only the first will be supported.
+ * Return the value of the cell-index property of the parent of the given
+ * node.  This is used for DMA channel nodes that need to know the DMA ID
+ * of the controller they are on.
+ */
+static int get_parent_cell_index(struct device_node *np)
+{
+       struct device_node *parent = of_get_parent(np);
+       const u32 *iprop;
+
+       if (!parent)
+               return -1;
+
+       iprop = of_get_property(parent, "cell-index", NULL);
+       of_node_put(parent);
+
+       if (!iprop)
+               return -1;
+
+       return *iprop;
+}
+
+/**
+ * codec_node_dev_name - determine the dev_name for a codec node
+ *
+ * This function determines the dev_name for an I2C node.  This is the name
+ * that would be returned by dev_name() if this device_node were part of a
+ * 'struct device'  It's ugly and hackish, but it works.
  *
- * FIXME: Even if we did support multiple DMA controllers, we have no
- * mechanism for assigning DMA controllers and channels to the individual
- * SSI devices.  We also probably aren't compatible with the generic Elo DMA
- * device driver.
+ * The dev_name for such devices include the bus number and I2C address. For
+ * example, "cs4270-codec.0-004f".
  */
-static int mpc8610_hpcd_probe(struct of_device *ofdev,
-       const struct of_device_id *match)
+static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
 {
-       struct device_node *np = ofdev->dev.of_node;
-       struct device_node *codec_np = NULL;
-       struct device_node *guts_np = NULL;
-       struct device_node *dma_np = NULL;
-       struct device_node *dma_channel_np = NULL;
-       const phandle *codec_ph;
-       const char *sprop;
        const u32 *iprop;
+       int bus, addr;
+       char temp[DAI_NAME_SIZE];
+
+       of_modalias_node(np, temp, DAI_NAME_SIZE);
+
+       iprop = of_get_property(np, "reg", NULL);
+       if (!iprop)
+               return -EINVAL;
+
+       addr = *iprop;
+
+       bus = get_parent_cell_index(np);
+       if (bus < 0)
+               return bus;
+
+       snprintf(buf, len, "%s-codec.%u-%04x", temp, bus, addr);
+
+       return 0;
+}
+
+static int get_dma_channel(struct device_node *ssi_np,
+                          const char *compatible,
+                          struct snd_soc_dai_link *dai,
+                          unsigned int *dma_channel_id,
+                          unsigned int *dma_id)
+{
        struct resource res;
+       struct device_node *dma_channel_np;
+       const u32 *iprop;
+       int ret;
+
+       dma_channel_np = get_node_by_phandle_name(ssi_np, compatible,
+                                                 "fsl,ssi-dma-channel");
+       if (!dma_channel_np)
+               return -EINVAL;
+
+       /* Determine the dev_name for the device_node.  This code mimics the
+        * behavior of of_device_make_bus_id(). We need this because ASoC uses
+        * the dev_name() of the device to match the platform (DMA) device with
+        * the CPU (SSI) device.  It's all ugly and hackish, but it works (for
+        * now).
+        *
+        * dai->platform name should already point to an allocated buffer.
+        */
+       ret = of_address_to_resource(dma_channel_np, 0, &res);
+       if (ret)
+               return ret;
+       snprintf((char *)dai->platform_name, DAI_NAME_SIZE, "%llx.%s",
+                (unsigned long long) res.start, dma_channel_np->name);
+
+       iprop = of_get_property(dma_channel_np, "cell-index", NULL);
+       if (!iprop) {
+               of_node_put(dma_channel_np);
+               return -EINVAL;
+       }
+
+       *dma_channel_id = *iprop;
+       *dma_id = get_parent_cell_index(dma_channel_np);
+       of_node_put(dma_channel_np);
+
+       return 0;
+}
+
+/**
+ * mpc8610_hpcd_probe: platform probe function for the machine driver
+ *
+ * Although this is a machine driver, the SSI node is the "master" node with
+ * respect to audio hardware connections.  Therefore, we create a new ASoC
+ * device for each new SSI node that has a codec attached.
+ */
+static int mpc8610_hpcd_probe(struct platform_device *pdev)
+{
+       struct device *dev = pdev->dev.parent;
+       /* of_dev is the OF device for the SSI node that probed us */
+       struct of_device *of_dev = container_of(dev, struct of_device, dev);
+       struct device_node *np = of_dev->dev.of_node;
+       struct device_node *codec_np = NULL;
        struct platform_device *sound_device = NULL;
        struct mpc8610_hpcd_data *machine_data;
-       struct fsl_ssi_info ssi_info;
-       struct fsl_dma_info dma_info;
        int ret = -ENODEV;
-       unsigned int playback_dma_channel;
-       unsigned int capture_dma_channel;
+       const char *sprop;
+       const u32 *iprop;
+
+       /* We are only interested in SSIs with a codec phandle in them,
+        * so let's make sure this SSI has one. The MPC8610 HPCD only
+        * knows about the CS4270 codec, so reject anything else.
+        */
+       codec_np = get_node_by_phandle_name(np, "codec-handle",
+                                           "cirrus,cs4270");
+       if (!codec_np) {
+               dev_err(dev, "invalid codec node\n");
+               return -EINVAL;
+       }
 
        machine_data = kzalloc(sizeof(struct mpc8610_hpcd_data), GFP_KERNEL);
        if (!machine_data)
                return -ENOMEM;
 
-       memset(&ssi_info, 0, sizeof(ssi_info));
-       memset(&dma_info, 0, sizeof(dma_info));
-
-       ssi_info.dev = &ofdev->dev;
+       machine_data->dai[0].cpu_dai_name = dev_name(&of_dev->dev);
+       machine_data->dai[0].ops = &mpc8610_hpcd_ops;
 
-       /*
-        * We are only interested in SSIs with a codec phandle in them, so let's
-        * make sure this SSI has one.
-        */
-       codec_ph = of_get_property(np, "codec-handle", NULL);
-       if (!codec_ph)
+       /* Determine the codec name, it will be used as the codec DAI name */
+       ret = codec_node_dev_name(codec_np, machine_data->codec_name,
+                                 DAI_NAME_SIZE);
+       if (ret) {
+               dev_err(&pdev->dev, "invalid codec node %s\n",
+                       codec_np->full_name);
+               ret = -EINVAL;
                goto error;
+       }
+       machine_data->dai[0].codec_name = machine_data->codec_name;
 
-       codec_np = of_find_node_by_phandle(*codec_ph);
-       if (!codec_np)
-               goto error;
+       /* The DAI name from the codec (snd_soc_dai_driver.name) */
+       machine_data->dai[0].codec_dai_name = "cs4270-hifi";
 
-       /* The MPC8610 HPCD only knows about the CS4270 codec, so reject
-          anything else. */
-       if (!of_device_is_compatible(codec_np, "cirrus,cs4270"))
-               goto error;
+       /* We register two DAIs per SSI, one for playback and the other for
+        * capture.  Currently, we only support codecs that have one DAI for
+        * both playback and capture.
+        */
+       memcpy(&machine_data->dai[1], &machine_data->dai[0],
+              sizeof(struct snd_soc_dai_link));
 
        /* Get the device ID */
        iprop = of_get_property(np, "cell-index", NULL);
        if (!iprop) {
-               dev_err(&ofdev->dev, "cell-index property not found\n");
+               dev_err(&pdev->dev, "cell-index property not found\n");
                ret = -EINVAL;
                goto error;
        }
        machine_data->ssi_id = *iprop;
-       ssi_info.id = *iprop;
 
        /* Get the serial format and clock direction. */
        sprop = of_get_property(np, "fsl,mode", NULL);
        if (!sprop) {
-               dev_err(&ofdev->dev, "fsl,mode property not found\n");
+               dev_err(&pdev->dev, "fsl,mode property not found\n");
                ret = -EINVAL;
                goto error;
        }
@@ -269,15 +394,14 @@ static int mpc8610_hpcd_probe(struct of_device *ofdev,
                machine_data->codec_clk_direction = SND_SOC_CLOCK_OUT;
                machine_data->cpu_clk_direction = SND_SOC_CLOCK_IN;
 
-               /*
-                * In i2s-slave mode, the codec has its own clock source, so we
+               /* In i2s-slave mode, the codec has its own clock source, so we
                 * need to get the frequency from the device tree and pass it to
                 * the codec driver.
                 */
                iprop = of_get_property(codec_np, "clock-frequency", NULL);
                if (!iprop || !*iprop) {
-                       dev_err(&ofdev->dev, "codec bus-frequency property "
-                               "is missing or invalid\n");
+                       dev_err(&pdev->dev, "codec bus-frequency "
+                               "property is missing or invalid\n");
                        ret = -EINVAL;
                        goto error;
                }
@@ -311,317 +435,153 @@ static int mpc8610_hpcd_probe(struct of_device *ofdev,
                machine_data->codec_clk_direction = SND_SOC_CLOCK_IN;
                machine_data->cpu_clk_direction = SND_SOC_CLOCK_OUT;
        } else {
-               dev_err(&ofdev->dev,
-                       "unrecognized fsl,mode property \"%s\"\n", sprop);
+               dev_err(&pdev->dev,
+                       "unrecognized fsl,mode property '%s'\n", sprop);
                ret = -EINVAL;
                goto error;
        }
 
        if (!machine_data->clk_frequency) {
-               dev_err(&ofdev->dev, "unknown clock frequency\n");
+               dev_err(&pdev->dev, "unknown clock frequency\n");
                ret = -EINVAL;
                goto error;
        }
 
-       /* Read the SSI information from the device tree */
-       ret = of_address_to_resource(np, 0, &res);
+       /* Find the playback DMA channel to use. */
+       machine_data->dai[0].platform_name = machine_data->platform_name[0];
+       ret = get_dma_channel(np, "fsl,playback-dma", &machine_data->dai[0],
+                             &machine_data->dma_channel_id[0],
+                             &machine_data->dma_id[0]);
        if (ret) {
-               dev_err(&ofdev->dev, "could not obtain SSI address\n");
-               goto error;
-       }
-       if (!res.start) {
-               dev_err(&ofdev->dev, "invalid SSI address\n");
-               goto error;
-       }
-       ssi_info.ssi_phys = res.start;
-
-       machine_data->ssi = ioremap(ssi_info.ssi_phys, sizeof(struct ccsr_ssi));
-       if (!machine_data->ssi) {
-               dev_err(&ofdev->dev, "could not map SSI address %x\n",
-                       ssi_info.ssi_phys);
-               ret = -EINVAL;
+               dev_err(&pdev->dev, "missing/invalid playback DMA phandle\n");
                goto error;
        }
-       ssi_info.ssi = machine_data->ssi;
 
-
-       /* Get the IRQ of the SSI */
-       machine_data->ssi_irq = irq_of_parse_and_map(np, 0);
-       if (!machine_data->ssi_irq) {
-               dev_err(&ofdev->dev, "could not get SSI IRQ\n");
-               ret = -EINVAL;
-               goto error;
-       }
-       ssi_info.irq = machine_data->ssi_irq;
-
-       /* Do we want to use asynchronous mode? */
-       ssi_info.asynchronous =
-               of_find_property(np, "fsl,ssi-asynchronous", NULL) ? 1 : 0;
-       if (ssi_info.asynchronous)
-               dev_info(&ofdev->dev, "using asynchronous mode\n");
-
-       /* Map the global utilities registers. */
-       guts_np = of_find_compatible_node(NULL, NULL, "fsl,mpc8610-guts");
-       if (!guts_np) {
-               dev_err(&ofdev->dev, "could not obtain address of GUTS\n");
-               ret = -EINVAL;
-               goto error;
-       }
-       machine_data->guts = of_iomap(guts_np, 0);
-       of_node_put(guts_np);
-       if (!machine_data->guts) {
-               dev_err(&ofdev->dev, "could not map GUTS\n");
-               ret = -EINVAL;
-               goto error;
-       }
-
-       /* Find the DMA channels to use.  Both SSIs need to use the same DMA
-        * controller, so let's use DMA#1.
-        */
-       for_each_compatible_node(dma_np, NULL, "fsl,mpc8610-dma") {
-               iprop = of_get_property(dma_np, "cell-index", NULL);
-               if (iprop && (*iprop == 0)) {
-                       of_node_put(dma_np);
-                       break;
-               }
-       }
-       if (!dma_np) {
-               dev_err(&ofdev->dev, "could not find DMA node\n");
-               ret = -EINVAL;
-               goto error;
-       }
-       machine_data->dma_id = *iprop;
-
-       /* SSI1 needs to use DMA Channels 0 and 1, and SSI2 needs to use DMA
-        * channels 2 and 3.  This is just how the MPC8610 is wired
-        * internally.
-        */
-       playback_dma_channel = (machine_data->ssi_id == 0) ? 0 : 2;
-       capture_dma_channel = (machine_data->ssi_id == 0) ? 1 : 3;
-
-       /*
-        * Find the DMA channels to use.
-        */
-       while ((dma_channel_np = of_get_next_child(dma_np, dma_channel_np))) {
-               iprop = of_get_property(dma_channel_np, "cell-index", NULL);
-               if (iprop && (*iprop == playback_dma_channel)) {
-                       /* dma_channel[0] and dma_irq[0] are for playback */
-                       dma_info.dma_channel[0] = of_iomap(dma_channel_np, 0);
-                       dma_info.dma_irq[0] =
-                               irq_of_parse_and_map(dma_channel_np, 0);
-                       machine_data->dma_channel_id[0] = *iprop;
-                       continue;
-               }
-               if (iprop && (*iprop == capture_dma_channel)) {
-                       /* dma_channel[1] and dma_irq[1] are for capture */
-                       dma_info.dma_channel[1] = of_iomap(dma_channel_np, 0);
-                       dma_info.dma_irq[1] =
-                               irq_of_parse_and_map(dma_channel_np, 0);
-                       machine_data->dma_channel_id[1] = *iprop;
-                       continue;
-               }
-       }
-       if (!dma_info.dma_channel[0] || !dma_info.dma_channel[1] ||
-           !dma_info.dma_irq[0] || !dma_info.dma_irq[1]) {
-               dev_err(&ofdev->dev, "could not find DMA channels\n");
-               ret = -EINVAL;
+       /* Find the capture DMA channel to use. */
+       machine_data->dai[1].platform_name = machine_data->platform_name[1];
+       ret = get_dma_channel(np, "fsl,capture-dma", &machine_data->dai[1],
+                             &machine_data->dma_channel_id[1],
+                             &machine_data->dma_id[1]);
+       if (ret) {
+               dev_err(&pdev->dev, "missing/invalid capture DMA phandle\n");
                goto error;
        }
 
-       dma_info.ssi_stx_phys = ssi_info.ssi_phys +
-               offsetof(struct ccsr_ssi, stx0);
-       dma_info.ssi_srx_phys = ssi_info.ssi_phys +
-               offsetof(struct ccsr_ssi, srx0);
-
-       /* We have the DMA information, so tell the DMA driver what it is */
-       if (!fsl_dma_configure(&dma_info)) {
-               dev_err(&ofdev->dev, "could not instantiate DMA device\n");
-               ret = -EBUSY;
-               goto error;
-       }
+       /* Initialize our DAI data structure.  */
+       machine_data->dai[0].stream_name = "playback";
+       machine_data->dai[1].stream_name = "capture";
+       machine_data->dai[0].name = machine_data->dai[0].stream_name;
+       machine_data->dai[1].name = machine_data->dai[1].stream_name;
 
-       /*
-        * Initialize our DAI data structure.  We should probably get this
-        * information from the device tree.
-        */
-       machine_data->dai.name = "CS4270";
-       machine_data->dai.stream_name = "CS4270";
-
-       machine_data->dai.cpu_dai = fsl_ssi_create_dai(&ssi_info);
-       machine_data->dai.codec_dai = &cs4270_dai; /* The codec_dai we want */
-       machine_data->dai.ops = &mpc8610_hpcd_ops;
-
-       machine_data->machine.probe = mpc8610_hpcd_machine_probe;
-       machine_data->machine.remove = mpc8610_hpcd_machine_remove;
-       machine_data->machine.name = "MPC8610 HPCD";
-       machine_data->machine.num_links = 1;
-       machine_data->machine.dai_link = &machine_data->dai;
+       machine_data->card.probe = mpc8610_hpcd_machine_probe;
+       machine_data->card.remove = mpc8610_hpcd_machine_remove;
+       machine_data->card.name = pdev->name; /* The platform driver name */
+       machine_data->card.num_links = 2;
+       machine_data->card.dai_link = machine_data->dai;
 
        /* Allocate a new audio platform device structure */
        sound_device = platform_device_alloc("soc-audio", -1);
        if (!sound_device) {
-               dev_err(&ofdev->dev, "platform device allocation failed\n");
+               dev_err(&pdev->dev, "platform device alloc failed\n");
                ret = -ENOMEM;
                goto error;
        }
 
-       machine_data->sound_devdata.card = &machine_data->machine;
-       machine_data->sound_devdata.codec_dev = &soc_codec_device_cs4270;
-       machine_data->machine.platform = &fsl_soc_platform;
-
-       sound_device->dev.platform_data = machine_data;
-
-
-       /* Set the platform device and ASoC device to point to each other */
-       platform_set_drvdata(sound_device, &machine_data->sound_devdata);
+       /* Associate the card data with the sound device */
+       platform_set_drvdata(sound_device, &machine_data->card);
 
-       machine_data->sound_devdata.dev = &sound_device->dev;
-
-
-       /* Tell ASoC to probe us.  This will call mpc8610_hpcd_machine.probe(),
-          if it exists. */
+       /* Register with ASoC */
        ret = platform_device_add(sound_device);
-
        if (ret) {
-               dev_err(&ofdev->dev, "platform device add failed\n");
+               dev_err(&pdev->dev, "platform device add failed\n");
                goto error;
        }
 
-       dev_set_drvdata(&ofdev->dev, sound_device);
+       of_node_put(codec_np);
 
        return 0;
 
 error:
        of_node_put(codec_np);
-       of_node_put(guts_np);
-       of_node_put(dma_np);
-       of_node_put(dma_channel_np);
 
        if (sound_device)
                platform_device_unregister(sound_device);
 
-       if (machine_data->dai.cpu_dai)
-               fsl_ssi_destroy_dai(machine_data->dai.cpu_dai);
-
-       if (ssi_info.ssi)
-               iounmap(ssi_info.ssi);
-
-       if (ssi_info.irq)
-               irq_dispose_mapping(ssi_info.irq);
-
-       if (dma_info.dma_channel[0])
-               iounmap(dma_info.dma_channel[0]);
-
-       if (dma_info.dma_channel[1])
-               iounmap(dma_info.dma_channel[1]);
-
-       if (dma_info.dma_irq[0])
-               irq_dispose_mapping(dma_info.dma_irq[0]);
-
-       if (dma_info.dma_irq[1])
-               irq_dispose_mapping(dma_info.dma_irq[1]);
-
-       if (machine_data->guts)
-               iounmap(machine_data->guts);
-
        kfree(machine_data);
 
        return ret;
 }
 
 /**
- * mpc8610_hpcd_remove: remove the OF device
+ * mpc8610_hpcd_remove: remove the platform device
  *
- * This function is called when the OF device is removed.
+ * This function is called when the platform device is removed.
  */
-static int mpc8610_hpcd_remove(struct of_device *ofdev)
+static int __devexit mpc8610_hpcd_remove(struct platform_device *pdev)
 {
-       struct platform_device *sound_device = dev_get_drvdata(&ofdev->dev);
+       struct platform_device *sound_device = dev_get_drvdata(&pdev->dev);
+       struct snd_soc_card *card = platform_get_drvdata(sound_device);
        struct mpc8610_hpcd_data *machine_data =
-               sound_device->dev.platform_data;
+               container_of(card, struct mpc8610_hpcd_data, card);
 
        platform_device_unregister(sound_device);
 
-       if (machine_data->dai.cpu_dai)
-               fsl_ssi_destroy_dai(machine_data->dai.cpu_dai);
-
-       if (machine_data->ssi)
-               iounmap(machine_data->ssi);
-
-       if (machine_data->dma[0])
-               iounmap(machine_data->dma[0]);
-
-       if (machine_data->dma[1])
-               iounmap(machine_data->dma[1]);
-
-       if (machine_data->dma_irq[0])
-               irq_dispose_mapping(machine_data->dma_irq[0]);
-
-       if (machine_data->dma_irq[1])
-               irq_dispose_mapping(machine_data->dma_irq[1]);
-
-       if (machine_data->guts)
-               iounmap(machine_data->guts);
-
        kfree(machine_data);
        sound_device->dev.platform_data = NULL;
 
-       dev_set_drvdata(&ofdev->dev, NULL);
+       dev_set_drvdata(&pdev->dev, NULL);
 
        return 0;
 }
 
-static struct of_device_id mpc8610_hpcd_match[] = {
-       {
-               .compatible = "fsl,mpc8610-ssi",
-       },
-       {}
-};
-MODULE_DEVICE_TABLE(of, mpc8610_hpcd_match);
-
-static struct of_platform_driver mpc8610_hpcd_of_driver = {
+static struct platform_driver mpc8610_hpcd_driver = {
+       .probe = mpc8610_hpcd_probe,
+       .remove = __devexit_p(mpc8610_hpcd_remove),
        .driver = {
-               .name = "mpc8610_hpcd",
+               /* The name must match the 'model' property in the device tree,
+                * in lowercase letters.
+                */
+               .name = "snd-soc-mpc8610hpcd",
                .owner = THIS_MODULE,
-               .of_match_table = mpc8610_hpcd_match,
        },
-       .probe          = mpc8610_hpcd_probe,
-       .remove         = mpc8610_hpcd_remove,
 };
 
 /**
- * mpc8610_hpcd_init: fabric driver initialization.
+ * mpc8610_hpcd_init: machine driver initialization.
  *
  * This function is called when this module is loaded.
  */
 static int __init mpc8610_hpcd_init(void)
 {
-       int ret;
-
-       printk(KERN_INFO "Freescale MPC8610 HPCD ALSA SoC fabric driver\n");
+       struct device_node *guts_np;
+       struct resource res;
 
-       ret = of_register_platform_driver(&mpc8610_hpcd_of_driver);
+       pr_info("Freescale MPC8610 HPCD ALSA SoC machine driver\n");
 
-       if (ret)
-               printk(KERN_ERR
-                       "mpc8610-hpcd: failed to register platform driver\n");
+       /* Get the physical address of the global utilities registers */
+       guts_np = of_find_compatible_node(NULL, NULL, "fsl,mpc8610-guts");
+       if (of_address_to_resource(guts_np, 0, &res)) {
+               pr_err("mpc8610-hpcd: missing/invalid global utilities node\n");
+               return -EINVAL;
+       }
+       guts_phys = res.start;
 
-       return ret;
+       return platform_driver_register(&mpc8610_hpcd_driver);
 }
 
 /**
- * mpc8610_hpcd_exit: fabric driver exit
+ * mpc8610_hpcd_exit: machine driver exit
  *
  * This function is called when this driver is unloaded.
  */
 static void __exit mpc8610_hpcd_exit(void)
 {
-       of_unregister_platform_driver(&mpc8610_hpcd_of_driver);
+       platform_driver_unregister(&mpc8610_hpcd_driver);
 }
 
 module_init(mpc8610_hpcd_init);
 module_exit(mpc8610_hpcd_exit);
 
 MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
-MODULE_DESCRIPTION("Freescale MPC8610 HPCD ALSA SoC fabric driver");
-MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Freescale MPC8610 HPCD ALSA SoC machine driver");
+MODULE_LICENSE("GPL v2");
index 6644cba7cbf20e5a16e75ad459df1c2663afcc93..fe15bb26e48474e6f9aacb15961d62b59cea704d 100644 (file)
 
 #define DRV_NAME "pcm030-audio-fabric"
 
-static struct snd_soc_device device;
 static struct snd_soc_card card;
 
 static struct snd_soc_dai_link pcm030_fabric_dai[] = {
 {
        .name = "AC97",
        .stream_name = "AC97 Analog",
-       .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
-       .cpu_dai = &psc_ac97_dai[MPC5200_AC97_NORMAL],
+       .codec_dai_name = "wm9712-hifi",
+       .cpu_dai_name = "mpc5200-psc-ac97.0",
+       .platform_name = "mpc5200-pcm-audio",
+       .codec_name = "wm9712-codec",
 },
 {
        .name = "AC97",
        .stream_name = "AC97 IEC958",
-       .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
-       .cpu_dai = &psc_ac97_dai[MPC5200_AC97_SPDIF],
+       .codec_dai_name = "wm9712-aux",
+       .cpu_dai_name = "mpc5200-psc-ac97.1",
+       .platform_name = "mpc5200-pcm-audio",
+       ..codec_name = "wm9712-codec",
 },
 };
 
@@ -58,22 +61,18 @@ static __init int pcm030_fabric_init(void)
        if (!of_machine_is_compatible("phytec,pcm030"))
                return -ENODEV;
 
-       card.platform = &mpc5200_audio_dma_platform;
+
        card.name = "pcm030";
        card.dai_link = pcm030_fabric_dai;
        card.num_links = ARRAY_SIZE(pcm030_fabric_dai);
 
-       device.card = &card;
-       device.codec_dev = &soc_codec_dev_wm9712;
-
        pdev = platform_device_alloc("soc-audio", 1);
        if (!pdev) {
                pr_err("pcm030_fabric_init: platform_device_alloc() failed\n");
                return -ENODEV;
        }
 
-       platform_set_drvdata(pdev, &device);
-       device.dev = &pdev->dev;
+       platform_set_drvdata(pdev, &card);
 
        rc = platform_device_add(pdev);
        if (rc) {
diff --git a/sound/soc/fsl/soc-of-simple.c b/sound/soc/fsl/soc-of-simple.c
deleted file mode 100644 (file)
index 3bc13fd..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * OF helpers for ALSA SoC Layer
- *
- * Copyright (C) 2008, Secret Lab Technologies Ltd.
- */
-
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/pm.h>
-#include <linux/bitops.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include <linux/slab.h>
-#include <sound/core.h>
-#include <sound/pcm.h>
-#include <sound/pcm_params.h>
-#include <sound/soc.h>
-#include <sound/soc-of-simple.h>
-#include <sound/initval.h>
-
-MODULE_AUTHOR("Grant Likely <grant.likely@secretlab.ca>");
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("ALSA SoC OpenFirmware bindings");
-
-static DEFINE_MUTEX(of_snd_soc_mutex);
-static LIST_HEAD(of_snd_soc_device_list);
-static int of_snd_soc_next_index;
-
-struct of_snd_soc_device {
-       int id;
-       struct list_head list;
-       struct snd_soc_device device;
-       struct snd_soc_card card;
-       struct snd_soc_dai_link dai_link;
-       struct platform_device *pdev;
-       struct device_node *platform_node;
-       struct device_node *codec_node;
-};
-
-static struct snd_soc_ops of_snd_soc_ops = {
-};
-
-static struct of_snd_soc_device *
-of_snd_soc_get_device(struct device_node *codec_node)
-{
-       struct of_snd_soc_device *of_soc;
-
-       list_for_each_entry(of_soc, &of_snd_soc_device_list, list) {
-               if (of_soc->codec_node == codec_node)
-                       return of_soc;
-       }
-
-       of_soc = kzalloc(sizeof(struct of_snd_soc_device), GFP_KERNEL);
-       if (!of_soc)
-               return NULL;
-
-       /* Initialize the structure and add it to the global list */
-       of_soc->codec_node = codec_node;
-       of_soc->id = of_snd_soc_next_index++;
-       of_soc->card.dai_link = &of_soc->dai_link;
-       of_soc->card.num_links = 1;
-       of_soc->device.card = &of_soc->card;
-       of_soc->dai_link.ops = &of_snd_soc_ops;
-       list_add(&of_soc->list, &of_snd_soc_device_list);
-
-       return of_soc;
-}
-
-static void of_snd_soc_register_device(struct of_snd_soc_device *of_soc)
-{
-       struct platform_device *pdev;
-       int rc;
-
-       /* Only register the device if both the codec and platform have
-        * been registered */
-       if ((!of_soc->device.codec_data) || (!of_soc->platform_node))
-               return;
-
-       pr_info("platform<-->codec match achieved; registering machine\n");
-
-       pdev = platform_device_alloc("soc-audio", of_soc->id);
-       if (!pdev) {
-               pr_err("of_soc: platform_device_alloc() failed\n");
-               return;
-       }
-
-       pdev->dev.platform_data = of_soc;
-       platform_set_drvdata(pdev, &of_soc->device);
-       of_soc->device.dev = &pdev->dev;
-
-       /* The ASoC device is complete; register it */
-       rc = platform_device_add(pdev);
-       if (rc) {
-               pr_err("of_soc: platform_device_add() failed\n");
-               return;
-       }
-
-}
-
-int of_snd_soc_register_codec(struct snd_soc_codec_device *codec_dev,
-                             void *codec_data, struct snd_soc_dai *dai,
-                             struct device_node *node)
-{
-       struct of_snd_soc_device *of_soc;
-       int rc = 0;
-
-       pr_info("registering ASoC codec driver: %s\n", node->full_name);
-
-       mutex_lock(&of_snd_soc_mutex);
-       of_soc = of_snd_soc_get_device(node);
-       if (!of_soc) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       /* Store the codec data */
-       of_soc->device.codec_data = codec_data;
-       of_soc->device.codec_dev = codec_dev;
-       of_soc->dai_link.name = (char *)node->name;
-       of_soc->dai_link.stream_name = (char *)node->name;
-       of_soc->dai_link.codec_dai = dai;
-
-       /* Now try to register the SoC device */
-       of_snd_soc_register_device(of_soc);
-
- out:
-       mutex_unlock(&of_snd_soc_mutex);
-       return rc;
-}
-EXPORT_SYMBOL_GPL(of_snd_soc_register_codec);
-
-int of_snd_soc_register_platform(struct snd_soc_platform *platform,
-                                struct device_node *node,
-                                struct snd_soc_dai *cpu_dai)
-{
-       struct of_snd_soc_device *of_soc;
-       struct device_node *codec_node;
-       const phandle *handle;
-       int len, rc = 0;
-
-       pr_info("registering ASoC platform driver: %s\n", node->full_name);
-
-       handle = of_get_property(node, "codec-handle", &len);
-       if (!handle || len < sizeof(handle))
-               return -ENODEV;
-       codec_node = of_find_node_by_phandle(*handle);
-       if (!codec_node)
-               return -ENODEV;
-       pr_info("looking for codec: %s\n", codec_node->full_name);
-
-       mutex_lock(&of_snd_soc_mutex);
-       of_soc = of_snd_soc_get_device(codec_node);
-       if (!of_soc) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       of_soc->platform_node = node;
-       of_soc->dai_link.cpu_dai = cpu_dai;
-       of_soc->card.platform = platform;
-       of_soc->card.name = of_soc->dai_link.cpu_dai->name;
-
-       /* Now try to register the SoC device */
-       of_snd_soc_register_device(of_soc);
-
- out:
-       mutex_unlock(&of_snd_soc_mutex);
-       return rc;
-}
-EXPORT_SYMBOL_GPL(of_snd_soc_register_platform);
index 687c76fc08397a39779bfe4eded6f4e67ea2abcb..642270a635ea544957c211cae3d0f69e030876ad 100644 (file)
@@ -8,12 +8,24 @@ menuconfig SND_IMX_SOC
          Say Y or M if you want to add support for codecs attached to
          the i.MX SSI interface.
 
+
 if SND_IMX_SOC
 
+config SND_MXC_SOC_SSI
+       tristate
+
+config SND_MXC_SOC_FIQ
+       tristate
+
+config SND_MXC_SOC_MX2
+       tristate
+
 config SND_MXC_SOC_WM1133_EV1
        tristate "Audio on the the i.MX31ADS with WM1133-EV1 fitted"
        depends on MACH_MX31ADS_WM1133_EV1 && EXPERIMENTAL
        select SND_SOC_WM8350
+       select SND_MXC_SOC_SSI
+       select SND_MXC_SOC_FIQ
        help
          Enable support for audio on the i.MX31ADS with the WM1133-EV1
          PMIC board with WM8835x fitted.
@@ -22,6 +34,8 @@ config SND_SOC_PHYCORE_AC97
        tristate "SoC Audio support for Phytec phyCORE (and phyCARD) boards"
        depends on MACH_PCM043 || MACH_PCA100
        select SND_SOC_WM9712
+       select SND_MXC_SOC_SSI
+       select SND_MXC_SOC_FIQ
        help
          Say Y if you want to add support for SoC audio on Phytec phyCORE
          and phyCARD boards in AC97 mode
@@ -32,6 +46,8 @@ config SND_SOC_EUKREA_TLV320
                || MACH_EUKREA_MBIMXSD25_BASEBOARD \
                || MACH_EUKREA_MBIMXSD35_BASEBOARD
        select SND_SOC_TLV320AIC23
+       select SND_MXC_SOC_SSI
+       select SND_MXC_SOC_FIQ
        help
          Enable I2S based access to the TLV320AIC23B codec attached
          to the SSI interface
index 7bc57baf2b0e9e68aaff7b27564fccc6dbd27113..b67fc02a4eccd781bda485a02e8de2eca26816b7 100644 (file)
@@ -1,11 +1,11 @@
 # i.MX Platform Support
-snd-soc-imx-objs := imx-ssi.o imx-pcm-fiq.o
-
-ifdef CONFIG_MACH_MX27
-snd-soc-imx-objs += imx-pcm-dma-mx2.o
-endif
+snd-soc-imx-objs := imx-ssi.o
+snd-soc-imx-fiq-objs := imx-pcm-fiq.o
+snd-soc-imx-mx2-objs := imx-pcm-dma-mx2.o
 
 obj-$(CONFIG_SND_IMX_SOC) += snd-soc-imx.o
+obj-$(CONFIG_SND_MXC_SOC_FIQ) += snd-soc-imx-fiq.o
+obj-$(CONFIG_SND_MXC_SOC_MX2) += snd-soc-imx-mx2.o
 
 # i.MX Machine Support
 snd-soc-eukrea-tlv320-objs := eukrea-tlv320.o
index f15dfbdc47ee5cd838d873d0b8b1add1073eb6a4..807f736ee2942744fc255b8f326cc4bdcd8f54b7 100644 (file)
@@ -79,22 +79,19 @@ static struct snd_soc_ops eukrea_tlv320_snd_ops = {
 static struct snd_soc_dai_link eukrea_tlv320_dai = {
        .name           = "tlv320aic23",
        .stream_name    = "TLV320AIC23",
-       .codec_dai      = &tlv320aic23_dai,
+       .codec_dai      = "tlv320aic23-hifi",
+       .platform_name  = "imx-pcm-audio.0",
+       .codec_name     = "tlv320aic23-codec.0-001a",
+       .cpu_dai = "imx-ssi-dai.0",
        .ops            = &eukrea_tlv320_snd_ops,
 };
 
 static struct snd_soc_card eukrea_tlv320 = {
        .name           = "cpuimx-audio",
-       .platform       = &imx_soc_platform,
        .dai_link       = &eukrea_tlv320_dai,
        .num_links      = 1,
 };
 
-static struct snd_soc_device eukrea_tlv320_snd_devdata = {
-       .card           = &eukrea_tlv320,
-       .codec_dev      = &soc_codec_dev_tlv320aic23,
-};
-
 static struct platform_device *eukrea_tlv320_snd_device;
 
 static int __init eukrea_tlv320_init(void)
@@ -110,10 +107,7 @@ static int __init eukrea_tlv320_init(void)
        if (!eukrea_tlv320_snd_device)
                return -ENOMEM;
 
-       eukrea_tlv320_dai.cpu_dai = &imx_ssi_pcm_dai[0];
-
-       platform_set_drvdata(eukrea_tlv320_snd_device, &eukrea_tlv320_snd_devdata);
-       eukrea_tlv320_snd_devdata.dev = &eukrea_tlv320_snd_device->dev;
+       platform_set_drvdata(eukrea_tlv320_snd_device, &eukrea_tlv320);
        ret = platform_device_add(eukrea_tlv320_snd_device);
 
        if (ret) {
index 0a595da4811d343a389709e5656dceb550fbd2dd..fd493ee1428e2a977ac96ba7f7acc3a88d226025 100644 (file)
@@ -103,7 +103,7 @@ static int imx_ssi_dma_alloc(struct snd_pcm_substream *substream)
        struct imx_pcm_runtime_data *iprtd = runtime->private_data;
        int ret;
 
-       dma_params = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       dma_params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        iprtd->dma = imx_dma_request_by_prio(DRV_NAME, DMA_PRIO_HIGH);
        if (iprtd->dma < 0) {
@@ -213,7 +213,7 @@ static int snd_imx_pcm_prepare(struct snd_pcm_substream *substream)
        struct imx_pcm_runtime_data *iprtd = runtime->private_data;
        int err;
 
-       dma_params = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       dma_params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        iprtd->substream = substream;
        iprtd->buf = (unsigned int *)substream->dma_buffer.area;
@@ -318,19 +318,42 @@ static struct snd_pcm_ops imx_pcm_ops = {
        .mmap           = snd_imx_pcm_mmap,
 };
 
-static struct snd_soc_platform imx_soc_platform_dma = {
-       .name           = "imx-audio",
-       .pcm_ops        = &imx_pcm_ops,
+static struct snd_soc_platform_driver imx_soc_platform_mx2 = {
+       .ops            = &imx_pcm_ops,
        .pcm_new        = imx_pcm_new,
        .pcm_free       = imx_pcm_free,
 };
 
-struct snd_soc_platform *imx_ssi_dma_mx2_init(struct platform_device *pdev,
-               struct imx_ssi *ssi)
+static int __devinit imx_soc_platform_probe(struct platform_device *pdev)
 {
-       ssi->dma_params_tx.burstsize = DMA_TXFIFO_BURST;
-       ssi->dma_params_rx.burstsize = DMA_RXFIFO_BURST;
+       return snd_soc_register_platform(&pdev->dev, &imx_soc_platform_mx2);
+}
+
+static int __devexit imx_soc_platform_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver imx_pcm_driver = {
+       .driver = {
+                       .name = "imx-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
 
-       return &imx_soc_platform_dma;
+       .probe = imx_soc_platform_probe,
+       .remove = __devexit_p(imx_soc_platform_remove),
+};
+
+static int __init snd_imx_pcm_init(void)
+{
+       return platform_driver_register(&imx_pcm_driver);
+}
+module_init(snd_imx_pcm_init);
+
+static void __exit snd_imx_pcm_exit(void)
+{
+       platform_driver_unregister(&imx_pcm_driver);
 }
+module_exit(snd_imx_pcm_exit);
 
index b2bf27282cd2d10189419236f5463c97c95354b7..413b78da248ff215db592d888e01f68fc40feffb 100644 (file)
@@ -236,6 +236,8 @@ static struct snd_pcm_ops imx_pcm_ops = {
        .mmap           = snd_imx_pcm_mmap,
 };
 
+static int ssi_irq = 0;
+
 static int imx_pcm_fiq_new(struct snd_card *card, struct snd_soc_dai *dai,
        struct snd_pcm *pcm)
 {
@@ -245,7 +247,7 @@ static int imx_pcm_fiq_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (ret)
                return ret;
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                struct snd_pcm_substream *substream =
                        pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream;
                struct snd_dma_buffer *buf = &substream->dma_buffer;
@@ -253,7 +255,7 @@ static int imx_pcm_fiq_new(struct snd_card *card, struct snd_soc_dai *dai,
                imx_ssi_fiq_tx_buffer = (unsigned long)buf->area;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                struct snd_pcm_substream *substream =
                        pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream;
                struct snd_dma_buffer *buf = &substream->dma_buffer;
@@ -267,24 +269,32 @@ static int imx_pcm_fiq_new(struct snd_card *card, struct snd_soc_dai *dai,
        return 0;
 }
 
-static struct snd_soc_platform imx_soc_platform_fiq = {
-       .pcm_ops        = &imx_pcm_ops,
+static void imx_pcm_fiq_free(struct snd_pcm *pcm)
+{
+       mxc_set_irq_fiq(ssi_irq, 0);
+       release_fiq(&fh);
+       imx_pcm_free(pcm);
+}
+
+static struct snd_soc_platform_driver imx_soc_platform_fiq = {
+       .ops            = &imx_pcm_ops,
        .pcm_new        = imx_pcm_fiq_new,
-       .pcm_free       = imx_pcm_free,
+       .pcm_free       = imx_pcm_fiq_free,
 };
 
-struct snd_soc_platform *imx_ssi_fiq_init(struct platform_device *pdev,
-               struct imx_ssi *ssi)
+static int __devinit imx_soc_platform_probe(struct platform_device *pdev)
 {
-       int ret = 0;
+       struct imx_ssi *ssi = platform_get_drvdata(pdev);
+       int ret;
 
        ret = claim_fiq(&fh);
        if (ret) {
                dev_err(&pdev->dev, "failed to claim fiq: %d", ret);
-               return ERR_PTR(ret);
+               return ret;
        }
 
        mxc_set_irq_fiq(ssi->irq, 1);
+       ssi_irq = ssi->irq;
 
        imx_pcm_fiq = ssi->irq;
 
@@ -293,13 +303,43 @@ struct snd_soc_platform *imx_ssi_fiq_init(struct platform_device *pdev,
        ssi->dma_params_tx.burstsize = 4;
        ssi->dma_params_rx.burstsize = 6;
 
-       return &imx_soc_platform_fiq;
+       ret = snd_soc_register_platform(&pdev->dev, &imx_soc_platform_fiq);
+       if (ret)
+               goto failed_register;
+
+       return 0;
+
+failed_register:
+       mxc_set_irq_fiq(ssi_irq, 0);
+       release_fiq(&fh);
+
+       return ret;
 }
 
-void imx_ssi_fiq_exit(struct platform_device *pdev,
-               struct imx_ssi *ssi)
+static int __devexit imx_soc_platform_remove(struct platform_device *pdev)
 {
-       mxc_set_irq_fiq(ssi->irq, 0);
-       release_fiq(&fh);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
 }
 
+static struct platform_driver imx_pcm_driver = {
+       .driver = {
+                       .name = "imx-fiq-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = imx_soc_platform_probe,
+       .remove = __devexit_p(imx_soc_platform_remove),
+};
+
+static int __init snd_imx_pcm_init(void)
+{
+       return platform_driver_register(&imx_pcm_driver);
+}
+module_init(snd_imx_pcm_init);
+
+static void __exit snd_imx_pcm_exit(void)
+{
+       platform_driver_unregister(&imx_pcm_driver);
+}
+module_exit(snd_imx_pcm_exit);
index 50f51624c535f5540a376cbde7bcce40c4c64b2e..02a3e7c799d818e507a2aed0f843778492ac4398 100644 (file)
@@ -61,7 +61,7 @@
 static int imx_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai,
        unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
 {
-       struct imx_ssi *ssi = cpu_dai->private_data;
+       struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
        u32 sccr;
 
        sccr = readl(ssi->base + SSI_STCCR);
@@ -86,7 +86,7 @@ static int imx_ssi_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai,
  */
 static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
 {
-       struct imx_ssi *ssi = cpu_dai->private_data;
+       struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
        u32 strcr = 0, scr;
 
        scr = readl(ssi->base + SSI_SCR) & ~(SSI_SCR_SYN | SSI_SCR_NET);
@@ -164,7 +164,7 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
 static int imx_ssi_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
                                  int clk_id, unsigned int freq, int dir)
 {
-       struct imx_ssi *ssi = cpu_dai->private_data;
+       struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
        u32 scr;
 
        scr = readl(ssi->base + SSI_SCR);
@@ -192,7 +192,7 @@ static int imx_ssi_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
 static int imx_ssi_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
                                  int div_id, int div)
 {
-       struct imx_ssi *ssi = cpu_dai->private_data;
+       struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
        u32 stccr, srccr;
 
        stccr = readl(ssi->base + SSI_STCCR);
@@ -241,7 +241,7 @@ static int imx_ssi_hw_params(struct snd_pcm_substream *substream,
                             struct snd_pcm_hw_params *params,
                             struct snd_soc_dai *cpu_dai)
 {
-       struct imx_ssi *ssi = cpu_dai->private_data;
+       struct imx_ssi *ssi = snd_soc_dai_get_drvdata(cpu_dai);
        struct imx_pcm_dma_params *dma_data;
        u32 reg, sccr;
 
@@ -279,9 +279,7 @@ static int imx_ssi_hw_params(struct snd_pcm_substream *substream,
 static int imx_ssi_trigger(struct snd_pcm_substream *substream, int cmd,
                struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct imx_ssi *ssi = cpu_dai->private_data;
+       struct imx_ssi *ssi = snd_soc_dai_get_drvdata(dai);
        unsigned int sier_bits, sier;
        unsigned int scr;
 
@@ -350,22 +348,6 @@ static struct snd_soc_dai_ops imx_ssi_pcm_dai_ops = {
        .trigger        = imx_ssi_trigger,
 };
 
-static struct snd_soc_dai imx_ssi_dai = {
-       .playback = {
-               .channels_min = 2,
-               .channels_max = 2,
-               .rates = SNDRV_PCM_RATE_8000_96000,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE,
-       },
-       .capture = {
-               .channels_min = 2,
-               .channels_max = 2,
-               .rates = SNDRV_PCM_RATE_8000_96000,
-               .formats = SNDRV_PCM_FMTBIT_S16_LE,
-       },
-       .ops = &imx_ssi_pcm_dai_ops,
-};
-
 int snd_imx_pcm_mmap(struct snd_pcm_substream *substream,
                struct vm_area_struct *vma)
 {
@@ -381,6 +363,7 @@ int snd_imx_pcm_mmap(struct snd_pcm_substream *substream,
                        runtime->dma_bytes);
        return ret;
 }
+EXPORT_SYMBOL_GPL(snd_imx_pcm_mmap);
 
 static int imx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
 {
@@ -412,14 +395,14 @@ int imx_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
                card->dev->dma_mask = &imx_pcm_dmamask;
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = imx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = imx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -429,6 +412,7 @@ int imx_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
 out:
        return ret;
 }
+EXPORT_SYMBOL_GPL(imx_pcm_new);
 
 void imx_pcm_free(struct snd_pcm *pcm)
 {
@@ -450,14 +434,40 @@ void imx_pcm_free(struct snd_pcm *pcm)
                buf->area = NULL;
        }
 }
+EXPORT_SYMBOL_GPL(imx_pcm_free);
 
-struct snd_soc_platform imx_soc_platform = {
-       .name           = "imx-audio",
+static struct snd_soc_dai_driver imx_ssi_dai = {
+       .playback = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_8000_96000,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,
+       },
+       .capture = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_8000_96000,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,
+       },
+       .ops = &imx_ssi_pcm_dai_ops,
 };
-EXPORT_SYMBOL_GPL(imx_soc_platform);
 
-static struct snd_soc_dai imx_ac97_dai = {
-       .name = "AC97",
+static int imx_ssi_dai_probe(struct snd_soc_dai *dai)
+{
+       struct imx_ssi *ssi = dev_get_drvdata(dai->dev);
+       uint32_t val;
+
+       snd_soc_dai_set_drvdata(dai, ssi);
+
+       val = SSI_SFCSR_TFWM0(ssi->dma_params_tx.burstsize) |
+               SSI_SFCSR_RFWM0(ssi->dma_params_rx.burstsize);
+       writel(val, ssi->base + SSI_SFCSR);
+
+       return 0;
+}
+
+static struct snd_soc_dai_driver imx_ac97_dai = {
+       .probe = imx_ssi_dai_probe,
        .ac97_control = 1,
        .playback = {
                .stream_name = "AC97 Playback",
@@ -577,25 +587,18 @@ struct snd_ac97_bus_ops soc_ac97_ops = {
 };
 EXPORT_SYMBOL_GPL(soc_ac97_ops);
 
-struct snd_soc_dai imx_ssi_pcm_dai[2];
-EXPORT_SYMBOL_GPL(imx_ssi_pcm_dai);
-
 static int imx_ssi_probe(struct platform_device *pdev)
 {
        struct resource *res;
        struct imx_ssi *ssi;
        struct imx_ssi_platform_data *pdata = pdev->dev.platform_data;
-       struct snd_soc_platform *platform;
        int ret = 0;
-       unsigned int val;
-       struct snd_soc_dai *dai = &imx_ssi_pcm_dai[pdev->id];
-
-       if (dai->id >= ARRAY_SIZE(imx_ssi_pcm_dai))
-               return -EINVAL;
+       struct snd_soc_dai_driver *dai;
 
        ssi = kzalloc(sizeof(*ssi), GFP_KERNEL);
        if (!ssi)
                return -ENOMEM;
+       dev_set_drvdata(&pdev->dev, ssi);
 
        if (pdata) {
                ssi->ac97_reset = pdata->ac97_reset;
@@ -640,9 +643,9 @@ static int imx_ssi_probe(struct platform_device *pdev)
                }
                ac97_ssi = ssi;
                setup_channel_to_ac97(ssi);
-               memcpy(dai, &imx_ac97_dai, sizeof(imx_ac97_dai));
+               dai = &imx_ac97_dai;
        } else
-               memcpy(dai, &imx_ssi_dai, sizeof(imx_ssi_dai));
+               dai = &imx_ssi_dai;
 
        writel(0x0, ssi->base + SSI_SIER);
 
@@ -657,37 +660,36 @@ static int imx_ssi_probe(struct platform_device *pdev)
        if (res)
                ssi->dma_params_rx.dma = res->start;
 
-       dai->id = pdev->id;
-       dai->dev = &pdev->dev;
-       dai->name = kasprintf(GFP_KERNEL, "imx-ssi.%d", pdev->id);
-       dai->private_data = ssi;
-
        if ((cpu_is_mx27() || cpu_is_mx21()) &&
                        !(ssi->flags & IMX_SSI_USE_AC97) &&
                        (ssi->flags & IMX_SSI_DMA)) {
                ssi->flags |= IMX_SSI_DMA;
-               platform = imx_ssi_dma_mx2_init(pdev, ssi);
-       } else
-               platform = imx_ssi_fiq_init(pdev, ssi);
-
-       imx_soc_platform.pcm_ops = platform->pcm_ops;
-       imx_soc_platform.pcm_new = platform->pcm_new;
-       imx_soc_platform.pcm_free = platform->pcm_free;
+       }
 
-       val = SSI_SFCSR_TFWM0(ssi->dma_params_tx.burstsize) |
-               SSI_SFCSR_RFWM0(ssi->dma_params_rx.burstsize);
-       writel(val, ssi->base + SSI_SFCSR);
+       platform_set_drvdata(pdev, ssi);
 
-       ret = snd_soc_register_dai(dai);
+       ret = snd_soc_register_dai(&pdev->dev, dai);
        if (ret) {
                dev_err(&pdev->dev, "register DAI failed\n");
                goto failed_register;
        }
 
-       platform_set_drvdata(pdev, ssi);
+       ssi->soc_platform_pdev = platform_device_alloc("imx-fiq-pcm-audio", pdev->id);
+       if (!ssi->soc_platform_pdev)
+               goto failed_pdev_alloc;
+       platform_set_drvdata(ssi->soc_platform_pdev, ssi);
+       ret = platform_device_add(ssi->soc_platform_pdev);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to add platform device\n");
+               goto failed_pdev_add;
+       }
 
        return 0;
 
+failed_pdev_add:
+       platform_device_put(ssi->soc_platform_pdev);
+failed_pdev_alloc:
+       snd_soc_unregister_dai(&pdev->dev);
 failed_register:
 failed_ac97:
        iounmap(ssi->base);
@@ -706,16 +708,15 @@ static int __devexit imx_ssi_remove(struct platform_device *pdev)
 {
        struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        struct imx_ssi *ssi = platform_get_drvdata(pdev);
-       struct snd_soc_dai *dai = &imx_ssi_pcm_dai[pdev->id];
 
-       snd_soc_unregister_dai(dai);
+       platform_device_del(ssi->soc_platform_pdev);
+       platform_device_put(ssi->soc_platform_pdev);
+
+       snd_soc_unregister_dai(&pdev->dev);
 
        if (ssi->flags & IMX_SSI_USE_AC97)
                ac97_ssi = NULL;
 
-       if (!(ssi->flags & IMX_SSI_DMA))
-               imx_ssi_fiq_exit(pdev, ssi);
-
        iounmap(ssi->base);
        release_mem_region(res->start, resource_size(res));
        clk_disable(ssi->clk);
@@ -730,34 +731,19 @@ static struct platform_driver imx_ssi_driver = {
        .remove = __devexit_p(imx_ssi_remove),
 
        .driver = {
-               .name = DRV_NAME,
+               .name = "imx-ssi-dai",
                .owner = THIS_MODULE,
        },
 };
 
 static int __init imx_ssi_init(void)
 {
-       int ret;
-
-       ret = snd_soc_register_platform(&imx_soc_platform);
-       if (ret) {
-               pr_err("failed to register soc platform: %d\n", ret);
-               return ret;
-       }
-
-       ret = platform_driver_register(&imx_ssi_driver);
-       if (ret) {
-               snd_soc_unregister_platform(&imx_soc_platform);
-               return ret;
-       }
-
-       return 0;
+       return platform_driver_register(&imx_ssi_driver);
 }
 
 static void __exit imx_ssi_exit(void)
 {
        platform_driver_unregister(&imx_ssi_driver);
-       snd_soc_unregister_platform(&imx_soc_platform);
 }
 
 module_init(imx_ssi_init);
index 55f26ebcd8c2531fc9267e12a6e590ac50199ad7..53b780d9b2b09375fdc7bf7f60a81af5045ab406 100644 (file)
 #define IMX_SSI_RX_DIV_PSR     4
 #define IMX_SSI_RX_DIV_PM      5
 
-extern struct snd_soc_dai imx_ssi_pcm_dai[2];
-extern struct snd_soc_platform imx_soc_platform;
-
 #define DRV_NAME "imx-ssi"
 
 struct imx_pcm_dma_params {
@@ -197,7 +194,7 @@ struct imx_pcm_dma_params {
 struct imx_ssi {
        struct platform_device *ac97_dev;
 
-       struct snd_soc_device imx_ac97;
+       struct snd_soc_dai *imx_ac97;
        struct clk *clk;
        void __iomem *base;
        int irq;
@@ -213,6 +210,8 @@ struct imx_ssi {
        struct imx_pcm_dma_params       dma_params_tx;
 
        int enabled;
+
+       struct platform_device *soc_platform_pdev;
 };
 
 struct snd_soc_platform *imx_ssi_fiq_init(struct platform_device *pdev,
index a8307d55c70eaadc99e03aba65cef24d71668121..65f0f99ca6dd3e61f71ad0955b73aae8befb46d0 100644 (file)
@@ -32,23 +32,20 @@ static struct snd_soc_dai_link imx_phycore_dai_ac97[] = {
        {
                .name           = "HiFi",
                .stream_name    = "HiFi",
-               .codec_dai      = &wm9712_dai[WM9712_DAI_AC97_HIFI],
+               .codec_dai_name         = "wm9712-hifi",
+               .codec_name     = "wm9712-codec",
+               .cpu_dai_name   = "imx-ssi-dai.0",
+               .platform_name  = "imx-fiq-pcm-audio.0",
                .ops            = &imx_phycore_hifi_ops,
        },
 };
 
 static struct snd_soc_card imx_phycore = {
        .name           = "PhyCORE-audio",
-       .platform       = &imx_soc_platform,
        .dai_link       = imx_phycore_dai_ac97,
        .num_links      = ARRAY_SIZE(imx_phycore_dai_ac97),
 };
 
-static struct snd_soc_device imx_phycore_snd_devdata = {
-       .card           = &imx_phycore,
-       .codec_dev      = &soc_codec_dev_wm9712,
-};
-
 static struct platform_device *imx_phycore_snd_device;
 
 static int __init imx_phycore_init(void)
@@ -63,10 +60,12 @@ static int __init imx_phycore_init(void)
        if (!imx_phycore_snd_device)
                return -ENOMEM;
 
-       imx_phycore_dai_ac97[0].cpu_dai = &imx_ssi_pcm_dai[0];
+       platform_set_drvdata(imx_phycore_snd_device, &imx_phycore);
+       ret = platform_device_add(imx_phycore_snd_device);
 
-       platform_set_drvdata(imx_phycore_snd_device, &imx_phycore_snd_devdata);
-       imx_phycore_snd_devdata.dev = &imx_phycore_snd_device->dev;
+       imx_phycore_snd_device = platform_device_alloc("wm9712-codec", -1);
+       if (!imx_phycore_snd_device)
+               return -ENOMEM;
        ret = platform_device_add(imx_phycore_snd_device);
 
        if (ret) {
index a6e7d94976399ee8c8f01fbd14268ef440e989c9..74068636c1d84cf97e5521a95110d6082c052b9e 100644 (file)
@@ -82,8 +82,8 @@ static int wm1133_ev1_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int i, found = 0;
        snd_pcm_format_t format = params_format(params);
        unsigned int rate = params_rate(params);
@@ -210,9 +210,9 @@ static struct snd_soc_jack_pin mic_jack_pins[] = {
        { .pin = "Mic2 Jack", .mask = SND_JACK_MICROPHONE },
 };
 
-static int wm1133_ev1_init(struct snd_soc_codec *codec)
+static int wm1133_ev1_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_card *card = codec->socdev->card;
+       struct snd_soc_codec *codec = rtd->codec;
 
        snd_soc_dapm_new_controls(codec, wm1133_ev1_widgets,
                                  ARRAY_SIZE(wm1133_ev1_widgets));
@@ -221,13 +221,13 @@ static int wm1133_ev1_init(struct snd_soc_codec *codec)
                                ARRAY_SIZE(wm1133_ev1_map));
 
        /* Headphone jack detection */
-       snd_soc_jack_new(card, "Headphone", SND_JACK_HEADPHONE, &hp_jack);
+       snd_soc_jack_new(codec, "Headphone", SND_JACK_HEADPHONE, &hp_jack);
        snd_soc_jack_add_pins(&hp_jack, ARRAY_SIZE(hp_jack_pins),
                              hp_jack_pins);
        wm8350_hp_jack_detect(codec, WM8350_JDR, &hp_jack, SND_JACK_HEADPHONE);
 
        /* Microphone jack detection */
-       snd_soc_jack_new(card, "Microphone",
+       snd_soc_jack_new(codec, "Microphone",
                         SND_JACK_MICROPHONE | SND_JACK_BTN_0, &mic_jack);
        snd_soc_jack_add_pins(&mic_jack, ARRAY_SIZE(mic_jack_pins),
                              mic_jack_pins);
@@ -243,8 +243,10 @@ static int wm1133_ev1_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link wm1133_ev1_dai = {
        .name = "WM1133-EV1",
        .stream_name = "Audio",
-       .cpu_dai = &imx_ssi_pcm_dai[0],
-       .codec_dai = &wm8350_dai,
+       .cpu_dai_name = "imx-ssi-dai.0",
+       .codec_dai_name = "wm8350-hifi",
+       .platform_name = "imx-fiq-pcm-audio.0",
+       .codec_name = "wm8350-codec.0-0x1a",
        .init = wm1133_ev1_init,
        .ops = &wm1133_ev1_ops,
        .symmetric_rates = 1,
@@ -252,16 +254,10 @@ static struct snd_soc_dai_link wm1133_ev1_dai = {
 
 static struct snd_soc_card wm1133_ev1 = {
        .name = "WM1133-EV1",
-       .platform = &imx_soc_platform,
        .dai_link = &wm1133_ev1_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device wm1133_ev1_snd_devdata = {
-       .card = &wm1133_ev1,
-       .codec_dev = &soc_codec_dev_wm8350,
-};
-
 static struct platform_device *wm1133_ev1_snd_device;
 
 static int __init wm1133_ev1_audio_init(void)
@@ -286,8 +282,7 @@ static int __init wm1133_ev1_audio_init(void)
        if (!wm1133_ev1_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(wm1133_ev1_snd_device, &wm1133_ev1_snd_devdata);
-       wm1133_ev1_snd_devdata.dev = &wm1133_ev1_snd_device->dev;
+       platform_set_drvdata(wm1133_ev1_snd_device, &wm1133_ev1);
        ret = platform_device_add(wm1133_ev1_snd_device);
 
        if (ret)
index eb518f0c5e016274c0b00ab11a220e02b754641b..f3cffd18340192b3544e288480a22056b169f560 100644 (file)
@@ -106,15 +106,10 @@ static inline void jz4740_i2s_write(const struct jz4740_i2s *i2s,
        writel(value, i2s->base + reg);
 }
 
-static inline struct jz4740_i2s *jz4740_dai_to_i2s(struct snd_soc_dai *dai)
-{
-       return dai->private_data;
-}
-
 static int jz4740_i2s_startup(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        uint32_t conf, ctrl;
 
        if (dai->active)
@@ -136,7 +131,7 @@ static int jz4740_i2s_startup(struct snd_pcm_substream *substream,
 static void jz4740_i2s_shutdown(struct snd_pcm_substream *substream,
        struct snd_soc_dai *dai)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        uint32_t conf;
 
        if (!dai->active)
@@ -152,7 +147,7 @@ static void jz4740_i2s_shutdown(struct snd_pcm_substream *substream,
 static int jz4740_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
        struct snd_soc_dai *dai)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
 
        uint32_t ctrl;
        uint32_t mask;
@@ -186,7 +181,7 @@ static int jz4740_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
 
 static int jz4740_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
 
        uint32_t format = 0;
        uint32_t conf;
@@ -238,7 +233,7 @@ static int jz4740_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        enum jz4740_dma_width dma_width;
        struct jz4740_pcm_config *pcm_config;
        unsigned int sample_size;
@@ -288,7 +283,7 @@ static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream,
 static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,
        unsigned int freq, int dir)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        struct clk *parent;
        int ret = 0;
 
@@ -312,7 +307,7 @@ static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,
 
 static int jz4740_i2s_suspend(struct snd_soc_dai *dai)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        uint32_t conf;
 
        if (dai->active) {
@@ -330,7 +325,7 @@ static int jz4740_i2s_suspend(struct snd_soc_dai *dai)
 
 static int jz4740_i2s_resume(struct snd_soc_dai *dai)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        uint32_t conf;
 
        clk_enable(i2s->clk_aic);
@@ -346,11 +341,38 @@ static int jz4740_i2s_resume(struct snd_soc_dai *dai)
        return 0;
 }
 
-static int jz4740_i2s_probe(struct platform_device *pdev, struct snd_soc_dai *dai)
+static void jz4740_i2c_init_pcm_config(struct jz4740_i2s *i2s)
 {
-       struct jz4740_i2s *i2s = jz4740_dai_to_i2s(dai);
+       struct jz4740_dma_config *dma_config;
+
+       /* Playback */
+       dma_config = &i2s->pcm_config_playback.dma_config;
+       dma_config->src_width = JZ4740_DMA_WIDTH_32BIT,
+       dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE;
+       dma_config->request_type = JZ4740_DMA_TYPE_AIC_TRANSMIT;
+       dma_config->flags = JZ4740_DMA_SRC_AUTOINC;
+       dma_config->mode = JZ4740_DMA_MODE_SINGLE;
+       i2s->pcm_config_playback.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO;
+
+       /* Capture */
+       dma_config = &i2s->pcm_config_capture.dma_config;
+       dma_config->dst_width = JZ4740_DMA_WIDTH_32BIT,
+       dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE;
+       dma_config->request_type = JZ4740_DMA_TYPE_AIC_RECEIVE;
+       dma_config->flags = JZ4740_DMA_DST_AUTOINC;
+       dma_config->mode = JZ4740_DMA_MODE_SINGLE;
+       i2s->pcm_config_capture.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO;
+}
+
+static int jz4740_i2s_dai_probe(struct snd_soc_dai *dai)
+{
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
        uint32_t conf;
 
+       clk_enable(i2s->clk_aic);
+
+       jz4740_i2c_init_pcm_config(i2s);
+
        conf = (7 << JZ_AIC_CONF_FIFO_RX_THRESHOLD_OFFSET) |
                (8 << JZ_AIC_CONF_FIFO_TX_THRESHOLD_OFFSET) |
                JZ_AIC_CONF_OVERFLOW_PLAY_LAST |
@@ -363,6 +385,14 @@ static int jz4740_i2s_probe(struct platform_device *pdev, struct snd_soc_dai *da
        return 0;
 }
 
+static int jz4740_i2s_dai_remove(struct snd_soc_dai *dai)
+{
+       struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
+
+       clk_disable(i2s->clk_aic);
+       return 0;
+}
+
 static struct snd_soc_dai_ops jz4740_i2s_dai_ops = {
        .startup = jz4740_i2s_startup,
        .shutdown = jz4740_i2s_shutdown,
@@ -375,9 +405,9 @@ static struct snd_soc_dai_ops jz4740_i2s_dai_ops = {
 #define JZ4740_I2S_FMTS (SNDRV_PCM_FMTBIT_S8 | \
                SNDRV_PCM_FMTBIT_S16_LE)
 
-struct snd_soc_dai jz4740_i2s_dai = {
-       .name = "jz4740-i2s",
-       .probe = jz4740_i2s_probe,
+static struct snd_soc_dai_driver jz4740_i2s_dai = {
+       .probe = jz4740_i2s_dai_probe,
+       .remove = jz4740_i2s_dai_remove,
        .playback = {
                .channels_min = 1,
                .channels_max = 2,
@@ -395,30 +425,6 @@ struct snd_soc_dai jz4740_i2s_dai = {
        .suspend = jz4740_i2s_suspend,
        .resume = jz4740_i2s_resume,
 };
-EXPORT_SYMBOL_GPL(jz4740_i2s_dai);
-
-static void __devinit jz4740_i2c_init_pcm_config(struct jz4740_i2s *i2s)
-{
-       struct jz4740_dma_config *dma_config;
-
-       /* Playback */
-       dma_config = &i2s->pcm_config_playback.dma_config;
-       dma_config->src_width = JZ4740_DMA_WIDTH_32BIT,
-       dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE;
-       dma_config->request_type = JZ4740_DMA_TYPE_AIC_TRANSMIT;
-       dma_config->flags = JZ4740_DMA_SRC_AUTOINC;
-       dma_config->mode = JZ4740_DMA_MODE_SINGLE;
-       i2s->pcm_config_playback.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO;
-
-       /* Capture */
-       dma_config = &i2s->pcm_config_capture.dma_config;
-       dma_config->dst_width = JZ4740_DMA_WIDTH_32BIT,
-       dma_config->transfer_size = JZ4740_DMA_TRANSFER_SIZE_16BYTE;
-       dma_config->request_type = JZ4740_DMA_TYPE_AIC_RECEIVE;
-       dma_config->flags = JZ4740_DMA_DST_AUTOINC;
-       dma_config->mode = JZ4740_DMA_MODE_SINGLE;
-       i2s->pcm_config_capture.fifo_addr = i2s->phys_base + JZ_REG_AIC_FIFO;
-}
 
 static int __devinit jz4740_i2s_dev_probe(struct platform_device *pdev)
 {
@@ -463,24 +469,17 @@ static int __devinit jz4740_i2s_dev_probe(struct platform_device *pdev)
                goto err_clk_put_aic;
        }
 
-       clk_enable(i2s->clk_aic);
-
-       jz4740_i2c_init_pcm_config(i2s);
-
-       jz4740_i2s_dai.private_data = i2s;
-       ret = snd_soc_register_dai(&jz4740_i2s_dai);
+       platform_set_drvdata(pdev, i2s);
+       ret = snd_soc_register_dai(&pdev->dev, &jz4740_i2s_dai);
 
        if (ret) {
                dev_err(&pdev->dev, "Failed to register DAI\n");
                goto err_clk_put_i2s;
        }
 
-       platform_set_drvdata(pdev, i2s);
-
        return 0;
 
 err_clk_put_i2s:
-       clk_disable(i2s->clk_aic);
        clk_put(i2s->clk_i2s);
 err_clk_put_aic:
        clk_put(i2s->clk_aic);
@@ -498,9 +497,8 @@ static int __devexit jz4740_i2s_dev_remove(struct platform_device *pdev)
 {
        struct jz4740_i2s *i2s = platform_get_drvdata(pdev);
 
-       snd_soc_unregister_dai(&jz4740_i2s_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
-       clk_disable(i2s->clk_aic);
        clk_put(i2s->clk_i2s);
        clk_put(i2s->clk_aic);
 
index da22ed88a5899ae334670e58ae88767f25287bda..5e49339d8b9340212e7e74f0defc3d2c5cc2ce76 100644 (file)
@@ -13,6 +13,4 @@
 
 #define JZ4740_I2S_BIT_CLK             0
 
-extern struct snd_soc_dai jz4740_i2s_dai;
-
 #endif
index ee68d850c8dd93715564679a8b766655952669c8..fb1483f7c9660b15daeddf0b978f7b969d2ee61a 100644 (file)
@@ -109,7 +109,7 @@ static int jz4740_pcm_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct jz4740_pcm_config *config;
 
-       config = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       config = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        if (!config)
                return 0;
@@ -310,14 +310,14 @@ int jz4740_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = jz4740_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto err;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = jz4740_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -328,22 +328,20 @@ err:
        return ret;
 }
 
-struct snd_soc_platform jz4740_soc_platform = {
-               .name           = "jz4740-pcm",
-               .pcm_ops        = &jz4740_pcm_ops,
+static struct snd_soc_platform_driver jz4740_soc_platform = {
+               .ops            = &jz4740_pcm_ops,
                .pcm_new        = jz4740_pcm_new,
                .pcm_free       = jz4740_pcm_free,
 };
-EXPORT_SYMBOL_GPL(jz4740_soc_platform);
 
 static int __devinit jz4740_pcm_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&jz4740_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &jz4740_soc_platform);
 }
 
 static int __devexit jz4740_pcm_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&jz4740_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
        return 0;
 }
 
@@ -351,7 +349,7 @@ static struct platform_driver jz4740_pcm_driver = {
        .probe = jz4740_pcm_probe,
        .remove = __devexit_p(jz4740_pcm_remove),
        .driver = {
-               .name = "jz4740-pcm",
+               .name = "jz4740-pcm-audio",
                .owner = THIS_MODULE,
        },
 };
index e3f221e2779c1c8164fc25e97abb17f2709e3e85..1220cbb4382c683966f868f918da55772d9a8288 100644 (file)
@@ -11,8 +11,6 @@
 #include <linux/dma-mapping.h>
 #include <asm/mach-jz4740/dma.h>
 
-/* platform data */
-extern struct snd_soc_platform jz4740_soc_platform;
 
 struct jz4740_pcm_config {
        struct jz4740_dma_config dma_config;
index f15f4918f15f4ef22904589cc3a5bb4992f19011..78dabebe8fd06bf08bf7059215877650b6e15b9e 100644 (file)
@@ -60,10 +60,11 @@ static const struct snd_soc_dapm_route qi_lb60_routes[] = {
                        SND_SOC_DAIFMT_NB_NF | \
                        SND_SOC_DAIFMT_CBM_CFM)
 
-static int qi_lb60_codec_init(struct snd_soc_codec *codec)
+static int qi_lb60_codec_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
-       struct snd_soc_dai *cpu_dai = codec->socdev->card->dai_link->cpu_dai;
 
        snd_soc_dapm_nc_pin(codec, "LIN");
        snd_soc_dapm_nc_pin(codec, "RIN");
@@ -84,8 +85,10 @@ static int qi_lb60_codec_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link qi_lb60_dai = {
        .name = "jz4740",
        .stream_name = "jz4740",
-       .cpu_dai = &jz4740_i2s_dai,
-       .codec_dai = &jz4740_codec_dai,
+       .cpu_dai_name = "jz4740-i2s",
+       .platform_name = "jz4740-pmc-audio",
+       .codec_dai_name = "jz4740-hifi",
+       .codec_name = "jz4740-codec",
        .init = qi_lb60_codec_init,
 };
 
@@ -93,12 +96,6 @@ static struct snd_soc_card qi_lb60 = {
        .name = "QI LB60",
        .dai_link = &qi_lb60_dai,
        .num_links = 1,
-       .platform = &jz4740_soc_platform,
-};
-
-static struct snd_soc_device qi_lb60_snd_devdata = {
-       .card = &qi_lb60,
-       .codec_dev = &soc_codec_dev_jz4740_codec,
 };
 
 static struct platform_device *qi_lb60_snd_device;
@@ -129,8 +126,7 @@ static int __init qi_lb60_init(void)
        gpio_direction_output(QI_LB60_SND_GPIO, 0);
        gpio_direction_output(QI_LB60_AMP_GPIO, 0);
 
-       platform_set_drvdata(qi_lb60_snd_device, &qi_lb60_snd_devdata);
-       qi_lb60_snd_devdata.dev = &qi_lb60_snd_device->dev;
+       platform_set_drvdata(qi_lb60_snd_device, &qi_lb60);
 
        ret = platform_device_add(qi_lb60_snd_device);
        if (ret) {
index a30205be3e2b46b4ee5c315cbe7c227f9eacb8cc..693049d42d24403e6f7f9ff1e7be54674d2c5ce7 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/dma-mapping.h>
 #include <linux/mbus.h>
 #include <sound/soc.h>
-#include "kirkwood-dma.h"
 #include "kirkwood.h"
 
 #define KIRKWOOD_RATES \
@@ -123,9 +122,10 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
        int err;
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *soc_runtime = substream->private_data;
-       struct snd_soc_dai *cpu_dai = soc_runtime->dai->cpu_dai;
+       struct snd_soc_platform *platform = soc_runtime->platform;
+       struct snd_soc_dai *cpu_dai = soc_runtime->cpu_dai;
        struct kirkwood_dma_data *priv;
-       struct kirkwood_dma_priv *prdata = cpu_dai->private_data;
+       struct kirkwood_dma_priv *prdata = snd_soc_platform_get_drvdata(platform);
        unsigned long addr;
 
        priv = snd_soc_dai_get_dma_data(cpu_dai, substream);
@@ -151,7 +151,7 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
        if (err < 0)
                return err;
 
-       if (soc_runtime->dai->cpu_dai->private_data == NULL) {
+       if (prdata == NULL) {
                prdata = kzalloc(sizeof(struct kirkwood_dma_priv), GFP_KERNEL);
                if (prdata == NULL)
                        return -ENOMEM;
@@ -165,7 +165,7 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
                        return -EBUSY;
                }
 
-               soc_runtime->dai->cpu_dai->private_data = prdata;
+               snd_soc_platform_set_drvdata(platform, prdata);
 
                /*
                 * Enable Error interrupts. We're only ack'ing them but
@@ -191,8 +191,9 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
 static int kirkwood_dma_close(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *soc_runtime = substream->private_data;
-       struct snd_soc_dai *cpu_dai = soc_runtime->dai->cpu_dai;
-       struct kirkwood_dma_priv *prdata = cpu_dai->private_data;
+       struct snd_soc_dai *cpu_dai = soc_runtime->cpu_dai;
+       struct snd_soc_platform *platform = soc_runtime->platform;
+       struct kirkwood_dma_priv *prdata = snd_soc_platform_get_drvdata(platform);
        struct kirkwood_dma_data *priv;
 
        priv = snd_soc_dai_get_dma_data(cpu_dai, substream);
@@ -209,7 +210,7 @@ static int kirkwood_dma_close(struct snd_pcm_substream *substream)
                writel(0, priv->io + KIRKWOOD_ERR_MASK);
                free_irq(priv->irq, prdata);
                kfree(prdata);
-               soc_runtime->dai->cpu_dai->private_data = NULL;
+               snd_soc_platform_set_drvdata(platform, NULL);
        }
 
        return 0;
@@ -236,7 +237,7 @@ static int kirkwood_dma_prepare(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *soc_runtime = substream->private_data;
-       struct snd_soc_dai *cpu_dai = soc_runtime->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = soc_runtime->cpu_dai;
        struct kirkwood_dma_data *priv;
        unsigned long size, count;
 
@@ -265,7 +266,7 @@ static snd_pcm_uframes_t kirkwood_dma_pointer(struct snd_pcm_substream
                                                *substream)
 {
        struct snd_soc_pcm_runtime *soc_runtime = substream->private_data;
-       struct snd_soc_dai *cpu_dai = soc_runtime->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = soc_runtime->cpu_dai;
        struct kirkwood_dma_data *priv;
        snd_pcm_uframes_t count;
 
@@ -320,14 +321,14 @@ static int kirkwood_dma_new(struct snd_card *card,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = 0xffffffff;
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = kirkwood_dma_preallocate_dma_buffer(pcm,
                                SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        return ret;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = kirkwood_dma_preallocate_dma_buffer(pcm,
                                SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -357,25 +358,44 @@ static void kirkwood_dma_free_dma_buffers(struct snd_pcm *pcm)
        }
 }
 
-struct snd_soc_platform kirkwood_soc_platform = {
-       .name           = "kirkwood-dma",
-       .pcm_ops        = &kirkwood_dma_ops,
+static struct snd_soc_platform_driver kirkwood_soc_platform = {
+       .ops            = &kirkwood_dma_ops,
        .pcm_new        = kirkwood_dma_new,
        .pcm_free       = kirkwood_dma_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(kirkwood_soc_platform);
 
-static int __init kirkwood_soc_platform_init(void)
+static int __devinit kirkwood_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&kirkwood_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &kirkwood_soc_platform);
 }
-module_init(kirkwood_soc_platform_init);
 
-static void __exit kirkwood_soc_platform_exit(void)
+static int __devexit kirkwood_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&kirkwood_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver kirkwood_pcm_driver = {
+       .driver = {
+                       .name = "kirkwood-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = kirkwood_soc_platform_probe,
+       .remove = __devexit_p(kirkwood_soc_platform_remove),
+};
+
+static int __init kirkwood_pcm_init(void)
+{
+       return platform_driver_register(&kirkwood_pcm_driver);
+}
+module_init(kirkwood_pcm_init);
+
+static void __exit kirkwood_pcm_exit(void)
+{
+       platform_driver_unregister(&kirkwood_pcm_driver);
 }
-module_exit(kirkwood_soc_platform_exit);
+module_exit(kirkwood_pcm_exit);
 
 MODULE_AUTHOR("Arnaud Patard <apatard@mandriva.com>");
 MODULE_DESCRIPTION("Marvell Kirkwood Audio DMA module");
diff --git a/sound/soc/kirkwood/kirkwood-dma.h b/sound/soc/kirkwood/kirkwood-dma.h
deleted file mode 100644 (file)
index ba4454c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * kirkwood-dma.h
- *
- * (c) 2010 Arnaud Patard <apatard@mandriva.com>
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- */
-
-#ifndef _KIRKWOOD_DMA_H
-#define _KIRKWOOD_DMA_H
-
-extern struct snd_soc_platform kirkwood_soc_platform;
-
-#endif
index 981ffc2a13c8ad5adfdccdcd59cfc177bc1d9101..9b62cba4f5906c017a35b953458587e8310a3814 100644 (file)
@@ -20,7 +20,6 @@
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
 #include <plat/audio.h>
-#include "kirkwood-i2s.h"
 #include "kirkwood.h"
 
 #define DRV_NAME       "kirkwood-i2s"
         SNDRV_PCM_FMTBIT_S24_LE | \
         SNDRV_PCM_FMTBIT_S32_LE)
 
-
-struct snd_soc_dai kirkwood_i2s_dai;
-static struct kirkwood_dma_data *priv;
-
 static int kirkwood_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
                unsigned int fmt)
 {
+       struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(cpu_dai);
        unsigned long mask;
        unsigned long value;
 
@@ -101,10 +97,20 @@ static inline void kirkwood_set_dco(void __iomem *io, unsigned long rate)
        } while (value == 0);
 }
 
+static int kirkwood_i2s_startup(struct snd_pcm_substream *substream,
+               struct snd_soc_dai *dai)
+{
+       struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai);
+
+       snd_soc_dai_set_dma_data(dai, substream, priv);
+       return 0;
+}
+
 static int kirkwood_i2s_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *dai)
 {
+       struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai);
        unsigned int i2s_reg, reg;
        unsigned long i2s_value, value;
 
@@ -171,6 +177,7 @@ static int kirkwood_i2s_hw_params(struct snd_pcm_substream *substream,
 static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream,
                                int cmd, struct snd_soc_dai *dai)
 {
+       struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai);
        unsigned long value;
 
        /*
@@ -244,6 +251,7 @@ static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream,
 static int kirkwood_i2s_rec_trigger(struct snd_pcm_substream *substream,
                                int cmd, struct snd_soc_dai *dai)
 {
+       struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai);
        unsigned long value;
 
        value = readl(priv->io + KIRKWOOD_RECCTL);
@@ -323,9 +331,9 @@ static int kirkwood_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
        return 0;
 }
 
-static int kirkwood_i2s_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
+static int kirkwood_i2s_probe(struct snd_soc_dai *dai)
 {
+       struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai);
        unsigned long value;
        unsigned int reg_data;
 
@@ -359,21 +367,20 @@ static int kirkwood_i2s_probe(struct platform_device *pdev,
 
 }
 
-static void kirkwood_i2s_remove(struct platform_device *pdev,
-                               struct snd_soc_dai *dai)
+static int kirkwood_i2s_remove(struct snd_soc_dai *dai)
 {
+       return 0;
 }
 
 static struct snd_soc_dai_ops kirkwood_i2s_dai_ops = {
+       .startup        = kirkwood_i2s_startup,
        .trigger        = kirkwood_i2s_trigger,
        .hw_params      = kirkwood_i2s_hw_params,
        .set_fmt        = kirkwood_i2s_set_fmt,
 };
 
 
-struct snd_soc_dai kirkwood_i2s_dai = {
-       .name = DRV_NAME,
-       .id = 0,
+static struct snd_soc_dai_driver kirkwood_i2s_dai = {
        .probe = kirkwood_i2s_probe,
        .remove = kirkwood_i2s_remove,
        .playback = {
@@ -388,13 +395,13 @@ struct snd_soc_dai kirkwood_i2s_dai = {
                .formats = KIRKWOOD_I2S_FORMATS,},
        .ops = &kirkwood_i2s_dai_ops,
 };
-EXPORT_SYMBOL_GPL(kirkwood_i2s_dai);
 
 static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
 {
        struct resource *mem;
        struct kirkwood_asoc_platform_data *data =
                pdev->dev.platform_data;
+       struct kirkwood_dma_data *priv;
        int err;
 
        priv = kzalloc(sizeof(struct kirkwood_dma_data), GFP_KERNEL);
@@ -403,6 +410,7 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
                err = -ENOMEM;
                goto error;
        }
+       dev_set_drvdata(&pdev->dev, priv);
 
        mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!mem) {
@@ -441,10 +449,7 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
        priv->dram = data->dram;
        priv->burst = data->burst;
 
-       kirkwood_i2s_dai.capture.dma_data = priv;
-       kirkwood_i2s_dai.playback.dma_data = priv;
-
-       return snd_soc_register_dai(&kirkwood_i2s_dai);
+       return snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai);
 
 err_ioremap:
        iounmap(priv->io);
@@ -458,12 +463,13 @@ error:
 
 static __devexit int kirkwood_i2s_dev_remove(struct platform_device *pdev)
 {
-       if (priv) {
-               iounmap(priv->io);
-               release_mem_region(priv->mem->start, SZ_16K);
-               kfree(priv);
-       }
-       snd_soc_unregister_dai(&kirkwood_i2s_dai);
+       struct kirkwood_dma_data *priv = dev_get_drvdata(&pdev->dev);
+
+       snd_soc_unregister_dai(&pdev->dev);
+       iounmap(priv->io);
+       release_mem_region(priv->mem->start, SZ_16K);
+       kfree(priv);
+
        return 0;
 }
 
diff --git a/sound/soc/kirkwood/kirkwood-i2s.h b/sound/soc/kirkwood/kirkwood-i2s.h
deleted file mode 100644 (file)
index c5595c6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * kirkwood-i2s.h
- *
- * (c) 2010 Arnaud Patard <apatard@mandriva.com>
- *
- *  This program is free software; you can redistribute  it and/or modify it
- *  under  the terms of  the GNU General  Public License as published by the
- *  Free Software Foundation;  either version 2 of the  License, or (at your
- *  option) any later version.
- */
-
-#ifndef _KIRKWOOD_I2S_H
-#define _KIRKWOOD_I2S_H
-
-extern struct snd_soc_dai kirkwood_i2s_dai;
-
-#endif
index 0353d06bc41ac38c94ea67ae10f6afe307485b4d..cc1a1e277edf384bba0c4f1b67dcfc7684dfc3c8 100644 (file)
 #include <mach/kirkwood.h>
 #include <plat/audio.h>
 #include <asm/mach-types.h>
-#include "kirkwood-i2s.h"
-#include "kirkwood-dma.h"
 #include "../codecs/cs42l51.h"
 
 static int openrd_client_hw_params(struct snd_pcm_substream *substream,
                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
        unsigned int freq, fmt;
 
@@ -66,8 +64,10 @@ static struct snd_soc_dai_link openrd_client_dai[] = {
 {
        .name = "CS42L51",
        .stream_name = "CS42L51 HiFi",
-       .cpu_dai = &kirkwood_i2s_dai,
-       .codec_dai = &cs42l51_dai,
+       .cpu_dai_name = "kirkwood-i2s",
+       .platform_name = "kirkwood-pcm-audio",
+       .codec_dai_name = "cs42l51_hifi",
+       .codec_name = "cs42l51-codec.0-004a",
        .ops = &openrd_client_ops,
 },
 };
@@ -75,16 +75,10 @@ static struct snd_soc_dai_link openrd_client_dai[] = {
 
 static struct snd_soc_card openrd_client = {
        .name = "OpenRD Client",
-       .platform = &kirkwood_soc_platform,
        .dai_link = openrd_client_dai,
        .num_links = ARRAY_SIZE(openrd_client_dai),
 };
 
-static struct snd_soc_device openrd_client_snd_devdata = {
-       .card = &openrd_client,
-       .codec_dev = &soc_codec_device_cs42l51,
-};
-
 static struct platform_device *openrd_client_snd_device;
 
 static int __init openrd_client_init(void)
@@ -99,8 +93,7 @@ static int __init openrd_client_init(void)
                return -ENOMEM;
 
        platform_set_drvdata(openrd_client_snd_device,
-                       &openrd_client_snd_devdata);
-       openrd_client_snd_devdata.dev = &openrd_client_snd_device->dev;
+                       &openrd_client);
 
        ret = platform_device_add(openrd_client_snd_device);
        if (ret) {
index caa7c901bc2e131a24fbfe90e442242ab2e22185..02b64a17dec2ae111f20639841b9fb78c436e0ed 100644 (file)
@@ -297,8 +297,7 @@ static struct snd_soc_dai_ops nuc900_ac97_dai_ops = {
        .trigger        = nuc900_ac97_trigger,
 };
 
-struct snd_soc_dai nuc900_ac97_dai = {
-       .name                   = "nuc900-ac97",
+static struct snd_soc_dai_driver nuc900_ac97_dai = {
        .probe                  = nuc900_ac97_probe,
        .remove                 = nuc900_ac97_remove,
        .ac97_control           = 1,
@@ -316,7 +315,6 @@ struct snd_soc_dai nuc900_ac97_dai = {
        },
        .ops = &nuc900_ac97_dai_ops,
 }
-EXPORT_SYMBOL_GPL(nuc900_ac97_dai);
 
 static int __devinit nuc900_ac97_drvprobe(struct platform_device *pdev)
 {
@@ -365,9 +363,7 @@ static int __devinit nuc900_ac97_drvprobe(struct platform_device *pdev)
 
        nuc900_ac97_data = nuc900_audio;
 
-       nuc900_audio->dev = nuc900_ac97_dai.dev =  &pdev->dev;
-
-       ret = snd_soc_register_dai(&nuc900_ac97_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &nuc900_ac97_dai);
        if (ret)
                goto out3;
 
@@ -390,7 +386,7 @@ out0:
 static int __devexit nuc900_ac97_drvremove(struct platform_device *pdev)
 {
 
-       snd_soc_unregister_dai(&nuc900_ac97_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        clk_put(nuc900_ac97_data->clk);
        iounmap(nuc900_ac97_data->mmio);
@@ -404,7 +400,7 @@ static int __devexit nuc900_ac97_drvremove(struct platform_device *pdev)
 
 static struct platform_driver nuc900_ac97_driver = {
        .driver = {
-               .name   = "nuc900-audio",
+               .name   = "nuc900-ac97",
                .owner  = THIS_MODULE,
        },
        .probe          = nuc900_ac97_drvprobe,
index 72e6f518f7b21818a2177dd7739576cb04f2410b..161f5b667d7b5cf641896f462efe3740866f129a 100644 (file)
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
 
-#include "../codecs/ac97.h"
 #include "nuc900-audio.h"
 
 static struct snd_soc_dai_link nuc900evb_ac97_dai = {
        .name           = "AC97",
        .stream_name    = "AC97 HiFi",
-       .cpu_dai        = &nuc900_ac97_dai,
-       .codec_dai      = &ac97_dai,
+       .cpu_dai_name   = "nuc900-ac97",
+       .codec_dai_name = "ac97-hifi",
+       .codec_name     = "ac97-codec",
+       .platform_name  = "nuc900-pcm-audio",
 };
 
 static struct snd_soc_card nuc900evb_audio_machine = {
        .name           = "NUC900EVB_AC97",
        .dai_link       = &nuc900evb_ac97_dai,
        .num_links      = 1,
-       .platform       = &nuc900_soc_platform,
-};
-
-static struct snd_soc_device nuc900evb_ac97_devdata = {
-       .card           = &nuc900evb_audio_machine,
-       .codec_dev      = &soc_codec_dev_ac97,
 };
 
 static struct platform_device *nuc900evb_asoc_dev;
@@ -54,9 +49,8 @@ static int __init nuc900evb_audio_init(void)
                goto out;
 
        /* nuc900 board audio device */
-       platform_set_drvdata(nuc900evb_asoc_dev, &nuc900evb_ac97_devdata);
+       platform_set_drvdata(nuc900evb_asoc_dev, &nuc900evb_audio_machine);
 
-       nuc900evb_ac97_devdata.dev = &nuc900evb_asoc_dev->dev;
        ret = platform_device_add(nuc900evb_asoc_dev);
 
        if (ret) {
index 3038f519729f5b9559cb47cceababfb919a93a56..aeed8ead2b2bcc42fcb5e06200a807f68cc6ce63 100644 (file)
@@ -110,8 +110,4 @@ struct nuc900_audio {
 
 };
 
-extern struct nuc900_audio *nuc900_ac97_data;
-extern struct snd_soc_dai nuc900_ac97_dai;
-extern struct snd_soc_platform nuc900_soc_platform;
-
 #endif /*end _NUC900_AUDIO_H */
index e81e803b3a63fd502e4dd857232f1ee9f34f6929..195d1ac94771808c0eda8075255efff787cdfd59 100644 (file)
@@ -328,26 +328,44 @@ static int nuc900_dma_new(struct snd_card *card,
        return 0;
 }
 
-struct snd_soc_platform nuc900_soc_platform = {
-       .name           = "nuc900-dma",
-       .pcm_ops        = &nuc900_dma_ops,
+static struct snd_soc_platform_driver nuc900_soc_platform = {
+       .ops            = &nuc900_dma_ops,
        .pcm_new        = nuc900_dma_new,
        .pcm_free       = nuc900_dma_free_dma_buffers,
 }
-EXPORT_SYMBOL_GPL(nuc900_soc_platform);
 
-static int __init nuc900_soc_platform_init(void)
+static int __devinit nuc900_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&nuc900_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &nuc900_soc_platform);
 }
 
-static void __exit nuc900_soc_platform_exit(void)
+static int __devexit nuc900_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&nuc900_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
 }
 
-module_init(nuc900_soc_platform_init);
-module_exit(nuc900_soc_platform_exit);
+static struct platform_driver nuc900_pcm_driver = {
+       .driver = {
+                       .name = "nuc900-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = nuc900_soc_platform_probe,
+       .remove = __devexit_p(nuc900_soc_platform_remove),
+};
+
+static int __init nuc900_pcm_init(void)
+{
+       return platform_driver_register(&nuc900_pcm_driver);
+}
+module_init(nuc900_pcm_init);
+
+static void __exit nuc900_pcm_exit(void)
+{
+       platform_driver_unregister(&nuc900_pcm_driver);
+}
+module_exit(nuc900_pcm_exit);
 
 MODULE_AUTHOR("Wan ZongShun, <mcuos.com@gmail.com>");
 MODULE_DESCRIPTION("nuc900 Audio DMA module");
index 135901b2ea11b826c629ca93d572ea49ffccb7f8..68bd902ccd4e392dd96547b1e8e8d735baa3472b 100644 (file)
@@ -40,8 +40,8 @@ static int am3517evm_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -111,8 +111,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"MICIN", NULL, "Mic In"},
 };
 
-static int am3517evm_aic23_init(struct snd_soc_codec *codec)
+static int am3517evm_aic23_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        /* Add am3517-evm specific widgets */
        snd_soc_dapm_new_controls(codec, tlv320aic23_dapm_widgets,
                                  ARRAY_SIZE(tlv320aic23_dapm_widgets));
@@ -134,8 +136,10 @@ static int am3517evm_aic23_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link am3517evm_dai = {
        .name = "TLV320AIC23",
        .stream_name = "AIC23",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &tlv320aic23_dai,
+       .cpu_dai_name ="omap-mcbsp-dai.0",
+       .codec_dai_name = "tlv320aic23-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "tlv320aic23-codec",
        .init = am3517evm_aic23_init,
        .ops = &am3517evm_ops,
 };
@@ -143,17 +147,10 @@ static struct snd_soc_dai_link am3517evm_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_am3517evm = {
        .name = "am3517evm",
-       .platform = &omap_soc_platform,
        .dai_link = &am3517evm_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device am3517evm_snd_devdata = {
-       .card = &snd_soc_am3517evm,
-       .codec_dev = &soc_codec_dev_tlv320aic23,
-};
-
 static struct platform_device *am3517evm_snd_device;
 
 static int __init am3517evm_soc_init(void)
@@ -172,9 +169,7 @@ static int __init am3517evm_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(am3517evm_snd_device, &am3517evm_snd_devdata);
-       am3517evm_snd_devdata.dev = &am3517evm_snd_device->dev;
-       *(unsigned int *)am3517evm_dai.cpu_dai->private_data = 0; /* McBSP1 */
+       platform_set_drvdata(am3517evm_snd_device, &snd_soc_am3517evm);
 
        ret = platform_device_add(am3517evm_snd_device);
        if (ret)
index b0f618e4484068e6c62e7b9515b6af5d6dfa021e..9d88efa06e3cae433f9742ebfd966d30a3ae8a3e 100644 (file)
@@ -99,7 +99,7 @@ static int ams_delta_set_audio_mode(struct snd_kcontrol *kcontrol,
        int pin, changed = 0;
 
        /* Refuse any mode changes if we are not able to control the codec. */
-       if (!codec->control_data)
+       if (!codec->hw_write)
                return -EUNATCH;
 
        if (ucontrol->value.enumerated.item[0] >= control->max)
@@ -268,10 +268,32 @@ static void cx81801_timeout(unsigned long data)
                ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_CODEC, 0);
 }
 
+/*
+ * Used for passing a codec structure pointer
+ * from the board initialization code to the tty line discipline.
+ */
+static struct snd_soc_codec *cx20442_codec;
+
 /* Line discipline .open() */
 static int cx81801_open(struct tty_struct *tty)
 {
-       return v253_ops.open(tty);
+       int ret;
+
+       if (!cx20442_codec)
+               return -ENODEV;
+
+       /*
+        * Pass the codec structure pointer for use by other ldisc callbacks,
+        * both the card and the codec specific parts.
+        */
+       tty->disc_data = cx20442_codec;
+
+       ret = v253_ops.open(tty);
+
+       if (ret < 0)
+               tty->disc_data = NULL;
+
+       return ret;
 }
 
 /* Line discipline .close() */
@@ -281,11 +303,14 @@ static void cx81801_close(struct tty_struct *tty)
 
        del_timer_sync(&cx81801_timer);
 
-       v253_ops.close(tty);
-
        /* Prevent the hook switch from further changing the DAPM pins */
        INIT_LIST_HEAD(&ams_delta_hook_switch.pins);
 
+       if (!codec)
+               return;
+
+       v253_ops.close(tty);
+
        /* Revert back to default audio input/output constellation */
        snd_soc_dapm_disable_pin(codec, "Mouthpiece");
        snd_soc_dapm_enable_pin(codec, "Earpiece");
@@ -310,7 +335,10 @@ static void cx81801_receive(struct tty_struct *tty,
        const unsigned char *c;
        int apply, ret;
 
-       if (!codec->control_data) {
+       if (!codec)
+               return;
+
+       if (!codec->hw_write) {
                /* First modem response, complete setup procedure */
 
                /* Initialize timer used for config pulse generation */
@@ -323,7 +351,7 @@ static void cx81801_receive(struct tty_struct *tty,
                                        ARRAY_SIZE(ams_delta_hook_switch_pins),
                                        ams_delta_hook_switch_pins);
                if (ret)
-                       dev_warn(codec->socdev->card->dev,
+                       dev_warn(codec->dev,
                                "Failed to link hook switch to DAPM pins, "
                                "will continue with hook switch unlinked.\n");
 
@@ -383,7 +411,7 @@ static int ams_delta_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
 
        /* Set cpu DAI configuration */
-       return snd_soc_dai_set_fmt(rtd->dai->cpu_dai,
+       return snd_soc_dai_set_fmt(rtd->cpu_dai,
                                   SND_SOC_DAIFMT_DSP_A |
                                   SND_SOC_DAIFMT_NB_NF |
                                   SND_SOC_DAIFMT_CBM_CFM);
@@ -398,7 +426,7 @@ static struct snd_soc_ops ams_delta_ops = {
 static int ams_delta_set_bias_level(struct snd_soc_card *card,
                                        enum snd_soc_bias_level level)
 {
-       struct snd_soc_codec *codec = card->codec;
+       struct snd_soc_codec *codec = card->rtd->codec;
 
        switch (level) {
        case SND_SOC_BIAS_ON:
@@ -461,18 +489,22 @@ static void ams_delta_shutdown(struct snd_pcm_substream *substream)
  * Card initialization
  */
 
-static int ams_delta_cx20442_init(struct snd_soc_codec *codec)
+static int ams_delta_cx20442_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_dai *codec_dai = codec->dai;
-       struct snd_soc_card *card = codec->socdev->card;
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_card *card = rtd->card;
        int ret;
        /* Codec is ready, now add/activate board specific controls */
 
+       /* Store a pointer to the codec structure for tty ldisc use */
+       cx20442_codec = codec;
+
        /* Set up digital mute if not provided by the codec */
-       if (!codec_dai->ops) {
-               codec_dai->ops = &ams_delta_dai_ops;
-       } else if (!codec_dai->ops->digital_mute) {
-               codec_dai->ops->digital_mute = ams_delta_digital_mute;
+       if (!codec_dai->driver->ops) {
+               codec_dai->driver->ops = &ams_delta_dai_ops;
+       } else if (!codec_dai->driver->ops->digital_mute) {
+               codec_dai->driver->ops->digital_mute = ams_delta_digital_mute;
        } else {
                ams_delta_ops.startup = ams_delta_startup;
                ams_delta_ops.shutdown = ams_delta_shutdown;
@@ -483,7 +515,7 @@ static int ams_delta_cx20442_init(struct snd_soc_codec *codec)
 
        /* Add hook switch - can be used to control the codec from userspace
         * even if line discipline fails */
-       ret = snd_soc_jack_new(card, "hook_switch",
+       ret = snd_soc_jack_new(rtd->codec, "hook_switch",
                                SND_JACK_HEADSET, &ams_delta_hook_switch);
        if (ret)
                dev_warn(card->dev,
@@ -551,27 +583,22 @@ static int ams_delta_cx20442_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link ams_delta_dai_link = {
        .name = "CX20442",
        .stream_name = "CX20442",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &cx20442_dai,
+       .cpu_dai_name ="omap-mcbsp-dai.0",
+       .codec_dai_name = "cx20442-hifi",
        .init = ams_delta_cx20442_init,
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "cx20442-codec",
        .ops = &ams_delta_ops,
 };
 
 /* Audio card driver */
 static struct snd_soc_card ams_delta_audio_card = {
        .name = "AMS_DELTA",
-       .platform = &omap_soc_platform,
        .dai_link = &ams_delta_dai_link,
        .num_links = 1,
        .set_bias_level = ams_delta_set_bias_level,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device ams_delta_snd_soc_device = {
-       .card = &ams_delta_audio_card,
-       .codec_dev = &cx20442_codec_dev,
-};
-
 /* Module init/exit */
 static struct platform_device *ams_delta_audio_platform_device;
 static struct platform_device *cx20442_platform_device;
@@ -589,9 +616,7 @@ static int __init ams_delta_module_init(void)
                return -ENOMEM;
 
        platform_set_drvdata(ams_delta_audio_platform_device,
-                               &ams_delta_snd_soc_device);
-       ams_delta_snd_soc_device.dev = &ams_delta_audio_platform_device->dev;
-       *(unsigned int *)ams_delta_dai_link.cpu_dai->private_data = OMAP_MCBSP1;
+                               &ams_delta_audio_card);
 
        ret = platform_device_add(ams_delta_audio_platform_device);
        if (ret)
@@ -601,8 +626,8 @@ static int __init ams_delta_module_init(void)
         * Codec platform device could be registered from elsewhere (board?),
         * but I do it here as it makes sense only if used with the card.
         */
-       cx20442_platform_device = platform_device_register_simple("cx20442",
-                                                               -1, NULL, 0);
+       cx20442_platform_device =
+               platform_device_register_simple("cx20442-codec", -1, NULL, 0);
        return 0;
 err:
        platform_device_put(ams_delta_audio_platform_device);
@@ -612,19 +637,6 @@ module_init(ams_delta_module_init);
 
 static void __exit ams_delta_module_exit(void)
 {
-       struct snd_soc_codec *codec;
-       struct tty_struct *tty;
-
-       if (ams_delta_audio_card.codec) {
-               codec = ams_delta_audio_card.codec;
-
-               if (codec->control_data) {
-                       tty = codec->control_data;
-
-                       tty_hangup(tty);
-               }
-       }
-
        if (tty_unregister_ldisc(N_V253) != 0)
                dev_warn(&ams_delta_audio_platform_device->dev,
                        "failed to unregister V253 line discipline\n");
index 3583c429f9be38634e95f2c14af34f25cfba7643..d296cfcc672e0b950a3cb13ac037f9da8c01fbd7 100644 (file)
 
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 static int igep2_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -82,25 +81,20 @@ static struct snd_soc_ops igep2_ops = {
 static struct snd_soc_dai_link igep2_dai = {
        .name = "TWL4030",
        .stream_name = "TWL4030",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+       .cpu_dai_name = "omap-mcbsp-dai.1",
+       .codec_dai_name = "twl4030-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "twl4030-codec",
        .ops = &igep2_ops,
 };
 
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_card_igep2 = {
        .name = "igep2",
-       .platform = &omap_soc_platform,
        .dai_link = &igep2_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device igep2_snd_devdata = {
-       .card = &snd_soc_card_igep2,
-       .codec_dev = &soc_codec_dev_twl4030,
-};
-
 static struct platform_device *igep2_snd_device;
 
 static int __init igep2_soc_init(void)
@@ -119,9 +113,7 @@ static int __init igep2_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(igep2_snd_device, &igep2_snd_devdata);
-       igep2_snd_devdata.dev = &igep2_snd_device->dev;
-       *(unsigned int *)igep2_dai.cpu_dai->private_data = 1; /* McBSP2 */
+       platform_set_drvdata(igep2_snd_device, &snd_soc_card_igep2);
 
        ret = platform_device_add(igep2_snd_device);
        if (ret)
index 90b8bf71c893be74903209f94b5f1aef17bc0171..928f03707451ecde15f046574ed8f1b4e841ee9a 100644 (file)
@@ -402,7 +402,7 @@ int omap_mcpdm_set_offset(int offset1, int offset2)
        return 0;
 }
 
-static int __devinit omap_mcpdm_probe(struct platform_device *pdev)
+int __devinit omap_mcpdm_probe(struct platform_device *pdev)
 {
        struct resource *res;
        int ret = 0;
@@ -449,7 +449,7 @@ exit:
        return ret;
 }
 
-static int __devexit omap_mcpdm_remove(struct platform_device *pdev)
+int __devexit omap_mcpdm_remove(struct platform_device *pdev)
 {
        struct omap_mcpdm *mcpdm_ptr = platform_get_drvdata(pdev);
 
@@ -468,18 +468,3 @@ static int __devexit omap_mcpdm_remove(struct platform_device *pdev)
        return 0;
 }
 
-static struct platform_driver omap_mcpdm_driver = {
-       .probe = omap_mcpdm_probe,
-       .remove = __devexit_p(omap_mcpdm_remove),
-       .driver = {
-               .name = "omap-mcpdm",
-       },
-};
-
-static struct platform_device *omap_mcpdm_device;
-
-static int __init omap_mcpdm_init(void)
-{
-       return platform_driver_register(&omap_mcpdm_driver);
-}
-arch_initcall(omap_mcpdm_init);
index 7bb326ef08866d7e032424c538d8069408d7d1a9..df3e16fb51f31ca2c6e1f25c9881ac272f7788c2 100644 (file)
@@ -149,3 +149,5 @@ extern int omap_mcpdm_playback_close(struct omap_mcpdm_link *downlink);
 extern int omap_mcpdm_request(void);
 extern void omap_mcpdm_free(void);
 extern int omap_mcpdm_set_offset(int offset1, int offset2);
+int __devinit omap_mcpdm_probe(struct platform_device *pdev);
+int __devexit omap_mcpdm_remove(struct platform_device *pdev);
index 08e09d72790f68beb75e40b1f55c1f3a4ff6d68f..a3b6d897ad84751b6ffced0757f27f51726d3385 100644 (file)
@@ -97,7 +97,7 @@ static int n810_startup(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        snd_pcm_hw_constraint_minmax(runtime,
                                     SNDRV_PCM_HW_PARAM_CHANNELS, 2, 2);
@@ -115,8 +115,8 @@ static int n810_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int err;
 
        /* Set codec DAI configuration */
@@ -271,8 +271,9 @@ static const struct snd_kcontrol_new aic33_n810_controls[] = {
                     n810_get_input, n810_set_input),
 };
 
-static int n810_aic33_init(struct snd_soc_codec *codec)
+static int n810_aic33_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* Not connected */
@@ -307,8 +308,10 @@ static int n810_aic33_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link n810_dai = {
        .name = "TLV320AIC33",
        .stream_name = "AIC33",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &aic3x_dai,
+       .cpu_dai_name = "omap-mcbsp-dai.1",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "tlv320aic3x-codec.2-0018",
+       .codec_dai_name = "tlv320aic3x-hifi",
        .init = n810_aic33_init,
        .ops = &n810_ops,
 };
@@ -316,33 +319,12 @@ static struct snd_soc_dai_link n810_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_n810 = {
        .name = "N810",
-       .platform = &omap_soc_platform,
        .dai_link = &n810_dai,
        .num_links = 1,
 };
 
-/* Audio private data */
-static struct aic3x_setup_data n810_aic33_setup = {
-       .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
-       .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
-};
-
-/* Audio subsystem */
-static struct snd_soc_device n810_snd_devdata = {
-       .card = &snd_soc_n810,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &n810_aic33_setup,
-};
-
 static struct platform_device *n810_snd_device;
 
-/* temporary i2c device creation until this can be moved into the machine
- * support file.
-*/
-static struct i2c_board_info i2c_device[] = {
-       { I2C_BOARD_INFO("tlv320aic3x", 0x1b), }
-};
-
 static int __init n810_soc_init(void)
 {
        int err;
@@ -351,15 +333,11 @@ static int __init n810_soc_init(void)
        if (!(machine_is_nokia_n810() || machine_is_nokia_n810_wimax()))
                return -ENODEV;
 
-       i2c_register_board_info(1, i2c_device, ARRAY_SIZE(i2c_device));
-
        n810_snd_device = platform_device_alloc("soc-audio", -1);
        if (!n810_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(n810_snd_device, &n810_snd_devdata);
-       n810_snd_devdata.dev = &n810_snd_device->dev;
-       *(unsigned int *)n810_dai.cpu_dai->private_data = 1; /* McBSP2 */
+       platform_set_drvdata(n810_snd_device, &snd_soc_n810);
        err = platform_device_add(n810_snd_device);
        if (err)
                goto err1;
index 86f213905e2c0108e261de0f5d73b734cea27e57..7ba5690118f867a9c5465c9349819e086f8b736d 100644 (file)
@@ -62,8 +62,6 @@ struct omap_mcbsp_data {
        int                             wlen;
 };
 
-#define to_mcbsp(priv) container_of((priv), struct omap_mcbsp_data, bus_id)
-
 static struct omap_mcbsp_data mcbsp_data[NUM_LINKS];
 
 /*
@@ -153,13 +151,13 @@ static const unsigned long omap34xx_mcbsp_port[][2] = {};
 static void omap_mcbsp_set_threshold(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        struct omap_pcm_dma_data *dma_data;
        int dma_op_mode = omap_mcbsp_get_dma_op_mode(mcbsp_data->bus_id);
        int words;
 
-       dma_data = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        /* TODO: Currently, MODE_ELEMENT == MODE_FRAME */
        if (dma_op_mode == MCBSP_DMA_MODE_THRESHOLD)
@@ -203,11 +201,9 @@ static int omap_mcbsp_hwrule_min_buffersize(struct snd_pcm_hw_params *params,
 }
 
 static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream,
-                                 struct snd_soc_dai *dai)
+                                 struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        int bus_id = mcbsp_data->bus_id;
        int err = 0;
 
@@ -249,11 +245,9 @@ static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream,
 }
 
 static void omap_mcbsp_dai_shutdown(struct snd_pcm_substream *substream,
-                                   struct snd_soc_dai *dai)
+                                   struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
 
        if (!cpu_dai->active) {
                omap_mcbsp_free(mcbsp_data->bus_id);
@@ -262,11 +256,9 @@ static void omap_mcbsp_dai_shutdown(struct snd_pcm_substream *substream,
 }
 
 static int omap_mcbsp_dai_trigger(struct snd_pcm_substream *substream, int cmd,
-                                 struct snd_soc_dai *dai)
+                                 struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        int err = 0, play = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
 
        switch (cmd) {
@@ -295,8 +287,8 @@ static snd_pcm_sframes_t omap_mcbsp_dai_delay(
                        struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        u16 fifo_use;
        snd_pcm_sframes_t delay;
 
@@ -317,11 +309,9 @@ static snd_pcm_sframes_t omap_mcbsp_dai_delay(
 
 static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
                                    struct snd_pcm_hw_params *params,
-                                   struct snd_soc_dai *dai)
+                                   struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
        struct omap_pcm_dma_data *dma_data;
        int dma, bus_id = mcbsp_data->bus_id;
@@ -496,7 +486,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
 static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                                      unsigned int fmt)
 {
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
        unsigned int temp_fmt = fmt;
 
@@ -596,7 +586,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 static int omap_mcbsp_dai_set_clkdiv(struct snd_soc_dai *cpu_dai,
                                     int div_id, int div)
 {
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
 
        if (div_id != OMAP_MCBSP_CLKGDV)
@@ -699,7 +689,7 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
                                         int clk_id, unsigned int freq,
                                         int dir)
 {
-       struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+       struct omap_mcbsp_data *mcbsp_data = snd_soc_dai_get_drvdata(cpu_dai);
        struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
        int err = 0;
 
@@ -733,7 +723,7 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
        return err;
 }
 
-static struct snd_soc_dai_ops omap_mcbsp_dai_ops = {
+static struct snd_soc_dai_ops mcbsp_dai_ops = {
        .startup        = omap_mcbsp_dai_startup,
        .shutdown       = omap_mcbsp_dai_shutdown,
        .trigger        = omap_mcbsp_dai_trigger,
@@ -744,42 +734,31 @@ static struct snd_soc_dai_ops omap_mcbsp_dai_ops = {
        .set_sysclk     = omap_mcbsp_dai_set_dai_sysclk,
 };
 
-#define OMAP_MCBSP_DAI_BUILDER(link_id)                                \
-{                                                              \
-       .name = "omap-mcbsp-dai-"#link_id,                      \
-       .id = (link_id),                                        \
-       .playback = {                                           \
-               .channels_min = 1,                              \
-               .channels_max = 16,                             \
-               .rates = OMAP_MCBSP_RATES,                      \
-               .formats = SNDRV_PCM_FMTBIT_S16_LE |            \
-                          SNDRV_PCM_FMTBIT_S32_LE,             \
-       },                                                      \
-       .capture = {                                            \
-               .channels_min = 1,                              \
-               .channels_max = 16,                             \
-               .rates = OMAP_MCBSP_RATES,                      \
-               .formats = SNDRV_PCM_FMTBIT_S16_LE |            \
-                          SNDRV_PCM_FMTBIT_S32_LE,             \
-       },                                                      \
-       .ops = &omap_mcbsp_dai_ops,                             \
-       .private_data = &mcbsp_data[(link_id)].bus_id,          \
+static int mcbsp_dai_probe(struct snd_soc_dai *dai)
+{
+       mcbsp_data[dai->id].bus_id = dai->id;
+       snd_soc_dai_set_drvdata(dai, &mcbsp_data[dai->id].bus_id);
+       return 0;
 }
 
-struct snd_soc_dai omap_mcbsp_dai[] = {
-       OMAP_MCBSP_DAI_BUILDER(0),
-       OMAP_MCBSP_DAI_BUILDER(1),
-#if NUM_LINKS >= 3
-       OMAP_MCBSP_DAI_BUILDER(2),
-#endif
-#if NUM_LINKS == 5
-       OMAP_MCBSP_DAI_BUILDER(3),
-       OMAP_MCBSP_DAI_BUILDER(4),
-#endif
+static struct snd_soc_dai_driver omap_mcbsp_dai =
+{
+       .probe = mcbsp_dai_probe,
+       .playback = {
+               .channels_min = 1,
+               .channels_max = 16,
+               .rates = OMAP_MCBSP_RATES,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
+       },
+       .capture = {
+               .channels_min = 1,
+               .channels_max = 16,
+               .rates = OMAP_MCBSP_RATES,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
+       },
+       .ops = &mcbsp_dai_ops,
 };
 
-EXPORT_SYMBOL_GPL(omap_mcbsp_dai);
-
 int omap_mcbsp_st_info_volsw(struct snd_kcontrol *kcontrol,
                        struct snd_ctl_elem_info *uinfo)
 {
@@ -910,16 +889,36 @@ int omap_mcbsp_st_add_controls(struct snd_soc_codec *codec, int mcbsp_id)
 }
 EXPORT_SYMBOL_GPL(omap_mcbsp_st_add_controls);
 
+static __devinit int asoc_mcbsp_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dai(&pdev->dev, &omap_mcbsp_dai);
+}
+
+static int __devexit asoc_mcbsp_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver asoc_mcbsp_driver = {
+       .driver = {
+                       .name = "omap-mcbsp-dai",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = asoc_mcbsp_probe,
+       .remove = __devexit_p(asoc_mcbsp_remove),
+};
+
 static int __init snd_omap_mcbsp_init(void)
 {
-       return snd_soc_register_dais(omap_mcbsp_dai,
-                                    ARRAY_SIZE(omap_mcbsp_dai));
+       return platform_driver_register(&asoc_mcbsp_driver);
 }
 module_init(snd_omap_mcbsp_init);
 
 static void __exit snd_omap_mcbsp_exit(void)
 {
-       snd_soc_unregister_dais(omap_mcbsp_dai, ARRAY_SIZE(omap_mcbsp_dai));
+       platform_driver_unregister(&asoc_mcbsp_driver);
 }
 module_exit(snd_omap_mcbsp_exit);
 
index 6c363e5f43876aa1f4d71906f7c09b2b40b8cd59..ffdcc5abb7b9619b99199ca4b7e079242ad16306 100644 (file)
@@ -55,8 +55,6 @@ enum omap_mcbsp_div {
 #define NUM_LINKS      5
 #endif
 
-extern struct snd_soc_dai omap_mcbsp_dai[NUM_LINKS];
-
 int omap_mcbsp_st_add_controls(struct snd_soc_codec *codec, int mcbsp_id);
 
 #endif
index b7f4f7e015f3f4ef4c0dc91f46e1e4573ce39259..f161c2f5ed36b1e5f20206924d7fe9a0285c6d17 100644 (file)
@@ -36,7 +36,6 @@
 #include <plat/dma.h>
 #include <plat/mcbsp.h>
 #include "mcpdm.h"
-#include "omap-mcpdm.h"
 #include "omap-pcm.h"
 
 struct omap_mcpdm_data {
@@ -89,11 +88,9 @@ static struct omap_pcm_dma_data omap_mcpdm_dai_dma_params[] = {
 static int omap_mcpdm_dai_startup(struct snd_pcm_substream *substream,
                                  struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        int err = 0;
 
-       if (!cpu_dai->active)
+       if (!dai->active)
                err = omap_mcpdm_request();
 
        return err;
@@ -102,19 +99,14 @@ static int omap_mcpdm_dai_startup(struct snd_pcm_substream *substream,
 static void omap_mcpdm_dai_shutdown(struct snd_pcm_substream *substream,
                                    struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-
-       if (!cpu_dai->active)
+       if (!dai->active)
                omap_mcpdm_free();
 }
 
 static int omap_mcpdm_dai_trigger(struct snd_pcm_substream *substream, int cmd,
                                  struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcpdm_data *mcpdm_priv = cpu_dai->private_data;
+       struct omap_mcpdm_data *mcpdm_priv = snd_soc_dai_get_drvdata(dai);
        int stream = substream->stream;
        int err = 0;
 
@@ -143,14 +135,12 @@ static int omap_mcpdm_dai_hw_params(struct snd_pcm_substream *substream,
                                    struct snd_pcm_hw_params *params,
                                    struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcpdm_data *mcpdm_priv = cpu_dai->private_data;
+       struct omap_mcpdm_data *mcpdm_priv = snd_soc_dai_get_drvdata(dai);
        struct omap_mcpdm_link *mcpdm_links = mcpdm_priv->links;
        int stream = substream->stream;
        int channels, err, link_mask = 0;
 
-       snd_soc_dai_set_dma_data(cpu_dai, substream,
+       snd_soc_dai_set_dma_data(dai, substream,
                                 &omap_mcpdm_dai_dma_params[stream]);
 
        channels = params_channels(params);
@@ -189,9 +179,7 @@ static int omap_mcpdm_dai_hw_params(struct snd_pcm_substream *substream,
 static int omap_mcpdm_dai_hw_free(struct snd_pcm_substream *substream,
                                  struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct omap_mcpdm_data *mcpdm_priv = cpu_dai->private_data;
+       struct omap_mcpdm_data *mcpdm_priv = snd_soc_dai_get_drvdata(dai);
        struct omap_mcpdm_link *mcpdm_links = mcpdm_priv->links;
        int stream = substream->stream;
        int err;
@@ -215,9 +203,14 @@ static struct snd_soc_dai_ops omap_mcpdm_dai_ops = {
 #define OMAP_MCPDM_RATES       (SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
 #define OMAP_MCPDM_FORMATS     (SNDRV_PCM_FMTBIT_S32_LE)
 
-struct snd_soc_dai omap_mcpdm_dai = {
-       .name = "omap-mcpdm",
-       .id = -1,
+static int omap_mcpdm_dai_probe(struct snd_soc_dai *dai)
+{
+       snd_soc_dai_set_drvdata(dai, &mcpdm_data);
+       return 0;
+}
+
+static struct snd_soc_dai_driver omap_mcpdm_dai = {
+       .probe = omap_mcpdm_dai_probe,
        .playback = {
                .channels_min = 1,
                .channels_max = 4,
@@ -231,19 +224,47 @@ struct snd_soc_dai omap_mcpdm_dai = {
                .formats = OMAP_MCPDM_FORMATS,
        },
        .ops = &omap_mcpdm_dai_ops,
-       .private_data = &mcpdm_data,
 };
-EXPORT_SYMBOL_GPL(omap_mcpdm_dai);
+
+static __devinit int asoc_mcpdm_probe(struct platform_device *pdev)
+{
+       int ret;
+
+       ret = omap_mcpdm_probe(pdev);
+       if (ret < 0)
+               return ret;
+       ret = snd_soc_register_dai(&pdev->dev, &omap_mcpdm_dai);
+       if (ret < 0)
+               omap_mcpdm_remove(pdev);
+       return ret;
+}
+
+static int __devexit asoc_mcpdm_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       omap_mcpdm_remove(pdev);
+       return 0;
+}
+
+static struct platform_driver asoc_mcpdm_driver = {
+       .driver = {
+                       .name = "omap-mcpdm-dai",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = asoc_mcpdm_probe,
+       .remove = __devexit_p(asoc_mcpdm_remove),
+};
 
 static int __init snd_omap_mcpdm_init(void)
 {
-       return snd_soc_register_dai(&omap_mcpdm_dai);
+       return platform_driver_register(&asoc_mcpdm_driver);
 }
 module_init(snd_omap_mcpdm_init);
 
 static void __exit snd_omap_mcpdm_exit(void)
 {
-       snd_soc_unregister_dai(&omap_mcpdm_dai);
+       platform_driver_unregister(&asoc_mcpdm_driver);
 }
 module_exit(snd_omap_mcpdm_exit);
 
diff --git a/sound/soc/omap/omap-mcpdm.h b/sound/soc/omap/omap-mcpdm.h
deleted file mode 100644 (file)
index 73b80d5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * omap-mcpdm.h
- *
- * Copyright (C) 2009 Texas Instruments
- *
- * Contact: Misael Lopez Cruz <x0052729@ti.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __OMAP_MCPDM_H__
-#define __OMAP_MCPDM_H__
-
-extern struct snd_soc_dai omap_mcpdm_dai;
-
-#endif /* End of __OMAP_MCPDM_H__ */
index 1e521904ea64efabd199c1d334adb2c5a247c799..8caeb8d305c3b0308f0592c7fa8d3461d6fce87f 100644 (file)
@@ -101,9 +101,10 @@ static int omap_pcm_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct omap_runtime_data *prtd = runtime->private_data;
        struct omap_pcm_dma_data *dma_data;
+
        int err = 0;
 
-       dma_data = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       dma_data = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        /* return if this is a bufferless transfer e.g.
         * codec <--> BT codec or GSM modem -- lg FIXME */
@@ -374,14 +375,14 @@ static int omap_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(64);
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = omap_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = omap_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -392,25 +393,45 @@ out:
        return ret;
 }
 
-struct snd_soc_platform omap_soc_platform = {
-       .name           = "omap-pcm-audio",
-       .pcm_ops        = &omap_pcm_ops,
+static struct snd_soc_platform_driver omap_soc_platform = {
+       .ops            = &omap_pcm_ops,
        .pcm_new        = omap_pcm_new,
        .pcm_free       = omap_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(omap_soc_platform);
 
-static int __init omap_soc_platform_init(void)
+static __devinit int omap_pcm_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_platform(&pdev->dev,
+                       &omap_soc_platform);
+}
+
+static int __devexit omap_pcm_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver omap_pcm_driver = {
+       .driver = {
+                       .name = "omap-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = omap_pcm_probe,
+       .remove = __devexit_p(omap_pcm_remove),
+};
+
+static int __init snd_omap_pcm_init(void)
 {
-       return snd_soc_register_platform(&omap_soc_platform);
+       return platform_driver_register(&omap_pcm_driver);
 }
-module_init(omap_soc_platform_init);
+module_init(snd_omap_pcm_init);
 
-static void __exit omap_soc_platform_exit(void)
+static void __exit snd_omap_pcm_exit(void)
 {
-       snd_soc_unregister_platform(&omap_soc_platform);
+       platform_driver_unregister(&omap_pcm_driver);
 }
-module_exit(omap_soc_platform_exit);
+module_exit(snd_omap_pcm_exit);
 
 MODULE_AUTHOR("Jarkko Nikula <jhnikula@gmail.com>");
 MODULE_DESCRIPTION("OMAP PCM DMA module");
index b19975d269076bcf3b9bc46241846e29e5f26aae..fea0515331fb6721f1f91b95ee565f150d5f3e37 100644 (file)
@@ -35,6 +35,4 @@ struct omap_pcm_dma_data {
        int             packet_size;    /* packet size only in PACKET mode */
 };
 
-extern struct snd_soc_platform omap_soc_platform;
-
 #endif
index c7adea38274cb25f101d7dda9e6296eb4ff4e3f3..38cd1894623e575095c8a4b4e1fc364789dfe00c 100644 (file)
 
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 static int omap2evm_hw_params(struct snd_pcm_substream *substream,
-       struct snd_pcm_hw_params *params,
-       struct snd_soc_dai *dai)
+       struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -85,25 +83,20 @@ static struct snd_soc_ops omap2evm_ops = {
 static struct snd_soc_dai_link omap2evm_dai = {
        .name = "TWL4030",
        .stream_name = "TWL4030",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+       .cpu_dai_name = "omap-mcbsp-dai.1",
+       .codec_dai_name = "twl4030-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "twl4030-codec",
        .ops = &omap2evm_ops,
 };
 
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_omap2evm = {
        .name = "omap2evm",
-       .platform = &omap_soc_platform,
        .dai_link = &omap2evm_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device omap2evm_snd_devdata = {
-       .card = &snd_soc_omap2evm,
-       .codec_dev = &soc_codec_dev_twl4030,
-};
-
 static struct platform_device *omap2evm_snd_device;
 
 static int __init omap2evm_soc_init(void)
@@ -122,9 +115,7 @@ static int __init omap2evm_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(omap2evm_snd_device, &omap2evm_snd_devdata);
-       omap2evm_snd_devdata.dev = &omap2evm_snd_device->dev;
-       *(unsigned int *)omap2evm_dai.cpu_dai->private_data = 1; /* McBSP2 */
+       platform_set_drvdata(omap2evm_snd_device, &snd_soc_omap2evm);
 
        ret = platform_device_add(omap2evm_snd_device);
        if (ret)
index 240e0975dd6a716e47546a54deb83cecffb9b960..7c11e1afe9e640a9e90c006b00fdadb8e4ff5939 100644 (file)
 
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 static int omap3beagle_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int fmt;
        int ret;
 
@@ -92,25 +91,21 @@ static struct snd_soc_ops omap3beagle_ops = {
 static struct snd_soc_dai_link omap3beagle_dai = {
        .name = "TWL4030",
        .stream_name = "TWL4030",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+       .cpu_dai_name = "omap-mcbsp-dai.1",
+       .platform_name = "omap-pcm-audio",
+       .codec_dai_name = "twl4030-hifi",
+       .codec_name = "twl4030-codec",
        .ops = &omap3beagle_ops,
 };
 
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_omap3beagle = {
        .name = "omap3beagle",
-       .platform = &omap_soc_platform,
+       .owner = THIS_MODULE,
        .dai_link = &omap3beagle_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device omap3beagle_snd_devdata = {
-       .card = &snd_soc_omap3beagle,
-       .codec_dev = &soc_codec_dev_twl4030,
-};
-
 static struct platform_device *omap3beagle_snd_device;
 
 static int __init omap3beagle_soc_init(void)
@@ -129,9 +124,7 @@ static int __init omap3beagle_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(omap3beagle_snd_device, &omap3beagle_snd_devdata);
-       omap3beagle_snd_devdata.dev = &omap3beagle_snd_device->dev;
-       *(unsigned int *)omap3beagle_dai.cpu_dai->private_data = 1; /* McBSP2 */
+       platform_set_drvdata(omap3beagle_snd_device, &snd_soc_omap3beagle);
 
        ret = platform_device_add(omap3beagle_snd_device);
        if (ret)
index dfcb344092e41c0506e4f243af3c70920a4cc5c0..1ac5babef00d32c4cea288452d4f18094a647c08 100644 (file)
 
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 static int omap3evm_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -80,32 +79,20 @@ static struct snd_soc_ops omap3evm_ops = {
 static struct snd_soc_dai_link omap3evm_dai = {
        .name           = "TWL4030",
        .stream_name    = "TWL4030",
-       .cpu_dai        = &omap_mcbsp_dai[0],
-       .codec_dai      = &twl4030_dai[TWL4030_DAI_HIFI],
+       .cpu_dai_name = "omap-mcbsp-dai.1",
+       .codec_dai_name = "twl4030-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "twl4030-codec",
        .ops            = &omap3evm_ops,
 };
 
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_omap3evm = {
        .name = "omap3evm",
-       .platform = &omap_soc_platform,
        .dai_link = &omap3evm_dai,
        .num_links = 1,
 };
 
-/* twl4030 setup */
-static struct twl4030_setup_data twl4030_setup = {
-       .ramp_delay_value = 4,
-       .sysclk = 26000,
-};
-
-/* Audio subsystem */
-static struct snd_soc_device omap3evm_snd_devdata = {
-       .card = &snd_soc_omap3evm,
-       .codec_dev = &soc_codec_dev_twl4030,
-       .codec_data = &twl4030_setup,
-};
-
 static struct platform_device *omap3evm_snd_device;
 
 static int __init omap3evm_soc_init(void)
@@ -124,10 +111,7 @@ static int __init omap3evm_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(omap3evm_snd_device, &omap3evm_snd_devdata);
-       omap3evm_snd_devdata.dev = &omap3evm_snd_device->dev;
-       *(unsigned int *)omap3evm_dai.cpu_dai->private_data = 1;
-
+       platform_set_drvdata(omap3evm_snd_device, &snd_soc_omap3evm);
        ret = platform_device_add(omap3evm_snd_device);
        if (ret)
                goto err1;
index 9eecac135bbbca973645d4391f8f3a6bcff36546..dbd9d96b5f9243c3e0cd0aafd3181e08cce84a3a 100644 (file)
 #include <sound/soc-dapm.h>
 
 #include <asm/mach-types.h>
+#include <plat/mcbsp.h>
 
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 #define OMAP3_PANDORA_DAC_POWER_GPIO   118
 #define OMAP3_PANDORA_AMP_POWER_GPIO   14
@@ -47,8 +47,8 @@ static int omap3pandora_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
                  SND_SOC_DAIFMT_CBS_CFS;
        int ret;
@@ -167,8 +167,9 @@ static const struct snd_soc_dapm_route omap3pandora_in_map[] = {
        {"Mic Bias 2", NULL, "Mic (external)"},
 };
 
-static int omap3pandora_out_init(struct snd_soc_codec *codec)
+static int omap3pandora_out_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* All TWL4030 output pins are floating */
@@ -194,8 +195,9 @@ static int omap3pandora_out_init(struct snd_soc_codec *codec)
        return snd_soc_dapm_sync(codec);
 }
 
-static int omap3pandora_in_init(struct snd_soc_codec *codec)
+static int omap3pandora_in_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* Not comnnected */
@@ -224,15 +226,19 @@ static struct snd_soc_dai_link omap3pandora_dai[] = {
        {
                .name = "PCM1773",
                .stream_name = "HiFi Out",
-               .cpu_dai = &omap_mcbsp_dai[0],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+               .cpu_dai_name = "omap-mcbsp-dai.1",
+               .codec_dai_name = "twl4030-hifi",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .ops = &omap3pandora_ops,
                .init = omap3pandora_out_init,
        }, {
                .name = "TWL4030",
                .stream_name = "Line/Mic In",
-               .cpu_dai = &omap_mcbsp_dai[1],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+               .cpu_dai_name = "omap-mcbsp-dai.3",
+               .codec_dai_name = "twl4030-hifi",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .ops = &omap3pandora_ops,
                .init = omap3pandora_in_init,
        }
@@ -241,17 +247,10 @@ static struct snd_soc_dai_link omap3pandora_dai[] = {
 /* SoC card */
 static struct snd_soc_card snd_soc_card_omap3pandora = {
        .name = "omap3pandora",
-       .platform = &omap_soc_platform,
        .dai_link = omap3pandora_dai,
        .num_links = ARRAY_SIZE(omap3pandora_dai),
 };
 
-/* Audio subsystem */
-static struct snd_soc_device omap3pandora_snd_data = {
-       .card = &snd_soc_card_omap3pandora,
-       .codec_dev = &soc_codec_dev_twl4030,
-};
-
 static struct platform_device *omap3pandora_snd_device;
 
 static int __init omap3pandora_soc_init(void)
@@ -294,10 +293,7 @@ static int __init omap3pandora_soc_init(void)
                goto fail1;
        }
 
-       platform_set_drvdata(omap3pandora_snd_device, &omap3pandora_snd_data);
-       omap3pandora_snd_data.dev = &omap3pandora_snd_device->dev;
-       *(unsigned int *)omap_mcbsp_dai[0].private_data = 1; /* McBSP2 */
-       *(unsigned int *)omap_mcbsp_dai[1].private_data = 3; /* McBSP4 */
+       platform_set_drvdata(omap3pandora_snd_device, &snd_soc_card_omap3pandora);
 
        ret = platform_device_add(omap3pandora_snd_device);
        if (ret) {
index 498ca2e035197af484f0696bee925115fd959558..f0e6625564287df0b33643395af20c1849b8a596 100644 (file)
@@ -55,8 +55,8 @@ static int osk_hw_params(struct snd_pcm_substream *substream,
                         struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int err;
 
        /* Set codec DAI configuration */
@@ -113,8 +113,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"MICIN", NULL, "Mic Jack"},
 };
 
-static int osk_tlv320aic23_init(struct snd_soc_codec *codec)
+static int osk_tlv320aic23_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* Add osk5912 specific widgets */
        snd_soc_dapm_new_controls(codec, tlv320aic23_dapm_widgets,
@@ -136,8 +137,10 @@ static int osk_tlv320aic23_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link osk_dai = {
        .name = "TLV320AIC23",
        .stream_name = "AIC23",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &tlv320aic23_dai,
+       .cpu_dai_name = "omap-mcbsp-dai.0",
+       .codec_dai_name = "tlv320aic23-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "tlv320aic23-codec",
        .init = osk_tlv320aic23_init,
        .ops = &osk_ops,
 };
@@ -145,17 +148,10 @@ static struct snd_soc_dai_link osk_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_card_osk = {
        .name = "OSK5912",
-       .platform = &omap_soc_platform,
        .dai_link = &osk_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device osk_snd_devdata = {
-       .card = &snd_soc_card_osk,
-       .codec_dev = &soc_codec_dev_tlv320aic23,
-};
-
 static struct platform_device *osk_snd_device;
 
 static int __init osk_soc_init(void)
@@ -171,9 +167,7 @@ static int __init osk_soc_init(void)
        if (!osk_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(osk_snd_device, &osk_snd_devdata);
-       osk_snd_devdata.dev = &osk_snd_device->dev;
-       *(unsigned int *)osk_dai.cpu_dai->private_data = 0;     /* McBSP1 */
+       platform_set_drvdata(osk_snd_device, &snd_soc_card_osk);
        err = platform_device_add(osk_snd_device);
        if (err)
                goto err1;
index c25f5276ad6f0135d1699548da4d3d6ad11b56f5..e95a607937de7a221998766dc0a2214e04b251f9 100644 (file)
 
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 static int overo_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -82,25 +81,20 @@ static struct snd_soc_ops overo_ops = {
 static struct snd_soc_dai_link overo_dai = {
        .name = "TWL4030",
        .stream_name = "TWL4030",
-       .cpu_dai = &omap_mcbsp_dai[0],
-       .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+       .cpu_dai_name = "omap-mcbsp-dai.1",
+       .codec_dai_name = "twl4030-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "twl4030-codec",
        .ops = &overo_ops,
 };
 
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_card_overo = {
        .name = "overo",
-       .platform = &omap_soc_platform,
        .dai_link = &overo_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device overo_snd_devdata = {
-       .card = &snd_soc_card_overo,
-       .codec_dev = &soc_codec_dev_twl4030,
-};
-
 static struct platform_device *overo_snd_device;
 
 static int __init overo_soc_init(void)
@@ -119,9 +113,7 @@ static int __init overo_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(overo_snd_device, &overo_snd_devdata);
-       overo_snd_devdata.dev = &overo_snd_device->dev;
-       *(unsigned int *)overo_dai.cpu_dai->private_data = 1; /* McBSP2 */
+       platform_set_drvdata(overo_snd_device, &snd_soc_card_overo);
 
        ret = platform_device_add(overo_snd_device);
        if (ret)
index 88052d29617f9da25aac0eb687301d9e6cd207ce..d1d8098923ce103dec46748d27c6d66fb613329c 100644 (file)
@@ -31,6 +31,7 @@
 #include <sound/pcm.h>
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
+#include <plat/mcbsp.h>
 
 #include <asm/mach-types.h>
 
@@ -76,7 +77,7 @@ static int rx51_startup(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        snd_pcm_hw_constraint_minmax(runtime,
                                     SNDRV_PCM_HW_PARAM_CHANNELS, 2, 2);
@@ -89,8 +90,8 @@ static int rx51_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int err;
 
        /* Set codec DAI configuration */
@@ -240,9 +241,9 @@ static const struct snd_kcontrol_new aic34_rx51_controls[] = {
                     rx51_get_jack, rx51_set_jack),
 };
 
-static int rx51_aic34_init(struct snd_soc_codec *codec)
+static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct snd_soc_card *card = codec->socdev->card;
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* Set up NC codec pins */
@@ -266,7 +267,7 @@ static int rx51_aic34_init(struct snd_soc_codec *codec)
        snd_soc_dapm_sync(codec);
 
        /* AV jack detection */
-       err = snd_soc_jack_new(card, "AV Jack",
+       err = snd_soc_jack_new(codec, "AV Jack",
                               SND_JACK_VIDEOOUT, &rx51_av_jack);
        if (err)
                return err;
@@ -282,32 +283,20 @@ static struct snd_soc_dai_link rx51_dai[] = {
        {
                .name = "TLV320AIC34",
                .stream_name = "AIC34",
-               .cpu_dai = &omap_mcbsp_dai[0],
-               .codec_dai = &aic3x_dai,
+               .cpu_dai_name = "omap-mcbsp-dai.1",
+               .codec_dai_name = "tlv320aic3x-hifi",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "tlv320aic3x-codec.2-0018",
                .init = rx51_aic34_init,
                .ops = &rx51_ops,
        },
 };
 
-/* Audio private data */
-static struct aic3x_setup_data rx51_aic34_setup = {
-       .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
-       .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
-};
-
 /* Audio card */
 static struct snd_soc_card rx51_sound_card = {
        .name = "RX-51",
        .dai_link = rx51_dai,
        .num_links = ARRAY_SIZE(rx51_dai),
-       .platform = &omap_soc_platform,
-};
-
-/* Audio subsystem */
-static struct snd_soc_device rx51_snd_devdata = {
-       .card = &rx51_sound_card,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &rx51_aic34_setup,
 };
 
 static struct platform_device *rx51_snd_device;
@@ -330,9 +319,7 @@ static int __init rx51_soc_init(void)
                goto err1;
        }
 
-       platform_set_drvdata(rx51_snd_device, &rx51_snd_devdata);
-       rx51_snd_devdata.dev = &rx51_snd_device->dev;
-       *(unsigned int *)rx51_dai[0].cpu_dai->private_data = 1; /* McBSP2 */
+       platform_set_drvdata(rx51_snd_device, &rx51_sound_card);
 
        err = platform_device_add(rx51_snd_device);
        if (err)
index 3c85c0f92823b82a87affec967b663966c279f4d..76ce77b91844871f53481afbab751dc394e51bc8 100644 (file)
 #include <mach/gpio.h>
 #include <plat/mcbsp.h>
 
+/* Register descriptions for twl4030 codec part */
+#include <linux/mfd/twl4030-codec.h>
+
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 /* TWL4030 PMBR1 Register */
 #define TWL4030_INTBR_PMBR1            0x0D
@@ -51,8 +53,8 @@ static int sdp3430_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -94,8 +96,8 @@ static int sdp3430_hw_voice_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -186,8 +188,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"Headset Stereophone", NULL, "HSOR"},
 };
 
-static int sdp3430_twl4030_init(struct snd_soc_codec *codec)
+static int sdp3430_twl4030_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* Add SDP3430 specific widgets */
@@ -225,7 +228,7 @@ static int sdp3430_twl4030_init(struct snd_soc_codec *codec)
                return ret;
 
        /* Headset jack detection */
-       ret = snd_soc_jack_new(&snd_soc_sdp3430, "Headset Jack",
+       ret = snd_soc_jack_new(codec, "Headset Jack",
                                SND_JACK_HEADSET, &hs_jack);
        if (ret)
                return ret;
@@ -241,14 +244,15 @@ static int sdp3430_twl4030_init(struct snd_soc_codec *codec)
        return ret;
 }
 
-static int sdp3430_twl4030_voice_init(struct snd_soc_codec *codec)
+static int sdp3430_twl4030_voice_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        unsigned short reg;
 
        /* Enable voice interface */
-       reg = codec->read(codec, TWL4030_REG_VOICE_IF);
+       reg = codec->driver->read(codec, TWL4030_REG_VOICE_IF);
        reg |= TWL4030_VIF_DIN_EN | TWL4030_VIF_DOUT_EN | TWL4030_VIF_EN;
-       codec->write(codec, TWL4030_REG_VOICE_IF, reg);
+       codec->driver->write(codec, TWL4030_REG_VOICE_IF, reg);
 
        return 0;
 }
@@ -259,16 +263,20 @@ static struct snd_soc_dai_link sdp3430_dai[] = {
        {
                .name = "TWL4030 I2S",
                .stream_name = "TWL4030 Audio",
-               .cpu_dai = &omap_mcbsp_dai[0],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+               .cpu_dai_name = "omap-mcbsp-dai.1",
+               .codec_dai_name = "twl4030-hifi",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .init = sdp3430_twl4030_init,
                .ops = &sdp3430_ops,
        },
        {
                .name = "TWL4030 PCM",
                .stream_name = "TWL4030 Voice",
-               .cpu_dai = &omap_mcbsp_dai[1],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_VOICE],
+               .cpu_dai_name = "omap-mcbsp-dai.2",
+               .codec_dai_name = "twl4030-voice",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .init = sdp3430_twl4030_voice_init,
                .ops = &sdp3430_voice_ops,
        },
@@ -277,25 +285,10 @@ static struct snd_soc_dai_link sdp3430_dai[] = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_sdp3430 = {
        .name = "SDP3430",
-       .platform = &omap_soc_platform,
        .dai_link = sdp3430_dai,
        .num_links = ARRAY_SIZE(sdp3430_dai),
 };
 
-/* twl4030 setup */
-static struct twl4030_setup_data twl4030_setup = {
-       .ramp_delay_value = 3,
-       .sysclk = 26000,
-       .hs_extmute = 1,
-};
-
-/* Audio subsystem */
-static struct snd_soc_device sdp3430_snd_devdata = {
-       .card = &snd_soc_sdp3430,
-       .codec_dev = &soc_codec_dev_twl4030,
-       .codec_data = &twl4030_setup,
-};
-
 static struct platform_device *sdp3430_snd_device;
 
 static int __init sdp3430_soc_init(void)
@@ -315,10 +308,7 @@ static int __init sdp3430_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(sdp3430_snd_device, &sdp3430_snd_devdata);
-       sdp3430_snd_devdata.dev = &sdp3430_snd_device->dev;
-       *(unsigned int *)sdp3430_dai[0].cpu_dai->private_data = 1; /* McBSP2 */
-       *(unsigned int *)sdp3430_dai[1].cpu_dai->private_data = 2; /* McBSP3 */
+       platform_set_drvdata(sdp3430_snd_device, &snd_soc_sdp3430);
 
        /* Set TWL4030 GPIO6 as EXTMUTE signal */
        twl_i2c_read_u8(TWL4030_MODULE_INTBR, &pin_mux,
index 4ebbde6b565f4fbfe6beafc0ab7fadf799171777..62f6a622d79146d24068c76cb63fda6cf03bc347 100644 (file)
@@ -31,7 +31,6 @@
 #include <plat/mux.h>
 
 #include "mcpdm.h"
-#include "omap-mcpdm.h"
 #include "omap-pcm.h"
 #include "../codecs/twl6040.h"
 
@@ -41,7 +40,7 @@ static int sdp4430_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int clk_id, freq;
        int ret;
 
@@ -60,6 +59,7 @@ static int sdp4430_hw_params(struct snd_pcm_substream *substream,
                printk(KERN_ERR "can't set codec system clock\n");
                return ret;
        }
+       return ret;
 }
 
 static struct snd_soc_ops sdp4430_ops = {
@@ -126,8 +126,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"Earphone Spk", NULL, "EP"},
 };
 
-static int sdp4430_twl6040_init(struct snd_soc_codec *codec)
+static int sdp4430_twl6040_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* Add SDP4430 specific controls */
@@ -164,8 +165,10 @@ static int sdp4430_twl6040_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link sdp4430_dai = {
        .name = "TWL6040",
        .stream_name = "TWL6040",
-       .cpu_dai = &omap_mcpdm_dai,
-       .codec_dai = &twl6040_dai,
+       .cpu_dai_name ="omap-mcpdm-dai",
+       .codec_dai_name = "twl6040-hifi",
+       .platform_name = "omap-pcm-audio",
+       .codec_name = "twl6040-codec",
        .init = sdp4430_twl6040_init,
        .ops = &sdp4430_ops,
 };
@@ -173,17 +176,10 @@ static struct snd_soc_dai_link sdp4430_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_sdp4430 = {
        .name = "SDP4430",
-       .platform = &omap_soc_platform,
        .dai_link = &sdp4430_dai,
        .num_links = 1,
 };
 
-/* Audio subsystem */
-static struct snd_soc_device sdp4430_snd_devdata = {
-       .card = &snd_soc_sdp4430,
-       .codec_dev = &soc_codec_dev_twl6040,
-};
-
 static struct platform_device *sdp4430_snd_device;
 
 static int __init sdp4430_soc_init(void)
@@ -202,8 +198,7 @@ static int __init sdp4430_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(sdp4430_snd_device, &sdp4430_snd_devdata);
-       sdp4430_snd_devdata.dev = &sdp4430_snd_device->dev;
+       platform_set_drvdata(sdp4430_snd_device, &snd_soc_sdp4430);
 
        ret = platform_device_add(sdp4430_snd_device);
        if (ret)
index 50a94ee76ecc2cf598e24068e7daa46e58e60d92..338dc9552bd6be7d8bf2f7dee9b5673f86f6198c 100644 (file)
 #include <asm/mach-types.h>
 #include <mach/hardware.h>
 #include <mach/gpio.h>
+#include <mach/board-zoom.h>
 #include <plat/mcbsp.h>
 
+/* Register descriptions for twl4030 codec part */
+#include <linux/mfd/twl4030-codec.h>
+
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 #define ZOOM2_HEADSET_MUX_GPIO         (OMAP_MAX_GPIO_LINES + 15)
-#define ZOOM2_HEADSET_EXTMUTE_GPIO     153
 
 static int zoom2_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -85,8 +87,8 @@ static int zoom2_hw_voice_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -157,8 +159,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"Aux In", NULL, "AUXR"},
 };
 
-static int zoom2_twl4030_init(struct snd_soc_codec *codec)
+static int zoom2_twl4030_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* Add Zoom2 specific widgets */
@@ -192,14 +195,15 @@ static int zoom2_twl4030_init(struct snd_soc_codec *codec)
        return ret;
 }
 
-static int zoom2_twl4030_voice_init(struct snd_soc_codec *codec)
+static int zoom2_twl4030_voice_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        unsigned short reg;
 
        /* Enable voice interface */
-       reg = codec->read(codec, TWL4030_REG_VOICE_IF);
+       reg = codec->driver->read(codec, TWL4030_REG_VOICE_IF);
        reg |= TWL4030_VIF_DIN_EN | TWL4030_VIF_DOUT_EN | TWL4030_VIF_EN;
-       codec->write(codec, TWL4030_REG_VOICE_IF, reg);
+       codec->driver->write(codec, TWL4030_REG_VOICE_IF, reg);
 
        return 0;
 }
@@ -209,16 +213,20 @@ static struct snd_soc_dai_link zoom2_dai[] = {
        {
                .name = "TWL4030 I2S",
                .stream_name = "TWL4030 Audio",
-               .cpu_dai = &omap_mcbsp_dai[0],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+               .cpu_dai_name = "omap-mcbsp-dai.1",
+               .codec_dai_name = "twl4030-hifi",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .init = zoom2_twl4030_init,
                .ops = &zoom2_ops,
        },
        {
                .name = "TWL4030 PCM",
                .stream_name = "TWL4030 Voice",
-               .cpu_dai = &omap_mcbsp_dai[1],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_VOICE],
+               .cpu_dai_name = "omap-mcbsp-dai.2",
+               .codec_dai_name = "twl4030-voice",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .init = zoom2_twl4030_voice_init,
                .ops = &zoom2_voice_ops,
        },
@@ -227,32 +235,10 @@ static struct snd_soc_dai_link zoom2_dai[] = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_zoom2 = {
        .name = "Zoom2",
-       .platform = &omap_soc_platform,
        .dai_link = zoom2_dai,
        .num_links = ARRAY_SIZE(zoom2_dai),
 };
 
-/* EXTMUTE callback function */
-void zoom2_set_hs_extmute(int mute)
-{
-       gpio_set_value(ZOOM2_HEADSET_EXTMUTE_GPIO, mute);
-}
-
-/* twl4030 setup */
-static struct twl4030_setup_data twl4030_setup = {
-       .ramp_delay_value = 3,  /* 161 ms */
-       .sysclk = 26000,
-       .hs_extmute = 1,
-       .set_hs_extmute = zoom2_set_hs_extmute,
-};
-
-/* Audio subsystem */
-static struct snd_soc_device zoom2_snd_devdata = {
-       .card = &snd_soc_zoom2,
-       .codec_dev = &soc_codec_dev_twl4030,
-       .codec_data = &twl4030_setup,
-};
-
 static struct platform_device *zoom2_snd_device;
 
 static int __init zoom2_soc_init(void)
@@ -271,11 +257,7 @@ static int __init zoom2_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(zoom2_snd_device, &zoom2_snd_devdata);
-       zoom2_snd_devdata.dev = &zoom2_snd_device->dev;
-       *(unsigned int *)zoom2_dai[0].cpu_dai->private_data = 1; /* McBSP2 */
-       *(unsigned int *)zoom2_dai[1].cpu_dai->private_data = 2; /* McBSP3 */
-
+       platform_set_drvdata(zoom2_snd_device, &snd_soc_zoom2);
        ret = platform_device_add(zoom2_snd_device);
        if (ret)
                goto err1;
index fefe1a57f31adb329493bc482668a053afb65ea8..11c6a495f97091b9e9fda787be846ed220101eb9 100644 (file)
@@ -99,7 +99,7 @@ static void corgi_ext_control(struct snd_soc_codec *codec)
 static int corgi_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* check the jack status at stream startup */
        corgi_ext_control(codec);
@@ -118,8 +118,8 @@ static int corgi_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
 
@@ -272,8 +272,9 @@ static const struct snd_kcontrol_new wm8731_corgi_controls[] = {
 /*
  * Logic for a wm8731 as connected on a Sharp SL-C7x0 Device
  */
-static int corgi_wm8731_init(struct snd_soc_codec *codec)
+static int corgi_wm8731_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        snd_soc_dapm_nc_pin(codec, "LLINEIN");
@@ -300,8 +301,10 @@ static int corgi_wm8731_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link corgi_dai = {
        .name = "WM8731",
        .stream_name = "WM8731",
-       .cpu_dai = &pxa_i2s_dai,
-       .codec_dai = &wm8731_dai,
+       .cpu_dai_name = "pxa-is2-dai",
+       .codec_dai_name = "wm8731-hifi",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "wm8731-codec-0.001a",
        .init = corgi_wm8731_init,
        .ops = &corgi_ops,
 };
@@ -309,17 +312,10 @@ static struct snd_soc_dai_link corgi_dai = {
 /* corgi audio machine driver */
 static struct snd_soc_card snd_soc_corgi = {
        .name = "Corgi",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = &corgi_dai,
        .num_links = 1,
 };
 
-/* corgi audio subsystem */
-static struct snd_soc_device corgi_snd_devdata = {
-       .card = &snd_soc_corgi,
-       .codec_dev = &soc_codec_dev_wm8731,
-};
-
 static struct platform_device *corgi_snd_device;
 
 static int __init corgi_init(void)
@@ -334,8 +330,7 @@ static int __init corgi_init(void)
        if (!corgi_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(corgi_snd_device, &corgi_snd_devdata);
-       corgi_snd_devdata.dev = &corgi_snd_device->dev;
+       platform_set_drvdata(corgi_snd_device, &snd_soc_corgi);
        ret = platform_device_add(corgi_snd_device);
 
        if (ret)
index 7cd2f89d7b1021d9641a010a80901882b26ef495..f614607b2055a4d9664a1eb333ee93af02ea59e5 100644 (file)
@@ -24,7 +24,6 @@
 #include <asm/mach-types.h>
 
 #include "../codecs/wm9705.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 
 
@@ -90,8 +89,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"Mic Amp", NULL, "Mic (Internal)"},
 };
 
-static int e740_ac97_init(struct snd_soc_codec *codec)
+static int e740_ac97_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_nc_pin(codec, "HPOUTL");
        snd_soc_dapm_nc_pin(codec, "HPOUTR");
        snd_soc_dapm_nc_pin(codec, "PHONE");
@@ -116,30 +117,28 @@ static struct snd_soc_dai_link e740_dai[] = {
        {
                .name = "AC97",
                .stream_name = "AC97 HiFi",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-               .codec_dai = &wm9705_dai[WM9705_DAI_AC97_HIFI],
+               .cpu_dai_name = "pxa-ac97.0",
+               .codec_dai_name = "wm9705-hifi",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9705-codec",
                .init = e740_ac97_init,
        },
        {
                .name = "AC97 Aux",
                .stream_name = "AC97 Aux",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-               .codec_dai = &wm9705_dai[WM9705_DAI_AC97_AUX],
+               .cpu_dai_name = "pxa-ac97.1",
+               .codec_dai_name = "wm9705-aux",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9705-codec",
        },
 };
 
 static struct snd_soc_card e740 = {
        .name = "Toshiba e740",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = e740_dai,
        .num_links = ARRAY_SIZE(e740_dai),
 };
 
-static struct snd_soc_device e740_snd_devdata = {
-       .card = &e740,
-       .codec_dev = &soc_codec_dev_wm9705,
-};
-
 static struct platform_device *e740_snd_device;
 
 static int __init e740_init(void)
@@ -178,8 +177,7 @@ static int __init e740_init(void)
                goto free_apwr_gpio;
        }
 
-       platform_set_drvdata(e740_snd_device, &e740_snd_devdata);
-       e740_snd_devdata.dev = &e740_snd_device->dev;
+       platform_set_drvdata(e740_snd_device, &e740);
        ret = platform_device_add(e740_snd_device);
 
        if (!ret)
index 8dceccc5e059fbb31a818f7fc76c892d4b3ba32e..4c143803a75e971de78e68d01d74f87df551b867 100644 (file)
@@ -24,7 +24,6 @@
 #include <asm/mach-types.h>
 
 #include "../codecs/wm9705.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 
 static int e750_spk_amp_event(struct snd_soc_dapm_widget *w,
@@ -72,8 +71,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"MIC1", NULL, "Mic (Internal)"},
 };
 
-static int e750_ac97_init(struct snd_soc_codec *codec)
+static int e750_ac97_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_nc_pin(codec, "LOUT");
        snd_soc_dapm_nc_pin(codec, "ROUT");
        snd_soc_dapm_nc_pin(codec, "PHONE");
@@ -98,31 +99,29 @@ static struct snd_soc_dai_link e750_dai[] = {
        {
                .name = "AC97",
                .stream_name = "AC97 HiFi",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-               .codec_dai = &wm9705_dai[WM9705_DAI_AC97_HIFI],
+               .cpu_dai_name = "pxa-ac97.0",
+               .codec_dai_name = "wm9705-hifi",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9705-codec",
                .init = e750_ac97_init,
                /* use ops to check startup state */
        },
        {
                .name = "AC97 Aux",
                .stream_name = "AC97 Aux",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-               .codec_dai = &wm9705_dai[WM9705_DAI_AC97_AUX],
+               .cpu_dai_name = "pxa-ac97.1",
+               .codec_dai_name ="wm9705-aux",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9705-codec",
        },
 };
 
 static struct snd_soc_card e750 = {
        .name = "Toshiba e750",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = e750_dai,
        .num_links = ARRAY_SIZE(e750_dai),
 };
 
-static struct snd_soc_device e750_snd_devdata = {
-       .card = &e750,
-       .codec_dev = &soc_codec_dev_wm9705,
-};
-
 static struct platform_device *e750_snd_device;
 
 static int __init e750_init(void)
@@ -154,8 +153,7 @@ static int __init e750_init(void)
                goto free_spk_amp_gpio;
        }
 
-       platform_set_drvdata(e750_snd_device, &e750_snd_devdata);
-       e750_snd_devdata.dev = &e750_snd_device->dev;
+       platform_set_drvdata(e750_snd_device, &e750);
        ret = platform_device_add(e750_snd_device);
 
        if (!ret)
index bc019cdce42922c787f62dfd8bc30cd7a0582d25..d42e5fe832c5d5909176feaa5b3513e95e4b6f85 100644 (file)
@@ -23,7 +23,6 @@
 #include <mach/eseries-gpio.h>
 
 #include "../codecs/wm9712.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 
 static int e800_spk_amp_event(struct snd_soc_dapm_widget *w,
@@ -73,8 +72,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"MIC2", NULL, "Mic (Internal2)"},
 };
 
-static int e800_ac97_init(struct snd_soc_codec *codec)
+static int e800_ac97_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_new_controls(codec, e800_dapm_widgets,
                                        ARRAY_SIZE(e800_dapm_widgets));
 
@@ -88,30 +89,28 @@ static struct snd_soc_dai_link e800_dai[] = {
        {
                .name = "AC97",
                .stream_name = "AC97 HiFi",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-               .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
+               .cpu_dai_name = "pxa-ac97.0",
+               .codec_dai_name = "wm9712-hifi",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9712-codec",
                .init = e800_ac97_init,
        },
        {
                .name = "AC97 Aux",
                .stream_name = "AC97 Aux",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-               .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
+               .cpu_dai_name = "pxa-ac97.1",
+               .codec_dai_name ="wm9712-aux",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9712-codec",
        },
 };
 
 static struct snd_soc_card e800 = {
        .name = "Toshiba e800",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = e800_dai,
        .num_links = ARRAY_SIZE(e800_dai),
 };
 
-static struct snd_soc_device e800_snd_devdata = {
-       .card = &e800,
-       .codec_dev = &soc_codec_dev_wm9712,
-};
-
 static struct platform_device *e800_snd_device;
 
 static int __init e800_init(void)
@@ -141,8 +140,7 @@ static int __init e800_init(void)
        if (!e800_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(e800_snd_device, &e800_snd_devdata);
-       e800_snd_devdata.dev = &e800_snd_device->dev;
+       platform_set_drvdata(e800_snd_device, &e800);
        ret = platform_device_add(e800_snd_device);
 
        if (!ret)
index f4756e4025fd1dd0c06080d0e26a8c121dc52c2e..7046128b2a4cd2593a6d98038c66256cf09e4624 100644 (file)
@@ -39,29 +39,27 @@ static struct snd_soc_dai_link em_x270_dai[] = {
        {
                .name = "AC97",
                .stream_name = "AC97 HiFi",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-               .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
+               .cpu_dai_name = "pxa-ac97.0",
+               .codec_dai_name = "wm9712-hifi",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9712-codec",
        },
        {
                .name = "AC97 Aux",
                .stream_name = "AC97 Aux",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-               .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
+               .cpu_dai_name = "pxa-ac97.1",
+               .codec_dai_name ="wm9712-aux",
+               .platform_name = "pxa-pcm-audio",
+               .codec_name = "wm9712-codec",
        },
 };
 
 static struct snd_soc_card em_x270 = {
        .name = "EM-X270",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = em_x270_dai,
        .num_links = ARRAY_SIZE(em_x270_dai),
 };
 
-static struct snd_soc_device em_x270_snd_devdata = {
-       .card = &em_x270,
-       .codec_dev = &soc_codec_dev_wm9712,
-};
-
 static struct platform_device *em_x270_snd_device;
 
 static int __init em_x270_init(void)
@@ -76,8 +74,7 @@ static int __init em_x270_init(void)
        if (!em_x270_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(em_x270_snd_device, &em_x270_snd_devdata);
-       em_x270_snd_devdata.dev = &em_x270_snd_device->dev;
+       platform_set_drvdata(em_x270_snd_device, &em_x270);
        ret = platform_device_add(em_x270_snd_device);
 
        if (ret)
index 405587a011600ab2c1f81400240529201bdbc5c4..03765fc5ac74537fd311796b6b65d2696bc42625 100644 (file)
@@ -6,14 +6,13 @@
 
 #include "../codecs/wm8940.h"
 #include "pxa2xx-i2s.h"
-#include "pxa2xx-pcm.h"
 
 static int imote2_asoc_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret;
 
@@ -64,23 +63,19 @@ static struct snd_soc_ops imote2_asoc_ops = {
 static struct snd_soc_dai_link imote2_dai = {
        .name = "WM8940",
        .stream_name = "WM8940",
-       .cpu_dai = &pxa_i2s_dai,
-       .codec_dai = &wm8940_dai,
+       .cpu_dai_name = "pxa-i2s",
+       .codec_dai_name = "wm8940-hifi",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "wm8940-codec.0-0034",
        .ops = &imote2_asoc_ops,
 };
 
 static struct snd_soc_card snd_soc_imote2 = {
        .name = "Imote2",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = &imote2_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device imote2_snd_devdata = {
-       .card = &snd_soc_imote2,
-       .codec_dev = &soc_codec_dev_wm8940,
-};
-
 static struct platform_device *imote2_snd_device;
 
 static int __init imote2_asoc_init(void)
@@ -93,8 +88,7 @@ static int __init imote2_asoc_init(void)
        if (!imote2_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(imote2_snd_device, &imote2_snd_devdata);
-       imote2_snd_devdata.dev = &imote2_snd_device->dev;
+       platform_set_drvdata(imote2_snd_device, &snd_soc_imote2);
        ret = platform_device_add(imote2_snd_device);
        if (ret)
                platform_device_put(imote2_snd_device);
index 4c8d99a8d38667804ccb80b62a78268f8f55f439..608bc3dd835ff7c7125591db47bc0fdfb4f809d9 100644 (file)
@@ -32,7 +32,6 @@
 #include <mach/magician.h>
 #include <asm/mach-types.h>
 #include "../codecs/uda1380.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-i2s.h"
 #include "pxa-ssp.h"
 
@@ -71,7 +70,7 @@ static void magician_ext_control(struct snd_soc_codec *codec)
 static int magician_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* check the jack status at stream startup */
        magician_ext_control(codec);
@@ -86,8 +85,8 @@ static int magician_playback_hw_params(struct snd_pcm_substream *substream,
                                       struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int acps, acds, width, rate;
        unsigned int div4 = PXA_SSP_CLK_SCDB_4;
        int ret = 0;
@@ -227,8 +226,8 @@ static int magician_capture_hw_params(struct snd_pcm_substream *substream,
                                      struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret = 0;
 
        /* set codec DAI configuration */
@@ -393,8 +392,9 @@ static const struct snd_kcontrol_new uda1380_magician_controls[] = {
 /*
  * Logic for a uda1380 as connected on a HTC Magician
  */
-static int magician_uda1380_init(struct snd_soc_codec *codec)
+static int magician_uda1380_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* NC codec pins */
@@ -427,16 +427,20 @@ static struct snd_soc_dai_link magician_dai[] = {
 {
        .name = "uda1380",
        .stream_name = "UDA1380 Playback",
-       .cpu_dai = &pxa_ssp_dai[PXA_DAI_SSP1],
-       .codec_dai = &uda1380_dai[UDA1380_DAI_PLAYBACK],
+       .cpu_dai_name = "pxa-ssp-dai.0",
+       .codec_dai_name = "uda1380-hifi-playback",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "uda1380-codec.0-0018",
        .init = magician_uda1380_init,
        .ops = &magician_playback_ops,
 },
 {
        .name = "uda1380",
        .stream_name = "UDA1380 Capture",
-       .cpu_dai = &pxa_i2s_dai,
-       .codec_dai = &uda1380_dai[UDA1380_DAI_CAPTURE],
+       .cpu_dai_name = "pxa-i2s",
+       .codec_dai_name = "uda1380-hifi-capture",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "uda1380-codec.0-0018",
        .ops = &magician_capture_ops,
 }
 };
@@ -446,13 +450,7 @@ static struct snd_soc_card snd_soc_card_magician = {
        .name = "Magician",
        .dai_link = magician_dai,
        .num_links = ARRAY_SIZE(magician_dai),
-       .platform = &pxa2xx_soc_platform,
-};
 
-/* magician audio subsystem */
-static struct snd_soc_device magician_snd_devdata = {
-       .card = &snd_soc_card_magician,
-       .codec_dev = &soc_codec_dev_uda1380,
 };
 
 static struct platform_device *magician_snd_device;
@@ -514,8 +512,7 @@ static int __init magician_init(void)
                goto err_pdev;
        }
 
-       platform_set_drvdata(magician_snd_device, &magician_snd_devdata);
-       magician_snd_devdata.dev = &magician_snd_device->dev;
+       platform_set_drvdata(magician_snd_device, &snd_soc_card_magician);
        ret = platform_device_add(magician_snd_device);
        if (ret) {
                platform_device_put(magician_snd_device);
index 19eda8bbfdafc8264de13284639ad610bcaf60cd..f284cc54bc80e8fcfe100c56ccfd009dcb03168c 100644 (file)
@@ -54,7 +54,6 @@
 #include <sound/initval.h>
 #include <sound/ac97_codec.h>
 
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 #include "../codecs/wm9713.h"
 
@@ -128,8 +127,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"Rear Speaker", NULL, "SPKR"},
 };
 
-static int mioa701_wm9713_init(struct snd_soc_codec *codec)
+static int mioa701_wm9713_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        unsigned short reg;
 
        /* Add mioa701 specific widgets */
@@ -139,12 +139,12 @@ static int mioa701_wm9713_init(struct snd_soc_codec *codec)
        snd_soc_dapm_add_routes(codec, ARRAY_AND_SIZE(audio_map));
 
        /* Prepare GPIO8 for rear speaker amplifier */
-       reg = codec->read(codec, AC97_GPIO_CFG);
-       codec->write(codec, AC97_GPIO_CFG, reg | 0x0100);
+       reg = codec->driver->read(codec, AC97_GPIO_CFG);
+       codec->driver->write(codec, AC97_GPIO_CFG, reg | 0x0100);
 
        /* Prepare MIC input */
-       reg = codec->read(codec, AC97_3D_CONTROL);
-       codec->write(codec, AC97_3D_CONTROL, reg | 0xc000);
+       reg = codec->driver->read(codec, AC97_3D_CONTROL);
+       codec->driver->write(codec, AC97_3D_CONTROL, reg | 0xc000);
 
        snd_soc_dapm_enable_pin(codec, "Front Speaker");
        snd_soc_dapm_enable_pin(codec, "Rear Speaker");
@@ -162,32 +162,30 @@ static struct snd_soc_dai_link mioa701_dai[] = {
        {
                .name = "AC97",
                .stream_name = "AC97 HiFi",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-               .codec_dai = &wm9713_dai[WM9713_DAI_AC97_HIFI],
+               .cpu_dai_name = "pxa-ac97.0",
+               .codec_dai_name = "wm9713-hifi",
+               .codec_name = "wm9713-codec",
                .init = mioa701_wm9713_init,
+               .platform_name = "pxa-pcm-audio",
                .ops = &mioa701_ops,
        },
        {
                .name = "AC97 Aux",
                .stream_name = "AC97 Aux",
-               .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-               .codec_dai = &wm9713_dai[WM9713_DAI_AC97_AUX],
+               .cpu_dai_name = "pxa-ac97.1",
+               .codec_dai_name ="wm9713-aux",
+               .codec_name = "wm9713-codec",
+               .platform_name = "pxa-pcm-audio",
                .ops = &mioa701_ops,
        },
 };
 
 static struct snd_soc_card mioa701 = {
        .name = "MioA701",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = mioa701_dai,
        .num_links = ARRAY_SIZE(mioa701_dai),
 };
 
-static struct snd_soc_device mioa701_snd_devdata = {
-       .card = &mioa701,
-       .codec_dev = &soc_codec_dev_wm9713,
-};
-
 static struct platform_device *mioa701_snd_device;
 
 static int mioa701_wm9713_probe(struct platform_device *pdev)
@@ -205,8 +203,7 @@ static int mioa701_wm9713_probe(struct platform_device *pdev)
        if (!mioa701_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(mioa701_snd_device, &mioa701_snd_devdata);
-       mioa701_snd_devdata.dev = &mioa701_snd_device->dev;
+       platform_set_drvdata(mioa701_snd_device, &mioa701);
 
        ret = platform_device_add(mioa701_snd_device);
        if (!ret)
index 1f96e3227be51920fbc011e2f9adaeba3e0fad31..13f6d485d57168affb88010669513af04c1881cb 100644 (file)
@@ -29,7 +29,6 @@
 #include <mach/palmasoc.h>
 
 #include "../codecs/wm9712.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 
 static struct snd_soc_jack hs_jack;
@@ -75,8 +74,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
 
 static struct snd_soc_card palm27x_asoc;
 
-static int palm27x_ac97_init(struct snd_soc_codec *codec)
+static int palm27x_ac97_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* add palm27x specific widgets */
@@ -112,7 +112,7 @@ static int palm27x_ac97_init(struct snd_soc_codec *codec)
                return err;
 
        /* Jack detection API stuff */
-       err = snd_soc_jack_new(&palm27x_asoc, "Headphone Jack",
+       err = snd_soc_jack_new(codec, "Headphone Jack",
                                SND_JACK_HEADPHONE, &hs_jack);
        if (err)
                return err;
@@ -132,30 +132,28 @@ static struct snd_soc_dai_link palm27x_dai[] = {
 {
        .name = "AC97 HiFi",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-       .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
+       .cpu_dai_name = "pxa-ac97.0",
+       .codec_dai_name =  "wm9712-hifi",
+       .codec_name = "wm9712-codec",
+       .platform_name = "pxa-pcm-audio",
        .init = palm27x_ac97_init,
 },
 {
        .name = "AC97 Aux",
        .stream_name = "AC97 Aux",
-       .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-       .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
+       .cpu_dai_name = "pxa-ac97.1",
+       .codec_dai_name = "wm9712-aux",
+       .codec_name = "wm9712-codec",
+       .platform_name = "pxa-pcm-audio",
 },
 };
 
 static struct snd_soc_card palm27x_asoc = {
        .name = "Palm/PXA27x",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = palm27x_dai,
        .num_links = ARRAY_SIZE(palm27x_dai),
 };
 
-static struct snd_soc_device palm27x_snd_devdata = {
-       .card = &palm27x_asoc,
-       .codec_dev = &soc_codec_dev_wm9712,
-};
-
 static struct platform_device *palm27x_snd_device;
 
 static int palm27x_asoc_probe(struct platform_device *pdev)
@@ -178,8 +176,7 @@ static int palm27x_asoc_probe(struct platform_device *pdev)
        if (!palm27x_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(palm27x_snd_device, &palm27x_snd_devdata);
-       palm27x_snd_devdata.dev = &palm27x_snd_device->dev;
+       platform_set_drvdata(palm27x_snd_device, &palm27x_asoc);
        ret = platform_device_add(palm27x_snd_device);
 
        if (ret != 0)
index c5f36e0eab58db4a188e36316f7239fab3272599..3ba5a962ecb8c58499ae99848afdb4221348d345 100644 (file)
@@ -31,7 +31,6 @@
 #include <mach/audio.h>
 
 #include "../codecs/wm8731.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-i2s.h"
 
 #define POODLE_HP        1
@@ -76,7 +75,7 @@ static void poodle_ext_control(struct snd_soc_codec *codec)
 static int poodle_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* check the jack status at stream startup */
        poodle_ext_control(codec);
@@ -97,8 +96,8 @@ static int poodle_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
 
@@ -237,8 +236,9 @@ static const struct snd_kcontrol_new wm8731_poodle_controls[] = {
 /*
  * Logic for a wm8731 as connected on a Sharp SL-C7x0 Device
  */
-static int poodle_wm8731_init(struct snd_soc_codec *codec)
+static int poodle_wm8731_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        snd_soc_dapm_nc_pin(codec, "LLINEIN");
@@ -266,8 +266,10 @@ static int poodle_wm8731_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link poodle_dai = {
        .name = "WM8731",
        .stream_name = "WM8731",
-       .cpu_dai = &pxa_i2s_dai,
-       .codec_dai = &wm8731_dai,
+       .cpu_dai_name = "pxa-i2s",
+       .codec_dai_name = "wm8731-hifi"
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "wm8731-codec.0-001a",
        .init = poodle_wm8731_init,
        .ops = &poodle_ops,
 };
@@ -275,15 +277,9 @@ static struct snd_soc_dai_link poodle_dai = {
 /* poodle audio machine driver */
 static struct snd_soc_card snd_soc_poodle = {
        .name = "Poodle",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = &poodle_dai,
        .num_links = 1,
-};
-
-/* poodle audio subsystem */
-static struct snd_soc_device poodle_snd_devdata = {
-       .card = &snd_soc_poodle,
-       .codec_dev = &soc_codec_dev_wm8731,
+       .owner = THIS_MODULE,
 };
 
 static struct platform_device *poodle_snd_device;
@@ -307,8 +303,7 @@ static int __init poodle_init(void)
        if (!poodle_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(poodle_snd_device, &poodle_snd_devdata);
-       poodle_snd_devdata.dev = &poodle_snd_device->dev;
+       platform_set_drvdata(poodle_snd_device, &snd_soc_poodle);
        ret = platform_device_add(poodle_snd_device);
 
        if (ret)
index a1fd23e0e3d00d5aa5fb93a53c2c106a74731cb0..8dfbcda956ffb725d1114d149ae5c47b3e16a0e8 100644 (file)
@@ -35,7 +35,7 @@
 #include <mach/audio.h>
 #include <plat/ssp.h>
 
-#include "pxa2xx-pcm.h"
+#include "../../arm/pxa2xx-pcm.h"
 #include "pxa-ssp.h"
 
 /*
@@ -108,11 +108,9 @@ pxa_ssp_get_dma_params(struct ssp_device *ssp, int width4, int out)
 }
 
 static int pxa_ssp_startup(struct snd_pcm_substream *substream,
-                          struct snd_soc_dai *dai)
+                          struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        int ret = 0;
 
@@ -128,11 +126,9 @@ static int pxa_ssp_startup(struct snd_pcm_substream *substream,
 }
 
 static void pxa_ssp_shutdown(struct snd_pcm_substream *substream,
-                            struct snd_soc_dai *dai)
+                            struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
 
        if (!cpu_dai->active) {
@@ -148,7 +144,7 @@ static void pxa_ssp_shutdown(struct snd_pcm_substream *substream,
 
 static int pxa_ssp_suspend(struct snd_soc_dai *cpu_dai)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
 
        if (!cpu_dai->active)
@@ -166,7 +162,7 @@ static int pxa_ssp_suspend(struct snd_soc_dai *cpu_dai)
 
 static int pxa_ssp_resume(struct snd_soc_dai *cpu_dai)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        uint32_t sssr = SSSR_ROR | SSSR_TUR | SSSR_BCE;
 
@@ -230,7 +226,7 @@ static u32 pxa_ssp_get_scr(struct ssp_device *ssp)
 static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
        int clk_id, unsigned int freq, int dir)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        int val;
 
@@ -287,7 +283,7 @@ static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
 static int pxa_ssp_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
        int div_id, int div)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        int val;
 
@@ -338,7 +334,7 @@ static int pxa_ssp_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
 static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
        int source, unsigned int freq_in, unsigned int freq_out)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        u32 ssacd = pxa_ssp_read_reg(ssp, SSACD) & ~0x70;
 
@@ -407,7 +403,7 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
 static int pxa_ssp_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai,
        unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        u32 sscr0;
 
@@ -442,7 +438,7 @@ static int pxa_ssp_set_dai_tdm_slot(struct snd_soc_dai *cpu_dai,
 static int pxa_ssp_set_dai_tristate(struct snd_soc_dai *cpu_dai,
        int tristate)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        u32 sscr1;
 
@@ -464,11 +460,9 @@ static int pxa_ssp_set_dai_tristate(struct snd_soc_dai *cpu_dai,
 static int pxa_ssp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                unsigned int fmt)
 {
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
-       u32 sscr0;
-       u32 sscr1;
-       u32 sspsp;
+       u32 sscr0, sscr1, sspsp, scfr;
 
        /* check if we need to change anything at all */
        if (priv->dai_fmt == fmt)
@@ -483,16 +477,16 @@ static int pxa_ssp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 
        /* reset port settings */
        sscr0 = pxa_ssp_read_reg(ssp, SSCR0) &
-               (SSCR0_ECS |  SSCR0_NCS | SSCR0_MOD | SSCR0_ACS);
+               ~(SSCR0_ECS |  SSCR0_NCS | SSCR0_MOD | SSCR0_ACS);
        sscr1 = SSCR1_RxTresh(8) | SSCR1_TxTresh(7);
        sspsp = 0;
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
        case SND_SOC_DAIFMT_CBM_CFM:
-               sscr1 |= SSCR1_SCLKDIR | SSCR1_SFRMDIR;
+               sscr1 |= SSCR1_SCLKDIR | SSCR1_SFRMDIR | SSCR1_SCFR;
                break;
        case SND_SOC_DAIFMT_CBM_CFS:
-               sscr1 |= SSCR1_SCLKDIR;
+               sscr1 |= SSCR1_SCLKDIR | SSCR1_SCFR;
                break;
        case SND_SOC_DAIFMT_CBS_CFS:
                break;
@@ -538,6 +532,17 @@ static int pxa_ssp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
        pxa_ssp_write_reg(ssp, SSCR1, sscr1);
        pxa_ssp_write_reg(ssp, SSPSP, sspsp);
 
+       switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+       case SND_SOC_DAIFMT_CBM_CFM:
+       case SND_SOC_DAIFMT_CBM_CFS:
+               scfr = pxa_ssp_read_reg(ssp, SSCR1) | SSCR1_SCFR;
+               pxa_ssp_write_reg(ssp, SSCR1, scfr);
+
+               while (pxa_ssp_read_reg(ssp, SSSR) & SSSR_BSY)
+                       cpu_relax();
+               break;
+       }
+
        dump_registers(ssp);
 
        /* Since we are configuring the timings for the format by hand
@@ -555,11 +560,9 @@ static int pxa_ssp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
  */
 static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params,
-                               struct snd_soc_dai *dai)
+                               struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        int chn = params_channels(params);
        u32 sscr0;
@@ -568,7 +571,7 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
        int ttsa = pxa_ssp_read_reg(ssp, SSTSA) & 0xf;
        struct pxa2xx_pcm_dma_params *dma_data;
 
-       dma_data = snd_soc_dai_get_dma_data(dai, substream);
+       dma_data = snd_soc_dai_get_dma_data(cpu_dai, substream);
 
        /* generate correct DMA params */
        kfree(dma_data);
@@ -581,7 +584,7 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
                        ((chn == 2) && (ttsa != 1)) || (width == 32),
                        substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
 
-       snd_soc_dai_set_dma_data(dai, substream, dma_data);
+       snd_soc_dai_set_dma_data(cpu_dai, substream, dma_data);
 
        /* we can only change the settings if the port is not in use */
        if (pxa_ssp_read_reg(ssp, SSCR0) & SSCR0_SSE)
@@ -589,10 +592,8 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
 
        /* clear selected SSP bits */
        sscr0 = pxa_ssp_read_reg(ssp, SSCR0) & ~(SSCR0_DSS | SSCR0_EDSS);
-       pxa_ssp_write_reg(ssp, SSCR0, sscr0);
 
        /* bit size */
-       sscr0 = pxa_ssp_read_reg(ssp, SSCR0);
        switch (params_format(params)) {
        case SNDRV_PCM_FORMAT_S16_LE:
 #ifdef CONFIG_PXA3xx
@@ -668,12 +669,10 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
 }
 
 static int pxa_ssp_trigger(struct snd_pcm_substream *substream, int cmd,
-                          struct snd_soc_dai *dai)
+                          struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        int ret = 0;
-       struct ssp_priv *priv = cpu_dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(cpu_dai);
        struct ssp_device *ssp = priv->ssp;
        int val;
 
@@ -729,8 +728,7 @@ static int pxa_ssp_trigger(struct snd_pcm_substream *substream, int cmd,
        return ret;
 }
 
-static int pxa_ssp_probe(struct platform_device *pdev,
-                           struct snd_soc_dai *dai)
+static int pxa_ssp_probe(struct snd_soc_dai *dai)
 {
        struct ssp_priv *priv;
        int ret;
@@ -746,7 +744,7 @@ static int pxa_ssp_probe(struct platform_device *pdev,
        }
 
        priv->dai_fmt = (unsigned int) -1;
-       dai->private_data = priv;
+       snd_soc_dai_set_drvdata(dai, priv);
 
        return 0;
 
@@ -755,11 +753,12 @@ err_priv:
        return ret;
 }
 
-static void pxa_ssp_remove(struct platform_device *pdev,
-                             struct snd_soc_dai *dai)
+static int pxa_ssp_remove(struct snd_soc_dai *dai)
 {
-       struct ssp_priv *priv = dai->private_data;
+       struct ssp_priv *priv = snd_soc_dai_get_drvdata(dai);
+
        pxa_ssp_free(priv->ssp);
+       return 0;
 }
 
 #define PXA_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
@@ -784,10 +783,7 @@ static struct snd_soc_dai_ops pxa_ssp_dai_ops = {
        .set_tristate   = pxa_ssp_set_dai_tristate,
 };
 
-struct snd_soc_dai pxa_ssp_dai[] = {
-       {
-               .name = "pxa2xx-ssp1",
-               .id = 0,
+static struct snd_soc_dai_driver pxa_ssp_dai = {
                .probe = pxa_ssp_probe,
                .remove = pxa_ssp_remove,
                .suspend = pxa_ssp_suspend,
@@ -805,81 +801,38 @@ struct snd_soc_dai pxa_ssp_dai[] = {
                        .formats = PXA_SSP_FORMATS,
                 },
                .ops = &pxa_ssp_dai_ops,
+};
+
+static __devinit int asoc_ssp_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dai(&pdev->dev, &pxa_ssp_dai);
+}
+
+static int __devexit asoc_ssp_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver asoc_ssp_driver = {
+       .driver = {
+                       .name = "pxa-ssp-dai",
+                       .owner = THIS_MODULE,
        },
-       {       .name = "pxa2xx-ssp2",
-               .id = 1,
-               .probe = pxa_ssp_probe,
-               .remove = pxa_ssp_remove,
-               .suspend = pxa_ssp_suspend,
-               .resume = pxa_ssp_resume,
-               .playback = {
-                       .channels_min = 1,
-                       .channels_max = 8,
-                       .rates = PXA_SSP_RATES,
-                       .formats = PXA_SSP_FORMATS,
-               },
-               .capture = {
-                       .channels_min = 1,
-                       .channels_max = 8,
-                       .rates = PXA_SSP_RATES,
-                       .formats = PXA_SSP_FORMATS,
-                },
-               .ops = &pxa_ssp_dai_ops,
-       },
-       {
-               .name = "pxa2xx-ssp3",
-               .id = 2,
-               .probe = pxa_ssp_probe,
-               .remove = pxa_ssp_remove,
-               .suspend = pxa_ssp_suspend,
-               .resume = pxa_ssp_resume,
-               .playback = {
-                       .channels_min = 1,
-                       .channels_max = 8,
-                       .rates = PXA_SSP_RATES,
-                       .formats = PXA_SSP_FORMATS,
-               },
-               .capture = {
-                       .channels_min = 1,
-                       .channels_max = 8,
-                       .rates = PXA_SSP_RATES,
-                       .formats = PXA_SSP_FORMATS,
-                },
-               .ops = &pxa_ssp_dai_ops,
-       },
-       {
-               .name = "pxa2xx-ssp4",
-               .id = 3,
-               .probe = pxa_ssp_probe,
-               .remove = pxa_ssp_remove,
-               .suspend = pxa_ssp_suspend,
-               .resume = pxa_ssp_resume,
-               .playback = {
-                       .channels_min = 1,
-                       .channels_max = 8,
-                       .rates = PXA_SSP_RATES,
-                       .formats = PXA_SSP_FORMATS,
-               },
-               .capture = {
-                       .channels_min = 1,
-                       .channels_max = 8,
-                       .rates = PXA_SSP_RATES,
-                       .formats = PXA_SSP_FORMATS,
-                },
-               .ops = &pxa_ssp_dai_ops,
-       },
+
+       .probe = asoc_ssp_probe,
+       .remove = __devexit_p(asoc_ssp_remove),
 };
-EXPORT_SYMBOL_GPL(pxa_ssp_dai);
 
 static int __init pxa_ssp_init(void)
 {
-       return snd_soc_register_dais(pxa_ssp_dai, ARRAY_SIZE(pxa_ssp_dai));
+       return platform_driver_register(&asoc_ssp_driver);
 }
 module_init(pxa_ssp_init);
 
 static void __exit pxa_ssp_exit(void)
 {
-       snd_soc_unregister_dais(pxa_ssp_dai, ARRAY_SIZE(pxa_ssp_dai));
+       platform_driver_unregister(&asoc_ssp_driver);
 }
 module_exit(pxa_ssp_exit);
 
index 91deadd55675a23aea5d7d89400747c6bd66cdf8..bc79da221c0df018942b80c613be5d8d11ef6bf9 100644 (file)
@@ -42,6 +42,4 @@
 
 #define PXA_SSP_PLL_OUT  0
 
-extern struct snd_soc_dai pxa_ssp_dai[4];
-
 #endif
index d314115e3dd726750afbb8706b72cc51fbb3104b..9c2bafa112ad8949aa9ae9428f191a12f1ed8822 100644 (file)
@@ -104,24 +104,21 @@ static int pxa2xx_ac97_resume(struct snd_soc_dai *dai)
 #define pxa2xx_ac97_resume     NULL
 #endif
 
-static int pxa2xx_ac97_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
+static int pxa2xx_ac97_probe(struct snd_soc_dai *dai)
 {
        return pxa2xx_ac97_hw_probe(to_platform_device(dai->dev));
 }
 
-static void pxa2xx_ac97_remove(struct platform_device *pdev,
-                              struct snd_soc_dai *dai)
+static int pxa2xx_ac97_remove(struct snd_soc_dai *dai)
 {
        pxa2xx_ac97_hw_remove(to_platform_device(dai->dev));
+       return 0;
 }
 
 static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
-                                struct snd_soc_dai *dai)
+                                struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct pxa2xx_pcm_dma_params *dma_data;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -136,10 +133,8 @@ static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
 
 static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
                                     struct snd_pcm_hw_params *params,
-                                    struct snd_soc_dai *dai)
+                                    struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct pxa2xx_pcm_dma_params *dma_data;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -154,11 +149,8 @@ static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
 
 static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream,
                                     struct snd_pcm_hw_params *params,
-                                    struct snd_soc_dai *dai)
+                                    struct snd_soc_dai *cpu_dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                return -ENODEV;
        else
@@ -188,10 +180,9 @@ static struct snd_soc_dai_ops pxa_ac97_mic_dai_ops = {
  * There is only 1 physical AC97 interface for pxa2xx, but it
  * has extra fifo's that can be used for aux DACs and ADCs.
  */
-struct snd_soc_dai pxa_ac97_dai[] = {
+static struct snd_soc_dai_driver pxa_ac97_dai[] = {
 {
        .name = "pxa2xx-ac97",
-       .id = 0,
        .ac97_control = 1,
        .probe = pxa2xx_ac97_probe,
        .remove = pxa2xx_ac97_remove,
@@ -213,7 +204,6 @@ struct snd_soc_dai pxa_ac97_dai[] = {
 },
 {
        .name = "pxa2xx-ac97-aux",
-       .id = 1,
        .ac97_control = 1,
        .playback = {
                .stream_name = "AC97 Aux Playback",
@@ -231,7 +221,6 @@ struct snd_soc_dai pxa_ac97_dai[] = {
 },
 {
        .name = "pxa2xx-ac97-mic",
-       .id = 2,
        .ac97_control = 1,
        .capture = {
                .stream_name = "AC97 Mic Capture",
@@ -243,36 +232,26 @@ struct snd_soc_dai pxa_ac97_dai[] = {
 },
 };
 
-EXPORT_SYMBOL_GPL(pxa_ac97_dai);
 EXPORT_SYMBOL_GPL(soc_ac97_ops);
 
-static int __devinit pxa2xx_ac97_dev_probe(struct platform_device *pdev)
+static __devinit int pxa2xx_ac97_dev_probe(struct platform_device *pdev)
 {
-       int i;
-       pxa2xx_audio_ops_t *pdata = pdev->dev.platform_data;
-
-       if (pdev->id >= 0) {
+       if (pdev->id != -1) {
                dev_err(&pdev->dev, "PXA2xx has only one AC97 port.\n");
                return -ENXIO;
        }
 
-       for (i = 0; i < ARRAY_SIZE(pxa_ac97_dai); i++) {
-               pxa_ac97_dai[i].dev = &pdev->dev;
-               if (pdata && pdata->codec_pdata[0])
-                       pxa_ac97_dai[i].ac97_pdata = pdata->codec_pdata[0];
-       }
-
        /* Punt most of the init to the SoC probe; we may need the machine
         * driver to do interesting things with the clocking to get us up
         * and running.
         */
-       return snd_soc_register_dais(pxa_ac97_dai, ARRAY_SIZE(pxa_ac97_dai));
+       return snd_soc_register_dais(&pdev->dev, pxa_ac97_dai,
+                       ARRAY_SIZE(pxa_ac97_dai));
 }
 
 static int __devexit pxa2xx_ac97_dev_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dais(pxa_ac97_dai, ARRAY_SIZE(pxa_ac97_dai));
-
+       snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(pxa_ac97_dai));
        return 0;
 }
 
index e390de8edcd48724558f63c4338a9e83b19d1762..eda891e6f31bab8ff1395a193bbc3949d2fecc8c 100644 (file)
@@ -14,8 +14,6 @@
 #define PXA2XX_DAI_AC97_AUX            1
 #define PXA2XX_DAI_AC97_MIC            2
 
-extern struct snd_soc_dai pxa_ac97_dai[3];
-
 /* platform data */
 extern struct snd_ac97_bus_ops pxa2xx_ac97_ops;
 
index c1a5275721e4f0eb2812842d31555c84b16f206c..d1b2ca69fd30d512b8b4f188ae842cb1136540fc 100644 (file)
@@ -27,7 +27,6 @@
 #include <mach/dma.h>
 #include <mach/audio.h>
 
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-i2s.h"
 
 /*
@@ -80,6 +79,7 @@ struct pxa_i2s_port {
 };
 static struct pxa_i2s_port pxa_i2s;
 static struct clk *clk_i2s;
+static int clk_ena = 0;
 
 static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {
        .name                   = "I2S PCM Stereo out",
@@ -101,7 +101,7 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream,
                              struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        if (IS_ERR(clk_i2s))
                return PTR_ERR(clk_i2s);
@@ -162,13 +162,11 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params,
                                struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        struct pxa2xx_pcm_dma_params *dma_data;
 
        BUG_ON(IS_ERR(clk_i2s));
        clk_enable(clk_i2s);
-       dai->private_data = dai;
+       clk_ena = 1;
        pxa_i2s_wait();
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -176,7 +174,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
        else
                dma_data = &pxa2xx_i2s_pcm_stereo_in;
 
-       snd_soc_dai_set_dma_data(cpu_dai, substream, dma_data);
+       snd_soc_dai_set_dma_data(dai, substream, dma_data);
 
        /* is port used by another stream */
        if (!(SACR0 & SACR0_ENB)) {
@@ -259,9 +257,9 @@ static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream,
        if ((SACR1 & (SACR1_DREC | SACR1_DRPL)) == (SACR1_DREC | SACR1_DRPL)) {
                SACR0 &= ~SACR0_ENB;
                pxa_i2s_wait();
-               if (dai->private_data != NULL) {
+               if (clk_ena) {
                        clk_disable(clk_i2s);
-                       dai->private_data = NULL;
+                       clk_ena = 0;
                }
        }
 }
@@ -300,6 +298,35 @@ static int pxa2xx_i2s_resume(struct snd_soc_dai *dai)
 #define pxa2xx_i2s_resume      NULL
 #endif
 
+static int pxa2xx_i2s_probe(struct snd_soc_dai *dai)
+{
+       clk_i2s = clk_get(dai->dev, "I2SCLK");
+       if (IS_ERR(clk_i2s))
+               return PTR_ERR(clk_i2s);
+
+       /*
+        * PXA Developer's Manual:
+        * If SACR0[ENB] is toggled in the middle of a normal operation,
+        * the SACR0[RST] bit must also be set and cleared to reset all
+        * I2S controller registers.
+        */
+       SACR0 = SACR0_RST;
+       SACR0 = 0;
+       /* Make sure RPL and REC are disabled */
+       SACR1 = SACR1_DRPL | SACR1_DREC;
+       /* Along with FIFO servicing */
+       SAIMR &= ~(SAIMR_RFS | SAIMR_TFS);
+
+       return 0;
+}
+
+static int  pxa2xx_i2s_remove(struct snd_soc_dai *dai)
+{
+       clk_put(clk_i2s);
+       clk_i2s = ERR_PTR(-ENOENT);
+       return 0;
+}
+
 #define PXA2XX_I2S_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
                SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
                SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000)
@@ -313,9 +340,9 @@ static struct snd_soc_dai_ops pxa_i2s_dai_ops = {
        .set_sysclk     = pxa2xx_i2s_set_dai_sysclk,
 };
 
-struct snd_soc_dai pxa_i2s_dai = {
-       .name = "pxa2xx-i2s",
-       .id = 0,
+static struct snd_soc_dai_driver pxa_i2s_dai = {
+       .probe = pxa2xx_i2s_probe,
+       .remove = pxa2xx_i2s_remove,
        .suspend = pxa2xx_i2s_suspend,
        .resume = pxa2xx_i2s_resume,
        .playback = {
@@ -332,49 +359,20 @@ struct snd_soc_dai pxa_i2s_dai = {
        .symmetric_rates = 1,
 };
 
-EXPORT_SYMBOL_GPL(pxa_i2s_dai);
-
-static int pxa2xx_i2s_probe(struct platform_device *dev)
+static int pxa2xx_i2s_drv_probe(struct platform_device *pdev)
 {
-       int ret;
-
-       clk_i2s = clk_get(&dev->dev, "I2SCLK");
-       if (IS_ERR(clk_i2s))
-               return PTR_ERR(clk_i2s);
-
-       pxa_i2s_dai.dev = &dev->dev;
-       pxa_i2s_dai.private_data = NULL;
-       ret = snd_soc_register_dai(&pxa_i2s_dai);
-       if (ret != 0)
-               clk_put(clk_i2s);
-
-       /*
-        * PXA Developer's Manual:
-        * If SACR0[ENB] is toggled in the middle of a normal operation,
-        * the SACR0[RST] bit must also be set and cleared to reset all
-        * I2S controller registers.
-        */
-       SACR0 = SACR0_RST;
-       SACR0 = 0;
-       /* Make sure RPL and REC are disabled */
-       SACR1 = SACR1_DRPL | SACR1_DREC;
-       /* Along with FIFO servicing */
-       SAIMR &= ~(SAIMR_RFS | SAIMR_TFS);
-
-       return ret;
+       return snd_soc_register_dai(&pdev->dev, &pxa_i2s_dai);
 }
 
-static int __devexit pxa2xx_i2s_remove(struct platform_device *dev)
+static int __devexit pxa2xx_i2s_drv_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&pxa_i2s_dai);
-       clk_put(clk_i2s);
-       clk_i2s = ERR_PTR(-ENOENT);
+       snd_soc_unregister_dai(&pdev->dev);
        return 0;
 }
 
 static struct platform_driver pxa2xx_i2s_driver = {
-       .probe = pxa2xx_i2s_probe,
-       .remove = __devexit_p(pxa2xx_i2s_remove),
+       .probe = pxa2xx_i2s_drv_probe,
+       .remove = __devexit_p(pxa2xx_i2s_drv_remove),
 
        .driver = {
                .name = "pxa2xx-i2s",
index e2def441153eee706ab6789a00385c6e13f49284..070f3c6059fed6e880f8cce055731506b43c71e8 100644 (file)
@@ -15,6 +15,4 @@
 /* I2S clock */
 #define PXA2XX_I2S_SYSCLK              0
 
-extern struct snd_soc_dai pxa_i2s_dai;
-
 #endif
index adc7e6f15f9367b5acbf16c02f633af3583a16da..02fb66416ddc894c7abdfd2fa52cddc3eb717225 100644 (file)
@@ -16,7 +16,6 @@
 #include <sound/soc.h>
 #include <sound/pxa2xx-lib.h>
 
-#include "pxa2xx-pcm.h"
 #include "../../arm/pxa2xx-pcm.h"
 
 static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
@@ -28,7 +27,7 @@ static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
        struct pxa2xx_pcm_dma_params *dma;
        int ret;
 
-       dma = snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+       dma = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        /* return if this is a bufferless transfer e.g.
         * codec <--> BT codec or GSM modem -- lg FIXME */
@@ -95,14 +94,14 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -112,25 +111,44 @@ static int pxa2xx_soc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
        return ret;
 }
 
-struct snd_soc_platform pxa2xx_soc_platform = {
-       .name           = "pxa2xx-audio",
-       .pcm_ops        = &pxa2xx_pcm_ops,
+static struct snd_soc_platform_driver pxa2xx_soc_platform = {
+       .ops    = &pxa2xx_pcm_ops,
        .pcm_new        = pxa2xx_soc_pcm_new,
        .pcm_free       = pxa2xx_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(pxa2xx_soc_platform);
 
-static int __init pxa2xx_soc_platform_init(void)
+static int __devinit pxa2xx_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&pxa2xx_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &pxa2xx_soc_platform);
 }
-module_init(pxa2xx_soc_platform_init);
 
-static void __exit pxa2xx_soc_platform_exit(void)
+static int __devexit pxa2xx_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&pxa2xx_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver pxa_pcm_driver = {
+       .driver = {
+                       .name = "pxa-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = pxa2xx_soc_platform_probe,
+       .remove = __devexit_p(pxa2xx_soc_platform_remove),
+};
+
+static int __init snd_pxa_pcm_init(void)
+{
+       return platform_driver_register(&pxa_pcm_driver);
+}
+module_init(snd_pxa_pcm_init);
+
+static void __exit snd_pxa_pcm_exit(void)
+{
+       platform_driver_unregister(&pxa_pcm_driver);
 }
-module_exit(pxa2xx_soc_platform_exit);
+module_exit(snd_pxa_pcm_exit);
 
 MODULE_AUTHOR("Nicolas Pitre");
 MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module");
diff --git a/sound/soc/pxa/pxa2xx-pcm.h b/sound/soc/pxa/pxa2xx-pcm.h
deleted file mode 100644 (file)
index 60c3b20..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * linux/sound/arm/pxa2xx-pcm.h -- ALSA PCM interface for the Intel PXA2xx chip
- *
- * Author:     Nicolas Pitre
- * Created:    Nov 30, 2004
- * Copyright:  MontaVista Software, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#ifndef _PXA2XX_PCM_H
-#define _PXA2XX_PCM_H
-
-/* platform data */
-extern struct snd_soc_platform pxa2xx_soc_platform;
-
-#endif
index 7e3f41696c41f53e6479a4678982f0bc7e28842d..2cda82bc5d2e4362e2a3941428ad1eaf9802934e 100644 (file)
@@ -26,9 +26,6 @@
 
 #include <asm/mach-types.h>
 
-#include "../codecs/cs4270.h"
-#include "../codecs/ak4104.h"
-#include "pxa2xx-pcm.h"
 #include "pxa-ssp.h"
 
 #define GPIO_SPDIF_RESET       (38)
@@ -71,7 +68,7 @@ static void raumfeld_enable_audio(bool en)
 static int raumfeld_cs4270_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        /* set freq to 0 to enable all possible codec sample rates */
        return snd_soc_dai_set_sysclk(codec_dai, 0, 0, 0);
@@ -80,7 +77,7 @@ static int raumfeld_cs4270_startup(struct snd_pcm_substream *substream)
 static void raumfeld_cs4270_shutdown(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        /* set freq to 0 to enable all possible codec sample rates */
        snd_soc_dai_set_sysclk(codec_dai, 0, 0, 0);
@@ -90,8 +87,8 @@ static int raumfeld_cs4270_hw_params(struct snd_pcm_substream *substream,
                                     struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int fmt, clk = 0;
        int ret = 0;
 
@@ -167,32 +164,14 @@ static int raumfeld_line_resume(struct platform_device *pdev)
        return 0;
 }
 
-static struct snd_soc_dai_link raumfeld_line_dai = {
-       .name           = "CS4270",
-       .stream_name    = "CS4270",
-       .cpu_dai        = &pxa_ssp_dai[PXA_DAI_SSP1],
-       .codec_dai      = &cs4270_dai,
-       .ops            = &raumfeld_cs4270_ops,
-};
-
-static struct snd_soc_card snd_soc_line_raumfeld = {
-       .name           = "Raumfeld analog",
-       .platform       = &pxa2xx_soc_platform,
-       .dai_link       = &raumfeld_line_dai,
-       .suspend_post   = raumfeld_line_suspend,
-       .resume_pre     = raumfeld_line_resume,
-       .num_links      = 1,
-};
-
-
 /* AK4104 */
 
 static int raumfeld_ak4104_hw_params(struct snd_pcm_substream *substream,
                                     struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int fmt, ret = 0, clk = 0;
 
        switch (params_rate(params)) {
@@ -247,34 +226,35 @@ static struct snd_soc_ops raumfeld_ak4104_ops = {
        .hw_params = raumfeld_ak4104_hw_params,
 };
 
-static struct snd_soc_dai_link raumfeld_spdif_dai = {
+static struct snd_soc_dai_link raumfeld_dai[] = {
+{
        .name           = "ak4104",
        .stream_name    = "Playback",
-       .cpu_dai        = &pxa_ssp_dai[PXA_DAI_SSP2],
-       .codec_dai      = &ak4104_dai,
+       .cpu_dai_name = "pxa-ssp-dai.1",
+       .codec_dai_name = "ak4104-hifi",
+       .platform_name = "pxa-pcm-audio",
        .ops            = &raumfeld_ak4104_ops,
-};
-
-static struct snd_soc_card snd_soc_spdif_raumfeld = {
-       .name           = "Raumfeld S/PDIF",
-       .platform       = &pxa2xx_soc_platform,
-       .dai_link       = &raumfeld_spdif_dai,
-       .num_links      = 1
-};
-
-/* raumfeld_audio audio subsystem */
-static struct snd_soc_device raumfeld_line_devdata = {
-       .card = &snd_soc_line_raumfeld,
-       .codec_dev = &soc_codec_device_cs4270,
-};
+       .codec_name = "ak4104-codec.0",
+},
+{
+       .name           = "CS4270",
+       .stream_name    = "CS4270",
+       .cpu_dai_name = "pxa-ssp-dai.0",
+       .platform_name = "pxa-pcm-audio",
+       .codec_dai_name = "cs4270-hifi",
+       .codec_name = "cs4270-codec.0-0048",
+       .ops            = &raumfeld_cs4270_ops,
+},};
 
-static struct snd_soc_device raumfeld_spdif_devdata = {
-       .card = &snd_soc_spdif_raumfeld,
-       .codec_dev = &soc_codec_device_ak4104,
+static struct snd_soc_card snd_soc_raumfeld = {
+       .name           = "Raumfeld",
+       .dai_link       = raumfeld_dai,
+       .suspend_post   = raumfeld_line_suspend,
+       .resume_pre     = raumfeld_line_resume,
+       .num_links      = ARRAY_SIZE(raumfeld_dai),
 };
 
-static struct platform_device *raumfeld_audio_line_device;
-static struct platform_device *raumfeld_audio_spdif_device;
+static struct platform_device *raumfeld_audio_device;
 
 static int __init raumfeld_audio_init(void)
 {
@@ -292,38 +272,19 @@ static int __init raumfeld_audio_init(void)
 
        set_max9485_clk(MAX9485_MCLK_FREQ_122880);
 
-       /* LINE */
-       raumfeld_audio_line_device = platform_device_alloc("soc-audio", 0);
-       if (!raumfeld_audio_line_device)
+       /* Register LINE and SPDIF */
+       raumfeld_audio_device = platform_device_alloc("soc-audio", 0);
+       if (!raumfeld_audio_device)
                return -ENOMEM;
 
-       platform_set_drvdata(raumfeld_audio_line_device,
-                            &raumfeld_line_devdata);
-       raumfeld_line_devdata.dev = &raumfeld_audio_line_device->dev;
-       ret = platform_device_add(raumfeld_audio_line_device);
-       if (ret)
-               platform_device_put(raumfeld_audio_line_device);
+       platform_set_drvdata(raumfeld_audio_device,
+                            &snd_soc_raumfeld);
+       ret = platform_device_add(raumfeld_audio_device);
 
        /* no S/PDIF on Speakers */
        if (machine_is_raumfeld_speaker())
                return ret;
 
-       /* S/PDIF */
-       raumfeld_audio_spdif_device = platform_device_alloc("soc-audio", 1);
-       if (!raumfeld_audio_spdif_device) {
-               platform_device_put(raumfeld_audio_line_device);
-               return -ENOMEM;
-       }
-
-       platform_set_drvdata(raumfeld_audio_spdif_device,
-                            &raumfeld_spdif_devdata);
-       raumfeld_spdif_devdata.dev = &raumfeld_audio_spdif_device->dev;
-       ret = platform_device_add(raumfeld_audio_spdif_device);
-       if (ret) {
-               platform_device_put(raumfeld_audio_line_device);
-               platform_device_put(raumfeld_audio_spdif_device);
-       }
-
        raumfeld_enable_audio(true);
 
        return ret;
@@ -333,10 +294,7 @@ static void __exit raumfeld_audio_exit(void)
 {
        raumfeld_enable_audio(false);
 
-       platform_device_unregister(raumfeld_audio_line_device);
-
-       if (machine_is_raumfeld_connector())
-               platform_device_unregister(raumfeld_audio_spdif_device);
+       platform_device_unregister(raumfeld_audio_device);
 
        i2c_unregister_device(max9486_client);
 
index 1941a357e8c4f69fddf94a9a682d2fa0ebaf7d61..f470f360f4dda9a3193b5f5011a7b9688cfb3b32 100644 (file)
@@ -28,7 +28,6 @@
 #include <asm/mach-types.h>
 #include <mach/spitz.h>
 #include "../codecs/wm8750.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-i2s.h"
 
 #define SPITZ_HP        0
@@ -107,7 +106,7 @@ static void spitz_ext_control(struct snd_soc_codec *codec)
 static int spitz_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->codec;
 
        /* check the jack status at stream startup */
        spitz_ext_control(codec);
@@ -118,8 +117,8 @@ static int spitz_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
 
@@ -274,8 +273,9 @@ static const struct snd_kcontrol_new wm8750_spitz_controls[] = {
 /*
  * Logic for a wm8750 as connected on a Sharp SL-Cxx00 Device
  */
-static int spitz_wm8750_init(struct snd_soc_codec *codec)
+static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* NC codec pins */
@@ -308,8 +308,10 @@ static int spitz_wm8750_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link spitz_dai = {
        .name = "wm8750",
        .stream_name = "WM8750",
-       .cpu_dai = &pxa_i2s_dai,
-       .codec_dai = &wm8750_dai,
+       .cpu_dai_name = "pxa-is2",
+       .codec_dai_name = "wm8750-hifi",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "wm8750-codec.0-001a",
        .init = spitz_wm8750_init,
        .ops = &spitz_ops,
 };
@@ -317,49 +319,10 @@ static struct snd_soc_dai_link spitz_dai = {
 /* spitz audio machine driver */
 static struct snd_soc_card snd_soc_spitz = {
        .name = "Spitz",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = &spitz_dai,
        .num_links = 1,
 };
 
-/* spitz audio subsystem */
-static struct snd_soc_device spitz_snd_devdata = {
-       .card = &snd_soc_spitz,
-       .codec_dev = &soc_codec_dev_wm8750,
-};
-
-/*
- * FIXME: This is a temporary bodge to avoid cross-tree merge issues.
- * New drivers should register the wm8750 I2C device in the machine
- * setup code (under arch/arm for ARM systems).
- */
-static int wm8750_i2c_register(void)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = 0x1b;
-       strlcpy(info.type, "wm8750", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(0);
-       if (!adapter) {
-               printk(KERN_ERR "can't get i2c adapter 0\n");
-               return -ENODEV;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               printk(KERN_ERR "can't add i2c device at 0x%x\n",
-               (unsigned int)info.addr);
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
 static struct platform_device *spitz_snd_device;
 
 static int __init spitz_init(void)
@@ -369,16 +332,11 @@ static int __init spitz_init(void)
        if (!(machine_is_spitz() || machine_is_borzoi() || machine_is_akita()))
                return -ENODEV;
 
-       ret = wm8750_i2c_setup();
-       if (ret != 0)
-               return ret;
-
        spitz_snd_device = platform_device_alloc("soc-audio", -1);
        if (!spitz_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(spitz_snd_device, &spitz_snd_devdata);
-       spitz_snd_devdata.dev = &spitz_snd_device->dev;
+       platform_set_drvdata(spitz_snd_device, &snd_soc_spitz);
        ret = platform_device_add(spitz_snd_device);
 
        if (ret)
index dbbd3e9d1637f0b9d14d8790973d5d9035e9d3e1..a3bfb2e8b70fb6946739837126dc49fed237f658 100644 (file)
@@ -33,7 +33,6 @@
 #include <mach/audio.h>
 
 #include "../codecs/wm9712.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 
 static struct snd_soc_card tosa;
@@ -80,7 +79,7 @@ static void tosa_ext_control(struct snd_soc_codec *codec)
 static int tosa_startup(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_codec *codec = rtd->socdev->card->codec;
+       struct snd_soc_codec *codec = rtd->card->codec;
 
        /* check the jack status at stream startup */
        tosa_ext_control(codec);
@@ -184,8 +183,9 @@ static const struct snd_kcontrol_new tosa_controls[] = {
                tosa_set_spk),
 };
 
-static int tosa_ac97_init(struct snd_soc_codec *codec)
+static int tosa_ac97_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        snd_soc_dapm_nc_pin(codec, "OUT3");
@@ -212,16 +212,20 @@ static struct snd_soc_dai_link tosa_dai[] = {
 {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-       .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
+       .cpu_dai_name = "pxa-ac97.0",
+       .codec_dai_name = "wm9712-hifi",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "wm9712-codec",
        .init = tosa_ac97_init,
        .ops = &tosa_ops,
 },
 {
        .name = "AC97 Aux",
        .stream_name = "AC97 Aux",
-       .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-       .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
+       .cpu_dai_name = "pxa-ac97.1",
+       .codec_dai_name = "wm9712-aux",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name = "wm9712-codec",
        .ops = &tosa_ops,
 },
 };
@@ -248,18 +252,12 @@ static int tosa_remove(struct platform_device *dev)
 
 static struct snd_soc_card tosa = {
        .name = "Tosa",
-       .platform = &pxa2xx_soc_platform,
        .dai_link = tosa_dai,
        .num_links = ARRAY_SIZE(tosa_dai),
        .probe = tosa_probe,
        .remove = tosa_remove,
 };
 
-static struct snd_soc_device tosa_snd_devdata = {
-       .card = &tosa,
-       .codec_dev = &soc_codec_dev_wm9712,
-};
-
 static struct platform_device *tosa_snd_device;
 
 static int __init tosa_init(void)
@@ -275,8 +273,7 @@ static int __init tosa_init(void)
                goto err_alloc;
        }
 
-       platform_set_drvdata(tosa_snd_device, &tosa_snd_devdata);
-       tosa_snd_devdata.dev = &tosa_snd_device->dev;
+       platform_set_drvdata(tosa_snd_device, &tosa);
        ret = platform_device_add(tosa_snd_device);
 
        if (!ret)
index 4e4d2fa8ddc5f056de46271aa0f97116350597b1..704f74b56ab61452bc621e0faa31fe4e83e4e0e6 100644 (file)
@@ -30,7 +30,6 @@
 #include <mach/z2.h>
 
 #include "../codecs/wm8750.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-i2s.h"
 
 static struct snd_soc_card snd_soc_z2;
@@ -39,8 +38,8 @@ static int z2_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
 
@@ -138,8 +137,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
 /*
  * Logic for a wm8750 as connected on a Z2 Device
  */
-static int z2_wm8750_init(struct snd_soc_codec *codec)
+static int z2_wm8750_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* NC codec pins */
@@ -160,7 +160,7 @@ static int z2_wm8750_init(struct snd_soc_codec *codec)
                goto err;
 
        /* Jack detection API stuff */
-       ret = snd_soc_jack_new(&snd_soc_z2, "Headset Jack", SND_JACK_HEADSET,
+       ret = snd_soc_jack_new(codec, "Headset Jack", SND_JACK_HEADSET,
                                &hs_jack);
        if (ret)
                goto err;
@@ -189,8 +189,10 @@ static struct snd_soc_ops z2_ops = {
 static struct snd_soc_dai_link z2_dai = {
        .name           = "wm8750",
        .stream_name    = "WM8750",
-       .cpu_dai        = &pxa_i2s_dai,
-       .codec_dai      = &wm8750_dai,
+       .cpu_dai_name   = "pxa-i2s",
+       .codec_dai_name = "wm8750-hifi",
+       .platform_name = "pxa-pcm-audio",
+       .codec_name     = "wm8750-codec.0-001a",
        .init           = z2_wm8750_init,
        .ops            = &z2_ops,
 };
@@ -198,17 +200,10 @@ static struct snd_soc_dai_link z2_dai = {
 /* z2 audio machine driver */
 static struct snd_soc_card snd_soc_z2 = {
        .name           = "Z2",
-       .platform       = &pxa2xx_soc_platform,
        .dai_link       = &z2_dai,
        .num_links      = 1,
 };
 
-/* z2 audio subsystem */
-static struct snd_soc_device z2_snd_devdata = {
-       .card           = &snd_soc_z2,
-       .codec_dev      = &soc_codec_dev_wm8750,
-};
-
 static struct platform_device *z2_snd_device;
 
 static int __init z2_init(void)
@@ -222,8 +217,7 @@ static int __init z2_init(void)
        if (!z2_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(z2_snd_device, &z2_snd_devdata);
-       z2_snd_devdata.dev = &z2_snd_device->dev;
+       platform_set_drvdata(z2_snd_device, &snd_soc_z2);
        ret = platform_device_add(z2_snd_device);
 
        if (ret)
index dd678ae24398bb7f336257a362b43e54eeb25a5f..d27e05af77594093e20b645ef203887683f8b8d5 100644 (file)
@@ -23,7 +23,6 @@
 #include <sound/soc-dapm.h>
 
 #include "../codecs/wm9713.h"
-#include "pxa2xx-pcm.h"
 #include "pxa2xx-ac97.h"
 #include "pxa-ssp.h"
 
@@ -71,10 +70,12 @@ static const struct snd_soc_dapm_route audio_map[] = {
        { "Multiactor", NULL, "SPKR" },
 };
 
-static int zylonite_wm9713_init(struct snd_soc_codec *codec)
+static int zylonite_wm9713_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        if (clk_pout)
-               snd_soc_dai_set_pll(&codec->dai[0], 0, 0,
+               snd_soc_dai_set_pll(rtd->codec_dai, 0, 0,
                                    clk_get_rate(pout), 0);
 
        snd_soc_dapm_new_controls(codec, zylonite_dapm_widgets,
@@ -94,8 +95,8 @@ static int zylonite_voice_hw_params(struct snd_pcm_substream *substream,
                                    struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int pll_out = 0;
        unsigned int wm9713_div = 0;
        int ret = 0;
@@ -163,21 +164,27 @@ static struct snd_soc_dai_link zylonite_dai[] = {
 {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-       .codec_dai = &wm9713_dai[WM9713_DAI_AC97_HIFI],
+       .codec_name = "wm9713-codec",
+       .platform_name = "pxa-pcm-audio",
+       .cpu_dai_name = "pxa-ac97.0",
+       .codec_name = "wm9713-hifi",
        .init = zylonite_wm9713_init,
 },
 {
        .name = "AC97 Aux",
        .stream_name = "AC97 Aux",
-       .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-       .codec_dai = &wm9713_dai[WM9713_DAI_AC97_AUX],
+       .codec_name = "wm9713-codec",
+       .platform_name = "pxa-pcm-audio",
+       .cpu_dai_name = "pxa-ac97.1",
+       .codec_name = "wm9713-aux",
 },
 {
        .name = "WM9713 Voice",
        .stream_name = "WM9713 Voice",
-       .cpu_dai = &pxa_ssp_dai[PXA_DAI_SSP3],
-       .codec_dai = &wm9713_dai[WM9713_DAI_PCM_VOICE],
+       .codec_name = "wm9713-codec",
+       .platform_name = "pxa-pcm-audio",
+       .cpu_dai_name = "pxa-ssp-dai.2",
+       .codec_name = "wm9713-voice",
        .ops = &zylonite_voice_ops,
 },
 };
@@ -248,14 +255,9 @@ static struct snd_soc_card zylonite = {
        .remove = &zylonite_remove,
        .suspend_post = &zylonite_suspend_post,
        .resume_pre = &zylonite_resume_pre,
-       .platform = &pxa2xx_soc_platform,
        .dai_link = zylonite_dai,
        .num_links = ARRAY_SIZE(zylonite_dai),
-};
-
-static struct snd_soc_device zylonite_snd_ac97_devdata = {
-       .card = &zylonite,
-       .codec_dev = &soc_codec_dev_wm9713,
+       .owner = THIS_MODULE,
 };
 
 static struct platform_device *zylonite_snd_ac97_device;
@@ -268,9 +270,7 @@ static int __init zylonite_init(void)
        if (!zylonite_snd_ac97_device)
                return -ENOMEM;
 
-       platform_set_drvdata(zylonite_snd_ac97_device,
-                            &zylonite_snd_ac97_devdata);
-       zylonite_snd_ac97_devdata.dev = &zylonite_snd_ac97_device->dev;
+       platform_set_drvdata(zylonite_snd_ac97_device, &zylonite);
 
        ret = platform_device_add(zylonite_snd_ac97_device);
        if (ret != 0)
index 213963ac3c28ba4aaa236c399f5211356f469625..1cdc37bd58f4958e7be6abbf8903380868dacb22 100644 (file)
@@ -131,3 +131,21 @@ config SND_S3C64XX_SOC_SMARTQ
        depends on SND_S3C24XX_SOC && MACH_SMARTQ
        select SND_S3C64XX_SOC_I2S
        select SND_SOC_WM8750
+
+config SND_S5PC110_SOC_AQUILA_WM8994
+       tristate "SoC I2S Audio support for AQUILA - WM8994"
+       depends on SND_S3C24XX_SOC && MACH_AQUILA
+       select SND_S3C64XX_SOC_I2S_V4
+       select SND_SOC_WM8994
+       help
+         Say Y if you want to add support for SoC audio on aquila
+         with the WM8994.
+
+config SND_S5PV210_SOC_GONI_WM8994
+       tristate "SoC I2S Audio support for GONI - WM8994"
+       depends on SND_S3C24XX_SOC && MACH_GONI
+       select SND_S3C64XX_SOC_I2S_V4
+       select SND_SOC_WM8994
+       help
+         Say Y if you want to add support for SoC audio on goni
+         with the WM8994.
index 50172c385d90b89e7fc327a596efc235f95cca55..47ed6d70b90bf84c80a8051129fe78d929fc96f2 100644 (file)
@@ -30,6 +30,8 @@ snd-soc-s3c24xx-simtec-tlv320aic23-objs := s3c24xx_simtec_tlv320aic23.o
 snd-soc-smdk64xx-wm8580-objs := smdk64xx_wm8580.o
 snd-soc-smdk-wm9713-objs := smdk_wm9713.o
 snd-soc-s3c64xx-smartq-wm8987-objs := smartq_wm8987.o
+snd-soc-aquila-wm8994-objs := aquila_wm8994.o
+snd-soc-goni-wm8994-objs := goni_wm8994.o
 
 obj-$(CONFIG_SND_S3C24XX_SOC_JIVE_WM8750) += snd-soc-jive-wm8750.o
 obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
@@ -43,3 +45,5 @@ obj-$(CONFIG_SND_S3C24XX_SOC_SIMTEC_TLV320AIC23) += snd-soc-s3c24xx-simtec-tlv32
 obj-$(CONFIG_SND_S3C64XX_SOC_WM8580) += snd-soc-smdk64xx-wm8580.o
 obj-$(CONFIG_SND_SOC_SMDK_WM9713) += snd-soc-smdk-wm9713.o
 obj-$(CONFIG_SND_S3C64XX_SOC_SMARTQ) += snd-soc-s3c64xx-smartq-wm8987.o
+obj-$(CONFIG_SND_S5PC110_SOC_AQUILA_WM8994) += snd-soc-aquila-wm8994.o
+obj-$(CONFIG_SND_S5PV210_SOC_GONI_WM8994) += snd-soc-goni-wm8994.o
diff --git a/sound/soc/s3c24xx/aquila_wm8994.c b/sound/soc/s3c24xx/aquila_wm8994.c
new file mode 100644 (file)
index 0000000..235d197
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * aquila_wm8994.c
+ *
+ * Copyright (C) 2010 Samsung Electronics Co.Ltd
+ * Author: Chanwoo Choi <cw00.choi@samsung.com>
+ *
+ *  This program is free software; you can redistribute  it and/or modify it
+ *  under  the terms of  the GNU General  Public License as published by the
+ *  Free Software Foundation;  either version 2 of the  License, or (at your
+ *  option) any later version.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/jack.h>
+#include <asm/mach-types.h>
+#include <mach/gpio.h>
+#include <mach/regs-clock.h>
+
+#include <linux/mfd/wm8994/core.h>
+#include <linux/mfd/wm8994/registers.h>
+#include "../codecs/wm8994.h"
+#include "s3c-dma.h"
+#include "s3c64xx-i2s.h"
+
+static struct snd_soc_card aquila;
+static struct platform_device *aquila_snd_device;
+
+/* 3.5 pie jack */
+static struct snd_soc_jack jack;
+
+/* 3.5 pie jack detection DAPM pins */
+static struct snd_soc_jack_pin jack_pins[] = {
+       {
+               .pin = "Headset Mic",
+               .mask = SND_JACK_MICROPHONE,
+       }, {
+               .pin = "Headset Stereophone",
+               .mask = SND_JACK_HEADPHONE | SND_JACK_MECHANICAL |
+                       SND_JACK_AVOUT,
+       },
+};
+
+/* 3.5 pie jack detection gpios */
+static struct snd_soc_jack_gpio jack_gpios[] = {
+       {
+               .gpio = S5PV210_GPH0(6),
+               .name = "DET_3.5",
+               .report = SND_JACK_HEADSET | SND_JACK_MECHANICAL |
+                       SND_JACK_AVOUT,
+               .debounce_time = 200,
+       },
+};
+
+static const struct snd_soc_dapm_widget aquila_dapm_widgets[] = {
+       SND_SOC_DAPM_SPK("Ext Spk", NULL),
+       SND_SOC_DAPM_SPK("Ext Rcv", NULL),
+       SND_SOC_DAPM_HP("Headset Stereophone", NULL),
+       SND_SOC_DAPM_MIC("Headset Mic", NULL),
+       SND_SOC_DAPM_MIC("Main Mic", NULL),
+       SND_SOC_DAPM_MIC("2nd Mic", NULL),
+       SND_SOC_DAPM_LINE("Radio In", NULL),
+};
+
+static const struct snd_soc_dapm_route aquila_dapm_routes[] = {
+       {"Ext Spk", NULL, "SPKOUTLP"},
+       {"Ext Spk", NULL, "SPKOUTLN"},
+
+       {"Ext Rcv", NULL, "HPOUT2N"},
+       {"Ext Rcv", NULL, "HPOUT2P"},
+
+       {"Headset Stereophone", NULL, "HPOUT1L"},
+       {"Headset Stereophone", NULL, "HPOUT1R"},
+
+       {"IN1RN", NULL, "Headset Mic"},
+       {"IN1RP", NULL, "Headset Mic"},
+
+       {"IN1RN", NULL, "2nd Mic"},
+       {"IN1RP", NULL, "2nd Mic"},
+
+       {"IN1LN", NULL, "Main Mic"},
+       {"IN1LP", NULL, "Main Mic"},
+
+       {"IN2LN", NULL, "Radio In"},
+       {"IN2RN", NULL, "Radio In"},
+};
+
+static int aquila_wm8994_init(struct snd_soc_pcm_runtime *rtd)
+{
+       struct snd_soc_codec *codec = rtd->codec;
+       int ret;
+
+       /* add aquila specific widgets */
+       snd_soc_dapm_new_controls(codec, aquila_dapm_widgets,
+                       ARRAY_SIZE(aquila_dapm_widgets));
+
+       /* set up aquila specific audio routes */
+       snd_soc_dapm_add_routes(codec, aquila_dapm_routes,
+                       ARRAY_SIZE(aquila_dapm_routes));
+
+       /* set endpoints to not connected */
+       snd_soc_dapm_nc_pin(codec, "IN2LP:VXRN");
+       snd_soc_dapm_nc_pin(codec, "IN2RP:VXRP");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT1N");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT1P");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT2N");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT2P");
+       snd_soc_dapm_nc_pin(codec, "SPKOUTRN");
+       snd_soc_dapm_nc_pin(codec, "SPKOUTRP");
+
+       snd_soc_dapm_sync(codec);
+
+       /* Headset jack detection */
+       ret = snd_soc_jack_new(&aquila, "Headset Jack",
+                       SND_JACK_HEADSET | SND_JACK_MECHANICAL | SND_JACK_AVOUT,
+                       &jack);
+       if (ret)
+               return ret;
+
+       ret = snd_soc_jack_add_pins(&jack, ARRAY_SIZE(jack_pins), jack_pins);
+       if (ret)
+               return ret;
+
+       ret = snd_soc_jack_add_gpios(&jack, ARRAY_SIZE(jack_gpios), jack_gpios);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static int aquila_hifi_hw_params(struct snd_pcm_substream *substream,
+               struct snd_pcm_hw_params *params)
+{
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       unsigned int pll_out = 24000000;
+       int ret = 0;
+
+       /* set the cpu DAI configuration */
+       ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
+                       SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+
+       /* set the cpu system clock */
+       ret = snd_soc_dai_set_sysclk(cpu_dai, S3C64XX_CLKSRC_PCLK,
+                       0, SND_SOC_CLOCK_IN);
+       if (ret < 0)
+               return ret;
+
+       /* set codec DAI configuration */
+       ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
+                       SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec FLL */
+       ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL1, 0, pll_out,
+                       params_rate(params) * 256);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec system clock */
+       ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+                       params_rate(params) * 256, SND_SOC_CLOCK_IN);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static struct snd_soc_ops aquila_hifi_ops = {
+       .hw_params = aquila_hifi_hw_params,
+};
+
+static int aquila_voice_hw_params(struct snd_pcm_substream *substream,
+               struct snd_pcm_hw_params *params)
+{
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       unsigned int pll_out = 24000000;
+       int ret = 0;
+
+       if (params_rate(params) != 8000)
+               return -EINVAL;
+
+       /* set codec DAI configuration */
+       ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_LEFT_J |
+                       SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec FLL */
+       ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL2, 0, pll_out,
+                       params_rate(params) * 256);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec system clock */
+       ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL2,
+                       params_rate(params) * 256, SND_SOC_CLOCK_IN);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static struct snd_soc_dai_driver voice_dai = {
+       .name = "aquila-voice-dai",
+       .playback = {
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_8000,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,},
+       .capture = {
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_8000,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,},
+};
+
+static struct snd_soc_ops aquila_voice_ops = {
+       .hw_params = aquila_voice_hw_params,
+};
+
+static struct snd_soc_dai_link aquila_dai[] = {
+{
+       .name = "WM8994",
+       .stream_name = "WM8994 HiFi",
+       .cpu_dai_name = "s3c64xx-i2s-v4",
+       .codec_dai_name = "wm8994-hifi",
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8994-codec.0-0x1a",
+       .init = aquila_wm8994_init,
+       .ops = &aquila_hifi_ops,
+}, {
+       .name = "WM8994 Voice",
+       .stream_name = "Voice",
+       .cpu_dai_name = "aquila-voice-dai",
+       .codec_dai_name = "wm8994-voice",
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8994-codec.0-0x1a",
+       .ops = &aquila_voice_ops,
+},
+};
+
+static struct snd_soc_card aquila = {
+       .name = "aquila",
+       .dai_link = aquila_dai,
+       .num_links = ARRAY_SIZE(aquila_dai),
+};
+
+static int __init aquila_init(void)
+{
+       int ret;
+
+       if (!machine_is_aquila())
+               return -ENODEV;
+
+       aquila_snd_device = platform_device_alloc("soc-audio", -1);
+       if (!aquila_snd_device)
+               return -ENOMEM;
+
+       /* register voice DAI here */
+       ret = snd_soc_register_dai(&aquila_snd_device->dev, &voice_dai);
+       if (ret)
+               return ret;
+
+       platform_set_drvdata(aquila_snd_device, &aquila);
+       ret = platform_device_add(aquila_snd_device);
+
+       if (ret)
+               platform_device_put(aquila_snd_device);
+
+       return ret;
+}
+
+static void __exit aquila_exit(void)
+{
+       platform_device_unregister(aquila_snd_device);
+}
+
+module_init(aquila_init);
+module_exit(aquila_exit);
+
+/* Module information */
+MODULE_DESCRIPTION("ALSA SoC WM8994 Aquila(S5PC110)");
+MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/s3c24xx/goni_wm8994.c b/sound/soc/s3c24xx/goni_wm8994.c
new file mode 100644 (file)
index 0000000..694f702
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * goni_wm8994.c
+ *
+ * Copyright (C) 2010 Samsung Electronics Co.Ltd
+ * Author: Chanwoo Choi <cw00.choi@samsung.com>
+ *
+ *  This program is free software; you can redistribute  it and/or modify it
+ *  under  the terms of  the GNU General  Public License as published by the
+ *  Free Software Foundation;  either version 2 of the  License, or (at your
+ *  option) any later version.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/jack.h>
+#include <asm/mach-types.h>
+#include <mach/gpio.h>
+#include <mach/regs-clock.h>
+
+#include <linux/mfd/wm8994/core.h>
+#include <linux/mfd/wm8994/registers.h>
+#include "../codecs/wm8994.h"
+#include "s3c-dma.h"
+#include "s3c64xx-i2s.h"
+
+static struct snd_soc_card goni;
+static struct platform_device *goni_snd_device;
+
+/* 3.5 pie jack */
+static struct snd_soc_jack jack;
+
+/* 3.5 pie jack detection DAPM pins */
+static struct snd_soc_jack_pin jack_pins[] = {
+       {
+               .pin = "Headset Mic",
+               .mask = SND_JACK_MICROPHONE,
+       }, {
+               .pin = "Headset Stereophone",
+               .mask = SND_JACK_HEADPHONE | SND_JACK_MECHANICAL |
+                       SND_JACK_AVOUT,
+       },
+};
+
+/* 3.5 pie jack detection gpios */
+static struct snd_soc_jack_gpio jack_gpios[] = {
+       {
+               .gpio = S5PV210_GPH0(6),
+               .name = "DET_3.5",
+               .report = SND_JACK_HEADSET | SND_JACK_MECHANICAL |
+                       SND_JACK_AVOUT,
+               .debounce_time = 200,
+       },
+};
+
+static const struct snd_soc_dapm_widget goni_dapm_widgets[] = {
+       SND_SOC_DAPM_SPK("Ext Left Spk", NULL),
+       SND_SOC_DAPM_SPK("Ext Right Spk", NULL),
+       SND_SOC_DAPM_SPK("Ext Rcv", NULL),
+       SND_SOC_DAPM_HP("Headset Stereophone", NULL),
+       SND_SOC_DAPM_MIC("Headset Mic", NULL),
+       SND_SOC_DAPM_MIC("Main Mic", NULL),
+       SND_SOC_DAPM_MIC("2nd Mic", NULL),
+       SND_SOC_DAPM_LINE("Radio In", NULL),
+};
+
+static const struct snd_soc_dapm_route goni_dapm_routes[] = {
+       {"Ext Left Spk", NULL, "SPKOUTLP"},
+       {"Ext Left Spk", NULL, "SPKOUTLN"},
+
+       {"Ext Right Spk", NULL, "SPKOUTRP"},
+       {"Ext Right Spk", NULL, "SPKOUTRN"},
+
+       {"Ext Rcv", NULL, "HPOUT2N"},
+       {"Ext Rcv", NULL, "HPOUT2P"},
+
+       {"Headset Stereophone", NULL, "HPOUT1L"},
+       {"Headset Stereophone", NULL, "HPOUT1R"},
+
+       {"IN1RN", NULL, "Headset Mic"},
+       {"IN1RP", NULL, "Headset Mic"},
+
+       {"IN1RN", NULL, "2nd Mic"},
+       {"IN1RP", NULL, "2nd Mic"},
+
+       {"IN1LN", NULL, "Main Mic"},
+       {"IN1LP", NULL, "Main Mic"},
+
+       {"IN2LN", NULL, "Radio In"},
+       {"IN2RN", NULL, "Radio In"},
+};
+
+static int goni_wm8994_init(struct snd_soc_pcm_runtime *rtd)
+{
+       struct snd_soc_codec *codec = rtd->codec;
+       int ret;
+
+       /* add goni specific widgets */
+       snd_soc_dapm_new_controls(codec, goni_dapm_widgets,
+                       ARRAY_SIZE(goni_dapm_widgets));
+
+       /* set up goni specific audio routes */
+       snd_soc_dapm_add_routes(codec, goni_dapm_routes,
+                       ARRAY_SIZE(goni_dapm_routes));
+
+       /* set endpoints to not connected */
+       snd_soc_dapm_nc_pin(codec, "IN2LP:VXRN");
+       snd_soc_dapm_nc_pin(codec, "IN2RP:VXRP");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT1N");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT1P");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT2N");
+       snd_soc_dapm_nc_pin(codec, "LINEOUT2P");
+
+       snd_soc_dapm_sync(codec);
+
+       /* Headset jack detection */
+       ret = snd_soc_jack_new(&goni, "Headset Jack",
+                       SND_JACK_HEADSET | SND_JACK_MECHANICAL | SND_JACK_AVOUT,
+                       &jack);
+       if (ret)
+               return ret;
+
+       ret = snd_soc_jack_add_pins(&jack, ARRAY_SIZE(jack_pins), jack_pins);
+       if (ret)
+               return ret;
+
+       ret = snd_soc_jack_add_gpios(&jack, ARRAY_SIZE(jack_gpios), jack_gpios);
+       if (ret)
+               return ret;
+
+       return 0;
+}
+
+static int goni_hifi_hw_params(struct snd_pcm_substream *substream,
+               struct snd_pcm_hw_params *params)
+{
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       unsigned int pll_out = 24000000;
+       int ret = 0;
+
+       /* set the cpu DAI configuration */
+       ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
+                       SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+
+       /* set the cpu system clock */
+       ret = snd_soc_dai_set_sysclk(cpu_dai, S3C64XX_CLKSRC_PCLK,
+                       0, SND_SOC_CLOCK_IN);
+       if (ret < 0)
+               return ret;
+
+       /* set codec DAI configuration */
+       ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
+                       SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec FLL */
+       ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL1, 0, pll_out,
+                       params_rate(params) * 256);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec system clock */
+       ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL1,
+                       params_rate(params) * 256, SND_SOC_CLOCK_IN);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static struct snd_soc_ops goni_hifi_ops = {
+       .hw_params = goni_hifi_hw_params,
+};
+
+static int goni_voice_hw_params(struct snd_pcm_substream *substream,
+               struct snd_pcm_hw_params *params)
+{
+       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       unsigned int pll_out = 24000000;
+       int ret = 0;
+
+       if (params_rate(params) != 8000)
+               return -EINVAL;
+
+       /* set codec DAI configuration */
+       ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_LEFT_J |
+                       SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec FLL */
+       ret = snd_soc_dai_set_pll(codec_dai, WM8994_FLL2, 0, pll_out,
+                       params_rate(params) * 256);
+       if (ret < 0)
+               return ret;
+
+       /* set the codec system clock */
+       ret = snd_soc_dai_set_sysclk(codec_dai, WM8994_SYSCLK_FLL2,
+                       params_rate(params) * 256, SND_SOC_CLOCK_IN);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static struct snd_soc_dai_driver voice_dai = {
+       .name = "goni-voice-dai",
+       .id = 0,
+       .playback = {
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_8000,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,},
+       .capture = {
+               .channels_min = 1,
+               .channels_max = 2,
+               .rates = SNDRV_PCM_RATE_8000,
+               .formats = SNDRV_PCM_FMTBIT_S16_LE,},
+};
+
+static struct snd_soc_ops goni_voice_ops = {
+       .hw_params = goni_voice_hw_params,
+};
+
+static struct snd_soc_dai_link goni_dai[] = {
+{
+       .name = "WM8994",
+       .stream_name = "WM8994 HiFi",
+       .cpu_dai_name = "s3c64xx-i2s-v4",
+       .codec_dai_name = "wm8994-hifi",
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8994-codec.0-0x1a",
+       .init = goni_wm8994_init,
+       .ops = &goni_hifi_ops,
+}, {
+       .name = "WM8994 Voice",
+       .stream_name = "Voice",
+       .cpu_dai_name = "goni-voice-dai",
+       .codec_dai_name = "wm8994-voice",
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8994-codec.0-0x1a",
+       .ops = &goni_voice_ops,
+},
+};
+
+static struct snd_soc_card goni = {
+       .name = "goni",
+       .dai_link = goni_dai,
+       .num_links = ARRAY_SIZE(goni_dai),
+};
+
+static int __init goni_init(void)
+{
+       int ret;
+
+       if (!machine_is_goni())
+               return -ENODEV;
+
+       goni_snd_device = platform_device_alloc("soc-audio", -1);
+       if (!goni_snd_device)
+               return -ENOMEM;
+
+       /* register voice DAI here */
+       ret = snd_soc_register_dai(&goni_snd_device->dev, &voice_dai);
+       if (ret)
+               return ret;
+
+       platform_set_drvdata(goni_snd_device, &goni);
+       ret = platform_device_add(goni_snd_device);
+
+       if (ret)
+               platform_device_put(goni_snd_device);
+
+       return ret;
+}
+
+static void __exit goni_exit(void)
+{
+       platform_device_unregister(goni_snd_device);
+}
+
+module_init(goni_init);
+module_exit(goni_exit);
+
+/* Module information */
+MODULE_DESCRIPTION("ALSA SoC WM8994 GONI(S5PV210)");
+MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>");
+MODULE_LICENSE("GPL");
index 8c108b121c10de97f4fbc2f786b54e40c23f9b8f..49605cd83947efc04f7cc6f7cbd4b4bc88614e0d 100644 (file)
@@ -49,8 +49,8 @@ static int jive_hw_params(struct snd_pcm_substream *substream,
                          struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        struct s3c_i2sv2_rate_calc div;
        unsigned int clk = 0;
        int ret = 0;
@@ -108,8 +108,9 @@ static struct snd_soc_ops jive_ops = {
        .hw_params      = jive_hw_params,
 };
 
-static int jive_wm8750_init(struct snd_soc_codec *codec)
+static int jive_wm8750_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* These endpoints are not being used. */
@@ -138,8 +139,10 @@ static int jive_wm8750_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link jive_dai = {
        .name           = "wm8750",
        .stream_name    = "WM8750",
-       .cpu_dai        = &s3c2412_i2s_dai,
-       .codec_dai      = &wm8750_dai,
+       .cpu_dai_name   = "s3c2412-i2s",
+       .codec_dai_name = "wm8750-hifi",
+       .platform_name  = "s3c24xx-pcm-audio",
+       .codec_name     = "wm8750-codec.0-0x1a",
        .init           = jive_wm8750_init,
        .ops            = &jive_ops,
 };
@@ -147,17 +150,10 @@ static struct snd_soc_dai_link jive_dai = {
 /* jive audio machine driver */
 static struct snd_soc_card snd_soc_machine_jive = {
        .name           = "Jive",
-       .platform       = &s3c24xx_soc_platform,
        .dai_link       = &jive_dai,
        .num_links      = 1,
 };
 
-/* jive audio subsystem */
-static struct snd_soc_device jive_snd_devdata = {
-       .card           = &snd_soc_machine_jive,
-       .codec_dev      = &soc_codec_dev_wm8750,
-};
-
 static struct platform_device *jive_snd_device;
 
 static int __init jive_init(void)
@@ -173,8 +169,7 @@ static int __init jive_init(void)
        if (!jive_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(jive_snd_device, &jive_snd_devdata);
-       jive_snd_devdata.dev = &jive_snd_device->dev;
+       platform_set_drvdata(jive_snd_device, &snd_soc_machine_jive);
        ret = platform_device_add(jive_snd_device);
 
        if (ret)
index ffa954fe6931bea522fb02360b8f4877524884bb..abe64abe8c8423ad5f403532a9d40d8234d5b15b 100644 (file)
@@ -23,7 +23,6 @@
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
 
-#include "../codecs/ac97.h"
 #include "s3c-dma.h"
 #include "s3c-ac97.h"
 
@@ -33,23 +32,19 @@ static struct snd_soc_dai_link ln2440sbc_dai[] = {
 {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &s3c_ac97_dai[S3C_AC97_DAI_PCM],
-       .codec_dai = &ac97_dai,
+       .cpu_dai_name = "s3c-ac97",
+       .codec_dai_name = "ac97-hifi",
+       .codec_name = "ac97-codec",
+       .platform_name = "s3c24xx-pcm-audio",
 },
 };
 
 static struct snd_soc_card ln2440sbc = {
        .name = "LN2440SBC",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = ln2440sbc_dai,
        .num_links = ARRAY_SIZE(ln2440sbc_dai),
 };
 
-static struct snd_soc_device ln2440sbc_snd_ac97_devdata = {
-       .card = &ln2440sbc,
-       .codec_dev = &soc_codec_dev_ac97,
-};
-
 static struct platform_device *ln2440sbc_snd_ac97_device;
 
 static int __init ln2440sbc_init(void)
@@ -60,9 +55,7 @@ static int __init ln2440sbc_init(void)
        if (!ln2440sbc_snd_ac97_device)
                return -ENOMEM;
 
-       platform_set_drvdata(ln2440sbc_snd_ac97_device,
-                               &ln2440sbc_snd_ac97_devdata);
-       ln2440sbc_snd_ac97_devdata.dev = &ln2440sbc_snd_ac97_device->dev;
+       platform_set_drvdata(ln2440sbc_snd_ac97_device, &ln2440sbc);
        ret = platform_device_add(ln2440sbc_snd_ac97_device);
 
        if (ret)
index 209c25994c7e41b78b92fe5876cb8be28a7cecc3..c457bfd8297c01bb6f9b61d2316c3a0113a9e086 100644 (file)
@@ -41,8 +41,8 @@ static int neo1973_gta02_hifi_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int pll_out = 0, bclk = 0;
        int ret = 0;
        unsigned long iis_clkrate;
@@ -130,7 +130,7 @@ static int neo1973_gta02_hifi_hw_params(struct snd_pcm_substream *substream,
 static int neo1973_gta02_hifi_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        /* disable the PLL */
        return snd_soc_dai_set_pll(codec_dai, WM8753_PLL1, 0, 0, 0);
@@ -149,7 +149,7 @@ static int neo1973_gta02_voice_hw_params(
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        unsigned int pcmdiv = 0;
        int ret = 0;
        unsigned long iis_clkrate;
@@ -194,7 +194,7 @@ static int neo1973_gta02_voice_hw_params(
 static int neo1973_gta02_voice_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        /* disable the PLL */
        return snd_soc_dai_set_pll(codec_dai, WM8753_PLL2, 0, 0, 0);
@@ -262,7 +262,7 @@ static int lm4853_event(struct snd_soc_dapm_widget *w,
                        struct snd_kcontrol *k,
                        int event)
 {
-       gpio_set_value(GTA02_GPIO_AMP_SHUT, SND_SOC_DAPM_EVENT_OFF(value));
+       gpio_set_value(GTA02_GPIO_AMP_SHUT, SND_SOC_DAPM_EVENT_OFF(event));
 
        return 0;
 }
@@ -330,8 +330,9 @@ static const struct snd_kcontrol_new wm8753_neo1973_gta02_controls[] = {
  * This is an example machine initialisation for a wm8753 connected to a
  * neo1973 GTA02.
  */
-static int neo1973_gta02_wm8753_init(struct snd_soc_codec *codec)
+static int neo1973_gta02_wm8753_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        /* set up NC codec pins */
@@ -378,9 +379,8 @@ static int neo1973_gta02_wm8753_init(struct snd_soc_codec *codec)
 /*
  * BT Codec DAI
  */
-static struct snd_soc_dai bt_dai = {
-       .name = "Bluetooth",
-       .id = 0,
+static struct snd_soc_dai_driver bt_dai = {
+       .name = "bluetooth-dai",
        .playback = {
                .channels_min = 1,
                .channels_max = 1,
@@ -397,32 +397,30 @@ static struct snd_soc_dai_link neo1973_gta02_dai[] = {
 { /* Hifi Playback - for similatious use with voice below */
        .name = "WM8753",
        .stream_name = "WM8753 HiFi",
-       .cpu_dai = &s3c24xx_i2s_dai,
-       .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
+       .cpu_dai_name = "s3c24xx-i2s",
+       .codec_dai_name = "wm8753-hifi",
        .init = neo1973_gta02_wm8753_init,
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8753-codec.0-0x1a",
        .ops = &neo1973_gta02_hifi_ops,
 },
 { /* Voice via BT */
        .name = "Bluetooth",
        .stream_name = "Voice",
-       .cpu_dai = &bt_dai,
-       .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
+       .cpu_dai_name = "bluetooth-dai",
+       .codec_dai_name = "wm8753-voice",
        .ops = &neo1973_gta02_voice_ops,
+       .codec_name = "wm8753-codec.0-0x1a",
+       .platform_name = "s3c24xx-pcm-audio",
 },
 };
 
 static struct snd_soc_card neo1973_gta02 = {
        .name = "neo1973-gta02",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = neo1973_gta02_dai,
        .num_links = ARRAY_SIZE(neo1973_gta02_dai),
 };
 
-static struct snd_soc_device neo1973_gta02_snd_devdata = {
-       .card = &neo1973_gta02,
-       .codec_dev = &soc_codec_dev_wm8753,
-};
-
 static struct platform_device *neo1973_gta02_snd_device;
 
 static int __init neo1973_gta02_init(void)
@@ -435,18 +433,18 @@ static int __init neo1973_gta02_init(void)
                return -ENODEV;
        }
 
-       /* register bluetooth DAI here */
-       ret = snd_soc_register_dai(&bt_dai);
-       if (ret)
-               return ret;
-
        neo1973_gta02_snd_device = platform_device_alloc("soc-audio", -1);
        if (!neo1973_gta02_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(neo1973_gta02_snd_device,
-                       &neo1973_gta02_snd_devdata);
-       neo1973_gta02_snd_devdata.dev = &neo1973_gta02_snd_device->dev;
+       /* register bluetooth DAI here */
+       ret = snd_soc_register_dai(&neo1973_gta02_snd_device->dev, -1, &bt_dai);
+       if (ret) {
+               platform_device_put(neo1973_gta02_snd_device);
+               return ret;
+       }
+
+       platform_set_drvdata(neo1973_gta02_snd_device, &neo1973_gta02);
        ret = platform_device_add(neo1973_gta02_snd_device);
 
        if (ret) {
@@ -461,7 +459,7 @@ static int __init neo1973_gta02_init(void)
                goto err_unregister_device;
        }
 
-       ret = gpio_direction_output(GTA02_GPIO_AMP_HP_IN, 1);
+       ret = gpio_direction_output(GTA02_GPIO_HP_IN, 1);
        if (ret) {
                pr_err("gta02_wm8753: Failed to configure GPIO %d\n", GTA02_GPIO_HP_IN);
                goto err_free_gpio_hp_in;
@@ -493,7 +491,7 @@ module_init(neo1973_gta02_init);
 
 static void __exit neo1973_gta02_exit(void)
 {
-       snd_soc_unregister_dai(&bt_dai);
+       snd_soc_unregister_dai(&neo1973_gta02_snd_device->dev, -1);
        platform_device_unregister(neo1973_gta02_snd_device);
        gpio_free(GTA02_GPIO_HP_IN);
        gpio_free(GTA02_GPIO_AMP_SHUT);
index 0cb4f86f6d1eb65be9f5e4864f70b1a42e830fe8..d7a39a0fe99b6d809e473d78696b84577d26211c 100644 (file)
@@ -57,8 +57,8 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int pll_out = 0, bclk = 0;
        int ret = 0;
        unsigned long iis_clkrate;
@@ -147,7 +147,7 @@ static int neo1973_hifi_hw_params(struct snd_pcm_substream *substream,
 static int neo1973_hifi_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        pr_debug("Entered %s\n", __func__);
 
@@ -167,7 +167,7 @@ static int neo1973_voice_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        unsigned int pcmdiv = 0;
        int ret = 0;
        unsigned long iis_clkrate;
@@ -213,7 +213,7 @@ static int neo1973_voice_hw_params(struct snd_pcm_substream *substream,
 static int neo1973_voice_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        pr_debug("Entered %s\n", __func__);
 
@@ -499,8 +499,9 @@ static const struct snd_kcontrol_new wm8753_neo1973_controls[] = {
  * neo1973 II. It is missing logic to detect hp/mic insertions and logic
  * to re-route the audio in such an event.
  */
-static int neo1973_wm8753_init(struct snd_soc_codec *codec)
+static int neo1973_wm8753_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int err;
 
        pr_debug("Entered %s\n", __func__);
@@ -538,8 +539,7 @@ static int neo1973_wm8753_init(struct snd_soc_codec *codec)
  * BT Codec DAI
  */
 static struct snd_soc_dai bt_dai = {
-       .name = "Bluetooth",
-       .id = 0,
+       .name = "bluetooth-dai",
        .playback = {
                .channels_min = 1,
                .channels_max = 1,
@@ -556,32 +556,30 @@ static struct snd_soc_dai_link neo1973_dai[] = {
 { /* Hifi Playback - for similatious use with voice below */
        .name = "WM8753",
        .stream_name = "WM8753 HiFi",
-       .cpu_dai = &s3c24xx_i2s_dai,
-       .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
+       .platform_name = "s3c24xx-pcm-audio",
+       .cpu_dai_name = "s3c24xx-i2s",
+       .codec_dai_name = "wm8753-hifi",
+       .codec_name = "wm8753-codec.0-0x1a",
        .init = neo1973_wm8753_init,
        .ops = &neo1973_hifi_ops,
 },
 { /* Voice via BT */
        .name = "Bluetooth",
        .stream_name = "Voice",
-       .cpu_dai = &bt_dai,
-       .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
+       .platform_name = "s3c24xx-pcm-audio",
+       .cpu_dai_name = "bluetooth-dai",
+       .codec_dai_name = "wm8753-voice",
+       .codec_name = "wm8753-codec.0-0x1a",
        .ops = &neo1973_voice_ops,
 },
 };
 
 static struct snd_soc_card neo1973 = {
        .name = "neo1973",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = neo1973_dai,
        .num_links = ARRAY_SIZE(neo1973_dai),
 };
 
-static struct snd_soc_device neo1973_snd_devdata = {
-       .card = &neo1973,
-       .codec_dev = &soc_codec_dev_wm8753,
-};
-
 static int lm4857_i2c_probe(struct i2c_client *client,
                            const struct i2c_device_id *id)
 {
@@ -673,8 +671,7 @@ static int __init neo1973_init(void)
        if (!neo1973_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(neo1973_snd_device, &neo1973_snd_devdata);
-       neo1973_snd_devdata.dev = &neo1973_snd_device->dev;
+       platform_set_drvdata(neo1973_snd_device, &neo1973);
        ret = platform_device_add(neo1973_snd_device);
 
        if (ret) {
index 31f6d45b6384f2f0e0e4e5a351acc79a6f47520b..26f4ed90a0eecdced8cc981bd4dc29787d9d2ae5 100644 (file)
@@ -222,7 +222,7 @@ static int s3c_ac97_hw_params(struct snd_pcm_substream *substream,
                                  struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        struct s3c_dma_params *dma_data;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
@@ -241,7 +241,7 @@ static int s3c_ac97_trigger(struct snd_pcm_substream *substream, int cmd,
        u32 ac_glbctrl;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct s3c_dma_params *dma_data =
-               snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        ac_glbctrl = readl(s3c_ac97.regs + S3C_AC97_GLBCTRL);
        if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
@@ -277,7 +277,7 @@ static int s3c_ac97_hw_mic_params(struct snd_pcm_substream *substream,
                                      struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                return -ENODEV;
@@ -293,7 +293,7 @@ static int s3c_ac97_mic_trigger(struct snd_pcm_substream *substream,
        u32 ac_glbctrl;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct s3c_dma_params *dma_data =
-               snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        ac_glbctrl = readl(s3c_ac97.regs + S3C_AC97_GLBCTRL);
        ac_glbctrl &= ~S3C_AC97_GLBCTRL_MICINTM_MASK;
@@ -328,10 +328,9 @@ static struct snd_soc_dai_ops s3c_ac97_mic_dai_ops = {
        .trigger        = s3c_ac97_mic_trigger,
 };
 
-struct snd_soc_dai s3c_ac97_dai[] = {
+static struct snd_soc_dai_driver s3c_ac97_dai[] = {
        [S3C_AC97_DAI_PCM] = {
                .name = "s3c-ac97",
-               .id = S3C_AC97_DAI_PCM,
                .ac97_control = 1,
                .playback = {
                        .stream_name = "AC97 Playback",
@@ -349,7 +348,6 @@ struct snd_soc_dai s3c_ac97_dai[] = {
        },
        [S3C_AC97_DAI_MIC] = {
                .name = "s3c-ac97-mic",
-               .id = S3C_AC97_DAI_MIC,
                .ac97_control = 1,
                .capture = {
                        .stream_name = "AC97 Mic Capture",
@@ -360,7 +358,6 @@ struct snd_soc_dai s3c_ac97_dai[] = {
                .ops = &s3c_ac97_mic_dai_ops,
        },
 };
-EXPORT_SYMBOL_GPL(s3c_ac97_dai);
 
 static __devinit int s3c_ac97_probe(struct platform_device *pdev)
 {
@@ -449,10 +446,8 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
                goto err4;
        }
 
-       s3c_ac97_dai[S3C_AC97_DAI_PCM].dev = &pdev->dev;
-       s3c_ac97_dai[S3C_AC97_DAI_MIC].dev = &pdev->dev;
-
-       ret = snd_soc_register_dais(s3c_ac97_dai, ARRAY_SIZE(s3c_ac97_dai));
+       ret = snd_soc_register_dais(&pdev->dev, s3c_ac97_dai,
+                       ARRAY_SIZE(s3c_ac97_dai));
        if (ret)
                goto err5;
 
@@ -476,7 +471,7 @@ static __devexit int s3c_ac97_remove(struct platform_device *pdev)
 {
        struct resource *mem_res, *irq_res;
 
-       snd_soc_unregister_dais(s3c_ac97_dai, ARRAY_SIZE(s3c_ac97_dai));
+       snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(s3c_ac97_dai));
 
        irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
        if (irq_res)
@@ -518,3 +513,4 @@ module_exit(s3c_ac97_exit);
 MODULE_AUTHOR("Jaswinder Singh, <jassi.brar@samsung.com>");
 MODULE_DESCRIPTION("AC97 driver for the Samsung SoC");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c-ac97");
index 278198379defa343fcaf905b99e03d897a8b3272..5dcedd07fdbbfdbfaab687e4fa4bea4dce6f9d04 100644 (file)
@@ -18,6 +18,4 @@
 #define S3C_AC97_DAI_PCM 0
 #define S3C_AC97_DAI_MIC 1
 
-extern struct snd_soc_dai s3c_ac97_dai[];
-
 #endif /* __S3C_AC97_H_ */
index 1b61c23ff300be0ef2c593cf5e813e20aeb2cb5d..54bff83c98b44a51821897c937eae827330ea643 100644 (file)
@@ -147,7 +147,7 @@ static int s3c_dma_hw_params(struct snd_pcm_substream *substream,
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        unsigned long totbytes = params_buffer_bytes(params);
        struct s3c_dma_params *dma =
-               snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
        int ret = 0;
 
 
@@ -441,14 +441,14 @@ static int s3c_dma_new(struct snd_card *card,
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = 0xffffffff;
 
-       if (dai->playback.channels_min) {
+       if (dai->driver->playback.channels_min) {
                ret = s3c_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        goto out;
        }
 
-       if (dai->capture.channels_min) {
+       if (dai->driver->capture.channels_min) {
                ret = s3c_preallocate_dma_buffer(pcm,
                        SNDRV_PCM_STREAM_CAPTURE);
                if (ret)
@@ -458,26 +458,46 @@ static int s3c_dma_new(struct snd_card *card,
        return ret;
 }
 
-struct snd_soc_platform s3c24xx_soc_platform = {
-       .name           = "s3c24xx-audio",
-       .pcm_ops        = &s3c_dma_ops,
+static struct snd_soc_platform_driver s3c24xx_soc_platform = {
+       .ops            = &s3c_dma_ops,
        .pcm_new        = s3c_dma_new,
        .pcm_free       = s3c_dma_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(s3c24xx_soc_platform);
 
-static int __init s3c24xx_soc_platform_init(void)
+static int __devinit s3c24xx_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&s3c24xx_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &s3c24xx_soc_platform);
 }
-module_init(s3c24xx_soc_platform_init);
 
-static void __exit s3c24xx_soc_platform_exit(void)
+static int __devexit s3c24xx_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&s3c24xx_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver s3c24xx_pcm_driver = {
+       .driver = {
+               .name = "s3c24xx-pcm-audio",
+               .owner = THIS_MODULE,
+       },
+
+       .probe = s3c24xx_soc_platform_probe,
+       .remove = __devexit_p(s3c24xx_soc_platform_remove),
+};
+
+static int __init snd_s3c24xx_pcm_init(void)
+{
+       return platform_driver_register(&s3c24xx_pcm_driver);
+}
+module_init(snd_s3c24xx_pcm_init);
+
+static void __exit snd_s3c24xx_pcm_exit(void)
+{
+       platform_driver_unregister(&s3c24xx_pcm_driver);
 }
-module_exit(s3c24xx_soc_platform_exit);
+module_exit(snd_s3c24xx_pcm_exit);
 
 MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
 MODULE_DESCRIPTION("Samsung S3C Audio DMA module");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c24xx-pcm-audio");
index 69bb6bf6fc1c2a99a475313375a56969310b6f35..748c07d7c07578206cee11fff74be10be476814c 100644 (file)
@@ -25,7 +25,6 @@ struct s3c_dma_params {
 #define S3C24XX_DAI_I2S                        0
 
 /* platform data */
-extern struct snd_soc_platform s3c24xx_soc_platform;
 extern struct snd_ac97_bus_ops s3c24xx_ac97_ops;
 
 #endif
index 64376b2aac73ce8854daa3226368aee7e59ae223..b3866d5b19e95abb379df36b25692a4615af3dc4 100644 (file)
@@ -49,7 +49,7 @@
 
 static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai)
 {
-       return cpu_dai->private_data;
+       return snd_soc_dai_get_drvdata(cpu_dai);
 }
 
 #define bit_set(v, b) (((v) & (b)) ? 1 : 0)
@@ -307,11 +307,9 @@ static int s3c2412_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
 
 static int s3c_i2sv2_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
-                                struct snd_soc_dai *socdai)
+                                struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai_link *dai = rtd->dai;
-       struct s3c_i2sv2_info *i2s = to_info(dai->cpu_dai);
+       struct s3c_i2sv2_info *i2s = to_info(dai);
        struct s3c_dma_params *dma_data;
        u32 iismod;
 
@@ -322,7 +320,7 @@ static int s3c_i2sv2_hw_params(struct snd_pcm_substream *substream,
        else
                dma_data = i2s->dma_capture;
 
-       snd_soc_dai_set_dma_data(dai->cpu_dai, substream, dma_data);
+       snd_soc_dai_set_dma_data(dai, substream, dma_data);
 
        /* Working copies of register */
        iismod = readl(i2s->regs + S3C2412_IISMOD);
@@ -396,12 +394,12 @@ static int s3c2412_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
                               struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s3c_i2sv2_info *i2s = to_info(rtd->dai->cpu_dai);
+       struct s3c_i2sv2_info *i2s = to_info(rtd->cpu_dai);
        int capture = (substream->stream == SNDRV_PCM_STREAM_CAPTURE);
        unsigned long irqs;
        int ret = 0;
        struct s3c_dma_params *dma_data =
-               snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
 
        pr_debug("Entered %s\n", __func__);
 
@@ -640,36 +638,17 @@ int s3c_i2sv2_iis_calc_rate(struct s3c_i2sv2_rate_calc *info,
 }
 EXPORT_SYMBOL_GPL(s3c_i2sv2_iis_calc_rate);
 
-int s3c_i2sv2_probe(struct platform_device *pdev,
-                   struct snd_soc_dai *dai,
+int s3c_i2sv2_probe(struct snd_soc_dai *dai,
                    struct s3c_i2sv2_info *i2s,
                    unsigned long base)
 {
-       struct device *dev = &pdev->dev;
+       struct device *dev = dai->dev;
        unsigned int iismod;
 
        i2s->dev = dev;
 
        /* record our i2s structure for later use in the callbacks */
-       dai->private_data = i2s;
-
-       if (!base) {
-               struct resource *res = platform_get_resource(pdev,
-                                                            IORESOURCE_MEM,
-                                                            0);
-               if (!res) {
-                       dev_err(dev, "Unable to get register resource\n");
-                       return -ENXIO;
-               }
-
-               if (!request_mem_region(res->start, resource_size(res),
-                                       "s3c64xx-i2s-v4")) {
-                       dev_err(dev, "Unable to request register region\n");
-                       return -EBUSY;
-               }
-
-               base = res->start;
-       }
+       snd_soc_dai_set_drvdata(dai, i2s);
 
        i2s->regs = ioremap(base, 0x100);
        if (i2s->regs == NULL) {
@@ -752,9 +731,10 @@ static int s3c2412_i2s_resume(struct snd_soc_dai *dai)
 #define s3c2412_i2s_resume  NULL
 #endif
 
-int s3c_i2sv2_register_dai(struct snd_soc_dai *dai)
+int s3c_i2sv2_register_dai(struct device *dev, int id,
+               struct snd_soc_dai_driver *drv)
 {
-       struct snd_soc_dai_ops *ops = dai->ops;
+       struct snd_soc_dai_ops *ops = drv->ops;
 
        ops->trigger = s3c2412_i2s_trigger;
        if (!ops->hw_params)
@@ -767,10 +747,10 @@ int s3c_i2sv2_register_dai(struct snd_soc_dai *dai)
        if (!ops->delay)
                ops->delay = s3c2412_i2s_delay;
 
-       dai->suspend = s3c2412_i2s_suspend;
-       dai->resume = s3c2412_i2s_resume;
+       drv->suspend = s3c2412_i2s_suspend;
+       drv->resume = s3c2412_i2s_resume;
 
-       return snd_soc_register_dai(dai);
+       return snd_soc_register_dai(dev, drv);
 }
 EXPORT_SYMBOL_GPL(s3c_i2sv2_register_dai);
 
index 766f43a13d8be29fe769b860fc71e2b120b93aa7..d45830151484a62610baa69a9c32e3580f2cfeef 100644 (file)
@@ -66,6 +66,8 @@ struct s3c_i2sv2_info {
        u32              suspend_iismod;
        u32              suspend_iiscon;
        u32              suspend_iispsr;
+
+       unsigned long   base;
 };
 
 extern struct clk *s3c_i2sv2_get_clock(struct snd_soc_dai *cpu_dai);
@@ -81,23 +83,24 @@ extern int s3c_i2sv2_iis_calc_rate(struct s3c_i2sv2_rate_calc *info,
 
 /**
  * s3c_i2sv2_probe - probe for i2s device helper
- * @pdev: The platform device supplied to the original probe.
  * @dai: The ASoC DAI structure supplied to the original probe.
  * @i2s: Our local i2s structure to fill in.
  * @base: The base address for the registers.
  */
-extern int s3c_i2sv2_probe(struct platform_device *pdev,
-                          struct snd_soc_dai *dai,
+extern int s3c_i2sv2_probe(struct snd_soc_dai *dai,
                           struct s3c_i2sv2_info *i2s,
                           unsigned long base);
 
 /**
  * s3c_i2sv2_register_dai - register dai with soc core
- * @dai: The snd_soc_dai structure to register
+ * @dev: DAI device
+ * @id: DAI ID
+ * @drv: The driver structure to register
  *
  * Fill in any missing fields and then register the given dai with the
  * soc core.
  */
-extern int s3c_i2sv2_register_dai(struct snd_soc_dai *dai);
+extern int s3c_i2sv2_register_dai(struct device *dev, int id,
+               struct snd_soc_dai_driver *drv);
 
 #endif /* __SND_SOC_S3C24XX_S3C_I2SV2_I2S_H */
index 326f0a9e7e3076ebbce6af2500c86cb56fce5f60..6174e26e433ec1049d1f79ae7be5def6c62c0bcf 100644 (file)
@@ -64,11 +64,6 @@ static struct s3c_dma_params s3c_pcm_stereo_in[] = {
 
 static struct s3c_pcm_info s3c_pcm[2];
 
-static inline struct s3c_pcm_info *to_info(struct snd_soc_dai *cpu_dai)
-{
-       return cpu_dai->private_data;
-}
-
 static void s3c_pcm_snd_txctrl(struct s3c_pcm_info *pcm, int on)
 {
        void __iomem *regs = pcm->regs;
@@ -132,7 +127,7 @@ static int s3c_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
                               struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s3c_pcm_info *pcm = to_info(rtd->dai->cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        unsigned long flags;
 
        dev_dbg(pcm->dev, "Entered %s\n", __func__);
@@ -176,8 +171,7 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_soc_dai *socdai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai_link *dai = rtd->dai;
-       struct s3c_pcm_info *pcm = to_info(dai->cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct s3c_dma_params *dma_data;
        void __iomem *regs = pcm->regs;
        struct clk *clk;
@@ -192,7 +186,7 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream,
        else
                dma_data = pcm->dma_capture;
 
-       snd_soc_dai_set_dma_data(dai->cpu_dai, substream, dma_data);
+       snd_soc_dai_set_dma_data(rtd->cpu_dai, substream, dma_data);
 
        /* Strictly check for sample size */
        switch (params_format(params)) {
@@ -242,7 +236,7 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream,
 static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai,
                               unsigned int fmt)
 {
-       struct s3c_pcm_info *pcm = to_info(cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
        void __iomem *regs = pcm->regs;
        unsigned long flags;
        int ret = 0;
@@ -313,7 +307,7 @@ exit:
 static int s3c_pcm_set_clkdiv(struct snd_soc_dai *cpu_dai,
                                                int div_id, int div)
 {
-       struct s3c_pcm_info *pcm = to_info(cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
 
        switch (div_id) {
        case S3C_PCM_SCLK_PER_FS:
@@ -330,7 +324,7 @@ static int s3c_pcm_set_clkdiv(struct snd_soc_dai *cpu_dai,
 static int s3c_pcm_set_sysclk(struct snd_soc_dai *cpu_dai,
                                  int clk_id, unsigned int freq, int dir)
 {
-       struct s3c_pcm_info *pcm = to_info(cpu_dai);
+       struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
        void __iomem *regs = pcm->regs;
        u32 clkctl = readl(regs + S3C_PCM_CLKCTL);
 
@@ -366,10 +360,9 @@ static struct snd_soc_dai_ops s3c_pcm_dai_ops = {
 
 #define S3C_PCM_RATES  SNDRV_PCM_RATE_8000_96000
 
-#define S3C_PCM_DECLARE(n)                     \
+#define S3C_PCM_DAI_DECLARE                    \
 {                                                              \
-       .name            = "samsung-pcm",                       \
-       .id              = (n),                         \
+       .name            = "samsung-dai",                       \
        .symmetric_rates = 1,                                   \
        .ops = &s3c_pcm_dai_ops,                                \
        .playback = {                                           \
@@ -386,16 +379,15 @@ static struct snd_soc_dai_ops s3c_pcm_dai_ops = {
        },                                                      \
 }
 
-struct snd_soc_dai s3c_pcm_dai[] = {
-       S3C_PCM_DECLARE(0),
-       S3C_PCM_DECLARE(1),
+struct snd_soc_dai_driver s3c_pcm_dai[] = {
+       S3C_PCM_DAI_DECLARE,
+       S3C_PCM_DAI_DECLARE,
 };
 EXPORT_SYMBOL_GPL(s3c_pcm_dai);
 
 static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
 {
        struct s3c_pcm_info *pcm;
-       struct snd_soc_dai *dai;
        struct resource *mem_res, *dmatx_res, *dmarx_res;
        struct s3c_audio_pdata *pcm_pdata;
        int ret;
@@ -437,9 +429,6 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
 
        spin_lock_init(&pcm->lock);
 
-       dai = &s3c_pcm_dai[pdev->id];
-       dai->dev = &pdev->dev;
-
        /* Default is 128fs */
        pcm->sclk_per_fs = 128;
 
@@ -452,7 +441,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
        clk_enable(pcm->cclk);
 
        /* record our pcm structure for later use in the callbacks */
-       dai->private_data = pcm;
+       dev_set_drvdata(&pdev->dev, pcm);
 
        if (!request_mem_region(mem_res->start,
                                resource_size(mem_res), "samsung-pcm")) {
@@ -476,7 +465,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
        }
        clk_enable(pcm->pclk);
 
-       ret = snd_soc_register_dai(dai);
+       ret = snd_soc_register_dai(&pdev->dev, s3c_pcm_dai);
        if (ret != 0) {
                dev_err(&pdev->dev, "failed to get pcm_clock\n");
                goto err5;
@@ -514,6 +503,8 @@ static __devexit int s3c_pcm_dev_remove(struct platform_device *pdev)
        struct s3c_pcm_info *pcm = &s3c_pcm[pdev->id];
        struct resource *mem_res;
 
+       snd_soc_unregister_dai(&pdev->dev);
+
        iounmap(pcm->regs);
 
        mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -531,7 +522,7 @@ static struct platform_driver s3c_pcm_driver = {
        .probe  = s3c_pcm_dev_probe,
        .remove = s3c_pcm_dev_remove,
        .driver = {
-               .name = "samsung-pcm",
+               .name = "samsung-pcm-audio",
                .owner = THIS_MODULE,
        },
 };
@@ -552,3 +543,4 @@ module_exit(s3c_pcm_exit);
 MODULE_AUTHOR("Jaswinder Singh, <jassi.brar@samsung.com>");
 MODULE_DESCRIPTION("S3C PCM Controller Driver");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:samsung-pcm-audio");
index 709adef9d0435554a78cfa082fd31d4475d145a3..4a861cfa52c5643852d2612028d3c1d71ffe7d5d 100644 (file)
@@ -65,26 +65,20 @@ static struct s3c_dma_params s3c2412_i2s_pcm_stereo_in = {
 
 static struct s3c_i2sv2_info s3c2412_i2s;
 
-static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai)
-{
-       return cpu_dai->private_data;
-}
-
-static int s3c2412_i2s_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
+static int s3c2412_i2s_probe(struct snd_soc_dai *dai)
 {
        int ret;
 
        pr_debug("Entered %s\n", __func__);
 
-       ret = s3c_i2sv2_probe(pdev, dai, &s3c2412_i2s, S3C2410_PA_IIS);
+       ret = s3c_i2sv2_probe(dai, &s3c2412_i2s, S3C2410_PA_IIS);
        if (ret)
                return ret;
 
        s3c2412_i2s.dma_capture = &s3c2412_i2s_pcm_stereo_in;
        s3c2412_i2s.dma_playback = &s3c2412_i2s_pcm_stereo_out;
 
-       s3c2412_i2s.iis_cclk = clk_get(&pdev->dev, "i2sclk");
+       s3c2412_i2s.iis_cclk = clk_get(dai->dev, "i2sclk");
        if (s3c2412_i2s.iis_cclk == NULL) {
                pr_err("failed to get i2sclk clock\n");
                iounmap(s3c2412_i2s.regs);
@@ -108,11 +102,20 @@ static int s3c2412_i2s_probe(struct platform_device *pdev,
        return 0;
 }
 
+static int s3c2412_i2s_remove(struct snd_soc_dai *dai)
+{
+       clk_disable(s3c2412_i2s.iis_cclk);
+       clk_put(s3c2412_i2s.iis_cclk);
+       iounmap(s3c2412_i2s.regs);
+
+       return 0;
+}
+
 static int s3c2412_i2s_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *cpu_dai)
 {
-       struct s3c_i2sv2_info *i2s = to_info(cpu_dai);
+       struct s3c_i2sv2_info *i2s = snd_soc_dai_get_drvdata(cpu_dai);
        struct s3c_dma_params *dma_data;
        u32 iismod;
 
@@ -152,10 +155,9 @@ static struct snd_soc_dai_ops s3c2412_i2s_dai_ops = {
        .hw_params      = s3c2412_i2s_hw_params,
 };
 
-struct snd_soc_dai s3c2412_i2s_dai = {
-       .name           = "s3c2412-i2s",
-       .id             = 0,
+static struct snd_soc_dai_driver s3c2412_i2s_dai = {
        .probe          = s3c2412_i2s_probe,
+       .remove = s3c2412_i2s_remove,
        .playback = {
                .channels_min   = 2,
                .channels_max   = 2,
@@ -170,17 +172,36 @@ struct snd_soc_dai s3c2412_i2s_dai = {
        },
        .ops = &s3c2412_i2s_dai_ops,
 };
-EXPORT_SYMBOL_GPL(s3c2412_i2s_dai);
+
+static __devinit int s3c2412_iis_dev_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dai(&pdev->dev, &s3c2412_i2s_dai);
+}
+
+static __devexit int s3c2412_iis_dev_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver s3c2412_iis_driver = {
+       .probe  = s3c2412_iis_dev_probe,
+       .remove = s3c2412_iis_dev_remove,
+       .driver = {
+               .name = "s3c2412-iis",
+               .owner = THIS_MODULE,
+       },
+};
 
 static int __init s3c2412_i2s_init(void)
 {
-       return  s3c_i2sv2_register_dai(&s3c2412_i2s_dai);
+       return platform_driver_register(&s3c2412_iis_driver);
 }
 module_init(s3c2412_i2s_init);
 
 static void __exit s3c2412_i2s_exit(void)
 {
-       snd_soc_unregister_dai(&s3c2412_i2s_dai);
+       platform_driver_unregister(&s3c2412_iis_driver);
 }
 module_exit(s3c2412_i2s_exit);
 
@@ -188,3 +209,4 @@ module_exit(s3c2412_i2s_exit);
 MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
 MODULE_DESCRIPTION("S3C2412 I2S SoC Interface");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c2412-iis");
index 0b5686b4d5c36fb4c307132b6c654017dd583657..01a0471ac65c88ac79622ec96f653f4fe24aa67a 100644 (file)
@@ -24,6 +24,4 @@
 #define S3C2412_CLKSRC_PCLK    S3C_I2SV2_CLKSRC_PCLK
 #define S3C2412_CLKSRC_I2SCLK  S3C_I2SV2_CLKSRC_AUDIOBUS
 
-extern struct snd_soc_dai s3c2412_i2s_dai;
-
 #endif /* __SND_SOC_S3C24XX_S3C2412_I2S_H */
index c3ac890a3986184f86ed00a1dc300fdb10d7d258..e060daaa458f80bf63ecacfb25731fbb93c497e3 100644 (file)
@@ -252,7 +252,7 @@ static int s3c24xx_i2s_hw_params(struct snd_pcm_substream *substream,
        else
                dma_data = &s3c24xx_i2s_pcm_stereo_in;
 
-       snd_soc_dai_set_dma_data(rtd->dai->cpu_dai, substream, dma_data);
+       snd_soc_dai_set_dma_data(rtd->cpu_dai, substream, dma_data);
 
        /* Working copies of register */
        iismod = readl(s3c24xx_i2s.regs + S3C2410_IISMOD);
@@ -280,9 +280,8 @@ static int s3c24xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
                               struct snd_soc_dai *dai)
 {
        int ret = 0;
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct s3c_dma_params *dma_data =
-               snd_soc_dai_get_dma_data(rtd->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(dai, substream);
 
        pr_debug("Entered %s\n", __func__);
 
@@ -387,8 +386,7 @@ u32 s3c24xx_i2s_get_clockrate(void)
 }
 EXPORT_SYMBOL_GPL(s3c24xx_i2s_get_clockrate);
 
-static int s3c24xx_i2s_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
+static int s3c24xx_i2s_probe(struct snd_soc_dai *dai)
 {
        pr_debug("Entered %s\n", __func__);
 
@@ -396,7 +394,7 @@ static int s3c24xx_i2s_probe(struct platform_device *pdev,
        if (s3c24xx_i2s.regs == NULL)
                return -ENXIO;
 
-       s3c24xx_i2s.iis_clk = clk_get(&pdev->dev, "iis");
+       s3c24xx_i2s.iis_clk = clk_get(dai->dev, "iis");
        if (s3c24xx_i2s.iis_clk == NULL) {
                pr_err("failed to get iis_clock\n");
                iounmap(s3c24xx_i2s.regs);
@@ -465,9 +463,7 @@ static struct snd_soc_dai_ops s3c24xx_i2s_dai_ops = {
        .set_sysclk     = s3c24xx_i2s_set_sysclk,
 };
 
-struct snd_soc_dai s3c24xx_i2s_dai = {
-       .name = "s3c24xx-i2s",
-       .id = 0,
+static struct snd_soc_dai_driver s3c24xx_i2s_dai = {
        .probe = s3c24xx_i2s_probe,
        .suspend = s3c24xx_i2s_suspend,
        .resume = s3c24xx_i2s_resume,
@@ -483,17 +479,36 @@ struct snd_soc_dai s3c24xx_i2s_dai = {
                .formats = SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE,},
        .ops = &s3c24xx_i2s_dai_ops,
 };
-EXPORT_SYMBOL_GPL(s3c24xx_i2s_dai);
+
+static __devinit int s3c24xx_iis_dev_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dai(&pdev->dev, &s3c24xx_i2s_dai);
+}
+
+static __devexit int s3c24xx_iis_dev_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver s3c24xx_iis_driver = {
+       .probe  = s3c24xx_iis_dev_probe,
+       .remove = s3c24xx_iis_dev_remove,
+       .driver = {
+               .name = "s3c24xx-iis",
+               .owner = THIS_MODULE,
+       },
+};
 
 static int __init s3c24xx_i2s_init(void)
 {
-       return snd_soc_register_dai(&s3c24xx_i2s_dai);
+       return platform_driver_register(&s3c24xx_iis_driver);
 }
 module_init(s3c24xx_i2s_init);
 
 static void __exit s3c24xx_i2s_exit(void)
 {
-       snd_soc_unregister_dai(&s3c24xx_i2s_dai);
+       platform_driver_unregister(&s3c24xx_iis_driver);
 }
 module_exit(s3c24xx_i2s_exit);
 
@@ -501,3 +516,4 @@ module_exit(s3c24xx_i2s_exit);
 MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
 MODULE_DESCRIPTION("s3c24xx I2S SoC Interface");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c24xx-iis");
index 726d91cf4e1cfcbf624facdf7c0a697962bab190..f9ca04edacb7a4283a17bb2105b4d750478644ce 100644 (file)
@@ -32,6 +32,4 @@
 
 u32 s3c24xx_i2s_get_clockrate(void);
 
-extern struct snd_soc_dai s3c24xx_i2s_dai;
-
 #endif /*S3C24XXI2S_H_*/
index 4984754f3298dac412f9ee22dfbce4de5f5804f8..c4c1114420109944bdbf73cdeda17083a054e5e7 100644 (file)
@@ -139,8 +139,10 @@ static const struct snd_kcontrol_new amp_unmute_controls[] = {
                       speaker_unmute_get, speaker_unmute_put),
 };
 
-void simtec_audio_init(struct snd_soc_codec *codec)
+void simtec_audio_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        if (pdata->amp_gpio > 0) {
                pr_debug("%s: adding amp routes\n", __func__);
 
@@ -170,8 +172,8 @@ static int simtec_hw_params(struct snd_pcm_substream *substream,
                            struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set the CODEC as the bus clock master, I2S */
@@ -319,12 +321,12 @@ EXPORT_SYMBOL_GPL(simtec_audio_pmops);
 #endif
 
 int __devinit simtec_audio_core_probe(struct platform_device *pdev,
-                                     struct snd_soc_device *socdev)
+                                     struct snd_soc_card *card)
 {
        struct platform_device *snd_dev;
        int ret;
 
-       socdev->card->dai_link->ops = &simtec_snd_ops;
+       card->dai_link->ops = &simtec_snd_ops;
 
        pdata = pdev->dev.platform_data;
        if (!pdata) {
@@ -353,8 +355,7 @@ int __devinit simtec_audio_core_probe(struct platform_device *pdev,
                goto err_gpio;
        }
 
-       platform_set_drvdata(snd_dev, socdev);
-       socdev->dev = &snd_dev->dev;
+       platform_set_drvdata(snd_dev, card);
 
        ret = platform_device_add(snd_dev);
        if (ret) {
index e18faee30cce0a388b2d06d2ba9a676200117d16..e63d5ff9c41fe4a42c64a6ea3b3960bf3046e14d 100644 (file)
@@ -7,10 +7,10 @@
  * published by the Free Software Foundation.
 */
 
-extern void simtec_audio_init(struct snd_soc_codec *codec);
+extern void simtec_audio_init(struct snd_soc_pcm_runtime *rtd);
 
 extern int simtec_audio_core_probe(struct platform_device *pdev,
-                                  struct snd_soc_device *socdev);
+                                  struct snd_soc_card *card);
 
 extern int simtec_audio_remove(struct platform_device *pdev);
 
index bdf8951af8e38fac1a7e88ff8be274ce4e7e1815..f88453735ae26e47c98f1c407c789df24227d638 100644 (file)
@@ -73,8 +73,10 @@ static const struct snd_soc_dapm_route base_map[] = {
  * Attach our controls and configure the necessary codec
  * mappings for our sound card instance.
 */
-static int simtec_hermes_init(struct snd_soc_codec *codec)
+static int simtec_hermes_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_new_controls(codec, dapm_widgets,
                                  ARRAY_SIZE(dapm_widgets));
 
@@ -85,42 +87,33 @@ static int simtec_hermes_init(struct snd_soc_codec *codec)
        snd_soc_dapm_enable_pin(codec, "Line Out");
        snd_soc_dapm_enable_pin(codec, "Mic Jack");
 
-       simtec_audio_init(codec);
+       simtec_audio_init(rtd);
        snd_soc_dapm_sync(codec);
 
        return 0;
 }
 
-static struct aic3x_setup_data codec_setup = {
-};
-
 static struct snd_soc_dai_link simtec_dai_aic33 = {
        .name           = "tlv320aic33",
        .stream_name    = "TLV320AIC33",
-       .cpu_dai        = &s3c24xx_i2s_dai,
-       .codec_dai      = &aic3x_dai,
+       .codec_name     = "tlv320aic3x-codec.0-0x1a",
+       .cpu_dai_name   = "s3c24xx-i2s",
+       .codec_dai_name = "tlv320aic3x-hifi",
+       .platform_name  = "s3c24xx-pcm-audio",
        .init           = simtec_hermes_init,
 };
 
 /* simtec audio machine driver */
 static struct snd_soc_card snd_soc_machine_simtec_aic33 = {
        .name           = "Simtec-Hermes",
-       .platform       = &s3c24xx_soc_platform,
        .dai_link       = &simtec_dai_aic33,
        .num_links      = 1,
 };
 
-/* simtec audio subsystem */
-static struct snd_soc_device simtec_snd_devdata_aic33 = {
-       .card           = &snd_soc_machine_simtec_aic33,
-       .codec_dev      = &soc_codec_dev_aic3x,
-       .codec_data     = &codec_setup,
-};
-
 static int __devinit simtec_audio_hermes_probe(struct platform_device *pd)
 {
        dev_info(&pd->dev, "probing....\n");
-       return simtec_audio_core_probe(pd, &simtec_snd_devdata_aic33);
+       return simtec_audio_core_probe(pd, &snd_soc_machine_simtec_aic33);
 }
 
 static struct platform_driver simtec_audio_hermes_platdrv = {
index 185c0acb5ce6b8f7fff39c3fd008477ad4c6d11e..c0967593510d1f294d63ae23581d1e4cb1bf54fb 100644 (file)
@@ -62,8 +62,10 @@ static const struct snd_soc_dapm_route base_map[] = {
  * Attach our controls and configure the necessary codec
  * mappings for our sound card instance.
 */
-static int simtec_tlv320aic23_init(struct snd_soc_codec *codec)
+static int simtec_tlv320aic23_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_new_controls(codec, dapm_widgets,
                                  ARRAY_SIZE(dapm_widgets));
 
@@ -74,7 +76,7 @@ static int simtec_tlv320aic23_init(struct snd_soc_codec *codec)
        snd_soc_dapm_enable_pin(codec, "Line Out");
        snd_soc_dapm_enable_pin(codec, "Mic Jack");
 
-       simtec_audio_init(codec);
+       simtec_audio_init(rtd);
        snd_soc_dapm_sync(codec);
 
        return 0;
@@ -83,28 +85,23 @@ static int simtec_tlv320aic23_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link simtec_dai_aic23 = {
        .name           = "tlv320aic23",
        .stream_name    = "TLV320AIC23",
-       .cpu_dai        = &s3c24xx_i2s_dai,
-       .codec_dai      = &tlv320aic23_dai,
+       .codec_name     = "tlv320aic3x-codec.0-0x1a",
+       .cpu_dai_name   = "s3c24xx-i2s",
+       .codec_dai_name = "tlv320aic3x-hifi",
+       .platform_name  = "s3c24xx-pcm-audio",
        .init           = simtec_tlv320aic23_init,
 };
 
 /* simtec audio machine driver */
 static struct snd_soc_card snd_soc_machine_simtec_aic23 = {
        .name           = "Simtec",
-       .platform       = &s3c24xx_soc_platform,
        .dai_link       = &simtec_dai_aic23,
        .num_links      = 1,
 };
 
-/* simtec audio subsystem */
-static struct snd_soc_device simtec_snd_devdata_aic23 = {
-       .card           = &snd_soc_machine_simtec_aic23,
-       .codec_dev      = &soc_codec_dev_tlv320aic23,
-};
-
 static int __devinit simtec_audio_tlv320aic23_probe(struct platform_device *pd)
 {
-       return simtec_audio_core_probe(pd, &simtec_snd_devdata_aic23);
+       return simtec_audio_core_probe(pd, &snd_soc_machine_simtec_aic23);
 }
 
 static struct platform_driver simtec_audio_tlv320aic23_platdrv = {
index 052d59659c296f2916261970ae9f4ff675b7a5cf..bd48ffbde8801701b2c5c18deb20b2e28457c697 100644 (file)
@@ -133,8 +133,8 @@ static int s3c24xx_uda134x_hw_params(struct snd_pcm_substream *substream,
                                        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
        int clk_source, fs_mode;
@@ -227,14 +227,15 @@ static struct snd_soc_ops s3c24xx_uda134x_ops = {
 static struct snd_soc_dai_link s3c24xx_uda134x_dai_link = {
        .name = "UDA134X",
        .stream_name = "UDA134X",
-       .codec_dai = &uda134x_dai,
-       .cpu_dai = &s3c24xx_i2s_dai,
+       .codec_name = "uda134x-hifi",
+       .codec_dai_name = "uda134x-hifi",
+       .cpu_dai_name = "s3c24xx-i2s",
        .ops = &s3c24xx_uda134x_ops,
+       .platform_name  = "s3c24xx-pcm-audio",
 };
 
 static struct snd_soc_card snd_soc_s3c24xx_uda134x = {
        .name = "S3C24XX_UDA134X",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = &s3c24xx_uda134x_dai_link,
        .num_links = 1,
 };
@@ -256,6 +257,7 @@ static void setmode(int v)
        gpio_set_value(s3c24xx_uda134x_l3_pins->l3_mode, v > 0);
 }
 
+/* FIXME - This must be codec platform data but in which board file ?? */
 static struct uda134x_platform_data s3c24xx_uda134x = {
        .l3 = {
                .setdat = setdat,
@@ -270,12 +272,6 @@ static struct uda134x_platform_data s3c24xx_uda134x = {
        },
 };
 
-static struct snd_soc_device s3c24xx_uda134x_snd_devdata = {
-       .card = &snd_soc_s3c24xx_uda134x,
-       .codec_dev = &soc_codec_dev_uda134x,
-       .codec_data = &s3c24xx_uda134x,
-};
-
 static int s3c24xx_uda134x_setup_pin(int pin, char *fun)
 {
        if (gpio_request(pin, "s3c24xx_uda134x") < 0) {
@@ -325,8 +321,7 @@ static int s3c24xx_uda134x_probe(struct platform_device *pdev)
        }
 
        platform_set_drvdata(s3c24xx_uda134x_snd_device,
-                            &s3c24xx_uda134x_snd_devdata);
-       s3c24xx_uda134x_snd_devdata.dev = &s3c24xx_uda134x_snd_device->dev;
+                            &snd_soc_s3c24xx_uda134x);
        ret = platform_device_add(s3c24xx_uda134x_snd_device);
        if (ret) {
                printk(KERN_ERR "S3C24XX_UDA134X SoC Audio: Unable to add\n");
index 06db130030a13f8ce7326a6411f3b77e6209bc31..a9628472ebfe7ff4cff26991b1bcdf13d51d4742 100644 (file)
@@ -16,9 +16,7 @@
 #include <sound/soc.h>
 #include <sound/pcm_params.h>
 
-#include <mach/gpio-bank-c.h>
-#include <mach/gpio-bank-h.h>
-#include <plat/gpio-cfg.h>
+#include <plat/audio.h>
 
 #include <mach/map.h>
 #include <mach/dma.h>
@@ -39,34 +37,23 @@ static struct s3c_dma_params s3c64xx_i2sv4_pcm_stereo_out;
 static struct s3c_dma_params s3c64xx_i2sv4_pcm_stereo_in;
 static struct s3c_i2sv2_info s3c64xx_i2sv4;
 
-struct snd_soc_dai s3c64xx_i2s_v4_dai;
-EXPORT_SYMBOL_GPL(s3c64xx_i2s_v4_dai);
-
-static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai)
+static int s3c64xx_i2sv4_probe(struct snd_soc_dai *dai)
 {
-       return cpu_dai->private_data;
-}
+       struct s3c_i2sv2_info *i2s = &s3c64xx_i2sv4;
+       int ret = 0;
 
-static int s3c64xx_i2sv4_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
-{
-       /* configure GPIO for i2s port */
-       s3c_gpio_cfgpin(S3C64XX_GPC(4), S3C64XX_GPC4_I2S_V40_DO0);
-       s3c_gpio_cfgpin(S3C64XX_GPC(5), S3C64XX_GPC5_I2S_V40_DO1);
-       s3c_gpio_cfgpin(S3C64XX_GPC(7), S3C64XX_GPC7_I2S_V40_DO2);
-       s3c_gpio_cfgpin(S3C64XX_GPH(6), S3C64XX_GPH6_I2S_V40_BCLK);
-       s3c_gpio_cfgpin(S3C64XX_GPH(7), S3C64XX_GPH7_I2S_V40_CDCLK);
-       s3c_gpio_cfgpin(S3C64XX_GPH(8), S3C64XX_GPH8_I2S_V40_LRCLK);
-       s3c_gpio_cfgpin(S3C64XX_GPH(9), S3C64XX_GPH9_I2S_V40_DI);
+       snd_soc_dai_set_drvdata(dai, i2s);
 
-       return 0;
+       ret = s3c_i2sv2_probe(dai, i2s, i2s->base);
+
+       return ret;
 }
 
 static int s3c_i2sv4_hw_params(struct snd_pcm_substream *substream,
                                 struct snd_pcm_hw_params *params,
                                 struct snd_soc_dai *cpu_dai)
 {
-       struct s3c_i2sv2_info *i2s = to_info(cpu_dai);
+       struct s3c_i2sv2_info *i2s = snd_soc_dai_get_drvdata(cpu_dai);
        struct s3c_dma_params *dma_data;
        u32 iismod;
 
@@ -104,51 +91,79 @@ static struct snd_soc_dai_ops s3c64xx_i2sv4_dai_ops = {
        .hw_params      = s3c_i2sv4_hw_params,
 };
 
+static struct snd_soc_dai_driver s3c64xx_i2s_v4_dai = {
+       .symmetric_rates = 1,
+       .playback = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = S3C64XX_I2S_RATES,
+               .formats = S3C64XX_I2S_FMTS,
+       },
+       .capture = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = S3C64XX_I2S_RATES,
+               .formats = S3C64XX_I2S_FMTS,
+       },
+       .probe = s3c64xx_i2sv4_probe,
+       .ops = &s3c64xx_i2sv4_dai_ops,
+};
+
 static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
 {
+       struct s3c_audio_pdata *i2s_pdata;
        struct s3c_i2sv2_info *i2s;
-       struct snd_soc_dai *dai;
+       struct resource *res;
        int ret;
 
        i2s = &s3c64xx_i2sv4;
-       dai = &s3c64xx_i2s_v4_dai;
-
-       if (dai->dev) {
-               dev_dbg(dai->dev, "%s: \
-                       I2Sv4 instance already registered!\n", __func__);
-               return -EBUSY;
-       }
-
-       dai->dev = &pdev->dev;
-       dai->name = "s3c64xx-i2s-v4";
-       dai->id = 0;
-       dai->symmetric_rates = 1;
-       dai->playback.channels_min = 2;
-       dai->playback.channels_max = 2;
-       dai->playback.rates = S3C64XX_I2S_RATES;
-       dai->playback.formats = S3C64XX_I2S_FMTS;
-       dai->capture.channels_min = 2;
-       dai->capture.channels_max = 2;
-       dai->capture.rates = S3C64XX_I2S_RATES;
-       dai->capture.formats = S3C64XX_I2S_FMTS;
-       dai->probe = s3c64xx_i2sv4_probe;
-       dai->ops = &s3c64xx_i2sv4_dai_ops;
 
        i2s->feature |= S3C_FEATURE_CDCLKCON;
 
        i2s->dma_capture = &s3c64xx_i2sv4_pcm_stereo_in;
        i2s->dma_playback = &s3c64xx_i2sv4_pcm_stereo_out;
 
-       i2s->dma_capture->channel = DMACH_HSI_I2SV40_RX;
-       i2s->dma_capture->dma_addr = S3C64XX_PA_IISV4 + S3C2412_IISRXD;
-       i2s->dma_playback->channel = DMACH_HSI_I2SV40_TX;
-       i2s->dma_playback->dma_addr = S3C64XX_PA_IISV4 + S3C2412_IISTXD;
+       res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "Unable to get I2S-TX dma resource\n");
+               return -ENXIO;
+       }
+       i2s->dma_playback->channel = res->start;
+
+       res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+       if (!res) {
+               dev_err(&pdev->dev, "Unable to get I2S-RX dma resource\n");
+               return -ENXIO;
+       }
+       i2s->dma_capture->channel = res->start;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "Unable to get I2S SFR address\n");
+               return -ENXIO;
+       }
+
+       if (!request_mem_region(res->start, resource_size(res),
+                               "s3c64xx-i2s-v4")) {
+               dev_err(&pdev->dev, "Unable to request SFR region\n");
+               return -EBUSY;
+       }
+       i2s->dma_capture->dma_addr = res->start + S3C2412_IISRXD;
+       i2s->dma_playback->dma_addr = res->start + S3C2412_IISTXD;
 
        i2s->dma_capture->client = &s3c64xx_dma_client_in;
        i2s->dma_capture->dma_size = 4;
        i2s->dma_playback->client = &s3c64xx_dma_client_out;
        i2s->dma_playback->dma_size = 4;
 
+       i2s->base = res->start;
+
+       i2s_pdata = pdev->dev.platform_data;
+       if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
+               dev_err(&pdev->dev, "Unable to configure gpio\n");
+               return -EINVAL;
+       }
+
        i2s->iis_cclk = clk_get(&pdev->dev, "audio-bus");
        if (IS_ERR(i2s->iis_cclk)) {
                dev_err(&pdev->dev, "failed to get audio-bus\n");
@@ -158,19 +173,13 @@ static __devinit int s3c64xx_i2sv4_dev_probe(struct platform_device *pdev)
 
        clk_enable(i2s->iis_cclk);
 
-       ret = s3c_i2sv2_probe(pdev, dai, i2s, 0);
-       if (ret)
-               goto err_clk;
-
-       ret = s3c_i2sv2_register_dai(dai);
+       ret = s3c_i2sv2_register_dai(&pdev->dev, pdev->id, &s3c64xx_i2s_v4_dai);
        if (ret != 0)
                goto err_i2sv2;
 
        return 0;
 
 err_i2sv2:
-       /* Not implemented for I2Sv2 core yet */
-err_clk:
        clk_put(i2s->iis_cclk);
 err:
        return ret;
@@ -178,7 +187,18 @@ err:
 
 static __devexit int s3c64xx_i2sv4_dev_remove(struct platform_device *pdev)
 {
-       dev_err(&pdev->dev, "Device removal not yet supported\n");
+       struct s3c_i2sv2_info *i2s = &s3c64xx_i2sv4;
+       struct resource *res;
+
+       snd_soc_unregister_dai(&pdev->dev);
+       clk_put(i2s->iis_cclk);
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (res)
+               release_mem_region(res->start, resource_size(res));
+       else
+               dev_warn(&pdev->dev, "Unable to get I2S SFR address\n");
+               
        return 0;
 }
 
@@ -207,3 +227,4 @@ module_exit(s3c64xx_i2sv4_exit);
 MODULE_AUTHOR("Jaswinder Singh, <jassi.brar@samsung.com>");
 MODULE_DESCRIPTION("S3C64XX I2Sv4 SoC Interface");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c64xx-iis-v4");
index 1d85cb85a7d2f1cd1a6f58a52dd8e9717f147fe9..ae7acb6c4f1d5fe6cb6b6808eb8ab177f80b9de9 100644 (file)
  * published by the Free Software Foundation.
  */
 
+#include <linux/module.h>
 #include <linux/clk.h>
 #include <linux/gpio.h>
 #include <linux/io.h>
+#include <linux/slab.h>
 
 #include <sound/soc.h>
 
-#include <mach/gpio-bank-d.h>
-#include <mach/gpio-bank-e.h>
-#include <plat/gpio-cfg.h>
+#include <plat/audio.h>
 
 #include <mach/map.h>
 #include <mach/dma.h>
@@ -46,45 +46,107 @@ static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_out[MAX_I2SV3];
 static struct s3c_dma_params s3c64xx_i2s_pcm_stereo_in[MAX_I2SV3];
 static struct s3c_i2sv2_info s3c64xx_i2s[MAX_I2SV3];
 
-struct snd_soc_dai s3c64xx_i2s_dai[MAX_I2SV3];
-EXPORT_SYMBOL_GPL(s3c64xx_i2s_dai);
-
-static inline struct s3c_i2sv2_info *to_info(struct snd_soc_dai *cpu_dai)
+struct clk *s3c64xx_i2s_get_clock(struct snd_soc_dai *dai)
 {
-       return cpu_dai->private_data;
+       struct s3c_i2sv2_info *i2s = snd_soc_dai_get_drvdata(dai);
+       u32 iismod = readl(i2s->regs + S3C2412_IISMOD);
+
+       if (iismod & S3C2412_IISMOD_IMS_SYSMUX)
+               return i2s->iis_cclk;
+       else
+               return i2s->iis_pclk;
 }
+EXPORT_SYMBOL_GPL(s3c64xx_i2s_get_clock);
 
-static int s3c64xx_i2s_probe(struct platform_device *pdev,
-                            struct snd_soc_dai *dai)
+static int s3c64xx_i2s_probe(struct snd_soc_dai *dai)
 {
-       /* configure GPIO for i2s port */
-       switch (dai->id) {
-       case 0:
-               s3c_gpio_cfgpin(S3C64XX_GPD(0), S3C64XX_GPD0_I2S0_CLK);
-               s3c_gpio_cfgpin(S3C64XX_GPD(1), S3C64XX_GPD1_I2S0_CDCLK);
-               s3c_gpio_cfgpin(S3C64XX_GPD(2), S3C64XX_GPD2_I2S0_LRCLK);
-               s3c_gpio_cfgpin(S3C64XX_GPD(3), S3C64XX_GPD3_I2S0_DI);
-               s3c_gpio_cfgpin(S3C64XX_GPD(4), S3C64XX_GPD4_I2S0_D0);
-               break;
-       case 1:
-               s3c_gpio_cfgpin(S3C64XX_GPE(0), S3C64XX_GPE0_I2S1_CLK);
-               s3c_gpio_cfgpin(S3C64XX_GPE(1), S3C64XX_GPE1_I2S1_CDCLK);
-               s3c_gpio_cfgpin(S3C64XX_GPE(2), S3C64XX_GPE2_I2S1_LRCLK);
-               s3c_gpio_cfgpin(S3C64XX_GPE(3), S3C64XX_GPE3_I2S1_DI);
-               s3c_gpio_cfgpin(S3C64XX_GPE(4), S3C64XX_GPE4_I2S1_D0);
+       struct s3c_i2sv2_info *i2s;
+       int ret;
+
+       if (dai->id >= MAX_I2SV3) {
+               dev_err(dai->dev, "id %d out of range\n", dai->id);
+               return -EINVAL;
+       }
+
+       i2s = &s3c64xx_i2s[dai->id];
+       snd_soc_dai_set_drvdata(dai, i2s);
+
+       i2s->iis_cclk = clk_get(dai->dev, "audio-bus");
+       if (IS_ERR(i2s->iis_cclk)) {
+               dev_err(dai->dev, "failed to get audio-bus\n");
+               ret = PTR_ERR(i2s->iis_cclk);
+               goto err;
        }
 
+       clk_enable(i2s->iis_cclk);
+
+       ret = s3c_i2sv2_probe(dai, i2s, i2s->base);
+       if (ret)
+               goto err_clk;
+
        return 0;
+
+err_clk:
+       clk_disable(i2s->iis_cclk);
+       clk_put(i2s->iis_cclk);
+err:
+       kfree(i2s);
+       return ret;
 }
 
+static int s3c64xx_i2s_remove(struct snd_soc_dai *dai)
+{
+       struct s3c_i2sv2_info *i2s = snd_soc_dai_get_drvdata(dai);
+
+       clk_disable(i2s->iis_cclk);
+       clk_put(i2s->iis_cclk);
+       kfree(i2s);
+       return 0;
+}
 
 static struct snd_soc_dai_ops s3c64xx_i2s_dai_ops;
 
+static struct snd_soc_dai_driver s3c64xx_i2s_dai[MAX_I2SV3] = {
+{
+       .name = "s3c64xx-i2s-0",
+       .probe = s3c64xx_i2s_probe,
+       .remove = s3c64xx_i2s_remove,
+       .playback = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = S3C64XX_I2S_RATES,
+               .formats = S3C64XX_I2S_FMTS,},
+       .capture = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = S3C64XX_I2S_RATES,
+               .formats = S3C64XX_I2S_FMTS,},
+       .ops = &s3c64xx_i2s_dai_ops,
+       .symmetric_rates = 1,
+}, {
+       .name = "s3c64xx-i2s-1",
+       .probe = s3c64xx_i2s_probe,
+       .remove = s3c64xx_i2s_remove,
+       .playback = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = S3C64XX_I2S_RATES,
+               .formats = S3C64XX_I2S_FMTS,},
+       .capture = {
+               .channels_min = 2,
+               .channels_max = 2,
+               .rates = S3C64XX_I2S_RATES,
+               .formats = S3C64XX_I2S_FMTS,},
+       .ops = &s3c64xx_i2s_dai_ops,
+       .symmetric_rates = 1,
+},};
+
 static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
 {
+       struct s3c_audio_pdata *i2s_pdata;
        struct s3c_i2sv2_info *i2s;
-       struct snd_soc_dai *dai;
-       int ret;
+       struct resource *res;
+       int i, ret;
 
        if (pdev->id >= MAX_I2SV3) {
                dev_err(&pdev->dev, "id %d out of range\n", pdev->id);
@@ -92,74 +154,63 @@ static __devinit int s3c64xx_iis_dev_probe(struct platform_device *pdev)
        }
 
        i2s = &s3c64xx_i2s[pdev->id];
-       dai = &s3c64xx_i2s_dai[pdev->id];
-       dai->dev = &pdev->dev;
-       dai->name = "s3c64xx-i2s";
-       dai->id = pdev->id;
-       dai->symmetric_rates = 1;
-       dai->playback.channels_min = 2;
-       dai->playback.channels_max = 2;
-       dai->playback.rates = S3C64XX_I2S_RATES;
-       dai->playback.formats = S3C64XX_I2S_FMTS;
-       dai->capture.channels_min = 2;
-       dai->capture.channels_max = 2;
-       dai->capture.rates = S3C64XX_I2S_RATES;
-       dai->capture.formats = S3C64XX_I2S_FMTS;
-       dai->probe = s3c64xx_i2s_probe;
-       dai->ops = &s3c64xx_i2s_dai_ops;
-
-       i2s->feature |= S3C_FEATURE_CDCLKCON;
 
        i2s->dma_capture = &s3c64xx_i2s_pcm_stereo_in[pdev->id];
        i2s->dma_playback = &s3c64xx_i2s_pcm_stereo_out[pdev->id];
 
-       if (pdev->id == 0) {
-               i2s->dma_capture->channel = DMACH_I2S0_IN;
-               i2s->dma_capture->dma_addr = S3C64XX_PA_IIS0 + S3C2412_IISRXD;
-               i2s->dma_playback->channel = DMACH_I2S0_OUT;
-               i2s->dma_playback->dma_addr = S3C64XX_PA_IIS0 + S3C2412_IISTXD;
-       } else {
-               i2s->dma_capture->channel = DMACH_I2S1_IN;
-               i2s->dma_capture->dma_addr = S3C64XX_PA_IIS1 + S3C2412_IISRXD;
-               i2s->dma_playback->channel = DMACH_I2S1_OUT;
-               i2s->dma_playback->dma_addr = S3C64XX_PA_IIS1 + S3C2412_IISTXD;
+       res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "Unable to get I2S-TX dma resource\n");
+               return -ENXIO;
+       }
+       i2s->dma_playback->channel = res->start;
+
+       res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+       if (!res) {
+               dev_err(&pdev->dev, "Unable to get I2S-RX dma resource\n");
+               return -ENXIO;
+       }
+       i2s->dma_capture->channel = res->start;
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (!res) {
+               dev_err(&pdev->dev, "Unable to get I2S SFR address\n");
+               return -ENXIO;
        }
 
+       if (!request_mem_region(res->start, resource_size(res),
+                               "s3c64xx-i2s")) {
+               dev_err(&pdev->dev, "Unable to request SFR region\n");
+               return -EBUSY;
+       }
+       i2s->base = res->start;
+
+       i2s_pdata = pdev->dev.platform_data;
+       if (i2s_pdata && i2s_pdata->cfg_gpio && i2s_pdata->cfg_gpio(pdev)) {
+               dev_err(&pdev->dev, "Unable to configure gpio\n");
+               return -EINVAL;
+       }
+       i2s->dma_capture->dma_addr = res->start + S3C2412_IISRXD;
+       i2s->dma_playback->dma_addr = res->start + S3C2412_IISTXD;
+
        i2s->dma_capture->client = &s3c64xx_dma_client_in;
        i2s->dma_capture->dma_size = 4;
        i2s->dma_playback->client = &s3c64xx_dma_client_out;
        i2s->dma_playback->dma_size = 4;
 
-       i2s->iis_cclk = clk_get(&pdev->dev, "audio-bus");
-       if (IS_ERR(i2s->iis_cclk)) {
-               dev_err(&pdev->dev, "failed to get audio-bus\n");
-               ret = PTR_ERR(i2s->iis_cclk);
-               goto err;
+       for (i = 0; i < ARRAY_SIZE(s3c64xx_i2s_dai); i++) {
+               ret = s3c_i2sv2_register_dai(&pdev->dev, i,
+                                               &s3c64xx_i2s_dai[i]);
+               if (ret != 0)
+                       return ret;
        }
 
-       clk_enable(i2s->iis_cclk);
-
-       ret = s3c_i2sv2_probe(pdev, dai, i2s, 0);
-       if (ret)
-               goto err_clk;
-
-       ret = s3c_i2sv2_register_dai(dai);
-       if (ret != 0)
-               goto err_i2sv2;
-
        return 0;
-
-err_i2sv2:
-       /* Not implemented for I2Sv2 core yet */
-err_clk:
-       clk_put(i2s->iis_cclk);
-err:
-       return ret;
 }
 
 static __devexit int s3c64xx_iis_dev_remove(struct platform_device *pdev)
 {
-       dev_err(&pdev->dev, "Device removal not yet supported\n");
+       snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(s3c64xx_i2s_dai));
        return 0;
 }
 
@@ -188,3 +239,4 @@ module_exit(s3c64xx_i2s_exit);
 MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
 MODULE_DESCRIPTION("S3C64XX I2S SoC Interface");
 MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:s3c64xx-iis");
index 7a40f43d1d5144a6afc6faa95176928cd56096fa..19bd444bf8a6f01f7de72348cb4dfc59424270d5 100644 (file)
@@ -36,7 +36,5 @@ struct clk;
        (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE |\
         SNDRV_PCM_FMTBIT_S24_LE)
 
-extern struct snd_soc_dai s3c64xx_i2s_dai[];
-extern struct snd_soc_dai s3c64xx_i2s_v4_dai;
 
 #endif /* __SND_SOC_S3C24XX_S3C64XX_I2S_H */
index b480348140b02db3bc001e84c851629e07b8e288..dd20ca7f46814e3458860931910d18a39bc4508f 100644 (file)
@@ -211,8 +211,10 @@ static struct snd_soc_dai_link smartq_dai[] = {
        {
                .name           = "wm8987",
                .stream_name    = "SmartQ Hi-Fi",
-               .cpu_dai        = &s3c64xx_i2s_dai[0],
-               .codec_dai      = &wm8750_dai,
+               .cpu_dai_name   = "s3c64xx-i2s.0",
+               .codec_dai_name = "wm8750-hifi",
+               .platform_name  = "s3c24xx-pcm-audio",
+               .codec_name     = "wm8750-codec.0-0x1a",
                .init           = smartq_wm8987_init,
                .ops            = &smartq_hifi_ops,
        },
@@ -220,16 +222,10 @@ static struct snd_soc_dai_link smartq_dai[] = {
 
 static struct snd_soc_card snd_soc_smartq = {
        .name = "SmartQ",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = smartq_dai,
        .num_links = ARRAY_SIZE(smartq_dai),
 };
 
-static struct snd_soc_device smartq_snd_devdata = {
-       .card = &snd_soc_smartq,
-       .codec_dev = &soc_codec_dev_wm8750,
-};
-
 static struct platform_device *smartq_snd_device;
 
 static int __init smartq_init(void)
@@ -245,8 +241,7 @@ static int __init smartq_init(void)
        if (!smartq_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(smartq_snd_device, &smartq_snd_devdata);
-       smartq_snd_devdata.dev = &smartq_snd_device->dev;
+       platform_set_drvdata(smartq_snd_device, &snd_soc_smartq);
 
        ret = platform_device_add(smartq_snd_device);
        if (ret) {
index 362258835e8d9aec20c71c53e8df9a9acf7b6036..66f9e222220bde488a70a9828204844b5cb4f27f 100644 (file)
@@ -19,7 +19,6 @@
 #include <sound/soc.h>
 #include <sound/soc-dapm.h>
 
-#include "../codecs/ac97.h"
 #include "s3c-dma.h"
 #include "s3c-ac97.h"
 
@@ -29,23 +28,19 @@ static struct snd_soc_dai_link smdk2443_dai[] = {
 {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &s3c_ac97_dai[S3C_AC97_DAI_PCM],
-       .codec_dai = &ac97_dai,
+       .cpu_dai_name = "s3c-ac97-dai",
+       .codec_dai_name = "ac97-hifi",
+       .codec_name = "ac97-codec",
+       .platform_name = "s3c24xx-pcm-audio",
 },
 };
 
 static struct snd_soc_card smdk2443 = {
        .name = "SMDK2443",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = smdk2443_dai,
        .num_links = ARRAY_SIZE(smdk2443_dai),
 };
 
-static struct snd_soc_device smdk2443_snd_ac97_devdata = {
-       .card = &smdk2443,
-       .codec_dev = &soc_codec_dev_ac97,
-};
-
 static struct platform_device *smdk2443_snd_ac97_device;
 
 static int __init smdk2443_init(void)
@@ -56,9 +51,7 @@ static int __init smdk2443_init(void)
        if (!smdk2443_snd_ac97_device)
                return -ENOMEM;
 
-       platform_set_drvdata(smdk2443_snd_ac97_device,
-                               &smdk2443_snd_ac97_devdata);
-       smdk2443_snd_ac97_devdata.dev = &smdk2443_snd_ac97_device->dev;
+       platform_set_drvdata(smdk2443_snd_ac97_device, &smdk2443);
        ret = platform_device_add(smdk2443_snd_ac97_device);
 
        if (ret)
index 07e8e51d10d60e925e05062cd331a58a36ba64c4..91367f7bfec32873a0e967e17cf6b9ac7cdeed78 100644 (file)
 #include "s3c-dma.h"
 #include "s3c64xx-i2s.h"
 
+/*
+ * Default CFG switch settings to use this driver:
+ *
+ *   SMDK6410: Set CFG1 1-3 Off, CFG2 1-4 On
+ */
+
 /* SMDK64XX has a 12MHZ crystal attached to WM8580 */
 #define SMDK64XX_WM8580_FREQ 12000000
 
@@ -29,8 +35,8 @@ static int smdk64xx_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        unsigned int pll_out;
        int bfs, rfs, ret;
 
@@ -107,14 +113,13 @@ static int smdk64xx_hw_params(struct snd_pcm_substream *substream,
        if (ret < 0)
                return ret;
 
-       /* Explicitly set WM8580-DAC to source from MCLK */
-       ret = snd_soc_dai_set_clkdiv(codec_dai, WM8580_DAC_CLKSEL,
-                                       WM8580_CLKSRC_MCLK);
+       ret = snd_soc_dai_set_pll(codec_dai, WM8580_PLLA, 0,
+                                       SMDK64XX_WM8580_FREQ, pll_out);
        if (ret < 0)
                return ret;
 
-       ret = snd_soc_dai_set_pll(codec_dai, WM8580_PLLA, 0,
-                                       SMDK64XX_WM8580_FREQ, pll_out);
+       ret = snd_soc_dai_set_sysclk(codec_dai, WM8580_CLKSRC_PLLA,
+                                    pll_out, SND_SOC_CLOCK_IN);
        if (ret < 0)
                return ret;
 
@@ -138,9 +143,9 @@ static struct snd_soc_ops smdk64xx_ops = {
 
 /* SMDK64xx Playback widgets */
 static const struct snd_soc_dapm_widget wm8580_dapm_widgets_pbk[] = {
-       SND_SOC_DAPM_HP("Front-L/R", NULL),
-       SND_SOC_DAPM_HP("Center/Sub", NULL),
-       SND_SOC_DAPM_HP("Rear-L/R", NULL),
+       SND_SOC_DAPM_HP("Front", NULL),
+       SND_SOC_DAPM_HP("Center+Sub", NULL),
+       SND_SOC_DAPM_HP("Rear", NULL),
 };
 
 /* SMDK64xx Capture widgets */
@@ -162,20 +167,22 @@ static const struct snd_soc_dapm_route audio_map_tx[] = {
 /* SMDK-PAIFRX connections */
 static const struct snd_soc_dapm_route audio_map_rx[] = {
        /* Front Left/Right are fed VOUT1L/R */
-       {"Front-L/R", NULL, "VOUT1L"},
-       {"Front-L/R", NULL, "VOUT1R"},
+       {"Front", NULL, "VOUT1L"},
+       {"Front", NULL, "VOUT1R"},
 
        /* Center/Sub are fed VOUT2L/R */
-       {"Center/Sub", NULL, "VOUT2L"},
-       {"Center/Sub", NULL, "VOUT2R"},
+       {"Center+Sub", NULL, "VOUT2L"},
+       {"Center+Sub", NULL, "VOUT2R"},
 
        /* Rear Left/Right are fed VOUT3L/R */
-       {"Rear-L/R", NULL, "VOUT3L"},
-       {"Rear-L/R", NULL, "VOUT3R"},
+       {"Rear", NULL, "VOUT3L"},
+       {"Rear", NULL, "VOUT3R"},
 };
 
-static int smdk64xx_wm8580_init_paiftx(struct snd_soc_codec *codec)
+static int smdk64xx_wm8580_init_paiftx(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        /* Add smdk64xx specific Capture widgets */
        snd_soc_dapm_new_controls(codec, wm8580_dapm_widgets_cpt,
                                  ARRAY_SIZE(wm8580_dapm_widgets_cpt));
@@ -194,8 +201,10 @@ static int smdk64xx_wm8580_init_paiftx(struct snd_soc_codec *codec)
        return 0;
 }
 
-static int smdk64xx_wm8580_init_paifrx(struct snd_soc_codec *codec)
+static int smdk64xx_wm8580_init_paifrx(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        /* Add smdk64xx specific Playback widgets */
        snd_soc_dapm_new_controls(codec, wm8580_dapm_widgets_pbk,
                                  ARRAY_SIZE(wm8580_dapm_widgets_pbk));
@@ -213,16 +222,20 @@ static struct snd_soc_dai_link smdk64xx_dai[] = {
 { /* Primary Playback i/f */
        .name = "WM8580 PAIF RX",
        .stream_name = "Playback",
-       .cpu_dai = &s3c64xx_i2s_v4_dai,
-       .codec_dai = &wm8580_dai[WM8580_DAI_PAIFRX],
+       .cpu_dai_name = "s3c64xx-iis-v4",
+       .codec_dai_name = "wm8580-hifi-playback",
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8580-codec.0-001b",
        .init = smdk64xx_wm8580_init_paifrx,
        .ops = &smdk64xx_ops,
 },
 { /* Primary Capture i/f */
        .name = "WM8580 PAIF TX",
        .stream_name = "Capture",
-       .cpu_dai = &s3c64xx_i2s_v4_dai,
-       .codec_dai = &wm8580_dai[WM8580_DAI_PAIFTX],
+       .cpu_dai_name = "s3c64xx-iis-v4",
+       .codec_dai_name = "wm8580-hifi-capture",
+       .platform_name = "s3c24xx-pcm-audio",
+       .codec_name = "wm8580-codec.0-001b",
        .init = smdk64xx_wm8580_init_paiftx,
        .ops = &smdk64xx_ops,
 },
@@ -230,16 +243,10 @@ static struct snd_soc_dai_link smdk64xx_dai[] = {
 
 static struct snd_soc_card smdk64xx = {
        .name = "smdk64xx",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = smdk64xx_dai,
        .num_links = ARRAY_SIZE(smdk64xx_dai),
 };
 
-static struct snd_soc_device smdk64xx_snd_devdata = {
-       .card = &smdk64xx,
-       .codec_dev = &soc_codec_dev_wm8580,
-};
-
 static struct platform_device *smdk64xx_snd_device;
 
 static int __init smdk64xx_audio_init(void)
@@ -250,8 +257,7 @@ static int __init smdk64xx_audio_init(void)
        if (!smdk64xx_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(smdk64xx_snd_device, &smdk64xx_snd_devdata);
-       smdk64xx_snd_devdata.dev = &smdk64xx_snd_device->dev;
+       platform_set_drvdata(smdk64xx_snd_device, &smdk64xx);
        ret = platform_device_add(smdk64xx_snd_device);
 
        if (ret)
index 5527b9e88c98ee9f7772a002db499e6e0e274717..90108a7a0a8e63a58e0631980c075907419aebe2 100644 (file)
@@ -46,40 +46,50 @@ static struct snd_soc_card smdk;
 static struct snd_soc_dai_link smdk_dai = {
        .name = "AC97",
        .stream_name = "AC97 PCM",
-       .cpu_dai = &s3c_ac97_dai[S3C_AC97_DAI_PCM],
-       .codec_dai = &wm9713_dai[WM9713_DAI_AC97_HIFI],
+       .platform_name = "s3c24xx-pcm-audio",
+       .cpu_dai_name = "s3c-ac97-dai",
+       .codec_dai_name = "wm9713-hifi",
+       .codec_name = "wm9713-codec",
 };
 
 static struct snd_soc_card smdk = {
        .name = "SMDK",
-       .platform = &s3c24xx_soc_platform,
        .dai_link = &smdk_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device smdk_snd_ac97_devdata = {
-       .card = &smdk,
-       .codec_dev = &soc_codec_dev_wm9713,
-};
-
+static struct platform_device *smdk_snd_wm9713_device;
 static struct platform_device *smdk_snd_ac97_device;
 
 static int __init smdk_init(void)
 {
        int ret;
 
-       smdk_snd_ac97_device = platform_device_alloc("soc-audio", -1);
-       if (!smdk_snd_ac97_device)
+       smdk_snd_wm9713_device = platform_device_alloc("wm9713-codec", -1);
+       if (!smdk_snd_wm9713_device)
                return -ENOMEM;
 
-       platform_set_drvdata(smdk_snd_ac97_device,
-                            &smdk_snd_ac97_devdata);
-       smdk_snd_ac97_devdata.dev = &smdk_snd_ac97_device->dev;
+       ret = platform_device_add(smdk_snd_wm9713_device);
+       if (ret)
+               goto err;
+
+       smdk_snd_ac97_device = platform_device_alloc("soc-audio", -1);
+       if (!smdk_snd_ac97_device) {
+               ret = -ENOMEM;
+               goto err;
+       }
+
+       platform_set_drvdata(smdk_snd_ac97_device, &smdk);
 
        ret = platform_device_add(smdk_snd_ac97_device);
-       if (ret)
+       if (ret) {
                platform_device_put(smdk_snd_ac97_device);
+               goto err;
+       }
 
+       return 0;
+err:
+       platform_device_put(smdk_snd_wm9713_device);
        return ret;
 }
 
index 59e3fa7bcb05a7e912d709e7c1c2958097b1f7a0..8778faa174a6cb66da33e1e81430c6aae2c59973 100644 (file)
@@ -140,7 +140,7 @@ static void s6000_i2s_stop_channel(struct s6000_i2s_dev *dev, int channel)
 static void s6000_i2s_start(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s6000_i2s_dev *dev = rtd->dai->cpu_dai->private_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        int channel;
 
        channel = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
@@ -152,7 +152,7 @@ static void s6000_i2s_start(struct snd_pcm_substream *substream)
 static void s6000_i2s_stop(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct s6000_i2s_dev *dev = rtd->dai->cpu_dai->private_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(rtd->cpu_dai);
        int channel;
 
        channel = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
@@ -194,7 +194,7 @@ static unsigned int s6000_i2s_int_sources(struct s6000_i2s_dev *dev)
 
 static unsigned int s6000_i2s_check_xrun(struct snd_soc_dai *cpu_dai)
 {
-       struct s6000_i2s_dev *dev = cpu_dai->private_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
        unsigned int errors;
        unsigned int ret;
 
@@ -232,7 +232,7 @@ static void s6000_i2s_wait_disabled(struct s6000_i2s_dev *dev)
 static int s6000_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
                                   unsigned int fmt)
 {
-       struct s6000_i2s_dev *dev = cpu_dai->private_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(cpu_dai);
        u32 w;
 
        switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
@@ -273,7 +273,7 @@ static int s6000_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 
 static int s6000_i2s_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div)
 {
-       struct s6000_i2s_dev *dev = dai->private_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
 
        if (!div || (div & 1) || div > (S6_I2S_DIV_MASK + 1) * 2)
                return -EINVAL;
@@ -287,7 +287,7 @@ static int s6000_i2s_hw_params(struct snd_pcm_substream *substream,
                               struct snd_pcm_hw_params *params,
                               struct snd_soc_dai *dai)
 {
-       struct s6000_i2s_dev *dev = dai->private_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
        int interf;
        u32 w = 0;
 
@@ -326,15 +326,17 @@ static int s6000_i2s_hw_params(struct snd_pcm_substream *substream,
        return 0;
 }
 
-static int s6000_i2s_dai_probe(struct platform_device *pdev,
-                              struct snd_soc_dai *dai)
+static int s6000_i2s_dai_probe(struct snd_soc_dai *dai)
 {
-       struct s6000_i2s_dev *dev = dai->private_data;
-       struct s6000_snd_platform_data *pdata = pdev->dev.platform_data;
+       struct s6000_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
+       struct s6000_snd_platform_data *pdata = dai->dev->platform_data;
 
        if (!pdata)
                return -EINVAL;
 
+       dai->capture_dma_data = &dev->dma_params;
+       dai->playback_dma_data = &dev->dma_params;
+
        dev->wide = pdata->wide;
        dev->channel_in = pdata->channel_in;
        dev->channel_out = pdata->channel_out;
@@ -352,10 +354,10 @@ static int s6000_i2s_dai_probe(struct platform_device *pdev,
 
                dev->channel_in = 0;
                dev->channel_out = 1;
-               dai->capture.channels_min = 2 * dev->lines_in;
-               dai->capture.channels_max = dai->capture.channels_min;
-               dai->playback.channels_min = 2 * dev->lines_out;
-               dai->playback.channels_max = dai->playback.channels_min;
+               dai->driver->capture.channels_min = 2 * dev->lines_in;
+               dai->driver->capture.channels_max = dai->driver->capture.channels_min;
+               dai->driver->playback.channels_min = 2 * dev->lines_out;
+               dai->driver->playback.channels_max = dai->driver->playback.channels_min;
 
                for (i = 0; i < dev->lines_out; i++)
                        s6_i2s_write_reg(dev, S6_I2S_DATA_CFG(i), S6_I2S_OUT);
@@ -372,10 +374,10 @@ static int s6000_i2s_dai_probe(struct platform_device *pdev,
                if (dev->lines_in > 1 || dev->lines_out > 1)
                        return -EINVAL;
 
-               dai->capture.channels_min = 2 * dev->lines_in;
-               dai->capture.channels_max = 8 * dev->lines_in;
-               dai->playback.channels_min = 2 * dev->lines_out;
-               dai->playback.channels_max = 8 * dev->lines_out;
+               dai->driver->capture.channels_min = 2 * dev->lines_in;
+               dai->driver->capture.channels_max = 8 * dev->lines_in;
+               dai->driver->playback.channels_min = 2 * dev->lines_out;
+               dai->driver->playback.channels_max = 8 * dev->lines_out;
 
                if (dev->lines_in)
                        cfg[dev->channel_in] = S6_I2S_IN;
@@ -413,9 +415,7 @@ static struct snd_soc_dai_ops s6000_i2s_dai_ops = {
        .hw_params = s6000_i2s_hw_params,
 };
 
-struct snd_soc_dai s6000_i2s_dai = {
-       .name = "s6000-i2s",
-       .id = 0,
+static struct snd_soc_dai_driver s6000_i2s_dai = {
        .probe = s6000_i2s_dai_probe,
        .playback = {
                .channels_min = 2,
@@ -435,7 +435,6 @@ struct snd_soc_dai s6000_i2s_dai = {
        },
        .ops = &s6000_i2s_dai_ops,
 }
-EXPORT_SYMBOL_GPL(s6000_i2s_dai);
 
 static int __devinit s6000_i2s_probe(struct platform_device *pdev)
 {
@@ -513,11 +512,7 @@ static int __devinit s6000_i2s_probe(struct platform_device *pdev)
                ret = -ENOMEM;
                goto err_release_dma2;
        }
-
-       s6000_i2s_dai.dev = &pdev->dev;
-       s6000_i2s_dai.private_data = dev;
-       s6000_i2s_dai.capture.dma_data = &dev->dma_params;
-       s6000_i2s_dai.playback.dma_data = &dev->dma_params;
+       dev_set_drvdata(&pdev->dev, dev);
 
        dev->sifbase = sifmem->start;
        dev->scbbase = mmio;
@@ -548,7 +543,7 @@ static int __devinit s6000_i2s_probe(struct platform_device *pdev)
                         S6_I2S_INT_UNDERRUN |
                         S6_I2S_INT_OVERRUN);
 
-       ret = snd_soc_register_dai(&s6000_i2s_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &s6000_i2s_dai);
        if (ret)
                goto err_release_dev;
 
@@ -573,17 +568,16 @@ err_release_none:
 
 static void __devexit s6000_i2s_remove(struct platform_device *pdev)
 {
-       struct s6000_i2s_dev *dev = s6000_i2s_dai.private_data;
+       struct s6000_i2s_dev *dev = dev_get_drvdata(&pdev->dev);
        struct resource *region;
        void __iomem *mmio = dev->scbbase;
 
-       snd_soc_unregister_dai(&s6000_i2s_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        s6000_i2s_stop_channel(dev, 0);
        s6000_i2s_stop_channel(dev, 1);
 
        s6_i2s_write_reg(dev, S6_I2S_INTERRUPT_ENABLE, 0);
-       s6000_i2s_dai.private_data = 0;
        kfree(dev);
 
        region = platform_get_resource(pdev, IORESOURCE_DMA, 0);
index 2375fdfe6dba7dcf996e81dda673417d80b05d64..86aa1921c89e3b06b83b0e75ff78a40c5674a9ef 100644 (file)
@@ -12,8 +12,6 @@
 #ifndef _S6000_I2S_H
 #define _S6000_I2S_H
 
-extern struct snd_soc_dai s6000_i2s_dai;
-
 struct s6000_snd_platform_data {
        int lines_in;
        int lines_out;
index 9c7f7f00cebb45706aa6c8f7302b4a371d469ceb..271fd222bf1997f92cac08b6c8b27f8f604b5147 100644 (file)
@@ -65,7 +65,7 @@ static void s6000_pcm_enqueue_dma(struct snd_pcm_substream *substream)
        dma_addr_t dma_pos;
        dma_addr_t src, dst;
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        period_size = snd_pcm_lib_period_bytes(substream);
        dma_offset = prtd->period * period_size;
@@ -103,23 +103,25 @@ static irqreturn_t s6000_pcm_irq(int irq, void *data)
 {
        struct snd_pcm *pcm = data;
        struct snd_soc_pcm_runtime *runtime = pcm->private_data;
-       struct s6000_pcm_dma_params *params =
-               snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
        struct s6000_runtime_data *prtd;
        unsigned int has_xrun;
        int i, ret = IRQ_NONE;
-       u32 channel[2] = {
-               [SNDRV_PCM_STREAM_PLAYBACK] = params->dma_out,
-               [SNDRV_PCM_STREAM_CAPTURE] = params->dma_in
-       };
-
-       has_xrun = params->check_xrun(runtime->dai->cpu_dai);
 
-       for (i = 0; i < ARRAY_SIZE(channel); ++i) {
+       for (i = 0; i < 2; ++i) {
                struct snd_pcm_substream *substream = pcm->streams[i].substream;
+               struct s6000_pcm_dma_params *params =
+                                       snd_soc_dai_get_dma_data(runtime->cpu_dai, substream);
+               u32 channel;
                unsigned int pending;
 
-               if (!channel[i])
+               if (substream == SNDRV_PCM_STREAM_PLAYBACK)
+                       channel = params->dma_out;
+               else
+                       channel = params->dma_in;
+
+               has_xrun = params->check_xrun(runtime->cpu_dai);
+
+               if (!channel)
                        continue;
 
                if (unlikely(has_xrun & (1 << i)) &&
@@ -130,8 +132,8 @@ static irqreturn_t s6000_pcm_irq(int irq, void *data)
                        ret = IRQ_HANDLED;
                }
 
-               pending = s6dmac_int_sources(DMA_MASK_DMAC(channel[i]),
-                                            DMA_INDEX_CHNL(channel[i]));
+               pending = s6dmac_int_sources(DMA_MASK_DMAC(channel),
+                                            DMA_INDEX_CHNL(channel));
 
                if (pending & 1) {
                        ret = IRQ_HANDLED;
@@ -139,10 +141,10 @@ static irqreturn_t s6000_pcm_irq(int irq, void *data)
                                   snd_pcm_running(substream))) {
                                snd_pcm_period_elapsed(substream);
                                dev_dbg(pcm->dev, "period elapsed %x %x\n",
-                                      s6dmac_cur_src(DMA_MASK_DMAC(channel[i]),
-                                                  DMA_INDEX_CHNL(channel[i])),
-                                      s6dmac_cur_dst(DMA_MASK_DMAC(channel[i]),
-                                                  DMA_INDEX_CHNL(channel[i])));
+                                      s6dmac_cur_src(DMA_MASK_DMAC(channel),
+                                                  DMA_INDEX_CHNL(channel)),
+                                      s6dmac_cur_dst(DMA_MASK_DMAC(channel),
+                                                  DMA_INDEX_CHNL(channel)));
                                prtd = substream->runtime->private_data;
                                spin_lock(&prtd->lock);
                                s6000_pcm_enqueue_dma(substream);
@@ -154,16 +156,16 @@ static irqreturn_t s6000_pcm_irq(int irq, void *data)
                        if (pending & (1 << 3))
                                printk(KERN_WARNING
                                       "s6000-pcm: DMA %x Underflow\n",
-                                      channel[i]);
+                                      channel);
                        if (pending & (1 << 4))
                                printk(KERN_WARNING
                                       "s6000-pcm: DMA %x Overflow\n",
-                                      channel[i]);
+                                      channel);
                        if (pending & 0x1e0)
                                printk(KERN_WARNING
                                       "s6000-pcm: DMA %x Master Error "
                                       "(mask %x)\n",
-                                      channel[i], pending >> 5);
+                                      channel, pending >> 5);
 
                }
        }
@@ -180,7 +182,7 @@ static int s6000_pcm_start(struct snd_pcm_substream *substream)
        int srcinc;
        u32 dma;
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        spin_lock_irqsave(&prtd->lock, flags);
 
@@ -221,7 +223,7 @@ static int s6000_pcm_stop(struct snd_pcm_substream *substream)
        unsigned long flags;
        u32 channel;
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                channel = par->dma_out;
@@ -246,7 +248,7 @@ static int s6000_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
        struct s6000_pcm_dma_params *par;
        int ret;
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        ret = par->trigger(substream, cmd, 0);
        if (ret < 0)
@@ -291,7 +293,7 @@ static snd_pcm_uframes_t s6000_pcm_pointer(struct snd_pcm_substream *substream)
        unsigned int offset;
        dma_addr_t count;
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        spin_lock_irqsave(&prtd->lock, flags);
 
@@ -321,7 +323,7 @@ static int s6000_pcm_open(struct snd_pcm_substream *substream)
        struct s6000_runtime_data *prtd;
        int ret;
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
        snd_soc_set_runtime_hwparams(substream, &s6000_pcm_hardware);
 
        ret = snd_pcm_hw_constraint_step(runtime, 0,
@@ -385,7 +387,7 @@ static int s6000_pcm_hw_params(struct snd_pcm_substream *substream,
                return ret;
        }
 
-       par = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       par = snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        if (par->same_rate) {
                spin_lock(&par->lock);
@@ -407,7 +409,7 @@ static int s6000_pcm_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *soc_runtime = substream->private_data;
        struct s6000_pcm_dma_params *par =
-               snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(soc_runtime->cpu_dai, substream);
 
        spin_lock(&par->lock);
        par->in_use &= ~(1 << substream->stream);
@@ -433,7 +435,7 @@ static void s6000_pcm_free(struct snd_pcm *pcm)
 {
        struct snd_soc_pcm_runtime *runtime = pcm->private_data;
        struct s6000_pcm_dma_params *params =
-               snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+               snd_soc_dai_get_dma_data(runtime->cpu_dai, pcm->streams[0].substream);
 
        free_irq(params->irq, pcm);
        snd_pcm_lib_preallocate_free_for_all(pcm);
@@ -448,7 +450,8 @@ static int s6000_pcm_new(struct snd_card *card,
        struct s6000_pcm_dma_params *params;
        int res;
 
-       params = snd_soc_dai_get_dma_data(soc_runtime->dai->cpu_dai, substream);
+       params = snd_soc_dai_get_dma_data(runtime->cpu_dai,
+                       pcm->streams[0].substream);
 
        if (!card->dev->dma_mask)
                card->dev->dma_mask = &s6000_pcm_dmamask;
@@ -490,25 +493,44 @@ static int s6000_pcm_new(struct snd_card *card,
        return 0;
 }
 
-struct snd_soc_platform s6000_soc_platform = {
-       .name =         "s6000-audio",
-       .pcm_ops =      &s6000_pcm_ops,
+static struct snd_soc_platform_driver s6000_soc_platform = {
+       .ops =          &s6000_pcm_ops,
        .pcm_new =      s6000_pcm_new,
        .pcm_free =     s6000_pcm_free,
 };
-EXPORT_SYMBOL_GPL(s6000_soc_platform);
 
-static int __init s6000_pcm_init(void)
+static int __devinit s6000_soc_platform_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_platform(&pdev->dev, &s6000_soc_platform);
+}
+
+static int __devexit s6000_soc_platform_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver s6000_pcm_driver = {
+       .driver = {
+                       .name = "s6000-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = s6000_soc_platform_probe,
+       .remove = __devexit_p(s6000_soc_platform_remove),
+};
+
+static int __init snd_s6000_pcm_init(void)
 {
-       return snd_soc_register_platform(&s6000_soc_platform);
+       return platform_driver_register(&s6000_pcm_driver);
 }
-module_init(s6000_pcm_init);
+module_init(snd_s6000_pcm_init);
 
-static void __exit s6000_pcm_exit(void)
+static void __exit snd_s6000_pcm_exit(void)
 {
-       snd_soc_unregister_platform(&s6000_soc_platform);
+       platform_driver_unregister(&s6000_pcm_driver);
 }
-module_exit(s6000_pcm_exit);
+module_exit(snd_s6000_pcm_exit);
 
 MODULE_AUTHOR("Daniel Gloeckner");
 MODULE_DESCRIPTION("Stretch s6000 family PCM DMA module");
index 96f23f6f52bf6b6ece9493e1a6d66b95a54fe5c0..09d9b883e58b08b550927ea65a30f70764aad43d 100644 (file)
@@ -30,6 +30,4 @@ struct s6000_pcm_dma_params {
        int rate;
 };
 
-extern struct snd_soc_platform s6000_soc_platform;
-
 #endif
index c1b40ac22c052b22a986dac52435291529ad2bfd..96c05e1375386ebf6f11fd8d6ebcaa7dd118ac07 100644 (file)
@@ -32,8 +32,8 @@ static int s6105_hw_params(struct snd_pcm_substream *substream,
                           struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret = 0;
 
        /* set codec DAI configuration */
@@ -134,8 +134,10 @@ static const struct snd_kcontrol_new audio_out_mux = {
 };
 
 /* Logic for a aic3x as connected on the s6105 ip camera ref design */
-static int s6105_aic3x_init(struct snd_soc_codec *codec)
+static int s6105_aic3x_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        /* Add s6105 specific widgets */
        snd_soc_dapm_new_controls(codec, aic3x_dapm_widgets,
                                  ARRAY_SIZE(aic3x_dapm_widgets));
@@ -165,7 +167,7 @@ static int s6105_aic3x_init(struct snd_soc_codec *codec)
 
        snd_soc_dapm_sync(codec);
 
-       snd_ctl_add(codec->card, snd_ctl_new1(&audio_out_mux, codec));
+       snd_ctl_add(codec->snd_card, snd_ctl_new1(&audio_out_mux, codec));
 
        return 0;
 }
@@ -174,8 +176,10 @@ static int s6105_aic3x_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link s6105_dai = {
        .name = "TLV320AIC31",
        .stream_name = "AIC31",
-       .cpu_dai = &s6000_i2s_dai,
-       .codec_dai = &aic3x_dai,
+       .cpu_dai_name = "s6000-i2s",
+       .codec_dai_name = "tlv320aic3x-hifi",
+       .platform_name = "s6000-pcm-audio",
+       .codec_name = "tlv320aic3x-codec.0-001a",
        .init = s6105_aic3x_init,
        .ops = &s6105_ops,
 };
@@ -183,22 +187,10 @@ static struct snd_soc_dai_link s6105_dai = {
 /* s6105 audio machine driver */
 static struct snd_soc_card snd_soc_card_s6105 = {
        .name = "Stretch IP Camera",
-       .platform = &s6000_soc_platform,
        .dai_link = &s6105_dai,
        .num_links = 1,
 };
 
-/* s6105 audio private data */
-static struct aic3x_setup_data s6105_aic3x_setup = {
-};
-
-/* s6105 audio subsystem */
-static struct snd_soc_device s6105_snd_devdata = {
-       .card = &snd_soc_card_s6105,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &s6105_aic3x_setup,
-};
-
 static struct s6000_snd_platform_data __initdata s6105_snd_data = {
        .wide           = 0,
        .channel_in     = 0,
@@ -227,8 +219,7 @@ static int __init s6105_init(void)
        if (!s6105_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(s6105_snd_device, &s6105_snd_devdata);
-       s6105_snd_devdata.dev = &s6105_snd_device->dev;
+       platform_set_drvdata(s6105_snd_device, &snd_soc_card_s6105);
        platform_device_add_data(s6105_snd_device, &s6105_snd_data,
                                 sizeof(s6105_snd_data));
 
index 0d8bdf07729c559daaf7bc861f379c7b3bbddf0d..c326d29992fe3c90184b7b97cef36ea42f54f3d9 100644 (file)
@@ -137,7 +137,7 @@ static void camelot_rxdma(void *data)
 static int camelot_pcm_open(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id];
+       struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id];
        int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1;
        int ret, dmairq;
 
@@ -150,7 +150,7 @@ static int camelot_pcm_open(struct snd_pcm_substream *substream)
                ret = dmabrg_request_irq(dmairq, camelot_rxdma, cam);
                if (unlikely(ret)) {
                        pr_debug("audio unit %d irqs already taken!\n",
-                            rtd->dai->cpu_dai->id);
+                            rtd->cpu_dai->id);
                        return -EBUSY;
                }
                (void)dmabrg_request_irq(dmairq + 1,camelot_rxdma, cam);
@@ -159,7 +159,7 @@ static int camelot_pcm_open(struct snd_pcm_substream *substream)
                ret = dmabrg_request_irq(dmairq, camelot_txdma, cam);
                if (unlikely(ret)) {
                        pr_debug("audio unit %d irqs already taken!\n",
-                            rtd->dai->cpu_dai->id);
+                            rtd->cpu_dai->id);
                        return -EBUSY;
                }
                (void)dmabrg_request_irq(dmairq + 1, camelot_txdma, cam);
@@ -170,7 +170,7 @@ static int camelot_pcm_open(struct snd_pcm_substream *substream)
 static int camelot_pcm_close(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id];
+       struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id];
        int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1;
        int dmairq;
 
@@ -191,7 +191,7 @@ static int camelot_hw_params(struct snd_pcm_substream *substream,
                             struct snd_pcm_hw_params *hw_params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id];
+       struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id];
        int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1;
        int ret;
 
@@ -219,7 +219,7 @@ static int camelot_prepare(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id];
+       struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id];
 
        pr_debug("PCM data: addr 0x%08ulx len %d\n",
                 (u32)runtime->dma_addr, runtime->dma_bytes);
@@ -266,7 +266,7 @@ static inline void dmabrg_rec_dma_stop(struct camelot_pcm *cam)
 static int camelot_trigger(struct snd_pcm_substream *substream, int cmd)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id];
+       struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id];
        int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1;
 
        switch (cmd) {
@@ -293,7 +293,7 @@ static snd_pcm_uframes_t camelot_pos(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct camelot_pcm *cam = &cam_pcm_data[rtd->dai->cpu_dai->id];
+       struct camelot_pcm *cam = &cam_pcm_data[rtd->cpu_dai->id];
        int recv = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0:1;
        unsigned long pos;
 
@@ -342,25 +342,44 @@ static int camelot_pcm_new(struct snd_card *card,
        return 0;
 }
 
-struct snd_soc_platform sh7760_soc_platform = {
-       .name           = "sh7760-pcm",
+static struct snd_soc_platform sh7760_soc_platform = {
        .pcm_ops        = &camelot_pcm_ops,
        .pcm_new        = camelot_pcm_new,
        .pcm_free       = camelot_pcm_free,
 };
-EXPORT_SYMBOL_GPL(sh7760_soc_platform);
 
-static int __init sh7760_soc_platform_init(void)
+static int __devinit sh7760_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&sh7760_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &sh7760_soc_platform);
 }
-module_init(sh7760_soc_platform_init);
 
-static void __exit sh7760_soc_platform_exit(void)
+static int __devexit sh7760_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&sh7760_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
+}
+
+static struct platform_driver sh7760_pcm_driver = {
+       .driver = {
+                       .name = "sh7760-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = sh7760_soc_platform_probe,
+       .remove = __devexit_p(sh7760_soc_platform_remove),
+};
+
+static int __init snd_sh7760_pcm_init(void)
+{
+       return platform_driver_register(&sh7760_pcm_driver);
+}
+module_init(snd_sh7760_pcm_init);
+
+static void __exit snd_sh7760_pcm_exit(void)
+{
+       platform_driver_unregister(&sh7760_pcm_driver);
 }
-module_exit(sh7760_soc_platform_exit);
+module_exit(snd_sh7760_pcm_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SH7760 Audio DMA (DMABRG) driver");
index dad575a2262228fc1ffa6511bc036d74beade9dc..9e107a9c40105f9e37dffdfe8a5c7aff1c6d10ec 100644 (file)
 
 #include <linux/platform_device.h>
 #include <sound/sh_fsi.h>
-#include <../sound/soc/codecs/ak4642.h>
 
-static int fsi_ak4642_dai_init(struct snd_soc_codec *codec)
+static int fsi_ak4642_dai_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_dai *dai = rtd->codec_dai;
        int ret;
 
-       ret = snd_soc_dai_set_fmt(&ak4642_dai, SND_SOC_DAIFMT_CBM_CFM);
+       ret = snd_soc_dai_set_fmt(dai, SND_SOC_DAIFMT_CBM_CFM);
        if (ret < 0)
                return ret;
 
-       ret = snd_soc_dai_set_sysclk(&ak4642_dai, 0, 11289600, 0);
+       ret = snd_soc_dai_set_sysclk(dai, 0, 11289600, 0);
 
        return ret;
 }
@@ -29,24 +29,20 @@ static int fsi_ak4642_dai_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link fsi_dai_link = {
        .name           = "AK4642",
        .stream_name    = "AK4642",
-       .cpu_dai        = &fsi_soc_dai[FSI_PORT_A],
-       .codec_dai      = &ak4642_dai,
+       .cpu_dai_name   = "fsia-dai", /* fsi A */
+       .codec_dai_name = "ak4642-hifi",
+       .platform_name  = "fsi-pcm-audio",
+       .codec_name     = "ak4642-codec.0-0012",
        .init           = fsi_ak4642_dai_init,
        .ops            = NULL,
 };
 
 static struct snd_soc_card fsi_soc_card  = {
        .name           = "FSI",
-       .platform       = &fsi_soc_platform,
        .dai_link       = &fsi_dai_link,
        .num_links      = 1,
 };
 
-static struct snd_soc_device fsi_snd_devdata = {
-       .card           = &fsi_soc_card,
-       .codec_dev      = &soc_codec_dev_ak4642,
-};
-
 static struct platform_device *fsi_snd_device;
 
 static int __init fsi_ak4642_init(void)
@@ -57,9 +53,7 @@ static int __init fsi_ak4642_init(void)
        if (!fsi_snd_device)
                goto out;
 
-       platform_set_drvdata(fsi_snd_device,
-                            &fsi_snd_devdata);
-       fsi_snd_devdata.dev = &fsi_snd_device->dev;
+       platform_set_drvdata(fsi_snd_device, &fsi_soc_card);
        ret = platform_device_add(fsi_snd_device);
 
        if (ret)
index 121bbb07bb03b7677280dcf7f8e9316c686de332..4f9298f45215c7190a1433f1670d2579ab6405e1 100644 (file)
 
 #include <linux/platform_device.h>
 #include <sound/sh_fsi.h>
-#include "../codecs/da7210.h"
 
-static int fsi_da7210_init(struct snd_soc_codec *codec)
+static int fsi_da7210_init(struct snd_soc_pcm_runtime *rtd)
 {
-       return snd_soc_dai_set_fmt(&da7210_dai,
+       struct snd_soc_dai *dai = rtd->codec_dai;
+
+       return snd_soc_dai_set_fmt(dai,
                                   SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
                                   SND_SOC_DAIFMT_CBM_CFM);
 }
@@ -24,23 +25,19 @@ static int fsi_da7210_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link fsi_da7210_dai = {
        .name           = "DA7210",
        .stream_name    = "DA7210",
-       .cpu_dai        = &fsi_soc_dai[FSI_PORT_B],
-       .codec_dai      = &da7210_dai,
+       .cpu_dai_name   = "fsib-dai", /* FSI B */
+       .codec_dai_name = "da7210-hifi",
+       .platform_name  = "fsi-pcm-audio",
+       .codec_name     = "da7210-codec.0-001a",
        .init           = fsi_da7210_init,
 };
 
 static struct snd_soc_card fsi_soc_card = {
        .name           = "FSI",
-       .platform       = &fsi_soc_platform,
        .dai_link       = &fsi_da7210_dai,
        .num_links      = 1,
 };
 
-static struct snd_soc_device fsi_da7210_snd_devdata = {
-       .card           = &fsi_soc_card,
-       .codec_dev      = &soc_codec_dev_da7210,
-};
-
 static struct platform_device *fsi_da7210_snd_device;
 
 static int __init fsi_da7210_sound_init(void)
@@ -51,8 +48,7 @@ static int __init fsi_da7210_sound_init(void)
        if (!fsi_da7210_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(fsi_da7210_snd_device, &fsi_da7210_snd_devdata);
-       fsi_da7210_snd_devdata.dev = &fsi_da7210_snd_device->dev;
+       platform_set_drvdata(fsi_da7210_snd_device, &fsi_soc_card);
        ret = platform_device_add(fsi_da7210_snd_device);
        if (ret)
                platform_device_put(fsi_da7210_snd_device);
index 58c6bec642decf3093746f577fd387c0688ad459..abc6d83096093885d4bdeae9b991ae0eeeef642e 100644 (file)
@@ -271,16 +271,19 @@ static int fsi_is_port_a(struct fsi_priv *fsi)
 static struct snd_soc_dai *fsi_get_dai(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai_link *machine = rtd->dai;
 
-       return  machine->cpu_dai;
+       return  rtd->cpu_dai;
 }
 
 static struct fsi_priv *fsi_get_priv(struct snd_pcm_substream *substream)
 {
        struct snd_soc_dai *dai = fsi_get_dai(substream);
+       struct fsi_master *master = snd_soc_dai_get_drvdata(dai);
 
-       return dai->private_data;
+       if (dai->id == 0)
+               return &master->fsia;
+       else
+               return &master->fsib;
 }
 
 static u32 fsi_get_info_flags(struct fsi_priv *fsi)
@@ -1025,10 +1028,9 @@ static int fsi_pcm_new(struct snd_card *card,
 
 
 ************************************************************************/
-struct snd_soc_dai fsi_soc_dai[] = {
+static struct snd_soc_dai_driver fsi_soc_dai[] = {
        {
-               .name                   = "FSIA",
-               .id                     = 0,
+               .name                   = "fsia-dai",
                .playback = {
                        .rates          = FSI_RATES,
                        .formats        = FSI_FMTS,
@@ -1044,8 +1046,7 @@ struct snd_soc_dai fsi_soc_dai[] = {
                .ops = &fsi_dai_ops,
        },
        {
-               .name                   = "FSIB",
-               .id                     = 1,
+               .name                   = "fsib-dai",
                .playback = {
                        .rates          = FSI_RATES,
                        .formats        = FSI_FMTS,
@@ -1061,15 +1062,12 @@ struct snd_soc_dai fsi_soc_dai[] = {
                .ops = &fsi_dai_ops,
        },
 };
-EXPORT_SYMBOL_GPL(fsi_soc_dai);
 
-struct snd_soc_platform fsi_soc_platform = {
-       .name           = "fsi-pcm",
-       .pcm_ops        = &fsi_pcm_ops,
+static struct snd_soc_platform_driver fsi_soc_platform = {
+       .ops            = &fsi_pcm_ops,
        .pcm_new        = fsi_pcm_new,
        .pcm_free       = fsi_pcm_free,
 };
-EXPORT_SYMBOL_GPL(fsi_soc_platform);
 
 /************************************************************************
 
@@ -1132,11 +1130,7 @@ static int fsi_probe(struct platform_device *pdev)
 
        pm_runtime_enable(&pdev->dev);
        pm_runtime_resume(&pdev->dev);
-
-       fsi_soc_dai[0].dev              = &pdev->dev;
-       fsi_soc_dai[0].private_data     = &master->fsia;
-       fsi_soc_dai[1].dev              = &pdev->dev;
-       fsi_soc_dai[1].private_data     = &master->fsib;
+       dev_set_drvdata(&pdev->dev, master);
 
        fsi_soft_all_reset(master);
 
@@ -1147,13 +1141,13 @@ static int fsi_probe(struct platform_device *pdev)
                goto exit_iounmap;
        }
 
-       ret = snd_soc_register_platform(&fsi_soc_platform);
+       ret = snd_soc_register_platform(&pdev->dev, &fsi_soc_platform);
        if (ret < 0) {
                dev_err(&pdev->dev, "cannot snd soc register\n");
                goto exit_free_irq;
        }
 
-       return snd_soc_register_dais(fsi_soc_dai, ARRAY_SIZE(fsi_soc_dai));
+       return snd_soc_register_dais(&pdev->dev, fsi_soc_dai, ARRAY_SIZE(fsi_soc_dai));
 
 exit_free_irq:
        free_irq(irq, master);
@@ -1171,10 +1165,10 @@ static int fsi_remove(struct platform_device *pdev)
 {
        struct fsi_master *master;
 
-       master = fsi_get_master(fsi_soc_dai[0].private_data);
+       master = dev_get_drvdata(&pdev->dev);
 
-       snd_soc_unregister_dais(fsi_soc_dai, ARRAY_SIZE(fsi_soc_dai));
-       snd_soc_unregister_platform(&fsi_soc_platform);
+       snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(fsi_soc_dai));
+       snd_soc_unregister_platform(&pdev->dev);
 
        pm_runtime_disable(&pdev->dev);
 
@@ -1183,11 +1177,6 @@ static int fsi_remove(struct platform_device *pdev)
        iounmap(master->base);
        kfree(master);
 
-       fsi_soc_dai[0].dev              = NULL;
-       fsi_soc_dai[0].private_data     = NULL;
-       fsi_soc_dai[1].dev              = NULL;
-       fsi_soc_dai[1].private_data     = NULL;
-
        return 0;
 }
 
@@ -1233,7 +1222,7 @@ static struct platform_device_id fsi_id_table[] = {
 
 static struct platform_driver fsi_driver = {
        .driver         = {
-               .name   = "sh_fsi",
+               .name   = "fsi-pcm-audio",
                .pm     = &fsi_pm_ops,
        },
        .probe          = fsi_probe,
index 41db75af3c69d3b64f2420e07acfb2ca3473fa45..c87e3ff28a0a02957bbd37c2de21d96b661e569e 100644 (file)
@@ -239,8 +239,7 @@ static int hac_hw_params(struct snd_pcm_substream *substream,
                         struct snd_pcm_hw_params *params,
                         struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct hac_priv *hac = &hac_cpu_data[rtd->dai->cpu_dai->id];
+       struct hac_priv *hac = &hac_cpu_data[dai->id];
        int d = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1;
 
        switch (params->msbits) {
@@ -271,10 +270,9 @@ static struct snd_soc_dai_ops hac_dai_ops = {
        .hw_params      = hac_hw_params,
 };
 
-struct snd_soc_dai sh4_hac_dai[] = {
+static struct snd_soc_dai_driver sh4_hac_dai[] = {
 {
-       .name                   = "HAC0",
-       .id                     = 0,
+       .name                   = "hac-dai.0",
        .ac97_control           = 1,
        .playback = {
                .rates          = AC97_RATES,
@@ -292,8 +290,7 @@ struct snd_soc_dai sh4_hac_dai[] = {
 },
 #ifdef CONFIG_CPU_SUBTYPE_SH7760
 {
-       .name                   = "HAC1",
-       .ac97_control           = 1,
+       .name                   = "hac-dai.1",
        .id                     = 1,
        .playback = {
                .rates          = AC97_RATES,
@@ -312,19 +309,40 @@ struct snd_soc_dai sh4_hac_dai[] = {
 },
 #endif
 };
-EXPORT_SYMBOL_GPL(sh4_hac_dai);
 
-static int __init sh4_hac_init(void)
+static int __devinit hac_soc_platform_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dais(&pdev->dev, sh4_hac_dai,
+                       ARRAY_SIZE(sh4_hac_dai));
+}
+
+static int __devexit hac_soc_platform_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dais(&pdev->dev, ARRAY_SIZE(sh4_hac_dai));
+       return 0;
+}
+
+static struct platform_driver hac_pcm_driver = {
+       .driver = {
+                       .name = "hac-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = hac_soc_platform_probe,
+       .remove = __devexit_p(hac_soc_platform_remove),
+};
+
+static int __init sh4_hac_pcm_init(void)
 {
-       return snd_soc_register_dais(sh4_hac_dai, ARRAY_SIZE(sh4_hac_dai));
+       return platform_driver_register(&hac_pcm_driver);
 }
-module_init(sh4_hac_init);
+module_init(sh4_hac_pcm_init);
 
-static void __exit sh4_hac_exit(void)
+static void __exit sh4_hac_pcm_exit(void)
 {
-       snd_soc_unregister_dais(sh4_hac_dai, ARRAY_SIZE(sh4_hac_dai));
+       platform_driver_unregister(&hac_pcm_driver);
 }
-module_exit(sh4_hac_exit);
+module_exit(sh4_hac_pcm_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SuperH onchip HAC (AC97) audio driver");
index b823a5c9b9bc81d81b8f64f4847483eae3f253bc..866d78fb839852f89c5db9c00f38c978979d1ec5 100644 (file)
@@ -50,7 +50,7 @@ static int migor_hw_params(struct snd_pcm_substream *substream,
                           struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret;
        unsigned int rate = params_rate(params);
 
@@ -68,7 +68,7 @@ static int migor_hw_params(struct snd_pcm_substream *substream,
        if (ret < 0)
                return ret;
 
-       ret = snd_soc_dai_set_fmt(rtd->dai->cpu_dai, SND_SOC_DAIFMT_NB_IF |
+       ret = snd_soc_dai_set_fmt(rtd->cpu_dai, SND_SOC_DAIFMT_NB_IF |
                                  SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS);
        if (ret < 0)
                return ret;
@@ -81,7 +81,7 @@ static int migor_hw_params(struct snd_pcm_substream *substream,
        clk_set_rate(&siumckb_clk, codec_freq);
        dev_dbg(codec_dai->dev, "%s: configure %luHz\n", __func__, codec_freq);
 
-       ret = snd_soc_dai_set_sysclk(rtd->dai->cpu_dai, SIU_CLKB_EXT,
+       ret = snd_soc_dai_set_sysclk(rtd->cpu_dai, SIU_CLKB_EXT,
                                     codec_freq / 2, SND_SOC_CLOCK_IN);
 
        if (!ret)
@@ -93,7 +93,7 @@ static int migor_hw_params(struct snd_pcm_substream *substream,
 static int migor_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        if (use_count) {
                use_count--;
@@ -136,8 +136,10 @@ static const struct snd_soc_dapm_route audio_map[] = {
        { "Mic Bias", NULL, "External Microphone" },
 };
 
-static int migor_dai_init(struct snd_soc_codec *codec)
+static int migor_dai_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+
        snd_soc_dapm_new_controls(codec, migor_dapm_widgets,
                                  ARRAY_SIZE(migor_dapm_widgets));
 
@@ -150,8 +152,10 @@ static int migor_dai_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link migor_dai = {
        .name = "wm8978",
        .stream_name = "WM8978",
-       .cpu_dai = &siu_i2s_dai,
-       .codec_dai = &wm8978_dai,
+       .cpu_dai_name = "siu-i2s-dai",
+       .codec_dai_name = "wm8978-hifi",
+       .platform_name = "siu-pcm-audio",
+       .codec_name = "wm8978-codec.0-001a",
        .ops = &migor_dai_ops,
        .init = migor_dai_init,
 };
@@ -159,17 +163,10 @@ static struct snd_soc_dai_link migor_dai = {
 /* migor audio machine driver */
 static struct snd_soc_card snd_soc_migor = {
        .name = "Migo-R",
-       .platform = &siu_platform,
        .dai_link = &migor_dai,
        .num_links = 1,
 };
 
-/* migor audio subsystem */
-static struct snd_soc_device migor_snd_devdata = {
-       .card = &snd_soc_migor,
-       .codec_dev = &soc_codec_dev_wm8978,
-};
-
 static struct platform_device *migor_snd_device;
 
 static int __init migor_init(void)
@@ -187,9 +184,7 @@ static int __init migor_init(void)
                goto epdevalloc;
        }
 
-       platform_set_drvdata(migor_snd_device, &migor_snd_devdata);
-
-       migor_snd_devdata.dev = &migor_snd_device->dev;
+       platform_set_drvdata(migor_snd_device, &snd_soc_migor);
 
        ret = platform_device_add(migor_snd_device);
        if (ret)
index ce7f95b59de32aa3efe58bd46389ecb1d0b98c5e..b897f7b96d8990bbd0bee2c199bdf4531b9c6840 100644 (file)
 #include <sound/soc-dapm.h>
 #include <asm/io.h>
 
-#include "../codecs/ac97.h"
-
 #define IPSEL 0xFE400034
 
 /* platform specific structs can be declared here */
-extern struct snd_soc_dai sh4_hac_dai[2];
-extern struct snd_soc_platform sh7760_soc_platform;
+extern struct snd_soc_dai_driver sh4_hac_dai[2];
+extern struct snd_soc_platform_driver sh7760_soc_platform;
 
-static int machine_init(struct snd_soc_codec *codec)
+static int machine_init(struct snd_soc_pcm_runtime *rtd)
 {
-       snd_soc_dapm_sync(codec);
+       snd_soc_dapm_sync(rtd->codec);
        return 0;
 }
 
 static struct snd_soc_dai_link sh7760_ac97_dai = {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &sh4_hac_dai[0],     /* HAC0 */
-       .codec_dai = &ac97_dai,
+       .cpu_dai_name = "hac-dai.0",    /* HAC0 */
+       .codec_dai_name = "ac97-hifi",
+       .platform_name = "sh7760-pcm-audio",
+       .codec_name = "ac97-codec",
        .init = machine_init,
        .ops = NULL,
 };
 
 static struct snd_soc_card sh7760_ac97_soc_machine  = {
        .name = "SH7760 AC97",
-       .platform = &sh7760_soc_platform,
        .dai_link = &sh7760_ac97_dai,
        .num_links = 1,
 };
 
-static struct snd_soc_device sh7760_ac97_snd_devdata = {
-       .card = &sh7760_ac97_soc_machine,
-       .codec_dev = &soc_codec_dev_ac97,
-};
-
 static struct platform_device *sh7760_ac97_snd_device;
 
 static int __init sh7760_ac97_init(void)
@@ -67,8 +61,7 @@ static int __init sh7760_ac97_init(void)
                goto out;
 
        platform_set_drvdata(sh7760_ac97_snd_device,
-                            &sh7760_ac97_snd_devdata);
-       sh7760_ac97_snd_devdata.dev = &sh7760_ac97_snd_device->dev;
+                            &sh7760_ac97_soc_machine);
        ret = platform_device_add(sh7760_ac97_snd_device);
 
        if (ret)
index 492b1cae24ccb3dcd3b36681866aca923e78752b..aa239ff7310d6578f9b2d8a6c5e87f30ab2b7036 100644 (file)
@@ -181,8 +181,9 @@ static inline u32 siu_read32(u32 __iomem *addr)
 #define SIU_BRGBSEL    (0x108 / sizeof(u32))
 #define SIU_BRRB       (0x10c / sizeof(u32))
 
-extern struct snd_soc_platform siu_platform;
-extern struct snd_soc_dai siu_i2s_dai;
+extern struct snd_soc_platform_driver siu_platform;
+extern struct snd_soc_dai_driver siu_i2s_dai;
+extern struct siu_info *siu_i2s_data;
 
 int siu_init_port(int port, struct siu_port **port_info, struct snd_card *card);
 void siu_free_port(struct siu_port *port_info);
index eeed5edd722b2df38e4449f8b8e78d815c4fbcfd..827940a8e2487f82c53042d58be04fc05af23d58 100644 (file)
@@ -71,6 +71,9 @@ struct port_flag {
        struct format_flag      capture;
 };
 
+struct siu_info *siu_i2s_data = NULL;
+EXPORT_SYMBOL_GPL(siu_i2s_data);
+
 static struct port_flag siu_flags[SIU_PORT_NUM] = {
        [SIU_PORT_A] = {
                .playback = {
@@ -104,13 +107,13 @@ static struct port_flag siu_flags[SIU_PORT_NUM] = {
 
 static void siu_dai_start(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
 
        dev_dbg(port_info->pcm->card->dev, "%s\n", __func__);
 
        /* Turn on SIU clock */
-       pm_runtime_get_sync(siu_i2s_dai.dev);
+       pm_runtime_get_sync(port_info->pcm->card->dev);
 
        /* Issue software reset to siu */
        siu_write32(base + SIU_SRCTL, 0);
@@ -148,21 +151,21 @@ static void siu_dai_start(struct siu_port *port_info)
        siu_write32(base + SIU_SBDVCB, port_info->capture.volume);
 }
 
-static void siu_dai_stop(void)
+static void siu_dai_stop(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
 
        /* SIU software reset */
        siu_write32(base + SIU_SRCTL, 0);
 
        /* Turn off SIU clock */
-       pm_runtime_put_sync(siu_i2s_dai.dev);
+       pm_runtime_put_sync(port_info->pcm->card->dev);
 }
 
 static void siu_dai_spbAselect(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct siu_firmware *fw = &info->fw;
        u32 *ydef = fw->yram0;
        u32 idx;
@@ -187,7 +190,7 @@ static void siu_dai_spbAselect(struct siu_port *port_info)
 
 static void siu_dai_spbBselect(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct siu_firmware *fw = &info->fw;
        u32 *ydef = fw->yram0;
        u32 idx;
@@ -207,7 +210,7 @@ static void siu_dai_spbBselect(struct siu_port *port_info)
 
 static void siu_dai_open(struct siu_stream *siu_stream)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        u32 srctl, ifctl;
 
@@ -238,7 +241,7 @@ static void siu_dai_open(struct siu_stream *siu_stream)
  */
 static void siu_dai_pcmdatapack(struct siu_stream *siu_stream)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        u32 dpak;
 
@@ -258,7 +261,7 @@ static void siu_dai_pcmdatapack(struct siu_stream *siu_stream)
 
 static int siu_dai_spbstart(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        struct siu_firmware *fw = &info->fw;
        u32 *ydef = fw->yram0;
@@ -323,7 +326,7 @@ static int siu_dai_spbstart(struct siu_port *port_info)
 
 static void siu_dai_spbstop(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
 
        siu_write32(base + SIU_SBACTIV, 0);
@@ -402,7 +405,7 @@ static int siu_dai_put_volume(struct snd_kcontrol *kctrl,
 {
        struct siu_port *port_info = snd_kcontrol_chip(kctrl);
        struct device *dev = port_info->pcm->card->dev;
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        u32 new_vol;
        u32 cur_vol;
@@ -510,7 +513,7 @@ void siu_free_port(struct siu_port *port_info)
 static int siu_dai_startup(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = snd_soc_dai_get_drvdata(dai);
        struct snd_pcm_runtime *rt = substream->runtime;
        struct siu_port *port_info = siu_port_info(substream);
        int ret;
@@ -532,7 +535,7 @@ static int siu_dai_startup(struct snd_pcm_substream *substream,
 static void siu_dai_shutdown(struct snd_pcm_substream *substream,
                             struct snd_soc_dai *dai)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = snd_soc_dai_get_drvdata(dai);
        struct siu_port *port_info = siu_port_info(substream);
 
        dev_dbg(substream->pcm->card->dev, "%s: port=%d@%p\n", __func__,
@@ -548,7 +551,7 @@ static void siu_dai_shutdown(struct snd_pcm_substream *substream,
                /* during stmread or stmwrite ? */
                BUG_ON(port_info->playback.rw_flg || port_info->capture.rw_flg);
                siu_dai_spbstop(port_info);
-               siu_dai_stop();
+               siu_dai_stop(port_info);
        }
 }
 
@@ -556,7 +559,7 @@ static void siu_dai_shutdown(struct snd_pcm_substream *substream,
 static int siu_dai_prepare(struct snd_pcm_substream *substream,
                           struct snd_soc_dai *dai)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = snd_soc_dai_get_drvdata(dai);
        struct snd_pcm_runtime *rt = substream->runtime;
        struct siu_port *port_info = siu_port_info(substream);
        struct siu_stream *siu_stream;
@@ -605,7 +608,7 @@ fail:
 static int siu_dai_set_fmt(struct snd_soc_dai *dai,
                           unsigned int fmt)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = snd_soc_dai_get_drvdata(dai);
        u32 __iomem *base = info->reg;
        u32 ifctl;
 
@@ -671,11 +674,11 @@ static int siu_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
                return -EINVAL;
        }
 
-       siu_clk = clk_get(siu_i2s_dai.dev, siu_name);
+       siu_clk = clk_get(dai->dev, siu_name);
        if (IS_ERR(siu_clk))
                return PTR_ERR(siu_clk);
 
-       parent_clk = clk_get(siu_i2s_dai.dev, parent_name);
+       parent_clk = clk_get(dai->dev, parent_name);
        if (!IS_ERR(parent_clk)) {
                ret = clk_set_parent(siu_clk, parent_clk);
                if (!ret)
@@ -696,9 +699,8 @@ static struct snd_soc_dai_ops siu_dai_ops = {
        .set_fmt        = siu_dai_set_fmt,
 };
 
-struct snd_soc_dai siu_i2s_dai = {
-       .name = "sh-siu",
-       .id = 0,
+static struct snd_soc_dai_driver siu_i2s_dai = {
+       .name   = "sui-i2s-dai",
        .playback = {
                .channels_min = 2,
                .channels_max = 2,
@@ -713,7 +715,6 @@ struct snd_soc_dai siu_i2s_dai = {
         },
        .ops = &siu_dai_ops,
 };
-EXPORT_SYMBOL_GPL(siu_i2s_dai);
 
 static int __devinit siu_probe(struct platform_device *pdev)
 {
@@ -725,6 +726,7 @@ static int __devinit siu_probe(struct platform_device *pdev)
        info = kmalloc(sizeof(*info), GFP_KERNEL);
        if (!info)
                return -ENOMEM;
+       siu_i2s_data = info;
 
        ret = request_firmware(&fw_entry, "siu_spb.bin", &pdev->dev);
        if (ret)
@@ -767,14 +769,14 @@ static int __devinit siu_probe(struct platform_device *pdev)
        if (!info->reg)
                goto emapreg;
 
-       siu_i2s_dai.dev = &pdev->dev;
-       siu_i2s_dai.private_data = info;
+       dev_set_drvdata(&pdev->dev, info);
 
-       ret = snd_soc_register_dais(&siu_i2s_dai, 1);
+       /* register using ARRAY version so we can keep dai name */
+       ret = snd_soc_register_dais(&pdev->dev, &siu_i2s_dai, 1);
        if (ret < 0)
                goto edaiinit;
 
-       ret = snd_soc_register_platform(&siu_platform);
+       ret = snd_soc_register_platform(&pdev->dev, &siu_platform);
        if (ret < 0)
                goto esocregp;
 
@@ -783,7 +785,7 @@ static int __devinit siu_probe(struct platform_device *pdev)
        return ret;
 
 esocregp:
-       snd_soc_unregister_dais(&siu_i2s_dai, 1);
+       snd_soc_unregister_dai(&pdev->dev);
 edaiinit:
        iounmap(info->reg);
 emapreg:
@@ -804,13 +806,13 @@ ereqfw:
 
 static int __devexit siu_remove(struct platform_device *pdev)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = dev_get_drvdata(&pdev->dev);
        struct resource *res;
 
        pm_runtime_disable(&pdev->dev);
 
-       snd_soc_unregister_platform(&siu_platform);
-       snd_soc_unregister_dais(&siu_i2s_dai, 1);
+       snd_soc_unregister_platform(&pdev->dev);
+       snd_soc_unregister_dai(&pdev->dev);
 
        iounmap(info->reg);
        iounmap(info->yram);
@@ -826,7 +828,7 @@ static int __devexit siu_remove(struct platform_device *pdev)
 
 static struct platform_driver siu_driver = {
        .driver         = {
-               .name   = "sh_siu",
+               .name   = "siu-pcm-audio",
        },
        .probe          = siu_probe,
        .remove         = __devexit_p(siu_remove),
index 36170be15aa7453cfacf00505d18d162b369ca32..440476993325093ef7a6b1d8769c27f5820e4bb3 100644 (file)
@@ -48,7 +48,7 @@ struct siu_port *siu_ports[SIU_PORT_NUM];
 /* transfersize is number of u32 dma transfers per period */
 static int siu_pcm_stmwrite_stop(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        struct siu_stream *siu_stream = &port_info->playback;
        u32 stfifo;
@@ -114,7 +114,7 @@ static void siu_dma_tx_complete(void *arg)
 static int siu_pcm_wr_set(struct siu_port *port_info,
                          dma_addr_t buff, u32 size)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        struct siu_stream *siu_stream = &port_info->playback;
        struct snd_pcm_substream *substream = siu_stream->substream;
@@ -161,7 +161,7 @@ static int siu_pcm_wr_set(struct siu_port *port_info,
 static int siu_pcm_rd_set(struct siu_port *port_info,
                          dma_addr_t buff, size_t size)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        struct siu_stream *siu_stream = &port_info->capture;
        struct snd_pcm_substream *substream = siu_stream->substream;
@@ -270,7 +270,7 @@ static int siu_pcm_stmread_start(struct siu_port *port_info)
 
 static int siu_pcm_stmread_stop(struct siu_port *port_info)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        struct siu_stream *siu_stream = &port_info->capture;
        struct device *dev = siu_stream->substream->pcm->card->dev;
@@ -294,7 +294,7 @@ static int siu_pcm_stmread_stop(struct siu_port *port_info)
 static int siu_pcm_hw_params(struct snd_pcm_substream *ss,
                             struct snd_pcm_hw_params *hw_params)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct device *dev = ss->pcm->card->dev;
        int ret;
 
@@ -309,7 +309,7 @@ static int siu_pcm_hw_params(struct snd_pcm_substream *ss,
 
 static int siu_pcm_hw_free(struct snd_pcm_substream *ss)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct siu_port *port_info = siu_port_info(ss);
        struct device *dev = ss->pcm->card->dev;
        struct siu_stream *siu_stream;
@@ -340,11 +340,12 @@ static bool filter(struct dma_chan *chan, void *slave)
 static int siu_pcm_open(struct snd_pcm_substream *ss)
 {
        /* Playback / Capture */
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct snd_soc_pcm_runtime *rtd = ss->private_data;
+       struct siu_platform *pdata = snd_soc_platform_get_drvdata(rtd->platform);
+       struct siu_info *info = siu_i2s_data;
        struct siu_port *port_info = siu_port_info(ss);
        struct siu_stream *siu_stream;
        u32 port = info->port_id;
-       struct siu_platform *pdata = siu_i2s_dai.dev->platform_data;
        struct device *dev = ss->pcm->card->dev;
        dma_cap_mask_t mask;
        struct sh_dmae_slave *param;
@@ -381,7 +382,7 @@ static int siu_pcm_open(struct snd_pcm_substream *ss)
 
 static int siu_pcm_close(struct snd_pcm_substream *ss)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct device *dev = ss->pcm->card->dev;
        struct siu_port *port_info = siu_port_info(ss);
        struct siu_stream *siu_stream;
@@ -403,7 +404,7 @@ static int siu_pcm_close(struct snd_pcm_substream *ss)
 
 static int siu_pcm_prepare(struct snd_pcm_substream *ss)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct siu_port *port_info = siu_port_info(ss);
        struct device *dev = ss->pcm->card->dev;
        struct snd_pcm_runtime  *rt = ss->runtime;
@@ -449,7 +450,7 @@ static int siu_pcm_prepare(struct snd_pcm_substream *ss)
 
 static int siu_pcm_trigger(struct snd_pcm_substream *ss, int cmd)
 {
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct device *dev = ss->pcm->card->dev;
        struct siu_port *port_info = siu_port_info(ss);
        int ret;
@@ -492,7 +493,7 @@ static int siu_pcm_trigger(struct snd_pcm_substream *ss, int cmd)
 static snd_pcm_uframes_t siu_pcm_pointer_dma(struct snd_pcm_substream *ss)
 {
        struct device *dev = ss->pcm->card->dev;
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        u32 __iomem *base = info->reg;
        struct siu_port *port_info = siu_port_info(ss);
        struct snd_pcm_runtime *rt = ss->runtime;
@@ -528,7 +529,7 @@ static int siu_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
                       struct snd_pcm *pcm)
 {
        /* card->dev == socdev->dev, see snd_soc_new_pcms() */
-       struct siu_info *info = siu_i2s_dai.private_data;
+       struct siu_info *info = siu_i2s_data;
        struct platform_device *pdev = to_platform_device(card->dev);
        int ret;
        int i;
@@ -605,9 +606,8 @@ static struct snd_pcm_ops siu_pcm_ops = {
        .pointer        = siu_pcm_pointer_dma,
 };
 
-struct snd_soc_platform siu_platform = {
-       .name           = "siu-audio",
-       .pcm_ops        = &siu_pcm_ops,
+struct snd_soc_platform_driver siu_platform = {
+       .ops                    = &siu_pcm_ops,
        .pcm_new        = siu_pcm_new,
        .pcm_free       = siu_pcm_free,
 };
index b378096cadb1566e4e6dad55ae94cf7c0f6e9e25..40bbdf1591dca351631f8bdbbcc5f514e9c99139 100644 (file)
@@ -92,8 +92,7 @@ struct ssi_priv {
 static int ssi_startup(struct snd_pcm_substream *substream,
                       struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct ssi_priv *ssi = &ssi_cpu_data[rtd->dai->cpu_dai->id];
+       struct ssi_priv *ssi = &ssi_cpu_data[dai->id];
        if (ssi->inuse) {
                pr_debug("ssi: already in use!\n");
                return -EBUSY;
@@ -105,8 +104,7 @@ static int ssi_startup(struct snd_pcm_substream *substream,
 static void ssi_shutdown(struct snd_pcm_substream *substream,
                         struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct ssi_priv *ssi = &ssi_cpu_data[rtd->dai->cpu_dai->id];
+       struct ssi_priv *ssi = &ssi_cpu_data[dai->id];
 
        ssi->inuse = 0;
 }
@@ -114,8 +112,7 @@ static void ssi_shutdown(struct snd_pcm_substream *substream,
 static int ssi_trigger(struct snd_pcm_substream *substream, int cmd,
                       struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct ssi_priv *ssi = &ssi_cpu_data[rtd->dai->cpu_dai->id];
+       struct ssi_priv *ssi = &ssi_cpu_data[dai->id];
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
@@ -135,8 +132,7 @@ static int ssi_hw_params(struct snd_pcm_substream *substream,
                         struct snd_pcm_hw_params *params,
                         struct snd_soc_dai *dai)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct ssi_priv *ssi = &ssi_cpu_data[rtd->dai->cpu_dai->id];
+       struct ssi_priv *ssi = &ssi_cpu_data[dai->id];
        unsigned long ssicr = SSIREG(SSICR);
        unsigned int bits, channels, swl, recv, i;
 
@@ -346,10 +342,9 @@ static struct snd_soc_dai_ops ssi_dai_ops = {
        .set_fmt        = ssi_set_fmt,
 };
 
-struct snd_soc_dai sh4_ssi_dai[] = {
+struct snd_soc_dai_driver sh4_ssi_dai[] = {
 {
-       .name                   = "SSI0",
-       .id                     = 0,
+       .name                   = "ssi-dai.0",
        .playback = {
                .rates          = SSI_RATES,
                .formats        = SSI_FMTS,
@@ -366,8 +361,7 @@ struct snd_soc_dai sh4_ssi_dai[] = {
 },
 #ifdef CONFIG_CPU_SUBTYPE_SH7760
 {
-       .name                   = "SSI1",
-       .id                     = 1,
+       .name                   = "ssi-dai.1",
        .playback = {
                .rates          = SSI_RATES,
                .formats        = SSI_FMTS,
@@ -384,19 +378,40 @@ struct snd_soc_dai sh4_ssi_dai[] = {
 },
 #endif
 };
-EXPORT_SYMBOL_GPL(sh4_ssi_dai);
 
-static int __init sh4_ssi_init(void)
+static int __devinit sh4_soc_dai_probe(struct platform_device *pdev)
+{
+       return snd_soc_register_dais(&pdev->dev, sh4_ssi_dai,
+                       ARRAY_SIZE(sh4_ssi_dai));
+}
+
+static int __devexit sh4_soc_dai_remove(struct platform_device *pdev)
+{
+       snd_soc_unregister_dai(&pdev->dev, ARRAY_SIZE(sh4_ssi_dai));
+       return 0;
+}
+
+static struct platform_driver sh4_ssi_driver = {
+       .driver = {
+                       .name = "sh4-ssi-dai",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = sh4_soc_dai_probe,
+       .remove = __devexit_p(sh4_soc_dai_remove),
+};
+
+static int __init snd_sh4_ssi_init(void)
 {
-       return snd_soc_register_dais(sh4_ssi_dai, ARRAY_SIZE(sh4_ssi_dai));
+       return platform_driver_register(&sh4_ssi_driver);
 }
-module_init(sh4_ssi_init);
+module_init(snd_sh4_ssi_init);
 
-static void __exit sh4_ssi_exit(void)
+static void __exit snd_sh4_ssi_exit(void)
 {
-       snd_soc_unregister_dais(sh4_ssi_dai, ARRAY_SIZE(sh4_ssi_dai));
+       platform_driver_unregister(&sh4_ssi_driver);
 }
-module_exit(sh4_ssi_exit);
+module_exit(snd_sh4_ssi_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("SuperH onchip SSI (I2S) audio driver");
index adbc68ce90508221cc919121fc19e062fd309f44..12281111f1000dbe867ea60f968e31ecdc495b1b 100644 (file)
@@ -19,7 +19,7 @@ static unsigned int snd_soc_4_12_read(struct snd_soc_codec *codec,
                                     unsigned int reg)
 {
        u16 *cache = codec->reg_cache;
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -1;
        return cache[reg];
 }
@@ -31,12 +31,12 @@ static int snd_soc_4_12_write(struct snd_soc_codec *codec, unsigned int reg,
        u8 data[2];
        int ret;
 
-       BUG_ON(codec->volatile_register);
+       BUG_ON(codec->driver->volatile_register);
 
        data[0] = (reg << 4) | ((value >> 8) & 0x000f);
        data[1] = value & 0x00ff;
 
-       if (reg < codec->reg_cache_size)
+       if (reg < codec->driver->reg_cache_size)
                cache[reg] = value;
 
        if (codec->cache_only) {
@@ -89,7 +89,7 @@ static unsigned int snd_soc_7_9_read(struct snd_soc_codec *codec,
                                     unsigned int reg)
 {
        u16 *cache = codec->reg_cache;
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -1;
        return cache[reg];
 }
@@ -101,12 +101,12 @@ static int snd_soc_7_9_write(struct snd_soc_codec *codec, unsigned int reg,
        u8 data[2];
        int ret;
 
-       BUG_ON(codec->volatile_register);
+       BUG_ON(codec->driver->volatile_register);
 
        data[0] = (reg << 1) | ((value >> 8) & 0x0001);
        data[1] = value & 0x00ff;
 
-       if (reg < codec->reg_cache_size)
+       if (reg < codec->driver->reg_cache_size)
                cache[reg] = value;
 
        if (codec->cache_only) {
@@ -161,13 +161,13 @@ static int snd_soc_8_8_write(struct snd_soc_codec *codec, unsigned int reg,
        u8 *cache = codec->reg_cache;
        u8 data[2];
 
-       BUG_ON(codec->volatile_register);
+       BUG_ON(codec->driver->volatile_register);
 
        reg &= 0xff;
        data[0] = reg;
        data[1] = value & 0xff;
 
-       if (reg < codec->reg_cache_size)
+       if (reg < codec->driver->reg_cache_size)
                cache[reg] = value;
 
        if (codec->cache_only) {
@@ -188,7 +188,7 @@ static unsigned int snd_soc_8_8_read(struct snd_soc_codec *codec,
 {
        u8 *cache = codec->reg_cache;
        reg &= 0xff;
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -1;
        return cache[reg];
 }
@@ -224,7 +224,7 @@ static unsigned int snd_soc_8_16_read(struct snd_soc_codec *codec,
 {
        u16 *cache = codec->reg_cache;
 
-       if (reg >= codec->reg_cache_size ||
+       if (reg >= codec->driver->reg_cache_size ||
            snd_soc_codec_volatile_register(codec, reg)) {
                if (codec->cache_only)
                        return -EINVAL;
@@ -343,7 +343,7 @@ static unsigned int snd_soc_16_8_read(struct snd_soc_codec *codec,
        u8 *cache = codec->reg_cache;
 
        reg &= 0xff;
-       if (reg >= codec->reg_cache_size)
+       if (reg >= codec->driver->reg_cache_size)
                return -1;
        return cache[reg];
 }
@@ -355,14 +355,14 @@ static int snd_soc_16_8_write(struct snd_soc_codec *codec, unsigned int reg,
        u8 data[3];
        int ret;
 
-       BUG_ON(codec->volatile_register);
+       BUG_ON(codec->driver->volatile_register);
 
        data[0] = (reg >> 8) & 0xff;
        data[1] = reg & 0xff;
        data[2] = value;
 
        reg &= 0xff;
-       if (reg < codec->reg_cache_size)
+       if (reg < codec->driver->reg_cache_size)
                cache[reg] = value;
 
        if (codec->cache_only) {
@@ -451,7 +451,7 @@ static unsigned int snd_soc_16_16_read(struct snd_soc_codec *codec,
 {
        u16 *cache = codec->reg_cache;
 
-       if (reg >= codec->reg_cache_size ||
+       if (reg >= codec->driver->reg_cache_size ||
            snd_soc_codec_volatile_register(codec, reg)) {
                if (codec->cache_only)
                        return -EINVAL;
@@ -474,7 +474,7 @@ static int snd_soc_16_16_write(struct snd_soc_codec *codec, unsigned int reg,
        data[2] = (value >> 8) & 0xff;
        data[3] = value & 0xff;
 
-       if (reg < codec->reg_cache_size)
+       if (reg < codec->driver->reg_cache_size)
                cache[reg] = value;
 
        if (codec->cache_only) {
@@ -571,8 +571,8 @@ int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
                return -EINVAL;
        }
 
-       codec->write = io_types[i].write;
-       codec->read = io_types[i].read;
+       codec->driver->write = io_types[i].write;
+       codec->driver->read = io_types[i].read;
 
        switch (control) {
        case SND_SOC_CUSTOM:
@@ -584,11 +584,19 @@ int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
 #endif
                if (io_types[i].i2c_read)
                        codec->hw_read = io_types[i].i2c_read;
+
+               codec->control_data = container_of(codec->dev,
+                                                  struct i2c_client,
+                                                  dev);
                break;
 
        case SND_SOC_SPI:
                if (io_types[i].spi_write)
                        codec->hw_write = io_types[i].spi_write;
+
+               codec->control_data = container_of(codec->dev,
+                                                  struct spi_device,
+                                                  dev);
                break;
        }
 
index 5299932db0b69a19dcda549f2d2a4eea9c095870..cea0fe488623b52328fdae67c50a5743eac72910 100644 (file)
@@ -3,6 +3,8 @@
  *
  * Copyright 2005 Wolfson Microelectronics PLC.
  * Copyright 2005 Openedhand Ltd.
+ * Copyright (C) 2010 Slimlogic Ltd.
+ * Copyright (C) 2010 Texas Instruments Inc.
  *
  * Author: Liam Girdwood <lrg@slimlogic.co.uk>
  *         with code, comments and ideas from :-
@@ -37,6 +39,8 @@
 #include <sound/soc-dapm.h>
 #include <sound/initval.h>
 
+#define NAME_SIZE      32
+
 static DEFINE_MUTEX(pcm_mutex);
 static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq);
 
@@ -52,6 +56,7 @@ static LIST_HEAD(codec_list);
 
 static int snd_soc_register_card(struct snd_soc_card *card);
 static int snd_soc_unregister_card(struct snd_soc_card *card);
+static int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num);
 
 /*
  * This is a timeout to do a DAPM powerdown after a stream is closed().
@@ -86,30 +91,30 @@ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
 {
        int ret, i, step = 1, count = 0;
 
-       if (!codec->reg_cache_size)
+       if (!codec->driver->reg_cache_size)
                return 0;
 
-       if (codec->reg_cache_step)
-               step = codec->reg_cache_step;
+       if (codec->driver->reg_cache_step)
+               step = codec->driver->reg_cache_step;
 
        count += sprintf(buf, "%s registers\n", codec->name);
-       for (i = 0; i < codec->reg_cache_size; i += step) {
-               if (codec->readable_register && !codec->readable_register(i))
+       for (i = 0; i < codec->driver->reg_cache_size; i += step) {
+               if (codec->driver->readable_register && !codec->driver->readable_register(i))
                        continue;
 
                count += sprintf(buf + count, "%2x: ", i);
                if (count >= PAGE_SIZE - 1)
                        break;
 
-               if (codec->display_register) {
-                       count += codec->display_register(codec, buf + count,
+               if (codec->driver->display_register) {
+                       count += codec->driver->display_register(codec, buf + count,
                                                         PAGE_SIZE - count, i);
                } else {
                        /* If the read fails it's almost certainly due to
                         * the register being volatile and the device being
                         * powered off.
                         */
-                       ret = codec->read(codec, i);
+                       ret = codec->driver->read(codec, i);
                        if (ret >= 0)
                                count += snprintf(buf + count,
                                                  PAGE_SIZE - count,
@@ -137,8 +142,10 @@ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)
 static ssize_t codec_reg_show(struct device *dev,
        struct device_attribute *attr, char *buf)
 {
-       struct snd_soc_device *devdata = dev_get_drvdata(dev);
-       return soc_codec_reg_show(devdata->card->codec, buf);
+       struct snd_soc_pcm_runtime *rtd =
+                       container_of(dev, struct snd_soc_pcm_runtime, dev);
+
+       return soc_codec_reg_show(rtd->codec, buf);
 }
 
 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
@@ -146,20 +153,20 @@ static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
 static ssize_t pmdown_time_show(struct device *dev,
                                struct device_attribute *attr, char *buf)
 {
-       struct snd_soc_device *socdev = dev_get_drvdata(dev);
-       struct snd_soc_card *card = socdev->card;
+       struct snd_soc_pcm_runtime *rtd =
+                       container_of(dev, struct snd_soc_pcm_runtime, dev);
 
-       return sprintf(buf, "%ld\n", card->pmdown_time);
+       return sprintf(buf, "%ld\n", rtd->pmdown_time);
 }
 
 static ssize_t pmdown_time_set(struct device *dev,
                               struct device_attribute *attr,
                               const char *buf, size_t count)
 {
-       struct snd_soc_device *socdev = dev_get_drvdata(dev);
-       struct snd_soc_card *card = socdev->card;
+       struct snd_soc_pcm_runtime *rtd =
+                       container_of(dev, struct snd_soc_pcm_runtime, dev);
 
-       strict_strtol(buf, 10, &card->pmdown_time);
+       strict_strtol(buf, 10, &rtd->pmdown_time);
 
        return count;
 }
@@ -203,19 +210,19 @@ static ssize_t codec_reg_write_file(struct file *file,
                return -EFAULT;
        buf[buf_size] = 0;
 
-       if (codec->reg_cache_step)
-               step = codec->reg_cache_step;
+       if (codec->driver->reg_cache_step)
+               step = codec->driver->reg_cache_step;
 
        while (*start == ' ')
                start++;
        reg = simple_strtoul(start, &start, 16);
-       if ((reg >= codec->reg_cache_size) || (reg % step))
+       if ((reg >= codec->driver->reg_cache_size) || (reg % step))
                return -EINVAL;
        while (*start == ' ')
                start++;
        if (strict_strtoul(start, 16, &value))
                return -EINVAL;
-       codec->write(codec, reg, value);
+       codec->driver->write(codec, reg, value);
        return buf_size;
 }
 
@@ -227,16 +234,7 @@ static const struct file_operations codec_reg_fops = {
 
 static void soc_init_codec_debugfs(struct snd_soc_codec *codec)
 {
-       char codec_root[128];
-
-       if (codec->dev)
-               snprintf(codec_root, sizeof(codec_root),
-                       "%s.%s", codec->name, dev_name(codec->dev));
-       else
-               snprintf(codec_root, sizeof(codec_root),
-                       "%s", codec->name);
-
-       codec->debugfs_codec_root = debugfs_create_dir(codec_root,
+       codec->debugfs_codec_root = debugfs_create_dir(codec->name ,
                                                       debugfs_root);
        if (!codec->debugfs_codec_root) {
                printk(KERN_WARNING
@@ -305,7 +303,7 @@ static int soc_ac97_dev_register(struct snd_soc_codec *codec)
        codec->ac97->dev.release = soc_ac97_device_release;
 
        dev_set_name(&codec->ac97->dev, "%d-%d:%s",
-                    codec->card->number, 0, codec->name);
+                    codec->card->snd_card->number, 0, codec->name);
        err = device_register(&codec->ac97->dev);
        if (err < 0) {
                snd_printk(KERN_ERR "Can't register ac97 bus\n");
@@ -319,24 +317,21 @@ static int soc_ac97_dev_register(struct snd_soc_codec *codec)
 static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret;
 
-       if (codec_dai->symmetric_rates || cpu_dai->symmetric_rates ||
-           machine->symmetric_rates) {
-               dev_dbg(card->dev, "Symmetry forces %dHz rate\n",
-                       machine->rate);
+       if (codec_dai->driver->symmetric_rates || cpu_dai->driver->symmetric_rates ||
+                       rtd->dai_link->symmetric_rates) {
+               dev_dbg(&rtd->dev, "Symmetry forces %dHz rate\n",
+                               rtd->rate);
 
                ret = snd_pcm_hw_constraint_minmax(substream->runtime,
                                                   SNDRV_PCM_HW_PARAM_RATE,
-                                                  machine->rate,
-                                                  machine->rate);
+                                                  rtd->rate,
+                                                  rtd->rate);
                if (ret < 0) {
-                       dev_err(card->dev,
+                       dev_err(&rtd->dev,
                                "Unable to apply rate symmetry constraint: %d\n", ret);
                        return ret;
                }
@@ -353,20 +348,19 @@ static int soc_pcm_apply_symmetry(struct snd_pcm_substream *substream)
 static int soc_pcm_open(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_card *card = socdev->card;
        struct snd_pcm_runtime *runtime = substream->runtime;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai_driver *cpu_dai_drv = cpu_dai->driver;
+       struct snd_soc_dai_driver *codec_dai_drv = codec_dai->driver;
        int ret = 0;
 
        mutex_lock(&pcm_mutex);
 
        /* startup the audio subsystem */
-       if (cpu_dai->ops->startup) {
-               ret = cpu_dai->ops->startup(substream, cpu_dai);
+       if (cpu_dai->driver->ops->startup) {
+               ret = cpu_dai->driver->ops->startup(substream, cpu_dai);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: can't open interface %s\n",
                                cpu_dai->name);
@@ -374,16 +368,16 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
                }
        }
 
-       if (platform->pcm_ops->open) {
-               ret = platform->pcm_ops->open(substream);
+       if (platform->driver->ops->open) {
+               ret = platform->driver->ops->open(substream);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: can't open platform %s\n", platform->name);
                        goto platform_err;
                }
        }
 
-       if (codec_dai->ops->startup) {
-               ret = codec_dai->ops->startup(substream, codec_dai);
+       if (codec_dai->driver->ops->startup) {
+               ret = codec_dai->driver->ops->startup(substream, codec_dai);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: can't open codec %s\n",
                                codec_dai->name);
@@ -391,10 +385,10 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
                }
        }
 
-       if (machine->ops && machine->ops->startup) {
-               ret = machine->ops->startup(substream);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->startup) {
+               ret = rtd->dai_link->ops->startup(substream);
                if (ret < 0) {
-                       printk(KERN_ERR "asoc: %s startup failed\n", machine->name);
+                       printk(KERN_ERR "asoc: %s startup failed\n", rtd->dai_link->name);
                        goto machine_err;
                }
        }
@@ -402,50 +396,50 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
        /* Check that the codec and cpu DAI's are compatible */
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                runtime->hw.rate_min =
-                       max(codec_dai->playback.rate_min,
-                           cpu_dai->playback.rate_min);
+                       max(codec_dai_drv->playback.rate_min,
+                           cpu_dai_drv->playback.rate_min);
                runtime->hw.rate_max =
-                       min(codec_dai->playback.rate_max,
-                           cpu_dai->playback.rate_max);
+                       min(codec_dai_drv->playback.rate_max,
+                           cpu_dai_drv->playback.rate_max);
                runtime->hw.channels_min =
-                       max(codec_dai->playback.channels_min,
-                               cpu_dai->playback.channels_min);
+                       max(codec_dai_drv->playback.channels_min,
+                               cpu_dai_drv->playback.channels_min);
                runtime->hw.channels_max =
-                       min(codec_dai->playback.channels_max,
-                               cpu_dai->playback.channels_max);
+                       min(codec_dai_drv->playback.channels_max,
+                               cpu_dai_drv->playback.channels_max);
                runtime->hw.formats =
-                       codec_dai->playback.formats & cpu_dai->playback.formats;
+                       codec_dai_drv->playback.formats & cpu_dai_drv->playback.formats;
                runtime->hw.rates =
-                       codec_dai->playback.rates & cpu_dai->playback.rates;
-               if (codec_dai->playback.rates
+                       codec_dai_drv->playback.rates & cpu_dai_drv->playback.rates;
+               if (codec_dai_drv->playback.rates
                           & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
-                       runtime->hw.rates |= cpu_dai->playback.rates;
-               if (cpu_dai->playback.rates
+                       runtime->hw.rates |= cpu_dai_drv->playback.rates;
+               if (cpu_dai_drv->playback.rates
                           & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
-                       runtime->hw.rates |= codec_dai->playback.rates;
+                       runtime->hw.rates |= codec_dai_drv->playback.rates;
        } else {
                runtime->hw.rate_min =
-                       max(codec_dai->capture.rate_min,
-                           cpu_dai->capture.rate_min);
+                       max(codec_dai_drv->capture.rate_min,
+                           cpu_dai_drv->capture.rate_min);
                runtime->hw.rate_max =
-                       min(codec_dai->capture.rate_max,
-                           cpu_dai->capture.rate_max);
+                       min(codec_dai_drv->capture.rate_max,
+                           cpu_dai_drv->capture.rate_max);
                runtime->hw.channels_min =
-                       max(codec_dai->capture.channels_min,
-                               cpu_dai->capture.channels_min);
+                       max(codec_dai_drv->capture.channels_min,
+                               cpu_dai_drv->capture.channels_min);
                runtime->hw.channels_max =
-                       min(codec_dai->capture.channels_max,
-                               cpu_dai->capture.channels_max);
+                       min(codec_dai_drv->capture.channels_max,
+                               cpu_dai_drv->capture.channels_max);
                runtime->hw.formats =
-                       codec_dai->capture.formats & cpu_dai->capture.formats;
+                       codec_dai_drv->capture.formats & cpu_dai_drv->capture.formats;
                runtime->hw.rates =
-                       codec_dai->capture.rates & cpu_dai->capture.rates;
-               if (codec_dai->capture.rates
+                       codec_dai_drv->capture.rates & cpu_dai_drv->capture.rates;
+               if (codec_dai_drv->capture.rates
                           & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
-                       runtime->hw.rates |= cpu_dai->capture.rates;
-               if (cpu_dai->capture.rates
+                       runtime->hw.rates |= cpu_dai_drv->capture.rates;
+               if (cpu_dai_drv->capture.rates
                           & (SNDRV_PCM_RATE_KNOT | SNDRV_PCM_RATE_CONTINUOUS))
-                       runtime->hw.rates |= codec_dai->capture.rates;
+                       runtime->hw.rates |= codec_dai_drv->capture.rates;
        }
 
        snd_pcm_limit_hw_rates(runtime);
@@ -461,7 +455,7 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
        }
        if (!runtime->hw.channels_min || !runtime->hw.channels_max) {
                printk(KERN_ERR "asoc: %s <-> %s No matching channels\n",
-                       codec_dai->name, cpu_dai->name);
+                               codec_dai->name, cpu_dai->name);
                goto config_err;
        }
 
@@ -472,7 +466,8 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
                        goto config_err;
        }
 
-       pr_debug("asoc: %s <-> %s info:\n", codec_dai->name, cpu_dai->name);
+       pr_debug("asoc: %s <-> %s info:\n",
+                       codec_dai->name, cpu_dai->name);
        pr_debug("asoc: rate mask 0x%x\n", runtime->hw.rates);
        pr_debug("asoc: min ch %d max ch %d\n", runtime->hw.channels_min,
                 runtime->hw.channels_max);
@@ -480,33 +475,33 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
                 runtime->hw.rate_max);
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               cpu_dai->playback.active++;
-               codec_dai->playback.active++;
+               cpu_dai->playback_active++;
+               codec_dai->playback_active++;
        } else {
-               cpu_dai->capture.active++;
-               codec_dai->capture.active++;
+               cpu_dai->capture_active++;
+               codec_dai->capture_active++;
        }
        cpu_dai->active++;
        codec_dai->active++;
-       card->codec->active++;
+       rtd->codec->active++;
        mutex_unlock(&pcm_mutex);
        return 0;
 
 config_err:
-       if (machine->ops && machine->ops->shutdown)
-               machine->ops->shutdown(substream);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->shutdown)
+               rtd->dai_link->ops->shutdown(substream);
 
 machine_err:
-       if (codec_dai->ops->shutdown)
-               codec_dai->ops->shutdown(substream, codec_dai);
+       if (codec_dai->driver->ops->shutdown)
+               codec_dai->driver->ops->shutdown(substream, codec_dai);
 
 codec_dai_err:
-       if (platform->pcm_ops->close)
-               platform->pcm_ops->close(substream);
+       if (platform->driver->ops->close)
+               platform->driver->ops->close(substream);
 
 platform_err:
-       if (cpu_dai->ops->shutdown)
-               cpu_dai->ops->shutdown(substream, cpu_dai);
+       if (cpu_dai->driver->ops->shutdown)
+               cpu_dai->driver->ops->shutdown(substream, cpu_dai);
 out:
        mutex_unlock(&pcm_mutex);
        return ret;
@@ -519,29 +514,25 @@ out:
  */
 static void close_delayed_work(struct work_struct *work)
 {
-       struct snd_soc_card *card = container_of(work, struct snd_soc_card,
-                                                delayed_work.work);
-       struct snd_soc_codec *codec = card->codec;
-       struct snd_soc_dai *codec_dai;
-       int i;
+       struct snd_soc_pcm_runtime *rtd =
+                       container_of(work, struct snd_soc_pcm_runtime, delayed_work.work);
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
        mutex_lock(&pcm_mutex);
-       for (i = 0; i < codec->num_dai; i++) {
-               codec_dai = &codec->dai[i];
-
-               pr_debug("pop wq checking: %s status: %s waiting: %s\n",
-                        codec_dai->playback.stream_name,
-                        codec_dai->playback.active ? "active" : "inactive",
-                        codec_dai->pop_wait ? "yes" : "no");
-
-               /* are we waiting on this codec DAI stream */
-               if (codec_dai->pop_wait == 1) {
-                       codec_dai->pop_wait = 0;
-                       snd_soc_dapm_stream_event(codec,
-                               codec_dai->playback.stream_name,
-                               SND_SOC_DAPM_STREAM_STOP);
-               }
+
+       pr_debug("pop wq checking: %s status: %s waiting: %s\n",
+                codec_dai->driver->playback.stream_name,
+                codec_dai->playback_active ? "active" : "inactive",
+                codec_dai->pop_wait ? "yes" : "no");
+
+       /* are we waiting on this codec DAI stream */
+       if (codec_dai->pop_wait == 1) {
+               codec_dai->pop_wait = 0;
+               snd_soc_dapm_stream_event(rtd,
+                       codec_dai->driver->playback.stream_name,
+                       SND_SOC_DAPM_STREAM_STOP);
        }
+
        mutex_unlock(&pcm_mutex);
 }
 
@@ -553,22 +544,19 @@ static void close_delayed_work(struct work_struct *work)
 static int soc_codec_close(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
-       struct snd_soc_codec *codec = card->codec;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_codec *codec = rtd->codec;
 
        mutex_lock(&pcm_mutex);
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               cpu_dai->playback.active--;
-               codec_dai->playback.active--;
+               cpu_dai->playback_active--;
+               codec_dai->playback_active--;
        } else {
-               cpu_dai->capture.active--;
-               codec_dai->capture.active--;
+               cpu_dai->capture_active--;
+               codec_dai->capture_active--;
        }
 
        cpu_dai->active--;
@@ -581,27 +569,28 @@ static int soc_codec_close(struct snd_pcm_substream *substream)
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
                snd_soc_dai_digital_mute(codec_dai, 1);
 
-       if (cpu_dai->ops->shutdown)
-               cpu_dai->ops->shutdown(substream, cpu_dai);
+       if (cpu_dai->driver->ops->shutdown)
+               cpu_dai->driver->ops->shutdown(substream, cpu_dai);
 
-       if (codec_dai->ops->shutdown)
-               codec_dai->ops->shutdown(substream, codec_dai);
+       if (codec_dai->driver->ops->shutdown)
+               codec_dai->driver->ops->shutdown(substream, codec_dai);
 
-       if (machine->ops && machine->ops->shutdown)
-               machine->ops->shutdown(substream);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->shutdown)
+               rtd->dai_link->ops->shutdown(substream);
 
-       if (platform->pcm_ops->close)
-               platform->pcm_ops->close(substream);
+       if (platform->driver->ops->close)
+               platform->driver->ops->close(substream);
+       cpu_dai->runtime = NULL;
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                /* start delayed pop wq here for playback streams */
                codec_dai->pop_wait = 1;
-               schedule_delayed_work(&card->delayed_work,
-                       msecs_to_jiffies(card->pmdown_time));
+               schedule_delayed_work(&rtd->delayed_work,
+                       msecs_to_jiffies(rtd->pmdown_time));
        } else {
                /* capture streams can be powered down now */
-               snd_soc_dapm_stream_event(codec,
-                       codec_dai->capture.stream_name,
+               snd_soc_dapm_stream_event(rtd,
+                       codec_dai->driver->capture.stream_name,
                        SND_SOC_DAPM_STREAM_STOP);
        }
 
@@ -617,43 +606,39 @@ static int soc_codec_close(struct snd_pcm_substream *substream)
 static int soc_pcm_prepare(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
-       struct snd_soc_codec *codec = card->codec;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret = 0;
 
        mutex_lock(&pcm_mutex);
 
-       if (machine->ops && machine->ops->prepare) {
-               ret = machine->ops->prepare(substream);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->prepare) {
+               ret = rtd->dai_link->ops->prepare(substream);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: machine prepare error\n");
                        goto out;
                }
        }
 
-       if (platform->pcm_ops->prepare) {
-               ret = platform->pcm_ops->prepare(substream);
+       if (platform->driver->ops->prepare) {
+               ret = platform->driver->ops->prepare(substream);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: platform prepare error\n");
                        goto out;
                }
        }
 
-       if (codec_dai->ops->prepare) {
-               ret = codec_dai->ops->prepare(substream, codec_dai);
+       if (codec_dai->driver->ops->prepare) {
+               ret = codec_dai->driver->ops->prepare(substream, codec_dai);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: codec DAI prepare error\n");
                        goto out;
                }
        }
 
-       if (cpu_dai->ops->prepare) {
-               ret = cpu_dai->ops->prepare(substream, cpu_dai);
+       if (cpu_dai->driver->ops->prepare) {
+               ret = cpu_dai->driver->ops->prepare(substream, cpu_dai);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: cpu DAI prepare error\n");
                        goto out;
@@ -664,16 +649,16 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
            codec_dai->pop_wait) {
                codec_dai->pop_wait = 0;
-               cancel_delayed_work(&card->delayed_work);
+               cancel_delayed_work(&rtd->delayed_work);
        }
 
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-               snd_soc_dapm_stream_event(codec,
-                                         codec_dai->playback.stream_name,
+               snd_soc_dapm_stream_event(rtd,
+                                         codec_dai->driver->playback.stream_name,
                                          SND_SOC_DAPM_STREAM_START);
        else
-               snd_soc_dapm_stream_event(codec,
-                                         codec_dai->capture.stream_name,
+               snd_soc_dapm_stream_event(rtd,
+                                         codec_dai->driver->capture.stream_name,
                                          SND_SOC_DAPM_STREAM_START);
 
        snd_soc_dai_digital_mute(codec_dai, 0);
@@ -692,26 +677,23 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
                                struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret = 0;
 
        mutex_lock(&pcm_mutex);
 
-       if (machine->ops && machine->ops->hw_params) {
-               ret = machine->ops->hw_params(substream, params);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->hw_params) {
+               ret = rtd->dai_link->ops->hw_params(substream, params);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: machine hw_params failed\n");
                        goto out;
                }
        }
 
-       if (codec_dai->ops->hw_params) {
-               ret = codec_dai->ops->hw_params(substream, params, codec_dai);
+       if (codec_dai->driver->ops->hw_params) {
+               ret = codec_dai->driver->ops->hw_params(substream, params, codec_dai);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: can't set codec %s hw params\n",
                                codec_dai->name);
@@ -719,8 +701,8 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
                }
        }
 
-       if (cpu_dai->ops->hw_params) {
-               ret = cpu_dai->ops->hw_params(substream, params, cpu_dai);
+       if (cpu_dai->driver->ops->hw_params) {
+               ret = cpu_dai->driver->ops->hw_params(substream, params, cpu_dai);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: interface %s hw params failed\n",
                                cpu_dai->name);
@@ -728,8 +710,8 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
                }
        }
 
-       if (platform->pcm_ops->hw_params) {
-               ret = platform->pcm_ops->hw_params(substream, params);
+       if (platform->driver->ops->hw_params) {
+               ret = platform->driver->ops->hw_params(substream, params);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: platform %s hw params failed\n",
                                platform->name);
@@ -737,23 +719,23 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
                }
        }
 
-       machine->rate = params_rate(params);
+       rtd->rate = params_rate(params);
 
 out:
        mutex_unlock(&pcm_mutex);
        return ret;
 
 platform_err:
-       if (cpu_dai->ops->hw_free)
-               cpu_dai->ops->hw_free(substream, cpu_dai);
+       if (cpu_dai->driver->ops->hw_free)
+               cpu_dai->driver->ops->hw_free(substream, cpu_dai);
 
 interface_err:
-       if (codec_dai->ops->hw_free)
-               codec_dai->ops->hw_free(substream, codec_dai);
+       if (codec_dai->driver->ops->hw_free)
+               codec_dai->driver->ops->hw_free(substream, codec_dai);
 
 codec_err:
-       if (machine->ops && machine->ops->hw_free)
-               machine->ops->hw_free(substream);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->hw_free)
+               rtd->dai_link->ops->hw_free(substream);
 
        mutex_unlock(&pcm_mutex);
        return ret;
@@ -765,13 +747,10 @@ codec_err:
 static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
-       struct snd_soc_codec *codec = card->codec;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_codec *codec = rtd->codec;
 
        mutex_lock(&pcm_mutex);
 
@@ -780,19 +759,19 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
                snd_soc_dai_digital_mute(codec_dai, 1);
 
        /* free any machine hw params */
-       if (machine->ops && machine->ops->hw_free)
-               machine->ops->hw_free(substream);
+       if (rtd->dai_link->ops && rtd->dai_link->ops->hw_free)
+               rtd->dai_link->ops->hw_free(substream);
 
        /* free any DMA resources */
-       if (platform->pcm_ops->hw_free)
-               platform->pcm_ops->hw_free(substream);
+       if (platform->driver->ops->hw_free)
+               platform->driver->ops->hw_free(substream);
 
        /* now free hw params for the DAI's  */
-       if (codec_dai->ops->hw_free)
-               codec_dai->ops->hw_free(substream, codec_dai);
+       if (codec_dai->driver->ops->hw_free)
+               codec_dai->driver->ops->hw_free(substream, codec_dai);
 
-       if (cpu_dai->ops->hw_free)
-               cpu_dai->ops->hw_free(substream, cpu_dai);
+       if (cpu_dai->driver->ops->hw_free)
+               cpu_dai->driver->ops->hw_free(substream, cpu_dai);
 
        mutex_unlock(&pcm_mutex);
        return 0;
@@ -801,28 +780,25 @@ static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
 static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_card *card= socdev->card;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        int ret;
 
-       if (codec_dai->ops->trigger) {
-               ret = codec_dai->ops->trigger(substream, cmd, codec_dai);
+       if (codec_dai->driver->ops->trigger) {
+               ret = codec_dai->driver->ops->trigger(substream, cmd, codec_dai);
                if (ret < 0)
                        return ret;
        }
 
-       if (platform->pcm_ops->trigger) {
-               ret = platform->pcm_ops->trigger(substream, cmd);
+       if (platform->driver->ops->trigger) {
+               ret = platform->driver->ops->trigger(substream, cmd);
                if (ret < 0)
                        return ret;
        }
 
-       if (cpu_dai->ops->trigger) {
-               ret = cpu_dai->ops->trigger(substream, cmd, cpu_dai);
+       if (cpu_dai->driver->ops->trigger) {
+               ret = cpu_dai->driver->ops->trigger(substream, cmd, cpu_dai);
                if (ret < 0)
                        return ret;
        }
@@ -837,27 +813,24 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 static snd_pcm_uframes_t soc_pcm_pointer(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_device *socdev = rtd->socdev;
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai_link *machine = rtd->dai;
-       struct snd_soc_dai *cpu_dai = machine->cpu_dai;
-       struct snd_soc_dai *codec_dai = machine->codec_dai;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
        struct snd_pcm_runtime *runtime = substream->runtime;
        snd_pcm_uframes_t offset = 0;
        snd_pcm_sframes_t delay = 0;
 
-       if (platform->pcm_ops->pointer)
-               offset = platform->pcm_ops->pointer(substream);
+       if (platform->driver->ops->pointer)
+               offset = platform->driver->ops->pointer(substream);
 
-       if (cpu_dai->ops->delay)
-               delay += cpu_dai->ops->delay(substream, cpu_dai);
+       if (cpu_dai->driver->ops->delay)
+               delay += cpu_dai->driver->ops->delay(substream, cpu_dai);
 
-       if (codec_dai->ops->delay)
-               delay += codec_dai->ops->delay(substream, codec_dai);
+       if (codec_dai->driver->ops->delay)
+               delay += codec_dai->driver->ops->delay(substream, codec_dai);
 
-       if (platform->delay)
-               delay += platform->delay(substream, codec_dai);
+       if (platform->driver->delay)
+               delay += platform->driver->delay(substream, codec_dai);
 
        runtime->delay = delay;
 
@@ -880,104 +853,111 @@ static struct snd_pcm_ops soc_pcm_ops = {
 static int soc_suspend(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
-       struct snd_soc_codec *codec = card->codec;
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
        int i;
 
        /* If the initialization of this soc device failed, there is no codec
         * associated with it. Just bail out in this case.
         */
-       if (!codec)
+       if (list_empty(&card->codec_dev_list))
                return 0;
 
        /* Due to the resume being scheduled into a workqueue we could
        * suspend before that's finished - wait for it to complete.
         */
-       snd_power_lock(codec->card);
-       snd_power_wait(codec->card, SNDRV_CTL_POWER_D0);
-       snd_power_unlock(codec->card);
+       snd_power_lock(card->snd_card);
+       snd_power_wait(card->snd_card, SNDRV_CTL_POWER_D0);
+       snd_power_unlock(card->snd_card);
 
        /* we're going to block userspace touching us until resume completes */
-       snd_power_change_state(codec->card, SNDRV_CTL_POWER_D3hot);
+       snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D3hot);
 
        /* mute any active DAC's */
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai *dai = card->dai_link[i].codec_dai;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *dai = card->rtd[i].codec_dai;
+               struct snd_soc_dai_driver *drv = dai->driver;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (dai->ops->digital_mute && dai->playback.active)
-                       dai->ops->digital_mute(dai, 1);
+               if (drv->ops->digital_mute && dai->playback_active)
+                       drv->ops->digital_mute(dai, 1);
        }
 
        /* suspend all pcms */
-       for (i = 0; i < card->num_links; i++) {
-               if (card->dai_link[i].ignore_suspend)
+       for (i = 0; i < card->num_rtd; i++) {
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               snd_pcm_suspend_all(card->dai_link[i].pcm);
+               snd_pcm_suspend_all(card->rtd[i].pcm);
        }
 
        if (card->suspend_pre)
                card->suspend_pre(pdev, PMSG_SUSPEND);
 
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai  *cpu_dai = card->dai_link[i].cpu_dai;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
+               struct snd_soc_platform *platform = card->rtd[i].platform;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (cpu_dai->suspend && !cpu_dai->ac97_control)
-                       cpu_dai->suspend(cpu_dai);
-               if (platform->suspend)
-                       platform->suspend(&card->dai_link[i]);
+               if (cpu_dai->driver->suspend && !cpu_dai->driver->ac97_control)
+                       cpu_dai->driver->suspend(cpu_dai);
+               if (platform->driver->suspend && !platform->suspended) {
+                       platform->driver->suspend(cpu_dai);
+                       platform->suspended = 1;
+               }
        }
 
        /* close any waiting streams and save state */
-       run_delayed_work(&card->delayed_work);
-       codec->suspend_bias_level = codec->bias_level;
+       for (i = 0; i < card->num_rtd; i++) {
+               run_delayed_work(&card->rtd[i].delayed_work);
+               card->rtd[i].codec->suspend_bias_level = card->rtd[i].codec->bias_level;
+       }
 
-       for (i = 0; i < codec->num_dai; i++) {
-               char *stream = codec->dai[i].playback.stream_name;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai_driver *driver = card->rtd[i].codec_dai->driver;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (stream != NULL)
-                       snd_soc_dapm_stream_event(codec, stream,
+               if (driver->playback.stream_name != NULL)
+                       snd_soc_dapm_stream_event(&card->rtd[i], driver->playback.stream_name,
                                SND_SOC_DAPM_STREAM_SUSPEND);
-               stream = codec->dai[i].capture.stream_name;
-               if (stream != NULL)
-                       snd_soc_dapm_stream_event(codec, stream,
+
+               if (driver->capture.stream_name != NULL)
+                       snd_soc_dapm_stream_event(&card->rtd[i], driver->capture.stream_name,
                                SND_SOC_DAPM_STREAM_SUSPEND);
        }
 
-       /* If there are paths active then the CODEC will be held with
-        * bias _ON and should not be suspended. */
-       if (codec_dev->suspend) {
-               switch (codec->bias_level) {
-               case SND_SOC_BIAS_STANDBY:
-               case SND_SOC_BIAS_OFF:
-                       codec_dev->suspend(pdev, PMSG_SUSPEND);
-                       break;
-               default:
-                       dev_dbg(socdev->dev, "CODEC is on over suspend\n");
-                       break;
+       /* suspend all CODECs */
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_codec *codec = card->rtd[i].codec;
+               /* If there are paths active then the CODEC will be held with
+                * bias _ON and should not be suspended. */
+               if (!codec->suspended && codec->driver->suspend) {
+                       switch (codec->bias_level) {
+                       case SND_SOC_BIAS_STANDBY:
+                       case SND_SOC_BIAS_OFF:
+                               codec->driver->suspend(codec, PMSG_SUSPEND);
+                               codec->suspended = 1;
+                               break;
+                       default:
+                               dev_dbg(codec->dev, "CODEC is on over suspend\n");
+                               break;
+                       }
                }
        }
 
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (cpu_dai->suspend && cpu_dai->ac97_control)
-                       cpu_dai->suspend(cpu_dai);
+               if (cpu_dai->driver->suspend && cpu_dai->driver->ac97_control)
+                       cpu_dai->driver->suspend(cpu_dai);
        }
 
        if (card->suspend_post)
@@ -991,127 +971,127 @@ static int soc_suspend(struct device *dev)
  */
 static void soc_resume_deferred(struct work_struct *work)
 {
-       struct snd_soc_card *card = container_of(work,
-                                                struct snd_soc_card,
-                                                deferred_resume_work);
-       struct snd_soc_device *socdev = card->socdev;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
-       struct snd_soc_codec *codec = card->codec;
-       struct platform_device *pdev = to_platform_device(socdev->dev);
+       struct snd_soc_card *card =
+                       container_of(work, struct snd_soc_card, deferred_resume_work);
+       struct platform_device *pdev = to_platform_device(card->dev);
        int i;
 
        /* our power state is still SNDRV_CTL_POWER_D3hot from suspend time,
         * so userspace apps are blocked from touching us
         */
 
-       dev_dbg(socdev->dev, "starting resume work\n");
+       dev_dbg(card->dev, "starting resume work\n");
 
        /* Bring us up into D2 so that DAPM starts enabling things */
-       snd_power_change_state(codec->card, SNDRV_CTL_POWER_D2);
+       snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D2);
 
        if (card->resume_pre)
                card->resume_pre(pdev);
 
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
+       /* resume AC97 DAIs */
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (cpu_dai->resume && cpu_dai->ac97_control)
-                       cpu_dai->resume(cpu_dai);
-       }
-
-       /* If the CODEC was idle over suspend then it will have been
-        * left with bias OFF or STANDBY and suspended so we must now
-        * resume.  Otherwise the suspend was suppressed.
-        */
-       if (codec_dev->resume) {
-               switch (codec->bias_level) {
-               case SND_SOC_BIAS_STANDBY:
-               case SND_SOC_BIAS_OFF:
-                       codec_dev->resume(pdev);
-                       break;
-               default:
-                       dev_dbg(socdev->dev, "CODEC was on over suspend\n");
-                       break;
+               if (cpu_dai->driver->resume && cpu_dai->driver->ac97_control)
+                       cpu_dai->driver->resume(cpu_dai);
+       }
+
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_codec *codec = card->rtd[i].codec;
+               /* If the CODEC was idle over suspend then it will have been
+                * left with bias OFF or STANDBY and suspended so we must now
+                * resume.  Otherwise the suspend was suppressed.
+                */
+               if (codec->driver->resume && codec->suspended) {
+                       switch (codec->bias_level) {
+                       case SND_SOC_BIAS_STANDBY:
+                       case SND_SOC_BIAS_OFF:
+                               codec->driver->resume(codec);
+                               codec->suspended = 0;
+                               break;
+                       default:
+                               dev_dbg(codec->dev, "CODEC was on over suspend\n");
+                               break;
+                       }
                }
        }
 
-       for (i = 0; i < codec->num_dai; i++) {
-               char *stream = codec->dai[i].playback.stream_name;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai_driver *driver = card->rtd[i].codec_dai->driver;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (stream != NULL)
-                       snd_soc_dapm_stream_event(codec, stream,
+               if (driver->playback.stream_name != NULL)
+                       snd_soc_dapm_stream_event(&card->rtd[i], driver->playback.stream_name,
                                SND_SOC_DAPM_STREAM_RESUME);
-               stream = codec->dai[i].capture.stream_name;
-               if (stream != NULL)
-                       snd_soc_dapm_stream_event(codec, stream,
+
+               if (driver->capture.stream_name != NULL)
+                       snd_soc_dapm_stream_event(&card->rtd[i], driver->capture.stream_name,
                                SND_SOC_DAPM_STREAM_RESUME);
        }
 
        /* unmute any active DACs */
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai *dai = card->dai_link[i].codec_dai;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *dai = card->rtd[i].codec_dai;
+               struct snd_soc_dai_driver *drv = dai->driver;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (dai->ops->digital_mute && dai->playback.active)
-                       dai->ops->digital_mute(dai, 0);
+               if (drv->ops->digital_mute && dai->playback_active)
+                       drv->ops->digital_mute(dai, 0);
        }
 
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
+               struct snd_soc_platform *platform = card->rtd[i].platform;
 
-               if (card->dai_link[i].ignore_suspend)
+               if (card->rtd[i].dai_link->ignore_suspend)
                        continue;
 
-               if (cpu_dai->resume && !cpu_dai->ac97_control)
-                       cpu_dai->resume(cpu_dai);
-               if (platform->resume)
-                       platform->resume(&card->dai_link[i]);
+               if (cpu_dai->driver->resume && !cpu_dai->driver->ac97_control)
+                       cpu_dai->driver->resume(cpu_dai);
+               if (platform->driver->resume && platform->suspended) {
+                       platform->driver->resume(cpu_dai);
+                       platform->suspended = 0;
+               }
        }
 
        if (card->resume_post)
                card->resume_post(pdev);
 
-       dev_dbg(socdev->dev, "resume work completed\n");
+       dev_dbg(card->dev, "resume work completed\n");
 
        /* userspace can access us now we are back as we were before */
-       snd_power_change_state(codec->card, SNDRV_CTL_POWER_D0);
+       snd_power_change_state(card->snd_card, SNDRV_CTL_POWER_D0);
 }
 
 /* powers up audio subsystem after a suspend */
 static int soc_resume(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_dai *cpu_dai = card->dai_link[0].cpu_dai;
-
-       /* If the initialization of this soc device failed, there is no codec
-        * associated with it. Just bail out in this case.
-        */
-       if (!card->codec)
-               return 0;
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
+       int i;
 
        /* AC97 devices might have other drivers hanging off them so
         * need to resume immediately.  Other drivers don't have that
         * problem and may take a substantial amount of time to resume
         * due to I/O costs and anti-pop so handle them out of line.
         */
-       if (cpu_dai->ac97_control) {
-               dev_dbg(socdev->dev, "Resuming AC97 immediately\n");
-               soc_resume_deferred(&card->deferred_resume_work);
-       } else {
-               dev_dbg(socdev->dev, "Scheduling resume work\n");
-               if (!schedule_work(&card->deferred_resume_work))
-                       dev_err(socdev->dev, "resume work item may be lost\n");
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
+               if (cpu_dai->driver->ac97_control) {
+                       dev_dbg(dev, "Resuming AC97 immediately\n");
+                       soc_resume_deferred(&card->deferred_resume_work);
+               } else {
+                       dev_dbg(dev, "Scheduling resume work\n");
+                       if (!schedule_work(&card->deferred_resume_work))
+                               dev_err(dev, "resume work item may be lost\n");
+               }
        }
 
        return 0;
@@ -1124,198 +1104,430 @@ static int soc_resume(struct device *dev)
 static struct snd_soc_dai_ops null_dai_ops = {
 };
 
-static void snd_soc_instantiate_card(struct snd_soc_card *card)
+static int soc_bind_dai_link(struct snd_soc_card *card, int num)
 {
-       struct platform_device *pdev = container_of(card->dev,
-                                                   struct platform_device,
-                                                   dev);
-       struct snd_soc_codec_device *codec_dev = card->socdev->codec_dev;
+       struct snd_soc_dai_link *dai_link = &card->dai_link[num];
+       struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
        struct snd_soc_codec *codec;
        struct snd_soc_platform *platform;
-       struct snd_soc_dai *dai;
-       int i, found, ret, ac97;
+       struct snd_soc_dai *codec_dai, *cpu_dai;
 
-       if (card->instantiated)
-               return;
+       if (rtd->complete)
+               return 1;
+       dev_dbg(card->dev, "binding %s at idx %d\n", dai_link->name, num);
 
-       found = 0;
-       list_for_each_entry(platform, &platform_list, list)
-               if (card->platform == platform) {
-                       found = 1;
-                       break;
+       /* do we already have the CPU DAI for this link ? */
+       if (rtd->cpu_dai) {
+               goto find_codec;
+       }
+       /* no, then find CPU DAI from registered DAIs*/
+       list_for_each_entry(cpu_dai, &dai_list, list) {
+               if (!strcmp(cpu_dai->name, dai_link->cpu_dai_name)) {
+
+                       if (!try_module_get(cpu_dai->dev->driver->owner))
+                               return -ENODEV;
+
+                       rtd->cpu_dai = cpu_dai;
+                       goto find_codec;
                }
-       if (!found) {
-               dev_dbg(card->dev, "Platform %s not registered\n",
-                       card->platform->name);
-               return;
        }
+       dev_dbg(card->dev, "CPU DAI %s not registered\n",
+                       dai_link->cpu_dai_name);
 
-       ac97 = 0;
-       for (i = 0; i < card->num_links; i++) {
-               found = 0;
-               list_for_each_entry(dai, &dai_list, list)
-                       if (card->dai_link[i].cpu_dai == dai) {
-                               found = 1;
-                               break;
+find_codec:
+       /* do we already have the CODEC for this link ? */
+       if (rtd->codec) {
+               goto find_platform;
+       }
+
+       /* no, then find CODEC from registered CODECs*/
+       list_for_each_entry(codec, &codec_list, list) {
+               if (!strcmp(codec->name, dai_link->codec_name)) {
+                       rtd->codec = codec;
+
+                       if (!try_module_get(codec->dev->driver->owner))
+                               return -ENODEV;
+
+                       /* CODEC found, so find CODEC DAI from registered DAIs from this CODEC*/
+                       list_for_each_entry(codec_dai, &dai_list, list) {
+                               if (codec->dev == codec_dai->dev &&
+                                               !strcmp(codec_dai->name, dai_link->codec_dai_name)) {
+                                       rtd->codec_dai = codec_dai;
+                                       goto find_platform;
+                               }
                        }
-               if (!found) {
-                       dev_dbg(card->dev, "DAI %s not registered\n",
-                               card->dai_link[i].cpu_dai->name);
-                       return;
+                       dev_dbg(card->dev, "CODEC DAI %s not registered\n",
+                                       dai_link->codec_dai_name);
+
+                       goto find_platform;
                }
+       }
+       dev_dbg(card->dev, "CODEC %s not registered\n",
+                       dai_link->codec_name);
 
-               if (card->dai_link[i].cpu_dai->ac97_control)
-                       ac97 = 1;
+find_platform:
+       /* do we already have the CODEC DAI for this link ? */
+       if (rtd->platform) {
+               goto out;
        }
+       /* no, then find CPU DAI from registered DAIs*/
+       list_for_each_entry(platform, &platform_list, list) {
+               if (!strcmp(platform->name, dai_link->platform_name)) {
 
-       for (i = 0; i < card->num_links; i++) {
-               if (!card->dai_link[i].codec_dai->ops)
-                       card->dai_link[i].codec_dai->ops = &null_dai_ops;
+                       if (!try_module_get(platform->dev->driver->owner))
+                               return -ENODEV;
+
+                       rtd->platform = platform;
+                       goto out;
+               }
        }
 
-       /* If we have AC97 in the system then don't wait for the
-        * codec.  This will need revisiting if we have to handle
-        * systems with mixed AC97 and non-AC97 parts.  Only check for
-        * DAIs currently; we can't do this per link since some AC97
-        * codecs have non-AC97 DAIs.
-        */
-       if (!ac97)
-               for (i = 0; i < card->num_links; i++) {
-                       found = 0;
-                       list_for_each_entry(dai, &dai_list, list)
-                               if (card->dai_link[i].codec_dai == dai) {
-                                       found = 1;
-                                       break;
-                               }
-                       if (!found) {
-                               dev_dbg(card->dev, "DAI %s not registered\n",
-                                       card->dai_link[i].codec_dai->name);
-                               return;
-                       }
+       dev_dbg(card->dev, "platform %s not registered\n",
+                       dai_link->platform_name);
+       return 0;
+
+out:
+       /* mark rtd as complete if we found all 4 of our client devices */
+       if (rtd->codec && rtd->codec_dai && rtd->platform && rtd->cpu_dai) {
+               rtd->complete = 1;
+               card->num_rtd++;
+       }
+       return 1;
+}
+
+static void soc_remove_dai_link(struct snd_soc_card *card, int num)
+{
+       struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai;
+       int err;
+
+       /* unregister the rtd device */
+       if (rtd->dev_registered) {
+               device_remove_file(&rtd->dev, &dev_attr_pmdown_time);
+               device_unregister(&rtd->dev);
+               rtd->dev_registered = 0;
+       }
+
+       /* remove the CODEC DAI */
+       if (codec_dai && codec_dai->probed) {
+               if (codec_dai->driver->remove) {
+                       err = codec_dai->driver->remove(codec_dai);
+                       if (err < 0)
+                               printk(KERN_ERR "asoc: failed to remove %s\n", codec_dai->name);
                }
+               codec_dai->probed = 0;
+               list_del(&codec_dai->card_list);
+       }
 
-       /* Note that we do not current check for codec components */
+       /* remove the platform */
+       if (platform && platform->probed) {
+               if (platform->driver->remove) {
+                       err = platform->driver->remove(platform);
+                       if (err < 0)
+                               printk(KERN_ERR "asoc: failed to remove %s\n", platform->name);
+               }
+               platform->probed = 0;
+               list_del(&platform->card_list);
+               module_put(platform->dev->driver->owner);
+       }
 
-       dev_dbg(card->dev, "All components present, instantiating\n");
+       /* remove the CODEC */
+       if (codec && codec->probed) {
+               if (codec->driver->remove) {
+                       err = codec->driver->remove(codec);
+                       if (err < 0)
+                               printk(KERN_ERR "asoc: failed to remove %s\n", codec->name);
+               }
 
-       /* Found everything, bring it up */
-       card->pmdown_time = pmdown_time;
+               /* Make sure all DAPM widgets are freed */
+               snd_soc_dapm_free(codec);
 
-       if (card->probe) {
-               ret = card->probe(pdev);
-               if (ret < 0)
-                       return;
+               soc_cleanup_codec_debugfs(codec);
+               device_remove_file(&rtd->dev, &dev_attr_codec_reg);
+               codec->probed = 0;
+               list_del(&codec->card_list);
+               module_put(codec->dev->driver->owner);
        }
 
-       for (i = 0; i < card->num_links; i++) {
-               struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
-               if (cpu_dai->probe) {
-                       ret = cpu_dai->probe(pdev, cpu_dai);
-                       if (ret < 0)
-                               goto cpu_dai_err;
+       /* remove the cpu_dai */
+       if (cpu_dai && cpu_dai->probed) {
+               if (cpu_dai->driver->remove) {
+                       err = cpu_dai->driver->remove(cpu_dai);
+                       if (err < 0)
+                               printk(KERN_ERR "asoc: failed to remove %s\n", cpu_dai->name);
                }
+               cpu_dai->probed = 0;
+               list_del(&cpu_dai->card_list);
+               module_put(cpu_dai->dev->driver->owner);
        }
+}
 
-       if (codec_dev->probe) {
-               ret = codec_dev->probe(pdev);
-               if (ret < 0)
-                       goto cpu_dai_err;
+static void rtd_release(struct device *dev) {}
+
+static int soc_probe_dai_link(struct snd_soc_card *card, int num)
+{
+       struct snd_soc_dai_link *dai_link = &card->dai_link[num];
+       struct snd_soc_pcm_runtime *rtd = &card->rtd[num];
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai;
+       int ret;
+
+       dev_dbg(card->dev, "probe %s dai link %d\n", card->name, num);
+
+       /* config components */
+       codec_dai->codec = codec;
+       codec->card = card;
+       cpu_dai->platform = platform;
+       rtd->card = card;
+       rtd->dev.parent = card->dev;
+       codec_dai->card = card;
+       cpu_dai->card = card;
+
+       /* set default power off timeout */
+       rtd->pmdown_time = pmdown_time;
+
+       /* probe the cpu_dai */
+       if (!cpu_dai->probed) {
+               if (cpu_dai->driver->probe) {
+                       ret = cpu_dai->driver->probe(cpu_dai);
+                       if (ret < 0) {
+                               printk(KERN_ERR "asoc: failed to probe CPU DAI %s\n",
+                                               cpu_dai->name);
+                               return ret;
+                       }
+               }
+               cpu_dai->probed = 1;
+               /* mark cpu_dai as probed and add to card cpu_dai list */
+               list_add(&cpu_dai->card_list, &card->dai_dev_list);
        }
-       codec = card->codec;
 
-       if (platform->probe) {
-               ret = platform->probe(pdev);
-               if (ret < 0)
-                       goto platform_err;
+       /* probe the CODEC */
+       if (!codec->probed) {
+               if (codec->driver->probe) {
+                       ret = codec->driver->probe(codec);
+                       if (ret < 0) {
+                               printk(KERN_ERR "asoc: failed to probe CODEC %s\n",
+                                               codec->name);
+                               return ret;
+                       }
+               }
+
+               soc_init_codec_debugfs(codec);
+
+               /* mark codec as probed and add to card codec list */
+               codec->probed = 1;
+               list_add(&codec->card_list, &card->codec_dev_list);
        }
 
-       /* DAPM stream work */
-       INIT_DELAYED_WORK(&card->delayed_work, close_delayed_work);
-#ifdef CONFIG_PM
-       /* deferred resume work */
-       INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
-#endif
+       /* probe the platform */
+       if (!platform->probed) {
+               if (platform->driver->probe) {
+                       ret = platform->driver->probe(platform);
+                       if (ret < 0) {
+                               printk(KERN_ERR "asoc: failed to probe platform %s\n",
+                                               platform->name);
+                               return ret;
+                       }
+               }
+               /* mark platform as probed and add to card platform list */
+               platform->probed = 1;
+               list_add(&platform->card_list, &card->platform_dev_list);
+       }
 
-       for (i = 0; i < card->num_links; i++) {
-               if (card->dai_link[i].init) {
-                       ret = card->dai_link[i].init(codec);
+       /* probe the CODEC DAI */
+       if (!codec_dai->probed) {
+               if (codec_dai->driver->probe) {
+                       ret = codec_dai->driver->probe(codec_dai);
                        if (ret < 0) {
-                               printk(KERN_ERR "asoc: failed to init %s\n",
-                                       card->dai_link[i].stream_name);
-                               continue;
+                               printk(KERN_ERR "asoc: failed to probe CODEC DAI %s\n",
+                                               codec_dai->name);
+                               return ret;
                        }
                }
-               if (card->dai_link[i].codec_dai->ac97_control)
-                       ac97 = 1;
+
+               /* mark cpu_dai as probed and add to card cpu_dai list */
+               codec_dai->probed = 1;
+               list_add(&codec_dai->card_list, &card->dai_dev_list);
        }
 
-       snprintf(codec->card->shortname, sizeof(codec->card->shortname),
-                "%s",  card->name);
-       snprintf(codec->card->longname, sizeof(codec->card->longname),
-                "%s (%s)", card->name, codec->name);
+       /* DAPM dai link stream work */
+       INIT_DELAYED_WORK(&rtd->delayed_work, close_delayed_work);
+
+       /* now that all clients have probed, initialise the DAI link */
+       if (dai_link->init) {
+               ret = dai_link->init(rtd);
+               if (ret < 0) {
+                       printk(KERN_ERR "asoc: failed to init %s\n", dai_link->stream_name);
+                       return ret;
+               }
+       }
 
        /* Make sure all DAPM widgets are instantiated */
        snd_soc_dapm_new_widgets(codec);
+       snd_soc_dapm_sync(codec);
 
-       ret = snd_card_register(codec->card);
+       /* register the rtd device */
+       rtd->dev.init_name = rtd->dai_link->stream_name;
+       rtd->dev.release = rtd_release;
+       rtd->dev.init_name = dai_link->name;
+       ret = device_register(&rtd->dev);
        if (ret < 0) {
-               printk(KERN_ERR "asoc: failed to register soundcard for %s\n",
-                               codec->name);
-               goto card_err;
+               printk(KERN_ERR "asoc: failed to register DAI runtime device %d\n", ret);
+               return ret;
        }
 
-       mutex_lock(&codec->mutex);
+       rtd->dev_registered = 1;
+       ret = device_create_file(&rtd->dev, &dev_attr_pmdown_time);
+       if (ret < 0)
+               printk(KERN_WARNING "asoc: failed to add pmdown_time sysfs\n");
+
+       /* add DAPM sysfs entries for this codec */
+       ret = snd_soc_dapm_sys_add(&rtd->dev);
+       if (ret < 0)
+               printk(KERN_WARNING "asoc: failed to add codec dapm sysfs entries\n");
+
+       /* add codec sysfs entries */
+       ret = device_create_file(&rtd->dev, &dev_attr_codec_reg);
+       if (ret < 0)
+               printk(KERN_WARNING "asoc: failed to add codec sysfs files\n");
+
+       /* create the pcm */
+       ret = soc_new_pcm(rtd, num);
+       if (ret < 0) {
+               printk(KERN_ERR "asoc: can't create pcm %s\n", dai_link->stream_name);
+               return ret;
+       }
+
+       /* add platform data for AC97 devices */
+       if (rtd->codec_dai->driver->ac97_control)
+               snd_ac97_dev_add_pdata(codec->ac97, rtd->cpu_dai->ac97_pdata);
+
+       return 0;
+}
+
 #ifdef CONFIG_SND_SOC_AC97_BUS
+static int soc_register_ac97_dai_link(struct snd_soc_pcm_runtime *rtd)
+{
+       int ret;
+
        /* Only instantiate AC97 if not already done by the adaptor
         * for the generic AC97 subsystem.
         */
-       if (ac97 && strcmp(codec->name, "AC97") != 0) {
-               ret = soc_ac97_dev_register(codec);
+       if (rtd->codec_dai->driver->ac97_control && !rtd->codec->ac97_registered) {
+
+               ret = soc_ac97_dev_register(rtd->codec);
                if (ret < 0) {
                        printk(KERN_ERR "asoc: AC97 device register failed\n");
-                       snd_card_free(codec->card);
-                       mutex_unlock(&codec->mutex);
-                       goto card_err;
+                       return ret;
                }
+
+               rtd->codec->ac97_registered = 1;
+       }
+       return 0;
+}
+
+static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
+{
+       if (codec->ac97_registered) {
+               soc_ac97_dev_unregister(codec);
+               codec->ac97_registered = 0;
        }
+}
 #endif
 
-       ret = snd_soc_dapm_sys_add(card->socdev->dev);
-       if (ret < 0)
-               printk(KERN_WARNING "asoc: failed to add dapm sysfs entries\n");
+static void snd_soc_instantiate_card(struct snd_soc_card *card)
+{
+       struct platform_device *pdev = to_platform_device(card->dev);
+       int ret, i;
 
-       ret = device_create_file(card->socdev->dev, &dev_attr_pmdown_time);
-       if (ret < 0)
-               printk(KERN_WARNING "asoc: failed to add pmdown_time sysfs\n");
+       mutex_lock(&card->mutex);
 
-       ret = device_create_file(card->socdev->dev, &dev_attr_codec_reg);
-       if (ret < 0)
-               printk(KERN_WARNING "asoc: failed to add codec sysfs files\n");
+       if (card->instantiated) {
+               mutex_unlock(&card->mutex);
+               return;
+       }
 
-       soc_init_codec_debugfs(codec);
-       mutex_unlock(&codec->mutex);
+       /* bind DAIs */
+       for (i = 0; i < card->num_links; i++)
+               soc_bind_dai_link(card, i);
 
-       card->instantiated = 1;
+       /* bind completed ? */
+       if (card->num_rtd != card->num_links) {
+               mutex_unlock(&card->mutex);
+               return;
+       }
 
-       return;
+       /* card bind complete so register a sound card */
+       ret = snd_card_create(SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
+                       card->owner, 0, &card->snd_card);
+       if (ret < 0) {
+               printk(KERN_ERR "asoc: can't create sound card for card %s\n",
+                       card->name);
+               mutex_unlock(&card->mutex);
+               return;
+       }
+       card->snd_card->dev = card->dev;
+
+#ifdef CONFIG_PM
+       /* deferred resume work */
+       INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
+#endif
 
-card_err:
-       if (platform->remove)
-               platform->remove(pdev);
+       /* initialise the sound card only once */
+       if (card->probe) {
+               ret = card->probe(pdev);
+               if (ret < 0)
+                       goto card_probe_error;
+       }
 
-platform_err:
-       if (codec_dev->remove)
-               codec_dev->remove(pdev);
+       for (i = 0; i < card->num_links; i++) {
+               ret = soc_probe_dai_link(card, i);
+               if (ret < 0) {
+                       printk(KERN_ERR "asoc: failed to instanciate card %s\n", card->name);
+                       goto probe_dai_err;
+               }
+       }
 
-cpu_dai_err:
-       for (i--; i >= 0; i--) {
-               struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
-               if (cpu_dai->remove)
-                       cpu_dai->remove(pdev, cpu_dai);
+       snprintf(card->snd_card->shortname, sizeof(card->snd_card->shortname),
+                "%s",  card->name);
+       snprintf(card->snd_card->longname, sizeof(card->snd_card->longname),
+                "%s", card->name);
+
+       ret = snd_card_register(card->snd_card);
+       if (ret < 0) {
+               printk(KERN_ERR "asoc: failed to register soundcard for %s\n", card->name);
+               goto probe_dai_err;
        }
 
+#ifdef CONFIG_SND_SOC_AC97_BUS
+       /* register any AC97 codecs */
+       for (i = 0; i < card->num_rtd; i++) {
+                       ret = soc_register_ac97_dai_link(&card->rtd[i]);
+                       if (ret < 0) {
+                               printk(KERN_ERR "asoc: failed to register AC97 %s\n", card->name);
+                               goto probe_dai_err;
+                       }
+               }
+#endif
+
+       card->instantiated = 1;
+       mutex_unlock(&card->mutex);
+       return;
+
+probe_dai_err:
+       for (i = 0; i < card->num_links; i++)
+               soc_remove_dai_link(card, i);
+
+card_probe_error:
        if (card->remove)
                card->remove(pdev);
+
+       snd_card_free(card->snd_card);
+
+       mutex_unlock(&card->mutex);
 }
 
 /*
@@ -1332,15 +1544,15 @@ static void snd_soc_instantiate_cards(void)
 /* probes a new socdev */
 static int soc_probe(struct platform_device *pdev)
 {
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
        int ret = 0;
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_card *card = socdev->card;
-
-       /* Bodge while we push things out of socdev */
-       card->socdev = socdev;
 
        /* Bodge while we unpick instantiation */
        card->dev = &pdev->dev;
+       INIT_LIST_HEAD(&card->dai_dev_list);
+       INIT_LIST_HEAD(&card->codec_dev_list);
+       INIT_LIST_HEAD(&card->platform_dev_list);
+
        ret = snd_soc_register_card(card);
        if (ret != 0) {
                dev_err(&pdev->dev, "Failed to register card\n");
@@ -1353,50 +1565,49 @@ static int soc_probe(struct platform_device *pdev)
 /* removes a socdev */
 static int soc_remove(struct platform_device *pdev)
 {
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
        int i;
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
 
-       if (card->instantiated) {
-               run_delayed_work(&card->delayed_work);
-
-               if (platform->remove)
-                       platform->remove(pdev);
-
-               if (codec_dev->remove)
-                       codec_dev->remove(pdev);
+               if (card->instantiated) {
 
-               for (i = 0; i < card->num_links; i++) {
-                       struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai;
-                       if (cpu_dai->remove)
-                               cpu_dai->remove(pdev, cpu_dai);
+               /* make sure any delayed work runs */
+               for (i = 0; i < card->num_rtd; i++) {
+                       struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
+                       run_delayed_work(&rtd->delayed_work);
                }
 
+               /* remove and free each DAI */
+               for (i = 0; i < card->num_rtd; i++)
+                       soc_remove_dai_link(card, i);
+
+               /* remove the card */
                if (card->remove)
                        card->remove(pdev);
-       }
 
+               kfree(card->rtd);
+               snd_card_free(card->snd_card);
+       }
        snd_soc_unregister_card(card);
-
        return 0;
 }
 
 static int soc_poweroff(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct snd_soc_card *card = socdev->card;
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
+       int i;
 
        if (!card->instantiated)
                return 0;
 
        /* Flush out pmdown_time work - we actually do want to run it
         * now, we're shutting down so no imminent restart. */
-       run_delayed_work(&card->delayed_work);
+       for (i = 0; i < card->num_rtd; i++) {
+               struct snd_soc_pcm_runtime *rtd = &card->rtd[i];
+               run_delayed_work(&rtd->delayed_work);
+       }
 
-       snd_soc_dapm_shutdown(socdev);
+       snd_soc_dapm_shutdown(card);
 
        return 0;
 }
@@ -1419,53 +1630,42 @@ static struct platform_driver soc_driver = {
 };
 
 /* create a new pcm */
-static int soc_new_pcm(struct snd_soc_device *socdev,
-       struct snd_soc_dai_link *dai_link, int num)
-{
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_codec *codec = card->codec;
-       struct snd_soc_platform *platform = card->platform;
-       struct snd_soc_dai *codec_dai = dai_link->codec_dai;
-       struct snd_soc_dai *cpu_dai = dai_link->cpu_dai;
-       struct snd_soc_pcm_runtime *rtd;
+static int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
+{
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_platform *platform = rtd->platform;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        struct snd_pcm *pcm;
        char new_name[64];
        int ret = 0, playback = 0, capture = 0;
 
-       rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL);
-       if (rtd == NULL)
-               return -ENOMEM;
-
-       rtd->dai = dai_link;
-       rtd->socdev = socdev;
-       codec_dai->codec = card->codec;
-
        /* check client and interface hw capabilities */
        snprintf(new_name, sizeof(new_name), "%s %s-%d",
-                dai_link->stream_name, codec_dai->name, num);
+                       rtd->dai_link->stream_name, codec_dai->name, num);
 
-       if (codec_dai->playback.channels_min)
+       if (codec_dai->driver->playback.channels_min)
                playback = 1;
-       if (codec_dai->capture.channels_min)
+       if (codec_dai->driver->capture.channels_min)
                capture = 1;
 
-       ret = snd_pcm_new(codec->card, new_name, codec->pcm_devs++, playback,
-               capture, &pcm);
+       dev_dbg(rtd->card->dev, "registered pcm #%d %s\n",num,new_name);
+       ret = snd_pcm_new(rtd->card->snd_card, new_name,
+                       num, playback, capture, &pcm);
        if (ret < 0) {
-               printk(KERN_ERR "asoc: can't create pcm for codec %s\n",
-                       codec->name);
-               kfree(rtd);
+               printk(KERN_ERR "asoc: can't create pcm for codec %s\n", codec->name);
                return ret;
        }
 
-       dai_link->pcm = pcm;
+       rtd->pcm = pcm;
        pcm->private_data = rtd;
-       soc_pcm_ops.mmap = platform->pcm_ops->mmap;
-       soc_pcm_ops.ioctl = platform->pcm_ops->ioctl;
-       soc_pcm_ops.copy = platform->pcm_ops->copy;
-       soc_pcm_ops.silence = platform->pcm_ops->silence;
-       soc_pcm_ops.ack = platform->pcm_ops->ack;
-       soc_pcm_ops.page = platform->pcm_ops->page;
+       soc_pcm_ops.mmap = platform->driver->ops->mmap;
+       soc_pcm_ops.pointer = platform->driver->ops->pointer;
+       soc_pcm_ops.ioctl = platform->driver->ops->ioctl;
+       soc_pcm_ops.copy = platform->driver->ops->copy;
+       soc_pcm_ops.silence = platform->driver->ops->silence;
+       soc_pcm_ops.ack = platform->driver->ops->ack;
+       soc_pcm_ops.page = platform->driver->ops->page;
 
        if (playback)
                snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops);
@@ -1473,14 +1673,13 @@ static int soc_new_pcm(struct snd_soc_device *socdev,
        if (capture)
                snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops);
 
-       ret = platform->pcm_new(codec->card, codec_dai, pcm);
+       ret = platform->driver->pcm_new(rtd->card->snd_card, codec_dai, pcm);
        if (ret < 0) {
                printk(KERN_ERR "asoc: platform pcm constructor failed\n");
-               kfree(rtd);
                return ret;
        }
 
-       pcm->private_free = platform->pcm_free;
+       pcm->private_free = platform->driver->pcm_free;
        printk(KERN_INFO "asoc: %s <-> %s mapping ok\n", codec_dai->name,
                cpu_dai->name);
        return ret;
@@ -1496,8 +1695,8 @@ static int soc_new_pcm(struct snd_soc_device *socdev,
  */
 int snd_soc_codec_volatile_register(struct snd_soc_codec *codec, int reg)
 {
-       if (codec->volatile_register)
-               return codec->volatile_register(reg);
+       if (codec->driver->volatile_register)
+               return codec->driver->volatile_register(reg);
        else
                return 0;
 }
@@ -1532,7 +1731,6 @@ int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
 
        codec->ac97->bus->ops = ops;
        codec->ac97->num = num;
-       codec->dev = &codec->ac97->dev;
        mutex_unlock(&codec->mutex);
        return 0;
 }
@@ -1547,6 +1745,9 @@ EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec);
 void snd_soc_free_ac97_codec(struct snd_soc_codec *codec)
 {
        mutex_lock(&codec->mutex);
+#ifdef CONFIG_SND_SOC_AC97_BUS
+       soc_unregister_ac97_dai_link(codec);
+#endif
        kfree(codec->ac97->bus);
        kfree(codec->ac97);
        codec->ac97 = NULL;
@@ -1632,95 +1833,6 @@ int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
 }
 EXPORT_SYMBOL_GPL(snd_soc_test_bits);
 
-/**
- * snd_soc_new_pcms - create new sound card and pcms
- * @socdev: the SoC audio device
- * @idx: ALSA card index
- * @xid: card identification
- *
- * Create a new sound card based upon the codec and interface pcms.
- *
- * Returns 0 for success, else error.
- */
-int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid)
-{
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_codec *codec = card->codec;
-       int ret, i;
-
-       mutex_lock(&codec->mutex);
-
-       /* register a sound card */
-       ret = snd_card_create(idx, xid, codec->owner, 0, &codec->card);
-       if (ret < 0) {
-               printk(KERN_ERR "asoc: can't create sound card for codec %s\n",
-                       codec->name);
-               mutex_unlock(&codec->mutex);
-               return ret;
-       }
-
-       codec->socdev = socdev;
-       codec->card->dev = socdev->dev;
-       codec->card->private_data = codec;
-       strncpy(codec->card->driver, codec->name, sizeof(codec->card->driver));
-
-       /* create the pcms */
-       for (i = 0; i < card->num_links; i++) {
-               ret = soc_new_pcm(socdev, &card->dai_link[i], i);
-               if (ret < 0) {
-                       printk(KERN_ERR "asoc: can't create pcm %s\n",
-                               card->dai_link[i].stream_name);
-                       mutex_unlock(&codec->mutex);
-                       return ret;
-               }
-               /* Check for codec->ac97 to handle the ac97.c fun */
-               if (card->dai_link[i].codec_dai->ac97_control && codec->ac97) {
-                       snd_ac97_dev_add_pdata(codec->ac97,
-                               card->dai_link[i].cpu_dai->ac97_pdata);
-               }
-       }
-
-       mutex_unlock(&codec->mutex);
-       return ret;
-}
-EXPORT_SYMBOL_GPL(snd_soc_new_pcms);
-
-/**
- * snd_soc_free_pcms - free sound card and pcms
- * @socdev: the SoC audio device
- *
- * Frees sound card and pcms associated with the socdev.
- * Also unregister the codec if it is an AC97 device.
- */
-void snd_soc_free_pcms(struct snd_soc_device *socdev)
-{
-       struct snd_soc_codec *codec = socdev->card->codec;
-#ifdef CONFIG_SND_SOC_AC97_BUS
-       struct snd_soc_dai *codec_dai;
-       int i;
-#endif
-
-       mutex_lock(&codec->mutex);
-       soc_cleanup_codec_debugfs(codec);
-#ifdef CONFIG_SND_SOC_AC97_BUS
-       for (i = 0; i < codec->num_dai; i++) {
-               codec_dai = &codec->dai[i];
-               if (codec_dai->ac97_control && codec->ac97 &&
-                   strcmp(codec->name, "AC97") != 0) {
-                       soc_ac97_dev_unregister(codec);
-                       goto free_card;
-               }
-       }
-free_card:
-#endif
-
-       if (codec->card)
-               snd_card_free(codec->card);
-       device_remove_file(socdev->dev, &dev_attr_codec_reg);
-       mutex_unlock(&codec->mutex);
-}
-EXPORT_SYMBOL_GPL(snd_soc_free_pcms);
-
 /**
  * snd_soc_set_runtime_hwparams - set the runtime hardware parameters
  * @substream: the pcm substream
@@ -1782,7 +1894,7 @@ EXPORT_SYMBOL_GPL(snd_soc_cnew);
 int snd_soc_add_controls(struct snd_soc_codec *codec,
        const struct snd_kcontrol_new *controls, int num_controls)
 {
-       struct snd_card *card = codec->card;
+       struct snd_card *card = codec->card->snd_card;
        int err, i;
 
        for (i = 0; i < num_controls; i++) {
@@ -2337,7 +2449,7 @@ EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8);
 int snd_soc_limit_volume(struct snd_soc_codec *codec,
        const char *name, int max)
 {
-       struct snd_card *card = codec->card;
+       struct snd_card *card = codec->card->snd_card;
        struct snd_kcontrol *kctl;
        struct soc_mixer_control *mc;
        int found = 0;
@@ -2469,8 +2581,8 @@ EXPORT_SYMBOL_GPL(snd_soc_put_volsw_2r_sx);
 int snd_soc_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
        unsigned int freq, int dir)
 {
-       if (dai->ops && dai->ops->set_sysclk)
-               return dai->ops->set_sysclk(dai, clk_id, freq, dir);
+       if (dai->driver && dai->driver->ops->set_sysclk)
+               return dai->driver->ops->set_sysclk(dai, clk_id, freq, dir);
        else
                return -EINVAL;
 }
@@ -2489,8 +2601,8 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_sysclk);
 int snd_soc_dai_set_clkdiv(struct snd_soc_dai *dai,
        int div_id, int div)
 {
-       if (dai->ops && dai->ops->set_clkdiv)
-               return dai->ops->set_clkdiv(dai, div_id, div);
+       if (dai->driver && dai->driver->ops->set_clkdiv)
+               return dai->driver->ops->set_clkdiv(dai, div_id, div);
        else
                return -EINVAL;
 }
@@ -2509,8 +2621,8 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_clkdiv);
 int snd_soc_dai_set_pll(struct snd_soc_dai *dai, int pll_id, int source,
        unsigned int freq_in, unsigned int freq_out)
 {
-       if (dai->ops && dai->ops->set_pll)
-               return dai->ops->set_pll(dai, pll_id, source,
+       if (dai->driver && dai->driver->ops->set_pll)
+               return dai->driver->ops->set_pll(dai, pll_id, source,
                                         freq_in, freq_out);
        else
                return -EINVAL;
@@ -2526,8 +2638,8 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_pll);
  */
 int snd_soc_dai_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
 {
-       if (dai->ops && dai->ops->set_fmt)
-               return dai->ops->set_fmt(dai, fmt);
+       if (dai->driver && dai->driver->ops->set_fmt)
+               return dai->driver->ops->set_fmt(dai, fmt);
        else
                return -EINVAL;
 }
@@ -2547,8 +2659,8 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt);
 int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
        unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width)
 {
-       if (dai->ops && dai->ops->set_tdm_slot)
-               return dai->ops->set_tdm_slot(dai, tx_mask, rx_mask,
+       if (dai->driver && dai->driver->ops->set_tdm_slot)
+               return dai->driver->ops->set_tdm_slot(dai, tx_mask, rx_mask,
                                slots, slot_width);
        else
                return -EINVAL;
@@ -2571,8 +2683,8 @@ int snd_soc_dai_set_channel_map(struct snd_soc_dai *dai,
        unsigned int tx_num, unsigned int *tx_slot,
        unsigned int rx_num, unsigned int *rx_slot)
 {
-       if (dai->ops && dai->ops->set_channel_map)
-               return dai->ops->set_channel_map(dai, tx_num, tx_slot,
+       if (dai->driver && dai->driver->ops->set_channel_map)
+               return dai->driver->ops->set_channel_map(dai, tx_num, tx_slot,
                        rx_num, rx_slot);
        else
                return -EINVAL;
@@ -2588,8 +2700,8 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_channel_map);
  */
 int snd_soc_dai_set_tristate(struct snd_soc_dai *dai, int tristate)
 {
-       if (dai->ops && dai->ops->set_tristate)
-               return dai->ops->set_tristate(dai, tristate);
+       if (dai->driver && dai->driver->ops->set_tristate)
+               return dai->driver->ops->set_tristate(dai, tristate);
        else
                return -EINVAL;
 }
@@ -2604,8 +2716,8 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_tristate);
  */
 int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute)
 {
-       if (dai->ops && dai->ops->digital_mute)
-               return dai->ops->digital_mute(dai, mute);
+       if (dai->driver && dai->driver->ops->digital_mute)
+               return dai->driver->ops->digital_mute(dai, mute);
        else
                return -EINVAL;
 }
@@ -2622,11 +2734,22 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute);
  */
 static int snd_soc_register_card(struct snd_soc_card *card)
 {
+       int i;
+
        if (!card->name || !card->dev)
                return -EINVAL;
 
+       card->rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime) * card->num_links,
+                       GFP_KERNEL);
+       if (card->rtd == NULL)
+               return -ENOMEM;
+
+       for (i = 0; i < card->num_links; i++)
+               card->rtd[i].dai_link = &card->dai_link[i];
+
        INIT_LIST_HEAD(&card->list);
        card->instantiated = 0;
+       mutex_init(&card->mutex);
 
        mutex_lock(&client_mutex);
        list_add(&card->list, &card_list);
@@ -2652,30 +2775,97 @@ static int snd_soc_unregister_card(struct snd_soc_card *card)
        mutex_lock(&client_mutex);
        list_del(&card->list);
        mutex_unlock(&client_mutex);
-
        dev_dbg(card->dev, "Unregistered card '%s'\n", card->name);
 
        return 0;
 }
 
+/*
+ * Simplify DAI link configuration by removing ".-1" from device names
+ * and sanitizing names.
+ */
+static inline char *fmt_single_name(struct device *dev, int *id)
+{
+       char *found, name[NAME_SIZE];
+       int id1, id2;
+
+       if (dev_name(dev) == NULL)
+               return NULL;
+
+       strncpy(name, dev_name(dev), NAME_SIZE);
+
+       /* are we a "%s.%d" name (platform and SPI components) */
+       found = strstr(name, dev->driver->name);
+       if (found) {
+               /* get ID */
+               if (sscanf(&found[strlen(dev->driver->name)], ".%d", id) == 1) {
+
+                       /* discard ID from name if ID == -1 */
+                       if (*id == -1)
+                               found[strlen(dev->driver->name)] = '\0';
+               }
+
+       } else {
+               /* I2C component devices are named "bus-addr"  */
+               if (sscanf(name, "%x-%x", &id1, &id2) == 2) {
+                       char tmp[NAME_SIZE];
+
+                       /* create unique ID number from I2C addr and bus */
+                       *id = ((id1 && 0xffff) << 16) + id2;
+
+                       /* sanitize component name for DAI link creation */
+                       snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, name);
+                       strncpy(name, tmp, NAME_SIZE);
+               } else
+                       *id = 0;
+       }
+
+       return kstrdup(name, GFP_KERNEL);
+}
+
+/*
+ * Simplify DAI link naming for single devices with multiple DAIs by removing
+ * any ".-1" and using the DAI name (instead of device name).
+ */
+static inline char *fmt_multiple_name(struct device *dev,
+               struct snd_soc_dai_driver *dai_drv)
+{
+       if (dai_drv->name == NULL) {
+               printk(KERN_ERR "asoc: error - multiple DAI %s registered with no name\n",
+                               dev_name(dev));
+               return NULL;
+       }
+
+       return kstrdup(dai_drv->name, GFP_KERNEL);
+}
+
 /**
  * snd_soc_register_dai - Register a DAI with the ASoC core
  *
  * @dai: DAI to register
  */
-int snd_soc_register_dai(struct snd_soc_dai *dai)
+int snd_soc_register_dai(struct device *dev,
+               struct snd_soc_dai_driver *dai_drv)
 {
-       if (!dai->name)
-               return -EINVAL;
+       struct snd_soc_dai *dai;
+
+       dev_dbg(dev, "dai register %s\n", dev_name(dev));
 
-       /* The device should become mandatory over time */
-       if (!dai->dev)
-               printk(KERN_WARNING "No device for DAI %s\n", dai->name);
+       dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
+       if (dai == NULL)
+                       return -ENOMEM;
 
-       if (!dai->ops)
-               dai->ops = &null_dai_ops;
+       /* create DAI component name */
+       dai->name = fmt_single_name(dev, &dai->id);
+       if (dai->name == NULL) {
+               kfree(dai);
+               return -ENOMEM;
+       }
 
-       INIT_LIST_HEAD(&dai->list);
+       dai->dev = dev;
+       dai->driver = dai_drv;
+       if (!dai->driver->ops)
+               dai->driver->ops = &null_dai_ops;
 
        mutex_lock(&client_mutex);
        list_add(&dai->list, &dai_list);
@@ -2693,13 +2883,24 @@ EXPORT_SYMBOL_GPL(snd_soc_register_dai);
  *
  * @dai: DAI to unregister
  */
-void snd_soc_unregister_dai(struct snd_soc_dai *dai)
+void snd_soc_unregister_dai(struct device *dev)
 {
+       struct snd_soc_dai *dai;
+
+       list_for_each_entry(dai, &dai_list, list) {
+               if (dev == dai->dev)
+                       goto found;
+       }
+       return;
+
+found:
        mutex_lock(&client_mutex);
        list_del(&dai->list);
        mutex_unlock(&client_mutex);
 
        pr_debug("Unregistered DAI '%s'\n", dai->name);
+       kfree(dai->name);
+       kfree(dai);
 }
 EXPORT_SYMBOL_GPL(snd_soc_unregister_dai);
 
@@ -2709,21 +2910,47 @@ EXPORT_SYMBOL_GPL(snd_soc_unregister_dai);
  * @dai: Array of DAIs to register
  * @count: Number of DAIs
  */
-int snd_soc_register_dais(struct snd_soc_dai *dai, size_t count)
+int snd_soc_register_dais(struct device *dev,
+               struct snd_soc_dai_driver *dai_drv, size_t count)
 {
-       int i, ret;
+       struct snd_soc_dai *dai;
+       int i, ret = 0;
+
+       dev_dbg(dev, "dai register %s #%d\n", dev_name(dev), count);
 
        for (i = 0; i < count; i++) {
-               ret = snd_soc_register_dai(&dai[i]);
-               if (ret != 0)
+
+               dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
+               if (dai == NULL)
+                       return -ENOMEM;
+
+               /* create DAI component name */
+               dai->name = fmt_multiple_name(dev, &dai_drv[i]);
+               if (dai->name == NULL) {
+                       kfree(dai);
+                       ret = -EINVAL;
                        goto err;
+               }
+
+               dai->dev = dev;
+               dai->id = i;
+               dai->driver = &dai_drv[i];
+               if (!dai->driver->ops)
+                       dai->driver->ops = &null_dai_ops;
+
+               mutex_lock(&client_mutex);
+               list_add(&dai->list, &dai_list);
+               mutex_unlock(&client_mutex);
+
+               pr_debug("Registered DAI '%s'\n", dai->name);
        }
 
+       snd_soc_instantiate_cards();
        return 0;
 
 err:
        for (i--; i >= 0; i--)
-               snd_soc_unregister_dai(&dai[i]);
+               snd_soc_unregister_dai(dev);
 
        return ret;
 }
@@ -2735,12 +2962,12 @@ EXPORT_SYMBOL_GPL(snd_soc_register_dais);
  * @dai: Array of DAIs to unregister
  * @count: Number of DAIs
  */
-void snd_soc_unregister_dais(struct snd_soc_dai *dai, size_t count)
+void snd_soc_unregister_dais(struct device *dev, size_t count)
 {
        int i;
 
        for (i = 0; i < count; i++)
-               snd_soc_unregister_dai(&dai[i]);
+               snd_soc_unregister_dai(dev);
 }
 EXPORT_SYMBOL_GPL(snd_soc_unregister_dais);
 
@@ -2749,12 +2976,26 @@ EXPORT_SYMBOL_GPL(snd_soc_unregister_dais);
  *
  * @platform: platform to register
  */
-int snd_soc_register_platform(struct snd_soc_platform *platform)
+int snd_soc_register_platform(struct device *dev,
+               struct snd_soc_platform_driver *platform_drv)
 {
-       if (!platform->name)
-               return -EINVAL;
+       struct snd_soc_platform *platform;
+
+       dev_dbg(dev, "platform register %s\n", dev_name(dev));
+
+       platform = kzalloc(sizeof(struct snd_soc_platform), GFP_KERNEL);
+       if (platform == NULL)
+                       return -ENOMEM;
+
+       /* create platform component name */
+       platform->name = fmt_single_name(dev, &platform->id);
+       if (platform->name == NULL) {
+               kfree(platform);
+               return -ENOMEM;
+       }
 
-       INIT_LIST_HEAD(&platform->list);
+       platform->dev = dev;
+       platform->driver = platform_drv;
 
        mutex_lock(&client_mutex);
        list_add(&platform->list, &platform_list);
@@ -2772,13 +3013,24 @@ EXPORT_SYMBOL_GPL(snd_soc_register_platform);
  *
  * @platform: platform to unregister
  */
-void snd_soc_unregister_platform(struct snd_soc_platform *platform)
+void snd_soc_unregister_platform(struct device *dev)
 {
+       struct snd_soc_platform *platform;
+
+       list_for_each_entry(platform, &platform_list, list) {
+               if (dev == platform->dev)
+                       goto found;
+       }
+       return;
+
+found:
        mutex_lock(&client_mutex);
        list_del(&platform->list);
        mutex_unlock(&client_mutex);
 
        pr_debug("Unregistered platform '%s'\n", platform->name);
+       kfree(platform->name);
+       kfree(platform);
 }
 EXPORT_SYMBOL_GPL(snd_soc_unregister_platform);
 
@@ -2820,32 +3072,78 @@ static void fixup_codec_formats(struct snd_soc_pcm_stream *stream)
  *
  * @codec: codec to register
  */
-int snd_soc_register_codec(struct snd_soc_codec *codec)
+int snd_soc_register_codec(struct device *dev,
+               struct snd_soc_codec_driver *codec_drv,
+               struct snd_soc_dai_driver *dai_drv, int num_dai)
 {
-       int i;
+       struct snd_soc_codec *codec;
+       int ret, i;
 
-       if (!codec->name)
-               return -EINVAL;
+       dev_dbg(dev, "codec register %s\n", dev_name(dev));
+
+       codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
+       if (codec == NULL)
+               return -ENOMEM;
 
-       /* The device should become mandatory over time */
-       if (!codec->dev)
-               printk(KERN_WARNING "No device for codec %s\n", codec->name);
+       /* create CODEC component name */
+       codec->name = fmt_single_name(dev, &codec->id);
+       if (codec->name == NULL) {
+               kfree(codec);
+               return -ENOMEM;
+       }
+
+       /* allocate CODEC register cache */
+       if (codec_drv->reg_cache_size && codec_drv->reg_word_size) {
 
-       INIT_LIST_HEAD(&codec->list);
+               if (codec_drv->reg_cache_default)
+                       codec->reg_cache = kmemdup(codec_drv->reg_cache_default,
+                               codec_drv->reg_cache_size * codec_drv->reg_word_size, GFP_KERNEL);
+               else
+                       codec->reg_cache = kzalloc(codec_drv->reg_cache_size *
+                               codec_drv->reg_word_size, GFP_KERNEL);
 
-       for (i = 0; i < codec->num_dai; i++) {
-               fixup_codec_formats(&codec->dai[i].playback);
-               fixup_codec_formats(&codec->dai[i].capture);
+               if (codec->reg_cache == NULL) {
+                       kfree(codec->name);
+                       kfree(codec);
+                       return -ENOMEM;
+               }
        }
 
+       codec->dev = dev;
+       codec->driver = codec_drv;
+       codec->bias_level = SND_SOC_BIAS_OFF;
+       codec->num_dai = num_dai;
+       mutex_init(&codec->mutex);
+       INIT_LIST_HEAD(&codec->dapm_widgets);
+       INIT_LIST_HEAD(&codec->dapm_paths);
+
+       for (i = 0; i < num_dai; i++) {
+               fixup_codec_formats(&dai_drv[i].playback);
+               fixup_codec_formats(&dai_drv[i].capture);
+       }
+
+       /* register DAIs */
+       ret = snd_soc_register_dais(dev, dai_drv, num_dai);
+       if (ret < 0)
+                       goto error;
+
        mutex_lock(&client_mutex);
        list_add(&codec->list, &codec_list);
        snd_soc_instantiate_cards();
        mutex_unlock(&client_mutex);
 
        pr_debug("Registered codec '%s'\n", codec->name);
-
        return 0;
+
+error:
+       for (i--; i >= 0; i--)
+               snd_soc_unregister_dai(dev);
+
+       if (codec->reg_cache)
+               kfree(codec->reg_cache);
+       kfree(codec->name);
+       kfree(codec);
+       return ret;
 }
 EXPORT_SYMBOL_GPL(snd_soc_register_codec);
 
@@ -2854,13 +3152,30 @@ EXPORT_SYMBOL_GPL(snd_soc_register_codec);
  *
  * @codec: codec to unregister
  */
-void snd_soc_unregister_codec(struct snd_soc_codec *codec)
+void snd_soc_unregister_codec(struct device *dev)
 {
+       struct snd_soc_codec *codec;
+       int i;
+
+       list_for_each_entry(codec, &codec_list, list) {
+               if (dev == codec->dev)
+                       goto found;
+       }
+       return;
+
+found:
+       for (i = 0; i < codec->num_dai; i++)
+               snd_soc_unregister_dai(dev);
+
        mutex_lock(&client_mutex);
        list_del(&codec->list);
        mutex_unlock(&client_mutex);
 
        pr_debug("Unregistered codec '%s'\n", codec->name);
+
+       if (codec->reg_cache)
+               kfree(codec->reg_cache);
+       kfree(codec);
 }
 EXPORT_SYMBOL_GPL(snd_soc_unregister_codec);
 
index 03cb7c05ebec2f26800fd7dc35e4798a811fcea1..035cab85cb66af64c38ae89103fe8cc240cc9d7a 100644 (file)
@@ -112,43 +112,41 @@ static inline struct snd_soc_dapm_widget *dapm_cnew_widget(
 
 /**
  * snd_soc_dapm_set_bias_level - set the bias level for the system
- * @socdev: audio device
+ * @card: audio device
  * @level: level to configure
  *
  * Configure the bias (power) levels for the SoC audio device.
  *
  * Returns 0 for success else error.
  */
-static int snd_soc_dapm_set_bias_level(struct snd_soc_device *socdev,
-                                      enum snd_soc_bias_level level)
+static int snd_soc_dapm_set_bias_level(struct snd_soc_card *card,
+               struct snd_soc_codec *codec, enum snd_soc_bias_level level)
 {
-       struct snd_soc_card *card = socdev->card;
-       struct snd_soc_codec *codec = socdev->card->codec;
        int ret = 0;
 
        switch (level) {
        case SND_SOC_BIAS_ON:
-               dev_dbg(socdev->dev, "Setting full bias\n");
+               dev_dbg(codec->dev, "Setting full bias\n");
                break;
        case SND_SOC_BIAS_PREPARE:
-               dev_dbg(socdev->dev, "Setting bias prepare\n");
+               dev_dbg(codec->dev, "Setting bias prepare\n");
                break;
        case SND_SOC_BIAS_STANDBY:
-               dev_dbg(socdev->dev, "Setting standby bias\n");
+               dev_dbg(codec->dev, "Setting standby bias\n");
                break;
        case SND_SOC_BIAS_OFF:
-               dev_dbg(socdev->dev, "Setting bias off\n");
+               dev_dbg(codec->dev, "Setting bias off\n");
                break;
        default:
-               dev_err(socdev->dev, "Setting invalid bias %d\n", level);
+               dev_err(codec->dev, "Setting invalid bias %d\n", level);
                return -EINVAL;
        }
 
-       if (card->set_bias_level)
+       if (card && card->set_bias_level)
                ret = card->set_bias_level(card, level);
        if (ret == 0) {
-               if (codec->set_bias_level)
-                       ret = codec->set_bias_level(codec, level);
+               if (codec->driver->set_bias_level)
+                       ret = codec->driver->set_bias_level(codec, level);
                else
                        codec->bias_level = level;
        }
@@ -370,7 +368,7 @@ static int dapm_new_mixer(struct snd_soc_codec *codec,
 
                        path->kcontrol = snd_soc_cnew(&w->kcontrols[i], w,
                                path->long_name);
-                       ret = snd_ctl_add(codec->card, path->kcontrol);
+                       ret = snd_ctl_add(codec->card->snd_card, path->kcontrol);
                        if (ret < 0) {
                                printk(KERN_ERR "asoc: failed to add dapm kcontrol %s: %d\n",
                                       path->long_name,
@@ -398,7 +396,7 @@ static int dapm_new_mux(struct snd_soc_codec *codec,
        }
 
        kcontrol = snd_soc_cnew(&w->kcontrols[0], w, w->name);
-       ret = snd_ctl_add(codec->card, kcontrol);
+       ret = snd_ctl_add(codec->card->snd_card, kcontrol);
        if (ret < 0)
                goto err;
 
@@ -437,9 +435,9 @@ static inline void dapm_clear_walk(struct snd_soc_codec *codec)
  */
 static int snd_soc_dapm_suspend_check(struct snd_soc_dapm_widget *widget)
 {
-       struct snd_soc_codec *codec = widget->codec;
+       int level = snd_power_get_state(widget->codec->card->snd_card);
 
-       switch (snd_power_get_state(codec->card)) {
+       switch (level) {
        case SNDRV_CTL_POWER_D3hot:
        case SNDRV_CTL_POWER_D3cold:
                if (widget->ignore_suspend)
@@ -893,7 +891,7 @@ static void dapm_seq_run(struct snd_soc_codec *codec, struct list_head *list,
  */
 static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
 {
-       struct snd_soc_device *socdev = codec->socdev;
+       struct snd_soc_card *card = codec->card;
        struct snd_soc_dapm_widget *w;
        LIST_HEAD(up_list);
        LIST_HEAD(down_list);
@@ -966,7 +964,7 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
        }
 
        if (sys_power && codec->bias_level == SND_SOC_BIAS_OFF) {
-               ret = snd_soc_dapm_set_bias_level(socdev,
+               ret = snd_soc_dapm_set_bias_level(card, codec,
                                                  SND_SOC_BIAS_STANDBY);
                if (ret != 0)
                        pr_err("Failed to turn on bias: %d\n", ret);
@@ -975,8 +973,7 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
        /* If we're changing to all on or all off then prepare */
        if ((sys_power && codec->bias_level == SND_SOC_BIAS_STANDBY) ||
            (!sys_power && codec->bias_level == SND_SOC_BIAS_ON)) {
-               ret = snd_soc_dapm_set_bias_level(socdev,
-                                                 SND_SOC_BIAS_PREPARE);
+               ret = snd_soc_dapm_set_bias_level(card, codec, SND_SOC_BIAS_PREPARE);
                if (ret != 0)
                        pr_err("Failed to prepare bias: %d\n", ret);
        }
@@ -989,8 +986,7 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
 
        /* If we just powered the last thing off drop to standby bias */
        if (codec->bias_level == SND_SOC_BIAS_PREPARE && !sys_power) {
-               ret = snd_soc_dapm_set_bias_level(socdev,
-                                                 SND_SOC_BIAS_STANDBY);
+               ret = snd_soc_dapm_set_bias_level(card, codec, SND_SOC_BIAS_STANDBY);
                if (ret != 0)
                        pr_err("Failed to apply standby bias: %d\n", ret);
        }
@@ -998,15 +994,14 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
        /* If we're in standby and can support bias off then do that */
        if (codec->bias_level == SND_SOC_BIAS_STANDBY &&
            codec->idle_bias_off) {
-               ret = snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_OFF);
+               ret = snd_soc_dapm_set_bias_level(card, codec, SND_SOC_BIAS_OFF);
                if (ret != 0)
                        pr_err("Failed to turn off bias: %d\n", ret);
        }
 
        /* If we just powered up then move to active bias */
        if (codec->bias_level == SND_SOC_BIAS_PREPARE && sys_power) {
-               ret = snd_soc_dapm_set_bias_level(socdev,
-                                                 SND_SOC_BIAS_ON);
+               ret = snd_soc_dapm_set_bias_level(card, codec, SND_SOC_BIAS_ON);
                if (ret != 0)
                        pr_err("Failed to apply active bias: %d\n", ret);
        }
@@ -1188,8 +1183,9 @@ static int dapm_mixer_update_power(struct snd_soc_dapm_widget *widget,
 static ssize_t dapm_widget_show(struct device *dev,
        struct device_attribute *attr, char *buf)
 {
-       struct snd_soc_device *devdata = dev_get_drvdata(dev);
-       struct snd_soc_codec *codec = devdata->card->codec;
+       struct snd_soc_pcm_runtime *rtd =
+                       container_of(dev, struct snd_soc_pcm_runtime, dev);
+       struct snd_soc_codec *codec =rtd->codec;
        struct snd_soc_dapm_widget *w;
        int count = 0;
        char *state = "not set";
@@ -1998,9 +1994,10 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_new_controls);
  *
  * Returns 0 for success else error.
  */
-int snd_soc_dapm_stream_event(struct snd_soc_codec *codec,
-       char *stream, int event)
+int snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd,
+       const char *stream, int event)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        struct snd_soc_dapm_widget *w;
 
        if (stream == NULL)
@@ -2168,25 +2165,19 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend);
 
 /**
  * snd_soc_dapm_free - free dapm resources
- * @socdev: SoC device
+ * @card: SoC device
  *
  * Free all dapm widgets and resources.
  */
-void snd_soc_dapm_free(struct snd_soc_device *socdev)
+void snd_soc_dapm_free(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
-
-       snd_soc_dapm_sys_remove(socdev->dev);
+       snd_soc_dapm_sys_remove(codec->dev);
        dapm_free_widgets(codec);
 }
 EXPORT_SYMBOL_GPL(snd_soc_dapm_free);
 
-/*
- * snd_soc_dapm_shutdown - callback for system shutdown
- */
-void snd_soc_dapm_shutdown(struct snd_soc_device *socdev)
+static void soc_dapm_shutdown_codec(struct snd_soc_codec *codec)
 {
-       struct snd_soc_codec *codec = socdev->card->codec;
        struct snd_soc_dapm_widget *w;
        LIST_HEAD(down_list);
        int powerdown = 0;
@@ -2203,12 +2194,23 @@ void snd_soc_dapm_shutdown(struct snd_soc_device *socdev)
         * standby.
         */
        if (powerdown) {
-               snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_PREPARE);
+               snd_soc_dapm_set_bias_level(NULL, codec, SND_SOC_BIAS_PREPARE);
                dapm_seq_run(codec, &down_list, 0, dapm_down_seq);
-               snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_STANDBY);
+               snd_soc_dapm_set_bias_level(NULL, codec, SND_SOC_BIAS_STANDBY);
        }
+}
+
+/*
+ * snd_soc_dapm_shutdown - callback for system shutdown
+ */
+void snd_soc_dapm_shutdown(struct snd_soc_card *card)
+{
+       struct snd_soc_codec *codec;
+
+       list_for_each_entry(codec, &card->codec_dev_list, list)
+               soc_dapm_shutdown_codec(codec);
 
-       snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_OFF);
+       snd_soc_dapm_set_bias_level(card, codec, SND_SOC_BIAS_OFF);
 }
 
 /* Module information */
index 29159e1781d0edbc681a8120865323171a7a4906..8862770aa221429514449515a7a2a0d2bea1c38e 100644 (file)
  * Returns zero if successful, or a negative error code on failure.
  * On success jack will be initialised.
  */
-int snd_soc_jack_new(struct snd_soc_card *card, const char *id, int type,
+int snd_soc_jack_new(struct snd_soc_codec *codec, const char *id, int type,
                     struct snd_soc_jack *jack)
 {
-       jack->card = card;
+       jack->codec = codec;
        INIT_LIST_HEAD(&jack->pins);
        BLOCKING_INIT_NOTIFIER_HEAD(&jack->notifier);
 
-       return snd_jack_new(card->codec->card, id, type, &jack->jack);
+       return snd_jack_new(codec->card->snd_card, id, type, &jack->jack);
 }
 EXPORT_SYMBOL_GPL(snd_soc_jack_new);
 
@@ -67,7 +67,7 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask)
        if (!jack)
                return;
 
-       codec = jack->card->codec;
+       codec = jack->codec;
 
        mutex_lock(&codec->mutex);
 
@@ -268,7 +268,7 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
                ret = request_irq(gpio_to_irq(gpios[i].gpio),
                                gpio_handler,
                                IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
-                               jack->card->dev->driver->name,
+                               jack->codec->dev->driver->name,
                                &gpios[i]);
                if (ret)
                        goto err;
index 0ec20b68e8cbbe6089c7c8b453fdf9d4d5a41507..743d07b82c062033f5287a85537b175ef72976d5 100644 (file)
 
 static DECLARE_WAIT_QUEUE_HEAD(ac97_waitq);
 
-/* REVISIT: How to find txx9aclc_soc_device from snd_ac97? */
-static struct txx9aclc_soc_device *txx9aclc_soc_dev;
+/* REVISIT: How to find txx9aclc_drvdata from snd_ac97? */
+static struct txx9aclc_plat_drvdata *txx9aclc_drvdata;
 
-static int txx9aclc_regready(struct txx9aclc_soc_device *dev)
+static int txx9aclc_regready(struct txx9aclc_plat_drvdata *drvdata)
 {
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
-
        return __raw_readl(drvdata->base + ACINTSTS) & ACINT_REGACCRDY;
 }
 
@@ -50,8 +48,7 @@ static int txx9aclc_regready(struct txx9aclc_soc_device *dev)
 static unsigned short txx9aclc_ac97_read(struct snd_ac97 *ac97,
                                         unsigned short reg)
 {
-       struct txx9aclc_soc_device *dev = txx9aclc_soc_dev;
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
+       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_drvdata;
        void __iomem *base = drvdata->base;
        u32 dat;
 
@@ -61,15 +58,15 @@ static unsigned short txx9aclc_ac97_read(struct snd_ac97 *ac97,
        dat = (reg << ACREGACC_REG_SHIFT) | ACREGACC_READ;
        __raw_writel(dat, base + ACREGACC);
        __raw_writel(ACINT_REGACCRDY, base + ACINTEN);
-       if (!wait_event_timeout(ac97_waitq, txx9aclc_regready(dev), HZ)) {
+       if (!wait_event_timeout(ac97_waitq, txx9aclc_regready(txx9aclc_drvdata), HZ)) {
                __raw_writel(ACINT_REGACCRDY, base + ACINTDIS);
-               dev_err(dev->soc_dev.dev, "ac97 read timeout (reg %#x)\n", reg);
+               printk(KERN_ERR "ac97 read timeout (reg %#x)\n", reg);
                dat = 0xffff;
                goto done;
        }
        dat = __raw_readl(base + ACREGACC);
        if (((dat >> ACREGACC_REG_SHIFT) & 0xff) != reg) {
-               dev_err(dev->soc_dev.dev, "reg mismatch %x with %x\n",
+               printk(KERN_ERR "reg mismatch %x with %x\n",
                        dat, reg);
                dat = 0xffff;
                goto done;
@@ -84,16 +81,15 @@ done:
 static void txx9aclc_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
                                unsigned short val)
 {
-       struct txx9aclc_soc_device *dev = txx9aclc_soc_dev;
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
+       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_drvdata;
        void __iomem *base = drvdata->base;
 
        __raw_writel(((reg | (ac97->num << 7)) << ACREGACC_REG_SHIFT) |
                     (val << ACREGACC_DAT_SHIFT),
                     base + ACREGACC);
        __raw_writel(ACINT_REGACCRDY, base + ACINTEN);
-       if (!wait_event_timeout(ac97_waitq, txx9aclc_regready(dev), HZ)) {
-               dev_err(dev->soc_dev.dev,
+       if (!wait_event_timeout(ac97_waitq, txx9aclc_regready(txx9aclc_drvdata), HZ)) {
+               printk(KERN_ERR
                        "ac97 write timeout (reg %#x)\n", reg);
        }
        __raw_writel(ACINT_REGACCRDY, base + ACINTDIS);
@@ -101,8 +97,7 @@ static void txx9aclc_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
 
 static void txx9aclc_ac97_cold_reset(struct snd_ac97 *ac97)
 {
-       struct txx9aclc_soc_device *dev = txx9aclc_soc_dev;
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
+       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_drvdata;
        void __iomem *base = drvdata->base;
        u32 ready = ACINT_CODECRDY(ac97->num) | ACINT_REGACCRDY;
 
@@ -141,31 +136,23 @@ static irqreturn_t txx9aclc_ac97_irq(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-static int txx9aclc_ac97_probe(struct platform_device *pdev,
-                              struct snd_soc_dai *dai)
+static int txx9aclc_ac97_probe(struct snd_soc_dai *dai)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct txx9aclc_soc_device *dev =
-               container_of(socdev, struct txx9aclc_soc_device, soc_dev);
-
-       dev->aclc_pdev = to_platform_device(dai->dev);
-       txx9aclc_soc_dev = dev;
+       txx9aclc_drvdata = snd_soc_dai_get_drvdata(dai);
        return 0;
 }
 
-static void txx9aclc_ac97_remove(struct platform_device *pdev,
-                                struct snd_soc_dai *dai)
+static int txx9aclc_ac97_remove(struct snd_soc_dai *dai)
 {
-       struct platform_device *aclc_pdev = to_platform_device(dai->dev);
-       struct txx9aclc_plat_drvdata *drvdata = platform_get_drvdata(aclc_pdev);
+       struct txx9aclc_plat_drvdata *drvdata = snd_soc_dai_get_drvdata(dai);
 
        /* disable AC-link */
        __raw_writel(ACCTL_ENLINK, drvdata->base + ACCTLDIS);
-       txx9aclc_soc_dev = NULL;
+       txx9aclc_drvdata = NULL;
+       return 0;
 }
 
-struct snd_soc_dai txx9aclc_ac97_dai = {
-       .name                   = "txx9aclc_ac97",
+static struct snd_soc_dai_driver txx9aclc_ac97_dai = {
        .ac97_control           = 1,
        .probe                  = txx9aclc_ac97_probe,
        .remove                 = txx9aclc_ac97_remove,
@@ -182,7 +169,6 @@ struct snd_soc_dai txx9aclc_ac97_dai = {
                .channels_max   = 2,
        },
 };
-EXPORT_SYMBOL_GPL(txx9aclc_ac97_dai);
 
 static int __devinit txx9aclc_ac97_dev_probe(struct platform_device *pdev)
 {
@@ -219,13 +205,12 @@ static int __devinit txx9aclc_ac97_dev_probe(struct platform_device *pdev)
        if (err < 0)
                return err;
 
-       txx9aclc_ac97_dai.dev = &pdev->dev;
-       return snd_soc_register_dai(&txx9aclc_ac97_dai);
+       return snd_soc_register_dai(&pdev->dev, &txx9aclc_ac97_dai);
 }
 
 static int __devexit txx9aclc_ac97_dev_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&txx9aclc_ac97_dai);
+       snd_soc_unregister_dai(&pdev->dev);
        return 0;
 }
 
index 95b17f731aec3a298e2f8c38638201e8eeb63ac2..6770e7166be4b77ae3427cbd3aba16b3b4694489 100644 (file)
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/soc.h>
-#include "../codecs/ac97.h"
 #include "txx9aclc.h"
 
 static struct snd_soc_dai_link txx9aclc_generic_dai = {
        .name = "AC97",
        .stream_name = "AC97 HiFi",
-       .cpu_dai = &txx9aclc_ac97_dai,
-       .codec_dai = &ac97_dai,
+       .cpu_dai_name = "txx9aclc-ac97",
+       .codec_dai_name = "ac97-hifi",
+       .platform_name  = "txx9aclc-pcm-audio",
+       .codec_name     = "ac97-codec",
 };
 
 static struct snd_soc_card txx9aclc_generic_card = {
        .name           = "Generic TXx9 ACLC Audio",
-       .platform       = &txx9aclc_soc_platform,
        .dai_link       = &txx9aclc_generic_dai,
        .num_links      = 1,
 };
 
-static struct txx9aclc_soc_device txx9aclc_generic_soc_device = {
-       .soc_dev = {
-               .card           = &txx9aclc_generic_card,
-               .codec_dev      = &soc_codec_dev_ac97,
-       },
-};
+static struct platform_device *soc_pdev;
 
 static int __init txx9aclc_generic_probe(struct platform_device *pdev)
 {
-       struct txx9aclc_soc_device *dev = &txx9aclc_generic_soc_device;
-       struct platform_device *soc_pdev;
        int ret;
 
        soc_pdev = platform_device_alloc("soc-audio", -1);
        if (!soc_pdev)
                return -ENOMEM;
-       platform_set_drvdata(soc_pdev, &dev->soc_dev);
-       dev->soc_dev.dev = &soc_pdev->dev;
+       platform_set_drvdata(soc_pdev, &txx9aclc_generic_card);
        ret = platform_device_add(soc_pdev);
        if (ret) {
                platform_device_put(soc_pdev);
                return ret;
        }
-       platform_set_drvdata(pdev, soc_pdev);
+
        return 0;
 }
 
 static int __exit txx9aclc_generic_remove(struct platform_device *pdev)
 {
-       struct platform_device *soc_pdev = platform_get_drvdata(pdev);
-
        platform_device_unregister(soc_pdev);
        return 0;
 }
index 0e3452303ea6903d4045d325be31c059d6257b60..f4aa4e03c88884e0b1768314c6d2273b221fb976 100644 (file)
 #include <sound/soc.h>
 #include "txx9aclc.h"
 
+static struct txx9aclc_soc_device {
+       struct txx9aclc_dmadata dmadata[2];
+} txx9aclc_soc_device;
+
+/* REVISIT: How to find txx9aclc_drvdata from snd_ac97? */
+static struct txx9aclc_plat_drvdata *txx9aclc_drvdata;
+
+static int txx9aclc_dma_init(struct txx9aclc_soc_device *dev,
+                            struct txx9aclc_dmadata *dmadata);
+
 static const struct snd_pcm_hardware txx9aclc_pcm_hardware = {
        /*
         * REVISIT: SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_MMAP_VALID
@@ -46,7 +56,6 @@ static int txx9aclc_pcm_hw_params(struct snd_pcm_substream *substream,
                                  struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream);
-       struct snd_soc_device *socdev = rtd->socdev;
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct txx9aclc_dmadata *dmadata = runtime->private_data;
        int ret;
@@ -55,13 +64,13 @@ static int txx9aclc_pcm_hw_params(struct snd_pcm_substream *substream,
        if (ret < 0)
                return ret;
 
-       dev_dbg(socdev->dev,
+       dev_dbg(rtd->platform->dev,
                "runtime->dma_area = %#lx dma_addr = %#lx dma_bytes = %zd "
                "runtime->min_align %ld\n",
                (unsigned long)runtime->dma_area,
                (unsigned long)runtime->dma_addr, runtime->dma_bytes,
                runtime->min_align);
-       dev_dbg(socdev->dev,
+       dev_dbg(rtd->platform->dev,
                "periods %d period_bytes %d stream %d\n",
                params_periods(params), params_period_bytes(params),
                substream->stream);
@@ -152,11 +161,7 @@ static void txx9aclc_dma_tasklet(unsigned long data)
 
        spin_lock_irqsave(&dmadata->dma_lock, flags);
        if (dmadata->frag_count < 0) {
-               struct txx9aclc_soc_device *dev =
-                       container_of(dmadata, struct txx9aclc_soc_device,
-                                    dmadata[substream->stream]);
-               struct txx9aclc_plat_drvdata *drvdata =
-                       txx9aclc_get_plat_drvdata(dev);
+               struct txx9aclc_plat_drvdata *drvdata = txx9aclc_drvdata;
                void __iomem *base = drvdata->base;
 
                spin_unlock_irqrestore(&dmadata->dma_lock, flags);
@@ -202,10 +207,7 @@ static void txx9aclc_dma_tasklet(unsigned long data)
 static int txx9aclc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 {
        struct txx9aclc_dmadata *dmadata = substream->runtime->private_data;
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct txx9aclc_soc_device *dev =
-               container_of(rtd->socdev, struct txx9aclc_soc_device, soc_dev);
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
+       struct txx9aclc_plat_drvdata *drvdata =txx9aclc_drvdata;
        void __iomem *base = drvdata->base;
        unsigned long flags;
        int ret = 0;
@@ -244,9 +246,7 @@ txx9aclc_pcm_pointer(struct snd_pcm_substream *substream)
 
 static int txx9aclc_pcm_open(struct snd_pcm_substream *substream)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct txx9aclc_soc_device *dev =
-               container_of(rtd->socdev, struct txx9aclc_soc_device, soc_dev);
+       struct txx9aclc_soc_device *dev = &txx9aclc_soc_device;
        struct txx9aclc_dmadata *dmadata = &dev->dmadata[substream->stream];
        int ret;
 
@@ -291,8 +291,38 @@ static void txx9aclc_pcm_free_dma_buffers(struct snd_pcm *pcm)
 static int txx9aclc_pcm_new(struct snd_card *card, struct snd_soc_dai *dai,
                            struct snd_pcm *pcm)
 {
+       struct platform_device *pdev = to_platform_device(dai->platform->dev);
+       struct txx9aclc_soc_device *dev;
+       struct resource *r;
+       int i;
+       int ret;
+
+       /* at this point onwards the AC97 component has probed and this will be valid */
+       dev = snd_soc_dai_get_drvdata(dai);
+
+       dev->dmadata[0].stream = SNDRV_PCM_STREAM_PLAYBACK;
+       dev->dmadata[1].stream = SNDRV_PCM_STREAM_CAPTURE;
+       for (i = 0; i < 2; i++) {
+               r = platform_get_resource(pdev, IORESOURCE_DMA, i);
+               if (!r) {
+                       ret = -EBUSY;
+                       goto exit;
+               }
+               dev->dmadata[i].dma_res = r;
+               ret = txx9aclc_dma_init(dev, &dev->dmadata[i]);
+               if (ret)
+                       goto exit;
+       }
        return snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
                card->dev, 64 * 1024, 4 * 1024 * 1024);
+
+exit:
+       for (i = 0; i < 2; i++) {
+               if (dev->dmadata[i].dma_chan)
+                       dma_release_channel(dev->dmadata[i].dma_chan);
+               dev->dmadata[i].dma_chan = NULL;
+       }
+       return ret;
 }
 
 static bool filter(struct dma_chan *chan, void *param)
@@ -314,7 +344,7 @@ static bool filter(struct dma_chan *chan, void *param)
 static int txx9aclc_dma_init(struct txx9aclc_soc_device *dev,
                             struct txx9aclc_dmadata *dmadata)
 {
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
+       struct txx9aclc_plat_drvdata *drvdata =txx9aclc_drvdata;
        struct txx9dmac_slave *ds = &dmadata->dma_slave;
        dma_cap_mask_t mask;
 
@@ -334,7 +364,7 @@ static int txx9aclc_dma_init(struct txx9aclc_soc_device *dev,
        dma_cap_set(DMA_SLAVE, mask);
        dmadata->dma_chan = dma_request_channel(mask, filter, dmadata);
        if (!dmadata->dma_chan) {
-               dev_err(dev->soc_dev.dev,
+               printk(KERN_ERR
                        "DMA channel for %s is not available\n",
                        dmadata->stream == SNDRV_PCM_STREAM_PLAYBACK ?
                        "playback" : "capture");
@@ -345,45 +375,16 @@ static int txx9aclc_dma_init(struct txx9aclc_soc_device *dev,
        return 0;
 }
 
-static int txx9aclc_pcm_probe(struct platform_device *pdev)
+static int txx9aclc_pcm_probe(struct snd_soc_platform *platform)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct txx9aclc_soc_device *dev =
-               container_of(socdev, struct txx9aclc_soc_device, soc_dev);
-       struct resource *r;
-       int i;
-       int ret;
-
-       dev->dmadata[0].stream = SNDRV_PCM_STREAM_PLAYBACK;
-       dev->dmadata[1].stream = SNDRV_PCM_STREAM_CAPTURE;
-       for (i = 0; i < 2; i++) {
-               r = platform_get_resource(dev->aclc_pdev, IORESOURCE_DMA, i);
-               if (!r) {
-                       ret = -EBUSY;
-                       goto exit;
-               }
-               dev->dmadata[i].dma_res = r;
-               ret = txx9aclc_dma_init(dev, &dev->dmadata[i]);
-               if (ret)
-                       goto exit;
-       }
+       snd_soc_platform_set_drvdata(platform, &txx9aclc_soc_device);
        return 0;
-
-exit:
-       for (i = 0; i < 2; i++) {
-               if (dev->dmadata[i].dma_chan)
-                       dma_release_channel(dev->dmadata[i].dma_chan);
-               dev->dmadata[i].dma_chan = NULL;
-       }
-       return ret;
 }
 
-static int txx9aclc_pcm_remove(struct platform_device *pdev)
+static int txx9aclc_pcm_remove(struct snd_soc_platform *platform)
 {
-       struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-       struct txx9aclc_soc_device *dev =
-               container_of(socdev, struct txx9aclc_soc_device, soc_dev);
-       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_get_plat_drvdata(dev);
+       struct txx9aclc_soc_device *dev = snd_soc_platform_get_drvdata(platform);
+       struct txx9aclc_plat_drvdata *drvdata = txx9aclc_drvdata;
        void __iomem *base = drvdata->base;
        int i;
 
@@ -406,28 +407,46 @@ static int txx9aclc_pcm_remove(struct platform_device *pdev)
        return 0;
 }
 
-struct snd_soc_platform txx9aclc_soc_platform = {
-       .name           = "txx9aclc-audio",
+static struct snd_soc_platform_driver txx9aclc_soc_platform = {
        .probe          = txx9aclc_pcm_probe,
        .remove         = txx9aclc_pcm_remove,
-       .pcm_ops        = &txx9aclc_pcm_ops,
+       .ops            = &txx9aclc_pcm_ops,
        .pcm_new        = txx9aclc_pcm_new,
        .pcm_free       = txx9aclc_pcm_free_dma_buffers,
 };
-EXPORT_SYMBOL_GPL(txx9aclc_soc_platform);
 
-static int __init txx9aclc_soc_platform_init(void)
+static int __devinit txx9aclc_soc_platform_probe(struct platform_device *pdev)
 {
-       return snd_soc_register_platform(&txx9aclc_soc_platform);
+       return snd_soc_register_platform(&pdev->dev, &txx9aclc_soc_platform);
 }
 
-static void __exit txx9aclc_soc_platform_exit(void)
+static int __devexit txx9aclc_soc_platform_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_platform(&txx9aclc_soc_platform);
+       snd_soc_unregister_platform(&pdev->dev);
+       return 0;
 }
 
-module_init(txx9aclc_soc_platform_init);
-module_exit(txx9aclc_soc_platform_exit);
+static struct platform_driver txx9aclc_pcm_driver = {
+       .driver = {
+                       .name = "txx9aclc-pcm-audio",
+                       .owner = THIS_MODULE,
+       },
+
+       .probe = txx9aclc_soc_platform_probe,
+       .remove = __devexit_p(txx9aclc_soc_platform_remove),
+};
+
+static int __init snd_txx9aclc_pcm_init(void)
+{
+       return platform_driver_register(&txx9aclc_pcm_driver);
+}
+module_init(snd_txx9aclc_pcm_init);
+
+static void __exit snd_txx9aclc_pcm_exit(void)
+{
+       platform_driver_unregister(&txx9aclc_pcm_driver);
+}
+module_exit(snd_txx9aclc_pcm_exit);
 
 MODULE_AUTHOR("Atsushi Nemoto <anemo@mba.ocn.ne.jp>");
 MODULE_DESCRIPTION("TXx9 ACLC Audio DMA driver");
index 6769aab41b331d60f77b412369cb68823aa3b8c6..9c2de84fec3bbae4bd529f977b4aeab648f38129 100644 (file)
@@ -65,19 +65,10 @@ struct txx9aclc_plat_drvdata {
        u64 physbase;
 };
 
-struct txx9aclc_soc_device {
-       struct snd_soc_device soc_dev;
-       struct platform_device *aclc_pdev;      /* for ioresources, drvdata */
-       struct txx9aclc_dmadata dmadata[2];
-};
-
 static inline struct txx9aclc_plat_drvdata *txx9aclc_get_plat_drvdata(
-       struct txx9aclc_soc_device *sdev)
+       struct snd_soc_dai *dai)
 {
-       return platform_get_drvdata(sdev->aclc_pdev);
+       return dev_get_drvdata(dai->dev);
 }
 
-extern struct snd_soc_platform txx9aclc_soc_platform;
-extern struct snd_soc_dai txx9aclc_ac97_dai;
-
 #endif /* __TXX9ACLC_H */