diff options
author | Bjorn Andersson <bjorn.andersson@linaro.org> | 2017-03-28 01:26:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-28 20:58:07 -0400 |
commit | 5052de8deff5619a9b7071f00084fd0264b58e17 (patch) | |
tree | 0e41afc71799e9635d3005b184ae47a5684f428a /net/qrtr | |
parent | def499c929a72ba11b25e26e26e900ba3d5c2762 (diff) |
soc: qcom: smd: Transition client drivers from smd to rpmsg
By moving these client drivers to use RPMSG instead of the direct SMD
API we can reuse them ontop of the newly added GLINK wire-protocol
support found in the 820 and 835 Qualcomm platforms.
As the new (RPMSG-based) and old SMD implementations are mutually
exclusive we have to change all client drivers in one commit, to make
sure we have a working system before and after this transition.
Acked-by: Andy Gross <andy.gross@linaro.org>
Acked-by: Kalle Valo <kvalo@codeaurora.org>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/qrtr')
-rw-r--r-- | net/qrtr/Kconfig | 2 | ||||
-rw-r--r-- | net/qrtr/smd.c | 42 |
2 files changed, 21 insertions, 23 deletions
diff --git a/net/qrtr/Kconfig b/net/qrtr/Kconfig index b83c6807a5ae..326fd97444f5 100644 --- a/net/qrtr/Kconfig +++ b/net/qrtr/Kconfig | |||
@@ -16,7 +16,7 @@ if QRTR | |||
16 | 16 | ||
17 | config QRTR_SMD | 17 | config QRTR_SMD |
18 | tristate "SMD IPC Router channels" | 18 | tristate "SMD IPC Router channels" |
19 | depends on QCOM_SMD || (COMPILE_TEST && QCOM_SMD=n) | 19 | depends on RPMSG || (COMPILE_TEST && RPMSG=n) |
20 | ---help--- | 20 | ---help--- |
21 | Say Y here to support SMD based ipcrouter channels. SMD is the | 21 | Say Y here to support SMD based ipcrouter channels. SMD is the |
22 | most common transport for IPC Router. | 22 | most common transport for IPC Router. |
diff --git a/net/qrtr/smd.c b/net/qrtr/smd.c index 0d11132b3370..50615d5efac1 100644 --- a/net/qrtr/smd.c +++ b/net/qrtr/smd.c | |||
@@ -14,21 +14,21 @@ | |||
14 | 14 | ||
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/skbuff.h> | 16 | #include <linux/skbuff.h> |
17 | #include <linux/soc/qcom/smd.h> | 17 | #include <linux/rpmsg.h> |
18 | 18 | ||
19 | #include "qrtr.h" | 19 | #include "qrtr.h" |
20 | 20 | ||
21 | struct qrtr_smd_dev { | 21 | struct qrtr_smd_dev { |
22 | struct qrtr_endpoint ep; | 22 | struct qrtr_endpoint ep; |
23 | struct qcom_smd_channel *channel; | 23 | struct rpmsg_endpoint *channel; |
24 | struct device *dev; | 24 | struct device *dev; |
25 | }; | 25 | }; |
26 | 26 | ||
27 | /* from smd to qrtr */ | 27 | /* from smd to qrtr */ |
28 | static int qcom_smd_qrtr_callback(struct qcom_smd_channel *channel, | 28 | static int qcom_smd_qrtr_callback(struct rpmsg_device *rpdev, |
29 | const void *data, size_t len) | 29 | void *data, int len, void *priv, u32 addr) |
30 | { | 30 | { |
31 | struct qrtr_smd_dev *qdev = qcom_smd_get_drvdata(channel); | 31 | struct qrtr_smd_dev *qdev = dev_get_drvdata(&rpdev->dev); |
32 | int rc; | 32 | int rc; |
33 | 33 | ||
34 | if (!qdev) | 34 | if (!qdev) |
@@ -54,7 +54,7 @@ static int qcom_smd_qrtr_send(struct qrtr_endpoint *ep, struct sk_buff *skb) | |||
54 | if (rc) | 54 | if (rc) |
55 | goto out; | 55 | goto out; |
56 | 56 | ||
57 | rc = qcom_smd_send(qdev->channel, skb->data, skb->len); | 57 | rc = rpmsg_send(qdev->channel, skb->data, skb->len); |
58 | 58 | ||
59 | out: | 59 | out: |
60 | if (rc) | 60 | if (rc) |
@@ -64,57 +64,55 @@ out: | |||
64 | return rc; | 64 | return rc; |
65 | } | 65 | } |
66 | 66 | ||
67 | static int qcom_smd_qrtr_probe(struct qcom_smd_device *sdev) | 67 | static int qcom_smd_qrtr_probe(struct rpmsg_device *rpdev) |
68 | { | 68 | { |
69 | struct qrtr_smd_dev *qdev; | 69 | struct qrtr_smd_dev *qdev; |
70 | int rc; | 70 | int rc; |
71 | 71 | ||
72 | qdev = devm_kzalloc(&sdev->dev, sizeof(*qdev), GFP_KERNEL); | 72 | qdev = devm_kzalloc(&rpdev->dev, sizeof(*qdev), GFP_KERNEL); |
73 | if (!qdev) | 73 | if (!qdev) |
74 | return -ENOMEM; | 74 | return -ENOMEM; |
75 | 75 | ||
76 | qdev->channel = sdev->channel; | 76 | qdev->channel = rpdev->ept; |
77 | qdev->dev = &sdev->dev; | 77 | qdev->dev = &rpdev->dev; |
78 | qdev->ep.xmit = qcom_smd_qrtr_send; | 78 | qdev->ep.xmit = qcom_smd_qrtr_send; |
79 | 79 | ||
80 | rc = qrtr_endpoint_register(&qdev->ep, QRTR_EP_NID_AUTO); | 80 | rc = qrtr_endpoint_register(&qdev->ep, QRTR_EP_NID_AUTO); |
81 | if (rc) | 81 | if (rc) |
82 | return rc; | 82 | return rc; |
83 | 83 | ||
84 | qcom_smd_set_drvdata(sdev->channel, qdev); | 84 | dev_set_drvdata(&rpdev->dev, qdev); |
85 | dev_set_drvdata(&sdev->dev, qdev); | ||
86 | 85 | ||
87 | dev_dbg(&sdev->dev, "Qualcomm SMD QRTR driver probed\n"); | 86 | dev_dbg(&rpdev->dev, "Qualcomm SMD QRTR driver probed\n"); |
88 | 87 | ||
89 | return 0; | 88 | return 0; |
90 | } | 89 | } |
91 | 90 | ||
92 | static void qcom_smd_qrtr_remove(struct qcom_smd_device *sdev) | 91 | static void qcom_smd_qrtr_remove(struct rpmsg_device *rpdev) |
93 | { | 92 | { |
94 | struct qrtr_smd_dev *qdev = dev_get_drvdata(&sdev->dev); | 93 | struct qrtr_smd_dev *qdev = dev_get_drvdata(&rpdev->dev); |
95 | 94 | ||
96 | qrtr_endpoint_unregister(&qdev->ep); | 95 | qrtr_endpoint_unregister(&qdev->ep); |
97 | 96 | ||
98 | dev_set_drvdata(&sdev->dev, NULL); | 97 | dev_set_drvdata(&rpdev->dev, NULL); |
99 | } | 98 | } |
100 | 99 | ||
101 | static const struct qcom_smd_id qcom_smd_qrtr_smd_match[] = { | 100 | static const struct rpmsg_device_id qcom_smd_qrtr_smd_match[] = { |
102 | { "IPCRTR" }, | 101 | { "IPCRTR" }, |
103 | {} | 102 | {} |
104 | }; | 103 | }; |
105 | 104 | ||
106 | static struct qcom_smd_driver qcom_smd_qrtr_driver = { | 105 | static struct rpmsg_driver qcom_smd_qrtr_driver = { |
107 | .probe = qcom_smd_qrtr_probe, | 106 | .probe = qcom_smd_qrtr_probe, |
108 | .remove = qcom_smd_qrtr_remove, | 107 | .remove = qcom_smd_qrtr_remove, |
109 | .callback = qcom_smd_qrtr_callback, | 108 | .callback = qcom_smd_qrtr_callback, |
110 | .smd_match_table = qcom_smd_qrtr_smd_match, | 109 | .id_table = qcom_smd_qrtr_smd_match, |
111 | .driver = { | 110 | .drv = { |
112 | .name = "qcom_smd_qrtr", | 111 | .name = "qcom_smd_qrtr", |
113 | .owner = THIS_MODULE, | ||
114 | }, | 112 | }, |
115 | }; | 113 | }; |
116 | 114 | ||
117 | module_qcom_smd_driver(qcom_smd_qrtr_driver); | 115 | module_rpmsg_driver(qcom_smd_qrtr_driver); |
118 | 116 | ||
119 | MODULE_DESCRIPTION("Qualcomm IPC-Router SMD interface driver"); | 117 | MODULE_DESCRIPTION("Qualcomm IPC-Router SMD interface driver"); |
120 | MODULE_LICENSE("GPL v2"); | 118 | MODULE_LICENSE("GPL v2"); |