@@ -109,13 +109,37 @@ static const struct regmap_bus regmap_spi = {
109
109
.val_format_endian_default = REGMAP_ENDIAN_BIG ,
110
110
};
111
111
112
+ static const struct regmap_bus * regmap_get_spi_bus (struct spi_device * spi ,
113
+ const struct regmap_config * config )
114
+ {
115
+ size_t max_size = spi_max_transfer_size (spi );
116
+ struct regmap_bus * bus ;
117
+
118
+ if (max_size != SIZE_MAX ) {
119
+ bus = kmemdup (& regmap_spi , sizeof (* bus ), GFP_KERNEL );
120
+ if (!bus )
121
+ return ERR_PTR (- ENOMEM );
122
+
123
+ bus -> free_on_exit = true;
124
+ bus -> max_raw_read = max_size ;
125
+ bus -> max_raw_write = max_size ;
126
+ return bus ;
127
+ }
128
+
129
+ return & regmap_spi ;
130
+ }
131
+
112
132
struct regmap * __regmap_init_spi (struct spi_device * spi ,
113
133
const struct regmap_config * config ,
114
134
struct lock_class_key * lock_key ,
115
135
const char * lock_name )
116
136
{
117
- return __regmap_init (& spi -> dev , & regmap_spi , & spi -> dev , config ,
118
- lock_key , lock_name );
137
+ const struct regmap_bus * bus = regmap_get_spi_bus (spi , config );
138
+
139
+ if (IS_ERR (bus ))
140
+ return ERR_CAST (bus );
141
+
142
+ return __regmap_init (& spi -> dev , bus , & spi -> dev , config , lock_key , lock_name );
119
143
}
120
144
EXPORT_SYMBOL_GPL (__regmap_init_spi );
121
145
@@ -124,8 +148,12 @@ struct regmap *__devm_regmap_init_spi(struct spi_device *spi,
124
148
struct lock_class_key * lock_key ,
125
149
const char * lock_name )
126
150
{
127
- return __devm_regmap_init (& spi -> dev , & regmap_spi , & spi -> dev , config ,
128
- lock_key , lock_name );
151
+ const struct regmap_bus * bus = regmap_get_spi_bus (spi , config );
152
+
153
+ if (IS_ERR (bus ))
154
+ return ERR_CAST (bus );
155
+
156
+ return __devm_regmap_init (& spi -> dev , bus , & spi -> dev , config , lock_key , lock_name );
129
157
}
130
158
EXPORT_SYMBOL_GPL (__devm_regmap_init_spi );
131
159
0 commit comments