mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 07:26:46 +07:00
drm/omap: dss: Replace omap_dss_device port number with bitmask
The omap_dss_device port_num field stores the DT port number associated with the device. The field is used in different ways depending on the device type: - For DPI outputs, the port number is used as an identifier of the DPI instance - For sources, the port number is used to look up the omap_dss_device by DT port node As omap_dss_device instances are only looked up as sources by sinks, setting the field to the number of the source port works for both use cases. However, to enable looking up sinks, we need to record all the ports associated with an omap_dss_device. Do so by turning the port_num field into an of_ports bitmask. For DPI outputs the port number is additionally stored in the dpi_data structure as the output ID. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
parent
5c718e015a
commit
4e20bda68e
@ -169,6 +169,7 @@ static int tvc_probe(struct platform_device *pdev)
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_VENC;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -389,6 +389,7 @@ static int dvic_probe(struct platform_device *pdev)
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DVI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -349,6 +349,7 @@ static int hdmic_probe(struct platform_device *pdev)
|
||||
dssdev->dev = &pdev->dev;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -167,6 +167,7 @@ static int opa362_probe(struct platform_device *pdev)
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_VENC;
|
||||
dssdev->output_type = OMAP_DISPLAY_TYPE_VENC;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(1) | BIT(0);
|
||||
|
||||
omapdss_device_register(dssdev);
|
||||
|
||||
|
@ -190,7 +190,7 @@ static int tfp410_probe(struct platform_device *pdev)
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->output_type = OMAP_DISPLAY_TYPE_DVI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->port_num = 1;
|
||||
dssdev->of_ports = BIT(1) | BIT(0);
|
||||
|
||||
omapdss_device_register(dssdev);
|
||||
|
||||
|
@ -299,7 +299,7 @@ static int tpd_probe(struct platform_device *pdev)
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_HDMI;
|
||||
dssdev->output_type = OMAP_DISPLAY_TYPE_HDMI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->port_num = 1;
|
||||
dssdev->of_ports = BIT(1) | BIT(0);
|
||||
|
||||
omapdss_device_register(dssdev);
|
||||
|
||||
|
@ -217,6 +217,7 @@ static int panel_dpi_probe(struct platform_device *pdev)
|
||||
dssdev->driver = &panel_dpi_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -1324,6 +1324,7 @@ static int dsicm_probe(struct platform_device *pdev)
|
||||
dssdev->driver = &dsicm_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DSI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE |
|
||||
OMAP_DSS_DISPLAY_CAP_TEAR_ELIM;
|
||||
|
@ -269,6 +269,7 @@ static int lb035q02_panel_spi_probe(struct spi_device *spi)
|
||||
dssdev->driver = &lb035q02_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -292,6 +292,7 @@ static int nec_8048_probe(struct spi_device *spi)
|
||||
dssdev->driver = &nec_8048_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -268,6 +268,7 @@ static int sharp_ls_probe(struct platform_device *pdev)
|
||||
dssdev->driver = &sharp_ls_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -797,6 +797,7 @@ static int acx565akm_probe(struct spi_device *spi)
|
||||
dssdev->driver = &acx565akm_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_SDI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -393,6 +393,7 @@ static int td028ttec1_panel_probe(struct spi_device *spi)
|
||||
dssdev->driver = &td028ttec1_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -535,6 +535,7 @@ static int tpo_td043_probe(struct spi_device *spi)
|
||||
dssdev->driver = &tpo_td043_ops;
|
||||
dssdev->type = OMAP_DISPLAY_TYPE_DPI;
|
||||
dssdev->owner = THIS_MODULE;
|
||||
dssdev->of_ports = BIT(0);
|
||||
|
||||
omapdss_display_init(dssdev);
|
||||
omapdss_device_register(dssdev);
|
||||
|
@ -118,7 +118,7 @@ struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
|
||||
struct omap_dss_device *dssdev;
|
||||
|
||||
list_for_each_entry(dssdev, &omapdss_devices_list, list) {
|
||||
if (dssdev->dev->of_node == src && dssdev->port_num == port)
|
||||
if (dssdev->dev->of_node == src && dssdev->of_ports & BIT(port))
|
||||
return omapdss_device_get(dssdev);
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,7 @@ struct dpi_data {
|
||||
struct platform_device *pdev;
|
||||
enum dss_model dss_model;
|
||||
struct dss_device *dss;
|
||||
unsigned int id;
|
||||
|
||||
struct regulator *vdds_dsi_reg;
|
||||
enum dss_clk_source clk_src;
|
||||
@ -413,7 +414,7 @@ static int dpi_display_enable(struct omap_dss_device *dssdev)
|
||||
if (r)
|
||||
goto err_get_dispc;
|
||||
|
||||
r = dss_dpi_select_source(dpi->dss, out->port_num, out->dispc_channel);
|
||||
r = dss_dpi_select_source(dpi->dss, dpi->id, out->dispc_channel);
|
||||
if (r)
|
||||
goto err_src_sel;
|
||||
|
||||
@ -609,7 +610,7 @@ static void dpi_init_pll(struct dpi_data *dpi)
|
||||
* the channel in some more dynamic manner, or get the channel as a user
|
||||
* parameter.
|
||||
*/
|
||||
static enum omap_channel dpi_get_channel(struct dpi_data *dpi, int port_num)
|
||||
static enum omap_channel dpi_get_channel(struct dpi_data *dpi)
|
||||
{
|
||||
switch (dpi->dss_model) {
|
||||
case DSS_MODEL_OMAP2:
|
||||
@ -617,7 +618,7 @@ static enum omap_channel dpi_get_channel(struct dpi_data *dpi, int port_num)
|
||||
return OMAP_DSS_CHANNEL_LCD;
|
||||
|
||||
case DSS_MODEL_DRA7:
|
||||
switch (port_num) {
|
||||
switch (dpi->id) {
|
||||
case 2:
|
||||
return OMAP_DSS_CHANNEL_LCD3;
|
||||
case 1:
|
||||
@ -690,12 +691,10 @@ static const struct omap_dss_device_ops dpi_ops = {
|
||||
static void dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
|
||||
{
|
||||
struct omap_dss_device *out = &dpi->output;
|
||||
int r;
|
||||
u32 port_num;
|
||||
u32 port_num = 0;
|
||||
|
||||
r = of_property_read_u32(port, "reg", &port_num);
|
||||
if (r)
|
||||
port_num = 0;
|
||||
of_property_read_u32(port, "reg", &port_num);
|
||||
dpi->id = port_num <= 2 ? port_num : 0;
|
||||
|
||||
switch (port_num) {
|
||||
case 2:
|
||||
@ -713,8 +712,8 @@ static void dpi_init_output_port(struct dpi_data *dpi, struct device_node *port)
|
||||
out->dev = &dpi->pdev->dev;
|
||||
out->id = OMAP_DSS_OUTPUT_DPI;
|
||||
out->output_type = OMAP_DISPLAY_TYPE_DPI;
|
||||
out->dispc_channel = dpi_get_channel(dpi, port_num);
|
||||
out->port_num = port_num;
|
||||
out->dispc_channel = dpi_get_channel(dpi);
|
||||
out->of_ports = BIT(port_num);
|
||||
out->ops = &dpi_ops;
|
||||
out->owner = THIS_MODULE;
|
||||
|
||||
|
@ -4994,6 +4994,7 @@ static void dsi_init_output(struct dsi_data *dsi)
|
||||
out->dispc_channel = dsi_get_channel(dsi);
|
||||
out->ops = &dsi_ops;
|
||||
out->owner = THIS_MODULE;
|
||||
out->of_ports = BIT(0);
|
||||
|
||||
omapdss_device_register(out);
|
||||
}
|
||||
|
@ -564,6 +564,7 @@ static void hdmi_init_output(struct omap_hdmi *hdmi)
|
||||
out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
|
||||
out->ops = &hdmi_ops;
|
||||
out->owner = THIS_MODULE;
|
||||
out->of_ports = BIT(0);
|
||||
|
||||
omapdss_device_register(out);
|
||||
}
|
||||
|
@ -555,6 +555,7 @@ static void hdmi_init_output(struct omap_hdmi *hdmi)
|
||||
out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
|
||||
out->ops = &hdmi_ops;
|
||||
out->owner = THIS_MODULE;
|
||||
out->of_ports = BIT(0);
|
||||
|
||||
omapdss_device_register(out);
|
||||
}
|
||||
|
@ -423,8 +423,8 @@ struct omap_dss_device {
|
||||
/* output instance */
|
||||
enum omap_dss_output_id id;
|
||||
|
||||
/* the port number in the DT node */
|
||||
int port_num;
|
||||
/* bitmask of port numbers in DT */
|
||||
unsigned int of_ports;
|
||||
};
|
||||
|
||||
struct omap_dss_driver {
|
||||
|
@ -327,7 +327,7 @@ static void sdi_init_output(struct sdi_device *sdi)
|
||||
out->name = "sdi.0";
|
||||
out->dispc_channel = OMAP_DSS_CHANNEL_LCD;
|
||||
/* We have SDI only on OMAP3, where it's on port 1 */
|
||||
out->port_num = 1;
|
||||
out->of_ports = BIT(1);
|
||||
out->ops = &sdi_ops;
|
||||
out->owner = THIS_MODULE;
|
||||
|
||||
|
@ -767,6 +767,7 @@ static void venc_init_output(struct venc_device *venc)
|
||||
out->dispc_channel = OMAP_DSS_CHANNEL_DIGIT;
|
||||
out->ops = &venc_ops;
|
||||
out->owner = THIS_MODULE;
|
||||
out->of_ports = BIT(0);
|
||||
|
||||
omapdss_device_register(out);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user