Skip to content

Commit 69dcf02

Browse files
charleskeepaxbroonie
authored andcommitted
ASoC: SDCA: Split function type patching and function naming
Currently, patch_sdca_function_type() both patches the function type for older SDCA revisions, and reports the name of the function. In general it is cleaner to have a single function only do a single task, so split these operations into two separate functions. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://patch.msgid.link/20241220173516.907406-5-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent c1ed5eb commit 69dcf02

1 file changed

Lines changed: 53 additions & 64 deletions

File tree

sound/soc/sdca/sdca_functions.c

Lines changed: 53 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -17,86 +17,64 @@
1717
#include <sound/sdca.h>
1818
#include <sound/sdca_function.h>
1919

20-
static int patch_sdca_function_type(struct device *dev,
21-
u32 interface_revision,
22-
u32 *function_type,
23-
const char **function_name)
20+
static int patch_sdca_function_type(u32 interface_revision, u32 *function_type)
2421
{
25-
unsigned long function_type_patch = 0;
26-
2722
/*
2823
* Unfortunately early SDCA specifications used different indices for Functions,
2924
* for backwards compatibility we have to reorder the values found
3025
*/
31-
if (interface_revision >= 0x0801)
32-
goto skip_early_draft_order;
33-
34-
switch (*function_type) {
35-
case 1:
36-
function_type_patch = SDCA_FUNCTION_TYPE_SMART_AMP;
37-
break;
38-
case 2:
39-
function_type_patch = SDCA_FUNCTION_TYPE_SMART_MIC;
40-
break;
41-
case 3:
42-
function_type_patch = SDCA_FUNCTION_TYPE_SPEAKER_MIC;
43-
break;
44-
case 4:
45-
function_type_patch = SDCA_FUNCTION_TYPE_UAJ;
46-
break;
47-
case 5:
48-
function_type_patch = SDCA_FUNCTION_TYPE_RJ;
49-
break;
50-
case 6:
51-
function_type_patch = SDCA_FUNCTION_TYPE_HID;
52-
break;
53-
default:
54-
dev_warn(dev, "SDCA version %#x invalid function type %d\n",
55-
interface_revision, *function_type);
56-
return -EINVAL;
26+
if (interface_revision < 0x0801) {
27+
switch (*function_type) {
28+
case 1:
29+
*function_type = SDCA_FUNCTION_TYPE_SMART_AMP;
30+
break;
31+
case 2:
32+
*function_type = SDCA_FUNCTION_TYPE_SMART_MIC;
33+
break;
34+
case 3:
35+
*function_type = SDCA_FUNCTION_TYPE_SPEAKER_MIC;
36+
break;
37+
case 4:
38+
*function_type = SDCA_FUNCTION_TYPE_UAJ;
39+
break;
40+
case 5:
41+
*function_type = SDCA_FUNCTION_TYPE_RJ;
42+
break;
43+
case 6:
44+
*function_type = SDCA_FUNCTION_TYPE_HID;
45+
break;
46+
default:
47+
return -EINVAL;
48+
}
5749
}
5850

59-
skip_early_draft_order:
60-
if (function_type_patch)
61-
*function_type = function_type_patch;
51+
return 0;
52+
}
6253

63-
/* now double-check the values */
64-
switch (*function_type) {
54+
static const char *get_sdca_function_name(u32 function_type)
55+
{
56+
switch (function_type) {
6557
case SDCA_FUNCTION_TYPE_SMART_AMP:
66-
*function_name = SDCA_FUNCTION_TYPE_SMART_AMP_NAME;
67-
break;
58+
return SDCA_FUNCTION_TYPE_SMART_AMP_NAME;
6859
case SDCA_FUNCTION_TYPE_SMART_MIC:
69-
*function_name = SDCA_FUNCTION_TYPE_SMART_MIC_NAME;
70-
break;
60+
return SDCA_FUNCTION_TYPE_SMART_MIC_NAME;
7161
case SDCA_FUNCTION_TYPE_UAJ:
72-
*function_name = SDCA_FUNCTION_TYPE_UAJ_NAME;
73-
break;
62+
return SDCA_FUNCTION_TYPE_UAJ_NAME;
7463
case SDCA_FUNCTION_TYPE_HID:
75-
*function_name = SDCA_FUNCTION_TYPE_HID_NAME;
76-
break;
64+
return SDCA_FUNCTION_TYPE_HID_NAME;
7765
case SDCA_FUNCTION_TYPE_SIMPLE_AMP:
78-
*function_name = SDCA_FUNCTION_TYPE_SIMPLE_AMP_NAME;
79-
break;
66+
return SDCA_FUNCTION_TYPE_SIMPLE_AMP_NAME;
8067
case SDCA_FUNCTION_TYPE_SIMPLE_MIC:
81-
*function_name = SDCA_FUNCTION_TYPE_SIMPLE_MIC_NAME;
82-
break;
68+
return SDCA_FUNCTION_TYPE_SIMPLE_MIC_NAME;
8369
case SDCA_FUNCTION_TYPE_SPEAKER_MIC:
84-
*function_name = SDCA_FUNCTION_TYPE_SPEAKER_MIC_NAME;
85-
break;
70+
return SDCA_FUNCTION_TYPE_SPEAKER_MIC_NAME;
8671
case SDCA_FUNCTION_TYPE_RJ:
87-
*function_name = SDCA_FUNCTION_TYPE_RJ_NAME;
88-
break;
72+
return SDCA_FUNCTION_TYPE_RJ_NAME;
8973
case SDCA_FUNCTION_TYPE_IMP_DEF:
90-
*function_name = SDCA_FUNCTION_TYPE_IMP_DEF_NAME;
91-
break;
74+
return SDCA_FUNCTION_TYPE_IMP_DEF_NAME;
9275
default:
93-
dev_err(dev, "invalid SDCA function type %d\n", *function_type);
94-
return -EINVAL;
76+
return NULL;
9577
}
96-
97-
dev_info(dev, "SDCA function %s (type %d)\n", *function_name, *function_type);
98-
99-
return 0;
10078
}
10179

10280
static int find_sdca_function(struct acpi_device *adev, void *data)
@@ -150,10 +128,21 @@ static int find_sdca_function(struct acpi_device *adev, void *data)
150128
return ret;
151129
}
152130

153-
ret = patch_sdca_function_type(dev, sdca_data->interface_revision,
154-
&function_type, &function_name);
155-
if (ret < 0)
131+
ret = patch_sdca_function_type(sdca_data->interface_revision, &function_type);
132+
if (ret < 0) {
133+
dev_err(dev, "SDCA version %#x invalid function type %d\n",
134+
sdca_data->interface_revision, function_type);
156135
return ret;
136+
}
137+
138+
function_name = get_sdca_function_name(function_type);
139+
if (!function_name) {
140+
dev_err(dev, "invalid SDCA function type %d\n", function_type);
141+
return -EINVAL;
142+
}
143+
144+
dev_info(dev, "SDCA function %s (type %d) at 0x%llx\n",
145+
function_name, function_type, addr);
157146

158147
/* store results */
159148
func_index = sdca_data->num_functions;

0 commit comments

Comments
 (0)