Lines Matching defs:lvts_ctrl
113 const struct lvts_ctrl_data *lvts_ctrl;
127 struct lvts_ctrl {
139 struct lvts_ctrl *lvts_ctrl;
201 struct lvts_ctrl *lvts_ctrl;
212 lvts_ctrl = &lvts_td->lvts_ctrl[i];
223 regset->base = lvts_ctrl->base;
309 static void lvts_update_irq_mask(struct lvts_ctrl *lvts_ctrl)
320 value = readl(LVTS_MONINT(lvts_ctrl->base));
323 if (lvts_ctrl->sensors[i].high_thresh == lvts_ctrl->high_thresh
324 && lvts_ctrl->sensors[i].low_thresh == lvts_ctrl->low_thresh)
330 writel(value, LVTS_MONINT(lvts_ctrl->base));
333 static bool lvts_should_update_thresh(struct lvts_ctrl *lvts_ctrl, int high)
337 if (high > lvts_ctrl->high_thresh)
340 for (i = 0; i < lvts_ctrl->num_lvts_sensor; i++)
341 if (lvts_ctrl->sensors[i].high_thresh == lvts_ctrl->high_thresh
342 && lvts_ctrl->sensors[i].low_thresh == lvts_ctrl->low_thresh)
351 struct lvts_ctrl *lvts_ctrl = container_of(lvts_sensor, struct lvts_ctrl, sensors[lvts_sensor->id]);
360 should_update_thresh = lvts_should_update_thresh(lvts_ctrl, high);
362 lvts_ctrl->high_thresh = high;
363 lvts_ctrl->low_thresh = low;
365 lvts_update_irq_mask(lvts_ctrl);
399 static irqreturn_t lvts_ctrl_irq_handler(struct lvts_ctrl *lvts_ctrl)
473 value = readl(LVTS_MONINTSTS(lvts_ctrl->base));
487 thermal_zone_device_update(lvts_ctrl->sensors[i].tz,
495 writel(value, LVTS_MONINTSTS(lvts_ctrl->base));
522 aux = lvts_ctrl_irq_handler(&lvts_td->lvts_ctrl[i]);
537 static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
540 struct lvts_sensor *lvts_sensor = lvts_ctrl->sensors;
542 LVTS_MSR0(lvts_ctrl->base),
543 LVTS_MSR1(lvts_ctrl->base),
544 LVTS_MSR2(lvts_ctrl->base),
545 LVTS_MSR3(lvts_ctrl->base)
549 LVTS_IMMD0(lvts_ctrl->base),
550 LVTS_IMMD1(lvts_ctrl->base),
551 LVTS_IMMD2(lvts_ctrl->base),
552 LVTS_IMMD3(lvts_ctrl->base)
585 lvts_sensor[i].base = lvts_ctrl->base;
597 lvts_ctrl->num_lvts_sensor = lvts_ctrl_data->num_lvts_sensor;
634 static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
641 memcpy(&lvts_ctrl->calibration[i],
714 size_t size = sizeof(*lvts_td->lvts_ctrl) * lvts_data->num_lvts_ctrl;
715 struct lvts_ctrl *lvts_ctrl;
733 lvts_ctrl = devm_kzalloc(dev, size, GFP_KERNEL);
734 if (!lvts_ctrl)
739 lvts_ctrl[i].base = lvts_td->base + lvts_data->lvts_ctrl[i].offset;
741 ret = lvts_sensor_init(dev, &lvts_ctrl[i],
742 &lvts_data->lvts_ctrl[i]);
746 ret = lvts_calibration_init(dev, &lvts_ctrl[i],
747 &lvts_data->lvts_ctrl[i],
756 lvts_ctrl[i].mode = lvts_data->lvts_ctrl[i].mode;
762 lvts_ctrl[i].hw_tshut_raw_temp =
763 lvts_temp_to_raw(lvts_data->lvts_ctrl[i].hw_tshut_temp);
765 lvts_ctrl[i].low_thresh = INT_MIN;
766 lvts_ctrl[i].high_thresh = INT_MIN;
774 lvts_td->lvts_ctrl = lvts_ctrl;
786 static void lvts_write_config(struct lvts_ctrl *lvts_ctrl, u32 *cmds, int nr_cmds)
794 writel(cmds[i], LVTS_CONFIG(lvts_ctrl->base));
799 static int lvts_irq_init(struct lvts_ctrl *lvts_ctrl)
813 writel(BIT(16), LVTS_PROTCTL(lvts_ctrl->base));
824 * writel(0x0, LVTS_PROTTA(lvts_ctrl->base));
825 * writel(0x0, LVTS_PROTTB(lvts_ctrl->base));
827 writel(lvts_ctrl->hw_tshut_raw_temp, LVTS_PROTTC(lvts_ctrl->base));
835 writel(LVTS_MONINT_CONF, LVTS_MONINT(lvts_ctrl->base));
854 static int lvts_ctrl_set_enable(struct lvts_ctrl *lvts_ctrl, int enable)
863 writel(enable, LVTS_CLKEN(lvts_ctrl->base));
868 static int lvts_ctrl_connect(struct device *dev, struct lvts_ctrl *lvts_ctrl)
872 lvts_write_config(lvts_ctrl, cmds, ARRAY_SIZE(cmds));
882 id = readl(LVTS_ID(lvts_ctrl->base));
889 static int lvts_ctrl_initialize(struct device *dev, struct lvts_ctrl *lvts_ctrl)
901 lvts_write_config(lvts_ctrl, cmds, ARRAY_SIZE(cmds));
906 static int lvts_ctrl_calibrate(struct device *dev, struct lvts_ctrl *lvts_ctrl)
910 LVTS_EDATA00(lvts_ctrl->base),
911 LVTS_EDATA01(lvts_ctrl->base),
912 LVTS_EDATA02(lvts_ctrl->base),
913 LVTS_EDATA03(lvts_ctrl->base)
924 writel(lvts_ctrl->calibration[i], lvts_edata[i]);
929 static int lvts_ctrl_configure(struct device *dev, struct lvts_ctrl *lvts_ctrl)
944 writel(value, LVTS_TSSEL(lvts_ctrl->base));
973 writel(value, LVTS_MSRCTL0(lvts_ctrl->base));
1016 writel(value, LVTS_MONCTL1(lvts_ctrl->base));
1029 writel(value, LVTS_MONCTL2(lvts_ctrl->base));
1031 return lvts_irq_init(lvts_ctrl);
1034 static int lvts_ctrl_start(struct device *dev, struct lvts_ctrl *lvts_ctrl)
1036 struct lvts_sensor *lvts_sensors = lvts_ctrl->sensors;
1047 u32 *sensor_bitmap = lvts_ctrl->mode == LVTS_MSR_IMMEDIATE_MODE ?
1050 for (i = 0; i < lvts_ctrl->num_lvts_sensor; i++) {
1095 if (lvts_ctrl->mode == LVTS_MSR_IMMEDIATE_MODE) {
1109 writel(sensor_map, LVTS_MSRCTL1(lvts_ctrl->base));
1116 writel(sensor_map | BIT(9), LVTS_MONCTL0(lvts_ctrl->base));
1125 struct lvts_ctrl *lvts_ctrl;
1140 lvts_ctrl = &lvts_td->lvts_ctrl[i];
1154 ret = lvts_ctrl_set_enable(lvts_ctrl, true);
1160 ret = lvts_ctrl_connect(dev, lvts_ctrl);
1166 ret = lvts_ctrl_initialize(dev, lvts_ctrl);
1172 ret = lvts_ctrl_calibrate(dev, lvts_ctrl);
1178 ret = lvts_ctrl_configure(dev, lvts_ctrl);
1184 ret = lvts_ctrl_start(dev, lvts_ctrl);
1254 lvts_ctrl_set_enable(&lvts_td->lvts_ctrl[i], false);
1341 .lvts_ctrl = mt8195_lvts_mcu_data_ctrl,
1346 .lvts_ctrl = mt8195_lvts_ap_data_ctrl,