Unverified Commit 35f36654 authored by Maxime Ripard's avatar Maxime Ripard
Browse files

drm/sun4i: frontend: Add a quirk structure



The ACCESS_CTRL bit is not found on all the variants of the frontend, so
let's introduce a structure that will hold whether or not we need to set
it, and associate it with the compatible.

This will be extended for further similar quirks later on.

Reviewed-by: default avatarPaul Kocialkowski <paul.kocialkowski@bootlin.com>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190118145133.21281-19-paul.kocialkowski@bootlin.com
parent 94018601
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <linux/clk.h>
#include <linux/component.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
@@ -75,6 +76,7 @@ static void sun4i_frontend_scaler_init(struct sun4i_frontend *frontend)
{
	int i;

	if (frontend->data->has_coef_access_ctrl)
		regmap_write_bits(frontend->regs, SUN4I_FRONTEND_FRM_CTRL_REG,
				  SUN4I_FRONTEND_FRM_CTRL_COEF_ACCESS_CTRL,
				  SUN4I_FRONTEND_FRM_CTRL_COEF_ACCESS_CTRL);
@@ -553,6 +555,10 @@ static int sun4i_frontend_bind(struct device *dev, struct device *master,
	frontend->dev = dev;
	frontend->node = dev->of_node;

	frontend->data = of_device_get_match_data(dev);
	if (!frontend->data)
		return -ENODEV;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	regs = devm_ioremap_resource(dev, res);
	if (IS_ERR(regs))
@@ -665,8 +671,15 @@ static const struct dev_pm_ops sun4i_frontend_pm_ops = {
	.runtime_suspend	= sun4i_frontend_runtime_suspend,
};

static const struct sun4i_frontend_data sun8i_a33_frontend = {
	.has_coef_access_ctrl	= true,
};

const struct of_device_id sun4i_frontend_of_table[] = {
	{ .compatible = "allwinner,sun8i-a33-display-frontend" },
	{
		.compatible = "allwinner,sun8i-a33-display-frontend",
		.data = &sun8i_a33_frontend
	},
	{ }
};
EXPORT_SYMBOL(sun4i_frontend_of_table);
+6 −0
Original line number Diff line number Diff line
@@ -112,6 +112,10 @@ struct drm_plane;
struct regmap;
struct reset_control;

struct sun4i_frontend_data {
	bool	has_coef_access_ctrl;
};

struct sun4i_frontend {
	struct list_head	list;
	struct device		*dev;
@@ -122,6 +126,8 @@ struct sun4i_frontend {
	struct clk		*ram_clk;
	struct regmap		*regs;
	struct reset_control	*reset;

	const struct sun4i_frontend_data	*data;
};

extern const struct of_device_id sun4i_frontend_of_table[];