Re: [PATCH 06/12] OMAPDSS: hdmi4: Register HDMI audio ASoC drivers from HDMI driver

2014-06-27 Thread Tomi Valkeinen
On 26/06/14 22:20, Jyri Sarha wrote:
 Add audio datamember to hdmi struct and call register and unregister
 functions form hdmi_audio.c. Register function registers the
 integrated cpu dai, dummy HDMI codec, and simple-card machine driver
 for complete HDMI audio support.
 
 Signed-off-by: Jyri Sarha jsa...@ti.com
 ---
  drivers/video/fbdev/omap2/dss/hdmi4.c |   45 
 +
  1 file changed, 45 insertions(+)
 
 diff --git a/drivers/video/fbdev/omap2/dss/hdmi4.c 
 b/drivers/video/fbdev/omap2/dss/hdmi4.c
 index 342ddb4..48f11f8 100644
 --- a/drivers/video/fbdev/omap2/dss/hdmi4.c
 +++ b/drivers/video/fbdev/omap2/dss/hdmi4.c
 @@ -34,6 +34,11 @@
  #include linux/regulator/consumer.h
  #include video/omapdss.h
  
 +#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)

No need for the ifdef here either.

 +#include sound/soc.h
 +#include sound/soc-dai.h
 +#endif
 +
  #include hdmi4_core.h
  #include dss.h
  #include dss_features.h
 @@ -52,6 +57,9 @@ static struct {
   struct clk *sys_clk;
   struct regulator *vdda_hdmi_dac_reg;
  
 +#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
 + struct hdmi_audio_data audio;
 +#endif
   bool core_enabled;
  
   struct omap_dss_device output;
 @@ -671,6 +679,21 @@ err:
   return r;
  }
  
 +#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
 +static struct snd_soc_dai_driver omap_hdmi_dai = {
 + .name = omap4-hdmi-dai,
 + .playback = {
 + .channels_min = 2,
 + .channels_max = 8,
 + .rates = (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
 +   SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |
 +   SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |
 +   SNDRV_PCM_RATE_192000),
 + .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
 + },
 +};
 +#endif
 +
  /* HDMI HW IP initialisation */
  static int omapdss_hdmihw_probe(struct platform_device *pdev)
  {
 @@ -727,6 +750,25 @@ static int omapdss_hdmihw_probe(struct platform_device 
 *pdev)
  
   hdmi_init_output(pdev);
  
 +#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
 + /* drvdata is only used by HDMI audio */
 + hdmi.audio.hdmi_lock = hdmi.lock;
 + hdmi.audio.wp = hdmi.wp;
 + hdmi.audio.core = hdmi.core;
 + hdmi.audio.cfg = hdmi.cfg;
 + hdmi.audio.hdmi_dai_drv = omap_hdmi_dai;
 + hdmi.audio.audio_start = hdmi4_audio_start;
 + hdmi.audio.audio_stop = hdmi4_audio_stop;
 + hdmi.audio.audio_config = hdmi4_audio_config;
 + dev_set_drvdata(pdev-dev, hdmi.audio);
 + r = hdmi_audio_register(pdev);
 + if (r) {
 + DSSERR(Registering HDMI audio failed\n);
 + hdmi_uninit_output(pdev);
 + pm_runtime_disable(pdev-dev);
 + return r;
 + }
 +#endif

I don't think it's a good idea to reserve the driver data for audio. We
need to change the hdmi drivers sooner or later to support multiple
instances, and at that point having drvdata for audio will cause problems.

If you don't want to make the hdmi struct public yet, maybe just add a
function to this file which takes a pointer to the hdmi struct and
returns the audio part. That way you can set the whole hdmi struct as
driver data, which should be future safe.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH 06/12] OMAPDSS: hdmi4: Register HDMI audio ASoC drivers from HDMI driver

2014-06-27 Thread Jyri Sarha

On 06/27/2014 02:39 PM, Tomi Valkeinen wrote:

On 26/06/14 22:20, Jyri Sarha wrote:

...

+#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
+   /* drvdata is only used by HDMI audio */
+   hdmi.audio.hdmi_lock = hdmi.lock;
+   hdmi.audio.wp = hdmi.wp;
+   hdmi.audio.core = hdmi.core;
+   hdmi.audio.cfg = hdmi.cfg;
+   hdmi.audio.hdmi_dai_drv = omap_hdmi_dai;
+   hdmi.audio.audio_start = hdmi4_audio_start;
+   hdmi.audio.audio_stop = hdmi4_audio_stop;
+   hdmi.audio.audio_config = hdmi4_audio_config;
+   dev_set_drvdata(pdev-dev, hdmi.audio);
+   r = hdmi_audio_register(pdev);
+   if (r) {
+   DSSERR(Registering HDMI audio failed\n);
+   hdmi_uninit_output(pdev);
+   pm_runtime_disable(pdev-dev);
+   return r;
+   }
+#endif


