18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Load firmware files from Analog Devices SigmaStudio 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright 2009-2011 Analog Devices Inc. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#ifndef __SIGMA_FIRMWARE_H__ 98c2ecf20Sopenharmony_ci#define __SIGMA_FIRMWARE_H__ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/device.h> 128c2ecf20Sopenharmony_ci#include <linux/regmap.h> 138c2ecf20Sopenharmony_ci#include <linux/list.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include <sound/pcm.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistruct sigmadsp; 188c2ecf20Sopenharmony_cistruct snd_soc_component; 198c2ecf20Sopenharmony_cistruct snd_pcm_substream; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistruct sigmadsp_ops { 228c2ecf20Sopenharmony_ci int (*safeload)(struct sigmadsp *sigmadsp, unsigned int addr, 238c2ecf20Sopenharmony_ci const uint8_t *data, size_t len); 248c2ecf20Sopenharmony_ci}; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_cistruct sigmadsp { 278c2ecf20Sopenharmony_ci const struct sigmadsp_ops *ops; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci struct list_head ctrl_list; 308c2ecf20Sopenharmony_ci struct list_head data_list; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci struct snd_pcm_hw_constraint_list rate_constraints; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci unsigned int current_samplerate; 358c2ecf20Sopenharmony_ci struct snd_soc_component *component; 368c2ecf20Sopenharmony_ci struct device *dev; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci struct mutex lock; 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci void *control_data; 418c2ecf20Sopenharmony_ci int (*write)(void *, unsigned int, const uint8_t *, size_t); 428c2ecf20Sopenharmony_ci int (*read)(void *, unsigned int, uint8_t *, size_t); 438c2ecf20Sopenharmony_ci}; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistruct sigmadsp *devm_sigmadsp_init(struct device *dev, 468c2ecf20Sopenharmony_ci const struct sigmadsp_ops *ops, const char *firmware_name); 478c2ecf20Sopenharmony_civoid sigmadsp_reset(struct sigmadsp *sigmadsp); 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciint sigmadsp_restrict_params(struct sigmadsp *sigmadsp, 508c2ecf20Sopenharmony_ci struct snd_pcm_substream *substream); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistruct i2c_client; 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_cistruct sigmadsp *devm_sigmadsp_init_regmap(struct device *dev, 558c2ecf20Sopenharmony_ci struct regmap *regmap, const struct sigmadsp_ops *ops, 568c2ecf20Sopenharmony_ci const char *firmware_name); 578c2ecf20Sopenharmony_cistruct sigmadsp *devm_sigmadsp_init_i2c(struct i2c_client *client, 588c2ecf20Sopenharmony_ci const struct sigmadsp_ops *ops, const char *firmware_name); 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ciint sigmadsp_attach(struct sigmadsp *sigmadsp, 618c2ecf20Sopenharmony_ci struct snd_soc_component *component); 628c2ecf20Sopenharmony_ciint sigmadsp_setup(struct sigmadsp *sigmadsp, unsigned int rate); 638c2ecf20Sopenharmony_civoid sigmadsp_reset(struct sigmadsp *sigmadsp); 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci#endif 66