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

Commit b3f17f8f authored by Laxminath Kasam's avatar Laxminath Kasam
Browse files

ASoC: wsa881x: Add cache-always mode for sdm660



As WSA881x registers fails to read sometimes on
sdm660 internal codec, use cache-always mode
to avoid speaker mute.

CRs-Fixed: 1117406
Change-Id: I9742af37c3e64efb46fc9b3cef616f685b7f01a8
Signed-off-by: default avatarLaxminath Kasam <lkasam@codeaurora.org>
parent 42e1251b
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
WCD audio CODEC
* Qualcomm Technologies WCD Audio Codec

This node models the Qualcomm Technologies Audio HW WCD Codecs

Required properties:

@@ -512,6 +514,10 @@ Required properties:
	       which is also existing driver WSA881x that represents
	       soundwire slave devices.

Optional Properties:
 - qcom,cache-always : Boolean. This property is used in  WSA slave
			  device to use cacheable for all registers.

Example:

msm_sdw_codec: qcom,msm-sdw-codec@152c1000 {
@@ -529,6 +535,7 @@ msm_sdw_codec: qcom,msm-sdw-codec@152c1000 {
			compatible = "qcom,wsa881x";
			reg = <0x00 0x20170212>;
			qcom,spkr-sd-n-gpio = <&tlmm 80 0>;
			qcom,cache-always;
		};
	};
};
+4 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
 * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -216,6 +216,9 @@ static bool wsa881x_readable_register(struct device *dev, unsigned int reg)

static bool wsa881x_volatile_register(struct device *dev, unsigned int reg)
{
	if (cache_always)
		return false;

	switch (reg) {
	case WSA881X_CHIP_ID0:
	case WSA881X_CHIP_ID1:
+5 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
 * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -78,6 +78,7 @@ enum {
	WSA881X_DEV_UP,
};

bool cache_always;
/*
 * Private data Structure for wsa881x. All parameters related to
 * WSA881X codec needs to be defined here.
@@ -1227,6 +1228,9 @@ static int wsa881x_swr_probe(struct swr_device *pdev)
		if (ret)
			goto err;
	}

	cache_always = of_property_read_bool(pdev->dev.of_node,
					"qcom,cache-always");
	wsa881x_gpio_ctrl(wsa881x, true);
	wsa881x->state = WSA881X_DEV_UP;

+2 −1
Original line number Diff line number Diff line
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -20,6 +20,7 @@

#define WSA881X_MAX_SWR_PORTS   4

extern bool cache_always;
extern int wsa881x_set_channel_map(struct snd_soc_codec *codec, u8 *port,
				u8 num_port, unsigned int *ch_mask,
				unsigned int *ch_rate);