diff options
Diffstat (limited to 'target/linux/ipq806x/patches-4.4/015-2-thermal-qcom-tsens-8916-Add-support-for-8916-family-of-SoCs.patch')
-rw-r--r-- | target/linux/ipq806x/patches-4.4/015-2-thermal-qcom-tsens-8916-Add-support-for-8916-family-of-SoCs.patch | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/target/linux/ipq806x/patches-4.4/015-2-thermal-qcom-tsens-8916-Add-support-for-8916-family-of-SoCs.patch b/target/linux/ipq806x/patches-4.4/015-2-thermal-qcom-tsens-8916-Add-support-for-8916-family-of-SoCs.patch deleted file mode 100644 index d07619645c..0000000000 --- a/target/linux/ipq806x/patches-4.4/015-2-thermal-qcom-tsens-8916-Add-support-for-8916-family-of-SoCs.patch +++ /dev/null @@ -1,165 +0,0 @@ -From 840a5bd3ed3fdd62456d4d26c3128ec10496555b Mon Sep 17 00:00:00 2001 -From: Rajendra Nayak <rnayak@codeaurora.org> -Date: Thu, 5 May 2016 14:21:40 +0530 -Subject: thermal: qcom: tsens-8916: Add support for 8916 family of SoCs - -Add support to calibrate sensors on 8916 family and also add common -functions to read temperature from sensors (This can be reused on -other SoCs having similar TSENS device) -The calibration data is read from eeprom using the generic nvmem -framework apis. - -Based on the original code by Siddartha Mohanadoss and Stephen Boyd. - -Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> -Signed-off-by: Eduardo Valentin <edubezval@gmail.com> -Signed-off-by: Zhang Rui <rui.zhang@intel.com> ---- - drivers/thermal/qcom/Makefile | 2 +- - drivers/thermal/qcom/tsens-8916.c | 113 ++++++++++++++++++++++++++++++++++++++ - drivers/thermal/qcom/tsens.c | 1 + - drivers/thermal/qcom/tsens.h | 2 + - 4 files changed, 117 insertions(+), 1 deletion(-) - create mode 100644 drivers/thermal/qcom/tsens-8916.c - ---- a/drivers/thermal/qcom/Makefile -+++ b/drivers/thermal/qcom/Makefile -@@ -1,2 +1,2 @@ - obj-$(CONFIG_QCOM_TSENS) += qcom_tsens.o --qcom_tsens-y += tsens.o tsens-common.o -+qcom_tsens-y += tsens.o tsens-common.o tsens-8916.o ---- /dev/null -+++ b/drivers/thermal/qcom/tsens-8916.c -@@ -0,0 +1,113 @@ -+/* -+ * Copyright (c) 2015, 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 -+ * only version 2 as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+ -+#include <linux/platform_device.h> -+#include "tsens.h" -+ -+/* eeprom layout data for 8916 */ -+#define BASE0_MASK 0x0000007f -+#define BASE1_MASK 0xfe000000 -+#define BASE0_SHIFT 0 -+#define BASE1_SHIFT 25 -+ -+#define S0_P1_MASK 0x00000f80 -+#define S1_P1_MASK 0x003e0000 -+#define S2_P1_MASK 0xf8000000 -+#define S3_P1_MASK 0x000003e0 -+#define S4_P1_MASK 0x000f8000 -+ -+#define S0_P2_MASK 0x0001f000 -+#define S1_P2_MASK 0x07c00000 -+#define S2_P2_MASK 0x0000001f -+#define S3_P2_MASK 0x00007c00 -+#define S4_P2_MASK 0x01f00000 -+ -+#define S0_P1_SHIFT 7 -+#define S1_P1_SHIFT 17 -+#define S2_P1_SHIFT 27 -+#define S3_P1_SHIFT 5 -+#define S4_P1_SHIFT 15 -+ -+#define S0_P2_SHIFT 12 -+#define S1_P2_SHIFT 22 -+#define S2_P2_SHIFT 0 -+#define S3_P2_SHIFT 10 -+#define S4_P2_SHIFT 20 -+ -+#define CAL_SEL_MASK 0xe0000000 -+#define CAL_SEL_SHIFT 29 -+ -+static int calibrate_8916(struct tsens_device *tmdev) -+{ -+ int base0 = 0, base1 = 0, i; -+ u32 p1[5], p2[5]; -+ int mode = 0; -+ u32 *qfprom_cdata, *qfprom_csel; -+ -+ qfprom_cdata = (u32 *)qfprom_read(tmdev->dev, "calib"); -+ if (IS_ERR(qfprom_cdata)) -+ return PTR_ERR(qfprom_cdata); -+ -+ qfprom_csel = (u32 *)qfprom_read(tmdev->dev, "calib_sel"); -+ if (IS_ERR(qfprom_csel)) -+ return PTR_ERR(qfprom_csel); -+ -+ mode = (qfprom_csel[0] & CAL_SEL_MASK) >> CAL_SEL_SHIFT; -+ dev_dbg(tmdev->dev, "calibration mode is %d\n", mode); -+ -+ switch (mode) { -+ case TWO_PT_CALIB: -+ base1 = (qfprom_cdata[1] & BASE1_MASK) >> BASE1_SHIFT; -+ p2[0] = (qfprom_cdata[0] & S0_P2_MASK) >> S0_P2_SHIFT; -+ p2[1] = (qfprom_cdata[0] & S1_P2_MASK) >> S1_P2_SHIFT; -+ p2[2] = (qfprom_cdata[1] & S2_P2_MASK) >> S2_P2_SHIFT; -+ p2[3] = (qfprom_cdata[1] & S3_P2_MASK) >> S3_P2_SHIFT; -+ p2[4] = (qfprom_cdata[1] & S4_P2_MASK) >> S4_P2_SHIFT; -+ for (i = 0; i < tmdev->num_sensors; i++) -+ p2[i] = ((base1 + p2[i]) << 3); -+ /* Fall through */ -+ case ONE_PT_CALIB2: -+ base0 = (qfprom_cdata[0] & BASE0_MASK); -+ p1[0] = (qfprom_cdata[0] & S0_P1_MASK) >> S0_P1_SHIFT; -+ p1[1] = (qfprom_cdata[0] & S1_P1_MASK) >> S1_P1_SHIFT; -+ p1[2] = (qfprom_cdata[0] & S2_P1_MASK) >> S2_P1_SHIFT; -+ p1[3] = (qfprom_cdata[1] & S3_P1_MASK) >> S3_P1_SHIFT; -+ p1[4] = (qfprom_cdata[1] & S4_P1_MASK) >> S4_P1_SHIFT; -+ for (i = 0; i < tmdev->num_sensors; i++) -+ p1[i] = (((base0) + p1[i]) << 3); -+ break; -+ default: -+ for (i = 0; i < tmdev->num_sensors; i++) { -+ p1[i] = 500; -+ p2[i] = 780; -+ } -+ break; -+ } -+ -+ compute_intercept_slope(tmdev, p1, p2, mode); -+ -+ return 0; -+} -+ -+const struct tsens_ops ops_8916 = { -+ .init = init_common, -+ .calibrate = calibrate_8916, -+ .get_temp = get_temp_common, -+}; -+ -+const struct tsens_data data_8916 = { -+ .num_sensors = 5, -+ .ops = &ops_8916, -+ .hw_ids = (unsigned int []){0, 1, 2, 4, 5 }, -+}; ---- a/drivers/thermal/qcom/tsens.c -+++ b/drivers/thermal/qcom/tsens.c -@@ -65,6 +65,7 @@ static SIMPLE_DEV_PM_OPS(tsens_pm_ops, t - static const struct of_device_id tsens_table[] = { - { - .compatible = "qcom,msm8916-tsens", -+ .data = &data_8916, - }, { - .compatible = "qcom,msm8974-tsens", - }, ---- a/drivers/thermal/qcom/tsens.h -+++ b/drivers/thermal/qcom/tsens.h -@@ -87,4 +87,6 @@ void compute_intercept_slope(struct tsen - int init_common(struct tsens_device *); - int get_temp_common(struct tsens_device *, int, int *); - -+extern const struct tsens_data data_8916; -+ - #endif /* __QCOM_TSENS_H__ */ |