Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regmap: split up regmap_config.use_single_rw

Split regmap_config.use_single_rw into use_single_read and
use_single_write. This change enables drivers of devices which only
support bulk operations in one direction to use the regmap_bulk_*()
functions for both directions and have their bulk operation split into
single operations only when necessary.

Update all struct regmap_config instances where use_single_rw==true to
instead set both use_single_read and use_single_write. No attempt was
made to evaluate whether it is possible to set only one of
use_single_read or use_single_write.

Signed-off-by: David Frey <dpfrey@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

David Frey and committed by
Mark Brown
1c96a2f6 9ad8eb01

+91 -50
+2 -2
drivers/base/regmap/regmap.c
··· 762 762 map->reg_stride_order = ilog2(map->reg_stride); 763 763 else 764 764 map->reg_stride_order = -1; 765 - map->use_single_read = config->use_single_rw || !bus || !bus->read; 766 - map->use_single_write = config->use_single_rw || !bus || !bus->write; 765 + map->use_single_read = config->use_single_read || !bus || !bus->read; 766 + map->use_single_write = config->use_single_write || !bus || !bus->write; 767 767 map->can_multi_write = config->can_multi_write && bus && bus->write; 768 768 if (bus) { 769 769 map->max_raw_read = bus->max_raw_read;
+2 -1
drivers/edac/altera_edac.c
··· 599 599 .volatile_reg = s10_sdram_volatile_reg, 600 600 .reg_read = s10_protected_reg_read, 601 601 .reg_write = s10_protected_reg_write, 602 - .use_single_rw = true, 602 + .use_single_read = true, 603 + .use_single_write = true, 603 604 }; 604 605 605 606 static int altr_s10_sdram_probe(struct platform_device *pdev)
+2 -1
drivers/hwmon/lm75.c
··· 254 254 .volatile_reg = lm75_is_volatile_reg, 255 255 .val_format_endian = REGMAP_ENDIAN_BIG, 256 256 .cache_type = REGCACHE_RBTREE, 257 - .use_single_rw = true, 257 + .use_single_read = true, 258 + .use_single_write = true, 258 259 }; 259 260 260 261 static void lm75_remove(void *data)
+2 -1
drivers/hwmon/lm95245.c
··· 541 541 .writeable_reg = lm95245_is_writeable_reg, 542 542 .volatile_reg = lm95245_is_volatile_reg, 543 543 .cache_type = REGCACHE_RBTREE, 544 - .use_single_rw = true, 544 + .use_single_read = true, 545 + .use_single_write = true, 545 546 }; 546 547 547 548 static const u32 lm95245_chip_config[] = {
+2 -1
drivers/hwmon/tmp102.c
··· 212 212 .volatile_reg = tmp102_is_volatile_reg, 213 213 .val_format_endian = REGMAP_ENDIAN_BIG, 214 214 .cache_type = REGCACHE_RBTREE, 215 - .use_single_rw = true, 215 + .use_single_read = true, 216 + .use_single_write = true, 216 217 }; 217 218 218 219 static int tmp102_probe(struct i2c_client *client,
+2 -1
drivers/hwmon/tmp108.c
··· 345 345 .volatile_reg = tmp108_is_volatile_reg, 346 346 .val_format_endian = REGMAP_ENDIAN_BIG, 347 347 .cache_type = REGCACHE_RBTREE, 348 - .use_single_rw = true, 348 + .use_single_read = true, 349 + .use_single_write = true, 349 350 }; 350 351 351 352 static int tmp108_probe(struct i2c_client *client,
+2 -1
drivers/iio/light/apds9960.c
··· 206 206 .name = APDS9960_REGMAP_NAME, 207 207 .reg_bits = 8, 208 208 .val_bits = 8, 209 - .use_single_rw = 1, 209 + .use_single_read = true, 210 + .use_single_write = true, 210 211 211 212 .volatile_table = &apds9960_volatile_table, 212 213 .precious_table = &apds9960_precious_table,
+10 -9
drivers/iio/light/max44000.c
··· 473 473 } 474 474 475 475 static const struct regmap_config max44000_regmap_config = { 476 - .reg_bits = 8, 477 - .val_bits = 8, 476 + .reg_bits = 8, 477 + .val_bits = 8, 478 478 479 - .max_register = MAX44000_REG_PRX_DATA, 480 - .readable_reg = max44000_readable_reg, 481 - .writeable_reg = max44000_writeable_reg, 482 - .volatile_reg = max44000_volatile_reg, 483 - .precious_reg = max44000_precious_reg, 479 + .max_register = MAX44000_REG_PRX_DATA, 480 + .readable_reg = max44000_readable_reg, 481 + .writeable_reg = max44000_writeable_reg, 482 + .volatile_reg = max44000_volatile_reg, 483 + .precious_reg = max44000_precious_reg, 484 484 485 - .use_single_rw = 1, 486 - .cache_type = REGCACHE_RBTREE, 485 + .use_single_read = true, 486 + .use_single_write = true, 487 + .cache_type = REGCACHE_RBTREE, 487 488 }; 488 489 489 490 static irqreturn_t max44000_trigger_handler(int irq, void *p)
+2 -1
drivers/iio/temperature/mlx90632.c
··· 140 140 .rd_table = &mlx90632_readable_regs_tbl, 141 141 .wr_table = &mlx90632_writeable_regs_tbl, 142 142 143 - .use_single_rw = true, 143 + .use_single_read = true, 144 + .use_single_write = true, 144 145 .reg_format_endian = REGMAP_ENDIAN_BIG, 145 146 .val_format_endian = REGMAP_ENDIAN_BIG, 146 147 .cache_type = REGCACHE_RBTREE,
+2 -1
drivers/input/touchscreen/tsc200x-core.c
··· 68 68 .read_flag_mask = TSC200X_REG_READ, 69 69 .write_flag_mask = TSC200X_REG_PND0, 70 70 .wr_table = &tsc200x_writable_table, 71 - .use_single_rw = true, 71 + .use_single_read = true, 72 + .use_single_write = true, 72 73 }; 73 74 EXPORT_SYMBOL_GPL(tsc200x_regmap_config); 74 75
+2 -1
drivers/mfd/altera-a10sr.c
··· 108 108 109 109 .cache_type = REGCACHE_NONE, 110 110 111 - .use_single_rw = true, 111 + .use_single_read = true, 112 + .use_single_write = true, 112 113 .read_flag_mask = 1, 113 114 .write_flag_mask = 0, 114 115
+2 -1
drivers/mfd/da9052-spi.c
··· 46 46 config.reg_bits = 7; 47 47 config.pad_bits = 1; 48 48 config.val_bits = 8; 49 - config.use_single_rw = 1; 49 + config.use_single_read = true; 50 + config.use_single_write = true; 50 51 51 52 da9052->regmap = devm_regmap_init_spi(spi, &config); 52 53 if (IS_ERR(da9052->regmap)) {
+2 -1
drivers/mfd/mc13xxx-spi.c
··· 57 57 .max_register = MC13XXX_NUMREGS, 58 58 59 59 .cache_type = REGCACHE_NONE, 60 - .use_single_rw = 1, 60 + .use_single_read = true, 61 + .use_single_write = true, 61 62 }; 62 63 63 64 static int mc13xxx_spi_read(void *context, const void *reg, size_t reg_size,
+2 -1
drivers/mfd/twl6040.c
··· 613 613 .writeable_reg = twl6040_writeable_reg, 614 614 615 615 .cache_type = REGCACHE_RBTREE, 616 - .use_single_rw = true, 616 + .use_single_read = true, 617 + .use_single_write = true, 617 618 }; 618 619 619 620 static const struct regmap_irq twl6040_irqs[] = {
+2 -1
drivers/regulator/ltc3589.c
··· 404 404 .max_register = LTC3589_L2DTV2, 405 405 .reg_defaults = ltc3589_reg_defaults, 406 406 .num_reg_defaults = ARRAY_SIZE(ltc3589_reg_defaults), 407 - .use_single_rw = true, 407 + .use_single_read = true, 408 + .use_single_write = true, 408 409 .cache_type = REGCACHE_RBTREE, 409 410 }; 410 411
+2 -1
drivers/regulator/ltc3676.c
··· 321 321 .readable_reg = ltc3676_readable_reg, 322 322 .volatile_reg = ltc3676_volatile_reg, 323 323 .max_register = LTC3676_CLIRQ, 324 - .use_single_rw = true, 324 + .use_single_read = true, 325 + .use_single_write = true, 325 326 .cache_type = REGCACHE_RBTREE, 326 327 }; 327 328
+8 -4
include/linux/regmap.h
··· 315 315 * masks are used. 316 316 * @zero_flag_mask: If set, read_flag_mask and write_flag_mask are used even 317 317 * if they are both empty. 318 - * @use_single_rw: If set, converts the bulk read and write operations into 319 - * a series of single read and write operations. This is useful 320 - * for device that does not support bulk read and write. 318 + * @use_single_read: If set, converts the bulk read operation into a series of 319 + * single read operations. This is useful for a device that 320 + * does not support bulk read. 321 + * @use_single_write: If set, converts the bulk write operation into a series of 322 + * single write operations. This is useful for a device that 323 + * does not support bulk write. 321 324 * @can_multi_write: If set, the device supports the multi write mode of bulk 322 325 * write operations, if clear multi write requests will be 323 326 * split into individual write operations ··· 383 380 unsigned long write_flag_mask; 384 381 bool zero_flag_mask; 385 382 386 - bool use_single_rw; 383 + bool use_single_read; 384 + bool use_single_write; 387 385 bool can_multi_write; 388 386 389 387 enum regmap_endian reg_format_endian;
+2 -1
sound/hda/hdac_regmap.c
··· 359 359 .cache_type = REGCACHE_RBTREE, 360 360 .reg_read = hda_reg_read, 361 361 .reg_write = hda_reg_write, 362 - .use_single_rw = true, 362 + .use_single_read = true, 363 + .use_single_write = true, 363 364 }; 364 365 365 366 /**
+2 -1
sound/soc/codecs/cs35l33.c
··· 857 857 .readable_reg = cs35l33_readable_register, 858 858 .writeable_reg = cs35l33_writeable_register, 859 859 .cache_type = REGCACHE_RBTREE, 860 - .use_single_rw = true, 860 + .use_single_read = true, 861 + .use_single_write = true, 861 862 }; 862 863 863 864 static int __maybe_unused cs35l33_runtime_resume(struct device *dev)
+2 -1
sound/soc/codecs/cs35l35.c
··· 1105 1105 .readable_reg = cs35l35_readable_register, 1106 1106 .precious_reg = cs35l35_precious_register, 1107 1107 .cache_type = REGCACHE_RBTREE, 1108 - .use_single_rw = true, 1108 + .use_single_read = true, 1109 + .use_single_write = true, 1109 1110 }; 1110 1111 1111 1112 static irqreturn_t cs35l35_irq(int irq, void *data)
+3 -1
sound/soc/codecs/cs43130.c
··· 2362 2362 .precious_reg = cs43130_precious_register, 2363 2363 .volatile_reg = cs43130_volatile_register, 2364 2364 .cache_type = REGCACHE_RBTREE, 2365 - .use_single_rw = true, /* needed for regcache_sync */ 2365 + /* needed for regcache_sync */ 2366 + .use_single_read = true, 2367 + .use_single_write = true, 2366 2368 }; 2367 2369 2368 2370 static u16 const cs43130_dc_threshold[CS43130_DC_THRESHOLD] = {
+2 -1
sound/soc/codecs/es8328.c
··· 824 824 .val_bits = 8, 825 825 .max_register = ES8328_REG_MAX, 826 826 .cache_type = REGCACHE_RBTREE, 827 - .use_single_rw = true, 827 + .use_single_read = true, 828 + .use_single_write = true, 828 829 }; 829 830 EXPORT_SYMBOL_GPL(es8328_regmap_config); 830 831
+2 -1
sound/soc/codecs/rt1305.c
··· 963 963 .num_reg_defaults = ARRAY_SIZE(rt1305_reg), 964 964 .ranges = rt1305_ranges, 965 965 .num_ranges = ARRAY_SIZE(rt1305_ranges), 966 - .use_single_rw = true, 966 + .use_single_read = true, 967 + .use_single_write = true, 967 968 }; 968 969 969 970 #if defined(CONFIG_OF)
+2 -1
sound/soc/codecs/rt5514.c
··· 1201 1201 .cache_type = REGCACHE_RBTREE, 1202 1202 .reg_defaults = rt5514_reg, 1203 1203 .num_reg_defaults = ARRAY_SIZE(rt5514_reg), 1204 - .use_single_rw = true, 1204 + .use_single_read = true, 1205 + .use_single_write = true, 1205 1206 }; 1206 1207 1207 1208 static const struct i2c_device_id rt5514_i2c_id[] = {
+2 -1
sound/soc/codecs/rt5616.c
··· 1313 1313 static const struct regmap_config rt5616_regmap = { 1314 1314 .reg_bits = 8, 1315 1315 .val_bits = 16, 1316 - .use_single_rw = true, 1316 + .use_single_read = true, 1317 + .use_single_write = true, 1317 1318 .max_register = RT5616_DEVICE_ID + 1 + (ARRAY_SIZE(rt5616_ranges) * 1318 1319 RT5616_PR_SPACING), 1319 1320 .volatile_reg = rt5616_volatile_register,
+2 -1
sound/soc/codecs/rt5640.c
··· 2704 2704 static const struct regmap_config rt5640_regmap = { 2705 2705 .reg_bits = 8, 2706 2706 .val_bits = 16, 2707 - .use_single_rw = true, 2707 + .use_single_read = true, 2708 + .use_single_write = true, 2708 2709 2709 2710 .max_register = RT5640_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5640_ranges) * 2710 2711 RT5640_PR_SPACING),
+6 -3
sound/soc/codecs/rt5645.c
··· 3559 3559 static const struct regmap_config rt5645_regmap = { 3560 3560 .reg_bits = 8, 3561 3561 .val_bits = 16, 3562 - .use_single_rw = true, 3562 + .use_single_read = true, 3563 + .use_single_write = true, 3563 3564 .max_register = RT5645_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5645_ranges) * 3564 3565 RT5645_PR_SPACING), 3565 3566 .volatile_reg = rt5645_volatile_register, ··· 3576 3575 static const struct regmap_config rt5650_regmap = { 3577 3576 .reg_bits = 8, 3578 3577 .val_bits = 16, 3579 - .use_single_rw = true, 3578 + .use_single_read = true, 3579 + .use_single_write = true, 3580 3580 .max_register = RT5645_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5645_ranges) * 3581 3581 RT5645_PR_SPACING), 3582 3582 .volatile_reg = rt5645_volatile_register, ··· 3594 3592 .name="nocache", 3595 3593 .reg_bits = 8, 3596 3594 .val_bits = 16, 3597 - .use_single_rw = true, 3595 + .use_single_read = true, 3596 + .use_single_write = true, 3598 3597 .max_register = RT5645_VENDOR_ID2 + 1, 3599 3598 .cache_type = REGCACHE_NONE, 3600 3599 };
+2 -1
sound/soc/codecs/rt5651.c
··· 2124 2124 .num_reg_defaults = ARRAY_SIZE(rt5651_reg), 2125 2125 .ranges = rt5651_ranges, 2126 2126 .num_ranges = ARRAY_SIZE(rt5651_ranges), 2127 - .use_single_rw = true, 2127 + .use_single_read = true, 2128 + .use_single_write = true, 2128 2129 }; 2129 2130 2130 2131 #if defined(CONFIG_OF)
+2 -1
sound/soc/codecs/rt5660.c
··· 1217 1217 static const struct regmap_config rt5660_regmap = { 1218 1218 .reg_bits = 8, 1219 1219 .val_bits = 16, 1220 - .use_single_rw = true, 1220 + .use_single_read = true, 1221 + .use_single_write = true, 1221 1222 1222 1223 .max_register = RT5660_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5660_ranges) * 1223 1224 RT5660_PR_SPACING),
+6 -3
sound/soc/codecs/rt5663.c
··· 3252 3252 static const struct regmap_config rt5663_v2_regmap = { 3253 3253 .reg_bits = 16, 3254 3254 .val_bits = 16, 3255 - .use_single_rw = true, 3255 + .use_single_read = true, 3256 + .use_single_write = true, 3256 3257 .max_register = 0x07fa, 3257 3258 .volatile_reg = rt5663_v2_volatile_register, 3258 3259 .readable_reg = rt5663_v2_readable_register, ··· 3265 3264 static const struct regmap_config rt5663_regmap = { 3266 3265 .reg_bits = 16, 3267 3266 .val_bits = 16, 3268 - .use_single_rw = true, 3267 + .use_single_read = true, 3268 + .use_single_write = true, 3269 3269 .max_register = 0x03f3, 3270 3270 .volatile_reg = rt5663_volatile_register, 3271 3271 .readable_reg = rt5663_readable_register, ··· 3279 3277 .name = "nocache", 3280 3278 .reg_bits = 16, 3281 3279 .val_bits = 16, 3282 - .use_single_rw = true, 3280 + .use_single_read = true, 3281 + .use_single_write = true, 3283 3282 .max_register = 0x03f3, 3284 3283 .cache_type = REGCACHE_NONE, 3285 3284 };
+2 -1
sound/soc/codecs/rt5665.c
··· 4633 4633 .cache_type = REGCACHE_RBTREE, 4634 4634 .reg_defaults = rt5665_reg, 4635 4635 .num_reg_defaults = ARRAY_SIZE(rt5665_reg), 4636 - .use_single_rw = true, 4636 + .use_single_read = true, 4637 + .use_single_write = true, 4637 4638 }; 4638 4639 4639 4640 static const struct i2c_device_id rt5665_i2c_id[] = {
+2 -1
sound/soc/codecs/rt5668.c
··· 2375 2375 .cache_type = REGCACHE_RBTREE, 2376 2376 .reg_defaults = rt5668_reg, 2377 2377 .num_reg_defaults = ARRAY_SIZE(rt5668_reg), 2378 - .use_single_rw = true, 2378 + .use_single_read = true, 2379 + .use_single_write = true, 2379 2380 }; 2380 2381 2381 2382 static const struct i2c_device_id rt5668_i2c_id[] = {
+2 -1
sound/soc/codecs/rt5670.c
··· 2814 2814 static const struct regmap_config rt5670_regmap = { 2815 2815 .reg_bits = 8, 2816 2816 .val_bits = 16, 2817 - .use_single_rw = true, 2817 + .use_single_read = true, 2818 + .use_single_write = true, 2818 2819 .max_register = RT5670_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5670_ranges) * 2819 2820 RT5670_PR_SPACING), 2820 2821 .volatile_reg = rt5670_volatile_register,
+2 -1
sound/soc/codecs/rt5682.c
··· 2419 2419 .cache_type = REGCACHE_RBTREE, 2420 2420 .reg_defaults = rt5682_reg, 2421 2421 .num_reg_defaults = ARRAY_SIZE(rt5682_reg), 2422 - .use_single_rw = true, 2422 + .use_single_read = true, 2423 + .use_single_write = true, 2423 2424 }; 2424 2425 2425 2426 static const struct i2c_device_id rt5682_i2c_id[] = {