@@ -393,7 +393,12 @@ static int gpio_fan_set_cur_state(struct thermal_cooling_device *cdev,
393
393
if (state >= fan_data -> num_speed )
394
394
return - EINVAL ;
395
395
396
+ mutex_lock (& fan_data -> lock );
397
+
396
398
set_fan_speed (fan_data , state );
399
+
400
+ mutex_unlock (& fan_data -> lock );
401
+
397
402
return 0 ;
398
403
}
399
404
@@ -489,7 +494,11 @@ MODULE_DEVICE_TABLE(of, of_gpio_fan_match);
489
494
490
495
static void gpio_fan_stop (void * data )
491
496
{
497
+ struct gpio_fan_data * fan_data = data ;
498
+
499
+ mutex_lock (& fan_data -> lock );
492
500
set_fan_speed (data , 0 );
501
+ mutex_unlock (& fan_data -> lock );
493
502
}
494
503
495
504
static int gpio_fan_probe (struct platform_device * pdev )
@@ -562,7 +571,9 @@ static int gpio_fan_suspend(struct device *dev)
562
571
563
572
if (fan_data -> gpios ) {
564
573
fan_data -> resume_speed = fan_data -> speed_index ;
574
+ mutex_lock (& fan_data -> lock );
565
575
set_fan_speed (fan_data , 0 );
576
+ mutex_unlock (& fan_data -> lock );
566
577
}
567
578
568
579
return 0 ;
@@ -572,8 +583,11 @@ static int gpio_fan_resume(struct device *dev)
572
583
{
573
584
struct gpio_fan_data * fan_data = dev_get_drvdata (dev );
574
585
575
- if (fan_data -> gpios )
586
+ if (fan_data -> gpios ) {
587
+ mutex_lock (& fan_data -> lock );
576
588
set_fan_speed (fan_data , fan_data -> resume_speed );
589
+ mutex_unlock (& fan_data -> lock );
590
+ }
577
591
578
592
return 0 ;
579
593
}
0 commit comments