1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Load Analog Devices SigmaStudio firmware files 4 * 5 * Copyright 2009-2011 Analog Devices Inc. 6 */ 7 8 #include <linux/regmap.h> 9 #include <linux/export.h> 10 #include <linux/module.h> 11 12 #include "sigmadsp.h" 13 14 static int sigmadsp_write_regmap(void *control_data, 15 unsigned int addr, const uint8_t data[], size_t len) 16 { 17 return regmap_raw_write(control_data, addr, 18 data, len); 19 } 20 21 static int sigmadsp_read_regmap(void *control_data, 22 unsigned int addr, uint8_t data[], size_t len) 23 { 24 return regmap_raw_read(control_data, addr, 25 data, len); 26 } 27 28 /** 29 * devm_sigmadsp_init_i2c() - Initialize SigmaDSP instance 30 * @dev: The parent device 31 * @regmap: Regmap instance to use 32 * @ops: The sigmadsp_ops to use for this instance 33 * @firmware_name: Name of the firmware file to load 34 * 35 * Allocates a SigmaDSP instance and loads the specified firmware file. 36 * 37 * Returns a pointer to a struct sigmadsp on success, or a PTR_ERR() on error. 38 */ 39 struct sigmadsp *devm_sigmadsp_init_regmap(struct device *dev, 40 struct regmap *regmap, const struct sigmadsp_ops *ops, 41 const char *firmware_name) 42 { 43 struct sigmadsp *sigmadsp; 44 45 sigmadsp = devm_sigmadsp_init(dev, ops, firmware_name); 46 if (IS_ERR(sigmadsp)) 47 return sigmadsp; 48 49 sigmadsp->control_data = regmap; 50 sigmadsp->write = sigmadsp_write_regmap; 51 sigmadsp->read = sigmadsp_read_regmap; 52 53 return sigmadsp; 54 } 55 EXPORT_SYMBOL_GPL(devm_sigmadsp_init_regmap); 56 57 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); 58 MODULE_DESCRIPTION("SigmaDSP regmap firmware loader"); 59 MODULE_LICENSE("GPL"); 60