Skip to content

Commit 701ab7e

Browse files
authored
Merge pull request #127 from clamor-s/patch
Update sound routing and convert tegra gpio
2 parents b7e8027 + 9fa9353 commit 701ab7e

10 files changed

+74
-31
lines changed

arch/arm/boot/dts/tegra20-asus-tf101.dts

+5-3
Original file line numberDiff line numberDiff line change
@@ -1230,15 +1230,17 @@
12301230
"Int Spk", "RON",
12311231
"Int Spk", "LOP",
12321232
"Int Spk", "LON",
1233-
"Mic Jack", "MICBIAS",
1234-
"IN1L", "Mic Jack";
1233+
"IN1L", "Headset Mic",
1234+
"IN2L", "Headset Mic",
1235+
"DMICDAT", "Int Mic";
12351236

12361237
nvidia,i2s-controller = <&tegra_i2s1>;
12371238
nvidia,audio-codec = <&wm8903>;
12381239

12391240
nvidia,spkr-en-gpios = <&wm8903 2 GPIO_ACTIVE_HIGH>;
12401241
nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>;
1241-
nvidia,headset;
1242+
nvidia,mic-det-gpios = <&gpio TEGRA_GPIO(X, 1) GPIO_ACTIVE_HIGH>;
1243+
nvidia,coupled-mic-hp-det;
12421244

12431245
clocks = <&tegra_car TEGRA20_CLK_PLL_A>,
12441246
<&tegra_car TEGRA20_CLK_PLL_A_OUT0>,

arch/arm/boot/dts/tegra30-asus-tf201.dts

+1-1
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@
660660
"Int Spk", "SPOL",
661661
"Int Spk", "SPOR",
662662
"MIC1", "MIC Bias1",
663-
"MIC Bias1", "Mic Jack",
663+
"MIC Bias1", "Headset Mic",
664664
"DMIC", "Int Mic";
665665

666666
nvidia,audio-codec = <&rt5631>;

arch/arm/boot/dts/tegra30-asus-tf300t.dts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1054,13 +1054,12 @@
10541054
"Int Spk", "RON",
10551055
"Int Spk", "LOP",
10561056
"Int Spk", "LON",
1057-
"IN1L", "Mic Jack",
1058-
"IN2L", "Mic Jack",
1057+
"IN1L", "Headset Mic",
1058+
"IN2L", "Headset Mic",
10591059
"DMICDAT", "Int Mic";
10601060

10611061
nvidia,audio-codec = <&wm8903>;
10621062
nvidia,spkr-en-gpios = <&wm8903 2 GPIO_ACTIVE_HIGH>;
1063-
nvidia,headset;
10641063
};
10651064
};
10661065

arch/arm/boot/dts/tegra30-asus-tf300tg.dts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@
11171117
"Int Spk", "SPOL",
11181118
"Int Spk", "SPOR",
11191119
"MIC1", "MIC Bias1",
1120-
"MIC Bias1", "Mic Jack",
1120+
"MIC Bias1", "Headset Mic",
11211121
"DMIC", "Int Mic";
11221122

11231123
nvidia,audio-codec = <&rt5631>;

arch/arm/boot/dts/tegra30-asus-tf300tl.dts

+1-1
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@
859859
"Int Spk", "SPOL",
860860
"Int Spk", "SPOR",
861861
"MIC1", "MIC Bias1",
862-
"MIC Bias1", "Mic Jack",
862+
"MIC Bias1", "Headset Mic",
863863
"DMIC", "Int Mic";
864864

865865
nvidia,audio-codec = <&rt5631>;

arch/arm/boot/dts/tegra30-asus-tf700t.dts

+1-1
Original file line numberDiff line numberDiff line change
@@ -857,7 +857,7 @@
857857
"Int Spk", "SPOL",
858858
"Int Spk", "SPOR",
859859
"MIC1", "MIC Bias1",
860-
"MIC Bias1", "Mic Jack",
860+
"MIC Bias1", "Headset Mic",
861861
"DMIC", "Int Mic";
862862

863863
nvidia,audio-codec = <&rt5631>;

arch/arm/boot/dts/tegra30-asus-transformer-common.dtsi

+5-4
Original file line numberDiff line numberDiff line change
@@ -550,18 +550,18 @@
550550
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
551551
};
552552

