Martin Blumenstingl
2c146cf97b
clk: meson: gxbb: Fix the SDM_EN bit for MPLL0 on GXBB
...
[ Upstream commit ff54938dd190d85f740b9bf9dde59b550936b621 ]
There are reports that 48kHz audio does not work on the WeTek Play 2
(which uses a GXBB SoC), while 44.1kHz audio works fine on the same
board. There are also reports of 48kHz audio working fine on GXL and
GXM SoCs, which are using an (almost) identical AIU (audio controller).
Experimenting has shown that MPLL0 is causing this problem. In the .dts
we have by default:
assigned-clocks = <&clkc CLKID_MPLL0>,
<&clkc CLKID_MPLL1>,
<&clkc CLKID_MPLL2>;
assigned-clock-rates = <294912000>,
<270950400>,
<393216000>;
The MPLL0 rate is divisible by 48kHz without remainder and the MPLL1
rate is divisible by 44.1kHz without remainder. Swapping these two clock
rates "fixes" 48kHz audio but breaks 44.1kHz audio.
Everything looks normal when looking at the info provided by the common
clock framework while playing 48kHz audio (via I2S with mclk-fs = 256):
mpll_prediv 1 1 0 2000000000
mpll0_div 1 1 0 294909641
mpll0 1 1 0 294909641
cts_amclk_sel 1 1 0 294909641
cts_amclk_div 1 1 0 12287902
cts_amclk 1 1 0 12287902
meson-clk-msr however shows that the actual MPLL0 clock is off by more
than 38MHz:
mp0_out 333322917 +/-10416Hz
The rate seen by meson-clk-msr is very close to what we would get when
SDM (the fractional part) was ignored:
(2000000000Hz * 16384) / ((16384 * 6) = 333.33MHz
If SDM was considered the we should get close to:
(2000000000Hz * 16384) / ((16384 * 6) + 12808) = 294.9MHz
Further experimenting shows that HHI_MPLL_CNTL7[15] does not have any
effect on the rate of MPLL0 as seen my meson-clk-msr (regardless of
whether that bit is zero or one the rate is always the same according to
meson-clk-msr). Using HHI_MPLL_CNTL[25] on the other hand as SDM_EN
results in SDM being considered for the rate output by the hardware. The
rate - as seen by meson-clk-msr - matches with what we expect when
SDM_EN is enabled (fractional part is being considered, resulting in a
294.9MHz output) or disable (fractional part being ignored, resulting in
a 333.33MHz output).
Reported-by: Christian Hewitt <christianshewitt@gmail.com>
Tested-by: Christian Hewitt <christianshewitt@gmail.com>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
Link: https://lore.kernel.org/r/20211031135006.1508796-1-martin.blumenstingl@googlemail.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-01-27 09:19:47 +01:00
..
accessibility
acpi
ACPI: battery: Add the ThinkPad "Not Charging" quirk
2022-01-27 09:19:45 +01:00
amba
ARM: 9120/1: Revert "amba: make use of -1 IRQs warn"
2021-11-06 13:59:45 +01:00
android
binder: fix handling of error during copy
2022-01-27 09:19:38 +01:00
ata
libata: if T_LENGTH is zero, dma direction should be DMA_NONE
2021-12-22 09:29:39 +01:00
atm
auxdisplay
auxdisplay: ht16k33: Fix frame buffer device blanking
2021-11-17 09:48:45 +01:00
base
devtmpfs regression fix: reconfigure on each mount
2022-01-20 09:19:17 +01:00
bcma
bcma: Fix memory leak for internally-handled cores
2021-09-15 09:47:37 +02:00
block
floppy: Add max size check for user space request
2022-01-27 09:19:42 +01:00
bluetooth
Bluetooth: hci_bcm: Check for error irq
2022-01-27 09:19:36 +01:00
bus
bus: ti-sysc: Use CLKDM_NOAUTO for dra7 dcan1 for errata i893
2021-10-13 10:08:19 +02:00
cdrom
char
random: do not throw away excess input to crng_fast_load
2022-01-27 09:19:46 +01:00
clk
clk: meson: gxbb: Fix the SDM_EN bit for MPLL0 on GXBB
2022-01-27 09:19:47 +01:00
clocksource
clocksource/drivers/timer-ti-dm: Select TIMER_OF
2021-11-17 09:48:39 +01:00
connector
counter
cpufreq
cpufreq: Fix initialization of min and max frequency QoS requests
2022-01-27 09:19:44 +01:00
cpuidle
cpuidle: Fix kobject memory leaks in error paths
2021-11-17 09:48:36 +01:00
crypto
crypto: stm32/cryp - fix lrw chaining mode
2022-01-27 09:19:33 +01:00
dax
dca
devfreq
dio
dma
dmaengine: pxa/mmp: stop referencing config->slave_id
2022-01-27 09:19:39 +01:00
dma-buf
dma_fence_array: Fix PENDING_ERROR leak in dma_fence_array_signaled()
2022-01-27 09:19:28 +01:00
edac
EDAC/synopsys: Use the quirk for version instead of ddr version
2022-01-27 09:19:41 +01:00
eisa
extcon
firewire
firmware
firmware: qemu_fw_cfg: fix kobject leak in probe error path
2022-01-20 09:19:18 +01:00
fpga
fpga: machxo2-spi: Fix missing error code in machxo2_write_complete()
2021-09-30 10:09:23 +02:00
fsi
gnss
gpio
gpio: aspeed: Convert aspeed_gpio.lock to raw_spinlock
2022-01-27 09:19:43 +01:00
gpu
drm/amdgpu: fixup bad vram size on gmc v8
2022-01-27 09:19:45 +01:00
greybus
hid
HID: quirks: Allow inverting the absolute X/Y values
2022-01-27 09:19:43 +01:00
hsi
HSI: core: Fix return freed object in hsi_new_client
2022-01-27 09:19:41 +01:00
hv
hyperv/vmbus: include linux/bitops.h
2021-11-17 09:48:20 +01:00
hwmon
hwmon: (lm90) Do not report 'busy' status bit as alarm
2021-12-29 12:23:37 +01:00
hwspinlock
hwtracing
i2c
i2c: mpc: Correct I2C reset procedure
2022-01-27 09:19:47 +01:00
i3c
ide
idle
iio
iio: adc: stm32: fix a current leak by resetting pcsel before disabling vdda
2021-12-22 09:29:35 +01:00
infiniband
RDMA/cxgb4: Set queue pair state when being queried
2022-01-27 09:19:40 +01:00
input
Input: touchscreen - Fix backport of a02dcde595f7cbd240ccd64de96034ad91cffc40
2022-01-11 15:23:30 +01:00
interconnect
iommu
iommu/iova: Fix race between FQ timeout and teardown
2022-01-27 09:19:39 +01:00
ipack
ipack: ipoctal: fix module reference leak
2021-10-06 15:42:36 +02:00
irqchip
irqchip: nvic: Fix offset for Interrupt Priority Offsets
2021-12-14 14:49:06 +01:00
isdn
mISDN: change function names to avoid conflicts
2022-01-11 15:23:33 +01:00
leds
lightnvm
macintosh
mailbox
mcb
mcb: fix error handling in mcb_alloc_bus()
2021-09-30 10:09:22 +02:00
md
dm space map common: add bounds check to sm_ll_lookup_bitmap()
2022-01-27 09:19:46 +01:00
media
media: saa7146: hexium_gemini: Fix a NULL pointer dereference in hexium_attach()
2022-01-27 09:19:43 +01:00
memory
memory: fsl_ifc: fix leak of irq and nand_irq in fsl_ifc_ctrl_probe
2021-11-17 09:48:42 +01:00
memstick
memstick: jmb38x_ms: use appropriate free function in jmb38x_ms_alloc_host()
2021-11-17 09:48:37 +01:00
message
mfd
mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe()
2022-01-16 09:15:38 +01:00
misc
misc: lattice-ecp3-config: Fix task hung when firmware load failed
2022-01-27 09:19:39 +01:00
mmc
mmc: core: Fixup storing of OCR for MMC_QUIRK_NONSTD_SDIO
2022-01-27 09:19:44 +01:00
mtd
mtd: rawnand: gpmi: Remove explicit default gpmi clock setting for i.MX6
2022-01-27 09:19:26 +01:00
mux
net
net: gemini: allow any RGMII interface mode
2022-01-27 09:19:46 +01:00
nfc
NFC: st21nfca: Fix memory leak in device probe and remove
2022-01-05 12:37:44 +01:00
ntb
NTB: perf: Fix an error code in perf_setup_inbuf()
2021-09-22 12:26:44 +02:00
nubus
nvdimm
libnvdimm/pmem: Fix crash triggered when I/O in-flight during unbind
2021-10-06 15:42:38 +02:00
nvme
nvmet: use IOCB_NOWAIT only if the filesystem supports it
2021-12-01 09:23:33 +01:00
nvmem
nvmem: Fix shift-out-of-bound (UBSAN) with byte size cells
2021-10-20 11:40:14 +02:00
of
of: base: Fix phandle argument length mismatch error message
2022-01-27 09:19:40 +01:00
opp
opp: Fix return in _opp_add_static_v2()
2021-11-17 09:48:44 +01:00
oprofile
parisc
parisc: Move pci_dev_is_behind_card_dino to where it is used
2021-09-26 14:07:10 +02:00
parport
parport: remove non-zero check on count
2021-09-22 12:26:36 +02:00
pci
PCI/MSI: Fix pci_irq_vector()/pci_irq_get_affinity()
2022-01-27 09:19:38 +01:00
pcmcia
pcmcia: fix setting of kthread task states
2022-01-27 09:19:37 +01:00
perf
phy
phy: uniphier-usb3ss: fix unintended writing zeros to PHY register
2022-01-27 09:19:39 +01:00
pinctrl
pinctrl: mediatek: fix global-out-of-bounds issue
2021-12-29 12:23:37 +01:00
platform
platform/x86: apple-gmux: use resource_size() with res
2022-01-05 12:37:43 +01:00
pnp
power
power: reset: ltc2952: Fix use of floating point literals
2022-01-11 15:23:32 +01:00
powercap
pps
ps3
ptp
ptp_pch: Load module automatically if ID matches
2021-10-13 10:08:19 +02:00
pwm
pwm: stm32-lp: Don't modify HW state in .remove() callback
2021-09-26 14:07:13 +02:00
rapidio
ras
regulator
regulator: qcom_smd: Align probe function with rpmh-regulator
2022-01-27 09:19:46 +01:00
remoteproc
reset
reset: socfpga: add empty driver allowing consumers to probe
2021-11-17 09:48:20 +01:00
rpmsg
rtc
rtc: cmos: take rtc_lock while reading from CMOS
2022-01-27 09:19:27 +01:00
s390
s390/cio: make ccw_device_dma_* more robust
2021-11-17 09:48:50 +01:00
sbus
scsi
scsi: ufs: Fix race conditions related to driver data
2022-01-27 09:19:38 +01:00
sfi
sh
maple: fix wrong return value of maple_bus_init().
2021-11-26 10:47:17 +01:00
siox
slimbus
soc
ASoC: mediatek: Check for error clk pointer
2022-01-27 09:19:39 +01:00
soundwire
spi
spi: spi-meson-spifc: Add missing pm_runtime_disable() in meson_spifc_probe
2022-01-27 09:19:37 +01:00
spmi
ssb
staging
staging: greybus: audio: Check null pointer
2022-01-27 09:19:36 +01:00
target
scsi: target: Fix alua_tg_pt_gps_count tracking
2021-11-26 10:47:16 +01:00
tc
tee
tee: fix put order in teedev_close_context()
2022-01-27 09:19:30 +01:00
thermal
thermal: core: Reset previous low and high trip during thermal zone init
2021-12-08 09:01:09 +01:00
thunderbolt
tty
serial: core: Keep mctrl register state and cached copy in sync
2022-01-27 09:19:46 +01:00
uio
usb
usb: hub: Add delay for SuperSpeed hub resume to let links transit to U0
2022-01-27 09:19:44 +01:00
vfio
vfio: Use config not menuconfig for VFIO_NOIOMMU
2021-09-22 12:26:23 +02:00
vhost
vhost/vsock: fix incorrect used length reported to the guest
2021-12-01 09:23:34 +01:00
video
vgacon: Propagate console boot parameters before calling `vc_resize'
2021-12-08 09:01:13 +01:00
virt
virtio
virtio_ring: Fix querying of maximum DMA mapping size for virtio device
2021-12-22 09:29:34 +01:00
visorbus
vlynq
vme
w1
watchdog
ar7: fix kernel builds for compiler test
2021-11-17 09:48:46 +01:00
xen
xen: detect uninitialized xenbus in xenbus_init
2021-12-01 09:23:28 +01:00
zorro
Kconfig
Makefile