Skip to content

Commit cbdc56e

Browse files
longxiaowuliochen
authored andcommitted
Improve camera power consumption
add mutex lock for cci init Change-Id: I2a17041a7e926d4237789784a129add7cbf84d0d
1 parent cf3a500 commit cbdc56e

3 files changed

Lines changed: 25 additions & 8 deletions

File tree

drivers/media/platform/msm/camera_v2/sensor/cci/msm_cci.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
#define PRIORITY_QUEUE (QUEUE_0)
5959
#define SYNC_QUEUE (QUEUE_1)
6060

61+
static struct mutex msm_cci_init_mutex =
62+
__MUTEX_INITIALIZER(msm_cci_init_mutex);
63+
64+
6165
static struct v4l2_subdev *g_cci_subdev;
6266

6367
static void msm_cci_dump_registers(struct cci_device *cci_dev,
@@ -1663,11 +1667,27 @@ static int32_t msm_cci_config(struct v4l2_subdev *sd,
16631667
struct msm_camera_cci_ctrl *cci_ctrl)
16641668
{
16651669
int32_t rc = 0;
1670+
1671+
struct cci_device *cci_dev;
1672+
cci_dev = v4l2_get_subdevdata(sd);
1673+
if (!cci_dev || !cci_ctrl) {
1674+
pr_err("%s:%d failed: invalid params %pK %pK\n", __func__,
1675+
__LINE__, cci_dev, cci_ctrl);
1676+
rc = -EINVAL;
1677+
return rc;
1678+
}
1679+
16661680
CDBG("%s line %d cmd %d\n", __func__, __LINE__,
16671681
cci_ctrl->cmd);
16681682
switch (cci_ctrl->cmd) {
16691683
case MSM_CCI_INIT:
1684+
1685+
mutex_lock(cci_dev->cci_init_mutex);
1686+
16701687
rc = msm_cci_init(sd, cci_ctrl);
1688+
1689+
mutex_unlock(cci_dev->cci_init_mutex);
1690+
16711691
break;
16721692
case MSM_CCI_RELEASE:
16731693
rc = msm_cci_release(sd);
@@ -2105,6 +2125,9 @@ static int msm_cci_probe(struct platform_device *pdev)
21052125
return -EFAULT;
21062126
}
21072127

2128+
2129+
new_cci_dev->cci_init_mutex = &msm_cci_init_mutex;
2130+
21082131
new_cci_dev->ref_count = 0;
21092132
new_cci_dev->base = msm_camera_get_reg_base(pdev, "cci", true);
21102133
if (!new_cci_dev->base) {

drivers/media/platform/msm/camera_v2/sensor/cci/msm_cci.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ struct cci_device {
181181
struct workqueue_struct *write_wq[MASTER_MAX];
182182
struct msm_camera_cci_wait_sync_cfg cci_wait_sync_cfg;
183183
uint8_t valid_sync;
184+
struct mutex *cci_init_mutex;
184185
};
185186

186187
enum msm_cci_i2c_cmd_type {

drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ int msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
152152
struct msm_camera_slave_info *slave_info;
153153
const char *sensor_name;
154154
uint32_t retry = 0;
155-
uint32_t check_id_retry = 0;
156155

157156
if (!s_ctrl) {
158157
pr_err("%s:%d failed: %pK\n",
@@ -204,13 +203,7 @@ int msm_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl)
204203
sensor_i2c_client);
205204
if (rc < 0)
206205
return rc;
207-
208-
for(check_id_retry = 0; check_id_retry < 3; check_id_retry++) {
209-
rc = msm_sensor_check_id(s_ctrl);
210-
if (!rc) break;
211-
msleep(20);
212-
}
213-
206+
rc = msm_sensor_check_id(s_ctrl);
214207
if (rc < 0) {
215208
msm_camera_power_down(power_info,
216209
s_ctrl->sensor_device_type, sensor_i2c_client);

0 commit comments

Comments
 (0)