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

soundwire: export sdw_update() and sdw_update_no_pm()

We currently export sdw_read() and sdw_write() but the sdw_update()
and sdw_update_no_pm() are currently available only to the bus
code. This was missed in an earlier contribution.

Export both functions so that codec drivers can perform
read-modify-write operations without duplicating the code.

Fixes: b04c975e654c ('soundwire: bus: use sdw_update_no_pm when initializing a device')
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <bard.liao@intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Acked-By: Vinod Koul <vkoul@kernel.org>
Link: https://lore.kernel.org/r/20210614180815.153711-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Pierre-Louis Bossart and committed by
Mark Brown
d38ebaf2 fac165f2

+19 -14
+16 -1
drivers/soundwire/bus.c
··· 492 492 } 493 493 EXPORT_SYMBOL(sdw_read_no_pm); 494 494 495 - static int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val) 495 + int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val) 496 496 { 497 497 int tmp; 498 498 ··· 503 503 tmp = (tmp & ~mask) | val; 504 504 return sdw_write_no_pm(slave, addr, tmp); 505 505 } 506 + EXPORT_SYMBOL(sdw_update_no_pm); 507 + 508 + /* Read-Modify-Write Slave register */ 509 + int sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val) 510 + { 511 + int tmp; 512 + 513 + tmp = sdw_read(slave, addr); 514 + if (tmp < 0) 515 + return tmp; 516 + 517 + tmp = (tmp & ~mask) | val; 518 + return sdw_write(slave, addr, tmp); 519 + } 520 + EXPORT_SYMBOL(sdw_update); 506 521 507 522 /** 508 523 * sdw_nread() - Read "n" contiguous SDW Slave registers
-13
drivers/soundwire/bus.h
··· 201 201 params->data_mode = data_mode; 202 202 } 203 203 204 - /* Read-Modify-Write Slave register */ 205 - static inline int sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val) 206 - { 207 - int tmp; 208 - 209 - tmp = sdw_read(slave, addr); 210 - if (tmp < 0) 211 - return tmp; 212 - 213 - tmp = (tmp & ~mask) | val; 214 - return sdw_write(slave, addr, tmp); 215 - } 216 - 217 204 /* broadcast read/write for tests */ 218 205 int sdw_bread_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr); 219 206 int sdw_bwrite_no_pm_unlocked(struct sdw_bus *bus, u16 dev_num, u32 addr, u8 value);
+3
include/linux/soundwire/sdw.h
··· 1041 1041 int sdw_read_no_pm(struct sdw_slave *slave, u32 addr); 1042 1042 int sdw_nread(struct sdw_slave *slave, u32 addr, size_t count, u8 *val); 1043 1043 int sdw_nwrite(struct sdw_slave *slave, u32 addr, size_t count, u8 *val); 1044 + int sdw_update(struct sdw_slave *slave, u32 addr, u8 mask, u8 val); 1045 + int sdw_update_no_pm(struct sdw_slave *slave, u32 addr, u8 mask, u8 val); 1046 + 1044 1047 int sdw_compare_devid(struct sdw_slave *slave, struct sdw_slave_id id); 1045 1048 void sdw_extract_slave_id(struct sdw_bus *bus, u64 addr, struct sdw_slave_id *id); 1046 1049