Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a43f739 authored by Krishnankutty Kolathappilly's avatar Krishnankutty Kolathappilly
Browse files

ASoC: qdsp6v2: Add support of ULL and LL



Add support for Low latency pcm and Ultra low latency pcm in
legacy pcm driver. A flag, part of device tree is used to
differentiate low latency and ultra low latency.
Only one ULL stream can be be connected to one ULL COPP.
LL stream can be connected to LL or regular COPP.

Change-Id: I2663ccdb641acc4117d1c0e424a57ed942e78f40
Signed-off-by: default avatarKrishnankutty Kolathappilly <kkolat@codeaurora.org>
parent 47b14657
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -21,6 +21,12 @@ Required properties:
      - qti,msm-pcm-low-latency : Flag indicating whether
        the device node is of type low latency.

      - qti,latency-level : Flag indicating whether the device node
                            is of type regular low latency or ultra
                            low latency.
                            regular : regular low latency stream
                            ultra : ultra low latency stream

* msm-pcm-routing

Required properties:
+4 −4
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ struct route_payload {
int srs_trumedia_open(int port_id, int srs_tech_id, void *srs_params);

int adm_open(int port, int path, int rate, int mode, int topology,
				bool perf_mode, uint16_t bits_per_sample);
				int perf_mode, uint16_t bits_per_sample);

int adm_get_params(int port_id, uint32_t module_id, uint32_t param_id,
			uint32_t params_length, char *params);
@@ -40,7 +40,7 @@ int adm_dolby_dap_send_params(int port_id, char *params,
				 uint32_t params_length);

int adm_multi_ch_copp_open(int port, int path, int rate, int mode,
			int topology, bool perf_mode, uint16_t bits_per_sample);
			int topology, int perf_mode, uint16_t bits_per_sample);

int adm_unmap_cal_blocks(void);

@@ -53,10 +53,10 @@ int adm_memory_map_regions(int port_id, uint32_t *buf_add, uint32_t mempool_id,

int adm_memory_unmap_regions(int port_id);

int adm_close(int port, bool perf_mode);
int adm_close(int port, int perf_mode);

int adm_matrix_map(int session_id, int path, int num_copps,
		unsigned int *port_id, int copp_id, bool perf_mode);
		unsigned int *port_id, int copp_id, int perf_mode);

int adm_connect_afe_port(int mode, int session_id, int port_id);

+1 −1
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ struct audio_client {
	struct audio_port_data port[2];
	wait_queue_head_t      cmd_wait;
	wait_queue_head_t      time_wait;
	bool                   perf_mode;
	int                    perf_mode;
	int					   stream_id;
	/* audio cache operations fptr*/
	int (*fptr_cache_ops)(struct audio_buffer *abuff, int cache_op);
+7 −0
Original line number Diff line number Diff line
@@ -15,6 +15,13 @@

#include <mach/qdsp6v2/apr.h>

enum {
	LEGACY_PCM_MODE = 0,
	LOW_LATENCY_PCM_MODE,
	ULTRA_LOW_LATENCY_PCM_MODE,
};


int q6audio_get_port_index(u16 port_id);

int q6audio_convert_virtual_to_portid(u16 port_id);
+13 −3
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <sound/pcm.h>
#include <sound/initval.h>
#include <sound/control.h>
#include <sound/q6audio-v2.h>
#include <asm/dma.h>
#include <linux/dma-mapping.h>
#include <linux/msm_audio_ion.h>
@@ -918,6 +919,7 @@ static int msm_pcm_probe(struct platform_device *pdev)
	int rc;
	int id;
	struct msm_plat_data *pdata;
	const char *latency_level;

	rc = of_property_read_u32(pdev->dev.of_node,
				"qti,msm-pcm-dsp-id", &id);
@@ -934,10 +936,18 @@ static int msm_pcm_probe(struct platform_device *pdev)
	}

	if (of_property_read_bool(pdev->dev.of_node,
				"qti,msm-pcm-low-latency"))
		pdata->perf_mode = 1;
				"qti,msm-pcm-low-latency")) {

		pdata->perf_mode = LOW_LATENCY_PCM_MODE;
		rc = of_property_read_string(pdev->dev.of_node,
			"qti,latency-level", &latency_level);
		if (!rc) {
			if (!strcmp(latency_level, "ultra"))
				pdata->perf_mode = ULTRA_LOW_LATENCY_PCM_MODE;
		}
	}
	else
		pdata->perf_mode = 0;
		pdata->perf_mode = LEGACY_PCM_MODE;

	dev_set_drvdata(&pdev->dev, pdata);

Loading