553-
spi2_cs1_n_pw2 {
553+
hp_detect {
554554
nvidia,pins = "spi2_cs1_n_pw2";
555555
nvidia,function = "spi2";
556556
nvidia,pull = <TEGRA_PIN_PULL_UP>;
557557
nvidia,tristate = <TEGRA_PIN_DISABLE>;
558558
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
559559
};
560560

561-
spi2_sck_px2 {
561+
mic_detect {
562562
nvidia,pins = "spi2_sck_px2";
563563
nvidia,function = "spi2";
564-
nvidia,pull = <TEGRA_PIN_PULL_NONE>;
564+
nvidia,pull = <TEGRA_PIN_PULL_UP>;
565565
nvidia,tristate = <TEGRA_PIN_DISABLE>;
566566
nvidia,enable-input = <TEGRA_PIN_ENABLE>;
567567
};
@@ -1727,7 +1727,8 @@
17271727
nvidia,i2s-controller = <&tegra_i2s1>;
17281728

17291729
nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(W, 2) GPIO_ACTIVE_LOW>;
1730-
nvidia,hp-mute-gpios = <&gpio TEGRA_GPIO(X, 2) GPIO_ACTIVE_LOW>;
1730+
nvidia,mic-det-gpios = <&gpio TEGRA_GPIO(X, 2) GPIO_ACTIVE_LOW>;
1731+
nvidia,coupled-mic-hp-det;
17311732

17321733
clocks = <&tegra_car TEGRA30_CLK_PLL_A>,
17331734
<&tegra_car TEGRA30_CLK_PLL_A_OUT0>,

arch/arm/boot/dts/tegra30-pegatron-chagall.dts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2776,7 +2776,7 @@
27762776
"Int Spk", "RON",
27772777
"Int Spk", "LOP",
27782778
"Int Spk", "LON",
2779-
"IN1R", "Mic Jack",
2779+
"IN1R", "Headset Mic",
27802780
"DMICDAT", "Int Mic";
27812781

27822782
nvidia,i2s-controller = <&tegra_i2s1>;

drivers/gpio/gpio-tegra.c

+40-16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <linux/of_device.h>
1919
#include <linux/platform_device.h>
2020
#include <linux/module.h>
21+
#include <linux/seq_file.h>
2122
#include <linux/irqdomain.h>
2223
#include <linux/irqchip/chained_irq.h>
2324
#include <linux/pinctrl/consumer.h>
@@ -94,7 +95,6 @@ struct tegra_gpio_info {
9495
struct tegra_gpio_bank *bank_info;
9596
const struct tegra_gpio_soc_config *soc;
9697
struct gpio_chip gc;
97-
struct irq_chip ic;
9898
u32 bank_count;
9999
unsigned int *irqs;
100100
};
@@ -288,6 +288,7 @@ static void tegra_gpio_irq_mask(struct irq_data *d)
288288
unsigned int gpio = d->hwirq;
289289

290290
tegra_gpio_mask_write(tgi, GPIO_MSK_INT_ENB(tgi, gpio), gpio, 0);
291+
gpiochip_disable_irq(chip, gpio);
291292
}
292293

293294
static void tegra_gpio_irq_unmask(struct irq_data *d)
@@ -296,6 +297,7 @@ static void tegra_gpio_irq_unmask(struct irq_data *d)
296297
struct tegra_gpio_info *tgi = gpiochip_get_data(chip);
297298
unsigned int gpio = d->hwirq;
298299

300+
gpiochip_enable_irq(chip, gpio);
299301
tegra_gpio_mask_write(tgi, GPIO_MSK_INT_ENB(tgi, gpio), gpio, 1);
300302
}
301303

@@ -598,10 +600,43 @@ static void tegra_gpio_irq_release_resources(struct irq_data *d)
598600
tegra_gpio_enable(tgi, d->hwirq);
599601
}
600602

603+
static void tegra_gpio_irq_print_chip(struct irq_data *d, struct seq_file *s)
604+
{
605+
struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
606+
607+
seq_printf(s, dev_name(chip->parent));
608+
}
609+
610+
static const struct irq_chip tegra_gpio_irq_chip = {
611+
.irq_shutdown = tegra_gpio_irq_shutdown,
612+
.irq_ack = tegra_gpio_irq_ack,
613+
.irq_mask = tegra_gpio_irq_mask,
614+
.irq_unmask = tegra_gpio_irq_unmask,
615+
.irq_set_type = tegra_gpio_irq_set_type,
616+
.irq_set_wake = pm_sleep_ptr(tegra_gpio_irq_set_wake),
617+
.irq_print_chip = tegra_gpio_irq_print_chip,
618+
.irq_request_resources = tegra_gpio_irq_request_resources,
619+
.irq_release_resources = tegra_gpio_irq_release_resources,
620+
.flags = IRQCHIP_IMMUTABLE,
621+
};
622+
623+
static const struct irq_chip tegra210_gpio_irq_chip = {
624+
.irq_shutdown = tegra_gpio_irq_shutdown,
625+
.irq_ack = tegra_gpio_irq_ack,
626+
.irq_mask = tegra_gpio_irq_mask,
627+
.irq_unmask = tegra_gpio_irq_unmask,
628+
.irq_set_affinity = tegra_gpio_irq_set_affinity,
629+
.irq_set_type = tegra_gpio_irq_set_type,
630+
.irq_set_wake = pm_sleep_ptr(tegra_gpio_irq_set_wake),
631+
.irq_print_chip = tegra_gpio_irq_print_chip,
632+
.irq_request_resources = tegra_gpio_irq_request_resources,
633+
.irq_release_resources = tegra_gpio_irq_release_resources,
634+
.flags = IRQCHIP_IMMUTABLE,
635+
};
636+
601637
#ifdef CONFIG_DEBUG_FS
602638

