Lines Matching +full:smart +full:- +full:sensing
23 #include <linux/nvmem-consumer.h>
105 /* The number of sensing points per bank */
138 /* The number of sensing points per bank */
153 /* The number of sensing points per bank */
265 * the bank concept wouldn't be necessary here. However, the SVS (Smart
300 * so the bank concept wouldn't be necessary here. However, the SVS (Smart
325 * so the bank concept wouldn't be necessary here. However, the SVS (Smart
345 * MT7622 have only one sensing point which uses AUXADC Channel 11 for raw data
364 * raw_to_mcelsius - convert a raw ADC value to mcelsius
378 tmp /= 165 + mt->o_slope; in raw_to_mcelsius()
379 tmp /= 10000 + mt->adc_ge; in raw_to_mcelsius()
380 tmp *= raw - mt->vts[sensno] - 3350; in raw_to_mcelsius()
383 return mt->degc_cali * 500 - tmp; in raw_to_mcelsius()
387 * mtk_thermal_get_bank - get bank
395 struct mtk_thermal *mt = bank->mt; in mtk_thermal_get_bank()
398 mutex_lock(&mt->lock); in mtk_thermal_get_bank()
400 val = readl(mt->thermal_base + PTPCORESEL); in mtk_thermal_get_bank()
402 val |= bank->id; in mtk_thermal_get_bank()
403 writel(val, mt->thermal_base + PTPCORESEL); in mtk_thermal_get_bank()
407 * mtk_thermal_put_bank - release bank
414 struct mtk_thermal *mt = bank->mt; in mtk_thermal_put_bank()
416 mutex_unlock(&mt->lock); in mtk_thermal_put_bank()
420 * mtk_thermal_bank_temperature - get the temperature of a bank
428 struct mtk_thermal *mt = bank->mt; in mtk_thermal_bank_temperature()
429 const struct mtk_thermal_data *conf = mt->conf; in mtk_thermal_bank_temperature()
433 for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) { in mtk_thermal_bank_temperature()
434 raw = readl(mt->thermal_base + conf->msr[i]); in mtk_thermal_bank_temperature()
437 conf->bank_data[bank->id].sensors[i], in mtk_thermal_bank_temperature()
461 for (i = 0; i < mt->conf->num_banks; i++) { in mtk_read_temp()
462 struct mtk_thermal_bank *bank = &mt->banks[i]; in mtk_read_temp()
483 struct mtk_thermal_bank *bank = &mt->banks[num]; in mtk_thermal_init_bank()
484 const struct mtk_thermal_data *conf = mt->conf; in mtk_thermal_init_bank()
487 bank->id = num; in mtk_thermal_init_bank()
488 bank->mt = mt; in mtk_thermal_init_bank()
493 writel(TEMP_MONCTL1_PERIOD_UNIT(12), mt->thermal_base + TEMP_MONCTL1); in mtk_thermal_init_bank()
501 mt->thermal_base + TEMP_MONCTL2); in mtk_thermal_init_bank()
505 mt->thermal_base + TEMP_AHBPOLL); in mtk_thermal_init_bank()
508 writel(0x0, mt->thermal_base + TEMP_MSRCTL0); in mtk_thermal_init_bank()
511 writel(0xffffffff, mt->thermal_base + TEMP_AHBTO); in mtk_thermal_init_bank()
514 writel(0x0, mt->thermal_base + TEMP_MONIDET0); in mtk_thermal_init_bank()
515 writel(0x0, mt->thermal_base + TEMP_MONIDET1); in mtk_thermal_init_bank()
530 writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCMUX); in mtk_thermal_init_bank()
534 mt->thermal_base + TEMP_ADCMUXADDR); in mtk_thermal_init_bank()
538 mt->thermal_base + TEMP_PNPMUXADDR); in mtk_thermal_init_bank()
541 writel(BIT(conf->auxadc_channel), mt->thermal_base + TEMP_ADCEN); in mtk_thermal_init_bank()
545 mt->thermal_base + TEMP_ADCENADDR); in mtk_thermal_init_bank()
548 writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel), in mtk_thermal_init_bank()
549 mt->thermal_base + TEMP_ADCVALIDADDR); in mtk_thermal_init_bank()
552 writel(auxadc_phys_base + AUXADC_DATA(conf->auxadc_channel), in mtk_thermal_init_bank()
553 mt->thermal_base + TEMP_ADCVOLTADDR); in mtk_thermal_init_bank()
556 writel(0x0, mt->thermal_base + TEMP_RDCTRL); in mtk_thermal_init_bank()
560 mt->thermal_base + TEMP_ADCVALIDMASK); in mtk_thermal_init_bank()
563 writel(0x0, mt->thermal_base + TEMP_ADCVOLTAGESHIFT); in mtk_thermal_init_bank()
567 mt->thermal_base + TEMP_ADCWRITECTRL); in mtk_thermal_init_bank()
569 for (i = 0; i < conf->bank_data[num].num_sensors; i++) in mtk_thermal_init_bank()
570 writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]], in mtk_thermal_init_bank()
571 mt->thermal_base + conf->adcpnp[i]); in mtk_thermal_init_bank()
573 writel((1 << conf->bank_data[num].num_sensors) - 1, in mtk_thermal_init_bank()
574 mt->thermal_base + TEMP_MONCTL0); in mtk_thermal_init_bank()
578 mt->thermal_base + TEMP_ADCWRITECTRL); in mtk_thermal_init_bank()
604 mt->adc_ge = 512; in mtk_thermal_get_calibration_data()
605 for (i = 0; i < mt->conf->num_sensors; i++) in mtk_thermal_get_calibration_data()
606 mt->vts[i] = 260; in mtk_thermal_get_calibration_data()
607 mt->degc_cali = 40; in mtk_thermal_get_calibration_data()
608 mt->o_slope = 0; in mtk_thermal_get_calibration_data()
610 cell = nvmem_cell_get(dev, "calibration-data"); in mtk_thermal_get_calibration_data()
612 if (PTR_ERR(cell) == -EPROBE_DEFER) in mtk_thermal_get_calibration_data()
626 ret = -EINVAL; in mtk_thermal_get_calibration_data()
631 mt->adc_ge = MT8173_CALIB_BUF1_ADC_GE(buf[1]); in mtk_thermal_get_calibration_data()
632 mt->vts[MT8173_TS1] = MT8173_CALIB_BUF0_VTS_TS1(buf[0]); in mtk_thermal_get_calibration_data()
633 mt->vts[MT8173_TS2] = MT8173_CALIB_BUF0_VTS_TS2(buf[0]); in mtk_thermal_get_calibration_data()
634 mt->vts[MT8173_TS3] = MT8173_CALIB_BUF1_VTS_TS3(buf[1]); in mtk_thermal_get_calibration_data()
635 mt->vts[MT8173_TS4] = MT8173_CALIB_BUF2_VTS_TS4(buf[2]); in mtk_thermal_get_calibration_data()
636 mt->vts[MT8173_TSABB] = MT8173_CALIB_BUF2_VTS_TSABB(buf[2]); in mtk_thermal_get_calibration_data()
637 mt->degc_cali = MT8173_CALIB_BUF0_DEGC_CALI(buf[0]); in mtk_thermal_get_calibration_data()
640 mt->o_slope = -MT8173_CALIB_BUF0_O_SLOPE(buf[0]); in mtk_thermal_get_calibration_data()
642 mt->o_slope = MT8173_CALIB_BUF0_O_SLOPE(buf[0]); in mtk_thermal_get_calibration_data()
655 .compatible = "mediatek,mt8173-thermal",
659 .compatible = "mediatek,mt2701-thermal",
663 .compatible = "mediatek,mt2712-thermal",
667 .compatible = "mediatek,mt7622-thermal",
677 struct device_node *auxadc, *apmixedsys, *np = pdev->dev.of_node; in mtk_thermal_probe()
683 mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL); in mtk_thermal_probe()
685 return -ENOMEM; in mtk_thermal_probe()
687 mt->conf = of_device_get_match_data(&pdev->dev); in mtk_thermal_probe()
689 mt->clk_peri_therm = devm_clk_get(&pdev->dev, "therm"); in mtk_thermal_probe()
690 if (IS_ERR(mt->clk_peri_therm)) in mtk_thermal_probe()
691 return PTR_ERR(mt->clk_peri_therm); in mtk_thermal_probe()
693 mt->clk_auxadc = devm_clk_get(&pdev->dev, "auxadc"); in mtk_thermal_probe()
694 if (IS_ERR(mt->clk_auxadc)) in mtk_thermal_probe()
695 return PTR_ERR(mt->clk_auxadc); in mtk_thermal_probe()
698 mt->thermal_base = devm_ioremap_resource(&pdev->dev, res); in mtk_thermal_probe()
699 if (IS_ERR(mt->thermal_base)) in mtk_thermal_probe()
700 return PTR_ERR(mt->thermal_base); in mtk_thermal_probe()
702 ret = mtk_thermal_get_calibration_data(&pdev->dev, mt); in mtk_thermal_probe()
706 mutex_init(&mt->lock); in mtk_thermal_probe()
708 mt->dev = &pdev->dev; in mtk_thermal_probe()
712 dev_err(&pdev->dev, "missing auxadc node\n"); in mtk_thermal_probe()
713 return -ENODEV; in mtk_thermal_probe()
721 dev_err(&pdev->dev, "Can't get auxadc phys address\n"); in mtk_thermal_probe()
722 return -EINVAL; in mtk_thermal_probe()
727 dev_err(&pdev->dev, "missing apmixedsys node\n"); in mtk_thermal_probe()
728 return -ENODEV; in mtk_thermal_probe()
736 dev_err(&pdev->dev, "Can't get auxadc phys address\n"); in mtk_thermal_probe()
737 return -EINVAL; in mtk_thermal_probe()
740 ret = device_reset(&pdev->dev); in mtk_thermal_probe()
744 ret = clk_prepare_enable(mt->clk_auxadc); in mtk_thermal_probe()
746 dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret); in mtk_thermal_probe()
750 ret = clk_prepare_enable(mt->clk_peri_therm); in mtk_thermal_probe()
752 dev_err(&pdev->dev, "Can't enable peri clk: %d\n", ret); in mtk_thermal_probe()
756 for (i = 0; i < mt->conf->num_banks; i++) in mtk_thermal_probe()
762 tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, mt, in mtk_thermal_probe()
772 clk_disable_unprepare(mt->clk_peri_therm); in mtk_thermal_probe()
774 clk_disable_unprepare(mt->clk_auxadc); in mtk_thermal_probe()
783 clk_disable_unprepare(mt->clk_peri_therm); in mtk_thermal_remove()
784 clk_disable_unprepare(mt->clk_auxadc); in mtk_thermal_remove()
793 .name = "mtk-thermal",