#include <drm/drm_fourcc.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/iopoll.h>
#include <linux/mfd/syscon.h>
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <video/imx-ipu-v3.h>
#include "ipu-prv.h"
#define IPU_PRG_CTL …
#define IPU_PRG_CTL_BYPASS(i) …
#define IPU_PRG_CTL_SOFT_ARID_MASK …
#define IPU_PRG_CTL_SOFT_ARID_SHIFT(i) …
#define IPU_PRG_CTL_SOFT_ARID(i, v) …
#define IPU_PRG_CTL_SO(i) …
#define IPU_PRG_CTL_VFLIP(i) …
#define IPU_PRG_CTL_BLOCK_MODE(i) …
#define IPU_PRG_CTL_CNT_LOAD_EN(i) …
#define IPU_PRG_CTL_SOFTRST …
#define IPU_PRG_CTL_SHADOW_EN …
#define IPU_PRG_STATUS …
#define IPU_PRG_STATUS_BUFFER0_READY(i) …
#define IPU_PRG_STATUS_BUFFER1_READY(i) …
#define IPU_PRG_QOS …
#define IPU_PRG_QOS_ARID_MASK …
#define IPU_PRG_QOS_ARID_SHIFT(i) …
#define IPU_PRG_REG_UPDATE …
#define IPU_PRG_REG_UPDATE_REG_UPDATE …
#define IPU_PRG_STRIDE(i) …
#define IPU_PRG_STRIDE_STRIDE_MASK …
#define IPU_PRG_CROP_LINE …
#define IPU_PRG_THD …
#define IPU_PRG_BADDR(i) …
#define IPU_PRG_OFFSET(i) …
#define IPU_PRG_ILO(i) …
#define IPU_PRG_HEIGHT(i) …
#define IPU_PRG_HEIGHT_PRE_HEIGHT_MASK …
#define IPU_PRG_HEIGHT_PRE_HEIGHT_SHIFT …
#define IPU_PRG_HEIGHT_IPU_HEIGHT_MASK …
#define IPU_PRG_HEIGHT_IPU_HEIGHT_SHIFT …
struct ipu_prg_channel { … };
struct ipu_prg { … };
static DEFINE_MUTEX(ipu_prg_list_mutex);
static LIST_HEAD(ipu_prg_list);
struct ipu_prg *
ipu_prg_lookup_by_phandle(struct device *dev, const char *name, int ipu_id)
{ … }
int ipu_prg_max_active_channels(void)
{ … }
EXPORT_SYMBOL_GPL(…);
bool ipu_prg_present(struct ipu_soc *ipu)
{ … }
EXPORT_SYMBOL_GPL(…);
bool ipu_prg_format_supported(struct ipu_soc *ipu, uint32_t format,
uint64_t modifier)
{ … }
EXPORT_SYMBOL_GPL(…);
int ipu_prg_enable(struct ipu_soc *ipu)
{ … }
EXPORT_SYMBOL_GPL(…);
void ipu_prg_disable(struct ipu_soc *ipu)
{ … }
EXPORT_SYMBOL_GPL(…);
static int ipu_prg_ipu_to_prg_chan(int ipu_chan)
{ … }
static int ipu_prg_get_pre(struct ipu_prg *prg, int prg_chan)
{ … }
static void ipu_prg_put_pre(struct ipu_prg *prg, int prg_chan)
{ … }
void ipu_prg_channel_disable(struct ipuv3_channel *ipu_chan)
{ … }
EXPORT_SYMBOL_GPL(…);
int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
unsigned int axi_id, unsigned int width,
unsigned int height, unsigned int stride,
u32 format, uint64_t modifier, unsigned long *eba)
{ … }
EXPORT_SYMBOL_GPL(…);
bool ipu_prg_channel_configure_pending(struct ipuv3_channel *ipu_chan)
{ … }
EXPORT_SYMBOL_GPL(…);
static int ipu_prg_probe(struct platform_device *pdev)
{ … }
static void ipu_prg_remove(struct platform_device *pdev)
{ … }
#ifdef CONFIG_PM
static int prg_suspend(struct device *dev)
{ … }
static int prg_resume(struct device *dev)
{ … }
#endif
static const struct dev_pm_ops prg_pm_ops = …;
static const struct of_device_id ipu_prg_dt_ids[] = …;
struct platform_driver ipu_prg_drv = …;