|
@@ -289,6 +289,7 @@ const struct omap_video_timings omap_dss_ntsc_timings = {
|
|
|
EXPORT_SYMBOL(omap_dss_ntsc_timings);
|
|
|
|
|
|
static struct {
|
|
|
+ struct platform_device *pdev;
|
|
|
void __iomem *base;
|
|
|
struct mutex venc_lock;
|
|
|
u32 wss_data;
|
|
@@ -306,6 +307,17 @@ static inline u32 venc_read_reg(int idx)
|
|
|
return l;
|
|
|
}
|
|
|
|
|
|
+static struct regulator *venc_get_vdda_dac(void)
|
|
|
+{
|
|
|
+ struct regulator *reg;
|
|
|
+
|
|
|
+ reg = regulator_get(&venc.pdev->dev, "vdda_dac");
|
|
|
+ if (!IS_ERR(reg))
|
|
|
+ venc.vdda_dac_reg = reg;
|
|
|
+
|
|
|
+ return reg;
|
|
|
+}
|
|
|
+
|
|
|
static void venc_write_config(const struct venc_config *config)
|
|
|
{
|
|
|
DSSDBG("write venc conf\n");
|
|
@@ -641,46 +653,6 @@ static struct omap_dss_driver venc_driver = {
|
|
|
};
|
|
|
/* driver end */
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-int venc_init(struct platform_device *pdev)
|
|
|
-{
|
|
|
- u8 rev_id;
|
|
|
-
|
|
|
- mutex_init(&venc.venc_lock);
|
|
|
-
|
|
|
- venc.wss_data = 0;
|
|
|
-
|
|
|
- venc.base = ioremap(VENC_BASE, SZ_1K);
|
|
|
- if (!venc.base) {
|
|
|
- DSSERR("can't ioremap VENC\n");
|
|
|
- return -ENOMEM;
|
|
|
- }
|
|
|
-
|
|
|
- venc.vdda_dac_reg = dss_get_vdda_dac();
|
|
|
- if (IS_ERR(venc.vdda_dac_reg)) {
|
|
|
- iounmap(venc.base);
|
|
|
- DSSERR("can't get VDDA_DAC regulator\n");
|
|
|
- return PTR_ERR(venc.vdda_dac_reg);
|
|
|
- }
|
|
|
-
|
|
|
- venc_enable_clocks(1);
|
|
|
-
|
|
|
- rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
|
|
|
- printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
|
|
|
-
|
|
|
- venc_enable_clocks(0);
|
|
|
-
|
|
|
- return omap_dss_register_driver(&venc_driver);
|
|
|
-}
|
|
|
-
|
|
|
-void venc_exit(void)
|
|
|
-{
|
|
|
- omap_dss_unregister_driver(&venc_driver);
|
|
|
-
|
|
|
- iounmap(venc.base);
|
|
|
-}
|
|
|
-
|
|
|
int venc_init_display(struct omap_dss_device *dssdev)
|
|
|
{
|
|
|
DSSDBG("init_display\n");
|
|
@@ -740,3 +712,67 @@ void venc_dump_regs(struct seq_file *s)
|
|
|
|
|
|
#undef DUMPREG
|
|
|
}
|
|
|
+
|
|
|
+/* VENC HW IP initialisation */
|
|
|
+static int omap_venchw_probe(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ u8 rev_id;
|
|
|
+ venc.pdev = pdev;
|
|
|
+
|
|
|
+ mutex_init(&venc.venc_lock);
|
|
|
+
|
|
|
+ venc.wss_data = 0;
|
|
|
+
|
|
|
+ venc.base = ioremap(VENC_BASE, SZ_1K);
|
|
|
+ if (!venc.base) {
|
|
|
+ DSSERR("can't ioremap VENC\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+
|
|
|
+ venc.vdda_dac_reg = venc_get_vdda_dac();
|
|
|
+ if (IS_ERR(venc.vdda_dac_reg)) {
|
|
|
+ iounmap(venc.base);
|
|
|
+ DSSERR("can't get VDDA_DAC regulator\n");
|
|
|
+ return PTR_ERR(venc.vdda_dac_reg);
|
|
|
+ }
|
|
|
+
|
|
|
+ venc_enable_clocks(1);
|
|
|
+
|
|
|
+ rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
|
|
|
+ printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
|
|
|
+
|
|
|
+ venc_enable_clocks(0);
|
|
|
+
|
|
|
+ return omap_dss_register_driver(&venc_driver);
|
|
|
+}
|
|
|
+
|
|
|
+static int omap_venchw_remove(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ if (venc.vdda_dac_reg != NULL) {
|
|
|
+ regulator_put(venc.vdda_dac_reg);
|
|
|
+ venc.vdda_dac_reg = NULL;
|
|
|
+ }
|
|
|
+ omap_dss_unregister_driver(&venc_driver);
|
|
|
+
|
|
|
+ iounmap(venc.base);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct platform_driver omap_venchw_driver = {
|
|
|
+ .probe = omap_venchw_probe,
|
|
|
+ .remove = omap_venchw_remove,
|
|
|
+ .driver = {
|
|
|
+ .name = "omapdss_venc",
|
|
|
+ .owner = THIS_MODULE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+int venc_init_platform_driver(void)
|
|
|
+{
|
|
|
+ return platform_driver_register(&omap_venchw_driver);
|
|
|
+}
|
|
|
+
|
|
|
+void venc_uninit_platform_driver(void)
|
|
|
+{
|
|
|
+ return platform_driver_unregister(&omap_venchw_driver);
|
|
|
+}
|