Merge "[Bugfix][API-673][Sms]read sms content gt 20 will error" into MR3.0
diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.service b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.service
index 7581782..eb394c8 100755
--- a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.service
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.service
@@ -3,8 +3,8 @@
 
 [Service]
 Type=forking
-ExecStart=/bin/sh /etc/wg870_drv_insmod.sh
-ExecStopPost=/etc/wg870_drv_insmod.sh teardown
+ExecStart=/bin/sh /etc/wg870/wg870_drv_insmod.sh
+ExecStopPost=/etc/wg870/wg870_drv_insmod.sh teardown
 
 [Install]
 WantedBy=multi-user.target
diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.sh b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.sh
index f163a9e..3cb113d 100755
--- a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.sh
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wg870_drv_insmod.sh
@@ -9,7 +9,7 @@
 fi
 
 echo insmod wg870 driver
-insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko firmware_path=/etc/config_pcie.trxse nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt clm_path=/etc/0926.clm_blob || exit 1
+insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko firmware_path=/etc/wg870/config_pcie.trxse nvram_path=/etc/wg870/cyw989570fcref_rev1.58.txt clm_path=/etc/wg870/0926.clm_blob || exit 1
 wpa_supplicant -g/var/run/wpa_wlan0_cmd -dd -t -u &
 
 exit 0
diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse
index 87ae8d9..803b429 100755
--- a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/config_pcie.trxse
Binary files differ
diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/cyw989570fcref_rev1.58.txt b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/cyw989570fcref_rev1.58.txt
new file mode 100755
index 0000000..8203d9c
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/files/wifi/wg870/cyw989570fcref_rev1.58.txt
@@ -0,0 +1,567 @@
+#

+NVRAMRev=$Rev$

+sromrev=11

+boardrev=0x1158

+boardtype=0x0860

+boardflags=0x00400001

+boardflags2=0x00800000

+boardflags3=0x40002100

+#boardnum=57410

+macaddr=00:90:4c:2f:70:01

+

+#Regulatory specific

+ccode=0

+regrev=0

+

+# Board specific

+vendid=0x12be

+devid=0xbd31

+manfid=0x2d0

+antswitch=0

+pdgain5g=0

+pdgain2g=0

+aa2g=3

+aa5g=3

+agbg0=2

+agbg1=2

+aga0=2

+aga1=2

+extpagain5g=2

+extpagain2g=2

+rxgains2gelnagaina0=0

+rxgains2gtrisoa0=13

+rxgains2gtrelnabypa0=0

+rxgains5gelnagaina0=0

+rxgains5gtrisoa0=7

+rxgains5gtrelnabypa0=0

+rxgains5gmelnagaina0=0

+rxgains5gmtrisoa0=7

+rxgains5gmtrelnabypa0=0

+rxgains5ghelnagaina0=0

+rxgains5ghtrisoa0=7

+rxgains5ghtrelnabypa0=0

+rxgains2gelnagaina1=0

+rxgains2gtrisoa1=15

+rxgains2gtrelnabypa1=0

+rxgains5gelnagaina1=0

+rxgains5gtrisoa1=7

+rxgains5gtrelnabypa1=0

+rxgains5gmelnagaina1=0

+rxgains5gmtrisoa1=7

+rxgains5gmtrelnabypa1=0

+rxgains5ghelnagaina1=0

+rxgains5ghtrisoa1=7

+rxgains5ghtrelnabypa1=0

+

+#RFLDO3P3 war

+rfldo3p3_cap_war=1

+

+#TCXO war

+tcxo_war=0x1

+

+#RSSI related

+rssicorrnorm_c0=0,0

+rssicorrnorm_c1=1,0

+rssicorrnorm5g_c0=14,17,20,10,12,13,8,16,14,6,9,11

+rssicorrnorm5g_c1=13,17,19,10,15,13,10,16,14,7,10,12

+low_pwr_rssi_thresh_qdBm_5g=-334

+low_pwr_rssi_bias_5g_c0=0,-3,-6,0,-3,-6,0,-3,-7,0,-4,-7

+low_pwr_rssi_bias_5g_c1=0,-3,-7,0,-2,-7,0,-2,-6,0,-3,-7

+rssicorrnorm6g_c0=12,11,12,12,12,14,3,2,1,8,7,8

+rssicorrnorm6g_c1=12,10,14,10,10,14,0,0,-2,6,0,6

+rssi_cal_freq_grp_2g= 0x08,0x01,0x91,0x2a,0x23,0xb3,0xc4

+rssi_delta_5gl=-6 4 -8 -8 -6 4 -8 -8 -6 4 -8 -8 -3 6 -3 -4 -3 6 -3 -4 -3 6 -3 -4

+rssi_delta_5gml=-1 3 -1 -3 -1 3 -1 -3 -1 3 -1 -3 -1 2 0 -2 -1 2 0 -2 -1 2 0 -2

+rssi_delta_5gmu=0 3 -1 -2 0 3 -1 -2 0 3 -1 -2 0 2 0 -2 0 2 0 -2 0 2 0 -2

+rssi_delta_5gh=2 4 2 -1 2 4 2 -1 2 4 2 -1 0 0 2 -2 0 0 2 -2 0 0 2 -2

+rssi_delta_6gunii5=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

+rssi_delta_6gunii6=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

+rssi_delta_6gunii7=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

+rssi_delta_6gunii8=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

+rssi_cal_rev=1

+rxgaincal_rssical=1

+gain_cal_temp=25

+rxgain_tempcoeff2g_sub=40,40,40,40,40,40,40,40,40,40

+rxgain_tempcoeff5gl=18,18

+rxgain_tempcoeff5gml=22,22

+rxgain_tempcoeff5gmu=22,22

+rxgain_tempcoeff5gh=20,20

+rxgain_tempcoeff2g_sub_elnaoff=40,40,40,40,40,40,40,40,40,40

