Unverified Commit 3d74f42c authored by Mark Brown's avatar Mark Brown
Browse files

Merge existing fixes from asoc/for-6.5 into new branch

parents 06c2afb8 980d97ef
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ int snd_amd_acp_find_config(struct pci_dev *pci);

static inline u64 acp_get_byte_count(struct acp_dev_data *adata, int dai_id, int direction)
{
	u64 byte_count, low = 0, high = 0;
	u64 byte_count = 0, low = 0, high = 0;

	if (direction == SNDRV_PCM_STREAM_PLAYBACK) {
		switch (dai_id) {
@@ -191,7 +191,7 @@ static inline u64 acp_get_byte_count(struct acp_dev_data *adata, int dai_id, int
			break;
		default:
			dev_err(adata->dev, "Invalid dai id %x\n", dai_id);
			return -EINVAL;
			goto POINTER_RETURN_BYTES;
		}
	} else {
		switch (dai_id) {
@@ -213,12 +213,13 @@ static inline u64 acp_get_byte_count(struct acp_dev_data *adata, int dai_id, int
			break;
		default:
			dev_err(adata->dev, "Invalid dai id %x\n", dai_id);
			return -EINVAL;
			goto POINTER_RETURN_BYTES;
		}
	}
	/* Get 64 bit value from two 32 bit registers */
	byte_count = (high << 32) | low;

POINTER_RETURN_BYTES:
	return byte_count;
}

+21 −1
Original line number Diff line number Diff line
@@ -116,8 +116,28 @@
#define ACP63_SDW0_DMA_MAX_STREAMS	6
#define ACP63_SDW1_DMA_MAX_STREAMS	2
#define ACP_P1_AUDIO_TX_THRESHOLD	6

/*
 * Below entries describes SDW0 instance DMA stream id and DMA irq bit mapping
 * in ACP_EXTENAL_INTR_CNTL register.
 * Stream id		IRQ Bit
 * 0 (SDW0_AUDIO0_TX)	28
 * 1 (SDW0_AUDIO1_TX)	26
 * 2 (SDW0_AUDIO2_TX)	24
 * 3 (SDW0_AUDIO0_RX)	27
 * 4 (SDW0_AUDIO1_RX)	25
 * 5 (SDW0_AUDIO2_RX)	23
 */
#define SDW0_DMA_TX_IRQ_MASK(i)	(ACP_AUDIO0_TX_THRESHOLD - (2 * (i)))
#define SDW0_DMA_RX_IRQ_MASK(i)	(ACP_AUDIO0_RX_THRESHOLD - (2 * (i)))
#define SDW0_DMA_RX_IRQ_MASK(i)	(ACP_AUDIO0_RX_THRESHOLD - (2 * ((i) - 3)))

/*
 * Below entries describes SDW1 instance DMA stream id and DMA irq bit mapping
 * in ACP_EXTENAL_INTR_CNTL1 register.
 * Stream id		IRQ Bit
 * 0 (SDW1_AUDIO1_TX)	6
 * 1 (SDW1_AUDIO1_RX)	5
 */
#define SDW1_DMA_IRQ_MASK(i)	(ACP_P1_AUDIO_TX_THRESHOLD - (i))

#define ACP_DELAY_US		5
+14 −2
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ static struct sdw_dma_ring_buf_reg sdw0_dma_ring_buf_reg[ACP63_SDW0_DMA_MAX_STRE
	 ACP_AUDIO2_TX_LINEARPOSITIONCNTR_LOW, ACP_AUDIO2_TX_LINEARPOSITIONCNTR_HIGH},
	{ACP_AUDIO0_RX_DMA_SIZE, ACP_AUDIO0_RX_FIFOADDR, ACP_AUDIO0_RX_FIFOSIZE,
	 ACP_AUDIO0_RX_RINGBUFSIZE, ACP_AUDIO0_RX_RINGBUFADDR, ACP_AUDIO0_RX_INTR_WATERMARK_SIZE,
	 ACP_AUDIO0_TX_LINEARPOSITIONCNTR_LOW, ACP_AUDIO0_TX_LINEARPOSITIONCNTR_HIGH},
	 ACP_AUDIO0_RX_LINEARPOSITIONCNTR_LOW, ACP_AUDIO0_RX_LINEARPOSITIONCNTR_HIGH},
	{ACP_AUDIO1_RX_DMA_SIZE, ACP_AUDIO1_RX_FIFOADDR, ACP_AUDIO1_RX_FIFOSIZE,
	 ACP_AUDIO1_RX_RINGBUFSIZE, ACP_AUDIO1_RX_RINGBUFADDR, ACP_AUDIO1_RX_INTR_WATERMARK_SIZE,
	 ACP_AUDIO1_RX_LINEARPOSITIONCNTR_LOW, ACP_AUDIO1_RX_LINEARPOSITIONCNTR_HIGH},
@@ -39,6 +39,11 @@ static struct sdw_dma_ring_buf_reg sdw0_dma_ring_buf_reg[ACP63_SDW0_DMA_MAX_STRE
	 ACP_AUDIO2_RX_LINEARPOSITIONCNTR_LOW, ACP_AUDIO2_RX_LINEARPOSITIONCNTR_HIGH}
};

