1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <acpi/acpi_soundwire.h>
4 #include <console/console.h>
5 #include <device/mmio.h>
6 #include <device/soundwire.h>
7 #include <drivers/intel/soundwire/soundwire.h>
8 #include <intelblocks/pmclib.h>
12 static const struct soundwire_link link_xtal_38_4
= {
13 .clock_stop_mode0_supported
= 1,
14 .clock_stop_mode1_supported
= 1,
15 .clock_frequencies_supported_count
= 1,
16 .clock_frequencies_supported
= { 4800 * KHz
},
17 .default_frame_rate
= 48 * KHz
,
18 .default_frame_row_size
= 50,
19 .default_frame_col_size
= 4,
20 .dynamic_frame_shape
= 1,
21 .command_error_threshold
= 16,
24 static const struct soundwire_link link_xtal_24
= {
25 .clock_stop_mode0_supported
= 1,
26 .clock_stop_mode1_supported
= 1,
27 .clock_frequencies_supported_count
= 1,
28 .clock_frequencies_supported
= { 6 * MHz
},
29 .default_frame_rate
= 48 * KHz
,
30 .default_frame_row_size
= 125,
31 .default_frame_col_size
= 2,
32 .dynamic_frame_shape
= 1,
33 .command_error_threshold
= 16,
36 static struct intel_soundwire_controller intel_controller
= {
37 .acpi_address
= 0x40000000,
39 .master_list_count
= 4
43 int soc_fill_soundwire_controller(struct intel_soundwire_controller
**controller
)
45 const struct soundwire_link
*link
;
46 enum pch_pmc_xtal xtal
= pmc_get_xtal_freq();
49 /* Select link config based on XTAL frequency and set IP clock. */
53 intel_controller
.ip_clock
= 24 * MHz
;
56 link
= &link_xtal_38_4
;
57 intel_controller
.ip_clock
= 38400 * KHz
;
61 printk(BIOS_ERR
, "%s: XTAL not supported: 0x%x\n", __func__
, xtal
);
65 /* Fill link config in controller map based on selected XTAL. */
66 for (i
= 0; i
< intel_controller
.sdw
.master_list_count
; i
++)
67 memcpy(&intel_controller
.sdw
.master_list
[i
], link
, sizeof(*link
));
69 *controller
= &intel_controller
;