@@ -816,7 +816,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
816
816
d -> mask_buf [i ],
817
817
chip -> irq_drv_data );
818
818
if (ret )
819
- goto err_alloc ;
819
+ goto err_mutex ;
820
820
}
821
821
822
822
if (chip -> mask_base && !chip -> handle_mask_sync ) {
@@ -827,7 +827,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
827
827
if (ret ) {
828
828
dev_err (map -> dev , "Failed to set masks in 0x%x: %d\n" ,
829
829
reg , ret );
830
- goto err_alloc ;
830
+ goto err_mutex ;
831
831
}
832
832
}
833
833
@@ -838,7 +838,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
838
838
if (ret ) {
839
839
dev_err (map -> dev , "Failed to set masks in 0x%x: %d\n" ,
840
840
reg , ret );
841
- goto err_alloc ;
841
+ goto err_mutex ;
842
842
}
843
843
}
844
844
@@ -855,7 +855,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
855
855
if (ret != 0 ) {
856
856
dev_err (map -> dev , "Failed to read IRQ status: %d\n" ,
857
857
ret );
858
- goto err_alloc ;
858
+ goto err_mutex ;
859
859
}
860
860
}
861
861
@@ -879,7 +879,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
879
879
if (ret != 0 ) {
880
880
dev_err (map -> dev , "Failed to ack 0x%x: %d\n" ,
881
881
reg , ret );
882
- goto err_alloc ;
882
+ goto err_mutex ;
883
883
}
884
884
}
885
885
}
@@ -901,7 +901,7 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
901
901
if (ret != 0 ) {
902
902
dev_err (map -> dev , "Failed to set masks in 0x%x: %d\n" ,
903
903
reg , ret );
904
- goto err_alloc ;
904
+ goto err_mutex ;
905
905
}
906
906
}
907
907
}
@@ -910,15 +910,15 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
910
910
if (chip -> status_is_level ) {
911
911
ret = read_irq_data (d );
912
912
if (ret < 0 )
913
- goto err_alloc ;
913
+ goto err_mutex ;
914
914
915
915
memcpy (d -> prev_status_buf , d -> status_buf ,
916
916
array_size (d -> chip -> num_regs , sizeof (d -> prev_status_buf [0 ])));
917
917
}
918
918
919
919
ret = regmap_irq_create_domain (fwnode , irq_base , chip , d );
920
920
if (ret )
921
- goto err_alloc ;
921
+ goto err_mutex ;
922
922
923
923
ret = request_threaded_irq (irq , NULL , regmap_irq_thread ,
924
924
irq_flags | IRQF_ONESHOT ,
@@ -935,6 +935,8 @@ int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
935
935
936
936
err_domain :
937
937
/* Should really dispose of the domain but... */
938
+ err_mutex :
939
+ mutex_destroy (& d -> lock );
938
940
err_alloc :
939
941
kfree (d -> type_buf );
940
942
kfree (d -> type_buf_def );
@@ -1027,6 +1029,7 @@ void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d)
1027
1029
kfree (d -> config_buf [i ]);
1028
1030
kfree (d -> config_buf );
1029
1031
}
1032
+ mutex_destroy (& d -> lock );
1030
1033
kfree (d );
1031
1034
}
1032
1035
EXPORT_SYMBOL_GPL (regmap_del_irq_chip );
0 commit comments