This is a note to let you know that I've just added the patch titled ASoC: sun4i-i2s: Add quirks to handle a31 compatible to the 4.9-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-sun4i-i2s-add-quirks-to-handle-a31-compatible.patch and it can be found in the queue-4.9 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 17:43:56 CEST 2017 From: alexander.levin@xxxxxxxxxxx Date: Tue, 4 Apr 2017 19:32:30 +0000 Subject: ASoC: sun4i-i2s: Add quirks to handle a31 compatible To: "gregkh@xxxxxxxxxxxxxxxxxxx" <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: "stable@xxxxxxxxxxxxxxx" <stable@xxxxxxxxxxxxxxx> Message-ID: <20170404193158.19041-77-alexander.levin@xxxxxxxxxxx> From: Mylène Josserand <mylene.josserand@xxxxxxxxxxxxxxxxxx> [ Upstream commit 2ad6f30de7087515a0bc2a718fca6681a57739a0 ] Some SoCs have a reset line that must be asserted/deasserted. This patch adds a quirk to handle the new compatible "allwinner,sun6i-a31-i2s" which will deassert the reset line on probe function and assert it on remove's one. This new compatible is useful in case of A33 codec driver, for example. Signed-off-by: Mylène Josserand <mylene.josserand@xxxxxxxxxxxxxxxxxx> Acked-by: Maxime Ripard <maxime.ripard@xxxxxxxxxxxxxxxxxx> 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/sunxi/sun4i-i2s.c | 57 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) --- a/sound/soc/sunxi/sun4i-i2s.c +++ b/sound/soc/sunxi/sun4i-i2s.c @@ -14,9 +14,11 @@ #include <linux/clk.h> #include <linux/dmaengine.h> #include <linux/module.h> +#include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/regmap.h> +#include <linux/reset.h> #include <sound/dmaengine_pcm.h> #include <sound/pcm_params.h> @@ -92,6 +94,7 @@ struct sun4i_i2s { struct clk *bus_clk; struct clk *mod_clk; struct regmap *regmap; + struct reset_control *rst; struct snd_dmaengine_dai_dma_data playback_dma_data; }; @@ -585,9 +588,22 @@ static int sun4i_i2s_runtime_suspend(str return 0; } +struct sun4i_i2s_quirks { + bool has_reset; +}; + +static const struct sun4i_i2s_quirks sun4i_a10_i2s_quirks = { + .has_reset = false, +}; + +static const struct sun4i_i2s_quirks sun6i_a31_i2s_quirks = { + .has_reset = true, +}; + static int sun4i_i2s_probe(struct platform_device *pdev) { struct sun4i_i2s *i2s; + const struct sun4i_i2s_quirks *quirks; struct resource *res; void __iomem *regs; int irq, ret; @@ -608,6 +624,12 @@ static int sun4i_i2s_probe(struct platfo return irq; } + quirks = of_device_get_match_data(&pdev->dev); + if (!quirks) { + dev_err(&pdev->dev, "Failed to determine the quirks to use\n"); + return -ENODEV; + } + i2s->bus_clk = devm_clk_get(&pdev->dev, "apb"); if (IS_ERR(i2s->bus_clk)) { dev_err(&pdev->dev, "Can't get our bus clock\n"); @@ -626,7 +648,24 @@ static int sun4i_i2s_probe(struct platfo dev_err(&pdev->dev, "Can't get our mod clock\n"); return PTR_ERR(i2s->mod_clk); } - + + if (quirks->has_reset) { + i2s->rst = devm_reset_control_get(&pdev->dev, NULL); + if (IS_ERR(i2s->rst)) { + dev_err(&pdev->dev, "Failed to get reset control\n"); + return PTR_ERR(i2s->rst); + } + } + + if (!IS_ERR(i2s->rst)) { + ret = reset_control_deassert(i2s->rst); + if (ret) { + dev_err(&pdev->dev, + "Failed to deassert the reset control\n"); + return -EINVAL; + } + } + i2s->playback_dma_data.addr = res->start + SUN4I_I2S_FIFO_TX_REG; i2s->playback_dma_data.maxburst = 4; @@ -658,23 +697,37 @@ err_suspend: sun4i_i2s_runtime_suspend(&pdev->dev); err_pm_disable: pm_runtime_disable(&pdev->dev); + if (!IS_ERR(i2s->rst)) + reset_control_assert(i2s->rst); return ret; } static int sun4i_i2s_remove(struct platform_device *pdev) { + struct sun4i_i2s *i2s = dev_get_drvdata(&pdev->dev); + snd_dmaengine_pcm_unregister(&pdev->dev); pm_runtime_disable(&pdev->dev); if (!pm_runtime_status_suspended(&pdev->dev)) sun4i_i2s_runtime_suspend(&pdev->dev); + if (!IS_ERR(i2s->rst)) + reset_control_assert(i2s->rst); + return 0; } static const struct of_device_id sun4i_i2s_match[] = { - { .compatible = "allwinner,sun4i-a10-i2s", }, + { + .compatible = "allwinner,sun4i-a10-i2s", + .data = &sun4i_a10_i2s_quirks, + }, + { + .compatible = "allwinner,sun6i-a31-i2s", + .data = &sun6i_a31_i2s_quirks, + }, {} }; MODULE_DEVICE_TABLE(of, sun4i_i2s_match); Patches currently in stable-queue which might be from gregkh@xxxxxxxxxxxxxxxxxxx are queue-4.9/staging-android-ashmem-lseek-failed-due-to-no-fmode_lseek.patch queue-4.9/arm64-dts-hisi-fix-hip06-sas-am-max-trans-quirk.patch queue-4.9/scsi-ufs-introduce-ufshcd_quirk_prdt_byte_gran-quirk.patch queue-4.9/acpi-button-change-default-behavior-to-lid_init_state-open.patch queue-4.9/usb-musb-da8xx-fix-host-mode-suspend.patch queue-4.9/drm-i915-fix-intel_bdw_ids-definition.patch queue-4.9/sysfs-be-careful-of-error-returns-from-ops-show.patch queue-4.9/mips-flush-wrong-invalid-ftlb-entry-for-huge-page.patch queue-4.9/mips-end-spinlocks-with-.insn.patch queue-4.9/mmc-sdhci-of-esdhc-remove-default-broken-cd-for-arm.patch queue-4.9/kvm-arm-arm64-fix-locking-for-kvm_free_stage2_pgd.patch queue-4.9/powerpc-disable-hfscr-if-tm-is-not-supported.patch queue-4.9/metag-usercopy-add-missing-fixups.patch queue-4.9/nios2-reserve-boot-memory-for-device-tree.patch queue-4.9/alsa-usb-audio-add-implicit-fb-quirk-for-axe-fx-ii.patch queue-4.9/svcauth_gss-close-connection-when-dropping-an-incoming-message.patch queue-4.9/platform-x86-asus-wmi-detect-quirk_no_rfkill-from-the-dsdt.patch queue-4.9/ring-buffer-fix-return-value-check-in-test_ringbuffer.patch queue-4.9/ppdev-check-before-attaching-port.patch queue-4.9/firmware-qcom-scm-fix-interrupted-scm-calls.patch queue-4.9/pci-add-broadcom-northstar2-paxc-quirk-for-device-class-and-mpss.patch queue-4.9/powerpc-64-fix-flush_-d-i-cache_range-called-from-modules.patch queue-4.9/drm-sun4i-tcon-move-soc-specific-quirks-to-a-dt-matched-data-structure.patch queue-4.9/acpi-gpio-do-not-fall-back-to-parsing-_crs-when-we-get-a-deferral.patch queue-4.9/pci-explain-arm64-acpi-mcfg-quirk-kconfig-and-build-strategy.patch queue-4.9/metag-usercopy-add-early-abort-to-copy_to_user.patch queue-4.9/powerpc-crypto-crc32c-vpmsum-fix-missing-preempt_disable.patch queue-4.9/hid-multitouch-do-not-retrieve-all-reports-for-all-devices.patch queue-4.9/arm-arm64-kvm-take-mmap_sem-in-kvm_arch_prepare_memory_region.patch queue-4.9/arm-dts-stih407-family-set-snps-dis_u3_susphy_quirk.patch queue-4.9/rx51-broken-build.patch queue-4.9/mips-ralink-fix-typos-in-rt3883-pinctrl.patch queue-4.9/cfg80211-check-rdev-resume-callback-only-for-registered-wiphy.patch queue-4.9/metag-usercopy-set-flags-before-addz.patch queue-4.9/asoc-intel-bytct_rt5640-change-default-capture-settings.patch queue-4.9/metag-usercopy-fix-src-fixup-in-from-user-rapf-loops.patch queue-4.9/hid-asus-fix-keyboard-support.patch queue-4.9/drm-sun4i-add-compatible-string-for-a31-a31s-tcon-timing-controller.patch queue-4.9/arm64-pci-manage-controller-specific-data-on-per-controller-basis.patch queue-4.9/platform-x86-acer-wmi-only-supports-amw0_guid1-on-acer-family.patch queue-4.9/xtensa-make-__pa-work-with-uncached-kseg-addresses.patch queue-4.9/asoc-codecs-rt5670-add-quirk-for-lenovo-thinkpad-10.patch queue-4.9/clk-lpc32xx-add-a-quirk-for-pwm-and-ms-clock-dividers.patch queue-4.9/powerpc-mm-add-missing-global-tlb-invalidate-if-cxl-is-active.patch queue-4.9/tools-power-turbostat-dump-atom-p-states-correctly.patch queue-4.9/clocksource-drivers-arm_arch_timer-don-t-assume-clock-runs-in-suspend.patch queue-4.9/asoc-intel-cht_bsw_rt5645-add-baytrail-mclk-support.patch queue-4.9/watchdog-s3c2410-fix-infinite-interrupt-in-soft-mode.patch queue-4.9/arm64-pci-search-acpi-namespace-to-ensure-ecam-space-is-reserved.patch queue-4.9/pci-add-mcfg-quirks-for-cavium-thunderx-pass1.x-host-controller.patch queue-4.9/drm-i915-actually-drive-the-bdw-reserved-ids.patch queue-4.9/net-mlx4_core-use-device-id-defines.patch queue-4.9/scsi-ufs-introduce-a-new-ufshcd_statea-ufshcd_state_eh_scheduled.patch queue-4.9/hid-sensor-hub-add-quirk-for-microsoft-surface-3.patch queue-4.9/serial-8250_omap-add-omap_dma_tx_kick-quirk-for-am437x.patch queue-4.9/brcmfmac-use-local-iftype-avoiding-use-after-free-of-virtual-interface.patch queue-4.9/pci-acpi-check-for-platform-specific-mcfg-quirks.patch queue-4.9/drm-vmwgfx-remove-getparam-error-message.patch queue-4.9/mac80211-unconditionally-start-new-netdev-queues-with-itxq-support.patch queue-4.9/dm-verity-fec-fix-bufio-leaks.patch queue-4.9/x86-intel_idle-add-cpu-model-0x4a-atom-z34xx-series.patch queue-4.9/hid-wacom-don-t-apply-generic-settings-to-old-devices.patch queue-4.9/hid-sensor-hub-add-quirk-for-microchip-mm7150.patch queue-4.9/arm-kernel-add-smc-structure-parameter.patch queue-4.9/usb-storage-add-ignore-residue-quirk-for-initio-inic-3619.patch queue-4.9/drm-vmwgfx-type-check-lookups-of-fence-objects.patch queue-4.9/hid-asus-add-i2c-touchpad-support.patch queue-4.9/nvme-simplify-stripe-quirk.patch queue-4.9/drm-sun4i-add-compatible-strings-for-a31-a31s-display-pipelines.patch queue-4.9/dm-verity-fec-limit-error-correction-recursion.patch queue-4.9/drm-edid-constify-edid-quirk-list.patch queue-4.9/s390-uaccess-get_user-should-zero-on-failure-again.patch queue-4.9/dm-raid-fix-null-pointer-dereference-for-raid1-without-bitmap.patch queue-4.9/random-use-chacha20-for-get_random_int-long.patch queue-4.9/ptrace-fix-ptrace_listen-race-corrupting-task-state.patch queue-4.9/drm-vmwgfx-fix-integer-overflow-in-vmw_surface_define_ioctl.patch queue-4.9/pci-sort-the-list-of-devices-with-d3-delay-quirk-by-id.patch queue-4.9/pci-add-mcfg-quirks-for-x-gene-host-controller.patch queue-4.9/hid-i2c-hid-add-a-simple-quirk-to-fix-device-defects.patch queue-4.9/drm-msm-adreno-move-function-declarations-to-header-file.patch queue-4.9/s390-decompressor-fix-initrd-corruption-caused-by-bss-clear.patch queue-4.9/pci-disable-msi-for-hisilicon-hip06-hip07-root-ports.patch queue-4.9/mips-check-tlb-before-handle_ri_rdhwr-for-loongson-3.patch queue-4.9/pci-add-acs-quirk-for-intel-union-point.patch queue-4.9/asoc-intel-baytrail-add-quirk-for-lenovo-thinkpad-10.patch queue-4.9/can-flexcan-add-quirk-flexcan_quirk_enable_eacen_rrs.patch queue-4.9/metag-usercopy-drop-unused-macros.patch queue-4.9/pci-expand-vpd-access-disabled-quirk-message.patch queue-4.9/drm-i915-more-.is_mobile-cleanups-for-bdw.patch queue-4.9/hid-multitouch-enable-the-surface-4-type-cover-pro-jp-to-report-multitouch-data.patch queue-4.9/iio-bmg160-reset-chip-when-probing.patch queue-4.9/orangefs-move-features-validation-to-fix-filesystem-hang.patch queue-4.9/arm64-mm-unaligned-access-by-user-land-should-be-received-as-sigbus.patch queue-4.9/powerpc-don-t-try-to-fix-up-misaligned-load-with-reservation-instructions.patch queue-4.9/usb-chipidea-msm-rely-on-core-to-override-ahbburst.patch queue-4.9/scsi-ufs-refactor-device-descriptor-reading.patch queue-4.9/asoc-intel-bytcr_rt5640-quirks-for-insyde-devices.patch queue-4.9/mips-lantiq-fix-missing-xbar-kernel-panic.patch queue-4.9/metag-usercopy-zero-rest-of-buffer-from-copy_from_user.patch queue-4.9/xfs-honor-falloc_fl_keep_size-when-punching-ends-of-files.patch queue-4.9/hid-multitouch-enable-the-surface-3-type-cover-to-report-multitouch-data.patch queue-4.9/scsi-ufs-issue-link-starup-2-times-if-device-isn-t-active.patch queue-4.9/asoc-rt5670-add-missing-10ec5072-acpi-id.patch queue-4.9/metag-usercopy-fix-alignment-error-checking.patch queue-4.9/x86-reboot-quirks-add-asus-eeebook-x205ta-reboot-quirk.patch queue-4.9/input-gpio_keys-add-support-for-gpio-descriptors.patch queue-4.9/pci-xgene-fix-double-free-on-init-error.patch queue-4.9/acpi-save-nvs-memory-for-lenovo-g50-45.patch queue-4.9/asoc-intel-cht_bsw_rt5645-harden-acpi-device-detection.patch queue-4.9/sata-ahci-da850-implement-a-workaround-for-the-softreset-quirk.patch queue-4.9/reset-treeid-to-zero-on-smb2-tree_connect.patch queue-4.9/pci-add-acs-quirk-for-qualcomm-qdf2400-and-qdf2432.patch queue-4.9/tools-power-turbostat-decode-baytrail-cc6-and-mc6-demotion-configuration.patch queue-4.9/arm-davinci-pm-support-da8xx-dt-platforms.patch queue-4.9/documentation-stable-kernel-rules-fix-stable-tag-format.patch queue-4.9/drm-mga-remove-device_is_agp-callback.patch queue-4.9/usb-host-xhci-plat-enable-broken_ped-quirk-if-platform-requested.patch queue-4.9/mm-mempolicy.c-fix-error-handling-in-set_mempolicy-and-mbind.patch queue-4.9/pci-add-mcfg-quirks-for-qualcomm-qdf2432-host-controller.patch queue-4.9/amd-xgbe-prepare-for-working-with-more-than-one-type-of-phy.patch queue-4.9/arm-arm64-kvm-take-mmap_sem-in-stage2_unmap_vm.patch queue-4.9/mm-page_alloc.c-fix-print-order-in-show_free_areas.patch queue-4.9/usb-dwc3-host-pass-quirk-broken-port-ped-property-for-known-broken-revisions.patch queue-4.9/hid-usbhid-add-quirk-for-the-futaba-tosd-5711bb-vfd.patch queue-4.9/mmc-sdhci-msm-enable-few-quirks.patch queue-4.9/hid-usbhid-add-quirk-for-mayflash-dragonrise-dolphinbar.patch queue-4.9/arm-smccc-update-hvc-comment-to-describe-new-quirk-parameter.patch queue-4.9/hid-usbhid-add-quirks-for-mayflash-dragonrise-gamecube-and-ps3-adapters.patch queue-4.9/pci-thunder-pem-factor-out-resource-lookup.patch queue-4.9/pci-acpi-extend-pci_mcfg_lookup-to-return-ecam-config-accessors.patch queue-4.9/mips-c-r4k-fix-loongson-3-s-vcache-scache-waysize-calculation.patch queue-4.9/platform-x86-asus-wmi-set-specified-xusb2pr-value-for-x550lb.patch queue-4.9/drm-vmwgfx-avoid-calling-vzalloc-with-a-0-size-in-vmw_get_cap_3d_ioctl.patch queue-4.9/usb-xhci-add-quirk-flag-for-broken-ped-bits.patch queue-4.9/scsi-ufs-ensure-that-host-pa_tactivate-is-higher-than-device.patch queue-4.9/mips-force-o32-fp64-support-on-32bit-mips64r6-kernels.patch queue-4.9/arm-davinci-add-skeleton-for-pdata-quirks.patch queue-4.9/usb-dwc3-gadget-delay-unmap-of-bounced-requests.patch queue-4.9/x86-reboot-quirks-fix-typo-in-asus-eeebook-x205ta-reboot-quirk.patch queue-4.9/mips-add-mips_cpu_ftlb-for-loongson-3a-r2.patch queue-4.9/alsa-usb-audio-add-native-dsd-support-for-teac-501-503-dac.patch queue-4.9/kbuild-use-cc-disable-warning-consistently-for-maybe-uninitialized.patch queue-4.9/arm-omap2-fix-init-for-multiple-quirks-for-the-same-soc.patch queue-4.9/pci-add-mcfg-quirks-for-hisilicon-hip05-06-07-host-controllers.patch queue-4.9/hid-microsoft-add-surface-4-type-cover-pro-4-not-jp-versions.patch queue-4.9/ppdev-fix-registering-same-device-name.patch queue-4.9/pci-add-mcfg-quirks-for-cavium-thunderx-pass2.x-host-controller.patch queue-4.9/x86-reboot-quirks-add-asus-eeebook-x205ta-w-reboot-quirk.patch queue-4.9/acpi-sysfs-provide-quirk-mechanism-to-prevent-gpe-flooding.patch queue-4.9/scsi-ufs-add-quirk-to-increase-host-pa_saveconfigtime.patch queue-4.9/drm-ttm-drm-vmwgfx-relax-permission-checking-when-opening-surfaces.patch queue-4.9/arm64-pci-add-local-struct-device-pointers.patch queue-4.9/drm-vmwgfx-null-pointer-dereference-in-vmw_surface_define_ioctl.patch queue-4.9/asoc-sun4i-i2s-add-quirks-to-handle-a31-compatible.patch