+rxgain_tempcoeff5gl_elnaoff=18,18

+rxgain_tempcoeff5gml_elnaoff=22,22

+rxgain_tempcoeff5gmu_elnaoff=22,22

+rxgain_tempcoeff5gh_elnaoff=20,20

+rxgain_tempcoeff6g_unii5=20,20

+rxgain_tempcoeff6g_unii6=20,20

+rxgain_tempcoeff6g_unii7=20,20

+rxgain_tempcoeff6g_unii8=20,20

+rssi_cal_freq_grp_2g= 0x08,0x01,0x91,0x2a,0x23,0xb3,0xc4

+rssi_delta_2gb0=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

+rssi_delta_2gb1=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

+rssi_delta_2gb2=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

+rssi_delta_2gb3=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

+rssi_delta_2gb4=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

+

+#Two range TSSI

+tworangetssi2g=0

+tworangetssi5g=0

+# NOTE :================================================================================

+# To run TPC with Two Range TSSI ,set  tworangetssi2g = 1 and lowpowerrange2g = 0

+# To run TPC with Single Range TSSI, set tworangetssi2g = 0

+# To run TPC please READ instructions near pa2ga0 and pa2ga1 as well

+# To generate PA params for Low Range set  tworangetssi2g = 0 and lowpowerrange2g to 1

+# To generate PA params for High Range set  tworangetssi2g = 1 and lowpowerrange2g to 1

+# ======================================================================================

+#lowpowerrange2g=0

+#lowpowerrange5g=0

+

+#Related to FW Download. Host may use this

+nocrc=1

+#FIXME:4369 otpimagesize? Check with Rama

+otpimagesize=502

+

+xtalfreq=37400

+

+txchain=3

+rxchain=3

+

+cckdigfilttype=2

+

+#bit mask for slice capability bit 0:2G bit 1:5G

+bandcap=2

+

+

+#FDSS Related

+fdss_level_5g=9,9

+fdss_interp_en=0

+fdss_level_2g=4,4

+#FIXME: fdss level for 6G made same as 5G for now

+fdss_level_6g=9,9

+

+#LPB related

+leg_preamble_boost=12,12,0

+lpb_comp=10

+

+#PAPRR Related

+paprdis=0

+paprrmcsgain2g=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma2g=600,450,600,650,700,-1,-1,-1,-1,-1,-1,-1

+paprrmcsgain5g20=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma5g20=700,450,600,650,700,-1,-1,-1,-1,-1,-1,-1

+paprrmcsgain5g40=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma5g40=1200,450,550,600,700,-1,-1,-1,-1,-1,-1,-1

+paprrmcsgain5g80=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma5g80=1200,500,550,650,650,-1,-1,-1,-1,-1,-1,-1

+#PAPR params for 6G

+#FIXME: papr params 6G made same as 5G for now

+paprrmcsgain6g20=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma6g20=400,400,550,650,700,-1,-1,-1,-1,-1,-1,-1

+paprrmcsgain6g40=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma6g40=450,450,550,600,700,-1,-1,-1,-1,-1,-1,-1

+paprrmcsgain6g80=128,128,128,128,128,0,0,0,0,0,0,0

+paprrmcsgamma6g80=500,500,550,650,650,-1,-1,-1,-1,-1,-1,-1

+

+#Tempsense Related

+tempthresh=255

+tempoffset=255

+rawtempsense=0x1ff

+phycal_tempdelta=15

+temps_period=15

+temps_hysteresis=15

+

+#------------- TSSI Related -------------

+tssipos2g=1

+tssipos5g=1

+#FIXME: AvVmid for UNII-7/8 made same as UNII-6 for now

+AvVmid_c0=6,85,4,105,5,95,5,95,5,95,5,95,5,95,5,95,5,95

+AvVmid_c1=6,75,5,90,5,90,5,95,4,105,4,105,4,105,4,105,4,105

+

+#limit Tx gain index

+txidxcap2g=10

+txidxcap5g=10

+txidxcap6g=0

+

+# SINGLE RANGE TPC/TSSI

+#2G OFDM

+#pa2ga0=-106,6424,-703

+pa2ga0=-129,5802,-662

+#pa2ga1=-120,6301,-702

+pa2ga1=-120,5960,-669

+#2G CCK

+pa2ga2=-100,6347,-701

+pa2ga3=-112,6411,-721

+#5G High pwr

+pa5ga0=-200,6256,-774,-177,6168,-750,-184,6098,-747,-171,5929,-707

+pa5ga1=-186,6086,-743,-162,6493,-771,-184,6140,-756,-188,5943,-734

+#5G Low pwr

+pa5ga2=-239,4574,-587,-233,5017,-643,-225,5518,-705,-231,5352,-684

+pa5ga3=-229,5269,-675,-239,4366,-560,-234,4693,-603,-225,5414,-693

+#PA Params 6G UNII-5,6,7,8

+pa6ga0=-150,6336,-746,-119,6732,-773,-166,6212,-767,-154,5988,-742

+pa6ga1=-170,6398,-786,-140,6587,-774,-193,5815,-742,-122,6358,-755

+

+

+# Max power and offsets

+maxp2ga0=78

+maxp2ga1=78

+maxp5ga0=72,72,72,72

+maxp5ga1=72,72,72,72

+#Max Power on 6G UNII-5/6 and UNII-7/8

+maxp6ga0=66,62

+maxp6ga1=66,62

+subband5gver=0x4

+paparambwver=3

+cckpwroffset0=1

+cckpwroffset1=2

+

+pdoffset20ma0=0xf010

+pdoffset20ma1=0x1200

+pdoffset40ma0=0x0120

+pdoffset80ma0=0xf010

+pdoffset40ma1=0x2210

+pdoffset80ma1=0x2200

+pdoffset6g20ma0=0x10ff

+pdoffset6g20ma0_group1=0xed40

+pdoffset6g20ma1=0x3201

+pdoffset6g20ma1_group1=0xfe30

