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(map: control_data, reg: addr, |
18 | val: data, val_len: 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(map: control_data, reg: addr, |
25 | val: data, val_len: len); |
26 | } |
27 | |
28 | /** |
29 | * devm_sigmadsp_init_regmap() - 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(ptr: 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 | |