xref: /openbmc/linux/sound/soc/codecs/sigmadsp.h (revision 6b10998d74398ec8745d54dfdcbcc1eb445a2f9f)
140216ce7SLars-Peter Clausen /*
240216ce7SLars-Peter Clausen  * Load firmware files from Analog Devices SigmaStudio
340216ce7SLars-Peter Clausen  *
440216ce7SLars-Peter Clausen  * Copyright 2009-2011 Analog Devices Inc.
540216ce7SLars-Peter Clausen  *
640216ce7SLars-Peter Clausen  * Licensed under the GPL-2 or later.
740216ce7SLars-Peter Clausen  */
840216ce7SLars-Peter Clausen 
940216ce7SLars-Peter Clausen #ifndef __SIGMA_FIRMWARE_H__
1040216ce7SLars-Peter Clausen #define __SIGMA_FIRMWARE_H__
1140216ce7SLars-Peter Clausen 
1238fd54eeSLars-Peter Clausen #include <linux/device.h>
1338fd54eeSLars-Peter Clausen #include <linux/regmap.h>
1438fd54eeSLars-Peter Clausen 
15*6b10998dSLars-Peter Clausen struct sigma_action {
16*6b10998dSLars-Peter Clausen 	u8 instr;
17*6b10998dSLars-Peter Clausen 	u8 len_hi;
18*6b10998dSLars-Peter Clausen 	__le16 len;
19*6b10998dSLars-Peter Clausen 	__be16 addr;
20*6b10998dSLars-Peter Clausen 	unsigned char payload[];
21*6b10998dSLars-Peter Clausen } __packed;
22*6b10998dSLars-Peter Clausen 
23*6b10998dSLars-Peter Clausen struct sigma_firmware {
24*6b10998dSLars-Peter Clausen 	const struct firmware *fw;
25*6b10998dSLars-Peter Clausen 	size_t pos;
26*6b10998dSLars-Peter Clausen 
27*6b10998dSLars-Peter Clausen 	void *control_data;
28*6b10998dSLars-Peter Clausen 	int (*write)(void *control_data, const struct sigma_action *sa,
29*6b10998dSLars-Peter Clausen 			size_t len);
30*6b10998dSLars-Peter Clausen };
31*6b10998dSLars-Peter Clausen 
32*6b10998dSLars-Peter Clausen int _process_sigma_firmware(struct device *dev,
33*6b10998dSLars-Peter Clausen 	struct sigma_firmware *ssfw, const char *name);
34*6b10998dSLars-Peter Clausen 
3540216ce7SLars-Peter Clausen struct i2c_client;
3640216ce7SLars-Peter Clausen 
3740216ce7SLars-Peter Clausen extern int process_sigma_firmware(struct i2c_client *client, const char *name);
3838fd54eeSLars-Peter Clausen extern int process_sigma_firmware_regmap(struct device *dev,
3938fd54eeSLars-Peter Clausen 		struct regmap *regmap, const char *name);
4040216ce7SLars-Peter Clausen 
4140216ce7SLars-Peter Clausen #endif
42