+pdoffset6g40ma0=0x35e2

+pdoffset6g40ma0_group1=0x1272

+pdoffset6g40ma1=0x4335

+pdoffset6g40ma1_group1=0x2363

+pdoffset6g80ma0=0x4112

+pdoffset6g80ma0_group1=0x1023

+pdoffset6g80ma1=0x5333

+pdoffset6g80ma1_group1=0x1112

+

+cckbw202gpo=0

+cckbw20ul2gpo=0

+mcsbw202gpo=0x86622222

+mcsbw402gpo=0x86422222

+dot11agofdmhrbw202gpo=0x4444

+ofdmlrbw202gpo=0x2222

+mcsbw205glpo=0x64222222

+mcsbw405glpo=0x65322222

+mcsbw805glpo=0x76322222

+mcsbw1605glpo=0

+mcsbw205gmpo=0x64222222

+mcsbw405gmpo=0x65322222

+mcsbw805gmpo=0x76322222

+mcsbw1605gmpo=0

+mcsbw205ghpo=0x64222222

+mcsbw405ghpo=0x65322222

+mcsbw805ghpo=0x76322222

+# ppr offsets for UNII-5/6 of 6GHz band

+mcsbw206glpo=0x87522222

+mcsbw406glpo=0x87522222

+mcsbw806glpo=0x87522222

+# ppr offsets for UNII-7/8 of 6GHz band

+mcsbw206gmpo=0x87522222

+mcsbw406gmpo=0x98622222

+mcsbw806gmpo=0x98622222

+

+powoffs2gtna0=-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3

+powoffs2gtna1=-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2

+mcs1024qam2gpo=0xCCCC

+mcs1024qam5glpo=0xBABAA9

+mcs1024qam5gmpo=0xBABAA9

+mcs1024qam5ghpo=0xBABAA9

+mcs1024qam5gx1po=0xBABAA9

+mcs1024qam5gx2po=0xBABAA9

+mcs8poexp=0

+mcs9poexp=0

+mcs10poexp=0

+# 1024QAM rates' offset for 6GHz UNII-5/6

+mcs1024qam6glpo=0xAABBBB

+# 1024QAM rates' offset for 6GHz UNII-7/8

+mcs1024qam6gmpo=0xDDCCDD

+

+#UL-OFDMA PPR's accros RU's

+#currently programmed same PPR accross RU's

+#across QAM's the PPR are same b/w SU and RU

+#each RU PPR is grouped with 5 bits

+ruppr2g20bpska0=0x0

+ruppr2g20bpska1=0x0

+ruppr2g20qpska0=0x10842

+ruppr2g20qpska1=0x10842

+ruppr2g20qam16a0=0x21084

+ruppr2g20qam16a1=0x21084

+ruppr2g20qam64a0=0x318c6

+ruppr2g20qam64a1=0x318c6

+ruppr2g20qam256a0=0x6318c

+ruppr2g20qam256a1=0x6318c

+ruppr2g20qam1024a0=0x739ce

+ruppr2g20qam1024a1=0x739ce

+ruppr5g20bpska0=0x0

+ruppr5g20bpska1=0x0

+ruppr5g20qpska0=0x0

+ruppr5g20qpska1=0x0

+ruppr5g20qam16a0=0x10842

+ruppr5g20qam16a1=0x10842

+ruppr5g20qam64a0=0x21084

+ruppr5g20qam64a1=0x21084

+ruppr5g20qam256a0=0x42108

+ruppr5g20qam256a1=0x42108

+ruppr5g20qam1024a0=0x5294a

+ruppr5g20qam1024a1=0x5294a

+ruppr5g40bpska0=0x0

+ruppr5g40bpska1=0x0

+ruppr5g40qpska0=0x0

+ruppr5g40qpska1=0x0

+ruppr5g40qam16a0=0x210842

+ruppr5g40qam16a1=0x210842

+ruppr5g40qam64a0=0x421084

+ruppr5g40qam64a1=0x421084

+ruppr5g40qam256a0=0x842108

+ruppr5g40qam256a1=0x842108

+ruppr5g40qam1024a0=0xa5294a

+ruppr5g40qam1024a1=0xa5294a

+ruppr5g80bpska0=0x0

+ruppr5g80bpska1=0x0

+ruppr5g80qpska0=0x0

+ruppr5g80qpska1=0x0

+ruppr5g80qam16a0=0x4210842

+ruppr5g80qam16a1=0x4210842

+ruppr5g80qam64a0=0x08421084

+ruppr5g80qam64a1=0x08421084

+ruppr5g80qam256a0=0x10842108

+ruppr5g80qam256a1=0x10842108

+ruppr5g80qam1024a0=0x18c6318c

+ruppr5g80qam1024a1=0x18c6318c

+

+# 5G power offset per channel for band edge channel

+powoffs5g20mtna0=0,0,0,0,0,0,0

+powoffs5g20mtna1=0,0,0,0,0,0,0

+powoffs5g40mtna0=0,0,0,0,0

+powoffs5g40mtna1=0,0,0,0,0

+powoffs5g80mtna0=0,0,0,0,0

+powoffs5g80mtna1=0,0,0,0,0

+mcs11poexp=0

+

+# OLPC Related

+disable_olpc=0

+olpc_thresh5g=36

+olpc_anchor5g=40

+disable_olpc_2g=0

+olpc_thresh2g=56

+olpc_anchor2g=60

+olpc_thresh6g=44

+olpc_anchor6g=56

+

+#LTE Coex Related

+ltecxmux=0

+ltecxpadnum=0x0504

+ltecxfnsel=0x44

+ltecxgcigpio=0x04

+#OOB params

+#device_wake_opt=1

+#host_wake_opt=0

+

+# SWCTRL Related

+swctrlmap_5g=0x00000000,0x00000000,0x00000000,0x00000000,0x000

+swctrlmapext_5g=0x00000000,0x00000202,0x00000000,0x000000,0x000

