The information represented by drm_bridge_timings is also needed by panels, therefore rename drm_bridge_timings to drm_timings. Signed-off-by: Fabrizio Castro <fabrizio.castro@xxxxxxxxxxxxxx> Link: https://www.spinics.net/lists/linux-renesas-soc/msg43271.html --- v1->v2: * new patch I have copied the license from include/drm/drm_bridge.h as that's where the struct originally came from. What's the right SPDX license to use in this case? drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++-- drivers/gpu/drm/bridge/sii902x.c | 2 +- drivers/gpu/drm/bridge/thc63lvd1024.c | 2 +- drivers/gpu/drm/bridge/ti-tfp410.c | 6 ++-- drivers/gpu/drm/pl111/pl111_display.c | 2 +- include/drm/drm_bridge.h | 40 ++--------------------- include/drm/drm_timings.h | 60 +++++++++++++++++++++++++++++++++++ 7 files changed, 71 insertions(+), 47 deletions(-) create mode 100644 include/drm/drm_timings.h diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c b/drivers/gpu/drm/bridge/dumb-vga-dac.c index d32885b..bb1d928 100644 --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c @@ -228,7 +228,7 @@ static int dumb_vga_remove(struct platform_device *pdev) * NOTE: the ADV7123EP seems to have other timings and need a new timings * set if used. */ -static const struct drm_bridge_timings default_dac_timings = { +static const struct drm_timings default_dac_timings = { /* Timing specifications, datasheet page 7 */ .input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE, .setup_time_ps = 500, @@ -239,7 +239,7 @@ static const struct drm_bridge_timings default_dac_timings = { * Information taken from the THS8134, THS8134A, THS8134B datasheet named * "SLVS205D", dated May 1990, revised March 2000. */ -static const struct drm_bridge_timings ti_ths8134_dac_timings = { +static const struct drm_timings ti_ths8134_dac_timings = { /* From timing diagram, datasheet page 9 */ .input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE, /* From datasheet, page 12 */ @@ -252,7 +252,7 @@ static const struct drm_bridge_timings ti_ths8134_dac_timings = { * Information taken from the THS8135 datasheet named "SLAS343B", dated * May 2001, revised April 2013. */ -static const struct drm_bridge_timings ti_ths8135_dac_timings = { +static const struct drm_timings ti_ths8135_dac_timings = { /* From timing diagram, datasheet page 14 */ .input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE, /* From datasheet, page 16 */ diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c index dd7aa46..0c63065 100644 --- a/drivers/gpu/drm/bridge/sii902x.c +++ b/drivers/gpu/drm/bridge/sii902x.c @@ -914,7 +914,7 @@ static int sii902x_i2c_bypass_deselect(struct i2c_mux_core *mux, u32 chan_id) return 0; } -static const struct drm_bridge_timings default_sii902x_timings = { +static const struct drm_timings default_sii902x_timings = { .input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE | DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE | DRM_BUS_FLAG_DE_HIGH, diff --git a/drivers/gpu/drm/bridge/thc63lvd1024.c b/drivers/gpu/drm/bridge/thc63lvd1024.c index 3d74129b..9047a9e 100644 --- a/drivers/gpu/drm/bridge/thc63lvd1024.c +++ b/drivers/gpu/drm/bridge/thc63lvd1024.c @@ -34,7 +34,7 @@ struct thc63_dev { struct drm_bridge bridge; struct drm_bridge *next; - struct drm_bridge_timings timings; + struct drm_timings timings; }; static inline struct thc63_dev *to_thc63(struct drm_bridge *bridge) diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c index dbf35c7..c086b06c 100644 --- a/drivers/gpu/drm/bridge/ti-tfp410.c +++ b/drivers/gpu/drm/bridge/ti-tfp410.c @@ -32,7 +32,7 @@ struct tfp410 { struct delayed_work hpd_work; struct gpio_desc *powerdown; - struct drm_bridge_timings timings; + struct drm_timings timings; struct device *dev; }; @@ -190,7 +190,7 @@ static irqreturn_t tfp410_hpd_irq_thread(int irq, void *arg) return IRQ_HANDLED; } -static const struct drm_bridge_timings tfp410_default_timings = { +static const struct drm_timings tfp410_default_timings = { .input_bus_flags = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE | DRM_BUS_FLAG_DE_HIGH, .setup_time_ps = 1200, @@ -199,7 +199,7 @@ static const struct drm_bridge_timings tfp410_default_timings = { static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c) { - struct drm_bridge_timings *timings = &dvi->timings; + struct drm_timings *timings = &dvi->timings; struct device_node *ep; u32 pclk_sample = 0; u32 bus_width = 24; diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c index 15d2755..c82b21f 100644 --- a/drivers/gpu/drm/pl111/pl111_display.c +++ b/drivers/gpu/drm/pl111/pl111_display.c @@ -188,7 +188,7 @@ static void pl111_display_enable(struct drm_simple_display_pipe *pipe, } if (bridge) { - const struct drm_bridge_timings *btimings = bridge->timings; + const struct drm_timings *btimings = bridge->timings; /* * Here is when things get really fun. Sometimes the bridge diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 7616f65..8270a38 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -27,9 +27,9 @@ #include <linux/ctype.h> #include <drm/drm_mode_object.h> #include <drm/drm_modes.h> +#include <drm/drm_timings.h> struct drm_bridge; -struct drm_bridge_timings; struct drm_panel; /** @@ -337,42 +337,6 @@ struct drm_bridge_funcs { }; /** - * struct drm_bridge_timings - timing information for the bridge - */ -struct drm_bridge_timings { - /** - * @input_bus_flags: - * - * Tells what additional settings for the pixel data on the bus - * this bridge requires (like pixel signal polarity). See also - * &drm_display_info->bus_flags. - */ - u32 input_bus_flags; - /** - * @setup_time_ps: - * - * Defines the time in picoseconds the input data lines must be - * stable before the clock edge. - */ - u32 setup_time_ps; - /** - * @hold_time_ps: - * - * Defines the time in picoseconds taken for the bridge to sample the - * input signal after the clock edge. - */ - u32 hold_time_ps; - /** - * @dual_link: - * - * True if the bus operates in dual-link mode. The exact meaning is - * dependent on the bus type. For LVDS buses, this indicates that even- - * and odd-numbered pixels are received on separate links. - */ - bool dual_link; -}; - -/** * struct drm_bridge - central DRM bridge control structure */ struct drm_bridge { @@ -393,7 +357,7 @@ struct drm_bridge { * * the timing specification for the bridge, if any (may be NULL) */ - const struct drm_bridge_timings *timings; + const struct drm_timings *timings; /** @funcs: control functions */ const struct drm_bridge_funcs *funcs; /** @driver_private: pointer to the bridge driver's internal context */ diff --git a/include/drm/drm_timings.h b/include/drm/drm_timings.h new file mode 100644 index 0000000..4af8814 --- /dev/null +++ b/include/drm/drm_timings.h @@ -0,0 +1,60 @@ +/* + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef __DRM_TIMINGS_H__ +#define __DRM_TIMINGS_H__ + +/** + * struct drm_timings - timing information + */ +struct drm_timings { + /** + * @input_bus_flags: + * + * Tells what additional settings for the pixel data on the bus + * are required (like pixel signal polarity). See also + * &drm_display_info->bus_flags. + */ + u32 input_bus_flags; + /** + * @setup_time_ps: + * + * Defines the time in picoseconds the input data lines must be + * stable before the clock edge. + */ + u32 setup_time_ps; + /** + * @hold_time_ps: + * + * Defines the time in picoseconds taken for the bridge to sample the + * input signal after the clock edge. + */ + u32 hold_time_ps; + /** + * @dual_link: + * + * True if the bus operates in dual-link mode. The exact meaning is + * dependent on the bus type. For LVDS buses, this indicates that even- + * and odd-numbered pixels are received on separate links. + */ + bool dual_link; +}; + +#endif /* __DRM_TIMINGS_H__ */ -- 2.7.4