[Feature][ZXW-241]merge P56U01 version
Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No
Change-Id: I7985538dde6951dd824c36149bf9a1e3ca23c734
diff --git a/ap/os/linux/linux-3.4.x/drivers/cpko/cpko_main.c b/ap/os/linux/linux-3.4.x/drivers/cpko/cpko_main.c
index 7a9c22c..341d668 100755
--- a/ap/os/linux/linux-3.4.x/drivers/cpko/cpko_main.c
+++ b/ap/os/linux/linux-3.4.x/drivers/cpko/cpko_main.c
@@ -77,36 +77,37 @@
extern SINT32 zDrvVp_AudioDataWrite(const VOID*pBuf,UINT32 uiLen);extern SINT32
zDrvVp_AudioDataOpen(UINT32 audioType,UINT32 sampleRate);extern SINT32
zDrvVp_AudioDataClose(void);extern SINT32 zDrvVp_GetVpLoop_Wrap(VOID);extern
-VOID zDrvVp_Status(UINT32*sample_rate,UINT32*voice_status);typedef struct
-cpko_section{unsigned int cpko_text_start;unsigned int cpko_rodata_start;
-unsigned int __utran_modem_text_start;unsigned int __lte_modem_text_start;
-unsigned int __comm_modem_text_start;unsigned int modem_text_end;unsigned int
-cpko_data_start;unsigned int cpko_bss_start;unsigned int cpko_text_offset;}
-cpko_section_layout;cpko_section_layout cpko_ps_section;int raise(int signo){
-return(0x404+8970-0x270e);}extern unsigned int SysEntry(void);static int
-ko_Main_Thread(void*data){struct sched_param param={.sched_priority=
-MAX_USER_RT_PRIO/(0xafb+4511-0x1c98)-(0x1633+3815-0x2517)};int ret=
-(0x1f43+402-0x20d5);sched_setscheduler(current,SCHED_FIFO,¶m);ret=SysEntry()
-;if(ret!=(0x10b8+3966-0x2036))panic("Main_Thread\n");param.sched_priority=
-MAX_USER_RT_PRIO-(0xfb3+2852-0x1aa9);sched_setscheduler(kthreadd_task,SCHED_FIFO
-,¶m);return(0xaa6+6401-0x23a7);}int zte_modem_ko_start(void){kthread_run(
-ko_Main_Thread,NULL,"\x5a\x54\x45\x4d\x61\x69\x6e\x54\x68\x72\x65\x61\x64");
-return(0x8b9+1955-0x105c);}static void cpko_sectioninfo_set(void){int ret;struct
- file*fp;mm_segment_t old_fs;loff_t cpko_pos=(0x6ed+5503-0x1c6c);struct
+VOID zDrvVp_Status(UINT32*sample_rate,UINT32*voice_status);extern VOID
+zDrvVp_UpdateVoiceNv(UINT8*voice_nv_update);typedef struct cpko_section{unsigned
+ int cpko_text_start;unsigned int cpko_rodata_start;unsigned int
+__utran_modem_text_start;unsigned int __lte_modem_text_start;unsigned int
+__comm_modem_text_start;unsigned int modem_text_end;unsigned int cpko_data_start
+;unsigned int cpko_bss_start;unsigned int cpko_text_offset;}cpko_section_layout;
+cpko_section_layout cpko_ps_section;int raise(int signo){return(0x6ed+448-0x8ad)
+;}extern unsigned int SysEntry(void);static int ko_Main_Thread(void*data){struct
+ sched_param param={.sched_priority=MAX_USER_RT_PRIO/(0x81a+3335-0x151f)-
+(0x931+4823-0x1c05)};int ret=(0x138+9138-0x24ea);sched_setscheduler(current,
+SCHED_FIFO,¶m);ret=SysEntry();if(ret!=(0x4c9+1313-0x9ea))panic(
+"Main_Thread\n");param.sched_priority=MAX_USER_RT_PRIO-(0x7a1+7631-0x2542);
+sched_setscheduler(kthreadd_task,SCHED_FIFO,¶m);return(0x1239+1857-0x197a);}
+int zte_modem_ko_start(void){kthread_run(ko_Main_Thread,NULL,
+"\x5a\x54\x45\x4d\x61\x69\x6e\x54\x68\x72\x65\x61\x64");return
+(0x1050+3114-0x1c7a);}static void cpko_sectioninfo_set(void){int ret;struct file
+*fp;mm_segment_t old_fs;loff_t cpko_pos=(0x160b+1733-0x1cd0);struct
cpps_globalModem globalVar;fp=filp_open(
"\x2f\x6c\x69\x62\x2f\x63\x70\x6b\x6f\x2f\x63\x70\x6b\x6f\x5f\x73\x65\x63\x69\x6e\x66\x6f\x2e\x62\x69\x6e"
-,(0xf28+2571-0x1933),(0xa59+1171-0xeec));if(IS_ERR(fp)||fp==NULL)panic(
+,(0xd6c+3198-0x19ea),(0x655+5701-0x1c9a));if(IS_ERR(fp)||fp==NULL)panic(
"\x6f\x70\x65\x6e\x20\x66\x69\x6c\x65\x20\x65\x72\x72\x6f\x72" "\n");old_fs=
get_fs();set_fs(KERNEL_DS);ret=vfs_read(fp,(char*)&cpko_ps_section,sizeof(
-cpko_section_layout),&cpko_pos);if(ret<=(0x304+3756-0x11b0))panic(
+cpko_section_layout),&cpko_pos);if(ret<=(0x235f+23-0x2376))panic(
"\x72\x65\x61\x64\x20\x66\x69\x6c\x65\x20\x65\x72\x72\x6f\x72" "\n");filp_close(
fp,NULL);
#ifdef CONFIG_MODEM_CODE_IS_MAPPING
fp=filp_open(
"\x2f\x6c\x69\x62\x2f\x63\x70\x6b\x6f\x2f\x63\x70\x6b\x6f\x2e\x6b\x6f",
-(0x1019+4563-0x21ec),(0x1cf2+1837-0x241f));if(IS_ERR(fp)||fp==NULL)panic(
+(0x940+3724-0x17cc),(0xb2a+3215-0x17b9));if(IS_ERR(fp)||fp==NULL)panic(
"\x6f\x70\x65\x6e\x20\x66\x69\x6c\x65\x20\x65\x72\x72\x6f\x72" "\n");fp->f_ra.
-ra_pages=(0x53f+4485-0x16c4);
+ra_pages=(0x15a8+769-0x18a9);
#endif
if(cpko_ps_section.cpko_text_start){globalVar.cpko_text_start=(unsigned long)
cpko_ps_section.cpko_text_start;globalVar.cpko_rodata_start=(unsigned long)
@@ -126,7 +127,7 @@
vfree_modem_section(globalVar.cpko_text_start,globalVar.modem_text_end);
#endif
}else panic("\x66\x69\x6c\x65\x20\x65\x72\x72\x6f\x72" "\n");}static int
-cpko_start(void){struct cpps_callbacks callback={(0x913+4588-0x1aff)};callback.
+cpko_start(void){struct cpps_callbacks callback={(0x66f+4526-0x181d)};callback.
zOss_ResetNVFactory=zOss_ResetNVFactory;callback.zOss_NvramFlush=zOss_NvramFlush
;callback.zOss_NvItemWrite=zOss_NvItemWrite;callback.zOss_NvItemWriteFactory=
zOss_NvItemWriteFactory;callback.zOss_NvItemRead=zOss_NvItemRead;callback.
@@ -190,7 +191,8 @@
mmp_AmrDecClose;callback.mmp_AmrEncClose=mmp_AmrEncClose;callback.
zDrvVp_AudioDataOpen=zDrvVp_AudioDataOpen;callback.zDrvVp_AudioDataWrite=
zDrvVp_AudioDataWrite;callback.zDrvVp_AudioDataClose=zDrvVp_AudioDataClose;
-callback.zDrvVp_Status=zDrvVp_Status;
+callback.zDrvVp_Status=zDrvVp_Status;callback.zDrvVp_UpdateVoiceNv=
+zDrvVp_UpdateVoiceNv;
#endif
callback.psm_ModemDevSleep=psm_ModemDevSleep;callback.psm_ModemSleepCheck=
psm_ModemSleepCheck;callback.psm_ModemSleepTimeGet=psm_ModemSleepTimeGet;
@@ -198,5 +200,5 @@
psm_GetModemSleepFlagStatus=psm_GetModemSleepFlagStatus;
#endif
cpps_callbacks_register(&callback);cpko_sectioninfo_set();zte_modem_ko_start();
-return(0xb43+4520-0x1ceb);}static int cpko_stop(void){return(0x20cd+460-0x2299);
-}module_init(cpko_start);module_exit(cpko_stop);
+return(0x1a6d+2639-0x24bc);}static int cpko_stop(void){return(0x62+561-0x293);}
+module_init(cpko_start);module_exit(cpko_stop);
diff --git a/ap/os/linux/linux-3.4.x/drivers/mfd/zx234290-regulator-wrapper.c b/ap/os/linux/linux-3.4.x/drivers/mfd/zx234290-regulator-wrapper.c
index c5d99db..f6bf3c4 100755
--- a/ap/os/linux/linux-3.4.x/drivers/mfd/zx234290-regulator-wrapper.c
+++ b/ap/os/linux/linux-3.4.x/drivers/mfd/zx234290-regulator-wrapper.c
@@ -157,13 +157,13 @@
//zx234290_set_buck4_sleep_mode(BUCK234_SLP_SHUTDOWN); /*PA 3V6*/
//zx234290_set_ldo1_sleep_mode(LDOA_SLP_SHUTDOWN); /*USB 0V9*/
//zx234290_set_ldo5_sleep_mode(LDOA_SLP_SHUTDOWN); /*USB 3V3*/
- zx234290_set_ldo2_sleep_mode(LDOA_SLP_ECO_VOLT_SLP); /*io1.8v/mcp1.8v/sd01.8v*/
- zx234290_set_ldo3_sleep_mode(LDOA_SLP_ECO_VOLT_SLP); /*vp111.8v/vddr_pll1.8v/*/
+ zx234290_set_ldo2_sleep_mode(LDOA_SLP_ECO_VOLT); /*io1.8v/mcp1.8v/sd01.8v*/
+ zx234290_set_ldo3_sleep_mode(LDOA_SLP_ECO_VOLT); /*vp111.8v/vddr_pll1.8v/*/
zx234290_set_ldo4_sleep_mode(LDOA_SLP_SHUTDOWN); /*vcxo*/
//zx234290_set_ldo6_sleep_mode(LDOA_SLP_SHUTDOWN); /*SIM1 1V8*/
- zx234290_set_ldo7_sleep_mode(LDOA_SLP_ECO_VOLT_SLP); /*RF 2V85 -- 26M */
- zx234290_set_ldo8_sleep_mode(LDOA_SLP_ECO_VOLT_SLP); /*ZSP JTAG/SD 2V85/LCD*/
- zx234290_set_ldo9_sleep_mode(LDOA_SLP_ECO_VOLT_SLP); /*PLL 0V9*/
+ zx234290_set_ldo7_sleep_mode(LDOA_SLP_ECO_VOLT); /*RF -- 26M */
+ zx234290_set_ldo8_sleep_mode(LDOA_SLP_ECO_VOLT); /*ZSP JTAG/SD 2V85/LCD*/
+ zx234290_set_ldo9_sleep_mode(LDOA_SLP_ECO_VOLT); /*PLL 0V9*/
//zx234290_set_ldo10_sleep_mode(LDOA_SLP_SHUTDOWN); /*ABB DIG*/
return 0;
@@ -191,9 +191,16 @@
ret += zDrvZx234290_DischargerConfig();
//zDrvZx234290_SleepConfig();
+#ifdef _USE_VEHICLE_DC
+ ret += zx234290_SetTllpToDo(LLP_RESTART);
+ ret += zx234290_SetLlpTime(LLP_TIME_6S);
- ret += zx234290_SetLlpEnable(LLP_ENABLE);
+#else
ret += zx234290_SetTllpToDo(LLP_SHUTDOWN);
+ ret += zx234290_SetLlpTime(LLP_TIME_10S);
+#endif
+ ret += zx234290_SetLlpEnable(LLP_ENABLE);
+
// ret += zx234290_SetRestartDly(LLP_DLY_500MS); //LLP_DLY_250MS
if(ret != 0)
{
diff --git a/ap/os/linux/linux-3.4.x/drivers/mmc/host/zx29_mmc.c b/ap/os/linux/linux-3.4.x/drivers/mmc/host/zx29_mmc.c
index 425d6a7..4724b88 100755
--- a/ap/os/linux/linux-3.4.x/drivers/mmc/host/zx29_mmc.c
+++ b/ap/os/linux/linux-3.4.x/drivers/mmc/host/zx29_mmc.c
@@ -40,7 +40,7 @@
#include <linux/sched.h>
#include <linux/kthread.h>
-
+#include <linux/ramdump/ramdump.h>
#include <mach/zx29_mmc.h>
#include "mmc_xlog.h"
@@ -4020,9 +4020,9 @@
#if (defined CONFIG_ARCH_ZX297520V2)||(defined CONFIG_ARCH_ZX297520V3)
if (host->host_id == 0){
- ramdump_ram_conf_table_add("sd0_reg_0x01210000.bin", 0x01210000, 0x110, (unsigned long)host->regs, 0, 0);
+ ramdump_ram_conf_table_add("sd0_reg_0x01210000.bin", 0x01210000, 0x110, (unsigned long)host->regs, RAMDUMP_FLAG_LEVEL_MEDIUM, 0);
}else{
- ramdump_ram_conf_table_add("sd1_reg_0x01211000.bin", 0x01211000, 0x110, (unsigned long)host->regs, 0, 0);
+ ramdump_ram_conf_table_add("sd1_reg_0x01211000.bin", 0x01211000, 0x110, (unsigned long)host->regs, RAMDUMP_FLAG_LEVEL_MEDIUM, 0);
}
#endif
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_dev.c b/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_dev.c
index 09a1b2b..f47694b 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_dev.c
+++ b/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_dev.c
@@ -271,6 +271,7 @@
buff = buff + sizeof(struct in6_addr);
memcpy(&g_ipv4_local_subnet, buff, sizeof(struct in_addr));
g_xlat_dev = dev_get_by_name(&init_net, dev_name);
+ return 0;
}
int fill_ip_header(struct iphdr *ip, const struct ipv6hdr *old_header) {
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_io.c b/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_io.c
index 7033685..b5ffada 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_io.c
+++ b/ap/os/linux/linux-3.4.x/drivers/net/psnet/psnet_io.c
@@ -12,8 +12,7 @@
#include <net/ipv6.h>
#include <net/protocol.h>
#include <net/ndisc.h>
-
-extern struct psnet *global_psnet[DDR_DEV_MAX];
+#include <linux/netdevice.h>
#define ZATI2_DATA_CHANNEL_ID_NUM_START (CHANNEL_AP2PS_MAXID)//+1
#define ZATI2_DATA_CHANNEL_BASE 90
@@ -70,6 +69,14 @@
struct in6_addr nd_opt_pi_prefix;
};
+struct nd_opt_mtu_info /* mtu information */
+{
+ uint8_t nd_opt_mi_type;
+ uint8_t nd_opt_mi_len;
+ uint16_t nd_opt_mi_reserved2;
+ uint32_t nd_opt_mi_mtu;
+};
+
struct psnet_RA_info
{
unsigned int flag;
@@ -85,6 +92,10 @@
extern int zAti2_IsExCid(unsigned char cid, unsigned char *pcid);
struct psnet_RA_info g_psnet_ipv6_prefix[DDR_DEV_MAX] = {0};
+int ra_mtu_enable;
+module_param(ra_mtu_enable, int, 0644);
+extern struct psnet *global_psnet[DDR_DEV_MAX];
+
void psnet_parse_RA_pkt(unsigned char cid, unsigned char* pkt, int len)
{
//warn("cid=%d flag=%d\n", cid, g_psnet_ipv6_prefix[cid-1].flag);
@@ -130,7 +141,17 @@
g_psnet_ipv6_prefix[ext_cid-1].flag = 1;
up(&g_psnet_ipv6_prefix[ext_cid-1].sem);
warn("cid=%d prefix_len=%d\n", ext_cid, pinfo->nd_opt_pi_prefix_len);
- return;
+ //return;
+ }
+ if((nd_opt->nd_opt_type) == ND_OPT_MTU){
+ if(ra_mtu_enable) {
+ int err;
+ struct nd_opt_mtu_info *minfo = (struct nd_opt_mtu_info *)nd_opt;
+ warn("mtu: %u, dev: %s\n", ntohl(minfo->nd_opt_mi_mtu), global_psnet[cid-1]->net->name);
+ err = dev_set_mtu(global_psnet[cid-1]->net, ntohl(minfo->nd_opt_mi_mtu));
+ warn("err: %d", err);
+ }
+ //return;
}
opt_len -= l;
nd_opt = ((void *)nd_opt) + l;
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/Makefile b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/Makefile
index 7caf507..1a5c814 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/Makefile
+++ b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/Makefile
@@ -152,6 +152,7 @@
CONFIG_TXRX_THREAD_PRIO = y
CONFIG_DPD = y
CONFIG_FORCE_DPD_CALIB = y
+CONFIG_TEMP_PW = y
# Support of MU-MIMO transmission (need FW support)
ifeq ($(CONFIG_RWNX_BFMER), y)
@@ -267,6 +268,7 @@
ccflags-$(CONFIG_TXRX_THREAD_PRIO) += -DCONFIG_TXRX_THREAD_PRIO
ccflags-$(CONFIG_DPD) += -DCONFIG_DPD
ccflags-$(CONFIG_FORCE_DPD_CALIB) += -DCONFIG_FORCE_DPD_CALIB -DCONFIG_DPD
+ccflags-$(CONFIG_TEMP_PW) += -DCONFIG_TEMP_PW
ifeq ($(CONFIG_LESS_SKB), y)
ccflags-y += -DLESS_SKB
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.c b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.c
index a9c7fb5..d300096 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.c
+++ b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.c
@@ -334,11 +334,13 @@
struct aic_sdio_dev *sdiodev = NULL;
sdio_dbg("%s\n", __func__);
+#ifdef CONFIG_TEMP_PW
if (timer_pending(&g_rwnx_plat->sdiodev->tp_timer)) {
printk("%s del_timer\n", __func__);
del_timer_sync(&g_rwnx_plat->sdiodev->tp_timer);
}
cancel_work_sync(&g_rwnx_plat->sdiodev->tp_work);
+#endif
host = func->card->host;
host->caps &= ~MMC_CAP_NONREMOVABLE;
bus_if = dev_get_drvdata(&func->dev);
@@ -1835,50 +1837,9 @@
sdio_release_host(sdiodev->func);
}
+#ifdef CONFIG_TEMP_PW
extern void set_txpwr_ctrl(struct aic_sdio_dev *sdiodev, s8_l value);
-#if 0
-static void set_txpwr_ctrl(struct aic_sdio_dev *sdiodev, s8_l value)
-{
- nvram_info.txpwr_loss.loss_enable = 1;
- if (value > TEMP_THD_1 && value <= TEMP_THD_2) {
- if (sdiodev->range == 0) {
- nvram_info.txpwr_loss.loss_value += -TEMP_STEP_1;
- sdiodev.range = 1;
- rwnx_send_txpwr_lvl_req(sdiodev->rwnx_hw);
- } else if (sdiodev->range == 1) {
- continue;
- } else if (sdiodev->range == 2) {
- nvram_info.txpwr_loss.loss_value += TEMP_STEP_1;
- sdiodev.range = 1;
- rwnx_send_txpwr_lvl_req(sdiodev->rwnx_hw);
- }
- } else if (value > TEMP_THD_2) {
- if (sdiodev->range == 0) {
- nvram_info.txpwr_loss.loss_value += -TEMP_STEP_2;
- sdiodev.range = 2;
- rwnx_send_txpwr_lvl_req(sdiodev->rwnx_hw);
- } else if (sdiodev->range == 1) {
- nvram_info.txpwr_loss.loss_value += -TEMP_STEP_1;
- sdiodev.range = 2;
- rwnx_send_txpwr_lvl_req(sdiodev->rwnx_hw);
- } else {
- continue;
- }
- } else {
- if (sdiodev->range == 0) {
- continue;
- } else if (sdiodev->range == 1) {
- nvram_info.txpwr_loss.loss_value += TEMP_STEP_1;
- sdiodev.range = 0;
- rwnx_send_txpwr_lvl_req(sdiodev->rwnx_hw);
- } else if (sdiodev->range == 2) {
- nvram_info.txpwr_loss.loss_value += TEMP_STEP_2;
- sdiodev.range = 0;
- rwnx_send_txpwr_lvl_req(sdiodev->rwnx_hw);
- }
- }
-}
-#endif
+
void aicwf_temp_worker(struct work_struct *work)
{
struct rwnx_hw *rwnx_hw;
@@ -1904,6 +1865,7 @@
schedule_work(&sdiodev->tp_work);
return;
}
+#endif
void *aicwf_sdio_bus_init(struct aic_sdio_dev *sdiodev)
{
int ret;
@@ -1947,6 +1909,7 @@
init_waitqueue_head(&tx_priv->cmd_txdone_wait);
atomic_set(&tx_priv->tx_pktcnt, 0);
+#ifdef CONFIG_TEMP_PW
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0)
init_timer(&sdiodev->tp_timer);
sdiodev->tp_timer.data = (ulong) sdiodev;
@@ -1958,6 +1921,7 @@
INIT_WORK(&sdiodev->tp_work, aicwf_temp_worker);
mod_timer(&sdiodev->tp_timer, jiffies + msecs_to_jiffies(10 * 1000));
sdiodev->range = 0;
+#endif
#if defined(CONFIG_SDIO_PWRCTRL)
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0)
init_timer(&sdiodev->timer);
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.h b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.h
index 9a10cd4..fd98dcc 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.h
+++ b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/aicwf_sdio.h
@@ -84,9 +84,11 @@
u8 flowctrl;
spinlock_t tx_flow_lock;
#endif
+#ifdef CONFIG_TEMP_PW
struct timer_list tp_timer;
struct work_struct tp_work;
u8 range;
+#endif
#if defined(CONFIG_SDIO_PWRCTRL)
//for sdio pwr ctrl
struct timer_list timer;
@@ -100,7 +102,9 @@
int aicwf_sdio_writeb(struct aic_sdio_dev *sdiodev, uint regaddr, u8 val);
void aicwf_sdio_hal_irqhandler(struct sdio_func *func);
void aicwf_sdio_hal_irqhandler_func2(struct sdio_func *func);
+#ifdef CONFIG_TEMP_PW
void aicwf_temp_worker(struct work_struct *work);
+#endif
#if defined(CONFIG_SDIO_PWRCTRL)
void aicwf_sdio_pwrctl_timer(struct aic_sdio_dev *sdiodev, uint duration);
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/rwnx_platform.c b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/rwnx_platform.c
index e1703a4..ea9abb7 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/rwnx_platform.c
+++ b/ap/os/linux/linux-3.4.x/drivers/net/wireless/aic8800/rwnx_platform.c
@@ -110,13 +110,9 @@
},
};
-extern u8 chip_id;
+#ifdef CONFIG_TEMP_PW
void set_txpwr_ctrl(struct aic_sdio_dev *sdiodev, s8_l value)
{
- if (!IS_CHIP_ID_H()) {
- printk("%s !h\n", __func__);
- return;
- }
nvram_info.txpwr_loss.loss_enable = 1;
if (value > TEMP_THD_1 && value <= TEMP_THD_2) {
if (sdiodev->range == 0) {
@@ -157,6 +153,7 @@
}
return;
}
+#endif
#ifdef VENDOR_SPECIFIED_FW_PATH
int rwnx_load_firmware(u32 **fw_buf, const char *name, struct device *device)
@@ -802,7 +799,7 @@
void set_txpwr_loss_ofst(s8_l value)
{
nvram_info.txpwr_loss.loss_enable = 1;
- nvram_info.txpwr_loss.loss_value += value;
+ nvram_info.txpwr_loss.loss_value = value;
printk("%s:value:%d\r\n", __func__, value);
}
void get_userconfig_txpwr_ofst(txpwr_ofst_conf_t *txpwr_ofst)
diff --git a/ap/os/linux/linux-3.4.x/drivers/net/wireless/ssv6x5x/smac/dev.c b/ap/os/linux/linux-3.4.x/drivers/net/wireless/ssv6x5x/smac/dev.c
index 64335ed..38c1bc9 100755
--- a/ap/os/linux/linux-3.4.x/drivers/net/wireless/ssv6x5x/smac/dev.c
+++ b/ap/os/linux/linux-3.4.x/drivers/net/wireless/ssv6x5x/smac/dev.c
@@ -1089,6 +1089,8 @@
if (sta) {
if (ssv6xxx_compare_ether_addr(hdr->addr1, sta->addr)) {
ssv_skb_free(sc, skb);
+ if (wsid <= SSV_SW_TXQ_ID_STAMAX)
+ HCI_TXQ_UNLOCK_BY_STA(sc->sh, wsid);
continue;
} else {
ssv6xxx_setup_ampdu_session((void *)sc, sta, skb);
diff --git a/ap/os/linux/linux-3.4.x/drivers/rtc/zx234290-rtc.c b/ap/os/linux/linux-3.4.x/drivers/rtc/zx234290-rtc.c
index 54428db..1ea194c 100755
--- a/ap/os/linux/linux-3.4.x/drivers/rtc/zx234290-rtc.c
+++ b/ap/os/linux/linux-3.4.x/drivers/rtc/zx234290-rtc.c
@@ -279,7 +279,7 @@
zte_send_hour_irq_event();
return IRQ_HANDLED;
}
-/*alarm enable/disable, 0:disable 1:enable*/
+/*alarm enable/disable, 1:disable 0:enable*/
int zx234290_rtc_alarm_enable(zx234290_alarm_type type, unsigned int enabled)
{
int ret = 0;
@@ -351,7 +351,15 @@
int reg_val=0, mask=0;
pr_debug("%s: aie=%d\n", __func__, enabled);
-
+
+ if(0==enabled)//disable alarm
+ {
+ zx234290_rtc_alarm_enable(ALARM_SECOND, 1);
+ zx234290_rtc_alarm_enable(ALARM_MINUTE, 1);
+ zx234290_rtc_alarm_enable(ALARM_HOUR, 1);
+ zx234290_rtc_alarm_enable(ALARM_DAY, 1);
+ zx234290_rtc_alarm_enable(ALARM_WEEKDAY, 1);
+ };
/*enable/disable AIE bit*/
mask = ZX234290_BITFMASK(ZX234290_RTC_AIE_WID, ZX234290_RTC_AIE_LSH);
reg_val= ZX234290_BITFVAL(enabled, ZX234290_RTC_AIE_LSH);
diff --git a/ap/os/linux/linux-3.4.x/drivers/soc/zte/otp/otp_zx.c b/ap/os/linux/linux-3.4.x/drivers/soc/zte/otp/otp_zx.c
index 87ef398..fba3f50 100755
--- a/ap/os/linux/linux-3.4.x/drivers/soc/zte/otp/otp_zx.c
+++ b/ap/os/linux/linux-3.4.x/drivers/soc/zte/otp/otp_zx.c
@@ -26,6 +26,7 @@
#include <linux/dmaengine.h>
#include <mach/iomap.h>
#include <mach/gpio.h>
+#include <linux/sched.h>
extern struct mutex otpMutex;
extern char *nor_cmdline;
@@ -542,43 +543,7 @@
return 0;
}
- int nor_write(u32 to, u32 len, u32 buf)
- {
- int ret;
- u32 page_offset, page_size, i;
- struct nor_info *info = spi_nor_flash;
-
- soft_spin_lock(NAND_SFLOCK);
- mutex_lock(&otpMutex);
-
- nor_write_reg(CMD_WREN, NULL, 0);
-
- page_offset = to & (info->page_size - 1);
- /* do all the bytes fit onto one page? */
- if (page_offset + len <= info->page_size) {
- ret = spi_nor_write(to, len, (uint8_t *)buf);
- } else {
- /* the size of data remaining on the first page */
- page_size = info->page_size - page_offset;
- ret = spi_nor_write(to, page_size, (uint8_t *)buf);
-
- /* read everything in nor->page_size chunks */
- for (i = page_size; i < len; i += page_size) {
- page_size = len - i;
- if (page_size > info->page_size)
- page_size = info->page_size;
-
- nor_write_reg(CMD_WREN, NULL, 0);
- ret = spi_nor_write(to + i, page_size, ((uint8_t *)buf + i));
- }
- }
-
- mutex_unlock(&otpMutex);
- soft_spin_unlock(NAND_SFLOCK);
-
- return ret;
- }
int spi_nor_read(uint32_t from, size_t len, u_char *buf)
{
int ret;
@@ -613,7 +578,61 @@
cs_close();//spp
return 0;
}
+
+ int nor_write(u32 to, u32 len, u32 buf)
+ {
+ int ret;
+ u32 page_offset, page_size, i;
+ struct nor_info *info = spi_nor_flash;
+ char temp_addr[4096] = {0};
+ unsigned long long start_time,end_time,delta_time = 0;
+
+ soft_spin_lock(NAND_SFLOCK);
+ mutex_lock(&otpMutex);
+
+ nor_write_reg(CMD_WREN, NULL, 0);
+
+ page_offset = to & (info->page_size - 1);
+ /* do all the bytes fit onto one page? */
+ if (page_offset + len <= info->page_size) {
+ ret = spi_nor_write(to, len, (uint8_t *)buf);
+ } else {
+ /* the size of data remaining on the first page */
+ page_size = info->page_size - page_offset;
+ ret = spi_nor_write(to, page_size, (uint8_t *)buf);
+
+ /* read everything in nor->page_size chunks */
+ for (i = page_size; i < len; i += page_size) {
+ page_size = len - i;
+ if (page_size > info->page_size)
+ page_size = info->page_size;
+
+ nor_write_reg(CMD_WREN, NULL, 0);
+ start_time = cpu_clock(0)>>10;
+ ret = spi_nor_write(to + i, page_size, ((uint8_t *)buf + i));
+ end_time = cpu_clock(0)>>10;
+ delta_time = end_time - start_time;
+ //printk("time consumed: %lld\n",delta_time);
+ spi_nor_read(to + i, page_size, ((uint8_t *)temp_addr));
+ while(memcmp(((uint8_t *)buf + i), ((uint8_t *)temp_addr),info->page_size)) {
+ printk("addr 0x%x write fail.\n",to+i);
+ nor_write_reg(CMD_WREN, NULL, 0);
+ start_time = cpu_clock(0)>>10;
+ ret = spi_nor_write(to + i, page_size, ((uint8_t *)buf + i));
+ end_time = cpu_clock(0)>>10;
+ delta_time = end_time - start_time;
+ printk("time consumed: %lld\n",delta_time);
+ spi_nor_read(to + i, page_size, ((uint8_t *)temp_addr));
+ }
+ }
+ }
+
+ mutex_unlock(&otpMutex);
+ soft_spin_unlock(NAND_SFLOCK);
+
+ return ret;
+ }
int nor_read(u32 from, u32 len, u32 to)
{
int ret;
diff --git a/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc-strategy.c b/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc-strategy.c
index bf90b0b..3ad800c 100755
--- a/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc-strategy.c
+++ b/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc-strategy.c
@@ -107,6 +107,8 @@
extern int zx29_set_frequency(unsigned int old_index,unsigned int new_index);
extern unsigned int zx_getspeed(unsigned int cpu);
#endif
+
+extern void zx29_restart(char str,const char * cmd);
/*******************************************************************************
* functions *
*******************************************************************************/
@@ -178,17 +180,21 @@
{
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2, g_bit_probe[probe_num] ,STRTEGY_START);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
+ tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_3)
{
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
+ tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_1)
{
- tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
+ //tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
+ tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_0)
{
+ tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_HOLD);
}
else
{
@@ -202,12 +208,14 @@
tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_STOP);
+ tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_STOP);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_2)
{
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2 ,g_bit_probe[probe_num], STRTEGY_STOP);
+ tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_STOP);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_4)
{
@@ -241,24 +249,20 @@
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_5)
{
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2, g_bit_probe[probe_num] ,STRTEGY_START);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_UPTRANSIMITPOWER2, g_bit_probe[probe_num] ,STRTEGY_START);
tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);//zDrvPow_SetArmPsCoreFreq(CLK312M);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_3)
{
tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);//zDrvPow_SetArmPsCoreFreq(CLK312M);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_1)
{
tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
- tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
+ //tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_0)
{
@@ -274,10 +278,8 @@
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2, g_bit_probe[probe_num], STRTEGY_STOP);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_UPTRANSIMITPOWER2, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_STOP);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_STOP);// zDrvPow_SetArmPsCoreFreq(CLK624M);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_2)
@@ -285,7 +287,7 @@
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2 ,g_bit_probe[probe_num], STRTEGY_STOP);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_UPTRANSIMITPOWER2 ,g_bit_probe[probe_num], STRTEGY_STOP);
+ tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_DOWNRATE2, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_STOP);// zDrvPow_SetArmPsCoreFreq(CLK624M);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_4)
@@ -294,7 +296,6 @@
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT,g_bit_probe[probe_num],STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_LIMIT_LTE_UPTRANSIMITPOWER2,g_bit_probe[probe_num],STRTEGY_STOP);
- // tsctrl_set_strategy2Iram(TSCTRL_LIMIT_W_UPTRANSIMITPOWER2,g_bit_probe[probe_num],STRTEGY_STOP);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_6)
{
@@ -398,25 +399,26 @@
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_7)
{
- tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num] ,STRTEGY_START);
+ // tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num] ,STRTEGY_START);
+ tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_5)
{
- tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
- tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);//zDrvPow_SetArmPsCoreFreq(CLK312M);
+ //tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
+ tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_3)
{
- tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
- tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);//zDrvPow_SetArmPsCoreFreq(CLK312M);
+ //tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
+ tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_1)
{
- tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
+ //tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_START);
}
else if(temperature>=TsNvData.Threshods[probe_num].THROSHOLD_0)
{
- tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_HOLD);
+ //tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_HOLD);
}
else
{
@@ -427,25 +429,25 @@
if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_0)
{
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
- tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
- tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_STOP);
+ // tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
+ // tsctrl_set_strategy2Iram(TSCTRL_PS_RATE, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_STOP);// zDrvPow_SetArmPsCoreFreq(CLK624M);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_2)
{
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
- tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
+ // tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT, g_bit_probe[probe_num], STRTEGY_STOP);
tsctrl_set_strategy2Iram(TSCTRL_DFS, g_bit_probe[probe_num], STRTEGY_STOP);// zDrvPow_SetArmPsCoreFreq(CLK624M);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_4)
{
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
- tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT,g_bit_probe[probe_num],STRTEGY_STOP);
+ //tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT,g_bit_probe[probe_num],STRTEGY_STOP);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_6)
{
tsctrl_set_strategy2Iram(TSCTRL_SHUTDOWN,g_bit_probe[probe_num],STRTEGY_STOP);
- tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT,g_bit_probe[probe_num],STRTEGY_STOP);
+ // tsctrl_set_strategy2Iram(TSCTRL_PS_ANYRESIDENT,g_bit_probe[probe_num],STRTEGY_STOP);
}
else if(temperature<TsNvData.Threshods[probe_num].THROSHOLD_8)
{
@@ -587,14 +589,15 @@
if(zDrvTsc_GetTscEn() == 0xB2)
{
if(TsNvData.User_En == 0xB2){
-
/*USER*/
if(tsc_read_reg(TSCTRL_SHUTDOWN)!=0){
/*user strategy start*/
tsc_set_reg_bits(TSCTRL_AP,BIT_SHUTDOWN,BITS_FOR_APPIRAM,STRTEGY_START);
+ sc_debug_info_record(MODULE_ID_AP_TSC, "tsc_reboot!!!\n" );
+ zx29_restart(NULL, "tsc_reboot!!!\n");
if(g_tsc_print_log_debug)
- tsc_print_log("user strategy start reserve \n")
+ tsc_print_log("user strategy start \n");
}
else{
//tsc_print_log("user strategy stop reserve \n")
diff --git a/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc.c b/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc.c
index 5d3bbba..7bd4b4a 100755
--- a/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc.c
+++ b/ap/os/linux/linux-3.4.x/drivers/soc/zte/tsc/zx-tsc.c
@@ -39,6 +39,10 @@
#define IRAM_TEMPCOMP_RFDDAC (IRAM_BASE_ADDR_SLAVE_AFC+0x8) //high16bit: the ADC value of temp
#define IRAM_TEMPCOMP_RFDTEMP (IRAM_BASE_ADDR_SLAVE_AFC+0xc) //temp of adcrfd
+#define RFDDAC_LOW 1
+#define RFDDAC_LOWE 1591
+#define RFDDAC_HIGHE 6096
+#define RFDDAC_HIGH 8191
volatile u32 g_adc1_flag = 0;//¨¨?adc1¨®?¨®¨²¨¬?2apa2¨¤???¨¨¡ê??¨°g_adc1_flag=1
volatile u32 g_adc2_flag = 0;//¨¨?adc2¨®?¨®¨²¨¬?2apa2¨¤???¨¨¡ê??¨°g_adc2_flag=1
@@ -557,11 +561,40 @@
if(g_adc3_flag==1){
adcRfValue = tsc_dac_read(IRAM_TEMPCOMP_DAC);
tsc_get_probe_adcvalue(adcRfValue,&tempRf, 0);
+ if((adcRfValue<RFDDAC_LOW)||(adcRfValue>RFDDAC_HIGH))
+ {
+ printk("!!!!!!!(adcRfValue < %d)||(adcRfValue > %d)\n", RFDDAC_LOW, RFDDAC_HIGH);
+ tempRf=25;
+ }
+ if((adcRfValue>=RFDDAC_LOW)&&(adcRfValue<=RFDDAC_LOWE))
+ {
+ printk("curcuit breakage(%d<=adcRfValue<= %d)\n", RFDDAC_LOW, RFDDAC_LOWE);
+ tempRf= -100 ;
+ }
+ if((adcRfValue>=RFDDAC_HIGHE)&&(adcRfValue<=RFDDAC_HIGH))
+ {
+ printk("curcuit short(%d<=adcRfValue<= %d)\n", RFDDAC_HIGHE, RFDDAC_HIGH);
+ tempRfd= -75 ;
+ }
}
if(TsNvData.AdcRFd_En==0xB2){
adcRfdValue =(zx_read_reg(IRAM_TEMPCOMP_RFDDAC)&0xffff0000)>>16;
tsc_get_probe_adcvalue(adcRfdValue,&tempRfd, 1);
- //tempRfd = zx_read_reg(IRAM_TEMPCOMP_RFDTEMP)>>10;
+ if((adcRfdValue<RFDDAC_LOW)||(adcRfdValue>RFDDAC_HIGH))
+ {
+ printk("!!!!!!!(adcRfdValue < %d)||(adcRfdValue > %d)\n", RFDDAC_LOW, RFDDAC_HIGH);
+ tempRfd=25;
+ }
+ if((adcRfdValue>=RFDDAC_LOW)&&(adcRfdValue<=RFDDAC_LOWE))
+ {
+ printk("curcuit breakage(%d<=adcRfdValue<= %d)\n", RFDDAC_LOW, RFDDAC_LOWE);
+ tempRfd= -100 ;
+ }
+ if((adcRfdValue>=RFDDAC_HIGHE)&&(adcRfdValue<=RFDDAC_HIGH))
+ {
+ printk("curcuit short(%d<=adcRfdValue<= %d)\n", RFDDAC_HIGHE, RFDDAC_HIGH);
+ tempRfd= -75 ;
+ }
}
tsc_lock();
@@ -598,6 +631,8 @@
tsc_print_log("adc1Value=%d,adc2Value=%d,adcRfValue=%d,temp1 = %d.temp2 = %d.temprf = %d.\n",
adc1Value,adc2Value,adcRfValue,temp1,temp2, g_ts_data_info[PROBE_ADCRF][TS_MEMBER_TEMP] );
}
+ tsc_print_log("DetectEn:0x%x; AdcRFd_En:0x%x; Modemrate_En:0x%x; TansmitPower_En:0x%x; Dfs_En:0x%x; User_En:0x%x;",
+ TsNvData.DetectEn, TsNvData.AdcRFd_En, TsNvData.Modemrate_En, TsNvData.TansmitPower_En, TsNvData.Dfs_En, TsNvData.User_En );
}
if((((tsc_record_time_cnt*TS_POLLING_TIME_S)%tsc_record_time)==0) && tsc_record_flag)
diff --git a/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/Makefile b/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/Makefile
old mode 100644
new mode 100755
index 2a540eb..f1622df
--- a/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/Makefile
+++ b/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/Makefile
@@ -4,6 +4,7 @@
ccflags-y += -Idrivers/staging/voicedrv/include
+ccflags-y += -I$(TOPDIR)/pub/project/$(CHIP_NAME)/include/nv
obj-$(CONFIG_VOICE_DRV) += voice_drv.o
voice_drv-$(CONFIG_VOICE_DRV) := voice.o
diff --git a/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/voice.c b/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/voice.c
old mode 100644
new mode 100755
index a4e39a0..a47acf0
--- a/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/voice.c
+++ b/ap/os/linux/linux-3.4.x/drivers/staging/voicedrv/voice.c
@@ -11,6 +11,7 @@
#include "voice.h"
+#include "RWNvConfig.h"
MODULE_LICENSE("GPL");
MODULE_AUTHOR("xxq");
@@ -44,6 +45,34 @@
#ifdef _USE_VEHICLE_DC
+#define VOICE_NVRW_MAX_LEN (8 * 1024)
+
+static unsigned char *voice_nvrw_param = NULL;
+
+static void voice_SetVoiceNVRW(void)
+{
+ unsigned char voice_nv_update = 0;
+
+ while(1){
+ CPPS_FUNC(cpps_callbacks, zDrvVp_UpdateVoiceNv)(&voice_nv_update);
+
+ if(1 == voice_nv_update){
+ print_audio("voice_SetVoiceNVRW voice_nv_update = %d!\n", voice_nv_update);
+ break;
+ }
+ }
+
+ if(CPPS_FUNC(cpps_callbacks, zOss_NvItemWrite)(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR, \
+ (voice_nvrw_param + 8), *((int*)voice_nvrw_param + 1))){
+ print_audio("voice_SetVoiceNVRW zOss_NvItemWrite error, update voice_nvrw fail!\n");
+ }
+ else{
+ print_audio("voice_SetVoiceNVRW zOss_NvItemWrite end, write len = %d!\n", *((int*)voice_nvrw_param + 1));
+ }
+
+ return;
+}
+
static int voice_SetMute(bool enable)
{
int ret = 0;
@@ -324,7 +353,7 @@
T_Voice_Para para;
//pr_info("start volte read \n");
if (copy_from_user(¶, argp, sizeof(para))) {
- print_audio("volte_ioctl stop copy_to_user err!\n");
+ print_audio("voice_ioctl stop copy_to_user err!\n");
return -EFAULT;
}
@@ -338,7 +367,7 @@
T_Voice_Para para;
if (copy_from_user(¶, argp, sizeof(para))) {
- print_audio("volte_ioctl stop copy_to_user err!\n");
+ print_audio("voice_ioctl stop copy_to_user err!\n");
return -EFAULT;
}
ret = voice_stop(para);
@@ -352,7 +381,7 @@
int para;
if (copy_from_user(¶, argp, sizeof(para))) {
- print_audio("volte_ioctl set vol copy_to_user err!\n");
+ print_audio("voice_ioctl set vol copy_to_user err!\n");
return -EFAULT;
}
ret = voice_SetVol(para);
@@ -377,7 +406,7 @@
bool para;
if (copy_from_user(¶, argp, sizeof(para))) {
- print_audio("volte_ioctl set vol copy_to_user err!\n");
+ print_audio("voice_ioctl set vol copy_to_user err!\n");
return -EFAULT;
}
ret = voice_SetMute(para);
@@ -402,7 +431,7 @@
int para;
if (copy_from_user(¶, argp, sizeof(para))) {
- print_audio("volte_ioctl set path copy_to_user err!\n");
+ print_audio("voice_ioctl set path copy_to_user err!\n");
return -EFAULT;
}
ret = voice_SetPath(para);
@@ -421,6 +450,28 @@
}
break;
}
+
+ case VOICE_IOCTL_SET_VOICE_NVRW: {
+ voice_nvrw_param = kzalloc((2 * sizeof(int) + VOICE_NVRW_MAX_LEN), GFP_KERNEL);
+ if(!voice_nvrw_param){
+ print_audio("voice_ioctl voice_nvrw_param malloc fail!\n");
+ return -EFAULT;
+ }
+
+ if (copy_from_user(voice_nvrw_param, argp, 2 * sizeof(int) + VOICE_NVRW_MAX_LEN)){
+ print_audio("voice_ioctl set voice nvrw copy_from_user err!\n");
+ return -EFAULT;
+ }
+
+ voice_SetVoiceNVRW();
+
+ if(voice_nvrw_param){
+ kfree(voice_nvrw_param);
+ voice_nvrw_param = NULL;
+ }
+
+ break;
+ }
#endif
case VOICE_IOCTL_GET_SLIC_USE_FLAG: {
@@ -441,7 +492,7 @@
int path;
if (copy_from_user(&path, argp, sizeof(path))) {
- print_audio("volte_ioctl zDrvVp_Loop copy_to_user err!\n");
+ print_audio("voice_ioctl zDrvVp_Loop copy_to_user err!\n");
return -EFAULT;
}
ret = CPPS_FUNC(cpps_callbacks, zDrvVp_Loop)(path);
diff --git a/ap/os/linux/linux-3.4.x/drivers/tty/serial/zx29_uart.c b/ap/os/linux/linux-3.4.x/drivers/tty/serial/zx29_uart.c
index e599f79..bb6e1c6 100755
--- a/ap/os/linux/linux-3.4.x/drivers/tty/serial/zx29_uart.c
+++ b/ap/os/linux/linux-3.4.x/drivers/tty/serial/zx29_uart.c
@@ -3366,11 +3366,11 @@
#endif
#if CONFIG_SERIAL_ZX29_DMA
- if(pdev->id != 1) //zw.wang modify for T106BUG-531 on 20240304
- {
+ if(pdev->id != DEBUG_CONSOLE)
+ {
uart_dma_init(port);
printk(KERN_INFO "[%s][%d]UART DMA is OPENED%d\n",__func__,__LINE__,pdev->id);
- }
+ }
#endif
ret=uart_add_one_port(&zx29_uart_driver, &port->port);
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_driver.c b/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_driver.c
index 997ad3c..3c5fedb 100755
--- a/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_driver.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_driver.c
@@ -800,9 +800,9 @@
dwc_otg_device->os_dep.base= ioremap(iomem->start, resource_size(iomem));
#ifdef CONFIG_RAMDUMP
- ramdump_ram_conf_table_add("usb_global.bin", ZX29_USB_GLOBAL_REG, USB_GLOBAL_SIZE, 0, RAMDUMP_FLAG_HAS_EXTERNAL, usb_global_reg);
- ramdump_ram_conf_table_add("usb_device.bin", ZX29_USB_DEVICE_REG, USB_DEVICE_SIZE, 0, RAMDUMP_FLAG_HAS_EXTERNAL, usb_device_reg);
- ramdump_ram_conf_table_add("usb_pwr_clk.bin", ZX29_USB_PWR_CLK_REG, USB_PWR_CLK_SIZE, 0, RAMDUMP_FLAG_HAS_EXTERNAL, usb_pwr_clk_reg);
+ ramdump_ram_conf_table_add("usb_global.bin", ZX29_USB_GLOBAL_REG, USB_GLOBAL_SIZE, 0, RAMDUMP_FLAG_HAS_EXTERNAL|RAMDUMP_FLAG_LEVEL_LOW, usb_global_reg);
+ ramdump_ram_conf_table_add("usb_device.bin", ZX29_USB_DEVICE_REG, USB_DEVICE_SIZE, 0, RAMDUMP_FLAG_HAS_EXTERNAL|RAMDUMP_FLAG_LEVEL_LOW, usb_device_reg);
+ ramdump_ram_conf_table_add("usb_pwr_clk.bin", ZX29_USB_PWR_CLK_REG, USB_PWR_CLK_SIZE, 0, RAMDUMP_FLAG_HAS_EXTERNAL|RAMDUMP_FLAG_LEVEL_LOW, usb_pwr_clk_reg);
#endif
#if 0
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_pwr.c b/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_pwr.c
old mode 100644
new mode 100755
index cb0b488..b2b9a8f
--- a/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_pwr.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/dwc_otg/dwc_otg_pwr.c
@@ -270,7 +270,7 @@
}
dwc_otg_hal_state.clk_state = 1;
clk_enable(pclk);
-// dwc_chg_udelay(20);
+ dwc_chg_udelay(20);
clk_enable(wclk);
USBHAL_DBG("**ENABLE CLOCK**");
}else{
@@ -281,6 +281,7 @@
dwc_otg_hal_state.clk_state = 0;
// dwc_chg_udelay(5);
clk_disable(pclk);
+ dwc_chg_udelay(20);
clk_disable(wclk);
USBHAL_DBG("**DISABLE CLOCK**");
}
@@ -337,6 +338,7 @@
//usb clock enable
dwc_otg_clk_enable(1);
+ dwc_chg_udelay(2000);
// usb ahb bus reset
reg_spin_lock();
value = ioread32(ZX29_SOC_USB_RSTEN);
@@ -382,7 +384,7 @@
value |= (1<<3);
iowrite32(value,ZX29_SOC_USB_RSTEN);
reg_spin_unlock();
- dwc_chg_udelay(10);
+ dwc_chg_udelay(1000);
value = 0;
while((ioread32(ZX29_SOC_USB_RESET_STATE)&0x02) == 0)
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/adb_server.c b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/adb_server.c
index 8426431..e3a24fe 100755
--- a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/adb_server.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/adb_server.c
@@ -544,7 +544,7 @@
while(!kthread_should_stop()){
/* we will block until we're online */
while (!dev->agent_start) {
- USBSTACK_DBG("adb_rpmsg_recv_thread: waiting foragt_start_wait\n");
+ USBSTACK_DBG("adb_rpmsg_recv_thread: waiting for agt_start_wait\n");
ret = wait_event_interruptible(dev->agt_start_wait,
( dev->agent_start ||kthread_should_stop()));
if (ret < 0) {
@@ -558,18 +558,27 @@
USBSTACK_DBG("unbind thread stop");
break;
}
+ if(!dev->agent_start){
+ USBSTACK_DBG("adb_rpmsg_recv_thread: agent_start not start\n");
+ continue;
+ }
USBSTACK_DBG("adb_rpmsg_recv_thread: now send request\n");
requeue_req:
+
+ if(!dev->online){
+ USBSTACK_DBG("rpmsg_recv dev is offline, agent_start:%d\n", dev->agent_start);
+ r = -EIO;
+ goto done;
+ }
+ if(!dev->rx_req){
+ USBSTACK_DBG("adb_rpmsg_recv_thread, rx_req is NULL\n");
+ continue;
+ }
/* queue a request */
req = dev->rx_req;
req->length = ADB_BULK_BUFFER_SIZE;
dev->rx_done = 0;
- if(!dev->online){
- USBSTACK_DBG("rpmsg_recv dev is offline\n");
- r = -EIO;
- goto done;
- }
#if 0
if(atomic_read(&dev->adb_read_flag)){
printk("\nadb_rpmsg_recv_thread adb_read_flag, wait_read_wq\n");
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/android.c b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/android.c
index cb4a4cc..d456ddd 100755
--- a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/android.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/android.c
@@ -79,6 +79,7 @@
#ifndef CONFIG_SYSTEM_RECOVERY
int zDrvNand_WriteBootflag( int flag );
+unsigned int zDrvNand_ReadBootflag(void);
#endif
#define pr_err USB_DEBUG
@@ -3193,8 +3194,16 @@
spin_unlock_irqrestore(&cdev->lock, flags);
break;
- //case :
- // break;
+ case USB_RPMSG_GET_USB_DL_STATE:
+ t_resp->cmd = USB_RPMSG_GET_USB_DL_STATE;
+ spin_lock_irqsave(&cdev->lock, flags);
+#ifndef CONFIG_SYSTEM_RECOVERY
+ //1:dl_off;0:dl_oen
+ n = zDrvNand_ReadBootflag();
+ sprintf(t_resp->param, "%d\n",n);
+#endif
+ spin_unlock_irqrestore(&cdev->lock, flags);
+ break;
//case :
// break;
default:
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/f_adb.c b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/f_adb.c
index a2ae7c9..91c1c62 100755
--- a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/f_adb.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/f_adb.c
@@ -375,15 +375,16 @@
#endif
requeue_req:
- /* queue a request */
- req = dev->rx_req;
- req->length = count;
- dev->rx_done = 0;
if(!dev->online){
USBSTACK_DBG("adb_read dev is offline\n");
r = -EIO;
goto done;
}
+ /* queue a request */
+ req = dev->rx_req;
+ req->length = count;
+ dev->rx_done = 0;
+
USBSTACK_DBG("adb_read waiting usb_ep_queue \n");
ret = usb_ep_queue(dev->ep_out, req, GFP_ATOMIC);
if (ret < 0) {
@@ -711,6 +712,7 @@
}
#endif
adb_request_free(dev->rx_req, dev->ep_out);
+ dev->rx_req = NULL;
while ((req = adb_req_get(dev, &dev->tx_idle)))
adb_request_free(req, dev->ep_in);
}
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_netlink.c b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_netlink.c
index c042a78..9aafd3b 100755
--- a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_netlink.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_netlink.c
@@ -32,8 +32,9 @@
extern int adb_enable_rpmsg_agent(int flag);
extern int adb_rpmsg_agent_state(void);
- int switch_mode = 0;
- int simulate_plug = 0;
+int switch_mode = 0;
+
+int simulate_plug = 0;
struct work_struct switch_usbmode;
extern int usb_plug_notify_ap(e_usb_rpmsg_cmd_type plug_type);
struct delayed_work plug_notify_dwork;
@@ -1040,7 +1041,7 @@
}
EXPORT_SYMBOL_GPL(usb_set_rpmsg_resp);
-void usb_parse_cap_notify(int type)
+void usb_parse_cap_notify(int type, int param)
{
int cur_usbmode = 0;
@@ -1146,8 +1147,27 @@
#endif
break;
case USB_RPMSG_SIMULATE_PLUG:
- simulate_plug = 1;
- usb_record_dbginfo(USB_SIMULATE_PLUG, 0, 0);
+ if(param != 0){
+ /*this is for vehicle
+ *on usermode,open/close net/adb need to take effect immediately,
+ *so while param not 0, means we need to do this action.
+ * and send netlink change sg to user thread to reread the nv config
+ * and reenum again
+ */
+ cur_usbmode = get_usb_enum_mode();
+ printk("USB_RPMSG_SIMULATE_PLUG, cur_mode:%d\n", cur_usbmode);
+ if(cur_usbmode == 1){
+ //only user mode need to do so
+ switch_mode = USB_SWITCH_USER;
+ schedule_work(&switch_usbmode);
+
+ }
+ break;
+ }else{
+ //here just send except to do simulate plug
+ simulate_plug = 1;
+ }
+ usb_record_dbginfo(USB_SIMULATE_PLUG, 0, param);
schedule_work(&switch_usbmode);
break;
diff --git a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_rpmsg_server.c b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_rpmsg_server.c
index c7daeda..32719e1 100755
--- a/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_rpmsg_server.c
+++ b/ap/os/linux/linux-3.4.x/drivers/usb/gadget/usb_rpmsg_server.c
@@ -35,7 +35,7 @@
extern void usb_set_rpmsg_resp(int type, char*resp);
extern void android_set_rpmsg_resp(int type, char*resp);
-extern void usb_parse_cap_notify(int type);
+extern void usb_parse_cap_notify(int type, int param);
struct task_struct *rpmsg_thread;
wait_queue_head_t usb_agt_wq;
@@ -138,7 +138,7 @@
{
int i;
unsigned char *data;
-
+ int v_param = 0;
char*tmp= (char*)buf;
usb_rpmsg_cmd *msg = NULL;
@@ -163,8 +163,10 @@
memcpy(usb_msg,buf, len);
//usb_rpmsg2ap((char *)buf, len);
msg = (usb_rpmsg_cmd *)usb_msg;
- if(msg->cmd > USB_RPMSG_CMD_MAX){
- usb_parse_cap_notify(msg->cmd);
+ if(msg->cmd > USB_RPMSG_CMD_MAX){
+ v_param = simple_strtoul(msg->param, NULL, 10);
+
+ usb_parse_cap_notify(msg->cmd, v_param);
return;
}
atomic_set(&rpmsg_flag, 1);