Add set_jack and get_jack_type to allow simple-card-utils to add a jack for it. Add a devicetree entry jack-type of type snd_jack_type, in case not all input types are required. Signed-off-by: Astrid Rost <astrid.rost@xxxxxxxx> --- sound/soc/codecs/ts3a227e.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/ts3a227e.c b/sound/soc/codecs/ts3a227e.c index 2305a472d132..432a327c6eb7 100644 --- a/sound/soc/codecs/ts3a227e.c +++ b/sound/soc/codecs/ts3a227e.c @@ -28,6 +28,7 @@ struct ts3a227e { bool mic_present; unsigned int buttons_held; int irq; + int jack_type; }; /* Button values to be reported on the jack */ @@ -258,7 +259,27 @@ int ts3a227e_enable_jack_detect(struct snd_soc_component *component, } EXPORT_SYMBOL_GPL(ts3a227e_enable_jack_detect); -static struct snd_soc_component_driver ts3a227e_soc_driver; +static int ts3a227e_set_jack(struct snd_soc_component *component, + struct snd_soc_jack *jack, void *data) +{ + if (jack == NULL) + return -EINVAL; + + return ts3a227e_enable_jack_detect(component, jack); +} + +static int ts3a227e_get_jack_type(struct snd_soc_component *component) +{ + struct ts3a227e *ts3a227e = snd_soc_component_get_drvdata(component); + + return ts3a227e->jack_type; +} + +static const struct snd_soc_component_driver ts3a227e_soc_driver = { + .name = "ti,ts3a227e", + .set_jack = ts3a227e_set_jack, + .get_jack_type = ts3a227e_get_jack_type, +}; static const struct regmap_config ts3a227e_regmap_config = { .val_bits = 8, @@ -283,6 +304,12 @@ static int ts3a227e_parse_device_property(struct ts3a227e *ts3a227e, u32 setting3_mask = 0; int err; + err = device_property_read_u32(dev, "jack-type", &value); + if (!err) + ts3a227e->jack_type = value & SND_JACK_HEADSET; + else + ts3a227e->jack_type = SND_JACK_HEADSET; + err = device_property_read_u32(dev, "ti,micbias", &value); if (!err) { setting3_mask = MICBIAS_SETTING_MASK; -- 2.30.2