Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 428e718d authored by Vivek Veenam's avatar Vivek Veenam Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: Handle 23.88MHz clock setting for 8916



8916 has support for 23.88MHz mclk, parse the dtsi boolean
variable to set the master clock for 8916

Change-Id: I5ffbd062e8f1e89dc4cf5b6d012f0dbb15f1402e
Signed-off-by: default avatarVivek Veenam <vveenam@codeaurora.org>
parent d843cfb7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ Optional properties:
- qcom,mount-angle : should contain the physical mount angle of the sensor on
    the target
    - 0, 90, 180, 360
- qcom,mclk-23880000 : should be enabled if the supported mclk is 23.88Mhz and
    not 24 Mhz.
- qcom,gpio-no-mux : should contain field to indicate whether gpio mux table is
    available
    - 1 if gpio mux is not available, 0 otherwise
@@ -273,6 +275,7 @@ Example:
               qcom,csi-phy-sel = <0>;
               qcom,sensor-position = <0>;
               qcom,sensor-mode = <1>;
               qcom,mclk-23880000
       };
   };

+29 −0
Original line number Diff line number Diff line
@@ -22,6 +22,26 @@
#define CDBG(fmt, args...) pr_debug(fmt, ##args)

static struct v4l2_file_operations msm_sensor_v4l2_subdev_fops;
static void msm_sensor_adjust_mclk(struct msm_camera_power_ctrl_t *ctrl)
{
	int idx;
	struct msm_sensor_power_setting *power_setting;
	for (idx = 0; idx < ctrl->power_setting_size; idx++) {
		power_setting = &ctrl->power_setting[idx];
		if (power_setting->seq_type == SENSOR_CLK &&
			power_setting->seq_val ==  SENSOR_CAM_MCLK) {
			if (power_setting->config_val == 24000000) {
				power_setting->config_val = 23880000;
				CDBG("%s MCLK request adjusted to 23.88MHz\n"
							, __func__);
			}
			break;
		}
	}

	return;
}

static int32_t msm_camera_get_power_settimgs_from_sensor_lib(
	struct msm_camera_power_ctrl_t *power_info,
	struct msm_sensor_power_setting_array *power_setting_array)
@@ -168,6 +188,12 @@ static int32_t msm_sensor_get_dt_data(struct device_node *of_node,
	CDBG("%s qcom,sensor-mode %d\n", __func__,
		sensordata->sensor_info->modes_supported);

	s_ctrl->set_mclk_23880000 = of_property_read_bool(of_node,
						"qcom,mclk-23880000");

	CDBG("%s qcom,mclk-23880000 %d\n", __func__,
		s_ctrl->set_mclk_23880000);

	rc = msm_sensor_get_dt_csi_data(of_node, &sensordata->csi_lane_params);
	if (rc < 0) {
		pr_err("%s failed %d\n", __func__, __LINE__);
@@ -437,6 +463,9 @@ int msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
		return -EINVAL;
	}

	if (s_ctrl->set_mclk_23880000)
		msm_sensor_adjust_mclk(power_info);

	for (retry = 0; retry < 3; retry++) {
		rc = msm_camera_power_up(power_info, s_ctrl->sensor_device_type,
			sensor_i2c_client);
+1 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ struct msm_sensor_ctrl_t {
	uint32_t id;
	struct device_node *of_node;
	enum msm_camera_stream_type_t camera_stream_type;
	uint32_t set_mclk_23880000;
};

int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void __user *argp);
+6 −0
Original line number Diff line number Diff line
@@ -923,6 +923,12 @@ static int32_t msm_sensor_driver_get_dt_data(struct msm_sensor_ctrl_t *s_ctrl)
		&sensordata->misc_regulator);
	CDBG("qcom,misc_regulator %s", sensordata->misc_regulator);

	s_ctrl->set_mclk_23880000 = of_property_read_bool(of_node,
						"qcom,mclk-23880000");

	CDBG("%s qcom,mclk-23880000 = %d\n", __func__,
		s_ctrl->set_mclk_23880000);

	return rc;

FREE_VREG_DATA:
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ static struct msm_sensor_power_setting ov5645_power_setting[] = {
	{
		.seq_type = SENSOR_CLK,
		.seq_val = SENSOR_CAM_MCLK,
		.config_val = 23880000,
		.config_val = 24000000,
		.delay = 10,
	},
	{