testing/linux-xiaomi-pipa: upgrade to 6.19.11

Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/8316>
This commit is contained in:
bluebunny 2026-04-10 18:21:30 +09:00 committed by The Friendly Meow (merge) Bot
parent 5a7acde0f0
commit 90281e9722
No known key found for this signature in database
14 changed files with 654 additions and 1981 deletions

View file

@ -1,7 +1,8 @@
From 2b12882b851d1eea3aaa7ad416d0b7de863530e8 Mon Sep 17 00:00:00 2001
From bf64a74631c1df015388ff572c8479084b625da1 Mon Sep 17 00:00:00 2001
From: bluebunny <1812-bluebunny@users.noreply.gitlab.postmarketos.org>
Date: Thu, 19 Mar 2026 14:52:20 +0900
Subject: [PATCH 01/12] arm64: dts: qcom: sm8250-xiaomi-pipa: Add device tree for Xiaomi Pad 6
Subject: [PATCH 01/12] arm64: dts: qcom: sm8250-xiaomi-pipa: Add device tree
for Xiaomi Pad 6
Co-developed-by: Ryo Kenrie Wongso <developer@damillora.com>
Signed-off-by: Ryo Kenrie Wongso <developer@damillora.com>

View file

@ -1,4 +1,4 @@
From 7fbd6cbdc9d417ac9f600e946b2a4b695ab84804 Mon Sep 17 00:00:00 2001
From 8de782658e6f847107e711873af8c7412e1d7299 Mon Sep 17 00:00:00 2001
From: Joel Selvaraj <jo@jsfamily.in>
Date: Wed, 3 Feb 2021 19:54:45 +0000
Subject: [PATCH 02/12] power: supply: Add driver for Qualcomm PMIC fuel gauge

View file

@ -1,4 +1,4 @@
From 3bd98bc7ce56ff2472cb17a0be9bcb56b107ac25 Mon Sep 17 00:00:00 2001
From 154dfbecbae5be661610d14895fffd036bb45b8c Mon Sep 17 00:00:00 2001
From: Jianhua Lu <lujianhua000@gmail.com>
Date: Wed, 18 Sep 2024 14:27:53 +0800
Subject: [PATCH 03/12] power: supply: add bq25970 charger driver

View file

@ -1,4 +1,4 @@
From 52a2cbde53677a53453b512558f3cb2213fd87bc Mon Sep 17 00:00:00 2001
From bf99cf395af1bccc191828aba631ca18fa4ecbc1 Mon Sep 17 00:00:00 2001
From: Jianhua Lu <lujianhua000@gmail.com>
Date: Thu, 4 Aug 2022 13:26:53 +0800
Subject: [PATCH 05/12] drm: Add drm notifier support

View file

@ -1,4 +1,4 @@
From 34f033b66626bf82954f17a09ba3877ace034f2a Mon Sep 17 00:00:00 2001
From 124895bab4804060519eb52dad4dbc9178d2c62f Mon Sep 17 00:00:00 2001
From: Jianhua Lu <lujianhua000@gmail.com>
Date: Mon, 17 Oct 2022 08:02:58 +0800
Subject: [PATCH 06/12] drm: dsi: emit panel turn on/off signal to touchscreen

View file

@ -1,4 +1,4 @@
From 1afc0d0edec9d42ba072af2fe07380154186d55f Mon Sep 17 00:00:00 2001
From 73515e9b78e92abfca144f95ef9ce2f44a88e83a Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Sun, 4 Jun 2023 21:44:33 +0300
Subject: [PATCH 07/12] drm/msm/dsi: change sync mode to sync on DSI0 rather

View file

