Skip to contentSkip to conversation

ASoC: Add support for BCM2835

PATCH Superseded Florian Meier 4 participants 7 messages Nov 18, 2013

Subsystems (5)

v3 of 10 Superseded Latest is v10 →

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 ASoC: Add support for BCM2835

This driver adds support for digital audio (I2S)
for the BCM2835 SoC that is used by the
Raspberry Pi. External audio codecs can be
connected to the Raspberry Pi via P5 header.

It relies on cyclic DMA engine support for BCM2835.

---

This successor of RFCv2 is no longer dependent on the dmaengine patch (of course you need it for running it). Therefore, it should cleanly apply.

Furthermore, some minor enhancements were applied. For example
- Removal of bcm2835-pcm.c and .h
- Adding bindings documentation
- Adding possibility for setting bclk_ratio

 .../devicetree/bindings/sound/bcm2835-i2s.txt      |   22 +
 sound/soc/Kconfig                                  |    1 +
 sound/soc/Makefile                                 |    1 +
 sound/soc/bcm/Kconfig                              |   10 +
 sound/soc/bcm/Makefile                             |    5 +
 sound/soc/bcm/bcm2835-i2s.c                        |  904 ++++++++++++++++++++
 6 files changed, 943 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/bcm2835-i2s.txt
 create mode 100644 sound/soc/bcm/Kconfig
 create mode 100644 sound/soc/bcm/Makefile
 create mode 100644 sound/soc/bcm/bcm2835-i2s.c
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +22 -0
new file mode 100644
index 0000000..7bf1d04
@@ -0,0 +1,22 @@
+* Broadcom BCM2835 SoC I2S/PCM module
+
+Required properties:
+- compatible: "brcm,bcm2835-i2s"
+- reg: Register location and size
+	<PCM base address, size
+	 PCM clock base address, size>;
+- dmas: List of DMA controller phandle and DMA request line ordered pairs.
+- dma-names: Identifier string for each DMA request line in the dmas property.
+  These strings correspond 1:1 with the ordered pairs in dmas.
+
+Example:
+
+bcm2835_i2s: i2s@7e203000 {
+	compatible = "brcm,bcm2835-i2s";
+	reg = <	0x7e203000 0x20
+		0x7e101098 0x02>;
+
+	dmas = <&dma 2
+		&dma 3>;
+	dma-names = "tx", "rx";
+};
sound/soc/Kconfig +1 -0
index 5138b84..a5e3a70 100644
@@ -33,6 +33,7 @@ config SND_SOC_GENERIC_DMAENGINE_PCM
 # All the supported SoCs
 source "sound/soc/atmel/Kconfig"
 source "sound/soc/au1x/Kconfig"
+source "sound/soc/bcm/Kconfig"
 source "sound/soc/blackfin/Kconfig"
 source "sound/soc/cirrus/Kconfig"
 source "sound/soc/davinci/Kconfig"
sound/soc/Makefile +1 -0
index 8b9e701..b52d4aa 100644
@@ -10,6 +10,7 @@ obj-$(CONFIG_SND_SOC)	+= codecs/
 obj-$(CONFIG_SND_SOC)	+= generic/
 obj-$(CONFIG_SND_SOC)	+= atmel/
 obj-$(CONFIG_SND_SOC)	+= au1x/
+obj-$(CONFIG_SND_SOC)	+= bcm/
 obj-$(CONFIG_SND_SOC)	+= blackfin/
 obj-$(CONFIG_SND_SOC)	+= cirrus/
 obj-$(CONFIG_SND_SOC)	+= davinci/
