From: Stefan Agner <stefan@agner.ch>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
Tomi Valkeinen <tomi.valkeinen@ti.com>,
Thierry Reding <thierry.reding@gmail.com>,
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2 36/49] drm: Use new DRM_BUS_FLAG_*_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags
Date: Fri, 11 Jan 2019 09:53:41 +0100 [thread overview]
Message-ID: <0589409e1078fb0064fd88be77ae1f7f@agner.ch> (raw)
In-Reply-To: <20190111035120.20668-37-laurent.pinchart@ideasonboard.com>
On 11.01.2019 04:51, Laurent Pinchart wrote:
> From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> The DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and
> DRM_BUS_FLAG_SYNC_(POS|NEG)EDGE flags are deprecated in favour of the
> new DRM_BUS_FLAG_PIXDATA_(DRIVE|SAMPLE)_(POS|NEG)EDGE and
> new DRM_BUS_FLAG_SYNC_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags. Replace them
> through the code.
>
> This effectively changes the value of the .sampling_edge bridge timings
> field in the dumb-vga-dac driver. This is safe to do as no driver
> consumes these values yet.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Acked-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Stefan Agner <stefan@agner.ch>
--
Stefan
> ---
> Changes since v1:
>
> - Clarify commit message
> - Address the DRM_BUS_FLAG_SYNC_* flags
> - Rebase on top of drm-next
> ---
> drivers/gpu/drm/bridge/dumb-vga-dac.c | 6 ++---
> drivers/gpu/drm/drm_modes.c | 12 +++++-----
> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 2 +-
> drivers/gpu/drm/imx/ipuv3-crtc.c | 2 +-
> drivers/gpu/drm/mxsfb/mxsfb_crtc.c | 6 ++---
> .../gpu/drm/omapdrm/displays/encoder-tfp410.c | 5 ++--
> .../displays/panel-lgphilips-lb035q02.c | 5 ++--
> .../omapdrm/displays/panel-nec-nl8048hl11.c | 5 ++--
> .../displays/panel-sharp-ls037v7dw01.c | 5 ++--
> .../omapdrm/displays/panel-sony-acx565akm.c | 5 ++--
> .../omapdrm/displays/panel-tpo-td028ttec1.c | 5 ++--
> .../omapdrm/displays/panel-tpo-td043mtea1.c | 5 ++--
> drivers/gpu/drm/omapdrm/dss/dsi.c | 4 ++--
> drivers/gpu/drm/omapdrm/dss/sdi.c | 4 ++--
> drivers/gpu/drm/omapdrm/omap_encoder.c | 8 +++----
> drivers/gpu/drm/panel/panel-arm-versatile.c | 4 ++--
> drivers/gpu/drm/panel/panel-ilitek-ili9322.c | 4 ++--
> drivers/gpu/drm/panel/panel-seiko-43wvf1g.c | 2 +-
> drivers/gpu/drm/panel/panel-simple.c | 24 +++++++++----------
> drivers/gpu/drm/pl111/pl111_display.c | 2 +-
> drivers/gpu/drm/sun4i/sun4i_tcon.c | 4 ++--
> drivers/gpu/drm/tve200/tve200_display.c | 3 ++-
> include/drm/drm_bridge.h | 9 +++----
> 23 files changed, 70 insertions(+), 61 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/dumb-vga-dac.c
> b/drivers/gpu/drm/bridge/dumb-vga-dac.c
> index 9b706789a341..7dc14c22f7db 100644
> --- a/drivers/gpu/drm/bridge/dumb-vga-dac.c
> +++ b/drivers/gpu/drm/bridge/dumb-vga-dac.c
> @@ -234,7 +234,7 @@ static int dumb_vga_remove(struct platform_device *pdev)
> */
> static const struct drm_bridge_timings default_dac_timings = {
> /* Timing specifications, datasheet page 7 */
> - .sampling_edge = DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .sampling_edge = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
> .setup_time_ps = 500,
> .hold_time_ps = 1500,
> };
> @@ -245,7 +245,7 @@ static const struct drm_bridge_timings
> default_dac_timings = {
> */
> static const struct drm_bridge_timings ti_ths8134_dac_timings = {
> /* From timing diagram, datasheet page 9 */
> - .sampling_edge = DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .sampling_edge = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
> /* From datasheet, page 12 */
> .setup_time_ps = 3000,
> /* I guess this means latched input */
> @@ -258,7 +258,7 @@ static const struct drm_bridge_timings
> ti_ths8134_dac_timings = {
> */
> static const struct drm_bridge_timings ti_ths8135_dac_timings = {
> /* From timing diagram, datasheet page 14 */
> - .sampling_edge = DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .sampling_edge = DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE,
> /* From datasheet, page 16 */
> .setup_time_ps = 2000,
> .hold_time_ps = 500,
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index 24a750436559..bf49ee1a09e1 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -662,22 +662,22 @@ EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
> * @bus_flags: information about pixelclk, sync and DE polarity will be stored
> * here
> *
> - * Sets DRM_BUS_FLAG_DE_(LOW|HIGH), DRM_BUS_FLAG_PIXDATA_(POS|NEG)EDGE and
> - * DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to DISPLAY_FLAGS
> + * Sets DRM_BUS_FLAG_DE_(LOW|HIGH), DRM_BUS_FLAG_PIXDATA_DRIVE_(POS|NEG)EDGE
> + * and DISPLAY_FLAGS_SYNC_(POS|NEG)EDGE in @bus_flags according to
> DISPLAY_FLAGS
> * found in @vm
> */
> void drm_bus_flags_from_videomode(const struct videomode *vm, u32 *bus_flags)
> {
> *bus_flags = 0;
> if (vm->flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
> - *bus_flags |= DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + *bus_flags |= DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
> if (vm->flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
> - *bus_flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE;
> + *bus_flags |= DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE;
>
> if (vm->flags & DISPLAY_FLAGS_SYNC_POSEDGE)
> - *bus_flags |= DRM_BUS_FLAG_SYNC_POSEDGE;
> + *bus_flags |= DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE;
> if (vm->flags & DISPLAY_FLAGS_SYNC_NEGEDGE)
> - *bus_flags |= DRM_BUS_FLAG_SYNC_NEGEDGE;
> + *bus_flags |= DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE;
>
> if (vm->flags & DISPLAY_FLAGS_DE_LOW)
> *bus_flags |= DRM_BUS_FLAG_DE_LOW;
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> index 18afc94e4dff..1aaf8b48413e 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> @@ -94,7 +94,7 @@ static void fsl_dcu_drm_crtc_mode_set_nofb(struct
> drm_crtc *crtc)
> drm_display_mode_to_videomode(mode, &vm);
>
> /* INV_PXCK as default (most display sample data on rising edge) */
> - if (!(con->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_POSEDGE))
> + if (!(con->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE))
> pol |= DCU_SYN_POL_INV_PXCK;
>
> if (vm.flags & DISPLAY_FLAGS_HSYNC_LOW)
> diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
> index 058b53c0aa7e..4ddf81d0ac11 100644
> --- a/drivers/gpu/drm/imx/ipuv3-crtc.c
> +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
> @@ -269,7 +269,7 @@ static void ipu_crtc_mode_set_nofb(struct drm_crtc *crtc)
> sig_cfg.enable_pol = !(imx_crtc_state->bus_flags & DRM_BUS_FLAG_DE_LOW);
> /* Default to driving pixel data on negative clock edges */
> sig_cfg.clk_pol = !!(imx_crtc_state->bus_flags &
> - DRM_BUS_FLAG_PIXDATA_POSEDGE);
> + DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE);
> sig_cfg.bus_format = imx_crtc_state->bus_format;
> sig_cfg.v_to_h_sync = 0;
> sig_cfg.hsync_pin = imx_crtc_state->di_hsync_pin;
> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> index 24b1f0c1432e..5c4be8366743 100644
> --- a/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> +++ b/drivers/gpu/drm/mxsfb/mxsfb_crtc.c
> @@ -253,12 +253,12 @@ static void mxsfb_crtc_mode_set_nofb(struct
> mxsfb_drm_private *mxsfb)
> if (!(bus_flags & DRM_BUS_FLAG_DE_LOW))
> vdctrl0 |= VDCTRL0_ENABLE_ACT_HIGH;
> /*
> - * DRM_BUS_FLAG_PIXDATA_ defines are controller centric,
> + * DRM_BUS_FLAG_PIXDATA_DRIVE_ defines are controller centric,
> * controllers VDCTRL0_DOTCLK is display centric.
> * Drive on positive edge -> display samples on falling edge
> - * DRM_BUS_FLAG_PIXDATA_POSEDGE -> VDCTRL0_DOTCLK_ACT_FALLING
> + * DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE -> VDCTRL0_DOTCLK_ACT_FALLING
> */
> - if (bus_flags & DRM_BUS_FLAG_PIXDATA_POSEDGE)
> + if (bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE)
> vdctrl0 |= VDCTRL0_DOTCLK_ACT_FALLING;
>
> writel(vdctrl0, mxsfb->base + LCDC_VDCTRL0);
> diff --git a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> index fb88537de1cc..de954182c4bb 100644
> --- a/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> +++ b/drivers/gpu/drm/omapdrm/displays/encoder-tfp410.c
> @@ -86,8 +86,9 @@ static int tfp410_probe(struct platform_device *pdev)
> dssdev->type = OMAP_DISPLAY_TYPE_DPI;
> dssdev->owner = THIS_MODULE;
> dssdev->of_ports = BIT(1) | BIT(0);
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_POSEDGE
> - | DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
>
> dssdev->next = omapdss_of_find_connected_device(pdev->dev.of_node, 1);
> if (IS_ERR(dssdev->next)) {
> diff --git
> a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> index 4133351924be..99f2350d462c 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-lgphilips-lb035q02.c
> @@ -207,8 +207,9 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
> * DE is active LOW
> * DATA needs to be driven on the FALLING edge
> */
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_NEGEDGE
> - | DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
>
> omapdss_display_init(dssdev);
> omapdss_device_register(dssdev);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> index 498a88307f04..c2409815a204 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-nec-nl8048hl11.c
> @@ -196,8 +196,9 @@ static int nec_8048_probe(struct spi_device *spi)
> dssdev->owner = THIS_MODULE;
> dssdev->of_ports = BIT(0);
> dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_POSEDGE
> - | DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
>
> omapdss_display_init(dssdev);
> omapdss_device_register(dssdev);
> diff --git
> a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> index 1e68e0d14f87..9c545de430f6 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sharp-ls037v7dw01.c
> @@ -216,8 +216,9 @@ static int sharp_ls_probe(struct platform_device *pdev)
> * Note: According to the panel documentation:
> * DATA needs to be driven on the FALLING edge
> */
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_NEGEDGE
> - | DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
>
> omapdss_display_init(dssdev);
> omapdss_device_register(dssdev);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> index abee0b348cff..2038def14ba1 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-sony-acx565akm.c
> @@ -710,8 +710,9 @@ static int acx565akm_probe(struct spi_device *spi)
> dssdev->owner = THIS_MODULE;
> dssdev->of_ports = BIT(0);
> dssdev->ops_flags = OMAP_DSS_DEVICE_OP_MODES;
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_NEGEDGE
> - | DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
>
> omapdss_display_init(dssdev);
> omapdss_device_register(dssdev);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> index 5b4fbcc196bc..fa80d4f7f699 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td028ttec1.c
> @@ -330,8 +330,9 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
> * Note: According to the panel documentation:
> * SYNC needs to be driven on the FALLING edge
> */
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_POSEDGE
> - | DRM_BUS_FLAG_PIXDATA_NEGEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE;
>
> omapdss_display_init(dssdev);
> omapdss_device_register(dssdev);
> diff --git a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> index 781dc8b0afe7..0b692fc7e5ea 100644
> --- a/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> +++ b/drivers/gpu/drm/omapdrm/displays/panel-tpo-td043mtea1.c
> @@ -429,8 +429,9 @@ static int tpo_td043_probe(struct spi_device *spi)
> * Note: According to the panel documentation:
> * SYNC needs to be driven on the FALLING edge
> */
> - dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_SYNC_POSEDGE
> - | DRM_BUS_FLAG_PIXDATA_NEGEDGE;
> + dssdev->bus_flags = DRM_BUS_FLAG_DE_HIGH
> + | DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE
> + | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE;
>
> omapdss_display_init(dssdev);
> omapdss_device_register(dssdev);
> diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c
> b/drivers/gpu/drm/omapdrm/dss/dsi.c
> index 2582b566e0b0..5c34fba51975 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dsi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
> @@ -5127,9 +5127,9 @@ static int dsi_init_output(struct dsi_data *dsi)
> out->ops = &dsi_ops;
> out->owner = THIS_MODULE;
> out->of_ports = BIT(0);
> - out->bus_flags = DRM_BUS_FLAG_PIXDATA_POSEDGE
> + out->bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE
> | DRM_BUS_FLAG_DE_HIGH
> - | DRM_BUS_FLAG_SYNC_NEGEDGE;
> + | DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE;
>
> r = omapdss_device_init_output(out);
> if (r < 0)
> diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c
> b/drivers/gpu/drm/omapdrm/dss/sdi.c
> index e7945322c471..7aae52984fed 100644
> --- a/drivers/gpu/drm/omapdrm/dss/sdi.c
> +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
> @@ -279,8 +279,8 @@ static int sdi_init_output(struct sdi_device *sdi)
> out->of_ports = BIT(1);
> out->ops = &sdi_ops;
> out->owner = THIS_MODULE;
> - out->bus_flags = DRM_BUS_FLAG_PIXDATA_POSEDGE /* 15.5.9.1.2 */
> - | DRM_BUS_FLAG_SYNC_POSEDGE;
> + out->bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE /* 15.5.9.1.2 */
> + | DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE;
>
> r = omapdss_device_init_output(out);
> if (r < 0)
> diff --git a/drivers/gpu/drm/omapdrm/omap_encoder.c
> b/drivers/gpu/drm/omapdrm/omap_encoder.c
> index 98c512cb05f0..e71d359a8f07 100644
> --- a/drivers/gpu/drm/omapdrm/omap_encoder.c
> +++ b/drivers/gpu/drm/omapdrm/omap_encoder.c
> @@ -114,17 +114,17 @@ static void omap_encoder_mode_set(struct
> drm_encoder *encoder,
>
> if (!(vm.flags & (DISPLAY_FLAGS_PIXDATA_POSEDGE |
> DISPLAY_FLAGS_PIXDATA_NEGEDGE))) {
> - if (bus_flags & DRM_BUS_FLAG_PIXDATA_POSEDGE)
> + if (bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE)
> vm.flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE;
> - else if (bus_flags & DRM_BUS_FLAG_PIXDATA_NEGEDGE)
> + else if (bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
> vm.flags |= DISPLAY_FLAGS_PIXDATA_NEGEDGE;
> }
>
> if (!(vm.flags & (DISPLAY_FLAGS_SYNC_POSEDGE |
> DISPLAY_FLAGS_SYNC_NEGEDGE))) {
> - if (bus_flags & DRM_BUS_FLAG_SYNC_POSEDGE)
> + if (bus_flags & DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE)
> vm.flags |= DISPLAY_FLAGS_SYNC_POSEDGE;
> - else if (bus_flags & DRM_BUS_FLAG_SYNC_NEGEDGE)
> + else if (bus_flags & DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE)
> vm.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
> }
> }
> diff --git a/drivers/gpu/drm/panel/panel-arm-versatile.c
> b/drivers/gpu/drm/panel/panel-arm-versatile.c
> index b428c4678106..078fa2c0eef8 100644
> --- a/drivers/gpu/drm/panel/panel-arm-versatile.c
> +++ b/drivers/gpu/drm/panel/panel-arm-versatile.c
> @@ -191,7 +191,7 @@ static const struct versatile_panel_type
> versatile_panels[] = {
> .vrefresh = 390,
> .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
> },
> - .bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> },
> /*
> * Sanyo ALR252RGT 240x320 portrait display found on the
> @@ -215,7 +215,7 @@ static const struct versatile_panel_type
> versatile_panels[] = {
> .vrefresh = 116,
> .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
> },
> - .bus_flags = DRM_BUS_FLAG_PIXDATA_NEGEDGE,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> .ib2 = true,
> },
> };
> diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> b/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> index bd38bf4f1ba6..35497ff08391 100644
> --- a/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9322.c
> @@ -412,11 +412,11 @@ static int ili9322_init(struct drm_panel *panel,
> struct ili9322 *ili)
> if (ili->conf->dclk_active_high) {
> reg = ILI9322_POL_DCLK;
> connector->display_info.bus_flags |=
> - DRM_BUS_FLAG_PIXDATA_POSEDGE;
> + DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE;
> } else {
> reg = 0;
> connector->display_info.bus_flags |=
> - DRM_BUS_FLAG_PIXDATA_NEGEDGE;
> + DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE;
> }
> if (ili->conf->de_active_high) {
> reg |= ILI9322_POL_DE;
> diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> index 2d99e28ff117..bdcc5d80823d 100644
> --- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> +++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c
> @@ -328,7 +328,7 @@ static const struct seiko_panel_desc seiko_43wvf1g = {
> .height = 57,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_NEGEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> };
>
> static const struct of_device_id platform_of_match[] = {
> diff --git a/drivers/gpu/drm/panel/panel-simple.c
> b/drivers/gpu/drm/panel/panel-simple.c
> index 9c69e739a524..2657adf21a7f 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -914,7 +914,7 @@ static const struct panel_desc cdtech_s043wq26h_ct7 = {
> .width = 95,
> .height = 54,
> },
> - .bus_flags = DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode cdtech_s070wv95_ct16_mode = {
> @@ -1034,7 +1034,7 @@ static const struct panel_desc
> dataimage_scf0700c48ggu18 = {
> .height = 91,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct display_timing dlc_dlc0700yzg_1_timing = {
> @@ -1119,7 +1119,7 @@ static const struct panel_desc edt_et057090dhu = {
> .height = 86,
> },
> .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_NEGEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> };
>
> static const struct drm_display_mode edt_etm0700g0dh6_mode = {
> @@ -1145,7 +1145,7 @@ static const struct panel_desc edt_etm0700g0dh6 = {
> .height = 91,
> },
> .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_NEGEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> };
>
> static const struct panel_desc edt_etm0700g0bdh6 = {
> @@ -1157,7 +1157,7 @@ static const struct panel_desc edt_etm0700g0bdh6 = {
> .height = 91,
> },
> .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode foxlink_fl500wvr00_a0t_mode = {
> @@ -1311,7 +1311,7 @@ static const struct panel_desc innolux_at043tn24 = {
> .height = 54,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode innolux_at070tn92_mode = {
> @@ -1794,7 +1794,7 @@ static const struct panel_desc nec_nl4827hc19_05b = {
> .height = 54,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode netron_dy_e231732_mode = {
> @@ -1843,8 +1843,8 @@ static const struct panel_desc
> newhaven_nhd_43_480272ef_atxl = {
> .height = 54,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_POSEDGE |
> - DRM_BUS_FLAG_SYNC_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
> + DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
> };
>
> static const struct display_timing nlt_nl192108ac18_02d_timing = {
> @@ -2005,7 +2005,7 @@ static const struct panel_desc ortustech_com43h4m85ulc = {
> .height = 93,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode qd43003c0_40_mode = {
> @@ -2350,7 +2350,7 @@ static const struct panel_desc toshiba_lt089ac29000 = {
> .height = 116,
> },
> .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> - .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode tpk_f07a_0102_mode = {
> @@ -2373,7 +2373,7 @@ static const struct panel_desc tpk_f07a_0102 = {
> .width = 152,
> .height = 91,
> },
> - .bus_flags = DRM_BUS_FLAG_PIXDATA_POSEDGE,
> + .bus_flags = DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
> };
>
> static const struct drm_display_mode tpk_f10a_0102_mode = {
> diff --git a/drivers/gpu/drm/pl111/pl111_display.c
> b/drivers/gpu/drm/pl111/pl111_display.c
> index 754f6b25f265..0c5d391f0a8f 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,
> tim2 |= TIM2_IOE;
>
> if (connector->display_info.bus_flags &
> - DRM_BUS_FLAG_PIXDATA_NEGEDGE)
> + DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
> tim2 |= TIM2_IPC;
> }
>
> diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> index 0420f5c978b9..a19dc28bcb36 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
> @@ -561,10 +561,10 @@ static void sun4i_tcon0_mode_set_rgb(struct
> sun4i_tcon *tcon,
> * Following code is a way to avoid quirks all around TCON
> * and DOTCLOCK drivers.
> */
> - if (display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_POSEDGE)
> + if (display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE)
> clk_set_phase(tcon->dclk, 240);
>
> - if (display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_NEGEDGE)
> + if (display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
> clk_set_phase(tcon->dclk, 0);
>
> regmap_update_bits(tcon->regs, SUN4I_TCON0_IO_POL_REG,
> diff --git a/drivers/gpu/drm/tve200/tve200_display.c
> b/drivers/gpu/drm/tve200/tve200_display.c
> index e8723a2412a6..d775d10dbe6a 100644
> --- a/drivers/gpu/drm/tve200/tve200_display.c
> +++ b/drivers/gpu/drm/tve200/tve200_display.c
> @@ -149,7 +149,8 @@ static void tve200_display_enable(struct
> drm_simple_display_pipe *pipe,
> /* Vsync IRQ at start of Vsync at first */
> ctrl1 |= TVE200_VSTSTYPE_VSYNC;
>
> - if (connector->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_NEGEDGE)
> + if (connector->display_info.bus_flags &
> + DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
> ctrl1 |= TVE200_CTRL_TVCLKP;
>
> if ((mode->hdisplay == 352 && mode->vdisplay == 240) || /* SIF(525) */
> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> index bd850747ce54..bf81fb573a5e 100644
> --- a/include/drm/drm_bridge.h
> +++ b/include/drm/drm_bridge.h
> @@ -246,10 +246,11 @@ struct drm_bridge_timings {
> /**
> * @sampling_edge:
> *
> - * Tells whether the bridge samples the digital input signal
> - * from the display engine on the positive or negative edge of the
> - * clock, this should reuse the DRM_BUS_FLAG_PIXDATA_[POS|NEG]EDGE
> - * bitwise flags from the DRM connector (bit 2 and 3 valid).
> + * Tells whether the bridge samples the digital input signals from the
> + * display engine on the positive or negative edge of the clock. This
> + * should use the DRM_BUS_FLAG_PIXDATA_SAMPLE_[POS|NEG]EDGE and
> + * DRM_BUS_FLAG_SYNC_SAMPLE_[POS|NEG]EDGE bitwise flags from the DRM
> + * connector (bit 2, 3, 6 and 7 valid).
> */
> u32 sampling_edge;
> /**
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-01-11 8:53 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-11 3:50 [PATCH v2 00/49] omapdrm: drm_bridge and drm_panel support Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 01/49] drm/atomic: Constify mode argument to mode_valid_path() Laurent Pinchart
2019-01-14 11:10 ` Tomi Valkeinen
2019-02-09 2:01 ` Sebastian Reichel
2019-01-11 3:50 ` [PATCH v2 02/49] drm/omap: dsi: Fix crash in DSI debug dumps Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 03/49] drm/omap: dsi: Fix OF platform depopulate Laurent Pinchart
2019-01-14 11:40 ` Tomi Valkeinen
2019-01-14 14:32 ` Laurent Pinchart
2019-02-09 2:03 ` Sebastian Reichel
2019-01-11 3:50 ` [PATCH v2 04/49] drm/omap: dsi: Hack-fix DSI bus flags Laurent Pinchart
2019-02-09 2:04 ` Sebastian Reichel
2019-01-11 3:50 ` [PATCH v2 05/49] drm/omap: Remove declaration of nonexisting function Laurent Pinchart
2019-01-14 11:48 ` Tomi Valkeinen
2019-01-11 3:50 ` [PATCH v2 06/49] drm/omap: Remove unused kobj field from struct omap_dss_device Laurent Pinchart
2019-01-14 11:49 ` Tomi Valkeinen
2019-01-11 3:50 ` [PATCH v2 07/49] drm/omap: venc: Remove wss_data field from venc_device structure Laurent Pinchart
2019-01-14 11:50 ` Tomi Valkeinen
2019-01-11 3:50 ` [PATCH v2 08/49] drm/omap: Use atomic suspend/resume helpers Laurent Pinchart
2019-01-14 12:13 ` Tomi Valkeinen
2019-01-11 3:50 ` [PATCH v2 09/49] drm/omap: Move common display enable/disable code to encoder Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 10/49] drm/omap: Remove connection checks from internal encoders .enable() Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 11/49] drm/omap: Remove connection checks from display .enable() and .remove() Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 12/49] drm/omap: Remove enable " Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 13/49] drm/omap: Reverse direction of the DSS device enable/disable operations Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 14/49] drm/omap: Remove omap_dss_device dst field Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 15/49] drm/omap: Factor out common init/cleanup code for output devices Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 16/49] drm/omap: Expose DRM modes instead of timings in display devices Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 17/49] drm/omap: Merge display .get_modes() and .get_size() operations Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 18/49] drm/omap: Add a dss device operation flag for .get_modes() Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 19/49] drm/omap: venc: List both PAL and NTSC modes Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 20/49] drm/omap: Don't pass display pointer to encoder init function Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 21/49] drm/omap: Move display alias ID to omap_drm_pipeline Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 22/49] drm/omap: Don't store display pointer in omap_connector structure Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 23/49] drm/omap: panel-dsi-cm: Store source pointer internally Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 24/49] drm/omap: Notify all devices in the pipeline of output disconnection Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 25/49] drm/omap: Remove src field from omap_dss_device structure Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 26/49] drm/omap: Move DISPC timing checks to CRTC .mode_valid() operation Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 27/49] drm/omap: venc: Simplify mode setting by caching configuration Laurent Pinchart
2019-01-11 3:50 ` [PATCH v2 28/49] drm/omap: Factor out common mode validation code Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 29/49] drm/omap: Pass drm_display_mode to .check_timings() and .set_timings() Laurent Pinchart
2019-02-09 2:33 ` Sebastian Reichel
2019-01-11 3:51 ` [PATCH v2 30/49] drm/omap: venc: Use drm_display_mode natively Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 31/49] drm/omap: Store pixel clock instead of full mode in DPI and SDI encoders Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 32/49] drm/omap: Simplify OF lookup of DSS devices Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 33/49] drm/omap: Refactor initialization sequence Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 34/49] drm/omap: Merge omap_dss_device type and output_type fields Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 35/49] drm: Clarify definition of the DRM_BUS_FLAG_(PIXDATA|SYNC)_* macros Laurent Pinchart
2019-01-11 8:47 ` Stefan Agner
2019-01-11 9:23 ` Daniel Vetter
2019-01-12 1:13 ` Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 36/49] drm: Use new DRM_BUS_FLAG_*_(DRIVE|SAMPLE)_(POS|NEG)EDGE flags Laurent Pinchart
2019-01-11 8:53 ` Stefan Agner [this message]
2019-01-11 3:51 ` [PATCH v2 37/49] drm/bridge: use bus flags in bridge timings Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 38/49] dt-bindings: display: tfp410: Add bus parameters properties Laurent Pinchart
2019-01-15 21:37 ` Rob Herring
2019-01-11 3:51 ` [PATCH v2 39/49] drm/bridge: ti-tfp410: Set connector type based on DT connector node Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 40/49] drm/bridge: ti-tfp410: Add support for the powerdown GPIO Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 41/49] drm/bridge: ti-tfp410: Report input bus config through bridge timings Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 42/49] dt-bindings: Add vendor prefix for OSD Displays Laurent Pinchart
2019-01-14 12:15 ` Tomi Valkeinen
2019-01-15 21:38 ` Rob Herring
2019-01-11 3:51 ` [PATCH v2 43/49] dt-bindings: display: Add OSD Displays OSD070T1718-19TS panel binding Laurent Pinchart
2019-01-14 12:15 ` Tomi Valkeinen
2019-01-15 21:39 ` Rob Herring
2019-02-08 11:19 ` [PATCH v2.1 " Laurent Pinchart
2019-02-25 23:27 ` Rob Herring
2019-01-11 3:51 ` [PATCH v2 44/49] drm/panel: simple: Add OSD070T1718-19TS panel support Laurent Pinchart
2019-01-14 12:15 ` Tomi Valkeinen
2019-01-11 3:51 ` [PATCH v2 45/49] drm/omap: Add support for drm_bridge Laurent Pinchart
2019-01-18 10:33 ` Tomi Valkeinen
2019-02-08 15:20 ` Laurent Pinchart
2019-02-11 9:32 ` Tomi Valkeinen
2019-02-09 2:00 ` Sebastian Reichel
2019-02-09 3:26 ` Sebastian Reichel
2019-02-11 7:50 ` [PATCH v2.1 " Laurent Pinchart
2019-01-11 3:51 ` [PATCH v2 46/49] drm/omap: Add support for drm_panel Laurent Pinchart
2019-02-09 3:26 ` Sebastian Reichel
2019-01-11 3:51 ` [PATCH v2 47/49] drm/omap: Whitelist DT nodes to fixup with omapdss, prefix Laurent Pinchart
2019-02-09 3:26 ` Sebastian Reichel
2019-01-11 3:51 ` [PATCH v2 48/49] drm/omap: Remove TFP410 and DVI connector drivers Laurent Pinchart
2019-02-09 3:26 ` Sebastian Reichel
2019-01-11 3:51 ` [PATCH v2 49/49] drm/omap: Remove panel-dpi driver Laurent Pinchart
2019-02-09 3:27 ` Sebastian Reichel
2019-02-06 11:41 ` [PATCH v2 00/49] omapdrm: drm_bridge and drm_panel support Tomi Valkeinen
2019-02-09 3:32 ` Sebastian Reichel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0589409e1078fb0064fd88be77ae1f7f@agner.ch \
--to=stefan@agner.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=maxime.ripard@bootlin.com \
--cc=thierry.reding@gmail.com \
--cc=tomi.valkeinen@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox