#include <linux/clk.h>
#include <linux/component.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <drm/drm_blend.h>
#include <drm/drm_fourcc.h>
#include <drm/exynos_drm.h>
#include "exynos_drm_drv.h"
#include "exynos_drm_fb.h"
#include "exynos_drm_ipp.h"
#include "regs-scaler.h"
#define scaler_read(offset) …
#define scaler_write(cfg, offset) …
#define SCALER_MAX_CLK …
#define SCALER_AUTOSUSPEND_DELAY …
#define SCALER_RESET_WAIT_RETRIES …
struct scaler_data { … };
struct scaler_context { … };
struct scaler_format { … };
static const struct scaler_format scaler_formats[] = …;
static const struct scaler_format *scaler_get_format(u32 drm_fmt)
{ … }
static inline int scaler_reset(struct scaler_context *scaler)
{ … }
static inline void scaler_enable_int(struct scaler_context *scaler)
{ … }
static inline void scaler_set_src_fmt(struct scaler_context *scaler,
u32 src_fmt, u32 tile)
{ … }
static inline void scaler_set_src_base(struct scaler_context *scaler,
struct exynos_drm_ipp_buffer *src_buf)
{ … }
static inline void scaler_set_src_span(struct scaler_context *scaler,
struct exynos_drm_ipp_buffer *src_buf)
{ … }
static inline void scaler_set_src_luma_chroma_pos(struct scaler_context *scaler,
struct drm_exynos_ipp_task_rect *src_pos,
const struct scaler_format *fmt)
{ … }
static inline void scaler_set_src_wh(struct scaler_context *scaler,
struct drm_exynos_ipp_task_rect *src_pos)
{ … }
static inline void scaler_set_dst_fmt(struct scaler_context *scaler,
u32 dst_fmt)
{ … }
static inline void scaler_set_dst_base(struct scaler_context *scaler,
struct exynos_drm_ipp_buffer *dst_buf)
{ … }
static inline void scaler_set_dst_span(struct scaler_context *scaler,
struct exynos_drm_ipp_buffer *dst_buf)
{ … }
static inline void scaler_set_dst_luma_pos(struct scaler_context *scaler,
struct drm_exynos_ipp_task_rect *dst_pos)
{ … }
static inline void scaler_set_dst_wh(struct scaler_context *scaler,
struct drm_exynos_ipp_task_rect *dst_pos)
{ … }
static inline void scaler_set_hv_ratio(struct scaler_context *scaler,
unsigned int rotation,
struct drm_exynos_ipp_task_rect *src_pos,
struct drm_exynos_ipp_task_rect *dst_pos)
{ … }
static inline void scaler_set_rotation(struct scaler_context *scaler,
unsigned int rotation)
{ … }
static inline void scaler_set_csc(struct scaler_context *scaler,
const struct drm_format_info *fmt)
{ … }
static inline void scaler_set_timer(struct scaler_context *scaler,
unsigned int timer, unsigned int divider)
{ … }
static inline void scaler_start_hw(struct scaler_context *scaler)
{ … }
static int scaler_commit(struct exynos_drm_ipp *ipp,
struct exynos_drm_ipp_task *task)
{ … }
static struct exynos_drm_ipp_funcs ipp_funcs = …;
static inline void scaler_disable_int(struct scaler_context *scaler)
{ … }
static inline u32 scaler_get_int_status(struct scaler_context *scaler)
{ … }
static inline int scaler_task_done(u32 val)
{ … }
static irqreturn_t scaler_irq_handler(int irq, void *arg)
{ … }
static int scaler_bind(struct device *dev, struct device *master, void *data)
{ … }
static void scaler_unbind(struct device *dev, struct device *master,
void *data)
{ … }
static const struct component_ops scaler_component_ops = …;
static int scaler_probe(struct platform_device *pdev)
{ … }
static void scaler_remove(struct platform_device *pdev)
{ … }
static int clk_disable_unprepare_wrapper(struct clk *clk)
{ … }
static int scaler_clk_ctrl(struct scaler_context *scaler, bool enable)
{ … }
static int scaler_runtime_suspend(struct device *dev)
{ … }
static int scaler_runtime_resume(struct device *dev)
{ … }
static DEFINE_RUNTIME_DEV_PM_OPS(scaler_pm_ops, scaler_runtime_suspend,
scaler_runtime_resume, NULL);
static const struct drm_exynos_ipp_limit scaler_5420_two_pixel_hv_limits[] = …;
static const struct drm_exynos_ipp_limit scaler_5420_two_pixel_h_limits[] = …;
static const struct drm_exynos_ipp_limit scaler_5420_one_pixel_limits[] = …;
static const struct drm_exynos_ipp_limit scaler_5420_tile_limits[] = …;
#define IPP_SRCDST_TILE_FORMAT(f, l) …
static const struct exynos_drm_ipp_formats exynos5420_formats[] = …;
static const struct scaler_data exynos5420_data = …;
static const struct scaler_data exynos5433_data = …;
static const struct of_device_id exynos_scaler_match[] = …;
MODULE_DEVICE_TABLE(of, exynos_scaler_match);
struct platform_driver scaler_driver = …;