aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/thermal/rockchip_thermal.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
index 6dc7fc516abf..bda1ca199abd 100644
--- a/drivers/thermal/rockchip_thermal.c
+++ b/drivers/thermal/rockchip_thermal.c
@@ -225,11 +225,15 @@ struct rockchip_thermal_data {
225#define GRF_TSADC_TESTBIT_L 0x0e648 225#define GRF_TSADC_TESTBIT_L 0x0e648
226#define GRF_TSADC_TESTBIT_H 0x0e64c 226#define GRF_TSADC_TESTBIT_H 0x0e64c
227 227
228#define PX30_GRF_SOC_CON2 0x0408
229
228#define GRF_SARADC_TESTBIT_ON (0x10001 << 2) 230#define GRF_SARADC_TESTBIT_ON (0x10001 << 2)
229#define GRF_TSADC_TESTBIT_H_ON (0x10001 << 2) 231#define GRF_TSADC_TESTBIT_H_ON (0x10001 << 2)
230#define GRF_TSADC_VCM_EN_L (0x10001 << 7) 232#define GRF_TSADC_VCM_EN_L (0x10001 << 7)
231#define GRF_TSADC_VCM_EN_H (0x10001 << 7) 233#define GRF_TSADC_VCM_EN_H (0x10001 << 7)
232 234
235#define GRF_CON_TSADC_CH_INV (0x10001 << 1)
236
233/** 237/**
234 * struct tsadc_table - code to temperature conversion table 238 * struct tsadc_table - code to temperature conversion table
235 * @code: the value of adc channel 239 * @code: the value of adc channel
@@ -692,6 +696,13 @@ static void rk_tsadcv3_initialize(struct regmap *grf, void __iomem *regs,
692 regs + TSADCV2_AUTO_CON); 696 regs + TSADCV2_AUTO_CON);
693} 697}
694 698
699static void rk_tsadcv4_initialize(struct regmap *grf, void __iomem *regs,
700 enum tshut_polarity tshut_polarity)
701{
702 rk_tsadcv2_initialize(grf, regs, tshut_polarity);
703 regmap_write(grf, PX30_GRF_SOC_CON2, GRF_CON_TSADC_CH_INV);
704}
705
695static void rk_tsadcv2_irq_ack(void __iomem *regs) 706static void rk_tsadcv2_irq_ack(void __iomem *regs)
696{ 707{
697 u32 val; 708 u32 val;
@@ -821,6 +832,30 @@ static void rk_tsadcv2_tshut_mode(int chn, void __iomem *regs,
821 writel_relaxed(val, regs + TSADCV2_INT_EN); 832 writel_relaxed(val, regs + TSADCV2_INT_EN);
822} 833}
823 834
835static const struct rockchip_tsadc_chip px30_tsadc_data = {
836 .chn_id[SENSOR_CPU] = 0, /* cpu sensor is channel 0 */
837 .chn_id[SENSOR_GPU] = 1, /* gpu sensor is channel 1 */
838 .chn_num = 2, /* 2 channels for tsadc */
839
840 .tshut_mode = TSHUT_MODE_CRU, /* default TSHUT via CRU */
841 .tshut_temp = 95000,
842
843 .initialize = rk_tsadcv4_initialize,
844 .irq_ack = rk_tsadcv3_irq_ack,
845 .control = rk_tsadcv3_control,
846 .get_temp = rk_tsadcv2_get_temp,
847 .set_alarm_temp = rk_tsadcv2_alarm_temp,
848 .set_tshut_temp = rk_tsadcv2_tshut_temp,
849 .set_tshut_mode = rk_tsadcv2_tshut_mode,
850
851 .table = {
852 .id = rk3328_code_table,
853 .length = ARRAY_SIZE(rk3328_code_table),
854 .data_mask = TSADCV2_DATA_MASK,
855 .mode = ADC_INCREMENT,
856 },
857};
858
824static const struct rockchip_tsadc_chip rv1108_tsadc_data = { 859static const struct rockchip_tsadc_chip rv1108_tsadc_data = {
825 .chn_id[SENSOR_CPU] = 0, /* cpu sensor is channel 0 */ 860 .chn_id[SENSOR_CPU] = 0, /* cpu sensor is channel 0 */
826 .chn_num = 1, /* one channel for tsadc */ 861 .chn_num = 1, /* one channel for tsadc */
@@ -993,6 +1028,9 @@ static const struct rockchip_tsadc_chip rk3399_tsadc_data = {
993}; 1028};
994 1029
995static const struct of_device_id of_rockchip_thermal_match[] = { 1030static const struct of_device_id of_rockchip_thermal_match[] = {
1031 { .compatible = "rockchip,px30-tsadc",
1032 .data = (void *)&px30_tsadc_data,
1033 },
996 { 1034 {
997 .compatible = "rockchip,rv1108-tsadc", 1035 .compatible = "rockchip,rv1108-tsadc",
998 .data = (void *)&rv1108_tsadc_data, 1036 .data = (void *)&rv1108_tsadc_data,