Add the new SPI write and read functions. The SPI read function is used for creating initial registers dump and may be used for debugging purposes. SPI operations are cached, so there is a new function to manage the cache (shadow). I have to remove the shift from the CS4245_SPI_* constants, since when we are performing the reading, we need to shift by 8 instead of 16. Signed-off-by: Roman Volkov <v1ron@mail.ru> Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
		
			
				
	
	
		
			110 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
#define CS4245_CHIP_ID		0x01
 | 
						|
#define CS4245_POWER_CTRL	0x02
 | 
						|
#define CS4245_DAC_CTRL_1	0x03
 | 
						|
#define CS4245_ADC_CTRL		0x04
 | 
						|
#define CS4245_MCLK_FREQ	0x05
 | 
						|
#define CS4245_SIGNAL_SEL	0x06
 | 
						|
#define CS4245_PGA_B_CTRL	0x07
 | 
						|
#define CS4245_PGA_A_CTRL	0x08
 | 
						|
#define CS4245_ANALOG_IN	0x09
 | 
						|
#define CS4245_DAC_A_CTRL	0x0a
 | 
						|
#define CS4245_DAC_B_CTRL	0x0b
 | 
						|
#define CS4245_DAC_CTRL_2	0x0c
 | 
						|
#define CS4245_INT_STATUS	0x0d
 | 
						|
#define CS4245_INT_MASK		0x0e
 | 
						|
#define CS4245_INT_MODE_MSB	0x0f
 | 
						|
#define CS4245_INT_MODE_LSB	0x10
 | 
						|
 | 
						|
/* Chip ID */
 | 
						|
#define CS4245_CHIP_PART_MASK	0xf0
 | 
						|
#define CS4245_CHIP_REV_MASK	0x0f
 | 
						|
 | 
						|
/* Power Control */
 | 
						|
#define CS4245_FREEZE		0x80
 | 
						|
#define CS4245_PDN_MIC		0x08
 | 
						|
#define CS4245_PDN_ADC		0x04
 | 
						|
#define CS4245_PDN_DAC		0x02
 | 
						|
#define CS4245_PDN		0x01
 | 
						|
 | 
						|
/* DAC Control */
 | 
						|
#define CS4245_DAC_FM_MASK	0xc0
 | 
						|
#define CS4245_DAC_FM_SINGLE	0x00
 | 
						|
#define CS4245_DAC_FM_DOUBLE	0x40
 | 
						|
#define CS4245_DAC_FM_QUAD	0x80
 | 
						|
#define CS4245_DAC_DIF_MASK	0x30
 | 
						|
#define CS4245_DAC_DIF_LJUST	0x00
 | 
						|
#define CS4245_DAC_DIF_I2S	0x10
 | 
						|
#define CS4245_DAC_DIF_RJUST_16	0x20
 | 
						|
#define CS4245_DAC_DIF_RJUST_24	0x30
 | 
						|
#define CS4245_RESERVED_1	0x08
 | 
						|
#define CS4245_MUTE_DAC		0x04
 | 
						|
#define CS4245_DEEMPH		0x02
 | 
						|
#define CS4245_DAC_MASTER	0x01
 | 
						|
 | 
						|
/* ADC Control */
 | 
						|
#define CS4245_ADC_FM_MASK	0xc0
 | 
						|
#define CS4245_ADC_FM_SINGLE	0x00
 | 
						|
#define CS4245_ADC_FM_DOUBLE	0x40
 | 
						|
#define CS4245_ADC_FM_QUAD	0x80
 | 
						|
#define CS4245_ADC_DIF_MASK	0x10
 | 
						|
#define CS4245_ADC_DIF_LJUST	0x00
 | 
						|
#define CS4245_ADC_DIF_I2S	0x10
 | 
						|
#define CS4245_MUTE_ADC		0x04
 | 
						|
#define CS4245_HPF_FREEZE	0x02
 | 
						|
#define CS4245_ADC_MASTER	0x01
 | 
						|
 | 
						|
/* MCLK Frequency */
 | 
						|
#define CS4245_MCLK1_MASK	0x70
 | 
						|
#define CS4245_MCLK1_SHIFT	4
 | 
						|
#define CS4245_MCLK2_MASK	0x07
 | 
						|
#define CS4245_MCLK2_SHIFT	0
 | 
						|
#define CS4245_MCLK_1		0
 | 
						|
#define CS4245_MCLK_1_5		1
 | 
						|
#define CS4245_MCLK_2		2
 | 
						|
#define CS4245_MCLK_3		3
 | 
						|
#define CS4245_MCLK_4		4
 | 
						|
 | 
						|
/* Signal Selection */
 | 
						|
#define CS4245_A_OUT_SEL_MASK	0x60
 | 
						|
#define CS4245_A_OUT_SEL_HIZ	0x00
 | 
						|
#define CS4245_A_OUT_SEL_DAC	0x20
 | 
						|
#define CS4245_A_OUT_SEL_PGA	0x40
 | 
						|
#define CS4245_LOOP		0x02
 | 
						|
#define CS4245_ASYNCH		0x01
 | 
						|
 | 
						|
/* Channel B/A PGA Control */
 | 
						|
#define CS4245_PGA_GAIN_MASK	0x3f
 | 
						|
 | 
						|
/* ADC Input Control */
 | 
						|
#define CS4245_PGA_SOFT		0x10
 | 
						|
#define CS4245_PGA_ZERO		0x08
 | 
						|
#define CS4245_SEL_MASK		0x07
 | 
						|
#define CS4245_SEL_MIC		0x00
 | 
						|
#define CS4245_SEL_INPUT_1	0x01
 | 
						|
#define CS4245_SEL_INPUT_2	0x02
 | 
						|
#define CS4245_SEL_INPUT_3	0x03
 | 
						|
#define CS4245_SEL_INPUT_4	0x04
 | 
						|
#define CS4245_SEL_INPUT_5	0x05
 | 
						|
#define CS4245_SEL_INPUT_6	0x06
 | 
						|
 | 
						|
/* DAC Channel A/B Volume Control */
 | 
						|
#define CS4245_VOL_MASK		0xff
 | 
						|
 | 
						|
/* DAC Control 2 */
 | 
						|
#define CS4245_DAC_SOFT		0x80
 | 
						|
#define CS4245_DAC_ZERO		0x40
 | 
						|
#define CS4245_INVERT_DAC	0x20
 | 
						|
#define CS4245_INT_ACTIVE_HIGH	0x01
 | 
						|
 | 
						|
/* Interrupt Status/Mask/Mode */
 | 
						|
#define CS4245_ADC_CLK_ERR	0x08
 | 
						|
#define CS4245_DAC_CLK_ERR	0x04
 | 
						|
#define CS4245_ADC_OVFL		0x02
 | 
						|
#define CS4245_ADC_UNDRFL	0x01
 | 
						|
 | 
						|
#define CS4245_SPI_ADDRESS_S	(0x9e << 16)
 | 
						|
#define CS4245_SPI_WRITE_S	(0 << 16)
 | 
						|
 | 
						|
#define CS4245_SPI_ADDRESS	0x9e
 | 
						|
#define CS4245_SPI_WRITE	0
 | 
						|
#define CS4245_SPI_READ		1
 |