ref: 7951f2d29c143cf7bfe06a56539459f5360c2ef7
parent: 5dd6ca6bccb98562b3490acd4201bc092bdeeeae
author: Sigrid Solveig Haflínudóttir <[email protected]>
date: Fri Aug 19 23:55:28 EDT 2022
imx8/sai, aux/wm8960: expose jack detect status in #A/audiostat
--- a/sys/src/9/imx8/sai.c
+++ b/sys/src/9/imx8/sai.c
@@ -67,6 +67,7 @@
struct Ctlr {
u32int *reg;
Audio *adev;
+ int hp;
Ring w;
int wactive;
@@ -354,6 +355,7 @@
(v & TCSR_FWF) ? " fifo_warn" : "",
(v & TCSR_FRF) ? " fifo_req" : ""
);
+ s = seprint(s, e, "hp %d\n", ctlr->hp);
return s - (char*)a;
}
@@ -366,6 +368,14 @@
return buffered(&ctlr->w);
}
+static void
+jacksense(uint pin, void *a)
+{
+ Ctlr *ctlr = a;
+
+ ctlr->hp = gpioin(pin);
+}
+
static int
saiprobe(Audio *adev)
{
@@ -390,10 +400,11 @@
adev->status = saistatus;
adev->ctl = saictl;
+ intrenable(IRQsai2, saiinterrupt, ctlr, BUSUNKNOWN, "sai2");
+ ctlr->hp = gpioin(GPIO_PIN(4, 21));
+ gpiointrenable(GPIO_PIN(4, 21), GpioEdge, jacksense, ctlr);
saireset(ctlr);
- intrenable(IRQsai2, saiinterrupt, ctlr, BUSUNKNOWN, "sai2");
-
return 0;
}
@@ -400,15 +411,14 @@
void
sailink(void)
{
- iomuxpad("pad_sai2_rxfs", "sai2_rx_sync", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
- iomuxpad("pad_sai2_rxc", "sai2_rx_bclk", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
- iomuxpad("pad_sai2_rxd0", "sai2_rx_data0", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
- iomuxpad("pad_sai2_txfs", "sai2_tx_sync", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
- iomuxpad("pad_sai2_txc", "sai2_tx_bclk", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
- iomuxpad("pad_sai2_txd0", "sai2_tx_data0", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
- iomuxpad("pad_sai2_mclk", "sai2_mclk", "SION ~LVTTL HYS PUE ~ODE FAST 45_OHM VSEL_0");
+ iomuxpad("pad_sai2_rxfs", "gpio4_io21", "SION ~LVTTL HYS ~PUE ~ODE FAST 45_OHM");
+ iomuxpad("pad_sai2_rxc", "sai2_rx_bclk", "~LVTTL HYS PUE ~ODE FAST 45_OHM");
+ iomuxpad("pad_sai2_rxd0", "sai2_rx_data0", "~LVTTL HYS PUE ~ODE FAST 45_OHM");
+ iomuxpad("pad_sai2_txfs", "sai2_tx_sync", "~LVTTL HYS PUE ~ODE FAST 45_OHM");
+ iomuxpad("pad_sai2_txc", "sai2_tx_bclk", "~LVTTL HYS PUE ~ODE FAST 45_OHM");
+ iomuxpad("pad_sai2_txd0", "sai2_tx_data0", "~LVTTL HYS PUE ~ODE FAST 45_OHM");
+ iomuxpad("pad_sai2_mclk", "sai2_mclk", "~LVTTL HYS PUE ~ODE FAST 45_OHM");
- setclkgate("sai2.ipg_clk", 0);
setclkrate("sai2.ipg_clk", "audio_pll1_clk", 25*Mhz);
setclkgate("sai2.ipg_clk", 1);
--- a/sys/src/cmd/aux/wm8960.c
+++ b/sys/src/cmd/aux/wm8960.c
@@ -192,10 +192,7 @@
wr(0x1c, 1<<3); /* done with anti-pop */
wr(0x19, 1<<7 | 1<<6); /* Vref on */
- /*
- * Debounced jack detect output on gpio - no that it is used, but it
- * could be soldered to SoC's input and actually become useful.
- */
+ wr(0x09, 1<<6); /* adclrc → gpio (for jack detect output) */
wr(0x30, 3<<4 | 2<<2 | 1<<1); /* JD2 jack detect in; Tsense on */
wr(0x1b, 1<<3); /* HP_[LR] responsive to jack detect */
wr(0x18, 1<<6); /* HP switch on; high = HP */