861 lines
25 KiB
C
Executable File
861 lines
25 KiB
C
Executable File
/*****************************************************************************
|
|
Copyright(c) 2014 FCI Inc. All Rights Reserved
|
|
|
|
File name : fc8180_bb.c
|
|
|
|
Description : source of baseband driver
|
|
|
|
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
|
|
|
|
History :
|
|
----------------------------------------------------------------------
|
|
*******************************************************************************/
|
|
#include "fci_types.h"
|
|
#include "fci_oal.h"
|
|
#include "fci_hal.h"
|
|
#include "fci_tun.h"
|
|
#include "fc8180_regs.h"
|
|
|
|
extern unsigned int bbm_xtal_freq;
|
|
static void fc8180_clock_mode(HANDLE handle, u32 xtal_freq, u32 band_width)
|
|
{
|
|
switch (xtal_freq) {
|
|
case 16000:
|
|
bbm_write(handle, 0x0016, 0);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x30a4);
|
|
bbm_long_write(handle, 0x103c, 0x1f800000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x10);
|
|
bbm_write(handle, 0x2008, 0x41);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0403010f);
|
|
bbm_long_write(handle, 0x1048, 0x18141901);
|
|
bbm_long_write(handle, 0x104c, 0x4a40260a);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x30a4);
|
|
bbm_long_write(handle, 0x103c, 0x1b000000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xbd);
|
|
bbm_write(handle, 0x2008, 0xa1);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04000e0f);
|
|
bbm_long_write(handle, 0x1048, 0x12151f05);
|
|
bbm_long_write(handle, 0x104c, 0x55452201);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3ae1);
|
|
bbm_long_write(handle, 0x103c, 0x17a00000);
|
|
bbm_write(handle, 0x200a, 0x05);
|
|
bbm_write(handle, 0x2009, 0x6b);
|
|
bbm_write(handle, 0x2008, 0x01);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x01000000);
|
|
bbm_long_write(handle, 0x1044, 0x0f0d0f01);
|
|
bbm_long_write(handle, 0x1048, 0x101d0605);
|
|
bbm_long_write(handle, 0x104c, 0x624b1af6);
|
|
break;
|
|
}
|
|
break;
|
|
case 16384:
|
|
bbm_write(handle, 0x0016, 0);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2f80);
|
|
bbm_long_write(handle, 0x103c, 0x20418937);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0xf7);
|
|
bbm_write(handle, 0x2008, 0xdf);
|
|
|
|
/* xtal_in : 16.384, 24.576 (adc clk = 4.0960) */
|
|
bbm_long_write(handle, 0x1040, 0x07070000);
|
|
bbm_long_write(handle, 0x1044, 0x03030200);
|
|
bbm_long_write(handle, 0x1048, 0x1a14181f);
|
|
bbm_long_write(handle, 0x104c, 0x473e260c);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2f80);
|
|
bbm_long_write(handle, 0x103c, 0x1ba5e354);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xa1);
|
|
bbm_write(handle, 0x2008, 0x2f);
|
|
|
|
/* xtal_in : 16.384, 24.576 (adc clk = 4.0960) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04010f0f);
|
|
bbm_long_write(handle, 0x1048, 0x13151e05);
|
|
bbm_long_write(handle, 0x104c, 0x53442302);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3980);
|
|
bbm_long_write(handle, 0x103c, 0x183126e9);
|
|
bbm_write(handle, 0x200a, 0x05);
|
|
bbm_write(handle, 0x2009, 0x4a);
|
|
bbm_write(handle, 0x2008, 0x7f);
|
|
|
|
/* xtal_in : 16.384, 24.576 (adc clk = 4.0960) */
|
|
bbm_long_write(handle, 0x1040, 0x01000000);
|
|
bbm_long_write(handle, 0x1044, 0x000d0f00);
|
|
bbm_long_write(handle, 0x1048, 0x101c0605);
|
|
bbm_long_write(handle, 0x104c, 0x604a1bf7);
|
|
break;
|
|
}
|
|
break;
|
|
case 18000:
|
|
bbm_write(handle, 0x0016, 0);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2b3c);
|
|
bbm_long_write(handle, 0x103c, 0x23700000);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x9c);
|
|
bbm_write(handle, 0x2008, 0xac);
|
|
|
|
/* xtal_in : 27,18 (adc clk = 4.5000) */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x00030301);
|
|
bbm_long_write(handle, 0x1048, 0x1f16161b);
|
|
bbm_long_write(handle, 0x104c, 0x413a2711);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2b3c);
|
|
bbm_long_write(handle, 0x103c, 0x1e600000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x36);
|
|
bbm_write(handle, 0x2008, 0xc8);
|
|
|
|
/* xtal_in : 27,18 (adc clk = 4.5000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0503000f);
|
|
bbm_long_write(handle, 0x1048, 0x16141b02);
|
|
bbm_long_write(handle, 0x104c, 0x4d422507);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3456);
|
|
bbm_long_write(handle, 0x103c, 0x1a940000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xd0);
|
|
bbm_write(handle, 0x2008, 0xe5);
|
|
|
|
/* xtal_in : 27,18 (adc clk = 4.5000) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x03000e0f);
|
|
bbm_long_write(handle, 0x1048, 0x11160005);
|
|
bbm_long_write(handle, 0x104c, 0x564621ff);
|
|
break;
|
|
}
|
|
break;
|
|
case 19200:
|
|
bbm_write(handle, 0x0016, 0);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2889);
|
|
bbm_long_write(handle, 0x103c, 0x25cccccd);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x62);
|
|
bbm_write(handle, 0x2008, 0xe1);
|
|
|
|
/* xtal_in : 19.2, 38.4 (adc clk = 4.8000) */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x0f020302);
|
|
bbm_long_write(handle, 0x1048, 0x0218161a);
|
|
bbm_long_write(handle, 0x104c, 0x3e382713);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2889);
|
|
bbm_long_write(handle, 0x103c, 0x20666666);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0xf3);
|
|
bbm_write(handle, 0x2008, 0x5c);
|
|
|
|
/* xtal_in : 19.2, 38.4 (adc clk = 4.8000) */
|
|
bbm_long_write(handle, 0x1040, 0x07070000);
|
|
bbm_long_write(handle, 0x1044, 0x03040200);
|
|
bbm_long_write(handle, 0x1048, 0x1a14181f);
|
|
bbm_long_write(handle, 0x104c, 0x473e260c);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3111);
|
|
bbm_long_write(handle, 0x103c, 0x1c59999a);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x83);
|
|
bbm_write(handle, 0x2008, 0xd6);
|
|
|
|
/* xtal_in : 19.2, 38.4 (adc clk = 4.8000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x05010f0e);
|
|
bbm_long_write(handle, 0x1048, 0x13141d04);
|
|
bbm_long_write(handle, 0x104c, 0x51442304);
|
|
break;
|
|
}
|
|
break;
|
|
case 24000:
|
|
bbm_write(handle, 0x0016, 2);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x30a4);
|
|
bbm_long_write(handle, 0x103c, 0x1f800000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x10);
|
|
bbm_write(handle, 0x2008, 0x41);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0403010f);
|
|
bbm_long_write(handle, 0x1048, 0x18141901);
|
|
bbm_long_write(handle, 0x104c, 0x4a40260a);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x30a4);
|
|
bbm_long_write(handle, 0x103c, 0x1b000000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xbd);
|
|
bbm_write(handle, 0x2008, 0xa1);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04000e0f);
|
|
bbm_long_write(handle, 0x1048, 0x12151f05);
|
|
bbm_long_write(handle, 0x104c, 0x55452201);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3ae1);
|
|
bbm_long_write(handle, 0x103c, 0x17a00000);
|
|
bbm_write(handle, 0x200a, 0x05);
|
|
bbm_write(handle, 0x2009, 0x6b);
|
|
bbm_write(handle, 0x2008, 0x01);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x01000000);
|
|
bbm_long_write(handle, 0x1044, 0x0f0d0f01);
|
|
bbm_long_write(handle, 0x1048, 0x101d0605);
|
|
bbm_long_write(handle, 0x104c, 0x624b1af6);
|
|
break;
|
|
}
|
|
break;
|
|
case 24576:
|
|
bbm_write(handle, 0x0016, 2);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2f80);
|
|
bbm_long_write(handle, 0x103c, 0x20418937);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0xf7);
|
|
bbm_write(handle, 0x2008, 0xdf);
|
|
|
|
/* xtal_in : 16.384, 24.576 (adc clk = 4.0960) */
|
|
bbm_long_write(handle, 0x1040, 0x07070000);
|
|
bbm_long_write(handle, 0x1044, 0x03030200);
|
|
bbm_long_write(handle, 0x1048, 0x1a14181f);
|
|
bbm_long_write(handle, 0x104c, 0x473e260c);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2f80);
|
|
bbm_long_write(handle, 0x103c, 0x1ba5e354);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xa1);
|
|
bbm_write(handle, 0x2008, 0x2f);
|
|
|
|
/* xtal_in : 16.384, 24.576 (adc clk = 4.0960) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04010f0f);
|
|
bbm_long_write(handle, 0x1048, 0x13151e05);
|
|
bbm_long_write(handle, 0x104c, 0x53442302);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3980);
|
|
bbm_long_write(handle, 0x103c, 0x183126e9);
|
|
bbm_write(handle, 0x200a, 0x05);
|
|
bbm_write(handle, 0x2009, 0x4a);
|
|
bbm_write(handle, 0x2008, 0x7f);
|
|
|
|
/* xtal_in : 16.384, 24.576 (adc clk = 4.0960) */
|
|
bbm_long_write(handle, 0x1040, 0x01000000);
|
|
bbm_long_write(handle, 0x1044, 0x000d0f00);
|
|
bbm_long_write(handle, 0x1048, 0x101c0605);
|
|
bbm_long_write(handle, 0x104c, 0x604a1bf7);
|
|
break;
|
|
}
|
|
break;
|
|
case 26000:
|
|
bbm_write(handle, 0x0016, 2);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2ce6);
|
|
bbm_long_write(handle, 0x103c, 0x221fffd4);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0xc0);
|
|
bbm_write(handle, 0x2008, 0x3c);
|
|
|
|
/* xtal_in : 26 (adc clk = 4.3333) */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x01030301);
|
|
bbm_long_write(handle, 0x1048, 0x1e16171c);
|
|
bbm_long_write(handle, 0x104c, 0x433b2710);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2ce6);
|
|
bbm_long_write(handle, 0x103c, 0x1d3fffda);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x60);
|
|
bbm_write(handle, 0x2008, 0x46);
|
|
|
|
/* xtal_in : 26 (adc clk = 4.3333) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x05020f0e);
|
|
bbm_long_write(handle, 0x1048, 0x14141c04);
|
|
bbm_long_write(handle, 0x104c, 0x50432405);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x365a);
|
|
bbm_long_write(handle, 0x103c, 0x1997ffdf);
|
|
bbm_write(handle, 0x200a, 0x05);
|
|
bbm_write(handle, 0x2009, 0x00);
|
|
bbm_write(handle, 0x2008, 0x50);
|
|
|
|
/* xtal_in : 26 (adc clk = 4.3333) */
|
|
bbm_long_write(handle, 0x1040, 0x01000000);
|
|
bbm_long_write(handle, 0x1044, 0x020e0e00);
|
|
bbm_long_write(handle, 0x1048, 0x10190406);
|
|
bbm_long_write(handle, 0x104c, 0x5b481efb);
|
|
break;
|
|
}
|
|
break;
|
|
case 27000:
|
|
bbm_write(handle, 0x0016, 2);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2b3c);
|
|
bbm_long_write(handle, 0x103c, 0x23700000);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x9c);
|
|
bbm_write(handle, 0x2008, 0xac);
|
|
|
|
/* xtal_in : 27,18 (adc clk = 4.5000) */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x00030301);
|
|
bbm_long_write(handle, 0x1048, 0x1f16161b);
|
|
bbm_long_write(handle, 0x104c, 0x413a2711);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2b3c);
|
|
bbm_long_write(handle, 0x103c, 0x1e600000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x36);
|
|
bbm_write(handle, 0x2008, 0xc8);
|
|
|
|
/* xtal_in : 27,18 (adc clk = 4.5000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0503000f);
|
|
bbm_long_write(handle, 0x1048, 0x16141b02);
|
|
bbm_long_write(handle, 0x104c, 0x4d422507);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3456);
|
|
bbm_long_write(handle, 0x103c, 0x1a940000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xd0);
|
|
bbm_write(handle, 0x2008, 0xe5);
|
|
|
|
/* xtal_in : 27,18 (adc clk = 4.5000) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x03000e0f);
|
|
bbm_long_write(handle, 0x1048, 0x11160005);
|
|
bbm_long_write(handle, 0x104c, 0x564621ff);
|
|
break;
|
|
}
|
|
break;
|
|
case 27120:
|
|
bbm_write(handle, 0x0016, 2);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2b0b);
|
|
bbm_long_write(handle, 0x103c, 0x239851ec);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x98);
|
|
bbm_write(handle, 0x2008, 0x94);
|
|
|
|
/* xtal_in : 27.12 (adc clk = 4.5200 */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x00030301);
|
|
bbm_long_write(handle, 0x1048, 0x1f16161b);
|
|
bbm_long_write(handle, 0x104c, 0x413a2711);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2b0b);
|
|
bbm_long_write(handle, 0x103c, 0x1e828f5c);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x32);
|
|
bbm_write(handle, 0x2008, 0x02);
|
|
|
|
/* xtal_in : 27.12 (adc clk = 4.5200) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0503000f);
|
|
bbm_long_write(handle, 0x1048, 0x16141b02);
|
|
bbm_long_write(handle, 0x104c, 0x4d412507);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x341b);
|
|
bbm_long_write(handle, 0x103c, 0x1ab23d71);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xcb);
|
|
bbm_write(handle, 0x2008, 0x70);
|
|
|
|
/* xtal_in : 27.12 (adc clk = 4.5200) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04000e0f);
|
|
bbm_long_write(handle, 0x1048, 0x12160005);
|
|
bbm_long_write(handle, 0x104c, 0x56462100);
|
|
break;
|
|
}
|
|
break;
|
|
case 32000:
|
|
/* Default Clock */
|
|
bbm_write(handle, 0x0016, 1);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
/* Default Band-width */
|
|
bbm_word_write(handle, 0x1032, 0x30a4);
|
|
bbm_long_write(handle, 0x103c, 0x1f800000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x10);
|
|
bbm_write(handle, 0x2008, 0x41);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0403010f);
|
|
bbm_long_write(handle, 0x1048, 0x18141901);
|
|
bbm_long_write(handle, 0x104c, 0x4a40260a);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x30a4);
|
|
bbm_long_write(handle, 0x103c, 0x1b000000);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xbd);
|
|
bbm_write(handle, 0x2008, 0xa1);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04000e0f);
|
|
bbm_long_write(handle, 0x1048, 0x12151f05);
|
|
bbm_long_write(handle, 0x104c, 0x55452201);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3ae1);
|
|
bbm_long_write(handle, 0x103c, 0x17a00000);
|
|
bbm_write(handle, 0x200a, 0x05);
|
|
bbm_write(handle, 0x2009, 0x6b);
|
|
bbm_write(handle, 0x2008, 0x01);
|
|
|
|
/* xtal_in : 24,16,32 (adc clk = 4.0000) */
|
|
bbm_long_write(handle, 0x1040, 0x01000000);
|
|
bbm_long_write(handle, 0x1044, 0x0f0d0f01);
|
|
bbm_long_write(handle, 0x1048, 0x101d0605);
|
|
bbm_long_write(handle, 0x104c, 0x624b1af6);
|
|
break;
|
|
}
|
|
break;
|
|
case 37200:
|
|
bbm_write(handle, 0x0016, 1);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x29d7);
|
|
bbm_long_write(handle, 0x103c, 0x249e6666);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x7e);
|
|
bbm_write(handle, 0x2008, 0xd8);
|
|
|
|
/* xtal_in : 37.2 (adc clk = 4.6500 */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x00030302);
|
|
bbm_long_write(handle, 0x1048, 0x0117161a);
|
|
bbm_long_write(handle, 0x104c, 0x3f392712);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x29d7);
|
|
bbm_long_write(handle, 0x103c, 0x1f633333);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x13);
|
|
bbm_write(handle, 0x2008, 0xfc);
|
|
|
|
/* xtal_in : 37.2 (adc clk = 4.6500) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0403010f);
|
|
bbm_long_write(handle, 0x1048, 0x18141900);
|
|
bbm_long_write(handle, 0x104c, 0x4a3f260a);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x32a6);
|
|
bbm_long_write(handle, 0x103c, 0x1b76cccd);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xa9);
|
|
bbm_write(handle, 0x2008, 0x1f);
|
|
|
|
/* xtal_in : 37.2 (adc clk = 4.6500) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04010f0f);
|
|
bbm_long_write(handle, 0x1048, 0x13151e05);
|
|
bbm_long_write(handle, 0x104c, 0x53442302);
|
|
break;
|
|
}
|
|
break;
|
|
case 37400:
|
|
bbm_write(handle, 0x0016, 1);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x299e);
|
|
bbm_long_write(handle, 0x103c, 0x24d0cccd);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x7a);
|
|
bbm_write(handle, 0x2008, 0x0f);
|
|
|
|
/* xtal_in : 37.4 (adc clk = 4.6750) */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x00030302);
|
|
bbm_long_write(handle, 0x1048, 0x0117161a);
|
|
bbm_long_write(handle, 0x104c, 0x3f392712);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x299e);
|
|
bbm_long_write(handle, 0x103c, 0x1f8e6666);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x0e);
|
|
bbm_write(handle, 0x2008, 0x66);
|
|
|
|
/* xtal_in : 37.4 (adc clk = 4.6750) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x0403010f);
|
|
bbm_long_write(handle, 0x1048, 0x18141900);
|
|
bbm_long_write(handle, 0x104c, 0x4a3f260a);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3261);
|
|
bbm_long_write(handle, 0x103c, 0x1b9c999a);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0xa2);
|
|
bbm_write(handle, 0x2008, 0xbe);
|
|
|
|
/* xtal_in : 37.4 (adc clk = 4.6750) */
|
|
bbm_long_write(handle, 0x1040, 0x00000000);
|
|
bbm_long_write(handle, 0x1044, 0x04010f0f);
|
|
bbm_long_write(handle, 0x1048, 0x13151e05);
|
|
bbm_long_write(handle, 0x104c, 0x53442302);
|
|
break;
|
|
}
|
|
break;
|
|
case 38400:
|
|
bbm_write(handle, 0x0016, 1);
|
|
|
|
switch (band_width) {
|
|
case 6:
|
|
bbm_word_write(handle, 0x1032, 0x2889);
|
|
bbm_long_write(handle, 0x103c, 0x25cccccd);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0x62);
|
|
bbm_write(handle, 0x2008, 0xe1);
|
|
|
|
/* xtal_in : 19.2, 38.4 (adc clk = 4.8000) */
|
|
bbm_long_write(handle, 0x1040, 0x00070700);
|
|
bbm_long_write(handle, 0x1044, 0x0f020302);
|
|
bbm_long_write(handle, 0x1048, 0x0218161a);
|
|
bbm_long_write(handle, 0x104c, 0x3e382713);
|
|
break;
|
|
case 7:
|
|
bbm_word_write(handle, 0x1032, 0x2889);
|
|
bbm_long_write(handle, 0x103c, 0x20666666);
|
|
bbm_write(handle, 0x200a, 0x03);
|
|
bbm_write(handle, 0x2009, 0xf3);
|
|
bbm_write(handle, 0x2008, 0x5c);
|
|
|
|
/* xtal_in : 19.2, 38.4 (adc clk = 4.8000) */
|
|
bbm_long_write(handle, 0x1040, 0x07070000);
|
|
bbm_long_write(handle, 0x1044, 0x03040200);
|
|
bbm_long_write(handle, 0x1048, 0x1a14181f);
|
|
bbm_long_write(handle, 0x104c, 0x473e260c);
|
|
break;
|
|
case 8:
|
|
bbm_word_write(handle, 0x1032, 0x3111);
|
|
bbm_long_write(handle, 0x103c, 0x1c59999a);
|
|
bbm_write(handle, 0x200a, 0x04);
|
|
bbm_write(handle, 0x2009, 0x83);
|
|
bbm_write(handle, 0x2008, 0xd6);
|
|
|
|
/* xtal_in : 19.2, 38.4 (adc clk = 4.8000) */
|
|
bbm_long_write(handle, 0x1040, 0x07000000);
|
|
bbm_long_write(handle, 0x1044, 0x05010f0e);
|
|
bbm_long_write(handle, 0x1048, 0x13141d04);
|
|
bbm_long_write(handle, 0x104c, 0x51442304);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
s32 fc8180_reset(HANDLE handle)
|
|
{
|
|
bbm_write(handle, BBM_SW_RESET, 0x7f);
|
|
bbm_write(handle, BBM_SW_RESET, 0xff);
|
|
|
|
return BBM_OK;
|
|
}
|
|
|
|
s32 fc8180_probe(HANDLE handle)
|
|
{
|
|
u16 ver;
|
|
bbm_word_read(handle, BBM_CHIP_ID_L, &ver);
|
|
print_log(0," %s ver = %x\n", __func__, ver);
|
|
return (ver == 0x8180) ? BBM_OK : BBM_NOK;
|
|
}
|
|
|
|
s32 fc8180_init(HANDLE handle)
|
|
{
|
|
fc8180_reset(handle);
|
|
fc8180_clock_mode(handle, bbm_xtal_freq, BBM_BAND_WIDTH);
|
|
|
|
bbm_write(handle, 0x1000, 0x27);
|
|
bbm_write(handle, 0x1004, 0x4d);
|
|
bbm_write(handle, 0x1064, 0x04);
|
|
bbm_write(handle, 0x1065, 0xe0);
|
|
bbm_write(handle, 0x1069, 0x09);
|
|
bbm_write(handle, 0x1075, 0x00);
|
|
bbm_write(handle, 0x1083, 0x14);
|
|
bbm_write(handle, 0x1084, 0x0f);
|
|
bbm_write(handle, 0x2004, 0x41);
|
|
bbm_write(handle, 0x2060, 0x54);
|
|
bbm_write(handle, 0x5010, 0x00);
|
|
#ifdef BBM_EXT_LNA
|
|
bbm_write(handle, 0x9001, 0x01);
|
|
#endif
|
|
|
|
bbm_write(handle, 0x00b0, 0x03);
|
|
bbm_write(handle, 0x00b4, 0x00);
|
|
bbm_write(handle, 0x00b5, 0x00);
|
|
bbm_write(handle, 0x00b6, 0x04);
|
|
bbm_write(handle, 0x00b9, 0x00);
|
|
bbm_write(handle, 0x00ba, 0x01);
|
|
|
|
bbm_word_write(handle, BBM_BUF_TS_START, TS_BUF_START);
|
|
bbm_word_write(handle, BBM_BUF_TS_END, TS_BUF_END);
|
|
bbm_word_write(handle, BBM_BUF_TS_THR, TS_BUF_THR);
|
|
|
|
bbm_word_write(handle, BBM_BUF_AC_START, AC_BUF_START);
|
|
bbm_word_write(handle, BBM_BUF_AC_END, AC_BUF_END);
|
|
bbm_word_write(handle, BBM_BUF_AC_THR, AC_BUF_THR);
|
|
|
|
#ifdef BBM_I2C_TSIF
|
|
#ifdef BBM_TSIF_LOW_ACTIVE
|
|
bbm_write(handle, BBM_TS_CTRL, 0x00);
|
|
#else
|
|
bbm_write(handle, BBM_TS_CTRL, 0x0e);
|
|
#endif
|
|
|
|
#ifdef BBM_TS_204
|
|
bbm_write(handle, BBM_TS_SEL, 0xc0);
|
|
#else
|
|
bbm_write(handle, BBM_TS_SEL, 0x80);
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef BBM_FAIL_FRAME
|
|
bbm_write(handle, BBM_RS_FAIL_TX, 0x02);
|
|
#endif
|
|
|
|
#ifdef BBM_INT_LOW_ACTIVE
|
|
bbm_write(handle, BBM_INT_POLAR_SEL, 0x00);
|
|
#endif
|
|
|
|
#ifdef BBM_I2C_SPI
|
|
bbm_write(handle, BBM_BUF_SPIOUT, 0x10 | (BBM_I2C_SPI_PHA << 1) |
|
|
(BBM_I2C_SPI_POL));
|
|
#endif
|
|
|
|
bbm_write(handle, BBM_INT_AUTO_CLEAR, 0x00);
|
|
bbm_write(handle, BBM_BUF_ENABLE, 0x01);
|
|
bbm_write(handle, BBM_BUF_INT, 0x01);
|
|
bbm_write(handle, BBM_INT_MASK, 0x07);
|
|
bbm_write(handle, BBM_INT_STS_EN, 0x01);
|
|
|
|
return BBM_OK;
|
|
}
|
|
|
|
s32 fc8180_deinit(HANDLE handle)
|
|
{
|
|
bbm_write(handle, BBM_SW_RESET, 0x00);
|
|
|
|
return BBM_OK;
|
|
}
|
|
|
|
s32 fc8180_scan_status(HANDLE handle)
|
|
{
|
|
u32 ifagc_timeout = 7;
|
|
u32 ofdm_timeout = 16;
|
|
u32 ffs_lock_timeout = 10;
|
|
u32 dagc_timeout = 100; /* always done */
|
|
u32 cfs_timeout = 12;
|
|
u32 tmcc_timeout = 105;
|
|
u32 ts_err_free_timeout = 0;
|
|
/*s32 rssi;*/
|
|
u8 data, data1;
|
|
u8 lay0_mod/*, lay0_cr*/;
|
|
s32 i;
|
|
|
|
for (i = 0; i < ifagc_timeout; i++) {
|
|
bbm_read(handle, 0x3025, &data);
|
|
|
|
if (data & 0x01)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == ifagc_timeout) {
|
|
print_log(0, "ifagc_timeout returning error\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
/*tuner_get_rssi(handle, &rssi);
|
|
|
|
if (rssi < -107)
|
|
return BBM_NOK;*/
|
|
|
|
for (; i < ofdm_timeout; i++) {
|
|
bbm_read(handle, 0x3025, &data);
|
|
|
|
if (data & 0x08)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == ofdm_timeout) {
|
|
print_log(0, "ISDBT ofdm_timeout\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
if (0 == (data & 0x04))
|
|
return BBM_NOK;
|
|
|
|
for (; i < ffs_lock_timeout; i++) {
|
|
bbm_read(handle, 0x3026, &data);
|
|
|
|
if (data & 0x10)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == ffs_lock_timeout) {
|
|
print_log(0, "ISDBT ffs_lock_timeout\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
for (i = 0; i < dagc_timeout; i++) {
|
|
bbm_read(handle, 0x3026, &data);
|
|
if (data & 0x01)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == dagc_timeout) {
|
|
print_log(0, "ISDBT dagc_timeout\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
for (i = 0; i < cfs_timeout; i++) {
|
|
bbm_read(handle, 0x3025, &data);
|
|
if (data & 0x40)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == cfs_timeout) {
|
|
print_log(0, "ISDBT cfs_timeout\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
bbm_read(handle, 0x2023, &data1);
|
|
if (data1 & 1)
|
|
return BBM_NOK;
|
|
|
|
for (i = 0; i < tmcc_timeout; i++) {
|
|
bbm_read(handle, 0x3026, &data);
|
|
if (data & 0x02)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == tmcc_timeout) {
|
|
print_log(0, "ISDBT cfs_timeout\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
bbm_read(handle, 0x4113, &data);
|
|
bbm_read(handle, 0x4114, &data1);
|
|
|
|
if (((data >> 3) & 0x1) == 0)
|
|
return BBM_NOK;
|
|
|
|
lay0_mod = ((data & 0x10) >> 2) | ((data & 0x20) >> 4) |
|
|
((data & 0x40) >> 6);
|
|
|
|
/*lay0_cr = ((data & 0x80) >> 5) | ((data1 & 0x01) << 1) |
|
|
((data1 & 0x02) >> 1);*/
|
|
|
|
if (!((lay0_mod == 1) || (lay0_mod == 2)))
|
|
return BBM_NOK;
|
|
|
|
if (((0x70 & data) == 0x40) && ((0x1c & data1) == 0x18))
|
|
ts_err_free_timeout = 80;
|
|
else
|
|
ts_err_free_timeout = 105;
|
|
|
|
for (i = 0; i < ts_err_free_timeout; i++) {
|
|
bbm_read(handle, 0x5053, &data);
|
|
if (data & 0x01)
|
|
break;
|
|
|
|
ms_wait(10);
|
|
}
|
|
|
|
if (i == ts_err_free_timeout) {
|
|
print_log(0, "ISDBT ts_err_free_timeout\n");
|
|
return BBM_NOK;
|
|
}
|
|
|
|
return BBM_OK;
|
|
}
|
|
|