diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/fsi/fsi-core.c | 94 | 
1 files changed, 46 insertions, 48 deletions
diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c index a3f0d41f4c59..f039b348e484 100644 --- a/drivers/fsi/fsi-core.c +++ b/drivers/fsi/fsi-core.c @@ -215,7 +215,52 @@ static int fsi_slave_report_and_clear_errors(struct fsi_slave *slave)  			&irq, sizeof(irq));  } -static int fsi_slave_set_smode(struct fsi_master *master, int link, int id); +/* Encode slave local bus echo delay */ +static inline uint32_t fsi_smode_echodly(int x) +{ +	return (x & FSI_SMODE_ED_MASK) << FSI_SMODE_ED_SHIFT; +} + +/* Encode slave local bus send delay */ +static inline uint32_t fsi_smode_senddly(int x) +{ +	return (x & FSI_SMODE_SD_MASK) << FSI_SMODE_SD_SHIFT; +} + +/* Encode slave local bus clock rate ratio */ +static inline uint32_t fsi_smode_lbcrr(int x) +{ +	return (x & FSI_SMODE_LBCRR_MASK) << FSI_SMODE_LBCRR_SHIFT; +} + +/* Encode slave ID */ +static inline uint32_t fsi_smode_sid(int x) +{ +	return (x & FSI_SMODE_SID_MASK) << FSI_SMODE_SID_SHIFT; +} + +static uint32_t fsi_slave_smode(int id) +{ +	return FSI_SMODE_WSC | FSI_SMODE_ECRC +		| fsi_smode_sid(id) +		| fsi_smode_echodly(0xf) | fsi_smode_senddly(0xf) +		| fsi_smode_lbcrr(0x8); +} + +static int fsi_slave_set_smode(struct fsi_master *master, int link, int id) +{ +	uint32_t smode; +	__be32 data; + +	/* set our smode register with the slave ID field to 0; this enables +	 * extended slave addressing +	 */ +	smode = fsi_slave_smode(id); +	data = cpu_to_be32(smode); + +	return fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SMODE, +			&data, sizeof(data)); +}  static int fsi_slave_handle_error(struct fsi_slave *slave, bool write,  				  uint32_t addr, size_t size) @@ -563,53 +608,6 @@ static const struct bin_attribute fsi_slave_term_attr = {  	.write = fsi_slave_sysfs_term_write,  }; -/* Encode slave local bus echo delay */ -static inline uint32_t fsi_smode_echodly(int x) -{ -	return (x & FSI_SMODE_ED_MASK) << FSI_SMODE_ED_SHIFT; -} - -/* Encode slave local bus send delay */ -static inline uint32_t fsi_smode_senddly(int x) -{ -	return (x & FSI_SMODE_SD_MASK) << FSI_SMODE_SD_SHIFT; -} - -/* Encode slave local bus clock rate ratio */ -static inline uint32_t fsi_smode_lbcrr(int x) -{ -	return (x & FSI_SMODE_LBCRR_MASK) << FSI_SMODE_LBCRR_SHIFT; -} - -/* Encode slave ID */ -static inline uint32_t fsi_smode_sid(int x) -{ -	return (x & FSI_SMODE_SID_MASK) << FSI_SMODE_SID_SHIFT; -} - -static uint32_t fsi_slave_smode(int id) -{ -	return FSI_SMODE_WSC | FSI_SMODE_ECRC -		| fsi_smode_sid(id) -		| fsi_smode_echodly(0xf) | fsi_smode_senddly(0xf) -		| fsi_smode_lbcrr(0x8); -} - -static int fsi_slave_set_smode(struct fsi_master *master, int link, int id) -{ -	uint32_t smode; -	__be32 data; - -	/* set our smode register with the slave ID field to 0; this enables -	 * extended slave addressing -	 */ -	smode = fsi_slave_smode(id); -	data = cpu_to_be32(smode); - -	return fsi_master_write(master, link, id, FSI_SLAVE_BASE + FSI_SMODE, -			&data, sizeof(data)); -} -  static void fsi_slave_release(struct device *dev)  {  	struct fsi_slave *slave = to_fsi_slave(dev);  |