[alsa-devel] [PATCH] sound/tlv320dac33: Add device tree support
This adds device tree support to tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..6cbd311 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module + +The tlv320dac33 serial control bus communicates through I2C protocols. + +Required properties: + +- compatible - "ti,tlv320dac33" +- reg - I2C slave address + +Optional properties: + +- power-gpios - gpio pin to power the device, active high + +- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller. + +- ti,keep-bclk - Keep the BCLK running in FIFO modes +- ti,burst-bclkdiv - BCLK divider value in burst mode + +Example: + +tlv320dac33: audio-codec@19 { + compatible = "ti,tlv320dac33"; + reg = <0x19>; + + interrupt-parent = <&gpio2>; + interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */ + power-gpio = <&gpio2 28 0>; /* gpio_60 */ + + ti,keep-bclk; + ti,burst-bclkdiv = <3>; +}; diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index 5b94a15..2a0fe06 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c @@ -30,6 +32,7 @@ #include <linux/interrupt.h> #include <linux/gpio.h> #include <linux/regulator/consumer.h> +#include <linux/of_gpio.h> #include <linux/slab.h> #include <sound/core.h> #include <sound/pcm.h> @@ -105,7 +108,7 @@ struct tlv320dac33_priv { unsigned int nsample; /* burst read amount from host */ int mode1_latency; /* latency caused by the i2c writes in * us */ - u8 burst_bclkdiv; /* BCLK divider value in burst mode */ + u32 burst_bclkdiv; /* BCLK divider value in burst mode */ unsigned int burst_rate; /* Interface speed in Burst modes */
int keep_bclk; /* Keep the BCLK continuously running @@ -1484,16 +1487,11 @@ static struct snd_soc_dai_driver dac33_dai = { static int dac33_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { - struct tlv320dac33_platform_data *pdata; + struct tlv320dac33_platform_data *pdata = client->dev.platform_data; struct tlv320dac33_priv *dac33; + struct device_node *np = client->dev.of_node; int ret, i;
- if (client->dev.platform_data == NULL) { - dev_err(&client->dev, "Platform data not set\n"); - return -ENODEV; - } - pdata = client->dev.platform_data; - dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), GFP_KERNEL); if (dac33 == NULL) @@ -1505,10 +1503,26 @@ static int dac33_i2c_probe(struct i2c_client *client,
i2c_set_clientdata(client, dac33);
- dac33->power_gpio = pdata->power_gpio; - dac33->burst_bclkdiv = pdata->burst_bclkdiv; - dac33->keep_bclk = pdata->keep_bclk; - dac33->mode1_latency = pdata->mode1_latency; + if (pdata) { + dac33->power_gpio = pdata->power_gpio; + dac33->burst_bclkdiv = pdata->burst_bclkdiv; + dac33->keep_bclk = pdata->keep_bclk; + dac33->mode1_latency = pdata->mode1_latency; + } else if (np) { + ret = of_get_named_gpio(np, "power-gpios", 0); + if (ret >= 0) + dac33->power_gpio = ret; + else + dac33->power_gpio = -1; + + if (of_property_read_bool(np, "ti,keep-bclk")) + dac33->keep_bclk = true; + + of_property_read_u32(np, "ti,burst-bclkdiv", &dac33->burst_bclkdiv); + } else { + dev_err(&client->dev, "Platform data not set\n"); + return -ENODEV; + } if (!dac33->mode1_latency) dac33->mode1_latency = 10000; /* 10ms */ dac33->irq = client->irq; @@ -1574,9 +1588,16 @@ static const struct i2c_device_id tlv320dac33_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, tlv320dac33_i2c_id);
+static const struct of_device_id tlv320dac33_of_match[] = { + { .compatible = "ti,tlv320dac33", }, + {}, +}; +MODULE_DEVICE_TABLE(i2c, tlv320dac33_of_match); + static struct i2c_driver tlv320dac33_i2c_driver = { .driver = { .name = "tlv320dac33-codec", + .of_match_table = of_match_ptr(tlv320dac33_of_match), }, .probe = dac33_i2c_probe, .remove = dac33_i2c_remove,
On Tue, Jan 30, 2018 at 12:05:39AM +0100, Pavel Machek wrote:
This adds device tree support to tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..6cbd311 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- power-gpios - gpio pin to power the device, active high
While driver used gpio in platform data, isn't it more likely regulator which powers device?
+- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller.
+- ti,keep-bclk - Keep the BCLK running in FIFO modes +- ti,burst-bclkdiv - BCLK divider value in burst mode
+Example:
+tlv320dac33: audio-codec@19 {
- compatible = "ti,tlv320dac33";
- reg = <0x19>;
- interrupt-parent = <&gpio2>;
- interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */
- power-gpio = <&gpio2 28 0>; /* gpio_60 */
- ti,keep-bclk;
- ti,burst-bclkdiv = <3>;
+}; diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index 5b94a15..2a0fe06 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c @@ -30,6 +32,7 @@ #include <linux/interrupt.h> #include <linux/gpio.h> #include <linux/regulator/consumer.h> +#include <linux/of_gpio.h> #include <linux/slab.h> #include <sound/core.h> #include <sound/pcm.h> @@ -105,7 +108,7 @@ struct tlv320dac33_priv { unsigned int nsample; /* burst read amount from host */ int mode1_latency; /* latency caused by the i2c writes in * us */
- u8 burst_bclkdiv; /* BCLK divider value in burst mode */
u32 burst_bclkdiv; /* BCLK divider value in burst mode */ unsigned int burst_rate; /* Interface speed in Burst modes */
int keep_bclk; /* Keep the BCLK continuously running
@@ -1484,16 +1487,11 @@ static struct snd_soc_dai_driver dac33_dai = { static int dac33_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) {
- struct tlv320dac33_platform_data *pdata;
- struct tlv320dac33_platform_data *pdata = client->dev.platform_data; struct tlv320dac33_priv *dac33;
- struct device_node *np = client->dev.of_node; int ret, i;
- if (client->dev.platform_data == NULL) {
dev_err(&client->dev, "Platform data not set\n");
return -ENODEV;
- }
- pdata = client->dev.platform_data;
- dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), GFP_KERNEL); if (dac33 == NULL)
@@ -1505,10 +1503,26 @@ static int dac33_i2c_probe(struct i2c_client *client,
i2c_set_clientdata(client, dac33);
- dac33->power_gpio = pdata->power_gpio;
- dac33->burst_bclkdiv = pdata->burst_bclkdiv;
- dac33->keep_bclk = pdata->keep_bclk;
- dac33->mode1_latency = pdata->mode1_latency;
- if (pdata) {
dac33->power_gpio = pdata->power_gpio;
dac33->burst_bclkdiv = pdata->burst_bclkdiv;
dac33->keep_bclk = pdata->keep_bclk;
dac33->mode1_latency = pdata->mode1_latency;
- } else if (np) {
ret = of_get_named_gpio(np, "power-gpios", 0);
if (ret >= 0)
dac33->power_gpio = ret;
else
dac33->power_gpio = -1;
if (of_property_read_bool(np, "ti,keep-bclk"))
dac33->keep_bclk = true;
of_property_read_u32(np, "ti,burst-bclkdiv", &dac33->burst_bclkdiv);
- } else {
dev_err(&client->dev, "Platform data not set\n");
return -ENODEV;
- } if (!dac33->mode1_latency) dac33->mode1_latency = 10000; /* 10ms */ dac33->irq = client->irq;
@@ -1574,9 +1588,16 @@ static const struct i2c_device_id tlv320dac33_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, tlv320dac33_i2c_id);
+static const struct of_device_id tlv320dac33_of_match[] = {
- { .compatible = "ti,tlv320dac33", },
- {},
+}; +MODULE_DEVICE_TABLE(i2c, tlv320dac33_of_match);
static struct i2c_driver tlv320dac33_i2c_driver = { .driver = { .name = "tlv320dac33-codec",
}, .probe = dac33_i2c_probe, .remove = dac33_i2c_remove,.of_match_table = of_match_ptr(tlv320dac33_of_match),
-- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
On Tue 2018-01-30 00:20:31, Ladislav Michl wrote:
On Tue, Jan 30, 2018 at 12:05:39AM +0100, Pavel Machek wrote:
This adds device tree support to tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..6cbd311 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- power-gpios - gpio pin to power the device, active high
While driver used gpio in platform data, isn't it more likely regulator which powers device?
power-gpios = <&gpio2 28 0>; /* gpio_60 */
Looks like GPIO to me -- example is from Nokia N9. So this appears to be correct.
Pavel
On Tue, Jan 30, 2018 at 12:33:01AM +0100, Pavel Machek wrote:
On Tue 2018-01-30 00:20:31, Ladislav Michl wrote:
On Tue, Jan 30, 2018 at 12:05:39AM +0100, Pavel Machek wrote:
This adds device tree support to tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..6cbd311 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- power-gpios - gpio pin to power the device, active high
While driver used gpio in platform data, isn't it more likely regulator which powers device?
power-gpios = <&gpio2 28 0>; /* gpio_60 */
Looks like GPIO to me -- example is from Nokia N9. So this appears to be correct.
Device datasheet doesn't list any pin which looks like "power-gpio" http://www.ti.com/lit/ds/symlink/tlv320dac32.pdf Unfortunately I do not know much about N9, but was able to find Nokia 5610 scheme to get clue how could be tlv320dac33 hardwired (see page 2): http://mastermobile.spb.ru/service/nokia_5610_rm-242_service_schematics.pdf Here AVDD is powered by LP3985 voltage regulator which is enabled using VEN pin which might be connected to gpio. Or there could be completely different voltage regulator with different controls. And since Linux already has voltage regulator class, lets not limit ourselves to gpio pins.
See also here about deprecated power-gpios: Documentation/devicetree/bindings/mmc/cavium-mmc.txt so it seems others already fallen into that trap.
ladis
On Tue 2018-01-30 09:34:46, Ladislav Michl wrote:
On Tue, Jan 30, 2018 at 12:33:01AM +0100, Pavel Machek wrote:
On Tue 2018-01-30 00:20:31, Ladislav Michl wrote:
On Tue, Jan 30, 2018 at 12:05:39AM +0100, Pavel Machek wrote:
This adds device tree support to tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..6cbd311 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- power-gpios - gpio pin to power the device, active high
While driver used gpio in platform data, isn't it more likely regulator which powers device?
power-gpios = <&gpio2 28 0>; /* gpio_60 */
Looks like GPIO to me -- example is from Nokia N9. So this appears to be correct.
Device datasheet doesn't list any pin which looks like "power-gpio" http://www.ti.com/lit/ds/symlink/tlv320dac32.pdf Unfortunately I do not know much about N9, but was able to find Nokia 5610 scheme to get clue how could be tlv320dac33 hardwired (see page 2): http://mastermobile.spb.ru/service/nokia_5610_rm-242_service_schematics.pdf Here AVDD is powered by LP3985 voltage regulator which is enabled using VEN pin which might be connected to gpio. Or there could be completely different voltage regulator with different controls. And since Linux already has voltage regulator class, lets not limit ourselves to gpio pins.
Well, notice I'm converting existing driver to device tree. And that one already has GPIO dependency. It is possible that more work needs to be done there, but that should not be a reason to delay this. Feel free to help.
Pavel
On Tue, Jan 30, 2018 at 09:53:14AM +0100, Pavel Machek wrote:
Well, notice I'm converting existing driver to device tree. And that one already has GPIO dependency. It is possible that more work needs to be done there, but that should not be a reason to delay this. Feel free to help.
No, it's a very good reason to delay merging something. A DT binding is an ABI so we need to sort out interface issues and describe things as well as we can, with board files it's not an ABI so we can just do any old thing that happens to work and while it might not be ideal it doesn't really matter since we can change it later if we need to.
On Tue 2018-01-30 11:32:38, Mark Brown wrote:
On Tue, Jan 30, 2018 at 09:53:14AM +0100, Pavel Machek wrote:
Well, notice I'm converting existing driver to device tree. And that one already has GPIO dependency. It is possible that more work needs to be done there, but that should not be a reason to delay this. Feel free to help.
No, it's a very good reason to delay merging something. A DT binding is an ABI so we need to sort out interface issues and describe things as well as we can, with board files it's not an ABI so we can just do any old thing that happens to work and while it might not be ideal it doesn't really matter since we can change it later if we need to.
Whatever.
Turns out this was GPIO after all.
I believe power-gpio and reset-gpio are equiavalent, with different polarity. (After all, devices in reset consume less power).
If you prefer one solution over another, let me know...
Pavel
On 2018-01-30 01:20, Ladislav Michl wrote:
On Tue, Jan 30, 2018 at 12:05:39AM +0100, Pavel Machek wrote:
This adds device tree support to tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..6cbd311 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- power-gpios - gpio pin to power the device, active high
While driver used gpio in platform data, isn't it more likely regulator which powers device?
It is GPIO, and according to the non public TRM it is connected to the reset pin of the codec.
So the correct name should be reset-gpios
- Péter
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
This adds device tree bindings for tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..7fdda95 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module + +The tlv320dac33 serial control bus communicates through I2C protocols. + +Required properties: + +- compatible - "ti,tlv320dac33" +- reg - I2C slave address + +Optional properties: + +- reset-gpios - gpio pin to power the device, active low + +- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller. + +- ti,keep-bclk - Keep the BCLK running in FIFO modes +- ti,burst-bclkdiv - BCLK divider value in burst mode + +Example: + +tlv320dac33: audio-codec@19 { + compatible = "ti,tlv320dac33"; + reg = <0x19>; + + interrupt-parent = <&gpio2>; + interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */ + reset-gpios = <&gpio2 28 0>; /* gpio_60 */ + + ti,keep-bclk; + ti,burst-bclkdiv = <3>; +};
On 2018-01-31 21:01, Pavel Machek wrote:
This adds device tree bindings for tlv320dac33.c.
Can you CC me for dac33 patches in the future, please?
Acked-by: Peter Ujfalusi peter.ujfalusi@ti.com
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..7fdda95 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- reset-gpios - gpio pin to power the device, active low
+- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller.
+- ti,keep-bclk - Keep the BCLK running in FIFO modes +- ti,burst-bclkdiv - BCLK divider value in burst mode
+Example:
+tlv320dac33: audio-codec@19 {
- compatible = "ti,tlv320dac33";
- reg = <0x19>;
- interrupt-parent = <&gpio2>;
- interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */
- reset-gpios = <&gpio2 28 0>; /* gpio_60 */
- ti,keep-bclk;
- ti,burst-bclkdiv = <3>;
+};
- Péter
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
This adds device tree bindings for tlv320dac33.c.
Acked-by: Peter Ujfalusi peter.ujfalusi@ti.com Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..aee0a87 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module + +The tlv320dac33 serial control bus communicates through I2C protocols. + +Required properties: + +- compatible - "ti,tlv320dac33" +- reg - I2C slave address +- ti,burst-bclkdiv - BCLK divider value in burst mode. Valid range is 1..255. + +Optional properties: + +- reset-gpios - gpio pin to power the device, active high. + +- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller. + +- ti,keep-bclk - Keep the BCLK running in FIFO modes. + +Example: + +tlv320dac33: audio-codec@19 { + compatible = "ti,tlv320dac33"; + reg = <0x19>; + + interrupt-parent = <&gpio2>; + interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */ + reset-gpios = <&gpio2 28 0>; /* gpio_60 */ + + ti,keep-bclk; + ti,burst-bclkdiv = <3>; +};
On Mon, Feb 05, 2018 at 09:24:45AM +0100, Pavel Machek wrote:
This adds device tree bindings for tlv320dac33.c.
Acked-by: Peter Ujfalusi peter.ujfalusi@ti.com Signed-off-by: Pavel Machek pavel@ucw.cz
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
On Tue 2018-02-06 12:11:22, Mark Brown wrote:
On Mon, Feb 05, 2018 at 09:24:45AM +0100, Pavel Machek wrote:
This adds device tree bindings for tlv320dac33.c.
Acked-by: Peter Ujfalusi peter.ujfalusi@ti.com Signed-off-by: Pavel Machek pavel@ucw.cz
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
AFAICT this goes to Documentation, not sound.
If you have any comments on V1 of this patch, that would be nice, I'd like to get that merged once we are finished with the bindings.
Pavel
On Tue, Feb 06, 2018 at 02:49:06PM +0100, Pavel Machek wrote:
On Tue 2018-02-06 12:11:22, Mark Brown wrote:
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
AFAICT this goes to Documentation, not sound.
Even if that were the case you're not following the commonly accepted practice there either.
If you have any comments on V1 of this patch, that would be nice, I'd like to get that merged once we are finished with the bindings.
It is the middle of the merge window, please be a bit more patient.
On Tue 2018-02-06 15:27:22, Mark Brown wrote:
On Tue, Feb 06, 2018 at 02:49:06PM +0100, Pavel Machek wrote:
On Tue 2018-02-06 12:11:22, Mark Brown wrote:
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
AFAICT this goes to Documentation, not sound.
Even if that were the case you're not following the commonly accepted practice there either.
If you have any comments on V1 of this patch, that would be nice, I'd like to get that merged once we are finished with the bindings.
It is the middle of the merge window, please be a bit more patient.
For the record, patch currently looks like this. If you have some comments on the code, I'd like to hear them.
Best regards, Pavel
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..aee0a87 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module + +The tlv320dac33 serial control bus communicates through I2C protocols. + +Required properties: + +- compatible - "ti,tlv320dac33" +- reg - I2C slave address +- ti,burst-bclkdiv - BCLK divider value in burst mode. Valid range is 1..255. + +Optional properties: + +- reset-gpios - gpio pin to power the device, active high. + +- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller. + +- ti,keep-bclk - Keep the BCLK running in FIFO modes. + +Example: + +tlv320dac33: audio-codec@19 { + compatible = "ti,tlv320dac33"; + reg = <0x19>; + + interrupt-parent = <&gpio2>; + interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */ + reset-gpios = <&gpio2 28 0>; /* gpio_60 */ + + ti,keep-bclk; + ti,burst-bclkdiv = <3>; +}; diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index 8c71d2f..7302789 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c @@ -30,6 +32,7 @@ #include <linux/interrupt.h> #include <linux/gpio.h> #include <linux/regulator/consumer.h> +#include <linux/of_gpio.h> #include <linux/slab.h> #include <sound/core.h> #include <sound/pcm.h> @@ -105,7 +108,7 @@ struct tlv320dac33_priv { unsigned int nsample; /* burst read amount from host */ int mode1_latency; /* latency caused by the i2c writes in * us */ - u8 burst_bclkdiv; /* BCLK divider value in burst mode */ + u32 burst_bclkdiv; /* BCLK divider value in burst mode */ u8 *reg_cache; unsigned int burst_rate; /* Interface speed in Burst modes */
@@ -1483,16 +1486,11 @@ static struct snd_soc_dai_driver dac33_dai = { static int dac33_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { - struct tlv320dac33_platform_data *pdata; + struct tlv320dac33_platform_data *pdata = client->dev.platform_data; struct tlv320dac33_priv *dac33; + struct device_node *np = client->dev.of_node; int ret, i;
- if (client->dev.platform_data == NULL) { - dev_err(&client->dev, "Platform data not set\n"); - return -ENODEV; - } - pdata = client->dev.platform_data; - dac33 = devm_kzalloc(&client->dev, sizeof(struct tlv320dac33_priv), GFP_KERNEL); if (dac33 == NULL) @@ -1511,10 +1509,26 @@ static int dac33_i2c_probe(struct i2c_client *client,
i2c_set_clientdata(client, dac33);
- dac33->power_gpio = pdata->power_gpio; - dac33->burst_bclkdiv = pdata->burst_bclkdiv; - dac33->keep_bclk = pdata->keep_bclk; - dac33->mode1_latency = pdata->mode1_latency; + if (pdata) { + dac33->power_gpio = pdata->power_gpio; + dac33->burst_bclkdiv = pdata->burst_bclkdiv; + dac33->keep_bclk = pdata->keep_bclk; + dac33->mode1_latency = pdata->mode1_latency; + } else if (np) { + ret = of_get_named_gpio(np, "power-gpios", 0); + if (ret >= 0) + dac33->power_gpio = ret; + else + dac33->power_gpio = -1; + + if (of_property_read_bool(np, "ti,keep-bclk")) + dac33->keep_bclk = true; + + of_property_read_u32(np, "ti,burst-bclkdiv", &dac33->burst_bclkdiv); + } else { + dev_err(&client->dev, "Platform data not set\n"); + return -ENODEV; + } if (!dac33->mode1_latency) dac33->mode1_latency = 10000; /* 10ms */ dac33->irq = client->irq; @@ -1580,9 +1594,16 @@ static const struct i2c_device_id tlv320dac33_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, tlv320dac33_i2c_id);
+static const struct of_device_id tlv320dac33_of_match[] = { + { .compatible = "ti,tlv320dac33", }, + {}, +}; +MODULE_DEVICE_TABLE(i2c, tlv320dac33_of_match); + static struct i2c_driver tlv320dac33_i2c_driver = { .driver = { .name = "tlv320dac33-codec", + .of_match_table = of_match_ptr(tlv320dac33_of_match), }, .probe = dac33_i2c_probe, .remove = dac33_i2c_remove,
Hi,
On 2018-02-24 22:57, Pavel Machek wrote:
On Tue 2018-02-06 15:27:22, Mark Brown wrote:
On Tue, Feb 06, 2018 at 02:49:06PM +0100, Pavel Machek wrote:
On Tue 2018-02-06 12:11:22, Mark Brown wrote:
Please submit patches using subject lines reflecting the style for the subsystem. This makes it easier for people to identify relevant patches. Look at what existing commits in the area you're changing are doing and make sure your subject lines visually resemble what they're doing.
AFAICT this goes to Documentation, not sound.
Even if that were the case you're not following the commonly accepted practice there either.
If you have any comments on V1 of this patch, that would be nice, I'd like to get that merged once we are finished with the bindings.
It is the middle of the merge window, please be a bit more patient.
For the record, patch currently looks like this. If you have some comments on the code, I'd like to hear them.
Best regards, diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index 8c71d2f..7302789 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c
...
@@ -1511,10 +1509,26 @@ static int dac33_i2c_probe(struct i2c_client *client,
i2c_set_clientdata(client, dac33);
- dac33->power_gpio = pdata->power_gpio;
- dac33->burst_bclkdiv = pdata->burst_bclkdiv;
- dac33->keep_bclk = pdata->keep_bclk;
- dac33->mode1_latency = pdata->mode1_latency;
- if (pdata) {
dac33->power_gpio = pdata->power_gpio;
dac33->burst_bclkdiv = pdata->burst_bclkdiv;
dac33->keep_bclk = pdata->keep_bclk;
dac33->mode1_latency = pdata->mode1_latency;
- } else if (np) {
ret = of_get_named_gpio(np, "power-gpios", 0);
if (ret >= 0)
dac33->power_gpio = ret;
else
dac33->power_gpio = -1;
the code checks for (dac33->power_gpio >= 0) in live path, I guess you can just skip the power_gpio = -1 in case we don't have GPIO Handling of EPROBE_DEFER might be something we might want for the GPIO.
if (of_property_read_bool(np, "ti,keep-bclk"))
dac33->keep_bclk = true;
of_property_read_u32(np, "ti,burst-bclkdiv", &dac33->burst_bclkdiv);
- } else {
dev_err(&client->dev, "Platform data not set\n");
return -ENODEV;
- } if (!dac33->mode1_latency) dac33->mode1_latency = 10000; /* 10ms */ dac33->irq = client->irq;
@@ -1580,9 +1594,16 @@ static const struct i2c_device_id tlv320dac33_i2c_id[] = { }; MODULE_DEVICE_TABLE(i2c, tlv320dac33_i2c_id);
+static const struct of_device_id tlv320dac33_of_match[] = {
- { .compatible = "ti,tlv320dac33", },
- {},
+}; +MODULE_DEVICE_TABLE(i2c, tlv320dac33_of_match);
static struct i2c_driver tlv320dac33_i2c_driver = { .driver = { .name = "tlv320dac33-codec",
}, .probe = dac33_i2c_probe, .remove = dac33_i2c_remove,.of_match_table = of_match_ptr(tlv320dac33_of_match),
- Péter
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
On Mon, Feb 05, 2018 at 09:24:45AM +0100, Pavel Machek wrote:
This adds device tree bindings for tlv320dac33.c.
Acked-by: Peter Ujfalusi peter.ujfalusi@ti.com Signed-off-by: Pavel Machek pavel@ucw.cz
Reviewed-by: Rob Herring robh@kernel.org
On Wed, Jan 31, 2018 at 08:01:12PM +0100, Pavel Machek wrote:
This adds device tree bindings for tlv320dac33.c.
Signed-off-by: Pavel Machek pavel@ucw.cz
diff --git a/Documentation/devicetree/bindings/sound/tlv320dac33.txt b/Documentation/devicetree/bindings/sound/tlv320dac33.txt new file mode 100644 index 0000000..7fdda95 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tlv320dac33.txt @@ -0,0 +1,32 @@ +Texas Instruments - tlv320dac33 Codec module
+The tlv320dac33 serial control bus communicates through I2C protocols.
+Required properties:
+- compatible - "ti,tlv320dac33" +- reg - I2C slave address
+Optional properties:
+- reset-gpios - gpio pin to power the device, active low
+- interrupts - The interrupt output from the device. +- interrupt-parent - The parent interrupt controller.
+- ti,keep-bclk - Keep the BCLK running in FIFO modes
space before tab ^
+- ti,burst-bclkdiv - BCLK divider value in burst mode
What are valid values? What's the default?
+Example:
+tlv320dac33: audio-codec@19 {
- compatible = "ti,tlv320dac33";
- reg = <0x19>;
- interrupt-parent = <&gpio2>;
- interrupts = <21 1>; /* gpio_53, IRQF_TRIGGER_RISING */
- reset-gpios = <&gpio2 28 0>; /* gpio_60 */
- ti,keep-bclk;
- ti,burst-bclkdiv = <3>;
+};
-- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
participants (5)
-
Ladislav Michl
-
Mark Brown
-
Pavel Machek
-
Peter Ujfalusi
-
Rob Herring