platform:rk3399
OS:Android 7.1
Kernel:4.4
参考:
1. KrisFei https://blog.csdn.net/kris_fei/article/details/79298971
简介
RK平台抽象出了一个公共的camera驱动,给应用层提供通用的camera驱动注册和操作接口。这样将camera驱动和配置全部抽离到用户空间,不需要重新编译和调试内核,极大的简化了camera的移植和调试。
除USB摄像头走v4l2之外,其余类型的摄像头均走RK自己定义的一套公共Camera驱动接口。
- CameraUSBAdapter: USB接口类型的摄像头,走v4l2.
- CameraIspSOCAdapter:dvp接口,isp控制器接收。
- CameraIspAdapter:mipi接口,isp控制器接收,不走v4l2.
- CameraSOCAdapter:dvp接口,VIP控制器接收。
重要数据结构
数据结构
//isp设备描述结构体
typedef struct camsys_dev_s {
unsigned int dev_id;
camsys_irq_t irq;
camsys_devmems_t devmems;
struct miscdevice miscdev;
void *clk;
camsys_phyinfo_t *mipiphy;
camsys_phyinfo_t cifphy;
camsys_exdevs_t extdevs;
struct list_head list;
struct platform_device *pdev;
void *soc;
camsys_meminfo_t *csiphy_reg;
camsys_meminfo_t *dsiphy_reg;
camsys_meminfo_t *isp0_reg;
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;
int (*clkin_cb)(void *ptr, unsigned int on);
int (*clkout_cb)(void *ptr, unsigned int on, unsigned int clk);
int (*reset_cb)(void *ptr, unsigned int on);
int (*phy_cb)
(camsys_extdev_t *extdev,
camsys_sysctrl_t *devctl, void *ptr);
int (*iomux)(camsys_extdev_t *extdev, void *ptr);
int (*platform_remove)(struct platform_device *pdev);
int (*flash_trigger_cb)(void *ptr, int mode, unsigned int on);
int (*iommu_cb)(void *ptr, camsys_sysctrl_t *devctl);
} camsys_dev_t;
//内存信息描述结构体
typedef struct camsys_meminfo_s {
unsigned char name[32];
unsigned long phy_base;
unsigned long vir_base;
unsigned int size;
unsigned int vmas;
struct list_head list;
} camsys_meminfo_t;
//phy信息描述结构体
typedef struct camsys_phyinfo_s {
unsigned int phycnt;
void *clk;
camsys_meminfo_t *reg;
int (*clkin_cb)(void *ptr, unsigned int on);
int (*ops)(void *ptr, camsys_mipiphy_t *phy);
int (*remove)(struct platform_device *pdev);
} camsys_phyinfo_t;
//中断连接描述结构体
typedef struct camsys_irqcnnt_s {
int pid;
unsigned int timeout; //us
unsigned int mis;
unsigned int icr;
} camsys_irqcnnt_t;
ioctl codes
IOCTL CODES | 说明 |
---|---|
CAMSYS_VERCHK | 检查驱动版本和头文件版本 |
CAMSYS_I2CRD | 读i2c寄存器 |
CAMSYS_I2CWR | 写i2c寄存器 |
CAMSYS_SYSCTRL | sysctl控 |