Lines Matching defs:sensor

3  * HiSilicon thermal sensor driver
68 int (*get_temp)(struct hisi_thermal_sensor *sensor);
69 int (*enable_sensor)(struct hisi_thermal_sensor *sensor);
70 int (*disable_sensor)(struct hisi_thermal_sensor *sensor);
71 int (*irq_handler)(struct hisi_thermal_sensor *sensor);
77 struct hisi_thermal_sensor *sensor;
247 * 0x0: local sensor (default)
248 * 0x1: remote sensor 1 (ACPU cluster 1)
249 * 0x2: remote sensor 2 (ACPU cluster 0)
250 * 0x3: remote sensor 3 (G3D)
252 static inline void hi6220_thermal_sensor_select(void __iomem *addr, int sensor)
255 (sensor << 12), addr + HI6220_TEMP0_CFG);
274 static int hi6220_thermal_irq_handler(struct hisi_thermal_sensor *sensor)
276 struct hisi_thermal_data *data = sensor->data;
282 static int hi3660_thermal_irq_handler(struct hisi_thermal_sensor *sensor)
284 struct hisi_thermal_data *data = sensor->data;
286 hi3660_thermal_alarm_clear(data->regs, sensor->id, 1);
290 static int hi6220_thermal_get_temp(struct hisi_thermal_sensor *sensor)
292 struct hisi_thermal_data *data = sensor->data;
297 static int hi3660_thermal_get_temp(struct hisi_thermal_sensor *sensor)
299 struct hisi_thermal_data *data = sensor->data;
301 return hi3660_thermal_get_temperature(data->regs, sensor->id);
304 static int hi6220_thermal_disable_sensor(struct hisi_thermal_sensor *sensor)
306 struct hisi_thermal_data *data = sensor->data;
308 /* disable sensor module */
318 static int hi3660_thermal_disable_sensor(struct hisi_thermal_sensor *sensor)
320 struct hisi_thermal_data *data = sensor->data;
322 /* disable sensor module */
323 hi3660_thermal_alarm_enable(data->regs, sensor->id, 0);
327 static int hi6220_thermal_enable_sensor(struct hisi_thermal_sensor *sensor)
329 struct hisi_thermal_data *data = sensor->data;
341 /* select sensor id */
342 hi6220_thermal_sensor_select(data->regs, sensor->id);
351 hi6220_thermal_alarm_set(data->regs, sensor->thres_temp);
365 static int hi3660_thermal_enable_sensor(struct hisi_thermal_sensor *sensor)
368 struct hisi_thermal_data *data = sensor->data;
371 hi3660_thermal_alarm_enable(data->regs, sensor->id, 0);
374 hi3660_thermal_set_lag(data->regs, sensor->id, HI3660_TEMP_LAG);
377 value = hi3660_thermal_temp_to_step(sensor->thres_temp);
378 hi3660_thermal_alarm_set(data->regs, sensor->id, value);
381 hi3660_thermal_alarm_clear(data->regs, sensor->id, 1);
382 hi3660_thermal_alarm_enable(data->regs, sensor->id, 1);
401 data->sensor = devm_kzalloc(dev, sizeof(*data->sensor), GFP_KERNEL);
402 if (!data->sensor)
405 data->sensor[0].id = HI6220_CLUSTER0_SENSOR;
406 data->sensor[0].irq_name = "tsensor_intr";
407 data->sensor[0].data = data;
420 data->sensor = devm_kzalloc(dev, sizeof(*data->sensor) *
422 if (!data->sensor)
425 data->sensor[0].id = HI3660_BIG_SENSOR;
426 data->sensor[0].irq_name = "tsensor_a73";
427 data->sensor[0].data = data;
434 struct hisi_thermal_sensor *sensor = thermal_zone_device_priv(tz);
435 struct hisi_thermal_data *data = sensor->data;
437 *temp = data->ops->get_temp(sensor);
448 struct hisi_thermal_sensor *sensor = dev;
449 struct hisi_thermal_data *data = sensor->data;
452 data->ops->irq_handler(sensor);
454 temp = data->ops->get_temp(sensor);
456 if (temp >= sensor->thres_temp) {
458 "sensor <%d> THERMAL ALARM: %d > %d\n",
459 sensor->id, temp, sensor->thres_temp);
461 thermal_zone_device_update(sensor->tzd,
466 "sensor <%d> THERMAL ALARM stopped: %d < %d\n",
467 sensor->id, temp, sensor->thres_temp);
474 struct hisi_thermal_sensor *sensor)
479 sensor->tzd = devm_thermal_of_zone_register(&pdev->dev,
480 sensor->id, sensor,
482 if (IS_ERR(sensor->tzd)) {
483 ret = PTR_ERR(sensor->tzd);
484 sensor->tzd = NULL;
485 dev_err(&pdev->dev, "failed to register sensor id %d: %d\n",
486 sensor->id, ret);
490 for (i = 0; i < thermal_zone_get_num_trips(sensor->tzd); i++) {
492 thermal_zone_get_trip(sensor->tzd, i, &trip);
495 sensor->thres_temp = trip.temperature;
532 static void hisi_thermal_toggle_sensor(struct hisi_thermal_sensor *sensor,
535 struct thermal_zone_device *tzd = sensor->tzd;
566 struct hisi_thermal_sensor *sensor = &data->sensor[i];
568 ret = hisi_thermal_register_sensor(pdev, sensor);
570 dev_err(dev, "failed to register thermal sensor: %d\n",
581 IRQF_ONESHOT, sensor->irq_name,
582 sensor);
588 ret = data->ops->enable_sensor(sensor);
590 dev_err(dev, "Failed to setup the sensor: %d\n", ret);
594 hisi_thermal_toggle_sensor(sensor, true);
606 struct hisi_thermal_sensor *sensor = &data->sensor[i];
608 hisi_thermal_toggle_sensor(sensor, false);
609 data->ops->disable_sensor(sensor);
621 data->ops->disable_sensor(&data->sensor[i]);
632 ret |= data->ops->enable_sensor(&data->sensor[i]);