Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

The voltage controls key press threshold.

Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Anatol Pomozov and committed by
Mark Brown
39552d7a ddf9ea21

+32
+5
Documentation/devicetree/bindings/sound/ts3a227e.txt
··· 13 13 - interrupt-parent: The parent interrupt controller 14 14 - interrupts: Interrupt number for /INT pin from the 227e 15 15 16 + Optional properies: 17 + - ti,micbias: Intended MICBIAS voltage (datasheet section 9.6.7). 18 + Select 0/1/2/3/4/5/6/7 to specify MACBIAS voltage 19 + 2.1V/2.2V/2.3V/2.4V/2.5V/2.6V/2.7V/2.8V 20 + Default value is "1" (2.2V). 16 21 17 22 Examples: 18 23
+27
sound/soc/codecs/ts3a227e.c
··· 79 79 /* TS3A227E_REG_SETTING_2 0x05 */ 80 80 #define KP_ENABLE 0x04 81 81 82 + /* TS3A227E_REG_SETTING_3 0x06 */ 83 + #define MICBIAS_SETTING_SFT (3) 84 + #define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT) 85 + 82 86 /* TS3A227E_REG_ACCESSORY_STATUS 0x0b */ 83 87 #define TYPE_3_POLE 0x01 84 88 #define TYPE_4_POLE_OMTP 0x02 ··· 252 248 .num_reg_defaults = ARRAY_SIZE(ts3a227e_reg_defaults), 253 249 }; 254 250 251 + static int ts3a227e_parse_dt(struct ts3a227e *ts3a227e, struct device_node *np) 252 + { 253 + u32 micbias; 254 + int err; 255 + 256 + err = of_property_read_u32(np, "ti,micbias", &micbias); 257 + if (!err) { 258 + regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3, 259 + MICBIAS_SETTING_MASK, 260 + (micbias & 0x07) << MICBIAS_SETTING_SFT); 261 + } 262 + 263 + return 0; 264 + } 265 + 255 266 static int ts3a227e_i2c_probe(struct i2c_client *i2c, 256 267 const struct i2c_device_id *id) 257 268 { ··· 283 264 ts3a227e->regmap = devm_regmap_init_i2c(i2c, &ts3a227e_regmap_config); 284 265 if (IS_ERR(ts3a227e->regmap)) 285 266 return PTR_ERR(ts3a227e->regmap); 267 + 268 + if (dev->of_node) { 269 + ret = ts3a227e_parse_dt(ts3a227e, dev->of_node); 270 + if (ret) { 271 + dev_err(dev, "Failed to parse device tree: %d\n", ret); 272 + return ret; 273 + } 274 + } 286 275 287 276 ret = devm_request_threaded_irq(dev, i2c->irq, NULL, ts3a227e_interrupt, 288 277 IRQF_TRIGGER_LOW | IRQF_ONESHOT,