+fem_table_init_val=0x01100110,0x00000000

+fem_table_init_val_ext=0x00000000,0x00000000

+

+swctrlmap_2g=0x00000110,0x00000020,0x01100110,0x000000,0x17F

+swctrlmapext_2g=0x00000202,0x00000000,0x00000000,0x000000,0x0DF

+

+clb2gslice0core0=0x230

+clb5gslice0core0=0x200

+clb2gslice0core1=0x201

+clb5gslice0core1=0x200

+#For TDM coex use the following

+btc_prisel_ant_mask=0x0

+clb_swctrl_smask_ant0=0x37f

+clb_swctrl_smask_ant1=0x3f7

+# 2 Ant hyb/par following comment above

+#btc_prisel_ant_mask=0x3

+#clb_swctrl_smask_ant0=0x34f

+#clb_swctrl_smask_ant1=0x3f7

+muxenab=1

+

+#BT Coex 1:TDM

+btc_mode=1

+

+# --- PAPD Cal related params ----

+# 0:NBPAPD 1:WBPAPD

+txwbpapden=1

+# NB PAPD Cal params

+# 0x5Gc02Gc0,5Gc12Gc1

+nb_eps_offset=0x01db01da,0x01db01da

+nb_bbmult=0x5050,0x5050

+nb_papdcalidx=0x0a0a,0x0a0a

+nb_txattn=0x0000,0x0000

+nb_rxattn=0x0000,0x0000

+papdgainctrl2g=1

+papdgainctrl5g=1

+pacalshift2g=5,5

+pacalshift5g=4,3

+eps_stopidx=63

+# two-core specific variables for each of UNII-5/6/7/8 bands

+# u5c0,u5c1,u6c0,u6c1,u7c0,u7c1,u8c0,u8c1

+nb_txattn_6g=0,0,0,0,0,0,0,0

+nb_rxattn_6g=0,0,0,0,0,0,0,0

+nb_papdcalidx_6g=10,10,10,10,10,10,10,10

+nb_bbmult_6g=80,80,80,80,80,80,80,80

+nb_eps_offset_6g=475,475,475,475,475,475,475,475

+papdgainctrl6g=1

+pacalshift6g20=3,4,4,4,4,4,4,4

+pacalshift6g40=3,4,4,3,4,4,4,4

+pacalshift6g80=4,3,4,3,4,4,4,4

+

+# WB papd cal params

+# c02g,c05g20,c05g40,c05g80,c12g,c15g20,c15g40,c15g80

+wb_txattn=0,1,1,1,0,1,1,1

+wb_rxattn=0,0,0,0,0,0,0,0

+wb_tia_gain_mode=2,2,2,2,2,2,2,2

+wb_eps_offset=470,467,467,467,470,467,467,467

+wb_papdcalidx=10,10,10,10,10,10,10,10

+wb_bbmult=64,80,80,80,64,80,80,80

+wb_calref_db=26,24,24,24,26,24,24,24

+wb_txbuf_offset=43,42,39,39,43,42,39,39

+wb_frac_del=255,255,255,255,255,255,255,255

+wb_g_frac_bits=10,10,10,10,10,10,10,10

+

+# WB 6G cal params

+# u5c0,u5c1,u6c0,u6c1,u7c0,u7c1,u8c0,u8c1

+wb_txattn_6g20=1,1,1,1,1,1,1,1

+wb_txattn_6g40=1,1,1,1,1,1,1,1

+wb_txattn_6g80=1,1,1,1,1,1,1,1

+wb_rxattn_6g20=0,0,0,0,0,0,0,0

+wb_rxattn_6g40=0,0,0,0,0,0,0,0

+wb_rxattn_6g80=0,0,0,0,0,0,0,0

+wb_tia_gain_mode_6g20=2,2,2,2,6,6,6,6

+wb_tia_gain_mode_6g40=3,3,3,3,6,6,6,6

+wb_tia_gain_mode_6g80=4,4,4,4,6,6,6,6

+wb_papdcalidx_6g20=10,10,10,10,30,32,30,32

+wb_papdcalidx_6g40=25,25,25,25,30,32,30,32

+wb_papdcalidx_6g80=27,28,27,28,30,32,30,32

+wb_bbmult_6g20=66,64,70,64,76,76,76,86

+wb_bbmult_6g40=76,76,68,76,80,80,76,86

+wb_bbmult_6g80=76,80,66,80,84,84,84,80

+wb_eps_offset_6g20=467,469,467,467,472,473,471,470

+wb_eps_offset_6g40=463,463,462,463,471,472,471,470

+wb_eps_offset_6g80=464,465,464,466,471,472,468,472

+wb_calref_db_6g20=26,26,26,26,27,27,29,28

+wb_calref_db_6g40=30,30,32,30,27,27,29,28

+wb_calref_db_6g80=32,30,34,30,27,27,29,28

+

+#2nd LUT parameters

+wb_multipapd_en=1

+wb_PapdLutSel_idx_6g20=42,42,42,42,42,42,39,42

+wb_PapdLutSel_idx_6g40=42,42,42,42,42,42,42,45

+wb_PapdLutSel_idx_6g80=42,42,42,42,39,39,41,44

+wb_eps_index_offset_6g20=0,0,0,4,2,7,3,5

+wb_eps_index_offset_6g40=10,7,9,5,2,8,0,8

+wb_eps_index_offset_6g80=12,7,5,5,2,4,3,8

+wb_papdcalidx_6g20_lut1=10,10,10,10,30,32,30,32

+wb_papdcalidx_6g40_lut1=25,25,25,25,30,32,32,32

+wb_papdcalidx_6g80_lut1=27,28,27,28,30,10,10,32

+wb_bbmult_6g20_lut1=54,50,55,35,52,45,56,66

+wb_bbmult_6g40_lut1=28,42,32,45,70,42,50,45

+wb_bbmult_6g80_lut1=35,50,50,50,50,30,40,50

+wb_calref_db_6g20_lut1=30,26,30,30,30,30,32,28

+wb_calref_db_6g40_lut1=30,30,32,30,27,30,35,28

+wb_calref_db_6g80_lut1=28,30,30,30,30,30,32,28

+

+# 2g/5G 2nd PAPD LUT parameters applicable for -40degc

+wb_eps_offset_lut1=22,10,10,7,22,10,10,7

+wb_calref_db_lut1=23,19,19,19,23,19,19,19

+wb_papdcalidx_lut1=10,10,10,10,10,10,10,10

+wb_bbmult_lut1=25,40,40,40,25,40,40,40

+wb_PapdLutSel_idx_2g5g=53,52,53,52,53,52,53,52

+

+# energy detect threshold

+ed_thresh2g=-65

+ed_thresh5g=-68

+# energy detect threshold for EU

+eu_edthresh2g=-65

+eu_edthresh5g=-68

+

+btldopu=0

+

+#rpcal coef for imptxbf

+rpcal2g=0

+rpcal5gb0=238

+rpcal5gb1=228

+rpcal5gb2=222

+rpcal5gb3=229

+

+#Enable LHL PS mode

+lhl_ps_mode=3

+

+#Disable FastLPO

+fastlpo_dis=1

+fastlpo_pcie_dis=1

+

+#Enable lesi and bphymrc

+lesimode=1,1,1

+bphymrc=1

+

+#PALDO settings 0=3.3 1=3.35 2=3.41 3=3.46 4=2.86, 5=2.97 6=3.08, 7=3.19

+#paldo3p3_voltage=0

+

+

+#temperature throttling

+tvpm=1

+tvpm_txc_txdc=110,15

+tvpm_txc_txdc_lowlimit=1

+tvpm_txc_txdc_insert=0,0

+tvpm_monitor_period=3

+#temperature throttling, aggressive setting

+tvpm_txc_txdc_burst=130,35,5

+tvpm_txc_txdc_init_step=50

+

+##Dynamic Desense Params for 2 ant hybrid coex

+##btcdyn_flags = bit 3- PWRCTRL: bit 2- MSWITCH: bit 1- DESENSE: bit 0- DYNCTL

+#btcdyn_flags=0xB

+#btcdyn_dflt_dsns_level=0

+#btcdyn_low_dsns_level=1

+#btcdyn_mid_dsns_level=2

+#btcdyn_high_dsns_level=4

+#btcdyn_default_btc_mode=5

+#btcdyn_dsns_rows=2

+#btcdyn_dsns_row1=5,-4,0,-50,-70

+#btcdyn_dsns_row0=5,12,0,-50,-65

+#btcdyn_wlpwr_val=2,4,6,8,10,12,14,16

+#btcdyn_wlpwr_thresh=-10,-20,-30,-40,-50,-60,-70

+

+ppr_hitemp_offset=70,10

+#            idx 0: PPR temp thresh, default 150

+#            idx 1: PPR temp thresh hysteresis, default 15

+cckbw202gpo_ht=0x6666

+#            CCK high temp offset, 0.5dBm/step, rate(11,5.5,2,1Mbps)

+ofdmbw202gpo_ht=0x66666666

+#        2G OFDM temp offset, 0.5dBm/step, rate(54,48,36,24,18,12,9,6Mbps)

+mcsbw202gpo_ht=0x66666666

+#        2G BW20 VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw202gpo_1024qam_ht=0x66

+#        2G BW20 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

+ofdmbw205gpo_ht=0x66666666

+#        5G OFDM temp offset, 0.5dBm/step, rate(54,48,36,24,18,12,9,6Mbps)

+mcsbw205gpo_ht=0x66666666

+#        5G BW20 HE/VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw205gpo_1024qam_ht=0x66

+#        5G BW20 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

+mcsbw405gpo_ht=0x66666666

+#        5G BW40 HE/VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw405gpo_1024qam_ht=0x66

+#        5G BW40 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

+mcsbw805gpo_ht=0x66666666

+#        5G BW80 HE/VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw805gpo_1024qam_ht=0x66

+#        5G BW80 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

+ofdmbw206gpo_ht=0x66666666

+#        6G OFDM temp offset, 0.5dBm/step, rate(54,48,36,24,18,12,9,6Mbps)

+mcsbw206gpo_ht=0x66666666

+#        6G BW20 HE/VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw206gpo_1024qam_ht=0x66

+#        6G BW20 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

+mcsbw406gpo_ht=0x66666666

+#        6G BW40 HE/VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw406gpo_1024qam_ht=0x66

+#        6G BW40 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

+mcsbw806gpo_ht=0x66666666

+#        6G BW80 HE/VHT/HT temp offset, 0.5dBm/step, rate(C9,C8,M7,M6,M5,M4,M3,M2-0)

+mcsbw806gpo_1024qam_ht=0x66

+#        6G BW80 HE/VHT temp offset, 0.5dBm/step, rate(C11,C10)

diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb b/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb
index 7d2bb59..13f034c 100755
--- a/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb
@@ -7,6 +7,7 @@
 			file://wg870_drv_insmod.sh \
 			file://wifi/wg870/config_pcie.trxse \
 			file://wifi/wg870/0926.clm_blob \
+			file://wifi/wg870/cyw989570fcref_rev1.58.txt \
 			file://wifi/wg870/w870_rtecdc_mfg.trxs "
 
 
