summaryrefslogtreecommitdiff
path: root/drivers/char
diff options
context:
space:
mode:
authorAmandeep Singh <amansing@codeaurora.org>2019-05-06 15:40:51 +0530
committerAmandeep Singh <amansing@codeaurora.org>2019-09-03 11:20:14 +0530
commit851aa308b0d9838dbbcb72da0e4c7b9b10051abc (patch)
tree82cdfd05a2c692a4c511dbea6e6c45ffef2416c4 /drivers/char
parent53d7ba42ba09c2910836ec92fc0423d1e36885b8 (diff)
msm: diag: Add SDIO transport in diag
Add support for SDIO transport in diag core framework. Change-Id: Ic3ccfec3acd60b36a96aebb49a5681219a25e643 Signed-off-by: Amandeep Singh <amansing@codeaurora.org>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/diag/Kconfig2
-rw-r--r--drivers/char/diag/Makefile3
-rw-r--r--drivers/char/diag/diagchar_core.c40
-rw-r--r--drivers/char/diag/diagfwd_bridge.c17
-rw-r--r--drivers/char/diag/diagfwd_bridge.h5
5 files changed, 58 insertions, 9 deletions
diff --git a/drivers/char/diag/Kconfig b/drivers/char/diag/Kconfig
index ba629abdd36e..1bcacb8d83dd 100644
--- a/drivers/char/diag/Kconfig
+++ b/drivers/char/diag/Kconfig
@@ -25,7 +25,7 @@ endmenu
menu "HSIC/SMUX support for DIAG"
config DIAGFWD_BRIDGE_CODE
- depends on USB_QCOM_DIAG_BRIDGE || MSM_MHI
+ depends on USB_QCOM_DIAG_BRIDGE || MSM_MHI || QCOM_SDIO_CLIENT
default y
bool "Enable QSC/9K DIAG traffic over SMUX/HSIC"
help
diff --git a/drivers/char/diag/Makefile b/drivers/char/diag/Makefile
index d57ebd8d671e..40c5387998b3 100644
--- a/drivers/char/diag/Makefile
+++ b/drivers/char/diag/Makefile
@@ -1,5 +1,8 @@
obj-$(CONFIG_DIAG_CHAR) := diagchar.o
obj-$(CONFIG_DIAGFWD_BRIDGE_CODE) += diagfwd_bridge.o
+
obj-$(CONFIG_USB_QCOM_DIAG_BRIDGE) += diagfwd_hsic.o
obj-$(CONFIG_MSM_MHI) += diagfwd_mhi.o
+obj-$(CONFIG_QCOM_SDIO_CLIENT) += diagfwd_sdio.o
+
diagchar-objs := diagchar_core.o diagchar_hdlc.o diagfwd.o diagfwd_glink.o diagfwd_peripheral.o diagfwd_smd.o diagfwd_socket.o diag_mux.o diag_memorydevice.o diag_usb.o diagmem.o diagfwd_cntl.o diag_dci.o diag_masks.o diag_debugfs.o
diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c
index bed9ef14ff78..47e0dab9d762 100644
--- a/drivers/char/diag/diagchar_core.c
+++ b/drivers/char/diag/diagchar_core.c
@@ -1161,7 +1161,7 @@ static void diag_remote_exit(void)
return;
}
-int diagfwd_bridge_init(bool use_mhi)
+int diagfwd_bridge_init(int xprt)
{
return 0;
}
@@ -3788,7 +3788,7 @@ static int diag_mhi_probe(struct platform_device *pdev)
diag_remote_exit();
return ret;
}
- ret = diagfwd_bridge_init(true);
+ ret = diagfwd_bridge_init(1);
if (ret) {
diagfwd_bridge_exit();
return ret;
@@ -3821,7 +3821,7 @@ static int diagfwd_usb_probe(struct platform_device *pdev)
diag_remote_exit();
return ret;
}
- ret = diagfwd_bridge_init(false);
+ ret = diagfwd_bridge_init(0);
if (ret) {
diagfwd_bridge_exit();
return ret;
@@ -3844,6 +3844,39 @@ static struct platform_driver diagfwd_usb_driver = {
},
};
+static int diagfwd_sdio_probe(struct platform_device *pdev)
+{
+ int ret;
+
+ driver->pdev = pdev;
+ ret = diag_remote_init();
+ if (ret) {
+ diag_remote_exit();
+ return ret;
+ }
+ ret = diagfwd_bridge_init(2);
+ if (ret) {
+ diagfwd_bridge_exit();
+ return ret;
+ }
+ pr_debug("diag: usb device is ready\n");
+ return 0;
+}
+
+static const struct of_device_id diagfwd_sdio_table[] = {
+ {.compatible = "qcom,diagfwd-sdio"},
+ {},
+};
+
+static struct platform_driver diagfwd_sdio_driver = {
+ .probe = diagfwd_sdio_probe,
+ .driver = {
+ .name = "DIAGFWD SDIO Platform",
+ .owner = THIS_MODULE,
+ .of_match_table = diagfwd_sdio_table,
+ },
+};
+
static int __init diagchar_init(void)
{
dev_t dev;
@@ -3971,6 +4004,7 @@ static int __init diagchar_init(void)
pr_debug("diagchar initialized now");
platform_driver_register(&diag_mhi_driver);
platform_driver_register(&diagfwd_usb_driver);
+ platform_driver_register(&diagfwd_sdio_driver);
return 0;
fail:
diff --git a/drivers/char/diag/diagfwd_bridge.c b/drivers/char/diag/diagfwd_bridge.c
index da24a11903d5..bfe85d9fd19d 100644
--- a/drivers/char/diag/diagfwd_bridge.c
+++ b/drivers/char/diag/diagfwd_bridge.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2019, 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
@@ -22,6 +22,7 @@
#include "diagfwd_bridge.h"
#ifdef CONFIG_USB_QCOM_DIAG_BRIDGE
#include "diagfwd_hsic.h"
+#include "diagfwd_sdio.h"
#endif
#ifdef CONFIG_MSM_MHI
#include "diagfwd_mhi.h"
@@ -42,6 +43,13 @@ static int diag_mhi_init(void)
}
#endif
+#ifndef CONFIG_QCOM_SDIO_CLIENT
+static int diag_sdio_init(void)
+{
+ return -EINVAL;
+}
+#endif
+
#define BRIDGE_TO_MUX(x) (x + DIAG_MUX_BRIDGE_BASE)
struct diagfwd_bridge_info bridge_info[NUM_REMOTE_DEV] = {
@@ -271,14 +279,17 @@ int diag_remote_dev_write_done(int id, unsigned char *buf, int len, int ctxt)
return err;
}
-int diagfwd_bridge_init(bool use_mhi)
+int diagfwd_bridge_init(int xprt)
{
int err = 0;
- if (use_mhi)
+ if (xprt == 1)
err = diag_mhi_init();
+ else if (xprt == 2)
+ err = diag_sdio_init();
else
err = diag_hsic_init();
+
if (err)
goto fail;
return 0;
diff --git a/drivers/char/diag/diagfwd_bridge.h b/drivers/char/diag/diagfwd_bridge.h
index 250ef07b0b04..b595e5300f6d 100644
--- a/drivers/char/diag/diagfwd_bridge.h
+++ b/drivers/char/diag/diagfwd_bridge.h
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012-2014, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2014, 2018-2019, 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
@@ -51,7 +52,7 @@ struct diagfwd_bridge_info {
};
extern struct diagfwd_bridge_info bridge_info[NUM_REMOTE_DEV];
-int diagfwd_bridge_init(bool use_mhi);
+int diagfwd_bridge_init(int xprt);
void diagfwd_bridge_exit(void);
int diagfwd_bridge_close(int id);
int diagfwd_bridge_write(int id, unsigned char *buf, int len);