msm: sysmon: Add support for second USB HSIC modem
Add support for a secondary instance of an external modem over
the USB/HSIC transport.
Change-Id: I1891ccc14279dfcbcf5e3555a6d42f42049e208a
Signed-off-by: Jack Pham <jackp@codeaurora.org>
diff --git a/arch/arm/mach-msm/sysmon.c b/arch/arm/mach-msm/sysmon.c
index b42658a..610a3bf 100644
--- a/arch/arm/mach-msm/sysmon.c
+++ b/arch/arm/mach-msm/sysmon.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2013, 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
@@ -45,15 +45,17 @@
char rx_buf[RX_BUF_SIZE];
enum transports transport;
struct device *dev;
+ enum hsic_sysmon_device_id hsic_id;
};
static struct sysmon_subsys subsys[SYSMON_NUM_SS] = {
- [SYSMON_SS_MODEM].transport = TRANSPORT_SMD,
- [SYSMON_SS_LPASS].transport = TRANSPORT_SMD,
- [SYSMON_SS_WCNSS].transport = TRANSPORT_SMD,
- [SYSMON_SS_DSPS].transport = TRANSPORT_SMD,
- [SYSMON_SS_Q6FW].transport = TRANSPORT_SMD,
- [SYSMON_SS_EXT_MODEM].transport = TRANSPORT_HSIC,
+ [SYSMON_SS_MODEM].transport = TRANSPORT_SMD,
+ [SYSMON_SS_LPASS].transport = TRANSPORT_SMD,
+ [SYSMON_SS_WCNSS].transport = TRANSPORT_SMD,
+ [SYSMON_SS_DSPS].transport = TRANSPORT_SMD,
+ [SYSMON_SS_Q6FW].transport = TRANSPORT_SMD,
+ [SYSMON_SS_EXT_MODEM].transport = TRANSPORT_HSIC,
+ [SYSMON_SS_EXT_MODEM2].transport = TRANSPORT_HSIC,
};
static const char *notif_name[SUBSYS_NOTIF_TYPE_COUNT] = {
@@ -89,11 +91,10 @@
size_t actual_len;
pr_debug("Sending HSIC message: %s\n", tx_buf);
- ret = hsic_sysmon_write(HSIC_SYSMON_DEV_EXT_MODEM,
- tx_buf, len, TIMEOUT_MS);
+ ret = hsic_sysmon_write(ss->hsic_id, tx_buf, len, TIMEOUT_MS);
if (ret)
return ret;
- ret = hsic_sysmon_read(HSIC_SYSMON_DEV_EXT_MODEM, ss->rx_buf,
+ ret = hsic_sysmon_read(ss->hsic_id, ss->rx_buf,
ARRAY_SIZE(ss->rx_buf), &actual_len, TIMEOUT_MS);
return ret;
}
@@ -302,7 +303,9 @@
if (pdev->id < SMD_NUM_TYPE)
return -EINVAL;
- ret = hsic_sysmon_open(HSIC_SYSMON_DEV_EXT_MODEM);
+ ss->hsic_id = HSIC_SYSMON_DEV_EXT_MODEM +
+ (pdev->id - SYSMON_SS_EXT_MODEM);
+ ret = hsic_sysmon_open(ss->hsic_id);
if (ret) {
pr_err("HSIC open failed\n");
return ret;
@@ -328,7 +331,7 @@
smd_close(ss->chan);
break;
case TRANSPORT_HSIC:
- hsic_sysmon_close(HSIC_SYSMON_DEV_EXT_MODEM);
+ hsic_sysmon_close(ss->hsic_id);
break;
}
mutex_unlock(&ss->lock);
diff --git a/arch/arm/mach-msm/sysmon.h b/arch/arm/mach-msm/sysmon.h
index 3f122cd..59caf0e 100644
--- a/arch/arm/mach-msm/sysmon.h
+++ b/arch/arm/mach-msm/sysmon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2013, 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
@@ -31,6 +31,7 @@
/* Non-SMD subsystems */
SYSMON_SS_EXT_MODEM = SMD_NUM_TYPE,
+ SYSMON_SS_EXT_MODEM2,
SYSMON_NUM_SS
};