diff options
Diffstat (limited to 'sound/soc')
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 */ |