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

Tomi Valkeinen tomi.valkeinen at ti.com
Fri Jun 27 13:39:37 CEST 2014


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 <jsarha at 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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20140627/b97c9278/attachment.sig>


More information about the Alsa-devel mailing list