linux/drivers/gpu/drm/sun4i/sun4i_frontend.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2017 Free Electrons
 * Maxime Ripard <[email protected]>
 */

#include <linux/clk.h>
#include <linux/component.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/reset.h>

#include <drm/drm_device.h>
#include <drm/drm_fb_dma_helper.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_gem_dma_helper.h>
#include <drm/drm_plane.h>

#include "sun4i_drv.h"
#include "sun4i_frontend.h"

static const u32 sun4i_frontend_vert_coef[32] =;

static const u32 sun4i_frontend_horz_coef[64] =;

/*
 * These coefficients are taken from the A33 BSP from Allwinner.
 *
 * The first three values of each row are coded as 13-bit signed fixed-point
 * numbers, with 10 bits for the fractional part. The fourth value is a
 * constant coded as a 14-bit signed fixed-point number with 4 bits for the
 * fractional part.
 *
 * The values in table order give the following colorspace translation:
 * G = 1.164 * Y - 0.391 * U - 0.813 * V + 135
 * R = 1.164 * Y + 1.596 * V - 222
 * B = 1.164 * Y + 2.018 * U + 276
 *
 * This seems to be a conversion from Y[16:235] UV[16:240] to RGB[0:255],
 * following the BT601 spec.
 */
const u32 sunxi_bt601_yuv2rgb_coef[12] =;
EXPORT_SYMBOL();

static void sun4i_frontend_scaler_init(struct sun4i_frontend *frontend)
{}

int sun4i_frontend_init(struct sun4i_frontend *frontend)
{}
EXPORT_SYMBOL();

void sun4i_frontend_exit(struct sun4i_frontend *frontend)
{}
EXPORT_SYMBOL();

static bool sun4i_frontend_format_chroma_requires_swap(uint32_t fmt)
{}

static bool sun4i_frontend_format_supports_tiling(uint32_t fmt)
{}

void sun4i_frontend_update_buffer(struct sun4i_frontend *frontend,
				  struct drm_plane *plane)
{}
EXPORT_SYMBOL();

static int
sun4i_frontend_drm_format_to_input_fmt(const struct drm_format_info *format,
				       u32 *val)
{}

static int
sun4i_frontend_drm_format_to_input_mode(const struct drm_format_info *format,
					uint64_t modifier, u32 *val)
{}

static int
sun4i_frontend_drm_format_to_input_sequence(const struct drm_format_info *format,
					    u32 *val)
{}

static int sun4i_frontend_drm_format_to_output_fmt(uint32_t fmt, u32 *val)
{}

static const uint32_t sun4i_frontend_formats[] =;

bool sun4i_frontend_format_is_supported(uint32_t fmt, uint64_t modifier)
{}
EXPORT_SYMBOL();

int sun4i_frontend_update_formats(struct sun4i_frontend *frontend,
				  struct drm_plane *plane, uint32_t out_fmt)
{}
EXPORT_SYMBOL();

void sun4i_frontend_update_coord(struct sun4i_frontend *frontend,
				 struct drm_plane *plane)
{}
EXPORT_SYMBOL();

int sun4i_frontend_enable(struct sun4i_frontend *frontend)
{}
EXPORT_SYMBOL();

static const struct regmap_config sun4i_frontend_regmap_config =;

static int sun4i_frontend_bind(struct device *dev, struct device *master,
			 void *data)
{}

static void sun4i_frontend_unbind(struct device *dev, struct device *master,
			    void *data)
{}

static const struct component_ops sun4i_frontend_ops =;

static int sun4i_frontend_probe(struct platform_device *pdev)
{}

static void sun4i_frontend_remove(struct platform_device *pdev)
{}

static int sun4i_frontend_runtime_resume(struct device *dev)
{}

static int sun4i_frontend_runtime_suspend(struct device *dev)
{}

static const struct dev_pm_ops sun4i_frontend_pm_ops =;

static const struct sun4i_frontend_data sun4i_a10_frontend =;

static const struct sun4i_frontend_data sun8i_a33_frontend =;

const struct of_device_id sun4i_frontend_of_table[] =;
EXPORT_SYMBOL();
MODULE_DEVICE_TABLE(of, sun4i_frontend_of_table);

static struct platform_driver sun4i_frontend_driver =;
module_platform_driver();

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();