高通camera驱动分析 (5)

每一种分辨率都必须有对应的chromatix库文件。这里对应2种分辨率,设置的是相应的库文件名称。

结构体sensor_lib_chromatix_t定义在sensor_lib.h中:
struct sensor_lib_chromatix_t {
char *common_chromatix;
  char *camera_preview_chromatix;
  char *camera_snapshot_chromatix;
  char *camcorder_chromatix;
  char *liveshot_chromatix;
};
其数据成员都是字符型指针,用来记录不同分辨率下不同模式的库文件名称。

7. MIPI接收器配置

7.1 、CSI lane参数配置

结构体 csi_lane_params_t定义在media/msm_camera.h中:

struct csi_lane_params_t {
uint16_t  csi_lane_assign;                //端口映射设置
uint8_t csi_lane_mask;//标识哪一个lane被使用
uint8_t csi_if;//未使用
uint8_t csid_core[2];        //csid硬件选择
uint8_t csi_phy_sel;       //csi-phy设备选择
};
csi_lane_assign —— 有时候用户的MIPI lanes可能使用不同与MSM参考设置的端口映射。比如,sensor的lane0连接到MSM的数据lane4等。对于这种情况,csi_lane_assign参数能设置正确的端口映射。csi_lane_assign是一个16bit的值,每位的含义参见下表。lane1用于MIPI时钟,客户不可用它来映射到任何数据lane。

csi_lane_mask —— 用于表示哪些lane被使用,这是一个8位值,每一位含义如下:

Bit position Represents
7:5 保留
4 数据lane4是否使用:
- 0 :不
- 1 :是
3 数据lane3是否使用:
- 0 :不
- 1 :是
2 数据lane2是否使用:
- 0 :不
- 1 :是
1 数据lane1是否使用:
- 0 :不
- 1 :是
注意:该位必须设置为1
0 数据lane0是否使用:
- 0 :不
- 1 :是

比如0x1F表示4条数据lane和时钟都被使用。

csi_if —— 暂不使用。
csid_core —— 设置哪个CSID硬件被该sensor使用。两个并发的sensor不能使用同一个CSID硬件。
csi_phy_sel —— 设置哪个CSI-PHY硬件被该sensor使用。对于每一个sensor来说必须是独一无二的,除非有额外的MIPI桥连接两个sensor到同一个PHY接口上。

7.2 、虚拟通道设置

CSI2传输的数据包包头部分的起始1byte为数据标志符(Data Identifier, DI),由VC[7:6](Virtual Channel)和DT[5;0](Data Type)组成。通过不同的VC和DT值来标志不同的数据流,占2个bit位的虚拟通道VC允许最多4个数据流交叉传输,其取值范围为0~3.

下表表示不同的TD的取值及对应的数据格式。

结构体 msm_camera_csid_vc_cfg用于保存虚拟通道的设置信息,在media/msm_camera.h中定义:


struct msm_camera_csid_vc_cfg {
uint8_t  cid; //通道号
uint8_t  dt; //数据类型
uint8_t  decode_format; //解码格式
};


imx230的设置如下:


其数据类型和解码格式的值是宏定义的,其中数据类型的宏定义是根据上述DT表得来的。如下:


#define CSI_EMBED_DATA0x12
#define CSI_RESERVED_DATA_00x13
#define CSI_YUV422_80x1E
#define CSI_RAW80x2A
#define CSI_RAW100x2B
#define CSI_RAW120x2C


#define CSI_DECODE_6BIT0
#define CSI_DECODE_8BIT1
#define CSI_DECODE_10BIT2
#define CSI_DECODE_DPCM_10_8_105

7.3 、数据流设置

typedef struct _sensor_stream_info_t {
  uint16_t vc_cfg_size;
  struct msm_camera_csid_vc_cfg *vc_cfg;      //虚拟通道设置
  struct sensor_pix_fmt_info_t *pix_fmt_fourcc;//像素格式
} sensor_stream_info_t;


typedef struct _sensor_stream_info_array_t {
  sensor_stream_info_t *sensor_stream_info;
  uint16_t size;
} sensor_stream_info_array_t;

7.4、 CSID和CSI-PHY参数设置

struct msm_camera_csid_lut_params {
uint8_t num_cid;//虚拟通道个数
struct msm_camera_csid_vc_cfg *vc_cfg;             //虚拟通道参数
};
struct msm_camera_csid_params {
uint8_t  lane_cnt; //使用lane的数目
uint16_t lane_assign;
uint8_t phy_sel;
struct msm_camera_csid_lut_params lut_params;
};
struct msm_camera_csiphy_params {
uint8_t lane_cnt;
uint8_t settle_cnt;
uint16_t lane_mask;
uint8_t combo_mode;
uint8_t csid_core;
};

struct msm_camera_csi2_params {
struct msm_camera_csid_params csid_params; //CSID参数
struct msm_camera_csiphy_params csiphy_params;                 //CSI-PHY参数
};

lane_cnt ——有多少数据 lane 用于数据传输. 该值必须在 sensor 最大能力范围内,而且sensor 寄存器设置必须与该 lane 数匹配.

settle_cnt ——该值须和 sensor 的特性匹配, 保证 sensor 的 MIPI 传输和 MSM 的 MIPI 接收能同步.

客户可以对不同的分辨率模式使用不同CSI 参数设置。imx230采用两种分辨率,但是使用相同的CSI设置。

8、imx230_ofilm_open_lib

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsdsz.html