Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 310343
b: refs/heads/master
c: 35deca3
h: refs/heads/master
i:
  310341: 792a1f1
  310339: 3bce7b2
  310335: 0f46409
v: v3
  • Loading branch information
Tomi Valkeinen committed May 11, 2012
1 parent cf22c8e commit c1292d0
Show file tree
Hide file tree
Showing 10 changed files with 129 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c018c6738bdae8c9f49766fd3d8b3770be2572f9
refs/heads/master: 35deca3de6190b6bc03e34ed45de079047f834ab
11 changes: 6 additions & 5 deletions trunk/arch/arm/mach-omap2/display.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
dss_pdev = create_dss_pdev(curr_dss_hwmod[0].dev_name,
curr_dss_hwmod[0].id,
curr_dss_hwmod[0].oh_name,
NULL, 0,
board_data, sizeof(*board_data),
NULL);

if (IS_ERR(dss_pdev)) {
Expand All @@ -341,7 +341,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
pdev = create_dss_pdev(curr_dss_hwmod[i].dev_name,
curr_dss_hwmod[i].id,
curr_dss_hwmod[i].oh_name,
NULL, 0,
board_data, sizeof(*board_data),
dss_pdev);

if (IS_ERR(pdev)) {
Expand All @@ -354,15 +354,16 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)

/* Create devices for DPI and SDI */

pdev = create_simple_dss_pdev("omapdss_dpi", -1, NULL, 0, dss_pdev);
pdev = create_simple_dss_pdev("omapdss_dpi", -1,
board_data, sizeof(*board_data), dss_pdev);
if (IS_ERR(pdev)) {
pr_err("Could not build platform_device for omapdss_dpi\n");
return PTR_ERR(pdev);
}

if (cpu_is_omap34xx()) {
pdev = create_simple_dss_pdev("omapdss_sdi", -1, NULL, 0,
dss_pdev);
pdev = create_simple_dss_pdev("omapdss_sdi", -1,
board_data, sizeof(*board_data), dss_pdev);
if (IS_ERR(pdev)) {
pr_err("Could not build platform_device for omapdss_sdi\n");
return PTR_ERR(pdev);
Expand Down
50 changes: 17 additions & 33 deletions trunk/drivers/video/omap2/dss/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,6 @@ bool dss_debug;
module_param_named(debug, dss_debug, bool, 0644);
#endif

static int omap_dss_register_device(struct omap_dss_device *);
static void omap_dss_unregister_device(struct omap_dss_device *);

/* REGULATORS */

struct regulator *dss_get_vdds_dsi(void)
Expand Down Expand Up @@ -209,7 +206,6 @@ static int __init omap_dss_probe(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int r;
int i;

core.pdev = pdev;

Expand All @@ -229,43 +225,20 @@ static int __init omap_dss_probe(struct platform_device *pdev)
else if (pdata->default_device)
core.default_display_name = pdata->default_device->name;

for (i = 0; i < pdata->num_devices; ++i) {
struct omap_dss_device *dssdev = pdata->devices[i];

r = omap_dss_register_device(dssdev);
if (r) {
DSSERR("device %d %s register failed %d\n", i,
dssdev->name ?: "unnamed", r);

while (--i >= 0)
omap_dss_unregister_device(pdata->devices[i]);

goto err_register;
}
}

return 0;

err_register:
dss_uninitialize_debugfs();
err_debugfs:

return r;
}

static int omap_dss_remove(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int i;

dss_uninitialize_debugfs();

dss_uninit_overlays(pdev);
dss_uninit_overlay_managers(pdev);

for (i = 0; i < pdata->num_devices; ++i)
omap_dss_unregister_device(pdata->devices[i]);

return 0;
}

Expand Down Expand Up @@ -467,25 +440,36 @@ static void omap_dss_dev_release(struct device *dev)
reset_device(dev, 0);
}

static int omap_dss_register_device(struct omap_dss_device *dssdev)
int omap_dss_register_device(struct omap_dss_device *dssdev,
struct device *parent, int disp_num)
{
static int dev_num;

WARN_ON(!dssdev->driver_name);

reset_device(&dssdev->dev, 1);
dssdev->dev.bus = &dss_bus_type;
dssdev->dev.parent = &dss_bus;
dssdev->dev.parent = parent;
dssdev->dev.release = omap_dss_dev_release;
dev_set_name(&dssdev->dev, "display%d", dev_num++);
dev_set_name(&dssdev->dev, "display%d", disp_num);
return device_register(&dssdev->dev);
}

static void omap_dss_unregister_device(struct omap_dss_device *dssdev)
void omap_dss_unregister_device(struct omap_dss_device *dssdev)
{
device_unregister(&dssdev->dev);
}

static int dss_unregister_dss_dev(struct device *dev, void *data)
{
struct omap_dss_device *dssdev = to_dss_device(dev);
omap_dss_unregister_device(dssdev);
return 0;
}

void omap_dss_unregister_child_devices(struct device *parent)
{
device_for_each_child(parent, NULL, dss_unregister_dss_dev);
}

/* BUS */
static int __init omap_dss_bus_register(void)
{
Expand Down
17 changes: 17 additions & 0 deletions trunk/drivers/video/omap2/dss/dpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,11 +367,28 @@ int dpi_init_display(struct omap_dss_device *dssdev)

static int __init omap_dpi_probe(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_DPI)
continue;

r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}

return 0;
}

static int __exit omap_dpi_remove(struct platform_device *pdev)
{
omap_dss_unregister_child_devices(&pdev->dev);

return 0;
}

Expand Down
18 changes: 18 additions & 0 deletions trunk/drivers/video/omap2/dss/dsi.c
Original file line number Diff line number Diff line change
Expand Up @@ -4614,6 +4614,7 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev)
int r, i, dsi_module = dsi_get_dsidev_id(dsidev);
struct resource *dsi_mem;
struct dsi_data *dsi;
struct omap_dss_board_info *pdata = dsidev->dev.platform_data;

