| /* | |
| * Copyright (C) 2014-2015 Freescale Semiconductor, Inc. | |
| * | |
| * The code contained herein is licensed under the GNU General Public | |
| * License. You may obtain a copy of the GNU General Public License | |
| * Version 2 or later at the following locations: | |
| * | |
| * http://www.opensource.org/licenses/gpl-license.html | |
| * http://www.gnu.org/copyleft/gpl.html | |
| */ | |
| #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_ */ |