Patch "ASoC: Intel: cht_bsw_rt5645: add Baytrail MCLK support" has been added to the 4.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ASoC: Intel: cht_bsw_rt5645: add Baytrail MCLK support

to the 4.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     asoc-intel-cht_bsw_rt5645-add-baytrail-mclk-support.patch
and it can be found in the queue-4.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.


>From foo@baz Mon Apr 10 18:08:16 CEST 2017
From: alexander.levin@xxxxxxxxxxx
Date: Tue, 4 Apr 2017 19:32:29 +0000
Subject: ASoC: Intel: cht_bsw_rt5645: add Baytrail MCLK support
To: "gregkh@xxxxxxxxxxxxxxxxxxx" <gregkh@xxxxxxxxxxxxxxxxxxx>
Cc: "stable@xxxxxxxxxxxxxxx" <stable@xxxxxxxxxxxxxxx>
Message-ID: <20170404193158.19041-74-alexander.levin@xxxxxxxxxxx>

From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>

[ Upstream commit a50477e55fff69e1028f25624ee9fc9182d59b1f ]

The existing code assumes a 19.2 MHz MCLK as the default
hardware configuration. This is valid for CherryTrail but
not for Baytrail.

Add explicit MCLK configuration to set the 19.2 clock on/off
depending on DAPM events.

This is a prerequisite step to enable devices with Baytrail
and RT5645 such as Asus X205TA

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx>
Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
Signed-off-by: Sasha Levin <alexander.levin@xxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 sound/soc/intel/boards/cht_bsw_rt5645.c |   84 +++++++++++++++++++++++++++-----
 1 file changed, 71 insertions(+), 13 deletions(-)

--- a/sound/soc/intel/boards/cht_bsw_rt5645.c
+++ b/sound/soc/intel/boards/cht_bsw_rt5645.c
@@ -24,6 +24,9 @@
 #include <linux/acpi.h>
 #include <linux/platform_device.h>
 #include <linux/slab.h>
+#include <asm/cpu_device_id.h>
+#include <asm/platform_sst_audio.h>
+#include <linux/clk.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
@@ -45,6 +48,7 @@ struct cht_mc_private {
 	struct snd_soc_jack jack;
 	struct cht_acpi_card *acpi_card;
 	char codec_name[16];
+	struct clk *mclk;
 };
 
 static inline struct snd_soc_dai *cht_get_codec_dai(struct snd_soc_card *card)
