[Camera]RK平台摄像头驱动

这篇博客介绍了RK平台的摄像头驱动,该驱动通过抽象接口简化了camera的移植和调试工作。内容涵盖数据结构、ioctl codes以及rk_camsys、ISP、mipiphy等模块的说明,特别强调了不同接口类型的摄像头如何处理。此外,还提到了camsys_phyinfo_s结构体和flash设备的注册。
摘要由CSDN通过智能技术生成
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控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值