diff options
| author | Amandeep Singh <amansing@codeaurora.org> | 2019-05-06 15:40:51 +0530 |
|---|---|---|
| committer | Amandeep Singh <amansing@codeaurora.org> | 2019-09-03 11:20:14 +0530 |
| commit | 851aa308b0d9838dbbcb72da0e4c7b9b10051abc (patch) | |
| tree | 82cdfd05a2c692a4c511dbea6e6c45ffef2416c4 /drivers/char | |
| parent | 53d7ba42ba09c2910836ec92fc0423d1e36885b8 (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/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/char/diag/Makefile | 3 | ||||
| -rw-r--r-- | drivers/char/diag/diagchar_core.c | 40 | ||||
| -rw-r--r-- | drivers/char/diag/diagfwd_bridge.c | 17 | ||||
| -rw-r--r-- | drivers/char/diag/diagfwd_bridge.h | 5 |
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); |