sound/soc/bcm/Kconfig new file +10 -0
new file mode 100644
index 0000000..3d82a29
@@ -0,0 +1,10 @@
+config SND_BCM2835_SOC_I2S
+	tristate "SoC Audio support for the Broadcom BCM2835 I2S module"
+	depends on ARCH_BCM2835 || COMPILE_TEST
+	select SND_SOC_DMAENGINE_PCM
+	select SND_SOC_GENERIC_DMAENGINE_PCM
+	select REGMAP_MMIO
+	help
+	  Say Y or M if you want to add support for codecs attached to
+	  the BCM2835 I2S interface. You will also need
+	  to select the audio interfaces to support below.
sound/soc/bcm/Makefile new file +5 -0
new file mode 100644
index 0000000..bc816b7
@@ -0,0 +1,5 @@
+# BCM2835 Platform Support
+snd-soc-bcm2835-i2s-objs := bcm2835-i2s.o
+
+obj-$(CONFIG_SND_BCM2835_SOC_I2S) += snd-soc-bcm2835-i2s.o
+
sound/soc/bcm/bcm2835-i2s.c new file +904 -0

904 lines not on this page · raw message

Signature · 5 lines
1.7.9.5
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#1 lore raw

T24gTW9uLCAyMDEzLTExLTE4IGF0IDEyOjI4ICswMTAwLCBGbG9yaWFuIE1laWVyIHdyb3RlOg0K PiBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIGRpZ2l0YWwgYXVkaW8gKEkyUykNCj4gZm9y IHRoZSBCQ00yODM1IFNvQyB0aGF0IGlzIHVzZWQgYnkgdGhlDQo+IFJhc3BiZXJyeSBQaS4gRXh0 ZXJuYWwgYXVkaW8gY29kZWNzIGNhbiBiZQ0KPiBjb25uZWN0ZWQgdG8gdGhlIFJhc3BiZXJyeSBQ aSB2aWEgUDUgaGVhZGVyLg0KPiANCj4gSXQgcmVsaWVzIG9uIGN5Y2xpYyBETUEgZW5naW5lIHN1 cHBvcnQgZm9yIEJDTTI4MzUuDQoNCkZldyBjb21tZW50cyBiZWxvdy4NCg0KW10NCg0KPiArc3Rh dGljIHZvaWQgYmNtMjgzNV9pMnNfc3RvcF9jbG9jayhzdHJ1Y3QgYmNtMjgzNV9pMnNfZGV2ICpk ZXYpDQo+ICt7DQo+ICsJdWludDMyX3QgY2xrcmVnOw0KPiArCWludCB0aW1lb3V0ID0gMTAwMDsN Cj4gKw0KPiArCS8qIFN0b3AgY2xvY2sgKi8NCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoZGV2LT5j bGtfcmVnbWFwLCBCQ00yODM1X0NMS19QQ01DVExfUkVHLA0KPiArCQkJQkNNMjgzNV9DTEtfUEFT U1dEX01BU0sgfCBCQ00yODM1X0NMS19FTkFCLA0KPiArCQkJQkNNMjgzNV9DTEtfUEFTU1dEKTsN Cj4gKw0KPiArCS8qIFdhaXQgZm9yIHRoZSBCVVNZIGZsYWcgZ29pbmcgZG93biAqLw0KPiArCXdo aWxlICh0aW1lb3V0ID4gMCkgew0KPiArCQl0aW1lb3V0LS07DQoNCndoaWxlICgtLXRpbWVvdXQp IHsNCg0KPiArDQo+ICsJCXJlZ21hcF9yZWFkKGRldi0+Y2xrX3JlZ21hcCwgQkNNMjgzNV9DTEtf UENNQ1RMX1JFRywgJmNsa3JlZyk7DQo+ICsJCWlmICghKGNsa3JlZyAmIEJDTTI4MzVfQ0xLX0JV U1kpKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHRpbWVvdXQgPD0gMCkgew0K DQppZiAoIXRpbWVvdXQpIHsNCg0KW10NCg0KPiArc3RhdGljIHZvaWQgYmNtMjgzNV9pMnNfY2xl YXJfZmlmb3Moc3RydWN0IGJjbTI4MzVfaTJzX2RldiAqZGV2LA0KPiArCQkJCSAgICBib29sIHR4 LCBib29sIHJ4KQ0KPiArew0KDQpbXQ0KDQo+ICsJLyogV2FpdCBmb3IgdGhlIFNZTkMgZmxhZyBj aGFuZ2luZyBpdCdzIHN0YXRlICovDQo+ICsJd2hpbGUgKHRpbWVvdXQgPiAwKSB7DQo+ICsJCXRp bWVvdXQtLTsNCg0Kd2hpbGUgKC0tdGltZW91dCkgew0KDQo+ICsJCXJlZ21hcF9yZWFkKGRldi0+ aTJzX3JlZ21hcCwgQkNNMjgzNV9JMlNfQ1NfQV9SRUcsICZjc3JlZyk7DQo+ICsJCWlmICgoY3Ny ZWcgJiBCQ00yODM1X0kyU19TWU5DKSAhPSBzeW5jdmFsKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0K PiArDQo+ICsJaWYgKHRpbWVvdXQgPD0gMCkNCg0KaWYgKCF0aW1lb3V0KQ0KDQpbXQ0KDQo+ICtz dGF0aWMgaW50IGJjbTI4MzVfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0g KnN1YnN0cmVhbSwNCj4gKwkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsDQo+ ICsJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQ0KPiArew0KPiArCXN0cnVjdCBiY20yODM1 X2kyc19kZXYgKmRldiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7DQo+ICsNCj4gKwl1 bnNpZ25lZCBpbnQgc2FtcGxpbmdfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7DQo+ICsJdW5z aWduZWQgaW50IGRhdGFfbGVuZ3RoLCBkYXRhX2RlbGF5LCBiY2xrX3JhdGlvOw0KPiArCXVuc2ln bmVkIGludCBjaDFwb3MsIGNoMnBvcywgbW9kZSwgZm9ybWF0Ow0KPiArCXVuc2lnbmVkIGludCBt YXNoID0gQkNNMjgzNV9DTEtfTUFTSF8xOw0KPiArCXVuc2lnbmVkIGludCBkaXZpLCBkaXZmLCB0 YXJnZXRfZnJlcXVlbmN5Ow0KPiArCWludCBjbGtfc3JjID0gLTE7DQo+ICsJdW5zaWduZWQgaW50 IG1hc3RlciA9IGRldi0+Zm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0s7DQo+ICsJdWlu dDMyX3QgYml0X21hc3RlciA9CShtYXN0ZXIgPT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUw0KPiAr CQkJCQl8fCBtYXN0ZXIgPT0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGTSk7DQoNCmJvb2wgPw0KDQo+ ICsNCj4gKwl1aW50MzJfdCBmcmFtZV9tYXN0ZXIgPQkobWFzdGVyID09IFNORF9TT0NfREFJRk1U X0NCU19DRlMNCg0KU28sIGlmIG1hc3RlciA9PSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTIGJvdGgg Yml0X21hc3RlciBhbmQgZnJhbWVfbWFzdGVyDQp3aWxsIGJlIHRydWUuIElzIGl0IGNvcnJlY3Q/ DQoNCj4gKwkJCQkJfHwgbWFzdGVyID09IFNORF9TT0NfREFJRk1UX0NCTV9DRlMpOw0KDQpEaXR0 by4NCg0KPiArCXVpbnQzMl90IGNzcmVnOw0KPiArDQo+ICsJLyoNCj4gKwkgKiBJZiBhIHN0cmVh bSBpcyBhbHJlYWR5IGVuYWJsZWQsDQo+ICsJICogdGhlIHJlZ2lzdGVycyBhcmUgYWxyZWFkeSBz ZXQgcHJvcGVybHkuDQo+ICsJICovDQo+ICsJcmVnbWFwX3JlYWQoZGV2LT5pMnNfcmVnbWFwLCBC Q00yODM1X0kyU19DU19BX1JFRywgJmNzcmVnKTsNCj4gKw0KPiArCWlmIChjc3JlZyAmIChCQ00y ODM1X0kyU19UWE9OIHwgQkNNMjgzNV9JMlNfUlhPTikpDQo+ICsJCXJldHVybiAwOw0KPiArDQoN Cj4gKwlpZiAoYmNtMjgzNV9jbGtfZnJlcVtjbGtfc3JjXSAlIHRhcmdldF9mcmVxdWVuY3kgPT0g MA0KPiArCQkJJiYgYml0X21hc3RlciAmJiBmcmFtZV9tYXN0ZXIpIHsNCj4gKwkJZGl2aSA9IGJj bTI4MzVfY2xrX2ZyZXFbY2xrX3NyY10vdGFyZ2V0X2ZyZXF1ZW5jeTsNCj4gKwkJZGl2ZiA9IDA7 DQo+ICsJfSBlbHNlIHsNCj4gKwkJdWludDY0X3QgZGl2aWRlbmQ7DQo+ICsNCj4gKwkJaWYgKCFk ZXYtPmJjbGtfcmF0aW8pIHsNCj4gKwkJCS8qDQo+ICsJCQkgKiBPdmVyd3JpdGUgYmNsa19yYXRp bywgYmVjYXVzZSB0aGUNCj4gKwkJCSAqIGFib3ZlIHRyaWNrIGlzIG5vdCBuZWVkZWQgb3IgY2Fu DQo+ICsJCQkgKiBub3QgYmUgdXNlZC4NCj4gKwkJCSAqLw0KPiArCQkJYmNsa19yYXRpbyA9IDIq ZGF0YV9sZW5ndGg7DQoNCj0gMiAqIGRhdGFfbGVuZ3RoOw0KDQo+ICsJCX0NCj4gKw0KPiArCQl0 YXJnZXRfZnJlcXVlbmN5ID0gc2FtcGxpbmdfcmF0ZSpiY2xrX3JhdGlvOw0KPiArDQo+ICsJCWNs a19zcmMgPSBCQ00yODM1X0NMS19TUkNfUExMRDsNCj4gKwkJbWFzaCA9IEJDTTI4MzVfQ0xLX01B U0hfMTsNCj4gKw0KPiArCQlkaXZpZGVuZCA9IGJjbTI4MzVfY2xrX2ZyZXFbY2xrX3NyY107DQo+ ICsJCWRpdmlkZW5kICo9IDEwMjQ7DQo+ICsJCWRvX2RpdihkaXZpZGVuZCwgdGFyZ2V0X2ZyZXF1 ZW5jeSk7DQo+ICsJCWRpdmkgPSBkaXZpZGVuZCAvIDEwMjQ7DQo+ICsJCWRpdmYgPSBkaXZpZGVu ZCAlIDEwMjQ7DQoNCjEwMjQgaXMgYSBtYWdpYyBudW1iZXI/DQpDb3VsZCB5b3UgdXNlIHNoaWZ0 cyBhbmQgYml0d2lzZSBBTkRzIGhlcmU/DQoNCj4gKwljaDFwb3MgPSBkYXRhX2RlbGF5Ow0KPiAr CWNoMnBvcyA9IGJjbGtfcmF0aW8vMitkYXRhX2RlbGF5Ow0KDQonIC8gMiArICcNCg0KW10NCg0K PiArCW1vZGUgfD0gQkNNMjgzNV9JMlNfRkxFTihiY2xrX3JhdGlvLTEpOw0KPiArCW1vZGUgfD0g QkNNMjgzNV9JMlNfRlNMRU4oYmNsa19yYXRpby8yKTsNCg0KRGl0dG8uIFNwYWNlcyBhcmUgbWlz c2VkLg0KDQpbXQ0KDQo+ICsJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoNCj4gKwkJLyogQm90 aCAtIHRoZXJlZm9yZSwgbm9uZSBmb3IgQkNNKi8NCg0KJ00gKi8nDQoNCj4gKwkJYnJlYWs7DQo+ ICsJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoNCj4gKwkJLyoNCj4gKwkJICogSW52ZXJ0IG9u bHkgZnJhbWUgc3luYyAtIHRoZXJlZm9yZSwNCj4gKwkJICogSW52ZXJ0IG9ubHkgYml0IGNsb2Nr IGZvciBCQ00NCg0KU29tZXRoaW5nIHdyb25nIHdpdGggY2FzaW5nIGluIHRoZSBjb21tZW50YXJ5 Lg0KDQo+ICsJCSAqLw0KPiArCQltb2RlIHw9IEJDTTI4MzVfSTJTX0NMS0k7DQo+ICsJCWJyZWFr Ow0KPiArCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6DQo+ICsJCS8qDQo+ICsJCSAqIEludmVy dCBvbmx5IGJpdCBjbG9jayAtIHRoZXJlZm9yZSwNCj4gKwkJICogSW52ZXJ0IG9ubHkgZnJhbWUg c3luYyBmb3IgQkNNDQoNCkRpdHRvLg0KDQo+ICsJCSAqLw0KPiArCQltb2RlIHw9IEJDTTI4MzVf STJTX0ZTSTsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsJfQ0KPiArDQo+ICsJcmVnbWFwX3dyaXRlKGRldi0+aTJzX3JlZ21hcCwgQkNNMjgzNV9J MlNfTU9ERV9BX1JFRywgbW9kZSk7DQo+ICsNCj4gKw0KDQpSZWR1bmRhbnQgZW1wdHkgbGluZS4N Cg0KW10NCg0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKw0KDQpEaXR0by4NCg0K W10NCg0KPiArc3RhdGljIGludCBiY20yODM1X2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1 YnN0cmVhbSAqc3Vic3RyZWFtLA0KPiArCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFp KQ0KPiArew0KPiArCXN0cnVjdCBiY20yODM1X2kyc19kZXYgKmRldiA9IHNuZF9zb2NfZGFpX2dl dF9kcnZkYXRhKGRhaSk7DQo+ICsNCj4gKwlpZiAoIWRhaS0+YWN0aXZlKSB7DQo+ICsJCS8qIFNo b3VsZCB0aGlzIHN0aWxsIGJlIHJ1bm5pbmcgc3RvcCBpdCAqLw0KPiArCQliY20yODM1X2kyc19z dG9wX2Nsb2NrKGRldik7DQo+ICsNCj4gKwkJLyogRW5hYmxlIFBDTSBibG9jayAqLw0KPiArCQly ZWdtYXBfdXBkYXRlX2JpdHMoZGV2LT5pMnNfcmVnbWFwLCBCQ00yODM1X0kyU19DU19BX1JFRywN Cj4gKwkJCQlCQ00yODM1X0kyU19FTiwgQkNNMjgzNV9JMlNfRU4pOw0KPiArDQo+ICsJCS8qDQo+ ICsJCSAqIERpc2FibGUgU1RCWQ0KDQpEb3QgaXMgbWlzc2luZz8NCg0KPiArCQkgKiBSZXF1aXJl cyBhdCBsZWFzdCA0IFBDTSBjbG9jayBjeWNsZXMgdG8gdGFrZSBlZmZlY3QNCj4gKwkJICovDQo+ ICsJCXJlZ21hcF91cGRhdGVfYml0cyhkZXYtPmkyc19yZWdtYXAsIEJDTTI4MzVfSTJTX0NTX0Ff UkVHLA0KPiArCQkJCUJDTTI4MzVfSTJTX1NUQlksIEJDTTI4MzVfSTJTX1NUQlkpOw0KPiArCX0N Cj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KDQoNCg0KPiArc3RhdGljIHZvaWQgYmNtMjgzNV9p MnNfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sDQo+ICsJCXN0 cnVjdCBzbmRfc29jX2RhaSAqZGFpKQ0KPiArew0KPiArCXN0cnVjdCBiY20yODM1X2kyc19kZXYg KmRldiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7DQo+ICsNCj4gKwliY20yODM1X2ky c19zdG9wKGRldiwgc3Vic3RyZWFtLCBkYWkpOw0KPiArDQo+ICsJLyogSWYgYm90aCBzdHJlYW1z IGFyZSBzdG9wcGVkLCBkaXNhYmxlIG1vZHVsZSBhbmQgY2xvY2sgKi8NCj4gKwlpZiAoIWRhaS0+ YWN0aXZlKSB7DQoNCmlmIChkYWktPmFjdGl2ZSkNCiByZXR1cm47DQoNCj4gKwkJLyogRGlzYWJs ZSB0aGUgbW9kdWxlICovDQo+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhkZXYtPmkyc19yZWdtYXAs IEJDTTI4MzVfSTJTX0NTX0FfUkVHLA0KPiArCQkJCUJDTTI4MzVfSTJTX0VOLCAwKTsNCj4gKw0K PiArCQkvKg0KPiArCQkgKiBTdG9wcGluZyBjbG9jayBpcyBuZWNlc3NhcnksIGJlY2F1c2Ugc3Rv cCBkb2VzDQo+ICsJCSAqIG5vdCBzdG9wIHRoZSBjbG9jayB3aGVuIFNORF9TT0NfREFJRk1UX0NP TlQNCj4gKwkJICovDQo+ICsJCWJjbTI4MzVfaTJzX3N0b3BfY2xvY2soZGV2KTsNCj4gKwl9DQo+ ICt9DQo+ICsNCg0KW10NCg0KPiArc3RhdGljIGludCBiY20yODM1X2kyc19wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArCXN0cnVjdCBiY20yODM1X2kyc19kZXYg KmRldjsNCj4gKwlpbnQgaTsNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVjdCByZWdtYXAgKnJlZ21h cFsyXTsNCj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbVsyXTsNCj4gKw0KPiArCS8qIFJlcXVlc3Qg Ym90aCBpb2FyZWFzICovDQo+ICsJZm9yIChpID0gMDsgaSA8PSAxOyBpKyspIHsNCj4gKwkJdm9p ZCBfX2lvbWVtICpiYXNlOw0KPiArDQo+ICsJCW1lbVtpXSA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgaSk7DQoNCj4gKwkJaWYgKCFtZW1baV0pIHsNCj4gKwkJ CWRldl9lcnIoJnBkZXYtPmRldiwgIkkyUyBwcm9iZTogTWVtb3J5IHJlc291cmNlIGNvdWxkIG5v dCBiZSBmb3VuZC5cbiIpOw0KPiArCQkJcmV0dXJuIC1FTk9ERVY7DQo+ICsJCX0NCg0KVW5uZWVk ZWQgbWVzc2FnaW5nIGFuZCBjaGVjay4NCg0KPiArDQo+ICsJCWJhc2UgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoJnBkZXYtPmRldiwgbWVtW2ldKTsNCj4gKwkJaWYgKCFiYXNlKSB7DQoNCkl0IHJl dHVybnMgRVJSX1BUUi4NClRodXMsDQoNCmlmIChJU19FUlIoYmFzZSkNCnJldHVybiBQVFJfRVJS KGJhc2UpDQoNCg0KPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJTIHByb2JlOiBpb3JlbWFw IGZhaWxlZC5cbiIpOw0KDQpVbm5lZWRlZCBtZXNzYWdpbmcuDQoNCj4gKwkJCXJldHVybiAtRU5P TUVNOw0KDQpXcm9uZyBlcnJvciBjb2RlLiBTZWUgYWJvdmUuDQoNCg0KLS0gDQpBbmR5IFNoZXZj aGVua28gPGFuZHJpeS5zaGV2Y2hlbmtvQGludGVsLmNvbT4NCkludGVsIEZpbmxhbmQgT3kNCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpJbnRlbCBGaW5sYW5kIE95ClJlZ2lzdGVyZWQgQWRkcmVzczogUEwgMjgxLCAw MDE4MSBIZWxzaW5raSAKQnVzaW5lc3MgSWRlbnRpdHkgQ29kZTogMDM1NzYwNiAtIDQgCkRvbWlj aWxlZCBpbiBIZWxzaW5raSAKClRoaXMgZS1tYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgbWF5IGNv bnRhaW4gY29uZmlkZW50aWFsIG1hdGVyaWFsIGZvcgp0aGUgc29sZSB1c2Ugb2YgdGhlIGludGVu ZGVkIHJlY2lwaWVudChzKS4gQW55IHJldmlldyBvciBkaXN0cmlidXRpb24KYnkgb3RoZXJzIGlz IHN0cmljdGx5IHByb2hpYml0ZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZApyZWNpcGll bnQsIHBsZWFzZSBjb250YWN0IHRoZSBzZW5kZXIgYW5kIGRlbGV0ZSBhbGwgY29waWVzLgo=

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
Quoted 12 lines
Quoted 12 lines
sound/soc/bcm/bcm2835-i2s.c new file +12 -0
+static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
+				 struct snd_pcm_hw_params *params,
+				 struct snd_soc_dai *dai)
+{
+	struct bcm2835_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
+
+	unsigned int sampling_rate = params_rate(params);
+	unsigned int data_length, data_delay, bclk_ratio;
+	unsigned int ch1pos, ch2pos, mode, format;
+	unsigned int mash = BCM2835_CLK_MASH_1;
+	unsigned int divi, divf, target_frequency;
+	int clk_src = -1;
Quoted 8 lines

sound/soc/bcm/bcm2835-i2s.c line 325

Quoted 5 lines
sound/soc/bcm/bcm2835-i2s.c new file +5 -0
+	unsigned int master = dev->fmt & SND_SOC_DAIFMT_MASTER_MASK;
+	uint32_t bit_master =	(master == SND_SOC_DAIFMT_CBS_CFS
+					|| master == SND_SOC_DAIFMT_CBS_CFM);
+
+	uint32_t frame_master =	(master == SND_SOC_DAIFMT_CBS_CFS

So, if master == SND_SOC_DAIFMT_CBS_CFS both bit_master and frame_master will be true. Is it correct?

Yes. That is exactly what CBS_CFS expresses:
Codec Bit Slave and Codec Frame Slave
So the interface is bit master as well as frame master.
Did I miss anything?
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw
In reply to Florian Meier
Quoted 37 lines · Florian Meier

This driver adds support for digital audio (I2S)
for the BCM2835 SoC that is used by the
Raspberry Pi. External audio codecs can be
connected to the Raspberry Pi via P5 header.

It relies on cyclic DMA engine support for BCM2835.

---

This successor of RFCv2 is no longer dependent on the dmaengine patch (of course you need it for running it). Therefore, it should cleanly apply.

Furthermore, some minor enhancements were applied. For example
- Removal of bcm2835-pcm.c and .h
- Adding bindings documentation
- Adding possibility for setting bclk_ratio

 .../devicetree/bindings/sound/bcm2835-i2s.txt      |   22 +
 sound/soc/Kconfig                                  |    1 +
 sound/soc/Makefile                                 |    1 +
 sound/soc/bcm/Kconfig                              |   10 +
 sound/soc/bcm/Makefile                             |    5 +
 sound/soc/bcm/bcm2835-i2s.c                        |  904 ++++++++++++++++++++
 6 files changed, 943 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/bcm2835-i2s.txt
 create mode 100644 sound/soc/bcm/Kconfig
 create mode 100644 sound/soc/bcm/Makefile
 create mode 100644 sound/soc/bcm/bcm2835-i2s.c
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +0 -0
new file mode 100644
index 0000000..7bf1d04

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt line 7

Quoted 7 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +7 -0
@@ -0,0 +1,22 @@
+* Broadcom BCM2835 SoC I2S/PCM module
+
+Required properties:
+- compatible: "brcm,bcm2835-i2s"
+- reg: Register location and size
+       <PCM base address, size
+        PCM clock base address, size>;

I'd prefer something like:

- reg: A list of base address and size entries:
* The first entry should cover the PCM registers
* The second entry should cover the PCM clock registers

Are the clocks actually a sub-block, or are they actually a separate unit that just happens to feed this one?

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt line 10

Quoted 3 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +3 -0
+- dmas: List of DMA controller phandle and DMA request line ordered pairs.
+- dma-names: Identifier string for each DMA request line in the dmas property.
+  These strings correspond 1:1 with the ordered pairs in dmas.

It should be pointed out that "tx" and "rx" are expected.

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt line 17

Quoted 7 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +7 -0
+
+Example:
+
+bcm2835_i2s: i2s at 7e203000 {
+       compatible = "brcm,bcm2835-i2s";
+       reg = < 0x7e203000 0x20
+               0x7e101098 0x02>;

Please bracket entries individually:

reg = <0x7e203000 0x20>,

      <0x7e101098 0x02>;

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt line 20

Quoted 3 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +3 -0
+
+       dmas = <&dma 2
+               &dma 3>;

Similarly:

dmas = <&dma 2>,

       <&dma 3>;

[...]

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt

Quoted 3 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +3 -0
+static void bcm2835_i2s_stop_clock(struct bcm2835_i2s_dev *dev)
+{
+       uint32_t clkreg;

s/uint32_t/u32/ (and elsewhere...)

[...]

Quoted 1 line

+ target_frequency = sampling_rate*bclk_ratio;

It would be nicer if there were space around binary operators here and elsewhere.

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt

Quoted 9 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +9 -0
+       clk_src = BCM2835_CLK_SRC_OSC;
+       mash = BCM2835_CLK_MASH_0;
+
+       if (bcm2835_clk_freq[clk_src] % target_frequency == 0
+                       && bit_master && frame_master) {
+               divi = bcm2835_clk_freq[clk_src]/target_frequency;
+               divf = 0;
+       } else {
+               uint64_t dividend;

s/uint64_t/u64/

[...]

Quoted 1 line

+ ch2pos = bclk_ratio/2+data_delay;

Spacing would make this far nicer...

Thanks,
Mark.

#4 lore raw
Quoted 6 lines · Mark Rutland

sound/soc/bcm/bcm2835-i2s.c line 193

Quoted 4 lines
sound/soc/bcm/bcm2835-i2s.c new file +3 -0
+static void bcm2835_i2s_stop_clock(struct bcm2835_i2s_dev *dev)
+{
+       uint32_t clkreg;

s/uint32_t/u32/ (and elsewhere...)

Please don't do that.

#5 lore raw
Quoted 10 lines · Lars-Peter Clausen
Quoted 6 lines · Mark Rutland

sound/soc/bcm/bcm2835-i2s.c line 193

Quoted 4 lines
sound/soc/bcm/bcm2835-i2s.c new file +3 -0
+static void bcm2835_i2s_stop_clock(struct bcm2835_i2s_dev *dev)
+{
+       uint32_t clkreg;

s/uint32_t/u32/ (and elsewhere...)

Please don't do that.

I was under the impression that there was a preference for uXX types over uintXX_t types, but the replies and Documentation/CodingStyle have taught me otherwise.

Apologies for the confusion here.

Thanks,
Mark.

#6 lore raw
In reply to Mark Rutland

Thank you!

Quoted 16 lines

Documentation/devicetree/bindings/sound/bcm2835-i2s.txt line 7

Quoted 13 lines
Documentation/devicetree/bindings/sound/bcm2835-i2s.txt new file +7 -0
new file mode 100644
index 0000000..7bf1d04
@@ -0,0 +1,22 @@
+* Broadcom BCM2835 SoC I2S/PCM module
+
+Required properties:
+- compatible: "brcm,bcm2835-i2s"
+- reg: Register location and size
+       <PCM base address, size
+        PCM clock base address, size>;

[]

Quoted 2 lines

Are the clocks actually a sub-block, or are they actually a separate unit that just happens to feed this one?

Sorry, but I don't get your point. It is a clock module that is dedicated to the PCM module.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html