Lines Matching refs:chip
75 /* protects .thresh, .stage and chip registers */
85 static int qpnp_tm_read(struct qpnp_tm_chip *chip, u16 addr, u8 *data)
90 ret = regmap_read(chip->map, chip->base + addr, &val);
98 static int qpnp_tm_write(struct qpnp_tm_chip *chip, u16 addr, u8 data)
100 return regmap_write(chip->map, chip->base + addr, data);
105 * @chip: Pointer to the qpnp_tm chip
109 static int qpnp_tm_get_temp_stage(struct qpnp_tm_chip *chip)
114 ret = qpnp_tm_read(chip, QPNP_TM_REG_STATUS, ®);
118 if (chip->subtype == QPNP_TM_SUBTYPE_GEN1)
130 static int qpnp_tm_update_temp_no_adc(struct qpnp_tm_chip *chip)
135 WARN_ON(!mutex_is_locked(&chip->lock));
137 ret = qpnp_tm_get_temp_stage(chip);
142 if (chip->subtype == QPNP_TM_SUBTYPE_GEN1) {
144 stage_old = chip->stage;
147 stage_old = alarm_state_map[chip->stage];
152 chip->temp = (stage_new - 1) * TEMP_STAGE_STEP +
153 chip->thresh * TEMP_THRESH_STEP +
157 chip->temp = stage_new * TEMP_STAGE_STEP +
158 chip->thresh * TEMP_THRESH_STEP -
162 chip->stage = stage;
169 struct qpnp_tm_chip *chip = data;
175 if (!chip->initialized) {
180 if (!chip->adc) {
181 mutex_lock(&chip->lock);
182 ret = qpnp_tm_update_temp_no_adc(chip);
183 mutex_unlock(&chip->lock);
187 ret = iio_read_channel_processed(chip->adc, &mili_celsius);
191 chip->temp = mili_celsius;
194 *temp = chip->temp;
199 static int qpnp_tm_update_critical_trip_temp(struct qpnp_tm_chip *chip,
205 WARN_ON(!mutex_is_locked(&chip->lock));
215 chip->thresh = THRESH_MIN;
220 chip->thresh = THRESH_MAX -
225 chip->thresh = THRESH_MAX;
227 if (chip->adc)
230 dev_warn(chip->dev,
235 reg |= chip->thresh;
239 return qpnp_tm_write(chip, QPNP_TM_REG_SHUTDOWN_CTRL1, reg);
244 struct qpnp_tm_chip *chip = data;
248 trip_points = of_thermal_get_trip_points(chip->tz_dev);
255 mutex_lock(&chip->lock);
256 ret = qpnp_tm_update_critical_trip_temp(chip, temp);
257 mutex_unlock(&chip->lock);
269 struct qpnp_tm_chip *chip = data;
271 thermal_zone_device_update(chip->tz_dev, THERMAL_EVENT_UNSPECIFIED);
276 static int qpnp_tm_get_critical_trip_temp(struct qpnp_tm_chip *chip)
282 ntrips = of_thermal_get_ntrips(chip->tz_dev);
286 trips = of_thermal_get_trip_points(chip->tz_dev);
291 if (of_thermal_is_trip_valid(chip->tz_dev, i) &&
304 static int qpnp_tm_init(struct qpnp_tm_chip *chip)
311 mutex_lock(&chip->lock);
313 ret = qpnp_tm_read(chip, QPNP_TM_REG_SHUTDOWN_CTRL1, ®);
317 chip->thresh = reg & SHUTDOWN_CTRL1_THRESHOLD_MASK;
318 chip->temp = DEFAULT_TEMP;
320 ret = qpnp_tm_get_temp_stage(chip);
323 chip->stage = ret;
325 stage = chip->subtype == QPNP_TM_SUBTYPE_GEN1
326 ? chip->stage : alarm_state_map[chip->stage];
329 chip->temp = chip->thresh * TEMP_THRESH_STEP +
333 crit_temp = qpnp_tm_get_critical_trip_temp(chip);
334 ret = qpnp_tm_update_critical_trip_temp(chip, crit_temp);
340 ret = qpnp_tm_write(chip, QPNP_TM_REG_ALARM_CTRL, reg);
342 chip->initialized = true;
345 mutex_unlock(&chip->lock);
351 struct qpnp_tm_chip *chip;
359 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL);
360 if (!chip)
363 dev_set_drvdata(&pdev->dev, chip);
364 chip->dev = &pdev->dev;
366 mutex_init(&chip->lock);
368 chip->map = dev_get_regmap(pdev->dev.parent, NULL);
369 if (!chip->map)
381 chip->adc = devm_iio_channel_get(&pdev->dev, "thermal");
382 if (IS_ERR(chip->adc)) {
383 ret = PTR_ERR(chip->adc);
384 chip->adc = NULL;
389 chip->base = res;
391 ret = qpnp_tm_read(chip, QPNP_TM_REG_TYPE, &type);
397 ret = qpnp_tm_read(chip, QPNP_TM_REG_SUBTYPE, &subtype);
410 chip->subtype = subtype;
417 chip->tz_dev = devm_thermal_zone_of_sensor_register(
418 &pdev->dev, 0, chip, &qpnp_tm_sensor_ops);
419 if (IS_ERR(chip->tz_dev)) {
421 return PTR_ERR(chip->tz_dev);
424 ret = qpnp_tm_init(chip);
431 IRQF_ONESHOT, node->name, chip);
435 thermal_zone_device_update(chip->tz_dev, THERMAL_EVENT_UNSPECIFIED);