mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
ASoC: max9768: Convert to use GPIO descriptors
The MAX9768 is pretty straight forward to convert to GPIO descriptors. To name the GPIO properties, I looke at the bindings in maxim,max9759.yaml which names these GPIO "mute" and "shutdown" respectively. No board files using platform data exist in the kernel, new users can use GPIO descriptor tables if desired. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20230911-descriptors-asoc-max-v2-1-b9d793fb768e@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0bb80ecc33
commit
637a7969ef
@ -9,14 +9,10 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct max9768_pdata - optional platform specific MAX9768 configuration
|
* struct max9768_pdata - optional platform specific MAX9768 configuration
|
||||||
* @shdn_gpio: GPIO to SHDN pin. If not valid, pin must be hardwired HIGH
|
|
||||||
* @mute_gpio: GPIO to MUTE pin. If not valid, control for mute won't be added
|
|
||||||
* @flags: configuration flags, e.g. set classic PWM mode (check datasheet
|
* @flags: configuration flags, e.g. set classic PWM mode (check datasheet
|
||||||
* regarding "filterless modulation" which is default).
|
* regarding "filterless modulation" which is default).
|
||||||
*/
|
*/
|
||||||
struct max9768_pdata {
|
struct max9768_pdata {
|
||||||
int shdn_gpio;
|
|
||||||
int mute_gpio;
|
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
#define MAX9768_FLAG_CLASSIC_PWM (1 << 0)
|
#define MAX9768_FLAG_CLASSIC_PWM (1 << 0)
|
||||||
};
|
};
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio/consumer.h>
|
||||||
#include <linux/regmap.h>
|
#include <linux/regmap.h>
|
||||||
|
|
||||||
#include <sound/core.h>
|
#include <sound/core.h>
|
||||||
@ -27,8 +27,8 @@
|
|||||||
|
|
||||||
struct max9768 {
|
struct max9768 {
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
int mute_gpio;
|
struct gpio_desc *mute;
|
||||||
int shdn_gpio;
|
struct gpio_desc *shdn;
|
||||||
u32 flags;
|
u32 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ static int max9768_get_gpio(struct snd_kcontrol *kcontrol,
|
|||||||
{
|
{
|
||||||
struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
|
struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
|
||||||
struct max9768 *max9768 = snd_soc_component_get_drvdata(c);
|
struct max9768 *max9768 = snd_soc_component_get_drvdata(c);
|
||||||
int val = gpio_get_value_cansleep(max9768->mute_gpio);
|
int val = gpiod_get_value_cansleep(max9768->mute);
|
||||||
|
|
||||||
ucontrol->value.integer.value[0] = !val;
|
ucontrol->value.integer.value[0] = !val;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ static int max9768_set_gpio(struct snd_kcontrol *kcontrol,
|
|||||||
struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
|
struct snd_soc_component *c = snd_soc_kcontrol_component(kcontrol);
|
||||||
struct max9768 *max9768 = snd_soc_component_get_drvdata(c);
|
struct max9768 *max9768 = snd_soc_component_get_drvdata(c);
|
||||||
|
|
||||||
gpio_set_value_cansleep(max9768->mute_gpio, !ucontrol->value.integer.value[0]);
|
gpiod_set_value_cansleep(max9768->mute, !ucontrol->value.integer.value[0]);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ static int max9768_probe(struct snd_soc_component *component)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpio_is_valid(max9768->mute_gpio)) {
|
if (max9768->mute) {
|
||||||
ret = snd_soc_add_component_controls(component, max9768_mute,
|
ret = snd_soc_add_component_controls(component, max9768_mute,
|
||||||
ARRAY_SIZE(max9768_mute));
|
ARRAY_SIZE(max9768_mute));
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -171,28 +171,29 @@ static int max9768_i2c_probe(struct i2c_client *client)
|
|||||||
{
|
{
|
||||||
struct max9768 *max9768;
|
struct max9768 *max9768;
|
||||||
struct max9768_pdata *pdata = client->dev.platform_data;
|
struct max9768_pdata *pdata = client->dev.platform_data;
|
||||||
int err;
|
|
||||||
|
|
||||||
max9768 = devm_kzalloc(&client->dev, sizeof(*max9768), GFP_KERNEL);
|
max9768 = devm_kzalloc(&client->dev, sizeof(*max9768), GFP_KERNEL);
|
||||||
if (!max9768)
|
if (!max9768)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
if (pdata) {
|
/* Mute on powerup to avoid clicks */
|
||||||
/* Mute on powerup to avoid clicks */
|
max9768->mute = devm_gpiod_get_optional(&client->dev,
|
||||||
err = devm_gpio_request_one(&client->dev, pdata->mute_gpio,
|
"mute",
|
||||||
GPIOF_INIT_HIGH, "MAX9768 Mute");
|
GPIOD_OUT_HIGH);
|
||||||
max9768->mute_gpio = err ?: pdata->mute_gpio;
|
if (IS_ERR(max9768->mute))
|
||||||
|
return PTR_ERR(max9768->mute);
|
||||||
|
gpiod_set_consumer_name(max9768->mute, "MAX9768 Mute");
|
||||||
|
|
||||||
/* Activate chip by releasing shutdown, enables I2C */
|
/* Activate chip by releasing shutdown, enables I2C */
|
||||||
err = devm_gpio_request_one(&client->dev, pdata->shdn_gpio,
|
max9768->shdn = devm_gpiod_get_optional(&client->dev,
|
||||||
GPIOF_INIT_HIGH, "MAX9768 Shutdown");
|
"shutdown",
|
||||||
max9768->shdn_gpio = err ?: pdata->shdn_gpio;
|
GPIOD_OUT_HIGH);
|
||||||
|
if (IS_ERR(max9768->shdn))
|
||||||
|
return PTR_ERR(max9768->shdn);
|
||||||
|
gpiod_set_consumer_name(max9768->shdn, "MAX9768 Shutdown");
|
||||||
|
|
||||||
|
if (pdata)
|
||||||
max9768->flags = pdata->flags;
|
max9768->flags = pdata->flags;
|
||||||
} else {
|
|
||||||
max9768->shdn_gpio = -EINVAL;
|
|
||||||
max9768->mute_gpio = -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
i2c_set_clientdata(client, max9768);
|
i2c_set_clientdata(client, max9768);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user