From: Jyri Sarha <jsarha@ti.com> To: alsa-devel@alsa-project.org, linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org Cc: peter.ujfalusi@ti.com, broonie@kernel.org, liam.r.girdwood@linux.intel.com, tomi.valkeinen@ti.com, detheridge@ti.com, Jyri Sarha <jsarha@ti.com> Subject: [PATCH v5 10/15] OMAPDSS: hdmi4: Register ASoC platfrom device for omap hdmi audio Date: Tue, 16 Sep 2014 10:04:24 +0000 [thread overview] Message-ID: <6a127d68e305161aa8da7f776c860eab64835aaa.1410860765.git.jsarha@ti.com> (raw) In-Reply-To: <cover.1410860765.git.jsarha@ti.com> Implements callbacks for OMAP HDMI audio platform driver and registers it in probe function. Unregistering is done in remove function. Signed-off-by: Jyri Sarha <jsarha@ti.com> --- drivers/video/fbdev/omap2/dss/hdmi4.c | 103 +++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/drivers/video/fbdev/omap2/dss/hdmi4.c b/drivers/video/fbdev/omap2/dss/hdmi4.c index b98186e..2e87229 100644 --- a/drivers/video/fbdev/omap2/dss/hdmi4.c +++ b/drivers/video/fbdev/omap2/dss/hdmi4.c @@ -33,6 +33,7 @@ #include <linux/gpio.h> #include <linux/regulator/consumer.h> #include <video/omapdss.h> +#include <sound/omap-hdmi-audio.h> #include "hdmi4_core.h" #include "dss.h" @@ -655,6 +656,97 @@ err: return r; } +/* Audio callbacks */ +static int mode_has_audio(struct device *dev) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret; + + mutex_lock(&hd->lock); + ret = hdmi_mode_has_audio(&hd->cfg); + mutex_unlock(&hd->lock); + + return ret; +} + +static int audio_enable(struct device *dev, bool enable) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret; + + mutex_lock(&hd->lock); + if (!hdmi_mode_has_audio(&hd->cfg)) + ret = -EPERM; + else + ret = hdmi_wp_audio_enable(&hd->wp, enable); + mutex_unlock(&hd->lock); + + return ret; +} + +static int audio_start(struct device *dev, bool enable) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret = 0; + + if (enable) + ret = hdmi4_audio_start(&hd->core, &hd->wp); + else + hdmi4_audio_stop(&hd->core, &hd->wp); + + return ret; +} + +static int audio_config(struct device *dev, struct omap_dss_audio *dss_audio) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret; + + mutex_lock(&hd->lock); + if (!hdmi_mode_has_audio(&hd->cfg)) + ret = -EPERM; + else + ret = hdmi4_audio_config(&hd->core, &hd->wp, dss_audio, + hd->cfg.timings.pixelclock); + mutex_unlock(&hd->lock); + + return ret; +} + +static int hdmi_audio_register(struct device *dev) +{ + struct omap_hdmi_audio_pdata pdata = { + .dev = dev, + .hw_version = OMAP4_HDMI, + .audio_dma_addr = hdmi_wp_get_audio_dma_addr(&hdmi.wp), + .mode_has_audio = mode_has_audio, + .audio_enable = audio_enable, + .audio_start = audio_start, + .audio_config = audio_config, + }; + struct of_phandle_args dma_spec; + int ret; + + ret = of_property_match_string(dev->of_node, "dma-names", "audio_tx"); + if (ret < 0) + return ret; + + ret = of_parse_phandle_with_args(dev->of_node, "dmas", "#dma-cells", + ret, &dma_spec); + if (ret < 0) + return ret; + + pdata.audio_dma_req = dma_spec.args[0]; + + hdmi.audio_pdev + platform_device_register_data(dev, "omap-hdmi-audio", 0, + &pdata, sizeof(pdata)); + if (IS_ERR(hdmi.audio_pdev)) + return PTR_ERR(hdmi.audio_pdev); + + return 0; +} + /* HDMI HW IP initialisation */ static int omapdss_hdmihw_probe(struct platform_device *pdev) { @@ -712,6 +804,14 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev) hdmi_init_output(pdev); + r = hdmi_audio_register(&pdev->dev); + if (r) { + DSSERR("Registering HDMI audio failed\n"); + hdmi_uninit_output(pdev); + pm_runtime_disable(&pdev->dev); + return r; + } + dss_debugfs_create_file("hdmi", hdmi_dump_regs); return 0; @@ -719,6 +819,9 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev) static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) { + if (hdmi.audio_pdev) + platform_device_unregister(hdmi.audio_pdev); + hdmi_uninit_output(pdev); pm_runtime_disable(&pdev->dev); -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Jyri Sarha <jsarha@ti.com> To: alsa-devel@alsa-project.org, linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org Cc: peter.ujfalusi@ti.com, broonie@kernel.org, liam.r.girdwood@linux.intel.com, tomi.valkeinen@ti.com, detheridge@ti.com, Jyri Sarha <jsarha@ti.com> Subject: [PATCH v5 10/15] OMAPDSS: hdmi4: Register ASoC platfrom device for omap hdmi audio Date: Tue, 16 Sep 2014 13:04:24 +0300 [thread overview] Message-ID: <6a127d68e305161aa8da7f776c860eab64835aaa.1410860765.git.jsarha@ti.com> (raw) In-Reply-To: <cover.1410860765.git.jsarha@ti.com> Implements callbacks for OMAP HDMI audio platform driver and registers it in probe function. Unregistering is done in remove function. Signed-off-by: Jyri Sarha <jsarha@ti.com> --- drivers/video/fbdev/omap2/dss/hdmi4.c | 103 +++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/drivers/video/fbdev/omap2/dss/hdmi4.c b/drivers/video/fbdev/omap2/dss/hdmi4.c index b98186e..2e87229 100644 --- a/drivers/video/fbdev/omap2/dss/hdmi4.c +++ b/drivers/video/fbdev/omap2/dss/hdmi4.c @@ -33,6 +33,7 @@ #include <linux/gpio.h> #include <linux/regulator/consumer.h> #include <video/omapdss.h> +#include <sound/omap-hdmi-audio.h> #include "hdmi4_core.h" #include "dss.h" @@ -655,6 +656,97 @@ err: return r; } +/* Audio callbacks */ +static int mode_has_audio(struct device *dev) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret; + + mutex_lock(&hd->lock); + ret = hdmi_mode_has_audio(&hd->cfg); + mutex_unlock(&hd->lock); + + return ret; +} + +static int audio_enable(struct device *dev, bool enable) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret; + + mutex_lock(&hd->lock); + if (!hdmi_mode_has_audio(&hd->cfg)) + ret = -EPERM; + else + ret = hdmi_wp_audio_enable(&hd->wp, enable); + mutex_unlock(&hd->lock); + + return ret; +} + +static int audio_start(struct device *dev, bool enable) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret = 0; + + if (enable) + ret = hdmi4_audio_start(&hd->core, &hd->wp); + else + hdmi4_audio_stop(&hd->core, &hd->wp); + + return ret; +} + +static int audio_config(struct device *dev, struct omap_dss_audio *dss_audio) +{ + struct omap_hdmi *hd = dev_get_drvdata(dev); + int ret; + + mutex_lock(&hd->lock); + if (!hdmi_mode_has_audio(&hd->cfg)) + ret = -EPERM; + else + ret = hdmi4_audio_config(&hd->core, &hd->wp, dss_audio, + hd->cfg.timings.pixelclock); + mutex_unlock(&hd->lock); + + return ret; +} + +static int hdmi_audio_register(struct device *dev) +{ + struct omap_hdmi_audio_pdata pdata = { + .dev = dev, + .hw_version = OMAP4_HDMI, + .audio_dma_addr = hdmi_wp_get_audio_dma_addr(&hdmi.wp), + .mode_has_audio = mode_has_audio, + .audio_enable = audio_enable, + .audio_start = audio_start, + .audio_config = audio_config, + }; + struct of_phandle_args dma_spec; + int ret; + + ret = of_property_match_string(dev->of_node, "dma-names", "audio_tx"); + if (ret < 0) + return ret; + + ret = of_parse_phandle_with_args(dev->of_node, "dmas", "#dma-cells", + ret, &dma_spec); + if (ret < 0) + return ret; + + pdata.audio_dma_req = dma_spec.args[0]; + + hdmi.audio_pdev = + platform_device_register_data(dev, "omap-hdmi-audio", 0, + &pdata, sizeof(pdata)); + if (IS_ERR(hdmi.audio_pdev)) + return PTR_ERR(hdmi.audio_pdev); + + return 0; +} + /* HDMI HW IP initialisation */ static int omapdss_hdmihw_probe(struct platform_device *pdev) { @@ -712,6 +804,14 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev) hdmi_init_output(pdev); + r = hdmi_audio_register(&pdev->dev); + if (r) { + DSSERR("Registering HDMI audio failed\n"); + hdmi_uninit_output(pdev); + pm_runtime_disable(&pdev->dev); + return r; + } + dss_debugfs_create_file("hdmi", hdmi_dump_regs); return 0; @@ -719,6 +819,9 @@ static int omapdss_hdmihw_probe(struct platform_device *pdev) static int __exit omapdss_hdmihw_remove(struct platform_device *pdev) { + if (hdmi.audio_pdev) + platform_device_unregister(hdmi.audio_pdev); + hdmi_uninit_output(pdev); pm_runtime_disable(&pdev->dev); -- 1.7.9.5
next prev parent reply other threads:[~2014-09-16 10:04 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-09-16 10:04 [PATCH v5 00/15] Rework OMAP4+ HDMI audio support Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 01/15] OMAPDSS: hdmi.h: Add HDMI_AUDIO_LAYOUT_6CH enum value Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 02/15] OMAPDSS: hdmi: Remove most of OMAP[45]_DSS_HDMI_AUDIO ifdefs Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 03/15] OMAPDSS: hdmi4_core: Remove unused hdmi4_audio_get_dma_port() Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 04/15] OMAPDSS: hdmi_wp: Add function for getting audio dma address Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 05/15] OMAPDSS: hdmi: Make hdmi structure public Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 06/15] OMAPDSS: hdmi: Add pdev pointer for audio_pdev in HDMI DRV data Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 07/15] ASoC: omap-hdmi-audio: Add platfrom device for OMAP HDMI audio support Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 08/15] OMAPDSS: Kconfig: Remove HDMI audio booleans from Kconfig Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 09/15] OMAPDSS: hdmi: Make hdmi_mode_has_audio() more user friedly Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha [this message] 2014-09-16 10:04 ` [PATCH v5 10/15] OMAPDSS: hdmi4: Register ASoC platfrom device for omap hdmi audio Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 11/15] OMAPDSS: hdmi5: " Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 12/15] ASoC: omap: Remove obsolete HDMI audio code and Kconfig options Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 13/15] OMAPDSS: hdmi4: Remove callbacks for the old ASoC DAI driver Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 14/15] OMAPDSS: hdmi5: " Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha 2014-09-16 10:04 ` [PATCH v5 15/15] OMAPDSS: Remove all references to obsolete HDMI audio callbacks Jyri Sarha 2014-09-16 10:04 ` Jyri Sarha
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=6a127d68e305161aa8da7f776c860eab64835aaa.1410860765.git.jsarha@ti.com \ --to=jsarha@ti.com \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=detheridge@ti.com \ --cc=liam.r.girdwood@linux.intel.com \ --cc=linux-fbdev@vger.kernel.org \ --cc=linux-omap@vger.kernel.org \ --cc=peter.ujfalusi@ti.com \ --cc=tomi.valkeinen@ti.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.