163 lines
4.0 KiB
C
163 lines
4.0 KiB
C
/*
|
|
* Copyright (C) 2014-2015 Freescale Semiconductor, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
#ifndef __LINUX_IPU_V3_PRE_H_
|
|
#define __LINUX_IPU_V3_PRE_H_
|
|
|
|
#define IPU_PRE_MAX_WIDTH 1920
|
|
#define IPU_PRE_MAX_BPP 4
|
|
#define IPU_PRE_SMALL_LINE 9 /* to workaround errata ERR009624*/
|
|
|
|
struct ipu_rect {
|
|
int left;
|
|
int top;
|
|
int width;
|
|
int height;
|
|
};
|
|
|
|
struct ipu_pre_context {
|
|
bool repeat;
|
|
bool vflip;
|
|
bool handshake_en;
|
|
bool hsk_abort_en;
|
|
unsigned int hsk_line_num;
|
|
bool sdw_update;
|
|
unsigned int block_size;
|
|
unsigned int interlaced;
|
|
unsigned int prefetch_mode;
|
|
|
|
unsigned long cur_buf;
|
|
unsigned long next_buf;
|
|
|
|
unsigned int tile_fmt;
|
|
|
|
unsigned int read_burst;
|
|
unsigned int prefetch_input_bpp;
|
|
unsigned int prefetch_input_pixel_fmt;
|
|
unsigned int prefetch_shift_offset;
|
|
unsigned int prefetch_shift_width;
|
|
bool shift_bypass;
|
|
bool field_inverse;
|
|
bool tpr_coor_offset_en;
|
|
/* the output of prefetch is
|
|
* also the input of store
|
|
*/
|
|
struct ipu_rect prefetch_output_size;
|
|
unsigned int prefetch_input_active_width;
|
|
unsigned int prefetch_input_width;
|
|
unsigned int prefetch_input_height;
|
|
unsigned int store_pitch;
|
|
int interlace_offset;
|
|
|
|
bool store_en;
|
|
unsigned int write_burst;
|
|
unsigned int store_output_bpp;
|
|
|
|
unsigned int sec_buf_off;
|
|
unsigned int trd_buf_off;
|
|
|
|
/* return for IPU fb caller */
|
|
unsigned long store_addr;
|
|
};
|
|
|
|
/*
|
|
* In order to workaround the PRE SoC bug recorded by errata ERR009624,
|
|
* the software cannot write the PRE_CTRL register when the PRE writes
|
|
* the PRE_CTRL register automatically to set the ENABLE bit(bit0) to 1
|
|
* in the PRE repeat mode.
|
|
* The software mechanism to set the PRE_CTRL register is different for
|
|
* PRE Y resolution higher than 9 lines and lower or equal to 9 lines.
|
|
* Use this helper to check the Y resolution.
|
|
*/
|
|
static inline bool ipu_pre_yres_is_small(unsigned int yres)
|
|
{
|
|
return yres <= IPU_PRE_SMALL_LINE;
|
|
}
|
|
|
|
#ifdef CONFIG_MXC_IPU_V3_PRE
|
|
int ipu_pre_alloc(int ipu_id, ipu_channel_t ipu_ch);
|
|
void ipu_pre_free(unsigned int *id);
|
|
unsigned long ipu_pre_alloc_double_buffer(unsigned int id, unsigned int size);
|
|
void ipu_pre_free_double_buffer(unsigned int id);
|
|
int ipu_pre_config(int id, struct ipu_pre_context *config);
|
|
int ipu_pre_set_ctrl(unsigned int id, struct ipu_pre_context *config);
|
|
int ipu_pre_enable(int id);
|
|
void ipu_pre_disable(int id);
|
|
int ipu_pre_set_fb_buffer(int id, bool resolve,
|
|
unsigned long fb_paddr,
|
|
unsigned int y_res,
|
|
unsigned int x_crop,
|
|
unsigned int y_crop,
|
|
unsigned int sec_buf_off,
|
|
unsigned int trd_buf_off);
|
|
int ipu_pre_sdw_update(int id);
|
|
#else
|
|
int ipu_pre_alloc(int ipu_id, ipu_channel_t channel)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
void ipu_pre_free(unsigned int *id)
|
|
{
|
|
}
|
|
|
|
unsigned long ipu_pre_alloc_double_buffer(unsigned int id, unsigned int size)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
void ipu_pre_free_double_buffer(unsigned int id)
|
|
{
|
|
}
|
|
|
|
int ipu_pre_config(int id, struct ipu_pre_context *config)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
int ipu_pre_set_ctrl(unsigned int id, struct ipu_pre_context *config)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
int ipu_pre_enable(int id)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
|
|
void ipu_pre_disable(int id)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int ipu_pre_set_fb_buffer(int id, bool resolve,
|
|
unsigned long fb_paddr,
|
|
unsigned int y_res,
|
|
unsigned int x_crop,
|
|
unsigned int y_crop,
|
|
unsigned int sec_buf_off,
|
|
unsigned int trd_buf_off)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
int ipu_pre_sdw_update(int id)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
#endif
|
|
#endif /* __LINUX_IPU_V3_PRE_H_ */
|