void msm_jpegdma_hw_we_buffer_update(struct msm_jpeg_hw_buf *p_input, uint8_t pingpong_index, void *base) { struct msm_jpeg_hw_cmd *hw_cmd_p; struct msm_jpeg_hw_cmd tmp_hw_cmd; if (pingpong_index != 0) return; hw_cmd_p = &hw_dma_cmd_we_ping_update[0]; msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->y_buffer_addr; JPEG_DBG_HIGH("%s Output we 0 buffer address is %x\n", __func__, p_input->y_buffer_addr); msm_jpeg_hw_write(&tmp_hw_cmd, base); wmb(); tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->cbcr_buffer_addr; JPEG_DBG_HIGH("%s Output we 1 buffer address is %x\n", __func__, p_input->cbcr_buffer_addr); msm_jpeg_hw_write(&tmp_hw_cmd, base); wmb(); }
int msm_jpeg_hw_exec_cmds(struct msm_jpeg_hw_cmd *hw_cmd_p, uint32_t m_cmds, uint32_t max_size, void *base) { int is_copy_to_user = 0; uint32_t data; while (m_cmds--) { if (hw_cmd_p->offset >= max_size) { JPEG_PR_ERR("%s:%d] %d exceed hw region %d\n", __func__, __LINE__, hw_cmd_p->offset, max_size); return -EFAULT; } if (hw_cmd_p->offset & 0x3) { JPEG_PR_ERR("%s:%d] %d Invalid alignment\n", __func__, __LINE__, hw_cmd_p->offset); return -EFAULT; } switch (hw_cmd_p->type) { case MSM_JPEG_HW_CMD_TYPE_READ: hw_cmd_p->data = msm_jpeg_hw_read(hw_cmd_p, base); is_copy_to_user = 1; break; case MSM_JPEG_HW_CMD_TYPE_WRITE: msm_jpeg_hw_write(hw_cmd_p, base); break; case MSM_JPEG_HW_CMD_TYPE_WRITE_OR: data = msm_jpeg_hw_read(hw_cmd_p, base); hw_cmd_p->data = (hw_cmd_p->data & hw_cmd_p->mask) | data; msm_jpeg_hw_write(hw_cmd_p, base); break; case MSM_JPEG_HW_CMD_TYPE_UWAIT: msm_jpeg_hw_wait(hw_cmd_p, 1, base); break; case MSM_JPEG_HW_CMD_TYPE_MWAIT: msm_jpeg_hw_wait(hw_cmd_p, 1000, base); break; case MSM_JPEG_HW_CMD_TYPE_UDELAY: msm_jpeg_hw_delay(hw_cmd_p, 1); break; case MSM_JPEG_HW_CMD_TYPE_MDELAY: msm_jpeg_hw_delay(hw_cmd_p, 1000); break; default: JPEG_PR_ERR("wrong hw command type\n"); break; } hw_cmd_p++; } return is_copy_to_user; }
void msm_jpeg_hw_we_buffer_update(struct msm_jpeg_hw_buf *p_input, uint8_t pingpong_index, void *base) { struct msm_jpeg_hw_cmd *hw_cmd_p; struct msm_jpeg_hw_cmd tmp_hw_cmd; if (pingpong_index == 0) { hw_cmd_p = &hw_cmd_we_ping_update[0]; tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->y_buffer_addr; JPEG_DBG_HIGH("%s Output pln0 buffer address is %x\n", __func__, p_input->y_buffer_addr); msm_jpeg_hw_write(&tmp_hw_cmd, base); tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->cbcr_buffer_addr; JPEG_DBG_HIGH("%s Output pln1 buffer address is %x\n", __func__, p_input->cbcr_buffer_addr); msm_jpeg_hw_write(&tmp_hw_cmd, base); tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->pln2_addr; JPEG_DBG_HIGH("%s Output pln2 buffer address is %x\n", __func__, p_input->pln2_addr); msm_jpeg_hw_write(&tmp_hw_cmd, base); } return; }
void msm_jpeg_hw_fe_buffer_update(struct msm_jpeg_hw_buf *p_input, uint8_t pingpong_index, void *base) { struct msm_jpeg_hw_cmd *hw_cmd_p; if (pingpong_index == 0) { hw_cmd_p = &hw_cmd_fe_ping_update[0]; wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); hw_cmd_p->data = p_input->y_buffer_addr; msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); hw_cmd_p->data = p_input->cbcr_buffer_addr; msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); hw_cmd_p->data = p_input->pln2_addr; msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); } return; }
void msm_jpeg_hw_irq_clear(uint32_t mask, uint32_t data, void *base) { JPEG_DBG("%s:%d] mask %0x data %0x", __func__, __LINE__, mask, data); hw_cmd_irq_clear[0].mask = mask; hw_cmd_irq_clear[0].data = data; msm_jpeg_hw_write(&hw_cmd_irq_clear[0], base); }
void msm_jpeg_hw_reset(void *base, int size) { struct msm_jpeg_hw_cmd *hw_cmd_p; hw_cmd_p = &hw_cmd_reset[0]; wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p, base); wmb(); return; }
void msm_jpegdma_hw_irq_clear(uint32_t mask, uint32_t data, void *base) { struct msm_jpeg_hw_cmd cmd_irq_clear; cmd_irq_clear.type = MSM_JPEG_HW_CMD_TYPE_WRITE; cmd_irq_clear.n = 1; cmd_irq_clear.offset = JPEGDMA_IRQ_CLEAR_ADDR; cmd_irq_clear.mask = mask; cmd_irq_clear.data = data; JPEG_DBG("%s:%d] mask %0x data %0x", __func__, __LINE__, mask, data); msm_jpeg_hw_write(&cmd_irq_clear, base); }
void msm_jpeg_hw_we_buffer_update(struct msm_jpeg_hw_buf *p_input, uint8_t pingpong_index, void *base) { struct msm_jpeg_hw_cmd *hw_cmd_p; if (pingpong_index == 0) { hw_cmd_p = &hw_cmd_we_ping_update[0]; hw_cmd_p->data = p_input->y_buffer_addr; JPEG_PR_ERR("%s Output pln0 buffer address is %x\n", __func__, p_input->y_buffer_addr); msm_jpeg_hw_write(hw_cmd_p++, base); hw_cmd_p->data = p_input->cbcr_buffer_addr; JPEG_PR_ERR("%s Output pln1 buffer address is %x\n", __func__, p_input->cbcr_buffer_addr); msm_jpeg_hw_write(hw_cmd_p++, base); hw_cmd_p->data = p_input->pln2_addr; JPEG_PR_ERR("%s Output pln2 buffer address is %x\n", __func__, p_input->pln2_addr); msm_jpeg_hw_write(hw_cmd_p++, base); } return; }
void msm_jpegdma_hw_fe_buffer_update(struct msm_jpeg_hw_buf *p_input, uint8_t pingpong_index, void *base) { struct msm_jpeg_hw_cmd *hw_cmd_p; struct msm_jpeg_hw_cmd tmp_hw_cmd; if (pingpong_index != 0) return; hw_cmd_p = &hw_dma_cmd_fe_ping_update[0]; wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); msm_jpeg_hw_write(hw_cmd_p++, base); wmb(); tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->y_buffer_addr; msm_jpeg_hw_write(&tmp_hw_cmd, base); wmb(); tmp_hw_cmd = *hw_cmd_p++; tmp_hw_cmd.data = p_input->cbcr_buffer_addr; msm_jpeg_hw_write(&tmp_hw_cmd, base); wmb(); }
void msm_jpeg_hw_fe_start(void *base) { msm_jpeg_hw_write(&hw_cmd_fe_start[0], base); return; }
void msm_jpeg_hw_fe_start(void) { msm_jpeg_hw_write(&hw_cmd_fe_start[0]); return; }