Lines Matching refs:data
79 static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data, in hisi_thermal_get_sensor_temp() argument
84 mutex_lock(&data->thermal_lock); in hisi_thermal_get_sensor_temp()
87 writel(0x0, data->regs + TEMP0_INT_EN); in hisi_thermal_get_sensor_temp()
88 writel(0x1, data->regs + TEMP0_INT_CLR); in hisi_thermal_get_sensor_temp()
91 writel(0x0, data->regs + TEMP0_EN); in hisi_thermal_get_sensor_temp()
94 writel((sensor->id << 12), data->regs + TEMP0_CFG); in hisi_thermal_get_sensor_temp()
97 writel(0x1, data->regs + TEMP0_EN); in hisi_thermal_get_sensor_temp()
101 val = readl(data->regs + TEMP0_VALUE); in hisi_thermal_get_sensor_temp()
104 mutex_unlock(&data->thermal_lock); in hisi_thermal_get_sensor_temp()
110 (struct hisi_thermal_data *data) in hisi_thermal_enable_bind_irq_sensor() argument
114 mutex_lock(&data->thermal_lock); in hisi_thermal_enable_bind_irq_sensor()
116 sensor = &data->sensors[data->irq_bind_sensor]; in hisi_thermal_enable_bind_irq_sensor()
119 writel(0x0, data->regs + TEMP0_CFG); in hisi_thermal_enable_bind_irq_sensor()
122 writel(0x0, data->regs + TEMP0_RST_MSK); in hisi_thermal_enable_bind_irq_sensor()
123 writel(0x0, data->regs + TEMP0_EN); in hisi_thermal_enable_bind_irq_sensor()
126 writel((sensor->id << 12), data->regs + TEMP0_CFG); in hisi_thermal_enable_bind_irq_sensor()
130 data->regs + TEMP0_TH); in hisi_thermal_enable_bind_irq_sensor()
132 writel(_temp_to_step(HISI_TEMP_RESET), data->regs + TEMP0_RST_TH); in hisi_thermal_enable_bind_irq_sensor()
135 writel(0x1, data->regs + TEMP0_RST_MSK); in hisi_thermal_enable_bind_irq_sensor()
136 writel(0x1, data->regs + TEMP0_EN); in hisi_thermal_enable_bind_irq_sensor()
138 writel(0x0, data->regs + TEMP0_INT_CLR); in hisi_thermal_enable_bind_irq_sensor()
139 writel(0x1, data->regs + TEMP0_INT_EN); in hisi_thermal_enable_bind_irq_sensor()
143 mutex_unlock(&data->thermal_lock); in hisi_thermal_enable_bind_irq_sensor()
146 static void hisi_thermal_disable_sensor(struct hisi_thermal_data *data) in hisi_thermal_disable_sensor() argument
148 mutex_lock(&data->thermal_lock); in hisi_thermal_disable_sensor()
151 writel(0x0, data->regs + TEMP0_INT_EN); in hisi_thermal_disable_sensor()
152 writel(0x0, data->regs + TEMP0_RST_MSK); in hisi_thermal_disable_sensor()
153 writel(0x0, data->regs + TEMP0_EN); in hisi_thermal_disable_sensor()
155 mutex_unlock(&data->thermal_lock); in hisi_thermal_disable_sensor()
161 struct hisi_thermal_data *data = sensor->thermal; in hisi_thermal_get_temp() local
166 *temp = hisi_thermal_get_sensor_temp(data, sensor); in hisi_thermal_get_temp()
171 if (data->sensors[i].sensor_temp >= max_temp) { in hisi_thermal_get_temp()
172 max_temp = data->sensors[i].sensor_temp; in hisi_thermal_get_temp()
177 mutex_lock(&data->thermal_lock); in hisi_thermal_get_temp()
178 data->irq_bind_sensor = sensor_id; in hisi_thermal_get_temp()
179 mutex_unlock(&data->thermal_lock); in hisi_thermal_get_temp()
181 dev_dbg(&data->pdev->dev, "id=%d, irq=%d, temp=%d, thres=%d\n", in hisi_thermal_get_temp()
182 sensor->id, data->irq_enabled, *temp, sensor->thres_temp); in hisi_thermal_get_temp()
188 if (data->irq_enabled) { in hisi_thermal_get_temp()
189 hisi_thermal_enable_bind_irq_sensor(data); in hisi_thermal_get_temp()
194 data->irq_enabled = true; in hisi_thermal_get_temp()
195 hisi_thermal_enable_bind_irq_sensor(data); in hisi_thermal_get_temp()
196 enable_irq(data->irq); in hisi_thermal_get_temp()
208 struct hisi_thermal_data *data = dev; in hisi_thermal_alarm_irq() local
211 data->irq_enabled = false; in hisi_thermal_alarm_irq()
218 struct hisi_thermal_data *data = dev; in hisi_thermal_alarm_irq_thread() local
222 mutex_lock(&data->thermal_lock); in hisi_thermal_alarm_irq_thread()
223 sensor = &data->sensors[data->irq_bind_sensor]; in hisi_thermal_alarm_irq_thread()
225 dev_crit(&data->pdev->dev, "THERMAL ALARM: T > %d\n", in hisi_thermal_alarm_irq_thread()
227 mutex_unlock(&data->thermal_lock); in hisi_thermal_alarm_irq_thread()
230 thermal_zone_device_update(data->sensors[i].tzd); in hisi_thermal_alarm_irq_thread()
236 struct hisi_thermal_data *data, in hisi_thermal_register_sensor() argument
244 sensor->thermal = data; in hisi_thermal_register_sensor()
284 struct hisi_thermal_data *data; in hisi_thermal_probe() local
289 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in hisi_thermal_probe()
290 if (!data) in hisi_thermal_probe()
293 mutex_init(&data->thermal_lock); in hisi_thermal_probe()
294 data->pdev = pdev; in hisi_thermal_probe()
297 data->regs = devm_ioremap_resource(&pdev->dev, res); in hisi_thermal_probe()
298 if (IS_ERR(data->regs)) { in hisi_thermal_probe()
300 return PTR_ERR(data->regs); in hisi_thermal_probe()
303 data->irq = platform_get_irq(pdev, 0); in hisi_thermal_probe()
304 if (data->irq < 0) in hisi_thermal_probe()
305 return data->irq; in hisi_thermal_probe()
307 ret = devm_request_threaded_irq(&pdev->dev, data->irq, in hisi_thermal_probe()
310 0, "hisi_thermal", data); in hisi_thermal_probe()
316 platform_set_drvdata(pdev, data); in hisi_thermal_probe()
318 data->clk = devm_clk_get(&pdev->dev, "thermal_clk"); in hisi_thermal_probe()
319 if (IS_ERR(data->clk)) { in hisi_thermal_probe()
320 ret = PTR_ERR(data->clk); in hisi_thermal_probe()
328 ret = clk_prepare_enable(data->clk); in hisi_thermal_probe()
335 ret = hisi_thermal_register_sensor(pdev, data, in hisi_thermal_probe()
336 &data->sensors[i], i); in hisi_thermal_probe()
344 hisi_thermal_enable_bind_irq_sensor(data); in hisi_thermal_probe()
345 data->irq_enabled = true; in hisi_thermal_probe()
348 hisi_thermal_toggle_sensor(&data->sensors[i], true); in hisi_thermal_probe()
353 clk_disable_unprepare(data->clk); in hisi_thermal_probe()
360 struct hisi_thermal_data *data = platform_get_drvdata(pdev); in hisi_thermal_remove() local
364 struct hisi_thermal_sensor *sensor = &data->sensors[i]; in hisi_thermal_remove()
370 hisi_thermal_disable_sensor(data); in hisi_thermal_remove()
371 clk_disable_unprepare(data->clk); in hisi_thermal_remove()
379 struct hisi_thermal_data *data = dev_get_drvdata(dev); in hisi_thermal_suspend() local
381 hisi_thermal_disable_sensor(data); in hisi_thermal_suspend()
382 data->irq_enabled = false; in hisi_thermal_suspend()
384 clk_disable_unprepare(data->clk); in hisi_thermal_suspend()
391 struct hisi_thermal_data *data = dev_get_drvdata(dev); in hisi_thermal_resume() local
393 clk_prepare_enable(data->clk); in hisi_thermal_resume()
395 data->irq_enabled = true; in hisi_thermal_resume()
396 hisi_thermal_enable_bind_irq_sensor(data); in hisi_thermal_resume()