int os_gpio_set_status(u32 p_handler, __u32 if_set_to_output_status, const char *gpio_name) { int ret = 0; #ifdef VFE_GPIO if(p_handler) { if(if_set_to_output_status) { ret = gpio_direction_output(p_handler, 0); if(ret != 0) { vfe_warn("gpio_direction_output fail!\n"); } } else { ret = gpio_direction_input(p_handler); if(ret != 0) { vfe_warn("gpio_direction_input fail!\n"); } } } else { vfe_warn("os_gpio_set_status, hdl is NULL\n"); ret = -1; } #endif return ret; }
int fetch_isp_tbl(struct isp_init_config *isp_ini_cfg, char* tbl_patch) { int len, ret = 0; char isp_gamma_tbl_path[128] = "\0",isp_hdr_tbl_path[128] = "\0",isp_lsc_tbl_path[128] = "\0"; char *buf; strcpy(isp_gamma_tbl_path, tbl_patch); strcpy(isp_hdr_tbl_path, tbl_patch); strcpy(isp_lsc_tbl_path, tbl_patch); strcat(isp_gamma_tbl_path, "gamma_tbl.bin"); strcat(isp_hdr_tbl_path, "hdr_tbl.bin"); strcat(isp_lsc_tbl_path, "lsc_tbl.bin"); printk("isp_tbl_path = %s\n",isp_gamma_tbl_path); buf = (char*)kzalloc(SIZE_OF_LSC_TBL,GFP_KERNEL); /* fetch gamma_tbl table! */ len = cfg_read_file(isp_gamma_tbl_path,buf,SIZE_OF_GAMMA_TBL); if(len < 0) { vfe_warn("read gamma_tbl from gamma_tbl.bin failed!\n"); ret = -1; } else { memcpy(isp_ini_cfg->isp_tunning_settings.gamma_tbl, buf, len); } /* fetch lsc table! */ len = cfg_read_file(isp_lsc_tbl_path,buf,SIZE_OF_LSC_TBL); if(len < 0) { vfe_warn("read lsc_tbl from lsc_tbl.bin failed!\n"); ret = -1; } else { memcpy(isp_ini_cfg->isp_tunning_settings.lsc_tbl, buf, len); } /* fetch hdr_tbl table!*/ len = cfg_read_file(isp_hdr_tbl_path,buf,SIZE_OF_HDR_TBL); if(len < 0) { vfe_warn("read hdr_tbl from hdr_tbl.bin failed!\n"); ret = -1; } else { memcpy(isp_ini_cfg->isp_tunning_settings.hdr_tbl, buf, len); } if(buf) { kfree(buf); } return ret; }
int fetch_isp_cfg(struct isp_init_config *isp_ini_cfg, struct cfg_section *cfg_section, struct FileAttribute *file_attr) { int i, j, *array_value; struct cfg_subkey subkey; struct IspParamAttribute *param; char sub_name[128] = {0}; /* fetch ISP isp_test_mode! */ for (i = 0; i < file_attr->param_len; i++) { param = file_attr->pIspParam + i; if(param->main == NULL || param->sub == NULL) { vfe_warn("param->main or param->sub is NULL!\n"); continue; } if(param->len == 1) { if (CFG_ITEM_VALUE_TYPE_INT != cfg_get_one_subkey(cfg_section,param->main, param->sub, &subkey)) { vfe_dbg(0,"Warning: %s->%s,apply default value!\n",param->main, param->sub); } else { if(param->set_param) { param->set_param(isp_ini_cfg, (void *)&subkey.value->val, param->len); vfe_dbg(0,"fetch_isp_cfg_single: %s->%s = %d\n",param->main, param->sub,subkey.value->val); } } } else if(param->len > 1) { array_value = (int*)kzalloc(param->len*sizeof(int),GFP_KERNEL); for(j = 0;j<param->len;j++) { sprintf(sub_name, "%s%d",param->sub, j); if (CFG_ITEM_VALUE_TYPE_INT != cfg_get_one_subkey(cfg_section,param->main,sub_name,&subkey)) { vfe_warn("fetch %s from %s failed,apply default value!\n",sub_name,param->main); } else { array_value[j] = subkey.value->val; if(param->set_param && j == (param->len-1)) { param->set_param(isp_ini_cfg, (void *)array_value, param->len); } vfe_dbg(0,"fetch_isp_cfg_array: %s->%s = %d\n",param->main, sub_name, subkey.value->val); } } if(array_value) kfree(array_value); } } vfe_dbg(0,"fetch isp_cfg done!\n"); return 0; }
__hdle os_gpio_request(struct vfe_gpio_cfg *gpio_list, __u32 group_count_max) { #ifdef VFE_GPIO __hdle ret = 0; struct gpio_config pin_cfg; if(gpio_list == NULL) return 0; if(gpio_list->gpio == GPIO_INDEX_INVALID) return 0; pin_cfg.gpio = gpio_list->gpio; pin_cfg.mul_sel = gpio_list->mul_sel; pin_cfg.pull = gpio_list->pull; pin_cfg.drv_level = gpio_list->drv_level; pin_cfg.data = gpio_list->data; ret = gpio_request(pin_cfg.gpio, NULL); if(0 != ret) { vfe_warn("os_gpio_request failed, gpio_name=%s, gpio=%d, ret=0x%x, %d\n", gpio_list->gpio_name, gpio_list->gpio, ret, ret); return 0; } return pin_cfg.gpio; #else return 0; #endif }
struct clk *os_clk_get(struct device *dev, const char *id) { #ifdef VFE_CLK struct clk *clk_p; clk_p = clk_get(dev, id); if(clk_p == NULL) vfe_warn("Get clk %s is NULL!\n",id); return clk_p; #else return NULL; #endif }
int os_clk_set_rate(struct clk *clk, unsigned long rate) { #ifdef VFE_CLK int ret; ret = clk_set_rate(clk, rate); if(ret < 0) { vfe_warn("Set clk rate %ld is ERR!\n",rate); } return ret; #else return 0; #endif }
int os_gpio_release(__hdle p_handler, __s32 if_release_to_default_status) { #ifdef VFE_GPIO if(p_handler) { gpio_free(p_handler); } else { vfe_warn("os_gpio_release, hdl is NULL\n"); } #endif return 0; }
int os_gpio_set(struct vfe_gpio_cfg *gpio_list, __u32 group_count_max) { #ifdef VFE_GPIO int ret = 0; struct gpio_config pin_cfg; char pin_name[32]; __u32 config; if(gpio_list == NULL) return 0; if(gpio_list->gpio == GPIO_INDEX_INVALID) return 0; pin_cfg.gpio = gpio_list->gpio; pin_cfg.mul_sel = gpio_list->mul_sel; pin_cfg.pull = gpio_list->pull; pin_cfg.drv_level = gpio_list->drv_level; pin_cfg.data = gpio_list->data; if (!IS_AXP_PIN(pin_cfg.gpio)) { /* valid pin of sunxi-pinctrl, * config pin attributes individually. */ sunxi_gpio_to_name(pin_cfg.gpio, pin_name); config = SUNXI_PINCFG_PACK(SUNXI_PINCFG_TYPE_FUNC, pin_cfg.mul_sel); pin_config_set(SUNXI_PINCTRL, pin_name, config); if (pin_cfg.pull != GPIO_PULL_DEFAULT) { config = SUNXI_PINCFG_PACK(SUNXI_PINCFG_TYPE_PUD, pin_cfg.pull); pin_config_set(SUNXI_PINCTRL, pin_name, config); } if (pin_cfg.drv_level != GPIO_DRVLVL_DEFAULT) { config = SUNXI_PINCFG_PACK(SUNXI_PINCFG_TYPE_DRV, pin_cfg.drv_level); pin_config_set(SUNXI_PINCTRL, pin_name, config); } if (pin_cfg.data != GPIO_DATA_DEFAULT) { config = SUNXI_PINCFG_PACK(SUNXI_PINCFG_TYPE_DAT, pin_cfg.data); pin_config_set(SUNXI_PINCTRL, pin_name, config); } } else if (IS_AXP_PIN(pin_cfg.gpio)) { /* valid pin of axp-pinctrl, * config pin attributes individually. */ sunxi_gpio_to_name(pin_cfg.gpio, pin_name); config = SUNXI_PINCFG_PACK(SUNXI_PINCFG_TYPE_FUNC, pin_cfg.mul_sel); pin_config_set(AXP_PINCTRL, pin_name, config); if (pin_cfg.data != GPIO_DATA_DEFAULT) { config = SUNXI_PINCFG_PACK(SUNXI_PINCFG_TYPE_DAT, pin_cfg.data); pin_config_set(AXP_PINCTRL, pin_name, config); } } else { vfe_warn("invalid pin [%d] from sys-config\n", pin_cfg.gpio); return -1; } return ret; #else return 0; #endif }
int fetch_config(struct vfe_dev *dev) { #ifndef FPGA_VER int ret; unsigned int i,j; char vfe_para[16] = {0}; char dev_para[16] = {0}; script_item_u val; script_item_value_type_e type; sprintf(vfe_para, "vip%d_para", dev->id); /* fetch device quatity issue */ type = script_get_item(vfe_para,"vip_dev_qty", &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->dev_qty=1; vfe_err("fetch csi_dev_qty from sys_config failed\n"); } else { dev->dev_qty=val.val; vfe_dbg(0,"vip%d_para vip_dev_qty=%d\n",dev->id, dev->dev_qty); } for(i=0; i<dev->dev_qty; i++) { /* i2c and module name*/ sprintf(dev_para, "vip_dev%d_twi_id", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_err("fetch vip_dev%d_twi_id from sys_config failed\n", i); } else { dev->ccm_cfg[i]->twi_id = val.val; } ret = strcmp(dev->ccm_cfg[i]->ccm,""); if((dev->ccm_cfg[i]->i2c_addr == 0xff) && (ret == 0)) //when insmod without parm { sprintf(dev_para, "vip_dev%d_twi_addr", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_err("fetch vip_dev%d_twi_addr from sys_config failed\n", i); } else { dev->ccm_cfg[i]->i2c_addr = val.val; } sprintf(dev_para, "vip_dev%d_mname", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_STR != type) { char tmp_str[]="ov5650"; strcpy(dev->ccm_cfg[i]->ccm,tmp_str); vfe_err("fetch vip_dev%d_mname from sys_config failed\n", i); } else { strcpy(dev->ccm_cfg[i]->ccm,val.str); } } /* isp used mode */ sprintf(dev_para, "vip_dev%d_isp_used", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_dbg(0,"fetch vip_dev%d_isp_used from sys_config failed\n", i); } else { dev->ccm_cfg[i]->is_isp_used = val.val; } /* fmt */ sprintf(dev_para, "vip_dev%d_fmt", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_dbg(0,"fetch vip_dev%d_fmt from sys_config failed\n", i); } else { dev->ccm_cfg[i]->is_bayer_raw = val.val; } /* standby mode */ sprintf(dev_para, "vip_dev%d_stby_mode", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_dbg(0,"fetch vip_dev%d_stby_mode from sys_config failed\n", i); } else { dev->ccm_cfg[i]->power.stby_mode = val.val; } /* fetch flip issue */ sprintf(dev_para, "vip_dev%d_vflip", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_dbg(0,"fetch vip_dev%d_vflip from sys_config failed\n", i); } else { dev->ccm_cfg[i]->vflip = val.val; } sprintf(dev_para, "vip_dev%d_hflip", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { vfe_dbg(0,"fetch vip_dev%d_hflip from sys_config failed\n", i); } else { dev->ccm_cfg[i]->hflip = val.val; } /* fetch power issue*/ sprintf(dev_para, "vip_dev%d_iovdd", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_STR != type) { char null_str[]=""; strcpy(dev->ccm_cfg[i]->iovdd_str,null_str); vfe_dbg(0,"fetch vip_dev%d_iovdd from sys_config failed\n", i); } else { strcpy(dev->ccm_cfg[i]->iovdd_str,val.str); } sprintf(dev_para, "vip_dev%d_iovdd_vol", i); type = script_get_item(vfe_para,dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->ccm_cfg[i]->power.iovdd_vol=0; vfe_dbg(0,"fetch vip_dev%d_iovdd_vol from sys_config failed, default =0\n",i); } else { dev->ccm_cfg[i]->power.iovdd_vol=val.val; } sprintf(dev_para, "vip_dev%d_avdd", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_STR != type) { char null_str[]=""; strcpy(dev->ccm_cfg[i]->avdd_str,null_str); vfe_dbg(0,"fetch vip_dev%d_avdd from sys_config failed\n", i); } else { strcpy(dev->ccm_cfg[i]->avdd_str,val.str); } sprintf(dev_para, "vip_dev%d_avdd_vol", i); type = script_get_item(vfe_para,dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->ccm_cfg[i]->power.avdd_vol=0; vfe_dbg(0,"fetch vip_dev%d_avdd_vol from sys_config failed, default =0\n",i); } else { dev->ccm_cfg[i]->power.avdd_vol=val.val; } sprintf(dev_para, "vip_dev%d_dvdd", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_STR != type){ char null_str[]=""; strcpy(dev->ccm_cfg[i]->dvdd_str,null_str); vfe_dbg(0,"fetch vip_dev%d_dvdd from sys_config failed\n", i); } else { strcpy(dev->ccm_cfg[i]->dvdd_str, val.str); } sprintf(dev_para, "vip_dev%d_dvdd_vol", i); type = script_get_item(vfe_para,dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->ccm_cfg[i]->power.dvdd_vol=0; vfe_dbg(0,"fetch vip_dev%d_dvdd_vol from sys_config failed, default =0\n",i); } else { dev->ccm_cfg[i]->power.dvdd_vol=val.val; } sprintf(dev_para, "vip_dev%d_afvdd", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_STR != type) { char null_str[]=""; strcpy(dev->ccm_cfg[i]->afvdd_str,null_str); vfe_dbg(0,"fetch vip_dev%d_afvdd from sys_config failed\n", i); } else { strcpy(dev->ccm_cfg[i]->afvdd_str, val.str); } sprintf(dev_para, "vip_dev%d_afvdd_vol", i); type = script_get_item(vfe_para,dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->ccm_cfg[i]->power.afvdd_vol=0; vfe_dbg(0,"fetch vip_dev%d_afvdd_vol from sys_config failed, default =0\n",i); } else { dev->ccm_cfg[i]->power.afvdd_vol=val.val; } /* fetch reset/power/standby/flash/af io issue */ sprintf(dev_para, "vip_dev%d_reset", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) { dev->ccm_cfg[i]->gpio.reset_io.gpio = GPIO_INDEX_INVALID; vfe_dbg(0,"fetch vip_dev%d_reset from sys_config failed\n", i); } else { dev->ccm_cfg[i]->gpio.reset_io.gpio=val.gpio.gpio; dev->ccm_cfg[i]->gpio.reset_io.mul_sel=val.gpio.mul_sel; } sprintf(dev_para, "vip_dev%d_pwdn", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO != type){ dev->ccm_cfg[i]->gpio.pwdn_io.gpio = GPIO_INDEX_INVALID; vfe_dbg(0,"fetch vip_dev%d_stby from sys_config failed\n", i); } else { dev->ccm_cfg[i]->gpio.pwdn_io.gpio=val.gpio.gpio; dev->ccm_cfg[i]->gpio.pwdn_io.mul_sel=val.gpio.mul_sel; } sprintf(dev_para, "vip_dev%d_power_en", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) { dev->ccm_cfg[i]->gpio.power_en_io.gpio = GPIO_INDEX_INVALID; vfe_dbg(0,"fetch vip_dev%d_power_en from sys_config failed\n", i); } else { dev->ccm_cfg[i]->gpio.power_en_io.gpio=val.gpio.gpio; dev->ccm_cfg[i]->gpio.power_en_io.mul_sel=val.gpio.mul_sel; } sprintf(dev_para, "vip_dev%d_flash_en", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) { dev->ccm_cfg[i]->gpio.flash_en_io.gpio = GPIO_INDEX_INVALID; dev->ccm_cfg[i]->flash_used=0; vfe_dbg(0,"fetch vip_dev%d_flash_en from sys_config failed\n", i); } else { dev->ccm_cfg[i]->gpio.flash_en_io.gpio=val.gpio.gpio; dev->ccm_cfg[i]->gpio.flash_en_io.mul_sel=val.gpio.mul_sel; dev->ccm_cfg[i]->flash_used=1; } sprintf(dev_para, "vip_dev%d_flash_mode", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) { dev->ccm_cfg[i]->gpio.flash_mode_io.gpio = GPIO_INDEX_INVALID; vfe_dbg(0,"fetch vip_dev%d_flash_mode from sys_config failed\n", i); } else { dev->ccm_cfg[i]->gpio.flash_mode_io.gpio=val.gpio.gpio; dev->ccm_cfg[i]->gpio.flash_mode_io.mul_sel=val.gpio.mul_sel; } sprintf(dev_para, "vip_dev%d_af_pwdn", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) { dev->ccm_cfg[i]->gpio.af_pwdn_io.gpio = GPIO_INDEX_INVALID; vfe_dbg(0,"fetch vip_dev%d_af_pwdn from sys_config failed\n", i); } else { dev->ccm_cfg[i]->gpio.af_pwdn_io.gpio=val.gpio.gpio; dev->ccm_cfg[i]->gpio.af_pwdn_io.mul_sel=val.gpio.mul_sel; } /* fetch actuator issue */ sprintf(dev_para, "vip_dev%d_act_used", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->ccm_cfg[i]->act_used= 0; vfe_dbg(0,"fetch vip_dev%d_act_used from sys_config failed\n", i); } else { dev->ccm_cfg[i]->act_used=val.val; } ret = strcmp(dev->ccm_cfg[i]->act_name,""); if((dev->ccm_cfg[i]->act_slave == 0xff) && (ret == 0)) //when insmod without parm { sprintf(dev_para, "vip_dev%d_act_name", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_STR != type) { char null_str[]=""; strcpy(dev->ccm_cfg[i]->act_name,null_str); vfe_dbg(0,"fetch vip_dev%d_act_name from sys_config failed\n", i); } else { strcpy(dev->ccm_cfg[i]->act_name,val.str); } sprintf(dev_para, "vip_dev%d_act_slave", i); type = script_get_item(vfe_para, dev_para, &val); if (SCIRPT_ITEM_VALUE_TYPE_INT != type) { dev->ccm_cfg[i]->act_slave= 0; vfe_dbg(0,"fetch vip_dev%d_act_slave from sys_config failed\n", i); } else { dev->ccm_cfg[i]->act_slave=val.val; } } else { dev->ccm_cfg[i]->act_used=1;//manual set used } #ifdef _SUNXI_CAM_DETECT_ /*fetch cam detect para*/ type = script_get_item("camera_list_para", "camera_list_para_used", &val); if ((SCIRPT_ITEM_VALUE_TYPE_INT == type) && (val.val == 1)) { //camera_export_info(dev->ccm_cfg[i]->ccm, &dev->ccm_cfg[i]->i2c_addr,i); unsigned char cam_name[20]; unsigned int address; camera_export_info(cam_name, &address,i); if( (strcmp(cam_name,"")!=0)&&(address!=0) ) { strcpy(dev->ccm_cfg[i]->ccm, cam_name); dev->ccm_cfg[i]->i2c_addr=address; } else { vfe_warn("detect none sensor in list, use sysconfig setting!\n"); } for(j=0;j<ARRAY_SIZE(camera_info_list);j++) { if(strcmp(camera_info_list[j].name,dev->ccm_cfg[i]->ccm) == 0) { dev->ccm_cfg[i]->is_bayer_raw = camera_info_list[j].is_raw_sensor; dev->ccm_cfg[i]->is_isp_used = camera_info_list[j].is_isp_used; if(camera_info_list[j].vfilp) { dev->ccm_cfg[i]->vflip = (~dev->ccm_cfg[i]->vflip)&0x1; } if(camera_info_list[j].hfilp) { dev->ccm_cfg[i]->hflip= (~dev->ccm_cfg[i]->hflip)&0x1; } printk("dev->ccm_cfg[%d] = %s\n",i,dev->ccm_cfg[i]->ccm); } } } #endif //vfe_dbg(0,"act_used=%d, name=%s, slave=0x%x\n",dev->ccm_cfg[0]->act_used, // dev->ccm_cfg[0]->act_name, dev->ccm_cfg[0]->act_slave); } #else int type; unsigned int i2c_addr_vip0[2] = {0x6c,0x00}; unsigned int i2c_addr_vip1[2] = {0x78,0x42}; unsigned int i; unsigned char ccm_vip0_dev0[] = {"ov8825",}; unsigned char ccm_vip0_dev1[] = {"",}; unsigned char ccm_vip1_dev0[] = {"ov5650",}; unsigned char ccm_vip1_dev1[] = {"gc0308",}; unsigned int i2c_addr[2]; unsigned char *ccm_name[2]; if(dev->id==0) { dev->dev_qty = 1; i2c_addr[0] = i2c_addr_vip0[0]; i2c_addr[1] = i2c_addr_vip0[1]; ccm_name[0] = ccm_vip0_dev0; ccm_name[1] = ccm_vip0_dev1; } else if (dev->id == 1) { dev->dev_qty = 1; i2c_addr[0] = i2c_addr_vip1[0]; i2c_addr[1] = i2c_addr_vip1[1]; ccm_name[0] = ccm_vip1_dev0; ccm_name[1] = ccm_vip1_dev1; } for(i=0; i<dev->dev_qty; i++) { dev->ccm_cfg[i]->twi_id = 1; type = strcmp(dev->ccm_cfg[i]->ccm,""); if((dev->ccm_cfg[i]->i2c_addr == 0xff) && (ret == 0)) //when insmod without parm { dev->ccm_cfg[i]->i2c_addr = i2c_addr[i]; strcpy(dev->ccm_cfg[i]->ccm, ccm_name[i]); } dev->ccm_cfg[i]->power.stby_mode = 0; dev->ccm_cfg[i]->vflip = 0; dev->ccm_cfg[i]->hflip = 0; } #endif for(i=0; i<dev->dev_qty; i++) { vfe_dbg(0,"dev->ccm_cfg[%d]->ccm = %s\n",i,dev->ccm_cfg[i]->ccm); vfe_dbg(0,"dev->ccm_cfg[%d]->twi_id = %x\n",i,dev->ccm_cfg[i]->twi_id); vfe_dbg(0,"dev->ccm_cfg[%d]->i2c_addr = %x\n",i,dev->ccm_cfg[i]->i2c_addr); vfe_dbg(0,"dev->ccm_cfg[%d]->vflip = %x\n",i,dev->ccm_cfg[i]->vflip); vfe_dbg(0,"dev->ccm_cfg[%d]->hflip = %x\n",i,dev->ccm_cfg[i]->hflip); vfe_dbg(0,"dev->ccm_cfg[%d]->iovdd_str = %s\n",i,dev->ccm_cfg[i]->iovdd_str); vfe_dbg(0,"dev->ccm_cfg[%d]->avdd_str = %s\n",i,dev->ccm_cfg[i]->avdd_str); vfe_dbg(0,"dev->ccm_cfg[%d]->dvdd_str = %s\n",i,dev->ccm_cfg[i]->dvdd_str); vfe_dbg(0,"dev->ccm_cfg[%d]->afvdd_str = %s\n",i,dev->ccm_cfg[i]->afvdd_str); vfe_dbg(0,"dev->ccm_cfg[%d]->act_used = %d\n",i,dev->ccm_cfg[i]->act_used); vfe_dbg(0,"dev->ccm_cfg[%d]->act_name = %s\n",i,dev->ccm_cfg[i]->act_name); vfe_dbg(0,"dev->ccm_cfg[%d]->act_slave = 0x%x\n",i,dev->ccm_cfg[i]->act_slave); } return 0; }