18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Load Analog Devices SigmaStudio firmware files 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright 2009-2011 Analog Devices Inc. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/regmap.h> 98c2ecf20Sopenharmony_ci#include <linux/export.h> 108c2ecf20Sopenharmony_ci#include <linux/module.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include "sigmadsp.h" 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_cistatic int sigmadsp_write_regmap(void *control_data, 158c2ecf20Sopenharmony_ci unsigned int addr, const uint8_t data[], size_t len) 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci return regmap_raw_write(control_data, addr, 188c2ecf20Sopenharmony_ci data, len); 198c2ecf20Sopenharmony_ci} 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistatic int sigmadsp_read_regmap(void *control_data, 228c2ecf20Sopenharmony_ci unsigned int addr, uint8_t data[], size_t len) 238c2ecf20Sopenharmony_ci{ 248c2ecf20Sopenharmony_ci return regmap_raw_read(control_data, addr, 258c2ecf20Sopenharmony_ci data, len); 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/** 298c2ecf20Sopenharmony_ci * devm_sigmadsp_init_i2c() - Initialize SigmaDSP instance 308c2ecf20Sopenharmony_ci * @dev: The parent device 318c2ecf20Sopenharmony_ci * @regmap: Regmap instance to use 328c2ecf20Sopenharmony_ci * @ops: The sigmadsp_ops to use for this instance 338c2ecf20Sopenharmony_ci * @firmware_name: Name of the firmware file to load 348c2ecf20Sopenharmony_ci * 358c2ecf20Sopenharmony_ci * Allocates a SigmaDSP instance and loads the specified firmware file. 368c2ecf20Sopenharmony_ci * 378c2ecf20Sopenharmony_ci * Returns a pointer to a struct sigmadsp on success, or a PTR_ERR() on error. 388c2ecf20Sopenharmony_ci */ 398c2ecf20Sopenharmony_cistruct sigmadsp *devm_sigmadsp_init_regmap(struct device *dev, 408c2ecf20Sopenharmony_ci struct regmap *regmap, const struct sigmadsp_ops *ops, 418c2ecf20Sopenharmony_ci const char *firmware_name) 428c2ecf20Sopenharmony_ci{ 438c2ecf20Sopenharmony_ci struct sigmadsp *sigmadsp; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci sigmadsp = devm_sigmadsp_init(dev, ops, firmware_name); 468c2ecf20Sopenharmony_ci if (IS_ERR(sigmadsp)) 478c2ecf20Sopenharmony_ci return sigmadsp; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci sigmadsp->control_data = regmap; 508c2ecf20Sopenharmony_ci sigmadsp->write = sigmadsp_write_regmap; 518c2ecf20Sopenharmony_ci sigmadsp->read = sigmadsp_read_regmap; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci return sigmadsp; 548c2ecf20Sopenharmony_ci} 558c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(devm_sigmadsp_init_regmap); 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciMODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); 588c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("SigmaDSP regmap firmware loader"); 598c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 60