603639
#include <linux/debugfs.h>
604-
#include <linux/seq_file.h>
605640

606641
static int tegra_dbg_gpio_show(struct seq_file *s, void *unused)
607642
{
@@ -689,18 +724,6 @@ static int tegra_gpio_probe(struct platform_device *pdev)
689724
tgi->gc.ngpio = tgi->bank_count * 32;
690725
tgi->gc.parent = &pdev->dev;
691726

692-
tgi->ic.name = "GPIO";
693-
tgi->ic.irq_ack = tegra_gpio_irq_ack;
694-
tgi->ic.irq_mask = tegra_gpio_irq_mask;
695-
tgi->ic.irq_unmask = tegra_gpio_irq_unmask;
696-
tgi->ic.irq_set_type = tegra_gpio_irq_set_type;
697-
tgi->ic.irq_shutdown = tegra_gpio_irq_shutdown;
698-
#ifdef CONFIG_PM_SLEEP
699-
tgi->ic.irq_set_wake = tegra_gpio_irq_set_wake;
700-
#endif
701-
tgi->ic.irq_request_resources = tegra_gpio_irq_request_resources;
702-
tgi->ic.irq_release_resources = tegra_gpio_irq_release_resources;
703-
704727
platform_set_drvdata(pdev, tgi);
705728

706729
if (tgi->soc->debounce_supported)
@@ -733,7 +756,6 @@ static int tegra_gpio_probe(struct platform_device *pdev)
733756
}
734757

735758
irq = &tgi->gc.irq;
736-
irq->chip = &tgi->ic;
737759
irq->fwnode = of_node_to_fwnode(pdev->dev.of_node);
738760
irq->child_to_parent_hwirq = tegra_gpio_child_to_parent_hwirq;
739761
irq->populate_parent_alloc_arg = tegra_gpio_populate_parent_fwspec;
@@ -752,7 +774,9 @@ static int tegra_gpio_probe(struct platform_device *pdev)
752774
if (!irq->parent_domain)
753775
return -EPROBE_DEFER;
754776

755-
tgi->ic.irq_set_affinity = tegra_gpio_irq_set_affinity;
777+
gpio_irq_chip_set_chip(irq, &tegra210_gpio_irq_chip);
778+
} else {
779+
gpio_irq_chip_set_chip(irq, &tegra_gpio_irq_chip);
756780
}
757781

758782
tgi->regs = devm_platform_ioremap_resource(pdev, 0);

sound/soc/tegra/tegra_asoc_machine.c

+17
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,17 @@ static struct snd_soc_jack_gpio tegra_machine_headset_jack_gpio = {
5151
};
5252

5353
/* Mic Jack */
54+
static int headset_check(void *data)
55+
{
56+
struct tegra_machine *machine = (struct tegra_machine *) data;
57+
58+
/* Detect mic insertion only if 3.5 jack is in */
59+
if (gpiod_get_value_cansleep(machine->gpiod_hp_det) &&
60+
gpiod_get_value_cansleep(machine->gpiod_mic_det))
61+
return SND_JACK_MICROPHONE;
62+
63+
return 0;
64+
}
5465

5566
static struct snd_soc_jack tegra_machine_mic_jack;
5667

@@ -189,8 +200,13 @@ int tegra_asoc_machine_init(struct snd_soc_pcm_runtime *rtd)
189200
return err;
190201
}
191202

203+
tegra_machine_mic_jack_gpio.data = machine;
192204
tegra_machine_mic_jack_gpio.desc = machine->gpiod_mic_det;
193205

206+
if (of_property_read_bool(card->dev->of_node,
207+
"nvidia,coupled-mic-hp-det"))
208+
tegra_machine_mic_jack_gpio.jack_status_check = headset_check;
209+
194210
err = snd_soc_jack_add_gpios(&tegra_machine_mic_jack, 1,
195211
&tegra_machine_mic_jack_gpio);
196212
if (err)
@@ -960,6 +976,7 @@ static const struct tegra_asoc_data tegra_rt5631_data = {
960976
.add_common_dapm_widgets = true,
961977
.add_common_controls = true,
962978
.add_common_snd_ops = true,
979+
.add_mic_jack = true,
963980
.add_hp_jack = true,
964981
};
965982

0 commit comments

Comments
 (0)