//enable/disable master clock int vfe_set_mclk(struct v4l2_subdev *sd, enum on_off on_off) { #ifdef VFE_CLK struct vfe_dev *dev=(struct vfe_dev *)dev_get_drvdata(sd->v4l2_dev->dev); switch(on_off) { case ON: vfe_print("mclk on\n"); if(dev->clock.vfe_master_clk) { if(os_clk_prepare_enable(dev->clock.vfe_master_clk)) { vfe_err("vip%d master clock enable error\n",dev->vip_sel); return -1; } } else { vfe_err("vip%d master clock is null\n",dev->vip_sel); return -1; } break; case OFF: vfe_print("mclk off\n"); if(dev->clock.vfe_master_clk) { os_clk_disable_unprepare(dev->clock.vfe_master_clk); } else { vfe_err("vip%d master clock is null\n",dev->vip_sel); return -1; } break; default: return -1; } #endif return 0; }
static void __exit cci_exit(void) { int i; vfe_print("cci_exit start\n"); for(i=0; i<ARRAY_SIZE(cci_device); i++) { platform_device_unregister(&cci_device[i]); } platform_driver_unregister(&cci_platform_driver); vfe_print("cci_exit end\n"); }
int read_ini_info(struct vfe_dev *dev,int isp_id) { int i, ret = 0; char isp_cfg_path[128],isp_tbl_path[128],file_name_path[128]; struct cfg_section *cfg_section; vfe_print("read ini start\n"); if(dev->ccm_cfg[isp_id]->ccm != NULL) { sprintf(isp_cfg_path, "/system/etc/hawkview/%s/", dev->ccm_cfg[isp_id]->ccm); sprintf(isp_tbl_path, "/system/etc/hawkview/%s/bin/", dev->ccm_cfg[isp_id]->ccm); } else { sprintf(isp_cfg_path, "/system/etc/hawkview/camera.ini"); sprintf(isp_tbl_path, "/system/etc/hawkview/bin/"); } dev->isp_gen_set[isp_id].isp_ini_cfg = isp_init_def_cfg; for(i=0; i< ARRAY_SIZE(FileAttr); i++) { sprintf(file_name_path,"%s%s",isp_cfg_path,FileAttr[i].file_name); vfe_print("read %s start! \n",file_name_path); cfg_section_init(&cfg_section); ret = cfg_read_ini(file_name_path, &cfg_section); if(ret == -1) { cfg_section_release(&cfg_section); goto read_ini_info_end; } fetch_isp_cfg(&dev->isp_gen_set[isp_id].isp_ini_cfg, cfg_section,&FileAttr[i]); cfg_section_release(&cfg_section); } ret = fetch_isp_tbl(&dev->isp_gen_set[isp_id].isp_ini_cfg, &isp_tbl_path[0]); if(ret == -1) { dev->isp_gen_set[isp_id].isp_ini_cfg = isp_init_def_cfg; } read_ini_info_end: vfe_dbg(0,"read ini end\n"); return ret; }
//enable/disable master clock int vfe_set_mclk(struct v4l2_subdev *sd, enum on_off on_off) { #ifdef VFE_CLK struct vfe_gpio_cfg gpio_list; struct vfe_dev *dev=(struct vfe_dev *)dev_get_drvdata(sd->v4l2_dev->dev); switch(on_off) { case ON: vfe_print("mclk on\n"); os_gpio_set(&dev->gpio->mclk, 1); //set mclk PIN to MCLKt. usleep_range(10000,12000); if(dev->clock.vfe_master_clk) { if(os_clk_prepare_enable(dev->clock.vfe_master_clk)) { vfe_err("vip%d master clock enable error\n",dev->vip_sel); return -1; } } else { vfe_err("vip%d master clock is null\n",dev->vip_sel); return -1; } break; case OFF: vfe_print("mclk off\n"); if(dev->clock.vfe_master_clk) { os_clk_disable_unprepare(dev->clock.vfe_master_clk); } else { vfe_err("vip%d master clock is null\n",dev->vip_sel); return -1; } usleep_range(10000,12000); memcpy(&gpio_list, &dev->gpio->mclk, sizeof(struct vfe_gpio_cfg)); gpio_list.mul_sel = GPIO_OUTPUT; //set mclk PIN to output. os_gpio_set(&gpio_list, 1); vfe_gpio_write(sd, MCLK_PIN, 0); break; default: return -1; } #endif return 0; }
static int __init cci_init(void) { int ret,i; for(i=0; i<ARRAY_SIZE(cci_device); i++) { ret = platform_device_register(&cci_device[i]); if (ret) vfe_err("cci device %d register failed\n",i); } ret = platform_driver_register(&cci_platform_driver); if (ret) { vfe_err("platform driver register failed\n"); return ret; } vfe_print("cci_init end\n"); return 0; }
static int __devinit cci_probe(struct platform_device *pdev) { struct cci_dev *cci = NULL; struct resource *res = NULL; struct cci_platform_data *pdata = NULL; int ret, irq = 0; if(pdev->dev.platform_data == NULL) { return -ENODEV; } pdata = pdev->dev.platform_data; vfe_print("cci probe start cci_sel = %d!\n",pdata->cci_sel); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); irq = platform_get_irq(pdev, 0); if (res == NULL || irq < 0) { return -ENODEV; } if (!request_mem_region(res->start, resource_size(res), res->name)) { return -ENOMEM; } cci = kzalloc(sizeof(struct cci_dev), GFP_KERNEL); if (!cci) { ret = -ENOMEM; goto ekzalloc; } cci->irq = irq; cci->cci_sel = pdata->cci_sel; spin_lock_init(&cci->slock); init_waitqueue_head(&cci->wait); cci->base = ioremap(res->start, resource_size(res)); if (!cci->base) { ret = -EIO; goto eremap; } ret = request_irq(irq, cci_irq_handler, IRQF_DISABLED, CCI_MODULE_NAME, cci); if (ret) { vfe_err("[cci_%d] requeset irq failed!\n", cci->cci_sel); goto ereqirq; } #if defined (CONFIG_ARCH_SUN9IW1P1) ret = bsp_csi_cci_set_base_addr(cci->cci_sel, (unsigned int)cci->base); if(ret < 0) goto ehwinit; #else ret = bsp_csi_cci_set_base_addr(0, (unsigned int)cci->base); if(ret < 0) goto ehwinit; ret = bsp_csi_cci_set_base_addr(1, (unsigned int)cci->base); if(ret < 0) goto ehwinit; #endif platform_set_drvdata(pdev, cci); vfe_print("cci probe end cci_sel = %d!\n",pdata->cci_sel); return 0; ehwinit: free_irq(irq, cci); ereqirq: iounmap(cci->base); eremap: kfree(cci); ekzalloc: vfe_print("cci probe err!\n"); return ret; }
static void cci_release(struct device *dev) { //struct vfe_dev *vfe_dev = (struct vfe_dev *)dev_get_drvdata(dev); vfe_print("cci_device_release\n"); };