@ -1,4 +1,4 @@
From c6a632815c2f558bf8f8b29a17df05f5a914eecd Mon Sep 17 00:00:00 2001
From 4fdf0e7715ba08b393fb80fac427f44d02b71374 Mon Sep 17 00:00:00 2001
From: Jun Nie <jun.nie@linaro.org>
Date: Wed, 1 Oct 2025 21:59:13 +0800
Subject: [PATCH 08/12] drm/msm/dsi: support DSC configurations with
@ -19,7 +19,7 @@ Signed-off-by: Junjie Cao <caojunjie650@gmail.com>
2 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index e0de545d4077..773ce8520698 100644
index db6da99375a1..519410ec5197 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -166,6 +166,7 @@ struct msm_dsi_host {
@ -30,7 +30,7 @@ index e0de545d4077..773ce8520698 100644
/* connected device info */
unsigned int channel;
@@ -910,17 +911,10 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod
@@ -927,17 +928,10 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod
slice_per_intf = dsc->slice_count;
total_bytes_per_intf = dsc->slice_chunk_size * slice_per_intf;
@ -50,7 +50,7 @@ index e0de545d4077..773ce8520698 100644
if (is_cmd_mode) /* packet data type */
reg = DSI_COMMAND_COMPRESSION_MODE_CTRL_STREAM0_DATATYPE(MIPI_DSI_DCS_LONG_WRITE);
@@ -1069,12 +1063,8 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
@@ -1088,12 +1082,8 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
else
/*
* When DSC is enabled, WC = slice_chunk_size * slice_per_pkt + 1.
@ -64,7 +64,7 @@ index e0de545d4077..773ce8520698 100644
dsi_write(msm_host, REG_DSI_CMD_MDP_STREAM0_CTRL,
DSI_CMD_MDP_STREAM0_CTRL_WORD_COUNT(wc) |
@@ -1683,8 +1673,13 @@ static int dsi_host_attach(struct mipi_dsi_host *host,
@@ -1702,8 +1692,13 @@ static int dsi_host_attach(struct mipi_dsi_host *host,
msm_host->lanes = dsi->lanes;
msm_host->format = dsi->format;
msm_host->mode_flags = dsi->mode_flags;

View file

@ -1,4 +1,4 @@
From c5591f3289e3aaa841af20889ad3d952f88a699b Mon Sep 17 00:00:00 2001
From b7d4d69d76531e60945f625137a7b266a1447331 Mon Sep 17 00:00:00 2001
From: bluebunny <1812-bluebunny@users.noreply.gitlab.postmarketos.org>
Date: Mon, 27 Jan 2025 01:19:39 +0300
Subject: [PATCH 10/12] drivers: media: i2c: ov13b10: add device tree support

View file

@ -1,16 +1,18 @@
From 1876ed85b33282e67f3bf85e97c0920b8fbe7ee3 Mon Sep 17 00:00:00 2001
From 6e26f796af8264cc0c9f6a6c923e77a0e98e9a72 Mon Sep 17 00:00:00 2001
From: domin746826 <ominek.pl91@gmail.com>
Date: Fri, 11 Apr 2025 13:46:25 +0400
Subject: [PATCH 11/12] ASoC: codecs: aw88261: add hacks for xiaomi-pipa
aw88261 requires some hacks to work on pipa, including device tree support and non-standard firmware requests to the codec itself.
The overall hack was reduced, but it still needs rework when linux-next changes land on stable.
---
sound/soc/codecs/aw88261.c | 541 ++++++++++++++++++++-----------------
sound/soc/codecs/aw88261.h | 8 +-
2 files changed, 297 insertions(+), 252 deletions(-)
sound/soc/codecs/aw88261.c | 210 +++++++++++++++++++++++++++++++++++--
sound/soc/codecs/aw88261.h | 4 +
2 files changed, 208 insertions(+), 6 deletions(-)
diff --git a/sound/soc/codecs/aw88261.c b/sound/soc/codecs/aw88261.c
index 96b1a85c26aa..8f9770d46517 100644
index 96b1a85c26aa..f69fb56ec6b0 100644
--- a/sound/soc/codecs/aw88261.c
+++ b/sound/soc/codecs/aw88261.c
@@ -10,11 +10,13 @@
@ -27,288 +29,7 @@ index 96b1a85c26aa..8f9770d46517 100644
static const struct regmap_config aw88261_remap_config = {
.val_bits = 16,
@@ -29,6 +31,10 @@ static void aw88261_dev_set_volume(struct aw_device *aw_dev, unsigned int value)
struct aw_volume_desc *vol_desc = &aw_dev->volume_desc;
unsigned int real_value, volume;
unsigned int reg_value;
+ unsigned int volume_boost = 3; // Apply a 3dB boost to all volume settings
+
+ /* Apply boosted volume - increase output level for Xiaomi Pad 6 */
+ value = (value > volume_boost) ? (value - volume_boost) : 0;
volume = min((value + vol_desc->init_volume), (unsigned int)AW88261_MUTE_VOL);
real_value = DB_TO_REG_VAL(volume);
@@ -37,7 +43,7 @@ static void aw88261_dev_set_volume(struct aw_device *aw_dev, unsigned int value)
real_value = (real_value | (reg_value & AW88261_VOL_START_MASK));
- dev_dbg(aw_dev->dev, "value 0x%x , real_value:0x%x", value, real_value);
+ dev_dbg(aw_dev->dev, "value 0x%x , real_value:0x%x (boosted)", value, real_value);
regmap_write(aw_dev->regmap, AW88261_SYSCTRL2_REG, real_value);
}
@@ -88,12 +94,12 @@ static void aw88261_dev_fade_out(struct aw_device *aw_dev)
static void aw88261_dev_i2s_tx_enable(struct aw_device *aw_dev, bool flag)
{
- if (flag)
- regmap_update_bits(aw_dev->regmap, AW88261_I2SCFG1_REG,
- ~AW88261_I2STXEN_MASK, AW88261_I2STXEN_ENABLE_VALUE);
- else
- regmap_update_bits(aw_dev->regmap, AW88261_I2SCFG1_REG,
- ~AW88261_I2STXEN_MASK, AW88261_I2STXEN_DISABLE_VALUE);
+ // if (flag)
+ // regmap_update_bits(aw_dev->regmap, AW88261_I2SCFG1_REG,
+ // ~AW88261_I2STXEN_MASK, AW88261_I2STXEN_ENABLE_VALUE);
+ // else
+ // regmap_update_bits(aw_dev->regmap, AW88261_I2SCFG1_REG,
+ // ~AW88261_I2STXEN_MASK, AW88261_I2STXEN_DISABLE_VALUE);
}
static void aw88261_dev_pwd(struct aw_device *aw_dev, bool pwd)
@@ -108,11 +114,12 @@ static void aw88261_dev_pwd(struct aw_device *aw_dev, bool pwd)
static void aw88261_dev_amppd(struct aw_device *aw_dev, bool amppd)
{
+ int ret;
if (amppd)
- regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG,
+ ret = regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG,
~AW88261_AMPPD_MASK, AW88261_AMPPD_POWER_DOWN_VALUE);
else
- regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG,
+ ret = regmap_update_bits(aw_dev->regmap, AW88261_SYSCTRL_REG,
~AW88261_AMPPD_MASK, AW88261_AMPPD_WORKING_VALUE);
}
@@ -149,11 +156,19 @@ static int aw88261_dev_get_iis_status(struct aw_device *aw_dev)
ret = regmap_read(aw_dev->regmap, AW88261_SYSST_REG, &reg_val);
if (ret)
return ret;
- if ((reg_val & AW88261_BIT_PLL_CHECK) != AW88261_BIT_PLL_CHECK) {
- dev_err(aw_dev->dev, "check pll lock fail,reg_val:0x%04x", reg_val);
- return -EINVAL;
- }
+ bool pll_lock = (reg_val & (1 << 0)) == 0x0001;
+ bool clks_available = (reg_val & (1 << 5)) == 0x0000;
+
+ if (pll_lock && clks_available) {
+ dev_dbg(aw_dev->dev, "IIS signal is OK");
+ ret = 0;
+ } else {
+ dev_err(aw_dev->dev,
+ "IIS signal is not OK, pll_lock:%d, clks_available:%d",
+ pll_lock, clks_available);
+ ret = -EINVAL;
+ }
return ret;
}
@@ -174,68 +189,27 @@ static int aw88261_dev_check_mode1_pll(struct aw_device *aw_dev)
return -EPERM;
}
-static int aw88261_dev_check_mode2_pll(struct aw_device *aw_dev)
+static int aw88261_dev_check_syspll(struct aw_device *aw_dev)
{
- unsigned int reg_val;
- int ret, i;
-
- ret = regmap_read(aw_dev->regmap, AW88261_PLLCTRL1_REG, &reg_val);
- if (ret)
- return ret;
-
- reg_val &= (~AW88261_CCO_MUX_MASK);
- if (reg_val == AW88261_CCO_MUX_DIVIDED_VALUE) {
- dev_dbg(aw_dev->dev, "CCO_MUX is already divider");
- return -EPERM;
- }
-
- /* change mode2 */
- ret = regmap_update_bits(aw_dev->regmap, AW88261_PLLCTRL1_REG,
- ~AW88261_CCO_MUX_MASK, AW88261_CCO_MUX_DIVIDED_VALUE);
- if (ret)
- return ret;
-
- for (i = 0; i < AW88261_DEV_SYSST_CHECK_MAX; i++) {
- ret = aw88261_dev_get_iis_status(aw_dev);
- if (ret) {
- dev_err(aw_dev->dev, "mode2 iis signal check error");
- usleep_range(AW88261_2000_US, AW88261_2000_US + 10);
- } else {
+ int ret;
+ int retry_count = 0;
+ const int max_retries = 20; // Increase retries for PLL stabilization
+
+ while (retry_count < max_retries) {
+ ret = aw88261_dev_check_mode1_pll(aw_dev);
+ if (ret != 0)
+ retry_count++;
+ else
break;
- }
}
- /* change mode1 */
- ret = regmap_update_bits(aw_dev->regmap, AW88261_PLLCTRL1_REG,
- ~AW88261_CCO_MUX_MASK, AW88261_CCO_MUX_BYPASS_VALUE);
- if (ret == 0) {
- usleep_range(AW88261_2000_US, AW88261_2000_US + 10);
- for (i = 0; i < AW88261_DEV_SYSST_CHECK_MAX; i++) {
- ret = aw88261_dev_check_mode1_pll(aw_dev);
- if (ret) {
- dev_err(aw_dev->dev, "mode2 switch to mode1, iis signal check error");
- usleep_range(AW88261_2000_US, AW88261_2000_US + 10);
- } else {
- break;
- }
- }
+ if (retry_count == max_retries) {
+ dev_err(aw_dev->dev,
+ "Failed to stabilize PLL after %d attempts, we're cooked", max_retries);
+ return -ETIMEDOUT;
}
-
- return ret;
-}
-
-static int aw88261_dev_check_syspll(struct aw_device *aw_dev)
-{
- int ret;
-
- ret = aw88261_dev_check_mode1_pll(aw_dev);
- if (ret) {
- dev_dbg(aw_dev->dev, "mode1 check iis failed try switch to mode2 check");
- ret = aw88261_dev_check_mode2_pll(aw_dev);
- if (ret) {
- dev_err(aw_dev->dev, "mode2 check iis failed");
- return ret;
- }
+ if (ret == 0) {
+ dev_info(aw_dev->dev, "PLL stabilized successfully");
}
return ret;
@@ -278,123 +252,13 @@ static void aw88261_dev_uls_hmute(struct aw_device *aw_dev, bool uls_hmute)
AW88261_ULS_HMUTE_DISABLE_VALUE);
}
-static void aw88261_reg_force_set(struct aw88261 *aw88261)
-{
- if (aw88261->frcset_en == AW88261_FRCSET_ENABLE) {
- /* set FORCE_PWM */
- regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL3_REG,
- AW88261_FORCE_PWM_MASK, AW88261_FORCE_PWM_FORCEMINUS_PWM_VALUE);
- /* set BOOST_OS_WIDTH */
- regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL5_REG,
- AW88261_BST_OS_WIDTH_MASK, AW88261_BST_OS_WIDTH_50NS_VALUE);
- /* set BURST_LOOPR */
- regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL6_REG,
- AW88261_BST_LOOPR_MASK, AW88261_BST_LOOPR_340K_VALUE);
- /* set RSQN_DLY */
- regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL7_REG,
- AW88261_RSQN_DLY_MASK, AW88261_RSQN_DLY_35NS_VALUE);
- /* set BURST_SSMODE */
- regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL8_REG,
- AW88261_BURST_SSMODE_MASK, AW88261_BURST_SSMODE_FAST_VALUE);
- /* set BST_BURST */
- regmap_update_bits(aw88261->regmap, AW88261_BSTCTRL9_REG,
- AW88261_BST_BURST_MASK, AW88261_BST_BURST_30MA_VALUE);
- } else {
- dev_dbg(aw88261->aw_pa->dev, "needn't set reg value");
- }
-}
-
-static int aw88261_dev_get_icalk(struct aw_device *aw_dev, int16_t *icalk)
-{
- u16 reg_icalk, reg_icalkl;
- unsigned int reg_val;
- int ret;
-
- ret = regmap_read(aw_dev->regmap, AW88261_EFRH4_REG, &reg_val);
- if (ret)
- return ret;
-
- reg_icalk = reg_val & (~AW88261_EF_ISN_GESLP_H_MASK);
-
- ret = regmap_read(aw_dev->regmap, AW88261_EFRL4_REG, &reg_val);
- if (ret)
- return ret;
-
- reg_icalkl = reg_val & (~AW88261_EF_ISN_GESLP_L_MASK);
-
- reg_icalk = (reg_icalk >> AW88261_ICALK_SHIFT) & (reg_icalkl >> AW88261_ICALKL_SHIFT);
-
- if (reg_icalk & (~AW88261_EF_ISN_GESLP_SIGN_MASK))
- reg_icalk = reg_icalk | ~AW88261_EF_ISN_GESLP_NEG;
-
- *icalk = (int16_t)reg_icalk;
-
- return ret;
-}
-
-static int aw88261_dev_get_vcalk(struct aw_device *aw_dev, int16_t *vcalk)
-{
- u16 reg_vcalk, reg_vcalkl;
- unsigned int reg_val;
- int ret;
-
- ret = regmap_read(aw_dev->regmap, AW88261_EFRH3_REG, &reg_val);
- if (ret)
- return ret;
-
- reg_vcalk = (u16)reg_val & (~AW88261_EF_VSN_GESLP_H_MASK);
-
- ret = regmap_read(aw_dev->regmap, AW88261_EFRL3_REG, &reg_val);
- if (ret)
- return ret;
-
- reg_vcalkl = (u16)reg_val & (~AW88261_EF_VSN_GESLP_L_MASK);
-
- reg_vcalk = (reg_vcalk >> AW88261_VCALK_SHIFT) & (reg_vcalkl >> AW88261_VCALKL_SHIFT);
-
- if (reg_vcalk & AW88261_EF_VSN_GESLP_SIGN_MASK)
- reg_vcalk = reg_vcalk | (~AW88261_EF_VSN_GESLP_NEG);
- *vcalk = (int16_t)reg_vcalk;
-
- return ret;
-}
-
-static int aw88261_dev_set_vcalb(struct aw_device *aw_dev)
-{
- int16_t icalk_val, vcalk_val;
- int icalk, vcalk, vcalb;
- u32 reg_val;
- int ret;
-
- ret = aw88261_dev_get_icalk(aw_dev, &icalk_val);
- if (ret)
- return ret;
-
- ret = aw88261_dev_get_vcalk(aw_dev, &vcalk_val);
- if (ret)
- return ret;
-
- icalk = AW88261_CABL_BASE_VALUE + AW88261_ICABLK_FACTOR * icalk_val;
- vcalk = AW88261_CABL_BASE_VALUE + AW88261_VCABLK_FACTOR * vcalk_val;
- if (!vcalk)
- return -EINVAL;
-
- vcalb = AW88261_VCAL_FACTOR * icalk / vcalk;
- reg_val = (unsigned int)vcalb;
-
- dev_dbg(aw_dev->dev, "icalk=%d, vcalk=%d, vcalb=%d, reg_val=0x%04x",
- icalk, vcalk, vcalb, reg_val);
- ret = regmap_write(aw_dev->regmap, AW88261_VSNTM1_REG, reg_val);
-
- return ret;
-}
-
-static int aw88261_dev_reg_update(struct aw88261 *aw88261,
- unsigned char *data, unsigned int len)
+static int aw88261_dev_reg_update(struct aw88261 *aw88261, unsigned char *data, unsigned int len)
{
@@ -395,6 +397,8 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
struct aw_device *aw_dev = aw88261->aw_pa;
struct aw_volume_desc *vol_desc = &aw_dev->volume_desc;
unsigned int read_val, efcheck_val, read_vol;
@ -317,7 +38,7 @@ index 96b1a85c26aa..8f9770d46517 100644
int data_len, i, ret;
int16_t *reg_data;
u16 reg_val;
@@ -417,6 +281,31 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
@@ -417,6 +421,31 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
reg_addr = reg_data[i];
reg_val = reg_data[i + 1];
@ -349,20 +70,10 @@ index 96b1a85c26aa..8f9770d46517 100644
if (reg_addr == AW88261_SYSCTRL_REG) {
aw88261->amppd_st = reg_val & (~AW88261_AMPPD_MASK);
ret = regmap_read(aw_dev->regmap, reg_addr, &read_val);
@@ -432,21 +321,45 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
/* enable uls hmute */
reg_val &= AW88261_ULS_HMUTE_MASK;
reg_val |= AW88261_ULS_HMUTE_ENABLE_VALUE;
+
+ reg_val = 0b0011001001000000;
@@ -442,6 +471,35 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
aw88261->efuse_check = AW88261_EF_AND_CHECK;
}
- if (reg_addr == AW88261_DBGCTRL_REG) {
- efcheck_val = reg_val & (~AW88261_EF_DBMD_MASK);
- if (efcheck_val == AW88261_OR_VALUE)
- aw88261->efuse_check = AW88261_EF_OR_CHECK;
- else
- aw88261->efuse_check = AW88261_EF_AND_CHECK;
+ /* Special handling for I2SCTRL registers for Xiaomi Pad 6 */
+ if (reg_addr == AW88261_I2SCTRL1_REG &&
+ (of_machine_is_compatible("xiaomi,pipa") ||
@ -390,57 +101,12 @@ index 96b1a85c26aa..8f9770d46517 100644
+ aw_dev->dev,
+ "Setting TDM mode for Xiaomi Pad 6, channel: %d",
+ slot_num);
}
+ }
+
/* i2stxen */
if (reg_addr == AW88261_I2SCTRL3_REG) {
/* close tx */
- reg_val &= AW88261_I2STXEN_MASK;
- reg_val |= AW88261_I2STXEN_DISABLE_VALUE;
+ // reg_val &= AW88261_I2STXEN_MASK;
+ // reg_val |= AW88261_I2STXEN_DISABLE_VALUE;
+ reg_val = 0b0000000011110110; // 0b00000000_0_0_0_1_0_0_1_0;
}
if (reg_addr == AW88261_SYSCTRL2_REG) {
@@ -456,18 +369,11 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
REG_VAL_TO_DB(read_vol);
}
- if (reg_addr == AW88261_VSNTM1_REG)
- continue;
-
ret = regmap_write(aw_dev->regmap, reg_addr, reg_val);
if (ret)
break;
}
- ret = aw88261_dev_set_vcalb(aw_dev);
- if (ret)
- return ret;
-
if (aw_dev->prof_cur != aw_dev->prof_index)
vol_desc->ctl_volume = 0;
@@ -580,8 +486,6 @@ static int aw88261_dev_start(struct aw88261 *aw88261)
if (aw88261->amppd_st)
aw88261_dev_amppd(aw_dev, true);
- aw88261_reg_force_set(aw88261);
-
/* close uls mute */
aw88261_dev_uls_hmute(aw_dev, false);
@@ -609,7 +513,7 @@ static int aw88261_dev_start(struct aw88261 *aw88261)
static int aw88261_dev_stop(struct aw_device *aw_dev)
{
if (aw_dev->status == AW88261_DEV_PW_OFF) {
- dev_info(aw_dev->dev, "already power off");
+ dev_dbg(aw_dev->dev, "already power off");
return 0;
}
@@ -711,6 +615,86 @@ static void aw88261_start(struct aw88261 *aw88261, bool sync_start)
@@ -711,6 +769,70 @@ static void aw88261_start(struct aw88261 *aw88261, bool sync_start)
AW88261_START_WORK_DELAY_MS);
}
@ -501,23 +167,7 @@ index 96b1a85c26aa..8f9770d46517 100644
+ return 0;
+}
+
+static int aw88261_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
+{
+ // aw_snd_soc_codec_t *codec = dai->component;
+
+ // struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ // handle playback
+ } else {
+ // handle capture
+ }
+
+ return 0;
+}
+
+static const struct snd_soc_dai_ops aw88261_dai_ops = {
+ .startup = aw88261_startup,
+ .set_stream = aw88261_dai_set_stream,
+ .set_sysclk = aw88261_dai_set_sysclk,
+ .set_fmt = aw88261_dai_set_fmt,
@ -527,20 +177,7 @@ index 96b1a85c26aa..8f9770d46517 100644
static struct snd_soc_dai_driver aw88261_dai[] = {
{
.name = "aw88261-aif",
@@ -718,17 +702,18 @@ static struct snd_soc_dai_driver aw88261_dai[] = {
.playback = {
.stream_name = "Speaker_Playback",
.channels_min = 1,
- .channels_max = 2,
+ .channels_max = 1,
.rates = AW88261_RATES,
.formats = AW88261_FORMATS,
},
.capture = {
.stream_name = "Speaker_Capture",
.channels_min = 1,
- .channels_max = 2,
+ .channels_max = 1,
@@ -729,6 +851,7 @@ static struct snd_soc_dai_driver aw88261_dai[] = {
.rates = AW88261_RATES,
.formats = AW88261_FORMATS,
},
@ -548,7 +185,7 @@ index 96b1a85c26aa..8f9770d46517 100644
},
};
@@ -956,6 +941,25 @@ static int aw88261_set_fade_step(struct snd_kcontrol *kcontrol,
@@ -956,6 +1079,25 @@ static int aw88261_set_fade_step(struct snd_kcontrol *kcontrol,
return 0;
}
@ -574,59 +211,7 @@ index 96b1a85c26aa..8f9770d46517 100644
static const struct snd_kcontrol_new aw88261_controls[] = {
SOC_SINGLE_EXT("PCM Playback Volume", AW88261_SYSCTRL2_REG,
6, AW88261_MUTE_VOL, 0, aw88261_volume_get,
@@ -1009,38 +1013,6 @@ static const struct snd_soc_dapm_route aw88261_audio_map[] = {
{"AIF_TX", NULL, "ADC Input"},
};
-static int aw88261_frcset_check(struct aw88261 *aw88261)
-{
- unsigned int reg_val;
- u16 temh, teml, tem;
- int ret;
-
- ret = regmap_read(aw88261->regmap, AW88261_EFRH3_REG, &reg_val);
- if (ret)
- return ret;
- temh = ((u16)reg_val & (~AW88261_TEMH_MASK));
-
- ret = regmap_read(aw88261->regmap, AW88261_EFRL3_REG, &reg_val);
- if (ret)
- return ret;
- teml = ((u16)reg_val & (~AW88261_TEML_MASK));
-
- if (aw88261->efuse_check == AW88261_EF_OR_CHECK)
- tem = (temh | teml);
- else
- tem = (temh & teml);
-
- if (tem == AW88261_DEFAULT_CFG)
- aw88261->frcset_en = AW88261_FRCSET_ENABLE;
- else
- aw88261->frcset_en = AW88261_FRCSET_DISABLE;
-
- dev_dbg(aw88261->aw_pa->dev, "tem is 0x%04x, frcset_en is %d",
- tem, aw88261->frcset_en);
-
- return ret;
-}
-
static int aw88261_dev_init(struct aw88261 *aw88261, struct aw_container *aw_cfg)
{
struct aw_device *aw_dev = aw88261->aw_pa;
@@ -1067,12 +1039,6 @@ static int aw88261_dev_init(struct aw88261 *aw88261, struct aw_container *aw_cfg
return ret;
}
- ret = aw88261_frcset_check(aw88261);
- if (ret) {
- dev_err(aw_dev->dev, "aw88261_frcset_check ret = %d\n", ret);
- return ret;
- }
-
aw88261_dev_clear_int_status(aw_dev);
aw88261_dev_uls_hmute(aw_dev, true);
@@ -1097,13 +1063,13 @@ static int aw88261_request_firmware_file(struct aw88261 *aw88261)
@@ -1097,13 +1239,13 @@ static int aw88261_request_firmware_file(struct aw88261 *aw88261)
aw88261->aw_pa->fw_status = AW88261_DEV_FW_FAILED;
@ -643,7 +228,7 @@ index 96b1a85c26aa..8f9770d46517 100644
aw88261->aw_cfg = devm_kzalloc(aw88261->aw_pa->dev, cont->size + sizeof(int), GFP_KERNEL);
if (!aw88261->aw_cfg) {
@@ -1116,7 +1082,7 @@ static int aw88261_request_firmware_file(struct aw88261 *aw88261)
@@ -1116,7 +1258,7 @@ static int aw88261_request_firmware_file(struct aw88261 *aw88261)
ret = aw88395_dev_load_acf_check(aw88261->aw_pa, aw88261->aw_cfg);
if (ret) {
@ -652,7 +237,7 @@ index 96b1a85c26aa..8f9770d46517 100644
return ret;
}
@@ -1135,28 +1101,65 @@ static int aw88261_codec_probe(struct snd_soc_component *component)
@@ -1135,6 +1277,10 @@ static int aw88261_codec_probe(struct snd_soc_component *component)
struct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component);
struct aw88261 *aw88261 = snd_soc_component_get_drvdata(component);
int ret;
@ -663,30 +248,7 @@ index 96b1a85c26aa..8f9770d46517 100644
INIT_DELAYED_WORK(&aw88261->start_work, aw88261_startup_work);
+ /* Log device info for debugging */
+ dev_info(component->dev,
+ "Probing AW88261 codec for Xiaomi Pad 6 (channel %d)",
+ aw88261->aw_pa->channel);
+
ret = aw88261_request_firmware_file(aw88261);
if (ret)
return dev_err_probe(aw88261->aw_pa->dev, ret,
"aw88261_request_firmware_file failed\n");
- /* add widgets */
+ /* add widgets with unique names for each channel */
ret = snd_soc_dapm_new_controls(dapm, aw88261_dapm_widgets,
ARRAY_SIZE(aw88261_dapm_widgets));
+ dev_info(component->dev, "Widget return status: %d\n", ret);
if (ret)
return ret;
- /* add route */
+ /* add route with unique widget names */
+
ret = snd_soc_dapm_add_routes(dapm, aw88261_audio_map,
ARRAY_SIZE(aw88261_audio_map));
+ dev_info(component->dev, "Route return status: %d\n", ret);
@@ -1155,8 +1301,24 @@ static int aw88261_codec_probe(struct snd_soc_component *component)
if (ret)
return ret;
@ -709,20 +271,11 @@ index 96b1a85c26aa..8f9770d46517 100644
+ if (ret) {
+ dev_err(component->dev, "Failed to add controls: %d\n", ret);
+ return ret;
+ }
+
+ /* Apply Xiaomi Pad 6 specific optimizations */
+ if (of_machine_is_compatible("xiaomi,pipa") ||
+ of_machine_is_compatible("qcom,sm8250-mtp")) {
+ dev_info(
+ component->dev,
+ "Applying Xiaomi Pad 6 specific optimizations for channel %d",
+ aw88261->aw_pa->channel);
+ }
return ret;
}
@@ -1173,6 +1176,14 @@ static const struct snd_soc_component_driver soc_codec_dev_aw88261 = {
@@ -1173,6 +1335,14 @@ static const struct snd_soc_component_driver soc_codec_dev_aw88261 = {
.remove = aw88261_codec_remove,
};
@ -737,7 +290,7 @@ index 96b1a85c26aa..8f9770d46517 100644
static void aw88261_parse_channel_dt(struct aw88261 *aw88261)
{
struct aw_device *aw_dev = aw88261->aw_pa;
@@ -1185,6 +1196,19 @@ static void aw88261_parse_channel_dt(struct aw88261 *aw88261)
@@ -1185,6 +1355,19 @@ static void aw88261_parse_channel_dt(struct aw88261 *aw88261)
aw_dev->channel = channel_value;
}
@ -757,13 +310,7 @@ index 96b1a85c26aa..8f9770d46517 100644
static int aw88261_init(struct aw88261 *aw88261, struct i2c_client *i2c, struct regmap *regmap)
{
struct aw_device *aw_dev;
@@ -1218,11 +1242,12 @@ static int aw88261_init(struct aw88261 *aw88261, struct i2c_client *i2c, struct
aw_dev->prof_info.count = 0;
aw_dev->prof_info.prof_type = AW88395_DEV_NONE_TYPE_ID;
aw_dev->channel = 0;
- aw_dev->fw_status = AW88261_DEV_FW_FAILED;
+ aw_dev->fw_status = AW88261_DEV_FW_OK;
aw_dev->fade_step = AW88261_VOLUME_STEP_DB;
@@ -1223,6 +1406,7 @@ static int aw88261_init(struct aw88261 *aw88261, struct i2c_client *i2c, struct
aw_dev->volume_desc.ctl_volume = AW88261_VOL_DEFAULT_VALUE;
aw_dev->volume_desc.mute_volume = AW88261_MUTE_VOL;
aw88261_parse_channel_dt(aw88261);
@ -771,16 +318,7 @@ index 96b1a85c26aa..8f9770d46517 100644
return ret;
}
@@ -1232,6 +1257,8 @@ static int aw88261_i2c_probe(struct i2c_client *i2c)
struct aw88261 *aw88261;
int ret;
+ dev_info(&i2c->dev, "Probing AW88261 at address 0x%x, name: %s\n",
+ i2c->addr, dev_name(&i2c->dev));
ret = i2c_check_functionality(i2c->adapter, I2C_FUNC_I2C);
if (!ret)
return dev_err_probe(&i2c->dev, -ENXIO, "check_functionality failed");
@@ -1244,6 +1271,13 @@ static int aw88261_i2c_probe(struct i2c_client *i2c)
@@ -1244,6 +1428,13 @@ static int aw88261_i2c_probe(struct i2c_client *i2c)
i2c_set_clientdata(i2c, aw88261);
@ -794,7 +332,7 @@ index 96b1a85c26aa..8f9770d46517 100644
aw88261->regmap = devm_regmap_init_i2c(i2c, &aw88261_remap_config);
if (IS_ERR(aw88261->regmap)) {
ret = PTR_ERR(aw88261->regmap);
@@ -1270,9 +1304,16 @@ static const struct i2c_device_id aw88261_i2c_id[] = {
@@ -1270,9 +1461,16 @@ static const struct i2c_device_id aw88261_i2c_id[] = {
};
MODULE_DEVICE_TABLE(i2c, aw88261_i2c_id);
@ -812,36 +350,27 @@ index 96b1a85c26aa..8f9770d46517 100644
.probe = aw88261_i2c_probe,
.id_table = aw88261_i2c_id,
diff --git a/sound/soc/codecs/aw88261.h b/sound/soc/codecs/aw88261.h
index 734d0f93ced9..4cfa84c1b3f3 100644
index 734d0f93ced9..c62043ed5e07 100644
--- a/sound/soc/codecs/aw88261.h
+++ b/sound/soc/codecs/aw88261.h
@@ -372,8 +372,8 @@
@@ -374,6 +374,7 @@
#define AW88261_I2C_NAME "aw88261"
-#define AW88261_RATES (SNDRV_PCM_RATE_8000_48000 | \
- SNDRV_PCM_RATE_96000)
+#define AW88261_RATES SNDRV_PCM_RATE_48000
#define AW88261_RATES (SNDRV_PCM_RATE_8000_48000 | \
SNDRV_PCM_RATE_96000)
+
#define AW88261_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S32_LE)
@@ -448,11 +448,15 @@ struct aw88261 {
@@ -448,6 +449,9 @@ struct aw88261 {
struct regmap *regmap;
struct aw_container *aw_cfg;
+ const char *fw_name;
+ int sysclk;
+
int efuse_check;
int frcset_en;
unsigned int mute_st;
unsigned int amppd_st;
+ int sysclk;
+
bool phase_sync;
};
--
2.52.0

View file

@ -1,4 +1,4 @@
From c07e80d775c574391b70bec855075ba305fd0e78 Mon Sep 17 00:00:00 2001
From ec0d4317e6e0c57f64aa9a175b827f21c2a208a5 Mon Sep 17 00:00:00 2001
From: Jianhua Lu <lujianhua000@gmail.com>
Date: Mon, 11 Dec 2023 09:23:28 +0800
Subject: [PATCH 12/12] ASoC: qcom: sm8250: Add tdm support

View file

@ -1,7 +1,7 @@
maintainer="bluebunny <kalorin.bok084@passinbox.com>"
_flavor="xiaomi-pipa"
pkgname=linux-$_flavor
pkgver=6.19.10
pkgver=6.19.11
pkgrel=0
pkgdesc="Stable kernel for Xiaomi Pad 6"
arch="aarch64"
@ -90,18 +90,18 @@ package() {
}
sha512sums="
11a397c54dddf02fc62b52b2571a0d13cf96450c2e67cffa759c34b9432e51dcb39871347c9cdbca36cfaf78198015d8d7a4d2c2a8d506e22b998fd2b185341b linux-6.19.10.tar.xz
1fa160c966de44287af79d33bda865abe8023e86756f1a6bb1bb01f30b264cbd52e6ae2c9bf24d77689cfb94eb5949d7a8049c20f222b8d34b63e6d2b72cfdba config-xiaomi-pipa.aarch64
b074e307a6d670d4e07e21fef8a10a17d19b3f7c42d0c13c862c0411d36463e897d4351b7db6238fcd3c79d455a1716bd63be42d41158dadf91529cbac96433a 0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch
6ebbe90abac86eed17e3c8c162ff3d161422d8a5a8359de75ace7482ff73cfbc01e50b116d4d1753e1e889b3bf6baf10e7f90e5964cd6e88e399f2f53f802154 0002-power-supply-Add-driver-for-Qualcomm-PMIC-fuel-gauge.patch
4602990473e9f4c446b62a1db80f23631542f29427847ae6eace5d8da0615e49443438d2a934530388b1d236c9d489d869136f2fc2469756e20d5eaa88861eb9 0003-power-supply-add-bq25970-charger-driver.patch
06975736172a08bae8354bf1e5f958224454510829fa339e7e0318a2cea78aef84aea71856d563ee8ae1f734ab174db2897a9236f46c75b7f120dadce749bb3b 0004-Input-Add-nt36523-touchscreen-driver.patch
488ca6bf65f07a0876d8362aa56422af77cc9e6aa421be7ffc3425886549c97857597d6915880a0851e88b844c132c3b57958fa911ef4d26c8be0479d71239ea 0005-drm-Add-drm-notifier-support.patch
3f3d6825a06a2eacc1297c3857102550701d12cf6530f65b099b11ce0803d4148127223a8552417f0757618d82d671251d44c3b665af55b856c04ae5c92e098b 0006-drm-dsi-emit-panel-turn-on-off-signal-to-touchscreen.patch
47968c31e40229f555ce31cd3674a00841b1feec9b30cbd3724415384965207e59d9b998ee59dbaccb73b431666b0071cf5f589bd63e841743d14ea4926f7432 0007-drm-msm-dsi-change-sync-mode-to-sync-on-DSI0-rather-.patch
959c6ee7640887db16f6d0e8722daacff1ecab61d4146c60922129d154a96174559eef2819f46f6771b38704f63cbb9de08c1e57bcc8b292054592efa323710e 0008-drm-msm-dsi-support-DSC-configurations-with-slice_pe.patch
6613e4c6c7ec2619a4d9440546852ac3edaf55a1f10011c99a339354162fee91858d8cf4b8367a65579a789cbfa2d10e81f4fe28ebefde6275de76a0a087e99e 0009-drm-panel-Add-support-for-Novatek-NT36532-panel.patch
52c7bf7a788c47924fdc8f6d0a667fa89dbc9c7f1d87a71ba313866a0046832d573fc2acb132644d6a3d09022efd05cac096cc8741a2c16450755c43249766f4 0010-drivers-media-i2c-ov13b10-add-device-tree-support-an.patch
5b0204da89898145d6ed1d3a60c35a9b3c5ba319e883ddc30c685daa427558702795a7a86a84ecb0a167791d951b1f5e3cd402ad9636b528111ac3c79805396f 0011-ASoC-codecs-aw88261-add-hacks-for-xiaomi-pipa.patch
569377adb477d233b88b7b922d924d781a78e91ab829afe03e3a22882bc7b852e4dc6e34ea299e1e7a53e759a71c8c9e763e8e1dbf3e7e1fe1b0ea3f38b02cb9 0012-ASoC-qcom-sm8250-Add-tdm-support.patch
d458fdf65f08b501978d1e274c777633b8473628fb099e2a9a8aac3a943b157fa5132a8ec026cc242f836eb2c441701b5e342f30402d10b12f6759097775de2a linux-6.19.11.tar.xz
21638c8ad6858257885ccc78c4fb81937986f4b6e4a496bb5cfee19e642d06604209c757de96b0d1cc9ff54f66ecaabc69d68971651b31f6192a5ca7ab0214d5 config-xiaomi-pipa.aarch64
d0758c5d4d4be8812fcbb10c60cc69f86dfd6cd0c305840cb1d445eea7999ee2e68c7a2211869426d2f25cc4b1a5ada5a16d02abf49d31929d6522b40446faa6 0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch
7e69dba0cfb93ed6f6cfcc7a5b4a9fe5b54c2b5a93a39a05b97928f4de9f1acc3780fb4668310548acc294649e135cdccb7ba5c7c4133286c69ab84e26c9e8ff 0002-power-supply-Add-driver-for-Qualcomm-PMIC-fuel-gauge.patch
20a2c5424179dc625ff5d6f733ecf77fe5fd1388373f6a1c637d0324b5ddd738817e5bec4be0409e2073c907547b533b88982049f145f1c2261e246f998d7043 0003-power-supply-add-bq25970-charger-driver.patch
c9ee1043db813789312f93de40f1cd281025b6abb7afed9410403db1e9422922e2c3c7ebeeb29b7cb43516fa8eb265165d2c2f3895c5ef1cff16b7100f7289b7 0004-Input-Add-nt36523-touchscreen-driver.patch
a89109d1cedec7288c71b1966a78e73572fef98a6ec06654ea787833a442f5f5e368d6793060a78262a54abaad59c6f503b23622762cefcac0c5d0bb2f449abd 0005-drm-Add-drm-notifier-support.patch
18bf12f551b0b0dc78f29f3e0a0a7f01bb02ca425987ef338cee270d0833e33d4a22e0d1b2465d5089581e94a5c959efbee35f9b40fa67c4d110e21690525811 0006-drm-dsi-emit-panel-turn-on-off-signal-to-touchscreen.patch
a3989290372f0460a4ddde37f4ff6ad16dab34706b0723f1f60e01cd59792c11f59ccd1bc083b5f24f35138eaccc07b00ca7ace970c65fd2eb9dabbef7b1506f 0007-drm-msm-dsi-change-sync-mode-to-sync-on-DSI0-rather-.patch
2a6d83c12a7958d3b53980de7d6202e2eb80134cd203cd809142f245ccf1d33ff0f07f6b110bf8bd2109e26744a0ee61e628be0d275fc722cbb8224d64abbba3 0008-drm-msm-dsi-support-DSC-configurations-with-slice_pe.patch
65306c9462f3a4cc20f09ca6abede22e1b3948856181f8014c1fd3e4c2dcb44598c1899a4e7241a8eb055797ac3796d87cb6476581fd9fc478e91b0ea8014f5b 0009-drm-panel-Add-support-for-Novatek-NT36532-panel.patch
becec854853aa2b21545b4132c024524f185cd6a63f816361dc970ae6635068430ec78b74fb08f7cc4bcdb92facc8596de78e5a1072f68f38c19e6d0f3d513de 0010-drivers-media-i2c-ov13b10-add-device-tree-support-an.patch
f3487b392bab9158878b8354a133c8f7868b0b61791f2c189e8c6d615f970af8c81c475e6dba82c48451df0c3a15fe0c7cc2e1f8d2a7b8dd69319b9f3bbd35ce 0011-ASoC-codecs-aw88261-add-hacks-for-xiaomi-pipa.patch
4863893049b002352144b7935929cbb89f0b2253735efb4aab96f9e18c7834e51af67fcd92f8514bf8c5a1ea8331aadd2bca171fb85f971c27ec17eaf7c31514 0012-ASoC-qcom-sm8250-Add-tdm-support.patch
"

View file

@ -1,20 +1,19 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 6.19.10 Kernel Configuration
# Linux/arm64 6.19.11 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="Alpine clang version 21.1.2"
CONFIG_CC_VERSION_TEXT="Alpine clang version 22.1.3"
CONFIG_GCC_VERSION=0
CONFIG_CC_IS_CLANG=y
CONFIG_CLANG_VERSION=210102
CONFIG_CLANG_VERSION=220103
CONFIG_AS_IS_LLVM=y
CONFIG_AS_VERSION=210102
CONFIG_AS_VERSION=220103
CONFIG_LD_VERSION=0
CONFIG_LD_IS_LLD=y
CONFIG_LLD_VERSION=210102
CONFIG_RUSTC_VERSION=109101
CONFIG_LLD_VERSION=220103
CONFIG_RUSTC_VERSION=109401
CONFIG_RUST_IS_AVAILABLE=y
CONFIG_RUSTC_LLVM_VERSION=210102
CONFIG_CC_CAN_LINK=y
CONFIG_RUSTC_LLVM_VERSION=220101
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
CONFIG_TOOLS_SUPPORT_RELR=y