Commit a8998202 authored by Tomi Valkeinen's avatar Tomi Valkeinen

Merge omapdss componentization work

parents 9f5ddefd ad4eaef7
...@@ -50,8 +50,6 @@ static char *def_disp_name; ...@@ -50,8 +50,6 @@ static char *def_disp_name;
module_param_named(def_disp, def_disp_name, charp, 0); module_param_named(def_disp, def_disp_name, charp, 0);
MODULE_PARM_DESC(def_disp, "default display name"); MODULE_PARM_DESC(def_disp, "default display name");
static bool dss_initialized;
const char *omapdss_get_default_display_name(void) const char *omapdss_get_default_display_name(void)
{ {
return core.default_display_name; return core.default_display_name;
...@@ -65,12 +63,6 @@ enum omapdss_version omapdss_get_version(void) ...@@ -65,12 +63,6 @@ enum omapdss_version omapdss_get_version(void)
} }
EXPORT_SYMBOL(omapdss_get_version); EXPORT_SYMBOL(omapdss_get_version);
bool omapdss_is_initialized(void)
{
return dss_initialized;
}
EXPORT_SYMBOL(omapdss_is_initialized);
struct platform_device *dss_get_core_pdev(void) struct platform_device *dss_get_core_pdev(void)
{ {
return core.pdev; return core.pdev;
...@@ -253,6 +245,8 @@ static struct platform_driver omap_dss_driver = { ...@@ -253,6 +245,8 @@ static struct platform_driver omap_dss_driver = {
/* INIT */ /* INIT */
static int (*dss_output_drv_reg_funcs[])(void) __initdata = { static int (*dss_output_drv_reg_funcs[])(void) __initdata = {
dss_init_platform_driver,
dispc_init_platform_driver,
#ifdef CONFIG_OMAP2_DSS_DSI #ifdef CONFIG_OMAP2_DSS_DSI
dsi_init_platform_driver, dsi_init_platform_driver,
#endif #endif
...@@ -276,32 +270,32 @@ static int (*dss_output_drv_reg_funcs[])(void) __initdata = { ...@@ -276,32 +270,32 @@ static int (*dss_output_drv_reg_funcs[])(void) __initdata = {
#endif #endif
}; };
static void (*dss_output_drv_unreg_funcs[])(void) __exitdata = { static void (*dss_output_drv_unreg_funcs[])(void) = {
#ifdef CONFIG_OMAP2_DSS_DSI #ifdef CONFIG_OMAP5_DSS_HDMI
dsi_uninit_platform_driver, hdmi5_uninit_platform_driver,
#endif #endif
#ifdef CONFIG_OMAP2_DSS_DPI #ifdef CONFIG_OMAP4_DSS_HDMI
dpi_uninit_platform_driver, hdmi4_uninit_platform_driver,
#endif #endif
#ifdef CONFIG_OMAP2_DSS_SDI #ifdef CONFIG_OMAP2_DSS_VENC
sdi_uninit_platform_driver, venc_uninit_platform_driver,
#endif #endif
#ifdef CONFIG_OMAP2_DSS_RFBI #ifdef CONFIG_OMAP2_DSS_RFBI
rfbi_uninit_platform_driver, rfbi_uninit_platform_driver,
#endif #endif
#ifdef CONFIG_OMAP2_DSS_VENC #ifdef CONFIG_OMAP2_DSS_SDI
venc_uninit_platform_driver, sdi_uninit_platform_driver,
#endif #endif
#ifdef CONFIG_OMAP4_DSS_HDMI #ifdef CONFIG_OMAP2_DSS_DPI
hdmi4_uninit_platform_driver, dpi_uninit_platform_driver,
#endif #endif
#ifdef CONFIG_OMAP5_DSS_HDMI #ifdef CONFIG_OMAP2_DSS_DSI
hdmi5_uninit_platform_driver, dsi_uninit_platform_driver,
#endif #endif
dispc_uninit_platform_driver,
dss_uninit_platform_driver,
}; };
static bool dss_output_drv_loaded[ARRAY_SIZE(dss_output_drv_reg_funcs)];
static int __init omap_dss_init(void) static int __init omap_dss_init(void)
{ {
int r; int r;
...@@ -311,35 +305,20 @@ static int __init omap_dss_init(void) ...@@ -311,35 +305,20 @@ static int __init omap_dss_init(void)
if (r) if (r)
return r; return r;
r = dss_init_platform_driver();
if (r) {
DSSERR("Failed to initialize DSS platform driver\n");
goto err_dss;
}
r = dispc_init_platform_driver();
if (r) {
DSSERR("Failed to initialize dispc platform driver\n");
goto err_dispc;
}
/*
* It's ok if the output-driver register fails. It happens, for example,
* when there is no output-device (e.g. SDI for OMAP4).
*/
for (i = 0; i < ARRAY_SIZE(dss_output_drv_reg_funcs); ++i) { for (i = 0; i < ARRAY_SIZE(dss_output_drv_reg_funcs); ++i) {
r = dss_output_drv_reg_funcs[i](); r = dss_output_drv_reg_funcs[i]();
if (r == 0) if (r)
dss_output_drv_loaded[i] = true; goto err_reg;
} }
dss_initialized = true;
return 0; return 0;
err_dispc: err_reg:
dss_uninit_platform_driver(); for (i = ARRAY_SIZE(dss_output_drv_reg_funcs) - i;
err_dss: i < ARRAY_SIZE(dss_output_drv_reg_funcs);
++i)
dss_output_drv_unreg_funcs[i]();
platform_driver_unregister(&omap_dss_driver); platform_driver_unregister(&omap_dss_driver);
return r; return r;
...@@ -349,13 +328,8 @@ static void __exit omap_dss_exit(void) ...@@ -349,13 +328,8 @@ static void __exit omap_dss_exit(void)
{ {
int i; int i;
for (i = 0; i < ARRAY_SIZE(dss_output_drv_unreg_funcs); ++i) { for (i = 0; i < ARRAY_SIZE(dss_output_drv_unreg_funcs); ++i)
if (dss_output_drv_loaded[i]) dss_output_drv_unreg_funcs[i]();
dss_output_drv_unreg_funcs[i]();
}
dispc_uninit_platform_driver();
dss_uninit_platform_driver();
platform_driver_unregister(&omap_dss_driver); platform_driver_unregister(&omap_dss_driver);
} }
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include <linux/mfd/syscon.h> #include <linux/mfd/syscon.h>
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
...@@ -3692,7 +3693,7 @@ static void _omap_dispc_initial_config(void) ...@@ -3692,7 +3693,7 @@ static void _omap_dispc_initial_config(void)
dispc_init_mflag(); dispc_init_mflag();
} }
static const struct dispc_features omap24xx_dispc_feats __initconst = { static const struct dispc_features omap24xx_dispc_feats = {
.sw_start = 5, .sw_start = 5,
.fp_start = 15, .fp_start = 15,
.bp_start = 27, .bp_start = 27,
...@@ -3711,7 +3712,7 @@ static const struct dispc_features omap24xx_dispc_feats __initconst = { ...@@ -3711,7 +3712,7 @@ static const struct dispc_features omap24xx_dispc_feats __initconst = {
.set_max_preload = false, .set_max_preload = false,
}; };
static const struct dispc_features omap34xx_rev1_0_dispc_feats __initconst = { static const struct dispc_features omap34xx_rev1_0_dispc_feats = {
.sw_start = 5, .sw_start = 5,
.fp_start = 15, .fp_start = 15,
.bp_start = 27, .bp_start = 27,
...@@ -3731,7 +3732,7 @@ static const struct dispc_features omap34xx_rev1_0_dispc_feats __initconst = { ...@@ -3731,7 +3732,7 @@ static const struct dispc_features omap34xx_rev1_0_dispc_feats __initconst = {
.set_max_preload = false, .set_max_preload = false,
}; };
static const struct dispc_features omap34xx_rev3_0_dispc_feats __initconst = { static const struct dispc_features omap34xx_rev3_0_dispc_feats = {
.sw_start = 7, .sw_start = 7,
.fp_start = 19, .fp_start = 19,
.bp_start = 31, .bp_start = 31,
...@@ -3751,7 +3752,7 @@ static const struct dispc_features omap34xx_rev3_0_dispc_feats __initconst = { ...@@ -3751,7 +3752,7 @@ static const struct dispc_features omap34xx_rev3_0_dispc_feats __initconst = {
.set_max_preload = false, .set_max_preload = false,
}; };
static const struct dispc_features omap44xx_dispc_feats __initconst = { static const struct dispc_features omap44xx_dispc_feats = {
.sw_start = 7, .sw_start = 7,
.fp_start = 19, .fp_start = 19,
.bp_start = 31, .bp_start = 31,
...@@ -3771,7 +3772,7 @@ static const struct dispc_features omap44xx_dispc_feats __initconst = { ...@@ -3771,7 +3772,7 @@ static const struct dispc_features omap44xx_dispc_feats __initconst = {
.set_max_preload = true, .set_max_preload = true,
}; };
static const struct dispc_features omap54xx_dispc_feats __initconst = { static const struct dispc_features omap54xx_dispc_feats = {
.sw_start = 7, .sw_start = 7,
.fp_start = 19, .fp_start = 19,
.bp_start = 31, .bp_start = 31,
...@@ -3792,7 +3793,7 @@ static const struct dispc_features omap54xx_dispc_feats __initconst = { ...@@ -3792,7 +3793,7 @@ static const struct dispc_features omap54xx_dispc_feats __initconst = {
.set_max_preload = true, .set_max_preload = true,
}; };
static int __init dispc_init_features(struct platform_device *pdev) static int dispc_init_features(struct platform_device *pdev)
{ {
const struct dispc_features *src; const struct dispc_features *src;
struct dispc_features *dst; struct dispc_features *dst;
...@@ -3882,8 +3883,9 @@ void dispc_free_irq(void *dev_id) ...@@ -3882,8 +3883,9 @@ void dispc_free_irq(void *dev_id)
EXPORT_SYMBOL(dispc_free_irq); EXPORT_SYMBOL(dispc_free_irq);
/* DISPC HW IP initialisation */ /* DISPC HW IP initialisation */
static int __init omap_dispchw_probe(struct platform_device *pdev) static int dispc_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
u32 rev; u32 rev;
int r = 0; int r = 0;
struct resource *dispc_mem; struct resource *dispc_mem;
...@@ -3955,12 +3957,27 @@ static int __init omap_dispchw_probe(struct platform_device *pdev) ...@@ -3955,12 +3957,27 @@ static int __init omap_dispchw_probe(struct platform_device *pdev)
return r; return r;
} }
static int __exit omap_dispchw_remove(struct platform_device *pdev) static void dispc_unbind(struct device *dev, struct device *master,
void *data)
{ {
pm_runtime_disable(&pdev->dev); pm_runtime_disable(dev);
dss_uninit_overlay_managers(); dss_uninit_overlay_managers();
}
static const struct component_ops dispc_component_ops = {
.bind = dispc_bind,
.unbind = dispc_unbind,
};
static int dispc_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &dispc_component_ops);
}
static int dispc_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &dispc_component_ops);
return 0; return 0;
} }
...@@ -4013,7 +4030,8 @@ static const struct of_device_id dispc_of_match[] = { ...@@ -4013,7 +4030,8 @@ static const struct of_device_id dispc_of_match[] = {
}; };
static struct platform_driver omap_dispchw_driver = { static struct platform_driver omap_dispchw_driver = {
.remove = __exit_p(omap_dispchw_remove), .probe = dispc_probe,
.remove = dispc_remove,
.driver = { .driver = {
.name = "omapdss_dispc", .name = "omapdss_dispc",
.pm = &dispc_pm_ops, .pm = &dispc_pm_ops,
...@@ -4024,10 +4042,10 @@ static struct platform_driver omap_dispchw_driver = { ...@@ -4024,10 +4042,10 @@ static struct platform_driver omap_dispchw_driver = {
int __init dispc_init_platform_driver(void) int __init dispc_init_platform_driver(void)
{ {
return platform_driver_probe(&omap_dispchw_driver, omap_dispchw_probe); return platform_driver_register(&omap_dispchw_driver);
} }
void __exit dispc_uninit_platform_driver(void) void dispc_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omap_dispchw_driver); platform_driver_unregister(&omap_dispchw_driver);
} }
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
...@@ -731,7 +732,7 @@ static void dpi_init_output(struct platform_device *pdev) ...@@ -731,7 +732,7 @@ static void dpi_init_output(struct platform_device *pdev)
omapdss_register_output(out); omapdss_register_output(out);
} }
static void __exit dpi_uninit_output(struct platform_device *pdev) static void dpi_uninit_output(struct platform_device *pdev)
{ {
struct dpi_data *dpi = dpi_get_data_from_pdev(pdev); struct dpi_data *dpi = dpi_get_data_from_pdev(pdev);
struct omap_dss_device *out = &dpi->output; struct omap_dss_device *out = &dpi->output;
...@@ -775,7 +776,7 @@ static void dpi_init_output_port(struct platform_device *pdev, ...@@ -775,7 +776,7 @@ static void dpi_init_output_port(struct platform_device *pdev,
omapdss_register_output(out); omapdss_register_output(out);
} }
static void __exit dpi_uninit_output_port(struct device_node *port) static void dpi_uninit_output_port(struct device_node *port)
{ {
struct dpi_data *dpi = port->data; struct dpi_data *dpi = port->data;
struct omap_dss_device *out = &dpi->output; struct omap_dss_device *out = &dpi->output;
...@@ -783,8 +784,9 @@ static void __exit dpi_uninit_output_port(struct device_node *port) ...@@ -783,8 +784,9 @@ static void __exit dpi_uninit_output_port(struct device_node *port)
omapdss_unregister_output(out); omapdss_unregister_output(out);
} }
static int omap_dpi_probe(struct platform_device *pdev) static int dpi_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
struct dpi_data *dpi; struct dpi_data *dpi;
dpi = devm_kzalloc(&pdev->dev, sizeof(*dpi), GFP_KERNEL); dpi = devm_kzalloc(&pdev->dev, sizeof(*dpi), GFP_KERNEL);
...@@ -802,16 +804,32 @@ static int omap_dpi_probe(struct platform_device *pdev) ...@@ -802,16 +804,32 @@ static int omap_dpi_probe(struct platform_device *pdev)
return 0; return 0;
} }
static int __exit omap_dpi_remove(struct platform_device *pdev) static void dpi_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
dpi_uninit_output(pdev); dpi_uninit_output(pdev);
}
static const struct component_ops dpi_component_ops = {
.bind = dpi_bind,
.unbind = dpi_unbind,
};
static int dpi_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &dpi_component_ops);
}
static int dpi_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &dpi_component_ops);
return 0; return 0;
} }
static struct platform_driver omap_dpi_driver = { static struct platform_driver omap_dpi_driver = {
.probe = omap_dpi_probe, .probe = dpi_probe,
.remove = __exit_p(omap_dpi_remove), .remove = dpi_remove,
.driver = { .driver = {
.name = "omapdss_dpi", .name = "omapdss_dpi",
.suppress_bind_attrs = true, .suppress_bind_attrs = true,
...@@ -823,12 +841,12 @@ int __init dpi_init_platform_driver(void) ...@@ -823,12 +841,12 @@ int __init dpi_init_platform_driver(void)
return platform_driver_register(&omap_dpi_driver); return platform_driver_register(&omap_dpi_driver);
} }
void __exit dpi_uninit_platform_driver(void) void dpi_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omap_dpi_driver); platform_driver_unregister(&omap_dpi_driver);
} }
int __init dpi_init_port(struct platform_device *pdev, struct device_node *port) int dpi_init_port(struct platform_device *pdev, struct device_node *port)
{ {
struct dpi_data *dpi; struct dpi_data *dpi;
struct device_node *ep; struct device_node *ep;
...@@ -870,7 +888,7 @@ int __init dpi_init_port(struct platform_device *pdev, struct device_node *port) ...@@ -870,7 +888,7 @@ int __init dpi_init_port(struct platform_device *pdev, struct device_node *port)
return r; return r;
} }
void __exit dpi_uninit_port(struct device_node *port) void dpi_uninit_port(struct device_node *port)
{ {
struct dpi_data *dpi = port->data; struct dpi_data *dpi = port->data;
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
#include <video/mipi_display.h> #include <video/mipi_display.h>
...@@ -5274,8 +5275,9 @@ static int dsi_init_pll_data(struct platform_device *dsidev) ...@@ -5274,8 +5275,9 @@ static int dsi_init_pll_data(struct platform_device *dsidev)
} }
/* DSI1 HW IP initialisation */ /* DSI1 HW IP initialisation */
static int omap_dsihw_probe(struct platform_device *dsidev) static int dsi_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *dsidev = to_platform_device(dev);
u32 rev; u32 rev;
int r, i; int r, i;
struct dsi_data *dsi; struct dsi_data *dsi;
...@@ -5484,8 +5486,9 @@ static int omap_dsihw_probe(struct platform_device *dsidev) ...@@ -5484,8 +5486,9 @@ static int omap_dsihw_probe(struct platform_device *dsidev)
return r; return r;
} }
static int __exit omap_dsihw_remove(struct platform_device *dsidev) static void dsi_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *dsidev = to_platform_device(dev);
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
of_platform_depopulate(&dsidev->dev); of_platform_depopulate(&dsidev->dev);
...@@ -5502,7 +5505,21 @@ static int __exit omap_dsihw_remove(struct platform_device *dsidev) ...@@ -5502,7 +5505,21 @@ static int __exit omap_dsihw_remove(struct platform_device *dsidev)
regulator_disable(dsi->vdds_dsi_reg); regulator_disable(dsi->vdds_dsi_reg);
dsi->vdds_dsi_enabled = false; dsi->vdds_dsi_enabled = false;
} }
}
static const struct component_ops dsi_component_ops = {
.bind = dsi_bind,
.unbind = dsi_unbind,
};
static int dsi_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &dsi_component_ops);
}
static int dsi_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &dsi_component_ops);
return 0; return 0;
} }
...@@ -5569,8 +5586,8 @@ static const struct of_device_id dsi_of_match[] = { ...@@ -5569,8 +5586,8 @@ static const struct of_device_id dsi_of_match[] = {
}; };
static struct platform_driver omap_dsihw_driver = { static struct platform_driver omap_dsihw_driver = {
.probe = omap_dsihw_probe, .probe = dsi_probe,
.remove = __exit_p(omap_dsihw_remove), .remove = dsi_remove,
.driver = { .driver = {
.name = "omapdss_dsi", .name = "omapdss_dsi",
.pm = &dsi_pm_ops, .pm = &dsi_pm_ops,
...@@ -5584,7 +5601,7 @@ int __init dsi_init_platform_driver(void) ...@@ -5584,7 +5601,7 @@ int __init dsi_init_platform_driver(void)
return platform_driver_register(&omap_dsihw_driver); return platform_driver_register(&omap_dsihw_driver);
} }
void __exit dsi_uninit_platform_driver(void) void dsi_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omap_dsihw_driver); platform_driver_unregister(&omap_dsihw_driver);
} }
This diff is collapsed.
...@@ -309,18 +309,18 @@ bool dss_div_calc(unsigned long pck, unsigned long fck_min, ...@@ -309,18 +309,18 @@ bool dss_div_calc(unsigned long pck, unsigned long fck_min,
/* SDI */ /* SDI */
int sdi_init_platform_driver(void) __init; int sdi_init_platform_driver(void) __init;
void sdi_uninit_platform_driver(void) __exit; void sdi_uninit_platform_driver(void);
#ifdef CONFIG_OMAP2_DSS_SDI #ifdef CONFIG_OMAP2_DSS_SDI
int sdi_init_port(struct platform_device *pdev, struct device_node *port) __init; int sdi_init_port(struct platform_device *pdev, struct device_node *port);
void sdi_uninit_port(struct device_node *port) __exit; void sdi_uninit_port(struct device_node *port);
#else #else
static inline int __init sdi_init_port(struct platform_device *pdev, static inline int sdi_init_port(struct platform_device *pdev,
struct device_node *port) struct device_node *port)
{ {
return 0; return 0;
} }
static inline void __exit sdi_uninit_port(struct device_node *port) static inline void sdi_uninit_port(struct device_node *port)
{ {
} }
#endif #endif
...@@ -333,7 +333,7 @@ struct dentry; ...@@ -333,7 +333,7 @@ struct dentry;
struct file_operations; struct file_operations;
int dsi_init_platform_driver(void) __init; int dsi_init_platform_driver(void) __init;
void dsi_uninit_platform_driver(void) __exit; void dsi_uninit_platform_driver(void);
void dsi_dump_clocks(struct seq_file *s); void dsi_dump_clocks(struct seq_file *s);
...@@ -350,25 +350,25 @@ static inline u8 dsi_get_pixel_size(enum omap_dss_dsi_pixel_format fmt) ...@@ -350,25 +350,25 @@ static inline u8 dsi_get_pixel_size(enum omap_dss_dsi_pixel_format fmt)
/* DPI */ /* DPI */
int dpi_init_platform_driver(void) __init; int dpi_init_platform_driver(void) __init;
void dpi_uninit_platform_driver(void) __exit; void dpi_uninit_platform_driver(void);
#ifdef CONFIG_OMAP2_DSS_DPI #ifdef CONFIG_OMAP2_DSS_DPI
int dpi_init_port(struct platform_device *pdev, struct device_node *port) __init; int dpi_init_port(struct platform_device *pdev, struct device_node *port);
void dpi_uninit_port(struct device_node *port) __exit; void dpi_uninit_port(struct device_node *port);
#else #else
static inline int __init dpi_init_port(struct platform_device *pdev, static inline int dpi_init_port(struct platform_device *pdev,
struct device_node *port) struct device_node *port)
{ {
return 0; return 0;
} }
static inline void __exit dpi_uninit_port(struct device_node *port) static inline void dpi_uninit_port(struct device_node *port)
{ {
} }
#endif #endif
/* DISPC */ /* DISPC */
int dispc_init_platform_driver(void) __init; int dispc_init_platform_driver(void) __init;
void dispc_uninit_platform_driver(void) __exit; void dispc_uninit_platform_driver(void);
void dispc_dump_clocks(struct seq_file *s); void dispc_dump_clocks(struct seq_file *s);
void dispc_enable_sidle(void); void dispc_enable_sidle(void);
...@@ -418,18 +418,18 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi, ...@@ -418,18 +418,18 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi,
/* VENC */ /* VENC */
int venc_init_platform_driver(void) __init; int venc_init_platform_driver(void) __init;
void venc_uninit_platform_driver(void) __exit; void venc_uninit_platform_driver(void);
/* HDMI */ /* HDMI */
int hdmi4_init_platform_driver(void) __init; int hdmi4_init_platform_driver(void) __init;
void hdmi4_uninit_platform_driver(void) __exit; void hdmi4_uninit_platform_driver(void);
int hdmi5_init_platform_driver(void) __init; int hdmi5_init_platform_driver(void) __init;
void hdmi5_uninit_platform_driver(void) __exit; void hdmi5_uninit_platform_driver(void);
/* RFBI */ /* RFBI */
int rfbi_init_platform_driver(void) __init; int rfbi_init_platform_driver(void) __init;
void rfbi_uninit_platform_driver(void) __exit; void rfbi_uninit_platform_driver(void);
#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
#include <sound/omap-hdmi-audio.h> #include <sound/omap-hdmi-audio.h>
...@@ -646,8 +647,9 @@ static int hdmi_audio_register(struct device *dev) ...@@ -646,8 +647,9 @@ static int hdmi_audio_register(struct device *dev)
} }
/* HDMI HW IP initialisation */ /* HDMI HW IP initialisation */
static int omapdss_hdmihw_probe(struct platform_device *pdev) static int hdmi4_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
int r; int r;
int irq; int irq;
...@@ -713,8 +715,10 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev) ...@@ -713,8 +715,10 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev)
return r; return r;
} }
static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) static void hdmi4_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
if (hdmi.audio_pdev) if (hdmi.audio_pdev)
platform_device_unregister(hdmi.audio_pdev); platform_device_unregister(hdmi.audio_pdev);
...@@ -723,7 +727,21 @@ static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) ...@@ -723,7 +727,21 @@ static int __exit omapdss_hdmihw_remove(struct platform_device *pdev)
hdmi_pll_uninit(&hdmi.pll); hdmi_pll_uninit(&hdmi.pll);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
}
static const struct component_ops hdmi4_component_ops = {
.bind = hdmi4_bind,
.unbind = hdmi4_unbind,
};
static int hdmi4_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &hdmi4_component_ops);
}
static int hdmi4_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &hdmi4_component_ops);
return 0; return 0;
} }
...@@ -756,8 +774,8 @@ static const struct of_device_id hdmi_of_match[] = { ...@@ -756,8 +774,8 @@ static const struct of_device_id hdmi_of_match[] = {
}; };
static struct platform_driver omapdss_hdmihw_driver = { static struct platform_driver omapdss_hdmihw_driver = {
.probe = omapdss_hdmihw_probe, .probe = hdmi4_probe,
.remove = __exit_p(omapdss_hdmihw_remove), .remove = hdmi4_remove,
.driver = { .driver = {
.name = "omapdss_hdmi", .name = "omapdss_hdmi",
.pm = &hdmi_pm_ops, .pm = &hdmi_pm_ops,
...@@ -771,7 +789,7 @@ int __init hdmi4_init_platform_driver(void) ...@@ -771,7 +789,7 @@ int __init hdmi4_init_platform_driver(void)
return platform_driver_register(&omapdss_hdmihw_driver); return platform_driver_register(&omapdss_hdmihw_driver);
} }
void __exit hdmi4_uninit_platform_driver(void) void hdmi4_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omapdss_hdmihw_driver); platform_driver_unregister(&omapdss_hdmihw_driver);
} }
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
#include <sound/omap-hdmi-audio.h> #include <sound/omap-hdmi-audio.h>
...@@ -681,8 +682,9 @@ static int hdmi_audio_register(struct device *dev) ...@@ -681,8 +682,9 @@ static int hdmi_audio_register(struct device *dev)
} }
/* HDMI HW IP initialisation */ /* HDMI HW IP initialisation */
static int omapdss_hdmihw_probe(struct platform_device *pdev) static int hdmi5_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
int r; int r;
int irq; int irq;
...@@ -748,8 +750,10 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev) ...@@ -748,8 +750,10 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev)
return r; return r;
} }
static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) static void hdmi5_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
if (hdmi.audio_pdev) if (hdmi.audio_pdev)
platform_device_unregister(hdmi.audio_pdev); platform_device_unregister(hdmi.audio_pdev);
...@@ -758,7 +762,21 @@ static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) ...@@ -758,7 +762,21 @@ static int __exit omapdss_hdmihw_remove(struct platform_device *pdev)
hdmi_pll_uninit(&hdmi.pll); hdmi_pll_uninit(&hdmi.pll);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
}
static const struct component_ops hdmi5_component_ops = {
.bind = hdmi5_bind,
.unbind = hdmi5_unbind,
};
static int hdmi5_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &hdmi5_component_ops);
}
static int hdmi5_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &hdmi5_component_ops);
return 0; return 0;
} }
...@@ -792,8 +810,8 @@ static const struct of_device_id hdmi_of_match[] = { ...@@ -792,8 +810,8 @@ static const struct of_device_id hdmi_of_match[] = {
}; };
static struct platform_driver omapdss_hdmihw_driver = { static struct platform_driver omapdss_hdmihw_driver = {
.probe = omapdss_hdmihw_probe, .probe = hdmi5_probe,
.remove = __exit_p(omapdss_hdmihw_remove), .remove = hdmi5_remove,
.driver = { .driver = {
.name = "omapdss_hdmi5", .name = "omapdss_hdmi5",
.pm = &hdmi_pm_ops, .pm = &hdmi_pm_ops,
...@@ -807,7 +825,7 @@ int __init hdmi5_init_platform_driver(void) ...@@ -807,7 +825,7 @@ int __init hdmi5_init_platform_driver(void)
return platform_driver_register(&omapdss_hdmihw_driver); return platform_driver_register(&omapdss_hdmihw_driver);
} }
void __exit hdmi5_uninit_platform_driver(void) void hdmi5_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omapdss_hdmihw_driver); platform_driver_unregister(&omapdss_hdmihw_driver);
} }
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <linux/semaphore.h> #include <linux/semaphore.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
#include "dss.h" #include "dss.h"
...@@ -938,7 +939,7 @@ static void rfbi_init_output(struct platform_device *pdev) ...@@ -938,7 +939,7 @@ static void rfbi_init_output(struct platform_device *pdev)
omapdss_register_output(out); omapdss_register_output(out);
} }
static void __exit rfbi_uninit_output(struct platform_device *pdev) static void rfbi_uninit_output(struct platform_device *pdev)
{ {
struct omap_dss_device *out = &rfbi.output; struct omap_dss_device *out = &rfbi.output;
...@@ -946,8 +947,9 @@ static void __exit rfbi_uninit_output(struct platform_device *pdev) ...@@ -946,8 +947,9 @@ static void __exit rfbi_uninit_output(struct platform_device *pdev)
} }
/* RFBI HW IP initialisation */ /* RFBI HW IP initialisation */
static int omap_rfbihw_probe(struct platform_device *pdev) static int rfbi_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
u32 rev; u32 rev;
struct resource *rfbi_mem; struct resource *rfbi_mem;
struct clk *clk; struct clk *clk;
...@@ -1005,8 +1007,10 @@ static int omap_rfbihw_probe(struct platform_device *pdev) ...@@ -1005,8 +1007,10 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
return r; return r;
} }
static int __exit omap_rfbihw_remove(struct platform_device *pdev) static void rfbi_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
rfbi_uninit_output(pdev); rfbi_uninit_output(pdev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
...@@ -1014,6 +1018,22 @@ static int __exit omap_rfbihw_remove(struct platform_device *pdev) ...@@ -1014,6 +1018,22 @@ static int __exit omap_rfbihw_remove(struct platform_device *pdev)
return 0; return 0;
} }
static const struct component_ops rfbi_component_ops = {
.bind = rfbi_bind,
.unbind = rfbi_unbind,
};
static int rfbi_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &rfbi_component_ops);
}
static int rfbi_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &rfbi_component_ops);
return 0;
}
static int rfbi_runtime_suspend(struct device *dev) static int rfbi_runtime_suspend(struct device *dev)
{ {
dispc_runtime_put(); dispc_runtime_put();
...@@ -1038,8 +1058,8 @@ static const struct dev_pm_ops rfbi_pm_ops = { ...@@ -1038,8 +1058,8 @@ static const struct dev_pm_ops rfbi_pm_ops = {
}; };
static struct platform_driver omap_rfbihw_driver = { static struct platform_driver omap_rfbihw_driver = {
.probe = omap_rfbihw_probe, .probe = rfbi_probe,
.remove = __exit_p(omap_rfbihw_remove), .remove = rfbi_remove,
.driver = { .driver = {
.name = "omapdss_rfbi", .name = "omapdss_rfbi",
.pm = &rfbi_pm_ops, .pm = &rfbi_pm_ops,
...@@ -1052,7 +1072,7 @@ int __init rfbi_init_platform_driver(void) ...@@ -1052,7 +1072,7 @@ int __init rfbi_init_platform_driver(void)
return platform_driver_register(&omap_rfbihw_driver); return platform_driver_register(&omap_rfbihw_driver);
} }
void __exit rfbi_uninit_platform_driver(void) void rfbi_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omap_rfbihw_driver); platform_driver_unregister(&omap_rfbihw_driver);
} }
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
#include "dss.h" #include "dss.h"
...@@ -350,15 +351,17 @@ static void sdi_init_output(struct platform_device *pdev) ...@@ -350,15 +351,17 @@ static void sdi_init_output(struct platform_device *pdev)
omapdss_register_output(out); omapdss_register_output(out);
} }
static void __exit sdi_uninit_output(struct platform_device *pdev) static void sdi_uninit_output(struct platform_device *pdev)
{ {
struct omap_dss_device *out = &sdi.output; struct omap_dss_device *out = &sdi.output;
omapdss_unregister_output(out); omapdss_unregister_output(out);
} }
static int omap_sdi_probe(struct platform_device *pdev) static int sdi_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
sdi.pdev = pdev; sdi.pdev = pdev;
sdi_init_output(pdev); sdi_init_output(pdev);
...@@ -366,16 +369,32 @@ static int omap_sdi_probe(struct platform_device *pdev) ...@@ -366,16 +369,32 @@ static int omap_sdi_probe(struct platform_device *pdev)
return 0; return 0;
} }
static int __exit omap_sdi_remove(struct platform_device *pdev) static void sdi_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
sdi_uninit_output(pdev); sdi_uninit_output(pdev);
}
static const struct component_ops sdi_component_ops = {
.bind = sdi_bind,
.unbind = sdi_unbind,
};
static int sdi_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &sdi_component_ops);
}
static int sdi_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &sdi_component_ops);
return 0; return 0;
} }
static struct platform_driver omap_sdi_driver = { static struct platform_driver omap_sdi_driver = {
.probe = omap_sdi_probe, .probe = sdi_probe,
.remove = __exit_p(omap_sdi_remove), .remove = sdi_remove,
.driver = { .driver = {
.name = "omapdss_sdi", .name = "omapdss_sdi",
.suppress_bind_attrs = true, .suppress_bind_attrs = true,
...@@ -387,12 +406,12 @@ int __init sdi_init_platform_driver(void) ...@@ -387,12 +406,12 @@ int __init sdi_init_platform_driver(void)
return platform_driver_register(&omap_sdi_driver); return platform_driver_register(&omap_sdi_driver);
} }
void __exit sdi_uninit_platform_driver(void) void sdi_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omap_sdi_driver); platform_driver_unregister(&omap_sdi_driver);
} }
int __init sdi_init_port(struct platform_device *pdev, struct device_node *port) int sdi_init_port(struct platform_device *pdev, struct device_node *port)
{ {
struct device_node *ep; struct device_node *ep;
u32 datapairs; u32 datapairs;
...@@ -426,7 +445,7 @@ int __init sdi_init_port(struct platform_device *pdev, struct device_node *port) ...@@ -426,7 +445,7 @@ int __init sdi_init_port(struct platform_device *pdev, struct device_node *port)
return r; return r;
} }
void __exit sdi_uninit_port(struct device_node *port) void sdi_uninit_port(struct device_node *port)
{ {
if (!sdi.port_initialized) if (!sdi.port_initialized)
return; return;
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/component.h>
#include <video/omapdss.h> #include <video/omapdss.h>
...@@ -802,7 +803,7 @@ static void venc_init_output(struct platform_device *pdev) ...@@ -802,7 +803,7 @@ static void venc_init_output(struct platform_device *pdev)
omapdss_register_output(out); omapdss_register_output(out);
} }
static void __exit venc_uninit_output(struct platform_device *pdev) static void venc_uninit_output(struct platform_device *pdev)
{ {
struct omap_dss_device *out = &venc.output; struct omap_dss_device *out = &venc.output;
...@@ -852,8 +853,9 @@ static int venc_probe_of(struct platform_device *pdev) ...@@ -852,8 +853,9 @@ static int venc_probe_of(struct platform_device *pdev)
} }
/* VENC HW IP initialisation */ /* VENC HW IP initialisation */
static int omap_venchw_probe(struct platform_device *pdev) static int venc_bind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
u8 rev_id; u8 rev_id;
struct resource *venc_mem; struct resource *venc_mem;
int r; int r;
...@@ -912,12 +914,28 @@ static int omap_venchw_probe(struct platform_device *pdev) ...@@ -912,12 +914,28 @@ static int omap_venchw_probe(struct platform_device *pdev)
return r; return r;
} }
static int __exit omap_venchw_remove(struct platform_device *pdev) static void venc_unbind(struct device *dev, struct device *master, void *data)
{ {
struct platform_device *pdev = to_platform_device(dev);
venc_uninit_output(pdev); venc_uninit_output(pdev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
}
static const struct component_ops venc_component_ops = {
.bind = venc_bind,
.unbind = venc_unbind,
};
static int venc_probe(struct platform_device *pdev)
{
return component_add(&pdev->dev, &venc_component_ops);
}
static int venc_remove(struct platform_device *pdev)
{
component_del(&pdev->dev, &venc_component_ops);
return 0; return 0;
} }
...@@ -950,7 +968,6 @@ static const struct dev_pm_ops venc_pm_ops = { ...@@ -950,7 +968,6 @@ static const struct dev_pm_ops venc_pm_ops = {
.runtime_resume = venc_runtime_resume, .runtime_resume = venc_runtime_resume,
}; };
static const struct of_device_id venc_of_match[] = { static const struct of_device_id venc_of_match[] = {
{ .compatible = "ti,omap2-venc", }, { .compatible = "ti,omap2-venc", },
{ .compatible = "ti,omap3-venc", }, { .compatible = "ti,omap3-venc", },
...@@ -959,8 +976,8 @@ static const struct of_device_id venc_of_match[] = { ...@@ -959,8 +976,8 @@ static const struct of_device_id venc_of_match[] = {
}; };
static struct platform_driver omap_venchw_driver = { static struct platform_driver omap_venchw_driver = {
.probe = omap_venchw_probe, .probe = venc_probe,
.remove = __exit_p(omap_venchw_remove), .remove = venc_remove,
.driver = { .driver = {
.name = "omapdss_venc", .name = "omapdss_venc",
.pm = &venc_pm_ops, .pm = &venc_pm_ops,
...@@ -974,7 +991,7 @@ int __init venc_init_platform_driver(void) ...@@ -974,7 +991,7 @@ int __init venc_init_platform_driver(void)
return platform_driver_register(&omap_venchw_driver); return platform_driver_register(&omap_venchw_driver);
} }
void __exit venc_uninit_platform_driver(void) void venc_uninit_platform_driver(void)
{ {
platform_driver_unregister(&omap_venchw_driver); platform_driver_unregister(&omap_venchw_driver);
} }
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