[alsa-devel] [PATCH 2/2] ASoC: codecs: adau1701: add DT bindings
Lars-Peter Clausen
lars at metafoo.de
Thu May 23 15:20:50 CEST 2013
On 05/23/2013 01:58 PM, Daniel Mack wrote:
[...]
> +#ifdef CONFIG_OF
> +static const struct of_device_id adau1701_dt_ids[] = {
> + { .compatible = "adi,adau1701", },
> + { }
> +};
> +MODULE_DEVICE_TABLE(of, adau1701_dt_ids);
> +#endif
> +
> static int adau1701_probe(struct snd_soc_codec *codec)
> {
> int ret;
> + struct device *dev = codec->dev;
> struct i2c_client *client = to_i2c_client(codec->dev);
> + int gpio_nreset = -EINVAL;
>
> codec->control_data = client;
>
> + if (of_match_device(of_match_ptr(adau1701_dt_ids), dev))
I think just checking for dev->of_node should be simpler.
> + gpio_nreset = of_get_named_gpio(dev->of_node,
> + "reset-gpio", 0);
This should check for errors. E.g. we definitely want to handle
-EPROBE_DEFER, but it makes sense to also return an error if the property is
present but something is wrong.
E.g something like
if (gpio_nreset < 0 && gpio_nreset != -ENOENT)
return gpio_nreset;
> +
> + if (gpio_is_valid(gpio_nreset)) {
> + if (devm_gpio_request_one(codec->dev, gpio_nreset,
> + GPIOF_OUT_INIT_LOW,
> + "ADAU1701 Reset") < 0)
> + return -EINVAL;
> +
> + /* minimum reset time is 20ns */
> + udelay(1);
> + gpio_set_value(gpio_nreset, 1);
> + /* power-up time may be as long as 85ms */
> + mdelay(85);
> + }
I think it is better to request the gpio and reset the device in the i2c
probe function.
> +
> ret = adau1701_load_firmware(client);
> if (ret)
> dev_warn(codec->dev, "Failed to load firmware\n");
> @@ -522,6 +552,7 @@ static struct i2c_driver adau1701_i2c_driver = {
> .driver = {
> .name = "adau1701",
> .owner = THIS_MODULE,
> + .of_match_table = of_match_ptr(adau1701_dt_ids),
> },
> .probe = adau1701_i2c_probe,
> .remove = adau1701_i2c_remove,
More information about the Alsa-devel
mailing list