Commit 39552d7a authored by Anatol Pomozov's avatar Anatol Pomozov Committed by Mark Brown

ASoC: ts3a227e: Add dts property that allows to specify micbias voltage

The voltage controls key press threshold.
Signed-off-by: default avatarAnatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent ddf9ea21
...@@ -13,6 +13,11 @@ Required properties: ...@@ -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:
......
...@@ -79,6 +79,10 @@ static const int ts3a227e_buttons[] = { ...@@ -79,6 +79,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
...@@ -248,6 +252,21 @@ static const struct regmap_config ts3a227e_regmap_config = { ...@@ -248,6 +252,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)
{ {
...@@ -265,6 +284,14 @@ static int ts3a227e_i2c_probe(struct i2c_client *i2c, ...@@ -265,6 +284,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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment