1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Load firmware files from Analog Devices SigmaStudio
4  *
5  * Copyright 2009-2011 Analog Devices Inc.
6  */
7 
8 #ifndef __SIGMA_FIRMWARE_H__
9 #define __SIGMA_FIRMWARE_H__
10 
11 #include <linux/device.h>
12 #include <linux/regmap.h>
13 #include <linux/list.h>
14 
15 #include <sound/pcm.h>
16 
17 struct sigmadsp;
18 struct snd_soc_component;
19 struct snd_pcm_substream;
20 
21 struct sigmadsp_ops {
22 	int (*safeload)(struct sigmadsp *sigmadsp, unsigned int addr,
23 			const uint8_t *data, size_t len);
24 };
25 
26 struct sigmadsp {
27 	const struct sigmadsp_ops *ops;
28 
29 	struct list_head ctrl_list;
30 	struct list_head data_list;
31 
32 	struct snd_pcm_hw_constraint_list rate_constraints;
33 
34 	unsigned int current_samplerate;
35 	struct snd_soc_component *component;
36 	struct device *dev;
37 
38 	struct mutex lock;
39 
40 	void *control_data;
41 	int (*write)(void *, unsigned int, const uint8_t *, size_t);
42 	int (*read)(void *, unsigned int, uint8_t *, size_t);
43 };
44 
45 struct sigmadsp *devm_sigmadsp_init(struct device *dev,
46 	const struct sigmadsp_ops *ops, const char *firmware_name);
47 
48 int sigmadsp_restrict_params(struct sigmadsp *sigmadsp,
49 	struct snd_pcm_substream *substream);
50 
51 struct i2c_client;
52 
53 struct sigmadsp *devm_sigmadsp_init_regmap(struct device *dev,
54 	struct regmap *regmap, const struct sigmadsp_ops *ops,
55 	const char *firmware_name);
56 struct sigmadsp *devm_sigmadsp_init_i2c(struct i2c_client *client,
57 	const struct sigmadsp_ops *ops,	const char *firmware_name);
58 
59 int sigmadsp_attach(struct sigmadsp *sigmadsp,
60 	struct snd_soc_component *component);
61 int sigmadsp_setup(struct sigmadsp *sigmadsp, unsigned int samplerate);
62 void sigmadsp_reset(struct sigmadsp *sigmadsp);
63 
64 #endif
65