Skip to content

Commit

Permalink
ASoC: ak4104: add reset line property to DT bindings
Browse files Browse the repository at this point in the history
This device doesn't have a pdata definition for legacy boards, and
unless anyone need to control the reset GPIO, it's not worth adding one.
So this feature is only available to DT users for now.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Daniel Mack authored and Mark Brown committed Nov 23, 2012
1 parent ac5dbea commit 385a4c2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Documentation/devicetree/bindings/sound/ak4104.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ Required properties:

- reg : The chip select number on the SPI bus

Optional properties:

- reset-gpio : a GPIO spec for the reset pin. If specified, it will be
deasserted before communication to the device starts.

Example:

spdif: ak4104@0 {
Expand Down
17 changes: 17 additions & 0 deletions sound/soc/codecs/ak4104.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <sound/soc.h>
#include <sound/initval.h>
#include <linux/spi/spi.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>
#include <sound/asoundef.h>

/* AK4104 registers addresses */
Expand Down Expand Up @@ -204,6 +206,7 @@ static const struct regmap_config ak4104_regmap = {

static int ak4104_spi_probe(struct spi_device *spi)
{
struct device_node *np = spi->dev.of_node;
struct ak4104_private *ak4104;
unsigned int val;
int ret;
Expand All @@ -225,6 +228,20 @@ static int ak4104_spi_probe(struct spi_device *spi)
return ret;
}

if (np) {
enum of_gpio_flags flags;
int gpio = of_get_named_gpio_flags(np, "reset-gpio", 0, &flags);

if (gpio_is_valid(gpio)) {
ret = devm_gpio_request_one(&spi->dev, gpio,
flags & OF_GPIO_ACTIVE_LOW ?
GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH,
"ak4104 reset");
if (ret < 0)
return ret;
}
}

/* read the 'reserved' register - according to the datasheet, it
* should contain 0x5b. Not a good way to verify the presence of
* the device, but there is no hardware ID register. */
Expand Down

0 comments on commit 385a4c2

Please sign in to comment.