diff --git a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c index f4d60b937c58..cd046c4eacc5 100644 --- a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c +++ b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c @@ -145,75 +145,105 @@ static int32_t cam_csiphy_update_secure_info( } static int cam_csiphy_get_lane_enable( - struct csiphy_device *csiphy, int index, uint32_t *lane_enable) + struct csiphy_device *csiphy, int index, + uint16_t lane_assign, uint32_t *lane_enable) { uint32_t lane_select = 0; - uint16_t lane_assign = csiphy->csiphy_info[index].lane_assign; - uint8_t lane_cnt = csiphy->csiphy_info[index].lane_cnt; - int rc = 0; - while (lane_cnt--) { - if (csiphy->csiphy_info[index].csiphy_3phase) { - switch (lane_assign & 0xF) { - case 0x0: - lane_select |= CPHY_LANE_0; - break; - case 0x1: - lane_select |= CPHY_LANE_1; - break; - case 0x2: - lane_select |= CPHY_LANE_2; - break; - default: - CAM_ERR(CAM_CSIPHY, - "Wrong lane configuration for CPHY : %d", - lane_assign); - *lane_enable = 0; - return -EINVAL; - } - } else { - switch (lane_assign & 0xF) { - case 0x0: - lane_select |= DPHY_LANE_0; - lane_select |= DPHY_CLK_LN; - break; - case 0x1: - lane_select |= DPHY_LANE_1; - lane_select |= DPHY_CLK_LN; - break; - case 0x2: - lane_select |= DPHY_LANE_2; - if (csiphy->combo_mode) - lane_select |= DPHY_LANE_3; - else - lane_select |= DPHY_CLK_LN; - break; - case 0x3: - if (csiphy->combo_mode) { - CAM_ERR(CAM_CSIPHY, - "Wrong lane configuration for DPHYCombo: %d", - lane_assign); - *lane_enable = 0; - return -EINVAL; - } - lane_select |= DPHY_LANE_3; - lane_select |= DPHY_CLK_LN; - break; - default: - CAM_ERR(CAM_CSIPHY, - "Wrong lane configuration for DPHY: %d", - lane_assign); - *lane_enable = 0; - return -EINVAL; - } + if (csiphy->csiphy_info[index].csiphy_3phase) { + switch (lane_assign & 0xF) { + case 0x0: + lane_select |= CPHY_LANE_0; + break; + case 0x1: + lane_select |= CPHY_LANE_1; + break; + case 0x2: + lane_select |= CPHY_LANE_2; + break; + default: + CAM_ERR(CAM_CSIPHY, + "Wrong lane configuration for CPHY : %d", + lane_assign); + *lane_enable = 0; + return -EINVAL; + } + } else { + switch (lane_assign & 0xF) { + case 0x0: + lane_select |= DPHY_LANE_0; + lane_select |= DPHY_CLK_LN; + break; + case 0x1: + lane_select |= DPHY_LANE_1; + lane_select |= DPHY_CLK_LN; + break; + case 0x2: + lane_select |= DPHY_LANE_2; + if (csiphy->combo_mode) + lane_select |= DPHY_LANE_3; + else + lane_select |= DPHY_CLK_LN; + break; + case 0x3: + if (csiphy->combo_mode) { + CAM_ERR(CAM_CSIPHY, + "Wrong lane configuration for DPHYCombo: %d", + lane_assign); + *lane_enable = 0; + return -EINVAL; + } + lane_select |= DPHY_LANE_3; + lane_select |= DPHY_CLK_LN; + break; + default: + CAM_ERR(CAM_CSIPHY, + "Wrong lane configuration for DPHY: %d", + lane_assign); + *lane_enable = 0; + return -EINVAL; } - lane_assign >>= 4; } CAM_DBG(CAM_CSIPHY, "Lane_enable: 0x%x", lane_enable); *lane_enable = lane_select; - return rc; + return 0; +} + +static int cam_csiphy_sanitize_lane_cnt( + struct csiphy_device *csiphy_dev, + int32_t index, uint8_t lane_cnt) +{ + uint8_t max_supported_lanes = 0; + + if (csiphy_dev->combo_mode) { + if (csiphy_dev->csiphy_info[index].csiphy_3phase) + max_supported_lanes = 1; + else + max_supported_lanes = 2; + } else if (csiphy_dev->cphy_dphy_combo_mode) { + /* 2DPHY + 1CPHY or 2CPHY + 1DPHY */ + if (csiphy_dev->csiphy_info[index].csiphy_3phase) + max_supported_lanes = 2; + else + max_supported_lanes = 2; + } else { + /* Mission Mode */ + if (csiphy_dev->csiphy_info[index].csiphy_3phase) + max_supported_lanes = 3; + else + max_supported_lanes = 4; + } + + if (lane_cnt <= 0 || lane_cnt > max_supported_lanes) { + CAM_ERR(CAM_CSIPHY, + "wrong lane_cnt configuration: expected max lane_cnt: %u received lane_cnt: %u", + max_supported_lanes, lane_cnt); + return -EINVAL; + } + + return 0; } int32_t cam_cmd_buf_parser(struct csiphy_device *csiphy_dev, @@ -230,6 +260,8 @@ int32_t cam_cmd_buf_parser(struct csiphy_device *csiphy_dev, size_t remain_len; int index; uint32_t lane_enable = 0; + uint16_t lane_assign = 0; + uint8_t lane_cnt = 0; if (!cfg_dev || !csiphy_dev) { CAM_ERR(CAM_CSIPHY, "Invalid Args"); @@ -294,6 +326,15 @@ int32_t cam_cmd_buf_parser(struct csiphy_device *csiphy_dev, return -EINVAL; } + rc = cam_csiphy_sanitize_lane_cnt(csiphy_dev, index, + cam_cmd_csiphy_info->lane_cnt); + if (rc) { + CAM_ERR(CAM_CSIPHY, + "Wrong configuration lane_cnt: %u", + cam_cmd_csiphy_info->lane_cnt); + return rc; + } + csiphy_dev->csiphy_info[index].lane_cnt = cam_cmd_csiphy_info->lane_cnt; csiphy_dev->csiphy_info[index].lane_assign = cam_cmd_csiphy_info->lane_assign; @@ -305,22 +346,28 @@ int32_t cam_cmd_buf_parser(struct csiphy_device *csiphy_dev, csiphy_dev->csiphy_info[index].secure_mode = cam_cmd_csiphy_info->secure_mode; - rc = cam_csiphy_get_lane_enable(csiphy_dev, index, &lane_enable); - if (rc) { - CAM_ERR(CAM_CSIPHY, "Wrong lane configuration: %d", - csiphy_dev->csiphy_info[index].lane_assign); - if ((csiphy_dev->combo_mode) || - (csiphy_dev->cphy_dphy_combo_mode)) { - CAM_DBG(CAM_CSIPHY, - "Resetting error to zero for other devices to configure"); - rc = 0; - } - lane_enable = 0; - csiphy_dev->csiphy_info[index].lane_enable = lane_enable; - goto reset_settings; - } + lane_assign = csiphy_dev->csiphy_info[index].lane_assign; + lane_cnt = csiphy_dev->csiphy_info[index].lane_cnt; - csiphy_dev->csiphy_info[index].lane_enable = lane_enable; + while (lane_cnt--) { + rc = cam_csiphy_get_lane_enable(csiphy_dev, index, + (lane_assign & 0xF), &lane_enable); + if (rc) { + CAM_ERR(CAM_CSIPHY, "Wrong lane configuration: %d", + csiphy_dev->csiphy_info[index].lane_assign); + if ((csiphy_dev->combo_mode) || + (csiphy_dev->cphy_dphy_combo_mode)) { + CAM_DBG(CAM_CSIPHY, + "Resetting error to zero for other devices to configure"); + rc = 0; + } + lane_enable = 0; + csiphy_dev->csiphy_info[index].lane_enable = lane_enable; + goto reset_settings; + } + csiphy_dev->csiphy_info[index].lane_enable |= lane_enable; + lane_assign >>= 4; + } if (cam_cmd_csiphy_info->secure_mode == 1) cam_csiphy_update_secure_info(csiphy_dev, @@ -372,66 +419,6 @@ void cam_csiphy_cphy_irq_config(struct csiphy_device *csiphy_dev) csiphy_dev->ctrl_reg->csiphy_irq_reg[i].reg_addr); } -static void cam_csiphy_cphy_data_rate_config( - struct csiphy_device *csiphy_device, int32_t idx) -{ - int i = 0, j = 0; - uint64_t phy_data_rate = 0; - void __iomem *csiphybase = NULL; - ssize_t num_table_entries = 0; - struct data_rate_settings_t *settings_table = NULL; - - if ((csiphy_device == NULL) || - (csiphy_device->ctrl_reg == NULL) || - (csiphy_device->ctrl_reg->data_rates_settings_table == NULL)) { - CAM_DBG(CAM_CSIPHY, - "Data rate specific register table not found"); - return; - } - - phy_data_rate = csiphy_device->csiphy_info[idx].data_rate; - csiphybase = - csiphy_device->soc_info.reg_map[0].mem_base; - settings_table = - csiphy_device->ctrl_reg->data_rates_settings_table; - num_table_entries = - settings_table->num_data_rate_settings; - - CAM_DBG(CAM_CSIPHY, "required data rate : %llu", phy_data_rate); - for (i = 0; i < num_table_entries; i++) { - struct data_rate_reg_info_t *drate_settings = - settings_table->data_rate_settings; - uint64_t bandwidth = - drate_settings[i].bandwidth; - ssize_t num_reg_entries = - drate_settings[i].data_rate_reg_array_size; - - if (phy_data_rate > bandwidth) { - CAM_DBG(CAM_CSIPHY, - "Skipping table [%d] %llu required: %llu", - i, bandwidth, phy_data_rate); - continue; - } - - CAM_DBG(CAM_CSIPHY, - "table[%d] BW : %llu Selected", i, bandwidth); - for (j = 0; j < num_reg_entries; j++) { - uint32_t reg_addr = - drate_settings[i].csiphy_data_rate_regs[j].reg_addr; - - uint32_t reg_data = - drate_settings[i].csiphy_data_rate_regs[j].reg_data; - - CAM_DBG(CAM_CSIPHY, - "writing reg : %x val : %x", - reg_addr, reg_data); - cam_io_w_mb(reg_data, - csiphybase + reg_addr); - } - break; - } -} - void cam_csiphy_cphy_irq_disable(struct csiphy_device *csiphy_dev) { int32_t i; @@ -482,6 +469,122 @@ irqreturn_t cam_csiphy_irq(int irq_num, void *data) return IRQ_HANDLED; } +static int cam_csiphy_cphy_get_data_rate_lane_idx( + struct csiphy_device *csiphy_dev, int32_t index, + uint16_t lane_assign, + struct data_rate_reg_info_t *drate_settings) +{ + int rc = 0; + int idx = -1; + uint32_t lane_enable; + + rc = cam_csiphy_get_lane_enable(csiphy_dev, index, + lane_assign, &lane_enable); + if (rc) { + CAM_ERR(CAM_CSIPHY, + "Wrong configuration for lane_assign: %u", lane_assign); + return rc; + } + + for (idx = 0; idx < CAM_CSIPHY_MAX_CPHY_LANES; idx++) { + if (lane_enable & drate_settings->per_lane_info[idx].lane_identifier) + return idx; + } + + if (idx == CAM_CSIPHY_MAX_CPHY_LANES) { + CAM_ERR(CAM_CSIPHY, + "Lane not found in datarate table"); + rc = -EINVAL; + } + + return rc; +} + +static int cam_csiphy_cphy_data_rate_config( + struct csiphy_device *csiphy_device, int32_t idx) +{ + int i = 0; + int lane_idx = -1; + int data_rate_idx = -1; + uint64_t phy_data_rate = 0; + void __iomem *csiphybase = NULL; + ssize_t num_table_entries = 0; + struct data_rate_settings_t *settings_table = NULL; + struct csiphy_cphy_per_lane_info *per_lane = NULL; + uint32_t lane_enable = 0; + uint8_t lane_cnt = 0; + uint16_t lane_assign = 0; + + if ((csiphy_device == NULL) || + (csiphy_device->ctrl_reg == NULL) || + (csiphy_device->ctrl_reg->data_rates_settings_table == NULL)) { + CAM_DBG(CAM_CSIPHY, + "Data rate specific register table not found"); + return -EINVAL; + } + + phy_data_rate = csiphy_device->csiphy_info[idx].data_rate; + csiphybase = + csiphy_device->soc_info.reg_map[0].mem_base; + settings_table = + csiphy_device->ctrl_reg->data_rates_settings_table; + num_table_entries = + settings_table->num_data_rate_settings; + lane_cnt = csiphy_device->csiphy_info[idx].lane_cnt; + + CAM_DBG(CAM_CSIPHY, "required data rate : %llu", phy_data_rate); + for (data_rate_idx = 0; data_rate_idx < num_table_entries; + data_rate_idx++) { + struct data_rate_reg_info_t *drate_settings = + settings_table->data_rate_settings; + uint64_t bandwidth = drate_settings[data_rate_idx].bandwidth; + ssize_t num_reg_entries = + drate_settings[data_rate_idx].data_rate_reg_array_size; + if (phy_data_rate > bandwidth) { + CAM_DBG(CAM_CSIPHY, + "Skipping table [%d] with BW: %llu, Required data_rate: %llu", + data_rate_idx, bandwidth, phy_data_rate); + continue; + } + + CAM_DBG(CAM_CSIPHY, "table[%d] BW : %llu Selected", + data_rate_idx, bandwidth); + lane_enable = csiphy_device->csiphy_info[idx].lane_enable; + lane_assign = csiphy_device->csiphy_info[idx].lane_assign; + lane_idx = -1; + + while (lane_cnt--) { + lane_idx = cam_csiphy_cphy_get_data_rate_lane_idx( + csiphy_device, idx, (lane_assign & 0xF), + &drate_settings[data_rate_idx]); + if (lane_idx < 0) { + CAM_ERR(CAM_CSIPHY, + "Lane_assign %u failed to find the lane for datarate_idx: %d", + lane_assign, data_rate_idx); + return -EINVAL; + } + + lane_assign >>= 4; + per_lane = &drate_settings[data_rate_idx].per_lane_info[lane_idx]; + + for (i = 0; i < num_reg_entries; i++) { + uint32_t reg_addr = + per_lane->csiphy_data_rate_regs[i].reg_addr; + + uint32_t reg_data = + per_lane->csiphy_data_rate_regs[i].reg_data; + + CAM_DBG(CAM_CSIPHY, "writing reg : %x val : %x", + reg_addr, reg_data); + cam_io_w_mb(reg_data, csiphybase + reg_addr); + } + } + break; + } + + return 0; +} + int32_t cam_csiphy_config_dev(struct csiphy_device *csiphy_dev, int32_t dev_handle) { @@ -668,8 +771,15 @@ int32_t cam_csiphy_config_dev(struct csiphy_device *csiphy_dev, } } - if (csiphy_dev->csiphy_info[index].csiphy_3phase) - cam_csiphy_cphy_data_rate_config(csiphy_dev, index); + if (csiphy_dev->csiphy_info[index].csiphy_3phase) { + rc = cam_csiphy_cphy_data_rate_config(csiphy_dev, index); + if (rc) { + CAM_ERR(CAM_CSIPHY, + "Date rate specific configuration failed rc: %d", + rc); + return rc; + } + } cam_csiphy_cphy_irq_config(csiphy_dev); @@ -1175,9 +1285,8 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, if (csiphy_dev->csiphy_info[offset].secure_mode == 1) { if (cam_cpas_is_feature_supported( CAM_CPAS_SECURE_CAMERA_ENABLE) != 1) { - CAM_WARN(CAM_CSIPHY, + CAM_ERR(CAM_CSIPHY, "sec_cam: camera fuse bit not set"); - rc = 0; goto release_mutex; } @@ -1187,23 +1296,30 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, csiphy_dev->csiphy_info[offset] .secure_mode = CAM_SECURE_MODE_NON_SECURE; - CAM_WARN(CAM_CSIPHY, + CAM_ERR(CAM_CSIPHY, "sec_cam: notify failed: rc: %d", rc); - rc = 0; goto release_mutex; } } - if (csiphy_dev->csiphy_info[offset].csiphy_3phase) - cam_csiphy_cphy_data_rate_config( + + if (csiphy_dev->csiphy_info[offset].csiphy_3phase) { + rc = cam_csiphy_cphy_data_rate_config( csiphy_dev, offset); + if (rc) { + CAM_ERR(CAM_CSIPHY, + "Data rate specific configuration failed rc: %d", + rc); + goto release_mutex; + } + } rc = cam_csiphy_update_lane(csiphy_dev, offset, true); if (csiphy_dump == 1) cam_csiphy_mem_dmp(&csiphy_dev->soc_info); if (rc) { - CAM_WARN(CAM_CSIPHY, - "csiphy_config_dev failed"); + CAM_ERR(CAM_CSIPHY, + "Update enable lane failed, rc: %d", rc); goto release_mutex; } @@ -1236,7 +1352,7 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, CAM_ERR(CAM_CSIPHY, "sec_cam: camera fuse bit not set"); cam_cpas_stop(csiphy_dev->cpas_handle); - rc = -1; + rc = -EINVAL; goto release_mutex; } diff --git a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h index 35c2f585deb7..39e3c62f5678 100644 --- a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h +++ b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h @@ -152,6 +152,11 @@ struct csiphy_reg_t { struct csiphy_device; +struct csiphy_cphy_per_lane_info { + uint8_t lane_identifier; + struct csiphy_reg_t csiphy_data_rate_regs[MAX_DATA_RATE_REGS]; +}; + /* * struct data_rate_reg_info_t * @bandwidth: max bandwidth supported by this reg settings @@ -161,7 +166,8 @@ struct csiphy_device; struct data_rate_reg_info_t { uint64_t bandwidth; ssize_t data_rate_reg_array_size; - struct csiphy_reg_t csiphy_data_rate_regs[MAX_DATA_RATE_REGS]; + struct csiphy_cphy_per_lane_info per_lane_info[ + CAM_CSIPHY_MAX_CPHY_LANES]; }; /** diff --git a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_1_hwreg.h b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_1_hwreg.h index 8bf373677a51..4d8a32940299 100644 --- a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_1_hwreg.h +++ b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_1_hwreg.h @@ -396,58 +396,135 @@ struct data_rate_settings_t data_rate_delta_table_1_2_1 = { { /* (2.5 * 10**3 * 2.28) rounded value*/ .bandwidth = 5700000000, - .data_rate_reg_array_size = 9, - .csiphy_data_rate_regs = { - {0x144, 0x32, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0x32, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0x32, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x164, 0x0B, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x364, 0x0B, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x564, 0x0B, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x16C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x36C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x56C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, - } + .data_rate_reg_array_size = 3, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0x32, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x164, 0x0B, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x16C, 0x25, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0x32, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x364, 0x0B, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x36C, 0x25, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x544, 0x32, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x564, 0x0B, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x56C, 0x25, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + }, }, { /* (3.5 * 10**3 * 2.28) rounded value */ .bandwidth = 7980000000, - .data_rate_reg_array_size = 12, - .csiphy_data_rate_regs = { - {0x144, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x164, 0x33, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x364, 0x33, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x564, 0x33, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x16C, 0x1D, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x36C, 0x1D, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x56C, 0x1D, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x9B4, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x03, 0x01, CSIPHY_DEFAULT_PARAMS}, + .data_rate_reg_array_size = 4, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x164, 0x33, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x16C, 0x1D, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x9B4, 0x03, 0x01, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x364, 0x33, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x36C, 0x1D, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xAB4, 0x03, 0x01, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x544, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x564, 0x33, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x56C, 0x1D, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xBB4, 0x03, 0x01, + CSIPHY_DEFAULT_PARAMS}, + }, + }, }, }, { /* (4.5 * 10**3 * 2.28) rounded value */ .bandwidth = 10260000000, - .data_rate_reg_array_size = 12, - .csiphy_data_rate_regs = { - {0x144, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x164, 0x33, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x364, 0x33, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x564, 0x33, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x16C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x36C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x56C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x9B4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x02, 0x01, CSIPHY_DEFAULT_PARAMS}, + .data_rate_reg_array_size = 4, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x164, 0x33, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x16C, 0x25, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x9B4, 0x02, 0x01, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x364, 0x33, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x36C, 0x25, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xAB4, 0x02, 0x01, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x544, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x564, 0x33, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x56C, 0x25, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xBB4, 0x02, 0x01, + CSIPHY_DEFAULT_PARAMS}, + }, + }, }, - } - } + }, + }, }; - #endif /* _CAM_CSIPHY_1_2_1_HWREG_H_ */ diff --git a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_3_hwreg.h b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_3_hwreg.h index bddd49432d9a..ec6a5499d6fc 100644 --- a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_3_hwreg.h +++ b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_3_hwreg.h @@ -342,56 +342,130 @@ struct data_rate_settings_t data_rate_delta_table_1_2_3 = { { /* (2.5 * 10**3 * 2.28) rounded value*/ .bandwidth = 5700000000, - .data_rate_reg_array_size = 6, - .csiphy_data_rate_regs = { - {0x144, 0x22, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0x22, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0x22, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x9B4, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x03, 0x0A, CSIPHY_DEFAULT_PARAMS}, - - } + .data_rate_reg_array_size = 2, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0x22, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x9B4, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0x22, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xAB4, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x544, 0x22, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xBB4, 0x03, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + }, }, { /* (3.5 * 10**3 * 2.28) rounded value */ .bandwidth = 7980000000, - .data_rate_reg_array_size = 12, - .csiphy_data_rate_regs = { - {0x144, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x988, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x980, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x9B4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x02, 0x0A, CSIPHY_DEFAULT_PARAMS}, + .data_rate_reg_array_size = 4, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x988, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x980, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x9B4, 0x02, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xAB4, 0x02, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xBB4, 0x02, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, }, }, { /* (4.5 * 10**3 * 2.28) rounded value */ .bandwidth = 10260000000, - .data_rate_reg_array_size = 12, - .csiphy_data_rate_regs = { - {0x144, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x988, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x980, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x9B4, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x01, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x01, 0x0A, CSIPHY_DEFAULT_PARAMS}, + .data_rate_reg_array_size = 4, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x988, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x980, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x9B4, 0x01, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xAB4, 0x01, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xBB4, 0x01, 0x0A, + CSIPHY_DEFAULT_PARAMS}, + }, + }, }, - } - } + }, + }, }; #endif /* _CAM_CSIPHY_1_2_3_HWREG_H_ */ diff --git a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_hwreg.h b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_hwreg.h index 446c8197df8a..80821fa1c5fe 100644 --- a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_hwreg.h +++ b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_1_2_hwreg.h @@ -376,57 +376,135 @@ struct data_rate_settings_t data_rate_delta_table_1_2 = { { /* (2.5 * 10**3 * 2.28) rounded value*/ .bandwidth = 5700000000, - .data_rate_reg_array_size = 3, - .csiphy_data_rate_regs = { - {0x144, 0x22, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0x22, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0x22, 0x00, CSIPHY_DEFAULT_PARAMS}, - } + .data_rate_reg_array_size = 1, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x144, 0x22, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x344, 0x22, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x544, 0x22, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + }, }, { /* (3.5 * 10**3 * 2.28) rounded value */ .bandwidth = 7980000000, - .data_rate_reg_array_size = 15, - .csiphy_data_rate_regs = { - {0x9B4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x144, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x988, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x980, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x10C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x30C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x50C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + .data_rate_reg_array_size = 5, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x9B4, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x144, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x988, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x980, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x10C, 0x08, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0xAB4, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x30C, 0x08, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0xBB4, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x544, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x50C, 0x08, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, }, }, { /* (4.5 * 10**3 * 2.28) rounded value */ .bandwidth = 10260000000, - .data_rate_reg_array_size = 15, - .csiphy_data_rate_regs = { - {0x9B4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xAB4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xBB4, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x144, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x344, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x544, 0xB2, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x988, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x980, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xA80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB88, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0xB80, 0x60, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x10C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x30C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x50C, 0x08, 0x00, CSIPHY_DEFAULT_PARAMS}, + .data_rate_reg_array_size = 5, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x9B4, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x144, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x988, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x980, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x10C, 0x08, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0xAB4, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x344, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xA80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x30C, 0x08, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0xBB4, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x544, 0xB2, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB88, 0x05, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0xB80, 0x60, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x50C, 0x08, 0x00, + CSIPHY_DEFAULT_PARAMS}, + }, + }, }, - } - } + }, + }, }; #endif /* _CAM_CSIPHY_1_2_HWREG_H_ */ diff --git a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_2_1_0_hwreg.h b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_2_1_0_hwreg.h index cdeffc9bf754..9cd115be221d 100644 --- a/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_2_1_0_hwreg.h +++ b/drivers/cam_sensor_module/cam_csiphy/include/cam_csiphy_2_1_0_hwreg.h @@ -15,7 +15,7 @@ struct csiphy_reg_parms_t csiphy_v2_1_0 = { .csiphy_common_array_size = 6, .csiphy_reset_array_size = 5, .csiphy_2ph_config_array_size = 19, - .csiphy_3ph_config_array_size = 28, + .csiphy_3ph_config_array_size = 29, .csiphy_2ph_clock_lane = 0x1, .csiphy_2ph_combo_ck_ln = 0x10, }; @@ -286,6 +286,7 @@ struct csiphy_reg_t csiphy_3ph_v2_1_0_reg[MAX_LANES][MAX_SETTINGS_PER_LANE] = { {0x0268, 0xA0, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x026C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0204, 0x04, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0208, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, {0x0214, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0260, 0x50, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0240, 0x80, 0x00, CSIPHY_DEFAULT_PARAMS}, @@ -316,6 +317,7 @@ struct csiphy_reg_t csiphy_3ph_v2_1_0_reg[MAX_LANES][MAX_SETTINGS_PER_LANE] = { {0x0668, 0xA0, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x066C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0604, 0x04, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0608, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, {0x0614, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0660, 0x50, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0640, 0x80, 0x00, CSIPHY_DEFAULT_PARAMS}, @@ -346,6 +348,7 @@ struct csiphy_reg_t csiphy_3ph_v2_1_0_reg[MAX_LANES][MAX_SETTINGS_PER_LANE] = { {0x0A68, 0xA0, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0A6C, 0x25, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0A04, 0x04, 0x00, CSIPHY_DEFAULT_PARAMS}, + {0x0A08, 0x00, 0x00, CSIPHY_SETTLE_CNT_HIGHER_BYTE}, {0x0A14, 0x05, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0A60, 0x50, 0x00, CSIPHY_DEFAULT_PARAMS}, {0x0A40, 0x80, 0x00, CSIPHY_DEFAULT_PARAMS}, @@ -372,71 +375,106 @@ struct data_rate_settings_t data_rate_delta_table_2_1_0 = { { /* (2.5 * 10**3 * 2.28) rounded value*/ .bandwidth = 5700000000, - .data_rate_reg_array_size = 9, - .csiphy_data_rate_regs = { - {0x0290, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0690, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0A90, 0x02, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x020C, 0x03, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0208, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - {0x060C, 0x03, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0608, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - {0x0A0C, 0x03, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0A08, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - - } + .data_rate_reg_array_size = 2, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x0290, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x020C, 0x03, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x0690, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x060C, 0x03, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x0A90, 0x02, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x0A0C, 0x03, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + }, }, { /* (4.5 * 10**3 * 2.28) rounded value */ .bandwidth = 10260000000, - .data_rate_reg_array_size = 9, - .csiphy_data_rate_regs = { - {0x0290, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0690, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0A90, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x020C, 0x03, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0208, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - {0x060C, 0x03, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0608, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - {0x0A0C, 0x03, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0A08, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + .data_rate_reg_array_size = 2, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x0290, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x020C, 0x03, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x0690, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x060C, 0x03, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x0A90, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x0A0C, 0x03, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, }, }, { /* (6.5 * 10**3 * 2.28) rounded value */ .bandwidth = 14820000000, - .data_rate_reg_array_size = 9, - .csiphy_data_rate_regs = { - {0x0290, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0690, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x0A90, 0x03, 0x00, CSIPHY_DEFAULT_PARAMS}, - {0x020C, 0x07, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0208, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - {0x060C, 0x07, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0608, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, - {0x0A0C, 0x07, 0x00, - CSIPHY_SETTLE_CNT_LOWER_BYTE}, - {0x0A08, 0x00, 0x00, - CSIPHY_SETTLE_CNT_HIGHER_BYTE}, + .data_rate_reg_array_size = 2, + .per_lane_info = { + { + .lane_identifier = CPHY_LANE_0, + .csiphy_data_rate_regs = { + {0x0290, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x020C, 0x07, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + { + .lane_identifier = CPHY_LANE_1, + .csiphy_data_rate_regs = { + {0x0690, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x060C, 0x07, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, + { + .lane_identifier = CPHY_LANE_2, + .csiphy_data_rate_regs = { + {0x0A90, 0x03, 0x00, + CSIPHY_DEFAULT_PARAMS}, + {0x0A0C, 0x07, 0x00, + CSIPHY_SETTLE_CNT_LOWER_BYTE}, + }, + }, }, - } - } + }, + }, }; -#endif /* _CAM_CSIPHY_2_1_0_HWREG_H_ */ +#endif /* _CAM_CSIPHY_2_1_0_HWREG_H_ */ \ No newline at end of file