高通平台获取gc5035 camera type方式

本文介绍如何在高通平台kernel端获取gc5035类型的方式。
硬件camera typc介绍如下所示:
在这里插入图片描述
实际需求:由于gc5035的cob的物料没有了, 需要导入csp类型作为二供,由于没有烧入otp功能无法获取otp的module id,需要通过获取camera type类型区分不同的gc5035。从上硬件图可知cob类型对应的是寄存器状态值为0x01, CSP对应的寄存器状态值为0X08.
软件实现如下所示:
代码路径:android/kernel/msm-4.19/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c

void get_gc5053_camera_type(const char *sensor_name ,struct msm_camera_i2c_client *sensor_i2c_client, char *type)
{
	uint16_t packet = 0x0000;
	if((!strcmp(sensor_name, "gc5035"))||(!strcmp(sensor_name, "gc5035_cob"))){
		//config reg for gc5034
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfc, 0x01, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf4, 0x40, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf5, 0xe9, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf6, 0x14, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf8, 0x49, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf9, 0x82, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfa, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfc, 0x81, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x36, 0x01, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xd3, 0x87, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x36, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x33, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x03, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x01, 0xe7, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf7, 0x01, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfc, 0x8f, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfc, 0x8f, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfc, 0x8e, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xee, 0x30, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x87, 0x18, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x01, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x8c, 0x90, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
	
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfa, 0x10, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf5, 0xe9, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x02, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x67, 0xc0, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x59, 0x3f, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x55, 0x84, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x65, 0x80, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x66, 0x03, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x00, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xfe, 0x02, MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x69, ((packet >>8) & 0x1f), MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0x6a, (packet & 0xff), MSM_CAMERA_I2C_BYTE_DATA);
		sensor_i2c_client->i2c_func_tbl->i2c_write(sensor_i2c_client, 0xf3, 0x20, MSM_CAMERA_I2C_BYTE_DATA);
		
		// read module id from 0x6c
		sensor_i2c_client->i2c_func_tbl->i2c_read(sensor_i2c_client, 0x6c, packet , MSM_CAMERA_I2C_BYTE_DATA);
		if((packet & 0x0f)==0x08)  
			type='csp';
		else if((packet &0x0f)==0x04) 
			type='tplcc';
		else if((packet &0x0f)==0x02) 
			type='com';
		else if((packet &0x0f)==0x01) 
			type='cob';
		else 
			type='unknow';
	}
    return type
}

根据sensor_name和type返回值,判定msm_sensor_match_id是否成功,若成功返回rc,若失败返回-EINVAL;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值