Commit 38f3daf6 authored by Tomi Valkeinen's avatar Tomi Valkeinen

OMAPDSS: separate pdata based initialization

Move the platform-data based display device initialization into a
separate function, so that we may later add of-based initialization.
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 11ee9606
...@@ -365,7 +365,7 @@ static int __init dpi_init_display(struct omap_dss_device *dssdev) ...@@ -365,7 +365,7 @@ static int __init dpi_init_display(struct omap_dss_device *dssdev)
return 0; return 0;
} }
static int __init omap_dpi_probe(struct platform_device *pdev) static void __init dpi_probe_pdata(struct platform_device *pdev)
{ {
struct omap_dss_board_info *pdata = pdev->dev.platform_data; struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int i, r; int i, r;
...@@ -387,6 +387,11 @@ static int __init omap_dpi_probe(struct platform_device *pdev) ...@@ -387,6 +387,11 @@ static int __init omap_dpi_probe(struct platform_device *pdev)
DSSERR("device %s register failed: %d\n", DSSERR("device %s register failed: %d\n",
dssdev->name, r); dssdev->name, r);
} }
}
static int __init omap_dpi_probe(struct platform_device *pdev)
{
dpi_probe_pdata(pdev);
return 0; return 0;
} }
......
...@@ -4602,6 +4602,34 @@ static void dsi_put_clocks(struct platform_device *dsidev) ...@@ -4602,6 +4602,34 @@ static void dsi_put_clocks(struct platform_device *dsidev)
clk_put(dsi->sys_clk); clk_put(dsi->sys_clk);
} }
static void __init dsi_probe_pdata(struct platform_device *dsidev)
{
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
struct omap_dss_board_info *pdata = dsidev->dev.platform_data;
int i, r;
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_DSI)
continue;
if (dssdev->phy.dsi.module != dsi->module_id)
continue;
r = dsi_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &dsidev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
}
/* DSI1 HW IP initialisation */ /* DSI1 HW IP initialisation */
static int __init omap_dsihw_probe(struct platform_device *dsidev) static int __init omap_dsihw_probe(struct platform_device *dsidev)
{ {
...@@ -4609,7 +4637,6 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev) ...@@ -4609,7 +4637,6 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev)
int r, i; int r, i;
struct resource *dsi_mem; struct resource *dsi_mem;
struct dsi_data *dsi; struct dsi_data *dsi;
struct omap_dss_board_info *pdata = dsidev->dev.platform_data;
dsi = devm_kzalloc(&dsidev->dev, sizeof(*dsi), GFP_KERNEL); dsi = devm_kzalloc(&dsidev->dev, sizeof(*dsi), GFP_KERNEL);
if (!dsi) if (!dsi)
...@@ -4697,26 +4724,7 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev) ...@@ -4697,26 +4724,7 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev)
else else
dsi->num_lanes_supported = 3; dsi->num_lanes_supported = 3;
for (i = 0; i < pdata->num_devices; ++i) { dsi_probe_pdata(dsidev);
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_DSI)
continue;
if (dssdev->phy.dsi.module != dsi->module_id)
continue;
r = dsi_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &dsidev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
dsi_runtime_put(dsidev); dsi_runtime_put(dsidev);
......
...@@ -771,12 +771,35 @@ static void hdmi_put_clocks(void) ...@@ -771,12 +771,35 @@ static void hdmi_put_clocks(void)
clk_put(hdmi.sys_clk); clk_put(hdmi.sys_clk);
} }
static void __init hdmi_probe_pdata(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int r, i;
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_HDMI)
continue;
r = hdmi_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
}
/* HDMI HW IP initialisation */ /* HDMI HW IP initialisation */
static int __init omapdss_hdmihw_probe(struct platform_device *pdev) static int __init omapdss_hdmihw_probe(struct platform_device *pdev)
{ {
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
struct resource *hdmi_mem; struct resource *hdmi_mem;
int r, i; int r;
hdmi.pdev = pdev; hdmi.pdev = pdev;
...@@ -813,23 +836,7 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev) ...@@ -813,23 +836,7 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)
dss_debugfs_create_file("hdmi", hdmi_dump_regs); dss_debugfs_create_file("hdmi", hdmi_dump_regs);
for (i = 0; i < pdata->num_devices; ++i) { hdmi_probe_pdata(pdev);
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_HDMI)
continue;
r = hdmi_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \ #if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE) defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
......
...@@ -927,14 +927,37 @@ static int __init rfbi_init_display(struct omap_dss_device *dssdev) ...@@ -927,14 +927,37 @@ static int __init rfbi_init_display(struct omap_dss_device *dssdev)
return 0; return 0;
} }
static void __init rfbi_probe_pdata(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int i, r;
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_DBI)
continue;
r = rfbi_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
}
/* RFBI HW IP initialisation */ /* RFBI HW IP initialisation */
static int __init omap_rfbihw_probe(struct platform_device *pdev) static int __init omap_rfbihw_probe(struct platform_device *pdev)
{ {
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
u32 rev; u32 rev;
struct resource *rfbi_mem; struct resource *rfbi_mem;
struct clk *clk; struct clk *clk;
int r, i; int r;
rfbi.pdev = pdev; rfbi.pdev = pdev;
...@@ -979,23 +1002,7 @@ static int __init omap_rfbihw_probe(struct platform_device *pdev) ...@@ -979,23 +1002,7 @@ static int __init omap_rfbihw_probe(struct platform_device *pdev)
dss_debugfs_create_file("rfbi", rfbi_dump_regs); dss_debugfs_create_file("rfbi", rfbi_dump_regs);
for (i = 0; i < pdata->num_devices; ++i) { rfbi_probe_pdata(pdev);
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_DBI)
continue;
r = rfbi_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
return 0; return 0;
......
...@@ -176,7 +176,7 @@ static int __init sdi_init_display(struct omap_dss_device *dssdev) ...@@ -176,7 +176,7 @@ static int __init sdi_init_display(struct omap_dss_device *dssdev)
return 0; return 0;
} }
static int __init omap_sdi_probe(struct platform_device *pdev) static void __init sdi_probe_pdata(struct platform_device *pdev)
{ {
struct omap_dss_board_info *pdata = pdev->dev.platform_data; struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int i, r; int i, r;
...@@ -198,6 +198,11 @@ static int __init omap_sdi_probe(struct platform_device *pdev) ...@@ -198,6 +198,11 @@ static int __init omap_sdi_probe(struct platform_device *pdev)
DSSERR("device %s register failed: %d\n", DSSERR("device %s register failed: %d\n",
dssdev->name, r); dssdev->name, r);
} }
}
static int __init omap_sdi_probe(struct platform_device *pdev)
{
sdi_probe_pdata(pdev);
return 0; return 0;
} }
......
...@@ -829,13 +829,36 @@ static void venc_put_clocks(void) ...@@ -829,13 +829,36 @@ static void venc_put_clocks(void)
clk_put(venc.tv_dac_clk); clk_put(venc.tv_dac_clk);
} }
static void __init venc_probe_pdata(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int r, i;
for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_VENC)
continue;
r = venc_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
}
/* VENC HW IP initialisation */ /* VENC HW IP initialisation */
static int __init omap_venchw_probe(struct platform_device *pdev) static int __init omap_venchw_probe(struct platform_device *pdev)
{ {
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
u8 rev_id; u8 rev_id;
struct resource *venc_mem; struct resource *venc_mem;
int r, i; int r;
venc.pdev = pdev; venc.pdev = pdev;
...@@ -877,23 +900,7 @@ static int __init omap_venchw_probe(struct platform_device *pdev) ...@@ -877,23 +900,7 @@ static int __init omap_venchw_probe(struct platform_device *pdev)
dss_debugfs_create_file("venc", venc_dump_regs); dss_debugfs_create_file("venc", venc_dump_regs);
for (i = 0; i < pdata->num_devices; ++i) { venc_probe_pdata(pdev);
struct omap_dss_device *dssdev = pdata->devices[i];
if (dssdev->type != OMAP_DISPLAY_TYPE_VENC)
continue;
r = venc_init_display(dssdev);
if (r) {
DSSERR("device %s init failed: %d\n", dssdev->name, r);
continue;
}
r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment