HDA: Add Tegra264 support
Subsystems (4)
cover HDA: Add Tegra264 support
From: Sheetal <[email protected]>
The patch series is to add support for Tegra264 in HDA driver.
Mohan Kumar D (1):
ALSA: hda/tegra: Add Tegra264 support
Sheetal (2):
dt-bindings: hda: Update Tegra compatible requirements
dt-bindings: Document Tegra264 HDA Support
.../bindings/sound/nvidia,tegra30-hda.yaml | 108 +++++++++++++++--- sound/pci/hda/hda_tegra.c | 51 ++++++++- sound/pci/hda/patch_hdmi.c | 1 + 3 files changed, 141 insertions(+), 19 deletions(-)
Signature · 1 line
2.17.1
PATCH 1/3 dt-bindings: Update Tegra194 and Tegra234 HDA bindings
From: Sheetal <[email protected]>
- Tegra194 and Tegra234 HDA is not compatible with Tegra30, hence update them as standalone compatibles. Also, add necessary logic to the binding doc as HDA clocks and resets for Tegra194 and Tegra234 are different from Tegra30. This fixes below dtbs_check errors:
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra194-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra234-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- hda@3510000: clock-names:1: 'hda2hdmi' was expected
- hda@3510000: reset-names:1: 'hda2hdmi' was expected
--- .../bindings/sound/nvidia,tegra30-hda.yaml | 83 ++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-)
Documentation/devicetree/bindings/sound/nvidia,tegra30-hda.yaml +72 -11
@@ -20,11 +20,12 @@ properties: compatible: oneOf: - - const: nvidia,tegra30-hda + - enum: + - nvidia,tegra30-hda + - nvidia,tegra194-hda + - nvidia,tegra234-hda - items: - enum: - - nvidia,tegra234-hda - - nvidia,tegra194-hda - nvidia,tegra186-hda - nvidia,tegra210-hda - nvidia,tegra124-hda
@@ -48,10 +49,7 @@ properties: clock-names: minItems: 2 - items: - - const: hda - - const: hda2hdmi - - const: hda2codec_2x + maxItems: 3 resets: minItems: 2
@@ -59,10 +57,7 @@ properties: reset-names: minItems: 2 - items: - - const: hda - - const: hda2hdmi - - const: hda2codec_2x + maxItems: 3 power-domains: maxItems: 1
@@ -93,6 +88,72 @@ required: additionalProperties: false +allOf: + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra30-hda + then: + properties: + clocks: + minItems: 3 + clock-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + resets: + minItems: 3 + reset-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra194-hda + then: + properties: + clocks: + minItems: 3 + clock-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2hdmi + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra234-hda + then: + properties: + clocks: + minItems: 2 + maxItems: 2 + clock-names: + items: + - const: hda + - const: hda2codec_2x + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2codec_2x + examples: - | #include<dt-bindings/clock/tegra124-car-common.h>
Signature · 1 line
2.17.1
Rob Herring
maintainerRe: [PATCH 1/3] dt-bindings: Update Tegra194 and Tegra234 HDA bindings
Quoted 1 line · Sheetal .
From: Sheetal <[email protected]>
Needs a 'ASoC' subject prefix on both patches.
Quoted 141 lines
- Tegra194 and Tegra234 HDA is not compatible with Tegra30, hence update them as standalone compatibles. Also, add necessary logic to the binding doc as HDA clocks and resets for Tegra194 and Tegra234 are different from Tegra30. This fixes below
dtbs_checkerrors:
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra194-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra234-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- hda@3510000: clock-names:1: 'hda2hdmi' was expected
- hda@3510000: reset-names:1: 'hda2hdmi' was expectedSigned-off-by Sheetal <[email protected]>--- .../bindings/sound/nvidia,tegra30-hda.yaml | 83 ++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-)Documentation/devicetree/bindings/sound/nvidia,tegra30-hda.yaml +72
-11@@ -20,11 +20,12 @@ properties: compatible: oneOf: - - const: nvidia,tegra30-hda + - enum: + - nvidia,tegra30-hda + - nvidia,tegra194-hda + - nvidia,tegra234-hda - items: - enum: - - nvidia,tegra234-hda - - nvidia,tegra194-hda - nvidia,tegra186-hda - nvidia,tegra210-hda - nvidia,tegra124-hda@@ -48,10 +49,7 @@ properties: clock-names: minItems: 2 - items: - - const: hda - - const: hda2hdmi - - const: hda2codec_2x + maxItems: 3 resets: minItems: 2@@ -59,10 +57,7 @@ properties: reset-names: minItems: 2 - items: - - const: hda - - const: hda2hdmi - - const: hda2codec_2x + maxItems: 3 power-domains: maxItems: 1@@ -93,6 +88,72 @@ required: additionalProperties: false +allOf: + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra30-hda + then: + properties: + clocks: + minItems: 3 + clock-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + resets: + minItems: 3 + reset-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra194-hda + then: + properties: + clocks: + minItems: 3 + clock-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2hdmi + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra234-hda + then: + properties: + clocks: + minItems: 2 + maxItems: 2 + clock-names: + items: + - const: hda + - const: hda2codec_2x + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2codec_2x + examples: - | #include<dt-bindings/clock/tegra124-car-common.h>Signature · 1 line
2.17.1
Re: [PATCH 1/3] dt-bindings: Update Tegra194 and Tegra234 HDA bindings
Quoted 7 lines · Rob Herring
External email: Use caution opening links or attachments
Quoted 1 line · Sheetal .
From: Sheetal <[email protected]>
Needs a 'ASoC' subject prefix on both patches.
ASoC prefix shouldn't be used here as HDA driver is not under sound/soc.
Quoted 142 lines
Quoted 142 lines
- Tegra194 and Tegra234 HDA is not compatible with Tegra30, hence update them as standalone compatibles. Also, add necessary logic to the binding doc as HDA clocks and resets for Tegra194 and Tegra234 are different from Tegra30. This fixes below
dtbs_checkerrors:
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra194-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra234-hda'] is too short
'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- hda@3510000: clock-names:1: 'hda2hdmi' was expected
- hda@3510000: reset-names:1: 'hda2hdmi' was expectedSigned-off-by Sheetal <[email protected]>--- .../bindings/sound/nvidia,tegra30-hda.yaml | 83 ++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-)Documentation/devicetree/bindings/sound/nvidia,tegra30-hda.yaml +72
-12@@ -20,11 +20,12 @@ properties: compatible: oneOf: - - const: nvidia,tegra30-hda + - enum: + - nvidia,tegra30-hda + - nvidia,tegra194-hda + - nvidia,tegra234-hda - items: - enum: - - nvidia,tegra234-hda - - nvidia,tegra194-hda - nvidia,tegra186-hda - nvidia,tegra210-hda - nvidia,tegra124-hda@@ -48,10 +49,7 @@ properties: clock-names: minItems: 2 - items: - - const: hda - - const: hda2hdmi - - const: hda2codec_2x + maxItems: 3 resets: minItems: 2@@ -59,10 +57,7 @@ properties: reset-names: minItems: 2 - items: - - const: hda - - const: hda2hdmi - - const: hda2codec_2x + maxItems: 3 power-domains: maxItems: 1@@ -93,6 +88,72 @@ required: additionalProperties: false +allOf: + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra30-hda + then: + properties: + clocks: + minItems: 3 + clock-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + resets: + minItems: 3 + reset-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra194-hda + then: + properties: + clocks: + minItems: 3 + clock-names: + items: + - const: hda + - const: hda2hdmi + - const: hda2codec_2x + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2hdmi + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra234-hda + then: + properties: + clocks: + minItems: 2 + maxItems: 2 + clock-names: + items: + - const: hda + - const: hda2codec_2x + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2codec_2x + examples: - | #include<dt-bindings/clock/tegra124-car-common.h> --2.17.1
Re: [PATCH 1/3] dt-bindings: Update Tegra194 and Tegra234 HDA bindings
In reply to Sheetal .Quoted 17 lines · Sheetal .
From: Sheetal <[email protected]>
- Tegra194 and Tegra234 HDA is not compatible with Tegra30, hence update them as standalone compatibles. Also, add necessary logic to the binding doc as HDA clocks and resets for Tegra194 and Tegra234 are different from Tegra30. This fixes below
dtbs_checkerrors:
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra194-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- compatible: 'oneOf' conditional failed, one must be fixed:
['nvidia,tegra234-hda'] is too short 'nvidia,tegra30-hda' was expected
'nvidia,tegra132-hda' was expected
- hda@3510000: clock-names:1: 'hda2hdmi' was expected
- hda@3510000: reset-names:1: 'hda2hdmi' was expected
Quoted 5 lines
Signed-off-by Sheetal <[email protected]>--- .../bindings/sound/nvidia,tegra30-hda.yaml | 83 ++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-)
PATCH 2/3 dt-bindings: Document Tegra264 HDA Support
In reply to Sheetal .From: Sheetal <[email protected]>
For Tegra264 device there is one clock, two resets and no power-domain. Add the Tegra264 compatible and necessary logic to the binding doc to determine appropriate clocks, resets and power-domain properties based on the compatible string.
--- .../bindings/sound/nvidia,tegra30-hda.yaml | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/sound/nvidia,tegra30-hda.yaml +23 -2
@@ -24,6 +24,7 @@ properties: - nvidia,tegra30-hda - nvidia,tegra194-hda - nvidia,tegra234-hda + - nvidia,tegra264-hda - items: - enum: - nvidia,tegra186-hda
@@ -44,11 +45,11 @@ properties: maxItems: 1 clocks: - minItems: 2 + minItems: 1 maxItems: 3 clock-names: - minItems: 2 + minItems: 1 maxItems: 3 resets:
@@ -153,6 +154,26 @@ allOf: items: - const: hda - const: hda2codec_2x + - if: + properties: + compatible: + contains: + enum: + - nvidia,tegra264-hda + then: + properties: + clocks: + maxItems: 1 + clock-names: + items: + - const: hda + resets: + maxItems: 2 + reset-names: + items: + - const: hda + - const: hda2codec_2x + power-domains: false examples: - |
Signature · 1 line
2.17.1
Re: [PATCH 2/3] dt-bindings: Document Tegra264 HDA Support
Quoted 7 lines · Sheetal .
From: Sheetal <[email protected]>
For Tegra264 device there is one clock, two resets and no power-domain. Add the Tegra264 compatible and necessary logic to the binding doc to determine appropriate clocks, resets and power-domain properties based on the compatible string.
Quoted 5 lines
Signed-off-by Sheetal <[email protected]>--- .../bindings/sound/nvidia,tegra30-hda.yaml | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
PATCH 3/3 ALSA: hda/tegra: Add Tegra264 support
In reply to Sheetal .From: Mohan Kumar D <[email protected]>
Update HDA driver to support Tegra264 differences from legacy HDA, which includes: clocks/resets, always power on, and hardware-managed FPCI/IPFS initialization. The driver retrieves this chip-specific information from soc_data.
--- sound/pci/hda/hda_tegra.c | 51 +++++++++++++++++++++++++++++++++----- sound/pci/hda/patch_hdmi.c | 1 + 2 files changed, 46 insertions(+), 6 deletions(-)
sound/pci/hda/hda_tegra.c +45 -6
@@ -72,6 +72,10 @@struct hda_tegra_soc {bool has_hda2codec_2x_reset;bool has_hda2hdmi; +bool has_hda2codec_2x; +bool input_stream; +bool always_on; +bool requires_init; };struct hda_tegra {
@@ -187,7 +191,9 @@ static int hda_tegra_runtime_resume(struct device *dev)if (rc !=0 )return rc;if (chip->running) { -hda_tegra_init (hda); +if (hda->soc->requires_init) +hda_tegra_init (hda); +azx_init_chip (chip,1 );/* disable controller wake up event*/ azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) &
@@ -250,7 +256,8 @@ static int hda_tegra_init_chip(struct azx *chip, struct platform_device *pdev) bus->remap_addr = hda->regs +HDA_BAR0 ; bus->addr = res->start +HDA_BAR0 ; -hda_tegra_init (hda); +if (hda->soc->requires_init) +hda_tegra_init (hda);return 0 ; }
@@ -323,7 +330,7 @@ static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev)* starts with offset 0 which is wrong as HW register for output stream * offset starts with 4. */ -if (of_device_is_compatible (np,"nvidia,tegra234-hda" )) +if (!hda->soc->input_stream) chip->capture_streams =4 ; chip->playback_streams = (gcap >>12 ) &0x0f ;
@@ -419,7 +426,6 @@ static int hda_tegra_create(struct snd_card *card, chip->driver_caps = driver_caps; chip->driver_type = driver_caps &0xff ; chip->dev_index =0 ; - chip->jackpoll_interval =msecs_to_jiffies (5000 );INIT_LIST_HEAD (&chip->pcm_list); chip->codec_probe_mask =-1 ;
@@ -436,7 +442,16 @@ static int hda_tegra_create(struct snd_card *card, chip->bus.core.sync_write =0 ; chip->bus.core.needs_damn_long_delay =1 ; chip->bus.core.aligned_mmio =1 ; - chip->bus.jackpoll_in_suspend =1 ; + +/* +* HDA power domain and clocks are always on for Tegra264 and +* the jack detection logic would work always, so no need of +* jack polling mechanism running. +*/ +if (!hda->soc->always_on) { + chip->jackpoll_interval =msecs_to_jiffies (5000 ); + chip->bus.jackpoll_in_suspend =1 ; + } err =snd_device_new (card,SNDRV_DEV_LOWLEVEL , chip, &ops);if (err <0 ) {
@@ -450,22 +465,44 @@ static int hda_tegra_create(struct snd_card *card,static const struct hda_tegra_soc tegra30_data = { .has_hda2codec_2x_reset = true, .has_hda2hdmi = true, + .has_hda2codec_2x = true, + .input_stream = true, + .always_on = false, + .requires_init = true, };static const struct hda_tegra_soc tegra194_data = { .has_hda2codec_2x_reset = false, .has_hda2hdmi = true, + .has_hda2codec_2x = true, + .input_stream = true, + .always_on = false, + .requires_init = true, };static const struct hda_tegra_soc tegra234_data = { .has_hda2codec_2x_reset = true, .has_hda2hdmi = false, + .has_hda2codec_2x = true, + .input_stream = false, + .always_on = false, + .requires_init = true, +}; + +static const struct hda_tegra_soc tegra264_data = { + .has_hda2codec_2x_reset = true, + .has_hda2hdmi = false, + .has_hda2codec_2x = false, + .input_stream = false, + .always_on = true, + .requires_init = false, };static const struct of_device_id hda_tegra_match[] = { { .compatible ="nvidia,tegra30-hda" , .data = &tegra30_data }, { .compatible ="nvidia,tegra194-hda" , .data = &tegra194_data }, { .compatible ="nvidia,tegra234-hda" , .data = &tegra234_data }, + { .compatible ="nvidia,tegra264-hda" , .data = &tegra264_data }, {}, };MODULE_DEVICE_TABLE (of, hda_tegra_match);
@@ -520,7 +557,9 @@ static int hda_tegra_probe(struct platform_device *pdev) hda->clocks[hda->nclocks++].id ="hda" ;if (hda->soc->has_hda2hdmi) hda->clocks[hda->nclocks++].id ="hda2hdmi" ; - hda->clocks[hda->nclocks++].id ="hda2codec_2x" ; + +if (hda->soc->has_hda2codec_2x) + hda->clocks[hda->nclocks++].id ="hda2codec_2x" ; err =devm_clk_bulk_get (&pdev->dev, hda->nclocks, hda->clocks);if (err <0 )
sound/pci/hda/patch_hdmi.c +1 -0
@@ -4551,6 +4551,7 @@ HDA_CODEC_ENTRY(0x10de002e, "Tegra186 HDMI/DP1", patch_tegra_hdmi),HDA_CODEC_ENTRY (0x10de002f ,"Tegra194 HDMI/DP2" , patch_tegra_hdmi),HDA_CODEC_ENTRY (0x10de0030 ,"Tegra194 HDMI/DP3" , patch_tegra_hdmi),HDA_CODEC_ENTRY (0x10de0031 ,"Tegra234 HDMI/DP" , patch_tegra234_hdmi), +HDA_CODEC_ENTRY (0x10de0034 ,"Tegra264 HDMI/DP" , patch_tegra234_hdmi),HDA_CODEC_ENTRY (0x10de0040 ,"GPU 40 HDMI/DP" , patch_nvhdmi),HDA_CODEC_ENTRY (0x10de0041 ,"GPU 41 HDMI/DP" , patch_nvhdmi), HDA_CODEC_ENTRY(0x10de0042, "GPU 42 HDMI/DP", patch_nvhdmi),
Signature · 1 line
2.17.1
Takashi Iwai
AppliedQuoted 11 lines · Sheetal .
From: Sheetal <[email protected]>
The patch series is to add support for Tegra264 in HDA driver.
Mohan Kumar D (1):
ALSA: hda/tegra: Add Tegra264 supportSheetal (2):
dt-bindings: hda: Update Tegra compatible requirements
dt-bindings: Document Tegra264 HDA Support
Applied all patches now to for-next branch.
thanks,
Takashi