|
42 | 42 | #define AFE_PARAM_ID_I2S_CONFIG 0x0001020D
|
43 | 43 | #define AFE_PARAM_ID_TDM_CONFIG 0x0001029D
|
44 | 44 | #define AFE_PARAM_ID_PORT_SLOT_MAPPING_CONFIG 0x00010297
|
| 45 | +#define AFE_PARAM_ID_CODEC_DMA_CONFIG 0x000102B8 |
45 | 46 |
|
46 | 47 | /* I2S config specific */
|
47 | 48 | #define AFE_API_VERSION_I2S_CONFIG 0x1
|
|
299 | 300 | #define AFE_PORT_ID_QUINARY_TDM_TX_7 \
|
300 | 301 | (AFE_PORT_ID_QUINARY_TDM_TX + 0x0E)
|
301 | 302 |
|
| 303 | +/* AFE WSA Codec DMA Rx port 0 */ |
| 304 | +#define AFE_PORT_ID_WSA_CODEC_DMA_RX_0 0xB000 |
| 305 | +/* AFE WSA Codec DMA Tx port 0 */ |
| 306 | +#define AFE_PORT_ID_WSA_CODEC_DMA_TX_0 0xB001 |
| 307 | +/* AFE WSA Codec DMA Rx port 1 */ |
| 308 | +#define AFE_PORT_ID_WSA_CODEC_DMA_RX_1 0xB002 |
| 309 | +/* AFE WSA Codec DMA Tx port 1 */ |
| 310 | +#define AFE_PORT_ID_WSA_CODEC_DMA_TX_1 0xB003 |
| 311 | +/* AFE WSA Codec DMA Tx port 2 */ |
| 312 | +#define AFE_PORT_ID_WSA_CODEC_DMA_TX_2 0xB005 |
| 313 | +/* AFE VA Codec DMA Tx port 0 */ |
| 314 | +#define AFE_PORT_ID_VA_CODEC_DMA_TX_0 0xB021 |
| 315 | +/* AFE VA Codec DMA Tx port 1 */ |
| 316 | +#define AFE_PORT_ID_VA_CODEC_DMA_TX_1 0xB023 |
| 317 | +/* AFE VA Codec DMA Tx port 2 */ |
| 318 | +#define AFE_PORT_ID_VA_CODEC_DMA_TX_2 0xB025 |
| 319 | +/* AFE Rx Codec DMA Rx port 0 */ |
| 320 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_0 0xB030 |
| 321 | +/* AFE Tx Codec DMA Tx port 0 */ |
| 322 | +#define AFE_PORT_ID_TX_CODEC_DMA_TX_0 0xB031 |
| 323 | +/* AFE Rx Codec DMA Rx port 1 */ |
| 324 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_1 0xB032 |
| 325 | +/* AFE Tx Codec DMA Tx port 1 */ |
| 326 | +#define AFE_PORT_ID_TX_CODEC_DMA_TX_1 0xB033 |
| 327 | +/* AFE Rx Codec DMA Rx port 2 */ |
| 328 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_2 0xB034 |
| 329 | +/* AFE Tx Codec DMA Tx port 2 */ |
| 330 | +#define AFE_PORT_ID_TX_CODEC_DMA_TX_2 0xB035 |
| 331 | +/* AFE Rx Codec DMA Rx port 3 */ |
| 332 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_3 0xB036 |
| 333 | +/* AFE Tx Codec DMA Tx port 3 */ |
| 334 | +#define AFE_PORT_ID_TX_CODEC_DMA_TX_3 0xB037 |
| 335 | +/* AFE Rx Codec DMA Rx port 4 */ |
| 336 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_4 0xB038 |
| 337 | +/* AFE Tx Codec DMA Tx port 4 */ |
| 338 | +#define AFE_PORT_ID_TX_CODEC_DMA_TX_4 0xB039 |
| 339 | +/* AFE Rx Codec DMA Rx port 5 */ |
| 340 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_5 0xB03A |
| 341 | +/* AFE Tx Codec DMA Tx port 5 */ |
| 342 | +#define AFE_PORT_ID_TX_CODEC_DMA_TX_5 0xB03B |
| 343 | +/* AFE Rx Codec DMA Rx port 6 */ |
| 344 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_6 0xB03C |
| 345 | +/* AFE Rx Codec DMA Rx port 7 */ |
| 346 | +#define AFE_PORT_ID_RX_CODEC_DMA_RX_7 0xB03E |
| 347 | + |
302 | 348 | #define Q6AFE_LPASS_MODE_CLK1_VALID 1
|
303 | 349 | #define Q6AFE_LPASS_MODE_CLK2_VALID 2
|
304 | 350 | #define Q6AFE_LPASS_CLK_SRC_INTERNAL 1
|
305 | 351 | #define Q6AFE_LPASS_CLK_ROOT_DEFAULT 0
|
306 | 352 | #define AFE_API_VERSION_TDM_CONFIG 1
|
307 | 353 | #define AFE_API_VERSION_SLOT_MAPPING_CONFIG 1
|
| 354 | +#define AFE_API_VERSION_CODEC_DMA_CONFIG 1 |
308 | 355 |
|
309 | 356 | #define TIMEOUT_MS 1000
|
310 | 357 | #define AFE_CMD_RESP_AVAIL 0
|
@@ -448,11 +495,21 @@ struct afe_param_id_tdm_cfg {
|
448 | 495 | u32 slot_mask;
|
449 | 496 | } __packed;
|
450 | 497 |
|
| 498 | +struct afe_param_id_cdc_dma_cfg { |
| 499 | + u32 cdc_dma_cfg_minor_version; |
| 500 | + u32 sample_rate; |
| 501 | + u16 bit_width; |
| 502 | + u16 data_format; |
| 503 | + u16 num_channels; |
| 504 | + u16 active_channels_mask; |
| 505 | +} __packed; |
| 506 | + |
451 | 507 | union afe_port_config {
|
452 | 508 | struct afe_param_id_hdmi_multi_chan_audio_cfg hdmi_multi_ch;
|
453 | 509 | struct afe_param_id_slimbus_cfg slim_cfg;
|
454 | 510 | struct afe_param_id_i2s_cfg i2s_cfg;
|
455 | 511 | struct afe_param_id_tdm_cfg tdm_cfg;
|
| 512 | + struct afe_param_id_cdc_dma_cfg dma_cfg; |
456 | 513 | } __packed;
|
457 | 514 |
|
458 | 515 |
|
@@ -707,6 +764,50 @@ static struct afe_port_map port_maps[AFE_PORT_MAX] = {
|
707 | 764 | QUINARY_TDM_TX_7, 0, 1},
|
708 | 765 | [DISPLAY_PORT_RX] = { AFE_PORT_ID_HDMI_OVER_DP_RX,
|
709 | 766 | DISPLAY_PORT_RX, 1, 1},
|
| 767 | + [WSA_CODEC_DMA_RX_0] = { AFE_PORT_ID_WSA_CODEC_DMA_RX_0, |
| 768 | + WSA_CODEC_DMA_RX_0, 1, 1}, |
| 769 | + [WSA_CODEC_DMA_TX_0] = { AFE_PORT_ID_WSA_CODEC_DMA_TX_0, |
| 770 | + WSA_CODEC_DMA_TX_0, 0, 1}, |
| 771 | + [WSA_CODEC_DMA_RX_1] = { AFE_PORT_ID_WSA_CODEC_DMA_RX_1, |
| 772 | + WSA_CODEC_DMA_RX_1, 1, 1}, |
| 773 | + [WSA_CODEC_DMA_TX_1] = { AFE_PORT_ID_WSA_CODEC_DMA_TX_1, |
| 774 | + WSA_CODEC_DMA_TX_1, 0, 1}, |
| 775 | + [WSA_CODEC_DMA_TX_2] = { AFE_PORT_ID_WSA_CODEC_DMA_TX_2, |
| 776 | + WSA_CODEC_DMA_TX_2, 0, 1}, |
| 777 | + [VA_CODEC_DMA_TX_0] = { AFE_PORT_ID_VA_CODEC_DMA_TX_0, |
| 778 | + VA_CODEC_DMA_TX_0, 0, 1}, |
| 779 | + [VA_CODEC_DMA_TX_1] = { AFE_PORT_ID_VA_CODEC_DMA_TX_1, |
| 780 | + VA_CODEC_DMA_TX_1, 0, 1}, |
| 781 | + [VA_CODEC_DMA_TX_2] = { AFE_PORT_ID_VA_CODEC_DMA_TX_2, |
| 782 | + VA_CODEC_DMA_TX_2, 0, 1}, |
| 783 | + [RX_CODEC_DMA_RX_0] = { AFE_PORT_ID_RX_CODEC_DMA_RX_0, |
| 784 | + RX_CODEC_DMA_RX_0, 1, 1}, |
| 785 | + [TX_CODEC_DMA_TX_0] = { AFE_PORT_ID_TX_CODEC_DMA_TX_0, |
| 786 | + TX_CODEC_DMA_TX_0, 0, 1}, |
| 787 | + [RX_CODEC_DMA_RX_1] = { AFE_PORT_ID_RX_CODEC_DMA_RX_1, |
| 788 | + RX_CODEC_DMA_RX_1, 1, 1}, |
| 789 | + [TX_CODEC_DMA_TX_1] = { AFE_PORT_ID_TX_CODEC_DMA_TX_1, |
| 790 | + TX_CODEC_DMA_TX_1, 0, 1}, |
| 791 | + [RX_CODEC_DMA_RX_2] = { AFE_PORT_ID_RX_CODEC_DMA_RX_2, |
| 792 | + RX_CODEC_DMA_RX_2, 1, 1}, |
| 793 | + [TX_CODEC_DMA_TX_2] = { AFE_PORT_ID_TX_CODEC_DMA_TX_2, |
| 794 | + TX_CODEC_DMA_TX_2, 0, 1}, |
| 795 | + [RX_CODEC_DMA_RX_3] = { AFE_PORT_ID_RX_CODEC_DMA_RX_3, |
| 796 | + RX_CODEC_DMA_RX_3, 1, 1}, |
| 797 | + [TX_CODEC_DMA_TX_3] = { AFE_PORT_ID_TX_CODEC_DMA_TX_3, |
| 798 | + TX_CODEC_DMA_TX_3, 0, 1}, |
| 799 | + [RX_CODEC_DMA_RX_4] = { AFE_PORT_ID_RX_CODEC_DMA_RX_4, |
| 800 | + RX_CODEC_DMA_RX_4, 1, 1}, |
| 801 | + [TX_CODEC_DMA_TX_4] = { AFE_PORT_ID_TX_CODEC_DMA_TX_4, |
| 802 | + TX_CODEC_DMA_TX_4, 0, 1}, |
| 803 | + [RX_CODEC_DMA_RX_5] = { AFE_PORT_ID_RX_CODEC_DMA_RX_5, |
| 804 | + RX_CODEC_DMA_RX_5, 1, 1}, |
| 805 | + [TX_CODEC_DMA_TX_5] = { AFE_PORT_ID_TX_CODEC_DMA_TX_5, |
| 806 | + TX_CODEC_DMA_TX_5, 0, 1}, |
| 807 | + [RX_CODEC_DMA_RX_6] = { AFE_PORT_ID_RX_CODEC_DMA_RX_6, |
| 808 | + RX_CODEC_DMA_RX_6, 1, 1}, |
| 809 | + [RX_CODEC_DMA_RX_7] = { AFE_PORT_ID_RX_CODEC_DMA_RX_7, |
| 810 | + RX_CODEC_DMA_RX_7, 1, 1}, |
710 | 811 | };
|
711 | 812 |
|
712 | 813 | static void q6afe_port_free(struct kref *ref)
|
@@ -1288,6 +1389,28 @@ int q6afe_i2s_port_prepare(struct q6afe_port *port, struct q6afe_i2s_cfg *cfg)
|
1288 | 1389 | }
|
1289 | 1390 | EXPORT_SYMBOL_GPL(q6afe_i2s_port_prepare);
|
1290 | 1391 |
|
| 1392 | +/** |
| 1393 | + * q6afe_dam_port_prepare() - Prepare dma afe port. |
| 1394 | + * |
| 1395 | + * @port: Instance of afe port |
| 1396 | + * @cfg: DMA configuration for the afe port |
| 1397 | + * |
| 1398 | + */ |
| 1399 | +void q6afe_cdc_dma_port_prepare(struct q6afe_port *port, |
| 1400 | + struct q6afe_cdc_dma_cfg *cfg) |
| 1401 | +{ |
| 1402 | + union afe_port_config *pcfg = &port->port_cfg; |
| 1403 | + struct afe_param_id_cdc_dma_cfg *dma_cfg = &pcfg->dma_cfg; |
| 1404 | + |
| 1405 | + dma_cfg->cdc_dma_cfg_minor_version = AFE_API_VERSION_CODEC_DMA_CONFIG; |
| 1406 | + dma_cfg->sample_rate = cfg->sample_rate; |
| 1407 | + dma_cfg->bit_width = cfg->bit_width; |
| 1408 | + dma_cfg->data_format = cfg->data_format; |
| 1409 | + dma_cfg->num_channels = cfg->num_channels; |
| 1410 | + if (!cfg->active_channels_mask) |
| 1411 | + dma_cfg->active_channels_mask = (1 << cfg->num_channels) - 1; |
| 1412 | +} |
| 1413 | +EXPORT_SYMBOL_GPL(q6afe_cdc_dma_port_prepare); |
1291 | 1414 | /**
|
1292 | 1415 | * q6afe_port_start() - Start a afe port
|
1293 | 1416 | *
|
@@ -1420,7 +1543,9 @@ struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id)
|
1420 | 1543 | case AFE_PORT_ID_PRIMARY_TDM_RX ... AFE_PORT_ID_QUINARY_TDM_TX_7:
|
1421 | 1544 | cfg_type = AFE_PARAM_ID_TDM_CONFIG;
|
1422 | 1545 | break;
|
1423 |
| - |
| 1546 | + case AFE_PORT_ID_WSA_CODEC_DMA_RX_0 ... AFE_PORT_ID_RX_CODEC_DMA_RX_7: |
| 1547 | + cfg_type = AFE_PARAM_ID_CODEC_DMA_CONFIG; |
| 1548 | + break; |
1424 | 1549 | default:
|
1425 | 1550 | dev_err(dev, "Invalid port id 0x%x\n", port_id);
|
1426 | 1551 | return ERR_PTR(-EINVAL);
|
|
0 commit comments