Merge remote-tracking branches 'asoc/topic/ts3a227e', 'asoc/topic/ts3a277e' and 'asoc/topic/txx9' into asoc-next
This commit is contained in:
commit
1525da06ff
|
@ -13,6 +13,11 @@ Required properties:
|
||||||
- interrupt-parent: The parent interrupt controller
|
- interrupt-parent: The parent interrupt controller
|
||||||
- interrupts: Interrupt number for /INT pin from the 227e
|
- interrupts: Interrupt number for /INT pin from the 227e
|
||||||
|
|
||||||
|
Optional properies:
|
||||||
|
- ti,micbias: Intended MICBIAS voltage (datasheet section 9.6.7).
|
||||||
|
Select 0/1/2/3/4/5/6/7 to specify MACBIAS voltage
|
||||||
|
2.1V/2.2V/2.3V/2.4V/2.5V/2.6V/2.7V/2.8V
|
||||||
|
Default value is "1" (2.2V).
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#include <sound/jack.h>
|
#include <sound/jack.h>
|
||||||
#include <sound/soc.h>
|
#include <sound/soc.h>
|
||||||
|
|
||||||
|
#include "ts3a227e.h"
|
||||||
|
|
||||||
struct ts3a227e {
|
struct ts3a227e {
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
struct snd_soc_jack *jack;
|
struct snd_soc_jack *jack;
|
||||||
|
@ -79,6 +81,10 @@ static const int ts3a227e_buttons[] = {
|
||||||
/* TS3A227E_REG_SETTING_2 0x05 */
|
/* TS3A227E_REG_SETTING_2 0x05 */
|
||||||
#define KP_ENABLE 0x04
|
#define KP_ENABLE 0x04
|
||||||
|
|
||||||
|
/* TS3A227E_REG_SETTING_3 0x06 */
|
||||||
|
#define MICBIAS_SETTING_SFT (3)
|
||||||
|
#define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT)
|
||||||
|
|
||||||
/* TS3A227E_REG_ACCESSORY_STATUS 0x0b */
|
/* TS3A227E_REG_ACCESSORY_STATUS 0x0b */
|
||||||
#define TYPE_3_POLE 0x01
|
#define TYPE_3_POLE 0x01
|
||||||
#define TYPE_4_POLE_OMTP 0x02
|
#define TYPE_4_POLE_OMTP 0x02
|
||||||
|
@ -221,9 +227,9 @@ int ts3a227e_enable_jack_detect(struct snd_soc_component *component,
|
||||||
struct ts3a227e *ts3a227e = snd_soc_component_get_drvdata(component);
|
struct ts3a227e *ts3a227e = snd_soc_component_get_drvdata(component);
|
||||||
|
|
||||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_MEDIA);
|
snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_MEDIA);
|
||||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP);
|
snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND);
|
||||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN);
|
snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
|
||||||
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND);
|
snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
|
||||||
|
|
||||||
ts3a227e->jack = jack;
|
ts3a227e->jack = jack;
|
||||||
ts3a227e_jack_report(ts3a227e);
|
ts3a227e_jack_report(ts3a227e);
|
||||||
|
@ -248,6 +254,21 @@ static const struct regmap_config ts3a227e_regmap_config = {
|
||||||
.num_reg_defaults = ARRAY_SIZE(ts3a227e_reg_defaults),
|
.num_reg_defaults = ARRAY_SIZE(ts3a227e_reg_defaults),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int ts3a227e_parse_dt(struct ts3a227e *ts3a227e, struct device_node *np)
|
||||||
|
{
|
||||||
|
u32 micbias;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = of_property_read_u32(np, "ti,micbias", &micbias);
|
||||||
|
if (!err) {
|
||||||
|
regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3,
|
||||||
|
MICBIAS_SETTING_MASK,
|
||||||
|
(micbias & 0x07) << MICBIAS_SETTING_SFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ts3a227e_i2c_probe(struct i2c_client *i2c,
|
static int ts3a227e_i2c_probe(struct i2c_client *i2c,
|
||||||
const struct i2c_device_id *id)
|
const struct i2c_device_id *id)
|
||||||
{
|
{
|
||||||
|
@ -266,6 +287,14 @@ static int ts3a227e_i2c_probe(struct i2c_client *i2c,
|
||||||
if (IS_ERR(ts3a227e->regmap))
|
if (IS_ERR(ts3a227e->regmap))
|
||||||
return PTR_ERR(ts3a227e->regmap);
|
return PTR_ERR(ts3a227e->regmap);
|
||||||
|
|
||||||
|
if (dev->of_node) {
|
||||||
|
ret = ts3a227e_parse_dt(ts3a227e, dev->of_node);
|
||||||
|
if (ret) {
|
||||||
|
dev_err(dev, "Failed to parse device tree: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret = devm_request_threaded_irq(dev, i2c->irq, NULL, ts3a227e_interrupt,
|
ret = devm_request_threaded_irq(dev, i2c->irq, NULL, ts3a227e_interrupt,
|
||||||
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
|
IRQF_TRIGGER_LOW | IRQF_ONESHOT,
|
||||||
"TS3A227E", ts3a227e);
|
"TS3A227E", ts3a227e);
|
||||||
|
|
|
@ -282,11 +282,6 @@ static struct snd_pcm_ops txx9aclc_pcm_ops = {
|
||||||
.pointer = txx9aclc_pcm_pointer,
|
.pointer = txx9aclc_pcm_pointer,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void txx9aclc_pcm_free_dma_buffers(struct snd_pcm *pcm)
|
|
||||||
{
|
|
||||||
snd_pcm_lib_preallocate_free_for_all(pcm);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int txx9aclc_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
static int txx9aclc_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
||||||
{
|
{
|
||||||
struct snd_card *card = rtd->card->snd_card;
|
struct snd_card *card = rtd->card->snd_card;
|
||||||
|
@ -412,7 +407,6 @@ static struct snd_soc_platform_driver txx9aclc_soc_platform = {
|
||||||
.remove = txx9aclc_pcm_remove,
|
.remove = txx9aclc_pcm_remove,
|
||||||
.ops = &txx9aclc_pcm_ops,
|
.ops = &txx9aclc_pcm_ops,
|
||||||
.pcm_new = txx9aclc_pcm_new,
|
.pcm_new = txx9aclc_pcm_new,
|
||||||
.pcm_free = txx9aclc_pcm_free_dma_buffers,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int txx9aclc_soc_platform_probe(struct platform_device *pdev)
|
static int txx9aclc_soc_platform_probe(struct platform_device *pdev)
|
||||||
|
|
Loading…
Reference in New Issue