diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/media/platform/msm/ais/isp/msm_isp_axi_util.c | 9 | ||||
| -rw-r--r-- | drivers/media/platform/msm/ais/sensor/msm_sensor_driver.c | 96 | ||||
| -rw-r--r-- | drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 19 |
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) { |
