Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8e38046 authored by Sudheer Papothi's avatar Sudheer Papothi
Browse files

soundwire: Add support for soundwire bulk write



Soundwire supports bulk register writes to write
multiple registers in one transaction. Change adds
support in soundwire framework to allow multiple
register writes in one transaction.

Change-Id: Icaa845e34b93af268c73a35fa70697a179aa6584
Signed-off-by: default avatarSudheer Papothi <spapothi@codeaurora.org>
parent 13848461
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -456,6 +456,33 @@ int swr_read(struct swr_device *dev, u8 dev_num, u16 reg_addr,
}
EXPORT_SYMBOL(swr_read);

/**
 * swr_bulk_write - write soundwire slave device registers
 * @dev: pointer to soundwire slave device
 * @dev_num: logical device num of soundwire slave device
 * @reg_addr: register address of soundwire slave device
 * @buf: contains value of register address
 * @len: indicates number of registers
 *
 * This API will write the value of the register address to
 * soundwire slave device
 */
int swr_bulk_write(struct swr_device *dev, u8 dev_num, void *reg,
		   const void *buf, size_t len)
{
	struct swr_master *master;

	if (!dev || !dev->master)
		return -EINVAL;

	master = dev->master;
	if (master->bulk_write)
		return master->bulk_write(master, dev_num, reg, buf, len);

	return -ENOSYS;
}
EXPORT_SYMBOL(swr_bulk_write);

/**
 * swr_write - write soundwire slave device registers
 * @dev: pointer to soundwire slave device
+5 −0
Original line number Diff line number Diff line
@@ -137,6 +137,8 @@ struct swr_master {
			void *buf, u32 len);
	int (*write)(struct swr_master *mstr, u8 dev_num, u16 reg_addr,
			const void *buf);
	int (*bulk_write)(struct swr_master *master, u8 dev_num, void *reg,
			  const void *buf, size_t len);
	int (*get_logical_dev_num)(struct swr_master *mstr, u64 dev_id,
				u8 *dev_num);
};
@@ -259,6 +261,9 @@ extern int swr_read(struct swr_device *dev, u8 dev_num, u16 reg_addr,
extern int swr_write(struct swr_device *dev, u8 dev_num, u16 reg_addr,
			const void *buf);

extern int swr_bulk_write(struct swr_device *dev, u8 dev_num, void *reg_addr,
			  const void *buf, size_t len);

extern int swr_connect_port(struct swr_device *dev, u8 *port_id, u8 num_port,
				u8 *ch_mask, u32 *ch_rate, u8 *num_ch);