summaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/atmel/atmel-pcm.c59
-rw-r--r--sound/soc/atmel/atmel-pcm.h3
-rw-r--r--sound/soc/atmel/atmel_ssc_dai.c148
-rw-r--r--sound/soc/atmel/atmel_ssc_dai.h3
-rw-r--r--sound/soc/atmel/playpaq_wm8510.c65
-rw-r--r--sound/soc/atmel/sam9g20_wm8731.c59
-rw-r--r--sound/soc/atmel/snd-soc-afeb9260.c35
-rw-r--r--sound/soc/au1x/db1200.c37
-rw-r--r--sound/soc/au1x/dbdma2.c19
-rw-r--r--sound/soc/au1x/psc-ac97.c20
-rw-r--r--sound/soc/au1x/psc-i2s.c21
-rw-r--r--sound/soc/au1x/psc.h3
-rw-r--r--sound/soc/blackfin/bf5xx-ac97-pcm.c43
-rw-r--r--sound/soc/blackfin/bf5xx-ac97-pcm.h3
-rw-r--r--sound/soc/blackfin/bf5xx-ac97.c41
-rw-r--r--sound/soc/blackfin/bf5xx-ac97.h2
-rw-r--r--sound/soc/blackfin/bf5xx-ad1836.c23
-rw-r--r--sound/soc/blackfin/bf5xx-ad193x.c23
-rw-r--r--sound/soc/blackfin/bf5xx-ad1980.c19
-rw-r--r--sound/soc/blackfin/bf5xx-ad73311.c22
-rw-r--r--sound/soc/blackfin/bf5xx-i2s-pcm.c44
-rw-r--r--sound/soc/blackfin/bf5xx-i2s-pcm.h3
-rw-r--r--sound/soc/blackfin/bf5xx-i2s.c45
-rw-r--r--sound/soc/blackfin/bf5xx-i2s.h14
-rw-r--r--sound/soc/blackfin/bf5xx-ssm2602.c38
-rw-r--r--sound/soc/blackfin/bf5xx-tdm-pcm.c43
-rw-r--r--sound/soc/blackfin/bf5xx-tdm-pcm.h3
-rw-r--r--sound/soc/blackfin/bf5xx-tdm.c15
-rw-r--r--sound/soc/blackfin/bf5xx-tdm.h2
-rw-r--r--sound/soc/codecs/88pm860x-codec.c1486
-rw-r--r--sound/soc/codecs/88pm860x-codec.h97
-rw-r--r--sound/soc/codecs/Kconfig12
-rw-r--r--sound/soc/codecs/Makefile6
-rw-r--r--sound/soc/codecs/ac97.c124
-rw-r--r--sound/soc/codecs/ac97.h19
-rw-r--r--sound/soc/codecs/ad1836.c191
-rw-r--r--sound/soc/codecs/ad1836.h2
-rw-r--r--sound/soc/codecs/ad193x.c217
-rw-r--r--sound/soc/codecs/ad193x.h3
-rw-r--r--sound/soc/codecs/ad1980.c107
-rw-r--r--sound/soc/codecs/ad1980.h3
-rw-r--r--sound/soc/codecs/ad73311.c66
-rw-r--r--sound/soc/codecs/ad73311.h2
-rw-r--r--sound/soc/codecs/ads117x.c72
-rw-r--r--sound/soc/codecs/ads117x.h4
-rw-r--r--sound/soc/codecs/ak4104.c149
-rw-r--r--sound/soc/codecs/ak4104.h7
-rw-r--r--sound/soc/codecs/ak4535.c236
-rw-r--r--sound/soc/codecs/ak4535.h8
-rw-r--r--sound/soc/codecs/ak4642.c175
-rw-r--r--sound/soc/codecs/ak4642.h20
-rw-r--r--sound/soc/codecs/ak4671.c141
-rw-r--r--sound/soc/codecs/ak4671.h3
-rw-r--r--sound/soc/codecs/cq93vc.c132
-rw-r--r--sound/soc/codecs/cq93vc.h29
-rw-r--r--sound/soc/codecs/cs4270.c393
-rw-r--r--sound/soc/codecs/cs4270.h28
-rw-r--r--sound/soc/codecs/cs42l51.c293
-rw-r--r--sound/soc/codecs/cs42l51.h2
-rw-r--r--sound/soc/codecs/cx20442.c173
-rw-r--r--sound/soc/codecs/cx20442.h2
-rw-r--r--sound/soc/codecs/da7210.c157
-rw-r--r--sound/soc/codecs/da7210.h24
-rw-r--r--sound/soc/codecs/jz4740.c116
-rw-r--r--sound/soc/codecs/jz4740.h20
-rw-r--r--sound/soc/codecs/pcm3008.c92
-rw-r--r--sound/soc/codecs/pcm3008.h3
-rw-r--r--sound/soc/codecs/spdif_transciever.c102
-rw-r--r--sound/soc/codecs/spdif_transciever.h18
-rw-r--r--sound/soc/codecs/ssm2602.c219
-rw-r--r--sound/soc/codecs/ssm2602.h3
-rw-r--r--sound/soc/codecs/stac9766.c118
-rw-r--r--sound/soc/codecs/stac9766.h4
-rw-r--r--sound/soc/codecs/tlv320aic23.c182
-rw-r--r--sound/soc/codecs/tlv320aic23.h3
-rw-r--r--sound/soc/codecs/tlv320aic26.c180
-rw-r--r--sound/soc/codecs/tlv320aic26.h3
-rw-r--r--sound/soc/codecs/tlv320aic3x.c303
-rw-r--r--sound/soc/codecs/tlv320aic3x.h45
-rw-r--r--sound/soc/codecs/tlv320dac33.c249
-rw-r--r--sound/soc/codecs/tlv320dac33.h3
-rw-r--r--sound/soc/codecs/twl4030.c229
-rw-r--r--sound/soc/codecs/twl4030.h55
-rw-r--r--sound/soc/codecs/twl6040.c170
-rw-r--r--sound/soc/codecs/twl6040.h3
-rw-r--r--sound/soc/codecs/uda134x.c154
-rw-r--r--sound/soc/codecs/uda134x.h3
-rw-r--r--sound/soc/codecs/uda1380.c211
-rw-r--r--sound/soc/codecs/uda1380.h3
-rw-r--r--sound/soc/codecs/wl1273.c525
-rw-r--r--sound/soc/codecs/wl1273.h101
-rw-r--r--sound/soc/codecs/wm2000.h3
-rw-r--r--sound/soc/codecs/wm8350.c231
-rw-r--r--sound/soc/codecs/wm8350.h3
-rw-r--r--sound/soc/codecs/wm8400.c181
-rw-r--r--sound/soc/codecs/wm8400.h3
-rw-r--r--sound/soc/codecs/wm8510.c288
-rw-r--r--sound/soc/codecs/wm8510.h3
-rw-r--r--sound/soc/codecs/wm8523.c177
-rw-r--r--sound/soc/codecs/wm8523.h3
-rw-r--r--sound/soc/codecs/wm8580.c325
-rw-r--r--sound/soc/codecs/wm8580.h17
-rw-r--r--sound/soc/codecs/wm8711.c202
-rw-r--r--sound/soc/codecs/wm8711.h3
-rw-r--r--sound/soc/codecs/wm8727.c106
-rw-r--r--sound/soc/codecs/wm8727.h21
-rw-r--r--sound/soc/codecs/wm8728.c290
-rw-r--r--sound/soc/codecs/wm8728.h9
-rw-r--r--sound/soc/codecs/wm8731.c244
-rw-r--r--sound/soc/codecs/wm8731.h7
-rw-r--r--sound/soc/codecs/wm8741.c203
-rw-r--r--sound/soc/codecs/wm8741.h3
-rw-r--r--sound/soc/codecs/wm8750.c265
-rw-r--r--sound/soc/codecs/wm8750.h9
-rw-r--r--sound/soc/codecs/wm8753.c403
-rw-r--r--sound/soc/codecs/wm8753.h3
-rw-r--r--sound/soc/codecs/wm8776.c247
-rw-r--r--sound/soc/codecs/wm8776.h3
-rw-r--r--sound/soc/codecs/wm8900.c247
-rw-r--r--sound/soc/codecs/wm8900.h3
-rw-r--r--sound/soc/codecs/wm8903.c265
-rw-r--r--sound/soc/codecs/wm8903.h3
-rw-r--r--sound/soc/codecs/wm8904.c208
-rw-r--r--sound/soc/codecs/wm8904.h3
-rw-r--r--sound/soc/codecs/wm8940.c199
-rw-r--r--sound/soc/codecs/wm8940.h2
-rw-r--r--sound/soc/codecs/wm8955.c181
-rw-r--r--sound/soc/codecs/wm8955.h3
-rw-r--r--sound/soc/codecs/wm8960.c209
-rw-r--r--sound/soc/codecs/wm8960.h3
-rw-r--r--sound/soc/codecs/wm8961.c237
-rw-r--r--sound/soc/codecs/wm8961.h3
-rw-r--r--sound/soc/codecs/wm8962-tables.c42299
-rw-r--r--sound/soc/codecs/wm8962.c1859
-rw-r--r--sound/soc/codecs/wm8962.h3787
-rw-r--r--sound/soc/codecs/wm8971.c247
-rw-r--r--sound/soc/codecs/wm8971.h8
-rw-r--r--sound/soc/codecs/wm8974.c167
-rw-r--r--sound/soc/codecs/wm8974.h3
-rw-r--r--sound/soc/codecs/wm8978.c190
-rw-r--r--sound/soc/codecs/wm8978.h3
-rw-r--r--sound/soc/codecs/wm8988.c262
-rw-r--r--sound/soc/codecs/wm8988.h3
-rw-r--r--sound/soc/codecs/wm8990.c222
-rw-r--r--sound/soc/codecs/wm8990.h8
-rw-r--r--sound/soc/codecs/wm8993.c304
-rw-r--r--sound/soc/codecs/wm8993.h3
-rw-r--r--sound/soc/codecs/wm8994.c241
-rw-r--r--sound/soc/codecs/wm8994.h3
-rw-r--r--sound/soc/codecs/wm9081.c208
-rw-r--r--sound/soc/codecs/wm9081.h3
-rw-r--r--sound/soc/codecs/wm9090.c183
-rw-r--r--sound/soc/codecs/wm9090.h2
-rw-r--r--sound/soc/codecs/wm9705.c116
-rw-r--r--sound/soc/codecs/wm9705.h3
-rw-r--r--sound/soc/codecs/wm9712.c124
-rw-r--r--sound/soc/codecs/wm9712.h3
-rw-r--r--sound/soc/codecs/wm9713.c131
-rw-r--r--sound/soc/codecs/wm9713.h3
-rw-r--r--sound/soc/davinci/davinci-evm.c109
-rw-r--r--sound/soc/davinci/davinci-i2s.c44
-rw-r--r--sound/soc/davinci/davinci-i2s.h2
-rw-r--r--sound/soc/davinci/davinci-mcasp.c32
-rw-r--r--sound/soc/davinci/davinci-mcasp.h2
-rw-r--r--sound/soc/davinci/davinci-pcm.c45
-rw-r--r--sound/soc/davinci/davinci-pcm.h3
-rw-r--r--sound/soc/davinci/davinci-sffsdr.c27
-rw-r--r--sound/soc/davinci/davinci-vcif.c25
-rw-r--r--sound/soc/davinci/davinci-vcif.h28
-rw-r--r--sound/soc/ep93xx/ep93xx-i2s.c34
-rw-r--r--sound/soc/ep93xx/ep93xx-i2s.h18
-rw-r--r--sound/soc/ep93xx/ep93xx-pcm.c37
-rw-r--r--sound/soc/ep93xx/ep93xx-pcm.h2
-rw-r--r--sound/soc/ep93xx/snappercl15.c24
-rw-r--r--sound/soc/fsl/Kconfig27
-rw-r--r--sound/soc/fsl/Makefile11
-rw-r--r--sound/soc/fsl/efika-audio-fabric.c20
-rw-r--r--sound/soc/fsl/fsl_dma.c458
-rw-r--r--sound/soc/fsl/fsl_dma.h20
-rw-r--r--sound/soc/fsl/fsl_ssi.c298
-rw-r--r--sound/soc/fsl/fsl_ssi.h26
-rw-r--r--sound/soc/fsl/mpc5200_dma.c66
-rw-r--r--sound/soc/fsl/mpc5200_dma.h5
-rw-r--r--sound/soc/fsl/mpc5200_psc_ac97.c34
-rw-r--r--sound/soc/fsl/mpc5200_psc_ac97.h2
-rw-r--r--sound/soc/fsl/mpc5200_psc_i2s.c19
-rw-r--r--sound/soc/fsl/mpc8610_hpcd.c660
-rw-r--r--sound/soc/fsl/p1022_ds.c590
-rw-r--r--sound/soc/fsl/pcm030-audio-fabric.c21
-rw-r--r--sound/soc/fsl/soc-of-simple.c172
-rw-r--r--sound/soc/imx/Kconfig16
-rw-r--r--sound/soc/imx/Makefile10
-rw-r--r--sound/soc/imx/eukrea-tlv320.c16
-rw-r--r--sound/soc/imx/imx-pcm-dma-mx2.c43
-rw-r--r--sound/soc/imx/imx-pcm-fiq.c68
-rw-r--r--sound/soc/imx/imx-ssi.c148
-rw-r--r--sound/soc/imx/imx-ssi.h7
-rw-r--r--sound/soc/imx/phycore-ac97.c19
-rw-r--r--sound/soc/imx/wm1133-ev1.c27
-rw-r--r--sound/soc/jz4740/jz4740-i2s.c104
-rw-r--r--sound/soc/jz4740/jz4740-i2s.h2
-rw-r--r--sound/soc/jz4740/jz4740-pcm.c18
-rw-r--r--sound/soc/jz4740/jz4740-pcm.h2
-rw-r--r--sound/soc/jz4740/qi_lb60.c25
-rw-r--r--sound/soc/kirkwood/kirkwood-dma.c64
-rw-r--r--sound/soc/kirkwood/kirkwood-dma.h17
-rw-r--r--sound/soc/kirkwood/kirkwood-i2s.c52
-rw-r--r--sound/soc/kirkwood/kirkwood-i2s.h17
-rw-r--r--sound/soc/kirkwood/kirkwood-openrd.c21
-rw-r--r--sound/soc/nuc900/nuc900-ac97.c12
-rw-r--r--sound/soc/nuc900/nuc900-audio.c16
-rw-r--r--sound/soc/nuc900/nuc900-audio.h4
-rw-r--r--sound/soc/nuc900/nuc900-pcm.c38
-rw-r--r--sound/soc/omap/am3517evm.c25
-rw-r--r--sound/soc/omap/ams-delta.c98
-rw-r--r--sound/soc/omap/igep0020.c22
-rw-r--r--sound/soc/omap/mcpdm.c19
-rw-r--r--sound/soc/omap/mcpdm.h2
-rw-r--r--sound/soc/omap/n810.c42
-rw-r--r--sound/soc/omap/omap-mcbsp.c123
-rw-r--r--sound/soc/omap/omap-mcbsp.h2
-rw-r--r--sound/soc/omap/omap-mcpdm.c71
-rw-r--r--sound/soc/omap/omap-mcpdm.h29
-rw-r--r--sound/soc/omap/omap-pcm.c47
-rw-r--r--sound/soc/omap/omap-pcm.h2
-rw-r--r--sound/soc/omap/omap2evm.c25
-rw-r--r--sound/soc/omap/omap3beagle.c23
-rw-r--r--sound/soc/omap/omap3evm.c30
-rw-r--r--sound/soc/omap/omap3pandora.c36
-rw-r--r--sound/soc/omap/osk5912.c24
-rw-r--r--sound/soc/omap/overo.c22
-rw-r--r--sound/soc/omap/rx51.c37
-rw-r--r--sound/soc/omap/sdp3430.c56
-rw-r--r--sound/soc/omap/sdp4430.c23
-rw-r--r--sound/soc/omap/zoom2.c64
-rw-r--r--sound/soc/pxa/Kconfig18
-rw-r--r--sound/soc/pxa/Makefile4
-rw-r--r--sound/soc/pxa/corgi.c28
-rw-r--r--sound/soc/pxa/e740_wm9705.c29
-rw-r--r--sound/soc/pxa/e750_wm9705.c26
-rw-r--r--sound/soc/pxa/e800_wm9712.c26
-rw-r--r--sound/soc/pxa/em-x270.c22
-rw-r--r--sound/soc/pxa/imote2.c20
-rw-r--r--sound/soc/pxa/magician.c35
-rw-r--r--sound/soc/pxa/mioa701_wm9713.c33
-rw-r--r--sound/soc/pxa/palm27x.c27
-rw-r--r--sound/soc/pxa/poodle.c29
-rw-r--r--sound/soc/pxa/pxa-ssp.c173
-rw-r--r--sound/soc/pxa/pxa-ssp.h2
-rw-r--r--sound/soc/pxa/pxa2xx-ac97.c46
-rw-r--r--sound/soc/pxa/pxa2xx-ac97.h2
-rw-r--r--sound/soc/pxa/pxa2xx-i2s.c91
-rw-r--r--sound/soc/pxa/pxa2xx-i2s.h2
-rw-r--r--sound/soc/pxa/pxa2xx-pcm.c46
-rw-r--r--sound/soc/pxa/pxa2xx-pcm.h19
-rw-r--r--sound/soc/pxa/raumfeld.c114
-rw-r--r--sound/soc/pxa/saarb.c200
-rw-r--r--sound/soc/pxa/spitz.c26
-rw-r--r--sound/soc/pxa/tavorevb3.c200
-rw-r--r--sound/soc/pxa/tosa.c27
-rw-r--r--sound/soc/pxa/z2.c26
-rw-r--r--sound/soc/pxa/zylonite.c40
-rw-r--r--sound/soc/s3c24xx/Kconfig18
-rw-r--r--sound/soc/s3c24xx/Makefile4
-rw-r--r--sound/soc/s3c24xx/aquila_wm8994.c295
-rw-r--r--sound/soc/s3c24xx/goni_wm8994.c298
-rw-r--r--sound/soc/s3c24xx/jive_wm8750.c23
-rw-r--r--sound/soc/s3c24xx/ln2440sbc_alc650.c17
-rw-r--r--sound/soc/s3c24xx/neo1973_gta02_wm8753.c58
-rw-r--r--sound/soc/s3c24xx/neo1973_wm8753.c37
-rw-r--r--sound/soc/s3c24xx/s3c-ac97.c22
-rw-r--r--sound/soc/s3c24xx/s3c-ac97.h2
-rw-r--r--sound/soc/s3c24xx/s3c-dma.c46
-rw-r--r--sound/soc/s3c24xx/s3c-dma.h1
-rw-r--r--sound/soc/s3c24xx/s3c-i2s-v2.c50
-rw-r--r--sound/soc/s3c24xx/s3c-i2s-v2.h13
-rw-r--r--sound/soc/s3c24xx/s3c-pcm.c42
-rw-r--r--sound/soc/s3c24xx/s3c2412-i2s.c54
-rw-r--r--sound/soc/s3c24xx/s3c2412-i2s.h2
-rw-r--r--sound/soc/s3c24xx/s3c24xx-i2s.c40
-rw-r--r--sound/soc/s3c24xx/s3c24xx-i2s.h2
-rw-r--r--sound/soc/s3c24xx/s3c24xx_simtec.c15
-rw-r--r--sound/soc/s3c24xx/s3c24xx_simtec.h4
-rw-r--r--sound/soc/s3c24xx/s3c24xx_simtec_hermes.c25
-rw-r--r--sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c21
-rw-r--r--sound/soc/s3c24xx/s3c24xx_uda134x.c21
-rw-r--r--sound/soc/s3c24xx/s3c64xx-i2s-v4.c135
-rw-r--r--sound/soc/s3c24xx/s3c64xx-i2s.c206
-rw-r--r--sound/soc/s3c24xx/s3c64xx-i2s.h2
-rw-r--r--sound/soc/s3c24xx/smartq_wm8987.c15
-rw-r--r--sound/soc/s3c24xx/smdk2443_wm9710.c17
-rw-r--r--sound/soc/s3c24xx/smdk64xx_wm8580.c66
-rw-r--r--sound/soc/s3c24xx/smdk_wm9713.c38
-rw-r--r--sound/soc/s6000/s6000-i2s.c56
-rw-r--r--sound/soc/s6000/s6000-i2s.h2
-rw-r--r--sound/soc/s6000/s6000-pcm.c100
-rw-r--r--sound/soc/s6000/s6000-pcm.h2
-rw-r--r--sound/soc/s6000/s6105-ipcam.c31
-rw-r--r--sound/soc/sh/dma-sh7760.c53
-rw-r--r--sound/soc/sh/fsi-ak4642.c24
-rw-r--r--sound/soc/sh/fsi-da7210.c22
-rw-r--r--sound/soc/sh/fsi.c47
-rw-r--r--sound/soc/sh/hac.c46
-rw-r--r--sound/soc/sh/migor.c29
-rw-r--r--sound/soc/sh/sh7760-ac97.c25
-rw-r--r--sound/soc/sh/siu.h5
-rw-r--r--sound/soc/sh/siu_dai.c66
-rw-r--r--sound/soc/sh/siu_pcm.c32
-rw-r--r--sound/soc/sh/ssi.c55
-rw-r--r--sound/soc/soc-cache.c42
-rw-r--r--sound/soc/soc-core.c1680
-rw-r--r--sound/soc/soc-dapm.c88
-rw-r--r--sound/soc/soc-jack.c10
-rw-r--r--sound/soc/txx9/txx9aclc-ac97.c55
-rw-r--r--sound/soc/txx9/txx9aclc-generic.c24
-rw-r--r--sound/soc/txx9/txx9aclc.c141
-rw-r--r--sound/soc/txx9/txx9aclc.h13
317 files changed, 60269 insertions, 13266 deletions
diff --git a/sound/soc/atmel/atmel-pcm.c b/sound/soc/atmel/atmel-pcm.c
index dc5249f..d0e7532 100644
--- a/sound/soc/atmel/atmel-pcm.c
+++ b/sound/soc/atmel/atmel-pcm.c
@@ -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");
diff --git a/sound/soc/atmel/atmel-pcm.h b/sound/soc/atmel/atmel-pcm.h
index ec9b282..2597329 100644
--- a/sound/soc/atmel/atmel-pcm.h
+++ b/sound/soc/atmel/atmel-pcm.h
@@ -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)
*/
diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
index c85844d..5d230ce 100644
--- a/sound/soc/atmel/atmel_ssc_dai.c
+++ b/sound/soc/atmel/atmel_ssc_dai.c
@@ -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,94 @@ 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)
+{
+ BUG_ON(pdev->id < 0);
+ BUG_ON(pdev->id >= ARRAY_SIZE(atmel_ssc_dai));
+ return snd_soc_register_dai(&pdev->dev, &atmel_ssc_dai[pdev->id]);
+}
+
+static int __devexit asoc_ssc_remove(struct platform_device *pdev)
+{
+ snd_soc_unregister_dai(&pdev->dev);
+ 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),
+};
+
+/**
+ * atmel_ssc_set_audio - Allocate the specified SSC for audio use.
+ */
+int atmel_ssc_set_audio(int ssc_id)
+{
+ struct ssc_device *ssc;
+ static struct platform_device *dma_pdev;
+ struct platform_device *ssc_pdev;
+ int ret;
+
+ if (ssc_id < 0 || ssc_id >= ARRAY_SIZE(atmel_ssc_dai))
+ return -EINVAL;
+
+ /* Allocate a dummy device for DMA if we don't have one already */
+ if (!dma_pdev) {
+ dma_pdev = platform_device_alloc("atmel-pcm-audio", -1);
+ if (!dma_pdev)
+ return -ENOMEM;
+
+ ret = platform_device_add(dma_pdev);
+ if (ret < 0) {
+ platform_device_put(dma_pdev);
+ dma_pdev = NULL;
+ return ret;
+ }
+ }
+
+ ssc_pdev = platform_device_alloc("atmel-ssc-dai", ssc_id);
+ if (!ssc_pdev) {
+ ssc_free(ssc);
+ return -ENOMEM;
+ }
+
+ /* If we can grab the SSC briefly to parent the DAI device off it */
+ ssc = ssc_request(ssc_id);
+ if (IS_ERR(ssc))
+ pr_warn("Unable to parent ASoC SSC DAI on SSC: %ld\n",
+ PTR_ERR(ssc));
+ else
+ ssc_pdev->dev.parent = &(ssc->pdev->dev);
+ ssc_free(ssc);
+
+ ret = platform_device_add(ssc_pdev);
+ if (ret < 0)
+ platform_device_put(ssc_pdev);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(atmel_ssc_set_audio);
+
+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");
diff --git a/sound/soc/atmel/atmel_ssc_dai.h b/sound/soc/atmel/atmel_ssc_dai.h
index 391135f..5d4f0f9b 100644
--- a/sound/soc/atmel/atmel_ssc_dai.h
+++ b/sound/soc/atmel/atmel_ssc_dai.h
@@ -116,6 +116,7 @@ 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[];
+
+int atmel_ssc_set_audio(int ssc);
#endif /* _AT91_SSC_DAI_H */
diff --git a/sound/soc/atmel/playpaq_wm8510.c b/sound/soc/atmel/playpaq_wm8510.c
index 9df4c68..5f4e59f 100644
--- a/sound/soc/atmel/playpaq_wm8510.c
+++ b/sound/soc/atmel/playpaq_wm8510.c
@@ -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;
diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c
index e028744..293569d 100644
--- a/sound/soc/atmel/sam9g20_wm8731.c
+++ b/sound/soc/atmel/sam9g20_wm8731.c
@@ -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,16 +136,17 @@ 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
"at91sam9g20ek_wm8731 "
": at91sam9g20ek_wm8731_init() called\n");
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL,
MCLK_RATE, SND_SOC_CLOCK_IN);
if (ret < 0) {
printk(KERN_ERR "Failed to set WM8731 SYSCLK: %d\n", ret);
@@ -179,37 +180,37 @@ 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-001b",
.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;
if (!(machine_is_at91sam9g20ek() || machine_is_at91sam9g20ek_2mmc()))
return -ENODEV;
+ ret = atmel_ssc_set_audio(0);
+ if (ret != 0) {
+ pr_err("Failed to set SSC 0 for audio: %d\n", ret);
+ return ret;
+ }
+
/*
* Codec MCLK is supplied by PCK0 - set it up.
*/
@@ -235,18 +236,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 +243,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 +253,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 +262,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);
diff --git a/sound/soc/atmel/snd-soc-afeb9260.c b/sound/soc/atmel/snd-soc-afeb9260.c
index 23349de..e3d2835 100644
--- a/sound/soc/atmel/snd-soc-afeb9260.c
+++ b/sound/soc/atmel/snd-soc-afeb9260.c
@@ -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)
diff --git a/sound/soc/au1x/db1200.c b/sound/soc/au1x/db1200.c
index cdf7be1..d8dc822 100644
--- a/sound/soc/au1x/db1200.c
+++ b/sound/soc/au1x/db1200.c
@@ -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"
@@ -28,20 +27,16 @@
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,12 +44,12 @@ 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 */
- snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK,
+ snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL,
12000000, SND_SOC_CLOCK_IN);
/* codec is bitclock and lrclk master */
@@ -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) {
diff --git a/sound/soc/au1x/dbdma2.c b/sound/soc/au1x/dbdma2.c
index 6d9f4c6..00fdb9c 100644
--- a/sound/soc/au1x/dbdma2.c
+++ b/sound/soc/au1x/dbdma2.c
@@ -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,
diff --git a/sound/soc/au1x/psc-ac97.c b/sound/soc/au1x/psc-ac97.c
index d14a5a9..6a9516c 100644
--- a/sound/soc/au1x/psc-ac97.c
+++ b/sound/soc/au1x/psc-ac97.c
@@ -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,
},
diff --git a/sound/soc/au1x/psc-i2s.c b/sound/soc/au1x/psc-i2s.c
index 6083fe77..94e560a 100644
--- a/sound/soc/au1x/psc-i2s.c
+++ b/sound/soc/au1x/psc-i2s.c
@@ -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,
},
diff --git a/sound/soc/au1x/psc.h b/sound/soc/au1x/psc.h
index 093775d..f281443 100644
--- a/sound/soc/au1x/psc.h
+++ b/sound/soc/au1x/psc.h
@@ -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 */
diff --git a/sound/soc/blackfin/bf5xx-ac97-pcm.c b/sound/soc/blackfin/bf5xx-ac97-pcm.c
index 5e7aacf..5a2fd8a 100644
--- a/sound/soc/blackfin/bf5xx-ac97-pcm.c
+++ b/sound/soc/blackfin/bf5xx-ac97-pcm.c
@@ -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");
diff --git a/sound/soc/blackfin/bf5xx-ac97-pcm.h b/sound/soc/blackfin/bf5xx-ac97-pcm.h
index 350125a..d324d58 100644
--- a/sound/soc/blackfin/bf5xx-ac97-pcm.h
+++ b/sound/soc/blackfin/bf5xx-ac97-pcm.h
@@ -23,7 +23,4 @@ struct bf5xx_gpio {
u32 frm;
};
-/* platform data */
-extern struct snd_soc_platform bf5xx_ac97_soc_platform;
-
#endif
diff --git a/sound/soc/blackfin/bf5xx-ac97.c b/sound/soc/blackfin/bf5xx-ac97.c
index c0eba51..c5f856ec 100644
--- a/sound/soc/blackfin/bf5xx-ac97.c
+++ b/sound/soc/blackfin/bf5xx-ac97.c
@@ -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");
diff --git a/sound/soc/blackfin/bf5xx-ac97.h b/sound/soc/blackfin/bf5xx-ac97.h
index a1f97dd..15c635e 100644
--- a/sound/soc/blackfin/bf5xx-ac97.h
+++ b/sound/soc/blackfin/bf5xx-ac97.h
@@ -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);
diff --git a/sound/soc/blackfin/bf5xx-ad1836.c b/sound/soc/blackfin/bf5xx-ad1836.c
index 0f45a3f..2394bff 100644
--- a/sound/soc/blackfin/bf5xx-ad1836.c
+++ b/sound/soc/blackfin/bf5xx-ad1836.c
@@ -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)
diff --git a/sound/soc/blackfin/bf5xx-ad193x.c b/sound/soc/blackfin/bf5xx-ad193x.c
index b8c9060..e4a6253 100644
--- a/sound/soc/blackfin/bf5xx-ad193x.c
+++ b/sound/soc/blackfin/bf5xx-ad193x.c
@@ -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)
diff --git a/sound/soc/blackfin/bf5xx-ad1980.c b/sound/soc/blackfin/bf5xx-ad1980.c
index 92f7c32..d57c9c9 100644
--- a/sound/soc/blackfin/bf5xx-ad1980.c
+++ b/sound/soc/blackfin/bf5xx-ad1980.c
@@ -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)
diff --git a/sound/soc/blackfin/bf5xx-ad73311.c b/sound/soc/blackfin/bf5xx-ad73311.c
index 9825b71..900ced5 100644
--- a/sound/soc/blackfin/bf5xx-ad73311.c
+++ b/sound/soc/blackfin/bf5xx-ad73311.c
@@ -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)
diff --git a/sound/soc/blackfin/bf5xx-i2s-pcm.c b/sound/soc/blackfin/bf5xx-i2s-pcm.c
index 1d2a1ad..890a0dc 100644
--- a/sound/soc/blackfin/bf5xx-i2s-pcm.c
+++ b/sound/soc/blackfin/bf5xx-i2s-pcm.c
@@ -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");
diff --git a/sound/soc/blackfin/bf5xx-i2s-pcm.h b/sound/soc/blackfin/bf5xx-i2s-pcm.h
index 4d4609a..0c2c5a6 100644
--- a/sound/soc/blackfin/bf5xx-i2s-pcm.h
+++ b/sound/soc/blackfin/bf5xx-i2s-pcm.h
@@ -23,7 +23,4 @@ struct bf5xx_gpio {
u32 frm;
};
-/* platform data */
-extern struct snd_soc_platform bf5xx_i2s_soc_platform;
-
#endif
diff --git a/sound/soc/blackfin/bf5xx-i2s.c b/sound/soc/blackfin/bf5xx-i2s.c
index 3e6ada0..d453b1e 100644
--- a/sound/soc/blackfin/bf5xx-i2s.c
+++ b/sound/soc/blackfin/bf5xx-i2s.c
@@ -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
index 264ecdc..0000000
--- a/sound/soc/blackfin/bf5xx-i2s.h
+++ /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
diff --git a/sound/soc/blackfin/bf5xx-ssm2602.c b/sound/soc/blackfin/bf5xx-ssm2602.c
index 3a00fa4..36f2769 100644
--- a/sound/soc/blackfin/bf5xx-ssm2602.c
+++ b/sound/soc/blackfin/bf5xx-ssm2602.c
@@ -42,17 +42,16 @@
#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)
diff --git a/sound/soc/blackfin/bf5xx-tdm-pcm.c b/sound/soc/blackfin/bf5xx-tdm-pcm.c
index 6bac1ac..74cf759 100644
--- a/sound/soc/blackfin/bf5xx-tdm-pcm.c
+++ b/sound/soc/blackfin/bf5xx-tdm-pcm.c
@@ -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");
diff --git a/sound/soc/blackfin/bf5xx-tdm-pcm.h b/sound/soc/blackfin/bf5xx-tdm-pcm.h
index ddc5047..7f8cc01 100644
--- a/sound/soc/blackfin/bf5xx-tdm-pcm.h
+++ b/sound/soc/blackfin/bf5xx-tdm-pcm.h
@@ -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
diff --git a/sound/soc/blackfin/bf5xx-tdm.c b/sound/soc/blackfin/bf5xx-tdm.c
index 24c1426..1251239 100644
--- a/sound/soc/blackfin/bf5xx-tdm.c
+++ b/sound/soc/blackfin/bf5xx-tdm.c
@@ -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;
}
diff --git a/sound/soc/blackfin/bf5xx-tdm.h b/sound/soc/blackfin/bf5xx-tdm.h
index 04189a1..e986a3e 100644
--- a/sound/soc/blackfin/bf5xx-tdm.h
+++ b/sound/soc/blackfin/bf5xx-tdm.h
@@ -20,6 +20,4 @@ struct bf5xx_tdm_port {
int configured;
};
-extern struct snd_soc_dai bf5xx_tdm_dai;
-
#endif
diff --git a/sound/soc/codecs/88pm860x-codec.c b/sound/soc/codecs/88pm860x-codec.c
new file mode 100644
index 0000000..01d19e9
--- /dev/null
+++ b/sound/soc/codecs/88pm860x-codec.c
@@ -0,0 +1,1486 @@
+/*
+ * 88pm860x-codec.c -- 88PM860x ALSA SoC Audio Driver
+ *
+ * Copyright 2010 Marvell International Ltd.
+ * Author: Haojian Zhuang <haojian.zhuang@marvell.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/kernel.h>
+#include <linux/module.h>
+#include <linux/i2c.h>
+#include <linux/platform_device.h>
+#include <linux/mfd/88pm860x.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-dapm.h>
+#include <sound/tlv.h>
+#include <sound/initval.h>
+#include <sound/jack.h>
+
+#include "88pm860x-codec.h"
+
+#define MAX_NAME_LEN 20
+#define REG_CACHE_SIZE 0x40
+#define REG_CACHE_BASE 0xb0
+
+/* Status Register 1 (0x01) */
+#define REG_STATUS_1 0x01
+#define MIC_STATUS (1 << 7)
+#define HOOK_STATUS (1 << 6)
+#define HEADSET_STATUS (1 << 5)
+
+/* Mic Detection Register (0x37) */
+#define REG_MIC_DET 0x37
+#define CONTINUOUS_POLLING (3 << 1)
+#define EN_MIC_DET (1 << 0)
+#define MICDET_MASK 0x07
+
+/* Headset Detection Register (0x38) */
+#define REG_HS_DET 0x38
+#define EN_HS_DET (1 << 0)
+
+/* Misc2 Register (0x42) */
+#define REG_MISC2 0x42
+#define AUDIO_PLL (1 << 5)
+#define AUDIO_SECTION_RESET (1 << 4)
+#define AUDIO_SECTION_ON (1 << 3)
+
+/* PCM Interface Register 2 (0xb1) */
+#define PCM_INF2_BCLK (1 << 6) /* Bit clock polarity */
+#define PCM_INF2_FS (1 << 5) /* Frame Sync polarity */
+#define PCM_INF2_MASTER (1 << 4) /* Master / Slave */
+#define PCM_INF2_18WL (1 << 3) /* 18 / 16 bits */
+#define PCM_GENERAL_I2S 0
+#define PCM_EXACT_I2S 1
+#define PCM_LEFT_I2S 2
+#define PCM_RIGHT_I2S 3
+#define PCM_SHORT_FS 4
+#define PCM_LONG_FS 5
+#define PCM_MODE_MASK 7
+
+/* I2S Interface Register 4 (0xbe) */
+#define I2S_EQU_BYP (1 << 6)
+
+/* DAC Offset Register (0xcb) */
+#define DAC_MUTE (1 << 7)
+#define MUTE_LEFT (1 << 6)
+#define MUTE_RIGHT (1 << 2)
+
+/* ADC Analog Register 1 (0xd0) */
+#define REG_ADC_ANA_1 0xd0
+#define MIC1BIAS_MASK 0x60
+
+/* Earpiece/Speaker Control Register 2 (0xda) */
+#define REG_EAR2 0xda
+#define RSYNC_CHANGE (1 << 2)
+
+/* Audio Supplies Register 2 (0xdc) */
+#define REG_SUPPLIES2 0xdc
+#define LDO15_READY (1 << 4)
+#define LDO15_EN (1 << 3)
+#define CPUMP_READY (1 << 2)
+#define CPUMP_EN (1 << 1)
+#define AUDIO_EN (1 << 0)
+#define SUPPLY_MASK (LDO15_EN | CPUMP_EN | AUDIO_EN)
+
+/* Audio Enable Register 1 (0xdd) */
+#define ADC_MOD_RIGHT (1 << 1)
+#define ADC_MOD_LEFT (1 << 0)
+
+/* Audio Enable Register 2 (0xde) */
+#define ADC_LEFT (1 << 5)
+#define ADC_RIGHT (1 << 4)
+
+/* DAC Enable Register 2 (0xe1) */
+#define DAC_LEFT (1 << 5)
+#define DAC_RIGHT (1 << 4)
+#define MODULATOR (1 << 3)
+
+/* Shorts Register (0xeb) */
+#define REG_SHORTS 0xeb
+#define CLR_SHORT_LO2 (1 << 7)
+#define SHORT_LO2 (1 << 6)
+#define CLR_SHORT_LO1 (1 << 5)
+#define SHORT_LO1 (1 << 4)
+#define CLR_SHORT_HS2 (1 << 3)
+#define SHORT_HS2 (1 << 2)
+#define CLR_SHORT_HS1 (1 << 1)
+#define SHORT_HS1 (1 << 0)
+
+/*
+ * This widget should be just after DAC & PGA in DAPM power-on sequence and
+ * before DAC & PGA in DAPM power-off sequence.
+ */
+#define PM860X_DAPM_OUTPUT(wname, wevent) \
+{ .id = snd_soc_dapm_pga, .name = wname, .reg = SND_SOC_NOPM, \
+ .shift = 0, .invert = 0, .kcontrols = NULL, \
+ .num_kcontrols = 0, .event = wevent, \
+ .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD, }
+
+struct pm860x_det {
+ struct snd_soc_jack *hp_jack;
+ struct snd_soc_jack *mic_jack;
+ int hp_det;
+ int mic_det;
+ int hook_det;
+ int hs_shrt;
+ int lo_shrt;
+};
+
+struct pm860x_priv {
+ unsigned int sysclk;
+ unsigned int pcmclk;
+ unsigned int dir;
+ unsigned int filter;
+ struct snd_soc_codec *codec;
+ struct i2c_client *i2c;
+ struct pm860x_chip *chip;
+ struct pm860x_det det;
+
+ int irq[4];
+ unsigned char name[4][MAX_NAME_LEN];
+ unsigned char reg_cache[REG_CACHE_SIZE];
+};
+
+/* -9450dB to 0dB in 150dB steps ( mute instead of -9450dB) */
+static const DECLARE_TLV_DB_SCALE(dpga_tlv, -9450, 150, 1);
+
+/* -9dB to 0db in 3dB steps */
+static const DECLARE_TLV_DB_SCALE(adc_tlv, -900, 300, 0);
+
+/* {-23, -17, -13.5, -11, -9, -6, -3, 0}dB */
+static const unsigned int mic_tlv[] = {
+ TLV_DB_RANGE_HEAD(5),
+ 0, 0, TLV_DB_SCALE_ITEM(-2300, 0, 0),
+ 1, 1, TLV_DB_SCALE_ITEM(-1700, 0, 0),
+ 2, 2, TLV_DB_SCALE_ITEM(-1350, 0, 0),
+ 3, 3, TLV_DB_SCALE_ITEM(-1100, 0, 0),
+ 4, 7, TLV_DB_SCALE_ITEM(-900, 300, 0),
+};
+
+/* {0, 0, 0, -6, 0, 6, 12, 18}dB */
+static const unsigned int aux_tlv[] = {
+ TLV_DB_RANGE_HEAD(2),
+ 0, 2, TLV_DB_SCALE_ITEM(0, 0, 0),
+ 3, 7, TLV_DB_SCALE_ITEM(-600, 600, 0),
+};
+
+/* {-16, -13, -10, -7, -5.2, -3,3, -2.2, 0}dB, mute instead of -16dB */
+static const unsigned int out_tlv[] = {
+ TLV_DB_RANGE_HEAD(4),
+ 0, 3, TLV_DB_SCALE_ITEM(-1600, 300, 1),
+ 4, 4, TLV_DB_SCALE_ITEM(-520, 0, 0),
+ 5, 5, TLV_DB_SCALE_ITEM(-330, 0, 0),
+ 6, 7, TLV_DB_SCALE_ITEM(-220, 220, 0),
+};
+
+static const unsigned int st_tlv[] = {
+ TLV_DB_RANGE_HEAD(8),
+ 0, 1, TLV_DB_SCALE_ITEM(-12041, 602, 0),
+ 2, 3, TLV_DB_SCALE_ITEM(-11087, 250, 0),
+ 4, 5, TLV_DB_SCALE_ITEM(-10643, 158, 0),
+ 6, 7, TLV_DB_SCALE_ITEM(-10351, 116, 0),
+ 8, 9, TLV_DB_SCALE_ITEM(-10133, 92, 0),
+ 10, 13, TLV_DB_SCALE_ITEM(-9958, 70, 0),
+ 14, 17, TLV_DB_SCALE_ITEM(-9689, 53, 0),
+ 18, 271, TLV_DB_SCALE_ITEM(-9484, 37, 0),
+};
+
+/* Sidetone Gain = M * 2^(-5-N) */
+struct st_gain {
+ unsigned int db;
+ unsigned int m;
+ unsigned int n;
+};
+
+static struct st_gain st_table[] = {
+ {-12041, 1, 15}, {-11439, 1, 14}, {-11087, 3, 15}, {-10837, 1, 13},
+ {-10643, 5, 15}, {-10485, 3, 14}, {-10351, 7, 15}, {-10235, 1, 12},
+ {-10133, 9, 15}, {-10041, 5, 14}, { -9958, 11, 15}, { -9883, 3, 13},
+ { -9813, 13, 15}, { -9749, 7, 14}, { -9689, 15, 15}, { -9633, 1, 11},
+ { -9580, 17, 15}, { -9531, 9, 14}, { -9484, 19, 15}, { -9439, 5, 13},
+ { -9397, 21, 15}, { -9356, 11, 14}, { -9318, 23, 15}, { -9281, 3, 12},
+ { -9245, 25, 15}, { -9211, 13, 14}, { -9178, 27, 15}, { -9147, 7, 13},
+ { -9116, 29, 15}, { -9087, 15, 14}, { -9058, 31, 15}, { -9031, 1, 10},
+ { -8978, 17, 14}, { -8929, 9, 13}, { -8882, 19, 14}, { -8837, 5, 12},
+ { -8795, 21, 14}, { -8754, 11, 13}, { -8716, 23, 14}, { -8679, 3, 11},
+ { -8643, 25, 14}, { -8609, 13, 13}, { -8576, 27, 14}, { -8545, 7, 12},
+ { -8514, 29, 14}, { -8485, 15, 13}, { -8456, 31, 14}, { -8429, 1, 9},
+ { -8376, 17, 13}, { -8327, 9, 12}, { -8280, 19, 13}, { -8235, 5, 11},
+ { -8193, 21, 13}, { -8152, 11, 12}, { -8114, 23, 13}, { -8077, 3, 10},
+ { -8041, 25, 13}, { -8007, 13, 12}, { -7974, 27, 13}, { -7943, 7, 11},
+ { -7912, 29, 13}, { -7883, 15, 12}, { -7854, 31, 13}, { -7827, 1, 8},
+ { -7774, 17, 12}, { -7724, 9, 11}, { -7678, 19, 12}, { -7633, 5, 10},
+ { -7591, 21, 12}, { -7550, 11, 11}, { -7512, 23, 12}, { -7475, 3, 9},
+ { -7439, 25, 12}, { -7405, 13, 11}, { -7372, 27, 12}, { -7341, 7, 10},
+ { -7310, 29, 12}, { -7281, 15, 11}, { -7252, 31, 12}, { -7225, 1, 7},
+ { -7172, 17, 11}, { -7122, 9, 10}, { -7075, 19, 11}, { -7031, 5, 9},
+ { -6989, 21, 11}, { -6948, 11, 10}, { -6910, 23, 11}, { -6873, 3, 8},
+ { -6837, 25, 11}, { -6803, 13, 10}, { -6770, 27, 11}, { -6739, 7, 9},
+ { -6708, 29, 11}, { -6679, 15, 10}, { -6650, 31, 11}, { -6623, 1, 6},
+ { -6570, 17, 10}, { -6520, 9, 9}, { -6473, 19, 10}, { -6429, 5, 8},
+ { -6386, 21, 10}, { -6346, 11, 9}, { -6307, 23, 10}, { -6270, 3, 7},
+ { -6235, 25, 10}, { -6201, 13, 9}, { -6168, 27, 10}, { -6137, 7, 8},
+ { -6106, 29, 10}, { -6077, 15, 9}, { -6048, 31, 10}, { -6021, 1, 5},
+ { -5968, 17, 9}, { -5918, 9, 8}, { -5871, 19, 9}, { -5827, 5, 7},
+ { -5784, 21, 9}, { -5744, 11, 8}, { -5705, 23, 9}, { -5668, 3, 6},
+ { -5633, 25, 9}, { -5599, 13, 8}, { -5566, 27, 9}, { -5535, 7, 7},
+ { -5504, 29, 9}, { -5475, 15, 8}, { -5446, 31, 9}, { -5419, 1, 4},
+ { -5366, 17, 8}, { -5316, 9, 7}, { -5269, 19, 8}, { -5225, 5, 6},
+ { -5182, 21, 8}, { -5142, 11, 7}, { -5103, 23, 8}, { -5066, 3, 5},
+ { -5031, 25, 8}, { -4997, 13, 7}, { -4964, 27, 8}, { -4932, 7, 6},
+ { -4902, 29, 8}, { -4873, 15, 7}, { -4844, 31, 8}, { -4816, 1, 3},
+ { -4764, 17, 7}, { -4714, 9, 6}, { -4667, 19, 7}, { -4623, 5, 5},
+ { -4580, 21, 7}, { -4540, 11, 6}, { -4501, 23, 7}, { -4464, 3, 4},
+ { -4429, 25, 7}, { -4395, 13, 6}, { -4362, 27, 7}, { -4330, 7, 5},
+ { -4300, 29, 7}, { -4270, 15, 6}, { -4242, 31, 7}, { -4214, 1, 2},
+ { -4162, 17, 6}, { -4112, 9, 5}, { -4065, 19, 6}, { -4021, 5, 4},
+ { -3978, 21, 6}, { -3938, 11, 5}, { -3899, 23, 6}, { -3862, 3, 3},
+ { -3827, 25, 6}, { -3793, 13, 5}, { -3760, 27, 6}, { -3728, 7, 4},
+ { -3698, 29, 6}, { -3668, 15, 5}, { -3640, 31, 6}, { -3612, 1, 1},
+ { -3560, 17, 5}, { -3510, 9, 4}, { -3463, 19, 5}, { -3419, 5, 3},
+ { -3376, 21, 5}, { -3336, 11, 4}, { -3297, 23, 5}, { -3260, 3, 2},
+ { -3225, 25, 5}, { -3191, 13, 4}, { -3158, 27, 5}, { -3126, 7, 3},
+ { -3096, 29, 5}, { -3066, 15, 4}, { -3038, 31, 5}, { -3010, 1, 0},
+ { -2958, 17, 4}, { -2908, 9, 3}, { -2861, 19, 4}, { -2816, 5, 2},
+ { -2774, 21, 4}, { -2734, 11, 3}, { -2695, 23, 4}, { -2658, 3, 1},
+ { -2623, 25, 4}, { -2589, 13, 3}, { -2556, 27, 4}, { -2524, 7, 2},
+ { -2494, 29, 4}, { -2464, 15, 3}, { -2436, 31, 4}, { -2408, 2, 0},
+ { -2356, 17, 3}, { -2306, 9, 2}, { -2259, 19, 3}, { -2214, 5, 1},
+ { -2172, 21, 3}, { -2132, 11, 2}, { -2093, 23, 3}, { -2056, 3, 0},
+ { -2021, 25, 3}, { -1987, 13, 2}, { -1954, 27, 3}, { -1922, 7, 1},
+ { -1892, 29, 3}, { -1862, 15, 2}, { -1834, 31, 3}, { -1806, 4, 0},
+ { -1754, 17, 2}, { -1704, 9, 1}, { -1657, 19, 2}, { -1612, 5, 0},
+ { -1570, 21, 2}, { -1530, 11, 1}, { -1491, 23, 2}, { -1454, 6, 0},
+ { -1419, 25, 2}, { -1384, 13, 1}, { -1352, 27, 2}, { -1320, 7, 0},
+ { -1290, 29, 2}, { -1260, 15, 1}, { -1232, 31, 2}, { -1204, 8, 0},
+ { -1151, 17, 1}, { -1102, 9, 0}, { -1055, 19, 1}, { -1010, 10, 0},
+ { -968, 21, 1}, { -928, 11, 0}, { -889, 23, 1}, { -852, 12, 0},
+ { -816, 25, 1}, { -782, 13, 0}, { -750, 27, 1}, { -718, 14, 0},
+ { -688, 29, 1}, { -658, 15, 0}, { -630, 31, 1}, { -602, 16, 0},
+ { -549, 17, 0}, { -500, 18, 0}, { -453, 19, 0}, { -408, 20, 0},
+ { -366, 21, 0}, { -325, 22, 0}, { -287, 23, 0}, { -250, 24, 0},
+ { -214, 25, 0}, { -180, 26, 0}, { -148, 27, 0}, { -116, 28, 0},
+ { -86, 29, 0}, { -56, 30, 0}, { -28, 31, 0}, { 0, 0, 0},
+};
+
+static int pm860x_volatile(unsigned int reg)
+{
+ BUG_ON(reg >= REG_CACHE_SIZE);
+
+ switch (reg) {
+ case PM860X_AUDIO_SUPPLIES_2:
+ return 1;
+ }
+
+ return 0;
+}
+
+static unsigned int pm860x_read_reg_cache(struct snd_soc_codec *codec,
+ unsigned int reg)
+{
+ unsigned char *cache = codec->reg_cache;
+
+ BUG_ON(reg >= REG_CACHE_SIZE);
+
+ if (pm860x_volatile(reg))
+ return cache[reg];
+
+ reg += REG_CACHE_BASE;
+
+ return pm860x_reg_read(codec->control_data, reg);
+}
+
+static int pm860x_write_reg_cache(struct snd_soc_codec *codec,
+ unsigned int reg, unsigned int value)
+{
+ unsigned char *cache = codec->reg_cache;
+
+ BUG_ON(reg >= REG_CACHE_SIZE);
+
+ if (!pm860x_volatile(reg))
+ cache[reg] = (unsigned char)value;
+
+ reg += REG_CACHE_BASE;
+
+ return pm860x_reg_write(codec->control_data, reg, value);
+}
+
+static int snd_soc_get_volsw_2r_st(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int reg2 = mc->rreg;
+ int val[2], val2[2], i;
+
+ val[0] = snd_soc_read(codec, reg) & 0x3f;
+ val[1] = (snd_soc_read(codec, PM860X_SIDETONE_SHIFT) >> 4) & 0xf;
+ val2[0] = snd_soc_read(codec, reg2) & 0x3f;
+ val2[1] = (snd_soc_read(codec, PM860X_SIDETONE_SHIFT)) & 0xf;
+
+ for (i = 0; i < ARRAY_SIZE(st_table); i++) {
+ if ((st_table[i].m == val[0]) && (st_table[i].n == val[1]))
+ ucontrol->value.integer.value[0] = i;
+ if ((st_table[i].m == val2[0]) && (st_table[i].n == val2[1]))
+ ucontrol->value.integer.value[1] = i;
+ }
+ return 0;
+}
+
+static int snd_soc_put_volsw_2r_st(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int reg2 = mc->rreg;
+ int err;
+ unsigned int val, val2;
+
+ val = ucontrol->value.integer.value[0];
+ val2 = ucontrol->value.integer.value[1];
+
+ err = snd_soc_update_bits(codec, reg, 0x3f, st_table[val].m);
+ if (err < 0)
+ return err;
+ err = snd_soc_update_bits(codec, PM860X_SIDETONE_SHIFT, 0xf0,
+ st_table[val].n << 4);
+ if (err < 0)
+ return err;
+
+ err = snd_soc_update_bits(codec, reg2, 0x3f, st_table[val2].m);
+ if (err < 0)
+ return err;
+ err = snd_soc_update_bits(codec, PM860X_SIDETONE_SHIFT, 0x0f,
+ st_table[val2].n);
+ return err;
+}
+
+static int snd_soc_get_volsw_2r_out(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int reg2 = mc->rreg;
+ unsigned int shift = mc->shift;
+ int max = mc->max, val, val2;
+ unsigned int mask = (1 << fls(max)) - 1;
+
+ val = snd_soc_read(codec, reg) >> shift;
+ val2 = snd_soc_read(codec, reg2) >> shift;
+ ucontrol->value.integer.value[0] = (max - val) & mask;
+ ucontrol->value.integer.value[1] = (max - val2) & mask;
+
+ return 0;
+}
+
+static int snd_soc_put_volsw_2r_out(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int reg2 = mc->rreg;
+ unsigned int shift = mc->shift;
+ int max = mc->max;
+ unsigned int mask = (1 << fls(max)) - 1;
+ int err;
+ unsigned int val, val2, val_mask;
+
+ val_mask = mask << shift;
+ val = ((max - ucontrol->value.integer.value[0]) & mask);
+ val2 = ((max - ucontrol->value.integer.value[1]) & mask);
+
+ val = val << shift;
+ val2 = val2 << shift;
+
+ err = snd_soc_update_bits(codec, reg, val_mask, val);
+ if (err < 0)
+ return err;
+
+ err = snd_soc_update_bits(codec, reg2, val_mask, val2);
+ return err;
+}
+
+/* DAPM Widget Events */
+/*
+ * A lot registers are belong to RSYNC domain. It requires enabling RSYNC bit
+ * after updating these registers. Otherwise, these updated registers won't
+ * be effective.
+ */
+static int pm860x_rsync_event(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event)
+{
+ struct snd_soc_codec *codec = w->codec;
+
+ /*
+ * In order to avoid current on the load, mute power-on and power-off
+ * should be transients.
+ * Unmute by DAC_MUTE. It should be unmuted when DAPM sequence is
+ * finished.
+ */
+ snd_soc_update_bits(codec, PM860X_DAC_OFFSET, DAC_MUTE, 0);
+ snd_soc_update_bits(codec, PM860X_EAR_CTRL_2,
+ RSYNC_CHANGE, RSYNC_CHANGE);
+ return 0;
+}
+
+static int pm860x_dac_event(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event)
+{
+ struct snd_soc_codec *codec = w->codec;
+ unsigned int dac = 0;
+ int data;
+
+ if (!strcmp(w->name, "Left DAC"))
+ dac = DAC_LEFT;
+ if (!strcmp(w->name, "Right DAC"))
+ dac = DAC_RIGHT;
+ switch (event) {
+ case SND_SOC_DAPM_PRE_PMU:
+ if (dac) {
+ /* Auto mute in power-on sequence. */
+ dac |= MODULATOR;
+ snd_soc_update_bits(codec, PM860X_DAC_OFFSET,
+ DAC_MUTE, DAC_MUTE);
+ snd_soc_update_bits(codec, PM860X_EAR_CTRL_2,
+ RSYNC_CHANGE, RSYNC_CHANGE);
+ /* update dac */
+ snd_soc_update_bits(codec, PM860X_DAC_EN_2,
+ dac, dac);
+ }
+ break;
+ case SND_SOC_DAPM_PRE_PMD:
+ if (dac) {
+ /* Auto mute in power-off sequence. */
+ snd_soc_update_bits(codec, PM860X_DAC_OFFSET,
+ DAC_MUTE, DAC_MUTE);
+ snd_soc_update_bits(codec, PM860X_EAR_CTRL_2,
+ RSYNC_CHANGE, RSYNC_CHANGE);
+ /* update dac */
+ data = snd_soc_read(codec, PM860X_DAC_EN_2);
+ data &= ~dac;
+ if (!(data & (DAC_LEFT | DAC_RIGHT)))
+ data &= ~MODULATOR;
+ snd_soc_write(codec, PM860X_DAC_EN_2, data);
+ }
+ break;
+ }
+ return 0;
+}
+
+static const char *pm860x_opamp_texts[] = {"-50%", "-25%", "0%", "75%"};
+
+static const char *pm860x_pa_texts[] = {"-33%", "0%", "33%", "66%"};
+
+static const struct soc_enum pm860x_hs1_opamp_enum =
+ SOC_ENUM_SINGLE(PM860X_HS1_CTRL, 5, 4, pm860x_opamp_texts);
+
+static const struct soc_enum pm860x_hs2_opamp_enum =
+ SOC_ENUM_SINGLE(PM860X_HS2_CTRL, 5, 4, pm860x_opamp_texts);
+
+static const struct soc_enum pm860x_hs1_pa_enum =
+ SOC_ENUM_SINGLE(PM860X_HS1_CTRL, 3, 4, pm860x_pa_texts);
+
+static const struct soc_enum pm860x_hs2_pa_enum =
+ SOC_ENUM_SINGLE(PM860X_HS2_CTRL, 3, 4, pm860x_pa_texts);
+
+static const struct soc_enum pm860x_lo1_opamp_enum =
+ SOC_ENUM_SINGLE(PM860X_LO1_CTRL, 5, 4, pm860x_opamp_texts);
+
+static const struct soc_enum pm860x_lo2_opamp_enum =
+ SOC_ENUM_SINGLE(PM860X_LO2_CTRL, 5, 4, pm860x_opamp_texts);
+
+static const struct soc_enum pm860x_lo1_pa_enum =
+ SOC_ENUM_SINGLE(PM860X_LO1_CTRL, 3, 4, pm860x_pa_texts);
+
+static const struct soc_enum pm860x_lo2_pa_enum =
+ SOC_ENUM_SINGLE(PM860X_LO2_CTRL, 3, 4, pm860x_pa_texts);
+
+static const struct soc_enum pm860x_spk_pa_enum =
+ SOC_ENUM_SINGLE(PM860X_EAR_CTRL_1, 5, 4, pm860x_pa_texts);
+
+static const struct soc_enum pm860x_ear_pa_enum =
+ SOC_ENUM_SINGLE(PM860X_EAR_CTRL_2, 0, 4, pm860x_pa_texts);
+
+static const struct soc_enum pm860x_spk_ear_opamp_enum =
+ SOC_ENUM_SINGLE(PM860X_EAR_CTRL_1, 3, 4, pm860x_opamp_texts);
+
+static const struct snd_kcontrol_new pm860x_snd_controls[] = {
+ SOC_DOUBLE_R_TLV("ADC Capture Volume", PM860X_ADC_ANA_2,
+ PM860X_ADC_ANA_3, 6, 3, 0, adc_tlv),
+ SOC_DOUBLE_TLV("AUX Capture Volume", PM860X_ADC_ANA_3, 0, 3, 7, 0,
+ aux_tlv),
+ SOC_SINGLE_TLV("MIC1 Capture Volume", PM860X_ADC_ANA_2, 0, 7, 0,
+ mic_tlv),
+ SOC_SINGLE_TLV("MIC3 Capture Volume", PM860X_ADC_ANA_2, 3, 7, 0,
+ mic_tlv),
+ SOC_DOUBLE_R_EXT_TLV("Sidetone Volume", PM860X_SIDETONE_L_GAIN,
+ PM860X_SIDETONE_R_GAIN, 0, ARRAY_SIZE(st_table)-1,
+ 0, snd_soc_get_volsw_2r_st,
+ snd_soc_put_volsw_2r_st, st_tlv),
+ SOC_SINGLE_TLV("Speaker Playback Volume", PM860X_EAR_CTRL_1,
+ 0, 7, 0, out_tlv),
+ SOC_DOUBLE_R_TLV("Line Playback Volume", PM860X_LO1_CTRL,
+ PM860X_LO2_CTRL, 0, 7, 0, out_tlv),
+ SOC_DOUBLE_R_TLV("Headset Playback Volume", PM860X_HS1_CTRL,
+ PM860X_HS2_CTRL, 0, 7, 0, out_tlv),
+ SOC_DOUBLE_R_EXT_TLV("Hifi Left Playback Volume",
+ PM860X_HIFIL_GAIN_LEFT,
+ PM860X_HIFIL_GAIN_RIGHT, 0, 63, 0,
+ snd_soc_get_volsw_2r_out,
+ snd_soc_put_volsw_2r_out, dpga_tlv),
+ SOC_DOUBLE_R_EXT_TLV("Hifi Right Playback Volume",
+ PM860X_HIFIR_GAIN_LEFT,
+ PM860X_HIFIR_GAIN_RIGHT, 0, 63, 0,
+ snd_soc_get_volsw_2r_out,
+ snd_soc_put_volsw_2r_out, dpga_tlv),
+ SOC_DOUBLE_R_EXT_TLV("Lofi Playback Volume", PM860X_LOFI_GAIN_LEFT,
+ PM860X_LOFI_GAIN_RIGHT, 0, 63, 0,
+ snd_soc_get_volsw_2r_out,
+ snd_soc_put_volsw_2r_out, dpga_tlv),
+ SOC_ENUM("Headset1 Operational Amplifier Current",
+ pm860x_hs1_opamp_enum),
+ SOC_ENUM("Headset2 Operational Amplifier Current",
+ pm860x_hs2_opamp_enum),
+ SOC_ENUM("Headset1 Amplifier Current", pm860x_hs1_pa_enum),
+ SOC_ENUM("Headset2 Amplifier Current", pm860x_hs2_pa_enum),
+ SOC_ENUM("Lineout1 Operational Amplifier Current",
+ pm860x_lo1_opamp_enum),
+ SOC_ENUM("Lineout2 Operational Amplifier Current",
+ pm860x_lo2_opamp_enum),
+ SOC_ENUM("Lineout1 Amplifier Current", pm860x_lo1_pa_enum),
+ SOC_ENUM("Lineout2 Amplifier Current", pm860x_lo2_pa_enum),
+ SOC_ENUM("Speaker Operational Amplifier Current",
+ pm860x_spk_ear_opamp_enum),
+ SOC_ENUM("Speaker Amplifier Current", pm860x_spk_pa_enum),
+ SOC_ENUM("Earpiece Amplifier Current", pm860x_ear_pa_enum),
+};
+
+/*
+ * DAPM Controls
+ */
+
+/* PCM Switch / PCM Interface */
+static const struct snd_kcontrol_new pcm_switch_controls =
+ SOC_DAPM_SINGLE("Switch", PM860X_ADC_EN_2, 0, 1, 0);
+
+/* AUX1 Switch */
+static const struct snd_kcontrol_new aux1_switch_controls =
+ SOC_DAPM_SINGLE("Switch", PM860X_ANA_TO_ANA, 4, 1, 0);
+
+/* AUX2 Switch */
+static const struct snd_kcontrol_new aux2_switch_controls =
+ SOC_DAPM_SINGLE("Switch", PM860X_ANA_TO_ANA, 5, 1, 0);
+
+/* Left Ex. PA Switch */
+static const struct snd_kcontrol_new lepa_switch_controls =
+ SOC_DAPM_SINGLE("Switch", PM860X_DAC_EN_2, 2, 1, 0);
+
+/* Right Ex. PA Switch */
+static const struct snd_kcontrol_new repa_switch_controls =
+ SOC_DAPM_SINGLE("Switch", PM860X_DAC_EN_2, 1, 1, 0);
+
+/* PCM Mux / Mux7 */
+static const char *aif1_text[] = {
+ "PCM L", "PCM R",
+};
+
+static const struct soc_enum aif1_enum =
+ SOC_ENUM_SINGLE(PM860X_PCM_IFACE_3, 6, 2, aif1_text);
+
+static const struct snd_kcontrol_new aif1_mux =
+ SOC_DAPM_ENUM("PCM Mux", aif1_enum);
+
+/* I2S Mux / Mux9 */
+static const char *i2s_din_text[] = {
+ "DIN", "DIN1",
+};
+
+static const struct soc_enum i2s_din_enum =
+ SOC_ENUM_SINGLE(PM860X_I2S_IFACE_3, 1, 2, i2s_din_text);
+
+static const struct snd_kcontrol_new i2s_din_mux =
+ SOC_DAPM_ENUM("I2S DIN Mux", i2s_din_enum);
+
+/* I2S Mic Mux / Mux8 */
+static const char *i2s_mic_text[] = {
+ "Ex PA", "ADC",
+};
+
+static const struct soc_enum i2s_mic_enum =
+ SOC_ENUM_SINGLE(PM860X_I2S_IFACE_3, 4, 2, i2s_mic_text);
+
+static const struct snd_kcontrol_new i2s_mic_mux =
+ SOC_DAPM_ENUM("I2S Mic Mux", i2s_mic_enum);
+
+/* ADCL Mux / Mux2 */
+static const char *adcl_text[] = {
+ "ADCR", "ADCL",
+};
+
+static const struct soc_enum adcl_enum =
+ SOC_ENUM_SINGLE(PM860X_PCM_IFACE_3, 4, 2, adcl_text);
+
+static const struct snd_kcontrol_new adcl_mux =
+ SOC_DAPM_ENUM("ADC Left Mux", adcl_enum);
+
+/* ADCR Mux / Mux3 */
+static const char *adcr_text[] = {
+ "ADCL", "ADCR",
+};
+
+static const struct soc_enum adcr_enum =
+ SOC_ENUM_SINGLE(PM860X_PCM_IFACE_3, 2, 2, adcr_text);
+
+static const struct snd_kcontrol_new adcr_mux =
+ SOC_DAPM_ENUM("ADC Right Mux", adcr_enum);
+
+/* ADCR EC Mux / Mux6 */
+static const char *adcr_ec_text[] = {
+ "ADCR", "EC",
+};
+
+static const struct soc_enum adcr_ec_enum =
+ SOC_ENUM_SINGLE(PM860X_ADC_EN_2, 3, 2, adcr_ec_text);
+
+static const struct snd_kcontrol_new adcr_ec_mux =
+ SOC_DAPM_ENUM("ADCR EC Mux", adcr_ec_enum);
+
+/* EC Mux / Mux4 */
+static const char *ec_text[] = {
+ "Left", "Right", "Left + Right",
+};
+
+static const struct soc_enum ec_enum =
+ SOC_ENUM_SINGLE(PM860X_EC_PATH, 1, 3, ec_text);
+
+static const struct snd_kcontrol_new ec_mux =
+ SOC_DAPM_ENUM("EC Mux", ec_enum);
+
+static const char *dac_text[] = {
+ "No input", "Right", "Left", "No input",
+};
+
+/* DAC Headset 1 Mux / Mux10 */
+static const struct soc_enum dac_hs1_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_INPUT_SEL_1, 0, 4, dac_text);
+
+static const struct snd_kcontrol_new dac_hs1_mux =
+ SOC_DAPM_ENUM("DAC HS1 Mux", dac_hs1_enum);
+
+/* DAC Headset 2 Mux / Mux11 */
+static const struct soc_enum dac_hs2_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_INPUT_SEL_1, 2, 4, dac_text);
+
+static const struct snd_kcontrol_new dac_hs2_mux =
+ SOC_DAPM_ENUM("DAC HS2 Mux", dac_hs2_enum);
+
+/* DAC Lineout 1 Mux / Mux12 */
+static const struct soc_enum dac_lo1_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_INPUT_SEL_1, 4, 4, dac_text);
+
+static const struct snd_kcontrol_new dac_lo1_mux =
+ SOC_DAPM_ENUM("DAC LO1 Mux", dac_lo1_enum);
+
+/* DAC Lineout 2 Mux / Mux13 */
+static const struct soc_enum dac_lo2_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_INPUT_SEL_1, 6, 4, dac_text);
+
+static const struct snd_kcontrol_new dac_lo2_mux =
+ SOC_DAPM_ENUM("DAC LO2 Mux", dac_lo2_enum);
+
+/* DAC Spearker Earphone Mux / Mux14 */
+static const struct soc_enum dac_spk_ear_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_INPUT_SEL_2, 0, 4, dac_text);
+
+static const struct snd_kcontrol_new dac_spk_ear_mux =
+ SOC_DAPM_ENUM("DAC SP Mux", dac_spk_ear_enum);
+
+/* Headset 1 Mux / Mux15 */
+static const char *in_text[] = {
+ "Digital", "Analog",
+};
+
+static const struct soc_enum hs1_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_TO_ANA, 0, 2, in_text);
+
+static const struct snd_kcontrol_new hs1_mux =
+ SOC_DAPM_ENUM("Headset1 Mux", hs1_enum);
+
+/* Headset 2 Mux / Mux16 */
+static const struct soc_enum hs2_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_TO_ANA, 1, 2, in_text);
+
+static const struct snd_kcontrol_new hs2_mux =
+ SOC_DAPM_ENUM("Headset2 Mux", hs2_enum);
+
+/* Lineout 1 Mux / Mux17 */
+static const struct soc_enum lo1_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_TO_ANA, 2, 2, in_text);
+
+static const struct snd_kcontrol_new lo1_mux =
+ SOC_DAPM_ENUM("Lineout1 Mux", lo1_enum);
+
+/* Lineout 2 Mux / Mux18 */
+static const struct soc_enum lo2_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_TO_ANA, 3, 2, in_text);
+
+static const struct snd_kcontrol_new lo2_mux =
+ SOC_DAPM_ENUM("Lineout2 Mux", lo2_enum);
+
+/* Speaker Earpiece Demux */
+static const char *spk_text[] = {
+ "Earpiece", "Speaker",
+};
+
+static const struct soc_enum spk_enum =
+ SOC_ENUM_SINGLE(PM860X_ANA_TO_ANA, 6, 2, spk_text);
+
+static const struct snd_kcontrol_new spk_demux =
+ SOC_DAPM_ENUM("Speaker Earpiece Demux", spk_enum);
+
+/* MIC Mux / Mux1 */
+static const char *mic_text[] = {
+ "Mic 1", "Mic 2",
+};
+
+static const struct soc_enum mic_enum =
+ SOC_ENUM_SINGLE(PM860X_ADC_ANA_4, 4, 2, mic_text);
+
+static const struct snd_kcontrol_new mic_mux =
+ SOC_DAPM_ENUM("MIC Mux", mic_enum);
+
+static const struct snd_soc_dapm_widget pm860x_dapm_widgets[] = {
+ SND_SOC_DAPM_AIF_IN("PCM SDI", "PCM Playback", 0,
+ PM860X_ADC_EN_2, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("PCM SDO", "PCM Capture", 0,
+ PM860X_PCM_IFACE_3, 1, 1),
+
+
+ SND_SOC_DAPM_AIF_IN("I2S DIN", "I2S Playback", 0,
+ PM860X_DAC_EN_2, 0, 0),
+ SND_SOC_DAPM_AIF_IN("I2S DIN1", "I2S Playback", 0,
+ PM860X_DAC_EN_2, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("I2S DOUT", "I2S Capture", 0,
+ PM860X_I2S_IFACE_3, 5, 1),
+ SND_SOC_DAPM_MUX("I2S Mic Mux", SND_SOC_NOPM, 0, 0, &i2s_mic_mux),
+ SND_SOC_DAPM_MUX("ADC Left Mux", SND_SOC_NOPM, 0, 0, &adcl_mux),
+ SND_SOC_DAPM_MUX("ADC Right Mux", SND_SOC_NOPM, 0, 0, &adcr_mux),
+ SND_SOC_DAPM_MUX("EC Mux", SND_SOC_NOPM, 0, 0, &ec_mux),
+ SND_SOC_DAPM_MUX("ADCR EC Mux", SND_SOC_NOPM, 0, 0, &adcr_ec_mux),
+ SND_SOC_DAPM_SWITCH("Left EPA", SND_SOC_NOPM, 0, 0,
+ &lepa_switch_controls),
+ SND_SOC_DAPM_SWITCH("Right EPA", SND_SOC_NOPM, 0, 0,
+ &repa_switch_controls),
+
+ SND_SOC_DAPM_REG(snd_soc_dapm_supply, "Left ADC MOD", PM860X_ADC_EN_1,
+ 0, 1, 1, 0),
+ SND_SOC_DAPM_REG(snd_soc_dapm_supply, "Right ADC MOD", PM860X_ADC_EN_1,
+ 1, 1, 1, 0),
+ SND_SOC_DAPM_ADC("Left ADC", NULL, PM860X_ADC_EN_2, 5, 0),
+ SND_SOC_DAPM_ADC("Right ADC", NULL, PM860X_ADC_EN_2, 4, 0),
+
+ SND_SOC_DAPM_SWITCH("AUX1 Switch", SND_SOC_NOPM, 0, 0,
+ &aux1_switch_controls),
+ SND_SOC_DAPM_SWITCH("AUX2 Switch", SND_SOC_NOPM, 0, 0,
+ &aux2_switch_controls),
+
+ SND_SOC_DAPM_MUX("MIC Mux", SND_SOC_NOPM, 0, 0, &mic_mux),
+ SND_SOC_DAPM_MICBIAS("Mic1 Bias", PM860X_ADC_ANA_1, 2, 0),
+ SND_SOC_DAPM_MICBIAS("Mic3 Bias", PM860X_ADC_ANA_1, 7, 0),
+ SND_SOC_DAPM_PGA("MIC1 Volume", PM860X_ADC_EN_1, 2, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("MIC3 Volume", PM860X_ADC_EN_1, 3, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("AUX1 Volume", PM860X_ADC_EN_1, 4, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("AUX2 Volume", PM860X_ADC_EN_1, 5, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Sidetone PGA", PM860X_ADC_EN_2, 1, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Lofi PGA", PM860X_ADC_EN_2, 2, 0, NULL, 0),
+
+ SND_SOC_DAPM_INPUT("AUX1"),
+ SND_SOC_DAPM_INPUT("AUX2"),
+ SND_SOC_DAPM_INPUT("MIC1P"),
+ SND_SOC_DAPM_INPUT("MIC1N"),
+ SND_SOC_DAPM_INPUT("MIC2P"),
+ SND_SOC_DAPM_INPUT("MIC2N"),
+ SND_SOC_DAPM_INPUT("MIC3P"),
+ SND_SOC_DAPM_INPUT("MIC3N"),
+
+ SND_SOC_DAPM_DAC_E("Left DAC", NULL, SND_SOC_NOPM, 0, 0,
+ pm860x_dac_event,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
+ SND_SOC_DAPM_DAC_E("Right DAC", NULL, SND_SOC_NOPM, 0, 0,
+ pm860x_dac_event,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD),
+
+ SND_SOC_DAPM_MUX("I2S DIN Mux", SND_SOC_NOPM, 0, 0, &i2s_din_mux),
+ SND_SOC_DAPM_MUX("DAC HS1 Mux", SND_SOC_NOPM, 0, 0, &dac_hs1_mux),
+ SND_SOC_DAPM_MUX("DAC HS2 Mux", SND_SOC_NOPM, 0, 0, &dac_hs2_mux),
+ SND_SOC_DAPM_MUX("DAC LO1 Mux", SND_SOC_NOPM, 0, 0, &dac_lo1_mux),
+ SND_SOC_DAPM_MUX("DAC LO2 Mux", SND_SOC_NOPM, 0, 0, &dac_lo2_mux),
+ SND_SOC_DAPM_MUX("DAC SP Mux", SND_SOC_NOPM, 0, 0, &dac_spk_ear_mux),
+ SND_SOC_DAPM_MUX("Headset1 Mux", SND_SOC_NOPM, 0, 0, &hs1_mux),
+ SND_SOC_DAPM_MUX("Headset2 Mux", SND_SOC_NOPM, 0, 0, &hs2_mux),
+ SND_SOC_DAPM_MUX("Lineout1 Mux", SND_SOC_NOPM, 0, 0, &lo1_mux),
+ SND_SOC_DAPM_MUX("Lineout2 Mux", SND_SOC_NOPM, 0, 0, &lo2_mux),
+ SND_SOC_DAPM_MUX("Speaker Earpiece Demux", SND_SOC_NOPM, 0, 0,
+ &spk_demux),
+
+
+ SND_SOC_DAPM_PGA("Headset1 PGA", PM860X_DAC_EN_1, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Headset2 PGA", PM860X_DAC_EN_1, 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUTPUT("HS1"),
+ SND_SOC_DAPM_OUTPUT("HS2"),
+ SND_SOC_DAPM_PGA("Lineout1 PGA", PM860X_DAC_EN_1, 2, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Lineout2 PGA", PM860X_DAC_EN_1, 3, 0, NULL, 0),
+ SND_SOC_DAPM_OUTPUT("LINEOUT1"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT2"),
+ SND_SOC_DAPM_PGA("Earpiece PGA", PM860X_DAC_EN_1, 4, 0, NULL, 0),
+ SND_SOC_DAPM_OUTPUT("EARP"),
+ SND_SOC_DAPM_OUTPUT("EARN"),
+ SND_SOC_DAPM_PGA("Speaker PGA", PM860X_DAC_EN_1, 5, 0, NULL, 0),
+ SND_SOC_DAPM_OUTPUT("LSP"),
+ SND_SOC_DAPM_OUTPUT("LSN"),
+ SND_SOC_DAPM_REG(snd_soc_dapm_supply, "VCODEC", PM860X_AUDIO_SUPPLIES_2,
+ 0, SUPPLY_MASK, SUPPLY_MASK, 0),
+
+ PM860X_DAPM_OUTPUT("RSYNC", pm860x_rsync_event),
+};
+
+static const struct snd_soc_dapm_route audio_map[] = {
+ /* supply */
+ {"Left DAC", NULL, "VCODEC"},
+ {"Right DAC", NULL, "VCODEC"},
+ {"Left ADC", NULL, "VCODEC"},
+ {"Right ADC", NULL, "VCODEC"},
+ {"Left ADC", NULL, "Left ADC MOD"},
+ {"Right ADC", NULL, "Right ADC MOD"},
+
+ /* PCM/AIF1 Inputs */
+ {"PCM SDO", NULL, "ADC Left Mux"},
+ {"PCM SDO", NULL, "ADCR EC Mux"},
+
+ /* PCM/AFI2 Outputs */
+ {"Lofi PGA", NULL, "PCM SDI"},
+ {"Lofi PGA", NULL, "Sidetone PGA"},
+ {"Left DAC", NULL, "Lofi PGA"},
+ {"Right DAC", NULL, "Lofi PGA"},
+
+ /* I2S/AIF2 Inputs */
+ {"MIC Mux", "Mic 1", "MIC1P"},
+ {"MIC Mux", "Mic 1", "MIC1N"},
+ {"MIC Mux", "Mic 2", "MIC2P"},
+ {"MIC Mux", "Mic 2", "MIC2N"},
+ {"MIC1 Volume", NULL, "MIC Mux"},
+ {"MIC3 Volume", NULL, "MIC3P"},
+ {"MIC3 Volume", NULL, "MIC3N"},
+ {"Left ADC", NULL, "MIC1 Volume"},
+ {"Right ADC", NULL, "MIC3 Volume"},
+ {"ADC Left Mux", "ADCR", "Right ADC"},
+ {"ADC Left Mux", "ADCL", "Left ADC"},
+ {"ADC Right Mux", "ADCL", "Left ADC"},
+ {"ADC Right Mux", "ADCR", "Right ADC"},
+ {"Left EPA", "Switch", "Left DAC"},
+ {"Right EPA", "Switch", "Right DAC"},
+ {"EC Mux", "Left", "Left DAC"},
+ {"EC Mux", "Right", "Right DAC"},
+ {"EC Mux", "Left + Right", "Left DAC"},
+ {"EC Mux", "Left + Right", "Right DAC"},
+ {"ADCR EC Mux", "ADCR", "ADC Right Mux"},
+ {"ADCR EC Mux", "EC", "EC Mux"},
+ {"I2S Mic Mux", "Ex PA", "Left EPA"},
+ {"I2S Mic Mux", "Ex PA", "Right EPA"},
+ {"I2S Mic Mux", "ADC", "ADC Left Mux"},
+ {"I2S Mic Mux", "ADC", "ADCR EC Mux"},
+ {"I2S DOUT", NULL, "I2S Mic Mux"},
+
+ /* I2S/AIF2 Outputs */
+ {"I2S DIN Mux", "DIN", "I2S DIN"},
+ {"I2S DIN Mux", "DIN1", "I2S DIN1"},
+ {"Left DAC", NULL, "I2S DIN Mux"},
+ {"Right DAC", NULL, "I2S DIN Mux"},
+ {"DAC HS1 Mux", "Left", "Left DAC"},
+ {"DAC HS1 Mux", "Right", "Right DAC"},
+ {"DAC HS2 Mux", "Left", "Left DAC"},
+ {"DAC HS2 Mux", "Right", "Right DAC"},
+ {"DAC LO1 Mux", "Left", "Left DAC"},
+ {"DAC LO1 Mux", "Right", "Right DAC"},
+ {"DAC LO2 Mux", "Left", "Left DAC"},
+ {"DAC LO2 Mux", "Right", "Right DAC"},
+ {"Headset1 Mux", "Digital", "DAC HS1 Mux"},
+ {"Headset2 Mux", "Digital", "DAC HS2 Mux"},
+ {"Lineout1 Mux", "Digital", "DAC LO1 Mux"},
+ {"Lineout2 Mux", "Digital", "DAC LO2 Mux"},
+ {"Headset1 PGA", NULL, "Headset1 Mux"},
+ {"Headset2 PGA", NULL, "Headset2 Mux"},
+ {"Lineout1 PGA", NULL, "Lineout1 Mux"},
+ {"Lineout2 PGA", NULL, "Lineout2 Mux"},
+ {"DAC SP Mux", "Left", "Left DAC"},
+ {"DAC SP Mux", "Right", "Right DAC"},
+ {"Speaker Earpiece Demux", "Speaker", "DAC SP Mux"},
+ {"Speaker PGA", NULL, "Speaker Earpiece Demux"},
+ {"Earpiece PGA", NULL, "Speaker Earpiece Demux"},
+
+ {"RSYNC", NULL, "Headset1 PGA"},
+ {"RSYNC", NULL, "Headset2 PGA"},
+ {"RSYNC", NULL, "Lineout1 PGA"},
+ {"RSYNC", NULL, "Lineout2 PGA"},
+ {"RSYNC", NULL, "Speaker PGA"},
+ {"RSYNC", NULL, "Speaker PGA"},
+ {"RSYNC", NULL, "Earpiece PGA"},
+ {"RSYNC", NULL, "Earpiece PGA"},
+
+ {"HS1", NULL, "RSYNC"},
+ {"HS2", NULL, "RSYNC"},
+ {"LINEOUT1", NULL, "RSYNC"},
+ {"LINEOUT2", NULL, "RSYNC"},
+ {"LSP", NULL, "RSYNC"},
+ {"LSN", NULL, "RSYNC"},
+ {"EARP", NULL, "RSYNC"},
+ {"EARN", NULL, "RSYNC"},
+};
+
+/*
+ * Use MUTE_LEFT & MUTE_RIGHT to implement digital mute.
+ * These bits can also be used to mute.
+ */
+static int pm860x_digital_mute(struct snd_soc_dai *codec_dai, int mute)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ int data = 0, mask = MUTE_LEFT | MUTE_RIGHT;
+
+ if (mute)
+ data = mask;
+ snd_soc_update_bits(codec, PM860X_DAC_OFFSET, mask, data);
+ snd_soc_update_bits(codec, PM860X_EAR_CTRL_2,
+ RSYNC_CHANGE, RSYNC_CHANGE);
+ return 0;
+}
+
+static int pm860x_pcm_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_codec *codec = dai->codec;
+ unsigned char inf = 0, mask = 0;
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S16_LE:
+ inf &= ~PCM_INF2_18WL;
+ break;
+ case SNDRV_PCM_FORMAT_S18_3LE:
+ inf |= PCM_INF2_18WL;
+ break;
+ default:
+ return -EINVAL;
+ }
+ mask |= PCM_INF2_18WL;
+ snd_soc_update_bits(codec, PM860X_PCM_IFACE_2, mask, inf);
+
+ /* sample rate */
+ switch (params_rate(params)) {
+ case 8000:
+ inf = 0;
+ break;
+ case 16000:
+ inf = 3;
+ break;
+ case 32000:
+ inf = 6;
+ break;
+ case 48000:
+ inf = 8;
+ break;
+ default:
+ return -EINVAL;
+ }
+ snd_soc_update_bits(codec, PM860X_PCM_RATE, 0x0f, inf);
+
+ return 0;
+}
+
+static int pm860x_pcm_set_dai_fmt(struct snd_soc_dai *codec_dai,
+ unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+ unsigned char inf = 0, mask = 0;
+ int ret = -EINVAL;
+
+ mask |= PCM_INF2_BCLK | PCM_INF2_FS | PCM_INF2_MASTER;
+
+ /* set master/slave audio interface */
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBM_CFM:
+ case SND_SOC_DAIFMT_CBM_CFS:
+ if (pm860x->dir == PM860X_CLK_DIR_OUT) {
+ inf |= PCM_INF2_MASTER;
+ ret = 0;
+ }
+ break;
+ case SND_SOC_DAIFMT_CBS_CFS:
+ if (pm860x->dir == PM860X_CLK_DIR_IN) {
+ inf &= ~PCM_INF2_MASTER;
+ ret = 0;
+ }
+ break;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ inf |= PCM_EXACT_I2S;
+ ret = 0;
+ break;
+ }
+ mask |= PCM_MODE_MASK;
+ if (ret)
+ return ret;
+ snd_soc_update_bits(codec, PM860X_PCM_IFACE_2, mask, inf);
+ return 0;
+}
+
+static int pm860x_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 pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+
+ if (dir == PM860X_CLK_DIR_OUT)
+ pm860x->dir = PM860X_CLK_DIR_OUT;
+ else {
+ pm860x->dir = PM860X_CLK_DIR_IN;
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int pm860x_i2s_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_codec *codec = dai->codec;
+ unsigned char inf;
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S16_LE:
+ inf = 0;
+ break;
+ case SNDRV_PCM_FORMAT_S18_3LE:
+ inf = PCM_INF2_18WL;
+ break;
+ default:
+ return -EINVAL;
+ }
+ snd_soc_update_bits(codec, PM860X_I2S_IFACE_2, PCM_INF2_18WL, inf);
+
+ /* sample rate */
+ switch (params_rate(params)) {
+ case 8000:
+ inf = 0;
+ break;
+ case 11025:
+ inf = 1;
+ break;
+ case 16000:
+ inf = 3;
+ break;
+ case 22050:
+ inf = 4;
+ break;
+ case 32000:
+ inf = 6;
+ break;
+ case 44100:
+ inf = 7;
+ break;
+ case 48000:
+ inf = 8;
+ break;
+ default:
+ return -EINVAL;
+ }
+ snd_soc_update_bits(codec, PM860X_I2S_IFACE_4, 0xf, inf);
+
+ return 0;
+}
+
+static int pm860x_i2s_set_dai_fmt(struct snd_soc_dai *codec_dai,
+ unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+ unsigned char inf = 0, mask = 0;
+
+ mask |= PCM_INF2_BCLK | PCM_INF2_FS | PCM_INF2_MASTER;
+
+ /* set master/slave audio interface */
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBM_CFM:
+ if (pm860x->dir == PM860X_CLK_DIR_OUT)
+ inf |= PCM_INF2_MASTER;
+ else
+ return -EINVAL;
+ break;
+ case SND_SOC_DAIFMT_CBS_CFS:
+ if (pm860x->dir == PM860X_CLK_DIR_IN)
+ inf &= ~PCM_INF2_MASTER;
+ else
+ return -EINVAL;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ inf |= PCM_EXACT_I2S;
+ break;
+ default:
+ return -EINVAL;
+ }
+ mask |= PCM_MODE_MASK;
+ snd_soc_update_bits(codec, PM860X_I2S_IFACE_2, mask, inf);
+ return 0;
+}
+
+static int pm860x_set_bias_level(struct snd_soc_codec *codec,
+ enum snd_soc_bias_level level)
+{
+ int data;
+
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ break;
+
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ if (codec->bias_level == SND_SOC_BIAS_OFF) {
+ /* Enable Audio PLL & Audio section */
+ data = AUDIO_PLL | AUDIO_SECTION_RESET
+ | AUDIO_SECTION_ON;
+ pm860x_reg_write(codec->control_data, REG_MISC2, data);
+ }
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ data = AUDIO_PLL | AUDIO_SECTION_RESET | AUDIO_SECTION_ON;
+ pm860x_set_bits(codec->control_data, REG_MISC2, data, 0);
+ break;
+ }
+ codec->bias_level = level;
+ return 0;
+}
+
+static struct snd_soc_dai_ops pm860x_pcm_dai_ops = {
+ .digital_mute = pm860x_digital_mute,
+ .hw_params = pm860x_pcm_hw_params,
+ .set_fmt = pm860x_pcm_set_dai_fmt,
+ .set_sysclk = pm860x_set_dai_sysclk,
+};
+
+static struct snd_soc_dai_ops pm860x_i2s_dai_ops = {
+ .digital_mute = pm860x_digital_mute,
+ .hw_params = pm860x_i2s_hw_params,
+ .set_fmt = pm860x_i2s_set_dai_fmt,
+ .set_sysclk = pm860x_set_dai_sysclk,
+};
+
+#define PM860X_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | \
+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000)
+
+static struct snd_soc_dai_driver pm860x_dai[] = {
+ {
+ /* DAI PCM */
+ .name = "88pm860x-pcm",
+ .id = 1,
+ .playback = {
+ .stream_name = "PCM Playback",
+ .channels_min = 2,
+ .channels_max = 2,
+ .rates = PM860X_RATES,
+ .formats = SNDRV_PCM_FORMAT_S16_LE | \
+ SNDRV_PCM_FORMAT_S18_3LE,
+ },
+ .capture = {
+ .stream_name = "PCM Capture",
+ .channels_min = 2,
+ .channels_max = 2,
+ .rates = PM860X_RATES,
+ .formats = SNDRV_PCM_FORMAT_S16_LE | \
+ SNDRV_PCM_FORMAT_S18_3LE,
+ },
+ .ops = &pm860x_pcm_dai_ops,
+ }, {
+ /* DAI I2S */
+ .name = "88pm860x-i2s",
+ .id = 2,
+ .playback = {
+ .stream_name = "I2S Playback",
+ .channels_min = 2,
+ .channels_max = 2,
+ .rates = SNDRV_PCM_RATE_8000_48000,
+ .formats = SNDRV_PCM_FORMAT_S16_LE | \
+ SNDRV_PCM_FORMAT_S18_3LE,
+ },
+ .capture = {
+ .stream_name = "I2S Capture",
+ .channels_min = 2,
+ .channels_max = 2,
+ .rates = SNDRV_PCM_RATE_8000_48000,
+ .formats = SNDRV_PCM_FORMAT_S16_LE | \
+ SNDRV_PCM_FORMAT_S18_3LE,
+ },
+ .ops = &pm860x_i2s_dai_ops,
+ },
+};
+
+static irqreturn_t pm860x_codec_handler(int irq, void *data)
+{
+ struct pm860x_priv *pm860x = data;
+ int status, shrt, report = 0, mic_report = 0;
+ int mask;
+
+ status = pm860x_reg_read(pm860x->i2c, REG_STATUS_1);
+ shrt = pm860x_reg_read(pm860x->i2c, REG_SHORTS);
+ mask = pm860x->det.hs_shrt | pm860x->det.hook_det | pm860x->det.lo_shrt
+ | pm860x->det.hp_det;
+
+ if ((pm860x->det.hp_det & SND_JACK_HEADPHONE)
+ && (status & HEADSET_STATUS))
+ report |= SND_JACK_HEADPHONE;
+
+ if ((pm860x->det.mic_det & SND_JACK_MICROPHONE)
+ && (status & MIC_STATUS))
+ mic_report |= SND_JACK_MICROPHONE;
+
+ if (pm860x->det.hs_shrt && (shrt & (SHORT_HS1 | SHORT_HS2)))
+ report |= pm860x->det.hs_shrt;
+
+ if (pm860x->det.hook_det && (status & HOOK_STATUS))
+ report |= pm860x->det.hook_det;
+
+ if (pm860x->det.lo_shrt && (shrt & (SHORT_LO1 | SHORT_LO2)))
+ report |= pm860x->det.lo_shrt;
+
+ if (report)
+ snd_soc_jack_report(pm860x->det.hp_jack, report, mask);
+ if (mic_report)
+ snd_soc_jack_report(pm860x->det.mic_jack, SND_JACK_MICROPHONE,
+ SND_JACK_MICROPHONE);
+
+ dev_dbg(pm860x->codec->dev, "headphone report:0x%x, mask:%x\n",
+ report, mask);
+ dev_dbg(pm860x->codec->dev, "microphone report:0x%x\n", mic_report);
+ return IRQ_HANDLED;
+}
+
+int pm860x_hs_jack_detect(struct snd_soc_codec *codec,
+ struct snd_soc_jack *jack,
+ int det, int hook, int hs_shrt, int lo_shrt)
+{
+ struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+ int data;
+
+ pm860x->det.hp_jack = jack;
+ pm860x->det.hp_det = det;
+ pm860x->det.hook_det = hook;
+ pm860x->det.hs_shrt = hs_shrt;
+ pm860x->det.lo_shrt = lo_shrt;
+
+ if (det & SND_JACK_HEADPHONE)
+ pm860x_set_bits(codec->control_data, REG_HS_DET,
+ EN_HS_DET, EN_HS_DET);
+ /* headset short detect */
+ if (hs_shrt) {
+ data = CLR_SHORT_HS2 | CLR_SHORT_HS1;
+ pm860x_set_bits(codec->control_data, REG_SHORTS, data, data);
+ }
+ /* Lineout short detect */
+ if (lo_shrt) {
+ data = CLR_SHORT_LO2 | CLR_SHORT_LO1;
+ pm860x_set_bits(codec->control_data, REG_SHORTS, data, data);
+ }
+
+ /* sync status */
+ pm860x_codec_handler(0, pm860x);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(pm860x_hs_jack_detect);
+
+int pm860x_mic_jack_detect(struct snd_soc_codec *codec,
+ struct snd_soc_jack *jack, int det)
+{
+ struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+
+ pm860x->det.mic_jack = jack;
+ pm860x->det.mic_det = det;
+
+ if (det & SND_JACK_MICROPHONE)
+ pm860x_set_bits(codec->control_data, REG_MIC_DET,
+ MICDET_MASK, MICDET_MASK);
+
+ /* sync status */
+ pm860x_codec_handler(0, pm860x);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(pm860x_mic_jack_detect);
+
+static int pm860x_probe(struct snd_soc_codec *codec)
+{
+ struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+ int i, ret;
+
+ pm860x->codec = codec;
+
+ codec->control_data = pm860x->i2c;
+
+ for (i = 0; i < 4; i++) {
+ ret = request_threaded_irq(pm860x->irq[i], NULL,
+ pm860x_codec_handler, IRQF_ONESHOT,
+ pm860x->name[i], pm860x);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to request IRQ!\n");
+ goto out_irq;
+ }
+ }
+
+ pm860x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+
+ ret = pm860x_bulk_read(codec->control_data, REG_CACHE_BASE,
+ REG_CACHE_SIZE, codec->reg_cache);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to fill register cache: %d\n",
+ ret);
+ goto out_codec;
+ }
+
+ snd_soc_add_controls(codec, pm860x_snd_controls,
+ ARRAY_SIZE(pm860x_snd_controls));
+ snd_soc_dapm_new_controls(codec, pm860x_dapm_widgets,
+ ARRAY_SIZE(pm860x_dapm_widgets));
+ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
+ return 0;
+
+out_codec:
+ i = 3;
+out_irq:
+ for (; i >= 0; i--)
+ free_irq(pm860x->irq[i], pm860x);
+ return -EINVAL;
+}
+
+static int pm860x_remove(struct snd_soc_codec *codec)
+{
+ struct pm860x_priv *pm860x = snd_soc_codec_get_drvdata(codec);
+ int i;
+
+ for (i = 3; i >= 0; i--)
+ free_irq(pm860x->irq[i], pm860x);
+ pm860x_set_bias_level(codec, SND_SOC_BIAS_OFF);
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_pm860x = {
+ .probe = pm860x_probe,
+ .remove = pm860x_remove,
+ .read = pm860x_read_reg_cache,
+ .write = pm860x_write_reg_cache,
+ .reg_cache_size = REG_CACHE_SIZE,
+ .reg_word_size = sizeof(u8),
+ .set_bias_level = pm860x_set_bias_level,
+};
+
+static int __devinit pm860x_codec_probe(struct platform_device *pdev)
+{
+ struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent);
+ struct pm860x_priv *pm860x;
+ struct resource *res;
+ int i, ret;
+
+ pm860x = kzalloc(sizeof(struct pm860x_priv), GFP_KERNEL);
+ if (pm860x == NULL)
+ return -ENOMEM;
+
+ pm860x->chip = chip;
+ pm860x->i2c = (chip->id == CHIP_PM8607) ? chip->client
+ : chip->companion;
+ platform_set_drvdata(pdev, pm860x);
+
+ for (i = 0; i < 4; i++) {
+ res = platform_get_resource(pdev, IORESOURCE_IRQ, i);
+ if (!res) {
+ dev_err(&pdev->dev, "Failed to get IRQ resources\n");
+ goto out;
+ }
+ pm860x->irq[i] = res->start + chip->irq_base;
+ strncpy(pm860x->name[i], res->name, MAX_NAME_LEN);
+ }
+
+ ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_pm860x,
+ pm860x_dai, ARRAY_SIZE(pm860x_dai));
+ if (ret) {
+ dev_err(&pdev->dev, "Failed to register codec\n");
+ goto out;
+ }
+ return ret;
+
+out:
+ platform_set_drvdata(pdev, NULL);
+ kfree(pm860x);
+ return -EINVAL;
+}
+
+static int __devexit pm860x_codec_remove(struct platform_device *pdev)
+{
+ struct pm860x_priv *pm860x = platform_get_drvdata(pdev);
+
+ snd_soc_unregister_codec(&pdev->dev);
+ platform_set_drvdata(pdev, NULL);
+ kfree(pm860x);
+ return 0;
+}
+
+static struct platform_driver pm860x_codec_driver = {
+ .driver = {
+ .name = "88pm860x-codec",
+ .owner = THIS_MODULE,
+ },
+ .probe = pm860x_codec_probe,
+ .remove = __devexit_p(pm860x_codec_remove),
+};
+
+static __init int pm860x_init(void)
+{
+ return platform_driver_register(&pm860x_codec_driver);
+}
+module_init(pm860x_init);
+
+static __exit void pm860x_exit(void)
+{
+ platform_driver_unregister(&pm860x_codec_driver);
+}
+module_exit(pm860x_exit);
+
+MODULE_DESCRIPTION("ASoC 88PM860x driver");
+MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:88pm860x-codec");
+
diff --git a/sound/soc/codecs/88pm860x-codec.h b/sound/soc/codecs/88pm860x-codec.h
new file mode 100644
index 0000000..3364ba4
--- /dev/null
+++ b/sound/soc/codecs/88pm860x-codec.h
@@ -0,0 +1,97 @@
+/*
+ * 88pm860x-codec.h -- 88PM860x ALSA SoC Audio Driver
+ *
+ * Copyright 2010 Marvell International Ltd.
+ * Haojian Zhuang <haojian.zhuang@marvell.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 __88PM860X_H
+#define __88PM860X_H
+
+/* The offset of these registers are 0xb0 */
+#define PM860X_PCM_IFACE_1 0x00
+#define PM860X_PCM_IFACE_2 0x01
+#define PM860X_PCM_IFACE_3 0x02
+#define PM860X_PCM_RATE 0x03
+#define PM860X_EC_PATH 0x04
+#define PM860X_SIDETONE_L_GAIN 0x05
+#define PM860X_SIDETONE_R_GAIN 0x06
+#define PM860X_SIDETONE_SHIFT 0x07
+#define PM860X_ADC_OFFSET_1 0x08
+#define PM860X_ADC_OFFSET_2 0x09
+#define PM860X_DMIC_DELAY 0x0a
+
+#define PM860X_I2S_IFACE_1 0x0b
+#define PM860X_I2S_IFACE_2 0x0c
+#define PM860X_I2S_IFACE_3 0x0d
+#define PM860X_I2S_IFACE_4 0x0e
+#define PM860X_EQUALIZER_N0_1 0x0f
+#define PM860X_EQUALIZER_N0_2 0x10
+#define PM860X_EQUALIZER_N1_1 0x11
+#define PM860X_EQUALIZER_N1_2 0x12
+#define PM860X_EQUALIZER_D1_1 0x13
+#define PM860X_EQUALIZER_D1_2 0x14
+#define PM860X_LOFI_GAIN_LEFT 0x15
+#define PM860X_LOFI_GAIN_RIGHT 0x16
+#define PM860X_HIFIL_GAIN_LEFT 0x17
+#define PM860X_HIFIL_GAIN_RIGHT 0x18
+#define PM860X_HIFIR_GAIN_LEFT 0x19
+#define PM860X_HIFIR_GAIN_RIGHT 0x1a
+#define PM860X_DAC_OFFSET 0x1b
+#define PM860X_OFFSET_LEFT_1 0x1c
+#define PM860X_OFFSET_LEFT_2 0x1d
+#define PM860X_OFFSET_RIGHT_1 0x1e
+#define PM860X_OFFSET_RIGHT_2 0x1f
+#define PM860X_ADC_ANA_1 0x20
+#define PM860X_ADC_ANA_2 0x21
+#define PM860X_ADC_ANA_3 0x22
+#define PM860X_ADC_ANA_4 0x23
+#define PM860X_ANA_TO_ANA 0x24
+#define PM860X_HS1_CTRL 0x25
+#define PM860X_HS2_CTRL 0x26
+#define PM860X_LO1_CTRL 0x27
+#define PM860X_LO2_CTRL 0x28
+#define PM860X_EAR_CTRL_1 0x29
+#define PM860X_EAR_CTRL_2 0x2a
+#define PM860X_AUDIO_SUPPLIES_1 0x2b
+#define PM860X_AUDIO_SUPPLIES_2 0x2c
+#define PM860X_ADC_EN_1 0x2d
+#define PM860X_ADC_EN_2 0x2e
+#define PM860X_DAC_EN_1 0x2f
+#define PM860X_DAC_EN_2 0x31
+#define PM860X_AUDIO_CAL_1 0x32
+#define PM860X_AUDIO_CAL_2 0x33
+#define PM860X_AUDIO_CAL_3 0x34
+#define PM860X_AUDIO_CAL_4 0x35
+#define PM860X_AUDIO_CAL_5 0x36
+#define PM860X_ANA_INPUT_SEL_1 0x37
+#define PM860X_ANA_INPUT_SEL_2 0x38
+
+#define PM860X_PCM_IFACE_4 0x39
+#define PM860X_I2S_IFACE_5 0x3a
+
+#define PM860X_SHORTS 0x3b
+#define PM860X_PLL_ADJ_1 0x3c
+#define PM860X_PLL_ADJ_2 0x3d
+
+/* bits definition */
+#define PM860X_CLK_DIR_IN 0
+#define PM860X_CLK_DIR_OUT 1
+
+#define PM860X_DET_HEADSET (1 << 0)
+#define PM860X_DET_MIC (1 << 1)
+#define PM860X_DET_HOOK (1 << 2)
+#define PM860X_SHORT_HEADSET (1 << 3)
+#define PM860X_SHORT_LINEOUT (1 << 4)
+#define PM860X_DET_MASK 0x1F
+
+extern int pm860x_hs_jack_detect(struct snd_soc_codec *, struct snd_soc_jack *,
+ int, int, int, int);
+extern int pm860x_mic_jack_detect(struct snd_soc_codec *, struct snd_soc_jack *,
+ int);
+
+#endif /* __88PM860X_H */
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 83f5c67..155c127 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -10,6 +10,7 @@ config SND_SOC_I2C_AND_SPI
config SND_SOC_ALL_CODECS
tristate "Build all ASoC CODEC drivers"
+ select SND_SOC_88PM860X if MFD_88PM860X
select SND_SOC_L3
select SND_SOC_AC97_CODEC if SND_SOC_AC97_BUS
select SND_SOC_AD1836 if SPI_MASTER
@@ -40,6 +41,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_TWL6040 if TWL4030_CORE
select SND_SOC_UDA134X
select SND_SOC_UDA1380 if I2C
+ select SND_SOC_WL1273 if WL1273_CORE
select SND_SOC_WM2000 if I2C
select SND_SOC_WM8350 if MFD_WM8350
select SND_SOC_WM8400 if MFD_WM8400
@@ -61,6 +63,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
@@ -84,6 +87,9 @@ config SND_SOC_ALL_CODECS
If unsure select "N".
+config SND_SOC_88PM860X
+ tristate
+
config SND_SOC_WM_HUBS
tristate
default y if SND_SOC_WM8993=y || SND_SOC_WM8994=y
@@ -188,6 +194,9 @@ config SND_SOC_UDA134X
config SND_SOC_UDA1380
tristate
+config SND_SOC_WL1273
+ tristate
+
config SND_SOC_WM8350
tristate
@@ -248,6 +257,9 @@ config SND_SOC_WM8960
config SND_SOC_WM8961
tristate
+config SND_SOC_WM8962
+ tristate
+
config SND_SOC_WM8971
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 5352409..10d468e 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -1,3 +1,4 @@
+snd-soc-88pm860x-objs := 88pm860x-codec.o
snd-soc-ac97-objs := ac97.o
snd-soc-ad1836-objs := ad1836.o
snd-soc-ad193x-objs := ad193x.o
@@ -26,6 +27,7 @@ snd-soc-twl4030-objs := twl4030.o
snd-soc-twl6040-objs := twl6040.o
snd-soc-uda134x-objs := uda134x.o
snd-soc-uda1380-objs := uda1380.o
+snd-soc-wl1273-objs := wl1273.o
snd-soc-wm8350-objs := wm8350.o
snd-soc-wm8400-objs := wm8400.o
snd-soc-wm8510-objs := wm8510.o
@@ -46,6 +48,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
@@ -66,6 +69,7 @@ snd-soc-tpa6130a2-objs := tpa6130a2.o
snd-soc-wm2000-objs := wm2000.o
snd-soc-wm9090-objs := wm9090.o
+obj-$(CONFIG_SND_SOC_88PM860X) += snd-soc-88pm860x.o
obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
obj-$(CONFIG_SND_SOC_AD1836) += snd-soc-ad1836.o
obj-$(CONFIG_SND_SOC_AD193X) += snd-soc-ad193x.o
@@ -95,6 +99,7 @@ obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o
obj-$(CONFIG_SND_SOC_TWL6040) += snd-soc-twl6040.o
obj-$(CONFIG_SND_SOC_UDA134X) += snd-soc-uda134x.o
obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
+obj-$(CONFIG_SND_SOC_WL1273) += snd-soc-wl1273.o
obj-$(CONFIG_SND_SOC_WM8350) += snd-soc-wm8350.o
obj-$(CONFIG_SND_SOC_WM8400) += snd-soc-wm8400.o
obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o
@@ -115,6 +120,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
diff --git a/sound/soc/codecs/ac97.c b/sound/soc/codecs/ac97.c
index 1f5e57a..12c87d3 100644
--- a/sound/soc/codecs/ac97.c
+++ b/sound/soc/codecs/ac97.c
@@ -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
index 281aa42..0000000
--- a/sound/soc/codecs/ac97.h
+++ /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
diff --git a/sound/soc/codecs/ad1836.c b/sound/soc/codecs/ad1836.c
index a01006c..d272534 100644
--- a/sound/soc/codecs/ad1836.c
+++ b/sound/soc/codecs/ad1836.c
@@ -33,15 +33,10 @@
/* 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)
{
diff --git a/sound/soc/codecs/ad1836.h b/sound/soc/codecs/ad1836.h
index e9d90d3..8455967 100644
--- a/sound/soc/codecs/ad1836.h
+++ b/sound/soc/codecs/ad1836.h
@@ -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
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
index 1def75e..fa2834c 100644
--- a/sound/soc/codecs/ad193x.c
+++ b/sound/soc/codecs/ad193x.c
@@ -24,9 +24,10 @@
/* 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),
diff --git a/sound/soc/codecs/ad193x.h b/sound/soc/codecs/ad193x.h
index 654ba64..9747b54 100644
--- a/sound/soc/codecs/ad193x.h
+++ b/sound/soc/codecs/ad193x.h
@@ -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
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c
index 70cfaec..81a4440 100644
--- a/sound/soc/codecs/ad1980.c
+++ b/sound/soc/codecs/ad1980.c
@@ -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");
diff --git a/sound/soc/codecs/ad1980.h b/sound/soc/codecs/ad1980.h
index 538f37c..eb0af44 100644
--- a/sound/soc/codecs/ad1980.h
+++ b/sound/soc/codecs/ad1980.h
@@ -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
diff --git a/sound/soc/codecs/ad73311.c b/sound/soc/codecs/ad73311.c
index 475807b..c53955f 100644
--- a/sound/soc/codecs/ad73311.c
+++ b/sound/soc/codecs/ad73311.c
@@ -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);
diff --git a/sound/soc/codecs/ad73311.h b/sound/soc/codecs/ad73311.h
index 569573d..4b353ee 100644
--- a/sound/soc/codecs/ad73311.h
+++ b/sound/soc/codecs/ad73311.h
@@ -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
diff --git a/sound/soc/codecs/ads117x.c b/sound/soc/codecs/ads117x.c
index f8e75ed..8402854 100644
--- a/sound/soc/codecs/ads117x.c
+++ b/sound/soc/codecs/ads117x.c
@@ -19,16 +19,12 @@
#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)
diff --git a/sound/soc/codecs/ads117x.h b/sound/soc/codecs/ads117x.h
index dbcf50e..3ce0286 100644
--- a/sound/soc/codecs/ads117x.h
+++ b/sound/soc/codecs/ads117x.h
@@ -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;
diff --git a/sound/soc/codecs/ak4104.c b/sound/soc/codecs/ak4104.c
index 192aebda..c27f8f5 100644
--- a/sound/soc/codecs/ak4104.c
+++ b/sound/soc/codecs/ak4104.c
@@ -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
@@ -45,11 +43,11 @@
#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
index eb88fe7..0000000
--- a/sound/soc/codecs/ak4104.h
+++ /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
diff --git a/sound/soc/codecs/ak4535.c b/sound/soc/codecs/ak4535.c
index d425367..cd88c8f 100644
--- a/sound/soc/codecs/ak4535.c
+++ b/sound/soc/codecs/ak4535.c
@@ -31,11 +31,11 @@
#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);
diff --git a/sound/soc/codecs/ak4535.h b/sound/soc/codecs/ak4535.h
index c7a5870..0431e5f 100644
--- a/sound/soc/codecs/ak4535.h
+++ b/sound/soc/codecs/ak4535.h
@@ -36,12 +36,4 @@
#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
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 3d7dc55..31b35e96 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -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
@@ -102,7 +100,6 @@
#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
index e476833..0000000
--- a/sound/soc/codecs/ak4642.h
+++ /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
diff --git a/sound/soc/codecs/ak4671.c b/sound/soc/codecs/ak4671.c
index 8756693..239f056 100644
--- a/sound/soc/codecs/ak4671.c
+++ b/sound/soc/codecs/ak4671.c
@@ -23,11 +23,11 @@
#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,
diff --git a/sound/soc/codecs/ak4671.h b/sound/soc/codecs/ak4671.h
index e2fad96..61cb7ab 100644
--- a/sound/soc/codecs/ak4671.h
+++ b/sound/soc/codecs/ak4671.h
@@ -150,7 +150,4 @@
/* 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
diff --git a/sound/soc/codecs/cq93vc.c b/sound/soc/codecs/cq93vc.c
index a320fb5..8236439 100644
--- a/sound/soc/codecs/cq93vc.c
+++ b/sound/soc/codecs/cq93vc.c
@@ -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
index 845b196..0000000
--- a/sound/soc/codecs/cq93vc.h
+++ /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
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
index 30d9492..6542dc0 100644
--- a/sound/soc/codecs/cs4270.c
+++ b/sound/soc/codecs/cs4270.c
@@ -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;
@@ -896,6 +704,95 @@ static int cs4270_soc_resume(struct platform_device *pdev)
#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
*
* This structure tells the I2C subsystem how to identify and support a
@@ -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
index adc6cd9..0000000
--- a/sound/soc/codecs/cs4270.h
+++ /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
diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c
index dd9b855..8a25743 100644
--- a/sound/soc/codecs/cs42l51.c
+++ b/sound/soc/codecs/cs42l51.c
@@ -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)
{
diff --git a/sound/soc/codecs/cs42l51.h b/sound/soc/codecs/cs42l51.h
index 8f0bd97..2beeb17 100644
--- a/sound/soc/codecs/cs42l51.h
+++ b/sound/soc/codecs/cs42l51.h
@@ -158,6 +158,4 @@
#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
diff --git a/sound/soc/codecs/cx20442.c b/sound/soc/codecs/cx20442.c
index f07a415..e8d27c8 100644
--- a/sound/soc/codecs/cx20442.c
+++ b/sound/soc/codecs/cx20442.c
@@ -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-voice",
.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");
diff --git a/sound/soc/codecs/cx20442.h b/sound/soc/codecs/cx20442.h
index 688a5eb..c7a7c79 100644
--- a/sound/soc/codecs/cx20442.h
+++ b/sound/soc/codecs/cx20442.h
@@ -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
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c
index 3c51d6a..eabf3c0 100644
--- a/sound/soc/codecs/da7210.c
+++ b/sound/soc/codecs/da7210.c
@@ -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
index 390d621..0000000
--- a/sound/soc/codecs/da7210.h
+++ /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
-
diff --git a/sound/soc/codecs/jz4740.c b/sound/soc/codecs/jz4740.c
index 66557de..16253ec 100644
--- a/sound/soc/codecs/jz4740.c
+++ b/sound/soc/codecs/jz4740.c
@@ -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
index b5a0691..0000000
--- a/sound/soc/codecs/jz4740.h
+++ /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
diff --git a/sound/soc/codecs/pcm3008.c b/sound/soc/codecs/pcm3008.c
index 5a5f187..bd8f26e 100644
--- a/sound/soc/codecs/pcm3008.c
+++ b/sound/soc/codecs/pcm3008.c
@@ -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);
diff --git a/sound/soc/codecs/pcm3008.h b/sound/soc/codecs/pcm3008.h
index d04e87d..7e5489a 100644
--- a/sound/soc/codecs/pcm3008.h
+++ b/sound/soc/codecs/pcm3008.h
@@ -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
diff --git a/sound/soc/codecs/spdif_transciever.c b/sound/soc/codecs/spdif_transciever.c
index 9119836..4c32b54 100644
--- a/sound/soc/codecs/spdif_transciever.c
+++ b/sound/soc/codecs/spdif_transciever.c
@@ -21,57 +21,16 @@
#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
index 1e10212..0000000
--- a/sound/soc/codecs/spdif_transciever.h
+++ /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 */
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c
index b47ed4f..67d8c04 100644
--- a/sound/soc/codecs/ssm2602.c
+++ b/sound/soc/codecs/ssm2602.c
@@ -45,11 +45,11 @@
#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);
diff --git a/sound/soc/codecs/ssm2602.h b/sound/soc/codecs/ssm2602.h
index f344e6d..42a47d0 100644
--- a/sound/soc/codecs/ssm2602.h
+++ b/sound/soc/codecs/ssm2602.h
@@ -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
diff --git a/sound/soc/codecs/stac9766.c b/sound/soc/codecs/stac9766.c
index ee86568..00d67cc 100644
--- a/sound/soc/codecs/stac9766.c
+++ b/sound/soc/codecs/stac9766.c
@@ -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>");
diff --git a/sound/soc/codecs/stac9766.h b/sound/soc/codecs/stac9766.h
index 65642eb..c726f90 100644
--- a/sound/soc/codecs/stac9766.h
+++ b/sound/soc/codecs/stac9766.h
@@ -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
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
index 0a4b0fe..e8652b1 100644
--- a/sound/soc/codecs/tlv320aic23.c
+++ b/sound/soc/codecs/tlv320aic23.c
@@ -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);
diff --git a/sound/soc/codecs/tlv320aic23.h b/sound/soc/codecs/tlv320aic23.h
index 79d1faf..e804120 100644
--- a/sound/soc/codecs/tlv320aic23.h
+++ b/sound/soc/codecs/tlv320aic23.h
@@ -116,7 +116,4 @@
#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 */
diff --git a/sound/soc/codecs/tlv320aic26.c b/sound/soc/codecs/tlv320aic26.c
index f0e00fd..6b7d71e 100644
--- a/sound/soc/codecs/tlv320aic26.c
+++ b/sound/soc/codecs/tlv320aic26.c
@@ -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
@@ -319,61 +316,6 @@ static const struct snd_kcontrol_new aic26_snd_controls[] = {
};
/* ---------------------------------------------------------------------
- * 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,
diff --git a/sound/soc/codecs/tlv320aic26.h b/sound/soc/codecs/tlv320aic26.h
index 786ba16..62b1f22 100644
--- a/sound/soc/codecs/tlv320aic26.h
+++ b/sound/soc/codecs/tlv320aic26.h
@@ -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_ */
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index 71a6990..c074657 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -12,11 +12,11 @@
*
* Notes:
* The AIC3X is a driver for a low power stereo audio
- * codecs aic31, aic32, aic33.
+ * codecs aic31, aic32, aic33, aic3007.
*
* It supports full aic33 codec functionality.
- * The compatibility with aic32, aic31 is as follows:
- * aic32 | aic31
+ * The compatibility with aic32, aic31 and aic3007 is as follows:
+ * aic32/aic3007 | aic31
* ---------------------------------------
* MONO_LOUT -> N/A | MONO_LOUT -> N/A
* | IN1L -> LINE1L
@@ -63,11 +63,17 @@ 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;
+#define AIC3X_MODEL_3X 0
+#define AIC3X_MODEL_33 1
+#define AIC3X_MODEL_3007 2
+ u16 model;
};
/*
@@ -359,6 +365,14 @@ static const struct snd_kcontrol_new aic3x_snd_controls[] = {
SOC_ENUM("ADC HPF Cut-off", aic3x_enum[ADC_HPF_ENUM]),
};
+/*
+ * Class-D amplifier gain. From 0 to 18 dB in 6 dB steps
+ */
+static DECLARE_TLV_DB_SCALE(classd_amp_tlv, 0, 600, 0);
+
+static const struct snd_kcontrol_new aic3x_classd_amp_gain_ctrl =
+ SOC_DOUBLE_TLV("Class-D Amplifier Gain", CLASSD_CTRL, 6, 4, 3, 0, classd_amp_tlv);
+
/* Left DAC Mux */
static const struct snd_kcontrol_new aic3x_left_dac_mux_controls =
SOC_DAPM_ENUM("Route", aic3x_enum[LDAC_ENUM]);
@@ -587,6 +601,15 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = {
SND_SOC_DAPM_INPUT("LINE2R"),
};
+static const struct snd_soc_dapm_widget aic3007_dapm_widgets[] = {
+ /* Class-D outputs */
+ SND_SOC_DAPM_PGA("Left Class-D Out", CLASSD_CTRL, 3, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Right Class-D Out", CLASSD_CTRL, 2, 0, NULL, 0),
+
+ SND_SOC_DAPM_OUTPUT("SPOP"),
+ SND_SOC_DAPM_OUTPUT("SPOM"),
+};
+
static const struct snd_soc_dapm_route intercon[] = {
/* Left Output */
{"Left DAC Mux", "DAC_L1", "Left DAC"},
@@ -757,14 +780,30 @@ static const struct snd_soc_dapm_route intercon[] = {
{"GPIO1 dmic modclk", NULL, "DMic Rate 32"},
};
+static const struct snd_soc_dapm_route intercon_3007[] = {
+ /* Class-D outputs */
+ {"Left Class-D Out", NULL, "Left Line Out"},
+ {"Right Class-D Out", NULL, "Left Line Out"},
+ {"SPOP", NULL, "Left Class-D Out"},
+ {"SPOM", NULL, "Right Class-D Out"},
+};
+
static int aic3x_add_widgets(struct snd_soc_codec *codec)
{
+ struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(codec);
+
snd_soc_dapm_new_controls(codec, aic3x_dapm_widgets,
ARRAY_SIZE(aic3x_dapm_widgets));
/* set up audio path interconnects */
snd_soc_dapm_add_routes(codec, intercon, ARRAY_SIZE(intercon));
+ if (aic3x->model == AIC3X_MODEL_3007) {
+ snd_soc_dapm_new_controls(codec, aic3007_dapm_widgets,
+ ARRAY_SIZE(aic3007_dapm_widgets));
+ snd_soc_dapm_add_routes(codec, intercon_3007, ARRAY_SIZE(intercon_3007));
+ }
+
return 0;
}
@@ -773,8 +812,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 +1139,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,
@@ -1116,23 +1154,18 @@ struct snd_soc_dai aic3x_dai = {
.rates = AIC3X_RATES,
.formats = AIC3X_FORMATS,},
.ops = &aic3x_dai_ops,
+ .symmetric_rates = 1,
};
-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;
@@ -1155,24 +1188,9 @@ static int aic3x_resume(struct platform_device *pdev)
*/
static int aic3x_init(struct snd_soc_codec *codec)
{
+ struct aic3x_priv *aic3x = snd_soc_codec_get_drvdata(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);
@@ -1239,68 +1257,83 @@ static int aic3x_init(struct snd_soc_codec *codec)
aic3x_write(codec, LINE2L_2_MONOLOPM_VOL, DEFAULT_VOL);
aic3x_write(codec, LINE2R_2_MONOLOPM_VOL, DEFAULT_VOL);
+ if (aic3x->model == AIC3X_MODEL_3007) {
+ /* Class-D speaker driver init; datasheet p. 46 */
+ aic3x_write(codec, AIC3X_PAGE_SELECT, 0x0D);
+ aic3x_write(codec, 0xD, 0x0D);
+ aic3x_write(codec, 0x8, 0x5C);
+ aic3x_write(codec, 0x8, 0x5D);
+ aic3x_write(codec, 0x8, 0x5C);
+ aic3x_write(codec, AIC3X_PAGE_SELECT, 0x00);
+ aic3x_write(codec, CLASSD_CTRL, 0);
+ }
+
/* off, with power on */
aic3x_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
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);
- ret = aic3x_init(codec);
- if (ret < 0) {
- dev_err(codec->dev, "Failed to initialise device\n");
- return ret;
+ codec->hw_write = (hw_write_t) i2c_master_send;
+ codec->control_data = aic3x->control_data;
+
+ 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));
+ if (aic3x->model == AIC3X_MODEL_3007)
+ snd_soc_add_controls(codec, &aic3x_classd_amp_gain_ctrl, 1);
- 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
* 0x18, 0x19, 0x1A, 0x1B
*/
+static const struct i2c_device_id aic3x_i2c_id[] = {
+ [AIC3X_MODEL_3X] = { "tlv320aic3x", 0 },
+ [AIC3X_MODEL_33] = { "tlv320aic33", 0 },
+ [AIC3X_MODEL_3007] = { "tlv320aic3007", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id);
+
/*
* If the i2c layer weren't so broken, we could pass this kind of data
* around
@@ -1308,10 +1341,11 @@ 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;
+ const struct i2c_device_id *tbl;
aic3x = kzalloc(sizeof(struct aic3x_priv), GFP_KERNEL);
if (aic3x == NULL) {
@@ -1319,12 +1353,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;
@@ -1336,20 +1366,26 @@ static int aic3x_i2c_probe(struct i2c_client *i2c,
gpio_direction_output(aic3x->gpio_reset, 0);
}
+ for (tbl = aic3x_i2c_id; tbl->name[0]; tbl++) {
+ if (!strcmp(tbl->name, id->name))
+ break;
+ }
+ aic3x->model = tbl - aic3x_i2c_id;
+
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 +1394,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,20 +1414,22 @@ 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);
-static const struct i2c_device_id aic3x_i2c_id[] = {
- { "tlv320aic3x", 0 },
- { "tlv320aic33", 0 },
- { }
-};
-MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id);
+ snd_soc_unregister_codec(&client->dev);
+ kfree(i2c_get_clientdata(client));
+ return 0;
+}
/* 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 +1451,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);
diff --git a/sound/soc/codecs/tlv320aic3x.h b/sound/soc/codecs/tlv320aic3x.h
index 9af1c88..98e4439 100644
--- a/sound/soc/codecs/tlv320aic3x.h
+++ b/sound/soc/codecs/tlv320aic3x.h
@@ -111,6 +111,8 @@
#define DACL1_2_MONOLOPM_VOL 75
#define DACR1_2_MONOLOPM_VOL 78
#define MONOLOPM_CTRL 79
+/* Class-D speaker driver on tlv320aic3007 */
+#define CLASSD_CTRL 73
/* Line Output Plus/Minus control registers */
#define LINE2L_2_LLOPM_VOL 80
#define LINE2L_2_RLOPM_VOL 87
@@ -199,42 +201,6 @@
/* 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 +247,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 */
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index 8651b01..a3c5b52 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -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,
diff --git a/sound/soc/codecs/tlv320dac33.h b/sound/soc/codecs/tlv320dac33.h
index eb8ae07..7c318b5 100644
--- a/sound/soc/codecs/tlv320dac33.h
+++ b/sound/soc/codecs/tlv320dac33.h
@@ -261,7 +261,4 @@
#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 */
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index 7b618bb..c7ee1a4 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -36,7 +36,16 @@
#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
index 6c57430..0000000
--- a/sound/soc/codecs/twl4030.h
+++ /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__ */
-
-
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 64a807f..10f6e52 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -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,
diff --git a/sound/soc/codecs/twl6040.h b/sound/soc/codecs/twl6040.h
index c472070..f7c77fa 100644
--- a/sound/soc/codecs/twl6040.h
+++ b/sound/soc/codecs/twl6040.h
@@ -135,7 +135,4 @@
#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__ */
diff --git a/sound/soc/codecs/uda134x.c b/sound/soc/codecs/uda134x.c
index f3b4c1d..7540a50 100644
--- a/sound/soc/codecs/uda134x.c
+++ b/sound/soc/codecs/uda134x.c
@@ -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>");
diff --git a/sound/soc/codecs/uda134x.h b/sound/soc/codecs/uda134x.h
index 205f03b..9faae06 100644
--- a/sound/soc/codecs/uda134x.h
+++ b/sound/soc/codecs/uda134x.h
@@ -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
diff --git a/sound/soc/codecs/uda1380.c b/sound/soc/codecs/uda1380.c
index 2f925a2..1a51c81 100644
--- a/sound/soc/codecs/uda1380.c
+++ b/sound/soc/codecs/uda1380.c
@@ -33,11 +33,9 @@
#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,
diff --git a/sound/soc/codecs/uda1380.h b/sound/soc/codecs/uda1380.h
index 9cefa8a..942e392 100644
--- a/sound/soc/codecs/uda1380.h
+++ b/sound/soc/codecs/uda1380.h
@@ -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 */
diff --git a/sound/soc/codecs/wl1273.c b/sound/soc/codecs/wl1273.c
new file mode 100644
index 0000000..0cd5909
--- /dev/null
+++ b/sound/soc/codecs/wl1273.c
@@ -0,0 +1,525 @@
+/*
+ * ALSA SoC WL1273 codec driver
+ *
+ * Author: Matti Aaltonen, <matti.j.aaltonen@nokia.com>
+ *
+ * Copyright: (C) 2010 Nokia Corporation
+ *
+ * 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
+ *
+ */
+
+#include <linux/mfd/wl1273-core.h>
+#include <linux/slab.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc-dai.h>
+#include <sound/soc-dapm.h>
+#include <sound/initval.h>
+
+#include "wl1273.h"
+
+enum wl1273_mode { WL1273_MODE_BT, WL1273_MODE_FM_RX, WL1273_MODE_FM_TX };
+
+/* codec private data */
+struct wl1273_priv {
+ enum wl1273_mode mode;
+ struct wl1273_core *core;
+ unsigned int channels;
+};
+
+static int snd_wl1273_fm_set_i2s_mode(struct wl1273_core *core,
+ int rate, int width)
+{
+ struct device *dev = &core->i2c_dev->dev;
+ int r = 0;
+ u16 mode;
+
+ dev_dbg(dev, "rate: %d\n", rate);
+ dev_dbg(dev, "width: %d\n", width);
+
+ mutex_lock(&core->lock);
+
+ mode = core->i2s_mode & ~WL1273_IS2_WIDTH & ~WL1273_IS2_RATE;
+
+ switch (rate) {
+ case 48000:
+ mode |= WL1273_IS2_RATE_48K;
+ break;
+ case 44100:
+ mode |= WL1273_IS2_RATE_44_1K;
+ break;
+ case 32000:
+ mode |= WL1273_IS2_RATE_32K;
+ break;
+ case 22050:
+ mode |= WL1273_IS2_RATE_22_05K;
+ break;
+ case 16000:
+ mode |= WL1273_IS2_RATE_16K;
+ break;
+ case 12000:
+ mode |= WL1273_IS2_RATE_12K;
+ break;
+ case 11025:
+ mode |= WL1273_IS2_RATE_11_025;
+ break;
+ case 8000:
+ mode |= WL1273_IS2_RATE_8K;
+ break;
+ default:
+ dev_err(dev, "Sampling rate: %d not supported\n", rate);
+ r = -EINVAL;
+ goto out;
+ }
+
+ switch (width) {
+ case 16:
+ mode |= WL1273_IS2_WIDTH_32;
+ break;
+ case 20:
+ mode |= WL1273_IS2_WIDTH_40;
+ break;
+ case 24:
+ mode |= WL1273_IS2_WIDTH_48;
+ break;
+ case 25:
+ mode |= WL1273_IS2_WIDTH_50;
+ break;
+ case 30:
+ mode |= WL1273_IS2_WIDTH_60;
+ break;
+ case 32:
+ mode |= WL1273_IS2_WIDTH_64;
+ break;
+ case 40:
+ mode |= WL1273_IS2_WIDTH_80;
+ break;
+ case 48:
+ mode |= WL1273_IS2_WIDTH_96;
+ break;
+ case 64:
+ mode |= WL1273_IS2_WIDTH_128;
+ break;
+ default:
+ dev_err(dev, "Data width: %d not supported\n", width);
+ r = -EINVAL;
+ goto out;
+ }
+
+ dev_dbg(dev, "WL1273_I2S_DEF_MODE: 0x%04x\n", WL1273_I2S_DEF_MODE);
+ dev_dbg(dev, "core->i2s_mode: 0x%04x\n", core->i2s_mode);
+ dev_dbg(dev, "mode: 0x%04x\n", mode);
+
+ if (core->i2s_mode != mode) {
+ r = wl1273_fm_write_cmd(core, WL1273_I2S_MODE_CONFIG_SET, mode);
+ if (r)
+ goto out;
+
+ core->i2s_mode = mode;
+ r = wl1273_fm_write_cmd(core, WL1273_AUDIO_ENABLE,
+ WL1273_AUDIO_ENABLE_I2S);
+ if (r)
+ goto out;
+ }
+out:
+ mutex_unlock(&core->lock);
+
+ return r;
+}
+
+static int snd_wl1273_fm_set_channel_number(struct wl1273_core *core,
+ int channel_number)
+{
+ struct i2c_client *client = core->i2c_dev;
+ struct device *dev = &client->dev;
+ int r = 0;
+
+ dev_dbg(dev, "%s\n", __func__);
+
+ mutex_lock(&core->lock);
+
+ if (core->channel_number == channel_number)
+ goto out;
+
+ if (channel_number == 1 && core->mode == WL1273_MODE_RX)
+ r = wl1273_fm_write_cmd(core, WL1273_MOST_MODE_SET,
+ WL1273_RX_MONO);
+ else if (channel_number == 1 && core->mode == WL1273_MODE_TX)
+ r = wl1273_fm_write_cmd(core, WL1273_MONO_SET,
+ WL1273_TX_MONO);
+ else if (channel_number == 2 && core->mode == WL1273_MODE_RX)
+ r = wl1273_fm_write_cmd(core, WL1273_MOST_MODE_SET,
+ WL1273_RX_STEREO);
+ else if (channel_number == 2 && core->mode == WL1273_MODE_TX)
+ r = wl1273_fm_write_cmd(core, WL1273_MONO_SET,
+ WL1273_TX_STEREO);
+ else
+ r = -EINVAL;
+out:
+ mutex_unlock(&core->lock);
+
+ return r;
+}
+
+static int snd_wl1273_get_audio_route(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ ucontrol->value.integer.value[0] = wl1273->mode;
+
+ return 0;
+}
+
+static const char *wl1273_audio_route[] = { "Bt", "FmRx", "FmTx" };
+
+static int snd_wl1273_set_audio_route(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ /* Do not allow changes while stream is running */
+ if (codec->active)
+ return -EPERM;
+
+ if (ucontrol->value.integer.value[0] < 0 ||
+ ucontrol->value.integer.value[0] >= ARRAY_SIZE(wl1273_audio_route))
+ return -EINVAL;
+
+ wl1273->mode = ucontrol->value.integer.value[0];
+
+ return 1;
+}
+
+static const struct soc_enum wl1273_enum =
+ SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(wl1273_audio_route), wl1273_audio_route);
+
+static int snd_wl1273_fm_audio_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ dev_dbg(codec->dev, "%s: enter.\n", __func__);
+
+ ucontrol->value.integer.value[0] = wl1273->core->audio_mode;
+
+ return 0;
+}
+
+static int snd_wl1273_fm_audio_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+ int val, r = 0;
+
+ dev_dbg(codec->dev, "%s: enter.\n", __func__);
+
+ val = ucontrol->value.integer.value[0];
+ if (wl1273->core->audio_mode == val)
+ return 0;
+
+ r = wl1273_fm_set_audio(wl1273->core, val);
+ if (r < 0)
+ return r;
+
+ return 1;
+}
+
+static const char *wl1273_audio_strings[] = { "Digital", "Analog" };
+
+static const struct soc_enum wl1273_audio_enum =
+ SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(wl1273_audio_strings),
+ wl1273_audio_strings);
+
+static int snd_wl1273_fm_volume_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ dev_dbg(codec->dev, "%s: enter.\n", __func__);
+
+ ucontrol->value.integer.value[0] = wl1273->core->volume;
+
+ return 0;
+}
+
+static int snd_wl1273_fm_volume_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+ int r;
+
+ dev_dbg(codec->dev, "%s: enter.\n", __func__);
+
+ r = wl1273_fm_set_volume(wl1273->core,
+ ucontrol->value.integer.value[0]);
+ if (r)
+ return r;
+
+ return 1;
+}
+
+static const struct snd_kcontrol_new wl1273_controls[] = {
+ SOC_ENUM_EXT("Codec Mode", wl1273_enum,
+ snd_wl1273_get_audio_route, snd_wl1273_set_audio_route),
+ SOC_ENUM_EXT("Audio Switch", wl1273_audio_enum,
+ snd_wl1273_fm_audio_get, snd_wl1273_fm_audio_put),
+ SOC_SINGLE_EXT("Volume", 0, 0, WL1273_MAX_VOLUME, 0,
+ snd_wl1273_fm_volume_get, snd_wl1273_fm_volume_put),
+};
+
+static int wl1273_startup(struct snd_pcm_substream *substream,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ switch (wl1273->mode) {
+ case WL1273_MODE_BT:
+ snd_pcm_hw_constraint_minmax(substream->runtime,
+ SNDRV_PCM_HW_PARAM_RATE,
+ 8000, 8000);
+ snd_pcm_hw_constraint_minmax(substream->runtime,
+ SNDRV_PCM_HW_PARAM_CHANNELS, 1, 1);
+ break;
+ case WL1273_MODE_FM_RX:
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ pr_err("Cannot play in RX mode.\n");
+ return -EINVAL;
+ }
+ break;
+ case WL1273_MODE_FM_TX:
+ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
+ pr_err("Cannot capture in TX mode.\n");
+ return -EINVAL;
+ }
+ break;
+ default:
+ return -EINVAL;
+ break;
+ }
+
+ return 0;
+}
+
+static int wl1273_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 wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(rtd->codec);
+ struct wl1273_core *core = wl1273->core;
+ unsigned int rate, width, r;
+
+ if (params_format(params) != SNDRV_PCM_FORMAT_S16_LE) {
+ pr_err("Only SNDRV_PCM_FORMAT_S16_LE supported.\n");
+ return -EINVAL;
+ }
+
+ rate = params_rate(params);
+ width = hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS)->min;
+
+ if (wl1273->mode == WL1273_MODE_BT) {
+ if (rate != 8000) {
+ pr_err("Rate %d not supported.\n", params_rate(params));
+ return -EINVAL;
+ }
+
+ if (params_channels(params) != 1) {
+ pr_err("Only mono supported.\n");
+ return -EINVAL;
+ }
+
+ return 0;
+ }
+
+ if (wl1273->mode == WL1273_MODE_FM_TX &&
+ substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
+ pr_err("Only playback supported with TX.\n");
+ return -EINVAL;
+ }
+
+ if (wl1273->mode == WL1273_MODE_FM_RX &&
+ substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ pr_err("Only capture supported with RX.\n");
+ return -EINVAL;
+ }
+
+ if (wl1273->mode != WL1273_MODE_FM_RX &&
+ wl1273->mode != WL1273_MODE_FM_TX) {
+ pr_err("Unexpected mode: %d.\n", wl1273->mode);
+ return -EINVAL;
+ }
+
+ r = snd_wl1273_fm_set_i2s_mode(core, rate, width);
+ if (r)
+ return r;
+
+ wl1273->channels = params_channels(params);
+ r = snd_wl1273_fm_set_channel_number(core, wl1273->channels);
+ if (r)
+ return r;
+
+ return 0;
+}
+
+static struct snd_soc_dai_ops wl1273_dai_ops = {
+ .startup = wl1273_startup,
+ .hw_params = wl1273_hw_params,
+};
+
+static struct snd_soc_dai_driver wl1273_dai = {
+ .name = "wl1273-fm",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = SNDRV_PCM_RATE_8000_48000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE},
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = SNDRV_PCM_RATE_8000_48000,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE},
+ .ops = &wl1273_dai_ops,
+};
+
+/* Audio interface format for the soc_card driver */
+int wl1273_get_format(struct snd_soc_codec *codec, unsigned int *fmt)
+{
+ struct wl1273_priv *wl1273;
+
+ if (codec == NULL || fmt == NULL)
+ return -EINVAL;
+
+ wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ switch (wl1273->mode) {
+ case WL1273_MODE_FM_RX:
+ case WL1273_MODE_FM_TX:
+ *fmt = SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF |
+ SND_SOC_DAIFMT_CBM_CFM;
+
+ break;
+ case WL1273_MODE_BT:
+ *fmt = SND_SOC_DAIFMT_DSP_A |
+ SND_SOC_DAIFMT_IB_NF |
+ SND_SOC_DAIFMT_CBM_CFM;
+
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(wl1273_get_format);
+
+static int wl1273_probe(struct snd_soc_codec *codec)
+{
+ struct wl1273_core **core = codec->dev->platform_data;
+ struct wl1273_priv *wl1273;
+ int r;
+
+ dev_dbg(codec->dev, "%s.\n", __func__);
+
+ if (!core) {
+ dev_err(codec->dev, "Platform data is missing.\n");
+ return -EINVAL;
+ }
+
+ wl1273 = kzalloc(sizeof(struct wl1273_priv), GFP_KERNEL);
+ if (wl1273 == NULL) {
+ dev_err(codec->dev, "Cannot allocate memory.\n");
+ return -ENOMEM;
+ }
+
+ wl1273->mode = WL1273_MODE_BT;
+ wl1273->core = *core;
+
+ snd_soc_codec_set_drvdata(codec, wl1273);
+ mutex_init(&codec->mutex);
+
+ r = snd_soc_add_controls(codec, wl1273_controls,
+ ARRAY_SIZE(wl1273_controls));
+ if (r)
+ kfree(wl1273);
+
+ return r;
+}
+
+static int wl1273_remove(struct snd_soc_codec *codec)
+{
+ struct wl1273_priv *wl1273 = snd_soc_codec_get_drvdata(codec);
+
+ dev_dbg(codec->dev, "%s\n", __func__);
+ kfree(wl1273);
+
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_wl1273 = {
+ .probe = wl1273_probe,
+ .remove = wl1273_remove,
+};
+
+static int __devinit wl1273_platform_probe(struct platform_device *pdev)
+{
+ return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wl1273,
+ &wl1273_dai, 1);
+}
+
+static int __devexit wl1273_platform_remove(struct platform_device *pdev)
+{
+ snd_soc_unregister_codec(&pdev->dev);
+ return 0;
+}
+
+MODULE_ALIAS("platform:wl1273-codec");
+
+static struct platform_driver wl1273_platform_driver = {
+ .driver = {
+ .name = "wl1273-codec",
+ .owner = THIS_MODULE,
+ },
+ .probe = wl1273_platform_probe,
+ .remove = __devexit_p(wl1273_platform_remove),
+};
+
+static int __init wl1273_init(void)
+{
+ return platform_driver_register(&wl1273_platform_driver);
+}
+module_init(wl1273_init);
+
+static void __exit wl1273_exit(void)
+{
+ platform_driver_unregister(&wl1273_platform_driver);
+}
+module_exit(wl1273_exit);
+
+MODULE_AUTHOR("Matti Aaltonen <matti.j.aaltonen@nokia.com>");
+MODULE_DESCRIPTION("ASoC WL1273 codec driver");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/wl1273.h b/sound/soc/codecs/wl1273.h
new file mode 100644
index 0000000..14ed027
--- /dev/null
+++ b/sound/soc/codecs/wl1273.h
@@ -0,0 +1,101 @@
+/*
+ * sound/soc/codec/wl1273.h
+ *
+ * ALSA SoC WL1273 codec driver
+ *
+ * Copyright (C) Nokia Corporation
+ * Author: Matti Aaltonen <matti.j.aaltonen@nokia.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 __WL1273_CODEC_H__
+#define __WL1273_CODEC_H__
+
+/* I2S protocol, left channel first, data width 16 bits */
+#define WL1273_PCM_DEF_MODE 0x00
+
+/* Rx */
+#define WL1273_AUDIO_ENABLE_I2S (1 << 0)
+#define WL1273_AUDIO_ENABLE_ANALOG (1 << 1)
+
+/* Tx */
+#define WL1273_AUDIO_IO_SET_ANALOG 0
+#define WL1273_AUDIO_IO_SET_I2S 1
+
+#define WL1273_POWER_SET_OFF 0
+#define WL1273_POWER_SET_FM (1 << 0)
+#define WL1273_POWER_SET_RDS (1 << 1)
+#define WL1273_POWER_SET_RETENTION (1 << 4)
+
+#define WL1273_PUPD_SET_OFF 0x00
+#define WL1273_PUPD_SET_ON 0x01
+#define WL1273_PUPD_SET_RETENTION 0x10
+
+/* I2S mode */
+#define WL1273_IS2_WIDTH_32 0x0
+#define WL1273_IS2_WIDTH_40 0x1
+#define WL1273_IS2_WIDTH_22_23 0x2
+#define WL1273_IS2_WIDTH_23_22 0x3
+#define WL1273_IS2_WIDTH_48 0x4
+#define WL1273_IS2_WIDTH_50 0x5
+#define WL1273_IS2_WIDTH_60 0x6
+#define WL1273_IS2_WIDTH_64 0x7
+#define WL1273_IS2_WIDTH_80 0x8
+#define WL1273_IS2_WIDTH_96 0x9
+#define WL1273_IS2_WIDTH_128 0xa
+#define WL1273_IS2_WIDTH 0xf
+
+#define WL1273_IS2_FORMAT_STD (0x0 << 4)
+#define WL1273_IS2_FORMAT_LEFT (0x1 << 4)
+#define WL1273_IS2_FORMAT_RIGHT (0x2 << 4)
+#define WL1273_IS2_FORMAT_USER (0x3 << 4)
+
+#define WL1273_IS2_MASTER (0x0 << 6)
+#define WL1273_IS2_SLAVEW (0x1 << 6)
+
+#define WL1273_IS2_TRI_AFTER_SENDING (0x0 << 7)
+#define WL1273_IS2_TRI_ALWAYS_ACTIVE (0x1 << 7)
+
+#define WL1273_IS2_SDOWS_RR (0x0 << 8)
+#define WL1273_IS2_SDOWS_RF (0x1 << 8)
+#define WL1273_IS2_SDOWS_FR (0x2 << 8)
+#define WL1273_IS2_SDOWS_FF (0x3 << 8)
+
+#define WL1273_IS2_TRI_OPT (0x0 << 10)
+#define WL1273_IS2_TRI_ALWAYS (0x1 << 10)
+
+#define WL1273_IS2_RATE_48K (0x0 << 12)
+#define WL1273_IS2_RATE_44_1K (0x1 << 12)
+#define WL1273_IS2_RATE_32K (0x2 << 12)
+#define WL1273_IS2_RATE_22_05K (0x4 << 12)
+#define WL1273_IS2_RATE_16K (0x5 << 12)
+#define WL1273_IS2_RATE_12K (0x8 << 12)
+#define WL1273_IS2_RATE_11_025 (0x9 << 12)
+#define WL1273_IS2_RATE_8K (0xa << 12)
+#define WL1273_IS2_RATE (0xf << 12)
+
+#define WL1273_I2S_DEF_MODE (WL1273_IS2_WIDTH_32 | \
+ WL1273_IS2_FORMAT_STD | \
+ WL1273_IS2_MASTER | \
+ WL1273_IS2_TRI_AFTER_SENDING | \
+ WL1273_IS2_SDOWS_RR | \
+ WL1273_IS2_TRI_OPT | \
+ WL1273_IS2_RATE_48K)
+
+int wl1273_get_format(struct snd_soc_codec *codec, unsigned int *fmt);
+
+#endif /* End of __WL1273_CODEC_H__ */
diff --git a/sound/soc/codecs/wm2000.h b/sound/soc/codecs/wm2000.h
index c18e261..0b6f056 100644
--- a/sound/soc/codecs/wm2000.h
+++ b/sound/soc/codecs/wm2000.h
@@ -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
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
index 0221ca7..f4f1fba 100644
--- a/sound/soc/codecs/wm8350.c
+++ b/sound/soc/codecs/wm8350.c
@@ -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)
diff --git a/sound/soc/codecs/wm8350.h b/sound/soc/codecs/wm8350.h
index 9ed0467..74108eb 100644
--- a/sound/soc/codecs/wm8350.h
+++ b/sound/soc/codecs/wm8350.h
@@ -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,
diff --git a/sound/soc/codecs/wm8400.c b/sound/soc/codecs/wm8400.c
index 8f29406..8502997 100644
--- a/sound/soc/codecs/wm8400.c
+++ b/sound/soc/codecs/wm8400.c
@@ -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");
diff --git a/sound/soc/codecs/wm8400.h b/sound/soc/codecs/wm8400.h
index 79c5934..521adb1 100644
--- a/sound/soc/codecs/wm8400.h
+++ b/sound/soc/codecs/wm8400.h
@@ -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
diff --git a/sound/soc/codecs/wm8510.c b/sound/soc/codecs/wm8510.c
index 0f7bcb6..d00da20 100644
--- a/sound/soc/codecs/wm8510.c
+++ b/sound/soc/codecs/wm8510.c
@@ -29,10 +29,6 @@
#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);
diff --git a/sound/soc/codecs/wm8510.h b/sound/soc/codecs/wm8510.h
index bdefcf5..b3e26ed 100644
--- a/sound/soc/codecs/wm8510.h
+++ b/sound/soc/codecs/wm8510.h
@@ -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
diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c
index 0ad039b..712ef7c 100644
--- a/sound/soc/codecs/wm8523.c
+++ b/sound/soc/codecs/wm8523.c
@@ -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,
diff --git a/sound/soc/codecs/wm8523.h b/sound/soc/codecs/wm8523.h
index 1aa9ce3..4d5b1eb 100644
--- a/sound/soc/codecs/wm8523.h
+++ b/sound/soc/codecs/wm8523.h
@@ -154,7 +154,4 @@
#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
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c
index 72deeab..910c62a 100644
--- a/sound/soc/codecs/wm8580.c
+++ b/sound/soc/codecs/wm8580.c
@@ -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
@@ -112,19 +114,7 @@
/* 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_PAIFRX:
+ sel_mask = 0x3;
+ sel_shift = 0;
+ break;
+
+ case WM8580_DAI_PAIFTX:
+ 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_mask, sel);
+}
+
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);
diff --git a/sound/soc/codecs/wm8580.h b/sound/soc/codecs/wm8580.h
index 0dfb5dd..1d34656 100644
--- a/sound/soc/codecs/wm8580.h
+++ b/sound/soc/codecs/wm8580.h
@@ -19,20 +19,17 @@
#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
diff --git a/sound/soc/codecs/wm8711.c b/sound/soc/codecs/wm8711.c
index e2dba07f..f8d9c60 100644
--- a/sound/soc/codecs/wm8711.c
+++ b/sound/soc/codecs/wm8711.c
@@ -31,11 +31,9 @@
#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,
diff --git a/sound/soc/codecs/wm8711.h b/sound/soc/codecs/wm8711.h
index 381e84a..a61db98 100644
--- a/sound/soc/codecs/wm8711.h
+++ b/sound/soc/codecs/wm8711.h
@@ -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
diff --git a/sound/soc/codecs/wm8727.c b/sound/soc/codecs/wm8727.c
index 9d1df262..7488082 100644
--- a/sound/soc/codecs/wm8727.c
+++ b/sound/soc/codecs/wm8727.c
@@ -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
index ee19aa7..0000000
--- a/sound/soc/codecs/wm8727.h
+++ /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_ */
diff --git a/sound/soc/codecs/wm8728.c b/sound/soc/codecs/wm8728.c
index 34be2d2..5e5a162 100644
--- a/sound/soc/codecs/wm8728.c
+++ b/sound/soc/codecs/wm8728.c
@@ -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);
diff --git a/sound/soc/codecs/wm8728.h b/sound/soc/codecs/wm8728.h
index d269c13..8aea362 100644
--- a/sound/soc/codecs/wm8728.h
+++ b/sound/soc/codecs/wm8728.h
@@ -18,13 +18,4 @@
#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
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
index 0ab9b63..56f5408 100644
--- a/sound/soc/codecs/wm8731.c
+++ b/sound/soc/codecs/wm8731.c
@@ -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,10 +42,11 @@ 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;
+ int sysclk_type;
};
@@ -113,6 +111,7 @@ static const struct snd_kcontrol_new wm8731_input_mux_controls =
SOC_DAPM_ENUM("Input Select", wm8731_enum[0]);
static const struct snd_soc_dapm_widget wm8731_dapm_widgets[] = {
+SND_SOC_DAPM_SUPPLY("OSC", WM8731_PWR, 5, 1, NULL, 0),
SND_SOC_DAPM_MIXER("Output Mixer", WM8731_PWR, 4, 1,
&wm8731_output_mixer_controls[0],
ARRAY_SIZE(wm8731_output_mixer_controls)),
@@ -130,7 +129,18 @@ SND_SOC_DAPM_INPUT("RLINEIN"),
SND_SOC_DAPM_INPUT("LLINEIN"),
};
+static int wm8731_check_osc(struct snd_soc_dapm_widget *source,
+ struct snd_soc_dapm_widget *sink)
+{
+ struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(source->codec);
+
+ return wm8731->sysclk_type == WM8731_SYSCLK_MCLK;
+}
+
static const struct snd_soc_dapm_route intercon[] = {
+ {"DAC", NULL, "OSC", wm8731_check_osc},
+ {"ADC", NULL, "OSC", wm8731_check_osc},
+
/* output mixer */
{"Output Mixer", "Line Bypass Switch", "Line Input"},
{"Output Mixer", "HiFi Playback Switch", "DAC"},
@@ -222,9 +232,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 +260,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 +271,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) {
@@ -294,6 +298,15 @@ static int wm8731_set_dai_sysclk(struct snd_soc_dai *codec_dai,
struct snd_soc_codec *codec = codec_dai->codec;
struct wm8731_priv *wm8731 = snd_soc_codec_get_drvdata(codec);
+ switch (clk_id) {
+ case WM8731_SYSCLK_XTAL:
+ case WM8731_SYSCLK_MCLK:
+ wm8731->sysclk_type = clk_id;
+ break;
+ default:
+ return -EINVAL;
+ }
+
switch (freq) {
case 11289600:
case 12000000:
@@ -301,9 +314,14 @@ static int wm8731_set_dai_sysclk(struct snd_soc_dai *codec_dai,
case 16934400:
case 18432000:
wm8731->sysclk = freq;
- return 0;
+ break;
+ default:
+ return -EINVAL;
}
- return -EINVAL;
+
+ snd_soc_dapm_sync(codec);
+
+ return 0;
}
@@ -428,8 +446,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 +463,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 +483,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)
-{
- 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)
+static int wm8731_probe(struct snd_soc_codec *codec)
{
- 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 +503,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 +519,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 +530,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 +615,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;
-
- codec->dev = &i2c->dev;
+ wm8731->control_type = SND_SOC_I2C;
- 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 +646,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 +657,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 +672,7 @@ static int __init wm8731_modinit(void)
ret);
}
#endif
- return 0;
+ return ret;
}
module_init(wm8731_modinit);
diff --git a/sound/soc/codecs/wm8731.h b/sound/soc/codecs/wm8731.h
index cd7b806..e9c0c76 100644
--- a/sound/soc/codecs/wm8731.h
+++ b/sound/soc/codecs/wm8731.h
@@ -31,10 +31,9 @@
#define WM8731_CACHEREGNUM 10
-#define WM8731_SYSCLK 0
-#define WM8731_DAI 0
+#define WM8731_SYSCLK_XTAL 1
+#define WM8731_SYSCLK_MCLK 2
-extern struct snd_soc_dai wm8731_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8731;
+#define WM8731_DAI 0
#endif
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index b9ea890..fdd24da 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -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,8 +310,8 @@ static struct snd_soc_dai_ops wm8741_dai_ops = {
.set_fmt = wm8741_set_dai_fmt,
};
-struct snd_soc_dai wm8741_dai = {
- .name = "WM8741",
+static struct snd_soc_dai_driver wm8741_dai = {
+ .name = "wm8741",
.playback = {
.stream_name = "Playback",
.channels_min = 2, /* Mono modes not yet supported */
@@ -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);
diff --git a/sound/soc/codecs/wm8741.h b/sound/soc/codecs/wm8741.h
index fdef6ec..56c1b1d 100644
--- a/sound/soc/codecs/wm8741.h
+++ b/sound/soc/codecs/wm8741.h
@@ -208,7 +208,4 @@
#define WM8741_SYSCLK 0
-extern struct snd_soc_dai wm8741_dai;
-extern struct snd_soc_codec_device soc_codec_dev_wm8741;
-
#endif
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
index e2c05e3..92d4b2a 100644
--- a/sound/soc/codecs/wm8750.c
+++ b/sound/soc/codecs/wm8750.c
@@ -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);
diff --git a/sound/soc/codecs/wm8750.h b/sound/soc/codecs/wm8750.h
index 1dc100e..121427c 100644
--- a/sound/soc/codecs/wm8750.h
+++ b/sound/soc/codecs/wm8750.h
@@ -57,13 +57,4 @@
#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
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index b59f349..4844232 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -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);
diff --git a/sound/soc/codecs/wm8753.h b/sound/soc/codecs/wm8753.h
index 57b2ba2..94edac1 100644
--- a/sound/soc/codecs/wm8753.h
+++ b/sound/soc/codecs/wm8753.h
@@ -115,7 +115,4 @@
#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
diff --git a/sound/soc/codecs/wm8776.c b/sound/soc/codecs/wm8776.c
index f8154e6..05d98dd 100644
--- a/sound/soc/codecs/wm8776.c
+++ b/sound/soc/codecs/wm8776.c
@@ -31,20 +31,13 @@
#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;
@@ -226,7 +219,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;
@@ -260,7 +253,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;
}
@@ -268,7 +261,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;
}
@@ -298,9 +291,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;
}
@@ -350,10 +343,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,
@@ -364,8 +357,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,
@@ -376,23 +369,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;
@@ -415,27 +402,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,
@@ -443,168 +433,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,
},
@@ -618,27 +496,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;
}
@@ -650,7 +527,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,
@@ -661,22 +538,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);
diff --git a/sound/soc/codecs/wm8776.h b/sound/soc/codecs/wm8776.h
index 6606d25..4cf1c8e 100644
--- a/sound/soc/codecs/wm8776.h
+++ b/sound/soc/codecs/wm8776.h
@@ -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
diff --git a/sound/soc/codecs/wm8900.c b/sound/soc/codecs/wm8900.c
index 5da17a7..1378aab 100644
--- a/sound/soc/codecs/wm8900.c
+++ b/sound/soc/codecs/wm8900.c
@@ -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>
@@ -137,11 +138,8 @@
#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);
diff --git a/sound/soc/codecs/wm8900.h b/sound/soc/codecs/wm8900.h
index fd15007..583f257 100644
--- a/sound/soc/codecs/wm8900.h
+++ b/sound/soc/codecs/wm8900.h
@@ -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
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index bf08282..622b602 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -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);
diff --git a/sound/soc/codecs/wm8903.h b/sound/soc/codecs/wm8903.h
index ce384a2..996435e 100644
--- a/sound/soc/codecs/wm8903.h
+++ b/sound/soc/codecs/wm8903.h
@@ -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);
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
index f7dcabf..33be84e 100644
--- a/sound/soc/codecs/wm8904.c
+++ b/sound/soc/codecs/wm8904.c
@@ -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);
diff --git a/sound/soc/codecs/wm8904.h b/sound/soc/codecs/wm8904.h
index abe5059..9e8c841 100644
--- a/sound/soc/codecs/wm8904.h
+++ b/sound/soc/codecs/wm8904.h
@@ -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.
*/
diff --git a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c
index f0c1113..d28bf0d 100644
--- a/sound/soc/codecs/wm8940.c
+++ b/sound/soc/codecs/wm8940.c
@@ -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);
diff --git a/sound/soc/codecs/wm8940.h b/sound/soc/codecs/wm8940.h
index 8410eed..907fe19 100644
--- a/sound/soc/codecs/wm8940.h
+++ b/sound/soc/codecs/wm8940.h
@@ -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
diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
index 5f02559..f89ad6c 100644
--- a/sound/soc/codecs/wm8955.c
+++ b/sound/soc/codecs/wm8955.c
@@ -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);
diff --git a/sound/soc/codecs/wm8955.h b/sound/soc/codecs/wm8955.h
index ae349c8..d13fd5c 100644
--- a/sound/soc/codecs/wm8955.h
+++ b/sound/soc/codecs/wm8955.h
@@ -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.
*/
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index 3c6ee61..8d5efb3 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -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");
diff --git a/sound/soc/codecs/wm8960.h b/sound/soc/codecs/wm8960.h
index a5ef6548..2d8163d 100644
--- a/sound/soc/codecs/wm8960.h
+++ b/sound/soc/codecs/wm8960.h
@@ -110,7 +110,4 @@
#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
diff --git a/sound/soc/codecs/wm8961.c b/sound/soc/codecs/wm8961.c
index 2549d3a..bfc6578 100644
--- a/sound/soc/codecs/wm8961.c
+++ b/sound/soc/codecs/wm8961.c
@@ -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");
diff --git a/sound/soc/codecs/wm8961.h b/sound/soc/codecs/wm8961.h
index 5513bfd7..1d736e5 100644
--- a/sound/soc/codecs/wm8961.h
+++ b/sound/soc/codecs/wm8961.h
@@ -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
index 0000000..f21a8c1
--- /dev/null
+++ b/sound/soc/codecs/wm8962-tables.c
@@ -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
index 0000000..58ba2d3
--- /dev/null
+++ b/sound/soc/codecs/wm8962.c
@@ -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
index 0000000..6145399
--- /dev/null
+++ b/sound/soc/codecs/wm8962.h
@@ -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
diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c
index a99620f..63f6dbf 100644
--- a/sound/soc/codecs/wm8971.c
+++ b/sound/soc/codecs/wm8971.c
@@ -30,14 +30,13 @@
#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);
diff --git a/sound/soc/codecs/wm8971.h b/sound/soc/codecs/wm8971.h
index ef4f08f..f31c38f 100644
--- a/sound/soc/codecs/wm8971.h
+++ b/sound/soc/codecs/wm8971.h
@@ -53,12 +53,4 @@
#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
diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c
index 1468fe1..b4363f6 100644
--- a/sound/soc/codecs/wm8974.c
+++ b/sound/soc/codecs/wm8974.c
@@ -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,72 @@ 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;
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 +682,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);
diff --git a/sound/soc/codecs/wm8974.h b/sound/soc/codecs/wm8974.h
index 896a7f0..3c94e7b 100644
--- a/sound/soc/codecs/wm8974.h
+++ b/sound/soc/codecs/wm8974.h
@@ -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
diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c
index 8a1ad77..676a430 100644
--- a/sound/soc/codecs/wm8978.c
+++ b/sound/soc/codecs/wm8978.c
@@ -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);
diff --git a/sound/soc/codecs/wm8978.h b/sound/soc/codecs/wm8978.h
index 56ec832..c75525b 100644
--- a/sound/soc/codecs/wm8978.h
+++ b/sound/soc/codecs/wm8978.h
@@ -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__ */
diff --git a/sound/soc/codecs/wm8988.c b/sound/soc/codecs/wm8988.c
index 19ad590..d070a58 100644
--- a/sound/soc/codecs/wm8988.c
+++ b/sound/soc/codecs/wm8988.c
@@ -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;
}
diff --git a/sound/soc/codecs/wm8988.h b/sound/soc/codecs/wm8988.h
index 4552d37..5c04024 100644
--- a/sound/soc/codecs/wm8988.h
+++ b/sound/soc/codecs/wm8988.h
@@ -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
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
index dd8d909..0ffecbd1e 100644
--- a/sound/soc/codecs/wm8990.c
+++ b/sound/soc/codecs/wm8990.c
@@ -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);
diff --git a/sound/soc/codecs/wm8990.h b/sound/soc/codecs/wm8990.h
index 7114ddc..77c98a4 100644
--- a/sound/soc/codecs/wm8990.h
+++ b/sound/soc/codecs/wm8990.h
@@ -826,18 +826,10 @@
#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 ---------------------------------*/
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c
index d8d300c..a3fd6b9 100644
--- a/sound/soc/codecs/wm8993.c
+++ b/sound/soc/codecs/wm8993.c
@@ -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);
diff --git a/sound/soc/codecs/wm8993.h b/sound/soc/codecs/wm8993.h
index 30e71ca..2184617 100644
--- a/sound/soc/codecs/wm8993.h
+++ b/sound/soc/codecs/wm8993.h
@@ -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
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 522249d..e03072c 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -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)
{
@@ -3313,20 +3316,24 @@ static int wm8994_hw_params(struct snd_pcm_substream *substream,
bclk_reg = WM8994_AIF1_BCLK;
rate_reg = WM8994_AIF1_RATE;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ||
- wm8994->lrclk_shared[0])
+ wm8994->lrclk_shared[0]) {
lrclk_reg = WM8994_AIF1DAC_LRCLK;
- else
+ } else {
lrclk_reg = WM8994_AIF1ADC_LRCLK;
+ dev_dbg(codec->dev, "AIF1 using split LRCLK\n");
+ }
break;
case 2:
aif1_reg = WM8994_AIF2_CONTROL_1;
bclk_reg = WM8994_AIF2_BCLK;
rate_reg = WM8994_AIF2_RATE;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK ||
- wm8994->lrclk_shared[1])
+ wm8994->lrclk_shared[1]) {
lrclk_reg = WM8994_AIF2DAC_LRCLK;
- else
+ } else {
lrclk_reg = WM8994_AIF2ADC_LRCLK;
+ dev_dbg(codec->dev, "AIF2 using split LRCLK\n");
+ }
break;
default:
return -EINVAL;
@@ -3515,10 +3522,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 +3542,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 +3560,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 +3578,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 +3599,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 +3629,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 +3647,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 +3705,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 +3746,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 +3758,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 +3774,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 +3836,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 +3868,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 +3917,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 +3966,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 +4004,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;
- }
-
- 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;
- }
+ wm8994_handle_pdata(wm8994);
- 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 +4026,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)
diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h
index 2e0ca67..d8dce26 100644
--- a/sound/soc/codecs/wm8994.h
+++ b/sound/soc/codecs/wm8994.h
@@ -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
diff --git a/sound/soc/codecs/wm9081.c b/sound/soc/codecs/wm9081.c
index 76b37ff..00249d5 100644
--- a/sound/soc/codecs/wm9081.c
+++ b/sound/soc/codecs/wm9081.c
@@ -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);
diff --git a/sound/soc/codecs/wm9081.h b/sound/soc/codecs/wm9081.h
index 42d3bc7..871cccb 100644
--- a/sound/soc/codecs/wm9081.h
+++ b/sound/soc/codecs/wm9081.h
@@ -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
*/
diff --git a/sound/soc/codecs/wm9090.c b/sound/soc/codecs/wm9090.c
index 1592250..7a18254 100644
--- a/sound/soc/codecs/wm9090.c
+++ b/sound/soc/codecs/wm9090.c
@@ -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,
diff --git a/sound/soc/codecs/wm9090.h b/sound/soc/codecs/wm9090.h
index b08eab9..29b9d9f 100644
--- a/sound/soc/codecs/wm9090.h
+++ b/sound/soc/codecs/wm9090.h
@@ -23,8 +23,6 @@
#ifndef __WM9090_H
#define __WM9090_H
-extern struct snd_soc_codec_device soc_codec_dev_wm9090;
-
/*
* Register values.
*/
diff --git a/sound/soc/codecs/wm9705.c b/sound/soc/codecs/wm9705.c
index 8793341..e4d8f53 100644
--- a/sound/soc/codecs/wm9705.c
+++ b/sound/soc/codecs/wm9705.c
@@ -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");
diff --git a/sound/soc/codecs/wm9705.h b/sound/soc/codecs/wm9705.h
index d380f11..23ea9ce 100644
--- a/sound/soc/codecs/wm9705.h
+++ b/sound/soc/codecs/wm9705.h
@@ -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
diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
index 28790a2..f8f37ae 100644
--- a/sound/soc/codecs/wm9712.c
+++ b/sound/soc/codecs/wm9712.c
@@ -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");
diff --git a/sound/soc/codecs/wm9712.h b/sound/soc/codecs/wm9712.h
index d29e8a1..fb69c3a 100644
--- a/sound/soc/codecs/wm9712.h
+++ b/sound/soc/codecs/wm9712.h
@@ -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
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
index 34e0c91..463917e 100644
--- a/sound/soc/codecs/wm9713.c
+++ b/sound/soc/codecs/wm9713.c
@@ -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");
diff --git a/sound/soc/codecs/wm9713.h b/sound/soc/codecs/wm9713.h
index 63b8d81..793da86 100644
--- a/sound/soc/codecs/wm9713.h
+++ b/sound/soc/codecs/wm9713.h
@@ -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
diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c
index 97f74d6..2b07b17 100644
--- a/sound/soc/davinci/davinci-evm.c
+++ b/sound/soc/davinci/davinci-evm.c
@@ -28,12 +28,9 @@
#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);
diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
index 9e8932a..9f8b6c5 100644
--- a/sound/soc/davinci/davinci-i2s.c
+++ b/sound/soc/davinci/davinci-i2s.c
@@ -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,
},
};
diff --git a/sound/soc/davinci/davinci-i2s.h b/sound/soc/davinci/davinci-i2s.h
index 0b1e77b..48dac3e 100644
--- a/sound/soc/davinci/davinci-i2s.h
+++ b/sound/soc/davinci/davinci-i2s.h
@@ -17,6 +17,4 @@ enum davinci_mcbsp_div {
DAVINCI_MCBSP_CLKGDV, /* Sample rate generator divider */
};
-extern struct snd_soc_dai davinci_i2s_dai;
-
#endif
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
index b247208..c8e97dc 100644
--- a/sound/soc/davinci/davinci-mcasp.c
+++ b/sound/soc/davinci/davinci-mcasp.c
@@ -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;
diff --git a/sound/soc/davinci/davinci-mcasp.h b/sound/soc/davinci/davinci-mcasp.h
index e755b51..4681acc 100644
--- a/sound/soc/davinci/davinci-mcasp.h
+++ b/sound/soc/davinci/davinci-mcasp.h
@@ -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
diff --git a/sound/soc/davinci/davinci-pcm.c b/sound/soc/davinci/davinci-pcm.c
index a712411..9d35b8c 100644
--- a/sound/soc/davinci/davinci-pcm.c
+++ b/sound/soc/davinci/davinci-pcm.c
@@ -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");
diff --git a/sound/soc/davinci/davinci-pcm.h b/sound/soc/davinci/davinci-pcm.h
index b799a02..c0d6c9b 100644
--- a/sound/soc/davinci/davinci-pcm.h
+++ b/sound/soc/davinci/davinci-pcm.h
@@ -28,7 +28,4 @@ struct davinci_pcm_dma_params {
unsigned int fifo_level;
};
-
-extern struct snd_soc_platform davinci_soc_platform;
-
#endif
diff --git a/sound/soc/davinci/davinci-sffsdr.c b/sound/soc/davinci/davinci-sffsdr.c
index 40eccfe..997c54f 100644
--- a/sound/soc/davinci/davinci-sffsdr.c
+++ b/sound/soc/davinci/davinci-sffsdr.c
@@ -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);
diff --git a/sound/soc/davinci/davinci-vcif.c b/sound/soc/davinci/davinci-vcif.c
index 4867853..ea232f6 100644
--- a/sound/soc/davinci/davinci-vcif.c
+++ b/sound/soc/davinci/davinci-vcif.c
@@ -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
index 571c994..0000000
--- a/sound/soc/davinci/davinci-vcif.h
+++ /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
diff --git a/sound/soc/ep93xx/ep93xx-i2s.c b/sound/soc/ep93xx/ep93xx-i2s.c
index 00b9466..4f48733 100644
--- a/sound/soc/ep93xx/ep93xx-i2s.c
+++ b/sound/soc/ep93xx/ep93xx-i2s.c
@@ -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
index 3bd4ebf..0000000
--- a/sound/soc/ep93xx/ep93xx-i2s.h
+++ /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 */
diff --git a/sound/soc/ep93xx/ep93xx-pcm.c b/sound/soc/ep93xx/ep93xx-pcm.c
index 4ba9384..2f121dd 100644
--- a/sound/soc/ep93xx/ep93xx-pcm.c
+++ b/sound/soc/ep93xx/ep93xx-pcm.c
@@ -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);
diff --git a/sound/soc/ep93xx/ep93xx-pcm.h b/sound/soc/ep93xx/ep93xx-pcm.h
index 4ffdd3f..111e112 100644
--- a/sound/soc/ep93xx/ep93xx-pcm.h
+++ b/sound/soc/ep93xx/ep93xx-pcm.h
@@ -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 */
diff --git a/sound/soc/ep93xx/snappercl15.c b/sound/soc/ep93xx/snappercl15.c
index 64955340..28ab5ff 100644
--- a/sound/soc/ep93xx/snappercl15.c
+++ b/sound/soc/ep93xx/snappercl15.c
@@ -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);
diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
index 8cb65cc..d754d34 100644
--- a/sound/soc/fsl/Kconfig
+++ b/sound/soc/fsl/Kconfig
@@ -1,27 +1,36 @@
-config SND_SOC_OF_SIMPLE
- tristate
-
config SND_MPC52xx_DMA
tristate
-# ASoC platform support for the Freescale MPC8610 SOC. This compiles drivers
-# for the SSI and the Elo DMA controller. You will still need to select
-# a platform driver and a codec driver.
-config SND_SOC_MPC8610
+# ASoC platform support for the Freescale PowerPC SOCs that have an SSI and
+# an Elo DMA controller, such as the MPC8610 and P1022. You will still need to
+# select a platform driver and a codec driver.
+config SND_SOC_POWERPC_SSI
tristate
- depends on MPC8610
+ depends on FSL_SOC
config SND_SOC_MPC8610_HPCD
tristate "ALSA SoC support for the Freescale MPC8610 HPCD board"
# I2C is necessary for the CS4270 driver
depends on MPC8610_HPCD && I2C
- select SND_SOC_MPC8610
+ select SND_SOC_POWERPC_SSI
select SND_SOC_CS4270
select SND_SOC_CS4270_VD33_ERRATA
default y if MPC8610_HPCD
help
Say Y if you want to enable audio on the Freescale MPC8610 HPCD.
+config SND_SOC_P1022_DS
+ tristate "ALSA SoC support for the Freescale P1022 DS board"
+ # I2C is necessary for the WM8776 driver
+ depends on P1022_DS && I2C
+ select SND_SOC_POWERPC_SSI
+ select SND_SOC_WM8776
+ default y if P1022_DS
+ help
+ Say Y if you want to enable audio on the Freescale P1022 DS board.
+ This will also include the Wolfson Microelectronics WM8776 codec
+ driver.
+
config SND_SOC_MPC5200_I2S
tristate "Freescale MPC5200 PSC in I2S mode driver"
depends on PPC_MPC52xx && PPC_BESTCOMM
diff --git a/sound/soc/fsl/Makefile b/sound/soc/fsl/Makefile
index a83a739..b4a38c0 100644
--- a/sound/soc/fsl/Makefile
+++ b/sound/soc/fsl/Makefile
@@ -1,14 +1,15 @@
-# 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
-# MPC8610 Platform Support
+# P1022 DS Machine Support
+snd-soc-p1022-ds-objs := p1022_ds.o
+obj-$(CONFIG_SND_SOC_P1022_DS) += snd-soc-p1022-ds.o
+
+# Freescale PowerPC SSI/DMA Platform Support
snd-soc-fsl-ssi-objs := fsl_ssi.o
snd-soc-fsl-dma-objs := fsl_dma.o
-obj-$(CONFIG_SND_SOC_MPC8610) += snd-soc-fsl-ssi.o snd-soc-fsl-dma.o
+obj-$(CONFIG_SND_SOC_POWERPC_SSI) += snd-soc-fsl-ssi.o snd-soc-fsl-dma.o
# MPC5200 Platform Support
obj-$(CONFIG_SND_MPC52xx_DMA) += mpc5200_dma.o
diff --git a/sound/soc/fsl/efika-audio-fabric.c b/sound/soc/fsl/efika-audio-fabric.c
index 1a5b8e0..53251e6 100644
--- a/sound/soc/fsl/efika-audio-fabric.c
+++ b/sound/soc/fsl/efika-audio-fabric.c
@@ -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"
@@ -32,21 +31,24 @@
#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) {
diff --git a/sound/soc/fsl/fsl_dma.c b/sound/soc/fsl/fsl_dma.c
index 410c749..4cf98c0 100644
--- a/sound/soc/fsl/fsl_dma.c
+++ b/sound/soc/fsl/fsl_dma.c
@@ -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,9 @@
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/gfp.h>
+#include <linux/of_platform.h>
+#include <linux/list.h>
+#include <linux/slab.h>
#include <sound/core.h>
#include <sound/pcm.h>
@@ -29,6 +33,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
@@ -52,26 +57,16 @@
#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;
+ unsigned int ssi_fifo_depth;
+ 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 +83,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,12 +97,11 @@ 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;
dma_addr_t ssi_sxx_phys;
+ unsigned int ssi_fifo_depth;
dma_addr_t ld_buf_phys;
unsigned int current_link;
dma_addr_t dma_buf_phys;
@@ -185,13 +177,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 +214,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 +227,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 +237,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 +252,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 +285,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)
@@ -301,25 +306,29 @@ static int fsl_dma_new(struct snd_card *card, struct snd_soc_dai *dai,
if (!card->dev->coherent_dma_mask)
card->dev->coherent_dma_mask = fsl_dma_dmamask;
- ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
- 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;
+ /* Some codecs have separate DAIs for playback and capture, so we
+ * should allocate a DMA buffer only for the streams that are valid.
+ */
+
+ if (dai->driver->playback.channels_min) {
+ ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
+ fsl_dma_hardware.buffer_bytes_max,
+ &pcm->streams[0].substream->dma_buffer);
+ if (ret) {
+ dev_err(card->dev, "can't alloc playback dma buffer\n");
+ return ret;
+ }
}
- ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
- fsl_dma_hardware.buffer_bytes_max,
- &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;
+ if (dai->driver->capture.channels_min) {
+ ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, card->dev,
+ fsl_dma_hardware.buffer_bytes_max,
+ &pcm->streams[1].substream->dma_buffer);
+ if (ret) {
+ snd_dma_free_pages(&pcm->streams[0].substream->dma_buffer);
+ dev_err(card->dev, "can't alloc capture dma buffer\n");
+ return ret;
+ }
}
return 0;
@@ -390,6 +399,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 +420,45 @@ 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->ssi_fifo_depth = dma->ssi_fifo_depth;
+ 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,13 +552,15 @@ 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 =
+ unsigned int sample_bits =
snd_pcm_format_physical_width(params_format(hw_params));
/* Number of bytes per frame */
- unsigned int frame_size = 2 * (sample_size / 8);
+ unsigned int sample_bytes = sample_bits / 8;
/* Bus address of SSI STX register */
dma_addr_t ssi_sxx_phys = dma_private->ssi_sxx_phys;
@@ -592,7 +600,7 @@ static int fsl_dma_hw_params(struct snd_pcm_substream *substream,
* that offset here. While we're at it, also tell the DMA controller
* how much data to transfer per sample.
*/
- switch (sample_size) {
+ switch (sample_bits) {
case 8:
mr |= CCSR_DMA_MR_DAHTS_1 | CCSR_DMA_MR_SAHTS_1;
ssi_sxx_phys += 3;
@@ -606,23 +614,42 @@ 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_bits);
return -EINVAL;
}
/*
- * BWC should always be a multiple of the frame size. BWC determines
- * how many bytes are sent/received before the DMA controller checks the
- * SSI to see if it needs to stop. For playback, the transmit FIFO can
- * hold three frames, so we want to send two frames at a time. For
- * capture, the receive FIFO is triggered when it contains one frame, so
- * we want to receive one frame at a time.
+ * BWC determines how many bytes are sent/received before the DMA
+ * controller checks the SSI to see if it needs to stop. BWC should
+ * always be a multiple of the frame size, so that we always transmit
+ * whole frames. Each frame occupies two slots in the FIFO. The
+ * parameter for CCSR_DMA_MR_BWC() is rounded down the next power of two
+ * (MR[BWC] can only represent even powers of two).
+ *
+ * To simplify the process, we set BWC to the largest value that is
+ * less than or equal to the FIFO watermark. For playback, this ensures
+ * that we transfer the maximum amount without overrunning the FIFO.
+ * For capture, this ensures that we transfer the maximum amount without
+ * underrunning the FIFO.
+ *
+ * f = SSI FIFO depth
+ * w = SSI watermark value (which equals f - 2)
+ * b = DMA bandwidth count (in bytes)
+ * s = sample size (in bytes, which equals frame_size * 2)
+ *
+ * For playback, we never transmit more than the transmit FIFO
+ * watermark, otherwise we might write more data than the FIFO can hold.
+ * The watermark is equal to the FIFO depth minus two.
+ *
+ * For capture, two equations must hold:
+ * w > f - (b / s)
+ * w >= b / s
+ *
+ * So, b > 2 * s, but b must also be <= s * w. To simplify, we set
+ * b = s * w, which is equal to
+ * (dma_private->ssi_fifo_depth - 2) * sample_bytes.
*/
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
- mr |= CCSR_DMA_MR_BWC(2 * frame_size);
- else
- mr |= CCSR_DMA_MR_BWC(frame_size);
+ mr |= CCSR_DMA_MR_BWC((dma_private->ssi_fifo_depth - 2) * sample_bytes);
out_be32(&dma_channel->mr, mr);
@@ -631,12 +658,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 +673,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 +715,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 +751,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 +812,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 +856,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 +896,114 @@ 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 platform_device *pdev,
+ const struct of_device_id *match)
+ {
+ struct dma_object *dma;
+ struct device_node *np = pdev->dev.of_node;
+ struct device_node *ssi_np;
+ struct resource res;
+ const uint32_t *iprop;
+ 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(&pdev->dev, "cannot find parent SSI node\n");
+ return -ENODEV;
+ }
+
+ ret = of_address_to_resource(ssi_np, 0, &res);
+ if (ret) {
+ dev_err(&pdev->dev, "could not determine resources for %s\n",
+ ssi_np->full_name);
+ of_node_put(ssi_np);
+ return ret;
+ }
+
+ dma = kzalloc(sizeof(*dma) + strlen(np->full_name), GFP_KERNEL);
+ if (!dma) {
+ dev_err(&pdev->dev, "could not allocate dma object\n");
+ of_node_put(ssi_np);
+ 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);
+
+ iprop = of_get_property(ssi_np, "fsl,fifo-depth", NULL);
+ if (iprop)
+ dma->ssi_fifo_depth = *iprop;
+ else
+ /* Older 8610 DTs didn't have the fifo-depth property */
+ dma->ssi_fifo_depth = 8;
+
+ of_node_put(ssi_np);
+
+ ret = snd_soc_register_platform(&pdev->dev, &dma->dai);
+ if (ret) {
+ dev_err(&pdev->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(&pdev->dev, dma);
+
+ return 0;
+}
+
+static int __devexit fsl_soc_dma_remove(struct platform_device *pdev)
{
- static int initialized;
+ struct dma_object *dma = dev_get_drvdata(&pdev->dev);
- /* We only support one DMA controller for now */
- if (initialized)
- return 0;
+ snd_soc_unregister_platform(&pdev->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");
diff --git a/sound/soc/fsl/fsl_dma.h b/sound/soc/fsl/fsl_dma.h
index 385d4a4..78fee97 100644
--- a/sound/soc/fsl/fsl_dma.h
+++ b/sound/soc/fsl/fsl_dma.h
@@ -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
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index 762c1b8..4cc167a 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -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"
/**
@@ -71,33 +71,32 @@
/**
* 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;
+ unsigned int fifo_depth;
+ struct snd_soc_dai_driver cpu_dai_drv;
struct device_attribute dev_attr;
+ struct platform_device *pdev;
struct {
unsigned int rfrc;
@@ -122,6 +121,8 @@ struct fsl_ssi_private {
unsigned int tfe1;
unsigned int tfe0;
} stats;
+
+ char name[1];
};
/**
@@ -280,7 +281,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 +291,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) {
@@ -336,11 +338,20 @@ static int fsl_ssi_startup(struct snd_pcm_substream *substream,
/*
* Set the watermark for transmit FIFI 0 and receive FIFO 0. We
- * don't use FIFO 1. Since the SSI only supports stereo, the
- * watermark should never be an odd number.
+ * don't use FIFO 1. We program the transmit water to signal a
+ * DMA transfer if there are only two (or fewer) elements left
+ * in the FIFO. Two elements equals one frame (left channel,
+ * right channel). This value, however, depends on the depth of
+ * the transmit buffer.
+ *
+ * We program the receive FIFO to notify us if at least two
+ * elements (one frame) have been written to the FIFO. We could
+ * make this value larger (and maybe we should), but this way
+ * data will be written to memory as soon as it's available.
*/
out_be32(&ssi->sfcsr,
- CCSR_SSI_SFCSR_TFWM0(6) | CCSR_SSI_SFCSR_RFWM0(2));
+ CCSR_SSI_SFCSR_TFWM0(ssi_private->fifo_depth - 2) |
+ CCSR_SSI_SFCSR_RFWM0(ssi_private->fifo_depth - 2));
/*
* We keep the SSI disabled because if we enable it, then the
@@ -422,7 +433,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 +469,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 +508,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 +534,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 +610,195 @@ 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 platform_device *pdev,
+ 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 = pdev->dev.of_node;
+ const char *p, *sprop;
+ const uint32_t *iprop;
+ 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(&pdev->dev, "missing codec-handle property\n");
+ return -ENODEV;
+ }
- ssi_private = kzalloc(sizeof(struct fsl_ssi_private), GFP_KERNEL);
+ /* 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(&pdev->dev, "mode %s is unsupported\n", sprop);
+ return -ENODEV;
+ }
+
+ /* 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(&pdev->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;
- dev_set_drvdata(ssi_private->dev, fsl_ssi_dai);
+ /* Get the addresses and IRQ */
+ ret = of_address_to_resource(np, 0, &res);
+ if (ret) {
+ dev_err(&pdev->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);
+
+ /* 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;
+
+ /* Determine the FIFO depth. */
+ iprop = of_get_property(np, "fsl,fifo-depth", NULL);
+ if (iprop)
+ ssi_private->fifo_depth = *iprop;
+ else
+ /* Older 8610 DTs didn't have the fifo-depth property */
+ ssi_private->fifo_depth = 8;
/* 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(&pdev->dev, dev_attr);
if (ret) {
- dev_err(ssi_info->dev, "could not create sysfs %s file\n",
+ dev_err(&pdev->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(&pdev->dev, ssi_private);
+
+ ret = snd_soc_register_dai(&pdev->dev, &ssi_private->cpu_dai_drv);
+ if (ret) {
+ dev_err(&pdev->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(&pdev->dev, name, 0, NULL, 0);
+ if (IS_ERR(ssi_private->pdev)) {
+ ret = PTR_ERR(ssi_private->pdev);
+ dev_err(&pdev->dev, "failed to register platform: %d\n", ret);
+ goto error;
}
- return fsl_ssi_dai;
+ return 0;
+
+error:
+ snd_soc_unregister_dai(&pdev->dev);
+ dev_set_drvdata(&pdev->dev, NULL);
+ if (dev_attr)
+ device_remove_file(&pdev->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 platform_device *pdev)
{
- 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(&pdev->dev);
- snd_soc_unregister_dai(&ssi_private->cpu_dai);
+ platform_device_unregister(ssi_private->pdev);
+ snd_soc_unregister_dai(&pdev->dev);
+ device_remove_file(&pdev->dev, &ssi_private->dev_attr);
kfree(ssi_private);
+ dev_set_drvdata(&pdev->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");
diff --git a/sound/soc/fsl/fsl_ssi.h b/sound/soc/fsl/fsl_ssi.h
index eade01f..2173000 100644
--- a/sound/soc/fsl/fsl_ssi.h
+++ b/sound/soc/fsl/fsl_ssi.h
@@ -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
diff --git a/sound/soc/fsl/mpc5200_dma.c b/sound/soc/fsl/mpc5200_dma.c
index 3dcd146..dce6b55 100644
--- a/sound/soc/fsl/mpc5200_dma.c
+++ b/sound/soc/fsl/mpc5200_dma.c
@@ -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 platform_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 platform_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 platform_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 platform_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");
diff --git a/sound/soc/fsl/mpc5200_dma.h b/sound/soc/fsl/mpc5200_dma.h
index ca99586..a3c0cd5 100644
--- a/sound/soc/fsl/mpc5200_dma.h
+++ b/sound/soc/fsl/mpc5200_dma.h
@@ -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 platform_device *op);
-int mpc5200_audio_dma_destroy(struct platform_device *op);
-
-extern struct snd_soc_platform mpc5200_audio_dma_platform;
-
#endif /* __SOUND_SOC_FSL_MPC5200_DMA_H__ */
diff --git a/sound/soc/fsl/mpc5200_psc_ac97.c b/sound/soc/fsl/mpc5200_psc_ac97.c
index a956023..40acc8e 100644
--- a/sound/soc/fsl/mpc5200_psc_ac97.c
+++ b/sound/soc/fsl/mpc5200_psc_ac97.c
@@ -143,7 +143,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"
@@ -166,7 +166,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);
@@ -181,8 +181,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) {
@@ -207,10 +206,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 */
@@ -237,9 +235,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 = {
@@ -257,7 +254,6 @@ struct snd_soc_dai psc_ac97_dai[] = {
.ops = &psc_ac97_analog_ops,
},
{
- .name = "SPDIF",
.ac97_control = 1,
.playback = {
.channels_min = 1,
@@ -268,7 +264,6 @@ struct snd_soc_dai psc_ac97_dai[] = {
},
.ops = &psc_ac97_digital_ops,
} };
-EXPORT_SYMBOL_GPL(psc_ac97_dai);
@@ -280,18 +275,11 @@ EXPORT_SYMBOL_GPL(psc_ac97_dai);
static int __devinit psc_ac97_of_probe(struct platform_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;
@@ -301,9 +289,6 @@ static int __devinit psc_ac97_of_probe(struct platform_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);
@@ -319,7 +304,8 @@ static int __devinit psc_ac97_of_probe(struct platform_device *op,
static int __devexit psc_ac97_of_remove(struct platform_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 */
diff --git a/sound/soc/fsl/mpc5200_psc_ac97.h b/sound/soc/fsl/mpc5200_psc_ac97.h
index 4bc18c3..e881e78 100644
--- a/sound/soc/fsl/mpc5200_psc_ac97.h
+++ b/sound/soc/fsl/mpc5200_psc_ac97.h
@@ -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
diff --git a/sound/soc/fsl/mpc5200_psc_i2s.c b/sound/soc/fsl/mpc5200_psc_i2s.c
index 534f04cb..74ffed4 100644
--- a/sound/soc/fsl/mpc5200_psc_i2s.c
+++ b/sound/soc/fsl/mpc5200_psc_i2s.c
@@ -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 platform_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 platform_device *op,
static int __devexit psc_i2s_of_remove(struct platform_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 */
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c
index 3b13b8d..0d7dcf1 100644
--- a/sound/soc/fsl/mpc8610_hpcd.c
+++ b/sound/soc/fsl/mpc8610_hpcd.c
@@ -1,85 +1,97 @@
/**
- * 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 <linux/slab.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: 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 +105,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 +121,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 +138,255 @@ 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
+ *
+ * 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
*
- * FIXME: Currently, we only support one DMA controller, so if there are
- * multiple SSI nodes with codecs, only the first will be supported.
+ * 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 platform_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;
+ /* ssi_pdev is the platform device for the SSI node that probed us */
+ struct platform_device *ssi_pdev =
+ container_of(dev, struct platform_device, dev);
+ struct device_node *np = ssi_pdev->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));
+ machine_data->dai[0].cpu_dai_name = dev_name(&ssi_pdev->dev);
+ machine_data->dai[0].ops = &mpc8610_hpcd_ops;
- ssi_info.dev = &ofdev->dev;
-
- /*
- * 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 +396,14 @@ static int mpc8610_hpcd_probe(struct platform_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 +437,153 @@ static int mpc8610_hpcd_probe(struct platform_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;
- 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;
+ dev_err(&pdev->dev, "missing/invalid playback 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;
+ /* 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;
}
- /*
- * 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;
+ /* 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;
- 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;
-
+ /* Associate the card data with the sound device */
+ platform_set_drvdata(sound_device, &machine_data->card);
- /* Set the platform device and ASoC device to point to each other */
- platform_set_drvdata(sound_device, &machine_data->sound_devdata);
-
- 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 platform_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");
diff --git a/sound/soc/fsl/p1022_ds.c b/sound/soc/fsl/p1022_ds.c
new file mode 100644
index 0000000..f8176e8
--- /dev/null
+++ b/sound/soc/fsl/p1022_ds.c
@@ -0,0 +1,590 @@
+/**
+ * Freescale P1022DS ALSA SoC Machine driver
+ *
+ * Author: Timur Tabi <timur@freescale.com>
+ *
+ * Copyright 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/module.h>
+#include <linux/interrupt.h>
+#include <linux/of_device.h>
+#include <linux/slab.h>
+#include <sound/soc.h>
+#include <asm/fsl_guts.h>
+
+#include "fsl_dma.h"
+#include "fsl_ssi.h"
+
+/* P1022-specific PMUXCR and DMUXCR bit definitions */
+
+#define CCSR_GUTS_PMUXCR_UART0_I2C1_MASK 0x0001c000
+#define CCSR_GUTS_PMUXCR_UART0_I2C1_UART0_SSI 0x00010000
+#define CCSR_GUTS_PMUXCR_UART0_I2C1_SSI 0x00018000
+
+#define CCSR_GUTS_PMUXCR_SSI_DMA_TDM_MASK 0x00000c00
+#define CCSR_GUTS_PMUXCR_SSI_DMA_TDM_SSI 0x00000000
+
+#define CCSR_GUTS_DMUXCR_PAD 1 /* DMA controller/channel set to pad */
+#define CCSR_GUTS_DMUXCR_SSI 2 /* DMA controller/channel set to SSI */
+
+/*
+ * 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 target (CCSR_GUTS_DMUXCR_xxx)
+ */
+static inline void guts_set_dmuxcr(struct ccsr_guts_85xx __iomem *guts,
+ unsigned int co, unsigned int ch, unsigned int device)
+{
+ unsigned int shift = 16 + (8 * (1 - co) + 2 * (3 - ch));
+
+ clrsetbits_be32(&guts->dmuxcr, 3 << shift, device << shift);
+}
+
+/* There's only one global utilities register */
+static phys_addr_t guts_phys;
+
+#define DAI_NAME_SIZE 32
+
+/**
+ * machine_data: machine-specific ASoC device data
+ *
+ * This structure contains data for a single sound platform device on an
+ * P1022 DS. Some of the data is taken from the device tree.
+ */
+struct machine_data {
+ 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;
+ 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_name[DAI_NAME_SIZE];
+ char platform_name[2][DAI_NAME_SIZE]; /* One for each DMA channel */
+};
+
+/**
+ * p1022_ds_machine_probe: initialize the board
+ *
+ * This function is used to initialize the board-specific hardware.
+ *
+ * Here we program the DMACR and PMUXCR registers.
+ */
+static int p1022_ds_machine_probe(struct platform_device *sound_device)
+{
+ struct snd_soc_card *card = platform_get_drvdata(sound_device);
+ struct machine_data *mdata =
+ container_of(card, struct machine_data, card);
+ struct ccsr_guts_85xx __iomem *guts;
+
+ guts = ioremap(guts_phys, sizeof(struct ccsr_guts_85xx));
+ if (!guts) {
+ dev_err(card->dev, "could not map global utilities\n");
+ return -ENOMEM;
+ }
+
+ /* Enable SSI Tx signal */
+ clrsetbits_be32(&guts->pmuxcr, CCSR_GUTS_PMUXCR_UART0_I2C1_MASK,
+ CCSR_GUTS_PMUXCR_UART0_I2C1_UART0_SSI);
+
+ /* Enable SSI Rx signal */
+ clrsetbits_be32(&guts->pmuxcr, CCSR_GUTS_PMUXCR_SSI_DMA_TDM_MASK,
+ CCSR_GUTS_PMUXCR_SSI_DMA_TDM_SSI);
+
+ /* Enable DMA Channel for SSI */
+ guts_set_dmuxcr(guts, mdata->dma_id[0], mdata->dma_channel_id[0],
+ CCSR_GUTS_DMUXCR_SSI);
+
+ guts_set_dmuxcr(guts, mdata->dma_id[1], mdata->dma_channel_id[1],
+ CCSR_GUTS_DMUXCR_SSI);
+
+ iounmap(guts);
+
+ return 0;
+}
+
+/**
+ * p1022_ds_startup: program the board with various hardware parameters
+ *
+ * This function takes board-specific information, like clock frequencies
+ * and serial data formats, and passes that information to the codec and
+ * transport drivers.
+ */
+static int p1022_ds_startup(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct machine_data *mdata =
+ container_of(rtd->card, struct machine_data, card);
+ struct device *dev = rtd->card->dev;
+ int ret = 0;
+
+ /* Tell the codec driver what the serial protocol is. */
+ ret = snd_soc_dai_set_fmt(rtd->codec_dai, mdata->dai_format);
+ if (ret < 0) {
+ dev_err(dev, "could not set codec driver audio format\n");
+ return ret;
+ }
+
+ /*
+ * Tell the codec driver what the MCLK frequency is, and whether it's
+ * a slave or master.
+ */
+ ret = snd_soc_dai_set_sysclk(rtd->codec_dai, 0, mdata->clk_frequency,
+ mdata->codec_clk_direction);
+ if (ret < 0) {
+ dev_err(dev, "could not set codec driver clock params\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+/**
+ * p1022_ds_machine_remove: Remove the sound device
+ *
+ * This function is called to remove the sound device for one SSI. We
+ * de-program the DMACR and PMUXCR register.
+ */
+static int p1022_ds_machine_remove(struct platform_device *sound_device)
+{
+ struct snd_soc_card *card = platform_get_drvdata(sound_device);
+ struct machine_data *mdata =
+ container_of(card, struct machine_data, card);
+ struct ccsr_guts_85xx __iomem *guts;
+
+ guts = ioremap(guts_phys, sizeof(struct ccsr_guts_85xx));
+ if (!guts) {
+ dev_err(card->dev, "could not map global utilities\n");
+ return -ENOMEM;
+ }
+
+ /* Restore the signal routing */
+ clrbits32(&guts->pmuxcr, CCSR_GUTS_PMUXCR_UART0_I2C1_MASK);
+ clrbits32(&guts->pmuxcr, CCSR_GUTS_PMUXCR_SSI_DMA_TDM_MASK);
+ guts_set_dmuxcr(guts, mdata->dma_id[0], mdata->dma_channel_id[0], 0);
+ guts_set_dmuxcr(guts, mdata->dma_id[1], mdata->dma_channel_id[1], 0);
+
+ iounmap(guts);
+
+ return 0;
+}
+
+/**
+ * p1022_ds_ops: ASoC machine driver operations
+ */
+static struct snd_soc_ops p1022_ds_ops = {
+ .startup = p1022_ds_startup,
+};
+
+/**
+ * get_node_by_phandle_name - get a node by its phandle name
+ *
+ * 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.
+ *
+ * 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)
+{
+ np = of_parse_phandle(np, name, 0);
+ if (!np)
+ return NULL;
+
+ if (!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
+ *
+ * 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;
+ int ret = -1;
+
+ if (!parent)
+ return -1;
+
+ iprop = of_get_property(parent, "cell-index", NULL);
+ if (iprop)
+ ret = *iprop;
+
+ of_node_put(parent);
+
+ return ret;
+}
+
+/**
+ * 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.
+ *
+ * The dev_name for such devices include the bus number and I2C address. For
+ * example, "cs4270-codec.0-004f".
+ */
+static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
+{
+ 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;
+}
+
+/**
+ * p1022_ds_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 p1022_ds_probe(struct platform_device *pdev)
+{
+ struct device *dev = pdev->dev.parent;
+ /* ssi_pdev is the platform device for the SSI node that probed us */
+ struct platform_device *ssi_pdev =
+ container_of(dev, struct platform_device, dev);
+ struct device_node *np = ssi_pdev->dev.of_node;
+ struct device_node *codec_np = NULL;
+ struct platform_device *sound_device = NULL;
+ struct machine_data *mdata;
+ int ret = -ENODEV;
+ const char *sprop;
+ const u32 *iprop;
+
+ /* Find the codec node for this SSI. */
+ codec_np = of_parse_phandle(np, "codec-handle", 0);
+ if (!codec_np) {
+ dev_err(dev, "could not find codec node\n");
+ return -EINVAL;
+ }
+
+ mdata = kzalloc(sizeof(struct machine_data), GFP_KERNEL);
+ if (!mdata)
+ return -ENOMEM;
+
+ mdata->dai[0].cpu_dai_name = dev_name(&ssi_pdev->dev);
+ mdata->dai[0].ops = &p1022_ds_ops;
+
+ /* Determine the codec name, it will be used as the codec DAI name */
+ ret = codec_node_dev_name(codec_np, mdata->codec_name, DAI_NAME_SIZE);
+ if (ret) {
+ dev_err(&pdev->dev, "invalid codec node %s\n",
+ codec_np->full_name);
+ ret = -EINVAL;
+ goto error;
+ }
+ mdata->dai[0].codec_name = mdata->codec_name;
+
+ /* We register two DAIs per SSI, one for playback and the other for
+ * capture. We support codecs that have separate DAIs for both playback
+ * and capture.
+ */
+ memcpy(&mdata->dai[1], &mdata->dai[0], sizeof(struct snd_soc_dai_link));
+
+ /* The DAI names from the codec (snd_soc_dai_driver.name) */
+ mdata->dai[0].codec_dai_name = "wm8776-hifi-playback";
+ mdata->dai[1].codec_dai_name = "wm8776-hifi-capture";
+
+ /* Get the device ID */
+ iprop = of_get_property(np, "cell-index", NULL);
+ if (!iprop) {
+ dev_err(&pdev->dev, "cell-index property not found\n");
+ ret = -EINVAL;
+ goto error;
+ }
+ mdata->ssi_id = *iprop;
+
+ /* Get the serial format and clock direction. */
+ sprop = of_get_property(np, "fsl,mode", NULL);
+ if (!sprop) {
+ dev_err(&pdev->dev, "fsl,mode property not found\n");
+ ret = -EINVAL;
+ goto error;
+ }
+
+ if (strcasecmp(sprop, "i2s-slave") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_I2S;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_OUT;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_IN;
+
+ /* 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(&pdev->dev, "codec bus-frequency "
+ "property is missing or invalid\n");
+ ret = -EINVAL;
+ goto error;
+ }
+ mdata->clk_frequency = *iprop;
+ } else if (strcasecmp(sprop, "i2s-master") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_I2S;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_OUT;
+ } else if (strcasecmp(sprop, "lj-slave") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_LEFT_J;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_OUT;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_IN;
+ } else if (strcasecmp(sprop, "lj-master") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_LEFT_J;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_OUT;
+ } else if (strcasecmp(sprop, "rj-slave") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_RIGHT_J;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_OUT;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_IN;
+ } else if (strcasecmp(sprop, "rj-master") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_RIGHT_J;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_OUT;
+ } else if (strcasecmp(sprop, "ac97-slave") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_AC97;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_OUT;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_IN;
+ } else if (strcasecmp(sprop, "ac97-master") == 0) {
+ mdata->dai_format = SND_SOC_DAIFMT_AC97;
+ mdata->codec_clk_direction = SND_SOC_CLOCK_IN;
+ mdata->cpu_clk_direction = SND_SOC_CLOCK_OUT;
+ } else {
+ dev_err(&pdev->dev,
+ "unrecognized fsl,mode property '%s'\n", sprop);
+ ret = -EINVAL;
+ goto error;
+ }
+
+ if (!mdata->clk_frequency) {
+ dev_err(&pdev->dev, "unknown clock frequency\n");
+ ret = -EINVAL;
+ goto error;
+ }
+
+ /* Find the playback DMA channel to use. */
+ mdata->dai[0].platform_name = mdata->platform_name[0];
+ ret = get_dma_channel(np, "fsl,playback-dma", &mdata->dai[0],
+ &mdata->dma_channel_id[0],
+ &mdata->dma_id[0]);
+ if (ret) {
+ dev_err(&pdev->dev, "missing/invalid playback DMA phandle\n");
+ goto error;
+ }
+
+ /* Find the capture DMA channel to use. */
+ mdata->dai[1].platform_name = mdata->platform_name[1];
+ ret = get_dma_channel(np, "fsl,capture-dma", &mdata->dai[1],
+ &mdata->dma_channel_id[1],
+ &mdata->dma_id[1]);
+ if (ret) {
+ dev_err(&pdev->dev, "missing/invalid capture DMA phandle\n");
+ goto error;
+ }
+
+ /* Initialize our DAI data structure. */
+ mdata->dai[0].stream_name = "playback";
+ mdata->dai[1].stream_name = "capture";
+ mdata->dai[0].name = mdata->dai[0].stream_name;
+ mdata->dai[1].name = mdata->dai[1].stream_name;
+
+ mdata->card.probe = p1022_ds_machine_probe;
+ mdata->card.remove = p1022_ds_machine_remove;
+ mdata->card.name = pdev->name; /* The platform driver name */
+ mdata->card.num_links = 2;
+ mdata->card.dai_link = mdata->dai;
+
+ /* Allocate a new audio platform device structure */
+ sound_device = platform_device_alloc("soc-audio", -1);
+ if (!sound_device) {
+ dev_err(&pdev->dev, "platform device alloc failed\n");
+ ret = -ENOMEM;
+ goto error;
+ }
+
+ /* Associate the card data with the sound device */
+ platform_set_drvdata(sound_device, &mdata->card);
+
+ /* Register with ASoC */
+ ret = platform_device_add(sound_device);
+ if (ret) {
+ dev_err(&pdev->dev, "platform device add failed\n");
+ goto error;
+ }
+
+ of_node_put(codec_np);
+
+ return 0;
+
+error:
+ of_node_put(codec_np);
+
+ if (sound_device)
+ platform_device_unregister(sound_device);
+
+ kfree(mdata);
+
+ return ret;
+}
+
+/**
+ * p1022_ds_remove: remove the platform device
+ *
+ * This function is called when the platform device is removed.
+ */
+static int __devexit p1022_ds_remove(struct platform_device *pdev)
+{
+ struct platform_device *sound_device = dev_get_drvdata(&pdev->dev);
+ struct snd_soc_card *card = platform_get_drvdata(sound_device);
+ struct machine_data *mdata =
+ container_of(card, struct machine_data, card);
+
+ platform_device_unregister(sound_device);
+
+ kfree(mdata);
+ sound_device->dev.platform_data = NULL;
+
+ dev_set_drvdata(&pdev->dev, NULL);
+
+ return 0;
+}
+
+static struct platform_driver p1022_ds_driver = {
+ .probe = p1022_ds_probe,
+ .remove = __devexit_p(p1022_ds_remove),
+ .driver = {
+ /* The name must match the 'model' property in the device tree,
+ * in lowercase letters, but only the part after that last
+ * comma. This is because some model properties have a "fsl,"
+ * prefix.
+ */
+ .name = "snd-soc-p1022",
+ .owner = THIS_MODULE,
+ },
+};
+
+/**
+ * p1022_ds_init: machine driver initialization.
+ *
+ * This function is called when this module is loaded.
+ */
+static int __init p1022_ds_init(void)
+{
+ struct device_node *guts_np;
+ struct resource res;
+
+ pr_info("Freescale P1022 DS ALSA SoC machine driver\n");
+
+ /* Get the physical address of the global utilities registers */
+ guts_np = of_find_compatible_node(NULL, NULL, "fsl,p1022-guts");
+ if (of_address_to_resource(guts_np, 0, &res)) {
+ pr_err("p1022-ds: missing/invalid global utilities node\n");
+ return -EINVAL;
+ }
+ guts_phys = res.start;
+ of_node_put(guts_np);
+
+ return platform_driver_register(&p1022_ds_driver);
+}
+
+/**
+ * p1022_ds_exit: machine driver exit
+ *
+ * This function is called when this driver is unloaded.
+ */
+static void __exit p1022_ds_exit(void)
+{
+ platform_driver_unregister(&p1022_ds_driver);
+}
+
+module_init(p1022_ds_init);
+module_exit(p1022_ds_exit);
+
+MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
+MODULE_DESCRIPTION("Freescale P1022 DS ALSA SoC machine driver");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/fsl/pcm030-audio-fabric.c b/sound/soc/fsl/pcm030-audio-fabric.c
index 6644cba..fe15bb2 100644
--- a/sound/soc/fsl/pcm030-audio-fabric.c
+++ b/sound/soc/fsl/pcm030-audio-fabric.c
@@ -32,21 +32,24 @@
#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
index 3bc13fd..0000000
--- a/sound/soc/fsl/soc-of-simple.c
+++ /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);
diff --git a/sound/soc/imx/Kconfig b/sound/soc/imx/Kconfig
index 687c76f..642270a 100644
--- a/sound/soc/imx/Kconfig
+++ b/sound/soc/imx/Kconfig
@@ -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
diff --git a/sound/soc/imx/Makefile b/sound/soc/imx/Makefile
index 7bc57ba..b67fc02 100644
--- a/sound/soc/imx/Makefile
+++ b/sound/soc/imx/Makefile
@@ -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
diff --git a/sound/soc/imx/eukrea-tlv320.c b/sound/soc/imx/eukrea-tlv320.c
index f15dfbd..807f736 100644
--- a/sound/soc/imx/eukrea-tlv320.c
+++ b/sound/soc/imx/eukrea-tlv320.c
@@ -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) {
diff --git a/sound/soc/imx/imx-pcm-dma-mx2.c b/sound/soc/imx/imx-pcm-dma-mx2.c
index 0a595da..fd493ee 100644
--- a/sound/soc/imx/imx-pcm-dma-mx2.c
+++ b/sound/soc/imx/imx-pcm-dma-mx2.c
@@ -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);
diff --git a/sound/soc/imx/imx-pcm-fiq.c b/sound/soc/imx/imx-pcm-fiq.c
index b2bf272..413b78d 100644
--- a/sound/soc/imx/imx-pcm-fiq.c
+++ b/sound/soc/imx/imx-pcm-fiq.c
@@ -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);
diff --git a/sound/soc/imx/imx-ssi.c b/sound/soc/imx/imx-ssi.c
index c81da05..26716e9 100644
--- a/sound/soc/imx/imx-ssi.c
+++ b/sound/soc/imx/imx-ssi.c
@@ -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;
@@ -282,9 +282,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;
@@ -353,22 +351,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)
{
@@ -384,6 +366,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)
{
@@ -415,14 +398,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)
@@ -432,6 +415,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)
{
@@ -453,14 +437,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",
@@ -580,25 +590,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;
@@ -643,9 +646,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);
@@ -660,37 +663,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);
@@ -709,16 +711,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);
@@ -733,34 +734,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);
diff --git a/sound/soc/imx/imx-ssi.h b/sound/soc/imx/imx-ssi.h
index 55f26eb..53b780d 100644
--- a/sound/soc/imx/imx-ssi.h
+++ b/sound/soc/imx/imx-ssi.h
@@ -183,9 +183,6 @@
#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,
diff --git a/sound/soc/imx/phycore-ac97.c b/sound/soc/imx/phycore-ac97.c
index a8307d5..65f0f99 100644
--- a/sound/soc/imx/phycore-ac97.c
+++ b/sound/soc/imx/phycore-ac97.c
@@ -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) {
diff --git a/sound/soc/imx/wm1133-ev1.c b/sound/soc/imx/wm1133-ev1.c
index a6e7d94..7406863 100644
--- a/sound/soc/imx/wm1133-ev1.c
+++ b/sound/soc/imx/wm1133-ev1.c
@@ -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)
diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c
index eb518f0..f3cffd1 100644
--- a/sound/soc/jz4740/jz4740-i2s.c
+++ b/sound/soc/jz4740/jz4740-i2s.c
@@ -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);
diff --git a/sound/soc/jz4740/jz4740-i2s.h b/sound/soc/jz4740/jz4740-i2s.h
index da22ed8..5e49339 100644
--- a/sound/soc/jz4740/jz4740-i2s.h
+++ b/sound/soc/jz4740/jz4740-i2s.h
@@ -13,6 +13,4 @@
#define JZ4740_I2S_BIT_CLK 0
-extern struct snd_soc_dai jz4740_i2s_dai;
-
#endif
diff --git a/sound/soc/jz4740/jz4740-pcm.c b/sound/soc/jz4740/jz4740-pcm.c
index ee68d85..fb1483f 100644
--- a/sound/soc/jz4740/jz4740-pcm.c
+++ b/sound/soc/jz4740/jz4740-pcm.c
@@ -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,
},
};
diff --git a/sound/soc/jz4740/jz4740-pcm.h b/sound/soc/jz4740/jz4740-pcm.h
index e3f221e..1220cbb 100644
--- a/sound/soc/jz4740/jz4740-pcm.h
+++ b/sound/soc/jz4740/jz4740-pcm.h
@@ -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;
diff --git a/sound/soc/jz4740/qi_lb60.c b/sound/soc/jz4740/qi_lb60.c
index f15f491..ef1a99e 100644
--- a/sound/soc/jz4740/qi_lb60.c
+++ b/sound/soc/jz4740/qi_lb60.c
@@ -22,11 +22,6 @@
#include <sound/soc-dapm.h>
#include <linux/gpio.h>
-#include "../codecs/jz4740.h"
-#include "jz4740-pcm.h"
-#include "jz4740-i2s.h"
-
-
#define QI_LB60_SND_GPIO JZ_GPIO_PORTB(29)
#define QI_LB60_AMP_GPIO JZ_GPIO_PORTD(4)
@@ -60,10 +55,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 +80,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-pcm-audio",
+ .codec_dai_name = "jz4740-hifi",
+ .codec_name = "jz4740-codec",
.init = qi_lb60_codec_init,
};
@@ -93,12 +91,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 +121,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) {
diff --git a/sound/soc/kirkwood/kirkwood-dma.c b/sound/soc/kirkwood/kirkwood-dma.c
index a30205b..693049d 100644
--- a/sound/soc/kirkwood/kirkwood-dma.c
+++ b/sound/soc/kirkwood/kirkwood-dma.c
@@ -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
index ba4454c..0000000
--- a/sound/soc/kirkwood/kirkwood-dma.h
+++ /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
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c
index 981ffc2..9b62cba 100644
--- a/sound/soc/kirkwood/kirkwood-i2s.c
+++ b/sound/soc/kirkwood/kirkwood-i2s.c
@@ -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"
@@ -33,13 +32,10 @@
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
index c5595c6..0000000
--- a/sound/soc/kirkwood/kirkwood-i2s.h
+++ /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
diff --git a/sound/soc/kirkwood/kirkwood-openrd.c b/sound/soc/kirkwood/kirkwood-openrd.c
index 0353d06..cc1a1e2 100644
--- a/sound/soc/kirkwood/kirkwood-openrd.c
+++ b/sound/soc/kirkwood/kirkwood-openrd.c
@@ -18,16 +18,14 @@
#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) {
diff --git a/sound/soc/nuc900/nuc900-ac97.c b/sound/soc/nuc900/nuc900-ac97.c
index caa7c90..02b64a1 100644
--- a/sound/soc/nuc900/nuc900-ac97.c
+++ b/sound/soc/nuc900/nuc900-ac97.c
@@ -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,
diff --git a/sound/soc/nuc900/nuc900-audio.c b/sound/soc/nuc900/nuc900-audio.c
index 72e6f51..161f5b6 100644
--- a/sound/soc/nuc900/nuc900-audio.c
+++ b/sound/soc/nuc900/nuc900-audio.c
@@ -20,26 +20,21 @@
#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) {
diff --git a/sound/soc/nuc900/nuc900-audio.h b/sound/soc/nuc900/nuc900-audio.h
index 3038f51..aeed8ea 100644
--- a/sound/soc/nuc900/nuc900-audio.h
+++ b/sound/soc/nuc900/nuc900-audio.h
@@ -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 */
diff --git a/sound/soc/nuc900/nuc900-pcm.c b/sound/soc/nuc900/nuc900-pcm.c
index e81e803..195d1ac 100644
--- a/sound/soc/nuc900/nuc900-pcm.c
+++ b/sound/soc/nuc900/nuc900-pcm.c
@@ -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");
diff --git a/sound/soc/omap/am3517evm.c b/sound/soc/omap/am3517evm.c
index 135901b..68bd902 100644
--- a/sound/soc/omap/am3517evm.c
+++ b/sound/soc/omap/am3517evm.c
@@ -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)
diff --git a/sound/soc/omap/ams-delta.c b/sound/soc/omap/ams-delta.c
index b0f618e..438146a 100644
--- a/sound/soc/omap/ams-delta.c
+++ b/sound/soc/omap/ams-delta.c
@@ -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-voice",
.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");
diff --git a/sound/soc/omap/igep0020.c b/sound/soc/omap/igep0020.c
index 3583c42..d296cfc 100644
--- a/sound/soc/omap/igep0020.c
+++ b/sound/soc/omap/igep0020.c
@@ -33,14 +33,13 @@
#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)
diff --git a/sound/soc/omap/mcpdm.c b/sound/soc/omap/mcpdm.c
index 90b8bf7..928f037 100644
--- a/sound/soc/omap/mcpdm.c
+++ b/sound/soc/omap/mcpdm.c
@@ -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);
diff --git a/sound/soc/omap/mcpdm.h b/sound/soc/omap/mcpdm.h
index 7bb326e..df3e16f 100644
--- a/sound/soc/omap/mcpdm.h
+++ b/sound/soc/omap/mcpdm.h
@@ -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);
diff --git a/sound/soc/omap/n810.c b/sound/soc/omap/n810.c
index 08e09d7..a3b6d89 100644
--- a/sound/soc/omap/n810.c
+++ b/sound/soc/omap/n810.c
@@ -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;
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index 86f21390..7ba5690 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -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);
diff --git a/sound/soc/omap/omap-mcbsp.h b/sound/soc/omap/omap-mcbsp.h
index 6c363e5..ffdcc5a 100644
--- a/sound/soc/omap/omap-mcbsp.h
+++ b/sound/soc/omap/omap-mcbsp.h
@@ -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
diff --git a/sound/soc/omap/omap-mcpdm.c b/sound/soc/omap/omap-mcpdm.c
index b7f4f7e..f161c2f 100644
--- a/sound/soc/omap/omap-mcpdm.c
+++ b/sound/soc/omap/omap-mcpdm.c
@@ -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
index 73b80d5..0000000
--- a/sound/soc/omap/omap-mcpdm.h
+++ /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__ */
diff --git a/sound/soc/omap/omap-pcm.c b/sound/soc/omap/omap-pcm.c
index 1e52190..8caeb8d 100644
--- a/sound/soc/omap/omap-pcm.c
+++ b/sound/soc/omap/omap-pcm.c
@@ -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");
diff --git a/sound/soc/omap/omap-pcm.h b/sound/soc/omap/omap-pcm.h
index b19975d..fea0515 100644
--- a/sound/soc/omap/omap-pcm.h
+++ b/sound/soc/omap/omap-pcm.h
@@ -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
diff --git a/sound/soc/omap/omap2evm.c b/sound/soc/omap/omap2evm.c
index c7adea3..38cd189 100644
--- a/sound/soc/omap/omap2evm.c
+++ b/sound/soc/omap/omap2evm.c
@@ -35,15 +35,13 @@
#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)
diff --git a/sound/soc/omap/omap3beagle.c b/sound/soc/omap/omap3beagle.c
index 240e097..7c11e1a 100644
--- a/sound/soc/omap/omap3beagle.c
+++ b/sound/soc/omap/omap3beagle.c
@@ -33,14 +33,13 @@
#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)
diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c
index dfcb344..1ac5bab 100644
--- a/sound/soc/omap/omap3evm.c
+++ b/sound/soc/omap/omap3evm.c
@@ -31,14 +31,13 @@
#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;
diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c
index 9eecac1..dbd9d96 100644
--- a/sound/soc/omap/omap3pandora.c
+++ b/sound/soc/omap/omap3pandora.c
@@ -31,10 +31,10 @@
#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) {
diff --git a/sound/soc/omap/osk5912.c b/sound/soc/omap/osk5912.c
index 498ca2e..f0e6625 100644
--- a/sound/soc/omap/osk5912.c
+++ b/sound/soc/omap/osk5912.c
@@ -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;
diff --git a/sound/soc/omap/overo.c b/sound/soc/omap/overo.c
index c25f527..e95a607 100644
--- a/sound/soc/omap/overo.c
+++ b/sound/soc/omap/overo.c
@@ -33,14 +33,13 @@
#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)
diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
index 88052d2..d1d8098 100644
--- a/sound/soc/omap/rx51.c
+++ b/sound/soc/omap/rx51.c
@@ -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)
diff --git a/sound/soc/omap/sdp3430.c b/sound/soc/omap/sdp3430.c
index 3c85c0f..76ce77b9 100644
--- a/sound/soc/omap/sdp3430.c
+++ b/sound/soc/omap/sdp3430.c
@@ -36,9 +36,11 @@
#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,
diff --git a/sound/soc/omap/sdp4430.c b/sound/soc/omap/sdp4430.c
index 4ebbde6..62f6a62 100644
--- a/sound/soc/omap/sdp4430.c
+++ b/sound/soc/omap/sdp4430.c
@@ -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)
diff --git a/sound/soc/omap/zoom2.c b/sound/soc/omap/zoom2.c
index 50a94ee7..338dc95 100644
--- a/sound/soc/omap/zoom2.c
+++ b/sound/soc/omap/zoom2.c
@@ -29,21 +29,23 @@
#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;
diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig
index e30c832..37f191b 100644
--- a/sound/soc/pxa/Kconfig
+++ b/sound/soc/pxa/Kconfig
@@ -117,6 +117,24 @@ config SND_PXA2XX_SOC_PALM27X
Say Y if you want to add support for SoC audio on
Palm T|X, T5, E2 or LifeDrive handheld computer.
+config SND_SOC_SAARB
+ tristate "SoC Audio support for Marvell Saarb"
+ depends on SND_PXA2XX_SOC && MACH_SAARB
+ select SND_PXA_SOC_SSP
+ select SND_SOC_88PM860X
+ help
+ Say Y if you want to add support for SoC audio on the
+ Marvell Saarb reference platform.
+
+config SND_SOC_TAVOREVB3
+ tristate "SoC Audio support for Marvell Tavor EVB3"
+ depends on SND_PXA2XX_SOC && MACH_TAVOREVB3
+ select SND_PXA_SOC_SSP
+ select SND_SOC_88PM860X
+ help
+ Say Y if you want to add support for SoC audio on the
+ Marvell Saarb reference platform.
+
config SND_SOC_ZYLONITE
tristate "SoC Audio support for Marvell Zylonite"
depends on SND_PXA2XX_SOC && MACH_ZYLONITE
diff --git a/sound/soc/pxa/Makefile b/sound/soc/pxa/Makefile
index caa03d8..0766016 100644
--- a/sound/soc/pxa/Makefile
+++ b/sound/soc/pxa/Makefile
@@ -19,6 +19,8 @@ snd-soc-e800-objs := e800_wm9712.o
snd-soc-spitz-objs := spitz.o
snd-soc-em-x270-objs := em-x270.o
snd-soc-palm27x-objs := palm27x.o
+snd-soc-saarb-objs := saarb.o
+snd-soc-tavorevb3-objs := tavorevb3.o
snd-soc-zylonite-objs := zylonite.o
snd-soc-magician-objs := magician.o
snd-soc-mioa701-objs := mioa701_wm9713.o
@@ -38,6 +40,8 @@ obj-$(CONFIG_SND_PXA2XX_SOC_PALM27X) += snd-soc-palm27x.o
obj-$(CONFIG_SND_PXA2XX_SOC_MAGICIAN) += snd-soc-magician.o
obj-$(CONFIG_SND_PXA2XX_SOC_MIOA701) += snd-soc-mioa701.o
obj-$(CONFIG_SND_PXA2XX_SOC_Z2) += snd-soc-z2.o
+obj-$(CONFIG_SND_SOC_SAARB) += snd-soc-saarb.o
+obj-$(CONFIG_SND_SOC_TAVOREVB3) += snd-soc-tavorevb3.o
obj-$(CONFIG_SND_SOC_ZYLONITE) += snd-soc-zylonite.o
obj-$(CONFIG_SND_PXA2XX_SOC_IMOTE2) += snd-soc-imote2.o
obj-$(CONFIG_SND_SOC_RAUMFELD) += snd-soc-raumfeld.o
diff --git a/sound/soc/pxa/corgi.c b/sound/soc/pxa/corgi.c
index fefe1a5..97e9423 100644
--- a/sound/soc/pxa/corgi.c
+++ b/sound/soc/pxa/corgi.c
@@ -30,7 +30,6 @@
#include <mach/audio.h>
#include "../codecs/wm8731.h"
-#include "pxa2xx-pcm.h"
#include "pxa2xx-i2s.h"
#define CORGI_HP 0
@@ -99,7 +98,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 +117,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;
@@ -150,7 +149,7 @@ static int corgi_hw_params(struct snd_pcm_substream *substream,
return ret;
/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -272,8 +271,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 +300,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 +311,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 +329,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)
diff --git a/sound/soc/pxa/e740_wm9705.c b/sound/soc/pxa/e740_wm9705.c
index 7cd2f89..c82cedb 100644
--- a/sound/soc/pxa/e740_wm9705.c
+++ b/sound/soc/pxa/e740_wm9705.c
@@ -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)
@@ -200,6 +198,9 @@ free_mic_amp_gpio:
static void __exit e740_exit(void)
{
platform_device_unregister(e740_snd_device);
+ gpio_free(GPIO_E740_WM9705_nAVDD2);
+ gpio_free(GPIO_E740_AMP_ON);
+ gpio_free(GPIO_E740_MIC_ON);
}
module_init(e740_init);
diff --git a/sound/soc/pxa/e750_wm9705.c b/sound/soc/pxa/e750_wm9705.c
index 8dceccc..4c14380 100644
--- a/sound/soc/pxa/e750_wm9705.c
+++ b/sound/soc/pxa/e750_wm9705.c
@@ -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)
diff --git a/sound/soc/pxa/e800_wm9712.c b/sound/soc/pxa/e800_wm9712.c
index bc019cd..d42e5fe 100644
--- a/sound/soc/pxa/e800_wm9712.c
+++ b/sound/soc/pxa/e800_wm9712.c
@@ -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)
diff --git a/sound/soc/pxa/em-x270.c b/sound/soc/pxa/em-x270.c
index f4756e4..eadf9d3 100644
--- a/sound/soc/pxa/em-x270.c
+++ b/sound/soc/pxa/em-x270.c
@@ -32,36 +32,33 @@
#include <mach/audio.h>
#include "../codecs/wm9712.h"
-#include "pxa2xx-pcm.h"
#include "pxa2xx-ac97.h"
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 +73,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)
diff --git a/sound/soc/pxa/imote2.c b/sound/soc/pxa/imote2.c
index 405587a..154fc6f 100644
--- a/sound/soc/pxa/imote2.c
+++ b/sound/soc/pxa/imote2.c
@@ -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 = "pxa2xx-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);
diff --git a/sound/soc/pxa/magician.c b/sound/soc/pxa/magician.c
index 4c8d99a..b8207ce 100644
--- a/sound/soc/pxa/magician.c
+++ b/sound/soc/pxa/magician.c
@@ -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 = "pxa2xx-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);
diff --git a/sound/soc/pxa/mioa701_wm9713.c b/sound/soc/pxa/mioa701_wm9713.c
index 19eda8b..f284cc5 100644
--- a/sound/soc/pxa/mioa701_wm9713.c
+++ b/sound/soc/pxa/mioa701_wm9713.c
@@ -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)
diff --git a/sound/soc/pxa/palm27x.c b/sound/soc/pxa/palm27x.c
index 1f96e32..13f6d48 100644
--- a/sound/soc/pxa/palm27x.c
+++ b/sound/soc/pxa/palm27x.c
@@ -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)
diff --git a/sound/soc/pxa/poodle.c b/sound/soc/pxa/poodle.c
index c5f36e0..af84ee9 100644
--- a/sound/soc/pxa/poodle.c
+++ b/sound/soc/pxa/poodle.c
@@ -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;
@@ -129,7 +128,7 @@ static int poodle_hw_params(struct snd_pcm_substream *substream,
return ret;
/* set the codec system clock for DAC and ADC */
- ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK, clk,
+ ret = snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, clk,
SND_SOC_CLOCK_IN);
if (ret < 0)
return ret;
@@ -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 = "pxa2xx-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)
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index a1fd23e..8dfbcda 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -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);
diff --git a/sound/soc/pxa/pxa-ssp.h b/sound/soc/pxa/pxa-ssp.h
index 91deadd..bc79da2 100644
--- a/sound/soc/pxa/pxa-ssp.h
+++ b/sound/soc/pxa/pxa-ssp.h
@@ -42,6 +42,4 @@
#define PXA_SSP_PLL_OUT 0
-extern struct snd_soc_dai pxa_ssp_dai[4];
-
#endif
diff --git a/sound/soc/pxa/pxa2xx-ac97.c b/sound/soc/pxa/pxa2xx-ac97.c
index d314115..ac51c6d 100644
--- a/sound/soc/pxa/pxa2xx-ac97.c
+++ b/sound/soc/pxa/pxa2xx-ac97.c
@@ -24,7 +24,6 @@
#include <mach/dma.h>
#include <mach/audio.h>
-#include "pxa2xx-pcm.h"
#include "pxa2xx-ac97.h"
static void pxa2xx_ac97_warm_reset(struct snd_ac97 *ac97)
@@ -104,24 +103,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 +132,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 +148,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 +179,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 +203,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 +220,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 +231,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;
}
diff --git a/sound/soc/pxa/pxa2xx-ac97.h b/sound/soc/pxa/pxa2xx-ac97.h
index e390de8..eda891e 100644
--- a/sound/soc/pxa/pxa2xx-ac97.h
+++ b/sound/soc/pxa/pxa2xx-ac97.h
@@ -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;
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c
index c1a52757..11be595 100644
--- a/sound/soc/pxa/pxa2xx-i2s.c
+++ b/sound/soc/pxa/pxa2xx-i2s.c
@@ -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",
@@ -400,3 +398,4 @@ module_exit(pxa2xx_i2s_exit);
MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
MODULE_DESCRIPTION("pxa2xx I2S SoC Interface");
MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:pxa2xx-i2s");
diff --git a/sound/soc/pxa/pxa2xx-i2s.h b/sound/soc/pxa/pxa2xx-i2s.h
index e2def44..070f3c6 100644
--- a/sound/soc/pxa/pxa2xx-i2s.h
+++ b/sound/soc/pxa/pxa2xx-i2s.h
@@ -15,6 +15,4 @@
/* I2S clock */
#define PXA2XX_I2S_SYSCLK 0
-extern struct snd_soc_dai pxa_i2s_dai;
-
#endif
diff --git a/sound/soc/pxa/pxa2xx-pcm.c b/sound/soc/pxa/pxa2xx-pcm.c
index adc7e6f..02fb664 100644
--- a/sound/soc/pxa/pxa2xx-pcm.c
+++ b/sound/soc/pxa/pxa2xx-pcm.c
@@ -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
index 60c3b20..0000000
--- a/sound/soc/pxa/pxa2xx-pcm.h
+++ /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
diff --git a/sound/soc/pxa/raumfeld.c b/sound/soc/pxa/raumfeld.c
index 7e3f416..2cda82bc 100644
--- a/sound/soc/pxa/raumfeld.c
+++ b/sound/soc/pxa/raumfeld.c
@@ -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);
diff --git a/sound/soc/pxa/saarb.c b/sound/soc/pxa/saarb.c
new file mode 100644
index 0000000..d63cb47
--- /dev/null
+++ b/sound/soc/pxa/saarb.c
@@ -0,0 +1,200 @@
+/*
+ * saarb.c -- SoC audio for saarb
+ *
+ * Copyright (C) 2010 Marvell International Ltd.
+ * Haojian Zhuang <haojian.zhuang@marvell.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/device.h>
+#include <linux/clk.h>
+#include <linux/i2c.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/jack.h>
+
+#include <asm/mach-types.h>
+
+#include "../codecs/88pm860x-codec.h"
+#include "pxa-ssp.h"
+
+static int saarb_pm860x_init(struct snd_soc_pcm_runtime *rtd);
+
+static struct platform_device *saarb_snd_device;
+
+static struct snd_soc_jack hs_jack, mic_jack;
+
+static struct snd_soc_jack_pin hs_jack_pins[] = {
+ { .pin = "Headset Stereophone", .mask = SND_JACK_HEADPHONE, },
+};
+
+static struct snd_soc_jack_pin mic_jack_pins[] = {
+ { .pin = "Headset Mic 2", .mask = SND_JACK_MICROPHONE, },
+};
+
+/* saarb machine dapm widgets */
+static const struct snd_soc_dapm_widget saarb_dapm_widgets[] = {
+ SND_SOC_DAPM_HP("Headphone Stereophone", NULL),
+ SND_SOC_DAPM_LINE("Lineout Out 1", NULL),
+ SND_SOC_DAPM_LINE("Lineout Out 2", NULL),
+ SND_SOC_DAPM_SPK("Ext Speaker", NULL),
+ SND_SOC_DAPM_MIC("Ext Mic 1", NULL),
+ SND_SOC_DAPM_MIC("Headset Mic", NULL),
+ SND_SOC_DAPM_MIC("Ext Mic 3", NULL),
+};
+
+/* saarb machine audio map */
+static const struct snd_soc_dapm_route audio_map[] = {
+ {"Headset Stereophone", NULL, "HS1"},
+ {"Headset Stereophone", NULL, "HS2"},
+
+ {"Ext Speaker", NULL, "LSP"},
+ {"Ext Speaker", NULL, "LSN"},
+
+ {"Lineout Out 1", NULL, "LINEOUT1"},
+ {"Lineout Out 2", NULL, "LINEOUT2"},
+
+ {"MIC1P", NULL, "Mic1 Bias"},
+ {"MIC1N", NULL, "Mic1 Bias"},
+ {"Mic1 Bias", NULL, "Ext Mic 1"},
+
+ {"MIC2P", NULL, "Mic1 Bias"},
+ {"MIC2N", NULL, "Mic1 Bias"},
+ {"Mic1 Bias", NULL, "Headset Mic 2"},
+
+ {"MIC3P", NULL, "Mic3 Bias"},
+ {"MIC3N", NULL, "Mic3 Bias"},
+ {"Mic3 Bias", NULL, "Ext Mic 3"},
+};
+
+static int saarb_i2s_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;
+ int width = snd_pcm_format_physical_width(params_format(params));
+ int ret;
+
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_NET_PLL, 0,
+ PM860X_CLK_DIR_OUT);
+ if (ret < 0)
+ return ret;
+
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, PM860X_CLK_DIR_OUT);
+ if (ret < 0)
+ return ret;
+
+ 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;
+ 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;
+
+ ret = snd_soc_dai_set_tdm_slot(cpu_dai, 3, 3, 2, width);
+
+ return ret;
+}
+
+static struct snd_soc_ops saarb_i2s_ops = {
+ .hw_params = saarb_i2s_hw_params,
+};
+
+static struct snd_soc_dai_link saarb_dai[] = {
+ {
+ .name = "88PM860x I2S",
+ .stream_name = "I2S Audio",
+ .cpu_dai_name = "pxa-ssp-dai.1",
+ .codec_dai_name = "88pm860x-i2s",
+ .platform_name = "pxa-pcm-audio",
+ .codec_name = "88pm860x-codec",
+ .init = saarb_pm860x_init,
+ .ops = &saarb_i2s_ops,
+ },
+};
+
+static struct snd_soc_card snd_soc_card_saarb = {
+ .name = "Saarb",
+ .dai_link = saarb_dai,
+ .num_links = ARRAY_SIZE(saarb_dai),
+};
+
+static int saarb_pm860x_init(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_soc_codec *codec = rtd->codec;
+ int ret;
+
+ snd_soc_dapm_new_controls(codec, saarb_dapm_widgets,
+ ARRAY_SIZE(saarb_dapm_widgets));
+ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
+
+ /* connected pins */
+ snd_soc_dapm_enable_pin(codec, "Ext Speaker");
+ snd_soc_dapm_enable_pin(codec, "Ext Mic 1");
+ snd_soc_dapm_enable_pin(codec, "Ext Mic 3");
+ snd_soc_dapm_disable_pin(codec, "Headset Mic 2");
+ snd_soc_dapm_disable_pin(codec, "Headset Stereophone");
+
+ ret = snd_soc_dapm_sync(codec);
+ if (ret)
+ return ret;
+
+ /* Headset jack detection */
+ snd_soc_jack_new(codec, "Headphone Jack", SND_JACK_HEADPHONE
+ | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2,
+ &hs_jack);
+ snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins),
+ hs_jack_pins);
+ snd_soc_jack_new(codec, "Microphone Jack", SND_JACK_MICROPHONE,
+ &mic_jack);
+ snd_soc_jack_add_pins(&mic_jack, ARRAY_SIZE(mic_jack_pins),
+ mic_jack_pins);
+
+ /* headphone, microphone detection & headset short detection */
+ pm860x_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADPHONE,
+ SND_JACK_BTN_0, SND_JACK_BTN_1, SND_JACK_BTN_2);
+ pm860x_mic_jack_detect(codec, &hs_jack, SND_JACK_MICROPHONE);
+ return 0;
+}
+
+static int __init saarb_init(void)
+{
+ int ret;
+
+ if (!machine_is_saarb())
+ return -ENODEV;
+ saarb_snd_device = platform_device_alloc("soc-audio", -1);
+ if (!saarb_snd_device)
+ return -ENOMEM;
+
+ platform_set_drvdata(saarb_snd_device, &snd_soc_card_saarb);
+
+ ret = platform_device_add(saarb_snd_device);
+ if (ret)
+ platform_device_put(saarb_snd_device);
+
+ return ret;
+}
+
+static void __exit saarb_exit(void)
+{
+ platform_device_unregister(saarb_snd_device);
+}
+
+module_init(saarb_init);
+module_exit(saarb_exit);
+
+MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
+MODULE_DESCRIPTION("ALSA SoC 88PM860x Saarb");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/pxa/spitz.c b/sound/soc/pxa/spitz.c
index d256f5f..f470f36 100644
--- a/sound/soc/pxa/spitz.c
+++ b/sound/soc/pxa/spitz.c
@@ -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,17 +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,
-};
-
static struct platform_device *spitz_snd_device;
static int __init spitz_init(void)
@@ -341,8 +336,7 @@ static int __init spitz_init(void)
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)
diff --git a/sound/soc/pxa/tavorevb3.c b/sound/soc/pxa/tavorevb3.c
new file mode 100644
index 0000000..248c283
--- /dev/null
+++ b/sound/soc/pxa/tavorevb3.c
@@ -0,0 +1,200 @@
+/*
+ * tavorevb3.c -- SoC audio for Tavor EVB3
+ *
+ * Copyright (C) 2010 Marvell International Ltd.
+ * Haojian Zhuang <haojian.zhuang@marvell.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/device.h>
+#include <linux/clk.h>
+#include <linux/i2c.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/jack.h>
+
+#include <asm/mach-types.h>
+
+#include "../codecs/88pm860x-codec.h"
+#include "pxa-ssp.h"
+
+static int evb3_pm860x_init(struct snd_soc_pcm_runtime *rtd);
+
+static struct platform_device *evb3_snd_device;
+
+static struct snd_soc_jack hs_jack, mic_jack;
+
+static struct snd_soc_jack_pin hs_jack_pins[] = {
+ { .pin = "Headset Stereophone", .mask = SND_JACK_HEADPHONE, },
+};
+
+static struct snd_soc_jack_pin mic_jack_pins[] = {
+ { .pin = "Headset Mic 2", .mask = SND_JACK_MICROPHONE, },
+};
+
+/* tavorevb3 machine dapm widgets */
+static const struct snd_soc_dapm_widget evb3_dapm_widgets[] = {
+ SND_SOC_DAPM_HP("Headset Stereophone", NULL),
+ SND_SOC_DAPM_LINE("Lineout Out 1", NULL),
+ SND_SOC_DAPM_LINE("Lineout Out 2", NULL),
+ SND_SOC_DAPM_SPK("Ext Speaker", NULL),
+ SND_SOC_DAPM_MIC("Ext Mic 1", NULL),
+ SND_SOC_DAPM_MIC("Headset Mic 2", NULL),
+ SND_SOC_DAPM_MIC("Ext Mic 3", NULL),
+};
+
+/* tavorevb3 machine audio map */
+static const struct snd_soc_dapm_route audio_map[] = {
+ {"Headset Stereophone", NULL, "HS1"},
+ {"Headset Stereophone", NULL, "HS2"},
+
+ {"Ext Speaker", NULL, "LSP"},
+ {"Ext Speaker", NULL, "LSN"},
+
+ {"Lineout Out 1", NULL, "LINEOUT1"},
+ {"Lineout Out 2", NULL, "LINEOUT2"},
+
+ {"MIC1P", NULL, "Mic1 Bias"},
+ {"MIC1N", NULL, "Mic1 Bias"},
+ {"Mic1 Bias", NULL, "Ext Mic 1"},
+
+ {"MIC2P", NULL, "Mic1 Bias"},
+ {"MIC2N", NULL, "Mic1 Bias"},
+ {"Mic1 Bias", NULL, "Headset Mic 2"},
+
+ {"MIC3P", NULL, "Mic3 Bias"},
+ {"MIC3N", NULL, "Mic3 Bias"},
+ {"Mic3 Bias", NULL, "Ext Mic 3"},
+};
+
+static int evb3_i2s_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;
+ int width = snd_pcm_format_physical_width(params_format(params));
+ int ret;
+
+ ret = snd_soc_dai_set_sysclk(cpu_dai, PXA_SSP_CLK_NET_PLL, 0,
+ PM860X_CLK_DIR_OUT);
+ if (ret < 0)
+ return ret;
+
+ ret = snd_soc_dai_set_sysclk(codec_dai, 0, 0, PM860X_CLK_DIR_OUT);
+ if (ret < 0)
+ return ret;
+
+ 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;
+
+ 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;
+
+ ret = snd_soc_dai_set_tdm_slot(cpu_dai, 3, 3, 2, width);
+ return ret;
+}
+
+static struct snd_soc_ops evb3_i2s_ops = {
+ .hw_params = evb3_i2s_hw_params,
+};
+
+static struct snd_soc_dai_link evb3_dai[] = {
+ {
+ .name = "88PM860x I2S",
+ .stream_name = "I2S Audio",
+ .cpu_dai_name = "pxa-ssp-dai.1",
+ .codec_dai_name = "88pm860x-i2s",
+ .platform_name = "pxa-pcm-audio",
+ .codec_name = "88pm860x-codec",
+ .init = evb3_pm860x_init,
+ .ops = &evb3_i2s_ops,
+ },
+};
+
+static struct snd_soc_card snd_soc_card_evb3 = {
+ .name = "Tavor EVB3",
+ .dai_link = evb3_dai,
+ .num_links = ARRAY_SIZE(evb3_dai),
+};
+
+static int evb3_pm860x_init(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_soc_codec *codec = rtd->codec;
+ int ret;
+
+ snd_soc_dapm_new_controls(codec, evb3_dapm_widgets,
+ ARRAY_SIZE(evb3_dapm_widgets));
+ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
+
+ /* connected pins */
+ snd_soc_dapm_enable_pin(codec, "Ext Speaker");
+ snd_soc_dapm_enable_pin(codec, "Ext Mic 1");
+ snd_soc_dapm_enable_pin(codec, "Ext Mic 3");
+ snd_soc_dapm_disable_pin(codec, "Headset Mic 2");
+ snd_soc_dapm_disable_pin(codec, "Headset Stereophone");
+
+ ret = snd_soc_dapm_sync(codec);
+ if (ret)
+ return ret;
+
+ /* Headset jack detection */
+ snd_soc_jack_new(codec, "Headphone Jack", SND_JACK_HEADPHONE
+ | SND_JACK_BTN_0 | SND_JACK_BTN_1 | SND_JACK_BTN_2,
+ &hs_jack);
+ snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins),
+ hs_jack_pins);
+ snd_soc_jack_new(codec, "Microphone Jack", SND_JACK_MICROPHONE,
+ &mic_jack);
+ snd_soc_jack_add_pins(&mic_jack, ARRAY_SIZE(mic_jack_pins),
+ mic_jack_pins);
+
+ /* headphone, microphone detection & headset short detection */
+ pm860x_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADPHONE,
+ SND_JACK_BTN_0, SND_JACK_BTN_1, SND_JACK_BTN_2);
+ pm860x_mic_jack_detect(codec, &hs_jack, SND_JACK_MICROPHONE);
+ return 0;
+}
+
+static int __init tavorevb3_init(void)
+{
+ int ret;
+
+ if (!machine_is_tavorevb3())
+ return -ENODEV;
+ evb3_snd_device = platform_device_alloc("soc-audio", -1);
+ if (!evb3_snd_device)
+ return -ENOMEM;
+
+ platform_set_drvdata(evb3_snd_device, &snd_soc_card_evb3);
+
+ ret = platform_device_add(evb3_snd_device);
+ if (ret)
+ platform_device_put(evb3_snd_device);
+
+ return ret;
+}
+
+static void __exit tavorevb3_exit(void)
+{
+ platform_device_unregister(evb3_snd_device);
+}
+
+module_init(tavorevb3_init);
+module_exit(tavorevb3_exit);
+
+MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
+MODULE_DESCRIPTION("ALSA SoC 88PM860x Tavor EVB3");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/pxa/tosa.c b/sound/soc/pxa/tosa.c
index dbbd3e9..a3bfb2e 100644
--- a/sound/soc/pxa/tosa.c
+++ b/sound/soc/pxa/tosa.c
@@ -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)
diff --git a/sound/soc/pxa/z2.c b/sound/soc/pxa/z2.c
index 4e4d2fa..4cc841b 100644
--- a/sound/soc/pxa/z2.c
+++ b/sound/soc/pxa/z2.c
@@ -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 = "pxa2xx-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)
diff --git a/sound/soc/pxa/zylonite.c b/sound/soc/pxa/zylonite.c
index dd678ae..d27e05a 100644
--- a/sound/soc/pxa/zylonite.c
+++ b/sound/soc/pxa/zylonite.c
@@ -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)
diff --git a/sound/soc/s3c24xx/Kconfig b/sound/soc/s3c24xx/Kconfig
index 213963ac..1cdc37bd 100644
--- a/sound/soc/s3c24xx/Kconfig
+++ b/sound/soc/s3c24xx/Kconfig
@@ -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.
diff --git a/sound/soc/s3c24xx/Makefile b/sound/soc/s3c24xx/Makefile
index 50172c3..47ed6d7 100644
--- a/sound/soc/s3c24xx/Makefile
+++ b/sound/soc/s3c24xx/Makefile
@@ -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
index 0000000..235d197
--- /dev/null
+++ b/sound/soc/s3c24xx/aquila_wm8994.c
@@ -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
index 0000000..694f702
--- /dev/null
+++ b/sound/soc/s3c24xx/goni_wm8994.c
@@ -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");
diff --git a/sound/soc/s3c24xx/jive_wm8750.c b/sound/soc/s3c24xx/jive_wm8750.c
index 8c108b1..49605cd 100644
--- a/sound/soc/s3c24xx/jive_wm8750.c
+++ b/sound/soc/s3c24xx/jive_wm8750.c
@@ -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)
diff --git a/sound/soc/s3c24xx/ln2440sbc_alc650.c b/sound/soc/s3c24xx/ln2440sbc_alc650.c
index ffa954f..abe64ab 100644
--- a/sound/soc/s3c24xx/ln2440sbc_alc650.c
+++ b/sound/soc/s3c24xx/ln2440sbc_alc650.c
@@ -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)
diff --git a/sound/soc/s3c24xx/neo1973_gta02_wm8753.c b/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
index 209c259..c457bfd 100644
--- a/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
+++ b/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
@@ -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);
diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c
index 0cb4f86..d7a39a0 100644
--- a/sound/soc/s3c24xx/neo1973_wm8753.c
+++ b/sound/soc/s3c24xx/neo1973_wm8753.c
@@ -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) {
diff --git a/sound/soc/s3c24xx/s3c-ac97.c b/sound/soc/s3c24xx/s3c-ac97.c
index 31f6d45..26f4ed9 100644
--- a/sound/soc/s3c24xx/s3c-ac97.c
+++ b/sound/soc/s3c24xx/s3c-ac97.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c-ac97.h b/sound/soc/s3c24xx/s3c-ac97.h
index 2781983..5dcedd0 100644
--- a/sound/soc/s3c24xx/s3c-ac97.h
+++ b/sound/soc/s3c24xx/s3c-ac97.h
@@ -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_ */
diff --git a/sound/soc/s3c24xx/s3c-dma.c b/sound/soc/s3c24xx/s3c-dma.c
index 1b61c23..54bff83 100644
--- a/sound/soc/s3c24xx/s3c-dma.c
+++ b/sound/soc/s3c24xx/s3c-dma.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c-dma.h b/sound/soc/s3c24xx/s3c-dma.h
index 69bb6bf..748c07d 100644
--- a/sound/soc/s3c24xx/s3c-dma.h
+++ b/sound/soc/s3c24xx/s3c-dma.h
@@ -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
diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.c b/sound/soc/s3c24xx/s3c-i2s-v2.c
index 64376b2..b3866d5 100644
--- a/sound/soc/s3c24xx/s3c-i2s-v2.c
+++ b/sound/soc/s3c24xx/s3c-i2s-v2.c
@@ -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);
diff --git a/sound/soc/s3c24xx/s3c-i2s-v2.h b/sound/soc/s3c24xx/s3c-i2s-v2.h
index 766f43a..d458301 100644
--- a/sound/soc/s3c24xx/s3c-i2s-v2.h
+++ b/sound/soc/s3c24xx/s3c-i2s-v2.h
@@ -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 */
diff --git a/sound/soc/s3c24xx/s3c-pcm.c b/sound/soc/s3c24xx/s3c-pcm.c
index 326f0a9..6174e26 100644
--- a/sound/soc/s3c24xx/s3c-pcm.c
+++ b/sound/soc/s3c24xx/s3c-pcm.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c2412-i2s.c b/sound/soc/s3c24xx/s3c2412-i2s.c
index 709adef..4a861cf 100644
--- a/sound/soc/s3c24xx/s3c2412-i2s.c
+++ b/sound/soc/s3c24xx/s3c2412-i2s.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c2412-i2s.h b/sound/soc/s3c24xx/s3c2412-i2s.h
index 0b5686b..01a0471 100644
--- a/sound/soc/s3c24xx/s3c2412-i2s.h
+++ b/sound/soc/s3c24xx/s3c2412-i2s.h
@@ -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 */
diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.c b/sound/soc/s3c24xx/s3c24xx-i2s.c
index c3ac890..e060daa 100644
--- a/sound/soc/s3c24xx/s3c24xx-i2s.c
+++ b/sound/soc/s3c24xx/s3c24xx-i2s.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c24xx-i2s.h b/sound/soc/s3c24xx/s3c24xx-i2s.h
index 726d91c..f9ca04e 100644
--- a/sound/soc/s3c24xx/s3c24xx-i2s.h
+++ b/sound/soc/s3c24xx/s3c24xx-i2s.h
@@ -32,6 +32,4 @@
u32 s3c24xx_i2s_get_clockrate(void);
-extern struct snd_soc_dai s3c24xx_i2s_dai;
-
#endif /*S3C24XXI2S_H_*/
diff --git a/sound/soc/s3c24xx/s3c24xx_simtec.c b/sound/soc/s3c24xx/s3c24xx_simtec.c
index 4984754..c4c1114 100644
--- a/sound/soc/s3c24xx/s3c24xx_simtec.c
+++ b/sound/soc/s3c24xx/s3c24xx_simtec.c
@@ -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) {
diff --git a/sound/soc/s3c24xx/s3c24xx_simtec.h b/sound/soc/s3c24xx/s3c24xx_simtec.h
index e18faee..e63d5ff 100644
--- a/sound/soc/s3c24xx/s3c24xx_simtec.h
+++ b/sound/soc/s3c24xx/s3c24xx_simtec.h
@@ -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);
diff --git a/sound/soc/s3c24xx/s3c24xx_simtec_hermes.c b/sound/soc/s3c24xx/s3c24xx_simtec_hermes.c
index bdf8951..f884537 100644
--- a/sound/soc/s3c24xx/s3c24xx_simtec_hermes.c
+++ b/sound/soc/s3c24xx/s3c24xx_simtec_hermes.c
@@ -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 = {
diff --git a/sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c b/sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c
index 185c0ac..c096759 100644
--- a/sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c
+++ b/sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c
@@ -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 = {
diff --git a/sound/soc/s3c24xx/s3c24xx_uda134x.c b/sound/soc/s3c24xx/s3c24xx_uda134x.c
index 052d596..bd48ffb 100644
--- a/sound/soc/s3c24xx/s3c24xx_uda134x.c
+++ b/sound/soc/s3c24xx/s3c24xx_uda134x.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
index 06db130..a962847 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s-v4.c
@@ -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");
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s.c b/sound/soc/s3c24xx/s3c64xx-i2s.c
index 1d85cb8..ae7acb6 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s.c
+++ b/sound/soc/s3c24xx/s3c64xx-i2s.c
@@ -12,15 +12,15 @@
* 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");
diff --git a/sound/soc/s3c24xx/s3c64xx-i2s.h b/sound/soc/s3c24xx/s3c64xx-i2s.h
index 7a40f43..19bd444 100644
--- a/sound/soc/s3c24xx/s3c64xx-i2s.h
+++ b/sound/soc/s3c24xx/s3c64xx-i2s.h
@@ -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 */
diff --git a/sound/soc/s3c24xx/smartq_wm8987.c b/sound/soc/s3c24xx/smartq_wm8987.c
index b480348..dd20ca7 100644
--- a/sound/soc/s3c24xx/smartq_wm8987.c
+++ b/sound/soc/s3c24xx/smartq_wm8987.c
@@ -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) {
diff --git a/sound/soc/s3c24xx/smdk2443_wm9710.c b/sound/soc/s3c24xx/smdk2443_wm9710.c
index 3622588..66f9e22 100644
--- a/sound/soc/s3c24xx/smdk2443_wm9710.c
+++ b/sound/soc/s3c24xx/smdk2443_wm9710.c
@@ -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)
diff --git a/sound/soc/s3c24xx/smdk64xx_wm8580.c b/sound/soc/s3c24xx/smdk64xx_wm8580.c
index 07e8e51..91367f7 100644
--- a/sound/soc/s3c24xx/smdk64xx_wm8580.c
+++ b/sound/soc/s3c24xx/smdk64xx_wm8580.c
@@ -22,6 +22,12 @@
#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)
diff --git a/sound/soc/s3c24xx/smdk_wm9713.c b/sound/soc/s3c24xx/smdk_wm9713.c
index 5527b9e..90108a7 100644
--- a/sound/soc/s3c24xx/smdk_wm9713.c
+++ b/sound/soc/s3c24xx/smdk_wm9713.c
@@ -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;
}
diff --git a/sound/soc/s6000/s6000-i2s.c b/sound/soc/s6000/s6000-i2s.c
index 59e3fa7..8778faa 100644
--- a/sound/soc/s6000/s6000-i2s.c
+++ b/sound/soc/s6000/s6000-i2s.c
@@ -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);
diff --git a/sound/soc/s6000/s6000-i2s.h b/sound/soc/s6000/s6000-i2s.h
index 2375fdf..86aa192 100644
--- a/sound/soc/s6000/s6000-i2s.h
+++ b/sound/soc/s6000/s6000-i2s.h
@@ -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;
diff --git a/sound/soc/s6000/s6000-pcm.c b/sound/soc/s6000/s6000-pcm.c
index 9c7f7f0..271fd22 100644
--- a/sound/soc/s6000/s6000-pcm.c
+++ b/sound/soc/s6000/s6000-pcm.c
@@ -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");
diff --git a/sound/soc/s6000/s6000-pcm.h b/sound/soc/s6000/s6000-pcm.h
index 96f23f6..09d9b88 100644
--- a/sound/soc/s6000/s6000-pcm.h
+++ b/sound/soc/s6000/s6000-pcm.h
@@ -30,6 +30,4 @@ struct s6000_pcm_dma_params {
int rate;
};
-extern struct snd_soc_platform s6000_soc_platform;
-
#endif
diff --git a/sound/soc/s6000/s6105-ipcam.c b/sound/soc/s6000/s6105-ipcam.c
index c1b40ac..96c05e1 100644
--- a/sound/soc/s6000/s6105-ipcam.c
+++ b/sound/soc/s6000/s6105-ipcam.c
@@ -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));
diff --git a/sound/soc/sh/dma-sh7760.c b/sound/soc/sh/dma-sh7760.c
index 0d8bdf0..c326d29 100644
--- a/sound/soc/sh/dma-sh7760.c
+++ b/sound/soc/sh/dma-sh7760.c
@@ -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");
diff --git a/sound/soc/sh/fsi-ak4642.c b/sound/soc/sh/fsi-ak4642.c
index dad575a..9e107a9 100644
--- a/sound/soc/sh/fsi-ak4642.c
+++ b/sound/soc/sh/fsi-ak4642.c
@@ -11,17 +11,17 @@
#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)
diff --git a/sound/soc/sh/fsi-da7210.c b/sound/soc/sh/fsi-da7210.c
index 121bbb0..4f9298f 100644
--- a/sound/soc/sh/fsi-da7210.c
+++ b/sound/soc/sh/fsi-da7210.c
@@ -12,11 +12,12 @@
#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);
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 58c6bec..abc6d83 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -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,
diff --git a/sound/soc/sh/hac.c b/sound/soc/sh/hac.c
index 41db75a..c87e3ff 100644
--- a/sound/soc/sh/hac.c
+++ b/sound/soc/sh/hac.c
@@ -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");
diff --git a/sound/soc/sh/migor.c b/sound/soc/sh/migor.c
index b823a5c..866d78f 100644
--- a/sound/soc/sh/migor.c
+++ b/sound/soc/sh/migor.c
@@ -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)
diff --git a/sound/soc/sh/sh7760-ac97.c b/sound/soc/sh/sh7760-ac97.c
index ce7f95b..b897f7b 100644
--- a/sound/soc/sh/sh7760-ac97.c
+++ b/sound/soc/sh/sh7760-ac97.c
@@ -15,41 +15,35 @@
#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)
diff --git a/sound/soc/sh/siu.h b/sound/soc/sh/siu.h
index 492b1ca..aa239ff 100644
--- a/sound/soc/sh/siu.h
+++ b/sound/soc/sh/siu.h
@@ -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);
diff --git a/sound/soc/sh/siu_dai.c b/sound/soc/sh/siu_dai.c
index eeed5ed..827940a 100644
--- a/sound/soc/sh/siu_dai.c
+++ b/sound/soc/sh/siu_dai.c
@@ -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),
diff --git a/sound/soc/sh/siu_pcm.c b/sound/soc/sh/siu_pcm.c
index 36170be..4404769 100644
--- a/sound/soc/sh/siu_pcm.c
+++ b/sound/soc/sh/siu_pcm.c
@@ -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,
};
diff --git a/sound/soc/sh/ssi.c b/sound/soc/sh/ssi.c
index b378096..40bbdf1 100644
--- a/sound/soc/sh/ssi.c
+++ b/sound/soc/sh/ssi.c
@@ -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");
diff --git a/sound/soc/soc-cache.c b/sound/soc/soc-cache.c
index adbc68c..1228111 100644
--- a/sound/soc/soc-cache.c
+++ b/sound/soc/soc-cache.c
@@ -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;
}
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 844ae82..65352c7 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -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;
-card_err:
- if (platform->remove)
- platform->remove(pdev);
+#ifdef CONFIG_PM
+ /* deferred resume work */
+ INIT_WORK(&card->deferred_resume_work, soc_resume_deferred);
+#endif
-platform_err:
- if (codec_dev->remove)
- codec_dev->remove(pdev);
+ /* initialise the sound card only once */
+ if (card->probe) {
+ ret = card->probe(pdev);
+ if (ret < 0)
+ goto card_probe_error;
+ }
-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);
+ 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;
+ }
}
+ 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 (card->instantiated) {
- if (platform->remove)
- platform->remove(pdev);
-
- if (codec_dev->remove)
- codec_dev->remove(pdev);
-
- 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;
@@ -1633,95 +1834,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
* @hw: the hardware parameters
@@ -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;
- /* The device should become mandatory over time */
- if (!dai->dev)
- printk(KERN_WARNING "No device for DAI %s\n", dai->name);
+ dev_dbg(dev, "dai register %s\n", dev_name(dev));
- if (!dai->ops)
- dai->ops = &null_dai_ops;
+ dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
+ if (dai == NULL)
+ return -ENOMEM;
- INIT_LIST_HEAD(&dai->list);
+ /* create DAI component name */
+ dai->name = fmt_single_name(dev, &dai->id);
+ if (dai->name == NULL) {
+ kfree(dai);
+ return -ENOMEM;
+ }
+
+ 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 #%Zu\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));
- INIT_LIST_HEAD(&platform->list);
+ 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;
+ }
+
+ 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,22 +3072,61 @@ 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;
+
+ /* 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) {
- /* The device should become mandatory over time */
- if (!codec->dev)
- printk(KERN_WARNING "No device for codec %s\n", codec->name);
+ 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);
+
+ if (codec->reg_cache == NULL) {
+ kfree(codec->name);
+ kfree(codec);
+ return -ENOMEM;
+ }
+ }
- INIT_LIST_HEAD(&codec->list);
+ 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 < codec->num_dai; i++) {
- fixup_codec_formats(&codec->dai[i].playback);
- fixup_codec_formats(&codec->dai[i].capture);
+ for (i = 0; i < num_dai; i++) {
+ fixup_codec_formats(&dai_drv[i].playback);
+ fixup_codec_formats(&dai_drv[i].capture);
+ }
+
+ /* register any DAIs */
+ if (num_dai) {
+ ret = snd_soc_register_dais(dev, dai_drv, num_dai);
+ if (ret < 0)
+ goto error;
}
mutex_lock(&client_mutex);
@@ -2844,8 +3135,17 @@ int snd_soc_register_codec(struct snd_soc_codec *codec)
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 +3154,31 @@ 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:
+ if (codec->num_dai)
+ 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);
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 03cb7c0..035cab8 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -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 */
diff --git a/sound/soc/soc-jack.c b/sound/soc/soc-jack.c
index 29159e1..8862770 100644
--- a/sound/soc/soc-jack.c
+++ b/sound/soc/soc-jack.c
@@ -32,14 +32,14 @@
* 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;
diff --git a/sound/soc/txx9/txx9aclc-ac97.c b/sound/soc/txx9/txx9aclc-ac97.c
index 0ec20b6..743d07b 100644
--- a/sound/soc/txx9/txx9aclc-ac97.c
+++ b/sound/soc/txx9/txx9aclc-ac97.c
@@ -36,13 +36,11 @@
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;
}
diff --git a/sound/soc/txx9/txx9aclc-generic.c b/sound/soc/txx9/txx9aclc-generic.c
index 95b17f7..6770e71 100644
--- a/sound/soc/txx9/txx9aclc-generic.c
+++ b/sound/soc/txx9/txx9aclc-generic.c
@@ -19,54 +19,44 @@
#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;
}
diff --git a/sound/soc/txx9/txx9aclc.c b/sound/soc/txx9/txx9aclc.c
index 0e34523..f4aa4e0 100644
--- a/sound/soc/txx9/txx9aclc.c
+++ b/sound/soc/txx9/txx9aclc.c
@@ -22,6 +22,16 @@
#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");
diff --git a/sound/soc/txx9/txx9aclc.h b/sound/soc/txx9/txx9aclc.h
index 6769aab..9c2de84 100644
--- a/sound/soc/txx9/txx9aclc.h
+++ b/sound/soc/txx9/txx9aclc.h
@@ -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 */
OpenPOWER on IntegriCloud