@@ -20,15 +21,15 @@
 SYSTEMD_AUTO_ENABLE_${PN} = "disable"
 
 do_install() {
-	install -d ${D}/etc
-	install -d ${D}/system/etc/firmware/wifi/wg870/
-	install -m 755 ${WORKDIR}/wifi/wg870/config_pcie.trxse ${D}/etc/
-	install -m 755 ${WORKDIR}/wifi/wg870/0926.clm_blob ${D}/etc/
-	install -m 755 ${WORKDIR}/wifi/wg870/w870_rtecdc_mfg.trxs ${D}/system/etc/firmware/wifi/wg870/
-	install -m 755 ${WORKDIR}/wifi/wg870/cyw955572fcipa_rev2.52.txt ${D}/system/etc/firmware/wifi/wg870/
+	install -d ${D}/etc/wg870/
+	install -m 755 ${WORKDIR}/wifi/wg870/config_pcie.trxse ${D}/etc/wg870/
+	install -m 755 ${WORKDIR}/wifi/wg870/0926.clm_blob ${D}/etc/wg870/
+	install -m 755 ${WORKDIR}/wifi/wg870/w870_rtecdc_mfg.trxs ${D}/etc/wg870/
+	install -m 755 ${WORKDIR}/wifi/wg870/cyw989570fcref_rev1.58.txt ${D}/etc/wg870/
+	install -m 755 ${WORKDIR}/wifi/wg870/cyw955572fcipa_rev2.52.txt ${D}/etc/wg870/
 
 	install -d ${D}/${systemd_unitdir}/system
-	install -m 755 ${WORKDIR}/wg870_drv_insmod.sh ${D}/etc/
+	install -m 755 ${WORKDIR}/wg870_drv_insmod.sh ${D}/etc/wg870/
 	install -m 755 ${WORKDIR}/wg870_drv_insmod.service ${D}${systemd_unitdir}/system/
 
 }
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c
index c739529..9e3f9f4 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/wl_cfg80211.c
@@ -12815,10 +12815,14 @@
 	/* Configure hidden SSID */
 	if (info->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE) {
 		if ((err = wldev_iovar_setint(dev, "closednet", 1)) < 0)
-			WL_ERR(("failed to set hidden : %d\n", err));
+			WL_ERR(("failed to set hidden 1: %d\n", err));
 		WL_DBG(("hidden_ssid_enum_val: %d \n", info->hidden_ssid));
+//add by qs.xiong 20221102 to fix ap unhidden fail
+	}else{
+		if ((err = wldev_iovar_setint(dev, "closednet",0 )) < 0)
+			WL_ERR(("failed to set hidden 0 : %d\n", err));
 	}
-
+//add by qs.xiong 20221102 to fix ap unhidden fail
 
 #ifdef SUPPORT_AP_RADIO_PWRSAVE
 	if (dev_role == NL80211_IFTYPE_AP) {
diff --git a/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp b/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp
index a18ccd7..e7b4d03 100755
--- a/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/sms/lynqSmsManager/lynq_sms_manager.cpp
@@ -189,7 +189,7 @@
     if(!get_sms_full())

     {

         RLOGD("[%s] sms full is false\n",__FUNCTION__);

-        lynq_write_sms_to_sms_db(id, slot_id,1,smsc, charset,data,msg,SMS_DB_PATH,num,current,total);

+        lynq_write_sms_to_sms_db(id, slot_id,0,smsc, charset,data,msg,SMS_DB_PATH,num,current,total);

         return id;//sms story index

     }

     LYERRLOG("sms storage space is full!!!");

@@ -286,7 +286,7 @@
         return LYNQ_E_SMS_SQL_FAIL;

     }

     memset(sql,0,128);

-    sprintf(sql,"UPDATE LYNQSMS set STATUS = 2 WHERE ID=%d",index);

+    sprintf(sql,"UPDATE LYNQSMS set STATUS = 1 WHERE ID=%d",index);

     rc = sqlite3_exec(smsDb, sql, NULL,NULL, &zErrMsg);

     if( rc != SQLITE_OK )

     {

diff --git a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
index c6ad362..7e429bc 100755
--- a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
+++ b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
@@ -237,4 +237,18 @@
  * add by qs.xiong 20221012*************/
 int lynq_enable_acs(lynq_wifi_index_e idx,int acs_mode);
 
+//you.chen add for tv-box start
+/**
+ * @brief enableGBW, repeat call will fail before disableGBW
+ * @param mac of tv-box
+ * @return
+ */
+int enableGBW(const char* mac);
+/**
+ * @brief disableGBW
+ * @return
+ */
+int disableGBW();
+//you.chen add for tv-box end
+
 #endif
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 5ea342a..78c756e 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -62,6 +62,13 @@
 
 static struct wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
 
+//you.chen add for tv-box start
+volatile int g_gbw_enabled = 0;
+char * g_gbw_mac = NULL;
+pthread_t g_gbw_watcher_pid = 0;
+static int startGBW();
+static int stopGBW();
+//you.chen add for tv-box end
 
 typedef struct __curr_status_info {
     ap_info_s *ap;
@@ -152,15 +159,28 @@
         if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len)) {
             msg_notify[len+1] = '\0';
             printf("ap------> %s\n", msg_notify);
-            if (g_ap_callback_func == NULL) {
-                continue;
-            }
+//you.chen change for tv-box start
             if (strstr(msg_notify, "AP-STA-DISCONNECTED") != NULL) {
-                g_ap_callback_func(g_ap_callback_priv, LYNQ_WIFI_STATUS_DISCONNECT);
+                if (g_ap_callback_func != NULL)
+                    g_ap_callback_func(g_ap_callback_priv, LYNQ_WIFI_STATUS_DISCONNECT);
+                if (g_gbw_enabled == 1 && g_gbw_mac != NULL) {
+                    printf("disconect %d, %s ,%s\n", g_gbw_enabled, g_gbw_mac, strstr(msg_notify, (const char*)g_gbw_mac));
+                    if (strstr(msg_notify, (const char*)g_gbw_mac) != NULL) {
+                        stopGBW();
+                    }
+                }
             }
             else if (strstr(msg_notify, "AP-STA-CONNECTED") != NULL) {
-                g_ap_callback_func(g_ap_callback_priv, LYNQ_WIFI_STATUS_CONNECT);
+                if (g_ap_callback_func != NULL)
+                    g_ap_callback_func(g_ap_callback_priv, LYNQ_WIFI_STATUS_CONNECT);
+                if (g_gbw_enabled == 1 && g_gbw_mac != NULL) {
+                    printf("conect %d, %s ,%s\n", g_gbw_enabled, g_gbw_mac, strstr(msg_notify, (const char*)g_gbw_mac));
+                    if (strstr(msg_notify, (const char*)g_gbw_mac) != NULL) {
+                        startGBW();
+                    }
+                }
             }
+//you.chen add for tv-box end
         } // end if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
     } // end while (g_ap_watcher_stop_flag == 0)
     if (lynq_wpa_ctrl != NULL) {
@@ -2569,3 +2589,259 @@
 
     return 0;
 }
