Loading Documentation/devicetree/bindings/media/video/msm-eeprom.txt +12 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,13 @@ Optional properties: - cam_vdig-supply : should contain regulator to be used for the digital vdd. - qcom,saddr%d : property should specify the slave address for block (%d). Optional properties -EEPROM Camera Multimodule - qcom,cmm-data-support - Camera MultiModule data capability flag. - qcom,cmm-data-compressed - Camera MultiModule data compresion flag. - qcom,cmm-data-offset - Camera MultiModule data start offset. - qcom,cmm-data-size - Camera MultiModule data size. Example: eeprom0: qcom,eeprom@60 { Loading @@ -78,6 +85,11 @@ Example: qcom,mem1 = <32 0x3000 2 0 1 0>; qcom,saddr1 = <0x62>; qcom,cmm-data-support; qcom,cmm-data-compressed; qcom,cmm-data-offset = <0>; qcom,cmm-data-size = <0>; cam_vdig-supply = <&pm8226_l5>; cam_vio-supply = <&pm8226_lvs1>; qcom,cam-vreg-name = "cam_vdig", "cam_vio"; Loading drivers/media/platform/msm/camera_v2/sensor/eeprom/msm_eeprom.c +59 −2 Original line number Diff line number Diff line Loading @@ -100,6 +100,17 @@ static uint32_t msm_eeprom_match_crc(struct msm_eeprom_memory_block_t *data) return ret; } static int msm_eeprom_get_cmm_data(struct msm_eeprom_ctrl_t *e_ctrl, struct msm_eeprom_cfg_data *cdata) { int rc = 0; struct msm_eeprom_cmm_t *cmm_data = &e_ctrl->eboard_info->cmm_data; cdata->cfg.get_cmm_data.cmm_support = cmm_data->cmm_support; cdata->cfg.get_cmm_data.cmm_compression = cmm_data->cmm_compression; cdata->cfg.get_cmm_data.cmm_size = cmm_data->cmm_size; return rc; } static int eeprom_config_read_cal_data(struct msm_eeprom_ctrl_t *e_ctrl, struct msm_eeprom_cfg_data *cdata) { Loading Loading @@ -154,6 +165,10 @@ static int msm_eeprom_config(struct msm_eeprom_ctrl_t *e_ctrl, CDBG("%s E CFG_EEPROM_READ_CAL_DATA\n", __func__); rc = eeprom_config_read_cal_data(e_ctrl, cdata); break; case CFG_EEPROM_GET_MM_INFO: CDBG("%s E CFG_EEPROM_GET_MM_INFO\n", __func__); rc = msm_eeprom_get_cmm_data(e_ctrl, cdata); break; default: break; } Loading Loading @@ -669,6 +684,39 @@ ERROR1: return rc; } static int msm_eeprom_cmm_dts(struct msm_eeprom_board_info *eb_info, struct device_node *of_node) { int rc = 0; struct msm_eeprom_cmm_t *cmm_data = &eb_info->cmm_data; cmm_data->cmm_support = of_property_read_bool(of_node, "qcom,cmm-data-support"); if (!cmm_data->cmm_support) return -EINVAL; cmm_data->cmm_compression = of_property_read_bool(of_node, "qcom,cmm-data-compressed"); if (!cmm_data->cmm_compression) CDBG("No MM compression data\n"); rc = of_property_read_u32(of_node, "qcom,cmm-data-offset", &cmm_data->cmm_offset); if (rc < 0) CDBG("No MM offset data\n"); rc = of_property_read_u32(of_node, "qcom,cmm-data-size", &cmm_data->cmm_size); if (rc < 0) CDBG("No MM size data\n"); CDBG("cmm_support: cmm_compr %d, cmm_offset %d, cmm_size %d\n", cmm_data->cmm_compression, cmm_data->cmm_offset, cmm_data->cmm_size); return 0; } static int msm_eeprom_spi_setup(struct spi_device *spi) { struct msm_eeprom_ctrl_t *e_ctrl = NULL; Loading Loading @@ -721,6 +769,11 @@ static int msm_eeprom_spi_setup(struct spi_device *spi) pr_err("%s failed %d\n", __func__, __LINE__); goto board_free; } rc = msm_eeprom_cmm_dts(e_ctrl->eboard_info, spi->dev.of_node); if (rc < 0) CDBG("%s MM data miss:%d\n", __func__, __LINE__); power_info = &eb_info->power_info; power_info->clk_info = cam_8974_clk_info; Loading Loading @@ -953,6 +1006,10 @@ static int msm_eeprom_platform_probe(struct platform_device *pdev) goto board_free; } rc = msm_eeprom_cmm_dts(e_ctrl->eboard_info, of_node); if (rc < 0) CDBG("%s MM data miss:%d\n", __func__, __LINE__); rc = msm_eeprom_get_dt_data(e_ctrl); if (rc) goto board_free; Loading include/media/camera2.h +8 −0 Original line number Diff line number Diff line Loading @@ -138,10 +138,18 @@ struct msm_eeprom_memory_block_t { uint32_t num_data; /* size of total mapdata */ }; struct msm_eeprom_cmm_t { uint32_t cmm_support; uint32_t cmm_compression; uint32_t cmm_offset; uint32_t cmm_size; }; struct msm_eeprom_board_info { const char *eeprom_name; uint16_t i2c_slaveaddr; struct msm_camera_power_ctrl_t power_info; struct msm_eeprom_cmm_t cmm_data; }; #endif include/media/msm_cam_sensor.h +8 −0 Original line number Diff line number Diff line Loading @@ -427,6 +427,7 @@ enum eeprom_cfg_type_t { CFG_EEPROM_GET_CAL_DATA, CFG_EEPROM_READ_CAL_DATA, CFG_EEPROM_WRITE_DATA, CFG_EEPROM_GET_MM_INFO, }; struct eeprom_get_t { Loading @@ -443,6 +444,12 @@ struct eeprom_write_t { uint32_t num_bytes; }; struct eeprom_get_cmm_t { uint32_t cmm_support; uint32_t cmm_compression; uint32_t cmm_size; }; struct msm_eeprom_cfg_data { enum eeprom_cfg_type_t cfgtype; uint8_t is_supported; Loading @@ -451,6 +458,7 @@ struct msm_eeprom_cfg_data { struct eeprom_get_t get_data; struct eeprom_read_t read_data; struct eeprom_write_t write_data; struct eeprom_get_cmm_t get_cmm_data; } cfg; }; Loading include/soc/qcom/camera2.h +8 −0 Original line number Diff line number Diff line Loading @@ -138,10 +138,18 @@ struct msm_eeprom_memory_block_t { uint32_t num_data; /* size of total mapdata */ }; struct msm_eeprom_cmm_t { uint32_t cmm_support; uint32_t cmm_compression; uint32_t cmm_offset; uint32_t cmm_size; }; struct msm_eeprom_board_info { const char *eeprom_name; uint16_t i2c_slaveaddr; struct msm_camera_power_ctrl_t power_info; struct msm_eeprom_cmm_t cmm_data; }; #endif Loading
Documentation/devicetree/bindings/media/video/msm-eeprom.txt +12 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,13 @@ Optional properties: - cam_vdig-supply : should contain regulator to be used for the digital vdd. - qcom,saddr%d : property should specify the slave address for block (%d). Optional properties -EEPROM Camera Multimodule - qcom,cmm-data-support - Camera MultiModule data capability flag. - qcom,cmm-data-compressed - Camera MultiModule data compresion flag. - qcom,cmm-data-offset - Camera MultiModule data start offset. - qcom,cmm-data-size - Camera MultiModule data size. Example: eeprom0: qcom,eeprom@60 { Loading @@ -78,6 +85,11 @@ Example: qcom,mem1 = <32 0x3000 2 0 1 0>; qcom,saddr1 = <0x62>; qcom,cmm-data-support; qcom,cmm-data-compressed; qcom,cmm-data-offset = <0>; qcom,cmm-data-size = <0>; cam_vdig-supply = <&pm8226_l5>; cam_vio-supply = <&pm8226_lvs1>; qcom,cam-vreg-name = "cam_vdig", "cam_vio"; Loading
drivers/media/platform/msm/camera_v2/sensor/eeprom/msm_eeprom.c +59 −2 Original line number Diff line number Diff line Loading @@ -100,6 +100,17 @@ static uint32_t msm_eeprom_match_crc(struct msm_eeprom_memory_block_t *data) return ret; } static int msm_eeprom_get_cmm_data(struct msm_eeprom_ctrl_t *e_ctrl, struct msm_eeprom_cfg_data *cdata) { int rc = 0; struct msm_eeprom_cmm_t *cmm_data = &e_ctrl->eboard_info->cmm_data; cdata->cfg.get_cmm_data.cmm_support = cmm_data->cmm_support; cdata->cfg.get_cmm_data.cmm_compression = cmm_data->cmm_compression; cdata->cfg.get_cmm_data.cmm_size = cmm_data->cmm_size; return rc; } static int eeprom_config_read_cal_data(struct msm_eeprom_ctrl_t *e_ctrl, struct msm_eeprom_cfg_data *cdata) { Loading Loading @@ -154,6 +165,10 @@ static int msm_eeprom_config(struct msm_eeprom_ctrl_t *e_ctrl, CDBG("%s E CFG_EEPROM_READ_CAL_DATA\n", __func__); rc = eeprom_config_read_cal_data(e_ctrl, cdata); break; case CFG_EEPROM_GET_MM_INFO: CDBG("%s E CFG_EEPROM_GET_MM_INFO\n", __func__); rc = msm_eeprom_get_cmm_data(e_ctrl, cdata); break; default: break; } Loading Loading @@ -669,6 +684,39 @@ ERROR1: return rc; } static int msm_eeprom_cmm_dts(struct msm_eeprom_board_info *eb_info, struct device_node *of_node) { int rc = 0; struct msm_eeprom_cmm_t *cmm_data = &eb_info->cmm_data; cmm_data->cmm_support = of_property_read_bool(of_node, "qcom,cmm-data-support"); if (!cmm_data->cmm_support) return -EINVAL; cmm_data->cmm_compression = of_property_read_bool(of_node, "qcom,cmm-data-compressed"); if (!cmm_data->cmm_compression) CDBG("No MM compression data\n"); rc = of_property_read_u32(of_node, "qcom,cmm-data-offset", &cmm_data->cmm_offset); if (rc < 0) CDBG("No MM offset data\n"); rc = of_property_read_u32(of_node, "qcom,cmm-data-size", &cmm_data->cmm_size); if (rc < 0) CDBG("No MM size data\n"); CDBG("cmm_support: cmm_compr %d, cmm_offset %d, cmm_size %d\n", cmm_data->cmm_compression, cmm_data->cmm_offset, cmm_data->cmm_size); return 0; } static int msm_eeprom_spi_setup(struct spi_device *spi) { struct msm_eeprom_ctrl_t *e_ctrl = NULL; Loading Loading @@ -721,6 +769,11 @@ static int msm_eeprom_spi_setup(struct spi_device *spi) pr_err("%s failed %d\n", __func__, __LINE__); goto board_free; } rc = msm_eeprom_cmm_dts(e_ctrl->eboard_info, spi->dev.of_node); if (rc < 0) CDBG("%s MM data miss:%d\n", __func__, __LINE__); power_info = &eb_info->power_info; power_info->clk_info = cam_8974_clk_info; Loading Loading @@ -953,6 +1006,10 @@ static int msm_eeprom_platform_probe(struct platform_device *pdev) goto board_free; } rc = msm_eeprom_cmm_dts(e_ctrl->eboard_info, of_node); if (rc < 0) CDBG("%s MM data miss:%d\n", __func__, __LINE__); rc = msm_eeprom_get_dt_data(e_ctrl); if (rc) goto board_free; Loading
include/media/camera2.h +8 −0 Original line number Diff line number Diff line Loading @@ -138,10 +138,18 @@ struct msm_eeprom_memory_block_t { uint32_t num_data; /* size of total mapdata */ }; struct msm_eeprom_cmm_t { uint32_t cmm_support; uint32_t cmm_compression; uint32_t cmm_offset; uint32_t cmm_size; }; struct msm_eeprom_board_info { const char *eeprom_name; uint16_t i2c_slaveaddr; struct msm_camera_power_ctrl_t power_info; struct msm_eeprom_cmm_t cmm_data; }; #endif
include/media/msm_cam_sensor.h +8 −0 Original line number Diff line number Diff line Loading @@ -427,6 +427,7 @@ enum eeprom_cfg_type_t { CFG_EEPROM_GET_CAL_DATA, CFG_EEPROM_READ_CAL_DATA, CFG_EEPROM_WRITE_DATA, CFG_EEPROM_GET_MM_INFO, }; struct eeprom_get_t { Loading @@ -443,6 +444,12 @@ struct eeprom_write_t { uint32_t num_bytes; }; struct eeprom_get_cmm_t { uint32_t cmm_support; uint32_t cmm_compression; uint32_t cmm_size; }; struct msm_eeprom_cfg_data { enum eeprom_cfg_type_t cfgtype; uint8_t is_supported; Loading @@ -451,6 +458,7 @@ struct msm_eeprom_cfg_data { struct eeprom_get_t get_data; struct eeprom_read_t read_data; struct eeprom_write_t write_data; struct eeprom_get_cmm_t get_cmm_data; } cfg; }; Loading
include/soc/qcom/camera2.h +8 −0 Original line number Diff line number Diff line Loading @@ -138,10 +138,18 @@ struct msm_eeprom_memory_block_t { uint32_t num_data; /* size of total mapdata */ }; struct msm_eeprom_cmm_t { uint32_t cmm_support; uint32_t cmm_compression; uint32_t cmm_offset; uint32_t cmm_size; }; struct msm_eeprom_board_info { const char *eeprom_name; uint16_t i2c_slaveaddr; struct msm_camera_power_ctrl_t power_info; struct msm_eeprom_cmm_t cmm_data; }; #endif