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

Commit 07d6e746 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: msm8x16-wcd: initialise ocp registers correctly"

parents 4cda25f2 d14cb118
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -98,9 +98,7 @@ struct wcd9xxx_spmi_map map;

void wcd9xxx_spmi_enable_irq(int irq)
{
	map.mask[BIT_BYTE(irq)] &=
		~(BYTE_BIT_MASK(irq));
	enable_irq_wake(map.linuxirq[irq]);
	pr_debug("%s: irqno =%d\n", __func__, irq);
	if ((irq >= 0) && (irq <= 7))
		snd_soc_update_bits(map.codec,
				MSM8X16_WCD_A_DIGITAL_INT_EN_SET,
@@ -109,14 +107,20 @@ void wcd9xxx_spmi_enable_irq(int irq)
		snd_soc_update_bits(map.codec,
				MSM8X16_WCD_A_ANALOG_INT_EN_SET,
				(0x01 << (irq - 8)), (0x01 << (irq - 8)));

	if (!(map.mask[BIT_BYTE(irq)] & (BYTE_BIT_MASK(irq))))
		return;

	map.mask[BIT_BYTE(irq)] &=
		~(BYTE_BIT_MASK(irq));

	enable_irq(map.linuxirq[irq]);
	enable_irq_wake(map.linuxirq[irq]);
}

void wcd9xxx_spmi_disable_irq(int irq)
{
	map.mask[BIT_BYTE(irq)] |=
		(BYTE_BIT_MASK(irq));

	disable_irq_nosync(map.linuxirq[irq]);
	pr_debug("%s: irqno =%d\n", __func__, irq);
	if ((irq >= 0) && (irq <= 7))
		snd_soc_update_bits(map.codec,
				MSM8X16_WCD_A_DIGITAL_INT_EN_SET,
@@ -125,6 +129,14 @@ void wcd9xxx_spmi_disable_irq(int irq)
		snd_soc_update_bits(map.codec,
				MSM8X16_WCD_A_ANALOG_INT_EN_SET,
				(0x01 << (irq - 8)), 0x00);

	if (map.mask[BIT_BYTE(irq)] & (BYTE_BIT_MASK(irq)))
		return;

	map.mask[BIT_BYTE(irq)] |=
		(BYTE_BIT_MASK(irq));

	disable_irq_nosync(map.linuxirq[irq]);
}

int wcd9xxx_spmi_request_irq(int irq, irq_handler_t handler,
@@ -201,7 +213,7 @@ static irqreturn_t wcd9xxx_spmi_irq_handler(int linux_irq, void *data)
	for (i = 0; i < MAX_NUM_IRQS; i++) {
		j = get_order_irq(i);
		if ((status[BIT_BYTE(j)] & BYTE_BIT_MASK(j)) &&
			((map.handled[j] &
			((map.handled[BIT_BYTE(j)] &
			BYTE_BIT_MASK(j)) == 0)) {
			map.handler[j](irq, data);
			map.handled[BIT_BYTE(j)] |=
+3 −3
Original line number Diff line number Diff line
@@ -3009,10 +3009,10 @@ static const struct msm8x16_wcd_reg_mask_val
	/* Initialize current threshold to 350MA
	 * number of wait and run cycles to 4096
	 */
	{MSM8X16_WCD_A_ANALOG_RX_COM_OCP_CTL, 0xE1, 0x61},
	{MSM8X16_WCD_A_ANALOG_RX_COM_OCP_CTL, 0xFF, 0xD1},
	{MSM8X16_WCD_A_ANALOG_RX_COM_OCP_COUNT, 0xFF, 0xFF},
	{MSM8X16_WCD_A_ANALOG_RX_HPH_L_TEST, 0x40, 0x40},
	{MSM8X16_WCD_A_ANALOG_RX_HPH_R_TEST, 0x40, 0x40},
	{MSM8X16_WCD_A_ANALOG_RX_HPH_L_TEST, 0x04, 0x04},
	{MSM8X16_WCD_A_ANALOG_RX_HPH_R_TEST, 0x04, 0x04},
};

static void msm8x16_wcd_codec_init_reg(struct snd_soc_codec *codec)
+0 −5
Original line number Diff line number Diff line
@@ -1164,8 +1164,6 @@ static int wcd_mbhc_initialise(struct wcd_mbhc *mbhc)

	snd_soc_write(codec, MSM8X16_WCD_A_ANALOG_MBHC_DBNC_TIMER, 0x98);

	snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_RX_COM_OCP_CTL,
			0x10, 0x00);
	/* enable MBHC clock */
	snd_soc_update_bits(codec,
			MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
@@ -1323,7 +1321,6 @@ int wcd_mbhc_init(struct wcd_mbhc *mbhc, struct snd_soc_codec *codec,
		       mbhc->intr_ids->mbhc_hs_ins_rem_intr);
		goto err_mbhc_hs_ins_rem_irq;
	}
	wcd9xxx_spmi_disable_irq(mbhc->intr_ids->mbhc_hs_ins_rem_intr);

	ret = wcd9xxx_spmi_request_irq(mbhc->intr_ids->hph_left_ocp,
				  wcd_mbhc_hphl_ocp_irq, "HPH_L OCP detect",
@@ -1333,7 +1330,6 @@ int wcd_mbhc_init(struct wcd_mbhc *mbhc, struct snd_soc_codec *codec,
		       mbhc->intr_ids->hph_left_ocp);
		goto err_hphl_ocp_irq;
	}
	wcd9xxx_spmi_disable_irq(mbhc->intr_ids->hph_left_ocp);

	ret = wcd9xxx_spmi_request_irq(mbhc->intr_ids->hph_right_ocp,
				  wcd_mbhc_hphr_ocp_irq, "HPH_R OCP detect",
@@ -1343,7 +1339,6 @@ int wcd_mbhc_init(struct wcd_mbhc *mbhc, struct snd_soc_codec *codec,
		       mbhc->intr_ids->hph_right_ocp);
		goto err_hphr_ocp_irq;
	}
	wcd9xxx_spmi_disable_irq(mbhc->intr_ids->hph_right_ocp);

	pr_debug("%s: leave ret %d\n", __func__, ret);
	return ret;