hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/thermal/sun8i_thermal.c
....@@ -318,6 +318,11 @@
318318 return ret;
319319 }
320320
321
+static void sun8i_ths_reset_control_assert(void *data)
322
+{
323
+ reset_control_assert(data);
324
+}
325
+
321326 static int sun8i_ths_resource_init(struct ths_device *tmdev)
322327 {
323328 struct device *dev = tmdev->dev;
....@@ -338,47 +343,35 @@
338343 if (IS_ERR(tmdev->reset))
339344 return PTR_ERR(tmdev->reset);
340345
341
- tmdev->bus_clk = devm_clk_get(&pdev->dev, "bus");
346
+ ret = reset_control_deassert(tmdev->reset);
347
+ if (ret)
348
+ return ret;
349
+
350
+ ret = devm_add_action_or_reset(dev, sun8i_ths_reset_control_assert,
351
+ tmdev->reset);
352
+ if (ret)
353
+ return ret;
354
+
355
+ tmdev->bus_clk = devm_clk_get_enabled(&pdev->dev, "bus");
342356 if (IS_ERR(tmdev->bus_clk))
343357 return PTR_ERR(tmdev->bus_clk);
344358 }
345359
346360 if (tmdev->chip->has_mod_clk) {
347
- tmdev->mod_clk = devm_clk_get(&pdev->dev, "mod");
361
+ tmdev->mod_clk = devm_clk_get_enabled(&pdev->dev, "mod");
348362 if (IS_ERR(tmdev->mod_clk))
349363 return PTR_ERR(tmdev->mod_clk);
350364 }
351365
352
- ret = reset_control_deassert(tmdev->reset);
366
+ ret = clk_set_rate(tmdev->mod_clk, 24000000);
353367 if (ret)
354368 return ret;
355369
356
- ret = clk_prepare_enable(tmdev->bus_clk);
357
- if (ret)
358
- goto assert_reset;
359
-
360
- ret = clk_set_rate(tmdev->mod_clk, 24000000);
361
- if (ret)
362
- goto bus_disable;
363
-
364
- ret = clk_prepare_enable(tmdev->mod_clk);
365
- if (ret)
366
- goto bus_disable;
367
-
368370 ret = sun8i_ths_calibrate(tmdev);
369371 if (ret)
370
- goto mod_disable;
372
+ return ret;
371373
372374 return 0;
373
-
374
-mod_disable:
375
- clk_disable_unprepare(tmdev->mod_clk);
376
-bus_disable:
377
- clk_disable_unprepare(tmdev->bus_clk);
378
-assert_reset:
379
- reset_control_assert(tmdev->reset);
380
-
381
- return ret;
382375 }
383376
384377 static int sun8i_h3_thermal_init(struct ths_device *tmdev)
....@@ -529,17 +522,6 @@
529522 return 0;
530523 }
531524
532
-static int sun8i_ths_remove(struct platform_device *pdev)
533
-{
534
- struct ths_device *tmdev = platform_get_drvdata(pdev);
535
-
536
- clk_disable_unprepare(tmdev->mod_clk);
537
- clk_disable_unprepare(tmdev->bus_clk);
538
- reset_control_assert(tmdev->reset);
539
-
540
- return 0;
541
-}
542
-
543525 static const struct ths_thermal_chip sun8i_a83t_ths = {
544526 .sensor_num = 3,
545527 .scale = 705,
....@@ -641,7 +623,6 @@
641623
642624 static struct platform_driver ths_driver = {
643625 .probe = sun8i_ths_probe,
644
- .remove = sun8i_ths_remove,
645626 .driver = {
646627 .name = "sun8i-thermal",
647628 .of_match_table = of_ths_match,