Commit cbcb7edd authored by Pierre-Louis Bossart's avatar Pierre-Louis Bossart Committed by Vinod Koul
Browse files

soundwire: intel_auxdevice: add kernel parameter for mclk divider



Add a kernel parameter to work-around discrepancies between hardware
and platform firmware, it's not unusual to see e.g. 38.4MHz listed in
_DSD properties as the SoundWire clock source, but the hardware may be
based on a 19.2 MHz mclk source.

Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20241004021850.9758-1-yung-chuan.liao@linux.intel.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 71b405b1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ is applicable::
	SCSI	Appropriate SCSI support is enabled.
			A lot of drivers have their options described inside
			the Documentation/scsi/ sub-directory.
        SDW     SoundWire support is enabled.
	SECURITY Different security models are enabled.
	SELINUX SELinux support is enabled.
	SERIAL	Serial support is enabled.
+4 −0
Original line number Diff line number Diff line
@@ -6060,6 +6060,10 @@
			non-zero "wait" parameter.  See weight_single
			and weight_many.

	sdw_mclk_divider=[SDW]
			Specify the MCLK divider for Intel SoundWire buses in
			case the BIOS does not provide the clock rate properly.

	skew_tick=	[KNL,EARLY] Offset the periodic timer tick per cpu to mitigate
			xtime_lock contention on larger systems, and/or RCU lock
			contention on all systems with CONFIG_MAXSMP set.
+10 −2
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@ static int md_flags;
module_param_named(sdw_md_flags, md_flags, int, 0444);
MODULE_PARM_DESC(sdw_md_flags, "SoundWire Intel Master device flags (0x0 all off)");

static int mclk_divider;
module_param_named(sdw_mclk_divider, mclk_divider, int, 0444);
MODULE_PARM_DESC(sdw_mclk_divider, "SoundWire Intel mclk divider");

struct wake_capable_part {
	const u16 mfg_id;
	const u16 part_id;
@@ -142,6 +146,10 @@ static int sdw_master_read_intel_prop(struct sdw_bus *bus)
				 "intel-sdw-ip-clock",
				 &prop->mclk_freq);

	if (mclk_divider)
		/* use kernel parameter for BIOS or board work-arounds */
		prop->mclk_freq /= mclk_divider;
	else
		/* the values reported by BIOS are the 2x clock, not the bus clock */
		prop->mclk_freq /= 2;