summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/platform/msm/ais/isp/msm_isp_axi_util.c9
-rw-r--r--drivers/media/platform/msm/ais/sensor/msm_sensor_driver.c96
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c19
3 files changed, 69 insertions, 55 deletions
diff --git a/drivers/media/platform/msm/ais/isp/msm_isp_axi_util.c b/drivers/media/platform/msm/ais/isp/msm_isp_axi_util.c
index f135cfcd6ccd..cd32f62db2f4 100644
--- a/drivers/media/platform/msm/ais/isp/msm_isp_axi_util.c
+++ b/drivers/media/platform/msm/ais/isp/msm_isp_axi_util.c
@@ -3968,7 +3968,7 @@ void msm_isp_process_axi_irq_stream(struct vfe_device *vfe_dev,
struct msm_isp_buffer *done_buf = NULL;
unsigned long flags;
struct timeval *time_stamp;
- struct timeval *time_stamp_system;
+ struct timeval *time_stamp_system = NULL;
uint32_t frame_id, buf_index = -1;
struct msm_vfe_axi_stream *temp_stream;
@@ -4124,9 +4124,10 @@ void msm_isp_process_axi_irq_stream(struct vfe_device *vfe_dev,
stream_info, done_buf, time_stamp, frame_id);
return;
}
-
- msm_isp_process_done_buf(vfe_dev, stream_info,
- done_buf, time_stamp, time_stamp_system, frame_id);
+ if (time_stamp_system != NULL) {
+ msm_isp_process_done_buf(vfe_dev, stream_info,
+ done_buf, time_stamp, time_stamp_system, frame_id);
+ }
}
void msm_isp_process_axi_irq(struct vfe_device *vfe_dev,
diff --git a/drivers/media/platform/msm/ais/sensor/msm_sensor_driver.c b/drivers/media/platform/msm/ais/sensor/msm_sensor_driver.c
index cc01b1f6421b..348023040ec0 100644
--- a/drivers/media/platform/msm/ais/sensor/msm_sensor_driver.c
+++ b/drivers/media/platform/msm/ais/sensor/msm_sensor_driver.c
@@ -73,35 +73,41 @@ static int msm_sensor_suspend(struct device *dev)
return -EFAULT;
}
- /* Turning on cci clock to retain previous state */
- if (!msm_camera_cci_power_up(s_ctrl->sensor_device_type,
- s_ctrl->sensor_i2c_client)) {
- s_ctrl->sensor_state = MSM_SENSOR_CCI_UP;
- }
-
if (s_ctrl->is_csid_tg_mode)
return 0;
- kfree(s_ctrl->stop_setting.reg_setting);
- s_ctrl->stop_setting.reg_setting = NULL;
- if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
- pr_debug("just returning success since sensor is already off %d\n",
- s_ctrl->sensor_state);
- return 0;
- }
- if (s_ctrl->func_tbl->sensor_power_down) {
- if (s_ctrl->sensordata->misc_regulator)
- msm_sensor_misc_regulator(s_ctrl, 0);
+ if (s_ctrl->sensor_state == MSM_SENSOR_CCI_DOWN) {
- rc = s_ctrl->func_tbl->sensor_power_down(s_ctrl);
- if (rc < 0) {
- pr_err("%s:%d failed rc %d\n", __func__,
- __LINE__, rc);
+ /* Turning on cci clock to retain previous state */
+ if (!msm_camera_cci_power_up(s_ctrl->sensor_device_type,
+ s_ctrl->sensor_i2c_client)) {
+ s_ctrl->sensor_state = MSM_SENSOR_CCI_UP;
+ }
+
+ kfree(s_ctrl->stop_setting.reg_setting);
+ s_ctrl->stop_setting.reg_setting = NULL;
+ if (s_ctrl->func_tbl->sensor_power_down) {
+ if (s_ctrl->sensordata->misc_regulator)
+ msm_sensor_misc_regulator(s_ctrl, 0);
+
+ rc = s_ctrl->func_tbl->sensor_power_down(s_ctrl);
+ if (rc < 0) {
+ pr_err("%s:%d failed rc %d\n", __func__,
+ __LINE__, rc);
+ rc = -EFAULT;
+ return rc;
+ }
+ s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;
+ } else {
rc = -EFAULT;
- return rc;
}
- s_ctrl->sensor_state = MSM_SENSOR_POWER_DOWN;
+ } else if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
+ pr_debug("just returning success since sensor is already off %d\n",
+ s_ctrl->sensor_state);
+ return 0;
} else {
+ pr_err("%s:%d invalid state\n", __func__,
+ __LINE__);
rc = -EFAULT;
}
@@ -123,33 +129,41 @@ static int msm_sensor_resume(struct device *dev)
if (s_ctrl->is_csid_tg_mode)
return 0;
- if (s_ctrl->sensor_state == MSM_SENSOR_POWER_UP) {
- pr_debug("just returning success since sensor is alreay on %d\n",
- s_ctrl->sensor_state);
- return 0;
- }
- if (s_ctrl->func_tbl->sensor_power_up) {
- if (s_ctrl->sensordata->misc_regulator)
- msm_sensor_misc_regulator(s_ctrl, 1);
+ if (s_ctrl->sensor_state == MSM_SENSOR_POWER_DOWN) {
- rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);
- if (rc < 0) {
- pr_err("%s:%d failed rc %d\n", __func__,
- __LINE__, rc);
+ if (s_ctrl->func_tbl->sensor_power_up) {
+ if (s_ctrl->sensordata->misc_regulator)
+ msm_sensor_misc_regulator(s_ctrl, 1);
+
+ rc = s_ctrl->func_tbl->sensor_power_up(s_ctrl);
+ if (rc < 0) {
+ pr_err("%s:%d failed rc %d\n", __func__,
+ __LINE__, rc);
+ rc = -EFAULT;
+ return rc;
+ }
+ s_ctrl->sensor_state = MSM_SENSOR_POWER_UP;
+ CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
+ s_ctrl->sensor_state);
+ } else {
rc = -EFAULT;
}
- s_ctrl->sensor_state = MSM_SENSOR_POWER_UP;
- CDBG("%s:%d sensor state %d\n", __func__, __LINE__,
+
+ /* Turning off cci clock to retain previous state */
+ if (!msm_camera_cci_power_down(s_ctrl->sensor_device_type,
+ s_ctrl->sensor_i2c_client)) {
+ s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN;
+ }
+ } else if (s_ctrl->sensor_state == MSM_SENSOR_CCI_DOWN) {
+ pr_debug("just returning success since sensor is already on %d\n",
s_ctrl->sensor_state);
+ rc = 0;
} else {
+ pr_err("%s:%d invalid state\n", __func__,
+ __LINE__);
rc = -EFAULT;
}
- /* Turning off cci clock to retain previous state */
- if (!msm_camera_cci_power_down(s_ctrl->sensor_device_type,
- s_ctrl->sensor_i2c_client)) {
- s_ctrl->sensor_state = MSM_SENSOR_CCI_DOWN;
- }
return rc;
}
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 8b5988e210d5..be90b5c561d6 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -2181,21 +2181,20 @@ static int atl1c_tx_map(struct atl1c_adapter *adapter,
use_tpd->buffer_addr = cpu_to_le64(buffer_info->dma);
use_tpd->buffer_len = cpu_to_le16(buffer_info->length);
}
-
- /* The last tpd */
- use_tpd->word1 |= 1 << TPD_EOP_SHIFT;
- /* The last buffer info contain the skb address,
- so it will be free after unmap */
- buffer_info->skb = skb;
-
- return 0;
-
+ if (use_tpd && buffer_info) {
+ /*The last tpd*/
+ use_tpd->word1 |= 1 << TPD_EOP_SHIFT;
+ /*The last buffer info contain the skb address,
+ *so it will be free after unmap
+ */
+ buffer_info->skb = skb;
+ return 0;
+ }
err_dma:
buffer_info->dma = 0;
buffer_info->length = 0;
return -1;
}
-
static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb,
struct atl1c_tpd_desc *tpd, enum atl1c_trans_queue type)
{