From b51f959486c726e5503f3f3164cc4fdc9bca281f Mon Sep 17 00:00:00 2001 From: Sudheer Papothi Date: Fri, 10 Apr 2020 00:33:21 +0530 Subject: [PATCH] soc: soundwire: Update sample interval configuration Update MSB of sample interval in the frame shape to avoid misconfiguration. Change-Id: I05e99bc563f6cdc71c7caf424441c4caa44ec4c6 Signed-off-by: Sudheer Papothi --- include/soc/soundwire.h | 2 +- include/soc/swr-common.h | 4 ++-- soc/swr-mstr-ctrl.c | 9 ++++++--- soc/swr-mstr-ctrl.h | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/include/soc/soundwire.h b/include/soc/soundwire.h index 838961a103..2d9b64aaaa 100644 --- a/include/soc/soundwire.h +++ b/include/soc/soundwire.h @@ -106,7 +106,7 @@ struct swr_port_info { u8 slave_port_id; u8 offset1; u8 offset2; - u8 sinterval; + u16 sinterval; struct list_head list; u8 master_port_id; u8 hstart; diff --git a/include/soc/swr-common.h b/include/soc/swr-common.h index f40f5e5832..4461640e70 100644 --- a/include/soc/swr-common.h +++ b/include/soc/swr-common.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2015, 2017-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2015, 2017-2020 The Linux Foundation. All rights reserved. */ #ifndef _LINUX_SWR_COMMON_H @@ -17,7 +17,7 @@ enum { }; struct port_params { - u8 si; + u16 si; u8 off1; u8 off2; u8 hstart;/* head start */ diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c index 3a33f82780..dc1e8d63d3 100644 --- a/soc/swr-mstr-ctrl.c +++ b/soc/swr-mstr-ctrl.c @@ -1132,7 +1132,7 @@ static void swrm_disable_ports(struct swr_master *master, (SWRM_DP_PORT_CTRL_BANK((i + 1), bank)), value); if (mport->stream_type == SWR_PCM) - swrm_pcm_port_config(swrm, i, mport->dir, false); + swrm_pcm_port_config(swrm, (i + 1), mport->dir, false); } } @@ -1205,7 +1205,7 @@ static void swrm_copy_data_port_config(struct swr_master *master, u8 bank) continue; if (mport->stream_type == SWR_PCM) - swrm_pcm_port_config(swrm, i, mport->dir, true); + swrm_pcm_port_config(swrm, (i + 1), mport->dir, true); list_for_each_entry(port_req, &mport->port_req_list, list) { slv_id = port_req->slave_port_id; @@ -1295,7 +1295,7 @@ static void swrm_copy_data_port_config(struct swr_master *master, u8 bank) << SWRM_DP_PORT_CTRL_OFFSET2_SHFT); value |= ((mport->offset1) << SWRM_DP_PORT_CTRL_OFFSET1_SHFT); - value |= mport->sinterval; + value |= (mport->sinterval & 0xFF); reg[len] = SWRM_DP_PORT_CTRL_BANK((i + 1), bank); @@ -1304,6 +1304,9 @@ static void swrm_copy_data_port_config(struct swr_master *master, u8 bank) __func__, i, (SWRM_DP_PORT_CTRL_BANK((i + 1), bank)), value); + reg[len] = SWRM_DP_SAMPLECTRL2_BANK((i + 1), bank); + val[len++] = ((mport->sinterval >> 8) & 0xFF); + if (mport->lane_ctrl != SWR_INVALID_PARAM) { reg[len] = SWRM_DP_PORT_CTRL_2_BANK((i + 1), bank); val[len++] = mport->lane_ctrl; diff --git a/soc/swr-mstr-ctrl.h b/soc/swr-mstr-ctrl.h index 2e7cac4fb6..b1606b386d 100644 --- a/soc/swr-mstr-ctrl.h +++ b/soc/swr-mstr-ctrl.h @@ -89,7 +89,7 @@ struct swrm_mports { u8 req_ch; u8 offset1; u8 offset2; - u8 sinterval; + u16 sinterval; u8 hstart; u8 hstop; u8 blk_grp_count;