@@ -453,7 +453,6 @@ cy8c95x0_mux_reg_read(void *context, unsigned int off, unsigned int *val)
453
453
u8 port = CY8C95X0_MUX_REGMAP_TO_PORT (off );
454
454
int ret , reg = CY8C95X0_MUX_REGMAP_TO_REG (off );
455
455
456
- mutex_lock (& chip -> i2c_lock );
457
456
/* Select the correct bank */
458
457
ret = regmap_write (chip -> regmap , CY8C95X0_PORTSEL , port );
459
458
if (ret < 0 )
@@ -463,11 +462,7 @@ cy8c95x0_mux_reg_read(void *context, unsigned int off, unsigned int *val)
463
462
* Read the register through direct access regmap. The target range
464
463
* is marked volatile.
465
464
*/
466
- ret = regmap_read (chip -> regmap , reg , val );
467
- out :
468
- mutex_unlock (& chip -> i2c_lock );
469
-
470
- return ret ;
465
+ return regmap_read (chip -> regmap , reg , val );
471
466
}
472
467
473
468
static int
@@ -477,7 +472,6 @@ cy8c95x0_mux_reg_write(void *context, unsigned int off, unsigned int val)
477
472
u8 port = CY8C95X0_MUX_REGMAP_TO_PORT (off );
478
473
int ret , reg = CY8C95X0_MUX_REGMAP_TO_REG (off );
479
474
480
- mutex_lock (& chip -> i2c_lock );
481
475
/* Select the correct bank */
482
476
ret = regmap_write (chip -> regmap , CY8C95X0_PORTSEL , port );
483
477
if (ret < 0 )
@@ -487,11 +481,7 @@ cy8c95x0_mux_reg_write(void *context, unsigned int off, unsigned int val)
487
481
* Write the register through direct access regmap. The target range
488
482
* is marked volatile.
489
483
*/
490
- ret = regmap_write (chip -> regmap , reg , val );
491
- out :
492
- mutex_unlock (& chip -> i2c_lock );
493
-
494
- return ret ;
484
+ return regmap_write (chip -> regmap , reg , val );
495
485
}
496
486
497
487
static bool cy8c95x0_mux_accessible_register (struct device * dev , unsigned int off )
@@ -524,6 +514,7 @@ static const struct regmap_config cy8c95x0_muxed_regmap = {
524
514
.num_reg_defaults_raw = MUXED_STRIDE * BANK_SZ ,
525
515
.readable_reg = cy8c95x0_mux_accessible_register ,
526
516
.writeable_reg = cy8c95x0_mux_accessible_register ,
517
+ .disable_locking = true,
527
518
};
528
519
529
520
/* Direct access regmap */
@@ -542,6 +533,7 @@ static const struct regmap_config cy8c95x0_i2c_regmap = {
542
533
543
534
.cache_type = REGCACHE_FLAT ,
544
535
.max_register = CY8C95X0_COMMAND ,
536
+ .disable_locking = true,
545
537
};
546
538
547
539
static inline int cy8c95x0_regmap_update_bits_base (struct cy8c95x0_pinctrl * chip ,
@@ -559,6 +551,8 @@ static inline int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip
559
551
if (reg == CY8C95X0_PORTSEL )
560
552
return - EINVAL ;
561
553
554
+ mutex_lock (& chip -> i2c_lock );
555
+
562
556
/* Registers behind the PORTSEL mux have their own regmap */
563
557
if (cy8c95x0_muxed_register (reg )) {
564
558
regmap = chip -> muxed_regmap ;
@@ -574,7 +568,7 @@ static inline int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip
574
568
575
569
ret = regmap_update_bits_base (regmap , off , mask , val , change , async , force );
576
570
if (ret < 0 )
577
- return ret ;
571
+ goto out ;
578
572
579
573
/* Update the cache when a WC bit is written */
580
574
if (cy8c95x0_wc_register (reg ) && (mask & val )) {
@@ -595,6 +589,8 @@ static inline int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip
595
589
regcache_cache_only (regmap , false);
596
590
}
597
591
}
592
+ out :
593
+ mutex_unlock (& chip -> i2c_lock );
598
594
599
595
return ret ;
600
596
}
@@ -667,7 +663,9 @@ static int cy8c95x0_regmap_read(struct cy8c95x0_pinctrl *chip, unsigned int reg,
667
663
unsigned int port , unsigned int * read_val )
668
664
{
669
665
struct regmap * regmap ;
670
- int off ;
666
+ int off , ret ;
667
+
668
+ mutex_lock (& chip -> i2c_lock );
671
669
672
670
/* Registers behind the PORTSEL mux have their own regmap */
673
671
if (cy8c95x0_muxed_register (reg )) {
@@ -682,7 +680,11 @@ static int cy8c95x0_regmap_read(struct cy8c95x0_pinctrl *chip, unsigned int reg,
682
680
off = reg ;
683
681
}
684
682
685
- return regmap_read (regmap , off , read_val );
683
+ ret = regmap_read (regmap , off , read_val );
684
+
685
+ mutex_unlock (& chip -> i2c_lock );
686
+
687
+ return ret ;
686
688
}
687
689
688
690
static int cy8c95x0_write_regs_mask (struct cy8c95x0_pinctrl * chip , int reg ,
0 commit comments