mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 08:04:22 +08:00
regmap: Fix for v6.0
A fix for how we handle controller constraints on SPI message sizes, only impacting systems with SPI controllers with very low limits like the AMD controller used in the Steam Deck. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAmMZ3OEACgkQJNaLcl1U h9CKOwf+O49lVDWbWr1YSR1hLvUtqV+rZsk5+kHCurTbEsa6eOuajx9hqHtEpSg9 CDHODkBk1TZmyfhS6/qWU5YUVGFpskkxebsJkxvYOCqaTi5UCDCLMRTWTP4yW5Gq YRVgjFRmPAcnfaJCFB9/1l6NOMez0EfbWwApPPh7PNYp/KiexfzTFYzWbwLLhvmX piY2tkG1SXrUjszFOZdXeukPU+HdQy40u1V7Akcs9ihwRMiIjeo0iqlE/R8QO5i4 vgevTPKPhsQJWGnZsqJvu9gtG6+Eoac6Kp4nqk4W/OVXpQNBhDHTI94D7X78+5hS xUwgHjYT4PjR9HmuYMksgjYov4DmFw== =ZO8J -----END PGP SIGNATURE----- Merge tag 'regmap-fix-v6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap Pull regmap fix from Mark Brown: "A fix for how we handle controller constraints on SPI message sizes, only impacting systems with SPI controllers with very low limits like the AMD controller used in the Steam Deck" * tag 'regmap-fix-v6.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap: regmap: spi: Reserve space for register address/padding
This commit is contained in:
commit
b1d27aa3b1
@ -113,6 +113,7 @@ static const struct regmap_bus *regmap_get_spi_bus(struct spi_device *spi,
|
|||||||
const struct regmap_config *config)
|
const struct regmap_config *config)
|
||||||
{
|
{
|
||||||
size_t max_size = spi_max_transfer_size(spi);
|
size_t max_size = spi_max_transfer_size(spi);
|
||||||
|
size_t max_msg_size, reg_reserve_size;
|
||||||
struct regmap_bus *bus;
|
struct regmap_bus *bus;
|
||||||
|
|
||||||
if (max_size != SIZE_MAX) {
|
if (max_size != SIZE_MAX) {
|
||||||
@ -120,9 +121,16 @@ static const struct regmap_bus *regmap_get_spi_bus(struct spi_device *spi,
|
|||||||
if (!bus)
|
if (!bus)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
max_msg_size = spi_max_message_size(spi);
|
||||||
|
reg_reserve_size = config->reg_bits / BITS_PER_BYTE
|
||||||
|
+ config->pad_bits / BITS_PER_BYTE;
|
||||||
|
if (max_size + reg_reserve_size > max_msg_size)
|
||||||
|
max_size -= reg_reserve_size;
|
||||||
|
|
||||||
bus->free_on_exit = true;
|
bus->free_on_exit = true;
|
||||||
bus->max_raw_read = max_size;
|
bus->max_raw_read = max_size;
|
||||||
bus->max_raw_write = max_size;
|
bus->max_raw_write = max_size;
|
||||||
|
|
||||||
return bus;
|
return bus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user