diff options
| -rw-r--r-- | arch/arm/mach-omap2/board-3430sdp.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-cm-t35.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-devkit8000.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3evm.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3pandora.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3stalker.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-rx51-peripherals.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-zoom-peripherals.c | 2 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/core.c | 28 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/dss.h | 9 | ||||
| -rw-r--r-- | drivers/video/omap2/dss/venc.c | 116 | 
12 files changed, 93 insertions, 78 deletions
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index e018472861e..652e7c38c62 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -395,7 +395,7 @@ static struct regulator_consumer_supply sdp3430_vaux3_supplies[] = {  };  static struct regulator_consumer_supply sdp3430_vdda_dac_supplies[] = { -	REGULATOR_SUPPLY("vdda_dac", "omapdss"), +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),  };  /* VPLL2 for digital video outputs */ diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 27bea540ccb..e55fde0a720 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -488,7 +488,7 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {  };  static struct regulator_consumer_supply cm_t35_vdac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  static struct regulator_consumer_supply cm_t35_vdvi_supply =  	REGULATOR_SUPPLY("vdvi", "omapdss"); diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 728f27c5bcb..b64774b3d82 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c @@ -196,7 +196,7 @@ static struct omap_dss_board_info devkit8000_dss_data = {  };  static struct regulator_consumer_supply devkit8000_vdda_dac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  static uint32_t board_keymap[] = {  	KEY(0, 0, KEY_1), diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 20c5dbea895..2fad38f9e68 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -232,7 +232,7 @@ static struct omap_dss_board_info beagle_dss_data = {  };  static struct regulator_consumer_supply beagle_vdac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  static struct regulator_consumer_supply beagle_vdvi_supply =  	REGULATOR_SUPPLY("vdds_dsi", "omapdss"); diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index b65848c59e1..a6564b41b97 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -542,7 +542,7 @@ static struct twl4030_codec_data omap3evm_codec_data = {  };  static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  /* VDAC for DSS driving S-Video */  static struct regulator_init_data omap3_evm_vdac = { diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 5386a8190ea..37de418edd2 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c @@ -342,7 +342,7 @@ static struct regulator_consumer_supply pandora_vmmc3_supply =  	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2");  static struct regulator_consumer_supply pandora_vdda_dac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  static struct regulator_consumer_supply pandora_vdds_supplies[] = {  	REGULATOR_SUPPLY("vdds_sdi", "omapdss"), diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index 15ede8b4981..bd0eed85807 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c @@ -439,7 +439,7 @@ static struct twl4030_codec_data omap3stalker_codec_data = {  };  static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  /* VDAC for DSS driving S-Video */  static struct regulator_init_data omap3_stalker_vdac = { diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index 5f1900c532e..bbcb6775a6a 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c @@ -372,7 +372,7 @@ static struct regulator_consumer_supply rx51_vaux1_consumers[] = {  };  static struct regulator_consumer_supply rx51_vdac_supply[] = { -	REGULATOR_SUPPLY("vdda_dac", "omapdss"), +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),  };  static struct regulator_init_data rx51_vaux1 = { diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 448ab60195d..405400c4762 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c @@ -230,7 +230,7 @@ static struct regulator_consumer_supply zoom_vpll2_supply =  	REGULATOR_SUPPLY("vdds_dsi", "omapdss");  static struct regulator_consumer_supply zoom_vdda_dac_supply = -	REGULATOR_SUPPLY("vdda_dac", "omapdss"); +	REGULATOR_SUPPLY("vdda_dac", "omapdss_venc");  static struct regulator_init_data zoom_vpll2 = {  	.constraints = { diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c index 8b7eab83e41..57c6303cb1c 100644 --- a/drivers/video/omap2/dss/core.c +++ b/drivers/video/omap2/dss/core.c @@ -43,7 +43,6 @@ static struct {  	struct regulator *vdds_dsi_reg;  	struct regulator *vdds_sdi_reg; -	struct regulator *vdda_dac_reg;  } core;  static char *def_disp_name; @@ -85,20 +84,6 @@ struct regulator *dss_get_vdds_sdi(void)  	return reg;  } -struct regulator *dss_get_vdda_dac(void) -{ -	struct regulator *reg; - -	if (core.vdda_dac_reg != NULL) -		return core.vdda_dac_reg; - -	reg = regulator_get(&core.pdev->dev, "vdda_dac"); -	if (!IS_ERR(reg)) -		core.vdda_dac_reg = reg; - -	return reg; -} -  #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)  static int dss_debug_show(struct seq_file *s, void *unused)  { @@ -219,9 +204,9 @@ static int omap_dss_probe(struct platform_device *pdev)  		goto err_dispc;  	} -	r = venc_init(pdev); +	r = venc_init_platform_driver();  	if (r) { -		DSSERR("Failed to initialize venc\n"); +		DSSERR("Failed to initialize venc platform driver\n");  		goto err_venc;  	} @@ -279,7 +264,7 @@ err_dsi:  	if (cpu_is_omap34xx())  		sdi_exit();  err_sdi: -	venc_exit(); +	venc_uninit_platform_driver();  err_venc:  	dispc_uninit_platform_driver();  err_dispc: @@ -300,7 +285,7 @@ static int omap_dss_remove(struct platform_device *pdev)  	dss_uninitialize_debugfs(); -	venc_exit(); +	venc_uninit_platform_driver();  	dispc_uninit_platform_driver();  	dpi_exit();  	rfbi_uninit_platform_driver(); @@ -597,11 +582,6 @@ static void __exit omap_dss_exit(void)  		core.vdds_sdi_reg = NULL;  	} -	if (core.vdda_dac_reg != NULL) { -		regulator_put(core.vdda_dac_reg); -		core.vdda_dac_reg = NULL; -	} -  	platform_driver_unregister(&omap_dss_driver);  	omap_dss_bus_unregister(); diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h index f4835c85db9..931385185dc 100644 --- a/drivers/video/omap2/dss/dss.h +++ b/drivers/video/omap2/dss/dss.h @@ -172,7 +172,6 @@ struct platform_device;  struct bus_type *dss_get_bus(void);  struct regulator *dss_get_vdds_dsi(void);  struct regulator *dss_get_vdds_sdi(void); -struct regulator *dss_get_vdda_dac(void);  /* display */  int dss_suspend_all_devices(void); @@ -412,16 +411,16 @@ int dispc_get_clock_div(enum omap_channel channel,  /* VENC */  #ifdef CONFIG_OMAP2_DSS_VENC -int venc_init(struct platform_device *pdev); -void venc_exit(void); +int venc_init_platform_driver(void); +void venc_uninit_platform_driver(void);  void venc_dump_regs(struct seq_file *s);  int venc_init_display(struct omap_dss_device *display);  #else -static inline int venc_init(struct platform_device *pdev) +static inline int venc_init_platform_driver(void)  {  	return 0;  } -static inline void venc_exit(void) +static inline void venc_uninit_platform_driver(void)  {  }  #endif diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c index eff35050e28..765a4ac44ec 100644 --- a/drivers/video/omap2/dss/venc.c +++ b/drivers/video/omap2/dss/venc.c @@ -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); +}  |