mt6582平台移植IMX135摄像头驱动

一.mt6582平台移植IMX135摄像头
1.mediatek/custom/common/kernel/imgsensor/下创建imx135_mipi_raw
2.将模组厂提供的kernel源码放在imx135_mipi_raw中
3.mediatek/custom/mt6582/hal/imgsensor/下创建imx135_mipi_raw
4.将模组厂提供的hal源码放在imx135_mipi_raw中
5.在imx135_mipi_raw.h中#define IMX135MIPI_WRITE_ID (0x34)
IMX135MIPI_WRITE_ID 这个ID值由datasheet中或者模组厂提供
5.mediatek/custom/common/kernel/imgsensor/inc/kd_imgsensor.h 

(1)定义sensor id:
#define IMX135_SENSOR_ID                        0x0135  
(2)定义sensor name:
#define SENSOR_DRVNAME_IMX135_MIPI_RAW   "imx135mipiraw"
6.mediatek/custom/common/kernel/imgsensor/src/kd_sensorlist.h中
(1)声明初始化函数:
UINT32 IMX135_MIPI_RAW_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
(2)ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1]
数组中添加
#if defined(IMX135_MIPI_RAW)

{IMX135_SENSOR_ID, SENSOR_DRVNAME_IMX135_MIPI_RAW, IMX135_MIPI_RAW_SensorInit}, 


#endif  
7.mediatek/custom/common/hal/imgsensor/src/sensorlist.cpp中
添加:
#if defined(IMX135_MIPI_RAW)

RAW_INFO(IMX135_SENSOR_ID, SENSOR_DRVNAME_IMX135_MIPI_RAW,NULL), 


#endif
8.mediatek/config/pro/ProjectConfig.mk中
CUSTOM_HAL_IMGSENSOR=imx135_mipi_raw
CUSTOM_HAL_MAIN_IMGSENSOR=imx135_mipi_raw  //后置摄像头
CUSTOM_HAL_SUB_IMGSENSOR=sp2509_mipi_raw   //前置摄像头
 
CUSTOM_KERNEL_IMGSENSOR=sp5507_mipi_raw
CUSTOM_KERNEL_MAIN_IMGSENSOR =imx135_mipi_raw //后置摄像头
CUSTOM_KERNEL_SUB_IMGSENSOR=sp2509_mipi_raw  //前置摄像头


9.imx135上电时序
mediatek/custom/sanstar82_cwet_kk/kernel/camera/camera/kd_camera_hw.c中
添加:imx135_mipi_raw 的上电时序
(1)解释:
<1> pinSetIdx == 1(代表前置摄像头)
<2>pinSetIdx == 0(代表后置摄像头)
<3>currSensorName(sensor的名字)
<4>CAMERA_POWER_VCAM_D2,CAMERA_POWER_VCAM_A,CAMERA_POWER_VCAM_D,CAMERA_POWER_VCAM_A2(代表sensor的4组核心电源)
上面4组电源的定义在kd_camera_hw.h
<5>hwPowerOn函数中VOL_1800(1.8v),VOL_2800(2.8v),VOL_1000(1.0v)
(2)添加的上电时序代码


/*********************************************************************************************************************************/
0 == strcmp(SENSOR_DRVNAME_IMX135_MIPI_RAW,currSensorName)(判断当前sensor是不是IMX135)


       else if ((pinSetIdx == 0) && currSensorName && (0 == strcmp(SENSOR_DRVNAME_IMX135_MIPI_RAW,currSensorName)))
{
//PK_DBG("kdCISModulePowerOn get in---  SENSOR_DRVNAME_IMX135_MIPI_RAW \n");
//PK_DBG("[ON_general 2.8V]sensorIdx:%d \n",SensorIdx);
if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D2, VOL_1800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}




if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A, VOL_2800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}


if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_D, VOL_1000,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable digital power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}


if(TRUE != hwPowerOn(CAMERA_POWER_VCAM_A2, VOL_2800,mode_name))
{
PK_DBG("[CAMERA SENSOR] Fail to enable analog power\n");
//return -EIO;
goto _kdCISModulePowerOn_exit_;
}
mdelay(5);


//PDN/STBY pin
if (GPIO_CAMERA_INVALID != pinSet[pinSetIdx][IDX_PS_CMRST])
{


if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
mdelay(10);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMPDN],pinSet[pinSetIdx][IDX_PS_CMPDN+IDX_PS_ON])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");}
mdelay(1);


