Patch "drm/sun4i: tcon: Move SoC specific quirks to a DT matched data structure" has been added to the 4.9-stable tree
Subsystems (5)
This is a note to let you know that I've just added the patch titled
drm/sun4i: tcon: Move SoC specific quirks to a DT matched data structure
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-sun4i-tcon-move-soc-specific-quirks-to-a-dt-matched-data-structure.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
91ea2f29cba6a7fe035ea232e4f981211a9fce5dMon Sep 17 00:00:00 2001
From: Chen-Yu Tsai <[email protected]>
Date: Thu, 20 Oct 2016 11:43:39 +0800
Subject: drm/sun4i: tcon: Move SoC specific quirks to a DT matched data structure
From: Chen-Yu Tsai <[email protected]>
commit 91ea2f29cba6a7fe035ea232e4f981211a9fce5d upstream.
We already have some differences between the 2 supported SoCs. More will be added as we support other SoCs. To avoid bloating the probe function with even more conditionals, move the quirks to a separate data structure that's tied to the compatible string.
--- drivers/gpu/drm/sun4i/sun4i_tcon.c | 33 ++++++++++++++++++--------------- drivers/gpu/drm/sun4i/sun4i_tcon.h | 11 +++++++---- 2 files changed, 25 insertions(+), 19 deletions(-)
drivers/gpu/drm/sun4i/sun4i_tcon.c +18 -15
@@ -20,6 +20,7 @@#include <linux/component.h> #include <linux/ioport.h> #include <linux/of_address.h> +#include <linux/of_device.h> #include <linux/of_graph.h> #include <linux/of_irq.h> #include <linux/regmap.h>
@@ -62,7 +63,7 @@ void sun4i_tcon_channel_disable(struct sreturn ; } -WARN_ON (!tcon->has_channel_1); +WARN_ON (!tcon->quirks->has_channel_1);regmap_update_bits (tcon->regs,SUN4I_TCON1_CTL_REG ,SUN4I_TCON1_CTL_TCON_ENABLE ,0 );clk_disable_unprepare (tcon->sclk1);
@@ -80,7 +81,7 @@ void sun4i_tcon_channel_enable(struct sureturn ; } -WARN_ON (!tcon->has_channel_1); +WARN_ON (!tcon->quirks->has_channel_1);regmap_update_bits (tcon->regs,SUN4I_TCON1_CTL_REG ,SUN4I_TCON1_CTL_TCON_ENABLE ,SUN4I_TCON1_CTL_TCON_ENABLE );
@@ -202,7 +203,7 @@ void sun4i_tcon1_mode_set(struct sun4i_tu8 clk_delay;u32 val; -WARN_ON (!tcon->has_channel_1); +WARN_ON (!tcon->quirks->has_channel_1);/* Adjust clock delay */ clk_delay =sun4i_tcon_get_clk_delay (mode,1 );
@@ -266,7 +267,7 @@ void sun4i_tcon1_mode_set(struct sun4i_t/* * FIXME: Undocumented bits */ -if (tcon->has_mux) +if (tcon->quirks->has_unknown_mux)regmap_write (tcon->regs,SUN4I_TCON_MUX_CTRL_REG ,1 ); }EXPORT_SYMBOL (sun4i_tcon1_mode_set);
@@ -327,7 +328,7 @@ static int sun4i_tcon_init_clocks(structreturn PTR_ERR (tcon->sclk0); } -if (tcon->has_channel_1) { +if (tcon->quirks->has_channel_1) { tcon->sclk1 =devm_clk_get (dev,"tcon-ch1" );if (IS_ERR (tcon->sclk1)) {dev_err (dev,"Couldn't get the TCON channel 1 clock\n" );
@@ -487,14 +488,7 @@ static int sun4i_tcon_bind(struct device drv->tcon = tcon; tcon->drm = drm; tcon->dev = dev; - -if (of_device_is_compatible (dev->of_node,"allwinner,sun5i-a13-tcon" )) { - tcon->has_mux = true; - tcon->has_channel_1 = true; - }else { - tcon->has_mux = false; - tcon->has_channel_1 = false; - } + tcon->quirks =of_device_get_match_data (dev); tcon->lcd_rst =devm_reset_control_get (dev,"lcd" );if (IS_ERR (tcon->lcd_rst)) {
@@ -588,9 +582,18 @@ static int sun4i_tcon_remove(struct platreturn 0 ; } +static const struct sun4i_tcon_quirks sun5i_a13_quirks = { + .has_unknown_mux = true, + .has_channel_1 = true, +}; + +static const struct sun4i_tcon_quirks sun8i_a33_quirks = { +/* nothing is supported */ +}; +static const struct of_device_id sun4i_tcon_of_table[] = { - { .compatible ="allwinner,sun5i-a13-tcon" }, - { .compatible ="allwinner,sun8i-a33-tcon" }, + { .compatible ="allwinner,sun5i-a13-tcon" , .data = &sun5i_a13_quirks }, + { .compatible ="allwinner,sun8i-a33-tcon" , .data = &sun8i_a33_quirks }, { } };MODULE_DEVICE_TABLE (of, sun4i_tcon_of_table);
drivers/gpu/drm/sun4i/sun4i_tcon.h +7 -4
@@ -142,6 +142,11 @@#define SUN4I_TCON_MAX_CHANNELS 2 +struct sun4i_tcon_quirks { +bool has_unknown_mux;/* sun5i has undocumented mux */ +bool has_channel_1;/* a33 does not have channel 1 */ +}; +struct sun4i_tcon {struct device *dev;struct drm_device *drm;
@@ -160,12 +165,10 @@ struct sun4i_tcon {/* Reset control */ struct reset_control *lcd_rst; -/* Platform adjustments */ -bool has_mux; -struct drm_panel *panel; -bool has_channel_1; +/* Platform adjustments */ +const struct sun4i_tcon_quirks *quirks; };struct drm_bridge *sun4i_tcon_find_bridge (struct device_node *node);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/drm-sun4i-tcon-move-soc-specific-quirks-to-a-dt-matched-data-structure.patch queue-4.9/drm-sun4i-add-compatible-string-for-a31-a31s-tcon-timing-controller.patch queue-4.9/drm-sun4i-add-compatible-strings-for-a31-a31s-display-pipelines.patch