@@ -598,6 +598,17 @@ int regmap_attach_dev(struct device *dev, struct regmap *map,
598598}
599599EXPORT_SYMBOL_GPL (regmap_attach_dev );
600600
601+ static int dev_get_regmap_match (struct device * dev , void * res , void * data );
602+
603+ static int regmap_detach_dev (struct device * dev , struct regmap * map )
604+ {
605+ if (!dev )
606+ return 0 ;
607+
608+ return devres_release (dev , dev_get_regmap_release ,
609+ dev_get_regmap_match , (void * )map -> name );
610+ }
611+
601612static enum regmap_endian regmap_get_reg_endian (const struct regmap_bus * bus ,
602613 const struct regmap_config * config )
603614{
@@ -758,14 +769,13 @@ struct regmap *__regmap_init(struct device *dev,
758769 map -> alloc_flags = GFP_KERNEL ;
759770
760771 map -> reg_base = config -> reg_base ;
772+ map -> reg_shift = config -> pad_bits % 8 ;
761773
762- map -> format .reg_bytes = DIV_ROUND_UP (config -> reg_bits , 8 );
763774 map -> format .pad_bytes = config -> pad_bits / 8 ;
764775 map -> format .reg_shift = config -> reg_shift ;
765- map -> format .val_bytes = DIV_ROUND_UP (config -> val_bits , 8 );
766- map -> format .buf_size = DIV_ROUND_UP (config -> reg_bits +
767- config -> val_bits + config -> pad_bits , 8 );
768- map -> reg_shift = config -> pad_bits % 8 ;
776+ map -> format .reg_bytes = BITS_TO_BYTES (config -> reg_bits );
777+ map -> format .val_bytes = BITS_TO_BYTES (config -> val_bits );
778+ map -> format .buf_size = BITS_TO_BYTES (config -> reg_bits + config -> val_bits + config -> pad_bits );
769779 if (config -> reg_stride )
770780 map -> reg_stride = config -> reg_stride ;
771781 else
@@ -1052,13 +1062,13 @@ struct regmap *__regmap_init(struct device *dev,
10521062
10531063 /* Sanity check */
10541064 if (range_cfg -> range_max < range_cfg -> range_min ) {
1055- dev_err (map -> dev , "Invalid range %d: %d < %d \n" , i ,
1065+ dev_err (map -> dev , "Invalid range %d: %u < %u \n" , i ,
10561066 range_cfg -> range_max , range_cfg -> range_min );
10571067 goto err_range ;
10581068 }
10591069
10601070 if (range_cfg -> range_max > map -> max_register ) {
1061- dev_err (map -> dev , "Invalid range %d: %d > %d \n" , i ,
1071+ dev_err (map -> dev , "Invalid range %d: %u > %u \n" , i ,
10621072 range_cfg -> range_max , map -> max_register );
10631073 goto err_range ;
10641074 }
@@ -1445,6 +1455,7 @@ void regmap_exit(struct regmap *map)
14451455{
14461456 struct regmap_async * async ;
14471457
1458+ regmap_detach_dev (map -> dev , map );
14481459 regcache_exit (map );
14491460
14501461 regmap_debugfs_exit (map );
0 commit comments