Merge "ARM: dts: msm: Add DATA2 smd device node for msm8937"
diff --git a/arch/arm64/boot/dts/qcom/msm8937.dtsi b/arch/arm64/boot/dts/qcom/msm8937.dtsi
index ce004e6..09890bb 100644
--- a/arch/arm64/boot/dts/qcom/msm8937.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8937.dtsi
@@ -1110,6 +1110,12 @@
qcom,smdpkt-dev-name = "smdcntl8";
};
+ qcom,smdpkt-data2 {
+ qcom,smdpkt-remote = "modem";
+ qcom,smdpkt-port-name = "DATA2";
+ qcom,smdpkt-dev-name = "at_mdm0";
+ };
+
qcom,smdpkt-apr-apps2 {
qcom,smdpkt-remote = "adsp";
qcom,smdpkt-port-name = "apr_apps2";
diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi b/arch/arm64/boot/dts/qcom/msm8953.dtsi
index c09e5cd..978d432 100644
--- a/arch/arm64/boot/dts/qcom/msm8953.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi
@@ -1163,6 +1163,12 @@
qcom,smdpkt-dev-name = "smdcntl8";
};
+ qcom,smdpkt-data2 {
+ qcom,smdpkt-remote = "modem";
+ qcom,smdpkt-port-name = "DATA2";
+ qcom,smdpkt-dev-name = "at_mdm0";
+ };
+
qcom,smdpkt-apr-apps2 {
qcom,smdpkt-remote = "adsp";
qcom,smdpkt-port-name = "apr_apps2";
diff --git a/drivers/char/msm_smd_pkt.c b/drivers/char/msm_smd_pkt.c
index ff77cb2..c93c1da 100644
--- a/drivers/char/msm_smd_pkt.c
+++ b/drivers/char/msm_smd_pkt.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2008-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -76,6 +76,8 @@
struct work_struct packet_arrival_work;
spinlock_t pa_spinlock;
int ws_locked;
+
+ int sigs_updated;
};
@@ -356,9 +358,12 @@
mutex_lock(&smd_pkt_devp->ch_lock);
switch (cmd) {
case TIOCMGET:
- D_STATUS("%s TIOCMGET command on smd_pkt_dev id:%d\n",
- __func__, smd_pkt_devp->i);
+ smd_pkt_devp->sigs_updated = false;
ret = smd_tiocmget(smd_pkt_devp->ch);
+ D_STATUS("%s TIOCMGET command on smd_pkt_dev id:%d [%d]\n",
+ __func__, smd_pkt_devp->i, ret);
+ if (ret > 0)
+ ret = put_user((uint32_t)ret, (uint32_t __user *)arg);
break;
case TIOCMSET:
ret = get_user(val, (uint32_t *)arg);
@@ -668,6 +673,12 @@
D_POLL("%s sets POLLIN for smd_pkt_dev id: %d\n",
__func__, smd_pkt_devp->i);
}
+
+ if (smd_pkt_devp->sigs_updated) {
+ mask |= POLLPRI;
+ D_POLL("%s sets POLLPRI for smd_pkt_dev id: %d\n",
+ __func__, smd_pkt_devp->i);
+ }
mutex_unlock(&smd_pkt_devp->ch_lock);
return mask;
@@ -773,6 +784,9 @@
schedule_delayed_work(&loopback_work,
msecs_to_jiffies(1000));
break;
+ case SMD_EVENT_STATUS:
+ smd_pkt_devp->sigs_updated = true;
+ break;
}
}
@@ -1099,6 +1113,7 @@
smd_pkt_devp->ws_locked = 0;
}
spin_unlock_irqrestore(&smd_pkt_devp->pa_spinlock, flags);
+ smd_pkt_devp->sigs_updated = false;
}
mutex_unlock(&smd_pkt_devp->tx_lock);
mutex_unlock(&smd_pkt_devp->rx_lock);