@@ -65,6 +69,7 @@ static int platform_clock_control(struct
 	struct snd_soc_dapm_context *dapm = w->dapm;
 	struct snd_soc_card *card = dapm->card;
 	struct snd_soc_dai *codec_dai;
+	struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
 	int ret;
 
 	codec_dai = cht_get_codec_dai(card);
@@ -73,19 +78,30 @@ static int platform_clock_control(struct
 		return -EIO;
 	}
 
-	if (!SND_SOC_DAPM_EVENT_OFF(event))
-		return 0;
+	if (SND_SOC_DAPM_EVENT_ON(event)) {
+		if (ctx->mclk) {
+			ret = clk_prepare_enable(ctx->mclk);
+			if (ret < 0) {
+				dev_err(card->dev,
+					"could not configure MCLK state");
+				return ret;
+			}
+		}
+	} else {
+		/* Set codec sysclk source to its internal clock because codec PLL will
+		 * be off when idle and MCLK will also be off when codec is
+		 * runtime suspended. Codec needs clock for jack detection and button
+		 * press. MCLK is turned off with clock framework or ACPI.
+		 */
+		ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_RCCLK,
+					48000 * 512, SND_SOC_CLOCK_IN);
+		if (ret < 0) {
+			dev_err(card->dev, "can't set codec sysclk: %d\n", ret);
+			return ret;
+		}
 
-	/* Set codec sysclk source to its internal clock because codec PLL will
-	 * be off when idle and MCLK will also be off by ACPI when codec is
-	 * runtime suspended. Codec needs clock for jack detection and button
-	 * press.
-	 */
-	ret = snd_soc_dai_set_sysclk(codec_dai, RT5645_SCLK_S_RCCLK,
-			0, SND_SOC_CLOCK_IN);
-	if (ret < 0) {
-		dev_err(card->dev, "can't set codec sysclk: %d\n", ret);
-		return ret;
+		if (ctx->mclk)
+			clk_disable_unprepare(ctx->mclk);
 	}
 
 	return 0;
@@ -97,7 +113,7 @@ static const struct snd_soc_dapm_widget
 	SND_SOC_DAPM_MIC("Int Mic", NULL),
 	SND_SOC_DAPM_SPK("Ext Spk", NULL),
 	SND_SOC_DAPM_SUPPLY("Platform Clock", SND_SOC_NOPM, 0, 0,
-			platform_clock_control, SND_SOC_DAPM_POST_PMD),
+			platform_clock_control, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
 };
 
 static const struct snd_soc_dapm_route cht_rt5645_audio_map[] = {
@@ -225,6 +241,26 @@ static int cht_codec_init(struct snd_soc
 
 	rt5645_set_jack_detect(codec, &ctx->jack, &ctx->jack, &ctx->jack);
 
+	if (ctx->mclk) {
+		/*
+		 * The firmware might enable the clock at
+		 * boot (this information may or may not
+		 * be reflected in the enable clock register).
+		 * To change the rate we must disable the clock
+		 * first to cover these cases. Due to common
+		 * clock framework restrictions that do not allow
+		 * to disable a clock that has not been enabled,
+		 * we need to enable the clock first.
+		 */
+		ret = clk_prepare_enable(ctx->mclk);
+		if (!ret)
+			clk_disable_unprepare(ctx->mclk);
+
+		ret = clk_set_rate(ctx->mclk, CHT_PLAT_CLK_3_HZ);
+
+		if (ret)
+			dev_err(runtime->dev, "unable to set MCLK rate\n");
+	}
 	return ret;
 }
 
@@ -349,6 +385,18 @@ static struct cht_acpi_card snd_soc_card
 
 static char cht_rt5640_codec_name[16]; /* i2c-<HID>:00 with HID being 8 chars */
 
+static bool is_valleyview(void)
+{
+	static const struct x86_cpu_id cpu_ids[] = {
+		{ X86_VENDOR_INTEL, 6, 55 }, /* Valleyview, Bay Trail */
+		{}
+	};
+
+	if (!x86_match_cpu(cpu_ids))
+		return false;
+	return true;
+}
+
 static int snd_cht_mc_probe(struct platform_device *pdev)
 {
 	int ret_val = 0;
@@ -401,6 +449,16 @@ static int snd_cht_mc_probe(struct platf
 		cht_dailink[dai_index].codec_name = cht_rt5640_codec_name;
 	}
 
+	if (is_valleyview()) {
+		drv->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3");
+		if (IS_ERR(drv->mclk)) {
+			dev_err(&pdev->dev,
+				"Failed to get MCLK from pmc_plt_clk_3: %ld\n",
+				PTR_ERR(drv->mclk));
+			return PTR_ERR(drv->mclk);
+		}
+	}
+
 	snd_soc_card_set_drvdata(card, drv);
 	ret_val = devm_snd_soc_register_card(&pdev->dev, card);
 	if (ret_val) {


Patches currently in stable-queue which might be from gregkh@xxxxxxxxxxxxxxxxxxx are

queue-4.10/staging-android-ashmem-lseek-failed-due-to-no-fmode_lseek.patch
queue-4.10/acpi-button-change-default-behavior-to-lid_init_state-open.patch
queue-4.10/usb-musb-da8xx-fix-host-mode-suspend.patch
queue-4.10/drm-i915-fix-intel_bdw_ids-definition.patch
queue-4.10/drm-i915-gvt-fix-gvt-scheduler-interval-time.patch
queue-4.10/sysfs-be-careful-of-error-returns-from-ops-show.patch
queue-4.10/pci-thunder-pem-add-legacy-firmware-support-for-cavium-thunderx-host-controller.patch
queue-4.10/pci-thunder-pem-fix-legacy-firmware-pem-specific-resources.patch
queue-4.10/mips-flush-wrong-invalid-ftlb-entry-for-huge-page.patch
queue-4.10/mips-end-spinlocks-with-.insn.patch
queue-4.10/dax-fix-radix-tree-insertion-race.patch
queue-4.10/mmc-sdhci-of-esdhc-remove-default-broken-cd-for-arm.patch
queue-4.10/jump-label-fix-passing-kbuild_cflags-when-checking-for-asm-goto-support.patch
queue-4.10/kvm-arm-arm64-fix-locking-for-kvm_free_stage2_pgd.patch
queue-4.10/iio-st_pressure-initialize-lps22hb-bootime.patch
queue-4.10/powerpc-disable-hfscr-if-tm-is-not-supported.patch
queue-4.10/metag-usercopy-add-missing-fixups.patch
queue-4.10/nios2-reserve-boot-memory-for-device-tree.patch
queue-4.10/platform-x86-asus-wmi-detect-quirk_no_rfkill-from-the-dsdt.patch
queue-4.10/ring-buffer-fix-return-value-check-in-test_ringbuffer.patch
queue-4.10/firmware-qcom-scm-fix-interrupted-scm-calls.patch
queue-4.10/pci-add-broadcom-northstar2-paxc-quirk-for-device-class-and-mpss.patch
queue-4.10/drm-msm-adreno-fix-build-error-without-debugfs.patch
queue-4.10/powerpc-64-fix-flush_-d-i-cache_range-called-from-modules.patch
queue-4.10/acpi-gpio-do-not-fall-back-to-parsing-_crs-when-we-get-a-deferral.patch
queue-4.10/metag-usercopy-add-early-abort-to-copy_to_user.patch
queue-4.10/powerpc-crypto-crc32c-vpmsum-fix-missing-preempt_disable.patch
queue-4.10/arm-arm64-kvm-take-mmap_sem-in-kvm_arch_prepare_memory_region.patch
queue-4.10/rx51-broken-build.patch
queue-4.10/mips-ralink-fix-typos-in-rt3883-pinctrl.patch
queue-4.10/cfg80211-check-rdev-resume-callback-only-for-registered-wiphy.patch
queue-4.10/metag-usercopy-set-flags-before-addz.patch
queue-4.10/metag-usercopy-fix-src-fixup-in-from-user-rapf-loops.patch
queue-4.10/xtensa-make-__pa-work-with-uncached-kseg-addresses.patch
queue-4.10/asoc-codecs-rt5670-add-quirk-for-lenovo-thinkpad-10.patch
queue-4.10/powerpc-mm-add-missing-global-tlb-invalidate-if-cxl-is-active.patch
queue-4.10/tools-power-turbostat-dump-atom-p-states-correctly.patch
queue-4.10/asoc-intel-cht_bsw_rt5645-add-baytrail-mclk-support.patch
queue-4.10/watchdog-s3c2410-fix-infinite-interrupt-in-soft-mode.patch
queue-4.10/drm-i915-actually-drive-the-bdw-reserved-ids.patch
queue-4.10/serial-8250_omap-add-omap_dma_tx_kick-quirk-for-am437x.patch
queue-4.10/brcmfmac-use-local-iftype-avoiding-use-after-free-of-virtual-interface.patch
queue-4.10/drm-vmwgfx-remove-getparam-error-message.patch
queue-4.10/mac80211-unconditionally-start-new-netdev-queues-with-itxq-support.patch
queue-4.10/dm-verity-fec-fix-bufio-leaks.patch
queue-4.10/hid-wacom-don-t-apply-generic-settings-to-old-devices.patch
queue-4.10/x86-mce-don-t-print-mces-when-mcelog-is-active.patch
queue-4.10/arm-kernel-add-smc-structure-parameter.patch
queue-4.10/usb-storage-add-ignore-residue-quirk-for-initio-inic-3619.patch
queue-4.10/drm-vmwgfx-type-check-lookups-of-fence-objects.patch
queue-4.10/dm-verity-fec-limit-error-correction-recursion.patch
queue-4.10/drm-edid-constify-edid-quirk-list.patch
queue-4.10/s390-uaccess-get_user-should-zero-on-failure-again.patch
queue-4.10/dm-raid-fix-null-pointer-dereference-for-raid1-without-bitmap.patch
queue-4.10/random-use-chacha20-for-get_random_int-long.patch
queue-4.10/ptrace-fix-ptrace_listen-race-corrupting-task-state.patch
queue-4.10/drm-vmwgfx-fix-integer-overflow-in-vmw_surface_define_ioctl.patch
queue-4.10/pci-sort-the-list-of-devices-with-d3-delay-quirk-by-id.patch
queue-4.10/s390-decompressor-fix-initrd-corruption-caused-by-bss-clear.patch
queue-4.10/pci-disable-msi-for-hisilicon-hip06-hip07-root-ports.patch
queue-4.10/mips-check-tlb-before-handle_ri_rdhwr-for-loongson-3.patch
queue-4.10/pci-add-acs-quirk-for-intel-union-point.patch
queue-4.10/asoc-intel-baytrail-add-quirk-for-lenovo-thinkpad-10.patch
queue-4.10/can-flexcan-add-quirk-flexcan_quirk_enable_eacen_rrs.patch
queue-4.10/metag-usercopy-drop-unused-macros.patch
queue-4.10/drm-i915-more-.is_mobile-cleanups-for-bdw.patch
queue-4.10/hid-multitouch-enable-the-surface-4-type-cover-pro-jp-to-report-multitouch-data.patch
queue-4.10/iio-bmg160-reset-chip-when-probing.patch
queue-4.10/orangefs-move-features-validation-to-fix-filesystem-hang.patch
queue-4.10/arm64-mm-unaligned-access-by-user-land-should-be-received-as-sigbus.patch
queue-4.10/powerpc-don-t-try-to-fix-up-misaligned-load-with-reservation-instructions.patch
queue-4.10/usb-chipidea-msm-rely-on-core-to-override-ahbburst.patch
queue-4.10/asoc-intel-bytcr_rt5640-quirks-for-insyde-devices.patch
queue-4.10/mips-lantiq-fix-missing-xbar-kernel-panic.patch
queue-4.10/metag-usercopy-zero-rest-of-buffer-from-copy_from_user.patch
queue-4.10/xfs-honor-falloc_fl_keep_size-when-punching-ends-of-files.patch
queue-4.10/metag-usercopy-fix-alignment-error-checking.patch
queue-4.10/x86-reboot-quirks-add-asus-eeebook-x205ta-reboot-quirk.patch
queue-4.10/iio-core-fix-iio_val_fractional_log2-for-negative-values.patch
queue-4.10/pci-xgene-fix-double-free-on-init-error.patch
queue-4.10/acpi-save-nvs-memory-for-lenovo-g50-45.patch
queue-4.10/asoc-intel-cht_bsw_rt5645-harden-acpi-device-detection.patch
queue-4.10/sata-ahci-da850-implement-a-workaround-for-the-softreset-quirk.patch
queue-4.10/reset-treeid-to-zero-on-smb2-tree_connect.patch
queue-4.10/pci-add-acs-quirk-for-qualcomm-qdf2400-and-qdf2432.patch
queue-4.10/tools-power-turbostat-decode-baytrail-cc6-and-mc6-demotion-configuration.patch
queue-4.10/documentation-stable-kernel-rules-fix-stable-tag-format.patch
queue-4.10/drm-mga-remove-device_is_agp-callback.patch
queue-4.10/usb-host-xhci-plat-enable-broken_ped-quirk-if-platform-requested.patch
queue-4.10/mm-mempolicy.c-fix-error-handling-in-set_mempolicy-and-mbind.patch
queue-4.10/arm-arm64-kvm-take-mmap_sem-in-stage2_unmap_vm.patch
queue-4.10/mm-page_alloc.c-fix-print-order-in-show_free_areas.patch
queue-4.10/usb-dwc3-host-pass-quirk-broken-port-ped-property-for-known-broken-revisions.patch
queue-4.10/kvm-fix-page-struct-leak-in-handle_vmon.patch
queue-4.10/arm-smccc-update-hvc-comment-to-describe-new-quirk-parameter.patch
queue-4.10/mips-c-r4k-fix-loongson-3-s-vcache-scache-waysize-calculation.patch
queue-4.10/drm-vmwgfx-avoid-calling-vzalloc-with-a-0-size-in-vmw_get_cap_3d_ioctl.patch
queue-4.10/usb-xhci-add-quirk-flag-for-broken-ped-bits.patch
queue-4.10/mips-force-o32-fp64-support-on-32bit-mips64r6-kernels.patch
queue-4.10/arm-davinci-add-skeleton-for-pdata-quirks.patch
queue-4.10/usb-dwc3-gadget-delay-unmap-of-bounced-requests.patch
queue-4.10/x86-reboot-quirks-fix-typo-in-asus-eeebook-x205ta-reboot-quirk.patch
queue-4.10/mips-add-mips_cpu_ftlb-for-loongson-3a-r2.patch
queue-4.10/kbuild-use-cc-disable-warning-consistently-for-maybe-uninitialized.patch
queue-4.10/arm-omap2-fix-init-for-multiple-quirks-for-the-same-soc.patch
queue-4.10/x86-reboot-quirks-add-asus-eeebook-x205ta-w-reboot-quirk.patch
queue-4.10/drm-i915-kvmgt-fix-suspicious-rcu-dereference-usage.patch
queue-4.10/acpi-scan-prefer-devices-without-_hid-for-_adr-matching.patch
queue-4.10/drm-ttm-drm-vmwgfx-relax-permission-checking-when-opening-surfaces.patch
queue-4.10/drm-vmwgfx-null-pointer-dereference-in-vmw_surface_define_ioctl.patch
queue-4.10/asoc-sun4i-i2s-add-quirks-to-handle-a31-compatible.patch



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]