+//you.chen add for tv-box start
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len) {
+    FILE *fp;
+    //printf("to exec cmd:%s\n", str_cmd);
+    if((fp=popen(str_cmd,"r"))==NULL)
+    {
+        perror("popen error!");
+        return -1;
+    }
+    if((fread(str_cmd_ret,max_len,1,fp))<0)
+    {
+        perror("fread fail!");
+        fclose(fp);
+        return -1;
+    }
+    fclose(fp);
+    return 0;
+}
+
+static int get_netmask_length(const char* mask)
+{
+    int masklen=0, i=0;
+    int netmask=0;
+
+    if(mask == NULL)
+    {
+        return 0;
+    }
+
+    struct in_addr ip_addr;
+    if( inet_aton(mask, &ip_addr) )
+    {
+        netmask = ntohl(ip_addr.s_addr);
+    }else{
+        netmask = 0;
+        return 0;
+    }
+
+    while(0 == (netmask & 0x01) && i<32)
+    {
+        i++;
+        netmask = netmask>>1;
+    }
+    masklen = 32-i;
+    return masklen;
+}
+
+static int get_tether_route_str(char *str_cmd_ret, size_t max_len) {
+    int mask_len;
+    char *p;
+    char tmp[64] = {0};
+    if (exec_cmd("ifconfig tether | grep Mask", str_cmd_ret, max_len) != 0)
+        return -1;
+    p = strstr(str_cmd_ret, "Mask:");
+    if (p == NULL)
+        return -1;
+    mask_len = get_netmask_length(p + 5);
+    if (mask_len == 0)
+        return -1;
+    p = strstr(str_cmd_ret, "inet addr:");
+    if (p == NULL)
+        return -1;
+    strcpy(tmp, p + 10);
+    p = strstr(tmp, " ");
+    if (p != NULL)
+        *p = '\0';
+    sprintf(str_cmd_ret, "%s/%d", tmp, mask_len);
+    return 0;
+}
+
+static void GBWWatchThreadProc() {
+    int i,n, nloop, nmax, ncheckcount, nidlecount;
+    unsigned long long lastAP1Bytes, lastAP2Bytes, currAP1Bytes, currAP2Bytes;
+    unsigned int lastAP1Drop,lastAP2Drop, currAP1Drop, currAP2Drop;
+    unsigned int setAP1Speed, setAP2Speed, lastAP1Speed, lastAP2Speed, currAP1Speed, currAP2Speed,currSetAP1Speed;
+    char *results[16] = {0};
+    char str_cmd[256] = {0};
+    char str_cmd_ret[128] = {0};
+    char dest_ip[32] = {0};
+    lastAP1Bytes = lastAP2Bytes = 0;
+    lastAP1Drop = lastAP2Drop = 0;
+    lastAP1Speed = lastAP2Speed = 0;
+    setAP1Speed = 50;
+    setAP2Speed = 80;
+    nloop = 0;
+    nmax = 6;
+    ncheckcount = nidlecount = 0;
+
+    printf("------gbw thread run\n");
+    sprintf(str_cmd, "ip neigh | grep %s | awk '{print $1}'", g_gbw_mac);
+    while (dest_ip[0] == '\0') {
+        sleep(1);
+        str_cmd_ret[0] = '\0';
+        exec_cmd(str_cmd, str_cmd_ret, sizeof (str_cmd_ret));
+        for(n = 0; n < (int)sizeof(str_cmd_ret) && str_cmd_ret[n] != '\0'; n++) {
+            if (str_cmd_ret[n] == '\n'){
+                str_cmd_ret[n] = '\0';
+                break;
+            }
+        }
+        if (str_cmd_ret[0] != '\0')
+        {
+            strcpy(dest_ip, str_cmd_ret);
+        }
+    }
+
+    system("tc qdisc del dev tether root > /dev/null 2>&1");
+    system("tc qdisc add dev tether root handle 1: htb r2q 1");
+    system("tc class add dev tether parent 1:  classid 1:1  htb rate 50Mbit ceil 70Mbit prio 2 quantum 3000");
+    if (get_tether_route_str(str_cmd_ret, sizeof (str_cmd_ret)) != 0)
+    {
+        printf("not get tether info\n");
+        return;
+    }
+    sprintf(str_cmd, "tc filter add dev tether parent 1: protocol ip prio 16 u32 match ip dst %s flowid 1:1", str_cmd_ret);
+    system(str_cmd);
+    system("tc class add dev tether parent 1:  classid 1:2  htb rate 80Mbit ceil 100Mbit prio 0 quantum 3000000");
+    sprintf(str_cmd, "tc filter add dev tether parent 1: protocol ip prio 1 u32 match ip dst %s flowid 1:2", dest_ip);
+    //printf("----cmd:%s\n", str_cmd);
+    system(str_cmd);
+
+    while (1) {
+        sleep(1);
+        memset(str_cmd, 0, sizeof(str_cmd));
+        if (0 != exec_cmd("tc -s class show dev tether classid 1:1 | grep Sent", str_cmd, sizeof (str_cmd)))
+            continue;
+        //printf("ap1 --- %s\n", str_cmd);
+        n = lynq_split(str_cmd, strlen(str_cmd), ' ', results);
+        if (n > 9) {
+            if (strcmp(results[1], "Sent") == 0) {
+                currAP1Bytes = atoll(results[2]);
+            }
+            if (strcmp(results[6], "(dropped") == 0) {
+                currAP1Drop = atoi(results[7]);
+            }
+        }
+
+        memset(str_cmd, 0, sizeof(str_cmd));
+        if (0 != exec_cmd("tc -s class show dev tether classid 1:2 | grep Sent", str_cmd, sizeof (str_cmd)))
+            continue;
+        //printf("ap2 --- %s\n", str_cmd);
+        n = lynq_split(str_cmd, strlen(str_cmd), ' ', results);
+        if (n > 9) {
+            if (strcmp(results[1], "Sent") == 0) {
+                currAP2Bytes = atoll(results[2]);
+            }
+            if (strcmp(results[6], "(dropped") == 0) {
+                currAP2Drop = atoi(results[7]);
+            }
+        }
+
+        //printf("ap1 %llu- %u, ap2 %llu-%u\n", currAP1Bytes, currAP1Drop, currAP2Bytes, currAP2Drop);
+        if (currAP1Bytes < lastAP1Bytes || currAP2Bytes < lastAP2Bytes) {
+            lastAP1Bytes = currAP1Bytes;
+            lastAP2Bytes = currAP2Bytes;
+            continue;
+        }
+
+        currAP1Speed = (currAP1Bytes - lastAP1Bytes) / 128 / 1024;
+        currAP2Speed = (currAP2Bytes - lastAP2Bytes) / 128 / 1024;
+        //printf("ap1 speed %d mb, ap2 speed %d mb\n", currAP1Speed, currAP2Speed);
+        lastAP1Speed = currAP1Speed;
+        lastAP2Speed = currAP2Speed;
+        lastAP1Bytes = currAP1Bytes;
+        lastAP2Bytes = currAP2Bytes;
+
+        currSetAP1Speed = setAP1Speed;
+        if ((currAP2Speed < 30 && currAP2Speed > 5) && currAP1Speed > 5) {
+            ncheckcount++;
+            if (ncheckcount > 3) {
+                ncheckcount = 0;
+                currSetAP1Speed = 5;
+            }
+        }
+        else {
+            ncheckcount = 0;
+            if (currAP1Speed < 5)
+                nidlecount++;
+            else
+                nidlecount = 0;
+
+        }
+
+        if (nidlecount > 60 ){
+            currSetAP1Speed = 50;
+        }
+
+        if (currSetAP1Speed != setAP1Speed) {
+            setAP1Speed = currSetAP1Speed;
+            sprintf(str_cmd, "tc class replace dev tether parent 1:  classid 1:1  htb rate %dMbit ceil %dMbit prio 2 quantum 3000", setAP1Speed, (int)(setAP1Speed*1.4));
+            //printf("------***change speed: %s\n", str_cmd);
+            system(str_cmd);
+        }
+    }
+}
+
+int enableGBW(const char* mac) {
+    int i,len;
+    char get_ipaddr_cmd[128]={0};
+    ap_info_s *ap;
+    device_info_s * list;
+
+    if (mac == NULL || g_gbw_enabled == 1)
+        return -1;
+    len = strlen(mac);
+    g_gbw_mac = malloc(len + 1);
+    for(i=0;i<len;i++) {
+        if (mac[i] >= 'A' && mac[i] <= 'Z')
+        {
+            g_gbw_mac[i] = 'a' + (mac[i] - 'A');
+        }
+        else
+            g_gbw_mac[i] = mac[i];
+    }
+    g_gbw_mac[i] = '\0';
+    g_gbw_enabled = 1;
+
+    sprintf(get_ipaddr_cmd, "ip neigh | grep %s", g_gbw_mac);
+    if (system(get_ipaddr_cmd) == 0) {
+        //startGBW();
+        if ( 0 ==lynq_get_ap_device_list(1, &ap, &list,&len) ) {
+            for (i=0;i<len;i++) {
+                //printf("--mac:%s, name:%s\n",list[i].sta_mac, list[i].hostname);
+                if (strcmp(g_gbw_mac, list[i].sta_mac) == 0)
+                    startGBW();
+            }
+            free(ap);
+            free(list);
+        }
+    }
+    return 0;
+}
+
+int disableGBW() {
+    stopGBW();
+    free(g_gbw_mac);
+    g_gbw_mac = NULL;
+    g_gbw_enabled = 1;
+    return 0;
+}
+
+static int startGBW() {
+    if (g_gbw_watcher_pid != 0) {
+        stopGBW();
+    }
+    pthread_create(&g_gbw_watcher_pid,NULL,GBWWatchThreadProc,NULL);
+}
+
+static int stopGBW() {
+    void* retval;
+    pthread_cancel(g_gbw_watcher_pid);
+    pthread_join(g_gbw_watcher_pid, &retval);
+    g_gbw_watcher_pid = 0;
+    system("tc qdisc del dev tether root");
+}
+//you.chen add for tv-box end
diff --git a/src/lynq/lib/libpoweralarm/libpoweralarm.c b/src/lynq/lib/libpoweralarm/libpoweralarm.c
index ac3203c..0cc3eb8 100644
--- a/src/lynq/lib/libpoweralarm/libpoweralarm.c
+++ b/src/lynq/lib/libpoweralarm/libpoweralarm.c
@@ -34,7 +34,7 @@
     char *time_buff = NULL;
 
     sec = format_change(buffer); //computing seconds for shutdown alarm
-    if(sec < 0)
+    if(sec < 60)
     {
         ALOGI("No Mattch\n");
         return -1;
@@ -67,7 +67,7 @@
     char *time_buff = NULL;
 
     sec = format_change(buffer); //computing seconds for lowpower alarm
-    if(sec < 0)
+    if(sec < 60)
     {
         ALOGI("No Mattch\n");
         return -1;