From df6af9cd24d16006284dab7ecc8d06d53ac0ef65 Mon Sep 17 00:00:00 2001 From: Rajakumar Govindaram Date: Thu, 1 Dec 2011 21:26:20 -0800 Subject: [PATCH] msm-camera: power enable support for autofocus actuator Change-Id: I17c4bf3f216c6f9406ade4c3d4deedddc8b224c3 Signed-off-by: Rajakumar Govindaram --- arch/arm/mach-msm/include/mach/camera.h | 3 ++- drivers/media/video/msm/msm.c | 1 + drivers/media/video/msm/msm_mctl.c | 11 ++++++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-msm/include/mach/camera.h b/arch/arm/mach-msm/include/mach/camera.h index ce89c14dd60..ae1f7539642 100644 --- a/arch/arm/mach-msm/include/mach/camera.h +++ b/arch/arm/mach-msm/include/mach/camera.h @@ -324,7 +324,8 @@ struct msm_sensor_ctrl { struct msm_actuator_ctrl { int (*a_init_table)(void); - int (*a_power_down)(void); + int (*a_power_up)(void *); + int (*a_power_down)(void *); int (*a_create_subdevice)(void *, void *); int (*a_config)(void __user *); }; diff --git a/drivers/media/video/msm/msm.c b/drivers/media/video/msm/msm.c index 251f12dfb23..579c4d552bc 100644 --- a/drivers/media/video/msm/msm.c +++ b/drivers/media/video/msm/msm.c @@ -2407,6 +2407,7 @@ device_fail: adapter = NULL; probe_fail: actctrl->a_init_table = NULL; + actctrl->a_power_up = NULL; actctrl->a_power_down = NULL; actctrl->a_config = NULL; actctrl->a_create_subdevice = NULL; diff --git a/drivers/media/video/msm/msm_mctl.c b/drivers/media/video/msm/msm_mctl.c index 8d502dae7ff..689a614f124 100644 --- a/drivers/media/video/msm/msm_mctl.c +++ b/drivers/media/video/msm/msm_mctl.c @@ -543,6 +543,15 @@ static int msm_mctl_open(struct msm_cam_media_controller *p_mctl, goto msm_open_done; } + if (sync->actctrl.a_power_up) + rc = sync->actctrl.a_power_up( + sync->sdata->actuator_info); + + if (rc < 0) { + pr_err("%s: act power failed:%d\n", __func__, rc); + goto msm_open_done; + } + pm_qos_add_request(&p_mctl->pm_qos_req_list, PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE); @@ -576,7 +585,7 @@ static int msm_mctl_release(struct msm_cam_media_controller *p_mctl) VIDIOC_MSM_CSIPHY_RELEASE, NULL); if (p_mctl->sync.actctrl.a_power_down) - p_mctl->sync.actctrl.a_power_down(); + p_mctl->sync.actctrl.a_power_down(sync->sdata->actuator_info); if (p_mctl->sync.sctrl.s_release) p_mctl->sync.sctrl.s_release();