Skip to content

Commit f231ff3

Browse files
Lucas Tanurebroonie
authored andcommitted
regmap: spi: Set regmap max raw r/w from max_transfer_size
Set regmap raw read/write from spi max_transfer_size so regmap_raw_read/write can split the access into chunks Signed-off-by: Lucas Tanure <[email protected]> Reviewed-by: Charles Keepax <[email protected]> [André: fix build warning] Signed-off-by: André Almeida <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 6880fa6 commit f231ff3

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

drivers/base/regmap/regmap-spi.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,37 @@ static const struct regmap_bus regmap_spi = {
109109
.val_format_endian_default = REGMAP_ENDIAN_BIG,
110110
};
111111

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+
112132
struct regmap *__regmap_init_spi(struct spi_device *spi,
113133
const struct regmap_config *config,
114134
struct lock_class_key *lock_key,
115135
const char *lock_name)
116136
{
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);
119143
}
120144
EXPORT_SYMBOL_GPL(__regmap_init_spi);
121145

@@ -124,8 +148,12 @@ struct regmap *__devm_regmap_init_spi(struct spi_device *spi,
124148
struct lock_class_key *lock_key,
125149
const char *lock_name)
126150
{
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);
129157
}
130158
EXPORT_SYMBOL_GPL(__devm_regmap_init_spi);
131159

0 commit comments

Comments
 (0)