dsi = devm_kzalloc(&dsidev->dev, sizeof(*dsi), GFP_KERNEL);
if (!dsi)
Expand Down Expand Up @@ -4700,6 +4701,21 @@ static int __init omap_dsihw_probe(struct platform_device *dsidev)
else
dsi->num_lanes_supported = 3;

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)
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);

if (dsi_module == 0)
Expand Down Expand Up @@ -4727,6 +4743,8 @@ static int __exit omap_dsihw_remove(struct platform_device *dsidev)

WARN_ON(dsi->scp_clk_refcount > 0);

omap_dss_unregister_child_devices(&dsidev->dev);

pm_runtime_disable(&dsidev->dev);

dsi_put_clocks(dsidev);
Expand Down
5 changes: 5 additions & 0 deletions trunk/drivers/video/omap2/dss/dss.h
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,11 @@ void dss_dsi_disable_pads(int dsi_id, unsigned lane_mask);
int dss_set_min_bus_tput(struct device *dev, unsigned long tput);
int dss_debugfs_create_file(const char *name, void (*write)(struct seq_file *));

int omap_dss_register_device(struct omap_dss_device *dssdev,
struct device *parent, int disp_num);
void omap_dss_unregister_device(struct omap_dss_device *dssdev);
void omap_dss_unregister_child_devices(struct device *parent);

/* apply */
void dss_apply_init(void);
int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr);
Expand Down
17 changes: 16 additions & 1 deletion trunk/drivers/video/omap2/dss/hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -774,8 +774,9 @@ static void hdmi_put_clocks(void)
/* HDMI HW IP initialisation */
static int __init omapdss_hdmihw_probe(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
struct resource *hdmi_mem;
int r;
int r, i;

hdmi.pdev = pdev;

Expand Down Expand Up @@ -812,6 +813,18 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)

dss_debugfs_create_file("hdmi", hdmi_dump_regs);

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 = 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) || \
defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)

Expand All @@ -828,6 +841,8 @@ static int __init omapdss_hdmihw_probe(struct platform_device *pdev)

static int __exit omapdss_hdmihw_remove(struct platform_device *pdev)
{
omap_dss_unregister_child_devices(&pdev->dev);

hdmi_panel_exit();

#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
Expand Down
16 changes: 15 additions & 1 deletion trunk/drivers/video/omap2/dss/rfbi.c
Original file line number Diff line number Diff line change
Expand Up @@ -930,10 +930,11 @@ int rfbi_init_display(struct omap_dss_device *dssdev)
/* RFBI HW IP initialisation */
static int __init omap_rfbihw_probe(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
u32 rev;
struct resource *rfbi_mem;
struct clk *clk;
int r;
int r, i;

rfbi.pdev = pdev;

Expand Down Expand Up @@ -978,6 +979,18 @@ static int __init omap_rfbihw_probe(struct platform_device *pdev)

dss_debugfs_create_file("rfbi", rfbi_dump_regs);

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 = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}

return 0;

err_runtime_get:
Expand All @@ -987,6 +1000,7 @@ static int __init omap_rfbihw_probe(struct platform_device *pdev)

static int __exit omap_rfbihw_remove(struct platform_device *pdev)
{
omap_dss_unregister_child_devices(&pdev->dev);
pm_runtime_disable(&pdev->dev);
return 0;
}
Expand Down
17 changes: 17 additions & 0 deletions trunk/drivers/video/omap2/dss/sdi.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,11 +178,28 @@ int sdi_init_display(struct omap_dss_device *dssdev)

static int __init omap_sdi_probe(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_SDI)
continue;

r = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}

return 0;
}

static int __exit omap_sdi_remove(struct platform_device *pdev)
{
omap_dss_unregister_child_devices(&pdev->dev);

return 0;
}

Expand Down
18 changes: 17 additions & 1 deletion trunk/drivers/video/omap2/dss/venc.c
Original file line number Diff line number Diff line change
Expand Up @@ -832,9 +832,10 @@ static void venc_put_clocks(void)
/* VENC HW IP initialisation */
static int __init omap_venchw_probe(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
u8 rev_id;
struct resource *venc_mem;
int r;
int r, i;

venc.pdev = pdev;

Expand Down Expand Up @@ -876,6 +877,18 @@ static int __init omap_venchw_probe(struct platform_device *pdev)

dss_debugfs_create_file("venc", venc_dump_regs);

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 = omap_dss_register_device(dssdev, &pdev->dev, i);
if (r)
DSSERR("device %s register failed: %d\n",
dssdev->name, r);
}

return 0;

err_reg_panel_driver:
Expand All @@ -887,10 +900,13 @@ static int __init omap_venchw_probe(struct platform_device *pdev)

static int __exit omap_venchw_remove(struct platform_device *pdev)
{
omap_dss_unregister_child_devices(&pdev->dev);

if (venc.vdda_dac_reg != NULL) {
regulator_put(venc.vdda_dac_reg);
venc.vdda_dac_reg = NULL;
}

omap_dss_unregister_driver(&venc_driver);

pm_runtime_disable(&pdev->dev);
Expand Down

0 comments on commit c1292d0

Please sign in to comment.