summaryrefslogtreecommitdiff
path: root/sys/src/9/imx8
diff options
context:
space:
mode:
authorSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2022-08-20 03:55:28 +0000
committerSigrid Solveig Haflínudóttir <sigrid@ftrv.se>2022-08-20 03:55:28 +0000
commit7951f2d29c143cf7bfe06a56539459f5360c2ef7 (patch)
tree6b4f1dcc16395eab3cec9908a6289c90e2c1af41 /sys/src/9/imx8
parent5dd6ca6bccb98562b3490acd4201bc092bdeeeae (diff)
imx8/sai, aux/wm8960: expose jack detect status in #A/audiostat
Diffstat (limited to 'sys/src/9/imx8')
-rw-r--r--sys/src/9/imx8/sai.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/sys/src/9/imx8/sai.c b/sys/src/9/imx8/sai.c
index 0e5a35d15..639584cac 100644
--- a/sys/src/9/imx8/sai.c
+++ b/sys/src/9/imx8/sai.c
@@ -67,6 +67,7 @@ struct Ring {
struct Ctlr {
u32int *reg;
Audio *adev;
+ int hp;
Ring w;
int wactive;
@@ -354,6 +355,7 @@ saistatus(Audio *adev, void *a, long n, vlong)
(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 @@ saibuffered(Audio *adev)
return buffered(&ctlr->w);
}
+static void
+jacksense(uint pin, void *a)
+{
+ Ctlr *ctlr = a;
+
+ ctlr->hp = gpioin(pin);
+}
+
static int
saiprobe(Audio *adev)
{
@@ -390,9 +400,10 @@ saiprobe(Audio *adev)
adev->status = saistatus;
adev->ctl = saictl;
- saireset(ctlr);
-
intrenable(IRQsai2, saiinterrupt, ctlr, BUSUNKNOWN, "sai2");
+ ctlr->hp = gpioin(GPIO_PIN(4, 21));
+ gpiointrenable(GPIO_PIN(4, 21), GpioEdge, jacksense, ctlr);
+ saireset(ctlr);
return 0;
}
@@ -400,15 +411,14 @@ saiprobe(Audio *adev)
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");
-
- setclkgate("sai2.ipg_clk", 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");
+
setclkrate("sai2.ipg_clk", "audio_pll1_clk", 25*Mhz);
setclkgate("sai2.ipg_clk", 1);