mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 05:24:12 +08:00
ASoC: cs42l42: Add support for set_jack calls
Replace the internal jack creation by set_jack call, so users can map buttons in their machine driver Also only enable jack detection IRQ after set_jack call Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com> Link: https://lore.kernel.org/r/20210426155303.853236-1-tanureal@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
87b42abae9
commit
c26a5289e8
@ -518,26 +518,33 @@ static const struct snd_soc_dapm_route cs42l42_audio_map[] = {
|
||||
{ "SDOUT2", NULL, "ASP TX EN" },
|
||||
};
|
||||
|
||||
static int cs42l42_set_jack(struct snd_soc_component *component, struct snd_soc_jack *jk, void *d)
|
||||
{
|
||||
struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
cs42l42->jack = jk;
|
||||
|
||||
regmap_update_bits(cs42l42->regmap, CS42L42_TSRS_PLUG_INT_MASK,
|
||||
CS42L42_RS_PLUG_MASK | CS42L42_RS_UNPLUG_MASK |
|
||||
CS42L42_TS_PLUG_MASK | CS42L42_TS_UNPLUG_MASK,
|
||||
(1 << CS42L42_RS_PLUG_SHIFT) | (1 << CS42L42_RS_UNPLUG_SHIFT) |
|
||||
(0 << CS42L42_TS_PLUG_SHIFT) | (0 << CS42L42_TS_UNPLUG_SHIFT));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cs42l42_component_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct cs42l42_private *cs42l42 =
|
||||
(struct cs42l42_private *)snd_soc_component_get_drvdata(component);
|
||||
struct snd_soc_card *crd = component->card;
|
||||
int ret = 0;
|
||||
struct cs42l42_private *cs42l42 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
cs42l42->component = component;
|
||||
|
||||
ret = snd_soc_card_jack_new(crd, "CS42L42 Headset", SND_JACK_HEADSET | SND_JACK_BTN_0 |
|
||||
SND_JACK_BTN_1 | SND_JACK_BTN_2 | SND_JACK_BTN_3,
|
||||
&cs42l42->jack, NULL, 0);
|
||||
if (ret < 0)
|
||||
dev_err(component->dev, "Cannot create CS42L42 Headset: %d\n", ret);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct snd_soc_component_driver soc_component_dev_cs42l42 = {
|
||||
.probe = cs42l42_component_probe,
|
||||
.set_jack = cs42l42_set_jack,
|
||||
.dapm_widgets = cs42l42_dapm_widgets,
|
||||
.num_dapm_widgets = ARRAY_SIZE(cs42l42_dapm_widgets),
|
||||
.dapm_routes = cs42l42_audio_map,
|
||||
@ -1410,11 +1417,11 @@ static irqreturn_t cs42l42_irq_thread(int irq, void *data)
|
||||
switch(cs42l42->hs_type){
|
||||
case CS42L42_PLUG_CTIA:
|
||||
case CS42L42_PLUG_OMTP:
|
||||
snd_soc_jack_report(&cs42l42->jack, SND_JACK_HEADSET,
|
||||
snd_soc_jack_report(cs42l42->jack, SND_JACK_HEADSET,
|
||||
SND_JACK_HEADSET);
|
||||
break;
|
||||
case CS42L42_PLUG_HEADPHONE:
|
||||
snd_soc_jack_report(&cs42l42->jack, SND_JACK_HEADPHONE,
|
||||
snd_soc_jack_report(cs42l42->jack, SND_JACK_HEADPHONE,
|
||||
SND_JACK_HEADPHONE);
|
||||
break;
|
||||
default:
|
||||
@ -1442,10 +1449,10 @@ static irqreturn_t cs42l42_irq_thread(int irq, void *data)
|
||||
switch(cs42l42->hs_type){
|
||||
case CS42L42_PLUG_CTIA:
|
||||
case CS42L42_PLUG_OMTP:
|
||||
snd_soc_jack_report(&cs42l42->jack, 0, SND_JACK_HEADSET);
|
||||
snd_soc_jack_report(cs42l42->jack, 0, SND_JACK_HEADSET);
|
||||
break;
|
||||
case CS42L42_PLUG_HEADPHONE:
|
||||
snd_soc_jack_report(&cs42l42->jack, 0, SND_JACK_HEADPHONE);
|
||||
snd_soc_jack_report(cs42l42->jack, 0, SND_JACK_HEADPHONE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -1472,7 +1479,7 @@ static irqreturn_t cs42l42_irq_thread(int irq, void *data)
|
||||
report = cs42l42_handle_button_press(cs42l42);
|
||||
|
||||
}
|
||||
snd_soc_jack_report(&cs42l42->jack, report, SND_JACK_BTN_0 | SND_JACK_BTN_1 |
|
||||
snd_soc_jack_report(cs42l42->jack, report, SND_JACK_BTN_0 | SND_JACK_BTN_1 |
|
||||
SND_JACK_BTN_2 | SND_JACK_BTN_3);
|
||||
}
|
||||
}
|
||||
@ -1579,8 +1586,8 @@ static void cs42l42_set_interrupt_masks(struct cs42l42_private *cs42l42)
|
||||
CS42L42_TS_UNPLUG_MASK,
|
||||
(1 << CS42L42_RS_PLUG_SHIFT) |
|
||||
(1 << CS42L42_RS_UNPLUG_SHIFT) |
|
||||
(0 << CS42L42_TS_PLUG_SHIFT) |
|
||||
(0 << CS42L42_TS_UNPLUG_SHIFT));
|
||||
(1 << CS42L42_TS_PLUG_SHIFT) |
|
||||
(1 << CS42L42_TS_UNPLUG_SHIFT));
|
||||
}
|
||||
|
||||
static void cs42l42_setup_hs_type_detect(struct cs42l42_private *cs42l42)
|
||||
|
@ -773,7 +773,7 @@ struct cs42l42_private {
|
||||
struct regulator_bulk_data supplies[CS42L42_NUM_SUPPLIES];
|
||||
struct gpio_desc *reset_gpio;
|
||||
struct completion pdn_done;
|
||||
struct snd_soc_jack jack;
|
||||
struct snd_soc_jack *jack;
|
||||
int bclk;
|
||||
u32 sclk;
|
||||
u32 srate;
|
||||
|
Loading…
Reference in New Issue
Block a user