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();
}
Beispiel #2
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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);
}
Beispiel #6
0
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();
}
Beispiel #10
0
void msm_jpeg_hw_fe_start(void *base)
{
	msm_jpeg_hw_write(&hw_cmd_fe_start[0], base);

	return;
}
Beispiel #11
0
void msm_jpeg_hw_fe_start(void)
{
	msm_jpeg_hw_write(&hw_cmd_fe_start[0]);

	return;
}