summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--[-rwxr-xr-x]Media.mk1
-rw-r--r--drivers/amvdec_ports/Makefile1
-rw-r--r--drivers/amvdec_ports/aml_vcodec_adapt.c112
-rw-r--r--drivers/amvdec_ports/aml_vcodec_adapt.h5
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec.c992
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec.h2
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec_drv.c122
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec_pm.c206
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec_pm.h34
-rw-r--r--drivers/amvdec_ports/aml_vcodec_drv.h188
-rw-r--r--drivers/amvdec_ports/aml_vcodec_util.c34
-rw-r--r--drivers/amvdec_ports/aml_vcodec_util.h90
-rw-r--r--drivers/amvdec_ports/aml_vcodec_vfm.c28
-rw-r--r--drivers/amvdec_ports/decoder/aml_h264_parser.c81
-rw-r--r--drivers/amvdec_ports/decoder/aml_h264_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_hevc_parser.c133
-rw-r--r--drivers/amvdec_ports/decoder/aml_hevc_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_mjpeg_parser.c34
-rw-r--r--drivers/amvdec_ports/decoder/aml_mjpeg_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_mpeg12_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_mpeg4_parser.c178
-rw-r--r--drivers/amvdec_ports/decoder/aml_mpeg4_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_vp9_parser.c26
-rw-r--r--drivers/amvdec_ports/decoder/aml_vp9_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/vdec_h264_if.c223
-rw-r--r--drivers/amvdec_ports/decoder/vdec_hevc_if.c194
-rw-r--r--drivers/amvdec_ports/decoder/vdec_mjpeg_if.c210
-rw-r--r--drivers/amvdec_ports/decoder/vdec_mpeg12_if.c304
-rw-r--r--drivers/amvdec_ports/decoder/vdec_mpeg4_if.c209
-rw-r--r--drivers/amvdec_ports/decoder/vdec_vp9_if.c195
-rw-r--r--drivers/amvdec_ports/vdec_drv_if.c6
-rw-r--r--drivers/amvdec_ports/vdec_drv_if.h21
-rw-r--r--drivers/common/chips/chips.c1
-rw-r--r--drivers/common/chips/decoder_cpu_ver_info.c8
-rw-r--r--drivers/common/chips/decoder_cpu_ver_info.h1
-rw-r--r--drivers/common/firmware/firmware_drv.c9
-rw-r--r--drivers/common/firmware/firmware_type.c1
-rw-r--r--drivers/common/firmware/firmware_type.h1
-rw-r--r--drivers/common/media_clock/clk/clk.c3
-rw-r--r--drivers/common/media_clock/clk/clkg12.c5
-rw-r--r--drivers/frame_provider/decoder/Makefile1
-rw-r--r--drivers/frame_provider/decoder/avs/avs.c60
-rw-r--r--drivers/frame_provider/decoder/avs2/avs2_bufmgr.c12
-rw-r--r--drivers/frame_provider/decoder/avs2/avs2_global.h3
-rw-r--r--drivers/frame_provider/decoder/avs2/vavs2.c115
-rw-r--r--drivers/frame_provider/decoder/avs_multi/Makefile2
-rw-r--r--drivers/frame_provider/decoder/avs_multi/avs_multi.c1633
-rw-r--r--drivers/frame_provider/decoder/avs_multi/avsp_trans_multi.c5065
-rw-r--r--drivers/frame_provider/decoder/h264/vh264.c58
-rw-r--r--drivers/frame_provider/decoder/h264_multi/h264_dpb.c50
-rw-r--r--drivers/frame_provider/decoder/h264_multi/h264_dpb.h34
-rw-r--r--drivers/frame_provider/decoder/h264_multi/vmh264.c1043
-rw-r--r--drivers/frame_provider/decoder/h265/vh265.c707
-rw-r--r--drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c60
-rw-r--r--drivers/frame_provider/decoder/mpeg12/vmpeg12_multi.c595
-rw-r--r--drivers/frame_provider/decoder/mpeg4/vmpeg4.c5
-rw-r--r--drivers/frame_provider/decoder/mpeg4/vmpeg4_multi.c80
-rw-r--r--drivers/frame_provider/decoder/utils/amvdec.c5
-rw-r--r--drivers/frame_provider/decoder/utils/frame_check.c178
-rw-r--r--drivers/frame_provider/decoder/utils/frame_check.h4
-rw-r--r--drivers/frame_provider/decoder/utils/vdec.c530
-rw-r--r--drivers/frame_provider/decoder/utils/vdec.h18
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_input.c12
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_input.h3
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_v4l2_buffer_ops.c92
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_v4l2_buffer_ops.h7
-rw-r--r--drivers/frame_provider/decoder/vav1/Makefile2
-rw-r--r--drivers/frame_provider/decoder/vav1/aom_av1_define.h171
-rw-r--r--drivers/frame_provider/decoder/vav1/av1_bufmgr.c3392
-rw-r--r--drivers/frame_provider/decoder/vav1/av1_global.h2310
-rw-r--r--drivers/frame_provider/decoder/vav1/vav1.c9946
-rw-r--r--drivers/frame_provider/decoder/vav1/vav1.h22
-rw-r--r--drivers/frame_provider/decoder/vc1/vvc1.c46
-rw-r--r--drivers/frame_provider/decoder/vp9/vvp9.c449
-rw-r--r--drivers/frame_sink/encoder/h264/encoder.c2
-rw-r--r--drivers/stream_input/Makefile5
-rw-r--r--drivers/stream_input/amports/amstream.c263
-rw-r--r--drivers/stream_input/parser/demux/aml_dvb.h5
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/demod_gt.h62
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/frontend.c293
-rw-r--r--drivers/stream_input/parser/dvb_common.c17
-rw-r--r--drivers/stream_input/parser/dvb_common.h26
-rw-r--r--drivers/stream_input/parser/esparser.c15
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_demod_gt.h87
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dmx.c270
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb.c445
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb.h32
-rw-r--r--drivers/stream_input/parser/streambuf.c9
-rw-r--r--drivers/stream_input/parser/tsdemux.c14
-rw-r--r--drivers/stream_input/parser/tsdemux.h1
-rw-r--r--drivers/stream_input/tv_frontend/Makefile16
-rw-r--r--drivers/stream_input/tv_frontend/aml_fe.c1372
-rw-r--r--drivers/stream_input/tv_frontend/aml_fe.h213
-rw-r--r--drivers/stream_input/tv_frontend/atv_demod/atvdemod_frontend.c791
-rw-r--r--drivers/stream_input/tv_frontend/atv_demod/atvdemod_func.c2163
-rw-r--r--drivers/stream_input/tv_frontend/atv_demod/atvdemod_func.h323
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/aml_demod.c725
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/amlfrontend.c1402
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/demod_func.c2996
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/dvbc_func.c1331
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/dvbt_func.c2188
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/i2c_func.c42
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/acf_filter_coefficient.h414
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_che.h77
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_che_bit.h266
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_front.h70
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_front_bit.h331
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_sync.h53
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_sync_bit.h110
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_top.h90
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_top_bit.h178
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/aml_dtv_demod_reg.h28
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/amlfrontend.h86
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/demod_func.h626
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/tuner_func.c189
-rw-r--r--firmware/video_ucode.bin14148
116 files changed, 25845 insertions, 36303 deletions
diff --git a/drivers/stream_input/tv_frontend/dtv_demod/dvbt_func.c b/drivers/stream_input/tv_frontend/dtv_demod/dvbt_func.c
deleted file mode 100644
index 7654aae..0000000
--- a/drivers/stream_input/tv_frontend/dtv_demod/dvbt_func.c
+++ b/dev/null
@@ -1,2188 +0,0 @@
-/*
-* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
-*
-* 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.
-*
-* Description:
-*/
-#include <linux/kernel.h>
-#include <linux/i2c.h>
-#include <linux/delay.h>
-#include <linux/dvb/aml_demod.h>
-#include "demod_func.h"
-
-static int debug_amldvbt;
-
-module_param(debug_amldvbt, int, 0644);
-MODULE_PARM_DESC(debug_amldvbt, "turn on debugging (default: 0)");
-#define dprintk(args ...) do { if (debug_amldvbt) printk(args); } while (0)
-
-static int tuner_type = 3;
-
-static void set_ACF_coef(int ADsample, int bandwidth)
-{
- if (ADsample == 45) {
- /* Set ACF and IIREQ */
- if (bandwidth == 0) {
- /*8M Hz */
- apb_write_reg(2, 0x2c, 0x255); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x0B5); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x091); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x02E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x253); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x0CB); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x2CD); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x07C); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x250); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0E4); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x276); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05D); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x24D); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0F3); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x25E); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x24A); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0FD); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x256); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003effff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003cefbe);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003adf7c);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x0038bf39);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x003696f5);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x003466b0);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00322e69);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x002fee21);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x002dadd9);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002b6d91);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x00291d48);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x0026ccfe);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x00245cb2);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0021d463);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x001f2410);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x001c3bb6);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x00192b57);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x0015e2f1);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x00127285);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x000eca14);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x000ac99b);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x00063913);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x0000c073);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x003a3fb4);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00347ecf);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x002ff649);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x002a8dab);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x002444f0);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x001d0c1b);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x000fc300);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x000118ce);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x003c17c3);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x00000751);
- } else if (bandwidth == 1) {
- /* 7Mhz */
- apb_write_reg(2, 0x2c, 0x24B); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x0BD); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x04B); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x03E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x246); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x0D1); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x2A2); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x07C); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x241); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0E7); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x25B); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05D); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x23D); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0F5); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x248); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x23A); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0FD); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x242); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f07ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003cffbf);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003aef7e);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x0038d73c);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x0036b6f9);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x003486b3);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00324e6d);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x00300e25);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x002dcddd);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002b8594);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x00292d4b);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x0026d500);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x00245cb3);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0021cc62);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x001f0c0d);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x001c1bb3);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x0018fb52);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x0015b2eb);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x00123a7f);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x000e9a0e);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x000a9995);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0006090d);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x0000a06e);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x003a57b3);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x0034ded8);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x00309659);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x002b75c4);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x0025350e);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x001dec37);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x00126b28);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x00031130);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x003cffec);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x00000767);
- } else if (bandwidth == 2) {
- /* 6MHz */
- apb_write_reg(2, 0x2c, 0x240); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x0C6); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x3F9); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x03E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x23A); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x0D7); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x27B); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x07C); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x233); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0EA); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x244); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05D); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x22F); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0F6); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x235); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x22B); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0FD); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x231); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f07ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003cffbf);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003aef7e);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x0038d73c);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x0036b6f8);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x003486b3);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x0032466c);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x002ffe24);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x002dadda);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002b5d90);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x0028fd45);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002694f9);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x002414ab);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x00217458);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x001ea402);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x001ba3a5);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x00187342);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x00151ad9);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x0011926b);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x000dc9f6);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x0009a178);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0004d8eb);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x003f4045);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x0038e785);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00337eab);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x002f3e2d);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x002a1599);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x0023ace1);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x001b33fb);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x000cd29c);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x0001c0c1);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x003cefde);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x0000076a);
- } else {
- /* 5MHz */
- apb_write_reg(2, 0x2c, 0x236); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x0CE); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x39A); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x03E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x22F); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x0DE); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x257); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x07C); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x227); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0EE); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x230); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05D); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x222); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0F8); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x225); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x21E); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0FE); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x222); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003effff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003ce7bd);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003ac77a);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x0038a737);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x00367ef2);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x00344eac);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00321e66);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x002fee20);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x002dbdda);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002b8d94);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x00295d4e);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x00272508);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0024dcc0);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x00227475);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x001fe426);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x001d1bd1);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x001a2374);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x0016e311);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x00136aa6);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x000fba33);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x000ba9b8);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0007092e);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x0001988e);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x003b37d0);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x0035aef3);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x00316673);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x002c45de);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x0025e527);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x001da444);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x000deaea);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x000178bf);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x003cb7d6);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x00000765);
- }
- } else if (ADsample == 28) {
- /* 28.5714 MHz Set ACF */
- if (bandwidth == 0) {
- /*8M Hz */
- apb_write_reg(2, 0x2c, 0x2DB); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x05B); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x163); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x00E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x2D5); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x08B); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x3BC); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x06D); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x2CF); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0BF); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x321); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x008); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x2C9); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0E3); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x2EE); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x058); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x2C3); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0F8); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x2DD); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04D); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003ef7ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d37c0);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003c3f94);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003b0f78);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x0038c73f);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x00369ef1);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x003576be);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x0033b698);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x0031164d);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002f1dfd);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002de5cf);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002c15a2);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0029f560);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0027bd1b);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x00252ccf);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x0022bc7c);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x00207c34);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001da3e5);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001a9b83);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x0017db27);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x001432c6);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x000fa23e);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000b91af);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x00077136);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x0002c090);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003ec01a);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003a3f92);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x00354efa);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x002fee54);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x002a35a3);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x0023f4e4);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x001cdc12);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x00000316);
- } else if (bandwidth == 1) {
- apb_write_reg(2, 0x2c, 0x2C2); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x069); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x134); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x00E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x2B7); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x095); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x36F); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x06D); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x2AA); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0C6); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x2E5); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x008); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x2A1); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0E6); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x2BA); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x058); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x299); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0F9); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x2AC); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04D); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003ee7ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d1fbc);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003bf790);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003a876a);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x00388f31);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x0036c6f3);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x003536bf);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x00334689);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x00310644);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002ef5fd);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002d45c2);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002b7d8c);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x00298550);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x00278510);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x00252ccc);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x0022847c);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x00201427);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001e03e0);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001b6b9b);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x0017c336);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x0013e2b8);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0010b246);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000d81e8);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x00084966);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x0003089c);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003f0022);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003aaf9c);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x00360f0c);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x00312e74);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x002c05d3);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x00268d2a);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x0020bc76);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x000003b3);
- } else if (bandwidth == 2) {
- /* 6MHz */
- apb_write_reg(2, 0x2c, 0x2A9); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x078); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x0F4); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x01E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x299); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x0A1); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x321); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x078); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x288); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0CD); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x2AE); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05F); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x27C); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0E9); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x28B); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x058); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x273); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0FA); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x281); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04D); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f17ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d3fc4);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003b7f8a);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x0039df55);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x00381720);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x00360ee2);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00342ea1);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x0032ee6e);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x0031e64e);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x00300e22);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002daddc);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002b758f);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0029ad51);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0027ad18);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x00250ccd);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x00227476);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x00204c2a);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001de3e6);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001a838a);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x0016ab12);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x00137a9d);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x00113a4a);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000db1f8);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x0007c15f);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00022883);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003df803);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x00398f79);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x0034d6e6);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x002fd64b);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x002a8da7);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x002504fa);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x001f2443);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x00000382);
- } else {
- apb_write_reg(2, 0x2c, 0x28F); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x088); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x09E); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x01E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x27C); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x0AD); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x2D6); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x078); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x268); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0D4); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x27C); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05F); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x25B); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0ED); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x262); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x058); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x252); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0FB); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x25A); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04D); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f17ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d4fc5);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003baf8e);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003a3f5d);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x0038df32);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x00374703);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00354ec9);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x00333e88);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x00314e47);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002f860c);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002d9dd2);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002b5590);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0028cd42);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x00266cf2);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x00245cab);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x00225c6b);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x00200427);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001d4bd5);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001a9b7d);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x00183b2b);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x0015b2e1);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x00122a83);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000d49fc);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x0007594e);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00024080);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003e980e);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003ab796);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x00368f15);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x00320e8a);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x002d25f4);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x0027ad4f);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x00219496);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x000003c9);
- }
- } else {
- /* 20.7 MHz Set ACF */
- if (bandwidth == 0) {
- /*8M Hz */
- apb_write_reg(2, 0x2c, 0x318); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x03E); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x1AE); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x00E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x326); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x074); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x074); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x06F); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x336); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0B1); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x3C9); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x008); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x33F); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0DC); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x384); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x340); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0F6); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x36D); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f37ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d97cc);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003bf798);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003a4f64);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x0038a72f);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x0036f6f9);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x003546c3);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x0033868c);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x0031be54);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002fe61a);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002e05df);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002c15a2);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x002a1562);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0027f520);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x0025c4dc);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x00236c93);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x0020f446);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001e4bf4);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001b739d);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x00185b3d);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x0014ead5);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x00111a62);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000cb9df);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x00079148);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00030093);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003f802a);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003b77b2);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x0036a725);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x0030ae7b);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x00285d9f);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x001abc46);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x000f8a85);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x00000187);
- } else if (bandwidth == 1) {
- apb_write_reg(2, 0x2c, 0x2F9); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x04C); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x18E); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x00E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x2FD); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x07F); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x01A); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x06D); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x300); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0B8); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x372); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05F); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x301); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0DF); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x335); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x2FE); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0F7); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x320); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f37ff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d8fcc);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003bef97);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003a4762);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x0038972d);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x0036e6f7);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00352ec1);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x00336e89);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x00319e50);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002fce16);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002de5db);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002bf59d);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0029ed5e);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0027d51c);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x00259cd7);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x0023448e);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x0020cc41);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001e23ef);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001b4b98);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x00183339);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x0014cad1);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0010fa5e);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000c99dc);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x00078145);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x0002f892);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003f802a);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003b8fb3);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x0036d729);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x00310682);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x00290dae);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x001c0c67);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x0010a2ad);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x000001a8);
- } else if (bandwidth == 2) {
- /* 6MHz */
- apb_write_reg(2, 0x2c, 0x2D9); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x05C); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x161); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x00E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x2D4); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x08B); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x3B8); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x06B); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x2CD); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0C0); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x31E); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05F); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x2C7); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0E3); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x2EB); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x2C1); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0F8); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x2DA); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f2fff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d87cb);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003bdf96);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003a2f60);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x00387f2a);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x0036c6f4);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x00350ebd);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x00334684);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x0031764b);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002f9e11);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002db5d4);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002bbd97);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0029b557);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x00279515);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x00255ccf);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x00230c87);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x0020943a);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001debe8);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001b1b91);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x00180b33);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x0014aacc);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0010e25a);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000c91da);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x00078945);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00031895);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003fa82e);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003bbfb8);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x00371730);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x0031668c);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x00299dbc);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x001d1480);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x00119acf);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x000001c4);
- } else {
- apb_write_reg(2, 0x2c, 0x2B9); /* ACF_STAGE1_A1 */
- apb_write_reg(2, 0x2d, 0x06E); /* ACF_STAGE1_A2 */
- apb_write_reg(2, 0x2e, 0x11E); /* ACF_STAGE1_B1 */
- apb_write_reg(2, 0x2f, 0x01E); /* ACF_STAGE1_GAIN */
- apb_write_reg(2, 0x30, 0x2AB); /* ACF_STAGE2_A1 */
- apb_write_reg(2, 0x31, 0x099); /* ACF_STAGE2_A2 */
- apb_write_reg(2, 0x32, 0x351); /* ACF_STAGE2_B1 */
- apb_write_reg(2, 0x33, 0x06B); /* ACF_STAGE2_GAIN */
- apb_write_reg(2, 0x34, 0x29D); /* ACF_STAGE3_A1 */
- apb_write_reg(2, 0x35, 0x0C8); /* ACF_STAGE3_A2 */
- apb_write_reg(2, 0x36, 0x2D0); /* ACF_STAGE3_B1 */
- apb_write_reg(2, 0x37, 0x05F); /* ACF_STAGE3_GAIN */
- apb_write_reg(2, 0x38, 0x292); /* ACF_STAGE4_A1 */
- apb_write_reg(2, 0x39, 0x0E7); /* ACF_STAGE4_A2 */
- apb_write_reg(2, 0x3a, 0x2A8); /* ACF_STAGE4_B1 */
- apb_write_reg(2, 0x3b, 0x05A); /* ACF_STAGE4_GAIN */
- apb_write_reg(2, 0x3c, 0x28A); /* ACF_STAGE5_A1 */
- apb_write_reg(2, 0x3d, 0x0F9); /* ACF_STAGE5_A2 */
- apb_write_reg(2, 0x3e, 0x29B); /* ACF_STAGE5_B1 */
- apb_write_reg(2, 0x3f, 0x04B); /* ACF_STAGE5_GAIN */
-
- apb_write_reg(2, 0xfe, 0x000);
- apb_write_reg(2, 0xff, 0x003f2fff);
- apb_write_reg(2, 0xfe, 0x001);
- apb_write_reg(2, 0xff, 0x003d7fca);
- apb_write_reg(2, 0xfe, 0x002);
- apb_write_reg(2, 0xff, 0x003bcf94);
- apb_write_reg(2, 0xfe, 0x003);
- apb_write_reg(2, 0xff, 0x003a1f5e);
- apb_write_reg(2, 0xfe, 0x004);
- apb_write_reg(2, 0xff, 0x00386727);
- apb_write_reg(2, 0xfe, 0x005);
- apb_write_reg(2, 0xff, 0x0036a6f0);
- apb_write_reg(2, 0xfe, 0x006);
- apb_write_reg(2, 0xff, 0x0034e6b8);
- apb_write_reg(2, 0xfe, 0x007);
- apb_write_reg(2, 0xff, 0x0033167f);
- apb_write_reg(2, 0xfe, 0x008);
- apb_write_reg(2, 0xff, 0x00314645);
- apb_write_reg(2, 0xfe, 0x009);
- apb_write_reg(2, 0xff, 0x002f660a);
- apb_write_reg(2, 0xfe, 0x00a);
- apb_write_reg(2, 0xff, 0x002d75cd);
- apb_write_reg(2, 0xfe, 0x00b);
- apb_write_reg(2, 0xff, 0x002b758e);
- apb_write_reg(2, 0xfe, 0x00c);
- apb_write_reg(2, 0xff, 0x0029654e);
- apb_write_reg(2, 0xfe, 0x00d);
- apb_write_reg(2, 0xff, 0x0027450a);
- apb_write_reg(2, 0xfe, 0x00e);
- apb_write_reg(2, 0xff, 0x002504c4);
- apb_write_reg(2, 0xfe, 0x00f);
- apb_write_reg(2, 0xff, 0x0022a47b);
- apb_write_reg(2, 0xfe, 0x010);
- apb_write_reg(2, 0xff, 0x0020242d);
- apb_write_reg(2, 0xfe, 0x011);
- apb_write_reg(2, 0xff, 0x001d7bdb);
- apb_write_reg(2, 0xfe, 0x012);
- apb_write_reg(2, 0xff, 0x001aa383);
- apb_write_reg(2, 0xfe, 0x013);
- apb_write_reg(2, 0xff, 0x00178b24);
- apb_write_reg(2, 0xfe, 0x014);
- apb_write_reg(2, 0xff, 0x00142abd);
- apb_write_reg(2, 0xfe, 0x015);
- apb_write_reg(2, 0xff, 0x0010624a);
- apb_write_reg(2, 0xfe, 0x016);
- apb_write_reg(2, 0xff, 0x000c11ca);
- apb_write_reg(2, 0xfe, 0x017);
- apb_write_reg(2, 0xff, 0x00070935);
- apb_write_reg(2, 0xfe, 0x018);
- apb_write_reg(2, 0xff, 0x00029885);
- apb_write_reg(2, 0xfe, 0x019);
- apb_write_reg(2, 0xff, 0x003f281e);
- apb_write_reg(2, 0xfe, 0x01a);
- apb_write_reg(2, 0xff, 0x003b3fa9);
- apb_write_reg(2, 0xfe, 0x01b);
- apb_write_reg(2, 0xff, 0x00369720);
- apb_write_reg(2, 0xfe, 0x01c);
- apb_write_reg(2, 0xff, 0x0030ce7b);
- apb_write_reg(2, 0xfe, 0x01d);
- apb_write_reg(2, 0xff, 0x0028dda7);
- apb_write_reg(2, 0xfe, 0x01e);
- apb_write_reg(2, 0xff, 0x001c6464);
- apb_write_reg(2, 0xfe, 0x01f);
- apb_write_reg(2, 0xff, 0x0011b2c7);
- apb_write_reg(2, 0xfe, 0x020);
- apb_write_reg(2, 0xff, 0x000001cb);
- }
- }
-}
-
-static void dvbt_reg_initial(struct aml_demod_sta *demod_sta)
-{
- u32 clk_freq;
- u32 adc_freq;
- u8 ch_mode;
- u8 agc_mode;
- u32 ch_freq;
- u16 ch_if;
- u16 ch_bw;
- u16 symb_rate;
-
- u8 bw;
- u8 sr;
- u8 ifreq;
- u32 tmp;
-
- clk_freq = demod_sta->clk_freq; /* kHz */
- adc_freq = demod_sta->adc_freq; /* kHz */
- ch_mode = demod_sta->ch_mode;
- agc_mode = demod_sta->agc_mode;
- ch_freq = demod_sta->ch_freq; /* kHz */
- ch_if = demod_sta->ch_if; /* kHz */
- ch_bw = demod_sta->ch_bw; /* kHz */
- symb_rate = demod_sta->symb_rate; /* k/sec */
-
- bw = 8 - ch_bw / 1000;
- sr = adc_freq > 40000 ? 3 : adc_freq > 24000 ? 2 :
- adc_freq > 20770 ? 1 : 0;
- ifreq = ch_if > 35000 ? 0 : 1;
-
- /*//////////////////////////////////// */
- /* bw == 0 : 8M */
- /* 1 : 7M */
- /* 2 : 6M */
- /* 3 : 5M */
- /* sr == 0 : 20.7M */
- /* 1 : 20.8333M */
- /* 2 : 28.5714M */
- /* 3 : 45M */
- /* ifreq == 0: 36.13MHz */
- /* 1: 4.57MHz */
- /* agc_mode == 0: single AGC */
- /* 1: dual AGC */
- /*//////////////////////////////////// */
- apb_write_reg(2, 0x02, 0x00800000);
- /* SW reset bit[23] ; write anything to zero */
- apb_write_reg(2, 0x00, 0x00000000);
-
- switch (sr) {
- case 0:
- apb_write_reg(2, 0x08, 0x00002966);
- break;
- case 1:
- apb_write_reg(2, 0x08, 0x00002999);
- break;
- case 2:
- apb_write_reg(2, 0x08, 0x00003924);
- break;
- case 3:
- apb_write_reg(2, 0x08, 0x00005a00);
- break; /*sample_rate /*45M */
- default:
- break;
- }
-
- apb_write_reg(2, 0x0d, 0x00000000);
- apb_write_reg(2, 0x0e, 0x00000000);
- dvbt_enable_irq(8);
-
- apb_write_reg(2, 0x11, 0x00100002); /* FSM [15:0] TIMER_FEC_LOST */
- apb_write_reg(2, 0x12, 0x02100201); /* FSM */
- apb_write_reg(2, 0x14, 0xe81c4ff6); /* AGC_TARGET 0xf0121385 */
- apb_write_reg(2, 0x15, 0x02050ca6); /* AGC_CTRL */
-
- switch (sr) {
- case 0:
- apb_write_reg(2, 0x15, apb_read_reg(2, 0x15) | (0x5b << 12));
- break;
- case 1:
- apb_write_reg(2, 0x15, apb_read_reg(2, 0x15) | (0x5b << 12));
- break;
- case 2:
- apb_write_reg(2, 0x15, apb_read_reg(2, 0x15) | (0x7b << 12));
- break;
- case 3:
- apb_write_reg(2, 0x15, apb_read_reg(2, 0x15) | (0xc2 << 12));
- break; /* sample_rate /*45M */
- default:
- break;
- }
-
- if (agc_mode == 0)
- apb_write_reg(2, 0x16, 0x67f80); /* AGC_IFGAIN_CTRL */
- else if (agc_mode == 1)
- apb_write_reg(2, 0x16, 0x07f80); /* AGC_IFGAIN_CTRL */
-
- apb_write_reg(2, 0x17, 0x07f80); /* AGC_RFGAIN_CTRL */
- apb_write_reg(2, 0x18, 0x00000000); /* AGC_IFGAIN_ACCUM */
- apb_write_reg(2, 0x19, 0x00000000); /* AGC_RFGAIN_ACCUM */
-
- if (ifreq == 0) {
- switch (sr) {
- case 0:
- apb_write_reg(2, 0x20, 0x00002096);
- break;
- /* DDC NORM_PHASE 36.13M IF For 20.7M sample rate */
- case 1:
- apb_write_reg(2, 0x20, 0x000021a9);
- break;
- /* DDC NORM_PHASE 36.13M IF For 20.8333M sample rate*/
- case 2:
- apb_write_reg(2, 0x20, 0x000021dc);
- break;
- /* DDC NORM_PHASE 36.13M IF For 28.57142M sample rate*/
- case 3:
- apb_write_reg(2, 0x20, 0x000066e2);
- break;
- /* DDC NORM_PHASE 36.13M IF For 45M sample rate */
- default:
- break;
- }
- } else if (ifreq == 1) {
- switch (sr) {
- case 0:
- apb_write_reg(2, 0x20, 0x00001c42);
- break;
- /* DDC NORM_PHASE 4.57M IF For 20.7M sample rate */
- case 1:
- apb_write_reg(2, 0x20, 0x00001c1f);
- break;
- /* DDC NORM_PHASE 4.57M IF For 20.8333M sample rate */
- case 2:
- apb_write_reg(2, 0x20, 0x00001479);
- break;
- /* DDC NORM_PHASE 4.57M IF For 28.57142M sample rate*/
- case 3:
- apb_write_reg(2, 0x20, 0x0000d00);
- break;
- /* DDC NORM_PHASE 4.57M IF For 45M sample rate */
- default:
- break;
- }
- }
- */tmp = ch_if * (1 << 15)/adc_freq;
- tmp &= 0x3fff;
- apb_write_reg(2, 0x20, tmp);
- if (demod_sta->debug)
- dprintk("IF: %d kHz ADC: %d kHz DDC: %04x\n", ch_if, adc_freq,
- tmp);
-
- apb_write_reg(2, 0x21, 0x001ff000); /* DDC CS_FCFO_ADJ_CTRL */
- apb_write_reg(2, 0x22, 0x00000000); /* DDC ICFO_ADJ_CTRL */
- apb_write_reg(2, 0x23, 0x00004000); /* DDC TRACK_FCFO_ADJ_CTRL */
- apb_write_reg(2, 0x27, 0x00a98200);
- /*[23] agc state mode [22:19] icfo_time_limit ;[18:15] tps_time_limit ;
- * [14:4] cs_cfo_thres ; [3:0] fsm_state_d;
- */
- /* 1 010,1 001,1
- * 000,0010,0000, xxxx
- */
- apb_write_reg(2, 0x28, 0x04028032);
- /* [31:24] cs_Q_thres; [23:13] sfo_thres; FSM [12:0] fcfo_thres;; */
- /* 0000,0100, 0000,0010,100 0,0000,0011,0010 */
- apb_write_reg(2, 0x29, 0x0051117F);
- /*apb_write_reg(2, 0x29, 0x00010f7F); */
- /* [18:16] fec_rs_sh_ctrl ;[15:9] fsm_total_timer;
- * [8:6] modeDet_time_limit; FSM [5:0] sfo_time_limit; ;
- */
- /* 01, () 0000,111 1,01 11,1111 */
-
- /* SRC NORM_INRATE */
- switch (bw) {
- case 0:
- tmp = (1 << 14) * adc_freq / 125 / 8 * 7;
- break;
- case 1:
- tmp = (1 << 14) * adc_freq / 125;
- break;
- case 2:
- tmp = (1 << 14) * adc_freq / 125 / 6 * 7;
- break;
- case 3:
- tmp = (1 << 14) * adc_freq / 125 / 5 * 7;
- break;
- default:
- tmp = (1 << 14) * adc_freq / 125 / 8 * 7;
- break;
- }
-
- apb_write_reg(2, 0x44, tmp & 0x7fffff);
-
- apb_write_reg(2, 0x45, 0x00000000); /* SRC SRC_PHASE_INI */
- apb_write_reg(2, 0x46, 0x02004000);
- /* SRC SFO_ADJ_CTRL SFO limit 0x100!! */
- apb_write_reg(2, 0x48, 0xc0287); /* DAGC_CTRL */
- apb_write_reg(2, 0x49, 0x00000005); /* DAGC_CTRL1 */
- apb_write_reg(2, 0x4c, 0x00000bbf); /* CCI_RP */
- apb_write_reg(2, 0x4d, 0x00000376); /* CCI_RPSQ */
- apb_write_reg(2, 0x4e, 0x00202109); /* CCI_CTRL */
- apb_write_reg(2, 0x52, 0x00000000); /* CCI_NOTCH1_A2 */
- apb_write_reg(2, 0x53, 0x00000000); /* CCI_NOTCH1_B1 */
- apb_write_reg(2, 0x54, 0x00c00000); /* CCI_NOTCH2_A1 */
- apb_write_reg(2, 0x55, 0x00000000); /* CCI_NOTCH2_A2 */
- apb_write_reg(2, 0x56, 0x00000000); /* CCI_NOTCH2_B1 */
- apb_write_reg(2, 0x57, 0x00000000); /* CCI_NOTCH2_B1 */
- apb_write_reg(2, 0x58, 0x00000886); /* MODE_DETECT_CTRL */
- apb_write_reg(2, 0x5c, 0x00001011); /* ICFO_EST_CTRL */
- apb_write_reg(2, 0x5f, 0x00010503); /* TPS_FCFO_CTRL */
- apb_write_reg(2, 0x61, 0x00000003); /* DE_PN_CTRL */
- apb_write_reg(2, 0x61, apb_read_reg(2, 0x61) | (1 << 2));
- /* DE_PN_CTRL SP sync close , Use TPS only ; */
- apb_write_reg(2, 0x68, 0x004060c0); /* CHAN_EST_CTRL0 */
- apb_write_reg(2, 0x68, apb_read_reg(2, 0x68) & ~(1 << 7));
- /* SNR report filter; */
- /*apb_write_reg(2, 0x68, apb_read_reg(2, 0x68) &~(1<<13)); //
- * Timing Adjust Shutdown;
- */
- apb_write_reg(2, 0x69, 0x148c3812); /* CHAN_EST_CTRL1 */
- /*apb_write_reg(2, 0x69, apb_read_reg(2, 0x69) | (1<<10)); //
- * Disable FD data update
- */
- /*apb_write_reg(2, 0x69, apb_read_reg(2, 0x69) | (1<<9)); //
- * set FD coeff
- */
- /*apb_write_reg(2, 0x69, apb_read_reg(2, 0x69) | (1<<8)); //
- * set TD coeff
- */
- apb_write_reg(2, 0x6a, 0x9101012d); /* CHAN_EST_CTRL2 */
- apb_write_reg(2, 0x6b, 0x00442211); /* CHAN_EST_CTRL2 */
- apb_write_reg(2, 0x6c, 0x01fc040a); /* CHAN_EST_CTRL3 */
- apb_write_reg(2, 0x6d, 0x0030303f); /* SET SNR THRESHOLD */
- apb_write_reg(2, 0x73, 0xffffffff); /* CCI0_PILOT_UPDATE_CTRL */
- apb_write_reg(2, 0x74, 0xffffffff); /* CCI0_DATA_UPDATE_CTRL */
- apb_write_reg(2, 0x75, 0xffffffff); /* CCI1_PILOT_UPDATE_CTRL */
- apb_write_reg(2, 0x76, 0xffffffff); /* CCI1_DATA_UPDATE_CTRL */
-
- /* Set ACF and ACFEQ coeffecient */
- switch (sr) {
- case 0:
- set_ACF_coef(21, bw);
- break;
- case 1:
- set_ACF_coef(21, bw);
- break;
- case 2:
- set_ACF_coef(28, bw);
- break;
- case 3:
- set_ACF_coef(45, bw);
- break;
- default:
- break;
- }
-
- apb_write_reg(2, 0x78, 0x000001a2);
- /* FEC_CTRL parallel mode ; [27:24] is TS clk/valid/sync/error */
- apb_write_reg(2, 0x7d, 0x0000009d);
- apb_write_reg(2, 0xd6, 0x00000003);
- apb_write_reg(2, 0xd7, 0x00000008);
- apb_write_reg(2, 0xd8, 0x00000120);
- apb_write_reg(2, 0xd9, 0x01010101);
- apb_write_reg(2, 0x04, 0x00000000);
- /* TPS Current, QPSK, none Hierarchy, HP, LP 1/2 */
-
- tmp = (1 << 25) | ((bw & 3) << 20) | (1 << 16) | (1 << 1);
- apb_write_reg(2, 0x02, tmp);
- apb_write_reg(2, 0x03, (1 << 6)); /* Cordic parameter Calc */
-
- udelay(1);
-
- tmp = apb_read_reg(2, 0x02);
- tmp |= (1 << 24) | 1; /* FSM, Demod enable. */
- apb_write_reg(2, 0x02, tmp);
-}
-
-int dvbt_set_ch(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c,
- struct aml_demod_dvbt *demod_dvbt)
-{
- int ret = 0;
- u8 bw, sr, ifreq, agc_mode;
- u32 ch_freq;
-
- bw = demod_dvbt->bw;
- sr = demod_dvbt->sr;
- ifreq = demod_dvbt->ifreq;
- agc_mode = demod_dvbt->agc_mode;
- ch_freq = demod_dvbt->ch_freq;
-
- /* Set registers */
- /*//////////////////////////////////// */
- /* bw == 0 : 8M */
- /* 1 : 7M */
- /* 2 : 6M */
- /* 3 : 5M */
- /* sr == 0 : 20.7M */
- /* 1 : 20.8333M */
- /* 2 : 28.5714M */
- /* 3 : 45M */
- /* ifreq == 0: 36.13MHz */
- /* 1: 4.57MHz */
- /* agc_mode == 0: single AGC */
- /* 1: dual AGC */
- /*//////////////////////////////////// */
- if (bw > 3) {
- dprintk("Error: Invalid Bandwidth option %d\n", bw);
- bw = 0;
- ret = -1;
- }
-
- if (sr > 3) {
- dprintk("Error: Invalid Sampling Freq option %d\n", sr);
- sr = 2;
- ret = -1;
- }
-
- if (ifreq > 1) {
- dprintk("Error: Invalid IFreq option %d\n", ifreq);
- ifreq = 0;
- ret = -1;
- }
-
- if (agc_mode > 3) {
- dprintk("Error: Invalid AGC mode option %d\n", agc_mode);
- agc_mode = 0;
- ret = -1;
- }
- /* if (ret != 0) return ret; */
-
- /* Set DVB-T */
- (*DEMOD_REG0) |= 1;
-
- demod_sta->dvb_mode = 1;
- demod_sta->ch_mode = 0; /* TODO */
- demod_sta->agc_mode = agc_mode;
- demod_sta->ch_freq = ch_freq;
- if (demod_i2c->tuner == 1)
- demod_sta->ch_if = 36130;
- else if (demod_i2c->tuner == 2)
- demod_sta->ch_if = 4570;
-
- demod_sta->ch_bw = (8 - bw) * 1000;
- demod_sta->symb_rate = 0; /* TODO */
-
- /* Set Tuner */
- if (ch_freq < 1000 || ch_freq > 900000) {
- dprintk
- (
- "Error: Invalid Channel Freq option %d, Skip Set tuner\n",
- ch_freq);
- /*ch_freq = 474000; */
- ret = -1;
- } else {
- /* tuner_set_ch(demod_sta, demod_i2c); */
- }
-
- if ((ch_freq % 100) == 2)
- dprintk("Input frequency is XXX002, Skip initial demod\n");
- else
- dvbt_reg_initial(demod_sta);
-
- dvbt_enable_irq(7); /* open symbolhead int */
-
- tuner_type = demod_i2c->tuner;
-
- return ret;
-}
-
-static int dvbt_get_ch_power(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c)
-{
- u32 ad_power;
-
- ad_power =
- agc_power_to_dbm((apb_read_reg(2, 0x1c) & 0x7ff),
- apb_read_reg(2, 0x1b) & 0x1ff, 0,
- demod_i2c->tuner);
- return ad_power;
-}
-
-int dvbt_sfo(void)
-{
- int sfo;
-
- sfo = apb_read_reg(2, 0x47) & 0xfff;
- sfo = (sfo > 0x7ff) ? (sfo - 0x1000) : sfo;
- return sfo;
-}
-
-int dvbt_fcfo(void)
-{
- int fcfo;
-
- fcfo = (apb_read_reg(2, 0x26)) & 0xffffff;
- fcfo = (fcfo > 0x7fffff) ? (fcfo - 0x1000000) : fcfo;
- return fcfo;
-}
-
-static int dvbt_total_packet_error(void)
-{
- return apb_read_reg(2, 0xbf);
-}
-
-static int dvbt_super_frame_counter(void)
-{
- return apb_read_reg(2, 0xc0) & 0xfffff;
-}
-
-static int dvbt_packet_correct_in_sframe(void)
-{
- return apb_read_reg(2, 0xc1) & 0xfffff;
-}
-
-/*static int dvbt_resync_counter(void)
- * {return((apb_read_reg(2, 0xc0)>>20)&0xff);}
- */
-static int dvbt_packets_per_sframe(void)
-{
- u32 tmp;
- int hier_mode;
- int constel;
- int hp_code_rate;
- int lp_code_rate;
- int hier_sel;
- int code_rate;
- int ret;
-
- tmp = apb_read_reg(2, 0x06);
- constel = tmp >> 13 & 3;
- hier_mode = tmp >> 10 & 7;
- hp_code_rate = tmp >> 7 & 7;
- lp_code_rate = tmp >> 4 & 7;
-
- if (hier_mode == 0) {
- code_rate = hp_code_rate;
- } else {
- tmp = apb_read_reg(2, 0x78);
- hier_sel = tmp >> 9 & 1;
- if (hier_sel == 0) {
- constel = 0; /* QPSK; */
- code_rate = hp_code_rate;
- } else {
- constel = constel == 2 ? 1 : 0;
- code_rate = lp_code_rate;
- }
- }
-
- switch (code_rate) {
- case 0:
- ret = (constel == 0) ? 1008 : (constel == 1) ? 2016 : 3024;
- break;
- case 1:
- ret = (constel == 0) ? 1344 : (constel == 1) ? 2688 : 4032;
- break;
- case 2:
- ret = (constel == 0) ? 1512 : (constel == 1) ? 3024 : 4536;
- break;
- case 3:
- ret = (constel == 0) ? 1680 : (constel == 1) ? 3360 : 5040;
- break;
- case 4:
- ret = (constel == 0) ? 1764 : (constel == 1) ? 3528 : 5292;
- break;
- default:
- ret = (constel == 0) ? 1008 : (constel == 1) ? 2016 : 3024;
- break;
- }
- return ret;
-}
-
-static int dvbt_get_per(void)
-{
- int packets_per_sframe;
- int error;
- int per;
-
- packets_per_sframe = dvbt_packets_per_sframe();
- error = packets_per_sframe - dvbt_packet_correct_in_sframe();
- per = 1000 * error / packets_per_sframe;
-
- return per;
-}
-
-static void dvbt_set_test_bus(u8 sel)
-{
- u32 tmp;
-
- tmp = apb_read_reg(2, 0x7f);
- tmp &= ~(0x1f);
- tmp |= ((1 << 15) | (1 << 5) | (sel & 0x1f));
- apb_write_reg(2, 0x7f, tmp);
-}
-
-/*
- * void dvbt_get_test_out(u8 sel, u32 len, u32 *buf)
- * {
- * int i;
- *
- * dvbt_set_test_bus(sel);
- *
- * for (i=0; i<len; i++) {
- * buf[i] = apb_read_reg(2, 0x13);
- * }
- * }
- */
-void dvbt_get_test_out(u8 sel, u32 len, u32 *buf)
-{
- int i, cnt;
-
- dvbt_set_test_bus(sel);
-
- for (i = 0, cnt = 0; i < len - 4 && cnt < 1000000; i++) {
- buf[i] = apb_read_reg(2, 0x13);
- if ((buf[i] >> 10) & 0x1) {
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- buf[i++] = apb_read_reg(2, 0x13);
- } else {
- i--;
- }
-
- cnt++;
- }
-}
-
-static int dvbt_get_avg_per(void)
-{
- int packets_per_sframe;
- static int err_last;
- static int err_now;
- static int rsnum_now;
- static int rsnum_last;
- int per;
-
- packets_per_sframe = dvbt_packets_per_sframe();
- rsnum_last = rsnum_now;
- rsnum_now = dvbt_super_frame_counter();
- err_last = err_now;
- err_now = dvbt_total_packet_error();
- if (rsnum_now != rsnum_last)
- per = 1000 * (err_now - err_last) /
- ((rsnum_now - rsnum_last) * packets_per_sframe);
- else
- per = 123;
-
- return per;
-}
-
-int dvbt_status(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c,
- struct aml_demod_sts *demod_sts)
-{
- /* if parameters are needed to calc, pass the struct to func. */
- /* all small funcs like read_snr() should be static. */
-
- demod_sts->ch_snr = apb_read_reg(2, 0x0a);
- demod_sts->ch_per = dvbt_get_per();
- demod_sts->ch_pow = dvbt_get_ch_power(demod_sta, demod_i2c);
- demod_sts->ch_ber = apb_read_reg(2, 0x0b);
- demod_sts->ch_sts = apb_read_reg(2, 0);
- demod_sts->dat0 = dvbt_get_avg_per();
- demod_sts->dat1 = apb_read_reg(2, 0x06);
- return 0;
-}
-
-static int dvbt_get_status(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c)
-{
- return apb_read_reg(2, 0x0) >> 12 & 1;
-}
-
-static int dvbt_ber(void);
-
-static int dvbt_get_ber(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c)
-{
- return dvbt_ber(); /*unit: 1e-7 */
-}
-
-static int dvbt_get_snr(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c)
-{
- return apb_read_reg(2, 0x0a) & 0x3ff; /*dBm: bit0~bit2=decimal */
-}
-
-static int dvbt_get_strength(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c)
-{
- int dbm = dvbt_get_ch_power(demod_sta, demod_i2c);
-
- return dbm;
-}
-
-static int dvbt_get_ucblocks(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *demod_i2c)
-{
- return dvbt_get_per();
-}
-
-struct demod_status_ops *dvbt_get_status_ops(void)
-{
- static struct demod_status_ops ops = {
- .get_status = dvbt_get_status,
- .get_ber = dvbt_get_ber,
- .get_snr = dvbt_get_snr,
- .get_strength = dvbt_get_strength,
- .get_ucblocks = dvbt_get_ucblocks,
- };
-
- return &ops;
-}
-
-void dvbt_enable_irq(int dvbt_irq)
-{
- /* clear status & enable irq */
- (*OFDM_INT_STS) &= ~(1 << dvbt_irq);
- (*OFDM_INT_EN) |= (1 << dvbt_irq);
-}
-
-void dvbt_disable_irq(int dvbt_irq)
-{
- /* disable irq & clear status */
- (*OFDM_INT_EN) &= ~(1 << dvbt_irq);
- (*OFDM_INT_STS) &= ~(1 << dvbt_irq);
-}
-
-char *dvbt_irq_name[] = {
- "PFS_FCFO",
- "PFS_ICFO",
- " CS_FCFO",
- " PFS_SFO",
- " PFS_TPS",
- " SP",
- " CCI",
- " Symbol",
- " In_Sync",
- "Out_Sync",
- "FSM Stat"
-};
-
-void dvbt_isr(struct aml_demod_sta *demod_sta)
-{
- u32 stat, mask;
- int dvbt_irq;
-
- stat = (*OFDM_INT_STS);
- mask = (*OFDM_INT_EN);
- stat &= mask;
-
- for (dvbt_irq = 0; dvbt_irq < 11; dvbt_irq++) {
- if (stat >> dvbt_irq & 1) {
- if (demod_sta->debug)
- dprintk("irq: aml_demod dvbt %2d %s %8x %8x\n",
- dvbt_irq, dvbt_irq_name[dvbt_irq], stat,
- mask);
- /* dvbt_disable_irq(dvbt_irq); */
- }
- }
- /* clear status */
- (*OFDM_INT_STS) = 0;
-}
-
-static int demod_monitor_ave(void);
-int dvbt_isr_islock(void)
-{
-#define IN_SYNC_MASK (0x100)
-
- u32 stat, mask;
-
- stat = (*OFDM_INT_STS);
- *OFDM_INT_STS = stat & (~IN_SYNC_MASK);
-
- mask = (*OFDM_INT_EN);
- stat &= mask;
-
- return (stat & IN_SYNC_MASK) == IN_SYNC_MASK;
-}
-
-int dvbt_isr_monitor(void)
-{
-#define SYM_HEAD_MASK (0x80)
- u32 stat, mask;
-
- stat = (*OFDM_INT_STS);
- *OFDM_INT_STS = stat & (~SYM_HEAD_MASK);
-
- mask = (*OFDM_INT_EN);
- stat &= mask;
- /* symbol_head int */
- if ((stat & SYM_HEAD_MASK) == SYM_HEAD_MASK)
- demod_monitor_ave();
- return 0;
-}
-
-int dvbt_isr_cancel(void)
-{
- *OFDM_INT_STS = 0;
- *OFDM_INT_EN = 0;
- return 0;
-}
-
-static int demod_monitor_instant(void)
-{
- int SNR;
- int SNR_SP = 500;
- int SNR_TPS = 0;
- int SNR_CP = 0;
- int SFO_residual = 0;
- int SFO_esti = 0;
- int FCFO_esti = 0;
- int FCFO_residual = 0;
- int AGC_Gain = 0;
- int be_vit_error = 0;
- int Signal_power = 0;
- int FECFlag = 0;
- int EQ_seg_ratio = 0;
- int tps_0 = 0;
- int tps_1 = 0;
- int tps_2 = 0;
- int cci_blank = 0;
-
- int SFO;
- int FCFO;
- int timing_adj;
- int RS_CorrectNum;
- int RS_Error_sum;
- int resync_times;
- int tps_summary;
-
- int tps_window;
- int tps_guard;
- int tps_constell;
- int tps_Hier_none;
- int tps_Hier_alpha;
- int tps_HP_cr;
- int tps_LP_cr;
-
- int tmpAGCGain;
-
- /* Read Registers */
- SNR = apb_read_reg(2, 0x0a);
- FECFlag = (apb_read_reg(2, 0x00) >> 11) & 0x3;
- SFO = apb_read_reg(2, 0x47) & 0xfff;
- SFO_esti = apb_read_reg(2, 0x60) & 0xfff;
- FCFO_esti = (apb_read_reg(2, 0x60) >> 11) & 0xfff;
- FCFO = (apb_read_reg(2, 0x26)) & 0xffffff;
- be_vit_error = apb_read_reg(2, 0x0c) & 0x1fff;
- timing_adj = apb_read_reg(2, 0x6f) & 0x1fff;
- RS_CorrectNum = apb_read_reg(2, 0xc1) & 0xfffff;
- Signal_power = (apb_read_reg(2, 0x1b)) & 0x1ff;
- EQ_seg_ratio = apb_read_reg(2, 0x6e) & 0x3ffff;
- tps_0 = apb_read_reg(2, 0x64);
- tps_1 = apb_read_reg(2, 0x65);
- tps_2 = apb_read_reg(2, 0x66) & 0xf;
- tps_summary = apb_read_reg(2, 0x04) & 0x7fff;
- cci_blank = (apb_read_reg(2, 0x66) >> 16);
- RS_Error_sum = apb_read_reg(2, 0xbf) & 0x3ffff;
- resync_times = (apb_read_reg(2, 0xc0) >> 20) & 0xff;
- AGC_Gain = apb_read_reg(2, 0x1c) & 0x7ff;
-
- /* Calc */
- SFO_residual = (SFO > 0x7ff) ? (SFO - 0x1000) : SFO;
- FCFO_residual = (FCFO > 0x7fffff) ? (FCFO - 0x1000000) : FCFO;
- FCFO_esti = (FCFO_esti > 0x7ff) ? (FCFO_esti - 0x1000) : FCFO_esti;
- SNR_CP = (SNR) & 0x3ff;
- SNR_TPS = (SNR >> 10) & 0x3ff;
- SNR_SP = (SNR >> 20) & 0x3ff;
- SNR_SP = (SNR_SP > 0x1ff) ? SNR_SP - 0x400 : SNR_SP;
- SNR_TPS = (SNR_TPS > 0x1ff) ? SNR_TPS - 0x400 : SNR_TPS;
- SNR_CP = (SNR_CP > 0x1ff) ? SNR_CP - 0x400 : SNR_CP;
- tmpAGCGain = AGC_Gain;
- timing_adj = (timing_adj > 0xfff) ? timing_adj - 0x2000 : timing_adj;
-
- tps_window = (tps_summary & 0x3);
- tps_guard = ((tps_summary >> 2) & 0x3);
- tps_constell = ((tps_summary >> 13) & 0x3);
- tps_Hier_none = (((tps_summary >> 10) & 0x7) == 0) ? 1 : 0;
- tps_Hier_alpha = (tps_summary >> 11) & 0x3;
- tps_Hier_alpha = (tps_Hier_alpha == 3) ? 4 : tps_Hier_alpha;
- tps_LP_cr = (tps_summary >> 4) & 0x7;
- tps_HP_cr = (tps_summary >> 7) & 0x7;
-
- dprintk("\n\n");
- switch (tps_window) {
- case 0:
- dprintk("2K ");
- break;
- case 1:
- dprintk("8K ");
- break;
- case 2:
- dprintk("4K ");
- break;
- default:
- dprintk("UnWin ");
- break;
- }
- switch (tps_guard) {
- case 0:
- dprintk("1/32 ");
- break;
- case 1:
- dprintk("1/16 ");
- break;
- case 2:
- dprintk("1/ 8 ");
- break;
- case 3:
- dprintk("1/ 4 ");
- break;
- default:
- dprintk("UnGuard ");
- break;
- }
- switch (tps_constell) {
- case 0:
- dprintk(" QPSK ");
- break;
- case 1:
- dprintk("16QAM ");
- break;
- case 2:
- dprintk("64QAM ");
- break;
- default:
- dprintk("UnConstl ");
- break;
- }
- switch (tps_Hier_none) {
- case 0:
- dprintk("Hiera ");
- break;
- case 1:
- dprintk("non-H ");
- break;
- default:
- dprintk("UnHier ");
- break;
- }
- dprintk("%d ", tps_Hier_alpha);
- dprintk("HP ");
- switch (tps_HP_cr) {
- case 0:
- dprintk("1/2 ");
- break;
- case 1:
- dprintk("2/3 ");
- break;
- case 2:
- dprintk("3/4 ");
- break;
- case 3:
- dprintk("5/6 ");
- break;
- case 4:
- dprintk("7/8 ");
- break;
- default:
- dprintk("UnHCr ");
- break;
- }
- dprintk("LP ");
- switch (tps_LP_cr) {
- case 0:
- dprintk("1/2 ");
- break;
- case 1:
- dprintk("2/3 ");
- break;
- case 2:
- dprintk("3/4 ");
- break;
- case 3:
- dprintk("5/6 ");
- break;
- case 4:
- dprintk("7/8 ");
- break;
- default:
- dprintk("UnLCr ");
- break;
- }
- dprintk("\n");
- dprintk("P %4x ", RS_Error_sum);
- dprintk("SP %2d ", SNR_SP);
- dprintk("TPS %2d ", SNR_TPS);
- dprintk("CP %2d ", SNR_CP);
- dprintk("EQS %2x ", EQ_seg_ratio);
- dprintk("RSC %4d ", RS_CorrectNum);
- dprintk("SFO %3d ", SFO_residual);
- dprintk("FCFO %4d ", FCFO_residual);
- dprintk("Vit %3x ", be_vit_error);
- dprintk("Timing %3d ", timing_adj);
- dprintk("SigP %3x ", Signal_power);
- dprintk("AGC %d ", tmpAGCGain);
- dprintk("SigP %d ",
- agc_power_to_dbm(tmpAGCGain, Signal_power, 0, tuner_type));
- dprintk("FEC %x ", FECFlag);
- dprintk("ReSyn %x ", resync_times);
- dprintk("cciB %x", cci_blank);
-
- dprintk("\n");
-
- return 0;
-}
-
-int serial_div(int a, int b)
-{
- int c;
- int cnt;
- int b_buf;
-
- if (b == 0)
- return 0x7fffffff;
- if (a == 0)
- return 0;
-
- c = 0;
- cnt = 0;
-
- a = (a < 0) ? -1 * a : a;
- b = (b < 0) ? -1 * b : b;
-
- b_buf = b;
-
- while (a >= b) {
- b = b << 1;
- cnt++;
- }
- while (b > b_buf) {
- b = b >> 1;
- c = c << 1;
- if (a > b) {
- c = c + 1;
- a = a - b;
- }
- }
- return c;
-}
-
-static int ave0, bit_unit_L;
-
-static int dvbt_ber(void)
-{
- int BER_e_n7 = serial_div(ave0 * 40, bit_unit_L);
-
- return BER_e_n7;
-}
-
-static int demod_monitor_ave(void)
-{
- static int i;
- static int ave[3] = { 0, 0, 0 };
-
- ave[0] = ave[0] + (apb_read_reg(2, 0x0b) & 0x7ff);
- ave[1] = ave[1] + (apb_read_reg(2, 0x0a) & 0x3ff);
- ave[2] = ave[2] + (apb_read_reg(2, 0x0c) & 0x1fff);
-
- i++;
-
- if (i >= 8192) {
- int tps_mode;
- int tps_constell;
- int r_t;
- int mode_L;
- int const_L;
- int SNR_Int;
- int SNR_fra;
-
- if (debug_amldvbt)
- demod_monitor_instant();
-
- r_t = apb_read_reg(2, 0x04);
- tps_mode = r_t & 0x3;
- tps_constell = (r_t >> 13) & 0x3;
- mode_L = (tps_mode == 0) ? 1 : (tps_mode == 1) ? 4 : 2;
- const_L = (tps_constell == 0) ? 2 : (tps_constell == 1) ? 4 : 6;
- bit_unit_L = 189 * mode_L * const_L;
- SNR_Int = (ave[1] >> 16);
- switch ((ave[1] >> 13) & 0x7) {
- case 0:
- SNR_fra = 0;
- break;
- case 1:
- SNR_fra = 125;
- break;
- case 2:
- SNR_fra = 250;
- break;
- case 3:
- SNR_fra = 375;
- break;
- case 4:
- SNR_fra = 500;
- break;
- case 5:
- SNR_fra = 625;
- break;
- case 6:
- SNR_fra = 750;
- break;
- case 7:
- SNR_fra = 875;
- break;
- default:
- SNR_fra = 0;
- break;
- }
-
- ave0 = ave[0];
-
- if (debug_amldvbt)
- dprintk("RSBi %d Thresh %d SNR %d.%d Vit %x\n\n",
- (ave[0] >> 3) * 5, (bit_unit_L * 8), SNR_Int,
- SNR_fra, (ave[2] >> 13));
- i = 0;
- ave[0] = ave[1] = ave[2] = 0;
- }
-
- return i;
-}
-
-int dvbt_switch_to_HP(void)
-{
- apb_write_reg(2, 0x78, apb_read_reg(2, 0x78) & ~(1 << 9));
- return 0;
-}
-
-int dvbt_switch_to_LP(void)
-{
- apb_write_reg(2, 0x78, apb_read_reg(2, 0x78) | (1 << 9));
- return 0;
-}
-
-int dvbt_shutdown(void)
-{
- apb_write_reg(2, 0x02, 0x00800000);
- /* SW reset bit[23] ; write anything to zero */
- apb_write_reg(2, 0x00, 0x00000000);
- return 0;
-}
-
-int dvbt_get_params(struct aml_demod_sta *demod_sta,
- struct aml_demod_i2c *adap, int *code_rate_HP,
- /* high priority stream code rate */
- int *code_rate_LP, /* low priority stream code rate */
- int *constellation, /* modulation type (see above) */
- int *transmission_mode,
- int *guard_interval, int *hierarchy_information)
-{
- int tps_summary, tps_window, tps_guard, tps_constell, tps_Hier_none;
- int tps_Hier_alpha, tps_LP_cr, tps_HP_cr;
-
- tps_summary = apb_read_reg(2, 0x04) & 0x7fff;
- tps_window = (tps_summary & 0x3);
- tps_guard = ((tps_summary >> 2) & 0x3);
- tps_constell = ((tps_summary >> 13) & 0x3);
- tps_Hier_none = (((tps_summary >> 10) & 0x7) == 0) ? 1 : 0;
- tps_Hier_alpha = (tps_summary >> 11) & 0x3;
- tps_Hier_alpha = (tps_Hier_alpha == 3) ? 4 : tps_Hier_alpha;
- tps_LP_cr = (tps_summary >> 4) & 0x7;
- tps_HP_cr = (tps_summary >> 7) & 0x7;
- if (code_rate_HP)
- *code_rate_HP = tps_HP_cr; /*1/2:2/3:3/4:5/6:7/8 */
- if (code_rate_LP)
- *code_rate_LP = tps_LP_cr; /*1/2:2/3:3/4:5/6:7/8 */
- if (constellation)
- *constellation = tps_constell; /*QPSK/16QAM/64QAM */
- if (transmission_mode)
- *transmission_mode = tps_window; /*2K/8K/4K */
- if (guard_interval)
- *guard_interval = tps_guard; /*1/32:1/16:1/8:1/4 */
- if (hierarchy_information)
- *hierarchy_information = tps_Hier_alpha; /*1/2/4 */
- return 0;
-}