From: zhangyunlong Date: Tue, 9 May 2017 03:41:19 +0000 (+0800) Subject: camera: rockchip: camsys driver v0.0x21.0xf X-Git-Tag: release-20171130_firefly~4^2~620 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3df3989b1aeefbbfca6a77e1ceaf812dcbdf3c6f;p=firefly-linux-kernel-4.4.55.git camera: rockchip: camsys driver v0.0x21.0xf add reference count for marvin Change-Id: Ic410da2524a8972d782ccfdcb121e1727b02e9d8 Signed-off-by: zhangyunlong --- diff --git a/drivers/media/video/rk_camsys/camsys_drv.c b/drivers/media/video/rk_camsys/camsys_drv.c index 8b74b7efd79c..915f92154b34 100644 --- a/drivers/media/video/rk_camsys/camsys_drv.c +++ b/drivers/media/video/rk_camsys/camsys_drv.c @@ -803,7 +803,12 @@ static int camsys_open(struct inode *inode, struct file *file) } } spin_unlock(&camsys_devs.lock); - + if (atomic_read(&camsys_dev->refcount) >= 1) { + camsys_err("%s has been opened!", + dev_name(camsys_dev->miscdev.this_device)); + err = -EBUSY; + goto end; + } INIT_LIST_HEAD(&camsys_dev->extdevs.active); if (camsys_dev->mipiphy != NULL) { @@ -822,6 +827,7 @@ static int camsys_open(struct inode *inode, struct file *file) err = -ENODEV; goto end; } else { + atomic_inc(&camsys_dev->refcount); camsys_trace(1, "%s(%p) is opened!", dev_name(camsys_dev->miscdev.this_device), camsys_dev); @@ -847,7 +853,7 @@ static int camsys_release(struct inode *inode, struct file *file) } } } - + atomic_dec(&camsys_dev->refcount); camsys_trace(1, "%s(%p) is closed", dev_name(camsys_dev->miscdev.this_device), diff --git a/drivers/media/video/rk_camsys/camsys_internal.h b/drivers/media/video/rk_camsys/camsys_internal.h index 2c1109bbc075..7bb1a2821b4b 100644 --- a/drivers/media/video/rk_camsys/camsys_internal.h +++ b/drivers/media/video/rk_camsys/camsys_internal.h @@ -162,8 +162,10 @@ *v0.0x21.0xe 1) correct mipiphy_hsfreqrange of 3368. 2) add csi-phy timing setting for 3368. +*v0.0x21.0xf: + 1) add reference count for marvin. */ -#define CAMSYS_DRIVER_VERSION KERNEL_VERSION(0, 0x21, 0xe) +#define CAMSYS_DRIVER_VERSION KERNEL_VERSION(0, 0x21, 0xf) #define CAMSYS_PLATFORM_DRV_NAME "RockChip-CamSys" #define CAMSYS_PLATFORM_MARVIN_NAME "Platform_MarvinDev" @@ -323,7 +325,7 @@ typedef struct camsys_dev_s { unsigned long rk_grf_base; unsigned long rk_cru_base; unsigned long rk_isp_base; - + atomic_t refcount; struct iommu_domain *domain; camsys_dma_buf_t dma_buf[CAMSYS_DMA_BUF_MAX_NUM]; int dma_buf_cnt;