Changes since v2:
- Change compatible property from "ti,gpio-clock" to "ti,gpio-gate-clock"
- Some minor cleanups
The code has a functional dependency to:
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg109264.html
Without the above patch the audio card does not probe.
The code has been rebased on top of Linux 3.17-rc5. The patches
bellow, the above dependency, and couple of commits to add BBB HDMI audio
support to omap2plus_defconfig can be pulled from:
https://github.com/jsarha/linux.git linux-master-bbb-hdmi-audio
Cheers,
Jyri
Jyri Sarha (5):
clk: ti: add "ti,gpio-gate-clock" controlled clock
drm/tilcdc: Add I2S HDMI audio config for tda998x
ASoC: davinci-evm: HDMI audio support for TDA998x trough McASP I2S
bus
ASoC: davinci: HDMI audio build for AM33XX and TDA998x
ARM: dts: am335x-boneblack: Add HDMI audio support
.../bindings/clock/ti/gpio-gate-clock.txt | 21 ++
.../bindings/sound/davinci-evm-audio.txt | 6 +-
arch/arm/boot/dts/am335x-boneblack.dts | 52 +++++
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/gpio.c | 202 ++++++++++++++++++++
drivers/gpu/drm/tilcdc/tilcdc_slave.c | 24 ++-
sound/soc/davinci/Kconfig | 12 ++
sound/soc/davinci/davinci-evm.c | 82 +++++++-
8 files changed, 395 insertions(+), 6 deletions(-)
create mode 100644 Documentation/devicetree/bindings/clock/ti/gpio-gate-clock.txt
create mode 100644 drivers/clk/ti/gpio.c
--
1.7.9.5
The added ti,gpio-gate-clock is a basic clock that can be enabled and
disabled trough a gpio output. The DT binding document for the clock
is also added. For EPROBE_DEFER handling the registering of the clock
has to be delayed until of_clk_get() call time.
Signed-off-by: Jyri Sarha <redacted>
---
.../bindings/clock/ti/gpio-gate-clock.txt | 21 ++
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/gpio.c | 202 ++++++++++++++++++++
3 files changed, 224 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/clock/ti/gpio-gate-clock.txt
create mode 100644 drivers/clk/ti/gpio.c
@@ -0,0 +1,21 @@+Binding for simple gpio controlled clock.++This binding uses the common clock binding[1].++[1] Documentation/devicetree/bindings/clock/clock-bindings.txt++Required properties:+- compatible : shall be "ti,gpio-gate-clock".+- #clock-cells : from common clock binding; shall be set to 0.+- enable-gpios : GPIO reference for enabling and disabling the clock.++Optional properties:+- clocks: Maximum of one parent clock is supported.++Example:+ clock {+ compatible = "ti,gpio-gate-clock";+ clocks = <&parentclk>;+ #clock-cells = <0>;+ enable-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;+ };
The configuration is needed for HDMI audio. The "swap" and "mirr"
parameters have to be correctly set in the configuration in order to
have proper colors in the HDMI picture.
Signed-off-by: Jyri Sarha <redacted>
---
drivers/gpu/drm/tilcdc/tilcdc_slave.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
Adds configuration option for HDMI audio support for AM33XX based
boards with NXP TDA998x HDMI transmitter. The audio is connected to
NXP TDA998x trough McASP running in i2s mode.
Signed-off-by: Jyri Sarha <redacted>
---
sound/soc/davinci/Kconfig | 12 ++++++++++++
1 file changed, 12 insertions(+)
@@ -43,6 +43,18 @@ config SND_AM33XX_SOC_EVMAM335X-EVMSK,andBeagelBonewithAudioCapeboardshavethissetup.+configSND_AM335X_SOC_NXPTDA_EVM+tristate"HDMI Audio for the AM33XX chip based boards with TDA998x"+depends onSND_EDMA_SOC&&SOC_AM33XX&&DRM_I2C_NXP_TDA998X+selectSND_SOC_HDMI_CODEC+selectSND_DAVINCI_SOC_MCASP+selectSND_DAVINCI_SOC_GENERIC_EVM+help+SayYorMifyouwanttoaddsupportforHDMISoCaudioon+AM33XXboardswithNXPTDA998xHDMItransmitter.Forexample+BeagleBoneBack.TheaudioisconnectedtoNXPTDA998xtrough+McASPrunningini2smode.+configSND_DAVINCI_SOC_EVMtristate"SoC Audio support for DaVinci DM6446, DM355 or DM365 EVM"depends onSND_DAVINCI_SOC&&I2C
From: Dave Airlie <airlied@gmail.com> Date: 2014-09-17 01:06:53
On 17 September 2014 06:40, Jyri Sarha [off-list ref] wrote:
Changes since v2:
- Change compatible property from "ti,gpio-clock" to "ti,gpio-gate-clock"
- Some minor cleanups
The code has a functional dependency to:
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg109264.html
Without the above patch the audio card does not probe.
The code has been rebased on top of Linux 3.17-rc5. The patches
bellow, the above dependency, and couple of commits to add BBB HDMI audio
support to omap2plus_defconfig can be pulled from:
https://github.com/jsarha/linux.git linux-master-bbb-hdmi-audio
How do you intend to get this merge, sending patchsets like this without
indication to maintainers on a merge strategy is kinda messy.
I'm not sure how maintained tilcdc is.
Dave.
From: Mark Brown <broonie@kernel.org> Date: 2014-09-17 19:41:26
On Tue, Sep 16, 2014 at 11:40:17PM +0300, Jyri Sarha wrote:
Adds configuration option for HDMI audio support for AM33XX based
boards with NXP TDA998x HDMI transmitter. The audio is connected to
NXP TDA998x trough McASP running in i2s mode.
So, Jean-Francois is also trying to do things with the TDA998x - what's
the story with that, is this joined up at all?
On Tue, Sep 16, 2014 at 11:40:17PM +0300, Jyri Sarha wrote:
quoted
Adds configuration option for HDMI audio support for AM33XX based
boards with NXP TDA998x HDMI transmitter. The audio is connected to
NXP TDA998x trough McASP running in i2s mode.
So, Jean-Francois is also trying to do things with the TDA998x - what's
the story with that, is this joined up at all?
Not really. This basic functionality does not touch tda998x at all on
the fly, but just sets i2s configuation in the beginning and bangs the
bits trough McASP. But as long as the old platform data for tda998x
still works after Jean-Francois' patches I should be safe.
The problem with the Jean-Francois' patches is the DT support. The BBB
HDMI video is implemented trough tilcdc-slave mechanism without a DT
node for the tda encoder, which renders Jean-Francois' approach unusable
for BBB.
The whole tilcdc slave approach may not be the most elegant way to use
the tda driver, but it does not look like it is going to change any time
soon.
Best regards,
Jyri
ps. I have been thinking on something similar to Jean-Francois' patch
for SiI9022 which I have been working on lately. Also I have been
wondering if it would be possible to come up with a generic ASoC codec
component driver or library that could be used with any HDMI encoder to
produce the ASoC codec component. Unfortunately I am in too early stage
to produce anything more concrete.
So, Jean-Francois is also trying to do things with the TDA998x - what's
the story with that, is this joined up at all?
Not really. This basic functionality does not touch tda998x at all on
the fly, but just sets i2s configuation in the beginning and bangs the
bits trough McASP. But as long as the old platform data for tda998x
still works after Jean-Francois' patches I should be safe.
It should. And you may test it.
The problem with the Jean-Francois' patches is the DT support. The BBB
HDMI video is implemented trough tilcdc-slave mechanism without a DT
node for the tda encoder, which renders Jean-Francois' approach unusable
for BBB.
I used the TDA998x with DT support for a long time with a hack by using
parts of drm_i2c_encoder_init(). Now, I think that this function could
be used as it is just setting no platform_data in info.
The whole tilcdc slave approach may not be the most elegant way to use
the tda driver, but it does not look like it is going to change any time
soon.
Right: I proposed a patch for that and it was rejected.
Best regards,
Jyri
ps. I have been thinking on something similar to Jean-Francois' patch
for SiI9022 which I have been working on lately. Also I have been
wondering if it would be possible to come up with a generic ASoC codec
component driver or library that could be used with any HDMI encoder to
produce the ASoC codec component. Unfortunately I am in too early stage
to produce anything more concrete.
Here are some thoughts about this topic.
The video and audio worlds don't know about each other.
The only solution I found is to let the encoder create the codec as
a child device. Then, the codec knows from which encoder it depends.
This could have been done using Russell's components, but the codec
should have been declared in the DT. This is not useful.
The codec interacts with the encoder in 2 ways:
- it uses the HDMI parameters retrieved by the encoder,
- it gives the audio source type to the encoder.
I used exported functions for that, but, for a generic codec, theses
functions could be given through the codec platform_data.
The codec declares the DAI(s) prior to know the encoder. The DAI table
must be in the codec because of the snd_soc_dai_ops.
For a generic codec, this DAI table could be built dynamically from
information (name, id) also given through the codec platform_data.
--
Ken ar c'hentañ | ** Breizh ha Linux atav! **
Jef | http://moinejf.free.fr/
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On 09/18/2014 11:25 AM, Jean-Francois Moine wrote:
> On Thu, 18 Sep 2014 00:13:09 +0300
> Jyri Sarha [off-list ref] wrote:
>
>>> So, Jean-Francois is also trying to do things with the TDA998x - what's
>>> the story with that, is this joined up at all?
>>
>> Not really. This basic functionality does not touch tda998x at all on
>> the fly, but just sets i2s configuation in the beginning and bangs the
>> bits trough McASP. But as long as the old platform data for tda998x
>> still works after Jean-Francois' patches I should be safe.
>
> It should. And you may test it.
>
I tested by BBB HDMI audio patches with "[PATCH v5] ASoC: tda998x: Add
a codec to the HDMI transmitter", and it works otherwise, but the
default for CTS_N_K has changed from 3 to 2. I just needed to change the
supported format from S32_LE to S24_LE to compensate the change.
>> The problem with the Jean-Francois' patches is the DT support. The BBB
>> HDMI video is implemented trough tilcdc-slave mechanism without a DT
>> node for the tda encoder, which renders Jean-Francois' approach unusable
>> for BBB.
>
> I used the TDA998x with DT support for a long time with a hack by using
> parts of drm_i2c_encoder_init(). Now, I think that this function could
> be used as it is just setting no platform_data in info.
>
>> The whole tilcdc slave approach may not be the most elegant way to use
>> the tda driver, but it does not look like it is going to change any time
>> soon.
>
> Right: I proposed a patch for that and it was rejected.
>
The tilcdc is not actively maintained by anybody ATM and that is why
it is so hard to make any bigger changes to it. I hope we can change
this at some point, but for now I am just trying to get a simple HDMI
audio working on BBB with minimal changes.
>> Best regards,
>> Jyri
>>
>> ps. I have been thinking on something similar to Jean-Francois' patch
>> for SiI9022 which I have been working on lately. Also I have been
>> wondering if it would be possible to come up with a generic ASoC codec
>> component driver or library that could be used with any HDMI encoder to
>> produce the ASoC codec component. Unfortunately I am in too early stage
>> to produce anything more concrete.
>
> Here are some thoughts about this topic.
>
> The video and audio worlds don't know about each other.
> The only solution I found is to let the encoder create the codec as
> a child device. Then, the codec knows from which encoder it depends.
> This could have been done using Russell's components, but the codec
> should have been declared in the DT. This is not useful.
>
There is anothere option of putting the ASoC codec code into an ASoC
library module and registering the ASoC codec component under the HDMI
encoder device. However, this approach does not allow building the
ASoC as modules if the HDMI encoder driver is built in. So a separate
platform device for the codec component is probably better.
> The codec interacts with the encoder in 2 ways:
> - it uses the HDMI parameters retrieved by the encoder,
> - it gives the audio source type to the encoder.
> I used exported functions for that, but, for a generic codec, theses
> functions could be given through the codec platform_data.
>
> The codec declares the DAI(s) prior to know the encoder. The DAI table
> must be in the codec because of the snd_soc_dai_ops.
> For a generic codec, this DAI table could be built dynamically from
> information (name, id) also given through the codec platform_data.
>
This is pretty much what I have been thinking too. The API between the
generic ASoC HDMI codec could use already existing the linux headers
derived HDMI standard. The ASoC side code should build the hdmi audio
infoframe and configure the stream header bits etc, so basically do
all the generic stuff coming from HDMI standard. Writing the bits
to the appropriate registers in the encoder chip would be left to the
HDMI encoder driver.
Best regards,
Jyri
From: Tomi Valkeinen <hidden> Date: 2014-09-19 13:07:03
On 16/09/14 23:40, Jyri Sarha wrote:
The added ti,gpio-gate-clock is a basic clock that can be enabled and
disabled trough a gpio output. The DT binding document for the clock
is also added. For EPROBE_DEFER handling the registering of the clock
has to be delayed until of_clk_get() call time.
Signed-off-by: Jyri Sarha <redacted>
---
.../bindings/clock/ti/gpio-gate-clock.txt | 21 ++
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/gpio.c | 202 ++++++++++++++++++++
3 files changed, 224 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/clock/ti/gpio-gate-clock.txt
create mode 100644 drivers/clk/ti/gpio.c
Why is this a TI clock? Sounds like a generic one to me.
In any case, this should go through Mike.
Tomi
The added ti,gpio-gate-clock is a basic clock that can be enabled and
disabled trough a gpio output. The DT binding document for the clock
is also added. For EPROBE_DEFER handling the registering of the clock
has to be delayed until of_clk_get() call time.
Signed-off-by: Jyri Sarha <redacted>
---
.../bindings/clock/ti/gpio-gate-clock.txt | 21 ++
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/gpio.c | 202 ++++++++++++++++++++
3 files changed, 224 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/clock/ti/gpio-gate-clock.txt
create mode 100644 drivers/clk/ti/gpio.c
Why is this a TI clock? Sounds like a generic one to me.
From: Tomi Valkeinen <hidden> Date: 2014-09-19 13:25:48
On 19/09/14 16:12, Nishanth Menon wrote:
On 09/19/2014 08:07 AM, Tomi Valkeinen wrote:
quoted
On 16/09/14 23:40, Jyri Sarha wrote:
quoted
The added ti,gpio-gate-clock is a basic clock that can be enabled and
disabled trough a gpio output. The DT binding document for the clock
is also added. For EPROBE_DEFER handling the registering of the clock
has to be delayed until of_clk_get() call time.
Signed-off-by: Jyri Sarha <redacted>
---
.../bindings/clock/ti/gpio-gate-clock.txt | 21 ++
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/gpio.c | 202 ++++++++++++++++++++
3 files changed, 224 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/clock/ti/gpio-gate-clock.txt
create mode 100644 drivers/clk/ti/gpio.c
Why is this a TI clock? Sounds like a generic one to me.
From: Mike Turquette <hidden> Date: 2014-09-26 23:56:12
Quoting Tomi Valkeinen (2014-09-19 06:25:48)
On 19/09/14 16:12, Nishanth Menon wrote:
quoted
On 09/19/2014 08:07 AM, Tomi Valkeinen wrote:
quoted
On 16/09/14 23:40, Jyri Sarha wrote:
quoted
The added ti,gpio-gate-clock is a basic clock that can be enabled and
disabled trough a gpio output. The DT binding document for the clock
is also added. For EPROBE_DEFER handling the registering of the clock
has to be delayed until of_clk_get() call time.
Signed-off-by: Jyri Sarha <redacted>
---
.../bindings/clock/ti/gpio-gate-clock.txt | 21 ++
drivers/clk/ti/Makefile | 2 +-
drivers/clk/ti/gpio.c | 202 ++++++++++++++++++++
3 files changed, 224 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/clock/ti/gpio-gate-clock.txt
create mode 100644 drivers/clk/ti/gpio.c
Why is this a TI clock? Sounds like a generic one to me.
Right, I should've read the earlier versions before making any smart
comments =).
No supporters cropped up for the generic gpio clock, but the design is
common enough to merit a common clock type. And all of that stuff I said
about the machine-specific ops isn't that relevant since it is hidden
behing the gpio api.
Regards,
Mike