Hi, On Fri, Oct 13, 2017 at 05:59:21PM +0300, Laurent Pinchart wrote: > This removes the need to access the global DSS private data in those > functions (both for the current accesses and the future ones that will > be introduced when allocating the DSS device dynamically). > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxxxx> -- Sebastian > drivers/gpu/drm/omapdrm/dss/dpi.c | 12 ++++--- > drivers/gpu/drm/omapdrm/dss/dsi.c | 18 +++++----- > drivers/gpu/drm/omapdrm/dss/dss.c | 68 ++++++++++++++++++++++--------------- > drivers/gpu/drm/omapdrm/dss/dss.h | 25 ++++++++------ > drivers/gpu/drm/omapdrm/dss/hdmi.h | 1 + > drivers/gpu/drm/omapdrm/dss/hdmi4.c | 3 +- > drivers/gpu/drm/omapdrm/dss/hdmi5.c | 3 +- > 7 files changed, 77 insertions(+), 53 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c > index c7346df60929..38a4c037783a 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dpi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c > @@ -40,6 +40,7 @@ > struct dpi_data { > struct platform_device *pdev; > enum dss_model dss_model; > + struct dss_device *dss; > > struct regulator *vdds_dsi_reg; > enum dss_clk_source clk_src; > @@ -304,7 +305,7 @@ static int dpi_set_pll_clk(struct dpi_data *dpi, enum omap_channel channel, > if (r) > return r; > > - dss_select_lcd_clk_source(channel, dpi->clk_src); > + dss_select_lcd_clk_source(dpi->dss, channel, dpi->clk_src); > > dpi->mgr_config.clock_info = ctx.dispc_cinfo; > > @@ -414,7 +415,7 @@ static int dpi_display_enable(struct omap_dss_device *dssdev) > if (r) > goto err_get_dispc; > > - r = dss_dpi_select_source(out->port_num, channel); > + r = dss_dpi_select_source(dpi->dss, out->port_num, channel); > if (r) > goto err_src_sel; > > @@ -466,7 +467,7 @@ static void dpi_display_disable(struct omap_dss_device *dssdev) > dss_mgr_disable(channel); > > if (dpi->pll) { > - dss_select_lcd_clk_source(channel, DSS_CLK_SRC_FCK); > + dss_select_lcd_clk_source(dpi->dss, channel, DSS_CLK_SRC_FCK); > dss_pll_disable(dpi->pll); > } > > @@ -750,8 +751,8 @@ static void dpi_uninit_output_port(struct device_node *port) > omapdss_unregister_output(out); > } > > -int dpi_init_port(struct platform_device *pdev, struct device_node *port, > - enum dss_model dss_model) > +int dpi_init_port(struct dss_device *dss, struct platform_device *pdev, > + struct device_node *port, enum dss_model dss_model) > { > struct dpi_data *dpi; > struct device_node *ep; > @@ -778,6 +779,7 @@ int dpi_init_port(struct platform_device *pdev, struct device_node *port, > > dpi->pdev = pdev; > dpi->dss_model = dss_model; > + dpi->dss = dss; > port->data = dpi; > > mutex_init(&dpi->lock); > diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c > index 1dab308c9bc1..6d60882dfd10 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dsi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c > @@ -345,6 +345,7 @@ struct dsi_data { > > struct clk *dss_clk; > struct regmap *syscon; > + struct dss_device *dss; > > struct dispc_clock_info user_dispc_cinfo; > struct dss_pll_clock_info user_dsi_cinfo; > @@ -4217,7 +4218,7 @@ static int dsi_display_init_dispc(struct platform_device *dsidev, > struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); > int r; > > - dss_select_lcd_clk_source(channel, dsi->module_id == 0 ? > + dss_select_lcd_clk_source(dsi->dss, channel, dsi->module_id == 0 ? > DSS_CLK_SRC_PLL1_1 : > DSS_CLK_SRC_PLL2_1); > > @@ -4271,7 +4272,7 @@ static int dsi_display_init_dispc(struct platform_device *dsidev, > dss_mgr_unregister_framedone_handler(channel, > dsi_framedone_irq_callback, dsidev); > err: > - dss_select_lcd_clk_source(channel, DSS_CLK_SRC_FCK); > + dss_select_lcd_clk_source(dsi->dss, channel, DSS_CLK_SRC_FCK); > return r; > } > > @@ -4284,7 +4285,7 @@ static void dsi_display_uninit_dispc(struct platform_device *dsidev, > dss_mgr_unregister_framedone_handler(channel, > dsi_framedone_irq_callback, dsidev); > > - dss_select_lcd_clk_source(channel, DSS_CLK_SRC_FCK); > + dss_select_lcd_clk_source(dsi->dss, channel, DSS_CLK_SRC_FCK); > } > > static int dsi_configure_dsi_clocks(struct platform_device *dsidev) > @@ -4317,9 +4318,9 @@ static int dsi_display_init_dsi(struct platform_device *dsidev) > if (r) > goto err1; > > - dss_select_dsi_clk_source(dsi->module_id, dsi->module_id == 0 ? > - DSS_CLK_SRC_PLL1_2 : > - DSS_CLK_SRC_PLL2_2); > + dss_select_dsi_clk_source(dsi->dss, dsi->module_id, > + dsi->module_id == 0 ? > + DSS_CLK_SRC_PLL1_2 : DSS_CLK_SRC_PLL2_2); > > DSSDBG("PLL OK\n"); > > @@ -4351,7 +4352,7 @@ static int dsi_display_init_dsi(struct platform_device *dsidev) > err3: > dsi_cio_uninit(dsidev); > err2: > - dss_select_dsi_clk_source(dsi->module_id, DSS_CLK_SRC_FCK); > + dss_select_dsi_clk_source(dsi->dss, dsi->module_id, DSS_CLK_SRC_FCK); > err1: > dss_pll_disable(&dsi->pll); > err0: > @@ -4373,7 +4374,7 @@ static void dsi_display_uninit_dsi(struct platform_device *dsidev, > dsi_vc_enable(dsidev, 2, 0); > dsi_vc_enable(dsidev, 3, 0); > > - dss_select_dsi_clk_source(dsi->module_id, DSS_CLK_SRC_FCK); > + dss_select_dsi_clk_source(dsi->dss, dsi->module_id, DSS_CLK_SRC_FCK); > dsi_cio_uninit(dsidev); > dsi_pll_uninit(dsidev, disconnect_lanes); > } > @@ -5443,6 +5444,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) > if (!dsi) > return -ENOMEM; > > + dsi->dss = dss; > dsi->pdev = dsidev; > dev_set_drvdata(&dsidev->dev, dsi); > > diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c > index f8b71e24a07d..bd8f7abf0450 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dss.c > +++ b/drivers/gpu/drm/omapdrm/dss/dss.c > @@ -74,9 +74,11 @@ struct dss_reg { > dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end)) > > struct dss_ops { > - int (*dpi_select_source)(int port, enum omap_channel channel); > - int (*select_lcd_source)(enum omap_channel channel, > - enum dss_clk_source clk_src); > + int (*dpi_select_source)(struct dss_device *dss, int port, > + enum omap_channel channel); > + int (*select_lcd_source)(struct dss_device *dss, > + enum omap_channel channel, > + enum dss_clk_source clk_src); > }; > > struct dss_features { > @@ -472,8 +474,8 @@ static void dss_select_dispc_clk_source(enum dss_clk_source clk_src) > dss.dispc_clk_source = clk_src; > } > > -void dss_select_dsi_clk_source(int dsi_module, > - enum dss_clk_source clk_src) > +void dss_select_dsi_clk_source(struct dss_device *dss, int dsi_module, > + enum dss_clk_source clk_src) > { > int b, pos; > > @@ -497,11 +499,12 @@ void dss_select_dsi_clk_source(int dsi_module, > pos = dsi_module == 0 ? 1 : 10; > REG_FLD_MOD(DSS_CONTROL, b, pos, pos); /* DSIx_CLK_SWITCH */ > > - dss.dsi_clk_source[dsi_module] = clk_src; > + dss->dsi_clk_source[dsi_module] = clk_src; > } > > -static int dss_lcd_clk_mux_dra7(enum omap_channel channel, > - enum dss_clk_source clk_src) > +static int dss_lcd_clk_mux_dra7(struct dss_device *dss, > + enum omap_channel channel, > + enum dss_clk_source clk_src) > { > const u8 ctrl_bits[] = { > [OMAP_DSS_CHANNEL_LCD] = 0, > @@ -527,8 +530,9 @@ static int dss_lcd_clk_mux_dra7(enum omap_channel channel, > return 0; > } > > -static int dss_lcd_clk_mux_omap5(enum omap_channel channel, > - enum dss_clk_source clk_src) > +static int dss_lcd_clk_mux_omap5(struct dss_device *dss, > + enum omap_channel channel, > + enum dss_clk_source clk_src) > { > const u8 ctrl_bits[] = { > [OMAP_DSS_CHANNEL_LCD] = 0, > @@ -557,8 +561,9 @@ static int dss_lcd_clk_mux_omap5(enum omap_channel channel, > return 0; > } > > -static int dss_lcd_clk_mux_omap4(enum omap_channel channel, > - enum dss_clk_source clk_src) > +static int dss_lcd_clk_mux_omap4(struct dss_device *dss, > + enum omap_channel channel, > + enum dss_clk_source clk_src) > { > const u8 ctrl_bits[] = { > [OMAP_DSS_CHANNEL_LCD] = 0, > @@ -585,23 +590,24 @@ static int dss_lcd_clk_mux_omap4(enum omap_channel channel, > return 0; > } > > -void dss_select_lcd_clk_source(enum omap_channel channel, > - enum dss_clk_source clk_src) > +void dss_select_lcd_clk_source(struct dss_device *dss, > + enum omap_channel channel, > + enum dss_clk_source clk_src) > { > int idx = dss_get_channel_index(channel); > int r; > > - if (!dss.feat->has_lcd_clk_src) { > + if (!dss->feat->has_lcd_clk_src) { > dss_select_dispc_clk_source(clk_src); > - dss.lcd_clk_source[idx] = clk_src; > + dss->lcd_clk_source[idx] = clk_src; > return; > } > > - r = dss.feat->ops->select_lcd_source(channel, clk_src); > + r = dss->feat->ops->select_lcd_source(dss, channel, clk_src); > if (r) > return; > > - dss.lcd_clk_source[idx] = clk_src; > + dss->lcd_clk_source[idx] = clk_src; > } > > enum dss_clk_source dss_get_dispc_clk_source(void) > @@ -750,11 +756,12 @@ void dss_set_dac_pwrdn_bgz(bool enable) > REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */ > } > > -void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select src) > +void dss_select_hdmi_venc_clk_source(struct dss_device *dss, > + enum dss_hdmi_venc_clk_source_select src) > { > enum omap_dss_output_id outputs; > > - outputs = dss.feat->outputs[OMAP_DSS_CHANNEL_DIGIT]; > + outputs = dss->feat->outputs[OMAP_DSS_CHANNEL_DIGIT]; > > /* Complain about invalid selections */ > WARN_ON((src == DSS_VENC_TV_CLK) && !(outputs & OMAP_DSS_OUTPUT_VENC)); > @@ -780,7 +787,8 @@ enum dss_hdmi_venc_clk_source_select dss_get_hdmi_venc_clk_source(void) > return REG_GET(DSS_CONTROL, 15, 15); > } > > -static int dss_dpi_select_source_omap2_omap3(int port, enum omap_channel channel) > +static int dss_dpi_select_source_omap2_omap3(struct dss_device *dss, int port, > + enum omap_channel channel) > { > if (channel != OMAP_DSS_CHANNEL_LCD) > return -EINVAL; > @@ -788,7 +796,8 @@ static int dss_dpi_select_source_omap2_omap3(int port, enum omap_channel channel > return 0; > } > > -static int dss_dpi_select_source_omap4(int port, enum omap_channel channel) > +static int dss_dpi_select_source_omap4(struct dss_device *dss, int port, > + enum omap_channel channel) > { > int val; > > @@ -808,7 +817,8 @@ static int dss_dpi_select_source_omap4(int port, enum omap_channel channel) > return 0; > } > > -static int dss_dpi_select_source_omap5(int port, enum omap_channel channel) > +static int dss_dpi_select_source_omap5(struct dss_device *dss, int port, > + enum omap_channel channel) > { > int val; > > @@ -834,11 +844,12 @@ static int dss_dpi_select_source_omap5(int port, enum omap_channel channel) > return 0; > } > > -static int dss_dpi_select_source_dra7xx(int port, enum omap_channel channel) > +static int dss_dpi_select_source_dra7xx(struct dss_device *dss, int port, > + enum omap_channel channel) > { > switch (port) { > case 0: > - return dss_dpi_select_source_omap5(port, channel); > + return dss_dpi_select_source_omap5(dss, port, channel); > case 1: > if (channel != OMAP_DSS_CHANNEL_LCD2) > return -EINVAL; > @@ -854,9 +865,10 @@ static int dss_dpi_select_source_dra7xx(int port, enum omap_channel channel) > return 0; > } > > -int dss_dpi_select_source(int port, enum omap_channel channel) > +int dss_dpi_select_source(struct dss_device *dss, int port, > + enum omap_channel channel) > { > - return dss.feat->ops->dpi_select_source(port, channel); > + return dss->feat->ops->dpi_select_source(dss, port, channel); > } > > static int dss_get_clocks(void) > @@ -1223,7 +1235,7 @@ static int dss_init_ports(struct platform_device *pdev) > > switch (dss.feat->ports[i]) { > case OMAP_DISPLAY_TYPE_DPI: > - dpi_init_port(pdev, port, dss.feat->model); > + dpi_init_port(&dss, pdev, port, dss.feat->model); > break; > case OMAP_DISPLAY_TYPE_SDI: > sdi_init_port(&dss, pdev, port); > diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h > index 08651f101518..05fba6b3400b 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dss.h > +++ b/drivers/gpu/drm/omapdrm/dss/dss.h > @@ -287,8 +287,10 @@ void dss_runtime_put(struct dss_device *dss); > unsigned long dss_get_dispc_clk_rate(void); > unsigned long dss_get_max_fck_rate(void); > enum omap_dss_output_id dss_get_supported_outputs(enum omap_channel channel); > -int dss_dpi_select_source(int port, enum omap_channel channel); > -void dss_select_hdmi_venc_clk_source(enum dss_hdmi_venc_clk_source_select); > +int dss_dpi_select_source(struct dss_device *dss, int port, > + enum omap_channel channel); > +void dss_select_hdmi_venc_clk_source(struct dss_device *dss, > + enum dss_hdmi_venc_clk_source_select src); > enum dss_hdmi_venc_clk_source_select dss_get_hdmi_venc_clk_source(void); > const char *dss_get_clk_source_name(enum dss_clk_source clk_src); > > @@ -304,10 +306,11 @@ void dss_sdi_init(struct dss_device *dss, int datapairs); > int dss_sdi_enable(struct dss_device *dss); > void dss_sdi_disable(struct dss_device *dss); > > -void dss_select_dsi_clk_source(int dsi_module, > - enum dss_clk_source clk_src); > -void dss_select_lcd_clk_source(enum omap_channel channel, > - enum dss_clk_source clk_src); > +void dss_select_dsi_clk_source(struct dss_device *dss, int dsi_module, > + enum dss_clk_source clk_src); > +void dss_select_lcd_clk_source(struct dss_device *dss, > + enum omap_channel channel, > + enum dss_clk_source clk_src); > enum dss_clk_source dss_get_dispc_clk_source(void); > enum dss_clk_source dss_get_dsi_clk_source(int dsi_module); > enum dss_clk_source dss_get_lcd_clk_source(enum omap_channel channel); > @@ -353,12 +356,14 @@ void dsi_irq_handler(void); > > /* DPI */ > #ifdef CONFIG_OMAP2_DSS_DPI > -int dpi_init_port(struct platform_device *pdev, struct device_node *port, > - enum dss_model dss_model); > +int dpi_init_port(struct dss_device *dss, struct platform_device *pdev, > + struct device_node *port, enum dss_model dss_model); > void dpi_uninit_port(struct device_node *port); > #else > -static inline int dpi_init_port(struct platform_device *pdev, > - struct device_node *port, enum dss_model dss_model) > +static inline int dpi_init_port(struct dss_device *port, > + struct platform_device *pdev, > + struct device_node *port, > + enum dss_model dss_model) > { > return 0; > } > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi.h b/drivers/gpu/drm/omapdrm/dss/hdmi.h > index 4dbc4f3d728c..fa2fbdaa427c 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi.h > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi.h > @@ -359,6 +359,7 @@ static inline bool hdmi_mode_has_audio(struct hdmi_config *cfg) > struct omap_hdmi { > struct mutex lock; > struct platform_device *pdev; > + struct dss_device *dss; > > struct dss_debugfs_entry *debugfs; > > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > index d84eba8440c8..5806587fd89a 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > @@ -147,7 +147,7 @@ static int hdmi_power_on_core(struct omap_dss_device *dssdev) > hdmi4_core_powerdown_disable(&hdmi.core); > > /* Make selection of HDMI in DSS */ > - dss_select_hdmi_venc_clk_source(DSS_HDMI_M_PCLK); > + dss_select_hdmi_venc_clk_source(hdmi.dss, DSS_HDMI_M_PCLK); > > hdmi.core_enabled = true; > > @@ -722,6 +722,7 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) > int irq; > > hdmi.pdev = pdev; > + hdmi.dss = dss; > dev_set_drvdata(&pdev->dev, &hdmi); > > mutex_init(&hdmi.lock); > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c > index 64cfed89c79b..c28fe184a7ad 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c > @@ -149,7 +149,7 @@ static int hdmi_power_on_core(struct omap_dss_device *dssdev) > goto err_runtime_get; > > /* Make selection of HDMI in DSS */ > - dss_select_hdmi_venc_clk_source(DSS_HDMI_M_PCLK); > + dss_select_hdmi_venc_clk_source(hdmi.dss, DSS_HDMI_M_PCLK); > > hdmi.core_enabled = true; > > @@ -724,6 +724,7 @@ static int hdmi5_bind(struct device *dev, struct device *master, void *data) > int irq; > > hdmi.pdev = pdev; > + hdmi.dss = dss; > dev_set_drvdata(&pdev->dev, &hdmi); > > mutex_init(&hdmi.lock); > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel