diff --git a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_attrs.c b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_attrs.c index f81b9896767b..bf2db5fbe93a 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_attrs.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_attrs.c @@ -219,10 +219,14 @@ static ssize_t hdmirx_ext_video_mode_show(struct device *dev, mode_str = __plat_get_video_mode_name(mode); - if (strcmp(mode_str, "invalid") != 0) - strcat(hdmi_mode_str, mode_str); - else - strcpy(hdmi_mode_str, mode_str); + if (strcmp(mode_str, "invalid") != 0) { + if (strlen(mode_str) < + (sizeof(hdmi_mode_str) - strlen(hdmi_mode_str))) + strcat(hdmi_mode_str, mode_str); + } else { + if (strlen(mode_str) < sizeof(hdmi_mode_str)) + strcpy(hdmi_mode_str, mode_str); + } return sprintf(buf, "%s\n", hdmi_mode_str); } @@ -268,7 +272,8 @@ static ssize_t hdmirx_ext_audio_sr_show(struct device *dev, }; audio_sr = __hw_get_audio_sample_rate(); - if ((audio_sr < 0) || (audio_sr > sizeof(audio_sr_array))) + if ((audio_sr < 0) || + (audio_sr >= (sizeof(audio_sr_array)/sizeof(char *)))) audio_sr = 0; return sprintf(buf, "%s\n", audio_sr_array[audio_sr]); diff --git a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_hw_iface.c b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_hw_iface.c index 494ea143e565..d91470a1ab07 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_hw_iface.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hdmirx_ext_hw_iface.c @@ -193,7 +193,10 @@ int __hw_enable(void) { struct hdmirx_ext_drv_s *hdrv = hdmirx_ext_get_driver(); - if ((hdrv) && (hdrv->hw.enable)) + if (!hdrv) + return -1; + + if (hdrv->hw.enable) return hdrv->hw.enable(); hdrv->state = 1; @@ -206,8 +209,12 @@ void __hw_disable(void) { struct hdmirx_ext_drv_s *hdrv = hdmirx_ext_get_driver(); + if (!hdrv) + return; + hdrv->state = 0; - if ((hdrv) && (hdrv->hw.disable)) + + if (hdrv->hw.disable) hdrv->hw.disable(); } diff --git a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/SiIInfoPkts.c b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/SiIInfoPkts.c index 6d8e9df21067..5f68556975b8 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/SiIInfoPkts.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/SiIInfoPkts.c @@ -276,17 +276,17 @@ static void SetAVI_Info(struct AVIType_s *AVI, BYTE *Data) bAVI = Data[IF_HEADER_LENGTH] & ColorSpaceMask; if (bAVI == RGB) AVI->bInputColorSpace = SiI_RX_ICP_RGB; - else if (bAVI == YCbCr422) + else if (bAVI == (BYTE)YCbCr422) AVI->bInputColorSpace = SiI_RX_ICP_YCbCr422; - else if (bAVI == YCbCr444) + else if (bAVI == (BYTE)YCbCr444) AVI->bInputColorSpace = SiI_RX_ICP_YCbCr444; bAVI = Data[IF_HEADER_LENGTH + 1] & ColorimetryMask; if (bAVI == NoInfo) AVI->bColorimetry = SiI_RX_ColorimetryNoInfo; - else if (bAVI == ITU601) + else if (bAVI == (BYTE)ITU601) AVI->bColorimetry = SiI_RX_ITU_601; - else if (bAVI == ITU709) + else if (bAVI == (BYTE)ITU709) AVI->bColorimetry = SiI_RX_ITU_709; AVI->bPixRepl = Data[IF_HEADER_LENGTH + 4] & PixReplicationMask; diff --git a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UCfgRX.c b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UCfgRX.c index a374b5b61b6d..ed22138dfaf4 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UCfgRX.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UCfgRX.c @@ -51,7 +51,7 @@ BYTE siiGetPCB_Id(void) */ void InitEEPROMWithDefaults(void) { - BYTE abData[6]; + BYTE abData[7]; abData[0] = RX_API_ID_L; abData[1] = RX_API_ID_H; @@ -182,7 +182,7 @@ static void PrintIntilizeSystemWith(BYTE *pbInitData) */ static BYTE siiRXAPIConfig(void) { - BYTE abData[6]; + BYTE abData[8]; BYTE bError; WORD wDevId; diff --git a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UEEPROM.c b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UEEPROM.c index 97b68a1ce080..cfbd42b253a9 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UEEPROM.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx_ext/hw_sii9135/UEEPROM.c @@ -94,7 +94,7 @@ void siiBlockWriteEEPROM(WORD Addr, BYTE NBytes, BYTE *Data) hlBlockWrite_8BAS((struct I2CShortCommandType_s *)&I2CComm, Data); #endif - hlWaitForAck(bEEPROMSlaveAddr, 100); + /*hlWaitForAck(bEEPROMSlaveAddr, 100);*/ } /*----------------------------------------------------------------------*/ diff --git a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_avin_detect.c b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_avin_detect.c index f36a177ddc95..ebca5bacb875 100644 --- a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_avin_detect.c +++ b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_avin_detect.c @@ -449,7 +449,7 @@ static void tvafe_avin_detect_state(struct tvafe_avin_det_s *avdev) static void tvafe_avin_detect_parse_param(char *buf_orig, char **parm) { char *ps, *token; - char delim1[2] = " "; + char delim1[3] = " "; char delim2[2] = "\n"; unsigned int n = 0; diff --git a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c index ceea121a2534..2421a5476d9d 100644 --- a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c +++ b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c @@ -392,7 +392,7 @@ static void tvafe_cvd2_write_mode_reg(struct tvafe_cvd2_s *cvd2, } - } else{ + } else { for (i = 0; i < (ACD_REG_NUM+1); i++) { @@ -462,7 +462,7 @@ static void tvafe_cvd2_write_mode_reg(struct tvafe_cvd2_s *cvd2, ADAPTIVE_CHROMA_MODE_BIT, ADAPTIVE_CHROMA_MODE_WID); W_APB_BIT(CVD2_CONTROL1, 0, CHROMA_BW_LO_BIT, CHROMA_BW_LO_WID); - } else{ + } else { W_APB_REG(CVD2_VSYNC_NO_SIGNAL_THRESHOLD, 0xf0); if (cvd2->config_fmt == TVIN_SIG_FMT_CVBS_PAL_I) /*add for chroma state adjust dynamicly*/ @@ -642,7 +642,7 @@ static void tvafe_cvd2_non_std_config(struct tvafe_cvd2_s *cvd2) /* vsync signal is not good */ W_APB_REG(CVD2_NOISE_THRESHOLD, 0x00); - } else{ + } else { if (scene_colorful) W_APB_REG(CVD2_VSYNC_CNTL, 0x02); @@ -654,7 +654,7 @@ static void tvafe_cvd2_non_std_config(struct tvafe_cvd2_s *cvd2) } #endif - } else{ + } else { if (cvd_nonstd_dbg_en) tvafe_pr_info("%s: out of non-std signal.\n", __func__); @@ -700,7 +700,7 @@ static void tvafe_cvd2_non_std_config(struct tvafe_cvd2_s *cvd2) W_APB_BIT(CVD2_ACTIVE_VIDEO_VHEIGHT, 0xc0, VACTIVE_HEIGHT_BIT, VACTIVE_HEIGHT_WID); - } else{ + } else { W_APB_BIT(CVD2_VSYNC_SIGNAL_THRESHOLD, 0, VS_SIGNAL_AUTO_TH_BIT, VS_SIGNAL_AUTO_TH_WID); @@ -1226,7 +1226,7 @@ static void tvafe_cvd2_non_std_signal_det( cvd2->info.non_std_enable = 1; - } else{ + } else { cvd2->info.non_std_enable = 0; } @@ -1248,7 +1248,7 @@ static bool tvafe_cvd2_sig_unstable(struct tvafe_cvd2_s *cvd2) if (cvd2->hw.no_sig)/* || !cvd2->hw.h_lock) */ ret = true; - } else{ + } else { if (cvd2->hw.no_sig || !cvd2->hw.h_lock || !cvd2->hw.v_lock) ret = true; @@ -1381,7 +1381,7 @@ static bool tvafe_cvd2_condition_shift(struct tvafe_cvd2_s *cvd2) __func__); } - } else{ + } else { if (R_APB_BIT(CVD2_CHROMA_DTO_INCREMENT_23_16, CDTO_INC_23_16_BIT, CDTO_INC_23_16_WID) != @@ -1738,7 +1738,7 @@ static void tvafe_cvd2_search_video_mode(struct tvafe_cvd2_s *cvd2, /* line525 + 358 =>*/ /*confirm NTSC_M */ cvd2->info.state = TVAFE_CVD2_STATE_FIND; - } else{ + } else { if (cvd_dbg_en) tvafe_pr_info("%s dismatch ntsc m line625 %d, fsc358 %d,pal %d", __func__, cvd2->hw.line625, @@ -2017,7 +2017,7 @@ inline bool tvafe_cvd2_no_sig(struct tvafe_cvd2_s *cvd2, ret = true; tvafe_cvd2_reinit(cvd2); - } else{ + } else { ret = false; cvd2->cvd2_init_en = false; #ifdef TVAFE_CVD2_AUTO_DE_ENABLE @@ -2135,7 +2135,7 @@ inline void tvafe_cvd2_adj_pga(struct tvafe_cvd2_s *cvd2) pga += step; if (pga >= 255) /* set max value */ pga = 255; - } else{ + } else { if (pga < step) /* set min value */ pga = 0; else diff --git a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_debug.c b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_debug.c index 5d2963296856..0626b691074e 100644 --- a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_debug.c +++ b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_debug.c @@ -178,7 +178,7 @@ static void tvafe_state(struct tvafe_dev_s *devp) static void tvafe_parse_param(char *buf_orig, char **parm) { char *ps, *token; - char delim1[2] = " "; + char delim1[3] = " "; char delim2[2] = "\n"; unsigned int n = 0; @@ -355,7 +355,7 @@ static ssize_t tvafe_dumpmem_store(struct device *dev, char *buf_orig, *ps, *token; char *parm[6] = {NULL}; struct tvafe_dev_s *devp; - char delim1[2] = " "; + char delim1[3] = " "; char delim2[2] = "\n"; strcat(delim1, delim2); @@ -372,7 +372,7 @@ static ssize_t tvafe_dumpmem_store(struct device *dev, if (*token == '\0') continue; parm[n++] = token; - } + } if (!strncmp(parm[0], "dumpmem", strlen("dumpmem"))) { if (parm[1] != NULL) { struct file *filp = NULL; diff --git a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_vbi.c b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_vbi.c index b8edaf035e56..21a3ee5df45b 100644 --- a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_vbi.c +++ b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_vbi.c @@ -348,7 +348,8 @@ static int vbi_buffer_write(struct vbi_ringbuffer_s *buf, tvafe_pr_info("%s: buffer len is zero\n", __func__); return 0; } - if (!buf->data) { + + if ((buf == NULL) || (buf->data == NULL)) { if (capture_print_en) tvafe_pr_info("%s: buffer data pointer is zero\n", __func__); @@ -465,9 +466,6 @@ unsigned char *search_table(unsigned char *table_start_addr, tvafe_pr_info("search_table add err: start=%p,search=%p,end=%p\n", table_start_addr, search_point, table_end_addr); return NULL; - } else if (search_size > VBI_BUFF2_SIZE) { - tvafe_pr_info("search_size out of range\n"); - return NULL; } while (count++ < table_size) { @@ -834,7 +832,7 @@ void vbi_ringbuffer_reset(struct vbi_ringbuffer_s *rbuf) } static int vbi_set_buffer_size(struct vbi_dev_s *dev, - unsigned long size) + unsigned int size) { struct vbi_slicer_s *vbi_slicer = dev->slicer; struct vbi_ringbuffer_s *buf = &vbi_slicer->buffer; @@ -960,7 +958,7 @@ static ssize_t vbi_buffer_read(struct vbi_ringbuffer_s *src, ssize_t ret = 0; ssize_t timeout = 0; - if (!src->data) { + if ((src == NULL) || (src->data == NULL)) { tvafe_pr_info("%s: data null\n", __func__); return 0; } @@ -1102,7 +1100,7 @@ static long vbi_ioctl(struct file *file, { int ret = 0; void __user *argp = (void __user *)arg; - unsigned long buffer_size_t; + unsigned int buffer_size_t; struct vbi_dev_s *vbi_dev = file->private_data; struct vbi_slicer_s *vbi_slicer = vbi_dev->slicer; @@ -1282,7 +1280,7 @@ static struct resource vbi_memobj; static void vbi_parse_param(char *buf_orig, char **parm) { char *ps, *token; - char delim1[2] = " "; + char delim1[3] = " "; char delim2[2] = "\n"; unsigned int n = 0; @@ -1378,13 +1376,17 @@ static ssize_t vbi_store(struct device *dev, char *buf_orig; char *parm[6] = {NULL}; struct vbi_dev_s *devp = dev_get_drvdata(dev); - struct vbi_slicer_s *vbi_slicer = devp->slicer; - struct vbi_ringbuffer_s *vbi_buffer = &(vbi_slicer->buffer); + struct vbi_slicer_s *vbi_slicer; + struct vbi_ringbuffer_s *vbi_buffer; long val; int ret = 0; if (!buff || !devp) return len; + + vbi_slicer = devp->slicer; + vbi_buffer = &(vbi_slicer->buffer); + buf_orig = kstrdup(buff, GFP_KERNEL); vbi_parse_param(buf_orig, (char **)&parm); if (!strncmp(parm[0], "dumpmem", strlen("dumpmem"))) { @@ -1450,7 +1452,7 @@ static ssize_t vbi_store(struct device *dev, } else if (!strncmp(parm[0], "set_size", strlen("set_size"))) { if (kstrtol(parm[1], 10, &val) < 0) return -EINVAL; - vbi_set_buffer_size(devp, val); + vbi_set_buffer_size(devp, (unsigned int)val); tvafe_pr_info(" set buf size to %d\n", vbi_slicer->buffer.size); } else if (!strncmp(parm[0], "set_type", strlen("set_type"))) { diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c index 55ca28b930f3..fcf893193b7f 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c @@ -3776,7 +3776,7 @@ int vdin_event_cb(int type, void *data, void *op_arg) req->low_latency = 0; if (req->bot_flag) index = (req->vf->index >> 8) & 0xff; - if (index != 0xff && index >= 0 + if (index != 0xff && index < p->size && p->dv_buf[index]) { req->aux_buf = p->dv_buf[index]; diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c index d7b9534eb6b5..d0d5a880fdc7 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_debug.c @@ -76,7 +76,7 @@ static void vdin_set_before_after_mat0(unsigned int offset, static void vdin_parse_param(char *buf_orig, char **parm) { char *ps, *token; - char delim1[2] = " "; + char delim1[3] = " "; char delim2[2] = "\n"; unsigned int n = 0; ps = buf_orig; @@ -1673,7 +1673,7 @@ static ssize_t vdin_cm2_store(struct device *dev, unsigned int addr_port = VDIN_CHROMA_ADDR_PORT; unsigned int data_port = VDIN_CHROMA_DATA_PORT; long val; - char delim1[2] = " "; + char delim1[3] = " "; char delim2[2] = "\n"; strcat(delim1, delim2); diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c index 76814b734396..99713609be95 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_drv.c @@ -1160,7 +1160,7 @@ irqreturn_t vdin_isr(int irq, void *dev_id) unsigned int stamp = 0; struct tvin_state_machine_ops_s *sm_ops; int vdin2nr = 0; - unsigned int offset, vf_drop_cnt; + unsigned int offset = 0, vf_drop_cnt = 0; enum tvin_trans_fmt trans_fmt; struct tvin_sig_property_s *prop, *pre_prop; @@ -1170,6 +1170,15 @@ irqreturn_t vdin_isr(int irq, void *dev_id) * because the spinlock may affect the system time. */ + /* avoid null pointer oops */ + if (!devp) + return IRQ_HANDLED; + + if (!devp->frontend) { + devp->vdin_irq_flag = 1; + goto irq_handled; + } + /* ignore fake irq caused by sw reset*/ if (devp->vdin_reset_flag) { devp->vdin_reset_flag = 0; @@ -1177,11 +1186,6 @@ irqreturn_t vdin_isr(int irq, void *dev_id) } vf_drop_cnt = vdin_drop_cnt; - /* avoid null pointer oops */ - if (!devp || !devp->frontend) { - devp->vdin_irq_flag = 1; - goto irq_handled; - } offset = devp->addr_offset; isr_log(devp->vfp); @@ -1840,7 +1844,7 @@ static int vdin_release(struct inode *inode, struct file *file) static long vdin_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { long ret = 0; - int callmaster_status; + int callmaster_status = 0; struct vdin_dev_s *devp = NULL; void __user *argp = (void __user *)arg; diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_vf.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_vf.c index 5a245157b979..7b9d5112b14d 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_vf.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_vf.c @@ -956,7 +956,7 @@ void vdin_vf_disp_mode_update(struct vf_entry *vfe, struct vf_pool *p) vfe->vf.index_disp = p->disp_index[0]; p->disp_mode[p->disp_index[p->skip_vf_num]] = VFRAME_DISP_MODE_OK; - for (i = p->skip_vf_num - 1; (i >= 0) && (i < VFRAME_DISP_MAX_NUM); i--) + for (i = p->skip_vf_num - 1; i < VFRAME_DISP_MAX_NUM; i--) p->disp_mode[p->disp_index[i]] = VFRAME_DISP_MODE_UNKNOWN; } /*disp mode skip @@ -968,7 +968,7 @@ void vdin_vf_disp_mode_skip(struct vf_pool *p) { unsigned int i; - for (i = p->skip_vf_num - 1; (i >= 0) && (i < VFRAME_DISP_MAX_NUM); i--) + for (i = p->skip_vf_num - 1; i < VFRAME_DISP_MAX_NUM; i--) p->disp_mode[i] = VFRAME_DISP_MODE_SKIP; }