Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

ASoC: codecs: ES8326

Merge series from Zhu Ning <zhuning0077@gmail.com>:

We developed a new version of the chip. 3 Three patches are used for
compatibility with the old and new versions of the chip.We did tests
with the new driver at version_v0 and version_v3.The test results
from the test department met our expectations.Both versions work well
with the new drivers.

+138 -91
+138 -91
sound/soc/codecs/es8326.c
··· 132 132 SND_SOC_DAPM_PGA("LHPMIX", ES8326_DAC2HPMIX, 7, 0, NULL, 0), 133 133 SND_SOC_DAPM_PGA("RHPMIX", ES8326_DAC2HPMIX, 3, 0, NULL, 0), 134 134 135 + SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOR Supply", ES8326_HP_CAL, 136 + 4, 7, 0, 0), 137 + SND_SOC_DAPM_REG(snd_soc_dapm_supply, "HPOL Supply", ES8326_HP_CAL, 138 + 0, 7, 0, 0), 139 + 135 140 SND_SOC_DAPM_OUTPUT("HPOL"), 136 141 SND_SOC_DAPM_OUTPUT("HPOR"), 137 142 }; ··· 160 155 161 156 {"LHPMIX", NULL, "Left DAC"}, 162 157 {"RHPMIX", NULL, "Right DAC"}, 158 + 159 + {"HPOR", NULL, "HPOR Supply"}, 160 + {"HPOL", NULL, "HPOL Supply"}, 163 161 164 162 {"HPOL", NULL, "LHPMIX"}, 165 163 {"HPOR", NULL, "RHPMIX"}, ··· 206 198 207 199 /* codec hifi mclk clock divider coefficients */ 208 200 /* {ratio, LRCK, MCLK, REG04, REG05, REG06, REG07, REG08, REG09, REG10, REG11} */ 209 - static const struct _coeff_div coeff_div[] = { 210 - {32, 8000, 256000, 0x60, 0x00, 0x0F, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 211 - {32, 16000, 512000, 0x20, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x3F}, 212 - {32, 44100, 1411200, 0x00, 0x00, 0x13, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 213 - {32, 48000, 1536000, 0x00, 0x00, 0x13, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 214 - {36, 8000, 288000, 0x20, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x23, 0x47}, 215 - {36, 16000, 576000, 0x20, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x23, 0x47}, 216 - {48, 8000, 384000, 0x60, 0x02, 0x1F, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 217 - {48, 16000, 768000, 0x20, 0x02, 0x0F, 0x75, 0x0A, 0x1B, 0x1F, 0x3F}, 218 - {48, 48000, 2304000, 0x00, 0x02, 0x0D, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 219 - {64, 8000, 512000, 0x60, 0x00, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 220 - {64, 16000, 1024000, 0x20, 0x00, 0x05, 0x75, 0x0A, 0x1B, 0x1F, 0x3F}, 201 + static const struct _coeff_div coeff_div_v0[] = { 202 + {64, 8000, 512000, 0x60, 0x01, 0x0F, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 203 + {64, 16000, 1024000, 0x20, 0x00, 0x33, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 204 + {64, 44100, 2822400, 0xE0, 0x00, 0x03, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 205 + {64, 48000, 3072000, 0xE0, 0x00, 0x03, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 206 + {128, 8000, 1024000, 0x60, 0x00, 0x33, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 207 + {128, 16000, 2048000, 0x20, 0x00, 0x03, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 208 + {128, 44100, 5644800, 0xE0, 0x01, 0x03, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 209 + {128, 48000, 6144000, 0xE0, 0x01, 0x03, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 221 210 222 - {64, 44100, 2822400, 0x00, 0x00, 0x11, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 223 - {64, 48000, 3072000, 0x00, 0x00, 0x11, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 224 - {72, 8000, 576000, 0x20, 0x00, 0x13, 0x35, 0x0A, 0x1B, 0x23, 0x47}, 225 - {72, 16000, 1152000, 0x20, 0x00, 0x05, 0x75, 0x0A, 0x1B, 0x23, 0x47}, 226 - {96, 8000, 768000, 0x60, 0x02, 0x1D, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 227 - {96, 16000, 1536000, 0x20, 0x02, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x3F}, 228 - {100, 48000, 4800000, 0x04, 0x04, 0x3F, 0x6D, 0x38, 0x08, 0x4f, 0x1f}, 229 - {125, 48000, 6000000, 0x04, 0x04, 0x1F, 0x2D, 0x0A, 0x0A, 0x27, 0x27}, 230 - {128, 8000, 1024000, 0x60, 0x00, 0x13, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 231 - {128, 16000, 2048000, 0x20, 0x00, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 211 + {192, 32000, 6144000, 0xE0, 0x02, 0x03, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 212 + {256, 8000, 2048000, 0x60, 0x00, 0x03, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 213 + {256, 16000, 4096000, 0x20, 0x01, 0x03, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 214 + {256, 44100, 11289600, 0xE0, 0x00, 0x30, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 215 + {256, 48000, 12288000, 0xE0, 0x00, 0x30, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 216 + {384, 32000, 12288000, 0xE0, 0x05, 0x03, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 217 + {400, 48000, 19200000, 0xE9, 0x04, 0x0F, 0x6d, 0x4A, 0x0A, 0x1F, 0x1F}, 232 218 233 - {128, 44100, 5644800, 0x00, 0x00, 0x01, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 234 - {128, 48000, 6144000, 0x00, 0x00, 0x01, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 235 - {144, 8000, 1152000, 0x20, 0x00, 0x03, 0x35, 0x0A, 0x1B, 0x23, 0x47}, 236 - {144, 16000, 2304000, 0x20, 0x00, 0x11, 0x35, 0x0A, 0x1B, 0x23, 0x47}, 237 - {192, 8000, 1536000, 0x60, 0x02, 0x0D, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 238 - {192, 16000, 3072000, 0x20, 0x02, 0x05, 0x75, 0x0A, 0x1B, 0x1F, 0x3F}, 239 - {200, 48000, 9600000, 0x04, 0x04, 0x0F, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 240 - {250, 48000, 12000000, 0x04, 0x04, 0x0F, 0x2D, 0x0A, 0x0A, 0x27, 0x27}, 241 - {256, 8000, 2048000, 0x60, 0x00, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 242 - {256, 16000, 4096000, 0x20, 0x00, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 243 - 244 - {256, 44100, 11289600, 0x00, 0x00, 0x10, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 245 - {256, 48000, 12288000, 0x00, 0x00, 0x30, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 246 - {288, 8000, 2304000, 0x20, 0x00, 0x01, 0x35, 0x0A, 0x1B, 0x23, 0x47}, 247 - {384, 8000, 3072000, 0x60, 0x02, 0x05, 0x75, 0x0A, 0x1B, 0x1F, 0x7F}, 248 - {384, 16000, 6144000, 0x20, 0x02, 0x03, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 249 - {384, 48000, 18432000, 0x00, 0x02, 0x01, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 250 - {400, 48000, 19200000, 0x09, 0x04, 0x0f, 0x6d, 0x3a, 0x0A, 0x4F, 0x1F}, 251 - {500, 48000, 24000000, 0x18, 0x04, 0x1F, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 252 - {512, 8000, 4096000, 0x60, 0x00, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 253 - {512, 16000, 8192000, 0x20, 0x00, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 254 - 255 - {512, 44100, 22579200, 0x00, 0x00, 0x00, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 256 - {512, 48000, 24576000, 0x00, 0x00, 0x00, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 257 - {768, 8000, 6144000, 0x60, 0x02, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 258 - {768, 16000, 12288000, 0x20, 0x02, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 259 - {800, 48000, 38400000, 0x00, 0x18, 0x13, 0x2D, 0x0A, 0x0A, 0x1F, 0x1F}, 260 - {1024, 8000, 8192000, 0x60, 0x00, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 219 + {500, 48000, 24000000, 0xF8, 0x04, 0x3F, 0x6D, 0x4A, 0x0A, 0x1F, 0x1F}, 220 + {512, 8000, 4096000, 0x60, 0x01, 0x03, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 221 + {512, 16000, 8192000, 0x20, 0x00, 0x30, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 222 + {512, 44100, 22579200, 0xE0, 0x00, 0x00, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 223 + {512, 48000, 24576000, 0xE0, 0x00, 0x00, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 224 + {768, 32000, 24576000, 0xE0, 0x02, 0x30, 0x2D, 0x4A, 0x0A, 0x1F, 0x1F}, 225 + {1024, 8000, 8192000, 0x60, 0x00, 0x30, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 261 226 {1024, 16000, 16384000, 0x20, 0x00, 0x00, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 262 - {1152, 16000, 18432000, 0x20, 0x08, 0x11, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 263 - {1536, 8000, 12288000, 0x60, 0x02, 0x01, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 264 - 265 - {1536, 16000, 24576000, 0x20, 0x02, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x3F}, 266 - {1625, 8000, 13000000, 0x0C, 0x18, 0x1F, 0x2D, 0x0A, 0x0A, 0x27, 0x27}, 267 - {1625, 16000, 26000000, 0x0C, 0x18, 0x1F, 0x2D, 0x0A, 0x0A, 0x27, 0x27}, 268 - {2048, 8000, 16384000, 0x60, 0x00, 0x00, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 269 - {2304, 8000, 18432000, 0x40, 0x02, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x5F}, 270 - {3072, 8000, 24576000, 0x60, 0x02, 0x10, 0x35, 0x0A, 0x1B, 0x1F, 0x7F}, 271 - {3250, 8000, 26000000, 0x0C, 0x18, 0x0F, 0x2D, 0x0A, 0x0A, 0x27, 0x27}, 272 - 273 227 }; 274 228 275 - static inline int get_coeff(int mclk, int rate) 229 + static const struct _coeff_div coeff_div_v3[] = { 230 + {32, 8000, 256000, 0x60, 0x00, 0x0F, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 231 + {32, 16000, 512000, 0x20, 0x00, 0x0D, 0x75, 0x8A, 0x1B, 0x1F, 0x3F}, 232 + {32, 44100, 1411200, 0x00, 0x00, 0x13, 0x2D, 0x8A, 0x0A, 0x1F, 0x1F}, 233 + {32, 48000, 1536000, 0x00, 0x00, 0x13, 0x2D, 0x8A, 0x0A, 0x1F, 0x1F}, 234 + {36, 8000, 288000, 0x20, 0x00, 0x0D, 0x75, 0x8A, 0x1B, 0x23, 0x47}, 235 + {36, 16000, 576000, 0x20, 0x00, 0x0D, 0x75, 0x8A, 0x1B, 0x23, 0x47}, 236 + {48, 8000, 384000, 0x60, 0x02, 0x1F, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 237 + {48, 16000, 768000, 0x20, 0x02, 0x0F, 0x75, 0x8A, 0x1B, 0x1F, 0x3F}, 238 + {48, 48000, 2304000, 0x00, 0x02, 0x0D, 0x2D, 0x8A, 0x0A, 0x1F, 0x1F}, 239 + 240 + {64, 8000, 512000, 0x60, 0x00, 0x35, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 241 + {64, 16000, 1024000, 0x20, 0x00, 0x05, 0x75, 0x8A, 0x1B, 0x1F, 0x3F}, 242 + {64, 44100, 2822400, 0xE0, 0x00, 0x31, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 243 + {64, 48000, 3072000, 0xE0, 0x00, 0x31, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 244 + {72, 8000, 576000, 0x20, 0x00, 0x13, 0x35, 0x8A, 0x1B, 0x23, 0x47}, 245 + {72, 16000, 1152000, 0x20, 0x00, 0x05, 0x75, 0x8A, 0x1B, 0x23, 0x47}, 246 + {96, 8000, 768000, 0x60, 0x02, 0x1D, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 247 + {96, 16000, 1536000, 0x20, 0x02, 0x0D, 0x75, 0x8A, 0x1B, 0x1F, 0x3F}, 248 + {100, 48000, 4800000, 0x04, 0x04, 0x3F, 0x6D, 0xB8, 0x08, 0x4f, 0x1f}, 249 + {125, 48000, 6000000, 0x04, 0x04, 0x1F, 0x2D, 0x8A, 0x0A, 0x27, 0x27}, 250 + 251 + {128, 8000, 1024000, 0x60, 0x00, 0x05, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 252 + {128, 16000, 2048000, 0x20, 0x00, 0x31, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 253 + {128, 44100, 5644800, 0xE0, 0x00, 0x01, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 254 + {128, 48000, 6144000, 0xE0, 0x00, 0x01, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 255 + {144, 8000, 1152000, 0x20, 0x00, 0x03, 0x35, 0x8A, 0x1B, 0x23, 0x47}, 256 + {144, 16000, 2304000, 0x20, 0x00, 0x11, 0x35, 0x8A, 0x1B, 0x23, 0x47}, 257 + {192, 8000, 1536000, 0x60, 0x02, 0x0D, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 258 + {192, 32000, 6144000, 0xE0, 0x02, 0x31, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 259 + {192, 16000, 3072000, 0x20, 0x02, 0x05, 0x75, 0xCA, 0x1B, 0x1F, 0x3F}, 260 + 261 + {200, 48000, 9600000, 0x04, 0x04, 0x0F, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 262 + {250, 48000, 12000000, 0x04, 0x04, 0x0F, 0x2D, 0xCA, 0x0A, 0x27, 0x27}, 263 + {256, 8000, 2048000, 0x60, 0x00, 0x31, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 264 + {256, 16000, 4096000, 0x20, 0x00, 0x01, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 265 + {256, 44100, 11289600, 0xE0, 0x00, 0x30, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 266 + {256, 48000, 12288000, 0xE0, 0x00, 0x30, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 267 + {288, 8000, 2304000, 0x20, 0x00, 0x01, 0x35, 0x8A, 0x1B, 0x23, 0x47}, 268 + {384, 8000, 3072000, 0x60, 0x02, 0x05, 0x75, 0x8A, 0x1B, 0x1F, 0x7F}, 269 + {384, 16000, 6144000, 0x20, 0x02, 0x03, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 270 + {384, 32000, 12288000, 0xE0, 0x02, 0x01, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 271 + {384, 48000, 18432000, 0x00, 0x02, 0x01, 0x2D, 0x8A, 0x0A, 0x1F, 0x1F}, 272 + 273 + {400, 48000, 19200000, 0xE4, 0x04, 0x35, 0x6d, 0xCA, 0x0A, 0x1F, 0x1F}, 274 + {500, 48000, 24000000, 0xF8, 0x04, 0x3F, 0x6D, 0xCA, 0x0A, 0x1F, 0x1F}, 275 + {512, 8000, 4096000, 0x60, 0x00, 0x01, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 276 + {512, 16000, 8192000, 0x20, 0x00, 0x30, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 277 + {512, 44100, 22579200, 0xE0, 0x00, 0x00, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 278 + {512, 48000, 24576000, 0xE0, 0x00, 0x00, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 279 + {768, 8000, 6144000, 0x60, 0x02, 0x11, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 280 + {768, 16000, 12288000, 0x20, 0x02, 0x01, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 281 + {768, 32000, 24576000, 0xE0, 0x02, 0x30, 0x2D, 0xCA, 0x0A, 0x1F, 0x1F}, 282 + {800, 48000, 38400000, 0x00, 0x18, 0x13, 0x2D, 0x8A, 0x0A, 0x1F, 0x1F}, 283 + 284 + {1024, 8000, 8192000, 0x60, 0x00, 0x30, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 285 + {1024, 16000, 16384000, 0x20, 0x00, 0x00, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 286 + {1152, 16000, 18432000, 0x20, 0x08, 0x11, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 287 + {1536, 8000, 12288000, 0x60, 0x02, 0x01, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 288 + {1536, 16000, 24576000, 0x20, 0x02, 0x10, 0x35, 0x8A, 0x1B, 0x1F, 0x3F}, 289 + {1625, 8000, 13000000, 0x0C, 0x18, 0x1F, 0x2D, 0x8A, 0x0A, 0x27, 0x27}, 290 + {1625, 16000, 26000000, 0x0C, 0x18, 0x1F, 0x2D, 0x8A, 0x0A, 0x27, 0x27}, 291 + {2048, 8000, 16384000, 0x60, 0x00, 0x00, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 292 + {2304, 8000, 18432000, 0x40, 0x02, 0x10, 0x35, 0x8A, 0x1B, 0x1F, 0x5F}, 293 + {3072, 8000, 24576000, 0x60, 0x02, 0x10, 0x35, 0x8A, 0x1B, 0x1F, 0x7F}, 294 + {3250, 8000, 26000000, 0x0C, 0x18, 0x0F, 0x2D, 0x8A, 0x0A, 0x27, 0x27}, 295 + }; 296 + 297 + static inline int get_coeff(int mclk, int rate, int array, 298 + const struct _coeff_div *coeff_div) 276 299 { 277 300 int i; 278 301 279 - for (i = 0; i < ARRAY_SIZE(coeff_div); i++) { 302 + for (i = 0; i < array; i++) { 280 303 if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk) 281 304 return i; 282 305 } ··· 372 333 struct snd_soc_dai *dai) 373 334 { 374 335 struct snd_soc_component *component = dai->component; 336 + const struct _coeff_div *coeff_div; 375 337 struct es8326_priv *es8326 = snd_soc_component_get_drvdata(component); 376 338 u8 srate = 0; 377 - int coeff; 339 + int coeff, array; 378 340 379 - coeff = get_coeff(es8326->sysclk, params_rate(params)); 341 + if (es8326->version == 0) { 342 + coeff_div = coeff_div_v0; 343 + array = ARRAY_SIZE(coeff_div_v0); 344 + } else { 345 + coeff_div = coeff_div_v3; 346 + array = ARRAY_SIZE(coeff_div_v3); 347 + } 348 + coeff = get_coeff(es8326->sysclk, params_rate(params), array, coeff_div); 380 349 /* bit size */ 381 350 switch (params_format(params)) { 382 351 case SNDRV_PCM_FORMAT_S16_LE: ··· 456 409 regmap_write(es8326->regmap, ES8326_HPR_OFFSET_INI, offset_r); 457 410 es8326->calibrated = true; 458 411 } 459 - regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa0); 460 - regmap_write(es8326->regmap, ES8326_HP_VOL, 0x80); 412 + regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa1); 413 + regmap_write(es8326->regmap, ES8326_HP_VOL, 0x91); 461 414 regmap_write(es8326->regmap, ES8326_HP_CAL, ES8326_HP_ON); 462 415 regmap_update_bits(es8326->regmap, ES8326_DAC_MUTE, 463 416 ES8326_MUTE_MASK, ~(ES8326_MUTE)); ··· 477 430 if (ret) 478 431 return ret; 479 432 480 - regmap_write(es8326->regmap, ES8326_RESET, 0x9f); 481 - msleep(20); 482 433 regmap_update_bits(es8326->regmap, ES8326_DAC_DSM, 0x01, 0x00); 483 434 regmap_write(es8326->regmap, ES8326_INTOUT_IO, es8326->interrupt_clk); 484 435 regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, ··· 485 440 regmap_write(es8326->regmap, ES8326_PGA_PDN, 0x40); 486 441 regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x00); 487 442 regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x20); 488 - regmap_write(es8326->regmap, ES8326_RESET, ES8326_CSM_ON); 443 + 444 + regmap_update_bits(es8326->regmap, ES8326_RESET, 445 + ES8326_CSM_ON, ES8326_CSM_ON); 489 446 break; 490 447 case SND_SOC_BIAS_PREPARE: 491 448 break; 492 449 case SND_SOC_BIAS_STANDBY: 493 - break; 494 - case SND_SOC_BIAS_OFF: 495 - clk_disable_unprepare(es8326->mclk); 496 450 regmap_write(es8326->regmap, ES8326_ANA_PDN, 0x3b); 497 451 regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x00); 498 452 regmap_update_bits(es8326->regmap, ES8326_CLK_CTL, 0x20, 0x00); 499 453 regmap_write(es8326->regmap, ES8326_SDINOUT1_IO, ES8326_IO_INPUT); 454 + break; 455 + case SND_SOC_BIAS_OFF: 456 + clk_disable_unprepare(es8326->mclk); 500 457 break; 501 458 } 502 459 ··· 641 594 iface = snd_soc_component_read(comp, ES8326_HPDET_STA); 642 595 dev_dbg(comp->dev, "gpio flag %#04x", iface); 643 596 644 - if (es8326->jack_remove_retry == 1) { 597 + if ((es8326->jack_remove_retry == 1) && (es8326->version != ES8326_VERSION_B)) { 645 598 if (iface & ES8326_HPINSERT_FLAG) 646 599 es8326->jack_remove_retry = 2; 647 600 else ··· 675 628 /* 676 629 * Inverted HPJACK_POL bit to trigger one IRQ to double check HP Removal event 677 630 */ 678 - if (es8326->jack_remove_retry == 0) { 631 + if ((es8326->jack_remove_retry == 0) && (es8326->version != ES8326_VERSION_B)) { 679 632 es8326->jack_remove_retry = 1; 680 633 dev_dbg(comp->dev, "remove event check, invert HPJACK_POL, cnt = %d\n", 681 634 es8326->jack_remove_retry); ··· 691 644 if (es8326->hp == 0) { 692 645 dev_dbg(comp->dev, "First insert, start OMTP/CTIA type check\n"); 693 646 /* 694 - * set auto-check mode, then restart jack_detect_work after 100ms. 647 + * set auto-check mode, then restart jack_detect_work after 400ms. 695 648 * Don't report jack status. 696 649 */ 697 650 regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, 0x03, 0x01); 698 651 usleep_range(50000, 70000); 699 652 regmap_update_bits(es8326->regmap, ES8326_HPDET_TYPE, 0x03, 0x00); 700 653 queue_delayed_work(system_wq, &es8326->jack_detect_work, 701 - msecs_to_jiffies(100)); 654 + msecs_to_jiffies(400)); 702 655 es8326->hp = 1; 703 656 goto exit; 704 657 } ··· 748 701 msecs_to_jiffies(10)); 749 702 else 750 703 queue_delayed_work(system_wq, &es8326->jack_detect_work, 751 - msecs_to_jiffies(600)); 704 + msecs_to_jiffies(300)); 752 705 753 706 out: 754 707 return IRQ_HANDLED; ··· 769 722 regmap_write(es8326->regmap, ES8326_CLK_DIV1, 0x01); 770 723 regmap_write(es8326->regmap, ES8326_CLK_DLL, 0x30); 771 724 regmap_write(es8326->regmap, ES8326_CLK_MUX, 0xed); 725 + regmap_write(es8326->regmap, ES8326_CLK_DAC_SEL, 0x08); 772 726 regmap_write(es8326->regmap, ES8326_CLK_TRI, 0xc1); 773 727 regmap_write(es8326->regmap, ES8326_DAC_MUTE, 0x03); 774 728 regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7f); 775 - regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x33); 729 + regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x03); 776 730 regmap_write(es8326->regmap, ES8326_DAC2HPMIX, 0x88); 777 - regmap_write(es8326->regmap, ES8326_HP_VOL, 0x80); 731 + usleep_range(15000, 20000); 778 732 regmap_write(es8326->regmap, ES8326_HP_OFFSET_CAL, 0x8c); 733 + usleep_range(15000, 20000); 779 734 regmap_write(es8326->regmap, ES8326_RESET, 0xc0); 780 735 usleep_range(15000, 20000); 781 736 ··· 815 766 regmap_write(es8326->regmap, ES8326_RESET, 0x1f); 816 767 regmap_write(es8326->regmap, ES8326_VMIDSEL, 0x0E); 817 768 usleep_range(10000, 15000); 818 - regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0x88); 769 + regmap_write(es8326->regmap, ES8326_HPJACK_TIMER, 0xe9); 770 + regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0x4b); 819 771 /* set headphone default type and detect pin */ 820 - regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x81); 772 + regmap_write(es8326->regmap, ES8326_HPDET_TYPE, 0x83); 821 773 regmap_write(es8326->regmap, ES8326_CLK_RESAMPLE, 0x05); 774 + regmap_write(es8326->regmap, ES8326_HP_MISC, 0x30); 822 775 823 776 /* set internal oscillator as clock source of headpone cp */ 824 - regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC, 0x84); 777 + regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC, 0x89); 825 778 regmap_write(es8326->regmap, ES8326_CLK_CTL, ES8326_CLK_ON); 826 779 /* clock manager reset release */ 827 780 regmap_write(es8326->regmap, ES8326_RESET, 0x17); 828 781 /* set headphone detection as half scan mode */ 829 - regmap_write(es8326->regmap, ES8326_HP_MISC, 0x08); 782 + regmap_write(es8326->regmap, ES8326_HP_MISC, 0x30); 830 783 regmap_write(es8326->regmap, ES8326_PULLUP_CTL, 0x00); 831 784 832 785 /* enable headphone driver */ 833 786 regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa7); 834 787 usleep_range(2000, 5000); 835 - regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xab); 836 - usleep_range(2000, 5000); 837 - regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xbb); 838 - usleep_range(2000, 5000); 788 + regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xa3); 789 + regmap_write(es8326->regmap, ES8326_HP_DRIVER_REF, 0xb3); 839 790 regmap_write(es8326->regmap, ES8326_HP_DRIVER, 0xa1); 840 791 841 792 regmap_write(es8326->regmap, ES8326_CLK_INV, 0x00); ··· 849 800 /* set ADC and DAC in low power mode */ 850 801 regmap_write(es8326->regmap, ES8326_ANA_LP, 0xf0); 851 802 852 - /* force micbias on */ 853 - regmap_write(es8326->regmap, ES8326_ANA_MICBIAS, 0x4f); 854 - regmap_write(es8326->regmap, ES8326_SYS_BIAS, 0x08); 855 803 regmap_write(es8326->regmap, ES8326_ANA_VSEL, 0x7F); 856 804 /* select vdda as micbias source */ 857 805 regmap_write(es8326->regmap, ES8326_VMIDLOW, 0x23); ··· 876 830 ((es8326->version == ES8326_VERSION_B) ? 877 831 (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol) : 878 832 (ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol | 0x04))); 833 + regmap_write(es8326->regmap, ES8326_HP_VOL, 0x11); 879 834 880 835 es8326->jack_remove_retry = 0; 881 836 es8326->hp = 0;