//RST pin
if(mt_set_gpio_mode(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
if(mt_set_gpio_dir(pinSet[pinSetIdx][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(10);
if(mt_set_gpio_out(pinSet[pinSetIdx][IDX_PS_CMRST],pinSet[pinSetIdx][IDX_PS_CMRST+IDX_PS_ON])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");}
mdelay(1);
}


        //disable inactive sensor
        if(pinSetIdx == 0 || pinSetIdx == 2) {//disable sub
       if (GPIO_CAMERA_INVALID != pinSet[1][IDX_PS_CMRST]) {
           if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
           if(mt_set_gpio_mode(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
           if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
           if(mt_set_gpio_dir(pinSet[1][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
           if(mt_set_gpio_out(pinSet[1][IDX_PS_CMRST],pinSet[1][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
           if(mt_set_gpio_out(pinSet[1][IDX_PS_CMPDN],pinSet[1][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module


           if(mt_set_gpio_mode(pinSet[3][IDX_PS_CMRST],pinSet[3][IDX_PS_CMRST+IDX_PS_MODE])){PK_DBG("[CAMERA SENSOR] set gpio mode failed!! \n");}
           if(mt_set_gpio_mode(pinSet[3][IDX_PS_CMPDN],pinSet[3][IDX_PS_CMPDN+IDX_PS_MODE])){PK_DBG("[CAMERA LENS] set gpio mode failed!! \n");}
           if(mt_set_gpio_dir(pinSet[3][IDX_PS_CMRST],GPIO_DIR_OUT)){PK_DBG("[CAMERA SENSOR] set gpio dir failed!! \n");}
           if(mt_set_gpio_dir(pinSet[3][IDX_PS_CMPDN],GPIO_DIR_OUT)){PK_DBG("[CAMERA LENS] set gpio dir failed!! \n");}
           if(mt_set_gpio_out(pinSet[3][IDX_PS_CMRST],pinSet[3][IDX_PS_CMRST+IDX_PS_OFF])){PK_DBG("[CAMERA SENSOR] set gpio failed!! \n");} //low == reset sensor
           if(mt_set_gpio_out(pinSet[3][IDX_PS_CMPDN],pinSet[3][IDX_PS_CMPDN+IDX_PS_OFF])){PK_DBG("[CAMERA LENS] set gpio failed!! \n");} //high == power down lens module
           
       }
        }




}
/*********************************************************************************************************************************/


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于imx6ull摄像头驱动ov2640,您可以按照以下步骤进行配置和驱动: 1. 首先,确保您的imx6ull开发板已经正确连接了ov2640摄像头模块。 2. 在Linux系统中,您需要检查并确保i2c总线已经启用。可以通过命令`ls /dev/i2c*`来查看是否存在i2c设备。 3. 安装v4l2工具包,可以通过以下命令安装: ``` sudo apt-get install v4l-utils ``` 4. 下载并编译ov2640驱动源码。您可以从官方网站或GitHub上找到适用于imx6ull的ov2640驱动源码。 5. 在编译驱动之前,您需要为imx6ull配置适当的内核选项。打开内核配置文件(位于`/path/to/linux/source/.config`),确保以下选项已启用: ``` CONFIG_VIDEO_DEV=y CONFIG_VIDEO_V4L2_SUBDEV_API=y CONFIG_VIDEO_V4L2=y CONFIG_V4L2_MEM2MEM_DEV=y CONFIG_VIDEOBUF2_DMA_CONTIG=y CONFIG_VIDEOBUF2_DMA_SG=y ``` 6. 编译驱动代码并生成ko文件。根据驱动源码提供的说明进行编译,并生成ov2640.ko文件。 7. 将生成的ov2640.ko文件复制到imx6ull开发板上。 8. 使用`insmod`命令加载驱动: ``` sudo insmod ov2640.ko ``` 9. 确认驱动已成功加载并工作。您可以使用v4l2-ctl命令来测试摄像头: ``` v4l2-ctl -d /dev/video0 --list-formats-ext ``` 以上是一般的步骤,具体的驱动配置和编译过程可能因您使用的Linux发行版和驱动源码而有所不同。请确保在操作之前参考相关文档和指南。祝您成功驱动imx6ull摄像头ov2640!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值