I don't think it's a good idea to reserve the driver data for audio. We
need to change the hdmi drivers sooner or later to support multiple
instances, and at that point having drvdata for audio will cause problems.

If you don't want to make the hdmi struct public yet, maybe just add a
function to this file which takes a pointer to the hdmi struct and
returns the audio part. That way you can set the whole hdmi struct as
driver data, which should be future safe.



Adding a function is not as simple as that because the OMAP4 and OMAP5 
structs are subtly different and hdmi_audio.c is common to both. I'll 
make the minimal changes to make the struct public.


Cheers,
Jyri
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 06/12] OMAPDSS: hdmi4: Register HDMI audio ASoC drivers from HDMI driver

2014-06-26 Thread Jyri Sarha
Add audio datamember to hdmi struct and call register and unregister
functions form hdmi_audio.c. Register function registers the
integrated cpu dai, dummy HDMI codec, and simple-card machine driver
for complete HDMI audio support.

Signed-off-by: Jyri Sarha jsa...@ti.com
---
 drivers/video/fbdev/omap2/dss/hdmi4.c |   45 +
 1 file changed, 45 insertions(+)

diff --git a/drivers/video/fbdev/omap2/dss/hdmi4.c 
b/drivers/video/fbdev/omap2/dss/hdmi4.c
index 342ddb4..48f11f8 100644
--- a/drivers/video/fbdev/omap2/dss/hdmi4.c
+++ b/drivers/video/fbdev/omap2/dss/hdmi4.c
@@ -34,6 +34,11 @@
 #include linux/regulator/consumer.h
 #include video/omapdss.h
 
+#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
+#include sound/soc.h
+#include sound/soc-dai.h
+#endif
+
 #include hdmi4_core.h
 #include dss.h
 #include dss_features.h
@@ -52,6 +57,9 @@ static struct {
struct clk *sys_clk;
struct regulator *vdda_hdmi_dac_reg;
 
+#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
+   struct hdmi_audio_data audio;
+#endif
bool core_enabled;
 
struct omap_dss_device output;
@@ -671,6 +679,21 @@ err:
return r;
 }
 
+#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
+static struct snd_soc_dai_driver omap_hdmi_dai = {
+   .name = omap4-hdmi-dai,
+   .playback = {
+   .channels_min = 2,
+   .channels_max = 8,
+   .rates = (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 |
+ SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_176400 |
+ SNDRV_PCM_RATE_192000),
+   .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
+   },
+};
+#endif
+
 /* HDMI HW IP initialisation */
 static int omapdss_hdmihw_probe(struct platform_device *pdev)
 {
@@ -727,6 +750,25 @@ static int omapdss_hdmihw_probe(struct platform_device 
*pdev)
 
hdmi_init_output(pdev);
 
+#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
+   /* drvdata is only used by HDMI audio */
+   hdmi.audio.hdmi_lock = hdmi.lock;
+   hdmi.audio.wp = hdmi.wp;
+   hdmi.audio.core = hdmi.core;
+   hdmi.audio.cfg = hdmi.cfg;
+   hdmi.audio.hdmi_dai_drv = omap_hdmi_dai;
+   hdmi.audio.audio_start = hdmi4_audio_start;
+   hdmi.audio.audio_stop = hdmi4_audio_stop;
+   hdmi.audio.audio_config = hdmi4_audio_config;
+   dev_set_drvdata(pdev-dev, hdmi.audio);
+   r = hdmi_audio_register(pdev);
+   if (r) {
+   DSSERR(Registering HDMI audio failed\n);
+   hdmi_uninit_output(pdev);
+   pm_runtime_disable(pdev-dev);
+   return r;
+   }
+#endif
dss_debugfs_create_file(hdmi, hdmi_dump_regs);
 
return 0;
@@ -734,6 +776,9 @@ static int omapdss_hdmihw_probe(struct platform_device 
*pdev)
 
 static int __exit omapdss_hdmihw_remove(struct platform_device *pdev)
 {
+#if defined(CONFIG_OMAP4_DSS_HDMI_AUDIO)
+   hdmi_audio_unregister(pdev);
+#endif
hdmi_uninit_output(pdev);
 
pm_runtime_disable(pdev-dev);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html