On Tue, Oct 8, 2019 at 7:06 PM Mark Brown broonie@kernel.org wrote:
On Tue, Oct 08, 2019 at 06:59:57PM +0800, Cheng-yi Chiang wrote:
The calibration data (R0 values and temperature) were measured and written to VPD in the factory. When machine driver initializes sound card, it reads the value from VPD and uses the exported API to set calibration value for codec. The purpose is to protect speaker. This
So the VPD is not part of the CODEC? One question would be why the CODEC driver doesn't directly read this information.
+Maxim folks as they are also interested in setting calibration data in driver.
Hi Mark, The VPD is not part of the codec. It is a binary blob in system firmware where we can store important information per-device. The calibration data is written to RO section of VPD in the factory during calibration step. The codec driver is not suitable of reading this information directly because the string format written into VPD is customized per board. For example on cml_rt1011_rt5682.c there are four R0 values for four speakers, and one temperature values . So in this case, there are totally 5 values in a VPD dsm_calib key. In VPD, the format is like "dsm_calib"="0x00278F09 0x00251E1B 0x0021AFE6 0x0022720A 0x0000012E" We put all the information into one string to allow arbitrary calibration data needed for smart amp calibration in the future. On other system using smart amp, there might be two speakers, with two temperature values..etc. The format will be changed accordingly. Number of temperature values depends on number of temperature sensor available near the speakers. Since machine driver knows the combination of speakers and the available temperature sensor, we think that machine driver is the better place to put this per-board logic. Thanks!