/*
 * SDW1 instance supports one TX stream and one RX stream.
 * For TX/RX streams DMA registers programming for SDW1 instance, it uses ACP_P1_AUDIO1 register
 * set as per hardware register documentation
 */
static struct sdw_dma_ring_buf_reg sdw1_dma_ring_buf_reg[ACP63_SDW1_DMA_MAX_STREAMS] =  {
	{ACP_P1_AUDIO1_TX_DMA_SIZE, ACP_P1_AUDIO1_TX_FIFOADDR, ACP_P1_AUDIO1_TX_FIFOSIZE,
	 ACP_P1_AUDIO1_TX_RINGBUFSIZE, ACP_P1_AUDIO1_TX_RINGBUFADDR,
@@ -59,6 +64,12 @@ static u32 sdw0_dma_enable_reg[ACP63_SDW0_DMA_MAX_STREAMS] = {
	ACP_SW0_AUDIO2_RX_EN,
};

/*
 * SDW1 instance supports one TX stream and one RX stream.
 * For TX/RX streams DMA enable register programming for SDW1 instance,
 * it uses ACP_SW1_AUDIO1_TX_EN and ACP_SW1_AUDIO1_RX_EN registers
 * as per hardware register documentation.
 */
static u32 sdw1_dma_enable_reg[ACP63_SDW1_DMA_MAX_STREAMS] = {
	ACP_SW1_AUDIO1_TX_EN,
	ACP_SW1_AUDIO1_RX_EN,
@@ -307,12 +318,13 @@ static u64 acp63_sdw_get_byte_count(struct acp_sdw_dma_stream *stream, void __io
		pos_high_reg = sdw1_dma_ring_buf_reg[stream->stream_id].pos_high_reg;
		break;
	default:
		return -EINVAL;
		goto POINTER_RETURN_BYTES;
	}
	if (pos_low_reg) {
		byte_count.bcount.high = readl(acp_base + pos_high_reg);
		byte_count.bcount.low = readl(acp_base + pos_low_reg);
	}
POINTER_RETURN_BYTES:
	return byte_count.bytescount;
}

+2 −0
Original line number Diff line number Diff line
@@ -715,6 +715,7 @@ config SND_SOC_CS35L41_I2C

config SND_SOC_CS35L45
	tristate
	select REGMAP_IRQ

config SND_SOC_CS35L45_SPI
	tristate "Cirrus Logic CS35L45 CODEC (SPI)"
@@ -1942,6 +1943,7 @@ config SND_SOC_WCD934X
	tristate "WCD9340/WCD9341 Codec"
	depends on COMMON_CLK
	depends on SLIMBUS
	select REGMAP_IRQ
	select REGMAP_SLIMBUS
	select SND_SOC_WCD_MBHC
	depends on MFD_WCD934X || COMPILE_TEST
+7 −5
Original line number Diff line number Diff line
@@ -2567,7 +2567,8 @@ static void rt5640_enable_jack_detect(struct snd_soc_component *component,
	if (jack_data && jack_data->use_platform_clock)
		rt5640->use_platform_clock = jack_data->use_platform_clock;

	ret = request_irq(rt5640->irq, rt5640_irq,
	ret = devm_request_threaded_irq(component->dev, rt5640->irq,
					NULL, rt5640_irq,
					IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
					"rt5640", rt5640);
	if (ret) {
@@ -2622,8 +2623,9 @@ static void rt5640_enable_hda_jack_detect(

	rt5640->jack = jack;

	ret = request_irq(rt5640->irq, rt5640_irq,
			  IRQF_TRIGGER_RISING | IRQF_ONESHOT, "rt5640", rt5640);
	ret = devm_request_threaded_irq(component->dev, rt5640->irq,
					NULL, rt5640_irq, IRQF_TRIGGER_RISING | IRQF_ONESHOT,
					"rt5640", rt5640);
	if (ret) {
		dev_warn(component->dev, "Failed to reguest IRQ %d: %d\n", rt5640->irq, ret);
		rt5640->irq = -ENXIO;
Loading