From patchwork Mon Oct 16 11:26:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 826249 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3yFwyp4m7Tz9sPk; Mon, 16 Oct 2017 22:27:14 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1e43Y6-0003jA-CQ; Mon, 16 Oct 2017 11:27:10 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1e43Y2-0003gV-6y for kernel-team@lists.ubuntu.com; Mon, 16 Oct 2017 11:27:06 +0000 Received: from 1.general.jesse.uk.vpn ([10.172.197.96] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1e43Y1-0002xE-ER; Mon, 16 Oct 2017 11:27:05 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Artful][PATCH 1/3] UBUNTU: SAUCE: ALSA: hda/realtek - Add support headset mode for DELL WYSE Date: Mon, 16 Oct 2017 19:26:58 +0800 Message-Id: <1508153220-3808-2-git-send-email-jesse.sung@canonical.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1508153220-3808-1-git-send-email-jesse.sung@canonical.com> References: <1508153220-3808-1-git-send-email-jesse.sung@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Kailang Yang BugLink: https://launchpad.net/bugs/1723913 Enable headset mode support for WYSE(0x080c) platform. Signed-off-by: Kailang Yang Signed-off-by: Wen-chien Jesse Sung --- sound/pci/hda/patch_realtek.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 217bb58..ab8b154 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5263,6 +5263,7 @@ enum { ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE, ALC233_FIXUP_LENOVO_MULTI_CODECS, ALC294_FIXUP_LENOVO_MIC_LOCATION, + ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE, }; static const struct hda_fixup alc269_fixups[] = { @@ -6058,6 +6059,17 @@ static const struct hda_fixup alc269_fixups[] = { { } }, }, + [ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl[]) { + { 0x16, 0x0101102f }, /* Rear Headset HP */ + { 0x19, 0x02a1913c }, /* use as Front headset mic, without its own jack detect */ + { 0x1a, 0x01a19030 }, /* Rear Headset MIC */ + { } + }, + .chained = true, + .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC + }, }; static const struct snd_pci_quirk alc269_fixup_tbl[] = { @@ -6107,6 +6119,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE), SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME), SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER), + SND_PCI_QUIRK(0x1028, 0x080c, "Dell WYSE", ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), From patchwork Mon Oct 16 11:26:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 826248 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3yFwyp4LMBz9sNc; Mon, 16 Oct 2017 22:27:14 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1e43Y6-0003jR-Ha; Mon, 16 Oct 2017 11:27:10 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1e43Y3-0003he-Mn for kernel-team@lists.ubuntu.com; Mon, 16 Oct 2017 11:27:07 +0000 Received: from 1.general.jesse.uk.vpn ([10.172.197.96] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1e43Y2-0002xE-VY; Mon, 16 Oct 2017 11:27:07 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Artful][PATCH 2/3] UBUNTU: SAUCE: drm/i915: Workaround for DP DPMS D3 on Dell monitor Date: Mon, 16 Oct 2017 19:26:59 +0800 Message-Id: <1508153220-3808-3-git-send-email-jesse.sung@canonical.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1508153220-3808-1-git-send-email-jesse.sung@canonical.com> References: <1508153220-3808-1-git-send-email-jesse.sung@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" BugLink: https://launchpad.net/bugs/1723915 Dell Wyse 3040 box with Cherry Trail shows a blank monitor output and other display issues with a certain Dell DP monitors (E-series). The only reliable workaround so far is to skip DP DPMS D3 transition. Based on the patch in opensuse created by Takashi Iwai . Signed-off-by: Wen-chien Jesse Sung --- drivers/gpu/drm/i915/i915_drv.h | 1 + drivers/gpu/drm/i915/intel_display.c | 13 +++++++++++++ drivers/gpu/drm/i915/intel_dp.c | 3 ++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index e1f7c97..9df224a 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1166,6 +1166,7 @@ enum intel_sbi_destination { #define QUIRK_INVERT_BRIGHTNESS (1<<2) #define QUIRK_BACKLIGHT_PRESENT (1<<3) #define QUIRK_PIN_SWIZZLED_PAGES (1<<5) +#define QUIRK_SKIP_DP_DPMS_D3 (1<<15) struct intel_fbdev; struct intel_fbc_work; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index cc484b5..06c54ba 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -14758,6 +14758,16 @@ static void quirk_backlight_present(struct drm_device *dev) DRM_INFO("applying backlight present quirk\n"); } +/* Dell Wyse 3040 doesn't work well with some Dell monitors (E-series). + * Workaround this by skipping DP DPMS D3 transition. + */ +static void quirk_disable_dp_dpms_d3(struct drm_device *dev) +{ + struct drm_i915_private *dev_priv = to_i915(dev); + dev_priv->quirks |= QUIRK_SKIP_DP_DPMS_D3; + DRM_INFO("Applying Wyse 3040 quirk\n"); +} + struct intel_quirk { int device; int subsystem_vendor; @@ -14841,6 +14851,9 @@ static struct intel_quirk intel_quirks[] = { /* Dell Chromebook 11 (2015 version) */ { 0x0a16, 0x1028, 0x0a35, quirk_backlight_present }, + + /* Dell Wyse 3040 */ + { 0x22b0, 0x1028, 0x07c1, quirk_disable_dp_dpms_d3 }, }; static void intel_init_quirks(struct drm_device *dev) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 64fa774..d1a51d7 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -2660,7 +2660,8 @@ static void intel_disable_dp(struct intel_encoder *encoder, * ensure that we have vdd while we switch off the panel. */ intel_edp_panel_vdd_on(intel_dp); intel_edp_backlight_off(old_conn_state); - intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF); + if (!(dev_priv->quirks & QUIRK_SKIP_DP_DPMS_D3)) + intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF); intel_edp_panel_off(intel_dp); /* disable the port before the pipe on g4x */ From patchwork Mon Oct 16 11:27:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wen-chien Jesse Sung X-Patchwork-Id: 826250 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3yFwyq3HJXz9sPr; Mon, 16 Oct 2017 22:27:15 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1e43Y8-0003kz-1R; Mon, 16 Oct 2017 11:27:12 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1e43Y5-0003iY-7N for kernel-team@lists.ubuntu.com; Mon, 16 Oct 2017 11:27:09 +0000 Received: from 1.general.jesse.uk.vpn ([10.172.197.96] helo=cola.voip.idv.tw) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1e43Y4-0002xE-Gk; Mon, 16 Oct 2017 11:27:09 +0000 From: Wen-chien Jesse Sung To: kernel-team@lists.ubuntu.com Subject: [Artful][PATCH 3/3] UBUNTU: SAUCE: ASoC: rt5670: Add support for Wyse 3040 Date: Mon, 16 Oct 2017 19:27:00 +0800 Message-Id: <1508153220-3808-4-git-send-email-jesse.sung@canonical.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1508153220-3808-1-git-send-email-jesse.sung@canonical.com> References: <1508153220-3808-1-git-send-email-jesse.sung@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" BugLink: https://launchpad.net/bugs/1723916 The rt5760 on Wyse 3040 requires some extra code to work. This commit uses PCI ID to identify Wyse 3040 and does things specific to the platform when there's a match. There should be no impact to other systems using rt5670. Based on a patch from realtek. Signed-off-by: Wen-chien Jesse Sung --- sound/soc/codecs/rt5670.c | 43 ++++++++++++++++++++++++++++++++++++++++++- sound/soc/codecs/rt5670.h | 2 ++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c index 054b613..1b3dc29 100644 --- a/sound/soc/codecs/rt5670.c +++ b/sound/soc/codecs/rt5670.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -426,7 +427,10 @@ static int rt5670_headset_detect(struct snd_soc_codec *codec, int jack_insert) snd_soc_update_bits(codec, RT5670_CJ_CTRL2, RT5670_CBJ_DET_MODE | RT5670_CBJ_MN_JD, RT5670_CBJ_MN_JD); - snd_soc_write(codec, RT5670_GPIO_CTRL2, 0x0004); + if (unlikely(rt5670->is_wyse3040)) + snd_soc_write(codec, RT5670_GPIO_CTRL2, 0x0034); + else + snd_soc_write(codec, RT5670_GPIO_CTRL2, 0x0004); snd_soc_update_bits(codec, RT5670_GPIO_CTRL1, RT5670_GP1_PIN_MASK, RT5670_GP1_PIN_IRQ); snd_soc_update_bits(codec, RT5670_CJ_CTRL1, @@ -1466,6 +1470,10 @@ static int rt5670_hp_event(struct snd_soc_dapm_widget *w, RT5670_L_MUTE | RT5670_R_MUTE, 0); msleep(80); regmap_write(rt5670->regmap, RT5670_DEPOP_M1, 0x8019); + if (rt5670->is_wyse3040) + regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2, + RT5670_GP2_PF_MASK | RT5670_GP2_OUT_MASK, + RT5670_GP2_PF_OUT | RT5670_GP2_OUT_HI); break; case SND_SOC_DAPM_PRE_PMD: @@ -1500,11 +1508,16 @@ static int rt5670_bst1_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); + struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); switch (event) { case SND_SOC_DAPM_POST_PMU: snd_soc_update_bits(codec, RT5670_PWR_ANLG2, RT5670_PWR_BST1_P, RT5670_PWR_BST1_P); + if (rt5670->is_wyse3040) + regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2, + RT5670_GP2_PF_MASK | RT5670_GP2_OUT_MASK, + RT5670_GP2_PF_OUT | RT5670_GP2_OUT_HI); break; case SND_SOC_DAPM_PRE_PMD: @@ -1523,11 +1536,16 @@ static int rt5670_bst2_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm); + struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); switch (event) { case SND_SOC_DAPM_POST_PMU: snd_soc_update_bits(codec, RT5670_PWR_ANLG2, RT5670_PWR_BST2_P, RT5670_PWR_BST2_P); + if (rt5670->is_wyse3040) + regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2, + RT5670_GP2_PF_MASK | RT5670_GP2_OUT_MASK, + RT5670_GP2_PF_OUT | RT5670_GP2_OUT_HI); break; case SND_SOC_DAPM_PRE_PMD: @@ -2550,6 +2568,7 @@ static int rt5670_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, unsigned int rx_mask, int slots, int slot_width) { struct snd_soc_codec *codec = dai->codec; + struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); unsigned int val = 0; if (rx_mask || tx_mask) @@ -2589,6 +2608,9 @@ static int rt5670_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, snd_soc_update_bits(codec, RT5670_TDM_CTRL_1, 0x7c00, val); + if (rt5670->is_wyse3040 && (rt5670->v_id >= 5)) + snd_soc_update_bits(codec, RT5670_GEN_CTRL3, 0x0800, 0x0800); + return 0; } @@ -2675,6 +2697,8 @@ static int rt5670_probe(struct snd_soc_codec *codec) "The driver is for RT5670 RT5671 or RT5672 only\n"); return -ENODEV; } + if (rt5670->is_wyse3040) + rt5670->v_id = snd_soc_read(codec, RT5670_VENDOR_ID) & 0xff; rt5670->codec = codec; return 0; @@ -2694,6 +2718,10 @@ static int rt5670_suspend(struct snd_soc_codec *codec) { struct rt5670_priv *rt5670 = snd_soc_codec_get_drvdata(codec); + if (rt5670->is_wyse3040) + regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2, + RT5670_GP2_PF_MASK | RT5670_GP2_OUT_MASK, + RT5670_GP2_PF_OUT | RT5670_GP2_OUT_LO); regcache_cache_only(rt5670->regmap, true); regcache_mark_dirty(rt5670->regmap); return 0; @@ -2866,6 +2894,7 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, struct rt5670_priv *rt5670; int ret; unsigned int val; + struct pci_dev *pdev_host; rt5670 = devm_kzalloc(&i2c->dev, sizeof(struct rt5670_priv), @@ -2890,6 +2919,13 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, rt5670->pdata.jd_mode = 2; } + pdev_host = pci_get_subsys(0x8086, 0x2280, 0x1028, 0x07c1, NULL); + if (pdev_host) { + rt5670->is_wyse3040 = true; + rt5670->pdata.dmic_en = false; + pci_dev_put(pdev_host); + } + rt5670->regmap = devm_regmap_init_i2c(i2c, &rt5670_regmap); if (IS_ERR(rt5670->regmap)) { ret = PTR_ERR(rt5670->regmap); @@ -2913,6 +2949,11 @@ static int rt5670_i2c_probe(struct i2c_client *i2c, regmap_write(rt5670->regmap, RT5670_RESET, 0); + if (rt5670->is_wyse3040) + regmap_update_bits(rt5670->regmap, RT5670_GPIO_CTRL2, + RT5670_GP2_PF_MASK | RT5670_GP2_OUT_MASK, + RT5670_GP2_PF_OUT | RT5670_GP2_OUT_LO); + regmap_read(rt5670->regmap, RT5670_VENDOR_ID, &val); if (val >= 4) regmap_write(rt5670->regmap, RT5670_GPIO_CTRL3, 0x0980); diff --git a/sound/soc/codecs/rt5670.h b/sound/soc/codecs/rt5670.h index 5ba485c..26b6f1a 100644 --- a/sound/soc/codecs/rt5670.h +++ b/sound/soc/codecs/rt5670.h @@ -1997,6 +1997,8 @@ struct rt5670_priv { int lrck[RT5670_AIFS]; int bclk[RT5670_AIFS]; int master[RT5670_AIFS]; + int v_id; + bool is_wyse3040; int pll_src; int pll_in;